#!/mnt/us/bin/perl

if (@ARGV < 1) {
        print STDERR "usage: $0 cmd args\n";
        exit 1;

sub open_ptm {
        my ($fd) = @_;
        my ($ptm, $ttyname);
        foreach $ptm (</dev/pty*>) {
                open($fd, "+>$ptm") || next;
                $ptm =~ /^\/dev\/pty(.+)/;
                $ttyname = "/dev/tty".$1;
                return $ttyname;
        }
        print STDERR "no pty found\n";
        return;

$ttyout = open_ptm(PTMOUT) || die "open ptm";

#
#
#
if (($pid = fork()) == 0) {
        close(PTMOUT);

        open(STDOUT, ">$ttyout") || die "open stdout";
        #open(STDERR, ">&STDOUT") || die "dup stderr";

        exec(@ARGV);
        die "exec @ARGV";

#
# copy command output to stdout
#

while($sz = sysread PTMOUT, $buf, 512) {
        syswrite STDOUT, $buf, $sz;

close(PTMOUT);

waitpid $pid, 0;
$rc = $?>>8;

exit $rc; 
