#!/usr/local/bin/perl # # 日記CGI # # 定義部 $Ver="2011/10/16"; $www="."; $cginame="nicky.cgi"; $cgipath="./$cginame"; $vDir="."; sub InitialNicky { # 最新×日分の表示 $PrintDay=5; $PageCnt=5; # 最新×日分の表示(iMODE) $PrintiDay=1; $PageiCnt=3; $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"; $Fit_size=200; $Fit="OFF"; # コメント受付欄のデフォルト縦幅 $CommentRecv="1"; $CommentSTRlen="1024"; $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="過去ログ"; $MsgOldNEWks="["; $MsgOldNEW="最新"; $MsgOldNEWke="]"; $MsgOldOLDks="["; $MsgOldOLD="最古"; $MsgOldOLDke="]"; $MsgOldOBgCol="#FFFFFF"; $MsgOldBetween="TitleList"; $MsgOldCol="#000000"; $MsgOldSize="1"; $MsgOldYBgCol="#FFFFFF"; $MsgOldYFnCol="#000000"; $MsgOldMBgCol="#FFFFFF"; $MsgOldYear="年"; $MsgOldMonth="月"; $MsgOldForm=$MsgOld1st=$MsgOldcelp=$MsgOldcels="0"; $MonthSort="UP"; $SaveHTML="OFF"; $LogFname="nicky"; $ks="["; $ke="]"; $MsgPageOut=1; #お絵描き系JavaApplet $image_width=$image_height=300; $ReplaySTR="Replay"; $ContinueSTR="Continue"; $undoNum=60; $layerNum=5; $Quality=0; $JPEG_border="60"; $CompressL="10"; #TitleList $MsgOldTG="・"; $TitleListSort="DOWN"; $TLyear="年"; $TLmonth="月"; $TLday="日"; $TLyearsz="5"; $TLmonthsz="4"; $TLdaysz="2"; # その他 # 検索をCGIに吹かせる $PutSerchTagFlag=0; # 最新記事のファイルネーム $NickyHtml="nicky.html"; $tagpl=$taglt=$tagbr=$tagmode=$anker=""; $tag2lf="

"; $tag3lf="


"; #ユーザーカスタマイズモード $UserN=$UserL=$UserR=$UserU=$UserD=$UserLC=$UserRC=$UserUC=$UserDC=$UserCmnt="No"; $mini_il_line=4; $mini_il_row=1; } #記事本文出力 sub PutNickyOneDay { #Global $GrpPath $pch,$PchPath,$ImgLINK,$ImgTAG,$TrTAG,$Msg $continue, $ContinuePath, $apIn,$w,$h,$sz,$wpx,$hpx local($ImgLINK); my($fn, $fn1, $ext,$p1,$p2,$bg); my($flag_uc, $wops); my($iTS)=" 0 で画像ファイル有り $size=$pch=0; if( $GrpFileName ){ &IsApplet(); $apIn=$spsize+$PBsize; &MakeNickyDir(); $GrpPath="$NickyDir/$GrpFileName"; $ext=$GrpPath; $ext=~s/^.*\.//; $fn1=$GrpFileName; $fn1=~s/\..*$//; $fn="$NickyDir/$fn1"; $size=(stat($GrpPath))[7]; if( $size > 0 ){ ($w, $h)=&GetImageSize($GrpPath); if( $w && $h ){ $sz=int($size/1024).K; $bw=$w; $bh=$h; $p1=rindex($GrpPath,"\/"); $p2=rindex($GrpPath,"\/", $p1-1); $bg=substr($GrpPath, $p2+1); $ThmPath = &get_thumb_name($fn); if($ThmPath){ my($ow,$oh); $ow=$w+20; $oh=$h+26; $GrpPath=$ThmPath; ($w, $h)=&GetImageSize($GrpPath); $fw=" onclick=$wops,width=$ow,height=$oh\');return false;\""; }elsif( ($FitCheck eq "ON") && ($w != $fit_size) && ($h != $fit_size) ){ my($pw, $ph, $fit_width, $fit_height); $fiw=$w+20; $fih=$h+26; $pw=$fit_size/$w; $ph=$fit_size/$h; if( $pw > $ph ){ $fit_width=int($w*$ph); $fit_height=int($h*$ph); }else{ $fit_width=int($w*$pw); $fit_height=int($h*$pw); } $p1=rindex($GrpPath,"\/"); $p2=rindex($GrpPath,"\/", $p1-1); $gm=substr($GrpPath, $p2); $ImgURL="$www$gm"; if( ($w == $fit_width) && ($h == $fit_height) ){ undef $fw; }else{ $fw=" onclick=$wops,width=$fiw,height=$fih\');return false;\""; } $w=$fit_width; $h=$fit_height; }else{ undef $fw; } $p1=rindex($GrpPath,"\/"); $p2=rindex($GrpPath,"\/", $p1-1); $gm=substr($GrpPath, $p2); $ImgURL="$www$gm"; if( $nalt ){ $ntit="$nalt"; } else { $ntit="$GrpFileName $bw×$bh $sz"; } $alt=" width=\"$w\" height=\"$h\" alt=\"$ntit\" title=\"$ntit\""; $wpx=$w."px"; $hpx=$h."px"; } } # pch データはあるか $PchPath="$fn.pch"; $pch=(stat($PchPath))[7]; if( !$pch ){ $PchPath="$fn.spch"; $pch=(stat($PchPath))[7]; } #pchが無くてもjpegかgiffでContinue可に if(!$pch && ($GrpFileName =~ /\.jpg$|\.jpeg$|\.gif$|\.giff$|\.png$/i)){ $ContinuePath=$GrpPath; $continue=(stat($ContinuePath))[7]; } } # ファイルネームが確定しているなら日付取得 if( $NickyFname ){ &GetDateFromFname(); &MakeNickyFname(); } if( ($day==$w_day)&&($month==$w_month)&&($year==$w_year)&&($daysub eq $w_daysub)){ if( !$saveExec ){ $flag_new_hit=1; if( !$mkHTML ){ print "\n"; } } } $week=$Week[&GetWeek($year, $month, $day)]; # 本文&画像を指定のレイアウトで出力 $HonbunHead=""; $HonbunHud=""; $Msg=&Effect($Message); $Honbun=$HonbunHead.$Msg.$HonbunHud; $TrTAG=""; #pchファイルがある場合は再生タグを $dlink="DATE=$year$month$day$daysub"; $ctgp="ctgry=$Category?" if( $Category ); if( $pch ){ my($ww,$hh); if( $RepLayout eq "CHECKED" ){ $ww=$bw+90;$hh=$bh*2+120; $rpl="\?RepLayout=CHECKED"; }else{ $ww=$bw*2+90;$hh=$bh+160; $rpl=""; } $PchPath=~s/$vDir\///; if( $apOP eq "Yes" ){ $ImgLINK="$ReplaySTR"; }else{ $ImgLINK="$ReplaySTR"; } if(($Admin) && (select eq "main::STDOUT") && $apIn){ $ImgLINK.="/$ContinueSTR"; } }elsif( $continue && ($Admin) && (select eq "main::STDOUT") && $apIn){ $ImgLINK="$ContinueSTR"; } #画像レイアウトが左上&右上の場合はalign追加 if( $Layout == 4 ){ #画像レイアウトが左上 $ImgLINK="$ImgLINK$br" if( $ImgLINK ); if( $taglt eq "strict" ){ $ImgTAG="$ImgLINK" if( $ImgLINK ); if( $taglt eq "strict" ){ $ImgTAG="$ImgTAG" if( $fw ); }else{ $ImgTAG="$ImgTAG" if( $fw ); } # リンク用タグ $pt="$year$month$day$daysub"; if( ($saveExec == 1) || ($mkHTML == 1) ){ if( $MsgOldForm != 1 ){ $linkURI="$LogFname$year$month.html"; } else { $linkURI="$mkhtml_fname"; } }else{ $linkURI="$cgipath?DT=$pt"; } if( $tagmode eq "xhtml" ){ $Permalink="$linkURI#x$pt"; }else{ $Permalink="$linkURI#$pt"; } if( $LinkTH eq "Yes" ){ $TitleHeadL="$TitleHead"; }else{ $TitleHeadL=$TitleHead; } $bkt=$TitleHead; $bktl=$TitleHeadL; if( !$Title ){ undef $TitleHead; undef $TitleHeadL; } # 前準備ができたら出力する if( $anker ne "no" ){ if( $tagmode eq "xhtml" ){ print "\n"; }else{ print "\n"; } } # ユーザーカスタマイズモード $flag_uc=&ReqUserCustom(); if( $tbRcv eq "Yes" ){ $tbnum=&getTBnum($pt); if( $tbnum || ($tbPast eq "Yes") || !$saveExec && ($Mode ne "MONTH") && !$page){ $tbTag=$tbTAG; $tbTag=~s/%tbnum/$tbnum/g; $tbTag=~s/%pt/$pt/g; }else{ $tbTag=""; } }else{ $tbTag=""; } $ctgTag=$ctgTagL=""; if( $ctgedit ){ my($kk, $ff, $idstr, $j, $mini); &get_ctg_data() if( !$load_ctg ); for( $kk=0; $kk<$load_ctg; $kk++ ){ $ff=$ctg_ff[$kk]; next if( $$ff[2] ne "yes" ); $idstr=$$ff[4]; next if( $idstr eq "idrst" ); next if( $idstr == 0 ); if( $idstr > 1 ){ $j=1<<($idstr-1); }else{ $j=$idstr; } $mini="$$ff[0]"; if( $Category & $j ){ if( !$ctgTag ){ $ctgTag=$$ff[0]; $ctgTagL=$mini; }else{ $ctgTag = "$ctgTag$ctgSplit$$ff[0]"; $ctgTagL = "$ctgTagL$ctgSplit$mini"; } } } if( !$ctgTag ){ $ctgTag=$ctgTagL="none"; } } print "" if((($Mode eq "CINPUT") || ($Mode eq "CINPUTS")) && (select eq "main::STDOUT")); #$pt=sprintf("%s_%08x", $pt, $Category) if( $Category ); if( $flag_uc && ($size <= 0) && ($UserN eq "Yes") ){ &CustomNprint(); }elsif( $flag_uc && ($Layout == 0) && ($UserL eq "Yes") ){ &CustomLprint(); }elsif( $flag_uc && ($Layout == 1) && ($UserR eq "Yes") ){ &CustomRprint(); }elsif( $flag_uc && ($Layout == 2) && ($UserU eq "Yes") ){ &CustomUprint(); }elsif( $flag_uc && ($Layout == 3) && ($UserD eq "Yes") ){ &CustomDprint(); }elsif( $flag_uc && ($Layout == 4) && ($UserLC eq "Yes") ){ &CustomLCprint(); }elsif( $flag_uc && ($Layout == 5) && ($UserRC eq "Yes") ){ &CustomRCprint(); }elsif( $flag_uc && ($Layout == 6) && ($UserUC eq "Yes") ){ &CustomUCprint(); }elsif( $flag_uc && ($Layout == 7) && ($UserDC eq "Yes") ){ &CustomDCprint(); } #ユーザーカスタマイズモードここまで else{ local($hdt); if( $Title ){ $hdt="$Title\n"; }else{ $hdt=""; } print <
$TitleHeadL$Date  $hdt
HTML if( $size > 0 ){ # レイアウト指定が右 if( $Layout == 1 ){ print "$TrTAG"; } # レイアウト指定が上 elsif( ($Layout == 2) || ($Layout == 6) ) { print "$TrTAG$TrTAG"; } # レイアウト指定が下 elsif( ($Layout == 3) || ($Layout == 7) ){ print "$TrTAG$TrTAG"; } # レイアウト指定が左($Layout=0) elsif( $Layout == 0 ){ print "$TrTAG"; } # レイアウト指定右上($Layout=5) elsif( $Layout == 5 ){ print "$TrTAG"; } # レイアウト指定が左上($Layout=4) else{ print "$TrTAG"; } }else{ # 画像無しの場合は文章のみ表示 print "$TrTAG"; } print "
$Honbun$ImgLINK$ImgTAG
"; if( $Layout == 6 ){ print "
$ImgLINK$ImgTAG
"; #上中央 }else{ print "$ImgLINK$ImgTAG"; } print "
$Honbun
$Honbun
"; if( $Layout == 7 ){ print "
$ImgLINK$ImgTAG
"; }else{ print "$ImgLINK$ImgTAG"; } print "
$ImgLINK$ImgTAG$Honbun
$ImgLINK$ImgTAG$Honbun
$ImgLINK$ImgTAG$Honbun
$Honbun
\n"; if( ($tbRcv eq "Yes") && ($UserCmnt ne "Yes") ){ print "
$tbTag
\n" if( $tbnum || ($tbPast eq "Yes") || !$saveExec && ($Mode ne "MONTH") && !$page); } } $TitleHead=$bkt; $TitleHeadL=$bktl; # # コメント # if( ($CommentRecv) || ($Mode eq "CMNTEDIT") ){ local($cf_size); print "\n

\n"; print "" if( $Mode eq "CPREVIEW" ); &InsertDateTag(); print "" if( $Mode eq "CPREVIEW" ); $cf_size=(stat($NickyComment))[7]; if( (($ModeSub == 16) || ($Mode eq "CMNTEDIT")) && (($CIRCV eq "ON") || ($cf_size !=0 || (($Mode ne "MONTH") && !$page && !$saveExec))) ){ if( $UserCmnt ne "Yes" ){ print "\n"; print "
"; print "\n"; print "\n"; &PutComment(); print "
$CommentStr
"; if( $Mode ne "CMNTEDIT" ){ if( ($CIRCV eq "ON") || ($CIRCV ne "ON") && ($Mode ne "MONTH") && !$page && !$saveExec ){ $CommentName=$CommentCName if(($CommentName eq "")&&($CommentCName ne "")); print "Name "; print $CommentMsg if( $flagCMNT == 1 ); print ""; } print "$brよろしければSendボタンをクリックしてください" if( $flagCMNT == 1 ); print " $iTS\"CPREVIEW\" value=\"Preview\" class=\"button\"$e"; print " $iTS\"CINPUT\" value=\"Send\" class=\"button\"$e"; } } print "
\n"; }else{ &PutCustomComment(); } } print "
"; } # # モードによって操作ボタンを追加する。 # 別関数にしようかとも思ったけど細分化しすぎると # 管理できなくなる # # ModeSub # 1=EDIT/編集する記事を選ぶ # 2=DELETE/削除する記事を選ぶ # 4=EDIT/1日に1記事があった場合 # 8=KAKUNIN/確認 # 16=WRITE/書込 # if( ($ModeSub == 1) || ($ModeSub == 2) || ($Mode eq "CMNTEDIT") ){ print "
"; } if( ($ModeSub == 16) && ($Admin) && (select eq "main::STDOUT") ){ print "\n
"; &InsertDateTag(); if( !$btn_flag ){ $tagctl="$iTS\"PANEL\" VALUE=\"カテゴリ編集\"$e" if( $ctgedit ); $tagctl.="$iTS\"MakeSetup\" VALUE=\"初期設定\"$e$iTS\"HEADEDIT\" VALUE=\"ヘッダ/フッタ\"$e$br\n"; $btn_flag=1; } print < CNTLTAG } print "\n"; } sub get_thumb_name{ my $fn=$_[0]; my $thm=""; if( -f "$fn.thumb.jpg" ){ $thm="$fn.thumb.jpg"; }elsif( -f "$fn.thumb.JPG" ){ $thm="$fn.thumb.JPG"; }elsif( -f "$fn.thumb.gif" ){ $thm="$fn.thumb.gif"; }elsif( -f "$fn.thumb.png" ){ $thm="$fn.thumb.png"; } $thm; } sub get_thumb_name2{ my $fn=$_[0]; my $thm=""; $thm=&get_thumb_name($fn); return $thm if( $thm ); if( -f "$fn.spch" ){ $thm="$fn.spch"; }elsif( -f "$fn.pch" ){ $thm="$fn.pch"; } $thm; } sub get_thum2b_name{ my $fn=$_[0]; my $thm=""; if( -f "$fn.thumb2.jpg" ){ $thm="$fn.thumb2.jpg"; }elsif( -f "$fn.thumb.JPG" ){ $thm="$fn.thumb2.JPG"; }elsif( -f "$fn.thumb2.gif" ){ $thm="$fn.thumb2.gif"; }elsif( -f "$fn.thumb2.png" ){ $thm="$fn.thumb2.png"; } $thm; } sub get_from_thumb{ my $fn=$_[0]; my $rtn=""; if( -f "$fn.jpg" ){ $rtn="$fn.jpg"; }elsif( -f "$fn.JPG" ){ $rtn="$fn.JPG"; }elsif( -f "$fn.gif" ){ $rtn="$fn.gif"; }elsif( -f "$fn.png" ){ $rtn="$fn.png"; } $rtn; } sub PutCustomComment{ my($ctloop, $str2); local($name, $msg, $time, $cnt, $i, @ctlist); $flag_ucmnt = &ReqUserCustomCmnt(); if( $flag_ucmnt ){ $CommentNum=$sCommentNum=$nCommentNum=$cnt=0; if( $cf_size > 0 ){ open(RDC, $NickyComment); binmode(RDC); while(){ $ctloop=0; ($name, $msg, $time)=split/\x01/; while( !$time ){ ($str2, $time)=split(/\x01/, ); $msg.=$str2; $ctloop++; last if( $ctloop > 50 ); } chop $time; if( $name =~ /^\x03/ ){ $sCommentNum++; if( $Admin && (select eq "main::STDOUT") ){ ($str2,$name)=split(/\x03/, $name); $name=&cmnt_dec($name); $name=&comment_uri($name)."(非公開)"; $msg=&cmnt_dec($msg); }else{next;} }else{ $name=&comment_uri($name); $nCommentNum++; } $msg=~s/\n/$br/g; $msg=&ConvertMsg($msg); $msg=&Effect($msg); $msg=~s/$br$//; $ctlist[$cnt]=$name; $cnt++; $ctlist[$cnt]=$msg; $cnt++; $ctlist[$cnt]=$time; $cnt++; } close(RDC); $CommentNum=$sCommentNum+$nCommentNum; } &CustomCmntHprint(); for($i=0; $i<$cnt; $i+=3){ $name=$ctlist[$i]; $msg=$ctlist[$i+1]; $time=$ctlist[$i+2]; &CustomCmntAprint(); } undef @ctlist; if( ($Mode =~ /CPREVIEW/) && ($CommentName || $CommentMsg) ){ $msg=$CommentMsg; $msg=~s/\n/$br/g; $msg=&ConvertMsg($msg); $msg=&Effect($msg); $msg=~s/$br$//; $name=&jadge_uri($CommentName, $CommentURI); $time=&MakeCommentTime(); &CustomCmntAprint(); } $CommentName=$CommentCName if($CommentName eq "" && $CommentCName eq ""); #表示する条件 #過去ログ表示でコメントを受け付ける #最新ページの表示 if( ($CIRCV ne "OFF") || ($CIRCV eq "OFF") && (!$page && !$saveExec) && ($Mode ne "MONTH") ){ if( $Mode =~ /CPREVIEW|CINPUT/ ){ if( ($Mode =~ /CINPUT/) && ($MNLflag) || $saveExec){ eval('&CustomCmntOprint();'); }else{ eval('&CustomCmntPprint();'); } }else{ eval('&CustomCmntOprint();'); } } &CustomCmntFprint(); } } sub getTBnum{ local($tb_id)=@_; local($tbfn, $num, $bak); $tbfn="./tbdir/$year$month.cgi"; $bak=$/; $/="\x02"; $num=0; if( open(RD, "$tbfn") ){ binmode RD; while(){ $num++ if( $_ =~ /^$tb_id\x01/ ); } close(RD); } $/=$bak; $num; } sub PutNickyOneDayIMODE{ my($str,$size); my($b); &GetDateFromFname(); print ""; $b="$month$Month$day$Day"; $b.=" $hour:$min" if( $hour >=0 ); if( &ReqJcode() ){ &jcode'euc2sjis(\$b); $Title=&zenkakuhankaku($Title); $Message=&zenkakuhankaku($Message); } print "$b\n
"; print "
$Title
" if( $Title ); print "
$Message"; if( $GrpFileName ){ my($fn, $fn1, $ext, $sstr); &MakeNickyDir(); $GrpPath="$NickyDir/$GrpFileName"; $size=(stat($GrpPath))[7]; if( $size > 0 ){ $ext=&GetExt($GrpPath); if( $size<1024 ){ $sstr=$size."byte"; }else{ $sstr=int($size/1024).K; } print "$br$ext$sstr"; $fn1=$GrpFileName; $fn1=~s/\..*$//; $fn="$NickyDir/$fn1"; $thumb=&get_thumb_name($fn); if( $thumb ){ $size=(stat($thumb))[7]; if( $size<1024 ){ $sstr=$size."byte"; }else{ $sstr=int($size/1024).K; } $ext=&GetExt($thumb); $sstr=int($size/1024).K; print ":$ext$sstr"; } } } print "
"; if( $CommentRecv ){ if(!-e "./icomment"){ &icomment_main(); }else{ my($pt, $rc); $rc="(有)" if( (stat($NickyComment))[7] > 0 ); $pt=sprintf("%04d%02d%02d%s", $year, $month, $day, $daysub); $str="Comment$rc"; print &zenkakuhankaku($str); } } print "$br"; } sub icomment_main{ my $str="\n
\n$CommentStr$br"; print &zenkakuhankaku($str); &PutCommentIMODE(); &InsertDateTag(); $str="Name "; $str.=$CommentMsg if( $flagCMNT == 1 ); $str.=""; } $str.=" "; $str.="
"; print &zenkakuhankaku($str); } sub CommentIMODE{ local($sts, $s, $pt); &nickyGetHead(); $sts=&ReqJcode(); &jcode'euc2sjis(\$iHead) if( $sts ); print $iHead; &MakeNickyFname(); &icomment_main(); $pt=sprintf("%04d%02d%02d%s", $year, $month, $day, $daysub); $s="
戻る$iFoot"; &jcode'euc2sjis(\$s) if( $sts ); print $s; } sub ReqUserCustom{ if( !$flag_customread ){ $status_customread=eval("require '$CustomCGI'"); $flag_customread=1; } return $status_customread; } sub ReqUserCustomCmnt{ if( !$flag_cmnt_customread ){ $status_cmnt_customread=eval("require '$CustomCmntCGI'"); $flag_cmnt_customread=1; } return $status_cmnt_customread; } sub IsApplet{ $spsize=(stat("$vDir/spainter.jar"))[7] if( $spsize == -3 ); $PBsize=(stat("$vDir/PaintBBS.jar"))[7] if( $PBsize == -3 ); $PBsize=0 if( !$PBsize ); $spsize=0 if( !$spsize ); } # # 日付の作成 # 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{ my($f)=@_; my $dat=""; if( open(FILE, $f) ){ binmode(FILE); while(){$dat.=$_;} close(FILE); } $dat; } # # ColorSample # sub PutColorSample { local($i, $j, $k, $col); &PutHTMLheader(); print "カラーサンプル\n\n\n"; print "カラーサンプル$br$br\n"; print "
  • HTMLでの色指定は通常、#RedGreenBlue(それぞれ16進2桁)で行います。
\n
\n"; for($k=0; $k<0x100; $k+=0x10){ print "
\n"; $str=sprintf("Blue=%02X", $k); print ""; print "\n"; print "\n"; for($i=0; $i<0x100; $i+=0x10){ printf("", $i); } print "\n"; print "\n"; for($i=0; $i < 0x100; $i+=0x10){ print "\n" if( $i ); printf("", $i); for($j=0; $j < 0x100; $j+=0x10){ $col=sprintf("#%02x%02x%02x", $i, $j, $k); print ""; } print "\n"; } print "
($str)Green
%02X
Red
%02X
\n
\n"; } print "\n"; } # #タイトル一覧 # sub PutTitleListSub { local($tcnt, $mtag)=@_; my($a, $yd, $i, $j); $j=0; if( !$f_mkns ){ $a=""; }else{ $a=""; } print "$mtag$a"; if( $tcnt ){ for $a(@grplist){ print "" if( $j ); print "$a$br"; print ""; print "$daylist[$j]"; print ""; print "$titlelist[$j]"; print "\n"; $j++; } }else{ my(@gpl, @ddl, @dyl); print ""; $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 "$br"; } print "$a $dyl[$j]$br [aaa]"; } $yd=$ddl[$j++]; } print ""; undef @gpl; undef @ddl; undef @dyl; } undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; } sub PutTitleList { my($i, $fname, $fn, $yr, $mn); local($mdstr, $clm, $tcnt, $brcnt); local(@daylist, @titlelist, @grplist, @ddlist); my($flag_1st, $flagm_1st)=(0,0); my($opt, $gfn, $tp, $ctgl, $spn, $mtag); my $sfn=$LogFname."_s"; $tp="x" if( $tagmode eq "xhtml" ); $ctgl="\?ctg=$ctg" if( $ctg ); $brcnt=0; &nickyGetHead(); if( $UseListHD eq "Yes" ){ print &put_macro($head2nd); }else{ print &put_macro($head); } print ""; if( $TitleListSort eq "UP" ){ $opt="r"; }else{ $opt="tr"; } if( !@nli ){ @nli=&GetNickyList($opt); } else { if( $opt eq "tr" ){ @nli = sort{$$a[0] cmp $$b[0]} @nli; }else{ @nli = sort{$$b[0] cmp $$a[0]} @nli; } } for $gfn( @nli ){ $NickyFname=$$gfn[0]; &GetDateFromFname(); $Title=""; &GetNickyFile("$vDir/$NickyFname"); if( $f_mkns ){ $mdstr=""; } else { $mdstr=""; } if( $yr != $year ){ if( $flag_1st ){ &PutTitleListSub($tcnt, $mtag); } if( $Title ){ $spn=4; }else{ $spn=12; } print "\n"; $yr=$year; $mn=$month; $flag_1st=1; $flagm_1st=0; $i=0; $clm=0; $tcnt=0; }elsif( $mn != $month ){ &PutTitleListSub($tcnt, $mtag); if( !$tcnt ){ if($clm++ > 4){ print "\n"; $clm=0; } }else{ print "\n"; } if( !$f_mkns ){ $mtag="$mdstr$month$TLmonth"; } else { $mtag="$month$TLmonth"; } $mn=$month; $i=0; $tcnt=0; } if( $GrpFileName ){ $grplist[$i]=$MsgOldTG; }else{ $grplist[$i]=""; } if( $Title ){ $daylist[$i]="$day$TLday"; } else { $daylist[$i]="$mdstr$day$TLday"; } $ddlist[$i]=$day; if( $Title ){ $titlelist[$i]="$mdstr$Title"; } $tcnt++; $i++; } &PutTitleListSub($tcnt, $mtag); print "
"; if( !$f_mkns ){ print "$mdstr$year$TLyear"; $mtag="$mdstr$month$TLmonth"; } else { print "$year$TLyear"; $mtag="$month$TLmonth"; } print "
"; if( $UseListFT eq "Yes" ){ print &put_macro($foot2nd); }else{ print &put_macro($foot); } } sub BaseName{ my($p)=@_; my($c); for (split(/\/|\\|\:/, $p)){$c = $_;} $c; } # 拡張子を取得 sub GetExt{ my($p1, $n); $p1=""; $n=rindex($_[0], "\."); $p1=substr($_[0], $n+1) if( ($n > 0) && (length($_[0]) > $n) ); $p1; } sub GetDir{ my($s)=@_; my($p, $n); $p=""; $n=rindex($s, "/"); if( $n >= 0 ){ $p=substr($s, 0, $n+1); }else{ $p="\./"; } $p; } sub zenkakuhankaku{ my($str)=@_; &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); $str; } #デフォルトヘッダ作成 sub MakeDefaultHead{ local($a); $a=< 日記
日記

DefaultHead_EOF $a; } # #デフォルトフッタ作成 # sub MakeDefaultFoot{ my($a); $a="
\n
\n\n\n"; $a; } # #デフォルトヘッダ作成(iMODE版) # sub MakeDefaultHeadIMODE{ my($a); $a=< Diary ieof $a; } # #デフォルトフッタ作成(iMODE版) # sub MakeDefaultFootIMODE{ my($a); $a=""; $a; } sub MakeDefaultEfoot{ my $a ; $a=<\n記事最新ページへ/ ヘッダ/フッタの編集/ 初期設定/ パスワード再設定 EFOOT $a; } sub MakeDefaultnsTag{ my $a; $a=<ダイジェスト ENSTG $a; } # #記事ヘッダファイル書き込み # sub nicky_write_head{ my($dat)="$head$TMN$foot$TMN$iHead$TMN$iFoot$TMN$efoot$TMN$head2nd$TMN$foot2nd$TMN$Use2ndHD$TMN$UseListHD$TMN$UseSearchHD$TMN$Use2ndFT$TMN$UseListFT$TMN$UseSearchFT$TMN$nsTag"; $dat=~s/\r//g; open(WD, ">./NickyHFdat.cgi"); binmode(WD); print WD $dat; close(WD); $dat; } # #記事ヘッダファイル抽出 # sub nickyGetHead{ my($hffn)=@_; my($ns1,$ns2,$ns3); my $all=""; &readnStar(); if( $hffn && open(IN, $hffn) ){ while(){$all.=$_;} close(IN); }elsif( open(IN, $NickyHF) ){ while(){$all.=$_;} close(IN); } ($head,$foot,$iHead,$iFoot,$efoot,$head2nd,$foot2nd,$Use2ndHD,$UseListHD,$UseSearchHD,$Use2ndFT,$UseListFT,$UseSearchFT,$nsTag)=split(/$TMN/, $all); $UseSearchFT=~s/\r|\n//g; $head=&MakeDefaultHead() if( !$head ); $foot=&MakeDefaultFoot() if( !$foot ); $iHead=&MakeDefaultHeadIMODE() if( !$iHead ); $iFoot=&MakeDefaultFootIMODE() if( !$iFoot ); $efoot=&MakeDefaultEfoot() if( !$efoot ); $nsTag=&MakeDefaultnsTag() if( !$nsTag ); $nsdTag=$nsTag; if( $nsdTag =~ /%www%/ ){ ($ns1,$ns2)=split(/%www%/, $nsdTag); $nsdTag="$ns1$www$ns2"; } if( $nsdTag =~ /%nshtml%/ ){ ($ns1,$ns2)=split(/%nshtml%/,$nsdTag); $nsdTag="$ns1$nshtml$ns2"; } } sub get_ctg_data{ #Gloval : $load_ctg, @ctg_ff, $ctg_ptype, $ctg_btn, $ctgH my($i,$j)=(0,0); my($linedat, $catebin, $ctname, $snum, $putok, $lstr, $ctgid); if( !$load_ctg && open(RD, "./catelist.cgi") ){ binmode RD; for $linedat(){ my(@f); $linedat=~s/\r|\n//; next if( !$linedat ); if( $j == 0 ){ $ctg_ptype = $linedat; }elsif( $j == 1 ){ $ctg_btn=$linedat; }else{ @f=($ctname, $snum, $putok, $lstr, $ctgid, $staticH)=split(/,/, $linedat); $ctgH=1<<($staticH-1); $f[0]=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; $f[3]=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; $i=$j-2; $ctg_ff[$i]=\@f; if( $j == 2 ){ $lstr=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; ($ctname,$ctgSplit,$snum)=split(/\x01/,$lstr); } } $j++; } close RD; $load_ctg=$j-2 if( $j > 2 ); } } sub put_macro{ my($hd)=@_; my($bkmonth, $bkday, $bkyear, $bkfn, $bksub, $bkmsg, $bktitle); my($bkgf, $bkly, $bkcr, $bkfs, $bkrl, $bktr, $bkdate); my($bkh, $bkm, $bkf, $bkcate, $bkYR, $bkMON, $bks, $bkhs); my($hd1, $hd2, $cal, $categorydat); my($dat, $f, $i, $str, $ctgid); local $putcal=0; local $p_zero=0; $bkfn=$NickyFname;$bkmonth=$month;$bkday=$day;$bkyear=$year; $bksub=$daysub;$bktitle=$Title;$bkmsg=$Message;$bkdate=$Date; $bkgf=$GrpFileName;$bkly=$Layout;$bkcr=$CommentRecv; $bkfs=$fit_size;$bkrl=$RepLayout;$bktr=$tbRcv;$bkYR=$YR;$bkMON=$MON; $bkh=$hour;$bkm=$min;$bkf=$FitCheck;$bks=$nalt;$bkcate=$Category; for($i=1;$i<6;$i++){ $f="header$i.cgi"; if( $hd =~ /%$f%/ ){ ($hd1, $hd2)=split(/%$f%/, $hd); $dat=&PutFile($f); $hd="$hd1$dat$hd2"; } } if( $hd =~ /%Calendar%/ ){ ($hd1, $hd2)=split(/%Calendar%/, $hd); if( ($Mode ne "DELETEOK") && (!$YR || !$MON) ){ $YR=$bkyear;$MON=$bkmonth;$p_zero=1; } $putcal=$list_req=1; eval('require("./minili.cgi")'); &goto_exit("$@ /
minili.cgi") if( $@ ); $cal=eval('&PutCalendarT()'); $list_req=0; $hd="$hd1$cal$hd2"; } if( $hd =~ /%TitleList%/ ){ ($hd1, $hd2)=split(/%TitleList%/, $hd); $year=$bkyear;$month=$bkmonth; $list_req=1; eval('require("./minili.cgi")'); &goto_exit("$@ /
minili.cgi") if( $@ ); eval('$cal=&PutTitleList2();'); $list_req=0; $hd="$hd1$cal$hd2"; } if( $hd =~ /%CalendarRow%/ ){ ($hd1, $hd2)=split(/%CalendarRow%/, $hd); if( ($Mode ne "DELETEOK") && (!$YR || !$MON) ){ $YR=$bkyear;$MON=$bkmonth;$p_zero=1; } $putcal=$list_req=1; eval('require("./minili.cgi")'); &goto_exit("$@ /
minili.cgi") if( $@ ); $cal=eval('&PutCalendarRow()'); $list_req=0; $hd="$hd1$cal$hd2"; } if( $hd =~ /%CalendarLine%/ ){ ($hd1, $hd2)=split(/%CalendarLine%/, $hd); # if( ($Mode ne "DELETEOK") && (!$YR || !$MON) ){ # $YR=$bkyear;$MON=$bkmonth;$p_zero=1; # } $YR=$bkYR;$MON=$bkMON; $putcal=$list_req=1; eval('require("./minili.cgi")'); &goto_exit("$@ /
minili.cgi") if( $@ ); $cal=eval('&PutCalendarLine()'); $list_req=0; $hd="$hd1$cal$hd2"; } if( $hd =~ /%IllustList%/ ){ ($hd1, $hd2)=split(/%IllustList%/, $hd); if( ($Mode ne "DELETEOK") && (!$YR || !$MON) ){ $YR=$bkyear;$MON=$bkmonth;$p_zero=1; } $putcal=$list_req=1; eval('require("./minili.cgi")'); &goto_exit("$@ /
minili.cgi") if( $@ ); $cal=eval('&miniPutIlList()'); $list_req=0; $hd="$hd1$cal$hd2"; } if( $hd =~ /%Category%/ ){ ($hd1, $hd2)=split(/%Category%/, $hd); $dat=$cal=""; &get_ctg_data(); if( $ctg_ptype eq "link" || !$ctg ){ $cal=&PutFile("./ctgput.cgi"); }else{ @ctg_ff=sort{$$a[1] <=> $$b[1]} @ctg_ff; $cal="
\n"; $cal.="" if( $ctg_ptype =~ /chkbox|sel/ ); $cal.="
\n"; } $hd="$hd1$cal$hd2"; } if( $hd =~ /%admin%/ ){ $cal=""; ($hd1, $hd2)=split(/%admin%/, $hd); if( $Admin && !$mkHTML && !$f_mkns ){ $cal=&PutFile("./admin.cgi"); } $hd="$hd1$cal$hd2"; } if( $hd =~ /%NewComment%/ ){ ($hd1, $hd2)=split(/%NewComment%/, $hd); $cal=&PutFile("./NewComment.cgi"); $hd="$hd1$cal$hd2"; } if( $hd =~ /%star%/ ){ ($hd1, $hd2)=split(/%star%/, $hd); if( $f_mkns ){ $hd="$hd1$hd2"; }else{ $hd="$hd1$nsdTag$hd2"; } } $NickyFname=$bkfn;$month=$bkmonth;$day=$bkday;$year=$bkyear; $daysub=$bksub;$Title=$bktitle;$Message=$bkmsg;$Date=$bkdate; $GrpFileName=$bkgf;$Layout=$bkly;$CommentRecv=$bkcr; $fit_size=$bkfs;$RepLayout=$bkrl;$tbRcv=$bktr;$YR=$bkYR;$MON=$bkMON; $hour=$bkh;$min=$bkm;$FitCheck=$bkf;$nalt=$bks;$Category=$bkcate; #undef $YR;undef $MON; $hd; } # #カスタマイズフォーマット抽出 # sub nickyGetCustomText{ my($all); $all=""; if( open(IN, $CustomText) ){ binmode(IN); while(){ $all.=$_; } close(IN); $all=~s/\?n//g; ($CustomN,$CustomL,$CustomR,$CustomU,$CustomD,$CustomLC,$CustomRC,$CustomUC,$CustomDC, $CustomHead, $CustomFoot, $CustomTB)=split(/$TMN/, $all); } } sub NickyGetCustomCmntText { my($all); $all=""; if( open(IN, $CustomCmntText) ){ binmode(IN); while(){ $all.=$_; } close(IN); ($CustomCmntH,$CustomCmntA,$CustomCmntF,$CustomCmntO,$CustomCmntP)=split(/$TMN/, $all); } } # #記事ヘッダーファイル修正 # sub NickyHead { my($IT)="記事ヘッダ&フッタ編集
ヘッダ&フッタの編集$br$br
$IT"HIDDEN" NAME="MODE" VALUE="HEADWRITE"> ●ヘッダ$br $br$br●フッタ$br $br
$IT"submit" VALUE="書込">
$br$br ●ヘッダ 使用するページにチェック→ $IT"CHECKBOX" NAME="Use2ndHD" VALUE="Yes" HD1_EOF if( $Use2ndHD eq "Yes" ) { print "CHECKED"; } print ">2ページ目以降\n"; print " $IT\"CHECKBOX\" NAME=\"UseListHD\" VALUE=\"Yes\" "; if( $UseListHD eq "Yes" ) { print "CHECKED"; } print ">タイトル一覧\n"; print " $IT\"CHECKBOX\" NAME=\"UseSearchHD\" VALUE=\"Yes\" "; if( $UseSearchHD eq "Yes" ) { print "CHECKED"; } print ">検索$br\n"; print ""; print "$br$br●フッタ 使用するページにチェック→"; print " $IT\"CHECKBOX\" NAME=\"Use2ndFT\" VALUE=\"Yes\""; if( $Use2ndFT eq "Yes" ) { print "CHECKED"; } print ">2ページ目以降\n"; print " $IT\"CHECKBOX\" NAME=\"UseListFT\" VALUE=\"Yes\""; if( $UseListFT eq "Yes" ) { print "CHECKED"; } print ">タイトル一覧\n"; print " $IT\"CHECKBOX\" NAME=\"UseSearchFT\" VALUE=\"Yes\""; if( $UseSearchFT eq "Yes" ) { print "CHECKED"; } print ">検索$br\n"; print <$foot2nd $br
$IT\"submit\" VALUE=\"書込\">
$br$br ●iMODE用ヘッダ$br $br$br●iMODE用フッタ$br $br $br●編集画面の最後尾に出力するタグ$br $br $br●ダイジェストリンク用タグ$br $br
$IT"submit" VALUE="書込">$br
HD2_EOF ; } # #記事ヘッダ&フッタファイル書きこみ # sub NickyHeadWrite{ my $dat; $dat=&nicky_write_head(); &create_exec($dat, $NickyHF, "nHF"); &MakeNickyLast(); } sub goto_end{ my($par)=@_; print "$par\n"; exit; } sub goto_exit{ my($par)=@_; print "Content-type: text/html\n\n" if( !$flag_type ); &PutHTMLheader(); &goto_end($par); } sub create_exec{ my($dat, $outfile, $exe)=@_; my $stylecgi="./$exe.cgi"; $dat=~s/\@/\\@/g; open(WD, ">$stylecgi"); binmode(WD); print WD "sub put_$exe(){\nopen(WD, \">$outfile\");\n"; print WD "print WD<){ $styledat.=$_; } close(RD); &create_exec($styledat,"$vDir/d.css", "cssdat"); } # # Setup関連 # sub ReadSetup{ my($arg, $val, $dat); &InitialNicky(); #ファイルに設定項目が落ちている場合を #想定して読む前に一通り設定する。 if( open(RD, "./NickyConf.cgi") ){ binmode(RD); while(){ $dat=$_; $dat=~s/\r|\n//g; ($arg,$val)=split(/=/,$dat,2); ${$arg}=$val; } close(RD); } $mtap=$MTApath; $mto=$MailTo; $flag_savehtml=$SaveHTML; if( $WEEK == 1 ){ @Week=('(Sun)','(Mon)','(Tue)','(Wed)','(Thu)','(Fri)','(Sat)'); }else{ @Week=('(日)','(月)','(火)','(水)','(木)','(金)','(土)'); } $MsgSize=$HonbunSize; $MsgColor=$HonbunColor; $MsgBgColor=$HonbunBgColor; } # # ユーザーカスタマイズ保存 # sub SaveUserCustomizeDone { my($str, $subname)=($_[0], $_[1]); my($substrcgi, $a, $b); $str=~s/\?n//g; $customtext.="$str$TMN"; $str=~s/\"/\\\"/g; $str=~s/\r//g; if( $subname !~ /Head$|Foot$/ ){ $a=$UserCustomHead; $a=~s/\"/\\\"/g; $a=~s/\r//g; $b=$UserCustomFoot; $b=~s/\"/\\\"/g; $b=~s/\r//g; $str=~s/\$UserCustomHead/$a/; $str=~s/\$UserCustomFoot/$b/; } $str=~s/\n/\";\nprint \"/g; undef $substrcgi; if( $subname !~ /Head$|Foot$/ ){ $substrcgi= "sub $subname\n"; $substrcgi.= "{\n"; } $substrcgi.= "print \"$str\"\;\n"; if( $subname !~ /Head$|Foot$/ ){ $substrcgi.= "}\n"; $substrcgi.=$TMN; } $substrcgi; } sub SaveUserCustomize { my($str,$uhh, $uff); $customtext=""; $uh=&SaveUserCustomizeDone($UserCustomHead, "UserCustomHead"); $uhh=$customtext; $customtext=""; $uf=&SaveUserCustomizeDone($UserCustomFoot, "UserCustomFoot"); $uff=$customtext; $customtext=""; $str=&SaveUserCustomizeDone($UserCustomN, "CustomNprint"); $str.=&SaveUserCustomizeDone($UserCustomL, "CustomLprint"); $str.=&SaveUserCustomizeDone($UserCustomR, "CustomRprint"); $str.=&SaveUserCustomizeDone($UserCustomU, "CustomUprint"); $str.=&SaveUserCustomizeDone($UserCustomD, "CustomDprint"); $str.=&SaveUserCustomizeDone($UserCustomLC, "CustomLCprint"); $str.=&SaveUserCustomizeDone($UserCustomRC, "CustomRCprint"); $str.=&SaveUserCustomizeDone($UserCustomUC, "CustomUCprint"); $str.=&SaveUserCustomizeDone($UserCustomDC, "CustomDCprint"); $customtext.=$uhh.$uff; $customtext.=$UserCustomTB; $UserCustomTB=~s/\"/\\\"/g; $UserCustomTB=~s/\r//g; $UserCustomTB=~s/\n/\\n/g; $UserCustomTB=~s/\$tbnum/%tbnum/g; $UserCustomTB=~s/\$pt/%pt/g; $str.="\$tbTAG=\"$UserCustomTB\"\;"; $str.="\n1;\n"; open(WD, ">$CustomText"); binmode(WD); print WD $customtext; close(WD); open(WD, ">$CustomCGI"); binmode(WD); print WD $str; close(WD); &SaveNickyConf(); } sub SaveUserCustomizeC { my($str); undef $uf; undef $uh; $customtext=""; $str=&SaveUserCustomizeDone($UserCustomCmntH, "CustomCmntHprint"); $str.=&SaveUserCustomizeDone($UserCustomCmntA, "CustomCmntAprint"); $str.=&SaveUserCustomizeDone($UserCustomCmntF, "CustomCmntFprint"); $str.=&SaveUserCustomizeDone($UserCustomCmntO, "CustomCmntOprint"); $str.=&SaveUserCustomizeDone($UserCustomCmntP, "CustomCmntPprint"); $str.="\n1;\n"; open(WD, ">$CustomCmntText"); binmode(WD); print WD $customtext; close(WD); open(WD, ">$CustomCmntCGI"); binmode(WD); print WD $str; close(WD); &SaveNickyConf(); } # # ユーザーカスタマイズ # w3mでtextare内にtableタグを書けない為、tableにしない。 # sub PutUserCustomize { my($nm, $ag, $ta, $textdata)=($_[0], $_[1], $_[2], $_[3]); if( ($CustomMode eq "Custom") && ($nm !~ /^UserHead$|^UserFoot$|^UserTB$/) ){ print " カスタマイズする\n"; print " しない\n"; } $textdata=&tagenc($textdata); print "$br\n$br\n"; } sub UserCustomize { local($i); $CustomMode="Custom"; &PutHTMLheader(); &nickyGetCustomText(); print "ユーザーカスタマイズ\n\n"; print ""; print "
ユーザーカスタマイズ
\n"; print "
\n"; print "記事のヘッダ(変数\$UserCustomHeadに入ります)\n"; &PutUserCustomize("UserHead", $UserHead, "UserCustomHead", $CustomHead); print "記事のフッタ(変数\$UserCustomFootに入ります)\n"; &PutUserCustomize("UserFoot", $UserFoot, "UserCustomFoot", $CustomFoot); print "
画像なし\n"; &PutUserCustomize("UserN", $UserN, "UserCustomN", $CustomN); print "
画像レイアウト左\n"; &PutUserCustomize("UserL", $UserL, "UserCustomL", $CustomL); print "
画像レイアウト右\n"; &PutUserCustomize("UserR", $UserR, "UserCustomR", $CustomR); print "
画像レイアウト上\n"; &PutUserCustomize("UserU", $UserU, "UserCustomU", $CustomU); print "
画像レイアウト下\n"; &PutUserCustomize("UserD", $UserD, "UserCustomD", $CustomD); print "
画像レイアウト左上\n"; &PutUserCustomize("UserLC", $UserLC, "UserCustomLC", $CustomLC); print "
画像レイアウト右上\n"; &PutUserCustomize("UserRC", $UserRC, "UserCustomRC", $CustomRC); print "
画像レイアウト上中央\n"; &PutUserCustomize("UserUC", $UserUC, "UserCustomUC", $CustomUC); print "
画像レイアウト下中央\n"; &PutUserCustomize("UserDC", $UserDC, "UserCustomDC", $CustomDC); if( (stat("./tb.cgi"))[7] || $CustomTB ){ print "
トラックバック(\$tbTagに入ります)\n"; &PutUserCustomize("UserTB", "Yes", "UserCustomTB", $CustomTB); } print "
\n"; } sub UserCustomizeCmnt { local($i); $CustomMode="CustomC"; &PutHTMLheader(); &NickyGetCustomCmntText(); print "コメントのカスタマイズ\n\n"; print ""; print "
コメントのカスタマイズ\n"; print "
"; print "\n コメントのカスタマイズする\n"; print " しない\n"; print "$br$br"; print "$brヘッダ\n"; &PutUserCustomize("UserCmntH", $UserCmntH, "UserCustomCmntH", $CustomCmntH); print "$brコメント本文\n"; &PutUserCustomize("UserCmntA", $UserCmntA, "UserCustomCmntA", $CustomCmntA); print "$br入力欄(表示用)\n"; &PutUserCustomize("UserCmntO", $UserCmntO, "UserCustomCmntO", $CustomCmntO); print "$br入力欄(プレビュー用)\n"; &PutUserCustomize("UserCmntP", $UserCmntP, "UserCustomCmntP", $CustomCmntP); print "$brフッタ\n"; &PutUserCustomize("UserCmntF", $UserCmntF, "UserCustomCmntF", $CustomCmntF); print "
"; } sub tagenc{ my($str)=@_; $str=~s/&/&/g; $str=~s//>/g; $str=~s/\"/"/g; $str; } # # 初期設定 # sub MakeSetup { my($i, $sizea, $jpsz, $str, $imp, $appp, $b2, $ITT, $IRT, $ITC); my($hap1, $hap2, $hap3, $hap4, $hap5, $hap6, $hap7, $hap8, $hap9); my($hap10, $hap11, $hap12); my($sizetb, $tbtag, $ck, $sizem, $minitag, $nb); my $v="value="; my $s="size="; &IsApplet(); $sizea=$spsize+$PBsize; $ck=" CHECKED"; $sizetb=(stat("./tb.cgi"))[7]; $sizem=(stat("./minili.cgi"))[7]; if( -e "$vDir/jcode.pl" ){ $jpsz=1; $imp="
  • iMODE関連
  • "; } if( $sizetb ){ $tbtag="
  • トラックバック関連
  • "; } if( $sizem ){ $minitag="
  • miniList関連
  • "; } $appp="
  • お絵描きアプレット$br" if( $sizea ); $b2="$br$br"; $ITT="nicky!Setup
    nicky!Setup
    Ver.$Ver$br カラーサンプル$br
    Perl Ver$]
    $br
    --- Menu ---
    1. 記事全体にまつわる設定
    2. 記事のタイトルにまつわる設定
    3. 記事本文にまつわる設定
    4. コメントにまつわる設定
    5. 過去ログにまつわる設定
    6. タイトルリストにまつわる設定 $tbtag $minitag
    7. その他 $imp$appp
    $br
    記事全体にまつわる設定
    最新ページは 件分を表示$b2"; $hap1=$hap2=$hap3=$hap4=$hap5=$hap6=$hap7=""; if( ($Age ne "t") && ($Age ne "tc") ){ $hap1=$ck; }elsif( $Age eq "t" ){$hap2=$ck;}else{$hap3=$ck;} if( $WEEK != 1 ){$hap4=$ck;}else{$hap5=$ck;} if( $PutTimeDefault eq "Yes" ){$hap6=$ck;}else{$hap7=$ck;} print <日付順$br  $IRT"Age" $v"t" $hap2>書き込み順$br  $IRT"Age" $v"tc" $hap3>コメントを含む書込順$br$br 記事を表示させる画面幅$ITT"NickyWidth" $v"$NickyWidth" $s"8">$b2 枠線の太さ$ITT"NickyLineWidth" $v"$NickyLineWidth" $s"4">$b2 枠線と本文の間隔$ITT"NickyLineSpan" $v"$NickyLineSpan" $s"4">$b2 日記の名前
     $ITT"pageTitle" $v"$pageTitle" $s"64">$nb$nb$br 管理者の名前(HN)
     $ITT"auther" $v"$auther" $s"64">$br 日記の概要
     $ITT"descr" $v"$descr" $s"64">$br
    $br設定$b2
    記事のタイトルにまつわる設定
    記事タイトルの背景色$ITT"TitleBgColor" $v"$TitleBgColor" $s"10">$br$br タイトルの縦幅$ITT"TSize" $v"$TSize" $s"6">$b2 日付の表現 年$ITT"Year" $v"$Year" $s"6">  月$ITT"Month" $v"$Month" $s"6">  日$ITT"Day" $v"$Day" $s"6">$b2 曜日の表現$br 日〜土$br $IRT"WEEK" $v"1"$hap5>Sun〜Sat$b2 日付の文字サイズ $ITT"DateSize" $v"$DateSize" $s"6">$b2 日付の文字色 $ITT"DateFontColor" $v"$DateFontColor" $s"10">$b2 時刻の表示(デフォルト)$br $IRT"PutTimeDefault" $v"Yes"$hap6>表示する$br $IRT"PutTimeDefault" $v"No\"$hap7>表示しない$b2 記事タイトルの文字サイズ $ITT"TitleSize" $v"$TitleSize" $s"6">$b2 記事タイトルの先頭に付加する文字 MkSt2_EOF $str=&tagenc($TitleHead); print "$ITT\"TitleHead\" $v\"$str\" $s\"15\">$b2\n"; # # リンク用タグを受けつける # print "リンク用タグを$br "; print "$IRT\"LinkTH\" $v\"Yes\""; print $ck if( $LinkTH eq "Yes" ); print ">表示する$br "; print "$IRT\"LinkTH\" $v\"No\""; print $ck if( $LinkTH ne "Yes" ); print ">表示しない$b2\n"; if( $LinkOpen eq "Yes" ){$hap1=$ck; $hap2=""; }else{$hap2=$ck; $hap1="";} if( $Fit eq "ON" ){$hap3=$ck; $hap4="";}else{ $hap4=$ck; $hap3="";} print <
    $br設定$b2
    記事本文にまつわる設定
    記事本文の文字サイズ$ITT"HonbunSize" $v"$HonbunSize" $s"6">$b2 記事本文の表示色$ITT"HonbunColor" $v"$HonbunColor" $s"10">$b2 記事本文の背景色$ITT"HonbunBgColor" $v"$HonbunBgColor" $s"10">$b2 自動リンクは新規ウィンドゥで開くように$br  $IRT"LinkOpen" $v"Yes"$hap1>する$br  $IRT"LinkOpen" $v"No"$hap2>しない$b2 画像表示サイズのデフォルト $ITT"Fit_size" $v"$Fit_size" $s"3" class="button2"> $IRT"Fit" $v"ON"$hap3>有効  $IRT"Fit" $v"No"$hap4>無効$b2 HTML_EOF # # 記事本文のエフェクト # $EffectSTR1=&tagenc($EffectSTR1); $EffectSTR2=&tagenc($EffectSTR2); $EffectSTR3=&tagenc($EffectSTR3); $EffectSTR4=&tagenc($EffectSTR4); print <  色$ITT"EffectCOL1" $v"$EffectCOL1" $s"8">$b2 記事本文のエフェクト  文字$ITT"EffectSTR2" $v"$EffectSTR2" $s"4">  色$ITT"EffectCOL2" $v"$EffectCOL2" $s"8">$b2 記事本文のエフェクト  文字$ITT"EffectSTR3" $v"$EffectSTR3" $s"4">  色$ITT"EffectCOL3" $v"$EffectCOL3" $s"8">$b2 記事本文のエフェクト  文字$ITT"EffectSTR4" $v"$EffectSTR4" $s"4">  色$ITT"EffectCOL4" $v"$EffectCOL4" $s"8">
    ※エフェクトの文字に半角の(/\\/[を指定することはできません$b2
    コメント関連
    コメント入力欄の縦幅(デフォルト)$b2\n"; $hap1=$hap2=$hap3=$hap4=""; if( $CIRCV ne "OFF" ){ $hap1=$ck;}else{$hap2=$ck;} if( $SPMRCV eq "ON" ){ $hap3=$ck;}else{$hap4=$ck;} print <$b2 過去ログ表示時に入力フォームを表示$br $IRT"CIRCV" $v"ON"$hap1>する$br $IRT"CIRCV" $v"OFF"$hap2>しない$b2 コメント入力欄の横幅$br  Name$ITT"CommentNameWidth" $v"$CommentNameWidth" $s"8">  Message$ITT"CommentMessageWidth" $v"$CommentMessageWidth" $s"8">$b2 コメントの枠色 $ITT"CommentFlColor" $v"$CommentFlColor" $s"10">$b2 コメントの文字列 $ITT"CommentStr" $v"$CommentStr" $s"30">$b2 コメントの文字サイズ $ITT"CommentStrSize" $v"$CommentStrSize" $s"16">$b2 Name, Messageの文字サイズ $ITT"CommentNameStrSize" $v"$CommentNameStrSize" $s"16">$b2
    コメント出力欄の設定
    背景色 $ITT"CommentBgColor" $v"$CommentBgColor" $s"10"> $br$br\nコメント記入者の表示色$ITT"CommentNameColor" $v"$CommentNameColor" $s"10">$br 記入者の表示サイズ$ITT"CommentNameSize" $v"$CommentNameSize" $s"5">$b2 コメントの文字色$ITT"CommentFontColor" $v"$CommentFontColor" $s"10">$br コメントの文字サイズ$ITT"CommentFontSize" $v"$CommentFontSize" $s"5">$b2
    コメント受信時メール通知の設定
    sendmailのパス$ITT"MTApath" $v"$MTApath" $s"20">$br 送信先メールアドレス$ITT"MailTo" $v"$MailTo" $s"20">$br SPAM受信時、メール通知を$br $IRT"SPMRCV" $v"ON"$hap3>する$br $IRT"SPMRCV" $v"OFF"$hap4>しない$b2
    MkSt4_EOF print "$br設定$b2\n"; # # 過去ログ # $hap1=$hap2=$hap3=$hap4=$hap5=$hap6=$hap7=$hap8=$hap9=$hap10=""; if( $MsgOldForm == 2 ){ $hap1=$ck; } elsif( $MsgOldForm == 0 ){ $hap2=$ck; } elsif( $MsgOldForm == 4 ){ $hap3=$ck; } elsif( $MsgOldForm == 1 ){ $hap4=$ck; } if( !$MsgOld1st ){ $hap5=$ck; } elsif( $MsgOld1st == 1 ){ $hap6=$ck; } elsif( $MsgOld1st == 2 ){ $hap7=$ck; } if( $SaveHTML eq "ON" ){ $hap8=$ck; $hap10="$br $ITC\"LogRemake\" value=\"GO\">過去ログ再構築"; }else{ $hap9=$ck; } print <
    過去ログにまつわる設定
    表示形式$br  $IRT"MsgOldForm" $v"2" $hap1>月単位(上)  $IRT"MsgOldForm" $v"0" $hap2>月単位(下)  $IRT"MsgOldForm" $v"4" $hap3>月単位(上+下) $br $IRT"MsgOldForm" $v"1" $hap4>件数単位$b2 最新ページにログリストを$br $IRT"MsgOld1st" $v"0" $hap5>表示する  $IRT"MsgOld1st" $v"1" $hap6>表示しない  $IRT"MsgOld1st" $v"2" $hap7>全く表示しない $b2記事をHTMLに保存 $IRT"SaveHTML" $v"ON" $hap8>する  $IRT"SaveHTML" $v"OFF" $hap9>しない$br  過去ログの保存ファイルネーム  $ITT"LogFname" $v"$LogFname" $s"8"> $hap10  $ITC\"starRemake\" value=\"GO\">ダイジェスト再構築
    以下件数単位/月単位共通設定項目
    html_eof $str=&tagenc($MsgOld); print "過去ログ(Old)$ITT\"MsgOld\" $v\"$str\" $s\"20\">"; print "$br(最新ページにログリストを表示しない時に有効)$b2\n"; $str=&tagenc($MsgOldSize); print "過去ログの文字サイズ$ITT\"MsgOldSize\" $v\"$str\" $s\"20\">"; print "
    以下件数単位指定時に有効
    "; $str=&tagenc($MsgNew); print "過去ログ(New)$ITT\"MsgNew\" $v\"$str\" $s\"20\">$b2"; print "過去ログの表示件数"; print "$b2"; print "ページの表示を$br $IRT\"MsgPageOut\" $v\"1\" "; print $ck if( $MsgPageOut ); print ">する  [最新]の文字 $ITT\"MsgOldNEWks\" $v\"$MsgOldNEWks\" $s\"3\"> $ITT\"MsgOldNEW\" $v\"$MsgOldNEW\" SIZE=\"20\"> $ITT\"MsgOldNEWke\" $v\"$MsgOldNEWke\" $s\"3\">$b2"; print "        [最古]の文字 $ITT\"MsgOldOLDks\" $v\"$MsgOldOLDks\" size=\"3\"> $ITT\"MsgOldOLD\" $v\"$MsgOldOLD\" SIZE=\"20\"> $ITT\"MsgOldOLDke\" $v\"$MsgOldOLDke\" $s\"3\">$b2"; print "        ページの括弧 $ITT\"ks\" $v\"$ks\" $s\"3\"> $ITT\"ke\" $v\"$ke\" $s\"3\">$b2"; print " $IRT\"MsgPageOut\" $v\"0\" "; print $ck if( !$MsgPageOut ); $str=&tagenc($MsgOldBetween); print ">しない 過去ログNewとOldの間の表示$br"; print "        $ITT\"MsgOldBetween\" $v\"$str\" $s\"40\">"; if( $MonthSort eq "UP" ){ $hap1=$ck; $hap2="";}else{ $hap2=$ck; $hap1="";} $hap3=&tagenc($MsgOldYear); $hap4=&tagenc($MsgOldMonth); print <
    以下月単位指定時に有効
    表示順$br $IRT"MonthSort" $v"UP" $hap1>昇順  $IRT"MonthSort" $v"DOWN" $hap2>降順$b2 過去ログ$ITT"MsgOldLog" $v"$MsgOldLog" $s"20">背景色$ITT"MsgOldOBgCol" $v"$MsgOldOBgCol" $s"8">文字色$ITT"MsgOldCol" $v"$MsgOldCol" $s"8">$b2     年$ITT"MsgOldYear" $v"$hap3" $s"20">背景色$ITT"MsgOldYBgCol" $v"$MsgOldYBgCol" $s"8">文字色$ITT"MsgOldYFnCol" $v"$MsgOldYFnCol" $s"8">$b2     月$ITT"MsgOldMonth" $v"$hap4" $s"20">背景色$ITT"MsgOldMBgCol" $v"$MsgOldMBgCol" $s"8">$b2     cellpadding$ITT"MsgOldcelp" $v"$MsgOldcelp"> cellspacing$ITT"MsgOldcels" $v"$MsgOldcels">
    HTML_EOFML print "$br設定$b2\n"; # #一覧に関する設定 # print "\n"; print ""; print "\n"; print "
    タイトルリストに関する設定
    \n"; print "年$ITT\"TLyear\" $v\"$TLyear\" $s\"5\">"; print "月$ITT\"TLmonth\" $v\"$TLmonth\" $s\"5\">"; print "日$ITT\"TLday\" $v\"$TLday\" $s\"5\">$b2"; $str=&tagenc($TLyearsz); print "年のサイズ$ITT\"TLyearsz\" $v\"$str\" $s\"5\">$br"; $str=&tagenc($TLmonthsz); print "月のサイズ$ITT\"TLmonthsz\" $v\"$str\" $s\"5\">$br"; $str=&tagenc($TLdaysz); print "日のサイズ$ITT\"TLdaysz\" $v\"$str\" $s\"5\">$b2"; print "表示順$br\n"; print "$IRT\"TitleListSort\" $v\"UP\" "; print $ck if( $TitleListSort eq "UP" ); print ">昇順$br"; print "$IRT\"TitleListSort\" $v\"DOWN\" "; print $ck if( $TitleListSort ne "UP" ); print ">降順$b2"; $str=&tagenc($MsgOldTG); print "画像有の印$ITT\"MsgOldTG\" $v\"$str\" $s\"20\">"; print "
    \n$b2"; # # その他 # if( $PutSerchTagFlag ){ $hap1=$ck;$hap2=""; }else{ $hap2=$ck;$hap1="";} $hap3=$hap4=$hap5=$hap6=$hap7=$hap8=$hap9=$hap10=$hap11=$hap12=""; if( $tagpl eq "strict" ){ $hap4=$ck; }else{ $hap3=$ck; } if( $taglt eq "strict" ){ $hap6=$ck; }else{ $hap5=$ck; } if( $tagbr eq "p" ){ $hap8=$ck; }else{ $hap7=$ck; } if( $tagmode eq "xhtml" ){ $hap10=$ck; }else{ $hap9=$ck; } if( $anker eq "no" ){ $hap12=$ck; }else{ $hap11=$ck; } $tag2lf=&tagenc($tag2lf); $tag3lf=&tagenc($tag3lf); print <
    その他
    過去ログへのリンクタグ$br  $IRT"tagpl" $v"tra"$hap3>Transitional $IRT"tagpl" $v"strict"$hap4>Strict/XHTML $b2画像レイアウト右上&左上指定タグ$br  $IRT"taglt" $v"tra"$hap5>Transitional $IRT"taglt" $v"strict"$hap6>Strict/XHTML $b2連続改行変換$br
    $IRT"tagbr" $v"p"$hap8>する$br  改行が2つ続いた場合   $ITT"tag2lf" $v"$tag2lf">
     改行が3つ続いた場合   $ITT"tag3lf" $v"$tag3lf">
    $IRT"tagbr" $v"br"$hap7>しない
    $brタグモード$br  $IRT"tagmode" $v"html"$hap9>HTML $IRT"tagmode" $v"xhtml"$hap10>XHTML $b2アンカーをCGIに出力$br  $IRT"anker" $v"yes"$hap11>させる $IRT"anker" $v"no"$hap12>させない $b2検索機能へのリンクをCGIに$br  $IRT"PutSerchTagFlag" $v"1"$hap1>出力させる $IRT"PutSerchTagFlag" $v"0"$hap2>出力させない$b2 最新版を出力させるHTMLファイルネーム $ITT"NickyHtml" $v"$NickyHtml" $s"16">
    \n$b2 HTML_EOF_OTH # Trackback if( $sizetb ){ $hap1=$hap2=$hap3=$hap4=""; if( $tbPast eq "Yes" ){$hap1=$ck;$hap2="";}else{$hap2=$ck;$hap1="";} if( $tbRcvDef eq "Yes" ){$hap3=$ck;$hap4="";}else{$hap4=$ck;$hap3="";} print <
    トラックバック関連
    トラックバックのデフォルト$br  $IRT"tbRcvDef" $v"Yes" $hap3>受け付ける  $IRT"tbRcvDef" $v"No" $hap4>受け付けない $b2 過去ログ表示時に0件のトラックバックを表示$br  $IRT"tbPast" $v"Yes" $hap1>する  $IRT"tbPast" $v"No" $hap2>しない
    TBEOF print "$br設定$br$br"; } # # miniList # if( $sizem ){ if( $miniLang ne "ja" ){ $hap1=$ck;$hap2=""; }else{ $hap2=$ck;$hap1=""; } if( $miniNum ne "No" ){ $hap3=$ck;$hap4=""; }else{ $hap3="";$hap4=$ck; } eval('require("./minili.cgi")'); my $ot=eval('&miniliSetup()'); print <
    miniList
    カレンダーの表示言語$br  $IRT"miniLang" $v"en"$hap1>英語 $IRT"miniLang" $v"ja" $hap2>日本語$b2 タイトルの表示文字数$br  $ITT"ministr" $v"$ministr" $s"8">$b2 最新ページのタイトル表示数は$br  $IRT"miniNum" $v"Yes"$hap3>最新+過去ログ $IRT"miniNum" $v"No"$hap4>最新のみ $ot
    $b2 HTML_EOF } # iMODE関連 if( $jpsz ) { print "\n"; print "\n"; print "
    iMODE関連
    "; if( &ReqJcode() ){ print "1ページ目に表示する件数"; print "$b2"; print "過去ログの表示件数"; print ""; }else{ print "jcode.plの実装に失敗しています"; } print "
    $b2\n"; } #JavaApplete系 if( $sizea > 0 ) { if( $apOP eq "Yes" ){$hap1=$ck;$hap2="";}else{$hap2=$ck;$hap1="";} print <
    お絵描きアプレットの設定
    サイズのデフォルト値 横幅$ITT"image_width" $v"$image_width" $s"4">縦幅$ITT"image_height" $v"$image_height" $s"4">$b2 Appletサイズ 横幅$ITT"apw" $v"$apw" $s"6">縦幅$ITT"aph" $v"$aph" $s"6">$b2 Layer $ITT"layerNum" $v"$layerNum" $s"3">枚  Undo $ITT"undoNum" $v"$undoNum" $s"3">回  Quality $ITT"Quality" $v"$Quality" $s"3">$b2 再生の文字 $ITT"ReplaySTR" $v"$ReplaySTR" $s"10"> $b2続きの文字 $ITT"ContinueSTR" $v"$ContinueSTR" $s"10"> $b2 JPEGしきい値 $ITT"JPEG_border" $v"$JPEG_border" $s"5">K $b2圧縮率 $ITT"CompressL" $v"$CompressL" $s"5"> $b2再生時別Windowオープン$br  $IRT"apOP" $v"Yes"$hap1>する  $IRT"apOP" $v"No"$hap2>しない
    MkStAP_EOF } # # SUBMIT # print <   初期値
    tag_eof } # # Save to ConfigFile # sub SaveNickyConf{ if( -e "./panel.cgi" ){ $ctgedit=1; }else{ $ctgedit=0; } open(WDCNF, ">./NickyConf.cgi"); binmode(WDCNF); print WDCNF <){$str .= $_;} close(RRDD); } ($Date, $Title, $Message, $GrpFileName, $Layout, $CommentRecv, $fit_size, $RepLayout, $tbRcv, $nalt) = split(/\x01/, $str); if( $fit_size ){ $FitCheck = "ON"; }else{ undef $FitCheck; } 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 MakeCommentTime{ my($csec,$cmin,$chour,$cday,$cmon,$cyear,$cwday,$cyday,$cisdst) = localtime; sprintf("%04d/%02d/%02d %02d:%02d", $cyear+1900, $cmon+1, $cday, $chour, $cmin); } sub cut_str{ my($str, $len)=@_; my($i, $mkstr, $c, $od); return $str if( !$len || $len >=length($str) ); for($i=0;$i<$len;$i++){ $c=substr($str, $i, 1); $mkstr.=$c; $od=ord($c); if( $od >= 0x80 ){ $c=substr($str, $i+1, 1); $mkstr.=$c; $len+=0.5 if( $od == 0x8e ); $i++; } } $mkstr.=".."; $mkstr.="." if( $i == $len ); $mkstr; } sub getNickyFname{ ($year, $month, $day, $daysub, $Category)=@_; my(@dmy, $gomi1, $gomi2); &MakeNickyFname(); if( !$Category ){ @dmy=&GetFileList("\/$year\/$year\/$month$day$daysub.*\.nky\$"); ($gomi1, $gomi2)=split(/_/, $dmy[0]); if( $gomi2 ){ $Category=substr($gomi2, 0, 8); $NickyFname="$vDir/$year/$month$day$daysub"."_"."$Category\.nky"; } } ($NickyFname, $Category); } sub cmnt_enc{ my($val)=$_[0]; my($rtn, $s, $o); $rtn=""; for $s( split(//, $val)){ $o=sprintf("%02x", ord($s)); $rtn=$rtn."%$o"; } $rtn; } sub cmnt_dec{ my($val)=$_[0]; $val=~s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; $val; } sub SendMailRcvNotice{ my($fspam)=@_; if( $mtap && $mto ){ if( $Admin && (-f "comment_notice_admin.cgi")){ }else{ if( open(PIPE, "|$mtap -t -Fnicky!") ){ print PIPE <){ my($str2, $ctloop); $ctloop=0; ($name, $msg, $time)=split/\x01/; while( $time == "" ){ ($str2, $time)=split(/\x01/, ); $msg.=$str2; $ctloop++; last if( $ctloop > 50 ); } } close(RDC); } ($name, $gomi1)=split(/\x02/, $name); if( ($msg ne $CommentMsg) || ($name ne $CommentName) ){ $cdate=&MakeCommentTime(); if( ($CommentMsg =~ /\x01/) || ($CommentName =~ /\x01/) ){ $ille = 1; }else{ $ille = 0; if( $CommentRecv ){ open(WDC, ">>$NickyComment"); binmode(WDC); if( $Mode eq "CINPUTS" ){ print WDC "\x03"; $CommentName=&cmnt_enc($CommentName); $CommentURI=&cmnt_enc($CommentURI); $CommentMsg=&cmnt_enc($CommentMsg); } print WDC "$CommentName\x02$CommentURI\x01"; print WDC "$CommentMsg\x01"; print WDC "$cdate\n"; close( WDC ); } } &SendMailRcvNotice(0); } undef $CommentMsg; undef $CommentName; undef $CommentURI; ($m_yer, $m_month, $m_day, $m_daysub)=($year, $month, $day, $daysub); &MakeHTMLone($year, $month, $day, $daysub, 0, 0); &MakeNickyLast(); }else{ if( $fspam && ($SPMRCV eq "ON") ){ &SendMailRcvNotice(1); } &nickyGetHead(); if( &IsIMODE() ){ $sts=&ReqJcode(); &jcode'euc2sjis(\$iHead) if( $sts ); }else{ print &put_macro($head); } $flagCMNT=1; $ModeSub=16; &GetNickyFile($NickyFname); if( &IsIMODE() ){ &PutNickyOneDayIMODE(); &jcode'euc2sjis(\$iFoot) if( $sts ); }else{ &PutNickyOneDay(); print &put_macro($foot); } } } # # 記事修正フォーム出力 # (2002/02/10 提供 http://sugarplum.vis.ne.jp/) # sub PutEditNicky { $para = $_[0]; my($str, $fitstr, $dat1, $dat2); local($size1,$size4); my $sc="style=\"text-align:center\""; my $IT=""; $lg=$lg."k"; # $dat2=&put_editstyle(); $dat1=""; $dat1="

    $ITS\"WRITE\" value=\"書込\">

    \n" if( $para eq "WRITE" ); print < $dat1

    記事作成/編集

    本文

    \n"; } print "\n"; print "
    日付 html_eof if( $first eq "Yes" ){ undef $daysub; $Category=0; }else{ local($yd); &MakeNickyFname(); &MakeDateStr(); $yd=sprintf("%04d%02d%02d%s%s%s_%08x",$year,$month,$day,$daysub,$hour,$min,$Category); print "$IT\"HIDDEN\" name=\"DATE\" value=\"$yd\">\n"; } $nCategory=$Category if( !$stage2nd ); $lg=$lg."y"; print "年"; print "月"; print "日\n"; if( $hour >= 0 ){ print "$IT\"CHECKBOX\" $nte name=\"PutTime\" value=\"Yes\""; print " CHECKED" if( $PutTime eq "Yes" ); print ">時刻の表示\n"; } print "$IT\"HIDDEN\" name=\"hour\" value=\"$hour\">\n"; print "$IT\"HIDDEN\" name=\"min\" value=\"$min\">\n"; if( $para =~ /KAKUNIN/ ){ print "$ITS\"CMNTEDIT\" value=\"日付の記事を編集\">\n"; print ""; &get_ctg_data(); if( $load_ctg > 0 ){ my $i=0; my($sr,$catedat,$hp,$idstr); @ctg_ff=sort{$$a[1] <=> $$b[1]} @ctg_ff; for $sr(@ctg_ff){ $idstr=$$sr[4]; next if( $idstr eq "idrst" ); next if( $idstr == 0 ); if( $idstr > 1 ){ $j=1<<($idstr-1); }else{ $j=$idstr; } if( $nCategory & $j ){ $hp=" checked";}else{$hp="";} $catedat.="$IT\"checkbox\" $nte name=\"nCategory\" value=\"$j\"$hp>"; $catedat.="$$sr[0]$br"; } if( $catedat ){ print "

    カテゴリ

    \n$catedat"; } print ""; } $Title=&tagenc($Title); $message=&tagenc($message); print <
    タイトル $IT"TEXT" size="60" name="Title" value="$Title">
    本文 カラーサンプル$br html print &PutFile("$vDir/iconlist_tag.cgi"); print $inpute; print "
    コメント入力欄の縦幅 : "; if( (stat("./tb.cgi"))[7] ){ print "$IT\"checkbox\" $nte name=\"tbRcv\" value=\"Yes\""; print " CHECKED" if( $tbRcv eq "Yes" ); print ">Trackbackを受け付ける"; } print " $IT\"checkbox\" $nte name=\"UrlLink\" value=\"Yes\""; print " CHECKED" if( $UrlLink eq "Yes" ); print ">URI自動リンク\n"; print "
    \n"; $fit_size=$Fit_size if( !$fit_size ); $fitstr=" 表示サイズ $IT\"TEXT\" name=\"fit_size\" value=\"$fit_size\" size=\"3\">fit$IT\"CHECKBOX\" $nte name=\"FitCheck\" value=\"ON\""; $naltstr=" title $IT\"text\" name=\"nalt\" value=\"$nalt\" size=\"12\">"; print "

    画像関連

    \n"; print ""; $size1=(stat("$vDir/PaintBBS.jar"))[7]; $size4=(stat("$vDir/spainter.jar"))[7]; if( $GrpFileName ){ my(@fl,$evf); local($flag, $p2, $n); print "\n\n"; }else{ print ""; } print "\n"; $str="$HRSTR
    • 画像を差し替えたい場合は、一旦画像ファイルを削除した後に再度アップロード/描画します。
    • 『画像ファイル削除』をチェックした場合、確認ボタン選択でも画像ファイルを削除します。
    \n"; }else{ my $ds; $ds=$dat1=""; $dat1=" CHECKED" if( $FitCheck eq "ON" ); print < html_eof if( $size1+$size4 > 0 ){ $ds="\n html_eof } } my @a=("左 ","右 ","上 ","下 ", "左上 ", "右上 ", "上中央 ", "下中央 "); $dat1=""; for($i=0; $i<8; $i++){ $dat1.="$IT\"RADIO\" $nte name=\"Layout\" value=\"$i\""; $dat1.=" CHECKED" if( $i == $Layout ); $dat1.=">$a[$i]"; } &nickyGetHead(); $efoot=~s/\$passwd/$pass/g; print <
    $IT\"HIDDEN\" name=\"GrpFileName\" value=\"$GrpFileName\">"; $n=rindex($GrpFileName, "\."); $p2=substr($GrpFileName, 0, $n); @fl=&GetFileList("\\$NickyDir\\/$p2\\."); $flag=0; for (@fl){ if( ($_ ne "./$year/$GrpFileName") && ($_ ne "./$year/$p2.nky") && ($_ ne "./$year/$p2.cmnt") ){ $flag=1; $evf=$_; last; } } if( !$flag ){ print "event/spch/thumbnail: $IT\"FILE\" name=\"EventFile\" size=\"45\" MaxLength=\"200\">"; if( !$ThmPath ){ print $fitstr; print "CHECKED" if( $FitCheck eq "ON" ); print ">"; } print "
    \n
    画像系ファイル削除$IT\"CHECKBOX\" $nte name=\"GrpFileDel\" value=\"Delete\">"; if( $flag ){ print " event/spcsh/thumbnail削除$IT\"CHECKBOX\" name=\"EventFileDel\" value=\"Delete\">"; if( !$ThmPath ){ print $fitstr; print "CHECKED" if( $FitCheck eq "ON" ); print ">"; } if( $evf =~ /pch$|spch$/ ){ print " $IT\"CHECKBOX\" name=\"RepLayout\" value=\"CHECKED\" $RepLayout>再生(上下)"; } } print "$naltstr
    画像ファイル: $IT"FILE" name="GrpFile" size="45" MaxLength="200" class="netn">$naltstr
    event/spch/thumbnail: $IT"FILE" name="EventFile" size="45" MaxLength="200" class="netn"> $fitstr$dat1>
    アプレット呼び出し: "; $ds.="$ITV\"PaintBBS\">" if( $size1 > 0 ); if( $size4 > 0 ){ $ds.=" $ITV\"SPAINTER:Normal\">"; $ds.=" $ITV\"SPAINTER:Pro\">"; } $layerNum=9 if( !$layerNum ); print <
     幅 $IT"TEXT" name="image_width" value="$image_width" size="3">  高さ $IT"TEXT" name="image_height" value="$image_height" size="3">  Layer $IT"TEXT" name="layerNum" value="$layerNum" size="3">  圧縮率 $IT"TEXT" name="CompressL" value="$CompressL" size="3">  Quality $IT"TEXT" name="Quality" value="$Quality" size="3"> $IT"CHECKBOX" $nte name="AnimeSave" value="True" CHECKED>再生可 $IT"CHECKBOX" $nte name="RepLayout" value="CHECKED" $RepLayout>再生(上下)
    画像の表示位置:$dat1

    $ITS"KAKUNIN" value="確認"> $ITS"KAKUNINH" value="ヘッダをつけて確認"> $ITS"WRITE" value="書込">

    $str
    $efoot
    html_eof } sub nicky_illust_list { my($dirname, $fname, $w, $h, $p1, $p2, $ogpath, $ow, $oh, $oalt, $ThmPath, $fn1, @pt); my($idcnt, $dirTag, $ah, $imgmTag)=(0, "", "", ""); my($imgm_rtn, $imgmn, $ptag); eval('use Image::Magick'); $imgmn=eval('new Image::Magick'); if( $imgmn ){ $imgmTag=<回転(90度)  /$brサムネイル作成  imgm_eof if( ($gdir >= 1000) && ($gdir <= 9999) ){ $imgmTag.=<サムネイル2作成  /サムネイル2全再作成 imgm_eof } } $dirTag=""; if( !$gdir ){ $gdir="$year/imgdata" } if( opendir(RDD, "$vDir/") ){ for $dirname(readdir(RDD)){ if( $dirname =~ /^[1-9][0-9][0-9][0-9]$/ ){ next if( !-d $dirname ); if( $gdir ne $dirname ){ $dirTag.="\[$dirname\]"; }else{ $dirTag.="\[$dirname]"; } &dirCheck("$dirname/imgdata"); if( -d "$dirname/imgdata" ){ if( $gdir ne "$dirname/imgdata" ){ $dirTag.="\[$dirname/imgdata\]"; }else{ $dirTag.="\[$dirname/imgdata]"; } } } } close(RDD); } &PutHTMLheader(); print < var image_type=0; function add_tag_img_list(src, width, height, str_alt){ if( image_type == "thumb" ){ gtm=new Date(); thumb_size=document.getElementById("thumb_size").value; window.open('./$cginame?gdir=$gdir?fname='+src+'?iw='+width+'?ih='+height+'?thumb_size='+thumb_size+'?Mode=make_thumb_nicky?gtm='+gtm.getTime(), "_self"); return; } else if( image_type == "thum2b" ){ gtm=new Date(); thumb_size=document.getElementById("thumb_size2").value; window.open('./$cginame?gdir=$gdir?fname='+src+'?iw='+width+'?ih='+height+'?thumb_size='+thumb_size+'?submode=thum2b?Mode=make_thumb_nicky?gtm='+gtm.getTime(), "_self"); return; } else if( image_type == "thum2b_all" ){ gtm=new Date(); thumb_size=document.getElementById("thumb_size2").value; window.open('./$cginame?gdir=$gdir?fname='+src+'?iw='+width+'?ih='+height+'?thumb_size='+thumb_size+'?Mode=make_thum2b_all?gtm='+gtm.getTime(), "_self"); return; } else if( image_type == "rote90" ){ gtm=new Date(); window.open('./$cginame?gdir=$gdir?fname='+src+'?iw='+width+'?ih='+height+'?rote=90?Mode=make_thumb_nicky?gtm='+gtm.getTime(), "_self"); return; } else if( image_type == "ImgDel" ){ gtm=new Date(); window.open('./$cginame?gdir=$gdir?fname='+src+'?Mode=ImgDel?gtm='+gtm.getTime(), "_self"); return; } str1=' width="' + width + '"'; str2=' height="' + height + '"'; str3=' alt="' + str_alt + '" title="' + str_alt + '"'; parent.enclose('', ''); } function add_tag_thumb_list(src, width, height, str_alt, tsrc, twidth, theight, tstr_alt ){ if( image_type == "thumb" ){ window.open("./$cginame?year=$year?Mode=input_illust_mode", "_self"); return ; } else if( image_type == "thum2b" ){ gtm=new Date(); thumb_size=document.getElementById("thumb_size2").value; window.open('./$cginame?gdir=$gdir?fname='+src+'?iw='+width+'?ih='+height+'?thumb_size='+thumb_size+'?submode=thum2b?Mode=make_thumb_nicky?gtm='+gtm.getTime(), "_self"); return; } else if( image_type == "thum2b_all" ){ gtm=new Date(); thumb_size=document.getElementById("thumb_size2").value; window.open('./$cginame?gdir=$gdir?fname='+src+'?iw='+width+'?ih='+height+'?thumb_size='+thumb_size+'?Mode=make_thum2b_all?gtm='+gtm.getTime(), "_self"); return; } else if( image_type == "ImgDel" ){ gtm=new Date(); window.open('./$cginame?gdir=$gdir?fname='+src+'?Mode=ImgDel?gtm='+gtm.getTime(), "_self"); return; } str1=' width="' + width + '"'; str2=' height="' + height + '"'; str3=' alt="' + str_alt + '" title="' + str_alt + '"'; str4=''; strt1=' width="' + twidth + '"'; strt2=' height="' + theight + '"'; strt3=' alt="' + tstr_alt + '" title="' + tstr_alt + '"'; strt4=''; str5 ='' + strt4 + ''; parent.enclose(str5, ''); } function setImageType(type){ image_type=type; }
    $brフォルダ移動:$dirTag $br $brクリックした画像を$br 本文へ転記 /削除 $imgmTag
    $br imglist_eof if( opendir(RD, "$vDir/$gdir") ){ for $fname( readdir(RD) ){ if( $fname =~ /\.jpg$|\.gif$|\.png$/i ){ next if( $fname =~/\.thumb\.jpg$|\.thumb\.gif$|\.thumb\.png$/i ); my(@fn, $gpath); $gpath="$vDir/$gdir/$fname"; ($w, $h)=&GetImageSize($gpath); next if( !$w || !$h ); ($ogpath, $ow, $oh) = ($gpath, $w, $h); $p1=rindex($gpath,"\."); $fn1=substr($gpath, 0, $p1); $ThmPath = &get_thumb_name($fn1); if($ThmPath){ my($ow,$oh) = $ow=$w+20;$oh=$h+26; $gpath=$ThmPath; ($w, $h)=&GetImageSize($gpath); } my($pw, $ph, $fit_width, $fit_height); $pw=200/$w; $ph=200/$h; if( $pw > $ph ){ $fit_width=int($w*$ph);$fit_height=int($h*$ph); }else{ $fit_width=int($w*$pw);$fit_height=int($h*$pw); } if( ($fit_width > $w) || ($fit_height > $h) ){ $fit_width=$w;$fit_height=$h; } if( $ThmPath ){ $ptag="\"$fname\"\n"; } else { $ptag="\"$fname\"\n"; } @fn=($gpath, $ptag, (stat($gpath))[10]); $pt[$idcnt]=\@fn; $idcnt++; } } close RD; } my($tdmax,$cnt)=(3,0); my($bs,$sp); print ""; my(@il)=sort{$$b[2] cmp $$a[2]} @pt; for($i=0; ($i<20)&&($i<$idcnt); $i++){ print "" if( $cnt == 0 ); $bs=&BaseName($il[$i][0]); print ""; $cnt++; if( $cnt >= $tdmax ){ print ""; $cnt=0; } } $sp=$tdmax-$cnt; print "" if( $sp != $tdmax ); print "
    $bs
    $il[$i][1]
    "; print "\n"; } sub nicky_make_thum2b_all{ my($gomi,$y,$fn,$gfn,$gp,$cnt,$et); $submode='thum2b'; $cnt=0; @nli=&GetNickyList($Age) if( !@nli ); for $gfn( @nli ){ ($gomi, $y, $fn)=split(/\//, $$gfn[0]); next if( $fn !~ /\.nky$/ ); $NickyFname="$vDir/$y/$fn"; &GetDateFromFname(); &GetNickyFile($NickyFname); next if( !$GrpFileName ); $fname="$vDir/$y/$GrpFileName"; &make_thumb_nicky_sub(); #$cnt++; #if( ($cnt % 10) == 0 ){ # $et=time; # if( ($et - $starttime) > 15 ){ # open(WD, ">./makeStarCont.cgi");binmode WD; # print WD $NickyFname;close WD; # &PutHTMLheader(); # print "thumb nail作成を継続します。
    お手数ですがここをクリックしてください($year/$month/$dayまで作成しました)。\n"; #exit; # } #} } &nicky_illust_list(); } sub make_rote_nicky{ my($gsec,$gmin,$ghour,$gday,$gmon,$gyear,$gwday,$gyday,$gisdst)=localtime; my($ext)=&GetExt($fname); my($gf)=sprintf("grp%04d%02d%02d%02d%02d%02d.$ext", $gyear,$gmon,$gday,$ghour,$gmin,$gsec); my($p); if( $gdir !~ /imgdata/ ){ $gf=&BaseName($fname); } eval('use Image::Magick'); $p=eval('new Image::Magick'); $p->Read("$vDir/$fname"); $p->Rotate(degrees=>90); $p->Write(filename=>"$vDir/$gdir/$gf"); undef $p; if( $gdir =~ /imgdata/ ){ unlink "$vDir/$fname"; } } sub DeleteImage{ my $p1=rindex($fname,"\."); my $fn1=substr($fname, 0, $p1); my $ThmPath = &get_thumb_name($fn1); &PutHTMLheader(); if( $ThmPath ){ $fn1=$ThmPath; }else{ $fn1=$fname; } print <<_EOF;
    $fn1を削除します。よろしいですか? $br  /  $br
    _EOF } sub DeleteExeImage{ unlink($fname) if( $submode ); &nicky_illust_list(); } sub make_thumb_nicky_sub{ my($p, $fiw, $fih, $pw, $ph, $fit_width, $fit_height, $geo, $tpath, $r, $ext, $fn); $r=rindex($fname,"\."); $tpath=substr($fname, 0, $r); $ext=substr($fname, $r); if( $submode eq "thum2b" ){ $fn=get_from_thumb($tpath); if( $fn ){ $r=rindex($fname,"\."); $tpath=substr($fname, 0, $r); $ext=substr($fname, $r); } $tpath="$tpath\.thumb2$ext"; }else{ $tpath="$tpath\.thumb$ext"; } $fiw=$iw; $fih=$ih; $pw=$thumb_size/$iw; $ph=$thumb_size/$ih; if( $pw > $ph ){ $fit_width=int($iw*$ph); $fit_height=int($ih*$ph); }else{ $fit_width=int($iw*$pw); $fit_height=int($ih*$pw); } if( $fit_width && $fit_height ){ eval('use Image::Magick'); $p=eval('new Image::Magick'); if( $p ){ $p->Read($fname); $geo=$fit_width."x".$fit_height; $p->Thumbnail(geometry=>$geo); $p->Write(filename=>$tpath); undef $p; } } } sub make_thumb_nicky{ if( $rote ){ &make_rote_nicky(); }else{ &make_thumb_nicky_sub() if( $fname !~ /\.thumb2\./ ); &nicky_illust_list(); } } sub put_editstyle{ my $dat=< html_eof $dat; } # #記事作成 # sub Nicky{ &GetDateLocaltime(); &PutHTMLheader(); print "nicky!記事作成"; print &put_editstyle(); &get_inputarea(); print $inputh; print ""; print ""; $PutTime=$PutTimeDefault; $FitCheck=$Fit; $tbRcv=$tbRcvDef; $UrlLink="Yes"; $Category="-1"; &PutEditNicky('KAKUNIN'); } sub ReqJcode { my($ret); $ret = 0; if( !$flag_jcode ){ if( eval("require '$vDir/jcode.pl'") ){ $flag_jcode=1; $ret=1; }else{ $flag_jcode=2; } }elsif( $flag_jcode == 1 ){ $ret=1; } $ret; } # #記事作成(iMODE版) # sub NickyIMODE { my($opt)=@_; my($optmsg); my($str); if( $opt eq "edit" ){ $optmsg=""; }else{ $optmsg=""; } $ITT=""; if( $daysub ){ my($ct); $ct=sprintf("_%08x", $Category) if( $Category ); $str.=<$ITT"GrpFileName" value="$GrpFileName">$ITT"Layout" value="$Layout">$ITT"CommentRecv" value="$CommentRecv">$ITT"fit_size" value="$fit_size">$ITT"FitCheck" value="$FitCheck">$ITT"RepLayout" value="$RepLayout">$ITT"tbRcv" value="$tbRcv"> NIMS_EOF } $str.=<$br本文$br $br PassWord$br $optmsg NIM_EOF ; &jcode'euc2sjis(\$str) if( &ReqJcode() ); print $str; } # #記事編集(iMODE) # sub NickyEditIMODE{ my($opt)=@_; my(@lst, $gfn, $fn); if( $daysub ){ &MakeNickyFname(); if( !-e "$vDir/$NickyFname" ){ $fn=sprintf("%s/%04d/%02d%02d%s.*.nky\$", $vDir, $year, $month, $day, $daysub); @lst=&GetFileList($fn); $NickyFname=$lst[0]; &GetDateFromFname(); } }else{ @lst=&GetNickyList("r"); $gfn=$lst[0]; $NickyFname=$$gfn[0]; &GetDateFromFname(); } &GetNickyFile("$vDir/$NickyFname"); $Message=&message_br($Message); &NickyIMODE($opt); } # # iMODEより受信 # sub RecvIMODE{ if( &ReqJcode() ){ &jcode'sjis2euc(\$Title); &jcode'sjis2euc(\$Message); &jcode'sjis2euc(\$passwd); } if( &AdminCheck($passwd) ){ &GetDateLocaltime() if( !$daysub ); $hour=sprintf("%02d", $hour); $min=sprintf("%02d", $min); $PutTime=$PutTimeDefault; &WriteNicky(); &MakeNickyLast(); }else{ &NickyIMODE("edit"); } } sub DeleteImode{ if( &AdminCheck($passwd) ){ &NickyDelete("true"); }else{ &PutHTMLheaderSJIS(); print "Invalid PassWord\n"; } exit; } # # コメントの出力 # sub jadge_uri{ my($name, $uri)=@_; my $tg=""; if( $uri =~ /^http:\/\/[0-9a-z]/i ){ $tg=" target=\"_blank\"" if( $LinkOpen eq "Yes" ); $name="$name"; } $name; } sub comment_uri{ my($name, $uri)=split(/\x02/, $_[0]); &jadge_uri($name, $uri); } sub PutComment { my($name, $uri, $msg, $time, $ctloop, $str2); if(($cf_size > 0) || ($CommentName ne "") || ($CommentMsg ne "")){ print "
      "; if( $cf_size ){ open(RDC, $NickyComment); binmode(RDC); while(){ $ctloop=0; ($name, $msg, $time)=split/\x01/; while( $time == "" ){ ($str2, $time)=split(/\x01/, ); $msg.=$str2; $ctloop++; last if( $ctloop > 50 ); } chop $time; if( $name =~ /^\x03/ ){ if( $Admin && (select eq "main::STDOUT") ){ ($str2, $name)=split(/\x03/, $name); $name=&cmnt_dec($name); $msg=&cmnt_dec($msg); }else{ next; } } $name=&comment_uri($name); $msg=~s/\n/$br/g; $msg=&ConvertMsg($msg); $msg=&Effect($msg); print "
    • $name($time)$br\n"; print "$msg\n"; } close(RDC); } if( ($Mode =~ /CPREVIEW/) && (($CommentName ne "")||($CommentMsg ne "")) ){ $msg=$CommentMsg; $msg=~s/\n/$br/g; $msg=&ConvertMsg($msg); $msg=&Effect($msg); $name=&jadge_uri($CommentName, $CommentURI); $time=&MakeCommentTime(); print "
    • $name($time)$br\n"; print "$msg\n"; } print "
    \n"; } } # # コメントの出力(iMODE) # sub PutCommentIMODE { local($name, $msg, $time, $size, $ctloop, $str2); my($str); $size=(stat($NickyComment))[7]; if( $size > 0 ){ print "
      "; open(RDC, $NickyComment); binmode(RDC); while(){ $ctloop=0; ($name, $msg, $time)=split/\x01/; while( $time == "" ){ ($str2, $time)=split(/\x01/, ); $msg.=$str2; $ctloop++; last if( $ctloop > 50 ); } chop $time; $msg=~s/\n/$br/g; if( $name =~ /^\x03/ ){ if( $Admin && (select eq "main::STDOUT") ){ ($str2, $name)=split(/\x03/, $name); $name=&cmnt_dec($name); $msg=&cmnt_dec($msg); }else{next;} } $name=&comment_uri($name); $str="
    • $name($time)$br"; print &zenkakuhankaku($str); print &zenkakuhankaku($msg); } close(RDC); print "
    \n"; } } # # コメントの編集 # sub EditComment { local($cnt, $ctloop); my($name, $uri, $msg, $str2); my $IT="コメントの編集\n\n"; print "$brコメントの編集$br$br\n"; print "※コメントを削除したい場合は名前を消します$br$br\n"; print "
    \n"; &InsertDateTag(); $cnt=0; if( open(RDC, $NickyComment) ){ binmode(RDC); while(){ s/\"/"/g; $ctloop=0; ($name, $msg, $time)=split/\x01/; while( $time == "" ){ ($str2, $time)=split(/\x01/, ); $msg.=$str2; $ctloop++; last if( $ctloop > 50 ); } chop $time; ($name, $uri)=split(/\x02/, $name); ($CmntSecret, $name)=split(/\x03/, $name); if( $name eq "" ){ $name=$CmntSecret;$CmntSecret=""; }else{ $CmntSecret="Yes"; $name=&cmnt_dec($name); $uri=&cmnt_dec($uri); $msg=&cmnt_dec($msg); } print "Name $IT\"TEXT\" name=\"CmntNameZZZ$cnt\" value=\"$name\"> \n"; print "URI $IT\"TEXT\" name=\"CmntURIZZZ$cnt\" value=\"$uri\"> \n"; print "Date $IT\"TEXT\" name=\"CmntTimeZZZ$cnt\" value=\"$time\"> \n"; print "Secret $IT\"hidden\" name=\"CmntSecretZZZ$cnt\" value=\"Yes\">" if( $CmntSecret ); $msg=~s/&/&/g; print "Message  \n"; print "
    \n"; $cnt++; } if( $passwd ){ print "$IT\"hidden\" name=\"passwd\" value=\"$passwd\">\n"; } close RDC; } print "$IT\"submit\" name=\"CMNTWRITE\" value=\"保存\">\n"; print "$IT\"submit\" name=\"SPAMLIST\" value=\"SPAM LIST\">\n"; print "\n\n"; } # # 編集したコメントを書きこむ # sub WriteComment{ my($i, $sc); &MakeNickyFname(); open(WDC, ">$NickyComment"); binmode WDC; for($i=0; $i <= $CmntCnt; $i++){ if( ($CmntName[$i] ne "")&&($CmntMsg[$i] ne "")&&(($CmntName[$i]=~/[\x80-\xFF]/)||($CmntMsg[$i]=~/[\x80-\xFF]/))&&($CmntMsg[$i]!~/\<a/)&&($CmntTime[$i] ne "")&&(($CmntMsg[$i]!~/url\=/))){ if( $CmntSecret[$i] eq "Yes" ){ $sc="\x03"; $CmntName[$i]=&cmnt_enc($CmntName[$i]); $CmntURI[$i]=&cmnt_enc($CmntURI[$i]); $CmntMsg[$i]=&cmnt_enc($CmntMsg[$i]); }else{$sc="";} print WDC "$sc$CmntName[$i]\x02$CmntURI[$i]\x01$CmntMsg[$i]\x01$CmntTime[$i]\n"; } } close WDC; &MakeHTMLone($year, $month, $day, $daysub, 0, 0); &MakeNickyLast(); } # SPAMで1 sub isCmntSpam { my($name, $msg)=@_; my $rtn=1; if( (($name =~ /\xA4[\xA1-\xF3]/) || ($msg =~ /\xA4[\xA1-\xF3]/)) && ($msg !~ /<a/) && ($msg !~ /\url=/) ){ $rtn = 0; } $rtn; } # # SPAM LIST # sub SPAMLIST { my $spflag=0; my $tm; &PutHTMLheader(); if( opendir(RDD, "$vDir/") ){ for $dirname(readdir(RDD)){ if( $dirname =~ /^[1-9][0-9][0-9][0-9]$/ ){ if( opendir(RD, "$vDir/$dirname") ){ for $fname( readdir(RD) ){ if( $fname =~/^[0-1][0-9][0-9][0-9].*[A-Z]\.cmnt$/ ){ if( open(RDC, "$vDir/$dirname/$fname") ){ my $dat=; ($name, $msg, $tm)=split(/\x01/, $dat); if( ($name ne "") && ($msg ne "") ){ if( isCmntSpam($name, $msg) ){ my $dy=substr($fname, 0, 5); my $DT="$dirname$dy"; print "この日のスパムを一括削除 / 表示(別窓)
    "; $spflag=1; next; } } close(RDC); } } } } close(RD); } } close(RDD); } if( !$spflag ){ print "スパムと判定されるコメントはありませんでした 戻る"; } print "\n"; } sub SPAMDEL{ &WriteComment(); &SPAMLIST(); } # # $NickyFnameより日付を取得 # sub GetDateFromFname { my($gomi,$gomi1,$p1, $p2, $fname); $p1=rindex($NickyFname, "\/",); $p2=rindex($NickyFname, "\/",$p1-1); $gomi1=substr($NickyFname, $p2); ($gomi, $year, $fname)=split(/\//, $gomi1); $month=substr($fname,0,2); $day=substr($fname,2,2); $daysub=substr($fname,4,1); if( substr($fname,5,1) eq "_" ){ $Category=hex(substr($fname,6,8)); }else{ $Category=""; } } # # 日付受け渡しタグ挿入 # sub InsertDateTag { my($ct); $ct=sprintf("_%08x", $Category); print "\n"; $ade=""; }elsif( ($EffectSTR2) && ($me =~ /^$EffectSTR2/) ){ $add = ""; $ade=""; }elsif( ($EffectSTR3) && ($me =~ /^$EffectSTR3/) ){ $add = ""; $ade=""; }elsif( ($EffectSTR4) && ($me =~ /^$EffectSTR4/) ){ $add = ""; $ade=""; } if( ($me =~ /$|<\/td>|<\/tr>||<\/dt>|<\/dd>|<\/p>|<\/li>||.*$br$/i) ){ $me=~s/$br$//; } $ret.="$add$me$ade"; } $ret=~s/$br$//i; $ret; } # #記事確認 # sub NickyKakunin { my($para)=@_; my($hs)=&put_editstyle(); $HRSTR="
    "; &get_inputarea(); if( $para eq "NORMAL" ){ &PutHTMLheader(); print $hs; }else{ &nickyGetHead(); $head=~s/<\/head>/$hs$inputh<\/head>/i; print &put_macro($head); } $message = $Message; &MakeDateStr(); $lg=$lg."c"; if( $para eq "NORMAL" ){ $Message =~ s/\n/$br/g; print "確認$inputh
    よろしければ『書込』ボタンをクリックしてください。$HRSTR
    $br$br\n"; &PutNickyOneDay(); print "
    "; }else{ if( $tagbr eq "p" ){ $Message=~s/\r//g; $Message=~s/\n\n\n/$tag3lf/g; $Message=~s/\n\n/$tag2lf/g; } $Message=~s/\n/$br/g; &PutNickyOneDay(); &PutCustomComment() if( $UserCmnt eq "Yes" ); my $fdat=&put_macro($foot); $fdat =~ s/<\/body>|<\/html>|<\/xhtml>//ig; print $fdat; } &PutEditNicky('WRITE'); } sub message_br{ my($dat)=@_; $dat=~s/\r//g; if( $tagbr eq "p" ){ $dat=~s/$tag3lf/\n\n\n/g; $dat=~s/$tag2lf/\n\n/g; } $dat=~s/
    /\n/ig; $dat=~s/
    /\n/ig; $dat; } # # 指定された日時の記事を編集する # sub NickyEdit { my(@fl, $fn); if( (!$year) && ($nyear) ){ $year=$nyear; $month=$nmonth; $day=$nday; $Category=$nCategory; undef $daysub; } $UrlLink="Yes"; $PutTime=$PutTimeDefault; $FitCheck=$Fit; if( !$daysub ){ &PutHTMLheader(); print "記事編集\n\n"; $NickySPath=sprintf("$vDir/%04d/%02d%02d*\\.nky", $year, $month, $day); @fl=&GetFileList($NickySPath); $find=$#fl; if( $find > 0 ){ $ModeSub=1; for $fn(@fl){ $NickyFname="$vDir/$fn"; &GetNickyFile($NickyFname); &PutNickyOneDay(); print "$br$br"; } print ""; exit; } $daysub="A"; } $ModeSub=4; &MakeNickyFname(); &GetNickyFile($NickyFname); $Message=&message_br($Message); &NickyKakunin('NORMAL'); } # # 指定された記事を削除する TRUE=unlink(Grp); # sub NickyDelete { my($flag)=@_; my($oldFname, $o, $n, $p, @fl); my($op, $np); my($f, $cnt, $fn, $dmy, $ctg, $flagS); my($by, $bm, $bd, $bds, $bc, $bn); $flagS=0; &get_ctg_data(); &MakeNickyFname(); &GetNickyFile($NickyFname); # 画像ファイルネーム取得 if( $ctgH & $Category ){ $flagS = 1; } ($by, $bm, $bd, $bds, $bc, $bn) = ($year, $month, $day, $daysub, $Category, $NickyFname); unlink($NickyFname); # 記事本文削除 $f="$month$day"; if( ($GrpFileName) && ($flag) ){ $n=rindex($GrpFileName, "\."); $oldFname=substr($GrpFileName,0,$n); @fl=&GetFileList("$NickyDir/$oldFname\\."); for $p(@fl){ unlink("$vDir/$p"); } } unlink($NickyComment); $dsub=ord($daysub)-0x41; $cnt=0; $oldFname=$NickyFname; @fl=&GetFileList($NickySPath); for $p(@fl){ $cnt++; if( $cnt > $dsub ){ $NickyFname="$vDir/$p"; $p=sprintf("$year/$f%c",$cnt+0x40); ($dmy, $ctg)=split(/_/, $NickyFname); if( !$ctg ){ $fn="$p.nky"; }else{ $fn="$p\_$ctg"; } rename($NickyFname, "$vDir/$fn"); #以下コメントのrename $n="$vDir/$p.cmnt"; $o=sprintf("$vDir/$year/$f%c.cmnt", $cnt+0x41); rename($o, $n); #コメントのrenameここまで $oldFname="$vDir/$p"; } } if( $flag ){ &makeStarAll() if( $flagS ); ($year, $month, $day, $daysub, $Category, $NickyFname)=($by, $bm, $bd, $bds, $bc, $bn); eval('require("./tb.cgi")'); unless( $@ ){ eval("del_daytb(\"$year\", \"$month\", \"$day\", $daysub)"); &goto_exit("[$@]
    お手数ですが tb.cgi を最新のものに入れ替えてください") if( $@ ); } $p=sprintf("%02d/%02d.*\.nky", $year, $month); @fl=&GetFileList("$vDir/$p"); if( $#fl >= 0 ){ &MakeHTMLone($year, $month, $day, $daysub, 0, 0); }else{ $fn=&MakeMonthIndexFname($year, $month); unlink("$vDir/$fn"); $fn=&MakeMonthFname($year, $month); unlink("$vDir/$fn"); if( $MsgOldForm !~ /1/ ){ &MakeMonthHTML(); } } &MakeNickyLast(); } } # # 指定された記事を削除するか確認 # sub NickyDeleteConfirm{ &PutHTMLheader(); print "\n"; &MakeNickyFname(); &GetNickyFile($NickyFname); $ModeSub=2; &PutNickyOneDay(); print "$brこれを削除します。$brよろしければ削除実行ボタンをクリックしてください。\n"; } sub dirCheck{ my($pth)=@_; if( !-e $pth ){ mkdir($pth, 0777); close WDD if(open(WDD,">$pth/index.html")); } } # # 記事ファイル書込み # sub WriteNickyFile{ my($r, $p); $r=rindex($NickyFname, "\/"); $p=substr($NickyFname, 0, $r); dirCheck($p); undef $fit_size if( $FitCheck ne "ON" ); $a=open(WR, ">$NickyFname"); binmode(WR); print WR "$Date\x01"; print WR "$Title\x01"; print WR "$Message\x01"; print WR "$GrpFileName\x01"; print WR "$Layout\x01"; print WR "$CommentRecv\x01"; print WR "$fit_size\x01"; print WR "$RepLayout\x01"; print WR "$tbRcv\x01"; print WR "$nalt\x01"; close(WR); } sub WriteNicky{ $Message=~s/\r//g; if( $tagbr eq "p" ){ $Message=~s/\n\n\n/$tag3lf/g; $Message=~s/\n\n/$tag2lf/g; $Message=~s/\n$/$br/; } $Message=~s/\n/$br/ig; &MakeDateStr(); &MakeNickyFname(); &WriteNickyFile(); } sub GetFileList { my($opt)=@_; my($i, @pt, $dirname, $fname, $f, $p1, $p2); $p1=rindex($opt,"\/"); $p2=rindex($opt,"\/", $p1-1); $opt=substr($opt, $p2); $i=0; undef @pt; if( opendir(RDD, "$vDir/$year/") ){ for $fname( readdir(RDD) ){ $f="./$year/$fname"; $pt[$i++]=$f if( $f =~ /$opt/ ); } closedir(RDD); } @pt; } sub GetNickyList{ my($opt)=@_; my($i, $tmp, @pt, $ctry, $hexctg); if( ($opt eq "r") || ($opt eq "t") || ($opt eq "tr") ){ $tmp="^[0-1][0-9][0-3][0-9][A-Za-z].*\\.nky\$"; }else{ $tmp="^[0-1][0-9][0-3][0-9][A-Za-z].*\\.nky\$|^[0-1][0-9][0-3][0-9][A-Za-z]\\.cmnt\$"; } $i=0; undef @pt; if( opendir(RD, "$vDir/") ){ for $dirname( readdir(RD) ){ if( $dirname =~ /^[1-9][0-9][0-9][0-9]$/ ){ if( opendir(RDD, "$vDir/$dirname") ){ for $fname( readdir(RDD) ){ my(@fn, $f); if( $fname =~ /$tmp/ ){ if( $ctg ){ my($fn, $ctg1)=split(/_/, $fname); my($ctgdat, $dummy)=split(/\./, $ctg1); next if( !($ctg & hex($ctgdat)) ); } $f="/$dirname/$fname"; @fn=($f, (stat("$vDir/$dirname/$fname"))[10]); $pt[$i]=\@fn; $i++; } } closedir(RDD); } } } closedir(RD); } return sort{$$b[1] cmp $$a[1]} @pt if( ($opt eq "t") || ($opt eq "tc") ); if( $opt eq "tr" ){ return sort{$$a[0] cmp $$b[0]} @pt; }else{ return sort{$$b[0] cmp $$a[0]} @pt; } } # 指定された日付の記事が何ページ目にあるのか探す sub SerchPageFromDate { my($gomi, $fn, $fname, @oldname, $gyear, @oldyear); my($cnt, $page, $gfn); my($syear, $smonth, $sday, $sdaysub, $i); my($ofn, $p1, $p2); $syear=$year;$smonth=$month;$sday=$day;$sdaysub=$daysub; $Category=$ctg if( $ctg ); &MakeNickyFname(); $p1=rindex($NickyFname, "\/"); $ofn=substr($NickyFname, $p1+1, 5); $cnt=0; @nli=&GetNickyList($Age) if( !@nli ); for $gfn(@nli){ next if( $$gfn[0] !~ /\.nky$/ ); $NickyFname=$$gfn[0]; ($gomi, $gyear, $fname)=split(/\//, $$gfn[0]); ($fn, $gomi)=split(/\./, $fname); last if( ($year == $gyear) && (substr($fn, 0, 5) eq $ofn) ); $oldyear[$i]=$gyear; $oldname[$i]=$fn; $cnt++; } if( !&IsIMODE() ){ if( $cnt < $PrintDay ){ $page=0; }else{ $page=(($cnt+1)-$PrintDay)/$PageCnt; $page++ if( $page != int((($cnt+1)-$PrintDay)/$PageCnt) ); } $PageNo=int($page); &NickyPageOut($PageNo); }else{ if( $cnt < $PrintiDay ){ $page=0; }else{ $page=(($cnt+1)-$PrintiDay)/$PageiCnt; $page++ if( $page != int((($cnt+1)-$PrintiDay)/$PageiCnt) ); } $PageNo=int($page); &NickyPageOutIMODE($PageNo); } } sub GetIndexList{ my(@pt, $fname); my $i=0; if( 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++; } } closedir(RD); } @pt; } sub GetHTMLlist{ my($i, @pt, $fname); undef @pt; if( opendir(RD, "$vDir/") ){ for $fname( readdir(RD) ){ if( $MsgOldForm !~ /1/ ){ if( $fname =~ /^$LogFname[1-9][0-9][0-9][0-9][0-1][0-9]\.html$/ ){ $pt[$i]=$fname; $i++; } }else{ if( $fname =~ /^$LogFname[0-9][0-9][0-9][0-9][0-9]\.html$/ ){ $pt[$i]=$fname; $i++; } } } closedir(RD); } @pt; } # # ページ出力モード # パラメータで渡されたページを出力 # $PrintDay=最新表示件数 # $PageCnt =過去ログ件数指定時に表示する件数 # sub NickyPageOut { my($gomi, $fn, $fname, @oldname, @oldyear); my($cnt, $startno, $find); my($pageno, $flaglog, $gfn); my(@fl, $hd, $ft, $out_1st, $ctgl, $outcnt, $target); my($f,$y,$m,$d,$ds); &nickyGetHead(); $pageno=$_[0]; #出力開始番号算出 if( $pageno == 0 ){ $startno=0; $hd=$head; $ft=$foot; }else{ $startno=$PrintDay+($pageno-1)*$PageCnt; if( $Use2ndHD eq "Yes" ){ $hd=$head2nd; }else{ $hd=$head; } if( $Use2ndFT eq "Yes" ){ $ft=$foot2nd; }else{ $ft=$foot; } } $outcnt = $pageno == 0 ? $PrintDay:$PageCnt; $outcnt+=$startno; $ModeSub=16; $cnt=$flaglog=0; unless( @nli ){ @nli=&GetNickyList($Age) }else{ if( $mkHTML ){ if( ($Age eq "t") || ($Age eq "tc") ){ @nli=sort{$$b[1] cmp $$a[1]} @nli; }elsif( $Age eq "tr" ){ @nli=reverse(sort{$$b[0] cmp $$a[0]} @nli); }else{ @nli=sort{$$b[0] cmp $$a[0]} @nli; } } } for $gfn(@nli){ ($gomi, $year, $fname)=split(/\//, $$gfn[0]); ($fn, $gomi)=split(/\./, $fname); $flag=0; for($i=0; $i<$cnt; $i++){ if( ($oldyear[$i] eq $year) && ($oldname[$i] eq $fn) ){ $flag=1; last; } } if( $flag == 0 ){ $oldyear[$i]=$year; $oldname[$i]=$fn; if( $cnt >= $startno ){ $NickyFname="$vDir/$year/$fn.nky"; if( $cnt >= $outcnt ){ $flaglog=1; last; } &GetNickyFile($NickyFname); next if(!$Title && !$Message && (!$Admin || $mkHTML)); $NickyComment="$vDir/$year/$fn.cmnt"; if( !$out_1st ){ $gomi=$year; $month=substr($fn, 0, 2); ($f, $y,$m,$d,$ds)=($NickyFname,$year,$month,$day,$daysub); print &put_macro($hd); if( ($MsgOldForm == 2) || ($MsgOldForm == 4) ){ &PutMonthTag("UP", ""); print "$br\n"; } $out_1st=1; $year=$gomi; } if(($pageno == 0) && ($MsgOldForm == 1) && ($mkHTML == 1) && ($SaveHTML eq "ON")){ $target=int(($#nli-$cnt)/$PageCnt); $mkhtml_fname = &MakePageFname($target); } &PutNickyOneDay(); print $br; } $cnt++; } } if( !$out_1st ){ ($f, $y,$m,$d,$ds)=($NickyFname,$year,$month,$day,$daysub); print &put_macro($hd); } # $MsgOldForm:0,2=月, 1=件数 # $MsgOld1st:最新ページにログリストを0する, 1しない, 2全然しない $ctgl=$ctg?"\?ctg=$ctg":""; if( ($page == 0) && ($MsgOld1st == 2) ){ }elsif( $MsgOldForm == 1 ){ print "
    \n"; if( !$mkHTML || $SaveHTML ne "ON" ){ print "$MsgNew " if( $pageno ); if( ($pageno!=0) || ($MsgOld1st==0) ){ if( $MsgPageOut ){ &PutPageTag(); }else{ print $MsgOldBetween; } } print "$MsgOld" if( $flaglog ) ; }else{ #page=0だけ考えれば良い。 my($fnh); $cnt=@nli-$PrintDay; $target=int($cnt/$PageCnt); $target-- if( !($cnt % $PageCnt) ); $fnh=&MakePageFname($target); $gfn=$nli[$PrintDay]; ($gomi, $year, $fname)=split(/\//, $$gfn[0]); $fn=substr($fname, 0,5); print $MsgOldBetween if( !$MsgOld1st && !$MsgPageOut); print "$MsgOld" if( $flaglog ) ; } print "\n
    \n"; print "$br$br一覧 / 検索  " if( $PutSerchTagFlag ); }else{ my($fn, $str, $cyear, $cmon, $mh); undef $str; if( ($Age eq "t") || ($Age eq "tc") ){ $gomi=$fl[0]; $fn=$$gomi[0]; $cyear=substr($fn, 2, 4); $cmon=substr($fn, 7, 2); if( !$mkHTML || ($SaveHTML ne "ON") ){ $str=sprintf("$cgipath?DATE=%04d%02d$ctgl?MODE=MONTH", $cyear, $cmon); }else{ $mh=&MakeMonthFname($cyear, $cmon); $str="$www/$mh"; } }elsif( $Age eq "r" ){ if( $NickyFname ){ &GetDateFromFname(); if( !$mkHTML || ($SaveHTML ne "ON") ){ $str=sprintf("$cgipath?DATE=%04d%02d$ctgl?MODE=MONTH#%04d%02d%02d%s", $year, $month, $year, $month, $day, $daysub); }else{ $mh=&MakeMonthFname($year, $month); $str=sprintf("$www/$mh#%04d%02d%02d%s",$year,$month,$day,$daysub); } } } if( $MsgOld1st == 0 ){ &PutMonthTag("DOWN", $str) if(($MsgOldForm == 0) || ($MsgOldForm == 4)); }elsif( $str ){ print "\n"; } } ($NickyFname,$year,$month,$day,$daysub)=($f, $y,$m,$d,$ds); print &put_macro($ft); } # # ページ出力モード(iMODE版) # パラメータで渡されたページを出力 # sub NickyPageOutIMODE { my($pageno)=@_; my($gomi, $fn, $fname, @oldname, @oldyear); my($cnt, $startno, $find, $gfn); my($flaglog, $sts); my($pgout, $outcnt); $PrintDay=$PrintiDay; #最初のページに表示する記事数 $PageCnt=$PageiCnt; #最初以外のページに表示する記事数 #出力開始番号算出 if( $pageno == 0 ){ $startno=0; }else{ $startno=$PrintDay+($pageno-1)*$PageCnt; } $outcnt = $page == 0 ? $PrintDay:$PageCnt; $outcnt+=$startno; $ModeSub=16; #ヘッダを出力 &nickyGetHead(); $sts=&ReqJcode(); &jcode'euc2sjis(\$iHead) if( $sts ); print $iHead; print "
    "; $cnt=$flaglog=0; for $gfn(&GetNickyList($Age)){ ($gomi, $year, $fname)=split(/\//, $$gfn[0]); ($fn, $gomi)=split(/\./, $fname); $flag=0; for($i=0; $i<$cnt; $i++){ if( ($oldyear[$i] eq $year) && ($oldname[$i] eq $fn) ){ $flag=1; last; } } if( $flag == 0 ){ $oldyear[$i]=$year; $oldname[$i]=$fn; if( $cnt >= $startno ){ if( $cnt >= $outcnt ){ $flaglog=1; last; } $NickyFname="$vDir/$year/$fn.nky"; &GetNickyFile($NickyFname); ($fn, $gomi)=split(/_/, $fn); $NickyComment="$vDir/$year/$fn.cmnt"; &PutNickyOneDayIMODE(); } $cnt++; } } # $MsgOldForm:0=月, 1=件数 # $MsgOld1st:最新ページにログリストを0する, 1しない if( $pageno ){ $pgout=$MsgNew; &jcode'euc2sjis(\$pgout); print "$pgout "; } if( $flaglog ){ $pgout=$MsgOld; &jcode'euc2sjis(\$pgout); print "$pgout"; } close(RDD); &jcode'euc2sjis(\$iFoot) if( $sts ); print $iFoot; } # # 月出力モード # $year, $monthで指定された月を出力 # sub NickyMonthOut { my($sp, $gomi, $fn, $fname); my($tuki, $nen); my($dmy, $ctgd, $ctgh, @list); my($f,$y,$m,$d,$ds); $nen=$year; $tuki=$month; $ModeSub=16; #ヘッダを出力 &nickyGetHead(); ($f, $y,$m,$d,$ds)=($NickyFname,$year,$month,$day,$daysub); if( $Use2ndHD eq "Yes" ){ print &put_macro($head2nd); }else{ print &put_macro($head); } if( ($MsgOldForm == 2) || ($MsgOldForm == 4) ){ &PutMonthTag("UP", ""); print "$br\n"; } $year=$nen; $sp=sprintf("^./%04d/%02d...*\\.nky\$", $nen, $tuki); @list=&GetFileList($sp); @list=sort @list; @list=reverse(@list) if( $MonthSort eq "UP" ); print "\n\n"; for $fn(@list){ if( $ctg ){ ($dmy, $ctgd)=split(/_/, $fn); next unless( $ctgd ); $ctgh=hex(substr($ctgd, 0, 8)); next unless( $ctg & $ctgh ); } $NickyFname="$vDir/$fn"; &GetNickyFile($NickyFname); next if( !$Title && !$Message && (!$Admin || $mkHTML) ); if( $saveExec || $Admin && $mkHTML ){ &GetDateFromFname(); print WDI "$day\x01$daysub\x01$Title\x01$GrpFileName\n"; } $NickyComment="$vDir/$year/$fn.cmnt"; &PutNickyOneDay(); print "$br"; } print "\n\n"; &PutMonthTag("DOWN", "") if( ($MsgOldForm == 0) || ($MsgOldForm == 4) ); $year=$nen; ($NickyFname,$year,$month,$day,$daysub)=($f, $y,$m,$d,$ds); if( $Use2ndFT eq "Yes" ){ print &put_macro($foot2nd); }else{ print &put_macro($foot); } } sub MakeIndex{ my($y, $m)=@_; my($aaa,@list, $fname, $fn); $year=$y; $aaa=sprintf("^./%04d/%02d...*\\.nky\$", $year,$m); @list=&GetFileList($aaa); @list=sort @list; @list=reverse(@list) if( $MonthSort eq "UP" ); $fn=&MakeMonthIndexFname($y, $m); open(WDI, ">$vDir/$fn"); for $fname(@list){ $NickyFname="$vDir/$fname"; &GetNickyFile($NickyFname); next if( !$Title && !$Message ); if( $Admin && $mkHTML ){ &GetDateFromFname(); print WDI "$day\x01$daysub\x01$Title\x01$GrpFileName\n"; } } close(WDI); } #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 SaveMonthHTMLone{ my($y, $m)=@_; my($fn, $bky, $bkm); $bky=$year;$bkm=$month; $year=$y;$month=$m; #minili $saveExec=1; $fn=&MakeMonthIndexFname($y, $m); open(WDI, ">$vDir/$fn"); $fnHTML=&MakeMonthFname($y, $m); open(WD, ">$vDir/$fnHTML"); binmode WD; select WD; &NickyMonthOut(); close(WD); close(WDI); select STDOUT; $year=$bky;$month=$bkm; $saveExec=0; } sub MakeDummyIndex{ my($para)=@_; my($gfn, $fn); local(@mnl); if( @nli ){ @mnl=@nli; }else{ @mnl = &GetNickyList("tr") if( !@mnl ); } $omon=$oyear=0; for $gfn( @mnl ){ ($gomi, $year, $fname)=split(/\//, $$gfn[0]); $mon=substr($fname, 0, 2); if( ($oyear != $year) || ($omon != $mon) ){ if( $oyear != $year ){ $oyear=$year; $omon=0; } if( $para ){ &MakeIndex($year, $mon); }else{ $fn=&MakeMonthIndexFname($year, $mon); open(WDI, ">$vDir/$fn"); close(WDI); } $omon=$mon; } } } #$flag = 0: 該当記事のみ変更 # = 1: 全記事対象 #$flag2 = 0: 通常 $flag2は未使用としても可 # 2 = 1: 記事投稿/編集時 sub MakeHTMLone{ local($y, $m, $d, $ds, $flag, $flag2)=@_; return if( $SaveHTML ne "ON" ); ($year, $month, $day, $daysub)=($y, $m, $d, $ds) unless( $year ); $mkHTML=1; if( $MsgOldForm !~ /1/ ){ my($fnidx, $fnl, $bkmode); $bkmode=$Mode; $fnidx=&MakeMonthIndexFname($y, $m); if( !(stat("$vDir/$fnidx"))[7] ){ &MakeMonthHTML(); }else{ &SaveMonthHTMLone($y, $m); } $Mode=$bkmode; }else{ my($p, $p1, $y2, $m2, $d2, $ds2, $nday, $nday2, $i, $j, $pnum); @nli=&GetNickyList("tr") if( !@nli ); unless( $flag ){ $p="/$year/$month$day$daysub.nky"; $j=0; for $p1(@nli){ last if( $$p1[0] eq $p ); $j++; } $pnum=int($j/$PageCnt); &MakeOnePageHTML($pnum, 0); &MakeOnePageHTML($pnum-1, 0) if( $pnum && $flag2 ); }else{ $i=$#nli; $p1=$nli[$i]; $p=rindex($$p1[0], "\/"); $m2=substr($$p1[0], $p+1,2); $d2=substr($$p1[0], $p+3,2); $ds2=substr($$p1[0], $p+5,1); $y2=substr($$p1[0], $p-4, 4); $nday=$y*100000+$m*1000+$d*10+ord($ds)-0x41; $nday2=$y2*100000+$m2*1000+$d2*10+ord($ds2)-0x41; if( $nday >= $nday2 ){ $pnum=int($i/$PageCnt); if( !($i % $PageCnt) && $i ){ $pnum-=1; &MakeOnePageHTML($pnum, 1); $pnum++; } &MakeOnePageHTML($pnum, 1); }else{ &MakePageHTML(); } } } $mkHTML=0; } sub MakePageFname{ my($pn)=@_; sprintf("$vDir/$LogFname%05d.html", $pn); } sub readnStar{ my($nsm,$nspno,$nsd,$nsds,$nspf,$nsoldf,$nsy); $f_readStar = 1; if( open(RDS, "./nickyStar.cgi") ){ ($nsy,$nsm,$nsd,$nsds,$nspf,$nspno,$nshtml,$nsoldf)=split(/,/, ); close RDS; } } sub makeStarOne{ my($next, $nf, $past, $nno)=@_; my $sfn=$LogFname."_s"; my($j1, $j2, $j3, $j4, $nsf, $bkf); $f_mkns = 1; $bkf=$NickyFname; $NickyFname=$nf; &GetDateFromFname(); $nsf="$vDir/$sfn$year$month$day$daysub\.html"; open(WD, ">$nsf"); binmode WD; select WD; &nickyGetHead(); if( $Use2ndHD eq "Yes" ){ $hd=$head2nd; }else{ $hd=$head; } if( $Use2ndFT eq "Yes" ){ $ft=$foot2nd; }else{ $ft=$foot; } $ModeSub=16; &GetNickyFile($nf); ($j1, $j2)=split(/\/i, $hd); ($j3, $j4)=split(/\<\/title\>/i, $j2); $hd="$j1$Title$j4"; print &put_macro($hd); &PutNickyOneDay(); print "
    \n"; if( $next ){ print "$MsgNew\ \ "; } if( $past ){ print "$MsgOld"; } print "\n
    \n"; print &put_macro($ft); close(WD); select STDOUT; $f_mkns = 0; $NickyFname=$bkf; $nsf; } sub makeStarNew { my($ns,$nno,$pf,$pno,$wpno)=(-1,-1,"",-1,-1); my($nsf,$osf,$oldf, $logf); my($by, $bm, $bd, $bs, $bf)=($year, $month, $day, $daysub, $NickyFname); &get_ctg_data(); return if( !($nCategory & $ctgH) && !($Category & $ctgH) ); if( open(RDS, "./nickyStar.cgi") ){ ($y,$m,$d,$ds,$pf,$pno,$osf,$oldf)=split(/,/, ); $wpno = $pno; $logf=$osf; if( ($year == $y) && ($month == $m) && ($day == $d) && ($daysub eq $ds) ){ $pno--; $logf=$oldf; } close(RDS); } $nno=$pno+1; $nsf=&makeStarOne("", $NickyFname, $logf, $nno); if( $nno != $wpno ){ ($year, $month, $day, $daysub, $NickyFname) = ($by, $bm, $bd, $bs, $bf); undef $Title; undef $Message; &makeStarOne($nsf, $pf, $oldf, $wpno) if( $wpno != -1 ); open(WDS, ">./nickyStar.cgi"); print WDS "$by,$bm,$bd,$bs,$bf,$nno,$nsf,$osf"; close WDS; } } sub makeSubStarAll { my($nf)=(@_); my($et, $cnt, $flag)=(0, 0, 1); &get_ctg_data(); $ctgH=1<<($staticH-1); unless( @nli ){ @nli=&GetNickyList("tr"); } else { @nli=reverse(sort{$$b[0] cmp $$a[0]} @nli); } $flag=0 if( $nf ); for $gfn(@nli){ $NickyFname="$vDir$$gfn[0]"; if( !$flag ){ $flag=1 if( $nf eq $NickyFname ); next; } &GetDateFromFname(); if( $Category & $ctgH ){ &GetNickyFile($NickyFname); &makeStarNew(); $cnt++; if( ($cnt % 20) == 0 ){ $et=time; if( ($et - $starttime) > 20 ){ open(WD, ">./makeStarCont.cgi");binmode WD; print WD $NickyFname;close WD; &PutHTMLheader(); print "静的html作成を継続します。
    お手数ですがここをクリックしてください($year/$month/$dayまで作成しました)。\n"; exit; } } } } unlink("./makeStarCont.cgi"); &makeStarList(); if( ($Age eq "t") || ($Age eq "tc") ){ @nli=sort{$$b[1] cmp $$a[1]} @nli; }else{ @nli=sort{$$b[0] cmp $$a[0]} @nli; } } sub makeStarAll { unlink("./nickyStar.cgi"); &makeSubStarAll(); } sub makeContStarAll { my($nf)=""; if(open(RD, "./makeStarCont.cgi")){ binmode RD;$nf=;close RD; } &makeSubStarAll($nf); &NickyPageOut(0); } sub makeStarList { $f_mkns=1; $ctg=$ctgH; open(WD, ">$vDir/DigestList.html"); binmode WD; select WD; &PutTitleList(); close WD; select STDOUT; $f_mkns=0; } # # ページ出力モード # パラメータで渡されたページを出力 # $PrintDay=最新表示件数 # $PageCnt =過去ログ件数指定時に表示する件数 # $para 3 = star # sub MakeOnePageHTML { my($spage, $para)=@_; my($gomi, $fn, $fname, @oldname); my($flaglog, $gfn); my($hd, $ft, $i, $newfname, $oldfname, $out_1st, $bkpage, $cnt); my($f,$y,$m,$d,$ds); my $eacno = 1; $bkpage=$pageno; $pageno=$spage; $saveExec=1; $mkhtml_fname=&MakePageFname($pageno); open(WD, ">$vDir/$mkhtml_fname"); binmode WD; select WD; &nickyGetHead(); if( $Use2ndHD eq "Yes" ){ $hd=$head2nd; }else{ $hd=$head; } if( $Use2ndFT eq "Yes" ){ $ft=$foot2nd; }else{ $ft=$foot; } $ModeSub=16; $flaglog=0; if( $para == 3 ){ $cnt=0; }else{ $cnt=($pageno+1)*$PageCnt-1;$eacno=$cnt-$PageCnt; } for($i=$cnt; $i>$eacno; $i--){ $gfn=$nli[$i]; ($gomi, $year, $fname)=split(/\//, $$gfn[0]); ($fn, $gomi)=split(/\./, $fname); unless( $fn ){$flaglog=1;next;} $NickyFname="$vDir/$year/$fn.nky"; &GetNickyFile($NickyFname); $NickyComment="$vDir/$year/$fn.cmnt"; next if( !$Title && !$Message ); &GetDateFromFname(); if( !$out_1st ){ $out_1st=1; ($f, $y,$m,$d,$ds)=($NickyFname,$year,$month,$day,$daysub); print &put_macro($hd); print "\n\n"; } &PutNickyOneDay(); print "$br"; } if( !$out_1st ){ ($f, $y,$m,$d,$ds)=($NickyFname,$year,$month,$day,$daysub); print &put_macro($hd); print "\n\n"; } print "\n\n"; $flaglog=1 if( $pageno == int($#nli/$PageCnt) ); $newfname=&MakePageFname($pageno+1); $oldfname=&MakePageFname($pageno-1); print "
    \n"; print "$MsgNew " if( !$flaglog ); print $MsgOldBetween; print "$MsgOld" if( $pageno ); print "$br$br一覧 / 検索  " if( $PutSerchTagFlag ); print "\n
    \n"; ($NickyFname,$year,$month,$day,$daysub)=($f, $y,$m,$d,$ds); print &put_macro($ft); close(WD); select STDOUT; $pageno=$bkpage; $saveExec=0; } sub MakePageHTML { my($i, $j, $str, $cnt, $cntl, $lastpage, $oy, $om); local($pageno); $mkHTML=1; #全件数カウント @nli=&GetNickyList("tr") if( !@nli ); $i=$#nli; &MakeDummyIndex(1); #古いページから作る.最古=2 $pageno=0; $om=$oy=-1; for($j=0;$j<$i;$j+=$PageCnt){ &MakeOnePageHTML($pageno, 0); $pageno++; } } sub rmIndex { my($i, @pt, $fname, $f); $i=0; if( opendir(RDD, "$vDir") ){ for $fname( readdir(RDD) ){ $pt[$i++]=$fname if( $fname =~ /nkyIndex/ ); } closedir(RDD); } unlink @pt; } sub MakeMonthHTML{ my($gfn, $fn); local(@mnl, $fnHTML, $bakmode); &rmIndex(); $mkHTML=1; $bakmode=$Mode; $Mode="MONTH"; &MakeDummyIndex(0); @mnl = &GetNickyList("tr") if( !@mnl ); $omon=$oyear=0; for $gfn( @mnl ){ ($gomi, $year, $fname)=split(/\//, $$gfn[0]); $mon=substr($fname, 0, 2); if( ($oyear != $year) || ($omon != $mon) ){ if( $oyear != $year ){ $oyear=$year; $omon=0; } $month=$mon; &SaveMonthHTMLone($year, $month); $omon=$mon; } } $Mode=$bakmode; } sub PutMonthTag_sub{ my($oyear, $omon, $mon, $dat, $ycnt)=@_; my($fn,$fe, $ctgt); $fe=($tagpl ne "strict")?"":""; if( $oyear != $year ){ $ycnt++; if( $oyear ){ $dat.="$fe\n"; } if( $tagpl eq "strict" ){ $dat="$dat$year$MsgOldYear"; }else{ $dat="$dat$year$MsgOldYear$fe"; } } if( ($SaveHTML eq "ON") && $mkHTML && !$ctg){ $fn=&MakeMonthFname($year, $mon); $dat="$dat$mon$MsgOldMonth "; }else{ $ctgl=$ctg?"\?ctg=$ctg":""; $dat.="$mon$MsgOldMonth "; } ($dat, $ycnt); } #過去ログとして月単位のリンクタグを出力 # para="DOWN":下 sub PutMonthTag { my($para, $lnk)=@_; my($gfn, $dat, $ycnt); my($dummy, $dummy2, $fe, $fname, $oyear, $omon, $mon, @mnl, @idxl); $oyear=$omon=0; if( ($SaveHTML eq "ON" ) && !$ctg ){ @idxl=&GetIndexList(); for $gfn( sort @idxl ){ #nkyIndex200402.cgi $year=substr($gfn, 8, 4); $mon=substr($gfn, 12,2); if( ($oyear != $year) || ($omon != $mon) ){ ($dat, $ycnt)=&PutMonthTag_sub($oyear, $omon, $mon, $dat, $ycnt); if( $oyear != $year ){ $ycnt++; $oyear=$year; $omon=0; } $omon=$mon; } } }else{ @mnl = &GetNickyList("tr") if( !@mnl ); for $gfn( @mnl ){ ($dummy, $year, $fname)=split(/\//, $$gfn[0]); $mon=substr($fname, 0, 2); if( ($oyear != $year) || ($omon != $mon) ){ ($dat, $ycnt)=&PutMonthTag_sub($oyear, $omon, $mon, $dat, $ycnt); if( $oyear != $year ){ $ycnt++; $oyear=$year; $omon=0; } $omon=$mon; } } } if( $tagpl eq "strict" ){ $dummy="class=\"mtable\""; $dummy2="class=\"pastmsg\""; $fe=""; }else{ $dummy="border=\"0\" bgcolor=\"$MsgOldOBgCol\""; $dummy2=" bgcolor=\"$MsgOldOBgCol\""; $fe=""; } print "\n$dat"; print "$fe\n
    \n$MsgOldLog"; print "" if( $lnk ); print "
    "; print "$br一覧 / 検索" if( $PutSerchTagFlag && ($para eq "DOWN")); } # ページ指定タグの出力 sub PutPageTag { local($i, $j, $cntl, $lastpage, $fs, $fe); my($ctgl, $cnt); $ctgl="\?ctg=$ctg" if( $ctg ); $fs=$fe=""; if( $tagpl ne "strict" ){ $fs=""; $fe=""; } #全件数カウント @nli=&GetNickyList("r") if( !@nli ); $i=$#nli+1; #件数分リンクする print $fs; if( ($i > $PrintDay) && ($PageNo) ){ print "$MsgOldNEWks$MsgOldNEW$MsgOldNEWke"; } $j=$i-$PrintDay; $lastpage=$j/$PageCnt; if( $j%$PageCnt ){ $lastpage=($j-($j%$PageCnt))/$PageCnt; $lastpage++; } $lastpage=0 if( $lastpage < 0 ); $maxpage=10; $cnt=$PageNo-($maxpage/2); $cntl=0; if( $cnt + $maxpage > $lastpage ){ $cnt=$lastpage-$maxpage; } if( $cnt < 1 ){ $cnt = 1; } for($j=$PrintDay+$cnt*$PageCnt; ($j<$i+$PageCnt) && ($cntl<$maxpage) ; $j+=$PageCnt){ if( $cnt != $PageNo ){ print "$ks$cnt$ke"; }else{ print "$ks$cnt$ke"; } $cnt++; $cntl++; } print "$MsgOldOLDks$MsgOldOLD$MsgOldOLDke" if($lastpage!=$PageNo); print "$fe\n"; } sub write_exec{ my($f, $dat)=("",""); if( open(RD2, "./exelist.cgi") ){ binmode RD2; while(){ $dat.=$_; } close RD2; } for $f(split(/\n/,$dat)){ $f=~s/ |\r//g; eval(require($f)) if( $f ); &goto_end($@) if( $@ ); } } # # 最新×日分の記事を作成 # sub MakeLastHTMLsub{ $mkHTML=1; open(WR, ">$vDir/$NickyHtml"); binmode(WR); select WR; &NickyPageOut(0, $PrintDay); close(WR); select STDOUT; $mkHTML=0; } sub MakeNickyLast{ my($cn, $ccn, $cu, $bky, $bkm, $bkd, $bks); $ctg=$ctgry=0; $MNLflag=1; ($cn, $ccn, $cu)=($CommentName,$CommentCName,$CommentURI); $CommentName=$CommentCName=$CommentURI=""; ($bky, $bkm, $bkd, $bks)=($year,$month,$day,$daysub); &MakeLastHTMLsub(); ($CommentName,$CommentCName,$CommentURI)=($cn,$ccn,$cu); if( &IsIMODE() ){ &NickyPageOutIMODE(0, $PrintDay); }else{ if(($Mode eq "CINPUT") || ($Mode eq "CINPUTS")){ ($year, $month, $day, $daysub)=($m_yer, $m_month, $m_day, $m_daysub); if( $MsgOldForm == 1 ) { &SerchPageFromDate(); }else{ &NickyMonthOut(); } }else{ ($year,$month,$day,$daysub)=($w_year,$w_month,$w_day,$w_daysub); if( !$flag_new_hit && ($Mode eq "WRITE") ){ if( $MsgOldForm == 1 ) { &SerchPageFromDate(); }else{ &NickyMonthOut(); } }else{ if( $Admin ){ &NickyPageOut(0, $PrintDay); }else{ print &PutFile("$vDir/$NickyHtml"); } } } } &write_exec() if( ($Mode eq "WRITE") || ($Mode eq "SEND") ); $MNLflag=0; } sub MakeLastHTMLcheck{ my($data, $hd, $ft); if( !$flag_type ){ $flag_type=1; print "Content-type: text/html\n\n"; } &MakeNickyFname(); if( !-e "$NickyFname" ){ print "file not found [$NickyFname]\n"; exit; } exit unless( open(RD, "$vDir/$NickyHtml") ); binmode(RD); while(){ $data.=$_; } close RD; ($hd, $ft)=split(/$year$month$day$daysub\"/, $data); if( $ft ){ print "exist"; exit; } if( $SaveHTML eq "ON" ){ &MakeHTMLone($year, $month, $day, $daysub, 0, 0); } &MakeLastHTMLsub(); exit; } # # 最新×日分の記事をHTMLに出力 # sub MakeLastHTML{ my($flg); $flg=0; &mobile_load(); if( $BBSmode eq "BBS" ){ $flg=1; }elsif( &AdminCheck($password) ){ $flg=1; } if( $flg ){ if( $daysub ){ &MakeLastHTMLcheck(); }else{ &MakeLastHTMLsub(); } } exit; } # # 戻る # sub NickyReturn{ print <
    戻る】 NREOF } # # 検索キーワード設定 # sub NickySetSearch{ &nickyGetHead(); if( $UseSearchHD eq "Yes" ){ print &put_macro($head2nd); }else{ print &put_macro($head); } print "
    "; print "  検索キーワード "; print " "; print "
    \n"; &NickyReturn(); if( $UseSearchFT eq "Yes" ){ print &put_macro($foot2nd); }else{ print &put_macro($foot); } } # # 検索 # sub NickySerch{ my($aaa, $gomi, $fn, $fname, $gfn); my($find, $startno); my($pageno, $flaglog); my($cnt); $ModeSub=16; $Mode="MONTH"; #ヘッダを出力 &nickyGetHead(); if( $UseSearchHD eq "Yes" ){ print &put_macro($head2nd); }else{ print &put_macro($head); } print "$br検索キーワード『$SerchWord』$br\n"; $SerchWord=~s/\"/\\\"/g; $SerchWord=~s/\'/\\\'/g; $SerchWord=~s/\`/\\\`/g; $SerchWord=~s/ /\.\*/g; $SerchWord=~s/ /\.\*/g; $SerchWord=~s/\\/\\\\/g; $SerchWord=~s/\|/\\\|/g; $SerchWord=~s/\?/\\\?/g; $SerchWord=~s/\//\\\//g; $SerchWord=~s/\-/\\\-/g; $SerchWord=~s/\*/\\\*/g; $SerchWord=~s/\=/\\\=/g; $SerchWord=~s/\&/\\\&/g; $SerchWord=~s/\,/\\\,/g; $SerchWord=~s/\(/\\\(/g; $SerchWord=~s/\)/\\\)/g; @nli=&GetNickyList("tr") if( !@nli ); for $gfn(@nli){ $NickyFname="$vDir/$$gfn[0]"; &GetDateFromFname(); &GetNickyFile($NickyFname); next if( !$Title && !$Message ); $msg=$SerchWord; next if( ($Message !~ /$SerchWord/) && ($Title !~ /$SerchWord/) ); &PutNickyOneDay(); print "$br"; } &NickyReturn(); if( $UseSearchFT eq "Yes" ){ print &put_macro($foot2nd); }else{ print &put_macro($foot); } } #日付から曜日を取得 sub GetWeek{ my($y,$m,$d)=@_; my($dday); my(@monday)=('0','0','31','59','90','120','151','181','212','243','273','304','334','365'); $y--; $dday=$y*365; $dday+=int($y/4); $dday-=int($y/100); $dday+=int($y/400); $y++; $dday += $monday[$m]; if( ((($y % 4 == 0) && ($y % 100 != 0)) || ($y % 400 == 0)) && ($m>2) ){ $dday++; } $dday+=$d; $dday%7; } sub GetJpegWHSub{ my($c1,$c2,$s,$le, $dummy); my($a,$b,$c,$d); my($ch)=0; 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); $le = $c1<<8|$c2; last if (!defined($le) || $le < 2); read(RD, $dummy, $le-2); } } } return (0,0); } sub GetJpegWH{ my($x, $y); if(open(RD, $_[0])){ binmode(RD); ($x, $y)=GetJpegWHSub(); close(RD); } return($x, $y); } sub GetGiffWH{ my($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); } # # 縦幅と横幅を$image_heightと$image_widthに格納 # sub GetImageSize { my($fname)=@_; if( $fname =~ /\.png$/i ){ if( open(RD, $fname) ){ my($w, $fn, $k, $w1, $w2, $w3, $w4); my($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 { my($fn)=""; if( $Pch_File ){ if( $Pch_File =~ /\.pch$|\.spch$/ ){ $fn=$Pch_File; $fn=~s/\.pch$|\.spch$/\.png/; if( (stat($fn))[7] > 0 ){ ($image_width, $image_height)=&GetImageSize($fn); }else{ $fn=$Pch_File; $fn=~s/\.pch$|\.spch$/\.jpg/; if( (stat($fn))[7] > 0 ){ ($image_width, $image_height)=&GetJpegWH($fn); }else{ $fn=$Pch_File; $fn=~s/\.pch$|\.spch$/\.jpeg/; if( (stat($fn))[7] > 0 ){ ($image_width, $image_height)=&GetJpegWH($fn); }else{ $fn=$Pch_File; $fn=~s/\.pch$|\.spch$/\.gif/; ($image_width,$image_height)=&GetGiffWH($fn) if((stat($fn))[7] > 0); } } } }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); }elsif( $Pch_File =~ /\.png$/i ){ ($image_width, $image_height)=&GetImageSize($Pch_File); } } $fn; } # # HTMLヘッダ出力 # sub PutHTMLheaderSJIS{ print "\n\n\n"; } sub IsPCH(){ my($ret); if( ($Pch_File) && ($Pch_File !~ /\.pch$|\.spch$/) ){ if( $Mode eq "ContinuePaintBBS" ){ $ret=1; }else{ $ret=2; } }else{ my($dmy, $dm1, $dm2, @prm); undef $layer_count; @prm=('layer_count', 'layer_max', 'layer_last', 'count_lines', 'quality', 'end_param'); if( open(RD, $Pch_File) ){ $dmy="1"; while( $dmy ){ $dmy=; $dmy=~s/\r|\n//g; ($dm1,$dm2) = split(/=/,$dmy); for $parm(@prm){ if( $parm eq $dm1 ){ ${$dm1}=$dm2; } } } close(RD); } $ret=2 if( $layer_count ); } $ret; } sub CallApplet(){ my($PaintBBS,$spainter,$jud); my($PBBStag, $SPTRtag, $Ctag, $Qtag, $Pstr, $Qstr, $Prostr, $Atag); $Pch_File="$vDir/$Pch_File" if( $Pch_File ); &IsApplet(); $jud=&IsPCH(); $Ctag=""; $Pstr=""; $Prostr="$Ctag "; $Qstr="Quality "; if( ($Pch_File !~ /\.pch$|\.spch$/) && ($PBsize) ){ if( ($jud != 2) || (!$spsize) ){ $PBBStag=$Pstr; }else{ $Qtag=$Qstr; $PBBStag=$Pstr; $SPTRtag=$Prostr; } }elsif( ($jud != 2) && ($PBsize) ){ $PBBStag=$Ctag; }elsif( ($jud == 2) && ($spsize) ){ $SPTRtag=$Prostr; $Qtag=$Qstr; } &PutHTMLheader(); print <
    圧縮率 $Qtag $br $PBBStag $SPTRtag
    ca_eof } # # PaintBBS呼び出し(再生) # sub CallPaintBBSDraw{ my($w, $h, $jud, $pch); my($o1, $o2, $p1, $p2, $ft,$fn); $Pch_File="$vDir/$Pch_File" if( $Pch_File ); $Pch_Speed=-1 if( !$Pch_Speed ); if( ($pch_width) && ($pch_height) ){ $image_width=$pch_width; $image_height=$pch_height; }else{ $fn=&GetImageSizePch(); } $w=$image_width; if( $w < 120 ){ $w=120; } $h=$image_height+25; &PutHTMLheaderSJIS(); $jud=&IsPCH(); $p1=rindex($fn, "\/"); $p2=rindex($fn, "\/", $p1-1); $fn=substr($fn, $p2); if( $RepLayout eq "CHECKED" ){ $hrsize=$w+30; $hrs=""; $o1="
    "; $o2="
    "; }else{ $hrsize=$w*2+30; $hrs="

    "; $o1=""; $o2="$hrs
    "; } print <Replay
    $hrs $o1 ANIME_VIEW_EOF1 #新PCHViewer 既存コード使える if( (stat("$vDir/PCHViewer.jar"))[7] ){ if( $jud == 2 ){ print ""; }else{ print ""; } }else{ print ""; } $p1=rindex($Pch_File, "\/"); $p2=rindex($Pch_File, "\/", $p1-1); $Pch_File=substr($Pch_File, $p2); if( $apOP eq "Yes" ){ $ft="onclick=\"window.close()\" value=\"Close\""; }else{ $ft="onclick=\"history.go(-1)\" value=\"Return\""; } print "\n$o2
    \n"; } # # PaintBBS呼び出し(描画) # sub CallPaintBBS{ my($psec,$pmin,$phour,$pday,$pmon,$pyear,$wday,$yday,$isdst); my($palette,$w,$h,$fn,$jud,$ssmp,$scmp,$sstd,$hp,$str); my($AppleteMode,$p1,$p2,$cry,$wd,$key,$szt, $vms, $apl); $apl="applet"; $vms="$apl id=\"applet\" alt=\"JavaApplet\""; $Pch_File="$vDir/$Pch_File" if( $Pch_File ); ($psec,$pmin,$phour,$pday,$pmon,$pyear,$wday,$yday,$isdst) = localtime; if( (!$year) && ($nyear) ){ $year=$nyear; $month=$nmonth; $day=$nday; $Category=$nCategory; } $pmon+=1; if( $Pch_File ){ $GrpFileName=$Pch_File; $GrpFileName=~s/^.*\///; $GrpFileName=~s/\.pch$|\.spch$|\.jpg$|\.jpeg$|\.gif$|\.giff$|\.png$//i; }else{ my($nmstr); if( $Mode =~ /SPAINTER/ ){ $nmstr="snormal" if( $Mode =~ /Nor/ ); $nmstr="spro" if( $Mode =~ /Pro/ ); }else{ $nmstr="PaintBBS"; } $GrpFileName=sprintf("$nmstr%02d%02d%02d%02d%02d", $pmon,$pday,$phour,$pmin,$psec); } if( $Admin && (($Message) || ($Title)) ){ &WriteNicky(); }else{ &MakeDateStr(); } &MakeNickyFname(); $key=int(rand(999)); $cry=int(rand(9999)); $wd=crypt($cry, $key); &PutHTMLheaderSJIS(); if( !$Admin ){ print "\n"; exit; } open(WR, ">./PaintBBS.cgi"); binmode(WR); print WR "$wd\n"; print WR "$NickyDir\n"; print WR "$NickyFname\n"; print WR "$GrpFileName\n"; print WR $Date; close(WR); print "\n"; $palette=(stat("$vDir/palette.js"))[7]; print "\n" if( $palette > 0 ); print &PutFile("./spainter_head.cgi"); print "Draw!\n\n"; print "\n
    \n\n\n"; &GetImageSizePch(); $w=$image_width+150; $w=400 if( $w < 400 ); $h=$image_height+150; $h=500 if( $h < 500 ); $w=$apw if( $apw ); $h=$aph if( $aph ); if( $Mode =~ /^Continue|^SPAINTER|^PaintBBS/ ){ $ssmp="\n"; print "\n" if( $palette > 0 ); } print "\n
    \n<$vms code=\"c.ShiPainter.class\" name=\"paintbbs\" archive=\"$www/spainter.jar,$www/res/normal.zip\" width=\"$w\" height=\"$h\">"; $hp=$h+300; $hp=$aph if( $aph ); $sstd="\n<$vms code=\"c.ShiPainter.class\" name=\"paintbbs\" archive=\"$www/spainter.jar,$www/res/pro.zip\" width=\"$w\" height=\"$hp\">"; $scmp=""; if( $layerNum ){ $layerNum = 255 if( $layerNum > 255 ); $scmp.=""; } if( ($Mode =~ /^Continue/) || ($Mode =~ /^PaintBBS/) ){ $jud=&IsPCH(); if( $jud == 2 ){ if( $Mode =~ /Pro/ ){ print "$sstd$scmp"; }else{ print "$ssmp$scmp"; } }else{ print "\n<$vms code=\"pbbs.PaintBBS.class\" archive=\"$www/PaintBBS.jar\" name=\"paintbbs\" width=\"$w\" height=\"$h\">"; } }elsif( $Mode =~ /Nor/ ){ print "$ssmp$scmp"; }else{ print "$sstd$scmp"; } if( ($Mode =~ /^SPAINTER/) || ($jud == 2) ){ $AppleteMode="Savespainter"; if( $layer_max ){ print ""; print ""; print ""; } }else{ $AppleteMode="SavePaintBBS"; } print &PutFile("./spainter_param.cgi"); $undoNum=60 if( !$undoNum ); if( $Quality < 3 ){ $undoNum = int(($undoNum+1)/3)*3 if( $undoNum % 3 ); $undoNum = 3 if( $undoNum < 3 ); $undomg=$undoNum/3; }else{ $undoNum = int(($undoNum+1)/2)*2 if( $undoNum % 2 ); $undoNum = 2 if( $undoNum < 2 ); $undomg=$undoNum/2; } undef $qt; if( $Quality ){ $qt=$Quality; }elsif( $quality ){ $qt=$quality; } $qa="" if( $qt ); print "$qa"; if( $Message || $Mode =~ /^Continue/ ){ print ""; }else{ my $ctgt=""; $ctgt="?Category=$Category"; print ""; } print "" if( $AnimeSave eq "True" ); $szt=""; if( $Pch_File ){ $p1=rindex($Pch_File, "\/"); $p2=rindex($Pch_File, "\/", $p1-1); $Pch_File=substr($Pch_File, $p2); if( $Pch_File =~ /\.pch$|\.spch$/i ){ print ""; if( $Pch_File =~ /\.pch$/ ){ print "$szt\n"; } }else{ print "$szt"; } }else{ print "$szt"; } print "\n\n\n
    \n"; $str=&PutFile("./spainter_body.cgi"); $str=~s/%IMG_WIDTH%/$image_width/g; $str=~s/%IMG_HEIGHT%/$image_height/g; print $str; print "
    \n\n\n"; } # # Recv Data from PaintBBS # sub SavePaintBBS { my($key,$cry,$mode); my($dir, $fname, $date, $path, $crcv, $wd); print "Content-type: text/html\n\n"; &ReadSetup(); if( open(RD, "./PaintBBS.cgi") ){ binmode(RD); $wd=; $wd=~s/\r|\n//g; }else{ exit; } ($cry,$key,$mode) = split(/\?/, $ENV{'QUERY_STRING'}); if( $wd ne crypt($cry, $key) ){ open(WD, ">./PaintBBS_error.cgi"); print WD "$ENV{'REMOTE_ADDR'}"; close(WD); exit; } $dir=; chop $dir; $NickyFname=; chop $NickyFname; $fname=; chop $fname; $path="$dir/$fname"; $date=; close(RD); $crcv=$CommentRecv; &GetNickyFile($NickyFname); $Date=$date if( $Date eq ""); $CommentRecv=$crcv if( !$CommentRecv ); $a=; $data=""; while( ){$data.=$_;} unlink("$dir/$GrpFileName") if( $GrpFileName =~ /\.jpeg$|\.jpg$|\.gif$|\.giff$|\.png$/i ); $GrpFileName=$fname; if( substr($data,1,3) eq "PNG" ){ $GrpFileName.=".png"; ($img,$pch)=split(/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/,$data,2); }else{ $GrpFileName.=".jpg"; ($img,$pch)=split(/\xff\xd9[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/,$data,2); } # Save to image file dirCheck($dir); open(WD, ">$dir/$GrpFileName"); binmode(WD); print WD $img; print WD "\xff\xd9" if( $GrpFileName =~ /jpg$/ ); close( WD ); # Save to process file if( length($pch) > 17 ){ if( $Mode eq "SavePaintBBS" ){ open(WD, ">$path.pch"); }elsif( $Mode eq "Savespainter" ){ open(WD, ">$path.spch"); } binmode(WD); print WD $pch; close WD; } &initial2nd(); &GetDateFromFname(); $tbRcv = $tbRcvDef if( !-f "$vDir/$NickyFname" ); &WriteNicky(); if( $Message && $Title ){ open(WR, ">$vDir/$NickyHtml"); binmode(WR); select WR; &NickyPageOut(0, $PrintDay); close(WR); } open(WR, ">./PaintBBS.cgi"); print WR "\n"; close(WR); } # # 記事本文自動編集 # sub ConvertMsg{ my($msg,$flag,$j,$i,$line,$url, $str, @field, $flagB); $flag=0; $msg=""; $j=0; @field=split(/http:\/\/|HTTP:\/\//,$_[0]); for $line( @field ){ if( $j==0 ){ $j++; $msg.=$line; next; } if( substr($line,7) !~ /\w|#|\?|\/|\:|\.|\~|\%|\-|\&|\=|\+|\,|\;/ ){ $j++; $msg.=$line; next; } $flag=1; $line="http://".$line; if( $line !~ /<\/A>|<\/a>/ ){ #URLを$urlに抽出 $flagB=0; $str=substr($line,0,1); $url=$str; for($i=1; $str ne "\n"; $i++){ $str=substr($line, $i, 1); if( $str =~ /\w|#|\?|\/|\:|\.|\~|\%|\-|\&|\=|\+|\,|\;/ ){ $url.=$str; }else{ $str=substr($line, $i); $flagB=1 if( $str =~ /^\"/ ); last; } } #URLにタグを追加する。 if( $flagB == 0 ){ my($tg); if( $LinkOpen eq "Yes" ){ $tg="target=\"_blank\""; }else{ $tg=""; } $str=$line; $line="$url"; $line.=substr($str,$i); } } $msg.=$line; $j++; } if( $flag == 0 ){ $_[0]; }else{ $msg; } } # # 記事本文自動編集 # sub AutoEditNicky{ local($data)=@_; my($msg, $str); $msg=""; if( $data ){ for $str(split(/\n/,$data)){ if( $UrlLink eq "Yes" ){ $msg.=&ConvertMsg($str)."\n"; }else{ $msg.="$str\n"; } } } $msg; } # # 現在日時取得 # sub GetDateLocaltime{ my($isdst, $yday); ($sec,$min,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime; $year+=1900; $month=sprintf("%02d", $month+1); $day=sprintf("%02d", $day); $week=$Week[$wday]; $first="Yes"; } # # POSTで渡されたデータを各グローバル変数にセット # sub NickySetValue{ my($gomi,$cnt); $setVcnt++; if( !$Admin && $setVcnt > 20 ){ goto_exit("value Error!IP[$ENV{'REMOTE_ADDR'}]"); }elsif( $arg eq "MODE" ){ $Mode=$val; }elsif( $arg =~ /WRITE|KAKUNIN|EDIT|DELETE|DELETEOK|CMNTEDIT|HEADEDIT|INPUT|MakeSetup|SETUP|CMNTGO|CMNTWRITE|CPREVIEW|PANEL|del|SPAMLIST|SPAMDEL/ ){ $Mode=$arg; }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 "CommentRecv" ){ if( $val eq "No" ){ $val = 0 } elsif( $val eq "Yes" ){ $val = 1 } $CommentRecv=$val; }elsif( $arg eq "CommentMsg" ){ $CommentMsg=&tagenc($val); }elsif( $arg eq "CommentName" ){ $CommentName=&tagenc($val); }elsif( !$Admin && ($arg =~ /^Effect|^Msg|^ks$|^ke$|^ReplaySTR$|^ContinueSTR$|^TL|^User|^CommentSTRlen|^tag/)){ }elsif( $arg eq "HEADDER" ){ $head=$val; }elsif( $arg eq "GrpFile" ){ $GrpData=$val if( $val !~ /^$/ ); }elsif( $arg eq "EventFile" ){ $EventData=$val if( $val !~ /^$/ ); }elsif( $arg eq "fBin" ){ $fBin=$val if( $val !~ /^$/ ); }elsif( $arg eq "gdir" ){ $gdir = $val; }elsif( $arg =~ /^Cmnt.*ZZZ/ ){ my($cnt); ($gomi, $cnt)=split(/ZZZ/, $arg); ${$gomi}[$cnt]=$val; $CmntCnt=$cnt if( $CmntCnt < $cnt ); }elsif( $arg eq "Category" ){ $Category+=$val; }elsif( $arg eq "nCategory" ){ $nCategory+=$val; }elsif( $arg eq "ctgry" ){ $ctgry+=$val; }elsif( ($arg eq "DATE") || ($arg eq "DT") ){ my($cnt); $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); $cnt=rindex($val, "_"); $Category=hex(substr($val, $cnt+1, 8)) if($cnt >= 0); $DT=$val; }elsif( $arg !~ /^$|Admin|vDir|mtap|mto|cgipath|^[0-9]/ ){ ${$arg}=$val; } } # # Cookie食す。 # sub WriteCookie { my($key,$pss); my($sec,$min,$hour,$mday,$mon,$year,$wday); if( $pass || $password ){ ($sec,$min,$hour,$mday,$mon,$year,$wday) = gmtime(time + 60*24*60*60); $wday = ('Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday') [$wday]; $mon = ('Jan','Feb','Mar','Apr','May','Jun','Jul','Aug','Sep','Oct','Nov','Dec')[$mon]; $datec = sprintf("%s, %02d\-%s\-%04d %02d:%02d:%02d GMT",$wday,$mday,$mon,$year+1900,$hour,$min,$sec); $key=$ENV{REQUEST_URI}; $key=$ENV{SCRIPT_NAME} if( $key eq "" ); if( $password ){ $pss=$password; }else{ $pss=$pass; } print "Set-Cookie: Nicky=pass:$pss; expires=$datec;path=$key;\n"; } } # # $NickyAdminと比較 # sub AdminCheck{ my($pass)=$_[0]; my($str, $key); if( open(RD, "./NickyAdmin.cgi") ){ binmode(RD); $str=; close(RD); } return 1 if( $str eq crypt($pass, $ENV{'SCRIPT_NAME'}) ); $key=$ENV{'REQUEST_URI'}; return 1 if( $str eq crypt($pass, $key) ); $key =~ s/\+/ /g; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; if( $str eq crypt($pass, $key) ){ 1; }else{ 0; } } sub mobile_save{ my($str, $str1, $dummy, $cry, @po, @ps, @org, $i, $j, $key); my($atm, $cnt); $str="popserv=$popserv\npopuser=$popuser\npoppass=$poppass\n"; $str1="$BBSmode,$WriteMode"; if( $BBSmode ne "BBS" ){ $key=$password; }else{ $key=$WriteMode; } $cry=crypt($ENV{DOCUMENT_ROOT}, $key); $crylen=length($cry); @po=unpack("C$crylen", $cry); $pslen=length($str); @ps=unpack("C$pslen", $str); @org=@po; if( $#po < 1 ){ unlink("./MobileUpper.cgi"); return; } while( $#po < $#ps ){ @po=(@po, @org); } open(WD, ">./MobileUpper.cgi"); binmode WD; for($i=0;$i<$#po;$i++){ print WD $po[$i]+$ps[$i]; print WD ","; } print WD "\n$str1\n"; $cnt=$#AutoLayout+1; $atm=""; for($i=0;$i<$cnt;$i++){ $atm="$AutoLayout[$i],$atm"; } print WD "$atm\n"; print WD "$MobileGallery\n"; close WD; } sub mobile_load{ my($str, $str1, $cry, $de, $a, @savedat, $i, $j, $key, @ppp, $atm); if( open(RD, "./MobileUpper.cgi") ){ binmode RD; $str=; $str1=; $atm=; $MobileGallery=; close(RD); }else{ return; } $atm=~s/\r|\n//g; $MobileGallery=~s/\r|\n//g; @AutoLayout=split(/,/, $atm); @savedat=split(/,/, $str); ($BBSmode, $WriteMode) = split(/,/, $str1); $WriteMode=~s/\r|\n| //g; if( $BBSmode ne "BBS" ){ return if( !$password ); $key=$password; }else{ $key=$WriteMode; } $cry=crypt($ENV{DOCUMENT_ROOT}, $key); $crylen=length($cry); @po=unpack("C$crylen", $cry); @org=@po; if( $#po < 1 ){ unlink("./MobileUpper.cgi"); return; } while( $#po < $#savedat ){ @po=(@po, @org); } for($i=0;$i<$#savedat;$i++){ $ppp[$i]=$savedat[$i]-$po[$i]; } $de=pack("C$i", @ppp); for (split(/\n/, $de)){ ($arg, $val)=split(/=/, $_); ${$arg}=$val; } $str="popserv=$popserv\npopuser=$popuser\npoppass=$poppass\n"; $popserv =~ s/\r|\n|\t| //g; $popuser =~ s/\r|\n|\t| //g; $poppass =~ s/\r|\n|\t| //g; } # # パスワードチェック # sub NickyPassCheck{ my($key); local($passwdcf)=$passwdcf; if( (stat("./NickyAdmin.cgi"))[7] > 0 ){ if( !&AdminCheck($oldpassword) ){ &NickyPassWord(); } } if( $Mode eq "DUMMY PASSWORD" ){ srand; for($password=rand(9999999); $password eq $pass; ){}; &WriteCookie(); if( !$flag_type ){ print "Content-type: text/html\n\n"; $flag_type=1; } $Admin=0; &MakeNickyLast(); exit; } if( $password eq $passwdcf ){ my($i, $key); if( !$password ){ if( $oldpassword ){ $password = $oldpassword; }else{ &NickyPassWord(); } } &nickyGetHead(); select STDOUT; @nli=&GetNickyList($Age) if( !@nli ); if( $#nli < 0 ){ my($str); $str="http://".$ENV{HTTP_HOST}.$ENV{REQUEST_URI}; &GetDateLocaltime(); $Title="ようこそ"; $Message="このメッセージは、nicky.cgiが自動生成したものです。\n\nこのメッセージの下に、『記事編集』『初期設定』等の操作ボタンが表示されていますが、これは管理者のパソコンでここへアクセスした場合にのみ表示されるものです。\n\n#新規に記事を書きこみする場合は下の『記事作成』ボタンをクリックするか、URIを$str?Newと指定します。\n#また、カスタマイズを行う場合は下の『初期設定』ボタンをクリックするか、URIを$str?MakeSetupと指定します。\n\n公開するまでにはこのメッセージを削除するのをお忘れなく・・・。"; &WriteNicky(); } $key=$ENV{SCRIPT_NAME}; if( $key eq "" ){ $key=$ENV{REQUEST_URI}; $key =~ s/\+/ /g; $key =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; } &WriteCookie(); open(WD, ">./NickyAdmin.cgi"); binmode(WD); print WD crypt($password, $key); close(WD); if( -e "./MobileUpper.cgi" ){ my($p); $p=$password; $password=$oldpassword; &mobile_load(); $password=$p; &mobile_save(); } if( !$flag_type ){ print "Content-type: text/html\n\n"; $flag_type=1; } unless( -e "./NickyAdmin.cgi" ){ print "nicky.cgiを設置したフォルダにCGIからのライト権がありません\n"; exit; } $Admin=1; &MakeNickyLast(); }else{ &NickyPassWord(); } exit; } # # パスワード入力画面 # sub NickyPassWord{ my($pair, @pairs, %DUMMY, $name, $value); if( !$flag_type ){ print "Content-type: text/html\n\n"; $flag_type=1; } &PutHTMLheader(); print "nicky!パスワード設定画面\n\n\n"; print "
    nicky!パスワード設定画面$br
    \n"; print "
    "; if( (stat("./NickyAdmin.cgi"))[7] ){ @pairs = split(/;/, $ENV{'HTTP_COOKIE'}); foreach $pair (@pairs) { my($name, $value) = split(/=/, $pair); $name =~ s/ //g; $DUMMY{$name} = $value; } @pairs = split(/,/, $DUMMY{'Nicky'}); foreach my $pair(@pairs) { my($name, $value) = split(/:/, $pair); ${$name} = $value; } print "旧パスワード $br\n"; } print <$br パスワード確認$br$br $br$br$br$br
    \n HTML exit; } # # iMODE判定 # sub IsIMODE{ my($ret); $ret=0; if( $ENV{HTTP_USER_AGENT} !~ /FOMA/ ){ $ret=1 if( $ENV{HTTP_USER_AGENT} =~ /DoCoMo|J-PHONE|DDIPOCKET|UP\.Browser/ ); } #$ret=1 if( -e "./imode" ); $ret; } # # Modeに従って実行 # sub NickyExec{ my($f); if( ($Mode eq "SETUP PASSWORD") || ($Mode eq "DUMMY PASSWORD") ){ &NickyPassCheck(); }else{ if( (stat("./NickyAdmin.cgi"))[7] <= 0 ){ &NickyPassWord(); } } if( !$flag_type ){ if( $Mode eq "WRITE" && $Admin ){ $password=$pass; &WriteCookie(); } print "Content-type: text/html\n\n"; $flag_type=1; } if( $DT && !$Mode ) { if( ($MsgOldForm == 1) || (&IsIMODE()) ) { $Mode="PageOut"; } else { $Mode="MONTH"; } }elsif( $Mode eq "PANEL" ){ $ld="panel.cgi"; $Mode="exec"; }elsif( $ld && !$Mode ){ $Mode="exec"; } $lg=$lg."i"; $Message=&AutoEditNicky($Message); if( $Mode =~ /KAKUNIN/ ){ if( $nyear && (!$year)){ $year=$nyear; $month=$nmonth; $day=$nday; # $Category=$nCategory; } $ModeSub=8; if( $Mode eq "KAKUNIN" ){ &NickyKakunin("NORMAL"); }else{ &NickyKakunin("CUSTOM"); } }elsif( ($Mode eq "WRITE") && ($Admin) ){ my($oyear,$omonth,$oday,$odaysub,$oCategory,$cfn,$flagh,$bkfn,$bkfn2, $w_NF, $mkStarAll); $mkStarAll=0; $flag_new_make=0; $oyear=$year; $omonth=$month; $oday=$day; $odaysub=$daysub; $oCategory=$Category; $Category=$nCategory; if( $nyear ){ undef $Date; $year=$nyear; $month=$nmonth; $day=$nday; undef $daysub if(($oyear)&&(($nyear!=$oyear)||($nmonth!=$omonth)||($nday!=$oday))); &MakeNickyFname(); $cfn=$NickyComment; } ($w_year,$w_month,$w_day,$w_daysub, $w_NF)=($year,$month,$day,$daysub, $NickyFname); $flag_new_make=1 if( !-f $NickyFname ); &WriteNicky(); $bkfn=$NickyFname; $nCategory=0 unless( $nCategory ); if(($oyear)&&($nyear)&&(($nyear != $oyear) || ($nmonth != $omonth)||($nday != $oday)) ){ #日付変更→古い方を削除 $year=$oyear; $month=$omonth; $day=$oday; $daysub=$odaysub; $Category=$oCategory; &MakeNickyFname(); rename($NickyComment, $cfn) if( -e $NickyComment ); if( ($oyear != $nyear) && ( $GrpFileName ) ){ my($ogf, $ngf, $thf, $fn, $ext,$th); $ogf=sprintf("$vDir/%04d/$GrpFileName", $oyear); $ngf=sprintf("$vDir/%04d/$GrpFileName", $nyear); $fn=$GrpFileName; $ext=&GetExt($fn); $fn=~s/\..*$//; $th=sprintf("$vDir/%04d/$fn", $oyear); $thf=&get_thumb_name2($th); if( -e $ngf ){ my($gsec,$gmin,$ghour,$gday,$gmon,$gyear,$gwday,$gyday,$gisdst)=localtime; $GrpFileName=sprintf("grp%04d%02d%02d%02d%02d%02d.$ext", $gyear,$gmon,$gday,$ghour,$gmin,$gsec); $fn=$GrpFileName; $fn=~s/\..*$//; $ngf=sprintf("$vDir/%04d/$GrpFileName", $nyear); $bkfn2=$NickyFname; $NickyFname=$bkfn; &WriteNickyFile(); $NickyFname=$bkfn2; } rename($ogf, $ngf); if( $thf ){ $ext=&GetExt($thf); if( ($ext eq "pch") || ($ext eq "spch") ){ $ngf=sprintf("$vDir/%04d/$fn.$ext", $nyear); }else{ $ngf=sprintf("$vDir/%04d/$fn.thumb.$ext", $nyear); } rename($thf, $ngf); } } &NickyDelete(); $flag_new_make=0; &MakeHTMLone($w_year, $w_month, $w_day, $w_daysub, 1, 0); $mkStarAll=1; }elsif(($oCategory != -1) && ($oCategory ne $nCategory)){ if( $oyear && (sprintf("[%s]", $oCategory) ne "[]") ){ $Category=$oCategory; $year=$oyear; $month=$omonth; $day=$oday; $daysub=$odaysub; &MakeNickyFname(); unlink($NickyFname); # $mkStarAll=1; } #&MakeHTMLone($year, $month, $day, $daysub, 0, 0); } unless( $flagh ){ &MakeHTMLone($year, $month, $day, $daysub, 0, 1); } ($year,$month,$day,$daysub, $Category, $NickyFname) = ($w_year,$w_month,$w_day,$w_daysub, $nCategory, $w_NF); if( ($nCategory & $ctgH) || ($Category & $ctgH) || ($oCategory & $ctgH) ){ if( $mkStarAll ){ &makeStarAll(); } else { &makeStarNew(); &makeStarList(); } } &MakeNickyLast(); }elsif( $arg eq "New" ){ &Nicky(); }elsif( $Mode eq "PageOut" ){ &SerchPageFromDate(); }elsif( $Mode eq "MONTH" ){ &NickyMonthOut(); }elsif( ($Mode =~ /^EDIT$|CMNTEDIT/) & $Admin ){ &NickyEdit(); }elsif( $Mode eq "CMNTGO" ){ if( $Admin || &AdminCheck($passwd) ){ &EditComment(); }else{ return 0; } }elsif( $Mode eq "CMNTWRITE" ){ if( $Admin || &AdminCheck($passwd) ){ &WriteComment(); }else{ return 0; } }elsif( ($Mode eq "SPAMLIST") && ($Admin) ){ &SPAMLIST(); }elsif( ($Mode eq "SPAMDEL") && ($Admin) ){ &SPAMDEL(); }elsif( $Mode eq "MKL" ){ &MakeLastHTML(); }elsif( $Mode eq "iComment" ){ &CommentIMODE(); }elsif( $Mode eq "DELETE" ){ &NickyDeleteConfirm(); }elsif( ($Mode eq "DELETEOK") && ($Admin) ){ &NickyDelete("TRUE"); }elsif( ($Mode eq "HEADEDIT") && ($Admin) ){ &NickyHead(); }elsif( ($Mode eq "HEADWRITE") && ($Admin) ){ &NickyHeadWrite(); }elsif( $Mode =~ /^CINPUT$|^CINPUTS$|CPREVIEW/ ){ &NickyInputComment(); }elsif( $Mode eq "CINPUTI" ){ if( &ReqJcode() ){ &jcode'sjis2euc(\$CommentName); &jcode'sjis2euc(\$CommentMsg); } &NickyInputComment(); }elsif( ($Mode eq "SERCH") || ($Mode eq "SEARCH") || ($SerchWord) ){ &NickySerch(); }elsif( ($Mode eq "MakeSetup") && ($Admin) ){ &MakeSetup(); }elsif( ($Mode eq "SETUP") && ($Admin) ){ my($dat); $MsgSize=$HonbunSize; $MsgColor=$HonbunColor; $MsgBgColor=$HonbunBgColor; &create_style(); &nickyGetHead("NickyHFdat.cgi"); $dat="$head$TMN$foot$TMN$iHead$TMN$iFoot$TMN$efoot$TMN$head2nd$TMN$foot2nd$TMN$Use2ndHD$TMN$UseListHD$TMN$UseSearchHD$TMN$Use2ndFT$TMN$UseListFT$TMN$UseSearchFT$TMN$nsTag"; &create_exec($dat, $NickyHF, "nHF"); &SaveNickyConf(); }elsif( ($Mode eq "INITIAL") && ($Admin) ){ my($dat); unlink("./NickyConf.cgi"); &InitialNicky(); &create_style(); &nickyGetHead("NickyHFdat.cgi"); $dat="$head$TMN$foot$TMN$iHead$TMN$iFoot$TMN$efoot$TMN$head2nd$TMN$foot2nd$TMN$Use2ndHD$TMN$UseListHD$TMN$UseSearchHD$TMN$Use2ndFT$TMN$UseListFT$TMN$UseSearchFT$TMN$nsTag"; &create_exec($dat, $NickyHF, "nHF"); &MakeNickyLast(); }elsif( ($Mode eq "PaintBBS") || ($Mode =~ /^Continue/) || ($Mode =~ /^SPAINTER/) ) { &CallPaintBBS(); }elsif( $Mode eq "PaintBBSDraw" ){ &CallPaintBBSDraw(); }elsif( $Mode eq "CallApplet" ){ &CallApplet(); }elsif( $Mode eq "ColorSample" ){ &PutColorSample(); }elsif( ($Mode eq "UserCustom") && $Admin ){ &UserCustomize(); }elsif( ($Mode eq "Custom") && $Admin ){ &SaveUserCustomize(); }elsif( ($Mode eq "CustomC") && $Admin ){ &SaveUserCustomizeC(); }elsif( $Mode eq "SEND" ){ &RecvIMODE($Mode); }elsif( $Mode eq "delImode" ){ &DeleteImode(); }elsif( ($Mode eq "saveFile") && $Admin ){ &saveFile(); }elsif( ($Mode eq "mksc") && $Admin ){ &makeContStarAll(); }elsif( ($Mode eq "input_illust_mode") && $Admin ){ &nicky_illust_list(); }elsif( ($Mode eq "make_thumb_nicky") && $Admin ){ &make_thumb_nicky(); }elsif( ($Mode eq "make_thum2b_all") && $Admin ){ &nicky_make_thum2b_all(); }elsif( ($Mode eq "ImgDel") && $Admin ){ &DeleteImage(); }elsif( ($Mode eq "ImgExeDel") && $Admin ){ &DeleteExeImage(); }elsif( ($Mode eq "exec") && $ld ){ if( $ld eq "panel.cgi" ){ $f=1; }elsif( open(RD, "./liblist.cgi") ){ $f=0; while(){$dat.=$_;} close(RD); $dat=~s/\r//g; @nlib=split(/\n/, $dat); for $ln(@nlib){ if( $ln eq $ld ){ $f=1; last; } } } return 0 unless( $f ); undef $dat; undef @nlib; eval('require("$ld")'); if( $@ ){ print "error\n$@"; }else{ my $abc=substr($ld, 0, rindex($ld, "\.")); &$abc(); } exit; return 0; }else{ return 0; } 1; } sub editFile{ my($fname)=@_; my($dat, $dat0, $dat1, $tmp); $tmp=$fname; $tmp=~s/\.//g; &PutHTMLheader(); &goto_end("bad filename") if( $tmp=~/(\W)/ ); if( open(RD, "./$fname") ){ binmode RD; while(){$dat.=$_;} close(RD); $dat=~s/\r//g; } $dat=~s/\n$//g; $dat=~s/&/&/g; $dat=~s/filename=[$fname]$br

    "; if( $fname eq "inputarea.cgi" ){ ($dat0, $dat, $dat1)=split(/\x01/, $dat); print "
    \n"; print "
    \n"; } print <$dat

    HTML } sub get_inputarea{ my $dat; $inputh=$inpute=""; if( open(RD, "./inputarea.cgi") ){ binmode RD; while(){$dat.=$_;} close RD; ($inputh, $inpute, $inputt)=split(/\x01/, $dat); } } sub saveFile{ if( $libList ){ $libList=~s/\r//g; if( $fname eq "inputarea.cgi" ){ $libList0=~s/\r//g; $libList1=~s/\r|\n//g; $libList="$libList0\x01$libList\x01$libList1"; } } open(WD, ">./$fname"); binmode(WD); print WD $libList; close(WD); if( $fname eq "d.cgi" ){ &create_style; } &NickyPageOut(0, $PrintDay); } sub PutHTMLheader{ print "\n\n\n\n"; } sub initial2nd{ $flag_customread=$flag_cmnt_customread=$mkHTML=$saveExec=0; # 記事HTML用ヘッダ/フッタファイル名 $NickyHF="./NickyHF.cgi"; $NickyAdmin="./NickyAdmin.cgi"; $CustomText="./CustomText.cgi"; $CustomCGI="./CustomCGI.cgi"; $CustomCmntText="./CustomCmntText.cgi"; $CustomCmntCGI="./CustomCmntCGI.cgi"; $TMN="\n#\n#----NickyTerminate----\n#\n"; if( $tagmode eq "xhtml" ){ $br="
    ";$e=" />"; }else{ $br="
    ";$e=">"; } } # # S.Kano # $ENV{TZ}="JST-9"; $Admin=&TrueCheck(); local($btn_flag, @ctg_ff); ($CommentMsg,$CmntURI,$spsize,$PBsize,$load_ctg,$subcmd)=("",$CmntURI, -3, -3, 0,$subcmd); $starttime=time; my($flag, $a)=(0,""); my($r1, $r2,$len); my($fn1,$ext,$filename); my($CTYPE,$BOUNDARY); my($clength)=$ENV{'CONTENT_LENGTH'}; $Mode=""; $r1=rindex($ENV{'SCRIPT_NAME'}, "/"); $r2=rindex($cgipath, "/"); binmode(STDIN); binmode(STDOUT); if( substr($ENV{'SCRIPT_NAME'}, $r1) ne substr($cgipath, $r2) ){1;}else{ $a=$ENV{'QUERY_STRING'}; $b=$clength; for my $str(split(/\?/, $ENV{'QUERY_STRING'})){ ($arg, $val)=split(/=/, $str); $val =~ s/\+/ /g; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; &NickySetValue() if( $arg ne "CIRCV" ); } if( ($Mode eq "SavePaintBBS") || ($Mode eq "Savespainter" ) ){ &SavePaintBBS(); exit; } if( $Admin ){ &ReadSetup(); }elsif( $clength > 5120 ){ goto_exit("IP=$ENV{'REMOTE_ADDR'}"); } if( $clength > 0 ){ $CTYPE=$ENV{'CONTENT_TYPE'}; if( $CTYPE =~ /multipart/ ){ my($gomi1, $indat); goto_exit("IP=$ENV{'REMOTE_ADDR'}") if( !$Admin ); $len=read(STDIN,$indat,$ENV{'CONTENT_LENGTH'}); goto_exit("read length error,$len, $ENV{'CONTENT_LENGTH'}") if( $len < $ENV{'CONTENT_LENGTH'}); ($gomi1, $BOUNDARY)=split(/boundary=/, $CTYPE); $BOUNDARY=~s/\//\\\//g; $BOUNDARY=~s/\(/\\\(/g; $BOUNDARY=~s/\)/\\\)/g; $BOUNDARY=~s/\"/\\\"/g; $BOUNDARY=~s/\'/\\\'/g; $BOUNDARY=~s/\`/\\\`/g; $BOUNDARY=~s/\|/\\\|/g; $BOUNDARY=~s/\./\\\./g; $BOUNDARY=~s/\*/\\\*/g; $BOUNDARY=~s/\?/\\\?/g; $BOUNDARY=~s/\+/\\\+/g; $BOUNDARY=~s/\[/\\\[/g; $BOUNDARY=~s/\]/\\\]/g; foreach (split(/\r?\n?\-\-$BOUNDARY\r?\n?/,$indat)){ next if (!/\w/); ($arg)=/^.+ name=\"(\w+)\"/; if( ($arg eq 'GrpFile') || ($arg eq 'fBin') || ($arg eq 'EventFile') ){ ($filename)=/filename=\"(.*)\"/; if( ($arg eq 'GrpFile') || ($arg eq 'fBin') ){ $GrpFileName=&BaseName($filename); }elsif( $arg eq 'EventFile' ){ $EventFileName=&BaseName($filename); } } $val=(split(/\r\n|\n\r|\r|\n/,$_,3))[2]; $val=~s/^\r?\n?//; $val=~s/\r?\n?$//; &NickySetValue(); } # # 画像ファイル削除 # 反則風味だがここ以外でやるとロジックが膨れる。 # if( ($GrpFileDel eq "Delete") && ($Admin) ){ my($n, $p, $o, @fl); &MakeNickyFname(); $n=rindex($GrpFileName, "\."); $o=substr($GrpFileName,0,$n); @fl=&GetFileList("$NickyDir/$o\\."); for $p(@fl){ if( ($p !~ /\.cmnt$/) && ($p !~ /\.nky$/) ){ unlink("$vDir/$p"); # 画像ファイル削除 } } undef $GrpFileName; undef @fl; } if( ($EventFileDel eq "Delete") && ($Admin) && ($GrpFileName) ){ my($n, $p2, @fl); if( (!$year) && ($nyear) ){ $year=$nyear; $month=$nmonth; $day=$nday; } &MakeNickyFname(); $n=rindex($GrpFileName, "\."); $p2=substr($GrpFileName, 0, $n); @fl=&GetFileList("$NickyDir/$p2\\."); for (@fl){ if( ($_ ne "./$year/$GrpFileName") && ($_ ne "./$year/$p2.nky") && ($_ ne "./$year/$p2.cmnt") ){ unlink("$vDir/$_"); } } } if( ($GrpData) && ($Admin) ){ my($gsec,$gmin,$ghour,$gday,$gmon,$gyear,$gwday,$gyday,$gisdst, $gf); if( !$ld && !$GrpSave ){ if( (!$year) && ($nyear) ){ $year=$nyear; $month=$nmonth; $day=$nday; } &MakeNickyFname(); dirCheck($NickyDir); $gf=$GrpFileName; $gf=~s/\.//g; if( (-e "$NickyDir/$GrpFileName") || ($gf=~/[^_a-zA-Z0-9_\-]/) ){ ($gsec,$gmin,$ghour,$gday,$gmon,$gyear,$gwday,$gyday,$gisdst)=localtime; $gmon++; $ext=&GetExt($GrpFileName); $GrpFileName=sprintf("grp%02d%02d%02d%02d%02d.$ext", $gmon,$gday,$ghour,$gmin,$gsec); } open(WD, ">$NickyDir/$GrpFileName"); binmode(WD); print WD $GrpData; close(WD); } } if( ($fBin) && ($Admin) ){ my($gsec,$gmin,$ghour,$gday,$gmon,$gyear,$gwday,$gyday,$gisdst)=localtime; my($gf, $gdirw); if( !$gdir ){ $gyear+=1900; $gdir="$gyear/imgdata"; } $gdirw="$vDir/$gdir"; if( !$ld && !$GrpSave ){ dirCheck($gdirw); $gf=$GrpFileName; $gf=~s/\.//g; if( (-e "$gdirw/$GrpFileName") || ($gf=~/[^_a-zA-Z0-9_\-]/) ){ $gmon++; $ext=&GetExt($GrpFileName); $GrpFileName=sprintf("grp%02d%02d%02d%02d%02d.$ext", $gmon,$gday,$ghour,$gmin,$gsec); } open(WD, ">$gdirw/$GrpFileName"); binmode(WD); print WD $fBin; close(WD); } } if( ($EventFileName =~ /\.pch$|\.spch$|\.jpg$|\.png$|\.gif$/ ) && ($GrpFileDel ne "Delete") && ($Admin) ){ if( (!$year) && ($nyear) ){ $year=$nyear; $month=$nmonth; $day=$nday; } &MakeNickyFname(); if( $GrpFileName && -e "$NickyDir/$GrpFileName" ){ $ext=$EventFileName; $ext=~s/^.*\.//; $ext = "thumb\.$ext" if( $ext =~ /jpg|png|gif/i ); $fn1=$GrpFileName; $fn1=~s/\..*$//; open(WD, ">$NickyDir/$fn1.$ext"); binmode(WD); print WD $EventData; close(WD); } } # pchのみ if( ( ((&GetExt($EventFileName) =~ /^pch$|^spch$/ ) && (!$GrpData)) || ((&GetExt($GrpFileName) =~ /^pch$|^spch$/ ) && (!$EventData)) ) && ($GrpFileDel ne "Delete") && ($Admin) ){ if( (!$year) && ($nyear) ){ $year=$nyear; $month=$nmonth; $day=$nday; } &MakeNickyFname(); dirCheck($NickyDir); open(WD, ">$NickyDir/$EventFileName"); binmode(WD); print WD $EventData; close(WD); $Mode="Continue" if( !$GrpFileName ); $Pch_File="$NickyDir/$EventFileName"; } undef $indat; }else{ #multipart read(STDIN, $a, $clength); foreach (split(/&/, $a)){ ($arg, $val)=split(/=/, $_); $val =~ s/\+/ /g; $val =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/ego; &NickySetValue(); } &ReadSetup() if( !$Admin ); undef $a; } # # Modeによって何がしたいのかを判定&実行 # &initial2nd(); $ctg = $ctgry if( !$ctg && $ctgry ); if( $Mode eq "MKL" ){ $flag_type=1; &MakeLastHTML(); }elsif( &NickyExec() == 0 ){ &NickyPageOut(0, $PrintDay); } exit; } # $clength <= 0 &ReadSetup if( !$Admin ); &initial2nd(); $ctg = $ctgry if( !$ctg && $ctgry ); if( $arg eq "PassWord" ){ &NickyPassWord(); }elsif( $Mode eq "MKL" ){ &MakeLastHTML(); }else{ print "Content-type: text/html\n\n"; $flag_type=1; $lg="n"; } 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 "New" ){ if( ( &IsIMODE() ) && ( &ReqJcode() ) ){ &NickyIMODE("edit"); }else{ if( $Admin ){ &Nicky(); }else{ &NickyPageOut(0, $PrintDay); } } }elsif( $arg eq "new" ){ &NickyIMODE("edit"); }elsif( ($arg eq "edit") || ($arg eq "del") ){ &NickyEditIMODE($arg); }elsif( $arg eq "TitleList" ){ &PutTitleList(); }elsif( ($arg eq "UserCustom") && $Admin ){ &UserCustomize(); }elsif( ($arg eq "MakeSetup") && (($Admin) || (-e "./MakeSetup")) ){ &MakeSetup(); }elsif( ($arg eq "UserCustomC") && $Admin ){ &UserCustomizeCmnt(); }elsif( $arg eq "ColorSample" ){ &PutColorSample(); }elsif( ($arg eq "editexe") && $Admin ){ &editFile("exelist.cgi"); }elsif( ($arg eq "editlib") && $Admin ){ &editFile("liblist.cgi"); }elsif( ($arg eq "editFile") && $Admin ){ &editFile($fname); }elsif( ($arg eq "editreject") && $Admin ){ &editFile("reject_list.cgi"); }elsif( ($arg eq "editcss") && $Admin ){ &editFile("d.cgi"); }elsif( ($arg eq "editinput") && $Admin ){ &editFile("inputarea.cgi"); }elsif( ($arg eq "saveFile") || ($Mode eq "saveFile") ){ }else{ if( &NickyExec() == 0 ){ if( !&IsIMODE() ){ &NickyPageOut(0, $PrintDay); }else{ &NickyPageOutIMODE(0, $PrintDay); } } } } #end of script