Annotation of researchv10no/cmd/cref/ind1.c, revision 1.1.1.1

1.1       root        1: #
                      2: # include "econs.h"
                      3: # include "ecmn.h"
                      4: # define SKIP 0
                      5: # define COLLECT 1
                      6: # define SKIP2 2
                      7: 
                      8: char   mone    -1;
                      9: int    tlno    1;
                     10: 
                     11: coll()
                     12: {
                     13:        cs = COLLECT;
                     14:        temp[t1].beg = &line[l];
                     15:        return;
                     16: }
                     17: 
                     18: save()
                     19: {
                     20:        extern  only;
                     21:        char    *pt1,*pt2,cbuf[30];
                     22:        int     a,tt,val;
                     23: 
                     24:        if(cs != COLLECT) {
                     25:                cs = SKIP;
                     26:                return;
                     27:        }
                     28:        cs = SKIP;
                     29:        line[l] = '\0';
                     30:        temp[t1].ct = &line[l] - temp[t1].beg;
                     31:        if(!count)
                     32:                if(temp[t1].ct == 1)    goto no;
                     33:        pt1 = temp[t1].beg-1;
                     34:        pt2 = cbuf-1;
                     35: 
                     36:        while(*++pt2 = *++pt1)
                     37:                if(*pt2 >= 'A' && *pt2 <= 'Z')
                     38:                        *pt2 =| 040;
                     39: 
                     40:        if(count)
                     41:                goto yes;
                     42:        val = search(cbuf,temp[t1].ct,&itab,0);
                     43: 
                     44:        if(!val == !only)       goto yes;
                     45: no:
                     46:        line[l] = c;
                     47:        return(0);
                     48: yes:
                     49:        if(count == 0) {
                     50:                tt = t1;
                     51:                while(tt)
                     52:                        if(comp(temp[t1].beg,temp[--tt].beg))   goto no;
                     53:        }
                     54:        temp[t1++].term = c;
                     55:        return(1);
                     56: }
                     57: 
                     58: out()
                     59: {
                     60:        auto    i,ct,t2;
                     61:        char    *b,*e;
                     62:        if(lflag) {
                     63:                printf("line too long: %s, line %d\n", curf, lno);
                     64:                lflag = 0;
                     65:        }
                     66:        if(cs == COLLECT)       save();
                     67:        t2 = 0;
                     68:        while(t2 < t1) {
                     69:                temp[t2].beg[temp[t2].ct] = temp[t2].term;
                     70:                t2++;
                     71:        }
                     72:        t2 = t1 - 1;
                     73:        while(t1--) {
                     74: /*printf("t1 = %d  beg = %o  ct = %d\n",t1,temp[t1].beg,temp[t1].ct); /* DEBUG */
                     75: 
                     76:                ct = temp[t1].ct;
                     77:                temp[t1].beg[ct] = temp[t1].term;
                     78:                if(ct > 15)     ct = 15;
                     79: 
                     80:                put(temp[t1].beg, ct);
                     81: 
                     82:                put("\t",1);
                     83: 
                     84:                if(!page) {
                     85:                        if(!single)
                     86:                                put(curf,curfl);
                     87:                        if(!dlineno) {
                     88:                                conf(lno,4,curs);
                     89:                                put(curs,4);
                     90:                        }
                     91:                } else {
                     92:                        conf(pn,4,curs);
                     93:                        put(curs,4);
                     94:                }
                     95:                if(word == 0) {
                     96:                        put("\t",1);
                     97:                        if(t1 >= 1)
                     98:                                b = temp[t1-1].beg;
                     99:                        else
                    100:                                b =  line;
                    101:                        if(t2 > t1)
                    102:                                e = temp[t1+1].beg + temp[t1+1].ct;
                    103:                        else
                    104:                        e = &line[l];
                    105: /*printf("e = %o       b = %o\n",e,b); /*DEBUG*/
                    106:                        put(b,e-b);
                    107:                }
                    108:                put("\n",1);
                    109:        }
                    110:        t1 = 0;
                    111:        l = -1;
                    112:        lno =+ tlno;
                    113:        tlno = 1;
                    114:        cs = SKIP;
                    115:        return;
                    116: }
                    117: 
                    118: ctout()
                    119: {
                    120:        register int    i, ct;
                    121:        register char   *t2;
                    122: 
                    123:        if(lflag) {
                    124:                printf("line too long: %s, line %d\n", curf, lno);
                    125:                lflag = 0;
                    126:        }
                    127:        if(cs == COLLECT)       save();
                    128: 
                    129:        while(t1--) {
                    130:                ct = temp[t1].ct;
                    131:                t2 = temp[t1].beg - 1;
                    132: /*             printf("out: %s %d\n", temp[t1].beg, ct);       /*DEBUG*/
                    133:                while(*++t2)
                    134:                        if(*t2 >= 'A' && *t2 <= 'Z')
                    135:                                *t2 =| 040;
                    136: 
                    137:                *t2 = '\n';
                    138: 
                    139:                put(temp[t1].beg, ct + 1);
                    140:        }
                    141:        t1 = 0;
                    142:        l = -1;
                    143:        lno =+ tlno;
                    144:        tlno = 1;
                    145:        cs = SKIP;
                    146:        return;
                    147: }
                    148: 
                    149: search(symbol,length,params,install)
                    150:        char    *symbol;
                    151:        int     length;
                    152:        struct  htab    *params;
                    153:        int     install;
                    154: {
                    155:        char    *sp,*p;
                    156:        static  int     *hptr,hsiz,nsym;
                    157:        static  char    *ssiz;
                    158:        static  int     curb;
                    159:        static  char    *symt;
                    160:        auto    h,i,j,k;
                    161: 
                    162:        if(hptr != params->hptr) {
                    163:                hptr = params->hptr;
                    164:                hsiz = params->hsiz;
                    165:                symt = params->symt;
                    166:                ssiz = params->ssiz;
                    167:                curb = params->curb;
                    168:                nsym = params->nsym;
                    169:        }
                    170: 
                    171:        symbol[length] = '\0';
                    172: /*printf("ssiz = %d; nsym = %d; %s\n", ssiz, nsym, symbol);/*DEBUG*/
                    173:        sp = symbol;
                    174: 
                    175:        i = length;
                    176:        h = 1;
                    177:        while(i--)
                    178:                h =* *sp++;
                    179: 
                    180:        if(h == 0100000) {
                    181:                h = 1;
                    182:        } else {
                    183:                h = h<0?(-h)%hsiz:h%hsiz;
                    184:        }
                    185:        if(h == 0)      h++;
                    186: /*             printf("%s %d\n",symbol,h);     /*DEBUG*/
                    187: 
                    188:        while((p = &symt[hptr[h]]) > symt) {
                    189:                j = length + 2;
                    190:                sp = symbol;
                    191:                while(--j) {
                    192:                        if(*p++ != *sp++)       goto no;
                    193:                }
                    194:                return(*p);
                    195: no:
                    196:                h = (h + h)%hsiz;
                    197:        }
                    198:        if(install) {
                    199:                if(++nsym >= hsiz) {
                    200:                        printf("Too many symbols in ignore/only file.\n");
                    201:                        dexit();
                    202:                }
                    203: 
                    204:                hptr[h] = curb;
                    205:                length++;
                    206:                if((curb + length) >= ssiz) {
                    207:                        printf("i/o file too big; ssiz = %d\n", ssiz);
                    208:                        dexit();
                    209:                }
                    210: 
                    211:                while(length--)
                    212:                        symt[curb++] = *symbol++;
                    213:                symt[curb++] = install;
                    214:                params->curb = curb;
                    215:                params->nsym = nsym;
                    216:        }
                    217:        return(0);
                    218: }
                    219: 
                    220: conf(n,width,buf) 
                    221:        char    *buf;
                    222: {
                    223:        auto    i,a;
                    224: 
                    225:        i = width;
                    226:        while(i--)      buf[i] = ' ';
                    227: 
                    228:        buf[(a = n/10)?conf(a,--width,buf):--width] = n%10 + '0';
                    229: 
                    230:        return(++width);
                    231: }
                    232: 
                    233: comp(a,b)
                    234:        char    *a;
                    235:        char    *b;
                    236: {
                    237:        a--;
                    238:        b--;
                    239:        while(*++a == *++b)
                    240:                if(*a == '\0')  return(1);
                    241:        return(0);
                    242: }
                    243: 
                    244: 
                    245: hyphen()
                    246: {
                    247: /*     printf("hyphen\n");     /*DEBUG*/
                    248:        if(gch[fl] == 0)
                    249:                flag[++fl] = &hyp1;
                    250:        return(1);
                    251: }
                    252: 
                    253: hyp1()
                    254: {
                    255:        char    tc;
                    256: /*     printf("hyp1 c = %o\n",c);      /*DEBUG*/
                    257:        if(c !=  '\n') {
                    258:                fl--;
                    259:                l--;
                    260:                tc = c;
                    261:                c = '-';
                    262:                save();
                    263:                c = tc;
                    264:                l++;
                    265:                return(0);
                    266:        } else {
                    267:                l =- 2;
                    268:                flag[fl] = &hyp2;
                    269:                hsw = 1;
                    270:                return(1);
                    271:        }
                    272: }
                    273: 
                    274: hyp2()
                    275: {
                    276:        extern  (*acts[]) ();
                    277: /*     printf("hyp2 c = %o l = %d\n",c,l);     /*DEBUG*/
                    278:        if(hsw && (tab[2].cl[c] == 0)) {
                    279:                l--;
                    280:                if(c == 3)      pno();
                    281:                if(c == '\n')   tlno++;
                    282:                return(1);
                    283:        }
                    284:        hsw = 0;
                    285:        if(tab[cs].cl[c]) {
                    286:                line[l] = '\n';
                    287:                (*acts[OUT])();
                    288:                fl--;
                    289:                return(0);
                    290:        }
                    291:        return(1);
                    292: }
                    293: 
                    294: pno()
                    295: {
                    296:        extern  (*acts[])();
                    297: 
                    298:        if(flag[fl] != &pno) {
                    299:                flag[++fl] = &pno;
                    300:                pn = 0;
                    301:                return(1);
                    302:        }
                    303:        if(c == '\n') {
                    304:                fl--;
                    305:                (*acts[OUT])();
                    306:                return(1);
                    307:        }
                    308:        pn = pn*10 + c - '0';
                    309:        return(1);
                    310: }
                    311: gobble2()
                    312: {
                    313:        static  ct2;
                    314: 
                    315:        if(cs == COLLECT)       save();
                    316: 
                    317:        if(flag[fl] != gobble2) {
                    318:                ct2 = 1;
                    319:                flag[++fl] = gobble2;
                    320:                return(1);
                    321:        }
                    322:        if(ct2--)       return(1);
                    323: 
                    324:        fl--;
                    325:        cs = SKIP;
                    326:        return(1);
                    327: }
                    328: 
                    329: bslash()
                    330: {
                    331:        if(cs == COLLECT)       save();
                    332:        cs = SKIP2;
                    333:        return(1);
                    334: }
                    335: 
                    336: 
                    337: error()
                    338: {
                    339:        printf("Error: %c %o\n", c, cs);
                    340:        dexit();
                    341: }

unix.superglobalmegacorp.com

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