#!/usr/bin/perl use News::NNTPClient; use CGI; @color = ( "black", "black", "black", "red", "red", "darkred", "green", "lightgreen", "darkgreen", "yellow", "lightyellow", "yellow", "blue", "lightblue", "darkblue", "magenta", "magenta", "darkmagenta", "cyan", "lightcyan", "darkcyan", "white", "white", "white"); =pod @color = ( "#000000", "#808080", "#000000", "#FF0000", "#800000", "#FF0000", "#00FF00", "#008000", "#00FF00", "#FFFF00", "#808000", "#FFFF00", "#0000FF", "#000080", "#0000FF", "#FF00FF", "#800080", "#FF00FF", "#00FFFF", "#008080", "#00FFFF", "#FFFFFF", "#C0C0C0", "#FFFFFF"); =cut $pagebgcolor = "black"; $text = "white"; $bright = 0; $underscore = 0; $blink = 0; $reverse = 0; $hidden = 0; $fgcolor = 7; $bgcolor = 0; $colored = 0; $server = CGI::param('server'); $group = CGI::param('group'); $msgid = CGI::param('msgid'); $c = new News::NNTPClient($server); $c->group($group); @head = $c->head($msgid); @body = $c->body($msgid); foreach (@head) { if (/^From: (.*)/) { $from = $1; } elsif (/^Subject: (.*)/) { $subject = $1; } elsif (/^Date: (.*)/) { $date = $1; } } foreach (@body) { s/&/&/g; s//>/g; s/\n/
\n/g; # s/(http:\/\/\S*)/$1<\/a>/g; s/ /  /g; s/^※.*$/$_<\/font>/; s/\[([0-9;]*)m/attribute($1)/ge; } print CGI::header(-charset=>'big5'); print "\n"; print "\n"; print "\n"; print "\n"; print "\n"; print ""; print "\n"; print "\n"; print "\n"; print "
作者$from
標題$subject
時間$date
"; print "
\n"; print @body; print "\n"; print "\n"; sub attribute { my $return = ''; my $tmp_bright = $bright; my $tmp_fgcolor = $fgcolor; my $tmp_bgcolor = $bgcolor; my $tmp_underscore = $underscore; my $tmp_blink = $blink; my $tmp_reverse = $reverse; my $tmp_hidden = $hidden; my $tmp = shift(@_); if ($tmp =~ /^$/) { if ($colored) { $return .= "
"; $tmp_bright = $bright = 0; $tmp_fgcolor = $fgcolor = 7; $tmp_bgcolor = $bgcolor = 0; $tmp_underscore = $underscore = 0; $tmp_blink = $blink = 0; $colored = 0; } if ($reverse) { $tmp_reverse = $reverse = 0; } if ($hidden) { $tmp_hidden = $hidden = 0; } } else { my @tmp = split(/;/, $tmp); foreach (@tmp) { if (/^0$/) { $tmp_bright = 0; } if (/^1$/) { $tmp_bright = 1; } if (/^2$/) { $tmp_bright = 2; } if (/^4$/) { $tmp_underscore = 1; } if (/^5$/) { $tmp_blink = 1; } if (/^7$/) { $tmp_reverse = 1; } if ($_ >= 30 && $_ <= 37) { $tmp_fgcolor = $_ - 30; } if ($_ >= 40 && $_ <= 47) { $tmp_bgcolor = $_ - 40; } } if ($tmp_bright != $bright || $tmp_fgcolor != $fgcolor || $tmp_bgcolor != $bgcolor || $tmp_underscore != $underscore || $tmp_blink != $blink) { $bright = $tmp_bright; $fgcolor = $tmp_fgcolor; $bgcolor = $tmp_bgcolor; $blink = $tmp_blink; $underscore = $tmp_underscore; if ( $colored ) { $return .= ""; } $return .= ""; $colored = 1; } if ($tmp_reverse != $reverse) { $reverse = $tmp_reverse; } if ($tmp_hidden != $hidden) { $hidden = $tmp_hidden; } } return $return; }