summaryrefslogtreecommitdiff
path: root/emu/port/mkdevc
diff options
context:
space:
mode:
authorCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
committerCharles.Forsyth <devnull@localhost>2006-12-22 17:07:39 +0000
commit37da2899f40661e3e9631e497da8dc59b971cbd0 (patch)
treecbc6d4680e347d906f5fa7fca73214418741df72 /emu/port/mkdevc
parent54bc8ff236ac10b3eaa928fd6bcfc0cdb2ba46ae (diff)
20060303a
Diffstat (limited to 'emu/port/mkdevc')
-rw-r--r--emu/port/mkdevc99
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
+}' $*