#!/usr/local/bin/tkperl
#
# TkPerl。リターンを押すと検索を実行
#
use Tk; # Tkモジュール使用を宣言
&dicread;
#
# メインウィンドウ生成
#
$mw = MainWindow->new;
#
# テキスト入力枠を作成し、リターンが押されると lookup()が呼ばれるように設定
#
$text = $mw->Entry(-relief => 'sunken', -width => 60);
$text->bind("<Return>", sub { &lookup($text->get); });
$text->pack;
#
# 侯補表示枠を作成
#
$listbox = $mw->Scrolled('Listbox', -setgrid => 1, -height => 10, -foreground => 'blue', -width => 60);
$listbox->pack;
MainLoop; # ツールキットのメインルーチン
sub lookup {
local($pat) = @_;
local($p1,$p2);
local($max,$min,$mid);
$min = 0;
$max = $#e;
$p1 = "\L$pat";
@match = ();
while ($max - $min > 1) {
$mid = int(($max + $min) / 2);
$_ = "\L$e[$mid]";
if ($_ lt $p1) {
$min = $mid;
}
else {
$max = $mid;
}
}
#
# 単語を検索して侯補表示枠に挿入
#
$listbox->delete(0,end);
for($i=$max;$i<=$#e;$i++){
last if $e[$i] !~ /^$pat/i;
$listbox->insert(end,"$e[$i] $j[$i]");
}
}
sub dicread { # #1と同じ