#! /usr//bin/perl use Time::Local; #require "/Users/take/public_html/mycgi/mime/mimer.pl"; #require '/Users/take/bin/jcode.pl'; #$DiaryFileName = "/Users/take/Calendar/diary"; #$AnivFileName = "/Users/take/Calendar/diary-anniversary"; #$VcalFileName = "/Users/take/work/killme/today.vcs"; require "/home/take/public_html/mycgi/mime/mimer.pl"; require '/home/take/public_html/mycgi/jcode.pl'; $DiaryFileName = "/home/take/Calendar/diary"; $AnivFileName = "/home/take/Calendar/diary-anniversary"; $VcalFileName = "/home/take/work/today.vcs"; #Nov 30, 2005 16:00-17:00 リーダー Meeting $ENV{'TZ'} = "JST-9"; # # 日付のセット # ($nowsec,$nowmin,$nowhour,$nowmday,$nowmon,$nowyear,$nowwday,$nowyday,$nowisdst) = localtime(time); $nowyear += 1900; $nowmon++; $startYear = $nowyear; $startMonth = $nowmon; $targetDate = sprintf("%04d%02d%02d", $nowyear, $nowmon, $nowmday); #$nowmday; #print "start $startYear $startMonth\n"; $writeFlg = 0; open(VCAL, ">$VcalFileName"); &header; $PHASE = 0; # normal schedule #print "$nowyear, $nowmon\n"; &convVcal($DiaryFileName); &convVcalAniv($AnivFileName); &footer; close(VCAL); if($writeFlg == 0) { unlink($VcalFileName); } exit; sub convVcalAniv { local ($inFile) = @_; open(FILE, $inFile); @lines = ; close(FILE); foreach $line (@lines){ &jcode'convert(*line,'euc'); #'#コードを euc に統一 chomp ($line); # %%(diary-anniversary 11 12 1998) TAKEchon.NET ドメイン取得 %d%s (1998) if($line =~ m/(.*diary-anniversary\s)(\d\d)\s(\d\d)\s(\d\d\d\d)\)\s(.*)/) { $SUMMARY = ""; $DESCRIPTION = ""; $CATEGORIES = ""; $sTime = $eTime = ""; $aTime = $aUnit = ""; #print "m = '$2' d = '$3' y = '$4' body = '$5'\n"; $cMonth = $2; $cDay = $3; $cYear = $4; $body = $5; $old = $nowyear - $cYear; $body =~ s/\%d/$old/ig; $body =~ s/\%s/th/ig; #print "$cYear $cMonth $cDay $body\n"; &jcode'convert(*body,'sjis'); #'#コードを sjis に統一 $SUMMARY = "SUMMARY:$body\r\n"; #print("h: '$head' y: '$y' s: '$sTime' e: '$eTime'\n"); #&convDate($head, $y); # $cMonth と $cDay に数字で入れる $lineDay = sprintf("%04d%02d%02d", $nowyear, $cMonth, $cDay); #print "lineday = $lineDay\n"; &calcAndWrite($lineDay); } } } sub convVcal { local ($inFile) = @_; open(FILE, $inFile); @lines = ; close(FILE); foreach $line (@lines){ $SUMMARY = ""; $DESCRIPTION = ""; $CATEGORIES = ""; $sTime = $eTime = ""; $aTime = $aUnit = ""; &jcode'convert(*line,'euc'); #'#コードを euc に統一 chomp ($line); # %%(diary-block 11 16 2005 11 18 2005) 組み込み総合技術展 Embedded Technology 2005 if($line =~ m/(.*diary-block\s)(\d*)\s(\d*)\s(\d\d\d\d)\s(\d*)\s(\d*)\s(\d\d\d\d)\)\s(.*)/) { $SUMMARY = ""; $DESCRIPTION = ""; $CATEGORIES = ""; $sTime = $eTime = ""; $aTime = $aUnit = ""; #print "m = '$2' d = '$3' y = '$4' body = '$5'\n"; $sMonth = $2; $sDay = $3; $sYear = $4; $eMonth = $5; $eDay = $6; $eYear = $7; $body = $8; #print "$sYear $sMonth $sDay - $eYear $eMonth $eDay $body\n"; &jcode'convert(*body,'sjis'); #'#コードを sjis に統一 $SUMMARY = "SUMMARY:$body\r\n"; $sDate = sprintf("%04d%02d%02d", $sYear, $sMonth, $sDay); $eDate = sprintf("%04d%02d%02d", $eYear, $eMonth, $eDay); if($targetDate >= $sDate && $targetDate <= $eDate) { &calcAndWrite($targetDate); } } else { # Oct 24, 2005 13:00-15:00 KeiType 今後のスケジュール # Oct 28, 2005 19:00 宴会 at 梅田 # Dec 9, 2005 開発部忘年会 ($head, $data) = split (/, /, $line, 2); ($y, $body) = split (/ /, $data, 2); $sTime = $eTime = ""; if($body =~ m/(\d\d:\d\d.*)\s(.*)/) { ($sTime, $body) = split (/ /, $body, 2); #print "sTime = $sTime\n"; if($sTime =~ m/(\d\d:\d\d)-(\d\d:\d\d)/) { $sTime = $1; $eTime = $2; #($sTime, $eTime) = split(/-/, $1, 2); } } $aTime = 600; &jcode'convert(*body,'sjis'); #'#コードを sjis に統一 $SUMMARY = "SUMMARY:$body\r\n"; #print("h: '$head' y: '$y' s: '$sTime' e: '$eTime' b: '$body'\n"); #print("h: '$head' y: '$y' s: '$sTime' e: '$eTime'\n"); &convDate($head, $y); # $cMonth と $cDay に数字で入れる &calcAndWrite($lineDay); } } } sub convDate { local ($day, $y) = @_; ($cond, $cDay) = split (/ /, $day); if($cond eq "Jan") { $cMonth = 1; } elsif ($cond eq "Feb") { $cMonth = 2; } elsif ($cond eq "Mar") { $cMonth = 3; } elsif ($cond eq "Apr") { $cMonth = 4; } elsif ($cond eq "May") { $cMonth = 5; } elsif ($cond eq "Jun") { $cMonth = 6; } elsif ($cond eq "Jul") { $cMonth = 7; } elsif ($cond eq "Aug") { $cMonth = 8; } elsif ($cond eq "Sep") { $cMonth = 9; } elsif ($cond eq "Oct") { $cMonth = 10; } elsif ($cond eq "Nov") { $cMonth = 11; } elsif ($cond eq "Dec") { $cMonth = 12; } $lineDay = sprintf("%04d%02d%02d", $y, $cMonth, $cDay); #print "lineDay = $lineDay\n"; } sub writeVcal { #open(VCAL, ">$VcalFileName"); #&header; print VCAL "BEGIN:VEVENT\r\n"; print VCAL $SUMMARY; print VCAL $DESCRIPTION; print VCAL $CATEGORIES; print VCAL $DTSTART; print VCAL $DTEND; print VCAL $AALARM; print VCAL "CLASS:PUBLIC\r\n"; print VCAL "END:VEVENT\r\n"; #&footer; #close(VCAL); } sub calTime { local ($y, $m); if($PHASE == 0) { foreach $day (@Days) { &calcAndWrite($day); } } else { &getCondsData; $y = $startYear; $m = $startMonth; foreach (0 .. $Range) { if($cMonth == $m) { #print "$y $m\n"; $day = sprintf("%04d%02d%02d", $y, $cMonth, $cDay); &calcAndWrite($day); } $m++; if($m > 11) { $y++; $m -= 12; } } } } sub getCondsData { foreach $cond (@Conds) { if($cond eq "Jan") { $cMonth = 1; } elsif ($cond eq "Feb") { $cMonth = 2; } elsif ($cond eq "Mar") { $cMonth = 3; } elsif ($cond eq "Apr") { $cMonth = 4; } elsif ($cond eq "May") { $cMonth = 5; } elsif ($cond eq "Jun") { $cMonth = 6; } elsif ($cond eq "Jul") { $cMonth = 7; } elsif ($cond eq "Aug") { $cMonth = 8; } elsif ($cond eq "Sep") { $cMonth = 9; } elsif ($cond eq "Oct") { $cMonth = 10; } elsif ($cond eq "Nov") { $cMonth = 11; } elsif ($cond eq "Dec") { $cMonth = 12; } else { $cDay = $cond; } } } sub calcAndWrite { local ($day) = @_; if($day ne $targetDate) { return; } $writeFlg = 1; #print ">>>>>day2 '$day'\n"; ################## ($vYear, $vMonth, $vDay) = $day =~ m#(\d\d\d\d)(\d\d)(\d\d)#o; $sYear = $eYear = $vYear; $sMonth = $eMonth = $vMonth; $sDay = $eDay = $vDay; if($sTime eq "") { $aTime = 0; $sTime = "00:00"; $eTime = "00:00"; #$eDay++; # remove 2006.1.31 } elsif($eTime eq "") { $eTime = $sTime; } ($sHour, $sMin) = split(/:/, $sTime); ($eHour, $eMin) = split(/:/, $eTime); $sYear -= 1900; $sMonth--; $eYear -= 1900; $eMonth--; #print ">>>>>>>month $sMonth\n"; $stime = timelocal(0, $sMin, $sHour, $sDay, $sMonth, $sYear); $stime -= 9 * 60 * 60; $alarmTime = $stime - $aTime; $etime = timelocal(0, $eMin, $eHour, $eDay, $eMonth, $eYear); $etime -= 9 * 60 * 60; ($sSec,$sMin,$sHour,$sDay,$sMonth,$sYear,$swday,$syday,$sIsdst) = localtime($stime); ($eSec,$eMin,$eHour,$eDay,$eMonth,$eYear,$ewday,$eyday,$eIsdst) = localtime($etime); ($aSec,$aMin,$aHour,$aDay,$aMonth,$aYear,$awday,$ayday,$aIsdst) = localtime($alarmTime); $sYear += 1900; $sMonth++; $eYear += 1900; $eMonth++; $aYear += 1900; $aMonth++; #$DTSTART = "DTSTART:\r\n"; #$DTEND = "DTEND:\r\n"; #$AALARM = "AALARM:\r\n"; $DTSTART = ""; $DTEND = ""; $AALARM = ""; if($sTime ne "") { $DTSTART = sprintf("DTSTART:%04d%02d%02dT%02d%02d00Z\r\n" , $sYear , $sMonth , $sDay , $sHour , $sMin); } if($eTime ne "") { $DTEND = sprintf("DTEND:%04d%02d%02dT%02d%02d00Z\r\n" , $eYear , $eMonth , $eDay , $eHour , $eMin); } if($sTime ne "") { if($aTime > 0) { $AALARM = sprintf("AALARM:%04d%02d%02dT%02d%02d00Z\r\n" , $aYear , $aMonth , $aDay , $aHour , $aMin); } } else { $AALARM = "AALARM:\r\n"; } &writeVcal; } sub header { print VCAL "BEGIN:VCALENDAR\r\n"; print VCAL "VERSION:1.0\r\n"; } sub footer { print VCAL "END:VCALENDAR\r\n"; }