|
|
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.