Mercurial > repos > rliterman > csp2
comparison CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/share/et/et_c.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 | |
77 # We start playing *_high, *low games here because the some | |
78 # awk programs do not have the necessary precision (sigh) | |
79 tab_base_low = table_number % mod_base | |
80 tab_base_high = int(table_number / mod_base) | |
81 tab_base_sign = 1; | |
82 | |
83 # figure out: table_number_base=table_number*256 | |
84 tab_base_low = tab_base_low * 256 | |
85 tab_base_high = (tab_base_high * 256) + \ | |
86 int(tab_base_low / mod_base) | |
87 tab_base_low = tab_base_low % mod_base | |
88 | |
89 if (table_number > 128*256*256) { | |
90 # figure out: table_number_base -= 256*256*256*256 | |
91 # sub_high, sub_low is 256*256*256*256 | |
92 sub_low = 256*256*256 % mod_base | |
93 sub_high = int(256*256*256 / mod_base) | |
94 | |
95 sub_low = sub_low * 256 | |
96 sub_high = (sub_high * 256) + int(sub_low / mod_base) | |
97 sub_low = sub_low % mod_base | |
98 | |
99 tab_base_low = sub_low - tab_base_low; | |
100 tab_base_high = sub_high - tab_base_high; | |
101 tab_base_sign = -1; | |
102 if (tab_base_low < 0) { | |
103 tab_base_low = tab_base_low + mod_base | |
104 tab_base_high-- | |
105 } | |
106 } | |
107 print "/*" > outfile | |
108 print " * " outfile ":" > outfile | |
109 print " * This file is automatically generated; please do not edit it." > outfile | |
110 print " */" > outfile | |
111 | |
112 print "#if defined(_WIN32)" > outfile | |
113 print "# include \"win-mac.h\"" > outfile | |
114 print "#endif" > outfile | |
115 print "" > outfile | |
116 print "#if !defined(_WIN32)" > outfile | |
117 print "extern void initialize_" table_name "_error_table (void);" > outfile | |
118 print "#endif" > outfile | |
119 print "" > outfile | |
120 print "#define N_(x) (x)" > outfile | |
121 print "" > outfile | |
122 print "/* Lclint doesn't handle null annotations on arrays" > outfile | |
123 print " properly, so we need this typedef in each" > outfile | |
124 print " generated .c file. */" > outfile | |
125 print "/*@-redef@*/" > outfile | |
126 print "typedef /*@null@*/ const char *ncptr;" > outfile | |
127 print "/*@=redef@*/" > outfile | |
128 print "" > outfile | |
129 print "static ncptr const text[] = {" > outfile | |
130 table_item_count = 0 | |
131 } | |
132 | |
133 (continuation == 1) && ($0 ~ /\\[ \t]*$/) { | |
134 text=substr($0,1,length($0)-1); | |
135 # printf "\t\t\"%s\"\n", text > outfile | |
136 cont_buf=cont_buf text; | |
137 } | |
138 | |
139 (continuation == 1) && ($0 ~ /"[ \t]*$/) { | |
140 # printf "\t\t\"%s,\n", $0 > outfile | |
141 printf "\tN_(%s),\n", cont_buf $0 > outfile | |
142 continuation = 0; | |
143 } | |
144 | |
145 /^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*$/ { | |
146 table_item_count++ | |
147 skipone=1 | |
148 next | |
149 } | |
150 | |
151 /^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*"[ \t]*$/ { | |
152 text="" | |
153 for (i=3; i<=NF; i++) { | |
154 text = text FS $i | |
155 } | |
156 text=substr(text,2,length(text)-1); | |
157 printf "\tN_(%s),\n", text > outfile | |
158 table_item_count++ | |
159 } | |
160 | |
161 /^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*\\[ \t]*$/ { | |
162 text="" | |
163 for (i=3; i<=NF; i++) { | |
164 text = text FS $i | |
165 } | |
166 text=substr(text,2,length(text)-2); | |
167 # printf "\t%s\"\n", text > outfile | |
168 cont_buf=text | |
169 continuation++; | |
170 } | |
171 | |
172 /^[ \t]*".*\\[ \t]*$/ { | |
173 if (skipone) { | |
174 text=substr($0,1,length($0)-1); | |
175 # printf "\t%s\"\n", text > outfile | |
176 cont_buf=text | |
177 continuation++; | |
178 } | |
179 skipone=0 | |
180 } | |
181 | |
182 { | |
183 if (skipone) { | |
184 printf "\tN_(%s),\n", $0 > outfile | |
185 } | |
186 skipone=0 | |
187 } | |
188 END { | |
189 if (table_item_count > 256) { | |
190 print "Error table too large!" | "cat 1>&2" | |
191 exit 1 | |
192 } | |
193 # Put text domain and/or localedir at the end of the list. | |
194 if (textdomain) { | |
195 printf " \"%s\", /* Text domain */\n", textdomain > outfile | |
196 if (localedir) { | |
197 printf " \"%s\", /* Locale dir */\n", localedir > outfile | |
198 } | |
199 } | |
200 print " 0" > outfile | |
201 print "};" > outfile | |
202 print "" > outfile | |
203 print "#include <com_err.h>" > outfile | |
204 print "" > outfile | |
205 if (tab_base_high == 0) { | |
206 print "const struct error_table et_" table_name "_error_table = { text, " \ | |
207 sprintf("%dL, %d };", tab_base_sign*tab_base_low, \ | |
208 table_item_count) > outfile | |
209 } else { | |
210 print "const struct error_table et_" table_name "_error_table = { text, " \ | |
211 sprintf("%d%06dL, %d };", tab_base_sign*tab_base_high, \ | |
212 tab_base_low, table_item_count) > outfile | |
213 } | |
214 print "" > outfile | |
215 print "#if !defined(_WIN32)" > outfile | |
216 print "void initialize_" table_name "_error_table (void)" > outfile | |
217 print " /*@modifies internalState@*/" > outfile | |
218 print "{" > outfile | |
219 print " (void) add_error_table (&et_" table_name "_error_table);" > outfile | |
220 print "}" > outfile | |
221 print "#endif" > outfile | |
222 } |