Annotation of 43BSD/usr.bin/refer/glue3.c, revision 1.1

1.1     ! root        1: #ifndef lint
        !             2: static char *sccsid = "@(#)glue3.c     4.1 (Berkeley) 5/6/83";
        !             3: #endif
        !             4: 
        !             5: #include "refer..c"
        !             6: #define move(x, y) close(y); dup(x); close(x);
        !             7: 
        !             8: corout(in, out, rprog, arg, outlen)
        !             9: char *in, *out, *rprog;
        !            10: {
        !            11:        int pipev[2], fr1, fr2, fw1, fw2, n;
        !            12: 
        !            13:        if (strcmp (rprog, "hunt") ==0)
        !            14:                return(callhunt(in, out, arg, outlen));
        !            15:        if (strcmp (rprog, "deliv")==0)
        !            16:                return(dodeliv(in, out, arg, outlen));
        !            17:        pipe (pipev); 
        !            18:        fr1= pipev[0]; 
        !            19:        fw1 = pipev[1];
        !            20:        pipe (pipev); 
        !            21:        fr2= pipev[0]; 
        !            22:        fw2 = pipev[1];
        !            23:        if (fork()==0)
        !            24:        {
        !            25:                close (fw1); 
        !            26:                close (fr2);
        !            27:                move (fr1, 0);
        !            28:                move (fw2, 1);
        !            29:                if (rprog[0]!= '/')
        !            30:                        chdir("/usr/lib/refer");
        !            31:                execl(rprog, "deliv", arg, 0);
        !            32:                err ("Can't run %s", rprog);
        !            33:        }
        !            34:        close(fw2); 
        !            35:        close(fr1);
        !            36:        write (fw1, in , strlen(in));
        !            37:        close(fw1);
        !            38:        wait(0);
        !            39:        n = read (fr2, out, outlen);
        !            40:        out[n]=0;
        !            41:        close(fr2);
        !            42: }
        !            43: 
        !            44: # define ALEN 50
        !            45: 
        !            46: callhunt(in, out, arg, outlen)
        !            47: char *in, *out, *arg;
        !            48: {
        !            49:        char *argv[20], abuff[ALEN];
        !            50:        extern int typeindex;
        !            51:        int argc;
        !            52:        extern char one[];
        !            53:        extern int onelen;
        !            54:        argv[0] = "hunt";
        !            55:        argv[1] = "-i";
        !            56:        argv[2] = in;
        !            57:        argv[3] = "-t";
        !            58:        argv[4] = out;
        !            59:        argv[5] = outlen;
        !            60:        argv[6] = "-T";
        !            61:        argv[7] = "-F1";
        !            62:        argv[8] = "-o";
        !            63:        argv[9] = one;
        !            64:        argv[10] = onelen;
        !            65:        argv[11] = abuff; 
        !            66:        strcpy (abuff,arg);
        !            67:        if (strlen(abuff) > ALEN)
        !            68:                err("abuff not big enough %d", strlen(abuff));
        !            69:        argc = 6;
        !            70:        huntmain (argc,argv);
        !            71:        return(0);
        !            72: }
        !            73: 
        !            74: dodeliv(in, out, arg, outlen)
        !            75: char *in, *out, *arg;
        !            76: {
        !            77: # if D1
        !            78:        fprintf(stderr, "in dodeliv, arg /%s/\n", arg?arg:"");
        !            79: # endif
        !            80:        if (arg && arg[0])
        !            81:                chdir(arg);
        !            82:        findline(in, out, outlen, 0L);
        !            83:        restodir();
        !            84: }

unix.superglobalmegacorp.com

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