#define tst(a,b) (*mode == 'r'? (b) : (a))
static int popen_pid
[20];
static char *sccsid
= "@(#)popen.c 1.3 %G%";
register myside
, hisside
, pid
;
myside
= tst(p
[WTR
], p
[RDR
]);
hisside
= tst(p
[RDR
], p
[WTR
]);
if((pid
= vfork()) == 0) {
/* myside and hisside reverse roles in child */
dup2(hisside
, tst(0, 1));
execl("/bin/csh", "sh", "-c", cmd
, 0);
return(fdopen(myside
, mode
));
while((r
= wait(&status
)) != popen_pid
[f
] && r
!= -1 && errno
!= EINTR
)