#!/usr/local/bin/perl
#
# search2.cgi
#
# Version 1.0.0
#
# Copyright (C) 2000 by MINOMUSI.
# 蓑虫
# http://www.ztv.ne.jp/minomusi/
##########
# 設定部分
# ↓漢字ライブラリ jcode.pl のファイル名
$jcodelib = 'jcode.pl';
# ↓漢字コード('sjis' 'euc' 'jis' のいずれか)
$kanjicode = 'sjis';
# ↓表示されるページの <BODY> タグ(背景色や背景イメージ指定で利用)
$bodytag = '<BODY BGCOLOR=#FFFFFF>';
# 情報の取得
# 検索するディレクトリ
$dir = '..';
# 捜すファイルの形式
$seach[0]='.htm';
$seach[1]='.html';
$seach[2]='.HTM';
$seach[3]='.HTML';
# エラー表示が起こった時に表示されるメールアドレス
$admin ='minomusi@ztv.ne.jp';
##########
# 漢字ライブラリの読み込み
require "$jcodelib";
# 初期化
&init_form($kanjicode);
# ヘッダの送出
print "Content-type: text/html\n\n";
# 検索文字
$word = $form{'word'};
# 表示開始
&page_begin("ファイルサーチ2");
$hyouji='表示';&jcode'convert(*hyouji,$kanjicode);
print "現在までのこのサイト上でキーワード検索をします。<p>\n";
print "検索されるファイルは、HTML形式のファイルのみです。\n";
print "<P><FORM action=\"search2.cgi\" METHOD=\"POST\">キーワード<INPUT TYPE=\"text\" name=\"word\" size=15>\n";
print "<P><INPUT TYPE=\"submit\" value=\"検索\"></FORM>\n";
print "<HR>\n";
# データファイルを表示
unless ($word eq ''){
&file_open($dir);
print "該当する情報は、以上です。\n";
}
&page_end;
# 終了
exit(0);
##########
# サブルーチン
# タイトル部分
# &page_begin("メッセージ");
sub page_begin {
local ($msg) = @_;
print "<HTML>\n";
print "<HEAD>\n";
print "<TITLE>$msg</TITLE>\n";
print "</HEAD>\n";
print "$bodytag\n";
print "<H1>$msg</H1>\n";
}
# ページの終わり
sub page_end {
print "<HR>\n";
print "<H4>2000/5/7 Made by minomusi</H4>\n";
print "</BODY>\n";
print "</HTML>\n";
}
# ディレクトリからファイルを捜す。
# &file_open("開きたいディレクトリ");
sub file_open{
local(@files,$file,$dir,$fileadd);
$dir = $_[0];
# ディレクトリのオープン
if (!opendir (DIR,$dir)) {
&print_error("ディレクトリを開けませんでした。");
}
# ディレクトリファイル名を全部読む
@files = readdir (DIR);
# ディレクトリを閉じる
closedir (DIR);
# ..を無視
foreach $file(@files){
if ($file eq '.'){
next;
}
if ($file eq '..'){
next;
}
$fileadd = "$dir/$file";
# 捜したファイルがディレクトリかどうかを判断
if (-d $fileadd){
& file_open($fileadd);
} else {
& file_search($fileadd);
}
}
}
# ファイルを検索
# & file_search("ファイル名");
sub file_search{
local($extantion,$line);
local($filename) = @_;
$extantion = substr ($filename, rindex($filename,"."));
foreach $line(@seach){
if ($extantion eq $line){
open(IN,$filename);
@sentence=<IN>;
close(IN);
foreach $sline(@sentence){
if ($sline=~/<TITLE>/i){
$title=$sline;
}
if ($sline=~/$word/i){
$title=~s/<[^>]*(>|$)//g;
$title=~s/[\r\n]+//g;
print "<DL><DT><A HREF=\"$filename\"><FONT SIZE=4><B>$title</B></FONT></A>\n";
$sline=~s/<[^>]*(>|$)//g;
$sline=~s/[\r\n]+//g;
print "<DD>$sline</DL>\n";
}
}
}
}
}
# エラー表示
# &print_error("メッセージ");
sub print_error {
local($msg) = @_;
&page_begin($msg);
print "恐れ入りますが、再度試していただくか、";
print "<A HREF=mailto:$admin>$admin</A>";
print "までお知らせください。\n";
print "<BR><CENTER><FORM><INPUT TYPE=\"button\" value=\"戻る\" onClick=\"JavaScript:history.back()\"></FORM></CENTER>\n";
&page_end;
exit(0);
}
# フォームからの情報を連想配列 %form に入れる
# &init_form('euc');
sub init_form {
local($query, @assocarray, $assoc, $property, $value, $charcode, $method);
$charcode = $_[0];
$method = $ENV{'REQUEST_METHOD'};
$method =~ tr/A-Z/a-z/;
if ($method eq 'post') {
read(STDIN, $query, $ENV{'CONTENT_LENGTH'});
} else {
$query = $ENV{'QUERY_STRING'};
}
@assocarray = split(/&/, $query);
foreach $assoc (@assocarray) {
($property, $value) = split(/=/, $assoc);
$value =~ tr/+/ /;
$value =~ s/%([A-Fa-f0-9][A-Fa-f0-9])/pack("C", hex($1))/eg;
&jcode'convert(*value, $charcode);
$form{$property} = $value;
}
}