X-Git-Url: http://gb7djk.dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2Fconsole.pl;h=f85e235d7d726ece77cb50c36dbd98733549e48f;hb=754754d791020dd421aee1255fc559ac809b2080;hp=205d52f379d37b19cf9cba49093f400a00f3a6ff;hpb=517695ec47b0ab768da54c7b0830de9ed0dd4914;p=spider.git diff --git a/perl/console.pl b/perl/console.pl index 205d52f3..f85e235d 100755 --- a/perl/console.pl +++ b/perl/console.pl @@ -10,10 +10,13 @@ # # Copyright (c) 1999 Dirk Koopman G1TLH # -# $Id$ +# # require 5.004; +package main; + +use vars qw($data); # search local then perl directories BEGIN { @@ -23,6 +26,8 @@ BEGIN { unshift @INC, "$root/perl"; # this IS the right way round! unshift @INC, "$root/local"; + $is_win = ($^O =~ /^MS/ || $^O =~ /^OS-2/) ? 1 : 0; # is it Windows? + $data = "$root/data"; } use Msg; @@ -32,7 +37,9 @@ use DXDebug; use DXUtil; use DXDebug; use IO::File; +use Time::HiRes qw(gettimeofday tv_interval); use Curses 1.06; +use Text::Wrap; use Console; @@ -50,6 +57,9 @@ $connsort = "local"; $khistpos = 0; $spos = $pos = $lth = 0; $inbuf = ""; +@time = (); + +#$SIG{WINCH} = sub {@time = gettimeofday}; sub mydbg { @@ -79,9 +89,9 @@ sub do_initscr init_pair(12, COLOR_MAGENTA, COLOR_BLUE); init_pair(13, COLOR_YELLOW, COLOR_GREEN); init_pair(14, COLOR_RED, COLOR_GREEN); - eval { assume_default_colors($foreground, $background) }; + eval { assume_default_colors($foreground, $background) } unless $is_win; } - + $top = $scr->subwin($lines-4, $cols, 0, 0); $top->intrflush(0); $top->scrollok(1); @@ -114,8 +124,6 @@ sub do_resize $has_colors = has_colors(); do_initscr(); - $winch = 0; - $SIG{'WINCH'} = sub {$winch = 1}; show_screen(); } @@ -227,8 +235,13 @@ sub addtotop if ($inbuf =~ s/\x07+$//) { beep(); } - push @shistory, $inbuf; - shift @shistory if @shistory > $maxshist; + if (length $inbuf >= $cols) { + $Text::Wrap::Columns = $cols; + push @shistory, wrap('',"\t", $inbuf); + } else { + push @shistory, $inbuf; + } + shift @shistory while @shistory > $maxshist; } show_screen(); } @@ -278,7 +291,7 @@ sub rec_stdin if ($r eq KEY_ENTER || $r eq "\n" || $r eq "\r") { # save the lines - $inbuf = " " unless length($inbuf); + $inbuf = " " unless length $inbuf; # check for a pling and do a search back for a command if ($inbuf =~ /^!/o) { @@ -295,7 +308,7 @@ sub rec_stdin return; } } - push @khistory, $inbuf if $inbuf; + push @khistory, $inbuf if length $inbuf; shift @khistory if @khistory > $maxkhist; $khistpos = @khistory; $bot->move(0,0); @@ -332,7 +345,7 @@ sub rec_stdin } elsif ($r eq KEY_PPAGE || $r eq "\032") { if ($spos > 0) { my ($i, $l); - for ($i = 0; $i <= $pagel && $spos >= 0; ) { + for ($i = 0; $i < $pagel-1 && $spos >= 0; ) { $l = measure($shistory[$spos]); $i += $l; $spos-- if $i <= $pagel; @@ -397,7 +410,7 @@ sub rec_stdin } elsif ($r eq KEY_RESIZE || $r eq "\0632") { do_resize(); return; - } elsif (defined is_pctext($r)) { + } elsif (defined $r && is_pctext($r)) { # move the top screen back to the bottom if you type something if ($spos < @shistory) { $spos = @shistory; @@ -490,6 +503,8 @@ $conn->send_later("I$call|set/page $maxshist"); #Msg->set_event_handler(\*STDIN, "read" => \&rec_stdin); +$Text::Wrap::Columns = $cols; + my $lastmin = 0; for (;;) { my $t; @@ -504,7 +519,7 @@ for (;;) { $lasttime = $t; } my $ch = $bot->getch(); - if ($winch) { + if (@time && tv_interval(\@time, [gettimeofday]) >= 1) { # mydbg("Got Resize"); # do_resize(); next;