+ $conn->send_later("I$call|$inbuf");
+ $inbuf = "";
+ $pos = $lth = 0;
+ } elsif ($r eq KEY_UP || $r eq KEY_PPAGE || $r eq "\020") {
+ if ($histpos > 0) {
+ --$histpos;
+ $inbuf = $history[$histpos];
+ $pos = $lth = length $inbuf;
+ } else {
+ beep();
+ }
+ } elsif ($r eq KEY_DOWN || $r eq KEY_NPAGE || $r eq "\016") {
+ if ($histpos < @history - 1) {
+ ++$histpos;
+ $inbuf = $history[$histpos];
+ $pos = $lth = length $inbuf;
+ } else {
+ beep();
+ }
+ } elsif ($r eq KEY_LEFT || $r eq "\002") {
+ if ($pos > 0) {
+ --$pos;
+ } else {
+ beep();
+ }
+ } elsif ($r eq KEY_RIGHT || $r eq "\006") {
+ if ($pos < $lth) {
+ ++$pos;
+ } else {
+ beep();
+ }
+ } elsif ($r eq KEY_HOME) {
+ $pos = 0;
+ } elsif ($r eq KEY_BACKSPACE || $r eq "\010") {
+ if ($pos > 0) {
+ my $a = substr($inbuf, 0, $pos-1);
+ my $b = substr($inbuf, $pos) if $pos < $lth;
+ $b = "" unless $b;
+
+ $inbuf = $a . $b;
+ --$lth;
+ --$pos;
+ } else {
+ beep();
+ }
+ } elsif ($r eq KEY_DC || $r eq "\004") {
+ if ($pos < $lth) {
+ my $a = substr($inbuf, 0, $pos);
+ my $b = substr($inbuf, $pos+1) if $pos < $lth;
+ $b = "" unless $b;
+
+ $inbuf = $a . $b;
+ --$lth;
+ } else {
+ beep();
+ }
+ } elsif ($r ge ' ' && $r le '~') {
+ if ($pos < $lth) {
+ my $a = substr($inbuf, 0, $pos);
+ my $b = substr($inbuf, $pos);
+ $inbuf = $a . $r . $b;
+ } else {
+ $inbuf .= $r;
+ }
+ $pos++;
+ $lth++;
+ } elsif ($r eq "\014" || $r eq "\022") {
+ $scr->touchwin();
+ $scr->refresh();
+ } elsif ($r eq "\013") {