Annotation of researchv10no/cmd/ap/apnews/oapnews1.c, revision 1.1.1.1

1.1       root        1: # include "stdio.h"
                      2: # include "ctype.h"
                      3: # include "assert.h"
                      4: # include "signal.h"
                      5: # include "sys/types.h"
                      6: # include "sys/stat.h"
                      7: # include "cbt.h"
                      8: # include "time.h"
                      9: char names[20][14];
                     10: char heads[20][50];
                     11: # define NST 200
                     12: char storylist[NST][12];
                     13: int stc=0;
                     14: int intr();
                     15: char *getlogin(), *ctime();
                     16: struct tm *localtime();
                     17: int day, yesterday;
                     18: int stp=0;
                     19: int inolim=0;
                     20: int inodes[NST+5];
                     21: char *getenv(), *getpwd();
                     22: char nowfile[20];
                     23: char pwdir[50];
                     24: long filtim();
                     25: char *storydir = "/usr/spool/ap";
                     26: 
                     27: /* logging */
                     28: char *apnlog = "/usr/spool/ap/apnlog";
                     29: long tmstart, tmend;
                     30: int nslug, nstory, nsearch;
                     31: 
                     32: main(argc,argv)
                     33:        char *argv[];
                     34: {
                     35: char line[100];
                     36: int i, lc=1;
                     37: long l;
                     38: char *ctp, *userp;
                     39: char forcebuf[BUFSIZ];
                     40: setbuf(stdout, forcebuf);
                     41: for (argc--,argv++; argc>0 && argv[0][0]=='-'; argc--,argv++)
                     42:        switch(argv[0][1])
                     43:                {
                     44:                case 'f':
                     45:                        storydir = argv[1];
                     46:                        argv++; argc--;
                     47:                        break;
                     48:                }
                     49: tmstart = l = time(0);
                     50: day = localtime(&l)->tm_mday;
                     51: l -= 86400; /* go back one day */
                     52: yesterday = localtime(&l)->tm_mday;
                     53: signal (SIGINT, intr);
                     54: strcpy(pwdir, getpwd());
                     55: i = chdir(storydir);
                     56: if (i!=0)
                     57:        {
                     58:        fprintf(stderr, "no directory %s\n",storydir);
                     59:        exit(1);
                     60:        }
                     61: top();
                     62: extend(20);
                     63: display();
                     64: menu(lc);
                     65: fflush(stdout);
                     66: extend(30);
                     67: while (gets(line))
                     68:        {
                     69:        tpos(0,0);
                     70:        switch(line[0])
                     71:                {
                     72:                case '0': case '1': case '2': case '3': case '4': 
                     73:                case '5': case '6': case '7': case '8': case '9': 
                     74:                        i = atoi(line)-1;
                     75:                        if (i<0 || i>19) continue;
                     76:                        pr(names[i]);
                     77:                        nstory++;
                     78:                        lc=0;
                     79:                        break;
                     80:                case 0: /* continue this story */
                     81:                        if (lc==0)
                     82:                                pr(0);
                     83:                        else if (lc==1)
                     84:                                display();
                     85:                        else if (lc==2)
                     86:                                sums();
                     87:                        if (lc>0) menu(lc);
                     88:                        break;
                     89:                case '?':
                     90:                        menu(0);
                     91:                        break;
                     92:                case '!':
                     93:                        system(line+1);
                     94:                        break;
                     95:                case '.':
                     96:                        disprint();
                     97:                        break;
                     98:                case 'a':
                     99:                        pr(line);
                    100:                        nstory++;
                    101:                        lc=0;
                    102:                        break;
                    103:                case '+':
                    104:                case 'm':
                    105:                        display();
                    106:                        lc=1;
                    107:                        break;
                    108:                case 'M':
                    109:                        sums();
                    110:                        menu(lc=2);
                    111:                        break;
                    112:                case 't':
                    113:                        top();
                    114:                        extend(20);
                    115:                        display();
                    116:                        menu(lc=1);
                    117:                        break;
                    118:                case 'T':
                    119:                        top();
                    120:                        extend(20);
                    121:                        sums();
                    122:                        menu(lc=2);
                    123:                        break;
                    124:                case 'c':
                    125:                case 'C': /* copy file to my directory */
                    126:                        i = atoi(line+1);
                    127:                        if (i>0)
                    128:                                strcpy(nowfile, names[i-1]);
                    129:                        copyto(line+1, nowfile);
                    130:                        break;
                    131:                case 'D': /* delete file*/
                    132:                        i = atoi(line+1);
                    133:                        if (i>0)
                    134:                                strcpy(nowfile, names[i-1]);
                    135:                        printf("Deleting /%s/\n",nowfile);
                    136:                        unlink(nowfile);
                    137:                        break;
                    138:                case 'Y':
                    139:                case 'y': /* must get keyword list */
                    140:                        getkeys(line[0]=='Y');
                    141:                        break;
                    142:                case 'S':
                    143:                case 's': /* search for words */
                    144:                        wdsearch (line+1, line[0]=='S');
                    145:                        nsearch++;
                    146:                        break;
                    147:                case 'q':
                    148:                        tpos(23,0);
                    149:                        wrap();
                    150:                }
                    151:        fflush(stdout);
                    152:        }
                    153: tpos(23,0);
                    154: wrap();
                    155: }
                    156: intr()
                    157: {
                    158: tpos(23,0);
                    159: wrap();
                    160: exit(0);
                    161: }
                    162: int llens[10] ={70,70,70,70,70,70,70,70,70,70};
                    163: pr (s)
                    164:        char *s;
                    165: {
                    166: static FILE *f=NULL;
                    167: char line[120];
                    168: int i, k, k1;
                    169: if (s && s[0]==0)
                    170:        return;
                    171: if (s!=0)
                    172:        {
                    173:        if (f!= NULL) fclose(f);
                    174:        f = fopen(s, "r");
                    175:        if (f==NULL)
                    176:                {
                    177:                printf("No file %s\n", s);
                    178:                return;
                    179:                }
                    180:        strcpy(nowfile, s);
                    181:        }
                    182: else
                    183:        if (f==NULL) return;
                    184: tpos(12,0);
                    185: if (ifclear())
                    186:        clr2end();
                    187: for(i=0; i<10; i++)
                    188:        {
                    189:        if(fgets(line, 100, f)==0)
                    190:                break;
                    191:        trimnl(line);
                    192:        k = strlen(line);
                    193:        if (line[0]=='\t') k+= 7;
                    194:        if (!ifclear() &&ifclrline())
                    195:                clrline();
                    196:        fputs(line, stdout);
                    197:        if (!ifclear() && !ifclrline())
                    198:                for(k1=llens[i]; k1>k; k1--)
                    199:                        putchar(' ');
                    200:        printf("\n");
                    201:        llens[i]=k+1;
                    202:        }
                    203: }
                    204: trimnl(s)
                    205:        char *s;
                    206: {
                    207: while (*s) s++;
                    208: if (*--s == '\n') *s=0;
                    209: }
                    210: static hfgate=0;
                    211: static char hfbuff[5000];
                    212: static char *hflab[400];
                    213: static int hftop=0;
                    214: hfast (out, snam)
                    215:        char *out, *snam;
                    216: {
                    217: char *s;
                    218: int i;
                    219: if (hfgate==0)
                    220:        {
                    221:        int f, n;
                    222:        char fn[40], *index();
                    223:        sprintf(fn, "%s/.S%d", storydir, day);
                    224:        f = open(fn, 0);
                    225:        if (f<0) return(0);
                    226:        n= read (f, hfbuff, 5000);
                    227:        hfbuff[n]=0;
                    228:        close(f);
                    229:        hfgate=1;
                    230:        s = hfbuff;
                    231:        for(hftop=0; hftop<400; hftop++)
                    232:                {
                    233:                if (*s==0) break;
                    234:                hflab[hftop] = s;
                    235:                s = index(s, '\n');
                    236:                if (s==NULL) break;
                    237:                *s++ = 0;
                    238:                }
                    239:        }
                    240: for(i=0; i<hftop; i++)
                    241:        {
                    242:        if (strncmp(snam, hflab[i], 5)==0 && hflab[i][6] !=0)
                    243:                {
                    244:                strcpy(out, hflab[i]+6);
                    245:                return(1);
                    246:                }
                    247:        }
                    248: return(0);
                    249: }
                    250: hget(s, f)
                    251:        char s[];
                    252:        FILE *f;
                    253: {
                    254: int i, c, nw;
                    255: char line[100], *wv[40], *p;
                    256: if (f==NULL)
                    257:        {
                    258:        *s=0;
                    259:        return;
                    260:        }
                    261: fgets(line, 100, f);
                    262: trimnl(line);
                    263: if (line[1]==' ' && line[3]==' ' && line[6]=='-') /* their heading */
                    264:        {
                    265:        for(p=line+7; (c = *p) && c!=' '; p++)
                    266:                *s++ = c;
                    267:        *s=0;
                    268:        return;
                    269:        }
                    270: nw = getargs(line, wv);
                    271: strcpy(s, wv[i=pickbig(wv, nw)]);
                    272: wv[i]="";
                    273: strcat(s, wv[pickbig(wv,nw)]);
                    274: return;
                    275: }
                    276: notnew(i, inodes, fname)
                    277:        char *fname;
                    278:        int *inodes;
                    279: {
                    280: int ino, j;
                    281: struct stat stbuff;
                    282: stat (fname, &stbuff);
                    283: ino = stbuff.st_ino;
                    284: for(j=0; j<i; j++)
                    285:        if (ino==inodes[j])
                    286:                return(1);
                    287: inodes[i]=ino;
                    288: return(0);
                    289: }
                    290: display()
                    291: {
                    292: getnam(20);
                    293: disprint();
                    294: nslug += 20;
                    295: }
                    296: disprint()
                    297: {
                    298: int i, kl, a;
                    299: char bform[30];
                    300: FILE *fl;
                    301: startsc();
                    302: for(i=0; i<20; i++)
                    303:        {
                    304:        if (names[i][0]== '\0')
                    305:                break;
                    306:        if (hfast(heads[i], names[i]))
                    307:                continue;
                    308:        fl = fopen(names[i], "r");
                    309:        if (fl!=NULL)
                    310:                {
                    311:                hget(heads[i],fl);
                    312:                fclose(fl);
                    313:                }
                    314:        else
                    315:                heads[i][0]=names[i][0]=0;
                    316:        }
                    317: for(kl=i=0; i<10; i++)
                    318:        {
                    319:        a = strlen(heads[i]);
                    320:        if (a>kl) kl=a;
                    321:        }
                    322: kl += 2;
                    323: if (kl>30) kl=30;
                    324: sprintf(bform, "%%3d: (%%5s) %%-%d.%ds ", kl, kl);
                    325: for(i=0; i<10; i++)
                    326:        {
                    327:        clrline();
                    328:        if (strlen(names[i])<=5)
                    329:                printf(bform, i+1, names[i], heads[i]);
                    330:        else
                    331:                printf("%3d: (%11s) %-19.19s ",i+1,names[i],heads[i]);
                    332:        printf("%3d: (%5s) %.30s\n",i+11,names[i+10],heads[i+10]);
                    333:        }
                    334: }
                    335: top()
                    336: {
                    337:        char tstories[NST][6];
                    338:        int f, n, i, j;
                    339:        stc = inolim = stp = 0;
                    340:        f = open("..tlist", 0);
                    341:        if (f<0) return;
                    342:        n = read(f, tstories, NST*6);
                    343:        stc = n/6;
                    344:        /* reverse tstories */
                    345:        for(i=0, j=stc-1; i<j; i++,j--)
                    346:                {
                    347:                char x[6];
                    348:                strncpy(x,tstories[i],6);
                    349:                strncpy(tstories[i],tstories[j],6);
                    350:                strncpy(tstories[j],x,6);
                    351:                }
                    352:        close(f);
                    353:        for(i=0; i<stc; i++)
                    354:                {
                    355:                strncpy(storylist[i],tstories[i],6);
                    356:                storylist[i][6]= 0;
                    357:                }
                    358: }
                    359: getnam(n)
                    360: {
                    361: int i;
                    362: for (i=0; i<n; i++)
                    363:        heads[i][0]= names[i][0]= '\0';
                    364: for (i=0; i<n; i++)
                    365:        {
                    366:                try:
                    367:                if (stp>=stc) break;
                    368:                strcpy(names[i], storylist[stp++]);
                    369: 
                    370:                if (names[i][0]=='a' && isdigit(names[i][1]))
                    371:                        continue;
                    372:                if (names[i][5]=='.' && names[i][6]=='a' &&
                    373:                isdigit(names[i][7]))
                    374:                        continue;
                    375:                goto try;
                    376:        }
                    377: }
                    378: sums()
                    379: {
                    380: int i;
                    381: startsc();
                    382: getnam(10);
                    383: for (i=0; i<10; i++)
                    384:        {
                    385:        printf("%d ",i+1);
                    386:        prsum(names[i]);
                    387:        }
                    388: }
                    389: wrap()
                    390: {
                    391: FILE *f;
                    392: tmend = time(0);
                    393: f = fopen(apnlog, "a");
                    394: if (f!=NULL)
                    395:        {
                    396:        fprintf(f,
                    397:        "%s slugs %d stories %d searches %d dir %s %.16s %d secs\n",
                    398:                getlogin(), nslug, nstory, nsearch, storydir,
                    399:                ctime(&tmstart), tmend-tmstart);
                    400:        fclose(f);
                    401:        }
                    402: exit(0);
                    403: }

unix.superglobalmegacorp.com

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