#!/usr/local/bin/perl # # 日記CGI nicky! Support Script # # 定義部 $Ver="2004/07/12"; $www="."; $cgipath="./nicky.cgi"; $vDir="."; sub InitialNicky { # 最新×日分の表示 $PrintDay=5; $PageCnt=5; # 最新×日分の表示(iMODE) $PrintiDay=1; $PageiCnt=3; # 表示の順番 # Exp:日付順 $Age="r" # 書込順 $Age="t" $Age="r"; # 日記を表示させる時の画面幅 # $NickyWidth="80%"; $NickyLineWidth="1"; $NickyLineSpan="12"; # 年月日の表現 $Year='年'; $Month='月'; $Day='日'; # 曜日の表現 $WEEK=0; # 日記本文の表示 $HonbunColor="#000000"; $HonbunSize="2"; # 日記本文の背景色( $HonbunBgColor="#ffffff"; # 日記タイトルの背景色 $TitleBgColor="#4386b1"; # タイトルの縦幅 $TSize="12"; # タイトル行の先頭に付加する文字列 $TitleHead="■"; # リンク用タグを出力する $LinkTH="No"; # 日付の色 $DateFontColor="#FFFFFF"; # 日付のフォントサイズ $DateSize="2"; # 日記タイトルの文字色 $TitleFontColor="#CCEDFF"; # 日記タイトルのフォントサイズ $TitleSize="2"; # 本文をエフェクトする文字と色 $EffectSTR1="#"; $EffectSTR2=">"; $EffectSTR3="("; $EffectSTR4="#"; $EffectCOL1="#FF0000"; $EffectCOL2="#00FF00"; $EffectCOL3="#0000FF"; $EffectCOL4="#00FFFF"; $LinkOpen="No"; # コメント受付欄のデフォルト縦幅 $CommentRecv="1"; $CommentNameWidth="10"; $CommentMessageWidth="30"; $CommentStrSize="3 color=#000000"; $CommentNameStrSize="3 color=#000000"; # コメントの背景色 $CommentBgColor="#F1F5FA"; # コメントの名前フォント色 $CommentNameColor="#975580"; # コメントの名前フォントサイズ $CommentNameSize="1"; # コメントのフォント色 $CommentFontColor="#3A75AF"; # コメントのフォントサイズ $CommentFontSize="1"; # コメントの文字列 $CommentStr="コメント"; # コメント枠色 $CommentFlColor="#C5D6EB"; # URLを自動リンクする #$UrlLink="Yes"; # 時刻の表示 $PutTimeDefault="Yes"; # 過去ログの単語 $MsgNew="<< NEW"; $MsgOld="OLD >>"; $MsgOldLog="過去ログ"; $MsgOldNEW="最新"; $MsgOldOLD="最古"; $MsgOldOBgCol="#FFFFFF"; $MsgOldCol="#000000"; $MsgOldSize="1"; $MsgOldYBgCol="#FFFFFF"; $MsgOldYFnCol="#000000"; $MsgOldMBgCol="#FFFFFF"; $MsgOldForm="0"; $MsgOld1st="0"; $MsgOldYear="年"; $MsgOldMonth="月"; $MonthSort="UP"; #お絵描き系JavaApplet $image_width=300; $image_height=300; $ReplaySTR="Replay"; $ContinueSTR="Continue"; $JPEG_border="60"; $CompressL="15"; #TitleList $MsgOldTG="・"; $TitleListSort="DOWN"; # その他 # 検索をCGIに吹かせる $PutSerchTagFlag=0; # 最新日記のファイルネーム $NickyHtml="nicky.html"; @monday=('dummy','31','28','31','30','31','30','31','31','30','31','30','31'); #ユーザーカスタマイズモード $UserN="No"; $UserL="No"; $UserR="No"; $UserU="No"; $UserD="No"; $UserLC="No"; $UserRC="No"; $UserUC="No"; $UserDC="No"; $UserCmnt="No"; } # 日記HTML用ヘッダ/フッタファイル名 $NickyConf="./NickyConf.cgi"; $NickyHF="./NickyHF.cgi"; $NickyCustomText="./CustomText.cgi"; $NickyCustomCGI="./CustomCGI.cgi"; $NickyCustomCmntText="./CustomCmntText.cgi"; $NickyCustomCmntCGI="./CustomCmntCGI.cgi"; $TMN="\n#\n#----NickyTerminate----\n#\n"; # # 日付の作成 # sub MakeDateStr { if( !$Date ) { $week=@Week[&GetWeek($year, $month, $day)]; $Date="$year$Year$month$Month$day$Day$week"; if( ($hour >= 0) && ($PutTime eq "Yes") ){ $Date.="$hour:$min"; } } } # # 指定されたファイルを出力する # sub PutFile { local($ret); $ret=0; if( open(FILE, $_[0]) ) { binmode(RDC); while() { print $_; } close(FILE); $ret=1; } $ret; } # #日記ヘッダファイル抽出 # sub NickyGetHead { local($all); if( -e "./NickyHF.cgi" ){ $all=""; open(IN, $NickyHF); while(){ $all.=$_; } close(IN); ($head,$foot,$iHead,$iFoot,$efoot,$head2nd,$foot2nd,$Use2ndHD,$UseListHD,$UseSearchHD,$Use2ndFT,$UseListFT,$UseSearchFT)=split(/$TMN/, $all); } } # # 画像ファイル一覧 # sub PutIllust { local($i, $j); local($mdstr, $cell); local(@daylist, @titlelist, @grplist, @ddlist); my($gfn, @pmonth, $moncol, $mday, $cell, $flag_1st); my($wid, $hei, $gpath, $pw, $ph, $pagecnt, $cnt, $flag_e, $flag_l); my($sizestr, $wnstr, $hnstr, $tg, $ushstr, $usfstr, $psstr); $TLyear="."; #年の後ろに付加する文字 $TLmonth="."; #月の後ろに付加する文字 $TLday="."; #日の後ろに付加する文字 $yearcolor="#708090"; #年の表示色 $moncol="#708090"; #月の表示色 if( $size ){ $pw=$size; $ph=$size; }else{ $pw=200; #画像サムネイルの横幅(デフォルト) $ph=200; #画像サムネイルの縦幅(デフォルト) } if( $wn ){ $pagewid=$wn; }else{ $pagewid=3; #ページ内の横に並べる画像の数 } if( $hn ){ $pagehei=$hn; }else{ $pagehei=3; #ページ内の縦に並べる画像の数 } if( $spacing ){ $spc=$spacing; }else{ $spc=12; } if( ($border == 0) || ($border) ){ $bdr=$border; }else{ $bdr=1; } if( $target ){ $tg=" target=\"$target\""; $tgl="\?target=$target"; } $pagecnt=$pagewid*$pagehei; # # ヘッダの表示。 # nicky!のヘッダ/フッタの編集と切り離したい場合は # ここにヘッダを記述する。 # &NickyGetHead(); if( $usehead eq "first" ){ print $head; }elsif( $usehead eq "second" ){ print $head2nd; }elsif( $UseListHD eq "Yes" ){ print $head2nd; }else{ print $head; } print "
"; $cell=$flag_1st=0; for $gfn( &GetNickyList("r") ) { $NickyFname="$$gfn[0]"; &GetDateFromFname(); &GetNickyFile("$vDir/$NickyFname"); $gpath="$year/$GrpFileName"; if( $GrpFileName ) { ($wid, $hei) = &GetImageSize("$vDir/$gpath"); if( $wid && $hei ) #画像有り確定 { $cnt++; if( $cnt >= (($pagecnt*($page+1)))+1 ){$flag_e=1;last;} # #指定ページまで読み飛ばす # if( $cnt < ($pagecnt * $page)+1 ){ next; } # #段(TR)判定 # if( !($cell % $pagewid) ) { $cell=0; if( $flag_1st ) { print ""; $flag_l=1; } print ""; $flag_1st=1; } #サムネイルサイズ指定無し時は原寸で。 #サムネイルサイズより原寸が小さい場合は原寸で。 if( (!$pw || !ph) || ($pw >= $wid) && ($ph >= $hei) ) { $pwid=$wid; $phei=$hei; } else { #サムネイルサイズ算出 $putw=$pw/$wid; $puth=$ph/$hei; if( $putw > $puth ) { $pwid=int($wid*$puth); $phei=int($hei*$puth); } else { $pwid=int($wid*$putw); $phei=int($hei*$putw); } } # # ここで画像を表示する # $mdstr=""; print ""; } #if( $wid && $hei ) } # if( $GrpFileName ) } if( $cell < $pagewid ) { my($zan, $ii); $zan=$pagewid-$cell; if( $flag_l ) { print ""; } else { for($ii=0;$ii<$zan;$ii++) { print ""; } } } print "
"; #日付を表示する if( $ps ne "OFF" ){ print "$year.$month.$day($wid×$hei)
"; }else{ print "$year.$month.$day
"; } print $mdstr; print "\"$wid×$hei\""; $cell++; print "
  
\n"; # #ページの出力 # $sizestr="\?size=$size" if( $size ); $wnstr="\?wn=$wn" if( $wn ); $hnstr="\?hn=$hn" if( $hn ); $spcstr="\?spacing=$spacing" if( $spacing ); $bdrstr="\?border=$border" if( ($border == 0) || $border ); $ushstr="\?usehead=$usehead" if( $usehead ); $usfstr="\?usefoot=$usefoot" if( $usefoot ); $psstr="\?ps=$ps" if( $ps ); if( ($flag_e) || ($page) ){ print "
\n"; if( $page ){ $page--; print "<<prev  "; $page++; } if( $flag_e ){ $page++; print "next>>"; } print "
\n"; } # # フッタの表示。 # nicky!のヘッダ/フッタの編集と切り離したい場合は # ここにフッタを記述する。 # if( $usefoot eq "first" ){ print $foot; }elsif( $usefoot eq "second" ){ print $foot2nd; }elsif( $UseListFT eq "Yes" ){ print $foot2nd; }else{ print $foot; } } sub PutIllustIdx { local($i, $j); local($mdstr, $cell); local(@daylist, @titlelist, @grplist, @ddlist); my($gfn, @pmonth, $moncol, $mday, $cell, $flag_1st); my($wid, $hei, $gpath, $pw, $ph, $pagecnt, $cnt, $flag_e, $flag_l); my($sizestr, $wnstr, $hnstr, $tg, $ushstr, $usfstr, $psstr, $pt); $TLyear="."; #年の後ろに付加する文字 $TLmonth="."; #月の後ろに付加する文字 $TLday="."; #日の後ろに付加する文字 $yearcolor="#708090"; #年の表示色 $moncol="#708090"; #月の表示色 $flag_e=0; if( $size ){ $pw=$size; $ph=$size; }else{ $pw=200; #画像サムネイルの横幅(デフォルト) $ph=200; #画像サムネイルの縦幅(デフォルト) } if( $wn ){ $pagewid=$wn; }else{ $pagewid=3; #ページ内の横に並べる画像の数 } if( $hn ){ $pagehei=$hn; }else{ $pagehei=3; #ページ内の縦に並べる画像の数 } if( $spacing ){ $spc=$spacing; }else{ $spc=12; } if( ($border == 0) || ($border) ){ $bdr=$border; }else{ $bdr=1; } if( $target ){ $tg=" target=\"$target\""; $tgl="\?target=$target"; } $pagecnt=$pagewid*$pagehei; # # ヘッダの表示。 # nicky!のヘッダ/フッタの編集と切り離したい場合は # ここにヘッダを記述する。 # &NickyGetHead(); if( $usehead eq "first" ){ print $head; }elsif( $usehead eq "second" ){ print $head2nd; }elsif( $UseListHD eq "Yes" ){ print $head2nd; }else{ print $head; } print ""; $cell=$flag_1st=0; if( !@idxl ) { @idxl=&GetIndexList(); @lst = sort @idxl; } for $gfn( @lst ){ $year=substr($gfn, 8, 4); $month=substr($gfn, 12,2); open(RDI, "$vDir/$gfn"); binmode(RDI); while(){ $data=$_; ($day, $daysub, $Title, $GrpFileName)=split(/\x01/, $data); &MakeNickyFname(); $GrpFileName=~s/ |\r|\n//g; $gpath="$year/$GrpFileName"; if( $GrpFileName ) { ($wid, $hei) = &GetImageSize("$vDir/$gpath"); if( $wid && $hei ) #画像有り確定 { $cnt++; if( $cnt >= (($pagecnt*($page+1)))+1 ){$flag_e=1;last;} # #指定ページまで読み飛ばす # if( $cnt < ($pagecnt * $page)+1 ){ next; } # #段(TR)判定 # if( !($cell % $pagewid) ) { $cell=0; if( $flag_1st ) { print ""; $flag_l=1; } print ""; $flag_1st=1; } #サムネイルサイズ指定無し時は原寸で。 #サムネイルサイズより原寸が小さい場合は原寸で。 if( (!$pw || !ph) || ($pw >= $wid) && ($ph >= $hei) ) { $pwid=$wid; $phei=$hei; } else { #サムネイルサイズ算出 $putw=$pw/$wid; $puth=$ph/$hei; if( $putw > $puth ) { $pwid=int($wid*$puth); $phei=int($hei*$puth); } else { $pwid=int($wid*$putw); $phei=int($hei*$putw); } } # # ここで画像を表示する # # $mdstr=""; $pt=&MakeMonthFname($year, $month); $mdstr=""; print ""; } #if( $wid && $hei ) } # if( $GrpFileName ) } close(RDI); last if( $flag_e ); } if( $cell < $pagewid ) { my($zan, $ii); $zan=$pagewid-$cell; if( $flag_l ) { print ""; } else { for($ii=0;$ii<$zan;$ii++) { print ""; } } } print "
"; #日付を表示する if( $ps ne "OFF" ){ print "$year.$month.$day($wid×$hei)
"; }else{ print "$year.$month.$day
"; } print $mdstr; print "\"$wid×$hei\""; $cell++; print "
  
\n"; # #ページの出力 # $sizestr="\?size=$size" if( $size ); $wnstr="\?wn=$wn" if( $wn ); $hnstr="\?hn=$hn" if( $hn ); $spcstr="\?spacing=$spacing" if( $spacing ); $bdrstr="\?border=$border" if( ($border == 0) || $border ); $ushstr="\?usehead=$usehead" if( $usehead ); $usfstr="\?usefoot=$usefoot" if( $usefoot ); $psstr="\?ps=$ps" if( $ps ); if( ($flag_e) || ($page) ){ print "
\n"; if( $page ){ $page--; print "<<prev  "; $page++; } if( $flag_e ){ $page++; print "next>>"; } print "
\n"; } # # フッタの表示。 # nicky!のヘッダ/フッタの編集と切り離したい場合は # ここにフッタを記述する。 # if( $usefoot eq "first" ){ print $foot; }elsif( $usefoot eq "second" ){ print $foot2nd; }elsif( $UseListFT eq "Yes" ){ print $foot2nd; }else{ print $foot; } } #checkStart # #タイトル一覧 # sub PutTitleListSub { local($tcnt)=@_[0]; my($a, $yd, $i, $j); print ""; print ""; for $a(@grplist) { print "$a
"; } print "
"; print ""; for $a(@daylist) { print "$a
"; $yd=@ddlist[$j]; $j++; } print "
"; print ""; for $a(@titlelist) { print "$a
"; } print "
"; print ""; undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; undef @gpl; undef @ddl; undef @dyl; } # #タイトルリスト # sub PutTitleList { local($i, $yr, $mn, $flag_1st); local($mdstr, $clm, $tcnt); local(@daylist, @titlelist, @grplist, @ddlist); my($opt, $gfn, $cltg, $vct); #1ページ内に表示する件数 if( !$num ){ $num=20; } $pcnt=0; &NickyGetHead(); if( $UseListHD eq "Yes" ){ print $head2nd; }else{ print $head; } $tg="target=\"$target\"" if( $target ); &PutCalenderT() if( $clnum ); print "
" if( $align ); if( $TitleListSort eq "UP" ){ $opt="r"; }else{ $opt="tr"; } if( $num >=0 ){ print ""; for $gfn( &GetNickyList($opt) ) { $NickyFname=$$gfn[0]; &GetDateFromFname(); if( $MON ) { if( ($MON != $month) || ($YR != $year) ) { next; } } else { $pcnt++; if( $scnt >= $pcnt ) { next; } } &GetNickyFile("$vDir/$NickyFname"); if( !$Title && !$Message ) { $pcnt--; next; } $mdstr=""; if( $yr != $year ) { if( $flag_1st ) { &PutTitleListSub($tcnt); print "\n"; } print ""; print ""; print "\n"; print ""; $yr=$year; $mn=$month; $flag_1st=1; $i=0; $clm=0; $tcnt=0; } elsif( $mn != $month ) { &PutTitleListSub($tcnt); print "\n"; print ""; print "
"; #check1 print "$mdstr$year$TLyear
$mdstr$month$TLmonth"; print "
$mdstr$month$TLmonth"; $mn=$month; $i=0; $tcnt=0; } if( $GrpFileName ) { @grplist[$i]=$MsgOldTG; } else { @grplist[$i]=""; } @daylist[$i]="$mdstr$day$TLday"; @ddlist[$i]=$day; @titlelist[$i]="$mdstr$Title"; $tcnt++; $i++; if( $pcnt >= $num+$scnt ) { last; } } &PutTitleListSub($tcnt); print "

"; } print "
\n" if( $align ); $flag=0; $tg="\?target=$target" if( $target ); $mtg="\?monthlist=OFF" if( $monthlist eq "OFF" ); $algtg="\?align=$align" if( $align ); $brntg="\?brnum=$brnum" if( $brnum ); $cltg="\?clnum=$clnum" if( $clnum ); $vct="\?vect=$vect" if( $vect ); if( $scnt > 0 ) { $ppage=$scnt-$num; print "\<\;prev"; $flag=1; } if( ($num >=0 ) && ($lcnt > $num+$scnt ) && !$MON ) { print " / " if( $scnt > 0 ); print "next>"; $flag=1; } print "

" if( $flag ); $brtg=("
")x$brnum; print $brtg; $brtag="\?brnum=$brnum" if( $brnum ); &PutMonthTag("UP") if( $monthlist ne "OFF" ); if( $UseListFT eq "Yes" ) { print $foot2nd; } else { print $foot; } } #Kano3 sub MakeMonthFname{ my($y, $m)=@_; my($str); $str=sprintf("$LogFname%04d%02d.html", $y, $m); $str; } sub MakeMonthIndexFname{ my($y, $m)=@_; my($str); $str=sprintf("nkyIndex%04d%02d.cgi", $y, $m); $str; } sub PutTitleListIdx { local($i, $yr, $mn, $flag_1st, $flag_last, $pt); local($mdstr, $clm, $tcnt); local(@daylist, @titlelist, @grplist, @ddlist, @idxl, @lst); my($opt, $gfn); #1ページ内に表示する件数 if( !$num ) { $num=20; } $pcnt=0; $flag_last=0; &NickyGetHead(); if( $UseListHD eq "Yes" ) { print $head2nd; } else { print $head; } $tg="target=\"$target\"" if( $target ); &PutCalenderTidx() if( $clnum ); print "
" if( $align ); if( !@idxl ) { @idxl=&GetIndexList(); @lst = sort @idxl; if( $TitleListSort eq "UP" ){ @lst=reverse(@lst); } } if( $num >=0 ){ print ""; for $gfn( @lst ){ $idxcnt--; $year=substr($gfn, 8, 4); $month=substr($gfn, 12,2); open(RDI, "$vDir/$gfn"); binmode(RDI); while(){ $data=$_; ($day, $daysub, $Title, $GrpFileName)=split(/\x01/, $data); &MakeNickyFname(); if( $MON ) { if( ($MON != $month) || ($YR != $year) ) { next; } } else { $pcnt++; if( $scnt >= $pcnt ) { next; } } # &GetNickyFile("$vDir/$NickyFname"); $pt=&MakeMonthFname($year, $month); $mdstr=""; if( $yr != $year ) { if( $flag_1st ) { &PutTitleListSub($tcnt); print "\n"; } print ""; print ""; print "\n"; print ""; $yr=$year; $mn=$month; $flag_1st=1; $i=0; $clm=0; $tcnt=0; } elsif( $mn != $month ) { &PutTitleListSub($tcnt); print "\n"; print ""; print "
"; #check1 print "$mdstr$year$TLyear
$mdstr$month$TLmonth"; print "
$mdstr$month$TLmonth"; $mn=$month; $i=0; $tcnt=0; } if( $GrpFileName ) { @grplist[$i]=$MsgOldTG; } else { @grplist[$i]=""; } @daylist[$i]="$mdstr$day$TLday"; @ddlist[$i]=$day; @titlelist[$i]="$mdstr$Title"; $tcnt++; $i++; if( $pcnt >= $num+$scnt ) { $flag_last=1; last; } } close(RDI); if( $flag_last ){ last; } } &PutTitleListSub($tcnt); print "

"; } print "
\n" if( $align ); $flag=0; if( $target ) { $tg="\?target=$target"; } if( $monthlist eq "OFF" ) { $mtg="\?monthlist=OFF"; } $algtg="\?align=$align" if( $align ); $brntg="\?brnum=$brnum" if( $brnum ); $cltg="\?clnum=$clnum" if( $clnum ); if( $scnt ) { $ppage=$scnt-$num; print "\<\;prev"; $flag=1; } if( ($num >=0 ) && ($flag_last || $idxcnt) ) { if( $scnt ) { print "/"; } print "next>"; $flag=1; } if( $flag ) { print "

"; } $brtg=("
")x$brnum; print $brtg; $brtag="\?brnum=$brnum" if( $brnum ); if( $monthlist ne "OFF" ) { &PutMonthTag("UP"); } if( $UseListFT eq "Yes" ) { print $foot2nd; } else { print $foot; } } #checkEnd # #タイトルリスト(iMODE用) # sub PutTitleListIMODE { local($str); my($yr, $mn, $pcnt, $flag); my($opt, $gfn, $sts, $mdstr, $ppage); # $TLyear="."; #年の後ろに付加する文字 # $TLmonth="."; #月の後ろに付加する文字 # $TLday="."; #日の後ろに付加する文字 #1ページ内に表示する件数 if( !$num ) { $num=16; } $pcnt=0; $sts=&ReqJcode(); # nicky.cgiで設定したiMODE用ヘッダを有効にしたい場合を以下を有効にする # &NickyGetHead(); # if( $sts ) # { # &jcode'euc2sjis(\$iHead); # } # print $iHead; &PutHTMLheaderSJIS(); print ""; if( $TitleListSort eq "UP" ) { $opt="r"; } else{ $opt="tr"; } for $gfn( &GetNickyList($opt) ) { $pcnt++; if( $scnt >= $pcnt ) { next; } $NickyFname=$$gfn[0]; &GetDateFromFname(); &GetNickyFile("$vDir/$NickyFname"); $mdstr=""; # if( $yr != $year ) # { # $str="$year$TLyear
"; # &zenkakuhankaku(); # print $str; # $yr=$year; # } if( $mn != $month ) { $str="$year$TLyear$month$TLmonth
"; &zenkakuhankaku(); print $str; $mn=$month; } #画像有りの印(iMODEでの表示は考えていません) # if( $GrpFileName ) # { # $str=$MsgOldTG; # &zenkakuhankaku(); # print $MsgOldTG; # } # else # { # print " "; # } $str="$mdstr$day$TLday
$Title
"; &zenkakuhankaku(); print $str; if( $pcnt >= $num+$scnt ) { last; } } if( $num != 16 ) { $numstr="\?num=$num"; } if( $scnt ) { $ppage=$scnt-$num; print "\<\;prev"; } if( $pcnt >= $num+$scnt ) { if( $scnt ) { print "/"; } print "next>"; } # print $iFoot; print "\n"; } sub PutTitleListIMODEidx { local($str); my($yr, $mn, $pcnt, $flag); my($opt, $gfn, $sts, $mdstr, $ppage); # $TLyear="."; #年の後ろに付加する文字 # $TLmonth="."; #月の後ろに付加する文字 # $TLday="."; #日の後ろに付加する文字 #1ページ内に表示する件数 if( !$num ) { $num=16; } $pcnt=0; $sts=&ReqJcode(); # nicky.cgiで設定したiMODE用ヘッダを有効にしたい場合を以下を有効にする # &NickyGetHead(); # if( $sts ) # { # &jcode'euc2sjis(\$iHead); # } # print $iHead; &PutHTMLheaderSJIS(); print ""; if( $TitleListSort eq "UP" ) { $opt="r"; } else{ $opt="tr"; } if( !@idxl ) { @idxl=&GetIndexList(); @lst = sort @idxl; if( $TitleListSort eq "UP" ){ @lst=reverse(@lst); } } for $gfn( @lst ){ $year=substr($gfn, 8, 4); $month=substr($gfn, 12,2); open(RDI, "$vDir/$gfn"); binmode(RDI); while(){ $data=$_; $pcnt++; if( $scnt >= $pcnt ) { next; } ($day, $daysub, $Title, $GrpFileName)=split(/\x01/, $data); &MakeNickyFname(); $NickyFname=$$gfn[0]; # &GetDateFromFname(); # &GetNickyFile("$vDir/$NickyFname"); # $mdstr=""; $pt=&MakeMonthFname($year, $month); $mdstr=""; if( $mn != $month ) { $str="$year$TLyear$month$TLmonth
"; &zenkakuhankaku(); print $str; $mn=$month; } $str="$mdstr$day$TLday
$Title
"; &zenkakuhankaku(); print $str; if( $pcnt >= $num+$scnt ) { last; } } close(RDI); if( $pcnt >= $num+$scnt ) { last; } } if( $num != 16 ) { $numstr="\?num=$num"; } if( $scnt ) { $ppage=$scnt-$num; print "\<\;prev"; } if( $pcnt >= $num+$scnt ) { if( $scnt ) { print "/"; } print "next>"; } # print $iFoot; print "\n"; } # # DayList(月単位表示) # sub PutDayListSub { local($tcnt)=@_[0]; my($a, $yd, $i, $j); print ""; my(@gpl, @ddl, @dyl); $yd=$j=0; if( $TitleListSort eq "UP" ) { @gpl=reverse(@grplist); @ddl=reverse(@ddlist); @dyl=reverse(@daylist); } else { @gpl=@grplist; @ddl=@ddlist; @dyl=@daylist; } for $a(@gpl) { if( @ddl[$j] != $yd ) { for($i=0; $i<(@ddl[$j]-$yd-1); $i++) { print "
"; } print "$a @dyl[$j]
"; } $yd=@ddl[$j++]; } print ""; print ""; undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; undef @gpl; undef @ddl; undef @dyl; } sub PutDayList { local($i, $j, $yr, $mn, $flag_1st); local($mdstr, $clm, $tcnt); local(@daylist, @titlelist, @grplist, @ddlist); my($opt, $gfn); &NickyGetHead(); if( $UseListHD eq "Yes" ) { print $head2nd; } else { print $head; } print ""; if( $TitleListSort eq "UP" ) { $opt="r"; } else{ $opt="tr"; } for $gfn( &GetNickyList($opt) ) { $NickyFname=$$gfn[0]; &GetDateFromFname(); &GetNickyFile($NickyFname); $mdstr=""; if( $yr != $year ) { if( $flag_1st ) { &PutTitleListSub($tcnt); print "\n"; } print ""; print ""; print ""; print ""; print "\n"; print ""; $yr=$year; $mn=$month; $flag_1st=1; $i=$j=0; $clm=0; $tcnt=0; } elsif( $mn != $month ) { &PutTitleListSub($tcnt); if($clm++ > 4){ print "\n"; $clm=0; } print ""; print "
"; print "$mdstr$year年
$mdstr$month月"; print "
$mdstr$month月"; $mn=$month; $i=$j=0; $tcnt=0; } if( $GrpFileName ) { @grplist[$i]=$MsgOldTG; } else { @grplist[$i]=""; } @daylist[$i]="$mdstr$day日"; @ddlist[$i]=$day; $i++; } &PutTitleListSub($tcnt); print "
"; if( $UseListFT eq "Yes" ) { print $foot2nd; } else { print $foot; } } # #タイトル一覧(カレンダー型:日の表示[月単位]) # sub PutCalenderSub { my($mday, $wcnt, $str)=@_; my($a, $yd, $i, $j, $wk, $ii); my(@gpl, @ddl, @dyl, @pmonth, $per, $moncol, $strm); my(@comment,$wkcols,$wkcole); #月の表示色 if( $monthcolor ) { $moncol="\#$monthcolor"; } else { $moncol="#708090"; } if( $lang & 1 ) { @pmonth=("dummy","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); } else { @pmonth=("dummy","1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); } $yd=$j=0; @gpl=@grplist; @ddl=@ddlist; @dyl=@daylist; $per=int($wcnt/$mday*100); # # 月の表示 # print ""; &SetWeekStr($lang&1); #曜日の表示 print ""; if( $weekcolor ) { $wkcols=""; $wkcole=""; } for($i=0;$i<7;$i++) { print ""; } print "\n"; # print ""; #最初の週 $wk=&GetWeek($yr, $mn, 0); $wk++; $wk %= 7; for($i=0;$i<$wk;$i++) { print ""; } $j=1; #日付カウンタ $yd=0; #@ddlカウンタ for(;$i<7;$i++,$j++) { if( @ddl[$yd] == $j ) { print ""; $yd++; } else { print ""; } } print ""; #最初の週以降 for(;$j<=$mday;$j++) { if( @ddl[$yd] == $j ) { print ""; $yd++; } else { print ""; } if( ((($j+$wk) % 7) == 0) && (($j+1)<=$mday) ) { print ""; } } #最後の週 if( ($j+$wk-1)%7 ){ for(;($j+$wk-1)%7;$j++) { print ""; } } print ""; if( $str ){ print ""; } # # その月のコメントを表示する # # print ""; print "
"; $strm=@pmonth[$mn]; if( $lang & 1 ){ print $strm; if( $lang & 2 ){ print " / $YR"; } }else{ # if( $lang & 2 ){ # print "$YR年 "; # } print "$strm"; } print ""; if( $monthform eq "day" ) # 月の表示(書き込み数/日数) { print "($wcnt/$mday:$per\%)"; } elsif( $monthform eq "per" ) # 月の表示(書き込み率) { print "($per\%)"; } # else # { # print "@pmonth[$mn]$TLmonth"; # } print "
$wkcols @Week[$i]$wkcole
 @gpl[$yd]@dyl[$yd]$j$TLday
@gpl[$yd]@dyl[$yd]$j$TLday
 

$str
"; # print ""; # if( $year == 2003 ){ #年判定 # if( $mn == 3 ) #月判定 # { # print "眠い月だった"; # } # elsif( $mn == 4 ) #月判定 # { # print "
席替えがあった"; # } # } # print "
"; # print "
\n"; undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; undef @gpl; undef @ddl; undef @dyl; } #カレンダー sub PutCalender { local($i, $j, $yr, $mn, $flag_1st); local($mdstr, $mnl, $clm); local(@daylist, @titlelist, @grplist, @ddlist); my($opt, $mday, $wcnt, @ydl); $wn=3 if( !$wn ); # # ヘッダの表示。 # nicky!のヘッダ/フッタの編集と切り離したい場合は # ここにヘッダを記述する。 # if( $headder ) { print< Calendar
CALENDER_HEAD_EOF ; } else { &NickyGetHead(); if( $UseListHD eq "Yes" ) { print $head2nd; } else { print $head; } } if( $spacing ) { $spc=$spacing; } else { $spc=32; } $TLyearsz="6 face=\"Times New Roman Bold\""; $TLmonthsz="5 face=\"Times New Roman Bold\""; undef $TLmonth; undef $TLday; $yearcolor="#708090" if( !$yearcolor ); #年の表示色 print "\n\n"; # if( $SaveHTML eq "ON" ){ # &PutCalenderIdx(); # }else{ for $NickyFname( &GetNickyListDay() ) { &GetDateFromFname(); &GetNickyFile("$vDir/$NickyFname"); $mdstr=""; if( $yr != $year ) { if( $flag_1st ) { $mday=&GetMonthDay($yr, $mn); &PutCalenderSub($mday, $wcnt, ""); for(;$clm<$wn;$clm++) { print ""; } print "\n\n"; print "\n$year$TLyear\n"; print "\n"; print "\n
"; } print "

"; # # 年の表示(リンクする場合は上を有効に、下をコメントアウトに) # # print "\n$mdstr$year$TLyear
"; $mnl=$mdstr; $yr=$year; $mn=$month; $flag_1st=1; $i=$j=0; $clm=0; $wcnt=0; } elsif( $mn != $month ) { $mday=&GetMonthDay($yr, $mn); &PutCalenderSub($mday, $wcnt, ""); $clm++; if( $clm >= $wn ) { print "
"; $clm=0; } else { print ""; } $mn=$month; $mnl=$mdstr; $i=$j=0; $wcnt=0; } if( $GrpFileName && $grp) { #画像有りの印を表示しない場合は↓をコメントにする @grplist[$i]=$MsgOldTG; } else { @grplist[$i]=""; } $day1=sprintf("%d", $day); @daylist[$i]="$mdstr$day1$TLday"; @ddlist[$i]=$day1; $i++; $wcnt++; } $mday=&GetMonthDay($yr, $mn); &PutCalenderSub($mday, $wcnt, ""); # } for(;$clm<$wn;$clm++) { print ""; } print "
"; # # フッタの表示。 # nicky!のヘッダ/フッタの編集と切り離したい場合は # ここにフッタを記述する。 # if( $headder ) { print "-- back --

\n"; } else { if( $UseListFT eq "Yes" ) { print $foot2nd; } else { print $foot; } } } sub PutCalenderIdx { my($oday, $pt); $oday=$i=0; @idxl=&GetIndexList() if( !@idxl ); @lst = sort @idxl; if( $TitleListSort eq "UP" ){ @lst=reverse(@lst); } for $gfn( @lst ){ $year=substr($gfn, 8, 4); $month=substr($gfn, 12,2); open(RDI, "$vDir/$gfn"); binmode(RDI); while(){ $data=$_; ($day, $daysub, $Title, $GrpFileName)=split(/\x01/, $data); next if( $day == $oday ); $oday=$day; $pt=&MakeMonthFname($year, $month); $mdstr=""; if( $yr != $year ) { $mday=&GetMonthDay($year, $month); if( $flag_1st ) { &PutCalenderSub($mday, $wcnt, ""); for(;$clm<$wn;$clm++) { print ""; } } print "
"; # # 年の表示(リンクする場合は上を有効に、下をコメントアウトに) # print "$year$TLyear"; print ""; $mnl=$mdstr; $yr=$year; $mn=$month; $flag_1st=1; $i=$j=0; $clm=0; $wcnt=0; } elsif( $mn != $month ) { &PutCalenderSub($mday, $wcnt, ""); $mday=&GetMonthDay($year, $month); $clm++; if( $clm >= $wn ) { print ""; print ""; $clm=0; } else { print ""; } $mn=$month; $mnl=$mdstr; $i=$j=0; $wcnt=0; } if( $GrpFileName && $grp) { #画像有りの印を表示しない場合は↓をコメントにする @grplist[$i]=$MsgOldTG; } else { @grplist[$i]=""; } $day1=sprintf("%d", $day); @daylist[$i]="$mdstr$day1
$TLday"; @ddlist[$i]=$day1; $i++; $wcnt++; } close(RDI); } &PutCalenderSub($mday, $wcnt, ""); } #カレンダー/from TitleList sub PutCalenderT { local($i, $j, $yr, $mn, $flag_1st); local($mdstr, $mnl, $clm); local(@daylist, @titlelist, @grplist, @ddlist); my($opt, $mday, $wcnt, @ydl, $TLys, $TLms, $TLm, $TLd, $pfag); my($flag_b, $yr_b, $m_b, $flag_n, $yr_n, $m_n, $flag_c, $str); $flag_b=$flag_n=$flag_c=0; $wn=3 if( !$wn ); if( $spacing ){ $spc=$spacing; }else{ $spc=32; } $spc=0; $TLys=$TLyearsz; $TLms=$TLmonthsz; $TLm=$TLmonth; $TLd=$TLday; $TLyearsz="6 face=\"Times New Roman Bold\""; $TLmonthsz="5 face=\"Times New Roman Bold\""; undef $TLmonth; undef $TLday; $yearcolor="#708090" if( !$yearcolor ); #年の表示色 print "
"; undef @grplist; undef @ddlist; undef @daylist; @ydl=&GetNickyListDay(); @ydl=sort @ydl; if( !$YR || !$MON ){ $YR=$last_year; $MON=$last_month; } for $NickyFname( @ydl ) { &GetDateFromFname(); if( ($year == $YR) && ($month == $MON) ){ $flag_c=1; &GetNickyFile("$vDir/$NickyFname"); next if( !$Title && !$Message ); $mdstr=""; if( $GrpFileName && $grp) { #画像有りの印を表示しない場合は↓をコメントにする @grplist[$i]=$MsgOldTG; } else { @grplist[$i]=""; } $day1=sprintf("%d", $day); @daylist[$i]="$mdstr$day1$TLday"; @ddlist[$i]=$day1; $i++; $wcnt++; }else{ if( $flag_c ){ $flag_n=1; $yr_n=$year; $m_n=$month; last; }else{ $flag_b=1; $yr_b=$year; $m_b=$month; } } } $mn=$MON; $mday=&GetMonthDay($YR, $MON); $yr=$YR; $str=""; if( $vect eq "ON" ){ my($tg,$mtg,$algtg,$brntg,$cltg,$nm,$lng,$str2,$vct); $vct="\?vect=ON" if( $vect ); $tg="\?target=$target" if( $target ); $mtg="\?monthlist=OFF" if( $monthlist eq "OFF" ); $lng="\?lang=$lang" if( $lang ); $algtg="\?align=$align" if( $align ); $brntg="\?brnum=$brnum" if( $brnum ); $nm="\?num=$num" if( $num ); $cltg="\?clnum=$clnum" if( $clnum ); $str2="$cltg$vct$nm$brntg$algtg$mtg$lng$tg"; if( $flag_n ){ $str="$str<"; $str="$str / " if( $flag_b ); #Takamura1 } if( $flag_b ){ $str="$str>"; } } &PutCalenderSub($mday, $wcnt, $str); $TLmonth=$TLm; $TLday=$TLd; $TLyearsz=$TLys; $TLmonthsz=$TLms; print "
"; } sub PutCalenderTidx { local($i, $j, $yr, $mn, $flag_1st, $pt); local($mdstr, $mnl, $clm); local(@daylist, @titlelist, @grplist, @ddlist); my($opt, $mday, $wcnt, @ydl, $TLys, $TLms, $pfag, $oday); $i=$oday=0; $wn=3 if( !$wn ); if( $spacing ){ $spc=$spacing; }else{ $spc=32; } $spc=0; $TLys=$TLyearsz; $TLms=$TLmonthsz; $TLyearsz="6 face=\"Times New Roman Bold\""; $TLmonthsz="5 face=\"Times New Roman Bold\""; undef $TLmonth; undef $TLday; $yearcolor="#708090" if( !$yearcolor ); #年の表示色 print "
"; @idxl=&GetIndexList() if( !@idxl ); @lst = sort @idxl; if( $TitleListSort eq "UP" ){ @lst=reverse(@lst); } for $gfn( @lst ){ $year=substr($gfn, 8, 4); $month=substr($gfn, 12,2); open(RDI, "$vDir/$gfn"); binmode(RDI); while(){ $data=$_; ($day, $daysub, $Title, $GrpFileName)=split(/\x01/, $data); next if( $day == $oday ); $oday=$day; &MakeNickyFname(); # &GetNickyFile("$vDir/$NickyFname"); $pt=&MakeMonthFname($year, $month); $mdstr=""; if( $yr != $year ) { $mday=&GetMonthDay($year, $month); if( $flag_1st ) { if( (!$MON) || (($mn) == $MON) && (($year+1) == $YR)){ &PutCalenderSub($mday, $wcnt, ""); $pflag=1; last; } for(;$clm<$wn;$clm++) { # print ""; } } $mnl=$mdstr; $yr=$year; $mn=$month; $flag_1st=1; $i=$j=0; $clm=0; $wcnt=0; } elsif( $mn != $month ) { if( (($MON) && ($mn == $MON) && ($year == $YR)) ){ &PutCalenderSub($mday, $wcnt, ""); $pflag=1; last; } undef @grplist; undef @ddlist; undef @daylist; $mday=&GetMonthDay($year, $month); $clm++; if( $clm >= $wn ) { $clm=0; } $mn=$month; $mnl=$mdstr; $i=$j=0; $wcnt=0; } if( $GrpFileName && $grp) { #画像有りの印を表示しない場合は↓をコメントにする @grplist[$i]=$MsgOldTG; } else { @grplist[$i]=""; } $day1=sprintf("%d", $day); @daylist[$i]="$mdstr$day1$TLday"; @ddlist[$i]=$day1; $i++; $wcnt++; } close(RDI); last if( $pflag ); } if( !$pflag ){ &PutCalenderSub($mday, $wcnt, ""); } $TLyearsz=$TLys; $TLmonthsz=$TLms; print "
"; } # # 月単位のリンクタグを出力 # para="DOWN":下 sub PutMonthTag { my($para, $lnk)=@_; my($gfn); local($gomi, $fname, $oyear, $omon, $mon, $numtg); $oyear=$omon=0; $numtg="\?num=$num" if( $num < 0 ); print "\n"; print "\n
"; print "\n"; if( $SaveHTML eq "ON-DUMMY" ){ @idxl=&GetIndexList(); for $gfn( sort @idxl ){ #nkyIndex200402.cgi $year=substr($gfn, 8, 4); $mon=substr($gfn, 12,2); if( ($oyear != $year) || ($omon != $mon) ){ if( $oyear != $year ){ if( $oyear ){ print "\n"; } print "\n"; } print "\n
$year$MsgOldYear"; $oyear=$year; $omon=0; } if( $mkHTML ) { $fn=&MakeMonthFname($year, $mon); if( $mkHTML ){ print "$mon$MsgOldMonth "; }else{ print "$mon$MsgOldMonth "; } }else{ print "$mon$MsgOldMonth "; } $omon=$mon; } } }else{ for $gfn( &GetNickyList("tr") ) { ($gomi, $year, $fname)=split(/\//, $$gfn[0]); $mon=substr($fname, 0, 2); if( ($oyear != $year) || ($omon != $mon) ) { if( $oyear != $year ) { if( $oyear ){ print "
$year$MsgOldYear"; $oyear=$year; $omon=0; } print "$mon$MsgOldMonth "; #check2 $omon=$mon; } } } print "
"; #check3 print "
\n"; } # いわゆる basename。 # BaseNameをreqすりゃいいんだけど。 sub BaseName { local($c); split(/\/|\\|\:/, $_[0]); for (@_) { $c = $_; } $c; } # 拡張子を取得 sub GetExt { local($p1, $n); $p1=""; $n=rindex(@_[0], "\."); if( ($n > 0) && (length(@_[0]) > $n) ) { $p1=substr(@_[0], $n+1); } $p1; } #年月よりその月の日数を取得 sub GetMonthDay { my($my, $mm)=@_; if( $mm == 2 ) { if ((($my % 4 == 0) && ($my % 100 != 0)) || ($my % 400 == 0)) { @monday[2] = 29; } else { @monday[2] = 28; } } @monday[$mm]; } sub zenkakuhankaku { &jcode'z2h_euc(\$str); &jcode'tr(\$str, "0123456789(", "0123456789("); &jcode'tr(\$str, "ABCDEFGHIJKLMNOPQRSTUVWXYZ", "ABCDEFGHIJKLMNOPQRSTUVWXYZ"); &jcode'tr(\$str, "abcdefghijklmnopqrstuvwxyz", "abcdefghijklmnopqrstuvwxyz"); &jcode'tr(\$str, "!#$%&()=|−^¥‘{+*}<>?_@;:,[]/", "!#\$%&()\=|-^\\`{+*}<>\?_@;:,[]\/"); &jcode'euc2sjis(\$str); } sub SetWeekStr { my($wk)=@_; # # ゆくゆくは文字列の選択もサポートするのでここに記述 # if( $wk == 1 ) { # @Week=('Sun','Mon','Tue','Wed','Thu','Fri','Sat'); @Week=('Su','Mo','Tu','We','Th','Fr','Sa'); } else { @Week=('日','月','火','水','木','金','土'); } } # # Setup関連 # sub ReadSetup { &InitialNicky(); #ファイルに設定項目が落ちている場合を #想定して読む前に一通り設定する。 if( open(RD, "./NickyConf.cgi") ) { binmode(RD); while() { chop; ($arg,$val)=split(/=/,$_,2); ${$arg}=$val; } close(RD); } &SetWeekStr($WEEK); } sub ConvertHtmlCode { my($str)=@_[0]; $str=~s//>/g; $str=~s/\"/"/g; $str; } # # 日記用ファイルネーム作成 # ディレクトリ:$NickyDir # ファイルネーム:$NickyFname # サーチ用パス:$NickySPath # sub MakeNickyDir { $NickyDir="\./$year"; } sub MakeNickyFname { local($fname); my($i, $fn, @flist); &MakeNickyDir(); $fname=sprintf("%02d%02d", $month, $day); if( !$daysub ) { $i=0; $fn="^$NickyDir/$fname.\\.nky\$"; @flist=&GetFileList($fn); $i=$#flist; $i++; $daysub=sprintf("%c", 0x41+$i); } $NickyFname=sprintf("%s/%s%s.nky", $NickyDir, $fname, $daysub); $NickySPath=sprintf("%s/%s.\\.nky", $NickyDir, $fname); $NickyComment=sprintf("%s/%s%s.cmnt", $NickyDir, $fname, $daysub); } # # ファイルからグローバル変数に取り込む # sub GetNickyFile { local($str); open(RRDD, $_[0]); binmode(RRDD); while() { $str .= $_; } close(RRDD); ($Date, $Title, $Message, $GrpFileName, $Layout, $CommentRecv) = split(/\x01/, $str); if( substr($Date,-5) =~ /[0-9][0-9]:[0-9][0-9]/ ) { $hour=substr($Date,-5,2); $min=substr($Date,-2,2); } else { $hour=$min=-1; } } sub ReqJcode { local($ret); $ret = 0; if( !$flag_jcode ) { if( eval("require './jcode.pl'") ) { $flag_jcode=1; $ret=1; } else { $flag_jcode=2; } } elsif( $flag_jcode == 1 ) { $ret=1; } $ret; } # # $NickyFnameより日付を取得 # sub GetDateFromFname { local($gomi, $fname); ($gomi, $year, $fname)=split(/\//, $NickyFname); $month=substr($fname,0,2); $day=substr($fname,2,2); $daysub=substr($fname,4,1); } # # GetFileList:ls の代わりに働いていただく # sub GetFileList { my($opt)=@_[0]; my($i, @pt, $kdir, $ydir, $dirname, $fname, $f, $p1, $p2); $p1=rindex($opt,"\/"); $p2=rindex($opt,"\/", $p1-1); $opt=substr($opt, $p2); $i=0; undef @pt; $kdir=opendir(RD, "$vDir/"); { for $dirname( readdir(RD) ) { if( $dirname =~ /^[1-9][0-9][0-9][0-9]$/ ) { $ydir=opendir(RDD, "$vDir/$dirname"); for $fname( readdir(RDD) ) { $f="./$dirname/$fname"; if( $f =~ /$opt/ ) { @pt[$i++]=$f; } } close(RDD); } } } close(RD); @pt; } sub GetNickyList { my($opt)=@_[0]; my($tmp, @pt); if( ($opt eq "r") || ($opt eq "t") || ($opt eq "tr") ) { $tmp="[0-2][0-9][0-3][0-9][A-Za-z]\\.nky\$"; } else { $tmp="[0-2][0-9][0-3][0-9][A-Za-z]\\.nky\$|^[0-2][0-9][0-3][0-9][A-Za-z]\\.cmnt\$"; } $lcnt=0; undef @pt; $kdir=opendir(RD, "$vDir/"); { for $dirname( readdir(RD) ) { if( $dirname =~ /^[1-9][0-9][0-9][0-9]$/ ) { $ydir=opendir(RDD, "$vDir/$dirname"); for $fname( readdir(RDD) ) { my(@fn, $f); if( $fname =~ /$tmp/ ) { $f="./$dirname/$fname"; @fn=($f, (stat($f))[10]); @pt[$lcnt]=\@fn; $lcnt++; } } close(RDD); } } } close(RD); if( ($opt eq "t") || ($opt eq "tc") ) { return sort{$$b[1] cmp $$a[1]} @pt; } if( $opt eq "tr" ) { return reverse(sort{$$b[0] cmp $$a[0]} @pt); } else { return sort{$$b[0] cmp $$a[0]} @pt; } } sub GetNickyListDay { my($i, $tmp, @pt, @ylist, @jlist, @yone, $junk, $dcnt, $num); $last_year = $last_month = 0; $tmp="^[0-2][0-9][0-3][0-9]A\\.nky\$"; $dcnt=0; opendir(RD, "$vDir/"); for $junk( readdir(RD) ) { if( $junk =~ /^[1-9][0-9][0-9][0-9]$/ ) { @jlist[$dcnt]=$junk; $dcnt++; } } @ylist=reverse(sort(@jlist)); for $dirname( @ylist ) { $i=0; undef @jlist; $ydir=opendir(RDD, "$vDir/$dirname"); for $fname( readdir(RDD) ) { my(@fn, $f); if( $fname =~ /$tmp/ ) { $f="./$dirname/$fname"; @jlist[$i]=$f; $i++; } } close(RDD); @yone=sort @jlist; if( !$last_year || !$last_month ){ $num=$#jlist; $last_year=substr(@yone[$num], 2, 4); $last_month=substr(@yone[$num], 7, 2); } @pt=(@pt, @yone); } close(RD); return @pt; } #Kano3 sub MakeMonthIndexFname{ my($y, $m)=@_; my($str); $str=sprintf("nkyIndex%04d%02d.cgi", $y, $m); $str; } sub GetIndexList { my($i, @pt, $fname, $kdir); undef @pt; $idxcnt=0; $kdir=opendir(RD, "$vDir/"); { for $fname( readdir(RD) ){ if( $fname =~ /^nkyIndex[1-9][0-9][0-9][0-9][0-1][0-9]\.cgi$/ ){ @pt[$i]=$fname; $i++; $idxcnt++; } } } close(RD); @pt; } sub GetJpegWHSub { local($c1,$c2,$ch,$s,$length, $dummy); local($a,$b,$c,$d); if( read(RD, $c1, 1) && read(RD, $c2, 1) && (ord($c1) == 0xFF) && (ord($c2) == 0xD8) ) { while( ord($ch) != 0xDA ) { while(ord($ch) != 0xFF) { return(0,0) unless read(RD, $ch, 1); } while(ord($ch) == 0xFF) { return(0,0) unless read(RD, $ch, 1); } if ((ord($ch) >= 0xC0) && (ord($ch) <= 0xC3)) { return(0,0) unless read (RD, $dummy, 3); return(0,0) unless read(RD, $s, 4); ($a,$b,$c,$d)=unpack("C"x4,$s); return ($c<<8|$d, $a<<8|$b ); } else { return(0,0) unless read (RD, $s, 2); ($c1, $c2) = unpack("C"x2,$s); $length = $c1<<8|$c2; last if (!defined($length) || $length < 2); read(RD, $dummy, $length-2); } } } return (0,0); } sub GetJpegWH { local($x, $y); if(open(RD, @_[0])) { binmode(RD); ($x, $y)=GetJpegWHSub(); close(RD); } return($x, $y); } sub GetGiffWH { local($type,$a,$b,$c,$d,$s); if(open(RD, @_[0])) { binmode(RD); if( read(RD, $type, 6) && $type =~ /GIF8[7,9]a/ && read(RD, $s, 4) == 4 ) { ($a,$b,$c,$d)=unpack("C"x4,$s); close(RD); return ($b<<8|$a,$d<<8|$c); } close(RD); } return (0,0); } # #日付から曜日を取得 # sub GetWeek{ local($y,$m,$d)=@_; local($hour,$min,$sec, $i,$j,$dday, @monday, $gmt,$mm,$h,$s,$hg); @monday=('dummy','31','28','31','30','31','30','31','31','30','31','30','31'); $gmt = 1970; $mm = 1; $hg = 0; $hour=12;$min=0;$sec=0; for($i=$gmt;$i<$y;$i=$i+1){ if ((($i % 4 == 0) && ($i % 100 != 0)) || ($i % 400 == 0)){ $monday[2] = 29; }else{ $monday[2] = 28; } # 年を計算 if($i == $gmt){ for($j=$mm;$j<13;$j=$j+1){ if($mm == $j){ $dday = $dday + $monday[$j]-1; }else{ $dday = $dday +$monday[$j]; } } }else{ for($j=1;$j<13;$j=$j+1){ $dday = $dday +$monday[$j]; } } } if ((($y % 4 == 0) && ($y % 100 != 0)) || ($y % 400 == 0)){ $monday[2] = 29; }else{ $monday[2] = 28; } # 月の計算 for($i=1;$i<$m;$i++){ $dday += $monday[$i]; } $gh = $hour+$hg; $dday=$dday+$d; ($dday-3)%7; } # # 縦幅と横幅を$image_heightと$image_widthに格納 # sub GetImageSize { local($fname)=@_[0]; if( $fname =~ /\.png$/i ) { if( open(RD, $fname) ) { local($w, $fn, $k, $w1, $w2, $w3, $w4); local($h, $h1, $h2, $h3, $h4, $str); binmode(RD); read(RD,$str,0x18); close(RD); ($k,$w1,$w2,$w3,$w4, $h1,$h2,$h3,$h4)=unpack("H32 C8",$str); $w=$w1*0x1000000+$w2*0x10000+$w3*0x100+$w4; $h=$h1*0x1000000+$h2*0x10000+$h3*0x100+$h4; ($w, $h); } } elsif( $fname =~ /\.jpeg$|\.jpg$/i ) { &GetJpegWH($fname); } elsif( $fname =~ /\.giff$|\.gif$/i ) { &GetGiffWH($fname); } } sub GetImageSizePch { if( $Pch_File ) { if( $Pch_File =~ /\.pch$/ ) { local($fn); $fn=$Pch_File; $fn=~s/\.pch$/\.png/; if( (stat($fn))[7] > 0 ) { ($image_width, $image_height)=&GetImageSize($fn); } else { $fn=$Pch_File; $fn=~s/\.pch$/\.jpg/; if( (stat($fn))[7] > 0 ) { ($image_width, $image_height)=&GetJpegWH($fn); } else { $fn=$Pch_File; $fn=~s/\.pch$/\.jpeg/; if( (stat($fn))[7] > 0 ) { ($image_width, $image_height)=&GetJpegWH($fn); } else { $fn=$Pch_File; $fn=~s/\.pch$/\.gif/; if( (stat($fn))[7] > 0 ) { ($image_width, $image_height)=&GetGiffWH($fn); } } } } } elsif( $Pch_File =~ /\.jpeg$|\.jpg$/i ) { ($image_width, $image_height)=&GetJpegWH($Pch_File); } elsif( $Pch_File =~ /\.giff$|\.gif$/i ) { ($image_width, $image_height)=&GetGiffWH($Pch_File); } } } # # HTMLヘッダを吹く # sub PutHTMLheaderSJIS { print "\n\n"; print "\n"; } # # 現在日時取得 # sub GetDateLocaltime { ($sec,$min,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime; $year+=1900; $month+=1; $week=@Week[$wday]; $first="Yes"; } # # POSTで渡されたデータを各グローバル変数にセット # sub NickySetValue { local($gomi, $cnt); if( $arg eq "MODE" ) { $Mode=$val; } elsif( $arg eq "month" ) { $month=sprintf("%02d", $val); } elsif( $arg eq "day" ) { $day=sprintf("%02d", $val); } elsif( $arg eq "hour" ) { $hour=sprintf("%02d", $val); } elsif( $arg eq "min" ) { $min=sprintf("%02d", $val); } elsif( $arg eq "HEADDER" ) { $head=$val; } elsif( $arg eq "GrpFile" ) { if( $val !~ /^$/ ) { $GrpData=$val; } } elsif( $arg eq "EventFile" ) { if( $val !~ /^$/ ) { $EventData=$val; } } elsif( $arg =~ /^CmntName/ ) { ($gomi, $cnt)=split(/ZZZ/, $arg, 2); @CmntName[$cnt]=$val; if( $CmntCnt < $cnt ) { $CmntCnt=$cnt; } } elsif( $arg =~ /^CmntTime/ ) { ($gomi, $cnt)=split(/ZZZ/, $arg, 2); @CmntTime[$cnt]=$val; } elsif( $arg =~ /^CmntMsg/ ) { ($gomi, $cnt)=split(/ZZZ/, $arg, 2); @CmntMsg[$cnt]=$val; } elsif( ($arg eq "DATE") || ($arg eq "DT") ) { $year=substr($val,0,4); $month=substr($val,4,2); $day=substr($val,6,2); $daysub=substr($val,8,1); $hour=substr($val,9,2); $min=substr($val,11,2); $DT=$val; } elsif( ($arg !~/^$/) && ($arg ne "Admin") ) { ${$arg}=$val if( $arg ne /vDir|cgipath|www/ ); } } # # iMODE判定 # sub IsIMODE { local($ret); $ret=0; if( ($ENV{HTTP_USER_AGENT} =~ /DoCoMo|J-PHONE|DDIPOCKET|UP\.Browser/ ) ) { $ret=1; } $ret; } # # Modeによって何がしたいのかを判定&実行 # sub NickyExec { return 0; } # # HTMLヘッダを吹く # sub PutHTMLheader { print "\n\n"; print "\n"; print "\n"; } # # S.Kano # local($str, $arg, $val); my($newline, $a); binmode(STDIN); binmode(STDOUT); &ReadSetup(); $flag=0; $Admin=0; split(/\?/, $ENV{'QUERY_STRING'}); for $str(@_) { ($arg, $val)=split(/=/, $str); $val =~ s/\+/ /g; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; &NickySetValue(); } { print "Content-type: text/html\n\n"; $flag_type=1; if( $arg eq "page" ) { if( !$val ){ $val=0 }; $PageNo=$val; # if( &IsIMODE() ) # { # &NickyPageOutIMODE($PageNo, $PrintDay); # } # else # { # &NickyPageOut($PageNo, $PrintDay); # } } elsif( $arg =~ /^SetSerch$|^SetSearch$/ ) { &NickySetSearch(); } elsif( $arg eq "TitleList" ) { # if( $SaveHTML ne "ON" ){ &PutTitleList(); # }else{ # &PutTitleListIdx(); # } } elsif( $arg eq "DayList" ) { &PutDayList(); } elsif( $arg =~ /^Calender$|^Calendar$/ ) { &PutCalender(); } elsif( $arg eq "Illust" ) { # if( $SaveHTML ne "ON" ){ &PutIllust(); # }else{ # &PutIllustIdx(); # } } elsif( $arg eq "TLi" ) { # if( $SaveHTML ne "ON" ){ &PutTitleListIMODE(); # }else{ # &PutTitleListIMODEidx(); # } } elsif( $arg eq "ver" ) { print "$Ver\n"; } else { if( &NickyExec() == 0 ) { if( &IsIMODE() ) { if( $SaveHTML ne "ON" ){ &PutTitleListIMODE(); }else{ &PutTitleListIMODEidx(); } } else { # if( $SaveHTML ne "ON" ){ &PutTitleList(); # }else{ # &PutTitleListIdx(); # } } } } } #end of script