|
|
1.1 ! root 1: #define DEBUG ! 2: #include <stdio.h> ! 3: #include <ctype.h> ! 4: #include <signal.h> ! 5: #include "awk.h" ! 6: #include "y.tab.h" ! 7: ! 8: int dbg = 0; ! 9: uchar *cmdname; /* gets argv[0] for error messages */ ! 10: extern FILE *yyin; /* lex input file */ ! 11: uchar *lexprog; /* points to program argument if it exists */ ! 12: extern int errorflag; /* non-zero if any syntax errors; set by yyerror */ ! 13: int compile_time = 1; /* 0 when machine starts. for error printing */ ! 14: ! 15: ! 16: main(argc, argv) ! 17: int argc; ! 18: uchar *argv[]; ! 19: { ! 20: uchar *fs = NULL; ! 21: extern int fpecatch(); ! 22: ! 23: cmdname = argv[0]; ! 24: if (argc == 1) ! 25: error(FATAL, "Usage: %s [-f source | 'cmds'] [files]", cmdname); ! 26: yyin = NULL; ! 27: while (argc > 1 && argv[1][0] == '-' && argv[1][1] != '\0') { ! 28: switch (argv[1][1]) { ! 29: case 'f': /* next argument is program filename */ ! 30: argc--; ! 31: argv++; ! 32: if ((yyin = fopen(argv[1], "r")) == NULL) ! 33: error(FATAL, "can't open file %s", argv[1]); ! 34: break; ! 35: case 'F': /* set field separator */ ! 36: if (argv[1][2] != 0) { /* arg is -Fsomething */ ! 37: if (argv[1][2] == 't' && argv[1][3] == 0) /* wart: t=>\t */ ! 38: fs = (uchar *) "\t"; ! 39: else ! 40: fs = &argv[1][2]; ! 41: } else { /* it's -F (space) something */ ! 42: argc--; ! 43: argv++; ! 44: if (argv[1][0] == 't' && argv[1][1] == 0) ! 45: fs = (uchar *) "\t"; ! 46: else ! 47: fs = &argv[1][0]; ! 48: } ! 49: break; ! 50: case 'd': ! 51: dbg = 1; ! 52: break; ! 53: } ! 54: argc--; ! 55: argv++; ! 56: } ! 57: if (yyin == NULL) { /* no -f; first argument is program */ ! 58: dprintf("program = |%s|\n", argv[1]); ! 59: lexprog = argv[1]; ! 60: argc--; ! 61: argv++; ! 62: } ! 63: syminit(); ! 64: while (argc > 1) { /* do leading "name=val" */ ! 65: if (!isclvar(argv[1])) ! 66: break; ! 67: setclvar(argv[1]); ! 68: argc--; ! 69: argv++; ! 70: ! 71: } ! 72: argv[0] = cmdname; /* put prog name at front of arglist */ ! 73: signal(SIGFPE, fpecatch); ! 74: dprintf("argc=%d, argv[0]=%s\n", argc, argv[0]); ! 75: arginit(argc, argv); ! 76: yyparse(); ! 77: dprintf("errorflag=%d\n", errorflag, NULL, NULL); ! 78: if (fs) ! 79: *FS = tostring(qstring(fs, '\0')); ! 80: *FILENAME = argv[1]; /* initial file name */ ! 81: if (argc == 1) /* no filenames; use stdin */ ! 82: initgetrec(); ! 83: if (errorflag == 0) { ! 84: compile_time = 0; ! 85: run(winner); ! 86: } else ! 87: bracecheck(); ! 88: exit(errorflag); ! 89: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.