#!/usr/local/bin/perl # # search.cgi - kurokibbs search script # # Copyright (C) 1998 KUROKI Gen . # # Author: KUROKI Gen # Version: 1.1.0 (Aug 30 13:40 JST 1998) # # History: # # 1998/8/30 Version 1.1.0 (add "range") # 1998/8/14 Version 1.0.0 # 1998/8/13 Beta version # # How to Install this script: # # 1. Change the first "#!" line. # 2. Change the "require '...../common.pl';" line below. # 3. Copy this script to "$top_dir/$spool/search.cgi". # 4. Set its execute permissions by chmod +x search.cgi. # 5. Make "$top_dir/$spool/search.html" by ./search.cgi > search.html # #--------------------------------------------------------------------------- ### Customization require '%%%%%%COMMON_PL%%%%%%'; #--------------------------------------------------------------------------- ### Main Routine chdir "$top_dir/$spool"; require $cgi_lib_pl; require $jcode_pl; &ConvCommonMsgVarsTo($external_code); $| = 1; print &PrintHeader() if $QUERY_STRING; &ReadParse(); if ($in{'order'}) { $order = $in{'order'}; } if ($in{'scope'}) { $scope = $in{'scope'}; } if ($in{'range'}) { $range = $in{'range'}; } $range =~ tr/-0-9//cd; ($rb, $rh, $re) = split(/(-)/, $range, 3); if ($range ne '' && $rb =~ /^(|[0-9][0-9][0-9][0-9][0-9][0-9])$/ && $re =~ /^(|[0-9][0-9][0-9][0-9][0-9][0-9])$/) { if ($rh eq '') { $re = $rb; } if ($rb eq '') { $rb = '000000'; } if ($re eq '') { $rb = '999999'; } if ($rb gt $re) { ($rb, $re) = ($re, $rb); } if ($order eq 'reverse') { while () { if ("log_$rb" le $_ && $_ le "log_$re~") { @filelist = (@filelist, $_); } } @filelist = sort {$b cmp $a} @filelist; } else { while (<[0-9]*.html>) { if ("$rb" le $_ && $_ le "$re~") { @filelist = (@filelist, $_); } } } } elsif ($scope eq 'log') { @filelist = ("$log_html"); } elsif ($scope eq 'all') { if ($order eq 'reverse') { while () { @filelist = (@filelist, $_); } @filelist = sort {$b cmp $a} @filelist; } else { while (<[0-9]*.html>) { @filelist = (@filelist, $_); } } } else { if ($scope <= 0) { $scope = 0; } if ($scope >= 12000) { $scope = 12000; } ($sec, $min, $hour, $mday, $mon, $year, $wday, $yday, $isdst) = localtime(time); $mon -= $scope; $year += int(($mon - 11) / 12); $mon %= 12; $y = $year + 1900; $m = ('01' .. '12')[$mon]; if ($order eq 'reverse') { while () { if ($_ ge "log_$y$m") { @filelist = (@filelist, $_); } } @filelist = sort {$b cmp $a} @filelist; } else { while (<[0-9]*.html>) { if ($_ ge "$y$m") { @filelist = (@filelist, $_); } } } } if ($in{'key'}) { $key = $in{'key'}; &jcode'convert(*key, 'euc'); $keyprint = $key; $keyprint =~ s/&/&/g; $keyprint =~ s//>/g; $keyvalue = $keyprint; $keyvalue =~ s/"/"/g; &jcode'convert(*keyprint, $external_code); &jcode'convert(*keyvalue, $external_code); } print "\n"; print "$title_of_bbs: Search\n"; print "\n"; print "\n"; print "

$title_of_bbs: Search

\n"; print "\n"; print "

\n"; print "$postmessage\n"; print "$readrecent\n"; if (-r "$top_dir/$spool/$old_html") { print "$readold\n"; } if (-r "$top_dir/$rule_html") { print "$readrule\n"; } if (-r "$top_dir/$links_html") { print "$gotolinks\n"; } print "$gotohomepage\n"; print "

\n"; print "\n"; print "
\n"; print "\n"; print "
\n"; if (!$keyvalue) { print "Keyword: \n"; } else { print "Keyword: \n"; } print "\n"; print "
\n"; print "Order: \n"; print "Scope: \n"; print "\n"; print "
\n"; if (!$keyvalue) { print "Range: \n"; } else { print "Range: \n"; } print "(e.g.: 199801-199807, -199803, 199805-, 199804)\n"; print "
\n"; print "\n"; if ($key) { print "
\n"; print "\n"; print "

Search Results for \"$keyprint\"

\n"; print "\n"; print "
    \n"; foreach $file (@filelist) { if (open(IN, $file)) { while () { if ($_ =~ /^$top/) { last; } } while (&Search()) { printf "
  • [%s] %s (%s)\n", $name, $file, $msgid, $subject, $date; } close(IN); } } print "
\n"; print "\n"; } print "
\n"; print "\n"; print "

$gototop

\n"; print "\n"; print "
\n"; print "\n"; print "$maintainer.\n"; print "\n"; print "\n"; #--------------------------------------------------------------------------- # # Structure of messages: # # Message-Id: <msgid>
# Date: date
# From: name <emailaddress>
# Subject: subject
#
# # message body # #
# # # The last line is equal to $bdr defined in common.pl. sub Search { for (;;) { $msg = ""; while () { if (eof(IN)) { return 0; } &jcode'convert(*_, 'euc'); if ($_ =~ /^Message-Id: /) { last; } $msg .= $_; } $line = $_; $msg .= $_; while () { if (eof(IN)) { return 0; } &jcode'convert(*_, 'euc'); if ($_ =~ /^Date: /) { last; } $line .= $_; $msg .= $_; } $line =~ s/[\r\n]//g; $line =~ s/^.*"(.*)".*$/$1/; $msgid = $line; $line = $_; $msg .= $_; while () { if (eof(IN)) { return 0; } &jcode'convert(*_, 'euc'); if ($_ =~ /^From: /) { last; } $line .= $_; $msg .= $_; } $line =~ s/[\r\n]//g; $line =~ s/^Date: <\/b>(.*)
$/$1/; $date = $line; $line = $_; $msg .= $_; while () { if (eof(IN)) { return 0; } &jcode'convert(*_, 'euc'); if ($_ =~ /^Subject: /) { last; } $line .= $_; $msg .= $_; } $line =~ s/[\r\n]//g; $line =~ s/^From: <\/b>(.*)
$/$1/; $line =~ s/ <.*$//; $line =~ s/<[^>]*>//g; $name = $line; &jcode'convert(*name, $external_code); $line = $_; $msg .= $_; while () { if (eof(IN)) { return 0; } &jcode'convert(*_, 'euc'); if ($_ =~ /^$/) { last; } $line .= $_; $msg .= $_; } $line =~ s/[\r\n]//g; $line =~ s/^Subject: <\/b>(.*)
$/$1/; $line =~ s/<[^>]*>//g; $subject = $line; &jcode'convert(*subject, $external_code); $msg .= $_; while () { if (eof(IN)) { return 0; } &jcode'convert(*_, 'euc'); if ($_ =~ /^($bdr|$end)/) { last; } $msg .= $_; } $msg =~ s/[\r\n]//g; if ($msg =~ /$key/i) { last; } } return 1; } #--------------------------------------------------------------------------- #EOF