119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectBEGIN { 
219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectif ( length(outfn) == 0) {
319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	outfn = outfile
419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectchar_shift=64
619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project## "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["A"]=1
819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["B"]=2
919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["C"]=3
1019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["D"]=4
1119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["E"]=5
1219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["F"]=6
1319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["G"]=7
1419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["H"]=8
1519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["I"]=9
1619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["J"]=10
1719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["K"]=11
1819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["L"]=12
1919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["M"]=13
2019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["N"]=14
2119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["O"]=15
2219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["P"]=16
2319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["Q"]=17
2419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["R"]=18
2519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["S"]=19
2619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["T"]=20
2719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["U"]=21
2819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["V"]=22
2919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["W"]=23
3019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["X"]=24
3119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["Y"]=25
3219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["Z"]=26
3319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["a"]=27
3419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["b"]=28
3519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["c"]=29
3619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["d"]=30
3719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["e"]=31
3819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["f"]=32
3919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["g"]=33
4019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["h"]=34
4119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["i"]=35
4219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["j"]=36
4319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["k"]=37
4419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["l"]=38
4519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["m"]=39
4619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["n"]=40
4719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["o"]=41
4819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["p"]=42
4919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["q"]=43
5019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["r"]=44
5119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["s"]=45
5219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["t"]=46
5319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["u"]=47
5419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["v"]=48
5519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["w"]=49
5619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["x"]=50
5719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["y"]=51
5819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["z"]=52
5919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["0"]=53
6019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["1"]=54
6119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["2"]=55
6219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["3"]=56
6319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["4"]=57
6419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["5"]=58
6519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["6"]=59
6619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["7"]=60
6719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["8"]=61
6819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["9"]=62
6919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Projectc2n["_"]=63
7019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
7119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^#/ { next }
7219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(error_table|et)[ \t]+[a-zA-Z][a-zA-Z0-9_]+/ {
7319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	table_number = 0
7419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	mod_base = 1000000
7519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (NF > 2) {
7619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    table_name = $3
7719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    base_name = $2
7819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	} else {
7919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    table_name = $2
8019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    base_name = table_name
8119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
8219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	for(i=1; i<=length(base_name); i++) {
8319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    table_number=(table_number*char_shift)+c2n[substr(base_name,i,1)]
8419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
8519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
8619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	# We start playing *_high, *low games here because the some
8719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	# awk programs do not have the necessary precision (sigh)
8819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	tab_base_low = table_number % mod_base
8919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (tab_base_low < 0) {
9019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		# Work around stupid bug in the ARM libm
9119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		tab_base_low = tab_base_low + mod_base
9219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
9319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	tab_base_high = int(table_number / mod_base)
9419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	tab_base_sign = 1;
9519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
9619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	# figure out: table_number_base=table_number*256
9719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	tab_base_low = tab_base_low * 256
9819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	tab_base_high = (tab_base_high * 256) + \
9919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			int(tab_base_low / mod_base)
10019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	tab_base_low = tab_base_low % mod_base
10119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (tab_base_low < 0) {
10219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		# Work around stupid bug in the ARM libm
10319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		tab_base_low = tab_base_low + mod_base
10419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
10519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
10619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (table_number > 128*256*256) {
10719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		# figure out:  table_number_base -= 256*256*256*256
10819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		# sub_high, sub_low is 256*256*256*256
10919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		sub_low = 256*256*256 % mod_base
11019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		sub_high = int(256*256*256 / mod_base)
11119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
11219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		sub_low = sub_low * 256
11319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		sub_high = (sub_high * 256) + int(sub_low / mod_base)
11419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		sub_low = sub_low % mod_base
11519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
11619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		tab_base_low = sub_low - tab_base_low;
11719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		tab_base_high = sub_high - tab_base_high;
11819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		tab_base_sign = -1;
11919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		if (tab_base_low < 0) {
12019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			tab_base_low = tab_base_low + mod_base
12119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			tab_base_high--
12219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		}
12319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
12419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "/*" > outfile
12519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print " * " outfn ":" > outfile
12619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print " * This file is automatically generated; please do not edit it." > outfile
12719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print " */" > outfile
12819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
12919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
13019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "#include <stdlib.h>" > outfile
13119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
13219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "static const char * const text[] = {" > outfile
13319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	table_item_count = 0
13419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
13519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
13619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project(continuation == 1) && ($0 ~ /\\[ \t]*$/) {
13719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	text=substr($0,1,length($0)-1);
13819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#	printf "\t\t\"%s\"\n", text > outfile
13919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	cont_buf=cont_buf text;
14019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
14119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
14219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project(continuation == 1) && ($0 ~ /"[ \t]*$/) {
14319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#	printf "\t\t\"%s,\n", $0 > outfile
14419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	printf "\t%s,\n", cont_buf $0 > outfile
14519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	continuation = 0;
14619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
14719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
14819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[^ \t]/ {
14919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	# Be tolerant to missing whitespace after `,' ...
15019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	sub(/,/, ", ")
15119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
15219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
15319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*$/ {
15419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	table_item_count++
15519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	skipone=1
15619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	next
15719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
15819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
15919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*"[ \t]*$/ {
16019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	text=""
16119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	for (i=3; i<=NF; i++) { 
16219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    text = text FS $i
16319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
16419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	text=substr(text,2,length(text)-1);
16519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	printf "\t%s,\n", text > outfile
16619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	table_item_count++
16719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
16819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
16919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*\\[ \t]*$/ {
17019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	text=""
17119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	for (i=3; i<=NF; i++) { 
17219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    text = text FS $i
17319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
17419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	text=substr(text,2,length(text)-2);
17519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#	printf "\t%s\"\n", text > outfile
17619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	cont_buf=text
17719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	table_item_count++
17819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	continuation++;
17919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
18019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
18119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*".*\\[ \t]*$/ {
18219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (skipone) {
18319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    text=substr($0,1,length($0)-1);
18419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project#	    printf "\t%s\"\n", text > outfile
18519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    cont_buf=text
18619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    continuation++;
18719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
18819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	skipone=0
18919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
19019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
19119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project{ 
19219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (skipone) {
19319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	    printf "\t%s,\n", $0 > outfile
19419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
19519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	skipone=0
19619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
19719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
19819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(prefix)$/ {
19919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	prefix_str = ""
20019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
20119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
20219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(prefix)[ \t]+[A-Z_0-9]+/ {
20319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	prefix_str = $2 "_"
20419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
20519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
20619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project/^[ \t]*(index)[ \t]+[A-Z_0-9]+/ {
20719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	new_idx = $2
20819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	for (i = table_item_count ; i < new_idx; i++) {
20919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		printf "\t\"Reserved %s error (%d)\",\n", \
21019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project			table_name, table_item_count++ > outfile
21119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
21219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
21319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project
21419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source ProjectEND {
21519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    0" > outfile
21619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "};" > outfile
21719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
21819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "struct error_table {" > outfile
21919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    char const * const * msgs;" > outfile
22019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    long base;" > outfile
22119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    int n_msgs;" > outfile
22219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "};" > outfile
22319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "struct et_list {" > outfile
22419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    struct et_list *next;" > outfile
22519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    const struct error_table * table;" > outfile
22619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "};" > outfile
22719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "extern struct et_list *_et_list;" > outfile
22819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
22919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	if (tab_base_high == 0) {
23019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		print "const struct error_table et_" table_name "_error_table = { text, " \
23119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		sprintf("%dL, %d };", tab_base_sign*tab_base_low, \
23219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		table_item_count) > outfile
23319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	} else {
23419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		print "const struct error_table et_" table_name "_error_table = { text, " \
23519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		sprintf("%d%06dL, %d };", tab_base_sign*tab_base_high, \
23619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project		tab_base_low, table_item_count) > outfile
23719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	}
23819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
23919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "static struct et_list link = { 0, 0 };" > outfile
24019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
24119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "void initialize_" table_name "_error_table_r(struct et_list **list);" > outfile
24219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "void initialize_" table_name "_error_table(void);" > outfile
24319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
24419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "void initialize_" table_name "_error_table(void) {" > outfile
24519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    initialize_" table_name "_error_table_r(&_et_list);" > outfile
24619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "}" > outfile
24719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
24819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "/* For Heimdal compatibility */" > outfile
24919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "void initialize_" table_name "_error_table_r(struct et_list **list)" > outfile
25019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "{" > outfile
25119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    struct et_list *et, **end;" > outfile
25219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "" > outfile
25319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    for (end = list, et = *list; et; end = &et->next, et = et->next)" > outfile
25419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "        if (et->table->msgs == text)" > outfile
25519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "            return;" > outfile
25619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    et = malloc(sizeof(struct et_list));" > outfile
25719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    if (et == 0) {" > outfile
25819dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "        if (!link.table)" > outfile
25919dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "            et = &link;" > outfile
26019dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "        else" > outfile
26119dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "            return;" > outfile
26219dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    }" > outfile
26319dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    et->table = &et_" table_name "_error_table;" > outfile
26419dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    et->next = 0;" > outfile
26519dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "    *end = et;" > outfile
26619dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project	print "}" > outfile
26719dacda2b02bb08c0ffb649f84526b249c749279The Android Open Source Project}
268