date and time created 93/04/08 02:47:58 by utashiro
authorKazumasa Utashiro <utashiro@ucbvax.Berkeley.EDU>
Thu, 8 Apr 1993 17:47:58 +0000 (09:47 -0800)
committerKazumasa Utashiro <utashiro@ucbvax.Berkeley.EDU>
Thu, 8 Apr 1993 17:47:58 +0000 (09:47 -0800)
SCCS-vsn: sys/news3400/newsos/makesyscalls.sh 7.1

usr/src/sys/news3400/newsos/makesyscalls.sh [new file with mode: 0644]

diff --git a/usr/src/sys/news3400/newsos/makesyscalls.sh b/usr/src/sys/news3400/newsos/makesyscalls.sh
new file mode 100644 (file)
index 0000000..17f3e09
--- /dev/null
@@ -0,0 +1,171 @@
+#! /bin/sh -
+#      @(#)makesyscalls.sh     7.1 (Berkeley) %G%
+
+set -e
+
+# name of compat option:
+compat=XXX_UNUSED
+
+# output files:
+sysnames="news_syscalls.c"
+syshdr="news_syscall.h"
+syssw="news_sysent.c"
+
+# tmp files:
+sysdcl="sysent.dcl"
+syscompat="sysent.compat"
+sysent="sysent.switch"
+
+trap "rm $sysdcl $syscompat $sysent" 0
+
+case $# in
+    0) echo "Usage: $0 input-file" 1>&2
+       exit 1
+       ;;
+esac
+
+awk < $1 "
+       BEGIN {
+               sysdcl = \"$sysdcl\"
+               syscompat = \"$syscompat\"
+               sysent = \"$sysent\"
+               sysnames = \"$sysnames\"
+               syshdr = \"$syshdr\"
+               compat = \"$compat\"
+               infile = \"$1\"
+               "'
+
+               printf "/*\n * System call switch table.\n *\n" > sysdcl
+               printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
+
+               printf "\n#ifdef %s\n", compat > syscompat
+               printf "#define compat(n, name) n, __CONCAT(o,name)\n\n" > syscompat
+
+               printf "/*\n * System call names.\n *\n" > sysnames
+               printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
+
+               printf "/*\n * System call numbers.\n *\n" > syshdr
+               printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
+       }
+       NR == 1 {
+               printf " * created from%s\n */\n\n", $0 > sysdcl
+               printf "#include <sys/param.h>\n" > sysdcl
+               printf "#include <sys/systm.h>\n\n" > sysdcl
+               printf "int\tnosys();\n\n" > sysdcl
+
+               printf "struct sysent newssys[] = {\n" > sysent
+
+               printf " * created from%s\n */\n\n", $0 > sysnames
+               printf "char *syscallnames[] = {\n" > sysnames
+
+               printf " * created from%s\n */\n\n", $0 > syshdr
+               next
+       }
+       NF == 0 || $1 ~ /^;/ {
+               next
+       }
+       $1 ~ /^#[       ]*if/ {
+               print > sysent
+               print > sysdcl
+               print > syscompat
+               print > sysnames
+               savesyscall = syscall
+               next
+       }
+       $1 ~ /^#[       ]*else/ {
+               print > sysent
+               print > sysdcl
+               print > syscompat
+               print > sysnames
+               syscall = savesyscall
+               next
+       }
+       $1 ~ /^#/ {
+               print > sysent
+               print > sysdcl
+               print > syscompat
+               print > sysnames
+               next
+       }
+       syscall != $1 {
+               printf "%s: line %d: syscall number out of sync at %d\n", \
+                  infile, NR, syscall
+               printf "line is:\n"
+               print
+               exit 1
+       }
+       {       comment = $4
+               for (i = 5; i <= NF; i++)
+                       comment = comment " " $i
+               if (NF < 5)
+                       $5 = $4
+       }
+       $2 == "STD" {
+               printf("int\t%s();\n", $4) > sysdcl
+               printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
+                   $3, $4, syscall, $5) > sysent
+               printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
+                   $5, syscall, $5) > sysnames
+               printf("#define\tSYS_%s\t%d\n", \
+                   $5, syscall) > syshdr
+               syscall++
+               next
+       }
+       $2 == "COMPAT" {
+               printf("int\to%s();\n", $4) > syscompat
+               printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
+                   $3, $4, syscall, $5) > sysent
+               printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
+                   $5, syscall, $5) > sysnames
+               printf("\t\t\t\t/* %d is old %s */\n", \
+                   syscall, comment) > syshdr
+               syscall++
+               next
+       }
+       $2 == "LIBCOMPAT" {
+               printf("int\to%s();\n", $4) > syscompat
+               printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \
+                   $3, $4, syscall, $5) > sysent
+               printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
+                   $5, syscall, $5) > sysnames
+               printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \
+                   $5, syscall) > syshdr
+               syscall++
+               next
+       }
+       $2 == "OBSOL" {
+               printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \
+                   syscall, comment) > sysent
+               printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \
+                   $4, syscall, comment) > sysnames
+               printf("\t\t\t\t/* %d is obsolete %s */\n", \
+                   syscall, comment) > syshdr
+               syscall++
+               next
+       }
+       $2 == "UNIMPL" {
+               printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
+                   syscall, comment) > sysent
+               printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
+                   syscall, syscall, comment) > sysnames
+               syscall++
+               next
+       }
+       {
+               printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2
+               exit 1
+       }
+       END {
+               printf("\n#else /* %s */\n", compat) > syscompat
+               printf("#define compat(n, name) 0, nosys\n") > syscompat
+               printf("#endif /* %s */\n\n", compat) > syscompat
+
+               printf("};\n\n") > sysent
+               printf("int\tnnewssys = sizeof(newssys) / sizeof(newssys[0]);\n") > sysent
+
+               printf("};\n") > sysnames
+       } '
+
+cat $sysdcl $syscompat $sysent >$syssw
+
+chmod 444 $sysnames $syshdr $syssw