Mercurial > repos > rliterman > csp2
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/CSP2/CSP2_env/env-d9b9114564458d9d-741b3de822f2aaca6c6caa4325c4afce/share/et/et_c.awk Tue Mar 18 16:23:26 2025 -0400 @@ -0,0 +1,222 @@ +BEGIN { +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 + table_name = $2 + mod_base = 1000000 + for(i=1; i<=length(table_name); i++) { + table_number=(table_number*char_shift)+c2n[substr(table_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 + 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 (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 " * " outfile ":" > outfile + print " * This file is automatically generated; please do not edit it." > outfile + print " */" > outfile + + print "#if defined(_WIN32)" > outfile + print "# include \"win-mac.h\"" > outfile + print "#endif" > outfile + print "" > outfile + print "#if !defined(_WIN32)" > outfile + print "extern void initialize_" table_name "_error_table (void);" > outfile + print "#endif" > outfile + print "" > outfile + print "#define N_(x) (x)" > outfile + print "" > outfile + print "/* Lclint doesn't handle null annotations on arrays" > outfile + print " properly, so we need this typedef in each" > outfile + print " generated .c file. */" > outfile + print "/*@-redef@*/" > outfile + print "typedef /*@null@*/ const char *ncptr;" > outfile + print "/*@=redef@*/" > outfile + print "" > outfile + print "static ncptr 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]*$/ { + 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 + 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 +} +END { + if (table_item_count > 256) { + print "Error table too large!" | "cat 1>&2" + exit 1 + } + # Put text domain and/or localedir at the end of the list. + if (textdomain) { + printf " \"%s\", /* Text domain */\n", textdomain > outfile + if (localedir) { + printf " \"%s\", /* Locale dir */\n", localedir > outfile + } + } + print " 0" > outfile + print "};" > outfile + print "" > outfile + print "#include <com_err.h>" > 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 "#if !defined(_WIN32)" > outfile + print "void initialize_" table_name "_error_table (void)" > outfile + print " /*@modifies internalState@*/" > outfile + print "{" > outfile + print " (void) add_error_table (&et_" table_name "_error_table);" > outfile + print "}" > outfile + print "#endif" > outfile +}