|
|
1.1 root 1: #ifndef lint
2: static char sccsid[] = "@(#)main.c 4.5 (Berkeley) 10/6/87";
3: #endif
4:
5: #include "stdio.h"
6: #include "ctype.h"
7: #include "awk.def"
8: #include "awk.h"
9: #define TOLOWER(c) (isupper(c) ? tolower(c) : c) /* ugh!!! */
10:
11: int dbg = 0;
12: int ldbg = 0;
13: int svflg = 0;
14: int rstflg = 0;
15: int svargc;
16: char **svargv, **xargv;
17: extern FILE *yyin; /* lex input file */
18: char *lexprog; /* points to program argument if it exists */
19: extern errorflag; /* non-zero if any syntax errors; set by yyerror */
20:
21: int filefd, symnum, ansfd;
22: char *filelist;
23: extern int maxsym, errno;
24: main(argc, argv) int argc; char *argv[]; {
25: if (argc == 1)
26: error(FATAL, "Usage: awk [-f source | 'cmds'] [files]");
27: syminit();
28: while (argc > 1) {
29: argc--;
30: argv++;
31: /* this nonsense is because gcos argument handling */
32: /* folds -F into -f. accordingly, one checks the next
33: /* character after f to see if it's -f file or -Fx.
34: */
35: if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f' && argv[0][2] == '\0') {
36: if (argv[1][0] == '-' && argv[1][1] == '\0')
37: yyin = stdin;
38: else {
39: yyin = fopen(argv[1], "r");
40: if (yyin == NULL)
41: error(FATAL, "can't open %s", argv[1]);
42: }
43: argc--;
44: argv++;
45: break;
46: } else if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f') { /* set field sep */
47: if (argv[0][2] == 't') /* special case for tab */
48: **FS = '\t';
49: else
50: **FS = argv[0][2];
51: continue;
52: } else if (argv[0][0] != '-') {
53: dprintf("cmds=|%s|\n", argv[0], NULL, NULL);
54: yyin = NULL;
55: lexprog = argv[0];
56: argv[0] = argv[-1]; /* need this space */
57: break;
58: } else if (strcmp("-d", argv[0])==0) {
59: dbg = 1;
60: }
61: else if (strcmp("-l", argv[0])==0) {
62: ldbg = 1;
63: }
64: else if(strcmp("-S", argv[0]) == 0) {
65: svflg = 1;
66: }
67: else if(strncmp("-R", argv[0], 2) == 0) {
68: if(thaw(argv[0] + 2) == 0)
69: rstflg = 1;
70: else {
71: fprintf(stderr, "not restored\n");
72: exit(1);
73: }
74: }
75: }
76: if (argc <= 1) {
77: argv[0][0] = '-';
78: argv[0][1] = '\0';
79: argc++;
80: argv--;
81: }
82: svargc = --argc;
83: svargv = ++argv;
84: dprintf("svargc=%d svargv[0]=%s\n", svargc, svargv[0], NULL);
85: *FILENAME = *svargv; /* initial file name */
86: if(rstflg == 0)
87: yyparse();
88: dprintf("errorflag=%d\n", errorflag, NULL, NULL);
89: if (errorflag)
90: exit(errorflag);
91: if(svflg) {
92: svflg = 0;
93: if(freeze("awk.out") != 0)
94: fprintf(stderr, "not saved\n");
95: exit(0);
96: }
97: run();
98: exit(errorflag);
99: }
100:
101: yywrap()
102: {
103: return(1);
104: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.