1*37326Skarels#! /bin/sh - 2*37326Skarels# @(#)makesyscalls.sh 1.1 (Berkeley) 04/08/89 3*37326Skarels 4*37326Skarels# name of compat option: 5*37326Skarelscompat=COMPAT_43 6*37326Skarels 7*37326Skarels# output files: 8*37326Skarelssysnames="syscalls.c" 9*37326Skarelssyshdr="syscall.h" 10*37326Skarelssyssw="init_sysent.c" 11*37326Skarels 12*37326Skarels# tmp files: 13*37326Skarelssysdcl="sysent.dcl" 14*37326Skarelssyscompat="sysent.compat" 15*37326Skarelssysent="sysent.switch" 16*37326Skarels 17*37326Skarelscase $# in 18*37326Skarels 0) echo "Usage: $0 input-file" 1>&2 19*37326Skarels exit 1 20*37326Skarels ;; 21*37326Skarelsesac 22*37326Skarels 23*37326Skarelsawk < $1 " 24*37326Skarels BEGIN { 25*37326Skarels sysdcl = \"$sysdcl\" 26*37326Skarels syscompat = \"$syscompat\" 27*37326Skarels sysent = \"$sysent\" 28*37326Skarels sysnames = \"$sysnames\" 29*37326Skarels syshdr = \"$syshdr\" 30*37326Skarels compat = \"$compat\" 31*37326Skarels "' 32*37326Skarels 33*37326Skarels printf "/*\n * System call switch table.\n *\n" > sysdcl 34*37326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl 35*37326Skarels 36*37326Skarels printf "\n#ifdef %s\n", compat > syscompat 37*37326Skarels printf "#define compat(n, name) n, o/**/name\n\n" > syscompat 38*37326Skarels 39*37326Skarels printf "/*\n * System call names.\n *\n" > sysnames 40*37326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames 41*37326Skarels 42*37326Skarels printf "/*\n * System call numbers.\n *\n" > syshdr 43*37326Skarels printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr 44*37326Skarels } 45*37326Skarels NR == 1 { 46*37326Skarels printf " * created from%s\n */\n\n", $0 > sysdcl 47*37326Skarels printf "#include \"param.h\"\n" > sysdcl 48*37326Skarels printf "#include \"systm.h\"\n\n" > sysdcl 49*37326Skarels printf "int\tnosys();\n\n" > sysdcl 50*37326Skarels 51*37326Skarels printf "struct sysent sysent[] = {\n" > sysent 52*37326Skarels 53*37326Skarels printf " * created from%s\n */\n\n", $0 > sysnames 54*37326Skarels printf "char *syscallnames[] = {\n" > sysnames 55*37326Skarels 56*37326Skarels printf " * created from%s\n */\n\n", $0 > syshdr 57*37326Skarels next 58*37326Skarels } 59*37326Skarels NF == 0 || $1 ~ /^;/ { 60*37326Skarels next 61*37326Skarels } 62*37326Skarels $1 ~ /^#[ ]*if/ { 63*37326Skarels print > sysent 64*37326Skarels print > sysdcl 65*37326Skarels print > syscompat 66*37326Skarels print > sysnames 67*37326Skarels savesyscall = syscall 68*37326Skarels next 69*37326Skarels } 70*37326Skarels $1 ~ /^#[ ]*else/ { 71*37326Skarels print > sysent 72*37326Skarels print > sysdcl 73*37326Skarels print > syscompat 74*37326Skarels print > sysnames 75*37326Skarels syscall = savesyscall 76*37326Skarels next 77*37326Skarels } 78*37326Skarels $1 ~ /^#/ { 79*37326Skarels print > sysent 80*37326Skarels print > sysdcl 81*37326Skarels print > syscompat 82*37326Skarels print > sysnames 83*37326Skarels next 84*37326Skarels } 85*37326Skarels syscall != $1 { 86*37326Skarels printf "syscall number out of sync at %d; line is:\n", syscall 87*37326Skarels print 88*37326Skarels exit 1 89*37326Skarels } 90*37326Skarels { comment = $4 91*37326Skarels for (i = 5; i <= NF; i++) 92*37326Skarels comment = comment " " $i 93*37326Skarels if (NF < 5) 94*37326Skarels $5 = $4 95*37326Skarels } 96*37326Skarels $2 == "STD" { 97*37326Skarels printf("int\t%s();\n", $4) > sysdcl 98*37326Skarels printf("\t%d, %s,\t\t\t/* %d = %s */\n", \ 99*37326Skarels $3, $4, syscall, $5) > sysent 100*37326Skarels printf("\t\"%s\",\t\t\t/* %d = %s */\n", \ 101*37326Skarels $5, syscall, $5) > sysnames 102*37326Skarels printf("#define\tSYS_%s\t%d\n", \ 103*37326Skarels $5, syscall) > syshdr 104*37326Skarels } 105*37326Skarels $2 == "COMPAT" { 106*37326Skarels printf("int\to%s();\n", $4) > syscompat 107*37326Skarels printf("\tcompat(%d,%s),\t\t/* %d = old %s */\n", \ 108*37326Skarels $3, $4, syscall, $5) > sysent 109*37326Skarels printf("\t\"old %s\",\t\t/* %d = old %s */\n", \ 110*37326Skarels $5, syscall, $5) > sysnames 111*37326Skarels printf("\t\t\t\t/* %d is old %s */\n", \ 112*37326Skarels syscall, comment) > syshdr 113*37326Skarels } 114*37326Skarels $2 == "OBSOL" { 115*37326Skarels printf("\t0, nosys,\t\t\t/* %d = obsolete %s */\n", \ 116*37326Skarels syscall, comment) > sysent 117*37326Skarels printf("\t\"obs %s\",\t\t\t/* %d = obsolete %s */\n", \ 118*37326Skarels $4, syscall, comment) > sysnames 119*37326Skarels printf("\t\t\t\t/* %d is obsolete %s */\n", \ 120*37326Skarels syscall, comment) > syshdr 121*37326Skarels } 122*37326Skarels $2 == "UNIMPL" { 123*37326Skarels printf("\t0, nosys,\t\t\t/* %d = %s */\n", \ 124*37326Skarels syscall, comment) > sysent 125*37326Skarels printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \ 126*37326Skarels syscall, syscall, comment) > sysnames 127*37326Skarels } 128*37326Skarels { syscall++ } 129*37326Skarels END { 130*37326Skarels printf("\n#else /* %s */\n", compat) > syscompat 131*37326Skarels printf("#define compat(n, name) 0, nosys\n") > syscompat 132*37326Skarels printf("#endif /* %s */\n\n", compat) > syscompat 133*37326Skarels 134*37326Skarels printf("};\n\n") > sysent 135*37326Skarels printf("int\tnsysent = sizeof(sysent) / sizeof(sysent[0]);\n") > sysent 136*37326Skarels 137*37326Skarels printf("};\n") > sysnames 138*37326Skarels } ' 139*37326Skarels 140*37326Skarelscat $sysdcl $syscompat $sysent >$syssw 141*37326Skarelsrm $sysdcl $syscompat $sysent 142