BEGIN { FS=":"; type["c"] = "char" type["c*"] = "char *" type["c**"] = "char **" type["i"] = "int" type["l"] = "long" type["s"] = "short" type["v"] = "void" type["B"] = "Bitmap" type["B*"] = "Bitmap *" type["C"] = "Code" type["F"] = "Font" type["F*"] = "Font *" type["M"] = "Menu" type["M*"] = "Menu *" type["P"] = "Point" type["P*"] = "Point *" type["R"] = "Rectangle" type["R*"] = "Rectangle *" type["T"] = "Texture" type["T*"] = "Texture *" s = "ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz " # set upper["A"] = upper["a"] = "A" for (i = 1; i <= 27; i++) { upper[substr(s,i+27,1)] = substr(s,i,1) upper[substr(s,i,1)] = substr(s,i,1) } STUB = "stubs.c" printf "#include \"jerq.h\"\n" >STUB printf "#include \"commands.h\"\n" >STUB printf "#include \"io.h\"\n" >STUB printf "\n" >STUB COM = "commands.h" printf "#define CCBALLOC 1\n#define CCBFREE 2\n#define CCEXIT 3\n" >COM printf "#define CCFFREE 4\n#define CCGETFONT 5\n" >COM printf "#define CCMENUHIT 6\n#define CCMENU 7\n#define CCBSPLINE 8\n" >COM printf "#define CCGETMOUSE 9\n#define CCKBDCHAR 20\n" >COM printf "#define CCTRACKARC 10\n#define CCTRACKRECT 11\n" >COM printf "#define CCTRACKCIRCLE 12\n#define CCTRACKDISC 13\n" >COM printf "#define CCTRACKELARC 14\n#define CCTRACKELDISC 15\n" >COM printf "#define CCTRACKELLIPSE 16\n#define CCTRACKLINE 17\n" >COM printf "#define CCTRACKRECTF 18\n#define CCTRACKSTRING 19\n" >COM d = 21 } func doSendRec(s,cmd) { printf "\t%s", cmd >STUB u = index(s,"u") tt = index(s,"**") t = index(s,"*") f = index(s,"*()") if (f>0) { printf "Function" >STUB s = type[substr(s,u+1,f-u-1)] } else if (tt>0) { printf "ToTo" >STUB s = type[substr(s,u+1,tt-u-1)] } else if (t>0) { printf "To" >STUB s = type[substr(s,u+1,t-u-1)] } else if (u>0) { printf "Unsigned" >STUB s = type[substr(s,u+1,length(s)-u)] } else s = type[s] s2 = substr(s,2,length(s)-1) s1 = upper[substr(s,1,1)] printf "%s%s", s1, s2 >STUB if (cmd == "send") printf "(arg%d);\n", i-2 >STUB else printf "();\n" >STUB } { printf "%s %s(", type[$1], $2 >STUB for (i=3; i<=NF; i++) { if (i>3) printf ", " >STUB printf "arg%d", i-2 >STUB } printf ")\n" >STUB for (i=3; i<=NF; i++) { u = index($i, "u") f = index($i,"*()") t = index($i,"*") if (u>0) printf "unsigned " >STUB if (f>0) printf "%s (*arg%d)();\n", type[substr($i,u+1,f-u-1)], i-2 >STUB else { printf "%s", type[substr($i,u+1,length($i)-u)] >STUB if (t==0) printf " " >STUB printf "arg%d;\n", i-2 >STUB } } printf "{\n" >STUB printf "\tsendCommand(CC" >STUB # printf "\t" >COM printf "#define CC" >COM for (i=1; i<=length($2); i++) { printf "%s", upper[substr($2,i,1)] >STUB printf "%s", upper[substr($2,i,1)] >COM } printf ");\n" >STUB # printf ",\n" >COM printf " %d\n", d >COM d = d+1 for (i=3; i<=NF; i++) doSendRec($i,"send") if ($1 != "v") doSendRec($1,"flush();\n\treturn rec") printf "}\n\n" >STUB } #END { # printf "};\n" >COM #}