76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Awk
		
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			Awk
		
	
	
	
| /^command_table / {
 | |
| 	cmdtbl = $2;
 | |
| 	printf "/* %s.c - automatically generated from %s.ct */\n", \
 | |
| 		rootname, rootname > outfile
 | |
| 	print "#include <ss/ss.h>" > outfile
 | |
| 	print "" >outfile
 | |
| }
 | |
| 	
 | |
| /^BOR$/ {
 | |
| 	cmdnum++
 | |
| 	options = 0
 | |
| 	cmdtab = ""
 | |
| 	printf "static char const * const ssu%05d[] = {\n", cmdnum > outfile
 | |
| }
 | |
| 
 | |
| /^sub/ {
 | |
| 	subr = substr($0, 6, length($0)-5)
 | |
| }
 | |
| 
 | |
| /^hlp/ {
 | |
| 	help = substr($0, 6, length($0)-5)
 | |
| }
 | |
| 
 | |
| /^cmd/ {
 | |
| 	cmd = substr($0, 6, length($0)-5)
 | |
| 	printf "%s\"%s\",\n", cmdtab, cmd > outfile
 | |
| 	cmdtab = "    "
 | |
| }
 | |
| 
 | |
| /^opt/ {
 | |
| 	opt = substr($0, 6, length($0)-5)
 | |
| 	if (opt == "dont_list") {
 | |
| 		options += 1
 | |
| 	}
 | |
| 	if (opt == "dont_summarize") {
 | |
| 		options += 2
 | |
| 	}
 | |
| }
 | |
| 
 | |
| /^EOR/ {
 | |
| 	print "    (char const *)0" > outfile
 | |
| 	print "};" > outfile 
 | |
| 	printf "extern void %s __SS_PROTO;\n", subr > outfile
 | |
| 	# Work around a bug in gawk 3.0.5
 | |
| 	awk_bug = cmdnum
 | |
| 	subr_tab[awk_bug] = subr
 | |
| 	options_tab[awk_bug] = options
 | |
| 	help_tab[awk_bug] = help
 | |
| }
 | |
| 
 | |
| /^[0-9]/ {
 | |
| 	linenum = $1;
 | |
| }
 | |
| 
 | |
| /^ERROR/ {
 | |
| 	error = substr($0, 8, length($0)-7)
 | |
| 	printf "Error in line %d: %s\n", linenum, error
 | |
| 	print "#__ERROR_IN_FILE__" > outfile
 | |
| }
 | |
| 
 | |
| END {
 | |
| 	printf "static ss_request_entry ssu%05d[] = {\n", cmdnum+1 > outfile
 | |
| 	for (i=1; i <= cmdnum; i++) {
 | |
| 		printf "    { ssu%05d,\n", i > outfile
 | |
| 		printf "      %s,\n", subr_tab[i] > outfile
 | |
| 		printf "      \"%s\",\n", help_tab[i] > outfile
 | |
| 		printf "      %d },\n", options_tab[i] > outfile
 | |
| 	}
 | |
| 	print "    { 0, 0, 0, 0 }" > outfile
 | |
| 	print "};" > outfile
 | |
| 	print "" > outfile
 | |
| 	printf "ss_request_table %s = { 2, ssu%05d };\n", \
 | |
| 		cmdtbl, cmdnum+1 > outfile
 | |
| }
 | |
| 
 |