1*12267Stut #ifndef lint 2*12267Stut static char *sccsid = "@(#)refer3.c 4.1 (Berkeley) 05/06/83"; 3*12267Stut #endif 4*12267Stut 5*12267Stut #include "refer..c" 6*12267Stut #define move(x, y) close(y); dup(x); close(x); 7*12267Stut 8*12267Stut corout(in, out, rprog, arg, outlen) 9*12267Stut char *in, *out, *rprog; 10*12267Stut { 11*12267Stut int pipev[2], fr1, fr2, fw1, fw2, n; 12*12267Stut int status; 13*12267Stut 14*12267Stut pipe(pipev); 15*12267Stut fr1 = pipev[0]; 16*12267Stut fw1 = pipev[1]; 17*12267Stut pipe(pipev); 18*12267Stut fr2 = pipev[0]; 19*12267Stut fw2 = pipev[1]; 20*12267Stut if (fork() == 0) 21*12267Stut { 22*12267Stut close(fw1); 23*12267Stut close(fr2); 24*12267Stut move(fr1, 0); 25*12267Stut move(fw2, 1); 26*12267Stut execl(rprog, "deliv", arg, 0); 27*12267Stut err("Can't run %s", (void) rprog); 28*12267Stut } 29*12267Stut close(fw2); 30*12267Stut close(fr1); 31*12267Stut write(fw1, in , strlen(in)); 32*12267Stut close(fw1); 33*12267Stut wait(&status); 34*12267Stut n = read(fr2, out, outlen); 35*12267Stut out[n] = 0; 36*12267Stut close(fr2); 37*12267Stut return(n); 38*12267Stut } 39