=/^G show total bytes now; document may not always work
[unix-history] / usr / src / old / awk / main.c
CommitLineData
b803c326 1#ifndef lint
26758489 2static char sccsid[] = "@(#)main.c 4.5 (Berkeley) %G%";
b803c326 3#endif
90a429fa
KM
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
11int dbg = 0;
569c4905 12int ldbg = 0;
90a429fa
KM
13int svflg = 0;
14int rstflg = 0;
15int svargc;
16char **svargv, **xargv;
17extern FILE *yyin; /* lex input file */
18char *lexprog; /* points to program argument if it exists */
19extern errorflag; /* non-zero if any syntax errors; set by yyerror */
20
21int filefd, symnum, ansfd;
22char *filelist;
23extern int maxsym, errno;
24main(argc, argv) int argc; char *argv[]; {
25 if (argc == 1)
26 error(FATAL, "Usage: awk [-f source | 'cmds'] [files]");
90a429fa
KM
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') {
26758489
KB
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 }
90a429fa
KM
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 }
569c4905
SL
61 else if (strcmp("-l", argv[0])==0) {
62 ldbg = 1;
63 }
90a429fa
KM
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
90a429fa
KM
101yywrap()
102{
103 return(1);
104}