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