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