X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fconsole.pl;h=f8d955154e95238796aa3c28d2b7bf92d2d90c52;hb=a26a82ebeee2135468113c64fc25c5f9ad1000cb;hp=a0cb567175ec7f55b4380626e333311e1216ec6b;hpb=cafedfc0df4b2c519a8227e091f746a44af07ce2;p=spider.git diff --git a/perl/console.pl b/perl/console.pl index a0cb5671..f8d95515 100755 --- a/perl/console.pl +++ b/perl/console.pl @@ -132,23 +132,6 @@ sub doresize do_initscr(); $inscroll = 0; - dbg("resize: l=$lines c=$cols"); - dbg("resize: sh=". scalar @sh ); -# my @tsh; -# my $t; -# while (defined ($t = shift @sh)) { -# dbg("t: $t(" , length $t . ')'); -# if ($t =~ /^\t/) { -# $t =~ s/^\t/ /; -# push(@tsh, pop(@tsh) . $t) -# } else { -# push(@tsh, $t); -# } -# dbg("tsh: " . scalar @tsh); -# } -# dbg("resize: tsh=". scalar @tsh ); -# $spos = @tsh < $pagel ? 0 : @tsh - $pagel; - # addtotop(@tsh); $spos = @sh < $pagel ? 0 : @sh - $pagel; show_screen(); $conn->send_later("C$call|$cols") if $conn; @@ -184,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 @@ -203,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; @@ -216,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'); @@ -313,18 +279,13 @@ 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; show_screen(); } - addtotop($inbuf); + addtotop(' ', $inbuf); # send it to the cluster $conn->send_later("I$call|$inbuf"); @@ -348,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; @@ -363,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); @@ -469,14 +418,16 @@ sub rec_stdin # add a line to the end of the top screen sub addtotop { - $Text::Wrap::Columns = $cols; + my $sort = shift; + while (@_) { my $inbuf = shift; my $l = length $inbuf; - dbg("addtotop: $l $inbuf"); - if ($l > $cols) { + dbg("addtotop: $sort $l $inbuf") if isdbg('console'); + if ($l > $cols && grep $sort eq $_, qw(T A C)) { $inbuf =~ s/\s+/ /g; if (length $inbuf > $cols) { + $Text::Wrap::columns = $cols; push @sh, split /\n/, wrap('',' ' x 19, $inbuf); } else { push @sh, $inbuf; @@ -509,7 +460,7 @@ sub rec_socket $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); + addtotop($sort, $line); } elsif ($sort && $sort eq 'Z') { # end, disconnect, go, away ..... cease(0); } @@ -554,7 +505,7 @@ sub idle_loop sub on_connect { my $conn = shift; - $conn->send_later("A$call|$connsort width=$cols"); + $conn->send_later("A$call|$connsort width=$cols enhanced"); $conn->send_later("I$call|set/page $maxshist"); #$conn->send_later("I$call|set/nobeep"); } @@ -605,13 +556,11 @@ $SIG{'HUP'} = \&sig_term; # start upb -$Text::Wrap::Columns = $cols; +$Text::Wrap::columns = $cols; doresize(); $SIG{__DIE__} = \&sig_term; -#$Text::Wrap::Columns = $cols; - my $lastmin = 0;