#!/usr/bin/env perl
# http ヘッダの出力
print "Content-Type: text/html\n\n";
# ボードファイル名
$bfile ="board.dat";
&decode;
$mes = $tags{'message'};
$name = $tags{'name'};
if ($mes) { $mes = &unspecial($mes); }
if ($name) { $name = &unspecial($name); } else { $name = "名無し"; }
# メッセージがあったら、名前と共にボードファイルに追加
if ($mes) {
open(FH, ">>" . $bfile);
print FH <<"END";
${name} さんの書き込み:
${mes}
END
close(FH);
}
# HTMLファイルの先頭部分を出力
print "\n";
print "Very simple Web board
\n";
# 間にボードファイルの内容を挟み込む
open(FH, $bfile);
while () {
print $_;
}
close(FH);
# HTMLファイルの末尾部分(フォーム含む)を出力
print <<"END";
END
#------------------------------------------------------------
# cgi.pl - decode CGI input.
# by ETO Kouichirou
# date 1994/05/11
#
# Usage:
#
# &decode;
# ...
# $name = $tags{'name'};
sub decode {
local($args, $n_read, *terms, $tag, $value);
if ($ENV{'REQUEST_METHOD'} eq "POST"){
$n_read = sysread(STDIN, $args, $ENV{'CONTENT_LENGTH'});
} else {
$args = $ENV{'QUERY_STRING'};
}
@terms = split('&', $args);
foreach (@terms) {
($tag, $value) = split(/=/, $_, 2);
$otags{$tag} = $value; # original tags
$tags{$tag} = &unpack($value); # tags is global
}
}
sub unpack {
local($value) = @_;
$value =~ s/\+/ /g;
$value =~ s/%(..)/pack("c", hex($1))/ge;
return $value;
}
sub unspecial {
local($value) = @_;
$value =~ s/&/&/g;
$value =~ s/</g;
$value =~ s/>/>/g;
return $value;
}