Annotation of src/usr.bin/mk_cmds/mk_cmds.c, Revision 1.2
1.2 ! deraadt 1: /* $OpenBSD: mk_cmds.c,v 1.1 1996/11/15 09:26:06 downsj Exp $ */
1.1 downsj 2:
3: /*-
4: * Copyright 1987, 1988 by the Student Information Processing Board
5: * of the Massachusetts Institute of Technology
6: *
7: * Permission to use, copy, modify, and distribute this software
8: * and its documentation for any purpose and without fee is
9: * hereby granted, provided that the above copyright notice
10: * appear in all copies and that both that copyright notice and
11: * this permission notice appear in supporting documentation,
12: * and that the names of M.I.T. and the M.I.T. S.I.P.B. not be
13: * used in advertising or publicity pertaining to distribution
14: * of the software without specific, written prior permission.
15: * M.I.T. and the M.I.T. S.I.P.B. make no representations about
16: * the suitability of this software for any purpose. It is
17: * provided "as is" without express or implied warranty.
18: */
19:
20: #include <stdio.h>
21: #include <sys/types.h>
22: #include <sys/param.h>
23: #include <sys/file.h>
24: #ifndef NPOSIX
25: #include <string.h>
26: #else
27: #include <strings.h>
28: #endif
29: #include "mk_cmds_defs.h"
30:
31: static const char copyright[] =
32: "Copyright 1987 by MIT Student Information Processing Board";
33:
34: extern pointer malloc PROTOTYPE((unsigned));
35: extern char *last_token;
36: extern FILE *output_file;
37:
38: extern FILE *yyin, *yyout;
39: extern unsigned lineno;
40:
41: main(argc, argv)
42: int argc;
43: char **argv;
44: {
45: char c_file[MAXPATHLEN];
46: int result;
47: char *path, *p;
48:
49: if (argc != 2) {
50: fputs("Usage: ", stderr);
51: fputs(argv[0], stderr);
1.2 ! deraadt 52: fputs(" cmdtbl.ct\n", stderr);
1.1 downsj 53: exit(1);
54: }
55:
56: path = malloc(strlen(argv[1])+4); /* extra space to add ".ct" */
57: strcpy(path, argv[1]);
58: p = strrchr(path, '/');
59: if (p == (char *)NULL)
60: p = path;
61: else
62: p++;
63: p = strrchr(p, '.');
64: if (p == (char *)NULL || strcmp(p, ".ct"))
65: strcat(path, ".ct");
66: yyin = fopen(path, "r");
67: if (!yyin) {
68: perror(path);
69: exit(1);
70: }
71:
72: p = strrchr(path, '.');
73: *p = '\0';
74: strcpy(c_file, path);
75: strcat(c_file, ".c");
76: *p = '.';
77:
78: output_file = fopen(c_file, "w+");
79: if (!output_file) {
80: perror(c_file);
81: exit(1);
82: }
83:
84: fputs("/* ", output_file); /* emacs fix -> */
85: fputs(c_file, output_file);
86: fputs(" - automatically generated from ", output_file);
87: fputs(path, output_file);
88: fputs(" */\n", output_file);
89: fputs("#include <ss/ss.h>\n\n", output_file);
90: fputs("#ifndef __STDC__\n#define const\n#endif\n\n", output_file);
91: /* parse it */
92: result = yyparse();
93: /* put file descriptors back where they belong */
94: fclose(yyin); /* bye bye input file */
95: fclose(output_file); /* bye bye output file */
96:
97: return result;
98: }
99:
100: yyerror(s)
101: char *s;
102: {
103: fputs(s, stderr);
104: fprintf(stderr, "\nLine %d; last token was '%s'\n",
105: lineno, last_token);
106: }