et_c.awk revision e0ed7404719a9ddd2ba427a80db5365c8bad18c0
1e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectBEGIN { 
2e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectif ( length(outfn) == 0) {
3e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	outfn = outfile
4e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
5e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectchar_shift=64
6e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project## "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
7e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["A"]=1
8e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["B"]=2
9e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["C"]=3
10e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["D"]=4
11e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["E"]=5
12e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["F"]=6
13e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["G"]=7
14e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["H"]=8
15e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["I"]=9
16e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["J"]=10
17e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["K"]=11
18e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["L"]=12
19e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["M"]=13
20e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["N"]=14
21e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["O"]=15
22e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["P"]=16
23e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["Q"]=17
24e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["R"]=18
25e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["S"]=19
26e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["T"]=20
27e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["U"]=21
28e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["V"]=22
29e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["W"]=23
30e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["X"]=24
31e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["Y"]=25
325c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenc2n["Z"]=26
335c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenenc2n["a"]=27
34e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["b"]=28
35e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["c"]=29
36e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["d"]=30
37e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["e"]=31
38e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["f"]=32
39e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["g"]=33
40e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["h"]=34
41e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["i"]=35
42e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["j"]=36
43e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["k"]=37
44e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["l"]=38
45e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["m"]=39
46e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["n"]=40
47e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["o"]=41
48e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["p"]=42
49e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["q"]=43
50e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["r"]=44
51e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["s"]=45
52e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["t"]=46
53e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["u"]=47
54e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["v"]=48
55e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["w"]=49
56e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["x"]=50
57e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["y"]=51
58e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["z"]=52
59e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["0"]=53
60e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["1"]=54
61e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["2"]=55
62e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["3"]=56
63e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["4"]=57
64e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["5"]=58
65e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["6"]=59
66e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["7"]=60
67e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["8"]=61
68e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["9"]=62
69e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Projectc2n["_"]=63
70e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
71e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^#/ { next }
72e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(error_table|et)[ \t]+[a-zA-Z][a-zA-Z0-9_]+/ {
73e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	table_number = 0
74e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	mod_base = 1000000
75e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (NF > 2) {
76e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    table_name = $3
77e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    base_name = $2
78e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	} else {
79e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    table_name = $2
80e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    base_name = table_name
81e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
82e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	for(i=1; i<=length(base_name); i++) {
83e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    table_number=(table_number*char_shift)+c2n[substr(base_name,i,1)]
84e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
85e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
86e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	# We start playing *_high, *low games here because the some
87e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	# awk programs do not have the necessary precision (sigh)
88e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	tab_base_low = table_number % mod_base
89e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (tab_base_low < 0) {
90e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		# Work around stupid bug in the ARM libm
91e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		tab_base_low = tab_base_low + mod_base
92e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
93e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	tab_base_high = int(table_number / mod_base)
94e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	tab_base_sign = 1;
95e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
96e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	# figure out: table_number_base=table_number*256
97e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	tab_base_low = tab_base_low * 256
98e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	tab_base_high = (tab_base_high * 256) + \
99e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project			int(tab_base_low / mod_base)
100e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	tab_base_low = tab_base_low % mod_base
101e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (tab_base_low < 0) {
102e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		# Work around stupid bug in the ARM libm
103e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		tab_base_low = tab_base_low + mod_base
104e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
1055c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
1065c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen	if (table_number > 128*256*256) {
1075c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen		# figure out:  table_number_base -= 256*256*256*256
108e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		# sub_high, sub_low is 256*256*256*256
109e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		sub_low = 256*256*256 % mod_base
110e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		sub_high = int(256*256*256 / mod_base)
111e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
112e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		sub_low = sub_low * 256
113e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		sub_high = (sub_high * 256) + int(sub_low / mod_base)
114e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		sub_low = sub_low % mod_base
115e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
116e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		tab_base_low = sub_low - tab_base_low;
1175c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen		tab_base_high = sub_high - tab_base_high;
1185c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen		tab_base_sign = -1;
1195c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen		if (tab_base_low < 0) {
120e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project			tab_base_low = tab_base_low + mod_base
1215c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen			tab_base_high--
1225c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen		}
1235c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen	}
124e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "/*" > outfile
125e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print " * " outfn ":" > outfile
126e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print " * This file is automatically generated; please do not edit it." > outfile
127e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print " */" > outfile
1285c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen
1295c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen	print "" > outfile
1305c65c3a0f42e174e47fecd4e569606003217ff4eMartijn Coenen	print "#include <stdlib.h>" > outfile
131e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
132e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "#define N_(a) a" > outfile
133e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
134e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "static const char * const text[] = {" > outfile
135e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	table_item_count = 0
136e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
137e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
138e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project(continuation == 1) && ($0 ~ /\\[ \t]*$/) {
139e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	text=substr($0,1,length($0)-1);
140e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#	printf "\t\t\"%s\"\n", text > outfile
141e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	cont_buf=cont_buf text;
142e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
143e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
144e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project(continuation == 1) && ($0 ~ /"[ \t]*$/) {
145e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#	printf "\t\t\"%s,\n", $0 > outfile
146e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	printf "\tN_(%s),\n", cont_buf $0 > outfile
147e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	continuation = 0;
148e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
149e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
150e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[^ \t]/ {
151e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	# Be tolerant to missing whitespace after `,' ...
152e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	sub(/,/, ", ")
153e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
154e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
155e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*$/ {
156e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	table_item_count++
157e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	skipone=1
158e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	next
159e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
160e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
161e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*"[ \t]*$/ {
162e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	text=""
163e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	for (i=3; i<=NF; i++) { 
164e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    text = text FS $i
165e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
166e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	text=substr(text,2,length(text)-1);
167e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	printf "\tN_(%s),\n", text > outfile
168e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	table_item_count++
169e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
170e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
171e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*\\[ \t]*$/ {
172e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	text=""
173e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	for (i=3; i<=NF; i++) { 
174e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    text = text FS $i
175e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
176e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	text=substr(text,2,length(text)-2);
177e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#	printf "\t%s\"\n", text > outfile
178e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	cont_buf=text
179e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	table_item_count++
180e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	continuation++;
181e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
182e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
183e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*".*\\[ \t]*$/ {
184e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (skipone) {
185e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    text=substr($0,1,length($0)-1);
186e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project#	    printf "\t%s\"\n", text > outfile
187e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    cont_buf=text
188e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    continuation++;
189e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
190e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	skipone=0
191e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
192e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
193e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project{ 
194e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (skipone) {
195e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	    printf "\tN_(%s),\n", $0 > outfile
196e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
197e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	skipone=0
198e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
199e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
200e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(prefix)$/ {
201e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	prefix_str = ""
202e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
203e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
204e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(prefix)[ \t]+[A-Z_0-9]+/ {
205e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	prefix_str = $2 "_"
206e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
207e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
208e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project/^[ \t]*(index)[ \t]+[A-Z_0-9]+/ {
209e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	new_idx = $2
210e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	for (i = table_item_count ; i < new_idx; i++) {
211e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		printf "\tN_(\"Reserved %s error (%d)\"),\n", \
212e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project			table_name, table_item_count++ > outfile
213e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
214e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
215e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project
216e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source ProjectEND {
217e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    0" > outfile
218e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "};" > outfile
219e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
220e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "struct error_table {" > outfile
221e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    char const * const * msgs;" > outfile
222e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    long base;" > outfile
223e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    int n_msgs;" > outfile
224e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "};" > outfile
225e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "struct et_list {" > outfile
226e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    struct et_list *next;" > outfile
227e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    const struct error_table * table;" > outfile
228e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "};" > outfile
229e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "extern struct et_list *_et_list;" > outfile
230e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
231e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	if (tab_base_high == 0) {
232e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		print "const struct error_table et_" table_name "_error_table = { text, " \
233e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		sprintf("%dL, %d };", tab_base_sign*tab_base_low, \
234e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		table_item_count) > outfile
235e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	} else {
236e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		print "const struct error_table et_" table_name "_error_table = { text, " \
237e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		sprintf("%d%06dL, %d };", tab_base_sign*tab_base_high, \
238e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project		tab_base_low, table_item_count) > outfile
239e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	}
240e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
241e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "static struct et_list link = { 0, 0 };" > outfile
242e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
243e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "void initialize_" table_name "_error_table_r(struct et_list **list);" > outfile
244e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "void initialize_" table_name "_error_table(void);" > outfile
245e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
246e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "void initialize_" table_name "_error_table(void) {" > outfile
247e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    initialize_" table_name "_error_table_r(&_et_list);" > outfile
248e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "}" > outfile
249e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
250e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "/* For Heimdal compatibility */" > outfile
251e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "void initialize_" table_name "_error_table_r(struct et_list **list)" > outfile
252e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "{" > outfile
253e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    struct et_list *et, **end;" > outfile
254e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "" > outfile
255e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    for (end = list, et = *list; et; end = &et->next, et = et->next)" > outfile
256e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "        if (et->table->msgs == text)" > outfile
257e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "            return;" > outfile
258e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    et = malloc(sizeof(struct et_list));" > outfile
259e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    if (et == 0) {" > outfile
260e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "        if (!link.table)" > outfile
261e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "            et = &link;" > outfile
262e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "        else" > outfile
263e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "            return;" > outfile
264e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    }" > outfile
265e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    et->table = &et_" table_name "_error_table;" > outfile
266e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    et->next = 0;" > outfile
267e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "    *end = et;" > outfile
268e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project	print "}" > outfile
269e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project}
270e9df6ba5a8fcccf306a80b1670b423be8fe7746The Android Open Source Project