Annotation of researchv10no/cmd/gre/buf.c, revision 1.1

1.1     ! root        1: #include       <libc.h>
        !             2: 
        !             3: #define        BUFSIZE 65536
        !             4: static char buf[BUFSIZE], *next = &buf[BUFSIZE], *rnext = buf;
        !             5: long cnt;
        !             6: 
        !             7: rd(b, e)
        !             8:        register char **b, **e;
        !             9: {
        !            10:        int n, m;
        !            11: 
        !            12:        if((*b == 0) || (*b == *e))
        !            13:                rnext = *b = *e = buf;
        !            14:        if(rnext == &buf[BUFSIZE]){
        !            15:                if(*b > buf){
        !            16:                        if(next < *b){
        !            17:                                /* fail(next, *b); */
        !            18:                        }
        !            19:                        memmove(buf, *b, n = rnext - *b);
        !            20:                        rnext -= (*b - buf);
        !            21:                        next = *b = buf;
        !            22:                }
        !            23:        }
        !            24:        if((n = read(0, rnext, &buf[BUFSIZE] - rnext)) <= 0){
        !            25:                return(n);
        !            26:        }
        !            27:        *e = (rnext += n);
        !            28:        return(1);
        !            29: }
        !            30: 
        !            31: match(b, e)
        !            32:        register char **b, **e;
        !            33: {
        !            34:        char *s, *f;
        !            35:        int eoffset, n;
        !            36: 
        !            37:        cnt++;
        !            38:        for(s = *b; s >= buf;)
        !            39:                if(*--s == '\n')
        !            40:                        break;
        !            41:        s++;
        !            42:        if(next != s){
        !            43:                /* fail(next, s); */
        !            44:        }
        !            45:        for(f = *e;;){
        !            46:                for(; f < rnext; f++)
        !            47:                        if(*f == '\n')
        !            48:                                goto done;
        !            49:                eoffset = f-s;
        !            50:                if((n = rd(&s, &f)) <= 0)
        !            51:                        return(n);
        !            52:                f = s+eoffset;
        !            53:        }
        !            54: done:
        !            55:        f++;
        !            56:        /* succ(s, f) */
        !            57:        next = *b = f;
        !            58:        *e = rnext;
        !            59:        return(1);
        !            60: }

unix.superglobalmegacorp.com

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