#
require 5.16.1;
+use strict;
use warnings;
+our $root;
+our $is_win;
+our $myalias;
+our $mycall;
+our $clusteraddr;
+our $clusterport;
+our $maxshist;
+our $maxkhist;
+our $foreground;
+our $background;
+our $mycallcolor;
+our @colors;
+
# search local then perl directories
BEGIN {
# root of directory tree for this system
$is_win = ($^O =~ /^MS/ || $^O =~ /^OS-2/) ? 1 : 0; # is it Windows?
}
-$clusteraddr = '127.0.0.1';
-$clusterport = 27754;
use Mojo::IOLoop;
# initialisation
#
-$call = ""; # the callsign being used
-$node = ""; # the node callsign being used
-$conn = 0; # the connection object for the cluster
-$lasttime = time; # lasttime something happened on the interface
-
-$connsort = "local";
-@kh = ();
-@sh = ();
-$kpos = 0;
-$spos = $pos = $lth = 0;
-$inbuf = "";
-$lastmin = 0;
-$idle = 0;
-$inscroll = 0;
+$clusteraddr //= '127.0.0.1';
+$clusterport //= 27754;
+
+our $call = ""; # the callsign being used
+our $node = ""; # the node callsign being used
+our $conn = 0; # the connection object for the cluster
+our $lasttime = time; # lasttime something happened on the interface
+
+our $connsort = "local";
+our @kh = ();
+our @sh = ();
+our $kpos = 0;
+our $inbuf = "";
+our $idle = 0;
+our $inscroll = 0;
+
+my $top;
+my $bot;
+my $lines;
+my $scr;
+my $cols;
+my $pagel;
+my $has_colors;
+our $pos;
+our $lth;
+my $sh;
+
+our $spos = $pos = $lth = 0;
+
+
#$SIG{WINCH} = sub {@time = gettimeofday};
show_screen();
}
- addtotop($inbuf);
+ addtotop(' ', $inbuf);
# send it to the cluster
$conn->send_later("I$call|$inbuf");
# add a line to the end of the top screen
sub addtotop
{
+ my $sort = shift;
while (@_) {
my $inbuf = shift;
my $l = length $inbuf;
- dbg("addtotop: $l $inbuf");
if ($l > $cols) {
$inbuf =~ s/\s+/ /g;
if (length $inbuf > $cols) {
$Text::Wrap::columns = $cols;
- push @sh, split /\n/, wrap('',' ' x 19, $inbuf);
+ my $token;
+ ($token) = $inbuf =~ m!^(.* de [-\w\d/\#]+:?\s+|\w{9}\@\d\d:\d\d:\d\d )!;
+ $token ||= ' ' x 19;
+ push @sh, split /\n/, wrap('', ' ' x length($token), $inbuf);
} else {
push @sh, $inbuf;
}
push @sh, $inbuf;
}
}
+
show_screen() unless $inscroll;
}
cease(1);
}
if (defined $msg) {
- dbg("msg: " . length($msg) . " '$msg'") if isdbg('console');
my ($sort, $incall, $line) = $msg =~ /^(\w)([^\|]+)\|(.*)$/;
+ dbg("msg: " . length($msg) . " '$msg'") if isdbg('console');
if ($line =~ s/\x07+$//) {
beep();
}
$call = $incall if $call ne $incall;
$line =~ s/[\x00-\x06\x08\x0a-\x19\x1b-\x1f\x80-\x9f]/./g; # immutable CSI sequence + control characters
- if ($sort && $sort eq 'D') {
- $line = " " unless length($line);
- addtotop($line);
- } elsif ($sort && $sort eq 'Z') { # end, disconnect, go, away .....
+ if ($sort && $sort eq 'Z') { # end, disconnect, go, away .....
cease(0);
- }
- # ******************************************************
- # ******************************************************
- # any other sorts that might happen are silently ignored.
- # ******************************************************
- # ******************************************************
+ } else {
+ $line = " " unless length($line);
+ addtotop($sort, $line);
+ }
+
} else {
cease(0);
}
$lasttime = time;
}
+my $lastmin = 0;
sub idle_loop
{
sub on_connect
{
my $conn = shift;
- $conn->send_later("A$call|$connsort width=$cols");
- $conn->send_later("I$call|set/page $maxshist");
- #$conn->send_later("I$call|set/nobeep");
+ $conn->send_later("A$call|$connsort width=$cols enhanced");
+ $conn->send_later("I$call|set/page " . ($maxshist-5));
+ $conn->send_later("I$call|set/nobeep");
}
sub on_disconnect
$call = uc $myalias unless $call;
$node = uc $mycall unless $node;
+$call = normalise_call($call);
my ($scall, $ssid) = split /-/, $call;
$ssid = undef unless $ssid && $ssid =~ /^\d+$/;
if ($ssid) {
- $ssid = 15 if $ssid > 15;
+ $ssid = 99 if $ssid > 99;
$call = "$scall-$ssid";
}
$SIG{__DIE__} = \&sig_term;
-my $lastmin = 0;
-
-
$conn = IntMsg->connect($clusteraddr, $clusterport, rproc => \&rec_socket);
$conn->{on_connect} = \&on_connect;
$conn->{on_disconnect} = \&on_disconnect;