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