X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fconsole.pl;h=c175122b2ee774ff307e304678c656ec508c1112;hb=1a9286080b21d5b65f97cab08d8a493abafad8f1;hp=48c7ff8c1c756210911f4250a79980f6ca0c3c2b;hpb=431c8a14cdecd0ec455b6619380687dbe84e2a35;p=spider.git diff --git a/perl/console.pl b/perl/console.pl index 48c7ff8c..c175122b 100755 --- a/perl/console.pl +++ b/perl/console.pl @@ -13,7 +13,7 @@ # # -require 5.004; +require 5.16.1; use warnings; # search local then perl directories @@ -52,6 +52,7 @@ use Console; # $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 @@ -69,19 +70,13 @@ $inscroll = 0; $DXDebug::no_stdout = 1; -sub mydbg -{ - local *STDOUT = undef; - dbg(@_); -} - # do the screen initialisation sub do_initscr { $scr = new Curses; if ($has_colors) { start_color(); - init_pair("0", $foreground, $background); + init_pair(0, $foreground, $background); # init_pair(0, $background, $foreground); init_pair(1, COLOR_RED, $background); init_pair(2, COLOR_YELLOW, $background); @@ -139,6 +134,7 @@ sub doresize $inscroll = 0; $spos = @sh < $pagel ? 0 : @sh - $pagel; show_screen(); + $conn->send_later("C$call|$cols") if $conn; } # cease communications @@ -171,17 +167,6 @@ sub setattr } } -# measure the no of screen lines a line will take -sub measure -{ - my $line = shift; - return 0 unless $line; - - my $l = length $line; - my $lines = int ($l / $cols); - $lines++ if $l / $cols > $lines; - return $lines; -} # display the top screen sub show_screen @@ -190,11 +175,6 @@ sub show_screen dbg("B: s:$spos h:" . scalar @sh) if isdbg('console'); my ($i, $l); -# for ($i = 0; $i < $pagel && $p >= 0; ) { -# $l = measure($sh[$p]); -# $i += $l; -# $p-- if $i < $pagel; - # } $spos = 0 if $spos < 0; my $y = $spos; @@ -203,7 +183,6 @@ sub show_screen $top->clrtobot(); for ($i = 0; $i < $pagel && $y < @sh; ++$y) { my $line = $sh[$y]; -# my $lines = measure($line); my $lines = 1; $top->move($i, 0); dbg("C: s:$spos y:$i sh:" . scalar @sh . " l:" . length($line) . " '$line'") if isdbg('console'); @@ -245,12 +224,13 @@ sub show_screen my $size = $lines . 'x' . $cols . '-'; my $add = "-$spos-$shl"; my $time = ztime(time); - my $str = "-" . $time . '-' . ($inscroll ? 'S':'-') . '-' x ($cols - (length($size) + length($call) + length($add) + length($time) + 3)); + my $c = "$call\@$node"; + my $str = "-" . $time . '-' . ($inscroll ? 'S':'-') . '-' x ($cols - (length($size) + length($c) + length($add) + length($time) + 3)); $scr->addstr($lines-4, 0, $str); $scr->addstr($size); $scr->attrset($mycallcolor) if $has_colors; - $scr->addstr($call); + $scr->addstr($c); $scr->attrset(COLOR_PAIR(0)) if $has_colors; $scr->addstr($add); $scr->refresh(); @@ -299,11 +279,6 @@ sub rec_stdin $bot->clrtoeol(); $bot->addstr(substr($inbuf, 0, $cols)); - # add it to the monitor window -# unless ($spos == @sh) { -# $spos = @sh; -# show_screen(); -# } if ($inscroll && $spos < @sh) { $spos = @sh - $pagel; $inscroll = 0; @@ -334,12 +309,6 @@ sub rec_stdin } } elsif ($r eq KEY_PPAGE || $r eq "\032") { if ($spos > 0 && @sh > $pagel) { -# my ($i, $l); -# for ($i = 0; $i < $pagel-1 && $spos >= 0; ) { -# $l = measure($sh[$spos]); -# $i += $l; -# --$spos if $i <= $pagel; -# } $spos -= $pagel+int($pagel/2); $spos = 0 if $spos < 0; $inscroll = 1; @@ -349,12 +318,6 @@ sub rec_stdin } } elsif ($r eq KEY_NPAGE || $r eq "\026") { if ($inscroll && $spos < @sh) { -# my ($i, $l); -# for ($i = 0; $i <= $pagel && $spos < @sh; ) { -# $l = measure($sh[$spos]); -# $i += $l; -# ++$spos if $i <= $pagel && $spos < @sh; -# } dbg("NPAGE sp:$spos $sh:". scalar @sh . " pl: $pagel") if isdbg('console'); $spos += int($pagel/2); @@ -458,10 +421,15 @@ sub addtotop while (@_) { my $inbuf = shift; my $l = length $inbuf; + dbg("addtotop: $l $inbuf"); if ($l > $cols) { -# $Text::Wrap::Columns = $cols; -# push @sh, wrap('',"\t", $inbuf); - push @sh, $inbuf; + $inbuf =~ s/\s+/ /g; + if (length $inbuf > $cols) { + $Text::Wrap::columns = $cols; + push @sh, split /\n/, wrap('',' ' x 19, $inbuf); + } else { + push @sh, $inbuf; + } } else { push @sh, $inbuf; } @@ -522,10 +490,10 @@ sub idle_loop } my $ch = $bot->getch(); # this is here just to catch RESIZE events if (defined $ch) { - if ($ch == KEY_RESIZE) { + if ($ch eq KEY_RESIZE) { doresize(); } else { - rec_stdin($ch) unless $ch == '-1'; + rec_stdin($ch) unless $ch eq '-1'; } } $top->refresh() if $top->is_wintouched; @@ -554,11 +522,17 @@ sub on_disconnect while (@ARGV && $ARGV[0] =~ /^-/) { my $arg = shift; - dbgadd('console'), $maxshist = 200 if $arg eq '-x'; + if ($arg eq '-x') { + dbginit('console'); + dbgadd('console'); + $maxshist = 200; + } } $call = uc shift @ARGV if @ARGV; -$call = uc $myalias if !$call; +$call = uc $myalias unless $call; +$node = uc $mycall unless $node; + my ($scall, $ssid) = split /-/, $call; $ssid = undef unless $ssid && $ssid =~ /^\d+$/; if ($ssid) { @@ -571,8 +545,6 @@ if ($call eq $mycall) { exit(0); } -dbginit(); - unless ($DB::VERSION) { $SIG{'INT'} = \&sig_term; $SIG{'TERM'} = \&sig_term; @@ -580,13 +552,13 @@ unless ($DB::VERSION) { $SIG{'HUP'} = \&sig_term; -# start up + +# start upb +$Text::Wrap::columns = $cols; doresize(); $SIG{__DIE__} = \&sig_term; -#$Text::Wrap::Columns = $cols; - my $lastmin = 0; @@ -594,7 +566,7 @@ $conn = IntMsg->connect($clusteraddr, $clusterport, rproc => \&rec_socket); $conn->{on_connect} = \&on_connect; $conn->{on_disconnect} = \&on_disconnect; -my $timer = Mojo::IOLoop->recurring(1, sub {DXLog::flushall()}); +my $timer = Mojo::IOLoop->recurring(1, sub {DXLog::flushall()}) if $DXDebug::fp; $idle = Mojo::IOLoop->recurring(0.100 => \&idle_loop); Mojo::IOLoop->singleton->reactor->io(\*STDIN => sub {