#! /usr/local/bin/perl
##############################################
#BooFilesSearch v1.04 / this program is free.#
#(C) BooBooClub 2001-2007 #
##############################################
#set data
$sdir = '../';
$surl = '../';
$found = 'found.html';
$head = '
検索結果
';
$view = 'fname';
$sepa = ' ';
$log = 'off';
$logfile = './log.dat';
$logmax = '200';
#read lib_etc;
require './jcode.pl';
$| = 1;
#read
if ($ENV{'REQUEST_METHOD'} eq "POST"){
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});
}
else{
$buffer = $ENV{'QUERY_STRING'};
}
@pairs = split(/&/,$buffer);
foreach $pair (@pairs) {
($name, $value) = split(/=/, $pair);
$value =~ tr/+/ /;
$value =~ s/\cM\n//g;
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
$value =~ s/\r\n|[\r\n]/$sepa/ig;
if($log eq 'on'){
$svalue = $value;
&jcode'convert(*svalue,'sjis');
$SFORM{$name} = $svalue;
}
&jcode'convert(*value,'euc');
$FORM{$name} = $value;
}
#log
if($log eq 'on'){
$wrt = $SFORM{'sw'}."\n";
open (LOG,"$logfile");
@logdata = ;
close (LOG);
push(@logdata,$wrt);
$logcnt = @logdata;
if($logcnt > $logmax){
@newlog = @logdata[($logcnt-$logmax)..$#logdata];
}
else{
@newlog = @logdata;
}
open (LOG,">$logfile");
print LOG @newlog;
close (LOG);
}
#search
@dsw = split(/\Q$sepa\E/,$FORM{'sw'});
foreach $dsw(@dsw){
$dsw =~ s/^\s//;
$dsw =~ s/\s$//;
push (@sw,$dsw);
}
unless($surl =~ /\/$/){
$surl = "$surl".'/';
}
open (FHTML,"$found");
@fhtml = ;
close (FHTML);
print "Content-type: text/html\n\n";
foreach $fhtml(@fhtml){
if($fhtml =~ //){
print "$`";
print "\n";
&jcode'convert(*head,'sjis');
print "$head"."\n";
$w = $FORM{'sw'};
&jcode'convert(*w,'sjis');
print '(文字列"'."$w".'"をファイル名に含むファイルの検索)
'."\n";
print " \n";
chdir $sdir;
$cp = 0;
&sdir('.');
print "
|
\n";
print "
\n";
print "$'";
}
else{
&jcode'convert(*fhtml,'sjis');
print "$fhtml";
}
}
sub sdir{
local($dir,$nlink) = @_;
local($dev,$ino,$mode,$subcount);
unless($nlink){
($dev,$ino,$mode,$nlink) = stat('.');
}
opendir(DIR,'.');
local(@files) = readdir(DIR);
closedir(DIR);
if($nlink == 2){
foreach $file(@files){
if($file eq '.' || $file eq '..'){
next;
}
&act;
}
}
else{
$subcount = $nlink - 2;
foreach $file(@files){
if($file eq '.' || $file eq '..'){
next;
}
&act;
if($subcount == 0){
next;
}
($dev,$ino,$mode,$nlink) = lstat($file);
unless(-d $file){
next;
}
chdir $file;
&sdir($name,$nlink);
chdir '..';
$subcount--;
}
}
}
sub act{
$name = "$dir/$file";
@path = split(/\//,$name);
$sfile = $path[-1];
$sname = $stype = '';
($sname,@stype) = split(/\./,$sfile);
$stype = join('.',@stype);
&jcode'convert(*sfile,'euc');
&jcode'convert(*sname,'euc');
&jcode'convert(*stype,'euc');
$hw = @sw;
$hit = 0;
if($hw == 1){
if(!$FORM{'d'}){
if($FORM{'n'} eq 'x' && $sfile =~ /$FORM{'sw'}/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'h' && $sname =~ /^$FORM{'sw'}/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'b' && $sname =~ /$FORM{'sw'}$/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'f' && $sname =~ /^$FORM{'sw'}$/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'a' && $sfile =~ /^$FORM{'sw'}$/i){
$hit = 1;
}
}
else{
if($FORM{'n'} eq 'x' && $sfile =~ /$FORM{'sw'}/){
$hit = 1;
}
elsif($FORM{'n'} eq 'h' && $sname =~ /^$FORM{'sw'}/){
$hit = 1;
}
elsif($FORM{'n'} eq 'b' && $sname =~ /$FORM{'sw'}$/){
$hit = 1;
}
elsif($FORM{'n'} eq 'f' && $sname =~ /^$FORM{'sw'}$/){
$hit = 1;
}
elsif($FORM{'n'} eq 'a' && $sfile =~ /^$FORM{'sw'}$/){
$hit = 1;
}
}
if($hit == 1){
@fname = split(/\//,$name);
$fname = $fname[$#fname];
$url = $name;
$url =~ s/\.\///;
$lurl = "$surl"."$url";
if($view eq 'fname'){
$vtxt = $fname;
}
else{
$vtxt = "$surl"."$url";
}
&jcode'convert(*vtxt,'sjis');
if(-f $file){
print ''."$vtxt".''."
\n";
}
$cp++;
}
}
else{
$cs = 0;
$hit = 0;
foreach $sw(@sw){
if(!$FORM{'d'}){
if($FORM{'n'} eq 'x' && $sfile =~ /$sw/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'h' && $sname =~ /^$sw/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'b' && $sname =~ /$sw$/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'f' && $sname =~ /^$sw$/i){
$hit = 1;
}
elsif($FORM{'n'} eq 'a' && $sfile =~ /^$sw$/i){
$hit = 1;
}
}
else{
if($FORM{'n'} eq 'x' && $sfile =~ /$sw/){
$hit = 1;
}
elsif($FORM{'n'} eq 'h' && $sname =~ /^$sw/){
$hit = 1;
}
elsif($FORM{'n'} eq 'b' && $sname =~ /$sw$/){
$hit = 1;
}
elsif($FORM{'n'} eq 'f' && $sname =~ /^$sw$/){
$hit = 1;
}
elsif($FORM{'n'} eq 'a' && $sfile =~ /^$sw$/){
$hit = 1;
}
}
if($hit == 1){
$cs++;
$hit = 0;
}
}
if(($FORM{'t'} eq 'a' && $hw == $cs) || ($FORM{'t'} eq 'o' && $cs != 0)){
@fname = split(/\//,$name);
$fname = $fname[$#fname];
$url = $name;
$url =~ s/\.\///;
$lurl = "$surl"."$url";
if($view eq 'fname'){
$vtxt = $fname;
}
else{
$vtxt = "$surl"."$url";
}
&jcode'convert(*vtxt,'sjis');
if(-f $file){
print ''."$vtxt".''."
\n";
}
$cp++;
}
}
}
if($cp == 0){
print '当該文字を含むファイルはありませんでした。';
}
exit 0;