112267Stut #ifndef lint 2*24436Smckusick static char *sccsid = "@(#)refer3.c 4.2 (Berkeley) 08/26/85"; 312267Stut #endif 412267Stut 512267Stut #include "refer..c" 612267Stut #define move(x, y) close(y); dup(x); close(x); 712267Stut 812267Stut corout(in, out, rprog, arg, outlen) 912267Stut char *in, *out, *rprog; 1012267Stut { 1112267Stut int pipev[2], fr1, fr2, fw1, fw2, n; 1212267Stut int status; 1312267Stut 1412267Stut pipe(pipev); 1512267Stut fr1 = pipev[0]; 1612267Stut fw1 = pipev[1]; 1712267Stut pipe(pipev); 1812267Stut fr2 = pipev[0]; 1912267Stut fw2 = pipev[1]; 2012267Stut if (fork() == 0) 2112267Stut { 2212267Stut close(fw1); 2312267Stut close(fr2); 2412267Stut move(fr1, 0); 2512267Stut move(fw2, 1); 2612267Stut execl(rprog, "deliv", arg, 0); 27*24436Smckusick err("Can't run %s", rprog); 2812267Stut } 2912267Stut close(fw2); 3012267Stut close(fr1); 3112267Stut write(fw1, in , strlen(in)); 3212267Stut close(fw1); 3312267Stut wait(&status); 3412267Stut n = read(fr2, out, outlen); 3512267Stut out[n] = 0; 3612267Stut close(fr2); 3712267Stut return(n); 3812267Stut } 39