1*48296Sbostic /*-
2*48296Sbostic * %sccs.include.proprietary.c%
3*48296Sbostic */
4*48296Sbostic
512267Stut #ifndef lint
6*48296Sbostic static char sccsid[] = "@(#)refer3.c 4.3 (Berkeley) 04/18/91";
7*48296Sbostic #endif /* not lint */
812267Stut
912267Stut #include "refer..c"
1012267Stut #define move(x, y) close(y); dup(x); close(x);
1112267Stut
corout(in,out,rprog,arg,outlen)1212267Stut corout(in, out, rprog, arg, outlen)
1312267Stut char *in, *out, *rprog;
1412267Stut {
1512267Stut int pipev[2], fr1, fr2, fw1, fw2, n;
1612267Stut int status;
1712267Stut
1812267Stut pipe(pipev);
1912267Stut fr1 = pipev[0];
2012267Stut fw1 = pipev[1];
2112267Stut pipe(pipev);
2212267Stut fr2 = pipev[0];
2312267Stut fw2 = pipev[1];
2412267Stut if (fork() == 0)
2512267Stut {
2612267Stut close(fw1);
2712267Stut close(fr2);
2812267Stut move(fr1, 0);
2912267Stut move(fw2, 1);
3012267Stut execl(rprog, "deliv", arg, 0);
3124436Smckusick err("Can't run %s", rprog);
3212267Stut }
3312267Stut close(fw2);
3412267Stut close(fr1);
3512267Stut write(fw1, in , strlen(in));
3612267Stut close(fw1);
3712267Stut wait(&status);
3812267Stut n = read(fr2, out, outlen);
3912267Stut out[n] = 0;
4012267Stut close(fr2);
4112267Stut return(n);
4212267Stut }
43