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 }