Linux $B$J$I$N(B man $B%3%^%s%I$K$h$k%*%s%i%$%s%^%K%e%"%k$r
CGI $B$H$7$F;HMQ$7$^$9!#(B
CGI $B$H$7$F8F$S$@$5$l$k$H!"$=$N>l$G(B man $B%3%^%s%I$r
CGI $B$N@_Dj$G(B URL $B$H$7$F(B http://localhost/cgi-bin/man2html.rb $B$G8F$S$@$7$,2DG=$H$$$&A0Ds$G?J$a$5$;$F$/$@$5$$!#(B
$B!V(B
http://localhost/cgi-bin/man2html.rb
$B!W(B
$B$G!"%^%K%e%"%k$r;2>H$9$k$?$a$NF~NO2hLL$K$J$j$^$9!#(B
$B$3$NF~NO2hLL$G$O!"4JC1$KF~NOJ}K!$N@bL@$,$"$j$^$9!#(B
$B$^$?!"(B
$B!V(B
http://localhost/cgi-bin/man2html.rb?man
$B!W(B
$B$H!"D>@\0z?t$rIU$12C$($k$3$H$G!V(Bman$B!W$N%*%s%i%$%s%^%K%e%"%k$r;2>H$9$k$3$H$,2DG=$G$9!#(B
$B%^%K%e%"%k$N%;%/%7%g%s$r;XDj$9$k>l9g$K$O(B
$B!V(B
http://localhost/cgi-bin/man2html.rb?2+intro
$B!W(B
$B$d(B
$B!V(B
http://localhost/cgi-bin/man2html.rb?3+intro
$B!W(B
$B$H;XDj$7$^$9!#(B
$B;HMQ$7$F$$$k(B Web $B%5!<%P$N%^%K%e%"%k$r;2>H$7$F!"(BCGI $B$N@_Dj$r$7$F$/$@$5$$!#(B
CGI $B$N
$B0J2<$K(B Apache $B$r;HMQ$7$?>l9g$N@_Dj$K$D$$$F=q$-$^$9!#(B
Apache $B$N(B version $B$K$h$j!"@_Dj%U%!%$%k$G$N(B CGI $B4XO"$N%U%!%$%kL>$,0c$&>l9g$,$"$j$^$9$,!"9`L\$H$7$F$O$[$\F1$8$H;W$$$^$9!#(B
$B@_Dj%U%!%$%kCf$G!"(B
$B"#(B $B;H$$J}(B
$B!|(B CGI $B$N@_Dj(B
$B$N@_Dj$,M-8z$K$J$C$F$$$k$+3NG'$7$F$/$@$5$$!#(B
$B$3$N@_Dj$H!"%9%/%j%W%H$K
ScriptAlias /cgi-bin/ /home/httpd/cgi-bin/
$B$3$N%9%/%j%W%H$O!"4A;z%3!<%I$r(B EUC $B$H$7$F%;!<%V$7$F;HMQ$7$F$/$@$5$$!#(B $B0lIt4A;z%3!<%I$K0MB8$7$F$$$k5-=R$r$7$F$$$^$9!#(B
#! /usr/local/bin/ruby -Ke
# /home/tetsu/src/ruby/cgi/man2html.rb
# Created: May 25,1999 Tuesday 18:18:49
# Author: tetsu(WATANABE Tetsuya)
RCS_ID = %q$Id: man2html.rb,v 1.8 2000/02/21 02:43:37 tetsu Exp $
# usage: cgi
class Benchmark
def initialize
@bench = []
@s = nil
end
def start
@s = Time.now
end
def stop
@bench.push((Time.now - @s).to_f)
@s = nil
end
def to_f
sum = 0.0
@bench.each do |a|
sum += a
end
sum / @bench.size
end
def to_s
sprintf('%f', self.to_f)
end
end
# jman -> HTML
class OnlineMan
def initialize(str)
lang = ENV['LANG']
if File.exist? '/stand/vmunix'
euc_lang = 'ja_JP.eucJP'
man_cmd = 'man'
if File.exist? '/etc/MANPATH'
mp = File.open('/etc/MANPATH')
ENV['MANPATH'] = mp.read
mp.close
end
else
euc_lang = 'ja_JP.ujis'
man_cmd = 'jman'
end
ENV['LANG'] = euc_lang
foo = IO.popen(man_cmd + ' ' + str)
man_arr = foo.readlines
foo.close
ENV['LANG'] = lang
foo_arr = [''] * 6
0.step(man_arr.size, 66) do |i|
man_arr[i, 6] = foo_arr
man_arr[i + 60, 6] = foo_arr
end
@man = man_arr.join('')
end
def to_html
me = if ENV.key?('SCRIPT_NAME')
ENV['SCRIPT_NAME']
else
'/cgi-bin/man2html.rb'
end
@man.gsub("\n{3,}", "\n\n").
tr('<>&"', "\001\002\003\004").
gsub(/((?:_[\b][^_\b])+)/) {
'<i>' + $1.gsub(/_[\b]/, '') + '</i>'
}.gsub(/((?:(?:[^_\b][\b])+[^_\b])+)/) {
'<b>' + $1.gsub(/[\b][^_\b]/, '') + '</b>'
}.gsub(/((?:__[\b]{2}[^_\b]{2})+)/n) {
'<i>' + $1.gsub(/__[\b]{2}/n, '') + '</i>'
}.gsub(/((?:(?:[^_\b]{2}[\b]{2})+[^_\b]{2})+)/n) {
'<b>' + $1.gsub(/[\b]{2}[^_\b]{2}/n, '') + '</b>'
}.gsub(/.[\b]/, '').
gsub(/<\/i>_<i>/, '_').
gsub(/<\/b>_<b>/, '_').
gsub(/([\w\d.\$-]+)\s?\((\d\w?)\)/n) {
'<A HREF="' + me + '?' + $2 + '+' + $1 + '">' + $1 + '(' + $2 + ')</A>'
}.gsub(/<i>([\w\d.\$-]+)<\/i>\((\d\w?)\)/n) {
'<A HREF="' + me + '?' + $2 + '+' + $1 + '">' + $1 + '(' + $2 + ')</A>'
}.gsub(/<i>([\w\d.\$-]+)<\/i>\(<i>(\d\w?)<\/i>\)/n) {
'<A HREF="' + me + '?' + $2 + '+' + $1 + '">' + $1 + '(' + $2 + ')</A>'
}.gsub(/<b>([\w\d.\$-]+)<\/b>\((\d\w?)\)/n) {
'<A HREF="' + me + '?' + $2 + '+' + $1 + '">' + $1 + '(' + $2 + ')</A>'
}.gsub(/<b>([\w\d.\$-]+)<\/b>\(<b>(\d\w?)<\/b>\)/n) {
'<A HREF="' + me + '?' + $2 + '+' + $1 + '">' + $1 + '(' + $2 + ')</A>'
}.gsub(/([$B!!(B-$Btp(B]+) +(?![^$B!!(B-$Btp(B])/e, '\1').
gsub(/\001/, '<').
gsub(/\002/, '>').
gsub(/\003/, '&').
gsub(/\004/, '"')
end
end
require 'cgi-lib'
def mkLastMod
t = Time.at(0)
[
if ENV.key?('SCRIPT_FILENAME')
ENV['SCRIPT_FILENAME']
else
'/home/httpd/cgi-bin/man2html.rb'
end
].each do |f|
next if not File.exist?(f)
w = File.mtime(f)
t = w if w > t
end
t
end
require 'nkf'
def man_page(cgi)
last_mod = mkLastMod.gmtime.strftime('%a, %d %b %Y %X %Z')
b = Benchmark.new
b.start
man_opt = ''
cgi.each_key {|k|
man_opt.concat(k)
}
man = OnlineMan.new(man_opt)
msg = NKF.nkf('-Ej', man.to_html)
b.stop
CGI::print("Content-Type: text/html", "Last-Modified: " + last_mod) {
CGI::tag("html") {
CGI::tag("head") {
CGI::tag("meta",
{"http-equiv"=>"Content-Type",
"content"=>"text/html; charset=ISO-2022-JP"}) +\
CGI::tag("title") {"man pages: " }
} +\
CGI::tag("body",
{"bgcolor"=>"#e0e0e0",
"text"=>"#0f0f0f",
"link"=>"#0000ff",
"vlink"=>"#000080",
"alink"=>"#ff0000"
}) {
CGI::tag("script", "language"=>"JavaScript") {
'<!--' + "\n" + 'document.writeln("Last Modified: ",document.lastModified);' + "\n" + '//-->' + "\n"
} +\
CGI::tag("hr") +\
CGI::tag("pre") { msg } +\
CGI::tag("i") { "time: " + sprintf("%.2f", b.to_f) } +\
CGI::tag("hr")
}
}
}
end
def welcome_page
last_mod = mkLastMod.gmtime.strftime('%a, %d %b %Y %X %Z')
CGI::print("Content-Type: text/html", "Last-Modified: " + last_mod) {
NKF.nkf('-EjZ',
CGI::tag("html") {
CGI::tag("head") {
CGI::tag("meta",
{"http-equiv"=>"Content-Type",
"content"=>"text/html; charset=ISO-2022-JP"}) +\
CGI::tag("title") {"search of patch catalog"}
} +\
CGI::tag("body",
{"bgcolor"=>"#e0e0e0",
"text"=>"#0f0f0f",
"link"=>"#0000ff",
"vlink"=>"#000080",
"alink"=>"#ff0000"}) {
# action $B$N!V<+J,!W$O!"Dj5A$G(B...
action_script = if ENV.key?('REQUEST_URI') then ENV['REQUEST_URI'] else $0 end
CGI::tag("script", "language"=>"JavaScript") {
'<!--' + "\n" + 'document.writeln("Last Modified: ",document.lastModified);' + "\n" + '//-->' + "\n"
} +\
CGI::tag("hr") +\
CGI::tag("i") { RCS_ID } +\
CGI::tag("br") +\
CGI::tag("b") { `uptime` } +\
CGI::tag("br") +\
CGI::tag("p") { '$B%*%s%i%$%s%^%K%e%"%k$+$i(B HTML $B$X$N%2!<%H%&%'%$$G$9!#(B' } +\
CGI::tag("isindex", "prompt"=>"man") +\
CGI::tag("p") { 'BOX $B$K%(%s%H%j!$rF~NO$7$F$/$@$5$$!#(B
$BFC$K%(%s%H%j!$r;XDj$7$?$$>l9g$K$O(B "1 chmod" $B$N$h$&$K(B BOX $B$NCf$K%^%K%e%"%k$N%;%/%7%g%s$r4^$a$k$3$H$,$G$-$^$9!#(B
"-k string" $B$N$h$&$K%-!<%o!<%I$r;XDj$9$k$3$H$b$G$-$^$9!#(B
' } +\
CGI::tag("hr")
}
}
)
}
end
cgi = CGI.new
if cgi.size == 0
welcome_page
else
man_page(cgi)
end
print "\n"
exit
$BFbMF$H$7$F$O!"(Bman $B%3%^%s%I$N=PNO$r(B HTML $B$KJQ49$7$F$$$^$9!#(B
man $B%3%^%s%I$O!"(Bless $B$J$I$N%Z!<%8%c$G6/D4$d%"%s%@!<%i%$%s$r=PNO$9$k$N$K!"%P%C%/%9%Z!<%9$r$&$^$/;H$C$F$$$^$9!#(B
$B$3$l$O%i%$%s%W%j%s%?$N%$%a!<%8$G!"!V=E$M$&$A!W$N
$BF1MM$K%"%s%@!<%i%$%s$b=hM}$5$l$F$$$^$9!#(B
$B$3$3$G;HMQ$7$F$$$k(B
$ jman man | hd.rb -e | less
$B>JN,(B
00000040 6e283129 0a0a0acc be0808cc bec1b008 n(1)...$BL>(B..$BL>A0(B.
00000050 08c1b00a 20202020 2020206d 616e202d .$BA0(B. man -
00000060 20a5aaa5 f3a5e9a5 a4a5f3a5 dea5cba5 $B%*%s%i%$%s%^%K(B.
$B>JN,(B
00000290 20a4cbc1 aaa4d9a4 eba1a320 5f08735f $B$KA*$Y$k!#(B _.s_
000002a0 08655f08 635f0874 5f08695f 086f5f08 .e_.c_.t_.i_.o_.
000002b0 6e20a4f2 bbd8c4ea a4b9a4eb a4c8a1a2 n $B$r;XDj$9$k$H!"(B
$B>JN,(B
000004c0 20206308 636f086f 6e086e66 08666908 c.co.on.nf.fi.
000004d0 69670867 5f085f66 08666908 696c086c ig.g_._f.fi.il.l
000004e0 6508650a 20202020 20202020 20202020 e.e.
hd.rb $B$O(B
$B!V(B
hex dump $B%3%^%s%I(B
$B!W(B
$B$G$9!#(B
$B6/D4$r(B HTML $B$N6/D4(B($B$N0UL#$G(B?)$B%\!<%k%IBN$r;XDj$7!"%"%s%@!<%i%$%s$r(B HTML $B$N%$%?%j%C%/BN$K$7$F$$$^$9!#(B
$B$3$l$i$N=hM}$N$?$a$K$A$g$C$HBg$-$J@55,I=8=$r;H$C$F$$$^$9!#(B
$B$3$N@55,I=8=!"0lIt!V4A;zA4BN!W$r<($9$?$a$KI=<(IT2DG=$J!V(B/([$B!!(B-$Btp(B]+) +(?![^$B!!(B-$Btp(B])/e$B!W$H$$$&$b$N$r;HMQ$7$F$$$^$9!#(B
$BI=<(2DG=$JHO0O$NJ8;z$r;HMQ$9$l$P$h$+$C$?$N$G$9$,(B...
$B
a1a1: $B!!!"!#!$!%!&!'!(!)!*!+!,!-!.!/!0(B $B>JN,(B f4a1: $Bt!t"t#t$(B$BI=<(2DG=J8;z$KD>$9$N$b0l$D$N
#! /usr/local/bin/ruby
# /home/tetsu/src/ruby/mkeuc.rb
# Created: March 01,1998 Sunday 14:20:11
# Author: tetsu(WATANABE Tetsuya)
# $Id$
# usage:
for i in 0241 .. 0376
for j in 0241 .. 0376
printf("\n%02x%02x: ", i.to_i, j.to_i) if j % 16 == 1
printf("%c%c", i, j)
end
end
$B$$$+$,$G$7$g$&(B? $B%*%s%i%$%s%^%K%e%"%k$r$=$N$^$^(B HTML $B%U%!%$%k$K$7$F$7$^$&$b$N$b$"$j$^$9$,!"!V$=$N>l$GJQ49$7$F$7$^$&!W$H$$$&$N$b$R$H$D$NJ}K!$H;W$$$^$9!#(B $B8!:w%(%s%8%s$N(B Namazu $B$r;HMQ$9$k>l9g$K$O!"(BHTML $B2=$5$l$F$$$?J}$,JXMx$J$s$G$9$,(B...
$B@55,I=8=$H%/%i%9Dj5A$O$b$&>/$78+D>$7$?J}$,$$$$$+$J$H;W$C$F$$$^$9!#(B $B6a$/=$@5$9$kM=Dj$G$O$$$^$9$,!"$$$^$N$H$3$mF0:n$K$O:$$C$F$$$J$$$N$G(B...