#!/usr/bin/perl
#
# This is a poor man's interface to conversd. Used to connect
# to the sysop channel 9000 on world wide converse.
#
# Last Change: DL6RAI Sun Mar  7 10:04:43 GMT 1999

require 5.002;
use strict;
use Socket;
use Fcntl;

my ($remote,$port, $iaddr, $paddr, $proto, $line, 
	$rin, $rout, $nfound, $len, $p, $mycall);

$mycall  = shift || 'anonymous';
$remote  = shift || 'lurpac.lancs.ac.uk';
$port    = shift || 3600;  # random port (standard port for conversd)

if ($port =~ /\D/) { $port = getservbyname($port, 'tcp') }
die "No port" unless $port;

$iaddr   = inet_aton($remote) || die "no host: $remote";
$paddr   = sockaddr_in($port, $iaddr);
$proto   = getprotobyname('tcp');

socket(SOCK, PF_INET, SOCK_STREAM, $proto)  || die "socket: $!";
connect(SOCK, $paddr) || die "connect: $!";

print "Connected to host $remote, port $port.\n";

select(SOCK);
$| = 1;

print SOCK "/n $mycall 9000\r\n";

while (1) {

	vec($rin,fileno(STDIN),1) = 1;
	vec($rin,fileno(SOCK),1) = 1;

	$rout = $rin;
	$nfound = select($rout, undef, undef, undef);

	if (vec($rout,fileno(SOCK),1)) {
		# print STDOUT ">>> Found a byte on SOCK\n";
		# $line = <SOCK>;
		$len = sysread(SOCK,$line,1024);
		$line =~ s/\r//;
		print STDOUT "$line";
	}

	if (vec($rout,fileno(STDIN),1)) {
		# print STDOUT ">>> Found a byte on STDIN\n";
		$len = sysread(STDIN,$line,1024);
		chop($line);
		if ( $line =~ /\/q/i ) { goto QUIT; }
		print SOCK "$line\r\n";
	}
}

QUIT: 
	close (SOCK) || die "close: $!";
	print STDOUT "Closing down connection to host $remote.\n";
