corout(in
, out
, rprog
, arg
, outlen
)
# define move(x, y) close(y); dup(x); close(x);
int pipev
[2], fr1
, fr2
, fw1
, fw2
, n
;
if (strcmp (rprog
, "hunt") ==0)
return(callhunt(in
, out
, arg
, outlen
));
if (strcmp (rprog
, "deliv")==0)
return(dodeliv(in
, out
, arg
, outlen
));
pipe (pipev
); fr1
= pipev
[0]; fw1
= pipev
[1];
pipe (pipev
); fr2
= pipev
[0]; fw2
= pipev
[1];
close (fw1
); close (fr2
);
execl(rprog
, "deliv", arg
, 0);
err ("Can't run %s", rprog
);
write (fw1
, in
, strlen(in
));
n
= read (fr2
, out
, outlen
);
callhunt(in
, out
, arg
, outlen
)
char *argv
[20], abuff
[ALEN
];
argv
[11] = abuff
; strcpy (abuff
,arg
);
if (strlen(abuff
) > ALEN
)
err("abuff not big enough %d", strlen(abuff
));
dodeliv(in
, out
, arg
, outlen
)
fprintf(stderr
, "in dodeliv, arg /%s/\n", arg
?arg
:"");
findline(in
, out
, outlen
, 0L);