diff options
| author | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
|---|---|---|
| committer | Charles.Forsyth <devnull@localhost> | 2006-12-22 17:07:39 +0000 |
| commit | 37da2899f40661e3e9631e497da8dc59b971cbd0 (patch) | |
| tree | cbc6d4680e347d906f5fa7fca73214418741df72 /emu/port/mkdevc | |
| parent | 54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff) | |
20060303a
Diffstat (limited to 'emu/port/mkdevc')
| -rw-r--r-- | emu/port/mkdevc | 99 |
1 files changed, 99 insertions, 0 deletions
diff --git a/emu/port/mkdevc b/emu/port/mkdevc new file mode 100644 index 00000000..825c76b0 --- /dev/null +++ b/emu/port/mkdevc @@ -0,0 +1,99 @@ +$AWK ' +BEGIN{ + if(ARGC < 2) + exit +} + +/^$/{ + next; +} +/^#/{ + next; +} +collect && /^[^ \t]/{ + collect = 0; +} +collect && section ~ "dev"{ + dev[ndev++] = $1; +} +collect && section ~ "ip"{ + ip[nip++] = $1; +} +collect && section ~ "link"{ + link[nlink++] = $1; +} +collect && section ~ "mod"{ + mod[nmod++] = $1; +} +collect && section ~ "misc"{ + misc[nmisc++] = $1; +} +collect && section ~ "port"{ + port[nport++] = $0; +} +collect && section ~ "code"{ + code[ncode++] = $0; +} +$0 ~ /^[^ \t]/{ + if($0 ~ "(code|dev|ip|lib|link|mod|misc|port|root)"){ + section = $0; + collect = 1; + } + next; +} + +END{ + if(ARGC < 2) + exit "usage" + + printf "#include \"dat.h\"\n" + printf "#include \"fns.h\"\n" + printf "#include \"error.h\"\n" + printf "#include \"interp.h\"\n\n\n" + printf "#include \"%s.root.h\"\n\n", ARGV[1]; + + nildev = 8; + printf "ulong ndevs = %s;\n\n", ndev+nildev + for(i = 0; i < ndev; i++) + printf "extern Dev %sdevtab;\n", dev[i]; + printf "Dev* devtab[]={\n" + for(i = 0; i < ndev; i++) + printf "\t&%sdevtab,\n", dev[i]; + for(i = 0; i < nildev; i++) + printf("\tnil,\n"); + printf "\tnil,\n};\n\n"; + + + for(i = 0; i < nlink; i++) + printf "extern void %slink(void);\n", link[i]; + + printf "void links(void){\n"; + for(i = 0; i < nlink; i++) + printf "\t%slink();\n", link[i]; + printf "}\n\n"; + + for(i = 0; i < nmod; i++) + printf "extern void %smodinit(void);\n", mod[i]; + printf "void modinit(void){\n"; + for(i = 0; i < nmod; i++) + printf "\t%smodinit();\n",mod[i]; + printf "}\n\n"; + + if(nip){ + printf "#include \"../ip/ip.h\"\n"; + for(i = 0; i < nip; i++) + printf "extern void %sinit(Fs*);\n", ip[i]; + printf "void (*ipprotoinit[])(Fs*) = {\n"; + for(i = 0; i < nip; i++) + printf "\t%sinit,\n", ip[i]; + printf "\tnil,\n};\n\n"; + } + + for(i = 0; i < ncode; i++) + printf "%s\n", code[i]; + + printf "char* conffile = \"%s\";\n", ARGV[1]; + printf "ulong kerndate = KERNDATE;\n"; + + exit +}' $* |
