Annotation of 43BSDReno/old/vpr/vpr.c, revision 1.1

1.1     ! root        1: static char sccsid[] = "@(#)vpr.c      1.4     (Berkeley)      11/18/82";
        !             2: 
        !             3: #include <signal.h>
        !             4: #include <sys/param.h>
        !             5: #define        BUFSIZ  MAXBSIZE
        !             6: 
        !             7: /*
        !             8:  *     vpr -- varian and versatec (as printers) spooler
        !             9:  */
        !            10: 
        !            11: #define VAD            "/usr/lib/vad"
        !            12: #define VPD            "/usr/lib/vpd"
        !            13: char   VAtfname[] =    "/usr/spool/vad/tfaXXXXX";
        !            14: char   VAcfname[] =    "/usr/spool/vad/cfaXXXXX";
        !            15: char   VAdfname[] =    "/usr/spool/vad/dfaXXXXX";
        !            16: char   VPtfname[] =    "/usr/spool/vpd/tfaXXXXX";
        !            17: char   VPcfname[] =    "/usr/spool/vpd/cfaXXXXX";
        !            18: char   VPdfname[] =    "/usr/spool/vpd/dfaXXXXX";
        !            19: char   *tfname;
        !            20: char   *cfname;
        !            21: /* char        *lfname; */
        !            22: char   *dfname;
        !            23: int    wide;
        !            24: int    literal;
        !            25: int    nact;
        !            26: int    tff;
        !            27: int    mailflg;
        !            28: char   person[10];
        !            29: int    inchar;
        !            30: int    maxrec  = 2000;
        !            31: char   *width = "-w106";
        !            32: int    troffit;
        !            33: int     plotit;
        !            34: char   *fonts[4];
        !            35: 
        !            36: main(argc, argv)
        !            37:        int argc;
        !            38:        char *argv[];
        !            39: {
        !            40:        register char *arg, *remote;
        !            41:        int c, f, fv, flag;
        !            42:        int out();
        !            43: 
        !            44:        umask(0);
        !            45:        if (signal(SIGINT, SIG_IGN) == SIG_DFL)
        !            46:                signal(SIGINT, out);
        !            47:        if (signal(SIGQUIT, SIG_IGN) == SIG_DFL)
        !            48:                signal(SIGQUIT, out);
        !            49:        if (signal(SIGHUP, SIG_IGN) == SIG_DFL)
        !            50:                signal(SIGHUP, out);
        !            51:        if (signal(SIGTERM, SIG_IGN) == SIG_DFL)
        !            52:                signal(SIGTERM, out);
        !            53:        remote = "$     remote  **,onl";
        !            54:        flag = 0;
        !            55:        wide = 0;
        !            56:        tfname = VAtfname;
        !            57:        cfname = VAcfname;
        !            58:        dfname = VAdfname;
        !            59:        while (argc>1 && (arg = argv[1])[0]=='-') {
        !            60:                if (arg[1] && arg[2]) {
        !            61:                        remote[12] = arg[1];
        !            62:                        remote[13] = arg[2];
        !            63:                        remote[14] = 0;
        !            64:                } else switch (arg[1]) {
        !            65: 
        !            66:                case 'W':
        !            67:                        wide++;
        !            68:                        tfname = VPtfname;
        !            69:                        cfname = VPcfname;
        !            70:                        dfname = VPdfname;
        !            71:                        break;
        !            72: 
        !            73:                case '-':
        !            74:                        remote[12] = 'r';
        !            75:                        remote[13] = '1';
        !            76:                        remote[14] = '\0';
        !            77:                        break;
        !            78: 
        !            79:                case 'c':
        !            80:                        flag = '+';
        !            81:                        break;
        !            82: 
        !            83:                case 'r':
        !            84:                        flag = '-';
        !            85:                        break;
        !            86: 
        !            87:                 case 'v':
        !            88:                         plotit = 1;
        !            89:                         width = 0;
        !            90:                         break;
        !            91: 
        !            92:                case 'm':
        !            93:                        mailflg = 1;
        !            94:                        break;
        !            95: 
        !            96:                case 't':
        !            97:                        troffit = 1;
        !            98:                        width = 0;
        !            99:                        break;
        !           100: 
        !           101:                case '4':
        !           102:                case '3':
        !           103:                case '2':
        !           104:                case '1':
        !           105:                        fonts[arg[1] - '1'] = argv[2];
        !           106:                        troffit = 1;
        !           107:                        argv++;
        !           108:                        argc--;
        !           109:                        break;
        !           110: 
        !           111:                case 'w':
        !           112:                        if (troffit)
        !           113:                                break;
        !           114:                        if (arg[2] == 0)
        !           115:                                width = 0;
        !           116:                        else
        !           117:                                width = arg;
        !           118:                        break;
        !           119: 
        !           120:                case 'l':
        !           121:                        literal++;      /* Pass control chars through. */
        !           122:                        break;
        !           123:                }
        !           124:                argc--;
        !           125:                argv++;
        !           126:        }
        !           127:        pidfn();
        !           128:        tff = nfile(tfname);
        !           129:        if (!wide)              /* varian doesn't use sidebyside. */
        !           130:                width = 0;
        !           131:        ident();
        !           132:        if(argc == 1)
        !           133:                copy(0);
        !           134:        while(--argc > 0) {
        !           135:                arg = *++argv;
        !           136: /*
        !           137:                if(flag == '+')
        !           138:                        goto cf;
        !           139:  * This may not work because the daemon runs as someone else, so don't bother
        !           140:                if(*arg == '/' && flag != '-') {
        !           141:                        card(literal ? 'G' : 'F', arg);
        !           142:                        nact++;
        !           143:                        continue;
        !           144:                }
        !           145:                if(link(arg, lfname) < 0)
        !           146:                        goto cf;
        !           147:                card(literal ? 'G' : 'F', lfname);
        !           148:                card('U', lfname);
        !           149:                lfname[inchar]++;
        !           150:                nact++;
        !           151:                goto df;
        !           152:  */
        !           153: 
        !           154:        cf:
        !           155:                f = open(arg, 0);
        !           156:                if(f < 0) {
        !           157:                        printf("Cannot open %s\n", arg);
        !           158:                        if (plotit) {
        !           159:                                --argc;
        !           160:                                arg = *++argv;
        !           161:                        }
        !           162:                        continue;
        !           163:                }
        !           164:                 if (plotit) {
        !           165:                        if (--argc > 0) {
        !           166:                                arg = *++argv;
        !           167:                                fv = open(arg, 0);
        !           168:                                if (fv < 0) {
        !           169:                                        printf("Cannot open %s\n", arg);
        !           170:                                        close(f);
        !           171:                                        continue;
        !           172:                                }
        !           173:                        }
        !           174:                        else {
        !           175:                                printf("Versaplot requires parm and vector file\n");
        !           176:                                close(f);
        !           177:                                continue;
        !           178:                        }
        !           179:                        copy(fv);
        !           180:                        close(fv);
        !           181:                }
        !           182:                copy(f);
        !           183:                close(f);
        !           184: 
        !           185:        df:
        !           186:                if(flag == '-') {
        !           187:                        f = unlink(arg);
        !           188:                        if(f < 0)
        !           189:                                printf("Cannot remove %s\n", arg);
        !           190:                }
        !           191:        }
        !           192: 
        !           193:        if(nact) {
        !           194:                tfname[inchar]--;
        !           195:                f = link(tfname, dfname);
        !           196:                if(f < 0) {
        !           197:                        printf("Cannot rename %s\n", dfname);
        !           198:                        tfname[inchar]++;
        !           199:                        out();
        !           200:                }
        !           201:                unlink(tfname);
        !           202:                if (wide)
        !           203:                        execl(VPD, "vpd", "-n", "-3", 0);
        !           204:                else
        !           205:                        execl(VAD, "vad", "-n", "-3", 0);
        !           206:                dfname[inchar]++;
        !           207:                printf("Daemon doesn't exist\n");
        !           208:                exit(0);
        !           209:        }
        !           210:        out();
        !           211: }
        !           212: 
        !           213: copy(f)
        !           214: int f;
        !           215: {
        !           216:        int ff, i, nr, nc;
        !           217:        static char buf[BUFSIZ];
        !           218:        int status;
        !           219: 
        !           220:        for (i = 0; i < 3; i++)
        !           221:                if (fonts[i])
        !           222:                        card('1' + i, fonts[i]);
        !           223:        if (troffit)
        !           224:                card('T', cfname);
        !           225:        else if (plotit)
        !           226:                card('P', cfname);
        !           227:        else
        !           228:                card(literal ? 'G' : 'F', cfname);
        !           229:        card('U', cfname);
        !           230:        ff = nfile(cfname);
        !           231:        nc = 0;
        !           232:        nr = 0;
        !           233:        if (width) {
        !           234:                int pvec[2];
        !           235:                pipe(pvec);
        !           236:                i = fork();
        !           237:                if (i < 0) {
        !           238:                        printf("No more processes\n");
        !           239:                        out();
        !           240:                }
        !           241:                if (i == 0) {
        !           242:                        if (f != 0) {
        !           243:                                close(0);
        !           244:                                dup(f);
        !           245:                        }
        !           246:                        close(1);
        !           247:                        dup(pvec[1]);
        !           248:                        close(pvec[0]);
        !           249:                        close(pvec[1]);
        !           250:                        execl("/usr/lib/sidebyside", "sidebyside", width, 0);
        !           251:                        perror("/usr/lib/sidebyside");
        !           252:                        exit(1);
        !           253:                }
        !           254:                close(pvec[1]);
        !           255:                close(f);
        !           256:                f = pvec[0];
        !           257:        }
        !           258:        while((i = read(f, buf, BUFSIZ)) > 0) {
        !           259:                write(ff, buf, i);
        !           260:                nc += i;
        !           261:                if(nc >= BUFSIZ) {
        !           262:                        nc -= BUFSIZ;
        !           263:                        nr++;
        !           264:                        if(nr > maxrec) {
        !           265:                                printf("Copy file is too large\n");
        !           266:                                break;
        !           267:                        }
        !           268:                }
        !           269:        }
        !           270:        close(ff);
        !           271:        nact++;
        !           272:        wait(&status);
        !           273: }
        !           274: 
        !           275: card(c, s)
        !           276: int c;
        !           277: char s[];
        !           278: {
        !           279:        char *p1, *p2;
        !           280:        static char buf[BUFSIZ];
        !           281:        int col;
        !           282: 
        !           283:        p1 = buf;
        !           284:        p2 = s;
        !           285:        col = 0;
        !           286:        *p1++ = c;
        !           287:        while((c = *p2++) != '\0') {
        !           288:                *p1++ = c;
        !           289:                col++;
        !           290:        }
        !           291:        *p1++ = '\n';
        !           292:        write(tff, buf, col+2);
        !           293: }
        !           294: 
        !           295: ident()
        !           296: {
        !           297:        int c, n;
        !           298:        register char *b1p, *pp, *b2p;
        !           299:        static char b1[100], b2[100];
        !           300: 
        !           301:        b1p = b1;
        !           302:        if(getpw(getuid(), b1p)) {
        !           303:                b1p = "pdp::::m0000,m000:";
        !           304:        }
        !           305:        n = 0;
        !           306:        b2p = b2;
        !           307:        while(*b2p++ = "$       ident   "[n++]);
        !           308:        b2p--;
        !           309:        n = 5;
        !           310:        while(--n) while(*b1p++ != ':');
        !           311:        while((*b2p++ = *b1p++) != ':');
        !           312:        b2p[-1] = ',';
        !           313:        b1p = b1;
        !           314:        pp = person;
        !           315:        while((c = *b1p++) != ':') {
        !           316:                *b2p++ = c;
        !           317:                *pp++ = c;
        !           318:        }
        !           319:        *b2p++ = 0;
        !           320:        *pp++ = 0;
        !           321:        card('L', person);
        !           322:        if (mailflg)
        !           323:                card('M', person);
        !           324: }
        !           325: 
        !           326: pidfn()
        !           327: {
        !           328:        register i, j, c;
        !           329:        int s;
        !           330:        int p;
        !           331: 
        !           332:        s = p = getpid();
        !           333:        p &= 077777;
        !           334:        i = 0;
        !           335:        while(tfname[i] != 'X')
        !           336:                i++;
        !           337:        i += 4;
        !           338:        for(j=0; j<5; j++) {
        !           339:                c = (p%10) + '0';
        !           340:                if(s<0 && j==4)
        !           341:                        c += 4;
        !           342:                p /= 10;
        !           343:                tfname[i] = c;
        !           344:                cfname[i] = c;
        !           345: /*
        !           346:                lfname[i] = c;
        !           347: */
        !           348:                dfname[i] = c;
        !           349:                i--;
        !           350:        }
        !           351:        inchar = i;
        !           352: }
        !           353: 
        !           354: nfile(name)
        !           355: char *name;
        !           356: {
        !           357:        register f;
        !           358: 
        !           359:        f = creat(name, 0644);
        !           360:        if(f < 0) {
        !           361:                printf("Cannot create %s\n", name);
        !           362:                out();
        !           363:        }
        !           364:        name[inchar]++;
        !           365:        return(f);
        !           366: }
        !           367: 
        !           368: out()
        !           369: {
        !           370:        register i;
        !           371: 
        !           372:        signal(SIGINT, SIG_IGN);
        !           373:        signal(SIGQUIT, SIG_IGN);
        !           374:        signal(SIGHUP, SIG_IGN);
        !           375:        signal(SIGTERM, SIG_IGN);
        !           376:        i = inchar;
        !           377:        while(tfname[i] != 'a') {
        !           378:                tfname[i]--;
        !           379:                unlink(tfname);
        !           380:        }
        !           381:        while(cfname[i] != 'a') {
        !           382:                cfname[i]--;
        !           383:                unlink(cfname);
        !           384:        }
        !           385: /*
        !           386:        while(lfname[i] != 'a') {
        !           387:                lfname[i]--;
        !           388:                unlink(lfname);
        !           389:        }
        !           390: */
        !           391:        while(dfname[i] != 'a') {
        !           392:                dfname[i]--;
        !           393:                unlink(dfname);
        !           394:        }
        !           395:        exit(0);
        !           396: }

unix.superglobalmegacorp.com

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