Annotation of researchv10no/cmd/ap/apkeys/par.c, revision 1.1.1.1

1.1       root        1: # include "stdio.h"
                      2: # include "assert.h"
                      3: # include "key..c"
                      4: int nseq =0;
                      5: int nsent=0;
                      6: int nstory=0;
                      7: int ndest= -1;
                      8: extern int destyet;
                      9: # define NW 2000
                     10: struct wordstr wds[NW];
                     11: int nwds = 0;
                     12: int wseen=0;
                     13: int final=0;
                     14: extern char *udir, *uname;
                     15: mkwrd(w, negfl)
                     16:        char *w;
                     17: {
                     18: struct wordstr *wp;
                     19: wp = &wds[nwds++];
                     20: wp->wch  = w;
                     21: wp ->seq= nseq;
                     22: wp->ifneg = negfl;
                     23: wp->single=0;
                     24: wp->mask = (1<<wseen);
                     25: if (!negfl)
                     26:        final |= (1<<wseen);
                     27: wp->which = SEQ;
                     28: wseen++;
                     29: assert(nwds<NW);
                     30: }
                     31: int sqseen=0;
                     32: #define NSEQ 2000
                     33: struct matchstr seqs[NSEQ];
                     34: int len[NSEQ];
                     35: mkseq()
                     36: {
                     37: struct matchstr *sp;
                     38: len[nseq]=wseen;
                     39: sp = &seqs[nseq++];
                     40: sp->next = nsent;
                     41: sp->lim = final;
                     42: sp->smask = (1<<sqseen);
                     43: sp->ntype = SENT;
                     44: assert (nseq<NSEQ);
                     45: if (wseen == 1)
                     46:        wds[nwds-1].single=1;
                     47: wseen=final=0;
                     48: sqseen++;
                     49: }
                     50: int snseen=0;
                     51: #define NSENT 2000
                     52: struct matchstr sents[NSENT];
                     53: mksent()
                     54: {
                     55: struct matchstr *sp;
                     56: sp = &sents[nsent++];
                     57: sp->next = nstory;
                     58: sp->lim = (1<<sqseen)-1;
                     59: sp->smask = (1<<snseen);
                     60: sp->ntype = STORY;
                     61: assert (nsent<NSENT);
                     62: sqseen=0;
                     63: snseen++;
                     64: }
                     65: #define NSTORY 900
                     66: struct matchstr stories[NSTORY];
                     67: mkstory()
                     68: {
                     69: struct matchstr *sp;
                     70: if (destyet==0) defdest();
                     71: sp = &stories[nstory++];
                     72: sp->next = (ndest>0 ? ndest : 0);
                     73: sp->lim = (1<<snseen)-1;
                     74: sp->ntype = DEST;
                     75: assert (nstory<NSTORY);
                     76: snseen=0;
                     77: }
                     78: # define ND 200
                     79: struct deststr dests[ND];
                     80: int stuff = 3;
                     81: svwh(x)
                     82:        char *x;
                     83: {
                     84: ndest++;
                     85: destyet=1;
                     86: dests[ndest].dstr = x;
                     87: dests[ndest].sndflg = stuff;
                     88: dests[ndest].homedir = udir;
                     89: }
                     90: optimize()
                     91: {
                     92: int i;
                     93: struct wordstr *wp;
                     94: struct matchstr *sp, *xp;
                     95: for(i=0; i<nsent; i++)
                     96:        {
                     97:        xp = &sents[i];
                     98:        sp = &stories[xp->next];
                     99:        if (xp->smask == sp->lim)
                    100:                {
                    101:                xp->next = sp->next;
                    102:                xp->ntype = sp->ntype;
                    103:                xp->smask = sp->smask;
                    104:                sp->ntype=0;
                    105:                }
                    106:        }
                    107: for(i=0; i<nseq; i++)
                    108:        {
                    109:        xp = &seqs[i];
                    110:        sp = &sents[xp->next];
                    111:        if (xp->smask == sp->lim)
                    112:                {
                    113:                xp->next = sp->next;
                    114:                xp->ntype = sp->ntype;
                    115:                xp->smask = sp->smask;
                    116:                sp->ntype=0;
                    117:                }
                    118:        }
                    119: for(i=0; i<nwds; i++)
                    120:        {
                    121:        wp = &wds[i];
                    122:        sp = &seqs[wp->seq];
                    123:        if (wp->single)
                    124:                {
                    125:                wp->seq = sp->next;
                    126:                wp->which = sp->ntype;
                    127:                wp->mask = sp->smask;
                    128:                if (wp->ifneg)
                    129:                        {
                    130:                        switch(wp->which)
                    131:                                {
                    132:                                case SENT:
                    133:                                        sents[wp->seq].lim &= (~wp->mask);
                    134:                                        break;
                    135:                                case STORY:
                    136:                                        stories[wp->seq].lim &= (~wp->mask);
                    137:                                        break;
                    138:                                }
                    139:                        }
                    140:                sp->ntype=0;
                    141:                }
                    142:        }
                    143: }
                    144: compress()
                    145: {
                    146: int i, j, k;
                    147: struct matchstr *sp, *tp;
                    148: for(i=0, j=nsent-1; i<j; i++)
                    149:        {
                    150:        if (sents[i].ntype!=0)
                    151:                continue;
                    152:        while (sents[j].ntype==0)
                    153:                j--;
                    154:        if (i>=j) break;
                    155:        sents[i]=sents[j];
                    156:        sents[j].ntype=0;
                    157:        for(k=0; k<nwds; k++)
                    158:                {
                    159:                assert(!(wds[k].which==SENT && wds[k].seq==i));
                    160:                if (wds[k].seq == j && wds[k].which == SENT)
                    161:                        wds[k].seq=i;
                    162:                }
                    163:        for(k=0; k<nseq; k++)
                    164:                {
                    165:                assert(!(seqs[k].ntype==SENT && seqs[k].next==i))
                    166:                if (seqs[k].next==j && seqs[k].ntype==SENT)
                    167:                        seqs[k].next=i;
                    168:                }
                    169:        }
                    170: if (sents[i].ntype) i++;
                    171: nsent = i;
                    172: for(i=0, j=nseq-1; i<j; i++)
                    173:        {
                    174:        if (seqs[i].ntype!=0)
                    175:                continue;
                    176:        while (seqs[j].ntype==0)
                    177:                j--;
                    178:        if (i>=j) break;
                    179:        seqs[i]=seqs[j];
                    180:        seqs[j].ntype=0;
                    181:        len[i]=len[j];
                    182:        for(k=0; k<nwds; k++)
                    183:                {
                    184:                assert(!(wds[k].which==SEQ && wds[k].seq==i));
                    185:                if (wds[k].seq == j && wds[k].which == SEQ)
                    186:                        wds[k].seq=i;
                    187:                }
                    188:        }
                    189: if (seqs[i].ntype) i++;
                    190: nseq = i;
                    191: for(i=0, j=nstory-1; i<j; i++)
                    192:        {
                    193:        if (stories[i].ntype!=0)
                    194:                continue;
                    195:        while (stories[j].ntype==0)
                    196:                j--;
                    197:        if (i>=j) break;
                    198:        stories[i]=stories[j];
                    199:        stories[j].ntype=0;
                    200:        for(k=0; k<nwds; k++)
                    201:                {
                    202:                assert(!(wds[k].which==STORY && wds[k].seq==i));
                    203:                if (wds[k].seq == j && wds[k].which == STORY)
                    204:                        wds[k].seq=i;
                    205:                }
                    206:        for(k=0; k<nseq; k++)
                    207:                {
                    208:                assert(!(seqs[k].ntype==STORY && seqs[k].next==i))
                    209:                if (seqs[k].next==j && seqs[k].ntype==STORY)
                    210:                        seqs[k].next=i;
                    211:                }
                    212:        for(k=0; k<nsent; k++)
                    213:                {
                    214:                assert(!(sents[k].ntype==STORY && sents[k].next==i))
                    215:                if (sents[k].next==j && sents[k].ntype==STORY)
                    216:                        sents[k].next=i;
                    217:                }
                    218:        }
                    219: if (stories[i].ntype) i++;
                    220: nstory = i;
                    221: }
                    222: dump()
                    223: {
                    224: optimize();
                    225: compress();
                    226: prvecs();
                    227: }
                    228: prvecs()
                    229: {
                    230: int i;
                    231: int comp(), exch();
                    232: shell (nwds, comp, exch);
                    233: printf("%d entries in word list; word, seq, negfl, which, mask\n", nwds);
                    234: for(i=0; i<nwds; i++)
                    235:        printf("%s %d %d %d %d\n", wds[i].wch, wds[i].seq, wds[i].ifneg, wds[i].which, wds[i].mask);
                    236: printf("%d entries in sequence list; sent, ntype, lim, mask, length\n", nseq);
                    237: for(i=0; i<nseq; i++)
                    238:        printf("%d %d %d %d %d\n", seqs[i].next, seqs[i].ntype, seqs[i].lim, seqs[i].smask, len[i]);
                    239: printf("%d entries in sentence list; story, ntype, lim, mask\n", nsent);
                    240: for(i=0; i<nsent; i++)
                    241:        printf("%d %d %d %d\n", sents[i].next, sents[i].ntype, sents[i].lim, sents[i].smask);
                    242: printf("%d entries in story list; dest, ntype, lim\n", nstory);
                    243: for(i=0; i<nstory; i++)
                    244:        printf("%d %d %d\n", stories[i].next, stories[i].ntype, stories[i].lim);
                    245: printf("%d entries in destination list; level, dest\n", ndest+1);
                    246: for(i=0; i<=ndest; i++)
                    247:        {
                    248:        char *p, *s;
                    249:        p = dests[i].dstr;
                    250:        while (*p=='>' || *p==' ' || *p=='\t')
                    251:                p++;
                    252:        if (*p=='|' || *p=='/')
                    253:                printf("%d %s\n", dests[i].sndflg, dests[i].dstr);
                    254:        else
                    255:                {
                    256:                printf("%d ", dests[i].sndflg);
                    257:                for(s=dests[i].dstr; s<p; s++)
                    258:                        putchar(*s);
                    259:                printf("%s/%s\n", dests[i].homedir, p);
                    260:                }
                    261:        }
                    262: }
                    263: svsz(n)
                    264: {
                    265: stuff=n;
                    266: }
                    267: defdest()
                    268: {
                    269: static char dbuff[20];
                    270:        ndest++;
                    271:        sprintf(dbuff, "| mail %s", uname);
                    272:        dests[ndest].dstr = svc(dbuff);
                    273:        dests[ndest].sndflg=3;
                    274:        destyet=1;
                    275:        }
                    276: comp(i,j) /* compares word list for i and j; true if ok */
                    277: {
                    278: return (strcmp (wds[i].wch, wds[j].wch) <= 0);
                    279: }
                    280: exch(i,j)
                    281: {
                    282: struct wordstr t;
                    283: t = wds[i];
                    284: wds[i]=wds[j];
                    285: wds[j]=t;
                    286: }

unix.superglobalmegacorp.com

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