$top->refresh();
}
+# add a line to the end of the top screen
+sub addtotop
+{
+ my $inbuf = shift;
+ push @shistory, $inbuf;
+ shift @shistory if @shistory > $maxshist;
+ show_screen();
+}
+
# handle incoming messages
sub rec_socket
{
my ($sort, $call, $line) = $msg =~ /^(\w)(\S+)\|(.*)$/;
if ($sort eq 'D') {
- push @shistory, $line;
- shift @shistory if @shistory > $maxshist;
-# $spos = @shistory if $spos >= @shistory - 1;
- show_screen();
+ addtotop($line);
} elsif ($sort eq 'Z') { # end, disconnect, go, away .....
cease(0);
}
# $prbuf =~ s/\n/\\n/;
# print "sys: $r ($prbuf)\n";
if (defined $r) {
+
if ($r eq KEY_ENTER || $r eq "\n" || $r eq "\r") {
# save the lines
if ($inbuf) {
+ # check for a pling and do a search back for a command
+ if ($inbuf =~ /^!/o) {
+ my $i;
+ $inbuf =~ s/^!//o;
+ for ($i = $#khistory; $i >= 0; $i--) {
+ if ($khistory[$i] =~ /^$inbuf/) {
+ $inbuf = $khistory[$i];
+ last;
+ }
+ }
+ if ($i < 0) {
+ beep();
+ return;
+ }
+ }
push @khistory, $inbuf if $inbuf;
shift @khistory if @khistory > $maxkhist;
$khistpos = @khistory;
$bot->clrtoeol();
$bot->addstr(substr($inbuf, 0, COLS));
}
+
+ # add it to the monitor window
+ addtotop($inbuf) if $inbuf;
# send it to the cluster
$inbuf = " " unless $inbuf;
} else {
beep();
}
- } elsif ($r eq KEY_PPAGE || $r eq "\026") {
+ } elsif ($r eq KEY_PPAGE || $r eq "\032") {
if ($spos > 0) {
$spos -= $pages;
$spos = 0 if $spos < 0;
} else {
beep();
}
- } elsif ($r eq KEY_NPAGE || $r eq "\032") {
+ } elsif ($r eq KEY_NPAGE || $r eq "\026") {
if ($spos < @shistory - 1) {
$spos += $pages;
$spos = @shistory if $spos > @shistory;
}
} elsif ($r eq KEY_HOME || $r eq "\001") {
$pos = 0;
+ } elsif ($r eq KEY_END || $r eq "\005") {
+ $pos = $lth;
} elsif ($r eq KEY_BACKSPACE || $r eq "\010") {
if ($pos > 0) {
my $a = substr($inbuf, 0, $pos-1);
beep();
}
} elsif ($r ge ' ' && $r le '~') {
+ # move the top screen back to the bottom if you type something
+ if ($spos < @shistory - 1) {
+ $spos = @shistory;
+ show_screen();
+ }
+
+ # insert the character into the keyboard buffer
if ($pos < $lth) {
my $a = substr($inbuf, 0, $pos);
my $b = substr($inbuf, $pos);
$pos++;
$lth++;
} elsif ($r eq "\014" || $r eq "\022") {
- $scr->touchwin();
- $scr->refresh();
+# curscr()->refresh();
+ return;
} elsif ($r eq "\013") {
- $inbuf = "";
- $pos = $lth = 0;
+ $inbuf = substr($inbuf, 0, $pos);
+ $lth = length $inbuf;
} else {
beep();
}