|
|
1.1 root 1: #define DEBUG
2: #include <stdio.h>
3: #include <ctype.h>
4: #include <signal.h>
5: #include "awk.h"
6: #include "y.tab.h"
7:
8: int dbg = 0;
9: uchar *cmdname; /* gets argv[0] for error messages */
10: extern FILE *yyin; /* lex input file */
11: uchar *lexprog; /* points to program argument if it exists */
12: extern int errorflag; /* non-zero if any syntax errors; set by yyerror */
13: int compile_time = 1; /* 0 when machine starts. for error printing */
14:
15:
16: main(argc, argv)
17: int argc;
18: uchar *argv[];
19: {
20: uchar *fs = NULL;
21: extern int fpecatch();
22:
23: cmdname = argv[0];
24: if (argc == 1)
25: error(FATAL, "Usage: %s [-f source | 'cmds'] [files]", cmdname);
26: yyin = NULL;
27: while (argc > 1 && argv[1][0] == '-' && argv[1][1] != '\0') {
28: switch (argv[1][1]) {
29: case 'f': /* next argument is program filename */
30: argc--;
31: argv++;
32: if ((yyin = fopen(argv[1], "r")) == NULL)
33: error(FATAL, "can't open file %s", argv[1]);
34: break;
35: case 'F': /* set field separator */
36: if (argv[1][2] != 0) { /* arg is -Fsomething */
37: if (argv[1][2] == 't' && argv[1][3] == 0) /* wart: t=>\t */
38: fs = (uchar *) "\t";
39: else
40: fs = &argv[1][2];
41: } else { /* it's -F (space) something */
42: argc--;
43: argv++;
44: if (argv[1][0] == 't' && argv[1][1] == 0)
45: fs = (uchar *) "\t";
46: else
47: fs = &argv[1][0];
48: }
49: break;
50: case 'd':
51: dbg = 1;
52: break;
53: }
54: argc--;
55: argv++;
56: }
57: if (yyin == NULL) { /* no -f; first argument is program */
58: dprintf("program = |%s|\n", argv[1]);
59: lexprog = argv[1];
60: argc--;
61: argv++;
62: }
63: syminit();
64: while (argc > 1) { /* do leading "name=val" */
65: if (!isclvar(argv[1]))
66: break;
67: setclvar(argv[1]);
68: argc--;
69: argv++;
70:
71: }
72: argv[0] = cmdname; /* put prog name at front of arglist */
73: signal(SIGFPE, fpecatch);
74: dprintf("argc=%d, argv[0]=%s\n", argc, argv[0]);
75: arginit(argc, argv);
76: yyparse();
77: dprintf("errorflag=%d\n", errorflag, NULL, NULL);
78: if (fs)
79: *FS = tostring(qstring(fs, '\0'));
80: *FILENAME = argv[1]; /* initial file name */
81: if (argc == 1) /* no filenames; use stdin */
82: initgetrec();
83: if (errorflag == 0) {
84: compile_time = 0;
85: run(winner);
86: } else
87: bracecheck();
88: exit(errorflag);
89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.