makesyscalls.sh revision 2671
11541Srgrimes#! /bin/sh -
21541Srgrimes#	@(#)makesyscalls.sh	8.1 (Berkeley) 6/10/93
32671Sats# $Id: makesyscalls.sh,v 1.5 1994/08/26 09:33:36 sos Exp $
41541Srgrimes
51541Srgrimesset -e
61541Srgrimes
71541Srgrimes# name of compat option:
81541Srgrimescompat=COMPAT_43
91541Srgrimes
101541Srgrimes# output files:
111541Srgrimessysnames="syscalls.c"
121541Srgrimessyshdr="../sys/syscall.h"
131541Srgrimessyssw="init_sysent.c"
141541Srgrimes
151541Srgrimes# tmp files:
161541Srgrimessysdcl="sysent.dcl"
171541Srgrimessyscompat="sysent.compat"
181541Srgrimessysent="sysent.switch"
191541Srgrimes
201541Srgrimestrap "rm $sysdcl $syscompat $sysent" 0
211541Srgrimes
221541Srgrimescase $# in
231541Srgrimes    0)	echo "Usage: $0 input-file" 1>&2
241541Srgrimes	exit 1
251541Srgrimes	;;
261541Srgrimesesac
271541Srgrimes
281541Srgrimesawk < $1 "
291541Srgrimes	BEGIN {
301541Srgrimes		sysdcl = \"$sysdcl\"
311541Srgrimes		syscompat = \"$syscompat\"
321541Srgrimes		sysent = \"$sysent\"
331541Srgrimes		sysnames = \"$sysnames\"
341541Srgrimes		syshdr = \"$syshdr\"
351541Srgrimes		compat = \"$compat\"
361541Srgrimes		infile = \"$1\"
371541Srgrimes		"'
381541Srgrimes
391541Srgrimes		printf "/*\n * System call switch table.\n *\n" > sysdcl
401541Srgrimes		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysdcl
411541Srgrimes
421541Srgrimes		printf "\n#ifdef %s\n", compat > syscompat
431541Srgrimes		printf "#define compat(n, name) n, __CONCAT(o,name)\n\n" > syscompat
441541Srgrimes
451541Srgrimes		printf "/*\n * System call names.\n *\n" > sysnames
461541Srgrimes		printf " * DO NOT EDIT-- this file is automatically generated.\n" > sysnames
471541Srgrimes
481541Srgrimes		printf "/*\n * System call numbers.\n *\n" > syshdr
491541Srgrimes		printf " * DO NOT EDIT-- this file is automatically generated.\n" > syshdr
501541Srgrimes	}
511541Srgrimes	NR == 1 {
521541Srgrimes		printf " * created from%s\n */\n\n", $0 > sysdcl
531541Srgrimes		printf "#include <sys/param.h>\n" > sysdcl
542293Ssos		printf "#include <sys/systm.h>\n" > sysdcl
552293Ssos		printf "#include <sys/sysent.h>\n\n" > sysdcl
561541Srgrimes
571541Srgrimes		printf "struct sysent sysent[] = {\n" > sysent
581541Srgrimes
591541Srgrimes		printf " * created from%s\n */\n\n", $0 > sysnames
601541Srgrimes		printf "char *syscallnames[] = {\n" > sysnames
611541Srgrimes
621541Srgrimes		printf " * created from%s\n */\n\n", $0 > syshdr
631541Srgrimes		next
641541Srgrimes	}
651541Srgrimes	NF == 0 || $1 ~ /^;/ {
661541Srgrimes		next
671541Srgrimes	}
681541Srgrimes	$1 ~ /^#[ 	]*if/ {
691541Srgrimes		print > sysent
701541Srgrimes		print > sysdcl
711541Srgrimes		print > syscompat
721541Srgrimes		print > sysnames
731541Srgrimes		savesyscall = syscall
741541Srgrimes		next
751541Srgrimes	}
761541Srgrimes	$1 ~ /^#[ 	]*else/ {
771541Srgrimes		print > sysent
781541Srgrimes		print > sysdcl
791541Srgrimes		print > syscompat
801541Srgrimes		print > sysnames
811541Srgrimes		syscall = savesyscall
821541Srgrimes		next
831541Srgrimes	}
841541Srgrimes	$1 ~ /^#/ {
851541Srgrimes		print > sysent
861541Srgrimes		print > sysdcl
871541Srgrimes		print > syscompat
881541Srgrimes		print > sysnames
891541Srgrimes		next
901541Srgrimes	}
911541Srgrimes	syscall != $1 {
921541Srgrimes		printf "%s: line %d: syscall number out of sync at %d\n", \
931541Srgrimes		   infile, NR, syscall
941541Srgrimes		printf "line is:\n"
951541Srgrimes		print
961541Srgrimes		exit 1
971541Srgrimes	}
981541Srgrimes	{	comment = $4
991541Srgrimes		for (i = 5; i <= NF; i++)
1001541Srgrimes			comment = comment " " $i
1011541Srgrimes		if (NF < 5)
1021541Srgrimes			$5 = $4
1031541Srgrimes	}
1042124Sdg	$2 == "STD" || $2 == "NODEF" {
1052671Sats		if (!nosys || $4 != "nosys")
1062671Sats			printf("int\t%s();\n", $4) > sysdcl
1072671Sats		if ($4 == "nosys")
1082671Sats			nosys = 1
1091541Srgrimes		printf("\t{ %d, %s },\t\t\t/* %d = %s */\n", \
1101541Srgrimes		    $3, $4, syscall, $5) > sysent
1111541Srgrimes		printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
1121541Srgrimes		    $5, syscall, $5) > sysnames
1132124Sdg		if ($2 == "STD")
1142124Sdg			printf("#define\tSYS_%s\t%d\n", \
1152124Sdg		    	    $5, syscall) > syshdr
1161541Srgrimes		syscall++
1171541Srgrimes		next
1181541Srgrimes	}
1191541Srgrimes	$2 == "COMPAT" {
1201541Srgrimes		printf("int\to%s();\n", $4) > syscompat
1211541Srgrimes		printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n", \
1221541Srgrimes		    $3, $4, syscall, $5) > sysent
1231541Srgrimes		printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
1241541Srgrimes		    $5, syscall, $5) > sysnames
1251541Srgrimes		printf("\t\t\t\t/* %d is old %s */\n", \
1261541Srgrimes		    syscall, comment) > syshdr
1271541Srgrimes		syscall++
1281541Srgrimes		next
1291541Srgrimes	}
1301541Srgrimes	$2 == "LIBCOMPAT" {
1311541Srgrimes		printf("int\to%s();\n", $4) > syscompat
1321541Srgrimes		printf("\t{ compat(%d,%s) },\t\t/* %d = old %s */\n", \
1331541Srgrimes		    $3, $4, syscall, $5) > sysent
1341541Srgrimes		printf("\t\"old.%s\",\t\t/* %d = old %s */\n", \
1351541Srgrimes		    $5, syscall, $5) > sysnames
1361541Srgrimes		printf("#define\tSYS_%s\t%d\t/* compatibility; still used by libc */\n", \
1371541Srgrimes		    $5, syscall) > syshdr
1381541Srgrimes		syscall++
1391541Srgrimes		next
1401541Srgrimes	}
1411541Srgrimes	$2 == "OBSOL" {
1421541Srgrimes		printf("\t{ 0, nosys },\t\t\t/* %d = obsolete %s */\n", \
1431541Srgrimes		    syscall, comment) > sysent
1441541Srgrimes		printf("\t\"obs_%s\",\t\t\t/* %d = obsolete %s */\n", \
1451541Srgrimes		    $4, syscall, comment) > sysnames
1461541Srgrimes		printf("\t\t\t\t/* %d is obsolete %s */\n", \
1471541Srgrimes		    syscall, comment) > syshdr
1481541Srgrimes		syscall++
1491541Srgrimes		next
1501541Srgrimes	}
1511541Srgrimes	$2 == "UNIMPL" {
1521541Srgrimes		printf("\t{ 0, nosys },\t\t\t/* %d = %s */\n", \
1531541Srgrimes		    syscall, comment) > sysent
1541541Srgrimes		printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
1551541Srgrimes		    syscall, syscall, comment) > sysnames
1561541Srgrimes		syscall++
1571541Srgrimes		next
1581541Srgrimes	}
1591541Srgrimes	{
1601541Srgrimes		printf "%s: line %d: unrecognized keyword %s\n", infile, NR, $2
1611541Srgrimes		exit 1
1621541Srgrimes	}
1631541Srgrimes	END {
1641541Srgrimes		printf("\n#else /* %s */\n", compat) > syscompat
1651541Srgrimes		printf("#define compat(n, name) 0, nosys\n") > syscompat
1661541Srgrimes		printf("#endif /* %s */\n\n", compat) > syscompat
1671541Srgrimes
1681541Srgrimes		printf("};\n\n") > sysent
1692257Ssos		printf ("struct sysentvec aout_sysvec = {\n") > sysent
1702257Ssos		printf ("\tsizeof (sysent) / sizeof (sysent[0]),\n") > sysent
1712257Ssos		printf ("\tsysent,\n") > sysent
1722257Ssos		printf ("\t0,\n\t0,\n\t0\n};") > sysent
1731541Srgrimes		printf("};\n") > sysnames
1741541Srgrimes	} '
1751541Srgrimes
1761541Srgrimescat $sysdcl $syscompat $sysent >$syssw
1771541Srgrimes
1781541Srgrimeschmod 444 $sysnames $syshdr $syssw
179