#!/usr/bin/env perl

use IPC::Open3;
use IO::Socket;

my $bash = "bash";
if ($#ARGV >= 0) {
    $bash = $ARGV[0];
}

my $pid = open3(my $in, my $out, my $err, $bash);

$socket = IO::Socket::INET->new(PeerAddr => "127.0.0.1",
                                PeerPort => 6666,
                                Proto    => "tcp",
                                Type     => SOCK_STREAM);

print $in 'export PATH="/usr/bin:/mingw64/bin:$PATH"' . "\n";

while(true) {
    #STDOUT->flush();
    my $len;
    $socket->recv($len, 4);
    my $actual_len = unpack("L", $len);
    if ($actual_len == 0) {
        #print("not connected");
        exit;
    }
    #print("still connected");
    my $s2;
    $socket->recv($s2, $actual_len);

    #print($s2);
    STDOUT->flush();

    $s = "";
    $command = $s2 . "\necho -e \"\\v\"\n";
    print $in $command;

    inner_while: while (true) {
        $line = <$out>;
        if ($line =~ s/\cK//) {
            STDOUT->flush();
            last inner_while;
        }
        $s = $s . $line;
    }
    #print "got complete output";
    #print $s;

    #print length($s);
    STDOUT->flush();
    my $send_length = pack("L", length($s));
    $socket->send($send_length);
    $socket->send($s);

    my $exit_code = pack("L", 0);
    $socket->send($exit_code);

}
