#!/usr/local/bin/perl5
#
# man.cgi
#
# 1998/03/30 Ver.0.01 telnet.cgi から man 専用版を作成
# 1999/11/26 Ver.0.11
# 1999/12/06 Ver.0.12 3行以上の空白は読み飛ばしする。
#
# (c) 1998-1999 がま <gama@mvg.biglobe.ne.jp>
#
# ----------------------------------------------------------------------
# usage:
# man.cgi
#
# [section] title... を入力してください
#
# ----------------------------------------------------------------------
$man ='/usr/ucb/man/'; # man の所在
$back ='tools.htm'; # 終了時の飛び先
# ----------------------------------------------------------------------
$title =$ENV{'QUERY_STRING'};
$title =~ s/title=//;
$title =~ s/\+/ /g;
$title =~ s/%(..)/pack('c',hex($1))/ge;
$title =~ s/[^\w\ ]//g; # 英数字,"_",空白以外を削除
# ----------------------------------------------------------------------
$|=1;
print "Content-type: text/html\n\n";
print '<HTML><HEAD><TITLE>man</TITLE><BODY>';
print "<STRONG>man $title</STRONG>\n\n";
print '<HR>';
print "<PRE>\n";
if ($title) {
open(PROC,"$man $title 2>&1 |"); # 実行
while (<PROC>) { # 結果を読み出す
chomp;
unless ( $_ ) { # 空白の行を貯めておく
$nullline .="\n";
next;
}
$nullline =~ s/\n{3,}/\n\n\n/g; # 3行以上の空白を3行にする。
print $nullline;
$nullline ='';
s/</\001/g; #
s/>/\002/g; #
s/(.)(\x08\1)+/<B>$1<\/B>/g; # 多重打ち : . 08h(BS) .
s/_\x08(.)/<U>$1<\/U>/g; # アンダーライン : 5fh(_) 08h(BS)
s/o\x08\+/<S>X<\/S>/g; # リストマーク : 35h(o) 08h(BS) 2bh(+)
s/<\/(.)><\1>//g; # </TAG><TAG> を削除
s/&/&/g; #
s/\001/</g; #
s/\002/>/g; #
print $_,"\n";
$oldline = $_;
}
close(PROC);
}
# ----------------------------------------------------------------------
print "</PRE>\n";
print '<HR>';
print '<FORM ACTION="man.cgi" METHOD="GET">';
print 'man <INPUT TYPE="text" NAME="title" SIZE=80 VALUE="' . $title . '">';
print '<INPUT TYPE="submit" VALUE="Send">';
print '</FORM>';
print '<HR>';
print '<A HREF="',$back,'">終了</A>';
print '<HR>';
print '</BODY></HTML>';