|
|
1.1 ! root 1: #! /bin/sh - ! 2: # @(#)makesyscalls.sh 7.5 (Berkeley) 6/21/90 ! 3: ! 4: set -e ! 5: ! 6: # name of compat option: ! 7: compat=COMPAT_43 ! 8: ! 9: # output files: ! 10: sysnames="syscalls.c" ! 11: syshdr="../sys/syscall.h" ! 12: syssw="init_sysent.c" ! 13: ! 14: # tmp files: ! 15: sysdcl="sysent.dcl" ! 16: syscompat="sysent.compat" ! 17: sysent="sysent.switch" ! 18: ! 19: trap "rm $sysdcl $syscompat $sysent" 0 ! 20: ! 21: case $# in ! 22: 0) echo "Usage: $0 input-file" 1>&2 ! 23: exit 1 ! 24: ;; ! 25: esac ! 26: ! 27: awk < $1 " ! 28: BEGIN { ! 29: sysdcl = \"$sysdcl\" ! 30: syscompat = \"$syscompat\" ! 31: sysent = \"$sysent\" ! 32: sysnames = \"$sysnames\" ! 33: syshdr = \"$syshdr\" ! 34: compat = \"$compat\" ! 35: infile = \"$1\" ! 36: "' ! 37: ! 38: printf "/*\n * System call switch table.\n *\n" > sysdcl ! 39: printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl ! 40: ! 41: printf "\n#ifdef %s\n", compat > syscompat ! 42: printf "#define compat(n, name) n, o/**/name\n\n" > syscompat ! 43: ! 44: printf "/*\n * System call names.\n *\n" > sysnames ! 45: printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames ! 46: ! 47: printf "/*\n * System call numbers.\n *\n" > syshdr ! 48: printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr ! 49: } ! 50: NR == 1 { ! 51: printf " * created from%s\n */\n\n", $0 > sysdcl ! 52: printf "#include \"param.h\"\n" > sysdcl ! 53: printf "#include \"systm.h\"\n\n" > sysdcl ! 54: printf "int\tnosys();\n\n" > sysdcl ! 55: ! 56: printf "struct sysent sysent[] = {\n" > sysent ! 57: ! 58: printf " * created from%s\n */\n\n", $0 > sysnames ! 59: printf "char *syscallnames[] = {\n" > sysnames ! 60: ! 61: printf " * created from%s\n */\n\n", $0 > syshdr ! 62: next ! 63: } ! 64: NF == 0 || $1 ~ /^;/ { ! 65: next ! 66: } ! 67: $1 ~ /^#[ ]*if/ { ! 68: print > sysent ! 69: print > sysdcl ! 70: print > syscompat ! 71: print > sysnames ! 72: savesyscall = syscall ! 73: next ! 74: } ! 75: $1 ~ /^#[ ]*else/ { ! 76: print > sysent ! 77: print > sysdcl ! 78: print > syscompat ! 79: print > sysnames ! 80: syscall = savesyscall ! 81: next ! 82: } ! 83: $1 ~ /^#/ { ! 84: print > sysent ! 85: print > sysdcl ! 86: print > syscompat ! 87: print > sysnames ! 88: next ! 89: } ! 90: syscall != $1 { ! 91: printf "%s: line %d: syscall number out of sync at %d\n", \ ! 92: infile, NR, syscall ! 93: printf "line is:\n" ! 94: print ! 95: exit 1 ! 96: } ! 97: { comment = $4 ! 98: for (i = 5; i <= NF; i++) ! 99: comment = comment " " $i ! 100: if (NF < 5) ! 101: $5 = $4 ! 102: } ! 103: $2 == "STD" { ! 104: printf("int\t%s();\n", $4) > sysdcl ! 105: printf("\t%d, %s,\t\t\t/* %d = %s */\n", \ ! 106: $3, $4, syscall, $5) > sysent ! 107: printf("\t\"%s\",\t\t\t/* %d = %s */\n", \ ! 108: $5, syscall, $5) > sysnames ! 109: printf("#define\tSYS_%s\t%d\n", \ ! 110: $5, syscall) > syshdr ! 111: syscall++ ! 112: next ! 113: } ! 114: $2 == "COMPAT" { ! 115: printf("int\to%s();\n", $4) > syscompat ! 116: printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ ! 117: $3, $4, syscall, $5) > sysent ! 118: printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ ! 119: $5, syscall, $5) > sysnames ! 120: printf("\t\t\t\t/* %d is old %s */\n", \ ! 121: syscall, comment) > syshdr ! 122: syscall++ ! 123: next ! 124: } ! 125: $2 == "LIBCOMPAT" { ! 126: printf("int\to%s();\n", $4) > syscompat ! 127: printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ ! 128: $3, $4, syscall, $5) > sysent ! 129: printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \ ! 130: $5, syscall, $5) > sysnames ! 131: printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \ ! 132: $5, syscall) > syshdr ! 133: syscall++ ! 134: next ! 135: } ! 136: $2 == "OBSOL" { ! 137: printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \ ! 138: syscall, comment) > sysent ! 139: printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \ ! 140: $4, syscall, comment) > sysnames ! 141: printf("\t\t\t\t/* %d is obsolete %s */\n", \ ! 142: syscall, comment) > syshdr ! 143: syscall++ ! 144: next ! 145: } ! 146: $2 == "UNIMPL" { ! 147: printf("\t0, nosys,\t\t\t/* %d = %s */\n", \ ! 148: syscall, comment) > sysent ! 149: printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \ ! 150: syscall, syscall, comment) > sysnames ! 151: syscall++ ! 152: next ! 153: } ! 154: { ! 155: printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2 ! 156: exit 1 ! 157: } ! 158: END { ! 159: printf("\n#else /* %s */\n", compat) > syscompat ! 160: printf("#define compat(n, name) 0, nosys\n") > syscompat ! 161: printf("#endif /* %s */\n\n", compat) > syscompat ! 162: ! 163: printf("};\n\n") > sysent ! 164: printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent ! 165: ! 166: printf("};\n") > sysnames ! 167: } ' ! 168: ! 169: cat $sysdcl $syscompat $sysent >$syssw ! 170: ! 171: chmod 444 $sysnames $syshdr $syssw
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.