#!/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;

}

}