4edc47b8 |
1 | #! /usr/bin/awk -f |
4edc47b8 |
2 | |
0f00dc4c |
3 | function banner(name, s, i) |
4edc47b8 |
4 | { |
5 | s = "/*----- " name " "; |
6 | while (length(s) < 75) s = s "-"; |
7 | return (s "*/"); |
8 | } |
9 | |
10 | function fix(name) |
11 | { |
12 | gsub(/[^0-9A-Za-z_]+/, "_", name); |
13 | return (name); |
14 | } |
15 | |
16 | BEGIN { |
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 | |
35 | function 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 | |
53 | function 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 | |
82 | END { |
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 | } |