c

c

うおっ、こんなところでバグが・・・

 <HTML>
 <HEAD>
 <meta http-equiv="content-type" content="text/html; charset=euc-jp">
 <TITLE>判別</TITLE>
 </HEAD>
 <BODY>
 <%
 ERuby.charset = "EUC-JP"
 #$KCODE="euc"
 require "postgres"
 require "cgi"
 cgi = CGI.new
 conn = PGconn.connect("localhost", 5432, "","","parttimer")
 %>
 
 <H1>判別</H1>
 
 <FORM METHOD="GET" ACTION="/part.rhtml">
 <DIV>名前:<SELECT SIZE="1" NAME="who">
 <%
 list = conn.exec("select name from member;")
 list.each{|i|
  print "<OPTION VALUE="#{i}" "
  print "SELECTED"   if cgi.has_key?(&#39;who&#39;) && /#{i}/.match(cgi[&#39;who&#39;][0])
  puts ">#{i}</OPTION>"
 }
 %>
 </SELECT></DIV>
 <DIV>:<INPUT NAME="ANS" <%
 if cgi.has_key?(&#39;who&#39;)
   who = cgi[&#39;who&#39;][0] #"AL2A01"
   conn = PGconn.connect("localhost", 5432, "","","parttimer")
   member = conn.exec("select passwd from member where name=&#39;#{who}&#39;;")
   print "VALUE="#{member.result}""
 end%>></DIV>
 <BR>
 
 <INPUT TYPE="SUBMIT" VALUE="検索">
 <INPUT TYPE="reset" VALUE="取消">
 </FORM>
 
 </BODY>
 </HTML>
 

expect.rb

pty

PostgreSQL

walrus

mod_ruby

 #!/usr/bin/ruby -Ke
 require &#39;cgi&#39;
 require "date"
 class Wiki2html
   Multi={&#39; &#39;=>&#39;pre&#39;,&#39;|&#39;=>&#39;table&#39;,&#39;,&#39;=>&#39;csv&#39;,&#39;>&#39;=>&#39;indent&#39;,&#39;=&#39;=>&#39;nlist&#39;,&#39;-&#39;=>&#39;list&#39;}
 
   def existlink(name="Top")	# wikiで実際に利用するときにはこれをオーバライドする
     #Page::exist(name)
     true
   end
 
   class Line			# wikiにおける行を出力するクラス
     include Enumerable
     def initialize(s="")
       @s=s
     end
     def each			# @mを含む行は複数行で返す
       s=@s.split("\n")
       while a=s.shift
 	while !s.empty? && Multi[a[0..0]] && Multi[a[0..0]] == Multi[s[0][0..0]]
 	  a+="\n"+s.shift
 	end
 	yield a			# イテレータ使用
       end
     end
   end
   
   class Macro			# マクロ計算用(主に日付計算に特化)
     def initialize(s="")
       @s=s
       @d
     end
     def self.do(s="")
       new(s).do
     end
     def do			# $$関数用
       return("###error macro #{@s} ###") unless /(today|>>|<<|[0-9\+\-\*\/])+/.match(@s)
       @s.gsub!(&#39;today&#39;){@d=Date.today;&#39;@d&#39;}
       eval(@s)
     end
   end
 
   class Calendar
     Days=[0,31,28,31,30,31,30,31,31,30,31,30,31]
     Week=[&#39;日&#39;,&#39;月&#39;,&#39;火&#39;,&#39;水&#39;,&#39;木&#39;,&#39;金&#39;,&#39;土&#39;]
     def initialize(date="日記-2002/10/10")
       raise "error String" unless /^(.+)-([0-9]{4})\/([0-9]{1,2})\/([0-9]{1,2})/.match(date)
       @date=Date.new($2.to_i,$3.to_i,$4.to_i) 
       @h,@t=$1,Date.today
     end
     def self.month(date="日記-2002/10/10")
       new(date).month
     end
     def self.week(date="日記-2002/10/10")
       new(date).week
     end
     def month                     #
       eday=((fday=@date-@date.day+1)>>1)-1
       r="|#{Week.join(&#39;|&#39;)}|\n|#{&#39;  |&#39;*(fday.wday)}"
       (fday).upto(eday){|d|r+="[[#{sprintf("%2d",d.day)}:#{@h}-#{d.year}/#{sprintf("%02d",d.mon)}/#{sprintf("%02d",d.day)}]]|#{"\n" if d.wday==6}#{&#39;|&#39; if d.wday==6 && d!=eday}"}
       "#{r}#{&#39;  |&#39;*(6-eday.wday)}"
     end
     def week                      #
       r=""
       (@date-@date.wday).upto(@date-@date.wday+6){|d|
 	r+="[[#{d.mon}/#{d.day}(#{Week[d.wday]}):#{@h}-#{d.year}/#{sprintf("%02d",d.mon)}/#{sprintf("%02d",d.day)}]]#{"-今日" if d==@t}\n"
       }
       r
     end
   end
 
   def initialize(string="",url="./",wikiname="Top",mode="view")
     @s,@u,@n,@m=string,url,wikiname,mode
     @capnum=[0]*10		# 見出し 段数はとりあえず10
     @caption=""			# caption格納用文字列
     @footnum=0			# 脚注の番号
     @footnote=""		# 脚注
   end
 
   def esc(str="")
     CGI::escape(str)
   end
 
   def convline(a="")		# リンク及び文字飾りを処理する
     a=a.gsub(/(http:\/\/[a-zA-Z0-9\.\?\&=\/%;\-~:]+)/){"<A HREF=\"#{$1}\">#{$1}</A>"}
     a=a.gsub(/\[\[(.+?)::(.+?)::(.+?)\]\]/){"<A HREF=\"#{@u}?n=#{esc($2)}&m=view&s=#{esc($3)}\">#{$1}</A>"} #パックアップwikiリンク
     a=a.gsub(/\[\[(.+?):(<A[^>]*>)(.+?)(<\/A>)\]\]/i){$2+$1+$4} # URLを含むalias
     a=a.gsub(/\[\[(.+?):(.+?):#(.+?)\]\]/){"<A HREF=\"#{@u}?n=#{esc($2)}##{esc($3)}\">#{$1}</A>"} #見出しwikiリンク別名
     a=a.gsub(/\[\[(.+?):#(.+?)\]\]/){"<A HREF=\"#{@u}?n=#{esc($1)}##{esc($2)}\">#{$2}</A>"} #見出しwikiリンク
     a=a.gsub(/\[\[(.+?):(.+?)\]\]/){"<A HREF=\"#{@u}?n=#{esc($2)}\" class=\"#{((existlink($2))?"link":"nolink")}\">#{$1}</A>"} #aliasのwikiリンク
     a=a.gsub(/\[\[(.+?)\]\]/){"<A HREF=\"#{@u}?n=#{esc($1)}\" class=\"#{(existlink($1)?"link":"nolink")}\">#{$1}</A>"} #通常wikiリンク(wikiリンクのヒット順序は気をつけること(バグの元)
     a=a.gsub(/&#39;&#39;&#39;(.*?)&#39;&#39;&#39;/){"<I>#{$1}</I>"} # イタリック
     a=a.gsub(/&#39;&#39;(.*?)&#39;&#39;/){"<B>#{$1}</B>"} # ボールド
     a=a.gsub(/__(.*?)__/){"<U>#{$1}</U>"} # 下線
     a=a.gsub(/%%(.*?)%%/){"<STRIKE>#{$1}</STRIKE>"} # 打ち消し線
     a=a.gsub(/\(\((.*?)\)\)/){@footnum+=1;@footnote+="\n<A NAME=\"F#{@footnum}\"><SUP>*#{$1}</SUP></A>";"<A HREF=\"#F#{@footnum}\"><SUP>*#{@footnum}</SUP></A>"} # 脚注
     a
   end
 
   def noedit(str="")		# 整形無
     "<PRE>\n"+str.split("\n").map{|b|b.gsub(/^ /,&#39;&#39;).gsub(&#39;&&#39;,&#39;&&#39;).gsub(&#39;<&#39;,&#39;<&#39;).gsub(&#39;>&#39;,&#39;>&#39;)}.join("\n")+"\n</PRE>"
   end
 
   def caption_with_number(str="") # 番号付き見出し
     str.gsub!(/^(\*+)/,&#39;&#39;)
     @capnum[$1.size]+=1
     @capnum[$1.size+1..@capnum.size]=[0]*(@capnum.size-$1.size)
     @caption+=&#39;-&#39;*$1.size+"#{@capnum[1..$1.size].join(".")} [[#{@n}:##{str}]]\n"
     "<H#{$1.size+1}><A NAME=\"#{esc(str)}\">#{@capnum[1..$1.size].join(".")} #{str}</A></H#{$1.size+1}>"
   end
 
   def caption(str="")		# 番号無し見出し
     str.gsub!(/^(\++)/,&#39;&#39;)
     @caption+=&#39;-&#39;*$1.size+"[[#{@n}:##{str}]]\n"
     "<H#{$1.size+1}><A NAME=\"#{esc(str)}\">#{str}</A></H#{$1.size+1}>"
   end
   
   OList=[&#39;1&#39;,&#39;a&#39;,&#39;A&#39;,&#39;i&#39;,&#39;I&#39;]	#  OLのtype=には未対応(何とかせねば)
   def list(str="",mode=&#39;-&#39;,stab=&#39;<UL>&#39;,node=&#39;<LI>&#39;,etab=&#39;</UL>&#39;)	# リスト
     r,level="",0
     str.split("\n").each{|ln|
       /^(#{mode}+)/.match(ln)
       l=$1.size-level
       r+=stab*l if l>0
       r+=etab*(-l) if l<0
       level=$1.size
       r+=node+ln.sub($1,&#39;&#39;)+"\n"
     }
     r+etab*level
   end
 
   def command(str="")
     case str
     when /#line/            #水平線
       "<HR>"
     when /#comment/         #コメントモード 未実装
       "<FORM ACTION=\"\"></FORM>"
     when /#calendar\(([^\-]+)-([0-9]{4})\/([0-9]{1,2})\/([0-9]{1,2})\)/ #カレンダー 
       convline(table(Calendar.month("#{$1}-#{$2}/#{$3}/#{$4}")))
     when /#calendarw\(([^\-]+)-([0-9]{4})\/([0-9]{1,2})\/([0-9]{1,2})\)/ #カレンダー 
       convline(Calendar.week("#{$1}-#{$2}/#{$3}/#{$4}").gsub("\n","<BR>\n"))
     else
       str+"<BR>"
     end
   end
 
   def table(str="")
     "<TABLE>\n"+str.split("\n").map{|b|
 	  b.gsub(/^\|/,&#39;<TR><TD>&#39;).gsub(/\|[^\|]*$/,&#39;</TD></TR>&#39;).gsub(/\|/,&#39;</TD><TD>&#39;)
     }.join("\n")+"\n</TABLE>"
   end
   
   def to_view			# 
     Line.new(@s).map{|line|
       if line[0..0]==&#39; &#39;
 	noedit(line)
       else
 	line.gsub!(/\$([^\$]+)\$/){Macro.do($1)}
         line=line.gsub(&#39;&&#39;,&#39;&&#39;).gsub(&#39;<&#39;,&#39;<&#39;).gsub(&#39;>&#39;,&#39;>&#39;)
 	case line[0..0]
 	when &#39;*&#39;
 	  caption_with_number(line)
 	when &#39;+&#39;
 	  caption(line)
 	when &#39;-&#39;
 	  convline(list(line))
 	when &#39;=&#39;
 	  convline(list(line,&#39;=&#39;,&#39;<OL>&#39;,&#39;<LI>&#39;,&#39;</OL>&#39;))
 	when &#39;>&#39;
 	  convline(list(line,&#39;>&#39;,&#39;<BLOCKQUOTE>&#39;,&#39;&#39;,&#39;</BLOCKQUOTE>&#39;))
 	when &#39;:&#39;			# 説明文
 	  convline("<DL><DT>#{$1}</DT><DD>#{$2}</DD></DL>") if /^:([^:]*):(.+)$/.match(line)
 	when &#39;|&#39;			# 表
 	  convline(table(line))
 	when &#39;#&#39;
 	  command(line)
 	else
 	  "#{convline(line)}<BR>"
 	end
       end
     }.join.gsub(/^#contents/m,convline(list(@caption)))+convline(@footnote)
   end
 
   def to_edit			# ブラウザに変換される文字列のみ修正する
     @s.gsub(&#39;&&#39;,&#39;&&#39;).gsub(&#39;<&#39;,&#39;<&#39;).gsub(&#39;>&#39;,&#39;>&#39;)
   end
 
   def to_s			# 
     (@m=="view")?(self.to_view):(self.to_edit)
   end
 end
 
 if __FILE__==$0			# ライブラリテスト用コード
   class CGI
     CGI_PARAMS={&#39;form&#39;=>[&#39;value&#39;]}
     CGI_COOKIES= nil
   end
 
   File.open("helpdata.txt"){|f|
     puts Wiki2html.new(f.read).to_view
   }
 end

[[ホームページ:http://www.karo.no-ip.com]]

*[BIND] 勘違いの痕跡

[[DNS]]を参照のこと

*[BIND] BIND8のインストール

>||
 apt-get install bind