xref: /original-bsd/sys/kern/syscalls.awk (revision e59fb703)
1awk < syscalls '\
2	BEGIN { \
3		sysent = "sysent";
4		sysnames = "syscall.c";
5		syshdr = "syscall.h";
6		printf "/*\n * System call names.\n */\n" > sysnames; \
7		printf "char *syscallnames[] = {\n" > sysnames; \
8		printf "/*\n * System call numbers.\n */\n" > syshdr; \
9	} \
10	$1 ~ /^#[ 	]*if/ { \
11		print > sysent; \
12		savesyscall = syscall; \
13		next;
14	} \
15	$1 ~ /^#[ 	]*el/ { \
16		print > sysent; \
17		syscall = savesyscall; \
18		next; \
19	} \
20	$1 ~ /^#/ { \
21		print > sysent; \
22		next; \
23	} \
24	syscall != $1 { \
25		printf "syscall number out of sync at %d; line is:\n", syscall; \
26		print; \
27		exit 1; \
28	} \
29	{	comment = $4; \
30		for (i = 5; i <= NF; i++) \
31			comment = comment " " $i; \
32		if (NF < 5) \
33			$5 = $4; \
34	} \
35	$2 == "STD" { \
36		printf("\t%d, %s,\t\t\t/* %d = %s */\n", \
37		    $3, $4, syscall, $5) > sysent; \
38		printf("\t\"%s\",\t\t\t/* %d = %s */\n", \
39		    $5, syscall, $5) > sysnames; \
40		printf("#define\tSYS_%s\t%d\n", \
41		    $5, syscall) > syshdr; \
42	} \
43	$2 == "COMPAT" { \
44		printf("\tcompat(%d, %s),\t\t/* %d = old %s */\n", \
45		    $3, $4, syscall, $5) > sysent; \
46		printf("\t\"old %s\",\t\t/* %d = old %s */\n", \
47		    $5, syscall, $5) > sysnames; \
48		printf("\t\t\t\t/* %d is old %s */\n", \
49		    syscall, comment) > syshdr; \
50	} \
51	$2 == "OBSOL" { \
52		printf("\t0, nosys,\t\t\t/* %d = old %s */\n", \
53		    syscall, comment) > sysent; \
54		printf("\t\"#%d\",\t\t\t/* %d = old %s */\n", \
55		    syscall, syscall, comment) > sysnames; \
56		printf("\t\t\t\t/* %d is old %s */\n", \
57		    syscall, comment) > syshdr; \
58	} \
59	$2 == "UNIMPL" { \
60		printf("\t0, nosys,\t\t\t/* %d = %s */\n", \
61		    syscall, comment) > sysent; \
62		printf("\t\"#%d\",\t\t\t/* %d = %s */\n", \
63		    syscall, syscall, comment) > sysnames; \
64	} \
65	{ syscall++ }\
66	END { \
67		printf("};\n") > sysnames; \
68	}
69	'
70