#! c:/perl/bin/perl
#
# maillist.cgi
# メールアドレスの表などCSVファイルのマトリックスを整理して表示
#
# 1.003 : 10/7/06 : 表のカラム数を修正
# 1.002 : 2/18/06 : 戻るリンク名オプションを追加
# 1.001 : 10/2/05 : Copyrightにリンクを追加
# 1.0 : 7/31/05 : 一般公開用にクリーンアップ
#
# $Id: maillist.cgi,v 1.14 2006/10/07 02:38:54 Hideki Kanayama Exp $
use File::Basename;
use CGI::Carp qw(fatalsToBrowser);
$lastupdatedyear = 2006;
$version = "1.003";
$script = basename($0);
$setupfile = "maillist_setup.pl";
$lang = 0;
#####################################
# ページタイトル
$title = 'メールリスト';
# データファイル名
$datafile = "maillist.csv";
# 戻りリンク 1:on 0:off
$back_en = 1;
$back = "../maillist.html";
$backname = "戻る";
# バックグラウンド
$bgcolor = 'white';
# 最初に表示するカテゴリ
# 名前のすぐ右のカラム:1, その右:2, ...
$default_menu = 1;
# 一列に表示するメニューの数
$menu_cr = 10;
$all1_name = "全部1";
$all2_name = "全部2";
$menu_back = "gray";
$menu_front = "white";
#スタイルシート 1:on 0:off
$style_sheet_en = 1;
$style_sheet = '
A:link {text-decoration: none}
A:visited {text-decoration: none}
A:active {text-decoration: none}
';
#
〜内に挿入できる構文 1:on, 0:off
$head_insert_en = 0;
$head_insert = '\n";
print "$title
\n";
print "$backname\n" if ($back_en == 1);
($dev,$ino,$mode,$nlink,$uid,$gid,$rdev,$size,$atime,$mtime,$ctime,$blksize,$blocks) = stat $datafile;
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($mtime + $offset*3600);
printf("%4d年%2d月%2d日%2d時%02d分更新
\n",$year+1900,$mon+1,$mday,$hour,$min);
$default_menu = 1 if ($default_menu < 1);
$in{mode} = --$default_menu unless (exists $in{mode});
$title_flag = '';
$link_flag = '';
open(FILE,"< $datafile") || &error("データファイル$datafileが開けません");
while (){
chomp;
next if /^\s*#/;
next if /^\s*$/;
@line = split /,/;
if (/^\s*$firsttitle/ and $title_flag ne done) {
shift @line;
$cols = $#line + 2;
print qq{\n} if ($title_flag ne done);
$i = 0;
foreach (@line){
s/^\s*//; s/\s*$//;
if ($in{mode} !~ /^\d/ or $i ne $in{mode}) {
print qq{| $_ | \n};
} else {
print qq{$_ | };
}
print "
\n\n" if ($i != 0 and ($i+1) % $menu_cr == 0);
$i++;
}
if ($in{mode} ne all1) {
print qq{| $all1_name | \n};
} else {
print qq{$all1_name | \n};
}
print "
\n\n" if ($i != 0 and ($i+1) % $menu_cr == 0);
if ($in{mode} ne all2) {
print qq{| $all2_name | \n};
} else {
print qq{$all2_name | \n};
}
print qq{
} if ($title_flag ne done);
@titlelist = @line;
$title_flag = done;
} elsif (/^\s*$firstlink/ and $link_flag ne done){
shift @line;
foreach (@line){s/^\s*//; s/\s*$//;}
@linklist = @line;
$link_flag = done;
}
last if ($title_flag eq done and $link_flag eq done);
}
close(FILE);
print "\n";
if ($in{mode} =~ /^\d/ or $in{mode} eq all1) {
print "
\n";
} else {
$cols=$#titlelist+1;
print "\n";
print "\n";
for ($i=0;$i<=$cols;$i++){
if ($i == 0){
print "| | \n";
} else {
print "$titlelist[$i-1] | \n";
}
}
print "
\n";
}
open(FILE,"< $datafile") || &error("データファイル$datafileが開けません");
while (){
chomp;
next if /^\s*#/;
next if /^\s*$/;
@line = split /,/;
foreach (@line) {s/^\s*//;s/\s*$//;}
$addr = '';
if (!/^\s*$firsttitle/ and !/^\s*$firstlink/) {
$name = shift @line;
$name =~ s/^\s*//; $name =~ s/\s*$//;
next if ($#line == -1);
if ($in{mode} eq all1){
print "\n";
print "| $name | \n";
print "\n";
print "\n";
$wrote = 0;
for ($i=0;$i<=$#line;$i++){
if ($line[$i] =~ /^(\d+)$/){
$ref = $1 - 1;
} else {
$ref = $i;
}
$addr = $line[$ref];
next if ($addr eq '');
print "\n";
print "| $titlelist[$i]: | \n";
if ($linklist[$i] eq none or $linklist[$i] eq ''){
print "$addr | \n";
} else {
print "$addr | \n";
}
print " \n";
$wrote = 1;
}
print "| | \n" if ($wrote == 0);
print " \n";
print " | \n";
} elsif ($in{mode} eq all2){
print "
\n";
print "| $name | \n";
for ($i=0;$i<=$cols-1;$i++){
if ($line[$i] =~ /^(\d+)$/){
$ref = $1 - 1;
} else {
$ref = $i;
}
$addr = $line[$ref];
if ($addr eq '' or $#line == -1){
print " | \n";
} elsif ($linklist[$i] eq none or $linklist[$i] eq ''){
print "$addr | \n";
} else {
print "$addr | \n";
}
}
print "
\n";
} else {
if ($line[$in{mode}] =~ /^(\d+)$/){
$ref = $1 - 1;
} else {
$ref = $in{mode};
}
$addr = $line[$ref];
next if ($addr eq '');
print "\n";
print "| $name | \n";
if ($linklist[$in{mode}] eq none or $linklist[$in{mode}] eq ''){
print "$addr | \n";
} else {
print "$addr | \n";
}
print "
\n";
}
}
}
close(FILE);
print "
\n";
print "\n";
&htmltail;
sub parsedata {
if ($ENV{"REQUEST_METHOD"} eq "GET"){
$data=$ENV{"QUERY_STRING"};
$method = 'GET';
} elsif ($ENV{"REQUEST_METHOD"} eq "POST"){
read(STDIN,$data,$ENV{"CONTENT_LENGTH"});
$method = 'POST'
}
@tmparray=split(/&/,$data);
foreach $string (@tmparray){
($key,$value)=split(/=/,$string);
$in{"$key"}=$value;
}
return(%in);
}
sub htmlhead {
my $title = shift;
$bgimage = "bgcolor=\"$bgcolor\"";
print "Content-type:text/html\n\n";
print "\n";
print "\n";
print "\n";
print "$title\n";
if ($head_insert_en == 1){
print "$head_insert\n";
}
if ($style_sheet_en == 1){
print "\n";
}
print "\n";
print "\n";
}
sub htmltail {
my $mysite = ('http://www.hidekik.com/','http://www.hidekik.com/en/')[$lang];
print "maillsit.cgi Ver. $version
\n";
print "\n";
print "\n";
}
sub error {
my ($msg) = shift;
unlink("$lockfile");
&htmlhead($msg);
print "
$msg\n";
&htmltail;
exit;
}