xref: /freebsd/crypto/krb5/src/util/ss/ct_c_awk.in (revision 7f2fe78b9dd5f51c821d771b63d2e096f6fd49e9)
1/^command_table / {
2	cmdtbl = $2;
3	printf "/* %s.c - automatically generated from %s.ct */\n", \
4		rootname, rootname > outfile
5	print "#include <ss/ss.h>" > outfile
6	print "" >outfile
7	print "#ifndef __STDC__" > outfile
8	print "#define const" > outfile
9	print "#endif" > outfile
10	print "" > outfile
11}
12
13/^BOR$/ {
14	cmdnum++
15	options = 0
16	cmdtab = ""
17	printf "static char const * const ssu%05d[] = {\n", cmdnum > outfile
18}
19
20/^sub/ {
21	subr = substr($0, 6, length($0)-5)
22}
23
24/^hlp/ {
25	help = substr($0, 6, length($0)-5)
26}
27
28/^cmd/ {
29	cmd = substr($0, 6, length($0)-5)
30	printf "%s\"%s\",\n", cmdtab, cmd > outfile
31	cmdtab = "    "
32}
33
34/^opt/ {
35	opt = substr($0, 6, length($0)-5)
36	if (opt == "dont_list") {
37		options += 1
38	}
39	if (opt == "dont_summarize") {
40		options += 2
41	}
42}
43
44/^EOR/ {
45	print "    (char const *)0" > outfile
46	print "};" > outfile
47	printf "extern void %s __SS_PROTO;\n", subr > outfile
48	subr_tab[cmdnum] = subr
49	options_tab[cmdnum] = options
50	help_tab[cmdnum] = help
51}
52
53/^[0-9]/ {
54	linenum = $1;
55}
56
57/^ERROR/ {
58	error = substr($0, 8, length($0)-7)
59	printf "Error in line %d: %s\n", linenum, error
60	print "#__ERROR_IN_FILE__" > outfile
61}
62
63END {
64	printf "static ss_request_entry ssu%05d[] = {\n", cmdnum+1 > outfile
65	for (i=1; i <= cmdnum; i++) {
66		printf "    { ssu%05d,\n", i > outfile
67		printf "      %s,\n", subr_tab[i] > outfile
68		printf "      \"%s\",\n", help_tab[i] > outfile
69		printf "      %d },\n", options_tab[i] > outfile
70	}
71	print "    { 0, 0, 0, 0 }" > outfile
72	print "};" > outfile
73	print "" > outfile
74	printf "ss_request_table %s = { 2, ssu%05d };\n", \
75		cmdtbl, cmdnum+1 > outfile
76}
77
78