#!./mofeperl

$port = 8853;
chop($hostname = `hostname`);
$AF = 2; # AF_INET; 
($name, $aliases, $type, $len, $myaddr) = gethostbyname($hostname);

sub doListen {
    local($turnOn) = @_;
    if ($turnOn) {
	local($SOCK0) = pack('S n a4 x8', $AF, $port, $myaddr);
	socket(S0,$AF, 1,0) || die "socket $!";
	bind(S0,$SOCK0);
	listen(S0,1);
	local($fd) = fileno(S0);
	&wafe_cmd("set listenId [addInput $fd accept _ {perl callAccept}]");
    } else {
	&wafe_cmd('removeInput $listenId');	
	close(S0);
    }
}

sub callAccept {
    accept(NS,S0);
    local($fd) = fileno(NS);
    &wafe_cmd("set incomingId [addInput $fd read _ {perl callReceived \$_}]");
}

sub callReceived {
    local($_) = @_;
    chop($_); chop($_);
    &wafe_cmd("sV received labelString {$_}");
    &wafe_cmd('unset _; removeInput $incomingId');
    close(NS);
}

&wafe_cmd(<<'_');
 XmRowColumn rc topLevel 
 XmToggleButton listen rc valueChangedCallback {perl doListen [gV %W set]}
 XmLabel received: rc width 200 recomputeSize false
 XmLabel received rc labelString " "
 XmPushButton quit rc activateCallback quit
 realize
_

&wafe_process_events();


