|
|
1.1 ! root 1: #ifndef lint ! 2: static char sccsid[] = "@(#)main.c 4.2 8/11/83"; ! 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: if (strcmp(argv[0], "a.out")) ! 27: logit(argc, argv); ! 28: syminit(); ! 29: while (argc > 1) { ! 30: argc--; ! 31: argv++; ! 32: /* this nonsense is because gcos argument handling */ ! 33: /* folds -F into -f. accordingly, one checks the next ! 34: /* character after f to see if it's -f file or -Fx. ! 35: */ ! 36: if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f' && argv[0][2] == '\0') { ! 37: yyin = fopen(argv[1], "r"); ! 38: if (yyin == NULL) ! 39: error(FATAL, "can't open %s", argv[1]); ! 40: argc--; ! 41: argv++; ! 42: break; ! 43: } else if (argv[0][0] == '-' && TOLOWER(argv[0][1]) == 'f') { /* set field sep */ ! 44: if (argv[0][2] == 't') /* special case for tab */ ! 45: **FS = '\t'; ! 46: else ! 47: **FS = argv[0][2]; ! 48: continue; ! 49: } else if (argv[0][0] != '-') { ! 50: dprintf("cmds=|%s|\n", argv[0], NULL, NULL); ! 51: yyin = NULL; ! 52: lexprog = argv[0]; ! 53: argv[0] = argv[-1]; /* need this space */ ! 54: break; ! 55: } else if (strcmp("-d", argv[0])==0) { ! 56: dbg = 1; ! 57: } ! 58: else if(strcmp("-S", argv[0]) == 0) { ! 59: svflg = 1; ! 60: } ! 61: else if(strncmp("-R", argv[0], 2) == 0) { ! 62: if(thaw(argv[0] + 2) == 0) ! 63: rstflg = 1; ! 64: else { ! 65: fprintf(stderr, "not restored\n"); ! 66: exit(1); ! 67: } ! 68: } ! 69: } ! 70: if (argc <= 1) { ! 71: argv[0][0] = '-'; ! 72: argv[0][1] = '\0'; ! 73: argc++; ! 74: argv--; ! 75: } ! 76: svargc = --argc; ! 77: svargv = ++argv; ! 78: dprintf("svargc=%d svargv[0]=%s\n", svargc, svargv[0], NULL); ! 79: *FILENAME = *svargv; /* initial file name */ ! 80: if(rstflg == 0) ! 81: yyparse(); ! 82: dprintf("errorflag=%d\n", errorflag, NULL, NULL); ! 83: if (errorflag) ! 84: exit(errorflag); ! 85: if(svflg) { ! 86: svflg = 0; ! 87: if(freeze("awk.out") != 0) ! 88: fprintf(stderr, "not saved\n"); ! 89: exit(0); ! 90: } ! 91: run(); ! 92: exit(errorflag); ! 93: } ! 94: ! 95: logit(n, s) char *s[]; ! 96: { int i, tvec[2]; ! 97: FILE *f, *g; ! 98: char buf[512]; ! 99: if ((f=fopen("/crp/pjw/awkhist/awkhist", "a"))==NULL) ! 100: return; ! 101: time(tvec); ! 102: fprintf(f, "%-8s %s", getlogin(), ctime(tvec)); ! 103: for (i=0; i<n; i++) ! 104: fprintf(f, "'%s'", s[i]); ! 105: putc('\n', f); ! 106: if (strcmp(s[1], "-f")) { ! 107: fclose(f); ! 108: return; ! 109: } ! 110: if ((g=fopen(s[2], "r"))==NULL) { ! 111: fclose(f); ! 112: return; ! 113: } ! 114: while ((i=fread(buf, 1, 512, g))>0) ! 115: fwrite(buf, 1, i, f); ! 116: fclose(f); ! 117: fclose(g); ! 118: } ! 119: ! 120: yywrap() ! 121: { ! 122: return(1); ! 123: }
This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.