Annotation of researchv10no/cmd/docgen/cov.cpio, revision 1.1.1.1

1.1       root        1: 0707070035330205021006640000510000040000010144070423770206100001100000001163Makefile# docgen defaults to coversheet script mcsdata
                      2: # timestamp is used by tmac.cs to compute timestamp for itds
                      3: # cstrans is used by tmac.cs to package & ship coversheet
                      4: #      to itds database
                      5: all:   cstrans timestamp docgen
                      6: docgen: docgen.c
                      7: cstrans:       header.h trans.l getstamp.o
                      8:        lex trans.l
                      9:        cc lex.yy.c getstamp.o -ll -o cstrans
                     10: timestamp: timestamp.o getstamp.o
                     11:        cc timestamp.o getstamp.o -o timestamp
                     12: install: cstrans timestamp docgen
                     13:        cp docgen /usr/bin
                     14:        cp mcsdata /usr/lib/docgen
                     15:        cp cstrans /usr/lib/tmac
                     16:        cp timestamp /usr/lib/tmac
                     17:        cp name.sed /usr/lib/tmac
                     18:        cp sendcover.sh /usr/lib/tmac/sendcover
                     19: clean:
                     20:        rm cstrans lex.yy.c
                     21: 0707070035330025251006640000510000040000010073170412351073100001100000043541docgen.c/**********
                     22:                                docgen.c
                     23: 
                     24:        (091984 version: from llc 080284; minor changes by vbt)
                     25: 
                     26:        modify *mmfile, *msfile, and *mcfile strings as needed to supply
                     27:                full pathnames for mmdata, msdata, and mcsdata files;
                     28: 
                     29: **********/
                     30: #include <stdio.h>
                     31: #include <signal.h>
                     32: char *mmfile="/usr/lib/docgen/mmdata";
                     33: char *msfile="/usr/lib/docgen/msdata";
                     34: char *mcfile="/usr/lib/docgen/mcsdata";
                     35: char *wr = "/usr/lib/docgen/wr";
                     36: #define eatblanks(a) while((c=getc(a)) == ' '|| c == '\t')
                     37: #define MAX 100
                     38: #define CMAX 7500
                     39: #define LMAX 200
                     40: #define QMAX 100
                     41: #define NPATH 10
                     42: #define NENT 200
                     43: #define BUFS 512
                     44: #define LABMAX 20
                     45: #define STACK 10
                     46: #define NEST 10
                     47: 
                     48: int inap;
                     49: int debug = 0;
                     50: int sdebug = 0;
                     51: int verbose = 0;
                     52: #define ARGS 1
                     53: #define ONELINE 2
                     54: #define MANY 4
                     55: #define OUT 8
                     56: #define PRINT 16
                     57: #define SKIP 32
                     58: #define BLOOP 128
                     59: #define PATH 256
                     60: #define QUEST 512
                     61: #define STUFF 1024
                     62: #define NAME 2048
                     63: #define SUM 4096
                     64: #define PAR 8192
                     65: #define FLOOP 16384
                     66: #define SEVERAL        32768
                     67: #define QSTUFF 65536
                     68: 
                     69: struct q_a {
                     70:        char *qtext;
                     71:        char *text;
                     72:        char *macro;
                     73:        unsigned long type;
                     74:        struct qa *argq;
                     75: }  s[MAX];
                     76: struct q_a *p = s;
                     77: 
                     78: unsigned long gettype();
                     79: int sig_in_ed();
                     80: char buf[CMAX];
                     81: char *ptr = buf;
                     82: char obuf[BUFS];
                     83: char *optr = obuf;
                     84: FILE *outp;
                     85: char *ofile;
                     86: char line[LMAX];
                     87: char sline[LMAX];
                     88: char *first;
                     89: int lineno = 1;
                     90: 
                     91: struct qa {
                     92:        char *text;
                     93:        struct qa *nexta;
                     94: } ques[QMAX];
                     95: struct qa *qp = ques;
                     96: 
                     97: struct pa {
                     98:        char *name;
                     99:        struct list *root;
                    100: } paths[NPATH];
                    101: struct pa *pp = paths;
                    102: 
                    103: struct list {
                    104:        struct q_a *entry;
                    105:        struct list *next;
                    106:        struct list *loop;
                    107:        char *quest;
                    108:        struct list *floop;
                    109: } list[NENT];
                    110: struct list *lp = list;
                    111: struct list *stack[STACK];
                    112: struct list **st = stack;
                    113: 
                    114: struct pa *findpath();
                    115: struct lab {
                    116:        struct list *path;
                    117:        struct list *place;
                    118: } save[LABMAX], *sav=save;
                    119: struct lab *savp;
                    120: struct lab *savc[10];
                    121: unsigned stype[10];
                    122: int curly = 0;
                    123: char *onepath;
                    124: char *qfile;
                    125: char *namesf="tagfile";
                    126: char nname[50];
                    127: FILE *popen(), *edp;
                    128: 
                    129: main(argc,argv)
                    130: int argc;
                    131: char *argv[];
                    132: {
                    133: 
                    134:        qfile = mcfile;
                    135:        while(argc > 1 && *argv[1] == '-'){
                    136:                switch(argv[1][1]){
                    137:                case 'f':
                    138:                        if(argc > 2)qfile=argv[2];
                    139:                        argc--;
                    140:                        argv++;
                    141:                        break;
                    142:                case 'm':
                    143:                        if(argv[1][2] == 's')qfile=msfile;
                    144:                        else if(argv[1][2] == 'c')qfile=mcfile;
                    145:                        else if(argv[1][2] == 'm')qfile=mmfile;
                    146:                        else {
                    147:                                fprintf("unknown macro package %s\n",argv);
                    148:                                exit(0);
                    149:                        }
                    150:                        break;
                    151:                case 'w':
                    152:                        qfile = wr;
                    153:                        break;
                    154:                case 'd':
                    155:                        sdebug=1;
                    156:                        break;
                    157:                case 'p':
                    158:                        debug=1;
                    159:                        break;
                    160:                case 'v':
                    161:                        verbose=1;
                    162:                        break;
                    163:                default:
                    164:                        fprintf(stderr,"unknown flag %c\n",argv[1][1]);
                    165:                        exit(0);
                    166:                }
                    167:                argc--; argv++;
                    168:        }
                    169:        if(argc > 1)ofile=argv[1];
                    170:        init(qfile);
                    171:        if(onepath != 0){
                    172:                pp=findpath(onepath);
                    173:                lp=pp->root;
                    174:                process(1);
                    175:        }
                    176:        else process(0);
                    177:        done();
                    178: }
                    179: init(file)
                    180: char *file;
                    181: {
                    182:        FILE *inp;
                    183:        int c;
                    184:        int i;
                    185:        int printall=0;
                    186:        char command[50];
                    187:        FILE *dumb;
                    188: 
                    189:        if(ofile == 0){
                    190:                if(file == wr){
                    191:                        printf("Tags going to file tagfile\n");
                    192:                        ofile = namesf;
                    193:                }
                    194:                else if(file == mcfile){
                    195:                        printf("Output going to file temp.cover\n");
                    196:                        ofile = "temp.cover";
                    197:                }
                    198:                else {
                    199:                        printf("Output going to file temp\n");
                    200:                        ofile = "temp";
                    201:                }
                    202:        }
                    203:        if((inp=fopen(file,"r"))==NULL){
                    204:                fprintf(stderr,"can't open script file %s\n",file);
                    205:                exit(0);
                    206:        }
                    207:        pp->name = onepath = ptr;
                    208:        i=0;
                    209:        while((c=getc(inp)) != '\n'){
                    210:                if(c == ','){
                    211:                        *ptr++ = '\0';
                    212:                        (++pp)->name = ptr;
                    213:                        i++;
                    214:                        if(pp > &paths[NPATH-1])
                    215:                                error("more than 10 paths-NPATH");
                    216:                }
                    217:                else if(c != ' ' && c != '\t')
                    218:                        *ptr++ = c;
                    219:        }
                    220:        *ptr++ = '\0';
                    221:        if(i > 0)onepath=0;
                    222:        lineno++;
                    223:        first = ptr;
                    224:        if(getstr(inp)== 0)
                    225:                if(onepath == 0)
                    226:                        error("text string expected");
                    227:        while(getentry(inp) != 0){
                    228:                if(p++ >= &s[MAX-1])
                    229:                        error("number of instructions exceeded-MAX");
                    230:        }
                    231:        if(debug)printf("\n");
                    232:        if((dumb = fopen(ofile,"r")) != NULL){
                    233:                if(file == wr){
                    234:                printf("File %s already exists; Tags will be appended\n",ofile);
                    235:                printall++;
                    236:                }
                    237:                else {
                    238:                        printf("File %s already exists; Text will be appended\n",ofile);
                    239:                }
                    240:                fclose(dumb);
                    241:        }
                    242:        if((dumb = fopen(ofile,"a")) == NULL){
                    243:                fprintf(stderr,"can't open %s\n",ofile);
                    244:                exit(1);
                    245:        }
                    246:        fclose(dumb);
                    247:        sprintf(command,"ed - %s\n",ofile);
                    248:        signal(SIGINT,sig_in_ed);
                    249:        if((edp = popen(command,"w")) == NULL){
                    250:                printf("can't involk ed\n");
                    251:                exit(0);
                    252:        }
                    253:        setbuf(edp,NULL);
                    254:        if(printall){
                    255:                printf("The following tags are already defined:\n");
                    256:                fputs("1,$p\n",edp);
                    257:                fflush(edp);
                    258:                sleep(8);
                    259:                printf("\n");
                    260:        }
                    261:        fputs("a\n",edp);
                    262:        inap = 1;
                    263: }
                    264: 
                    265: getentry(inp)
                    266: FILE *inp;
                    267: {
                    268:        char *l;
                    269:        int c;
                    270:        int comment = 0;
                    271: 
                    272:        if(debug)printf("\n place %o ",p);
                    273:        savp = sav;
                    274:        l = line;
                    275:        while((*l = c = getc(inp)) != ':'){
                    276:                if(c == EOF)return(0);
                    277:                if(c == '*'){
                    278:                        if(comment){
                    279:                                comment=0;
                    280:                                continue;
                    281:                        }
                    282:                        else {
                    283:                                comment=1;
                    284:                                continue;
                    285:                        }
                    286:                }
                    287:                if(comment){
                    288:                        if(c == '\n')lineno++;
                    289:                        continue;
                    290:                }
                    291:                if(c == '\\'){
                    292:                        *l = getc(inp);
                    293:                        if(++l >= &line[LMAX-1])
                    294:                                error("line length exceeded-LMAX");
                    295:                        continue;
                    296:                }
                    297:                if(c == '}'){
                    298:                        if(debug)printf("found }\n");
                    299:                        l=ptr;
                    300:                        getstr(inp);
                    301:                        addloop(--curly,l);
                    302:                        eatline(inp);
                    303:                        sav = savc[curly];
                    304:                        p->type = BLOOP;
                    305:                        return(1);
                    306:                }
                    307:                if(c == ','){
                    308:                        *l = '\0';
                    309:                        addentry(line,p);
                    310:                        l=line;
                    311:                }
                    312:                else if(c == '\n'){
                    313:                        l=line;
                    314:                        lineno++;
                    315:                }
                    316:                else if(c != ' ' && c != '\t'){
                    317:                        if(l++ >= &line[LMAX-1])
                    318:                                error("line length exceeded-LMAX");
                    319:                }
                    320:        }
                    321:        *l = '\0';
                    322:        addentry(line,p);
                    323:        p->macro = ptr;
                    324:        while((*ptr = c = getc(inp))!= ':'){
                    325:                if(c == '\\'){
                    326:                        *ptr = getc(inp);
                    327:                        if(++ptr >= &buf[CMAX-1])
                    328:                                error("string buffer exceeded-CMAX");
                    329:                }
                    330:                else if(c == ' ' && ptr == p->macro);
                    331:                else if(c == '{' && ptr == p->macro){
                    332:                        if(debug)printf("in { savp %o\n",savp);
                    333:                        (sav++)->path = 0;
                    334:                        stype[curly] = BLOOP;
                    335:                        savc[curly++] = savp;
                    336:                        if(curly >= NEST)
                    337:                                error("nesting depth exceeded-NEST");
                    338:                        if((c = getc(inp)) == ' '|| c == '\t')
                    339:                                eatblanks(inp);
                    340:                        if(c == '\n'){
                    341:                                lineno++;
                    342:                                if((c = getc(inp)) == ' '|| c == '\t')
                    343:                                        eatblanks(inp);
                    344:                        }
                    345:                        if(c == '"'){
                    346:                                p->type = FLOOP;
                    347:                                ungetc(c,inp);
                    348:                                l=ptr;
                    349:                                getstr(inp);
                    350:                                p->qtext = l;
                    351:                                stype[curly-1] = FLOOP;
                    352:                        }
                    353:                        else {
                    354:                                ungetc(c,inp);
                    355:                                p->type = BLOOP;
                    356:                        }
                    357:                        return(1);
                    358:                }
                    359:                else if(ptr++ >= &buf[CMAX-1])
                    360:                        error("string buffer exceeded-CMAX");
                    361:        }
                    362:        if(p->macro == ptr)p->macro=0;
                    363:        else *ptr++ = '\0';
                    364:        p->type = gettype(inp);
                    365:        if(p->type&QUEST){
                    366:                p->qtext = ptr;
                    367:                if(getstr(inp) == 0)
                    368:                        error("text string expected");
                    369:        }
                    370:        else p->qtext = 0;
                    371:        p->text = ptr;
                    372:        if(p->type&(ONELINE|SEVERAL|PRINT|MANY|PATH))
                    373:                if(getstr(inp)== 0)
                    374:                        error("text string expected");
                    375:        if(p->text == ptr)p->text = 0;
                    376:        if(debug)printf(" macro %s type %d text %s ",p->macro,p->type,p->text);
                    377:        if(sdebug)db(p);
                    378:        if(p->type & (ARGS |SKIP)){
                    379:                p->argq = qp;
                    380:                qp->text = ptr;
                    381:                while(getstr(inp) != 0){
                    382:                        qp->nexta = (qp+1);
                    383:                        if(debug||sdebug)printf("\n     arg question= %s",qp->text);
                    384:                        if(debug)printf(" next %o",qp->nexta);
                    385:                        if(qp++ >= &ques[QMAX-1])
                    386:                                error("number of questions exceeded-QMAX");
                    387:                        qp->text = ptr;
                    388:                }
                    389:                (qp-1)->nexta = 0;
                    390:                if(debug)printf("\n     last %s next %o",(qp-1)->text,(qp-1)->nexta);
                    391:                if(sdebug)printf("\n");
                    392:        }
                    393:        sav = savp;
                    394:        return(1);
                    395: }
                    396: getstr(inp)
                    397: FILE *inp;
                    398: {
                    399:        int c;
                    400:        while((c=getc(inp)) == ' ' || c == '\t' || c == '\n')if(c == '\n')lineno++;
                    401:        if(c != '\"'){
                    402:                ungetc(c,inp);
                    403:                return(0);
                    404:        }
                    405:        while((*ptr=c=getc(inp)) != '\"'){
                    406:                if(ptr++ >= &buf[CMAX])
                    407:                        error("string buffer exceeded-CMAX");
                    408:                if(c == '\n')lineno++;
                    409:        }
                    410:        *ptr++ = '\0';
                    411:        return(1);
                    412: }
                    413: addentry(ch,p)
                    414: char *ch;
                    415: struct q_a *p;
                    416: {
                    417:        struct list *ll;
                    418:        if(debug || sdebug)printf("path= %s, ",ch);
                    419: 
                    420:        for(pp=paths;pp->name != 0 && pp < &paths[NPATH];pp++){
                    421:                if(match(ch,pp->name)){
                    422:                        if(pp->root == 0){
                    423:                                pp->root = lp;
                    424:                        }
                    425:                        else {
                    426:                                ll=pp->root;
                    427:                                while(ll->next != 0)ll=ll->next;
                    428:                                ll->next = lp;
                    429:                        }
                    430:                        if(debug)printf("entry %o path %o\n",lp,pp);
                    431:                        sav->path = (struct list *)pp;
                    432:                        sav->place = lp;
                    433:                        lp->entry = p;
                    434:                        if(lp++ >= &list[NENT-1])
                    435:                                error("tree exceeded-NENT");
                    436:                        if(sav++ >= &save[LABMAX-1])
                    437:                                error("saved paths exceeded-LABMAX");
                    438:                        return;
                    439:                }
                    440:        }
                    441:        printf("no path to %s\n",ch);
                    442:        exit(0);
                    443: }
                    444: 
                    445: addloop(in,cp)
                    446: char *cp;
                    447: {
                    448:        struct lab *sp;
                    449:        struct list *ll;
                    450: 
                    451:        sp = savc[in];
                    452:        while((ll = sp->path) != 0){
                    453:                if(debug)printf("addloop sp %o path %o",sp,sp->path);
                    454:                while(ll->next != 0){
                    455:                        ll=ll->next;
                    456:                }
                    457:                if(debug)printf("ll %o place %o\n",ll,sp->place);
                    458:                if(ll->loop != 0){
                    459:                        ll->next = lp;
                    460:                        lp->loop = sp->place;
                    461:                        lp->quest = cp;
                    462:                        lp->entry = p;
                    463:                        if(lp++ >= &list[NENT-1])
                    464:                                error("tree exceeded - NENT");
                    465:                }
                    466:                else {
                    467:                        ll->loop = sp->place;
                    468:                        ll->quest = cp;
                    469:                }
                    470:                if(stype[in] == FLOOP){
                    471:                        sp->place->floop = lp;
                    472:                        lp->entry = p;
                    473:                        if(lp++ >= &list[NENT-1])
                    474:                                error("tree exceeded - NENT");
                    475:                }
                    476:                sp++;
                    477:        }
                    478: }
                    479: unsigned long
                    480: gettype(inp)
                    481: FILE *inp;
                    482: {
                    483:        int c;
                    484:        unsigned long i;
                    485:        i=0;
                    486: another:
                    487:        while((c=getc(inp)) == ' ' || c == '\t');
                    488:        switch(c){
                    489:        case 'A':
                    490:                i |= ARGS;
                    491:                break;
                    492:        case 'M':
                    493:                i |= MANY;
                    494:                break;
                    495:        case 'O':
                    496:                if((c=getc(inp)) == 'U')
                    497:                        i |= OUT;
                    498:                else if(c == 'N')
                    499:                        i|= ONELINE;
                    500:                else error("unknown action");
                    501:                break;
                    502:        case 'P':
                    503:                if((c=getc(inp)) == 'R')
                    504:                        i |= PRINT;
                    505:                else if(c == 'A'){
                    506:                        if((c=getc(inp)) == 'T')
                    507:                                i |= PATH;
                    508:                        else if(c == 'R')
                    509:                                i |= PAR|MANY;
                    510:                        else error("unknown action");
                    511:                }
                    512:                else error("unknown action");
                    513:                break;
                    514:        case 'S':
                    515:                if((c=getc(inp)) == 'T')
                    516:                        i |= STUFF|ARGS;
                    517:                else if(c == 'K')
                    518:                        i |= SKIP;
                    519:                else if(c == 'U')
                    520:                        i |= SUM|MANY;
                    521:                else if(c == 'E')
                    522:                        i |= SEVERAL;
                    523:                else error("unknown action");
                    524:                break;
                    525:        case 'Q':
                    526:                if((c=getc(inp)) == 'U')
                    527:                        i |= QUEST;
                    528:                else if(c == 'S')
                    529:                        i |= QSTUFF|ARGS;
                    530:                else error("unknown action");
                    531:                break;
                    532:        case 'N':
                    533:                i |= NAME|ONELINE;
                    534:                break;
                    535:        default:
                    536:                error("unknown action");
                    537:        }
                    538:        while((c=getc(inp))!= '\n')
                    539:                if(c == '&')goto another;
                    540:        lineno++;
                    541:        if(i&OUT)
                    542:                if(i & ~OUT){
                    543:                        if(i & ~(OUT|QUEST))
                    544:                                error("action error - OUT not alone");
                    545:                }
                    546:        if(i & PRINT)
                    547:                if(i & ~PRINT){
                    548:                        if(i & ~(PRINT|QUEST))
                    549:                                error("action error - PRINT not alone");
                    550:                }
                    551:        if(i & PATH)
                    552:                if(i & ~PATH)error("action error - PATH not alone");
                    553:        if((i&(MANY|ONELINE))==(MANY|ONELINE))
                    554:                error("contridictory actions - MANY & ONELINE");
                    555:        return(i);
                    556: }
                    557: 
                    558: process(start)
                    559: int start;
                    560: {
                    561:        if(start == 0){
                    562:                printf("%s\n",first);
                    563:                getl(stdin,line);
                    564:                pp=findpath(line);
                    565:                lp = pp->root;
                    566:        }
                    567: more:
                    568:        while(lp){
                    569:                if(question(lp->entry)== 1)
                    570:                        continue;
                    571:                if(lp->loop != 0){
                    572:                        printf("%s\n",lp->quest);
                    573:                        getl(stdin,line);
                    574:                        if(line[0] == 'y'|| line[0] == 'Y')
                    575:                                lp=lp->loop;
                    576:                        else{
                    577:                                if(lp->loop->entry->type & 1){
                    578:                                        lp->loop->entry->type &= 0177776;
                    579:                                }
                    580:                                if(line[0] == 'q')done();
                    581:                                else lp=lp->next;
                    582:                        }
                    583:                }
                    584:                else
                    585:                        lp = lp->next;
                    586:        }
                    587:        if(*st != 0){
                    588:                lp = *st--;
                    589:                if(lp->loop != 0){
                    590:                        printf("%s\n",lp->quest);
                    591:                        getl(stdin,line);
                    592:                        if(line[0] == 'y' || line[0] == 'Y')
                    593:                                lp=lp->loop;
                    594:                        else{
                    595:                                if(lp->loop->entry->type & 1)
                    596:                                        lp->loop->entry->type &= 0177776;
                    597:                                if(line[0] == 'q')done();
                    598:                                else lp=lp->next;
                    599:                        }
                    600:                }
                    601:                else lp=lp->next;
                    602:                goto more;
                    603:        }
                    604: }
                    605: 
                    606: question(rp)
                    607: struct q_a *rp;
                    608: {
                    609:        int blanks;
                    610:        char *ch, *sv;
                    611: 
                    612: rest:
                    613:        if(debug)printf("in question %o\n",rp);
                    614:        if(rp->type & BLOOP)
                    615:                return(0);
                    616:        if(rp->type & FLOOP){
                    617:                if(rp->type & 1)return(0);
                    618:                printf("%s\n",rp->qtext);
                    619:                getl(stdin,line);
                    620:                if(line[0] == 'y' || line[0] == 'Y'){
                    621:                        lp = lp->next;
                    622:                        rp->type |= 1;
                    623:                }
                    624:                else if(line[0] == 'q')done();
                    625:                else lp= lp->floop;
                    626:                return(1);
                    627:        }
                    628:        if(rp->type & PATH){
                    629:                *(++st) = lp;
                    630:                if(st >= &stack[STACK-1])
                    631:                        error("stack depth exceeded-STACK");
                    632:                printf("%s\n",rp->text);
                    633:                getl(stdin,line);
                    634:                if(line[0] == '\0'){
                    635:                        st--;
                    636:                        return(0);
                    637:                }
                    638:                pp=findpath(line);
                    639:                lp = pp->root;
                    640:                return(1);
                    641:        }
                    642:        if(rp->type&QUEST){
                    643:                printf("%s\n",rp->qtext);
                    644:                getl(stdin,line);
                    645:                if(line[0] != 'Y' && line[0] != 'y')return(0);
                    646:        }
                    647:        if(rp->text != 0)
                    648:                if((rp->type&MANY) == 0)printf("%s\n",rp->text);
                    649:        if(rp->type&(ONELINE|SEVERAL))
                    650:                getl(stdin,sline);
                    651:        if(rp->type&NAME){
                    652:                return(newname(sline));
                    653:        }
                    654:        if(rp->type&SUM){
                    655:                summary();
                    656:        }
                    657:        if(rp->type&PAR){
                    658:                par();
                    659:        }
                    660:        if(rp->type&(STUFF|QSTUFF)){
                    661:                sv = ch = rp->macro;
                    662:                qp = rp->argq;
                    663:                do{
                    664:                        while(*ch != '$'){
                    665:                                if(*ch == '\\')ch++;
                    666:                                if(*ch == '\0')break;
                    667:                                ch++;
                    668:                        }
                    669:                        if(*ch == '$'){
                    670:                                *ch = '\0';
                    671:                                out(sv);
                    672:                                *ch++ = '$';
                    673:                                sv = ch;
                    674:                        }
                    675:                        printf("%s\n",qp->text);
                    676:                        getl(stdin,line);
                    677:                        if(rp->type&QSTUFF)
                    678:                                if(line[0] == '\0')break;
                    679:                        if(*(ch-1) == '$')
                    680:                                out(line);
                    681:                        qp = qp->nexta;
                    682:                } while(qp != 0);
                    683:                if(rp->type&STUFF)
                    684:                        out(sv);
                    685:                else if(*sv == '"')out("\"");
                    686:                out("\n");
                    687:        }
                    688:        else if(rp->type&(ARGS | SKIP)){
                    689:                if((rp->type&SKIP) == 0 && rp->macro != 0)
                    690:                        out(rp->macro);
                    691:                qp = rp->argq;
                    692:                do{
                    693:                        printf("%s\n",qp->text);
                    694:                        blanks = getl(stdin,line);
                    695:                        if(rp->type&SKIP){
                    696:                                if(line[0] == '\0')
                    697:                                        return(0);
                    698:                                else out(rp->macro);
                    699:                        }
                    700:                        out(" ");
                    701:                        if(line[0] == '\0')blanks++;
                    702:                        if(blanks)out("\"");
                    703:                        out(line);
                    704:                        if(blanks)out("\"");
                    705:                        qp=qp->nexta;
                    706:                } while(qp != 0);
                    707:                out("\n");
                    708:        }
                    709:        else if((rp->type&(OUT|ONELINE|MANY))&& rp->macro != 0){
                    710:                out(rp->macro);
                    711:                out("\n");
                    712:        }
                    713:        if(rp->type&SEVERAL){
                    714:                out(rp->macro);
                    715:                out(" ");
                    716:                out(sline);
                    717:                out("\n");
                    718:        }
                    719:        if(rp->type&ONELINE){
                    720:                out(sline);
                    721:                out("\n");
                    722:        }
                    723:        if(rp->type&MANY){
                    724:                if(rp->type&(SUM))
                    725:                        printf("%s named %s.sum\n",rp->text,nname);
                    726:                else if(rp->type&PAR)
                    727:                        printf("%s named %s.par\n",rp->text,nname);
                    728:                else printf("%s\n",rp->text);
                    729:                printf("        end with : alone on a line (or read a file with :r filename)\n");
                    730:                getl(stdin,line);
                    731:                if(line[0] == ':' && line[1] == 'r'){
                    732:                        ch = &line[2];
                    733:        more:
                    734:                        readfiles(ch);
                    735:                        printf("Type other file names or return\n");
                    736:                        getl(stdin,line);
                    737:                        if(line[0] == '\0')return(0);
                    738:                        ch = line;
                    739:                        goto more;
                    740:                }
                    741:                toed();
                    742:        }
                    743:        return(0);
                    744: }
                    745: sig_in_ed(){
                    746:        inap = 0;
                    747:        printf("type q to quit ");
                    748:        getl(stdin,line);
                    749:        if(line[0] == 'q')done();
                    750:        fputs("a\n",edp);
                    751:        optr = obuf;
                    752:        inap=1;
                    753:        signal(SIGINT,sig_in_ed);
                    754:        process(1);
                    755:        done();
                    756: }
                    757: 
                    758: getl(inp,l)
                    759: char *l;
                    760: FILE *inp;
                    761: {
                    762:        int c;
                    763:        int blanks;
                    764: 
                    765:        blanks=0;
                    766:        while((*l = c = getc(inp)) != '\n'){
                    767:                l++;
                    768:                if(c == ' ' || c == '\t')blanks++;
                    769:        }
                    770:        *l++ = 0;
                    771:        return(blanks);
                    772: }
                    773: 
                    774: out(ch)
                    775: char *ch;
                    776: {
                    777:        char c;
                    778: 
                    779:        while(*ch != '\0'){
                    780:                if(*ch == '\n'){
                    781:                        *optr++ = *ch++;
                    782:                        *optr = '\0';
                    783:                        fputs(obuf,edp);
                    784:                        optr=obuf;
                    785:                        if(verbose)printf("%s",obuf);
                    786:                }
                    787:                else *optr++ = *ch++;
                    788:                if(optr >= &obuf[BUFS-1]){
                    789:                        *optr = '\0';
                    790:                        fputs(obuf,edp);
                    791:                        optr = obuf;
                    792:                }
                    793:        }
                    794: }
                    795: ofl()
                    796: {
                    797:        if(optr != obuf){
                    798:                *optr='\0';
                    799:                fputs(obuf,edp);
                    800:                optr=obuf;
                    801:        }
                    802:        if(inap)
                    803:                fputs(".\nw\na\n",edp);
                    804:        else {
                    805:                fputs("w\na\n",edp);
                    806:                inap=1;
                    807:        }
                    808: }
                    809: done(){
                    810:        ofl();
                    811:        fputs(".\nq\n",edp);
                    812:        exit(0);
                    813: }
                    814: 
                    815: match(ch,hh)
                    816: char *ch, *hh;
                    817: {
                    818:        while(*ch == *hh){
                    819:                if(*ch == '\0')return(1);
                    820:                ch++;
                    821:                hh++;
                    822:        }
                    823:        return(0);
                    824: }
                    825: 
                    826: struct pa *
                    827: findpath(ch)
                    828: char *ch;
                    829: {
                    830:        for(pp=paths;pp->name != 0;pp++){
                    831:                if(match(ch,pp->name))
                    832:                        return(pp);
                    833:        }
                    834:        printf("can't find path for %s\n",ch);
                    835:        exit(0);
                    836: }
                    837: eatline(inp)
                    838: FILE *inp;
                    839: {
                    840:        while(getc(inp) != '\n');
                    841:        lineno++;
                    842: }
                    843: readfiles(ptr)
                    844: char *ptr;
                    845: {
                    846:        FILE *io;
                    847:        int nomore;
                    848:        char *bp;
                    849:        char fname[50];
                    850: 
                    851:        ofl();
                    852:        fputs(".\n",edp);
                    853:        nomore = 0;
                    854:        while(1){
                    855:                while(*ptr == ' ')ptr++;
                    856:                bp = ptr;
                    857:                while(*ptr != ' ' && *ptr != '\0')ptr++;
                    858:                if(*ptr == '\0')nomore++;
                    859:                else *ptr++ = '\0';
                    860:                sprintf(fname,"$r %s\n",bp);
                    861:                fputs(fname,edp);
                    862:                if(nomore != 0)break;
                    863:        }
                    864:        fputs("a\n",edp);
                    865: }
                    866: error(sp)
                    867: char *sp;
                    868: {
                    869:        fprintf(stderr,"%s at line %d file %s\n",sp,lineno,qfile);
                    870:        exit(1);
                    871: }
                    872: db(dbp)
                    873: struct q_a *dbp;
                    874: {
                    875:        printf(" macro= %s type=",dbp->macro);
                    876:        if(dbp->type&ARGS)printf(" ARGS");
                    877:        if(dbp->type&SKIP)printf(" SKIP");
                    878:        if(dbp->type&OUT)printf(" OUT");
                    879:        if(dbp->type&PRINT)printf(" PRINT");
                    880:        if(dbp->type&ONELINE)printf(" ONELINE");
                    881:        if(dbp->type&SEVERAL)printf(" SEVERAL");
                    882:        if(dbp->type&MANY)printf(" MANY");
                    883:        if(dbp->type&PATH)printf(" PATH");
                    884:        if(dbp->text != 0)printf("\nmain text= %s\n",dbp->text);
                    885:        else printf("\n");
                    886: }
                    887: newname(s)
                    888: char *s;
                    889: {
                    890:        int i;
                    891:        char *name1, *name2;
                    892:        int pid, rpid, retcode;
                    893:        char *sp,spac[10];
                    894: restart:
                    895:        sp = spac;
                    896:        *sp = '\0';
                    897:        if(*s == ' ' || *s == '\t')
                    898:                while(*s== ' ' || *s == '\t')*sp++ = *s++;
                    899:        *sp = '\0';
                    900:        for(i=0;*s != '\0';i++)
                    901:                nname[i] = *s++;
                    902:        if(nname[0] == ':'){
                    903:                switch(nname[1]){
                    904:                case 'p':
                    905:                        sprintf(line,".\nw\ne %s\n1,$p\na\n",ofile);
                    906:                        fputs(line,edp);
                    907:                        sleep(8);
                    908:                        return(1);
                    909:                case 'r':
                    910:                        sprintf(line,".\nw\ne %s\na\n",&nname[3]);
                    911:                        printf("Type text to append to file %s\n",&nname[3]);
                    912:                        fputs(line,edp);
                    913:                        getl(stdin,line);
                    914:                        toed();
                    915:                        return(1);
                    916:                case 'j':
                    917:                        name1=0;
                    918:                        name2 = nname;
                    919:        nextn:
                    920:                        for(; *name2 != ' ';name2++)
                    921:                                if(*name2 == '\0'){
                    922:                                        printf("error in command line: %s\nplease retype\n",nname);
                    923:                                        getl(stdin,sline);
                    924:                                        s=sline;
                    925:                                        goto restart;
                    926:                                }
                    927:                        *name2++ = '\0';
                    928:                        while(*name2 == ' ')name2++;
                    929:                        if(name1 == 0){
                    930:                                name1 = name2;
                    931:                                goto nextn;
                    932:                        }
                    933:                        sprintf(line,".\nw\ne %s.sum\n$r %s.sum\nw\n",name1,name2);
                    934:                        fputs(line,edp);
                    935:                        sprintf(line,"e %s.par\n$r %s.par\nw\n",name1,name2);
                    936:                        fputs(line,edp);
                    937:                        sprintf(line,"e %s\n/%s/d\nw\na\n",ofile);
                    938:                        fputs(line,edp);
                    939:                        return(1);
                    940:                default:
                    941:                        printf("unknown command %s\n",nname);
                    942:                        printf("please retype\n");
                    943:                        goto restart;
                    944:                }
                    945:        }
                    946:        if(nname[0] == '!'){
                    947:                if((pid = fork()) == 0){
                    948:                        execl("/bin/sh","sh","-c",&nname[1],0);
                    949:                        exit(0);
                    950:                }
                    951:                while((rpid=wait(&retcode))!=pid&& rpid != -1);
                    952:                printf("!\n");
                    953:                return(1);
                    954:        }
                    955:        if(i > 10){
                    956:                printf("tag too long - please type new tag ");
                    957:                getl(stdin,sline);
                    958:                s=sline;
                    959:                goto restart;
                    960:        }
                    961:        nname[i] = '\0';
                    962:        sprintf(line, ".\nw\ne %s\na\n%s%s\n",ofile,spac,nname);
                    963:        fputs(line,edp);
                    964:        return(0);
                    965: }
                    966: summary(){
                    967:        FILE *ff;
                    968:        sprintf(line,"%s.sum",nname);
                    969:        if((ff = fopen(line,"a")) == NULL){
                    970:                printf("can't open %s\n",line);
                    971:        }
                    972:        sprintf(line,".\nw\ne %s.sum\na\n",nname);
                    973:        fputs(line,edp);
                    974:        fclose(ff);
                    975: }
                    976: par(){
                    977:        FILE *ff;
                    978:        sprintf(line,"%s.par",nname);
                    979:        if((ff=fopen(line,"a")) == NULL){
                    980:                printf("can't open %s\n",line);
                    981:                exit(1);
                    982:        }
                    983:        sprintf(line,".\nw\ne %s.par\na\n",nname);
                    984:        fputs(line,edp);
                    985:        fclose(ff);
                    986: }
                    987: toed(){
                    988:        while(1){
                    989:                if(line[1] == '\0'){
                    990:                switch(line[0]){
                    991:                case 'i':
                    992:                case 'a':
                    993:                case 'c':
                    994:                        inap++;
                    995:                        break;
                    996:                case '.':
                    997:                        inap = 0;
                    998:                        break;
                    999:                case 'q':
                   1000:                        if(inap != 0)break;
                   1001:                case ':':
                   1002:                        if(inap == 0){fputs("a\n",edp);
                   1003:                                inap++;
                   1004:                        }
                   1005:                        return(0);
                   1006:                }
                   1007:                }
                   1008:                fputs(line,edp);
                   1009:                fputs("\n",edp);
                   1010:                getl(stdin,line);
                   1011:        }
                   1012: }
                   1013: 0707070035330205151006640000510000040000010235620412351407300001300000000414getstamp.c#include <sys/types.h>
                   1014: #include <sys/stat.h>
                   1015: #include <time.h>
                   1016: long
                   1017: getstamp(filename)
                   1018: char *filename;
                   1019: {
                   1020:        long mtime;
                   1021:        struct stat fbuf, *fp = &fbuf;
                   1022:        struct tm t, *tp = &t;
                   1023:        stat(filename, fp);
                   1024:        t = *localtime(&fp->st_mtime);
                   1025:        mtime = fp->st_mtime;
                   1026:        return(mtime);
                   1027: }
                   1028: 0707070035330205051006640000510000040000010235640412351413100001100000001552header.h/**********               docsend.h - 092884              **********/
                   1029: 
                   1030: #define HEADSIZE 160
                   1031: #define UJN 0          /* unique job name - 14 bytes */
                   1032: #define ULOG 15                /* user login - 8 bytes */
                   1033: #define CO 24          /* company code - 2 bytes */
                   1034: #define DOCNUM 28      /* first document number (cover sheet only) - 18 bytes */
                   1035: #define TIMESTAMP 53   /* docsend timestamp - 9 bytes */
                   1036: #define DEVICE 64      /* device: aps (APS-5), i10 (imagen), X97 (troff xerox), X (nroff xerox), 450 (nroff terminal), a.i (imagen with APS-5 simulation) - 3 bytes */
                   1037: #define NETWORK 68     /* network - nusend (1), usend (2), others (0) - 1 byte */
                   1038: #define TODSEND 70     /* TOD of docsend - 10 bytes */
                   1039: #define DEST 81                /* JES remote station - 5 bytes */
                   1040: #define BIN 87         /* bin or mail info - 34 bytes */
                   1041: #define PAGES 90       /* TP%d total pages */
                   1042: #define DUMMY 122      /* position for next field */
                   1043: #define VERSION 152    /* docsend version (vbt) - 6 bytes */
                   1044: 
                   1045: 0707070035330155531007750000510000040000010311640423770172700001500000000155sendcover.shtrap 'rm -f /tmp/cs$$; trap 0; exit' 0 1 2 3 15
                   1046: L=/usr/lib/tmac
                   1047: T=/tmp/cs$$
                   1048:        $L/cstrans $T $1 $2
                   1049: sh $T
                   1050: rm $T
                   1051: 0707070035330205071006640000510000040000010235610412351405300001400000000261timestamp.c#include <stdio.h>
                   1052: main(argc, argv)
                   1053: char *argv[];
                   1054: {
                   1055:        long mtime, getstamp();
                   1056:        char *filename;
                   1057:        filename = argv[1];
                   1058:        mtime = getstamp(filename);
                   1059:        printf(".ds s) %ld\n",mtime);
                   1060: }
                   1061: 0707070035330165711006640021230000040000010214560421531217500001000000012541trans.l%{
                   1062: #include <sys/types.h>
                   1063: #include <pwd.h>
                   1064: #include <sys/stat.h>
                   1065: #include <time.h>
                   1066: #include <libc.h>
                   1067: #include "header.h"
                   1068: 
                   1069: #define DATE DOCNUM+6
                   1070: #define SEQNUM DOCNUM+13
                   1071: #define TYPE DOCNUM+15
                   1072: #define SOFT DOCNUM+17
                   1073: struct passwd *getpwuid(), *ps;
                   1074: int soft;
                   1075: char *p, *s1, *s2;
                   1076: int type, ci=0, pm=0, rl=0;
                   1077: char buf[HEADSIZE];
                   1078: char *co = &buf[CO];
                   1079: char *dept = &buf[DOCNUM], *date = &buf[DATE], *seqnum = &buf[SEQNUM];
                   1080: char *stype = &buf[TYPE], *ssoft = &buf[SOFT];
                   1081: char *machine = buf;
                   1082: char *login = &buf[ULOG], *timestamp = &buf[TIMESTAMP];
                   1083: char *version = &buf[VERSION];
                   1084: char *pages = &buf[PAGES];
                   1085: int more = 1;
                   1086: %}
                   1087: %%
                   1088: ^".so".*       ;
                   1089: ^".TI" {
                   1090:        printf(".TL\n");
                   1091:        }
                   1092: ^".DT".*       ;
                   1093: ^".AH".*       {
                   1094:        yytext[yyleng] = '\0';
                   1095:        p = strtok(&yytext[3], " \n");
                   1096:        printf(".AU %s", p);
                   1097:        if (*p == '"') {
                   1098:                p = strtok((char *)0, "\"");
                   1099:                printf(" %s", p);
                   1100:        }
                   1101:        p = strtok((char *)0, "\n");
                   1102:        printf(" \"\"%s\n", p);
                   1103:        }
                   1104: ^".AP".*       {
                   1105:        yytext[yyleng] = '\0';
                   1106:        printf(".rP %s\n",&yytext[3]);
                   1107:        }
                   1108: ^".SA" {
                   1109:        printf(".AS\n");
                   1110:        }
                   1111: ^".SE" {
                   1112:        printf(".AE\n");
                   1113:        }
                   1114: ^".KW".*       {
                   1115:        printf(".OK %s\n",&yytext[3]);
                   1116:        }
                   1117: ^".TY".*       {
                   1118:        for(p = &yytext[3]; *p == ' ';p++);
                   1119:        if(*p == 'I')type=2;
                   1120:        else if(*(p+1) == 'M')type=1;
                   1121:        else type=3;
                   1122:        *stype = *p;
                   1123:        *(stype+1) = *(p+1);
                   1124:        while(*p != ' '){
                   1125:                if(*p == '\n'){
                   1126:                        soft=0;
                   1127:                        break;
                   1128:                }
                   1129:                p++;
                   1130:        }
                   1131:        if(*p == ' ')
                   1132:                if(*++p == 'y')
                   1133:                        soft=1;
                   1134:        printf(".MT %d\n",type);
                   1135:        if(soft){
                   1136:                *ssoft = 'S';
                   1137:                printf(".sF\n");
                   1138:        }
                   1139:        }
                   1140: ^".MT".*       {
                   1141:        for(p = &yytext[3]; *p == ' ';p++);
                   1142:        if(*p == '1') {
                   1143:                type=1;
                   1144:                *stype = 'T';
                   1145:                *(stype+1) = 'M';
                   1146:        } else if(*p == '2') {
                   1147:                type=2;
                   1148:                *stype = 'I';
                   1149:                *(stype+1) = 'M';
                   1150:        } else type=3;
                   1151:        printf(".MT %d\n",type);
                   1152:        }
                   1153: ^".sF".*       {
                   1154:        soft = 1;
                   1155:        *ssoft = 'S';
                   1156:        printf(".sF\n");
                   1157:        }
                   1158: ^(".NU"|".dN").*       {
                   1159:        p = strtok(&yytext[3], "- \n\"");
                   1160:        if(p != 0){
                   1161:                sprintf(dept,"%s-",p);
                   1162:                printf(".dN %s-",p);
                   1163:                type = 1;
                   1164:        }
                   1165:        p = strtok((char *)0, "- \n\"");
                   1166:        if(p != 0){
                   1167:                sprintf(date,"%s-",p);
                   1168:                printf("%s-",p);
                   1169:        }
                   1170:        p = strtok((char *)0, "- \n\"");
                   1171:        if(p != 0){
                   1172:                *seqnum = *p;
                   1173:                *(seqnum+1) = *(p+1);
                   1174:                printf("%s\n",p);
                   1175:        }
                   1176:        else if(type) printf("\n");
                   1177:        p = strtok((char *)0, " \n\"");
                   1178:        if(p != 0)
                   1179:                printf(".fC %s\n",p);
                   1180:        p = strtok((char *)0, " \n\"");
                   1181:        if(p != 0)
                   1182:                printf(".wP %s\n",p);
                   1183:        }
                   1184: ^".MY".*       {
                   1185:        printf(".mE %s\n",&yytext[3]);
                   1186:        }
                   1187: ^".ED".*       {
                   1188:        printf(".eD %s'n",&yytext[3]);
                   1189:        }
                   1190: ^".PR".*       {
                   1191:        pm=1;
                   1192:        printf(".PM %s\n",&yytext[3]);
                   1193:        }
                   1194: ^".RL".*       {
                   1195:        rl=1;
                   1196:        if(yyleng>3){
                   1197:                p=&yytext[3];
                   1198:                while(*p == ' ')p++;
                   1199:                if(*p == '\"')p++;
                   1200:                if(*p == 'n')printf(".fA n\n");
                   1201:                else printf(".fA y\n");
                   1202:        }
                   1203:        else printf(".fA y\n");
                   1204:        }
                   1205: ^".GS" {
                   1206:        printf(".gS\n");
                   1207:        }
                   1208: ^".CI".*       {
                   1209: /*     ci = 1;         gone away
                   1210:        if(yyleng == 3)
                   1211:                printf(".cI n\n");
                   1212:        else {
                   1213:                p = &yytext[3];
                   1214:                while(*p == ' ')p++;
                   1215:                if(*p == '\n' || *p == 'n')
                   1216:                        printf(".cI n\n");
                   1217:                else if(*p == '\"')p++;
                   1218:                if(*p == 'y')
                   1219:                        printf(".cI y\n");
                   1220:                else if(*p == '\"' || *p == 'n')
                   1221:                        printf(".cI n\n");
                   1222:                else    fprintf(stderr,".CI unknown argument %c\n",*p);
                   1223:        }*/
                   1224:        }
                   1225: ^".CO".*       {
                   1226: /*     if(!ci){
                   1227:                printf(".cI n\n");
                   1228:                ci = 1;
                   1229:        }*/
                   1230:        if(!rl){
                   1231:                printf(".fA y\n");
                   1232:                rl = 1;
                   1233:        }
                   1234:        printf(".cC\n");
                   1235:        }
                   1236: ^".CE" {
                   1237:        printf(".cE\n");
                   1238:        }
                   1239: ^".CV".*       {
                   1240: /*     if(!ci){
                   1241:                printf(".cI n\n");
                   1242:                ci = 1;
                   1243:        }*/
                   1244:        if(!rl){
                   1245:                printf(".fA y\n");
                   1246:                rl = 1;
                   1247:        }
                   1248:        printf(".cS\n");
                   1249:        }
                   1250: ^".CS".*       {
                   1251:        ECHO;
                   1252:        printf("\n");
                   1253:        return(0);
                   1254:        }
                   1255: ^".SC".*       {
                   1256: /*     if(!ci){
                   1257:                printf(".cI n\n");
                   1258:                ci = 1;
                   1259:        }*/
                   1260:        if(!rl){
                   1261:                printf(".fA y\n");
                   1262:                rl = 1;
                   1263:        }
                   1264:        p = s1 = &yytext[3];
                   1265:        while(*s1 == ' ')s1++;
                   1266:        while(*s1 != ' ')s1++;
                   1267:        while(*s1 == ' ')s1++;
                   1268:        while(*s1 != ' ')s1++;
                   1269:        *s1 = '\0';
                   1270:        s1++;
                   1271:        printf(".CS %s \"\" %s\n", p, s1);
                   1272:        return(0);
                   1273:        }
                   1274: .*     {
                   1275:        ECHO;
                   1276:        printf("\n");
                   1277:        }
                   1278: \n     ;
                   1279: %%
                   1280: char *header="/tmp/            ";
                   1281: char *dest = "mhuxd!/usr/spool/uucppublic/doc.mcs";
                   1282: char *dco = "BL";
                   1283: main(argc, argv)
                   1284: char *argv[];
                   1285: {
                   1286:        FILE *inp;
                   1287:        char *filename, *name, *cover, *pid;
                   1288:        int nuchars, npid, uid, days;
                   1289:        long mtime;
                   1290:        if(argc < 3){
                   1291:                fprintf(stderr,"file name must be supplied to sendcover\n");
                   1292:                exit(1);
                   1293:        }
                   1294:        if((inp=fopen("/etc/whoami","r")) == NULL){
                   1295:                fprintf(stderr,"can't open /etc/whoami\n");
                   1296:                exit(1);
                   1297:        }
                   1298:        nuchars = fread(machine, sizeof(char), 10, inp);
                   1299:        nuchars -= 1;
                   1300:        if(nuchars < 5)pid = machine + nuchars +1;
                   1301:        else pid = machine + 6;
                   1302:        cover = pid + 5;
                   1303:        fclose(inp);
                   1304:        *(pid-1) = '.';
                   1305:        npid = getpid();
                   1306:        sprintf(pid,"%05d",npid);
                   1307:        *cover = 'c';
                   1308:        sprintf(&header[5],"%s",machine);
                   1309:        uid = getuid();
                   1310:        if ((ps = getpwuid(uid)) == NULL){
                   1311:                fprintf(stderr, "login not found");
                   1312:                exit(1);
                   1313:        }
                   1314:        strcpy (login,ps->pw_name);
                   1315:        sprintf(version,"030388L");     /*version*/
                   1316:        strcpy(co, dco);        /*company name=BL*/
                   1317:        name = argv[1];
                   1318:        argc--; argv++;
                   1319:        if(freopen(argv[1],"r",stdin)==NULL) {
                   1320:                fprintf(stderr,"%s: cannot open\n", argv[1]);
                   1321:                exit(1);
                   1322:        }
                   1323:        if(freopen(header,"w",stdout)== NULL){
                   1324:                fprintf(stderr,"%s: cannot open\n",header);
                   1325:                exit(1);
                   1326:        }
                   1327:        if((nuchars = fwrite(buf,sizeof(char),HEADSIZE,stdout)) != HEADSIZE){
                   1328:                fprintf(stderr,"wrong number of characters written %d\n",nuchars);
                   1329:                        exit(1);
                   1330:        }
                   1331:        filename = argv[1];
                   1332:        mtime = getstamp(filename);
                   1333:        sprintf(timestamp,"%ld",mtime);
                   1334:        argv++;
                   1335:        sprintf(pages,"TP%s",argv[1]);
                   1336:        yylex();
                   1337:        rewind(stdout);
                   1338:        for(p=buf; p < &buf[HEADSIZE-1]; p++)
                   1339:                if(*p == '\0')*p = ' ';
                   1340:        *p = '\n';
                   1341:        if((nuchars = fwrite(buf,sizeof(char),HEADSIZE,stdout)) != HEADSIZE){
                   1342:                fprintf(stderr,"wrong number of characters written %d\n",nuchars);
                   1343:                        exit(1);
                   1344:        }
                   1345:        *(cover+1) = '\0';
                   1346:        if((inp=fopen(name,"a")) == NULL){
                   1347:                fprintf(stderr,"can't open tmp file %s\n",name);
                   1348:                exit(1);
                   1349:        }
                   1350:        fprintf(inp,"cd /tmp; uucp -m -C %s %s; rm %s\n",machine,dest,machine);
                   1351:        fclose(inp);
                   1352: }      
                   1353: 0707070035330165711006640021230000040000010214560421531217500001300000000000TRAILER!!!printf(stderr,"wrong number of characters written %d\n",nuchars);
                   1354:                        exit(1);
                   1355:        }
                   1356:        *(cover+1) = '\0';
                   1357:        if((inp=fopen(name,"a")) == NUL

unix.superglobalmegacorp.com

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