#!/usr/local/bin/perl
#
# 文字ターミナル(vt100)を使うもの。リターンを押すと検索を実行
#
require 'vt100.pl';
require 'tty.pl';
&dicread;
&clear;
&cbreak;
$| = 1;
$pat = '';
$patcol = $patrow = 0;
while($c = ord($s = getc)){
$len = length($pat);
if($c == &ctrl('J')){ # リターンキー
last if $pat =~ /^\s*exit\s*$/; # 'exit'とタイプすると終了
&lookup($pat);
}
elsif($c == &ctrl('B')){ # カーソル左移動
$patcol-- if $patcol > 0;
}
elsif($c == &ctrl('F')){ # カーソル右移動
$patcol++ if $patcol < $len;
}
elsif($c == &ctrl('A')){ # カーソル左端移動
$patcol = 0;
}
elsif($c == &ctrl('E')){ # カーソル右端移動
$patcol = $len;
}
elsif($c == &ctrl('K')){ # カーソルより右の文字消去
$pat = substr($pat,0,$patcol);
}
elsif($c == 0x7f){ # 後退
$patcol-- if $patcol > 0;
$pat = substr($pat,0,$patcol) . substr($pat,$patcol+1);
}
elsif($c == &ctrl('D')){ # カーソル位置の文字消去
$pat = substr($pat,0,$patcol) . substr($pat,$patcol+1);
}
else {
$pat = substr($pat,0,$patcol) . $s . substr($pat,$patcol);
$patcol++;
}
&clear;
&display;
&move(0,0);
print $pat;
&move($patcol,$patrow);
}
sub display {
for $i (0..$#match){
&move(0,$i+2);
$m = $match[$i];
print "$e[$m] $j[$m])";
}
}
sub ctrl {
ord($_[0]) - ord('@');
}
sub dicread { # #1と同じ ...
sub lookup { # #1と同じ ...