BEGIN { 
if ( length(outfn) == 0) {
	outfn = outfile
}
char_shift=64
## "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_";
c2n["A"]=1
c2n["B"]=2
c2n["C"]=3
c2n["D"]=4
c2n["E"]=5
c2n["F"]=6
c2n["G"]=7
c2n["H"]=8
c2n["I"]=9
c2n["J"]=10
c2n["K"]=11
c2n["L"]=12
c2n["M"]=13
c2n["N"]=14
c2n["O"]=15
c2n["P"]=16
c2n["Q"]=17
c2n["R"]=18
c2n["S"]=19
c2n["T"]=20
c2n["U"]=21
c2n["V"]=22
c2n["W"]=23
c2n["X"]=24
c2n["Y"]=25
c2n["Z"]=26
c2n["a"]=27
c2n["b"]=28
c2n["c"]=29
c2n["d"]=30
c2n["e"]=31
c2n["f"]=32
c2n["g"]=33
c2n["h"]=34
c2n["i"]=35
c2n["j"]=36
c2n["k"]=37
c2n["l"]=38
c2n["m"]=39
c2n["n"]=40
c2n["o"]=41
c2n["p"]=42
c2n["q"]=43
c2n["r"]=44
c2n["s"]=45
c2n["t"]=46
c2n["u"]=47
c2n["v"]=48
c2n["w"]=49
c2n["x"]=50
c2n["y"]=51
c2n["z"]=52
c2n["0"]=53
c2n["1"]=54
c2n["2"]=55
c2n["3"]=56
c2n["4"]=57
c2n["5"]=58
c2n["6"]=59
c2n["7"]=60
c2n["8"]=61
c2n["9"]=62
c2n["_"]=63
}
/^#/ { next }
/^[ \t]*(error_table|et)[ \t]+[a-zA-Z][a-zA-Z0-9_]+/ {
	table_number = 0
	mod_base = 1000000
	if (NF > 2) {
	    table_name = $3
	    base_name = $2
	} else {
	    table_name = $2
	    base_name = table_name
	}
	for(i=1; i<=length(base_name); i++) {
	    table_number=(table_number*char_shift)+c2n[substr(base_name,i,1)]
	}

	# We start playing *_high, *low games here because the some
	# awk programs do not have the necessary precision (sigh)
	tab_base_low = table_number % mod_base
	if (tab_base_low < 0) {
		# Work around stupid bug in the ARM libm
		tab_base_low = tab_base_low + mod_base
	}
	tab_base_high = int(table_number / mod_base)
	tab_base_sign = 1;

	# figure out: table_number_base=table_number*256
	tab_base_low = tab_base_low * 256
	tab_base_high = (tab_base_high * 256) + \
			int(tab_base_low / mod_base)
	tab_base_low = tab_base_low % mod_base
	if (tab_base_low < 0) {
		# Work around stupid bug in the ARM libm
		tab_base_low = tab_base_low + mod_base
	}

	if (table_number > 128*256*256) {
		# figure out:  table_number_base -= 256*256*256*256
		# sub_high, sub_low is 256*256*256*256
		sub_low = 256*256*256 % mod_base
		sub_high = int(256*256*256 / mod_base)

		sub_low = sub_low * 256
		sub_high = (sub_high * 256) + int(sub_low / mod_base)
		sub_low = sub_low % mod_base

		tab_base_low = sub_low - tab_base_low;
		tab_base_high = sub_high - tab_base_high;
		tab_base_sign = -1;
		if (tab_base_low < 0) {
			tab_base_low = tab_base_low + mod_base
			tab_base_high--
		}
	}
	print "/*" > outfile
	print " * " outfn ":" > outfile
	print " * This file is automatically generated; please do not edit it." > outfile
	print " */" > outfile

	print "" > outfile
	print "#include <stdlib.h>" > outfile
	print "" > outfile
	print "#define N_(a) a" > outfile
	print "" > outfile
	print "static const char * const text[] = {" > outfile
	table_item_count = 0
}

(continuation == 1) && ($0 ~ /\\[ \t]*$/) {
	text=substr($0,1,length($0)-1);
#	printf "\t\t\"%s\"\n", text > outfile
	cont_buf=cont_buf text;
}

(continuation == 1) && ($0 ~ /"[ \t]*$/) {
#	printf "\t\t\"%s,\n", $0 > outfile
	printf "\tN_(%s),\n", cont_buf $0 > outfile
	continuation = 0;
}

/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[^ \t]/ {
	# Be tolerant to missing whitespace after `,' ...
	sub(/,/, ", ")
}

/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*$/ {
	table_item_count++
	skipone=1
	next
}

/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*"[ \t]*$/ {
	text=""
	for (i=3; i<=NF; i++) { 
	    text = text FS $i
	}
	text=substr(text,2,length(text)-1);
	printf "\tN_(%s),\n", text > outfile
	table_item_count++
}

/^[ \t]*(error_code|ec)[ \t]+[A-Z_0-9]+,[ \t]*".*\\[ \t]*$/ {
	text=""
	for (i=3; i<=NF; i++) { 
	    text = text FS $i
	}
	text=substr(text,2,length(text)-2);
#	printf "\t%s\"\n", text > outfile
	cont_buf=text
	table_item_count++
	continuation++;
}

/^[ \t]*".*\\[ \t]*$/ {
	if (skipone) {
	    text=substr($0,1,length($0)-1);
#	    printf "\t%s\"\n", text > outfile
	    cont_buf=text
	    continuation++;
	}
	skipone=0
}

{ 
	if (skipone) {
	    printf "\tN_(%s),\n", $0 > outfile
	}
	skipone=0
}

/^[ \t]*(prefix)$/ {
	prefix_str = ""
}

/^[ \t]*(prefix)[ \t]+[A-Z_0-9]+/ {
	prefix_str = $2 "_"
}

/^[ \t]*(index)[ \t]+[A-Z_0-9]+/ {
	new_idx = $2
	for (i = table_item_count ; i < new_idx; i++) {
		printf "\tN_(\"Reserved %s error (%d)\"),\n", \
			table_name, table_item_count++ > outfile
	}
}

END {
	print "    0" > outfile
	print "};" > outfile
	print "" > outfile
	print "struct error_table {" > outfile
	print "    char const * const * msgs;" > outfile
	print "    long base;" > outfile
	print "    int n_msgs;" > outfile
	print "};" > outfile
	print "struct et_list {" > outfile
	print "    struct et_list *next;" > outfile
	print "    const struct error_table * table;" > outfile
	print "};" > outfile
	print "extern struct et_list *_et_list;" > outfile
	print "" > outfile
	if (tab_base_high == 0) {
		print "const struct error_table et_" table_name "_error_table = { text, " \
		sprintf("%dL, %d };", tab_base_sign*tab_base_low, \
		table_item_count) > outfile
	} else {
		print "const struct error_table et_" table_name "_error_table = { text, " \
		sprintf("%d%06dL, %d };", tab_base_sign*tab_base_high, \
		tab_base_low, table_item_count) > outfile
	}
	print "" > outfile
	print "static struct et_list link = { 0, 0 };" > outfile
	print "" > outfile
	print "void initialize_" table_name "_error_table_r(struct et_list **list);" > outfile
	print "void initialize_" table_name "_error_table(void);" > outfile
	print "" > outfile
	print "void initialize_" table_name "_error_table(void) {" > outfile
	print "    initialize_" table_name "_error_table_r(&_et_list);" > outfile
	print "}" > outfile
	print "" > outfile
	print "/* For Heimdal compatibility */" > outfile
	print "void initialize_" table_name "_error_table_r(struct et_list **list)" > outfile
	print "{" > outfile
	print "    struct et_list *et, **end;" > outfile
	print "" > outfile
	print "    for (end = list, et = *list; et; end = &et->next, et = et->next)" > outfile
	print "        if (et->table->msgs == text)" > outfile
	print "            return;" > outfile
	print "    et = malloc(sizeof(struct et_list));" > outfile
	print "    if (et == 0) {" > outfile
	print "        if (!link.table)" > outfile
	print "            et = &link;" > outfile
	print "        else" > outfile
	print "            return;" > outfile
	print "    }" > outfile
	print "    et->table = &et_" table_name "_error_table;" > outfile
	print "    et->next = 0;" > outfile
	print "    *end = et;" > outfile
	print "}" > outfile
}
