]>
Commit | Line | Data |
---|---|---|
3839e657 TT |
1 | BEGIN { |
2 | char_shift=64 | |
3 | ## "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_"; | |
4 | c2n["A"]=1 | |
5 | c2n["B"]=2 | |
6 | c2n["C"]=3 | |
7 | c2n["D"]=4 | |
8 | c2n["E"]=5 | |
9 | c2n["F"]=6 | |
10 | c2n["G"]=7 | |
11 | c2n["H"]=8 | |
12 | c2n["I"]=9 | |
13 | c2n["J"]=10 | |
14 | c2n["K"]=11 | |
15 | c2n["L"]=12 | |
16 | c2n["M"]=13 | |
17 | c2n["N"]=14 | |
18 | c2n["O"]=15 | |
19 | c2n["P"]=16 | |
20 | c2n["Q"]=17 | |
21 | c2n["R"]=18 | |
22 | c2n["S"]=19 | |
23 | c2n["T"]=20 | |
24 | c2n["U"]=21 | |
25 | c2n["V"]=22 | |
26 | c2n["W"]=23 | |
27 | c2n["X"]=24 | |
28 | c2n["Y"]=25 | |
29 | c2n["Z"]=26 | |
30 | c2n["a"]=27 | |
31 | c2n["b"]=28 | |
32 | c2n["c"]=29 | |
33 | c2n["d"]=30 | |
34 | c2n["e"]=31 | |
35 | c2n["f"]=32 | |
36 | c2n["g"]=33 | |
37 | c2n["h"]=34 | |
38 | c2n["i"]=35 | |
39 | c2n["j"]=36 | |
40 | c2n["k"]=37 | |
41 | c2n["l"]=38 | |
42 | c2n["m"]=39 | |
43 | c2n["n"]=40 | |
44 | c2n["o"]=41 | |
45 | c2n["p"]=42 | |
46 | c2n["q"]=43 | |
47 | c2n["r"]=44 | |
48 | c2n["s"]=45 | |
49 | c2n["t"]=46 | |
50 | c2n["u"]=47 | |
51 | c2n["v"]=48 | |
52 | c2n["w"]=49 | |
53 | c2n["x"]=50 | |
54 | c2n["y"]=51 | |
55 | c2n["z"]=52 | |
56 | c2n["0"]=53 | |
57 | c2n["1"]=54 | |
58 | c2n["2"]=55 | |
59 | c2n["3"]=56 | |
60 | c2n["4"]=57 | |
61 | c2n["5"]=58 | |
62 | c2n["6"]=59 | |
63 | c2n["7"]=60 | |
64 | c2n["8"]=61 | |
65 | c2n["9"]=62 | |
66 | c2n["_"]=63 | |
67 | } | |
68 | /^#/ { next } | |
69 | /^[ \t]*(error_table|et)[ \t]+[a-zA-Z][a-zA-Z0-9_]+/ { | |
70 | table_number = 0 | |
71 | table_name = $2 | |
72 | mod_base = 1000000 | |
73 | for(i=1; i<=length(table_name); i++) { | |
74 | table_number=(table_number*char_shift)+c2n[substr(table_name,i,1)] | |
75 | } | |
76 | # We start playing *_high, *low games here because the some | |
77 | # awk programs do not have the necessary precision (sigh) | |
78 | tab_base_low = table_number % mod_base | |
b6627cdd TT |
79 | if (tab_base_low < 0) { |
80 | # Work around stupid bug in the ARM libm | |
81 | tab_base_low = tab_base_low + mod_base | |
82 | } | |
3839e657 TT |
83 | tab_base_high = int(table_number / mod_base) |
84 | tab_base_sign = 1; | |
85 | ||
86 | # figure out: table_number_base=table_number*256 | |
87 | tab_base_low = tab_base_low * 256 | |
88 | tab_base_high = (tab_base_high * 256) + \ | |
89 | int(tab_base_low / mod_base) | |
90 | tab_base_low = tab_base_low % mod_base | |
b6627cdd TT |
91 | if (tab_base_low < 0) { |
92 | # Work around stupid bug in the ARM libm | |
93 | tab_base_low = tab_base_low + mod_base | |
94 | } | |
3839e657 TT |
95 | |
96 | if (table_number > 128*256*256) { | |
97 | # figure out: table_number_base -= 256*256*256*256 | |
98 | # sub_high, sub_low is 256*256*256*256 | |
99 | sub_low = 256*256*256 % mod_base | |
100 | sub_high = int(256*256*256 / mod_base) | |
101 | ||
102 | sub_low = sub_low * 256 | |
103 | sub_high = (sub_high * 256) + int(sub_low / mod_base) | |
104 | sub_low = sub_low % mod_base | |
105 | ||
106 | tab_base_low = sub_low - tab_base_low; | |
107 | tab_base_high = sub_high - tab_base_high; | |
108 | tab_base_sign = -1; | |
109 | if (tab_base_low < 0) { | |
110 | tab_base_low = tab_base_low + mod_base | |
111 | tab_base_high-- | |
112 | } | |
113 | } | |
114 | curr_low = tab_base_low | |
115 | curr_high = tab_base_high | |
116 | curr_sign = tab_base_sign | |
117 | print "/*" > outfile | |
118 | print " * " outfile ":" > outfile | |
119 | print " * This file is automatically generated; please do not edit it." > outfile | |
120 | print " */" > outfile | |
3839e657 | 121 | print "" > outfile |
91835c15 | 122 | print "#include <et/com_err.h>" > outfile |
00aba967 | 123 | print "" > outfile |
3839e657 TT |
124 | } |
125 | ||
126 | /^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,/ { | |
127 | tag=substr($2,1,length($2)-1) | |
128 | if (curr_high == 0) { | |
129 | printf "#define %-40s (%dL)\n", tag, \ | |
130 | curr_sign*curr_low > outfile | |
131 | } else { | |
132 | printf "#define %-40s (%d%06dL)\n", tag, curr_high*curr_sign, \ | |
133 | curr_low > outfile | |
134 | } | |
135 | curr_low += curr_sign; | |
136 | if (curr_low >= mod_base) { | |
137 | curr_low -= mod_base; | |
138 | curr_high++ | |
139 | } | |
140 | if (curr_low < 0) { | |
141 | cur_low += mod_base | |
142 | cur_high-- | |
143 | } | |
144 | } | |
145 | ||
146 | END { | |
00aba967 | 147 | print "extern const struct error_table et_" table_name "_error_table;" > outfile |
291c9049 | 148 | print "extern void initialize_" table_name "_error_table(void);" > outfile |
3839e657 TT |
149 | if (tab_base_high == 0) { |
150 | print "#define ERROR_TABLE_BASE_" table_name " (" \ | |
151 | sprintf("%d", tab_base_sign*tab_base_low) \ | |
152 | "L)" > outfile | |
153 | } else { | |
154 | print "#define ERROR_TABLE_BASE_" table_name " (" \ | |
155 | sprintf("%d%06d", tab_base_sign*tab_base_high, \ | |
156 | tab_base_low) "L)" > outfile | |
157 | } | |
158 | print "" > outfile | |
159 | print "/* for compatibility with older versions... */" > outfile | |
160 | print "#define init_" table_name "_err_tbl initialize_" table_name "_error_table" > outfile | |
161 | print "#define " table_name "_err_base ERROR_TABLE_BASE_" table_name > outfile | |
162 | } |