#!/usr/bin/perl # # 日記CGI nicky! Support Script # # 版本定義 $Ver="2004/07/12c"; $www="."; $cgipath="./index.cgi"; $vDir="."; sub InitialNicky { # 最新X日數之顯示 $PrintDay=5; $PageCnt=5; # 最新X日數之顯示(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="2"; $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); # 每頁顯示件數 if( !$num ){ $num=20; } $pcnt=0; &NickyGetHead(); if( $UseListHD eq "Yes" ){ print $head2nd; }else{ print $head; } $tg="target=\"$target\"" if( $target ); &PutCalendarT() 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); # 每頁顯示件數 if( !$num ) { $num=20; } $pcnt=0; $flag_last=0; &NickyGetHead(); if( $UseListHD eq "Yes" ) { print $head2nd; } else { print $head; } $tg="target=\"$target\"" if( $target ); &PutCalendarTidx() 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="."; #附加於日期後之文字 # 每頁顯示件數 if( !$num ) { $num=16; } $pcnt=0; $sts=&ReqJcode(); # 想在index.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="."; #附加於日期後之文字 # 每頁顯示件數 if( !$num ) { $num=16; } $pcnt=0; $sts=&ReqJcode(); # 想在index.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 PutCalendarSub { 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","一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"); } else { @pmonth=("dummy","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); } $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 == 12 ) #月份判定 # { # print "一年快結束了"; # } # elsif( $mn == 7 ) #月份判定 # { # print "
放暑假了!"; # } # } # print "
"; # print "
\n"; undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; undef @gpl; undef @ddl; undef @dyl; } # 日曆 sub PutCalendar { 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
Calendar_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" ){ # &PutCalendarIdx(); # }else{ for $NickyFname( &GetNickyListDay() ) { &GetDateFromFname(); &GetNickyFile("$vDir/$NickyFname"); $mdstr=""; if( $yr != $year ) { if( $flag_1st ) { $mday=&GetMonthDay($yr, $mn); &PutCalendarSub($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); &PutCalendarSub($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); &PutCalendarSub($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 PutCalendarIdx { 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 ) { &PutCalendarSub($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 ) { &PutCalendarSub($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); } &PutCalendarSub($mday, $wcnt, ""); } # 月曆/from TitleList sub PutCalendarT { 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>"; } } &PutCalendarSub($mday, $wcnt, $str); $TLmonth=$TLm; $TLday=$TLd; $TLyearsz=$TLys; $TLmonthsz=$TLms; print "
"; } sub PutCalendarTidx { 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)){ &PutCalendarSub($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)) ){ &PutCalendarSub($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 ){ &PutCalendarSub($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, "ABCDEFGHIJKLMNOPQRSTUVWXYΖ", "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 =~ /^Calendar$|^Calendar$/ ) { &PutCalendar(); } 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