1*37da2899SCharles.Forsyth$AWK ' 2*37da2899SCharles.ForsythBEGIN{ 3*37da2899SCharles.Forsyth if(ARGC < 2) 4*37da2899SCharles.Forsyth exit 5*37da2899SCharles.Forsyth} 6*37da2899SCharles.Forsyth 7*37da2899SCharles.Forsyth/^$/{ 8*37da2899SCharles.Forsyth next; 9*37da2899SCharles.Forsyth} 10*37da2899SCharles.Forsyth/^#/{ 11*37da2899SCharles.Forsyth next; 12*37da2899SCharles.Forsyth} 13*37da2899SCharles.Forsythcollect && /^[^ \t]/{ 14*37da2899SCharles.Forsyth collect = 0; 15*37da2899SCharles.Forsyth} 16*37da2899SCharles.Forsythcollect && section ~ "dev"{ 17*37da2899SCharles.Forsyth dev[ndev++] = $1; 18*37da2899SCharles.Forsyth} 19*37da2899SCharles.Forsythcollect && section ~ "ip"{ 20*37da2899SCharles.Forsyth ip[nip++] = $1; 21*37da2899SCharles.Forsyth} 22*37da2899SCharles.Forsythcollect && section ~ "link"{ 23*37da2899SCharles.Forsyth link[nlink++] = $1; 24*37da2899SCharles.Forsyth} 25*37da2899SCharles.Forsythcollect && section ~ "mod"{ 26*37da2899SCharles.Forsyth mod[nmod++] = $1; 27*37da2899SCharles.Forsyth} 28*37da2899SCharles.Forsythcollect && section ~ "misc"{ 29*37da2899SCharles.Forsyth misc[nmisc++] = $1; 30*37da2899SCharles.Forsyth} 31*37da2899SCharles.Forsythcollect && section ~ "port"{ 32*37da2899SCharles.Forsyth port[nport++] = $0; 33*37da2899SCharles.Forsyth} 34*37da2899SCharles.Forsythcollect && section ~ "code"{ 35*37da2899SCharles.Forsyth code[ncode++] = $0; 36*37da2899SCharles.Forsyth} 37*37da2899SCharles.Forsyth$0 ~ /^[^ \t]/{ 38*37da2899SCharles.Forsyth if($0 ~ "(code|dev|ip|lib|link|mod|misc|port|root)"){ 39*37da2899SCharles.Forsyth section = $0; 40*37da2899SCharles.Forsyth collect = 1; 41*37da2899SCharles.Forsyth } 42*37da2899SCharles.Forsyth next; 43*37da2899SCharles.Forsyth} 44*37da2899SCharles.Forsyth 45*37da2899SCharles.ForsythEND{ 46*37da2899SCharles.Forsyth if(ARGC < 2) 47*37da2899SCharles.Forsyth exit "usage" 48*37da2899SCharles.Forsyth 49*37da2899SCharles.Forsyth printf "#include \"dat.h\"\n" 50*37da2899SCharles.Forsyth printf "#include \"fns.h\"\n" 51*37da2899SCharles.Forsyth printf "#include \"error.h\"\n" 52*37da2899SCharles.Forsyth printf "#include \"interp.h\"\n\n\n" 53*37da2899SCharles.Forsyth printf "#include \"%s.root.h\"\n\n", ARGV[1]; 54*37da2899SCharles.Forsyth 55*37da2899SCharles.Forsyth nildev = 8; 56*37da2899SCharles.Forsyth printf "ulong ndevs = %s;\n\n", ndev+nildev 57*37da2899SCharles.Forsyth for(i = 0; i < ndev; i++) 58*37da2899SCharles.Forsyth printf "extern Dev %sdevtab;\n", dev[i]; 59*37da2899SCharles.Forsyth printf "Dev* devtab[]={\n" 60*37da2899SCharles.Forsyth for(i = 0; i < ndev; i++) 61*37da2899SCharles.Forsyth printf "\t&%sdevtab,\n", dev[i]; 62*37da2899SCharles.Forsyth for(i = 0; i < nildev; i++) 63*37da2899SCharles.Forsyth printf("\tnil,\n"); 64*37da2899SCharles.Forsyth printf "\tnil,\n};\n\n"; 65*37da2899SCharles.Forsyth 66*37da2899SCharles.Forsyth 67*37da2899SCharles.Forsyth for(i = 0; i < nlink; i++) 68*37da2899SCharles.Forsyth printf "extern void %slink(void);\n", link[i]; 69*37da2899SCharles.Forsyth 70*37da2899SCharles.Forsyth printf "void links(void){\n"; 71*37da2899SCharles.Forsyth for(i = 0; i < nlink; i++) 72*37da2899SCharles.Forsyth printf "\t%slink();\n", link[i]; 73*37da2899SCharles.Forsyth printf "}\n\n"; 74*37da2899SCharles.Forsyth 75*37da2899SCharles.Forsyth for(i = 0; i < nmod; i++) 76*37da2899SCharles.Forsyth printf "extern void %smodinit(void);\n", mod[i]; 77*37da2899SCharles.Forsyth printf "void modinit(void){\n"; 78*37da2899SCharles.Forsyth for(i = 0; i < nmod; i++) 79*37da2899SCharles.Forsyth printf "\t%smodinit();\n",mod[i]; 80*37da2899SCharles.Forsyth printf "}\n\n"; 81*37da2899SCharles.Forsyth 82*37da2899SCharles.Forsyth if(nip){ 83*37da2899SCharles.Forsyth printf "#include \"../ip/ip.h\"\n"; 84*37da2899SCharles.Forsyth for(i = 0; i < nip; i++) 85*37da2899SCharles.Forsyth printf "extern void %sinit(Fs*);\n", ip[i]; 86*37da2899SCharles.Forsyth printf "void (*ipprotoinit[])(Fs*) = {\n"; 87*37da2899SCharles.Forsyth for(i = 0; i < nip; i++) 88*37da2899SCharles.Forsyth printf "\t%sinit,\n", ip[i]; 89*37da2899SCharles.Forsyth printf "\tnil,\n};\n\n"; 90*37da2899SCharles.Forsyth } 91*37da2899SCharles.Forsyth 92*37da2899SCharles.Forsyth for(i = 0; i < ncode; i++) 93*37da2899SCharles.Forsyth printf "%s\n", code[i]; 94*37da2899SCharles.Forsyth 95*37da2899SCharles.Forsyth printf "char* conffile = \"%s\";\n", ARGV[1]; 96*37da2899SCharles.Forsyth printf "ulong kerndate = KERNDATE;\n"; 97*37da2899SCharles.Forsyth 98*37da2899SCharles.Forsyth exit 99*37da2899SCharles.Forsyth}' $* 100