From 46001b2fa7ddb237001a9f661faca4885f9daf9d Mon Sep 17 00:00:00 2001 From: djk Date: Tue, 29 Jun 1999 09:10:33 +0000 Subject: [PATCH] some detail changes and speed ups --- perl/console.pl | 65 ++++++++++++++++++++++++++++++++----------------- 1 file changed, 42 insertions(+), 23 deletions(-) diff --git a/perl/console.pl b/perl/console.pl index b4fef51a..29817564 100755 --- a/perl/console.pl +++ b/perl/console.pl @@ -69,32 +69,52 @@ sub sig_term cease(1, @_); } -# display the top screen -sub show_screen +# determine the colour of the line +sub setattr { - my $p = $spos - $pages; - my $i; - $p = 0 if $p < 0; - - $top->move(0, 0); - $top->attrset(COLOR_PAIR(0)) if $has_colors; - $top->clrtobot(); - for ($i = 0; $i < $pages && $p < @shistory; $i++, $p++) { - my $line = $shistory[$p]; - $line = substr($line, 0, COLS()) if length $line > COLS(); - $top->move($i, 0); - if ($has_colors) { - foreach my $ref (@colors) { - if ($line =~ m{$$ref[0]}) { - $top->attrset($$ref[1]); - last; - } + if ($has_colors) { + foreach my $ref (@colors) { + if ($_[0] =~ m{$$ref[0]}) { + $top->attrset($$ref[1]); + last; } } + } +} + +# display the top screen +sub show_screen +{ + if ($spos == @shistory - 1) { + + # if we really are scrolling thru at the end of the history + my $line = $shistory[-1]; + $top->addstr("\n") if $spos > 0; + setattr($line); $top->addstr($line); $top->attrset(COLOR_PAIR(0)) if $has_colors; + $spos = @shistory; + + } else { + + # anywhere else + my $p = $spos - $pages; + my $i; + $p = 0 if $p < 0; + + $top->move(0, 0); + $top->attrset(COLOR_PAIR(0)) if $has_colors; + $top->clrtobot(); + for ($i = 0; $i < $pages && $p < @shistory; $i++, $p++) { + my $line = $shistory[$p]; + $line = substr($line, 0, COLS()) if length $line > COLS(); + $top->move($i, 0); + setattr($line); + $top->addstr($line); + $top->attrset(COLOR_PAIR(0)) if $has_colors; + } + $spos = $p; } - $spos = $p; $top->refresh(); } @@ -111,7 +131,7 @@ sub rec_socket if ($sort eq 'D') { push @shistory, $line; shift @shistory if @shistory > $maxshist; - $spos = @shistory if $spos >= @shistory - 1; +# $spos = @shistory if $spos >= @shistory - 1; show_screen(); } elsif ($sort eq 'Z') { # end, disconnect, go, away ..... cease(0); @@ -308,10 +328,9 @@ $scr->refresh(); $SIG{__DIE__} = \&sig_term; $pages = LINES()-4; -my $dpages = $pages - 2; $conn->send_now("A$call|$connsort"); -$conn->send_now("I$call|set/page $dpages"); +$conn->send_now("I$call|set/page $maxshist"); $conn->send_now("I$call|set/nobeep"); Msg->set_event_handler(\*STDIN, "read" => \&rec_stdin); -- 2.34.1