#!perl use lib '.'; use CGI::Carp qw(fatalsToBrowser); use CGI; use Jcode; my $title = 'TinyTiny'; my $data_file = './data.txt'; &main; sub main { my $query = CGI->new; my $mode = &initialize($query); my $html = &$mode($query); &output($query, $mode, $html) if (defined($html)); } sub initialize { my $query = shift; my $mode = $query->param('mode'); $mode = 'show' unless (grep { $_ eq $mode} ('show', 'edit','save')); return $mode; } sub output { my ($query, $mode, $html) = @_; my $url = $query->url; my $style = 'padding: 3px; text-align: right; background-color: #dddddd;'; print $query->header('-charset' => 'EUC-JP'), $query->start_html(-title => $title), "\n"; printf("

%s%s

\n", $url, CGI::escapeHTML($title), $page_link); my $ext_mode = ($mode eq 'show') ? 'edit' : 'show'; print qq(

[$ext_mode]

\n); print $html; print $query->end_html; } sub show { my $query = shift; my $text = &page_read($query); # (1) $text = jcode('(ページが未作成です)')->euc if (not defined($text)); $text = CGI::escapeHTML($text); # (2) $text =~ s/\r?\n/
\n/g; $text =~ s/\t/ /g; $text =~ s/( +)/sprintf('%s<\/span>', length($1) * 0.5, $1)/ge; return $text; } sub edit { my $query = shift; my $text = &page_read($query); my $html = $query->start_form(); # (3) $html .= $query->textarea(-name=>'text', -default=>$text, -rows=>15, -columns=>60) . $query->br; $html .= $query->submit(-name=>'mode', -value=>'save'); $html .= $query->end_form(); return $html; } sub save { my $query = shift; my $result = &page_write($query); # (4) return CGI::escapeHTML($result); } sub page_read { my $query = shift; my $file = $data_file; my $text = undef; if (-f $file and open(IN, $file)) { local $/ = undef; $text = ; close(IN); } return $text; } sub page_write { my $query = shift; my $text = $query->param('text'); my $file = $data_file; my $result = "ページを更新できませんでした。"; if (defined($text) and length($text)) { if (open(OUT, ">$file")) { $text =~ s/(:?\x0D\x0A|\x0D|\x0A)/\n/g; print OUT jcode($text)->euc; close OUT; $result = "ページが更新されました。"; } } elsif (unlink($file)) { $result = "ページが削除されました。"; } return jcode($result)->euc; }