|
|
1.1 ! root 1: #include "stdio.h" ! 2: #include "ctype.h" ! 3: #include "awk.def" ! 4: #include "awk.h" ! 5: #define TOLOWER(c) (isupper(c) ? tolower(c) : c) /* ugh!!! */ ! 6: ! 7: int dbg = 0; ! 8: int svflg = 0; ! 9: int rstflg = 0; ! 10: int svargc; ! 11: char **svargv, **xargv; ! 12: extern FILE *yyin; /* lex input file */ ! 13: char *lexprog; /* points to program argument if it exists */ ! 14: extern errorflag; /* non-zero if any syntax errors; set by yyerror */ ! 15: ! 16: int filefd, symnum, ansfd; ! 17: char *filelist; ! 18: extern int maxsym, errno; ! 19: main(argc, argv) int argc; char *argv[]; { ! 20: if (argc == 1) ! 21: error(FATAL, "Usage: awk [-f source | 'cmds'] [files]"); ! 22: if (strcmp(argv[0], "a.out")) ! 23: logit(argc, argv); ! 24: syminit(); ! 25: while (argc > 1) { ! 26: argc--; ! 27: argv++; ! 28: /* this nonsense is because gcos argument handling */ ! 29: /* folds -F into -f. accordingly, one checks the next ! 30: /* character after f to see if it's -f file or -Fx. ! 31: */ ! 32: if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f' && argv[0][2] == '\0') { ! 33: yyin = fopen(argv[1], "r"); ! 34: if (yyin == NULL) ! 35: error(FATAL, "can't open %s", argv[1]); ! 36: argc--; ! 37: argv++; ! 38: break; ! 39: } else if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f') { /* set field sep */ ! 40: if (argv[0][2] == 't') /* special case for tab */ ! 41: **FS = '\t'; ! 42: else ! 43: **FS = argv[0][2]; ! 44: continue; ! 45: } else if (argv[0][0] != '-') { ! 46: dprintf("cmds=|%s|\n", argv[0], NULL, NULL); ! 47: yyin = NULL; ! 48: lexprog = argv[0]; ! 49: argv[0] = argv[-1]; /* need this space */ ! 50: break; ! 51: } else if (strcmp("-d", argv[0])==0) { ! 52: dbg = 1; ! 53: } ! 54: else if(strcmp("-S", argv[0]) == 0) { ! 55: svflg = 1; ! 56: } ! 57: else if(strncmp("-R", argv[0], 2) == 0) { ! 58: if(thaw(argv[0] + 2) == 0) ! 59: rstflg = 1; ! 60: else { ! 61: fprintf(stderr, "not restored\n"); ! 62: exit(1); ! 63: } ! 64: } ! 65: } ! 66: if (argc <= 1) { ! 67: argv[0][0] = '-'; ! 68: argv[0][1] = '\0'; ! 69: argc++; ! 70: argv--; ! 71: } ! 72: svargc = --argc; ! 73: svargv = ++argv; ! 74: dprintf("svargc=%d svargv[0]=%s\n", svargc, svargv[0], NULL); ! 75: *FILENAME = *svargv; /* initial file name */ ! 76: if(rstflg == 0) ! 77: yyparse(); ! 78: dprintf("errorflag=%d\n", errorflag, NULL, NULL); ! 79: if (errorflag) ! 80: exit(errorflag); ! 81: if(svflg) { ! 82: svflg = 0; ! 83: if(freeze("awk.out") != 0) ! 84: fprintf(stderr, "not saved\n"); ! 85: exit(0); ! 86: } ! 87: run(); ! 88: exit(errorflag); ! 89: } ! 90: ! 91: logit(n, s) char *s[]; ! 92: { int i, tvec[2]; ! 93: FILE *f, *g; ! 94: char buf[512]; ! 95: if ((f=fopen("/crp/pjw/awkhist/awkhist", "a"))==NULL) ! 96: return; ! 97: time(tvec); ! 98: fprintf(f, "%-8s %s", getlogin(), ctime(tvec)); ! 99: for (i=0; i<n; i++) ! 100: fprintf(f, "'%s'", s[i]); ! 101: putc('\n', f); ! 102: if (strcmp(s[1], "-f")) { ! 103: fclose(f); ! 104: return; ! 105: } ! 106: if ((g=fopen(s[2], "r"))==NULL) { ! 107: fclose(f); ! 108: return; ! 109: } ! 110: while ((i=fread(buf, 1, 512, g))>0) ! 111: fwrite(buf, 1, i, f); ! 112: fclose(f); ! 113: fclose(g); ! 114: } ! 115: ! 116: yywrap() ! 117: { ! 118: return(1); ! 119: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.