Annotation of researchv10no/cmd/egrep/main.c, revision 1.1

1.1     ! root        1: #include       "hdr.h"
        !             2: 
        !             3: #ifdef DOSTATS
        !             4: char statsflags[1024], *statsfptr = statsflags;
        !             5: #endif
        !             6: 
        !             7: State states[NSTATES];
        !             8: State *nxtst();
        !             9: int state[NSTATES];
        !            10: int line = 1;
        !            11: int name[MAXLIN];
        !            12: int left[MAXLIN];
        !            13: int right[MAXLIN];
        !            14: int parent[MAXLIN];
        !            15: int foll[MAXLIN];
        !            16: int positions[MAXPOS];
        !            17: char chars[MAXLIN];
        !            18: int nxtpos = 0;
        !            19: int inxtpos;
        !            20: int nxtchar = 0;
        !            21: int tmpstat[MAXLIN];
        !            22: int begstat[MAXLIN];
        !            23: int colpos[MAXLIN];
        !            24: State *istat;
        !            25: int nstate = 1;
        !            26: int xstate;
        !            27: int count;
        !            28: int icount;
        !            29: char *input;
        !            30: char *progname;
        !            31: int begout;
        !            32: int begcnt;
        !            33: int cntpos;
        !            34: int nxtfoll;
        !            35: 
        !            36: char reinit = 0;
        !            37: 
        !            38: long   lnum;
        !            39: int    bflag;
        !            40: int    cflag;
        !            41: int    fflag;
        !            42: int    hflag = 1;
        !            43: int    iflag;
        !            44: int    lflag;
        !            45: int    nflag;
        !            46: int    sflag;
        !            47: int    vflag;
        !            48: int    nfile;
        !            49: long   tln;
        !            50: int    nsucc;
        !            51: int    badbotch;
        !            52: 
        !            53: int    expfile;
        !            54: int    bmegrep = 0;
        !            55: int    scanexit = 0;
        !            56: 
        !            57: extern char *optarg;
        !            58: extern int optind, getopt();
        !            59: 
        !            60: usage()
        !            61: {
        !            62:        fprint(2, "usage: %s [ -bchilnsv ] [ -e pattern ] [ -f file ] [ pattern ] [ file ] ...\n", progname);
        !            63:        exit(2);
        !            64: }
        !            65: 
        !            66: main(argc, argv)
        !            67: char **argv;
        !            68: {
        !            69:        register c;
        !            70:        int errflg = 0;
        !            71:        int (*fn)(), execute(), bmexecute();
        !            72:        int etext();
        !            73:        char *ffile;
        !            74:        char buf[2048];
        !            75: 
        !            76:        if(progname = strrchr(argv[0], '/'))
        !            77:                progname++;
        !            78:        else
        !            79:                progname = argv[0];
        !            80: 
        !            81:        while(( c = getopt(argc, argv, "bchie:f:lnsv?")) != -1){
        !            82: #ifdef DOSTATS
        !            83:                *statsfptr++ = c;
        !            84: #endif
        !            85:                switch(c) {
        !            86: 
        !            87:                case 'b':
        !            88:                        bflag++;
        !            89:                        continue;
        !            90: 
        !            91:                case 'c':
        !            92:                        cflag++;
        !            93:                        continue;
        !            94: 
        !            95:                case 'e':
        !            96:                        input = optarg;
        !            97:                        continue;
        !            98: 
        !            99:                case 'f':
        !           100:                        fflag++;
        !           101:                        ffile = optarg;
        !           102:                        continue;
        !           103: 
        !           104:                case 'h':
        !           105:                        hflag = 0;
        !           106:                        continue;
        !           107: 
        !           108:                case 'i':
        !           109:                        iflag++;
        !           110:                        continue;
        !           111: 
        !           112:                case 'l':
        !           113:                        lflag++;
        !           114:                        continue;
        !           115: 
        !           116:                case 'n':
        !           117:                        nflag++;
        !           118:                        continue;
        !           119: 
        !           120:                case 's':
        !           121:                        sflag++;
        !           122:                        continue;
        !           123: 
        !           124:                case 'v':
        !           125:                        vflag++;
        !           126:                        continue;
        !           127: 
        !           128:                case '?':
        !           129:                        errflg++;
        !           130:                        continue;
        !           131:                }
        !           132:        }
        !           133: 
        !           134:        if (errflg)
        !           135:                usage();
        !           136: 
        !           137: #ifdef DOSTATS
        !           138:        statsexpr = statspat = (char *)malloc(MAXPOS);
        !           139:        onexit(dostats);
        !           140: #endif
        !           141:        argc -= optind;
        !           142:        argv += optind;
        !           143:        if (fflag) {
        !           144:                if ((expfile = open(ffile, 0)) < 0) {
        !           145:                        fprint(2, "%s: can't open %s\n", progname, ffile);
        !           146:                        exit(2);
        !           147:                }
        !           148:        } else if (input == 0) {
        !           149:                if ((input = *argv++) == 0)
        !           150:                        usage();
        !           151:                argc--;
        !           152:        }
        !           153:        Finit(1, (char *)0);
        !           154: 
        !           155: #ifdef MAILPREP
        !           156:        mailprep();
        !           157: #endif /* MAILPREP */
        !           158: 
        !           159:        yyparse();
        !           160: 
        !           161: #ifdef MAILPREP
        !           162:        maildone();
        !           163: #endif /* MAILPREP */
        !           164: 
        !           165:        if(!vflag && islit(buf)){
        !           166:                bmprep(buf);
        !           167:                fn = bmexecute;
        !           168:        } else
        !           169:                fn = execute;
        !           170: 
        !           171:        cgotofn();
        !           172:        nfile = argc;
        !           173:        if (argc<=0) {
        !           174:                if (lflag) exit(1);
        !           175:                scanexit = 1;
        !           176:                (*fn)((char *)0);
        !           177:        }
        !           178:        else while (--argc >= 0) {
        !           179:                if (reinit == 1) clearg();
        !           180:                scanexit = argc == 0;
        !           181:                (*fn)(*argv++);
        !           182:        }
        !           183:        exit(badbotch ? 2 : nsucc==0);
        !           184: }
        !           185: 
        !           186: #ifdef DOSTATS
        !           187: #include       <errno.h>
        !           188: #define                NAME            "/tmp/grepdata"
        !           189: dostats()
        !           190: {
        !           191:        int mailfd;
        !           192: 
        !           193:        umask(0);
        !           194:        mailfd = open(NAME, 1);
        !           195:        if((mailfd < 0) && (errno != ECONC)){
        !           196:                umask(0);
        !           197:                mailfd = creat(NAME, 03666);
        !           198:        }
        !           199:        if(mailfd >= 0){
        !           200:                Finit(mailfd, (char *)0);
        !           201:                Fseek(mailfd, 0L, 2);
        !           202:                *statsfptr = 0;
        !           203:                Fprint(mailfd, "\321egrep:%s:%d:%d:%d:%d:%d: %s\n",
        !           204:                        statsflags, nlines, nbytes, ntrans, nfollow, nmaxfoll, statspat);
        !           205:                Fflush(mailfd);
        !           206:        }
        !           207: }
        !           208: #endif

unix.superglobalmegacorp.com

This archive runs on limited infrastructure. Preserving old code on modern bandwidth. Automated agents are requested to crawl responsibly.