Annotation of researchv10no/cmd/ap/apnews/oapnews1.c, revision 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.