#!/usr/local/bin/ruby
print "Content-type: text/html\n\n"
require "cgi-lib"
input = CGI.new
require "kconv"
#初期設定
CR = "\015"
LF = "\012"
EOL = CR + LF
BR = "<br>"
FILENAME = "bbs2.log"
LOCKFILENAME = "bbs2.log.lock"
MAXLOG = 10
$log = []
#ファイルロッククラス作成
class FileLockDir
def lock(lockdir)
begin
Dir.mkdir(lockdir)
lockflag = true
rescue Errno::EEXIST
lockflag = false
end
return(lockflag)
end
def unlock(lockdir)
begin
Dir.rmdir(lockdir)
lockflag = true
rescue
lockflag = false
end
return(lockflag)
end
end
#ログファイルの読みこみ関数
def read_log_file
c = 0
begin
fh = open(FILENAME)
rescue Errno::ENOENT
return
end
fh.each{|l|
$log[c] = l
c += 1
if c >= MAXLOG
break
end
}
fh.close
end
#ログファイルの書き込み関数
def write_log_file(writedata)
$log.unshift("#{writedata}\n")
c = 0
fh = open(FILENAME, "w")
$log.each{|l|
fh.print l
c += 1
if c >= MAXLOG
break
end
}
fh.close
end
#ファイルロッククラスの初期化
fillock = FileLockDir.new
#フォームからのデータ読みこみと日本語変換と改行の変換
if input["senddata"]
senddata = Kconv.tosjis(input["senddata"])
senddata.gsub!(/#{EOL}/, BR)
senddata.gsub!(/#{CR}/, BR)
senddata.gsub!(/#{LF}/, BR)
end
#ログファイルの読みこみ関数を呼び出す
read_log_file
#書き込みがあったら
if senddata
#ファイルロック設定
if !(fillock.lock(LOCKFILENAME))
print <<EOF;
<html><body>
他の人が書き込み中です。<br>しばらく待ってからもう一度書いて下さい。
</body></html>
EOF
end
#ログファイルの書き込み関数を呼び出し
write_log_file(senddata)
#ファイルロック解除
fillock.unlock(LOCKFILENAME)
end
#HTMLの表示
print <<EOF;
<html>
<body>
<form method="POST">
<textarea name="senddata" cols="80" rows="10"></textarea>
<input type="submit" value="送信">
</form>
<hr>
EOF
$log.each{|l|
print "#{l}\n<hr>\n"
}
print <<EOF;
</body>
</html>
EOF