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