math/t/mpreduce: Add a slew more randomized tests.
[u/mdw/catacomb] / math / p-gentab.awk
CommitLineData
4edc47b8 1#! /usr/bin/awk -f
4edc47b8 2
0f00dc4c 3function banner(name, s, i)
4edc47b8 4{
5 s = "/*----- " name " ";
6 while (length(s) < 75) s = s "-";
7 return (s "*/");
8}
9
10function fix(name)
11{
12 gsub(/[^0-9A-Za-z_]+/, "_", name);
13 return (name);
14}
15
16BEGIN {
17 print "/* -*-c-*-";
18 print " *";
3688eb75 19 print " * Table of prime groups [generated]";
4edc47b8 20 print " */";
21 print "";
22 print "#include \"ptab.h\"";
23 print "";
24 print "#define N(x) (sizeof(x)/sizeof(*x))";
25 print "#define MP(x) { x, x + N(x), N(x), 0, MP_CONST, 0 }";
26 print "#define NOMP { 0, 0, 0, 0, 0 }";
27 print "";
28 print banner("Prime data");
29 print "";
30
31 d_i = 0;
32 name = "";
33}
34
35function putmp(x, d)
36{
37 if (!(x in data)) {
38 print "group " name ": missing " x >"/dev/stderr";
39 exit 1;
40 }
41 d = data[x];
42 if (!(d in cache)) {
43 n = "p_" fix(name) "_" x;
44 print "static mpw " n "[] = {";
45 system("./mpdump " d);
46 print "};";
47 print "";
48 cache[d] = n;
49 }
50 mp[x] = cache[d];
51}
52
53function flush()
54{
55 if (name == "") return;
56 print "/* --- Group " name " --- */";
57 delete mp;
58 print "";
59 putmp("p");
60 putmp("q");
61 putmp("g");
62 print "static pdata p_" fix(name) " = {";
63 print " MP(" mp["p"] "),"
64 print " MP(" mp["q"] "),"
65 print " MP(" mp["g"] ")"
66 print "};";
67 print "";
68 dname[d_i++] = name;
69 d[name] = name;
70 r[name] = "p_" fix(name);
71 name = "";
72}
73
74/^[ \t]*(#|$)/ { next; }
75
76$1 == "alias" { flush(); dname[d_i++] = $2; d[$2] = $3; next; }
77
78$1 == "group" { flush(); delete data; name = $2; next; }
79
80{ data[$1] = $2; next; }
81
82END {
83 flush();
84 print banner("Main table");
85 print "";
86 print "const pentry ptab[] = {";
87 for (i = 0; i < d_i; i++) {
88 name = dname[i];
89 rname = d[name];
90 if (!rname in r) {
91 print "group " rname " not found (alias from " name ")" >"/dev/stderr";
92 exit 1;
93 }
94 print " { \"" name "\", &" r[rname] " },";
95 }
96 print " { 0, 0 }";
97 print "};"
98 print "";
99 print banner("That's all, folks");
100}