1 /^command_table / { 2 cmdtbl = $2; 3 printf "/* %s.c - automatically generated from %s.ct */\n", \ 4 rootname, rootname > outfile 5 print "#include <ss/ss.h>" > outfile 6 print "" >outfile 7 } 8 9 /^BOR$/ { 10 cmdnum++ 11 options = 0 12 cmdtab = "" 13 printf "static char const * const ssu%05d[] = {\n", cmdnum > outfile 14 } 15 16 /^sub/ { 17 subr = substr($0, 6, length($0)-5) 18 } 19 20 /^hlp/ { 21 help = substr($0, 6, length($0)-5) 22 } 23 24 /^cmd/ { 25 cmd = substr($0, 6, length($0)-5) 26 printf "%s\"%s\",\n", cmdtab, cmd > outfile 27 cmdtab = " " 28 } 29 30 /^opt/ { 31 opt = substr($0, 6, length($0)-5) 32 if (opt == "dont_list") { 33 options += 1 34 } 35 if (opt == "dont_summarize") { 36 options += 2 37 } 38 } 39 40 /^EOR/ { 41 print " (char const *)0" > outfile 42 print "};" > outfile 43 printf "extern void %s __SS_PROTO;\n", subr > outfile 44 # Work around a bug in gawk 3.0.5 45 awk_bug = cmdnum 46 subr_tab[awk_bug] = subr 47 options_tab[awk_bug] = options 48 help_tab[awk_bug] = help 49 } 50 51 /^[0-9]/ { 52 linenum = $1; 53 } 54 55 /^ERROR/ { 56 error = substr($0, 8, length($0)-7) 57 printf "Error in line %d: %s\n", linenum, error 58 print "#__ERROR_IN_FILE__" > outfile 59 } 60 61 END { 62 printf "static ss_request_entry ssu%05d[] = {\n", cmdnum+1 > outfile 63 for (i=1; i <= cmdnum; i++) { 64 printf " { ssu%05d,\n", i > outfile 65 printf " %s,\n", subr_tab[i] > outfile 66 printf " \"%s\",\n", help_tab[i] > outfile 67 printf " %d },\n", options_tab[i] > outfile 68 } 69 print " { 0, 0, 0, 0 }" > outfile 70 print "};" > outfile 71 print "" > outfile 72 printf "ss_request_table %s = { 2, ssu%05d };\n", \ 73 cmdtbl, cmdnum+1 > outfile 74 } 75 76