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