#!/usr/local/bin/perl # # minili.cgi for nicky! # # 定義部 $miniListVer="2008/07/05"; # #タイトル一覧 # sub PutTitleListSub2 { local($tcnt)=$_[0]; my($a, $yd, $i, $j, $ot); $ot.=""; $j=0; for $a(@titlelist) { $ot.="" if( $j ); $ot.=""; $ot.="$ddlist[$j]"; if( !$grplist[$j] ){ $ot.=" "; }else{ $ot.=$grplist[$j]; } $ot.="$a"; $ot.="\n"; $j++; } undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; $ot; } sub nky_put{ print $_[0] if( $nky_debug ); } sub nky_putt{ print $_[0] if( $nky_debugt ); } # #タイトルリスト # sub PutTitleList2 { local($i, $mn); local($mdstr, $clm, $tcnt); local(@daylist, @titlelist, @grplist, @ddlist); my($opt, $gfn, $ot, $otm, $bkotm, $ctgl, $xpt, $scnt, $cs, $bkfn); my($i, $j, $flag_1st, $value, $loop_cnt); my($yr)=0; $nky_debugt=0; #起動状態判定 if( $MsgOldForm == 1 ){ $bkfn=$NickyFname; if( $Mode eq "MONTH" ){ }elsif( (($Mode ne "PageOut") && !$ctg ) && !$DT && !$page ){ undef $YR;undef $MON; }else{ undef $YR;undef $MON; } }elsif( $mkHTML && !$MNLflag ){ &nky_putt("PassA
\n"); $YR=$year;$MON=$month; }elsif( ($Mode ne "MONTH") || ($MNLflag) ){ #記事投稿:CGI出力ルート &nky_putt("PassB
\n"); if( ($Mode eq "WRITE") && !$flag_new_hit && !$mkHTML ){ $YR=$year;$MON=$month; }else{ undef $YR;undef $MON; } if( $Mode =~ /^CINPUT/ ){ $MON=$month;$YR=$year; } }elsif( !$DT && !$page && !$mkHTML ){ &nky_putt("PassC
\n"); undef $YR;undef $MON; }elsif( $Mode eq "MONTH" ){ $YR=$year;$MON=$month; } &nky_putt("Mode=[$Mode], DT=[$DT], page=[$page], mkHTML=[$mkHTML], mnf=[$MNLflag], fnh=[$flag_new_hit], saveExec=[$saveExec]
\n"); $ctgl=$ctg?"\?ctg=$ctg":""; $xpt=$tagmode eq "xhtml"?"x":""; $otm.="
" if( $align ); if( $num >=0 ){ $otm.=""; @nli=&GetNickyList($Age) if( !@nli ); # 月単位時、過去ログの表示順に沿って並べ替え if( ($MsgOldForm != 1) && ($MON || $YR) ){ if( $MonthSort ne "UP" ){ @nli = reverse(sort{$$b[0] cmp $$a[0]} @nli); }else{ @nli = sort{$$b[0] cmp $$a[0]} @nli; } } #ページ内に表示する件数算出 $pcnt=0; $value=1; &nky_putt("PassM1
\n"); if( $pageno == 0 && !$MON ){ &nky_putt("PassM2
\n"); $scnt=0; if( $miniNum ne "No" ){ $num=$PrintDay+$PageCnt; }else{ $num=$PrintDay; } $list_vect=1; }else{ &nky_putt("PassM3
\n"); if( $MsgOldForm == 1 ){#件数 nky_put("PassM4
\n"); if( $mkHTML ){ &nky_putt("PassM5
\n"); # HTML作成中 $scnt=($pageno+1)*$PageCnt-1; $num=$PageCnt; $value=-1; }else{ &nky_putt("PassM6
\n"); $scnt=$PrintDay+($pageno-1)*$PageCnt; $num=$PageCnt; } }else{ &nky_putt("PassM7
\n"); $scnt=0;$num=$#nli;$num++; } } &nky_putt("PassM8
\n"); $j=$scnt; for($loop_cnt=0; $loop_cnt<$num; $j+=$value, $loop_cnt++){ $gfn=$nli[$j]; $NickyFname=$$gfn[0]; #&nky_putt("NF=[$NickyFname], lp=$loop_cnt, num=$num
\n"); last if( !$NickyFname ); &GetDateFromFname(); if( $MON ){ #MsgOldForm != 1 next if( ($MON != $month) || ($YR != $year) ); }else{ $pcnt++; } &GetNickyFile("$vDir/$NickyFname"); if( !$Title && !$Message ){ $pcnt--; next; } $mdstr=""; if( $yr != $year ){ if( $flag_1st ){ $otm.=""; $bkotm="$month$TLmonth"; $yr=$year; $mn=$month; $flag_1st=1; $i=0; $clm=0; $tcnt=0; }elsif( $mn != $month ){ $otm.=""; $bkotm="$month$TLmonth"; $mn=$month; $i=0; $tcnt=0; } if( $GrpFileName ){ $grplist[$i]=$MsgOldTG; }else{ $grplist[$i]=""; } $daylist[$i]="$day$TLday"; $ddlist[$i]="$day$TLday"; $cs=&cut_str($Title, $ministr); $titlelist[$i]="$mdstr$cs"; $tcnt++; $i++; if( $pcnt >= $num+$scnt ){ last; } } $otm.="\n
$bkotm"; $otm.=&PutTitleListSub2($tcnt); } $otm.="
$bkotm"; $otm.=&PutTitleListSub2($tcnt); $otm.="\n
$bkotm"; $otm.=&PutTitleListSub2($tcnt); $otm.="

"; } $otm.="
\n" if( $align ); $otm; } # #タイトル一覧(カレンダー型:日の表示[月単位]) # sub PutCalendarSub { my($yr, $mday, $wcnt, $str)=@_; my($a, $yd, $i, $j, $wk, $ii); my(@gpl, @ddl, @dyl, @pmonth, $strm); my(@comment,$ot,$ddat); if( $lang & 1 ){ @pmonth=("dummy","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); }else{ @pmonth=("dummy","1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); } $yd=$j=0; @gpl=@grplist; @ddl=@ddlist; @dyl=@daylist; # # 月の表示 # $ot=""; &SetWeekStr($lang&1); #曜日の表示 $ot.=""; $ot.=""; for($i=1;$i<6;$i++){ $ot.=""; } $ot.=""; $ot.="\n"; #最初の週 $wk=&GetWeek($yr, $mn, 1); $wk %= 7; $ot.="" if( $wk ); $i=$wk; $j=1; #日付カウンタ $yd=0; #@ddlカウンタ for(;$i<7;$i++,$j++){ if( $ddl[$yd] == $j ){ $ot.=""; $yd++; }else{ $ot.=""; } } $ot.=""; #最初の週以降 for(;$j<=$mday;$j++){ $ddat=$ddl[$yd]; if( !$ddat || $ddat != $j ){ $ot.=""; }elsif( $ddat == $j ){ $ot.=""; $yd++; } if( ((($j+$wk) % 7) == 0) && (($j+1)<=$mday) ){ $ot.=""; } } #最後の週 my $k=(7-(($j+$wk)%7)+1) % 7; if( $k ){ $ot.=""; } $ot.=""; if( $str ){ $ot.=""; } $ot.="
"; $strm=$pmonth[$mn]; if( $lang & 1 ){ $ot.=$strm; if( $lang & 2 ){ $ot.=" / $YR"; } }else{ if( $lang & 2 ){ $ot.="$YR年 "; } $ot.="$strm"; } $ot.="
"; $ot.="
$Week[0]$Week[$i]$Week[$i]

$gpl[$yd]$dyl[$yd]$j$TLday
$j$TLday$gpl[$yd]$dyl[$yd]


$str
\n"; undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; undef @gpl; undef @ddl; undef @dyl; $ot; } sub minili_GetMonthLink { my($i, $j, $yr); my($opt, $mday, $wcnt, $pfag); my($flag_b, $yr_b, $m_b, $day_b, $daysub_b); my($flag_n, $yr_n, $m_n, $day_n, $daysub_n, $flag_c, $str); my($ctgl); my($vect,$oldday)=("ON", 0); my($strneo, $strvin)=("",""); #$nky_debug=0; $i=0; if( $miniLang ne "ja" ){ $lang=3; }else{ $lang=2; } $flag_b=$flag_n=$flag_c=0; $wn=3 if( !$wn ); if( $spacing ){ $spc=$spacing; }else{ $spc=32; } $spc=0; undef @grplist; undef @ddlist; undef @daylist; $ctgl=$ctg ? "\?ctg=$ctg":""; $xpt=$tagmode eq "xhtml" ?"x":""; @ydl=&miniGetNickyListDay(); nky_put("PassT1, Y=[$YR][$MON], "); if( !$YR || !$MON ){ $YR=$last_year; $MON=$last_month; if( !$YR ){ nky_put("PassT2, "); my($sec,$min,$hour,$day,$month,$year,$wday,$yday,$isdst) = localtime; $YR=$year+1900; $MON=sprintf("%02d", $month+1); } } nky_put("PassT3
\n"); for $NickyFname( @ydl ) { $j++; &GetDateFromFname(); if( ($year == $YR) && ($month == $MON) ){ $flag_c=1; &GetNickyFile("$vDir/$NickyFname"); next if( !$Title && !$Message ); next if( $day == $oldday ); $mdstr=""; $oldday=$day; if( $GrpFileName && $grp ) { $grplist[$i]=$MsgOldTG; }else{ $grplist[$i]=""; } $day1=sprintf("%d", $day); $daylist[$i]="$mdstr$day1$TLday"; $ddlist[$i]=$day1; $i++; $wcnt++; }else{ if( $flag_c ){ $flag_n=1; $yr_n=$year; $m_n=$month; $day_n=$day; $daysub_n=$daysub; last; }else{ $flag_b=1; $yr_b=$year; $m_b=$month; $day_b=$day; $daysub_b=$daysub; } } } $mn=$MON; $mday=&GetMonthDay($YR, $MON); $yr=$YR; $str=""; if( $vect eq "ON" ){ my($str2,$ctgtg); $ctgtg=$ctg?"\?ctg=$ctg":""; $str2="$ctgtg"; if( $flag_n ){ $str="$str<-neo"; $str="$str / " if( $flag_b ); #Takamura1 $strneo="<<"; } if( $flag_b ){ $str="$str vin->"; $strvin=">>"; } } ($yr, $mday, $wcnt, $str, $strneo, $strvin); } #カレンダー/from TitleList sub PutCalendarT { local($mdstr, $clm, $mn); local(@daylist, @titlelist, @grplist, @ddlist, @ydl)=(@daylist, @titlelist, @grplist, @ddlist, @ydl); my($TLm, $TLd); $TLm=$TLmonth; $TLd=$TLday; $TLmonth=""; $TLday=""; my($ysy, $ysday, $yscnt, $ysstr, $strneo, $strvin)=&minili_GetMonthLink(); my $ot=&PutCalendarSub($ysy, $ysday, $yscnt, $ysstr); $TLmonth=$TLm; $TLday=$TLd; $ot; } sub PutCalendarLineSub { my($yr, $mday, $wcnt, $strneo, $strvin)=@_; my($a, $yd, $i, $j, $wk, $ii); my(@dyl, @pmonth); my(@comment,$ot,$ddat); if( $lang & 1 ){ @pmonth=("dummy","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"); }else{ @pmonth=("dummy","1月","2月","3月","4月","5月","6月","7月","8月","9月","10月","11月","12月"); } $yd=$j=0; @dyl=@daylist; # # 月の表示 # $ot.="
\n"; if( $lang & 1 ){ $ot.="$YR " if( $lang & 2 ); }else{ $ot.="$YR年 " if( $lang & 2 ); } $ot.=$pmonth[$mn]; $ot.=" $strneo "; #最初の週 $wk=&GetWeek($yr, $mn, 1); $wk %= 7; $i=$wk; $j=1; #日付カウンタ $yd=0; #@ddlカウンタ for(;$j<=$mday;$i++,$j++){ $ot.="" if( (($j+$wk) % 7) == 0 ); $ot.="" if( (($j+$wk) % 7) == 1 ); if( $ddlist[$yd] == $j ){ $ot.="$grplist[$yd]$dyl[$yd]"; $yd++; }else{ $ot.="$j$TLday"; } $ot.="" if( ((($j+$wk) % 7) == 0) || ((($j+$wk) % 7) == 1) ); } $ot.=$strvin; $ot.="
\n"; undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; undef @dyl; $ot; } sub PutCalendarLine { local($mdstr, $clm, $mn); local(@daylist, @titlelist, @grplist, @ddlist, @ydl)=(@daylist, @titlelist, @grplist, @ddlist, @ydl); my($TLm, $TLd); $TLm=$TLmonth; $TLd=$TLday; $TLmonth=""; $TLday=" "; my($ysy, $ysday, $yscnt, $ysstr, $strneo, $strvin)=&minili_GetMonthLink(); my $ot=&PutCalendarLineSub($ysy, $ysday, $yscnt, $strneo, $strvin); $TLmonth=$TLm; $TLday=$TLd; $ot; } sub PutCalendarRowSub { my($yr, $mday, $wcnt, $strneo, $strvin)=@_; my($a, $yd, $i, $j, $wk, $ii); my(@dyl, @pmonth); my(@comment,$ot,$ddat); my($monstr)=sprintf("%02d", $mn); $yd=$j=0; @dyl=@daylist; $ot.="
\n"; $ot.=sprintf(" %s$br %s$br %s$br %s $br $br", substr($YR, 0,1), substr($YR, 1,1), substr($YR,2,1), substr($YR,3,1)); $ot.=sprintf(" %s
 %s
", substr($monstr,0,1), substr($monstr,1,1)); $strneo=~s/<</△/; $ot.="$strneo$br"; $wk=&GetWeek($yr, $mn, 1); $wk %= 7; $i=$wk; $j=1; #日付カウンタ $yd=0; #@ddlカウンタ for(;$j<=$mday;$i++,$j++){ $ot.="" if( (($j+$wk) % 7) == 0 ); $ot.="" if( (($j+$wk) % 7) == 1 ); $ot.=" " if( $j < 10 ); if( $ddlist[$yd] == $j ){ $ot.="$grplist[$yd]$dyl[$yd]$br"; $yd++; }else{ $ot.="$j$TLday$br"; } $ot.="" if( ((($j+$wk) % 7) == 0) || ((($j+$wk) % 7) == 1) ); } $strvin=~s/>>/▽/; $ot.=$strvin; $ot.="
\n"; undef @daylist; undef @titlelist; undef @grplist; undef @ddlist; undef @dyl; $ot; } sub PutCalendarRow { local($mdstr, $clm, $mn); local(@daylist, @titlelist, @grplist, @ddlist, @ydl)=(@daylist, @titlelist, @grplist, @ddlist, @ydl); my($TLm, $TLd); $TLm=$TLmonth; $TLd=$TLday; $TLmonth=""; $TLday=" "; my($ysy, $ysday, $yscnt, $ysstr, $strneo, $strvin)=&minili_GetMonthLink(); my $ot=&PutCalendarRowSub($ysy, $ysday, $yscnt, $strneo, $strvin); $TLmonth=$TLm; $TLday=$TLd; $ot; } #年月よりその月の日数を取得 sub GetMonthDay { my($my, $mm)=@_; my @monday=('dummy','31','28','31','30','31','30','31','31','30','31','30','31'); if( $mm == 2 ){ if ((($my % 4 == 0) && ($my % 100 != 0)) || ($my % 400 == 0)){ $monday[2] = 29; }else{ $monday[2] = 28; } } $monday[$mm]; } sub SetWeekStr { my($wk)=$_[0]; if( $wk == 1 ) { # @Week=('Sun',' Mon',' Tue',' Wed',' Thu',' Fri',' Sat'); @Week=('Su',' Mo',' Tu',' We',' Th',' Fr',' Sa'); # @Week=('Su','Mo','Tu','We','Th','Fr','Sa'); } else { @Week=('日','月','火','水','木','金','土'); } } # # 日付リスト取得:カレンダー用 # sub miniGetNickyListDay { my($i, @sn, @pt, $dcnt, $num, $gfn); my($fname, $md, $y, $gomi, $oldmd); @nli=&GetNickyList($Age) unless( @nli ); @sn=sort{$$a[0] cmp $$b[0]} @nli; $dcnt=$i=0; for $gfn( @sn ){ ($gomi, $y, $fname)=split(/\//, $$gfn[0]); next if( $fname !~ /\.nky$/ ); $pt[$i]=$$gfn[0]; $i++; } $num=$#pt; $last_year=substr($pt[$num], 1, 4); $last_month=substr($pt[$num], 6, 2); @pt; } # # S.Kano # local($list_req, $Age, $TitleListSort, $grp, $ministr, $miniLang)=($list_req, $Age, $TitleListSort, $grp, $ministr, $miniLang); unless( ($ENV{'SCRIPT_NAME'} !~ /minili.cgi/) && !$list_req ){ 1; }else{ unless( $flag_type ){ print "Content-type: text/html\n\n"; print "$miniListVer\n"; $flag_type=1; } } #end of script