Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/share/et/et_h.awk @ 68:5028fdace37b
planemo upload commit 2e9511a184a1ca667c7be0c6321a36dc4e3d116d
author | jpayne |
---|---|
date | Tue, 18 Mar 2025 16:23:26 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
67:0e9998148a16 | 68:5028fdace37b |
---|---|
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 | |
79 tab_base_high = int(table_number / mod_base) | |
80 tab_base_sign = 1; | |
81 | |
82 # figure out: table_number_base=table_number*256 | |
83 tab_base_low = tab_base_low * 256 | |
84 tab_base_high = (tab_base_high * 256) + \ | |
85 int(tab_base_low / mod_base) | |
86 tab_base_low = tab_base_low % mod_base | |
87 | |
88 if (table_number > 128*256*256) { | |
89 # figure out: table_number_base -= 256*256*256*256 | |
90 # sub_high, sub_low is 256*256*256*256 | |
91 sub_low = 256*256*256 % mod_base | |
92 sub_high = int(256*256*256 / mod_base) | |
93 | |
94 sub_low = sub_low * 256 | |
95 sub_high = (sub_high * 256) + int(sub_low / mod_base) | |
96 sub_low = sub_low % mod_base | |
97 | |
98 tab_base_low = sub_low - tab_base_low; | |
99 tab_base_high = sub_high - tab_base_high; | |
100 tab_base_sign = -1; | |
101 if (tab_base_low < 0) { | |
102 tab_base_low = tab_base_low + mod_base | |
103 tab_base_high-- | |
104 } | |
105 } | |
106 curr_low = tab_base_low | |
107 curr_high = tab_base_high | |
108 curr_sign = tab_base_sign | |
109 print "/*" > outfile | |
110 print " * " outfile ":" > outfile | |
111 print " * This file is automatically generated; please do not edit it." > outfile | |
112 print " */" > outfile | |
113 print "" > outfile | |
114 print "#include <com_err.h>" > outfile | |
115 print "" > outfile | |
116 table_item_count = 0 | |
117 } | |
118 | |
119 /^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,/ { | |
120 tag=substr($2,1,length($2)-1) | |
121 if (curr_high == 0) { | |
122 printf "#define %-40s (%dL)\n", tag, \ | |
123 curr_sign*curr_low > outfile | |
124 } else { | |
125 printf "#define %-40s (%d%06dL)\n", tag, curr_high*curr_sign, \ | |
126 curr_low > outfile | |
127 } | |
128 curr_low += curr_sign; | |
129 if (curr_low >= mod_base) { | |
130 curr_low -= mod_base; | |
131 curr_high++ | |
132 } | |
133 if (curr_low < 0) { | |
134 cur_low += mod_base | |
135 cur_high-- | |
136 } | |
137 } | |
138 | |
139 END { | |
140 if (table_item_count > 256) { | |
141 print "Error table too large!" | "cat 1>&2" | |
142 exit 1 | |
143 } | |
144 if (tab_base_high == 0) { | |
145 print "#define ERROR_TABLE_BASE_" table_name " (" \ | |
146 sprintf("%d", tab_base_sign*tab_base_low) \ | |
147 "L)" > outfile | |
148 } else { | |
149 print "#define ERROR_TABLE_BASE_" table_name " (" \ | |
150 sprintf("%d%06d", tab_base_sign*tab_base_high, \ | |
151 tab_base_low) "L)" > outfile | |
152 } | |
153 print "" > outfile | |
154 print "extern const struct error_table et_" table_name "_error_table;" > outfile | |
155 print "" > outfile | |
156 print "#if !defined(_WIN32)" > outfile | |
157 print "/* for compatibility with older versions... */" > outfile | |
158 print "extern void initialize_" table_name "_error_table (void) /*@modifies internalState@*/;" > outfile | |
159 print "#else" > outfile | |
160 print "#define initialize_" table_name "_error_table()" > outfile | |
161 print "#endif" > outfile | |
162 print "" > outfile | |
163 print "#if !defined(_WIN32)" > outfile | |
164 print "#define init_" table_name "_err_tbl initialize_" table_name "_error_table" > outfile | |
165 print "#define " table_name "_err_base ERROR_TABLE_BASE_" table_name > outfile | |
166 print "#endif" > outfile | |
167 } | |
168 |