1#!/usr/local/bin/perl 2#!%PERL_PATH% 3# 4# index.cgi as i system and i search system 5# 2001/02/28 0.9.10 kei-3, iouri-3 fix CR/LF bug 6# 2000/10/24 0.9.9 tokumi-3 piloweb 2days date bug fix 7# HyperNikkiSystem Project 8# 2000/10/20 0.9.8 masato-3 hikisu patch 9# yar-3 DIV 10# 2000/09/19 0.9.7 yar-3 for Palmscape Cruiser (tnx chig-3) 11# 2000/08/12 0.9.6 yar-3 today's plan, OK on CR/LF, SPAN 12# masato-3 user vars 13# chihalin-3 fix on no hnf day 14# 2000/07/17 0.9.5 yar-3 fix month bug 15# 2000/07/12 0.9.4 yar-3 fix date bug 16# 2000/07/06 0.9.3 tokumi-3 catprint on NEW 17# 2000/07/05 0.9.2 masato-3 jump patch 18# yar-3 fix fileprint charcode bug 19# yar-3 daystyle 20# 2000/07/02 0.9.1 masato-3 to=hoge patch 21# yar-3 CRLF, STRIKE, JSky 22# 2000/06/30 0.9.0 masato-3 rebuild parser 23# 2000/06/29 0.8.7 yar-3 LIMG 24# 2000/06/29 0.8.6 yar-3 fix cmd match, imodegw 25# 2000/06/28 0.8.5 masato-3,yar-3 hns & i system fusion, theme 26# 2000/06/22 0.8.4 yar-3 delete <br> about GRP 27# 2000/06/14 0.8.3 masato-3 search patch 28# 2000/06/12 0.8.2 chihalin-3 PDX bug fixed for ONC browser 29# 2000/06/12 0.8.1 masato-3 fixsearch bug 30# 2000/06/06 0.8.0 kei-3 fix schedule bug 31# see below... 32# ����cgi�ϲ�¤��ͳ�������ۼ�ͳ�Ǥ�����̵�ݾڤǤ��� 33# ����cgi�� GPL �Ǥ��� 34# ���Υե������config.ph��EUC�����ɡ�����LF�ǻ��Ѥ��Ƥ��������� 35 36$out = ""; # ���������buffer 37#$o = ""; # parse buffer 38 39$ver = "0.9.10(Final��) 01/02/28 (C)yar-3,masato-3"; 40#$ver = "0.4.8 with PDX G/W pl7 00/02/29 (C)yar-3,masato"; 41# ��¤�����ҤȤϡ���������ؤ�������ȥ��ꥸ�ʥ�ƥ�up 42$isystem = "http://yar-3.net/isystem/"; 43 44$strong = "<strong>"; 45$strong2 = "</strong>"; 46$strike = "<strike>"; 47$strike2 = "</strike>"; 48$sub_separator = " "; 49 50# �桼���ѿ� 51%UserVarTemplates = ( 52 TENKI => "[ŷ��:%value]", 53 BASHO => "(%value)", 54 TAION => " �β�:%value��", 55 TAIJU => " �ν�:%value" . "Kg", 56 SUIMIN => " ��̲:%value����", 57 BGM => " BGM:%value", 58 HOSU => " %value��", 59 HON => " �ɽ�:%value", 60 KITAKU => " �������:%value", 61 WALK => " ����:%value", 62 RUN => " ���祮��:%value" 63 64); 65%UserVarAlias = ( 66 WEATHER => "TENKI", 67 LOCATION => "BASHO", 68 WEIGHT => "TAIJU", 69 TEMPERATURE => "TAION", 70 SLEEP => "SUIMIN", 71 STEP => "HOSU", 72 BOOK => "HON", 73 HOMECOMING => "KITAKU", 74); 75 76@color_imode_ua = qw(D502 F502 SH821 P209is D209 F209); 77 78unshift(@INC, "."); 79require 'config.ph'; 80#����ե�����Ǥ��� 81 82if ($use_onccnv) { # HTML to ONC����С������� 83 require 'onccnv.pl'; 84 $ongw = ""; 85} else { 86 # ���⤷�ʤ��Ƥ�����פ��⤷��ʤ���ǰ�Τ��� 87 eval q{ 88 sub conv_html2onc { $_[0]; } 89 sub onc_gateway {} 90 }; 91} 92 93if ($nkf == 1) { 94 eval q(use NKF); 95 if (!defined(&main::nkf)) { 96 die "NKF.pm not found"; 97 } 98 # ftp://ftp.ie.u-ryukyu.ac.jp/pub/software/kono/nkf192.shar ������Ǥ��ޤ� 99} elsif ($nkf == 2) { 100 require 'jcode.pl'; #jcode.pl�Ϻǿ���侩 101 # ftp://ftp.iij.ad.jp/pub/IIJ/dist/utashiro/perl/ ��������Ǥ��ޤ� 102} 103 104 105 106@week = ("��","��","��","��","��","��","��"); #���ܸ� 107#@week = ("Su","Mo","Tu","We","Th","Fr","Sa"); #English 108 109#�����β�� masato-3 110if ($ARGV[0] eq '-t') { 111 # �ǥХå��ѥ��ץ���������Ȥä��¹� 112 # ������ : ./index.cgi -t word=system 113 $query_string = $ARGV[1]; 114 $log = 0; # ���ϼ��ʤ� 115 splice(@ARGV, 0, 2); # ���ץ������������ 116} elsif ($ENV{'REQUEST_METHOD'} eq "POST") { 117 read(STDIN, $query_string, $ENV{'CONTENT_LENGTH'}); 118} else { 119 $query_string = $ENV{'QUERY_STRING'}; 120} 121$jsky = 1 if $ENV{'HTTP_X_JPHONE_MSNAME'}; # j-skyweb 122 123@a = split(/&/, $query_string); 124foreach $a (@a) { 125 ($name, $value) = split(/=/, $a); 126 if ($name =~ /^word$/i) { # word=hoge ���ä���URL encode���줿�ޤ��ݻ� 127 $origword = $value; 128 } 129 $value =~ tr/+/ /; 130 $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; 131 $FORM{$name} = $value; 132} 133 134$ua = $ENV{'HTTP_USER_AGENT'}; 135#$ua = "PDXGW"; # for testing (PDXGW) 136$ua = "PDXGW" if ($FORM{pdxdata} || $FORM{pdxsubj} || $FORM{pdxfrom}); 137#$day = "SALL" if ($ua =~ /pilo/i); #for piloweb 138 139if ($ua =~ /^DoCoMo/i) { #iMODEü�� 140 $imode = 1; 141# if ($ua =~ /D502/i or $ua =~ /F502/i or $ua =~ /SH821/i) { # color iMODE? 142 if (grep($ua =~ /$_/i, @color_imode_ua)) { # color iMODE? 143 $colorimode = 1; 144 if ($head){ 145 $head = "<font color=\"$headcolor\">$head</font>"; 146 } else { 147 $head = "<font color=\"$headcolor\">$title</font>"; 148 } 149 $newmark = "<font color=\"$newcolor\">$newmark"; 150 $new2 = "$new2</font>"; 151 $submark = "<font color=\"$subcolor\">$submark"; 152 $sub2 = "$sub2</font>"; 153 $strong = "<font color=\"$strongcolor\">$strong"; 154 $strong2 = "$strong2</font>"; 155 } 156} elsif ($ua =~ /^PDXGW/) { #������PmailDX 157 my $pdxdata = $FORM{pdxdata}; 158 if ($pdxdata =~ /\s*(\S+)\s*/) { 159 $pdxdata = $1; 160 } else { 161 $pdxdata = $FORM{pdxsubj}; 162 if ($pdxdata =~ /\s*(\S+)\s*/) { 163 $pdxdata = $1; 164 } else { 165 $pdxdata = ''; 166 } 167 } 168 if ($ongw) { # t-saitoh������opennet CGI������ 169 my $qbaseuri; 170 171 #print "Location: $ongw" . "?URL=$baseuri\n\n"; 172 # Location�ϻȤ��ޤ���Ǥ���>PDX 173 print "content-type: text/plain\n\n"; # html header 174 print "From: $baseuri\n"; 175 print "Content-Type: Text/X-PmailDX\n\n"; 176 if ($pdxdata) { 177 $qbaseuri = "$baseuri?word=$pdxdata"; 178 } else { 179 $qbaseuri = $baseuri; 180 } 181 $qbaseuri =~ s/([:?=&\/\.~])/sprintf("%%%2X",ord($1))/egi ; 182 print "<SEL=1;$ongw?URL=$qbaseuri>\n\n"; 183 print "i system for PmailDX<br>\n"; 184 if ($pdxdata) { 185 print "push 1 for search[$pdxdata].\n"; 186 } else { 187 print "push 1.\n"; 188 } 189 exit 0; 190 } 191 $pdx = 1; 192# $section = "ALL"; #PmailDX�ΤȤ���15KB���餤�����Ǥ���Τ�1��ʬ��쵤�� 193 194 # pdxdata(PmailDX��ɽ��or��ʸ)������Ф���Ǥ����ʤ긡�� 195 $FORM{word} = $pdxdata if ($pdxdata ne ''); 196 197 $baseuri =~ s/[?](.+)$//; 198} elsif ($ua =~ /^UP.Browser/) { # ezweb? 199 $ezweb = 1; 200} 201$use_onccnv = 0 if (!$pdx); 202 203if ($imode or $pdx or $ezweb or $jsky) { 204 $strike = "[S:"; 205 $strike2 = ":S]"; 206 if ($colorimode) { 207 $strike = "<font color=\"$strikecolor\">$strike"; 208 $strike2 = "$strike2</font>"; 209 } 210} 211 212#$log = 1;�ǥ��μ衣0�Ǻμ褷�ʤ���ư���ʤ��Ȥ���0�ˤ��� 213if ($log) { # logger on 214 # print "logging\n"; 215 &logging; 216} 217 218if ($FORM{U} || $FORM{URL}) { # ONC GWư�� 219 &onc_gateway($FORM{U} || $FORM{URL}, $baseuri, $ref_max, $flag_maru); 220 exit 0; 221} 222 223 224#ɽ���������������� 225if ($FORM{to} =~ /^(\d{8})(\d+)/) { 226 $day = "$1S$2"; 227} else { 228 $day = $FORM{d} || $ARGV[0]; # ?20001031 �Ȥ��������� 229} 230 231$tt = time; 232($sec, $min, $hour, $mday, $mon, $year, 233 $wday, $yday, $isdst) = localtime($tt); 234$year += 1900; 235$mon++; 236if ($mon < 10 ) { $mon = "0$mon"; } #0suppress 237if ($mday < 10 ) { $mday = "0$mday"; } 238$today = "$year$mon$mday"; #19991231 format 239if ($day =~ /^(\d{4})(\d{2})(\d*)/) { # ?09270111 240 if ($1 < 1970) { 241 $day = ""; # �ǿ������� 242 } 243} 244 245if ($day eq 'J') { #���հ�ư 246 &print_jump_form; 247 exit 0; 248} 249if ($day eq 'E') { #������˥塼 250 &print_search_form; 251 exit 0; 252} 253if ($day eq 'PL') { # today's Plan 254 $day = $today . "P"; 255} 256if ($day eq 'P' or ($day eq "" and ($ua =~ /pilo/i or $ua =~ /pscruiser/i))) { #Piloweb and PSCruiser 257 $piloweb = 1; # piloweb flag 258 $section = "ALL"; 259 $day = ""; 260} 261 262if (length($day) > 8) { # ?20001031S2 �Ȥ������� 263 if ($day =~ /P$/i) { # ������P : plan�⡼�� 264 $day =~ /(\d{8})P/i; #20001031 P ��ʬ���� 265 $day = $1; 266 $plan = 1; 267 } elsif ($day =~ /T$/i) { # ������T : todo�⡼�� 268 $day =~ /(\d{8})T/i; #20001031 P ��ʬ���� 269 $day = $1; 270 $todo = 1; 271 $todof = "$diarydir/todo"; 272 } else { 273 $day =~ /(\d{8})s(.+)/i; #20001031 S2 ��ʬ���� 274 $day = $1; 275 $section = $2; 276 } 277} 278if ($day eq "") { # today 279# $day = $today if (-e &make_hnf_fname($today)); 280 if ($FORM{word}) { # ����ʸ���� 281 &search_word($FORM{word}); 282 exit 0; 283 } 284 285} else { 286 ($year, $mon, $mday) = unpack("A4A2A2", $day); 287 $hnf = &make_hnf_fname($day); 288} 289 290$newcount = 0; #�����Ĥ��NEW�� 291$subcount = 0; #�����Ĥ��SUB�� NEW���Ѥ���reset 292 293$ok = 0; # header���� OK �ޤǤ���ʬ�ϥ桼�����ѿ� i system�Ǥ�̵�� 294 295#��ǯ������ǯ�ޤǤ�hnf�ե�����Υꥹ�Ȥ�������� 296foreach my $y ($year-1..$year+1) { 297 opendir DIR, "$diarydir$y" || next; 298 push(@ddays, (sort grep s/^d(\d+)\.hnf$/$1/, readdir DIR)); 299 closedir DIR; 300} 301#$day������äݤ�������hnf���ʤ��Ȥ��Ϻǿ���hnf������ 302if ($day eq "") { 303 foreach my $d (reverse @ddays) { 304 $day = $d; 305 ($year, $mon, $mday) = unpack("A4A2A2", $day); 306 $hnf = &make_hnf_fname($day); 307 last if &has_ok($hnf); 308 } 309} 310#�����������������ե������õ�� 311for ($i = 0; $i <= $#ddays; $i++) { 312 last if ($ddays[$i] ge $day); 313} 314$j = ($ddays[$i] ge $day) ? $i-1 : $i; 315while ($j >= 0) { 316 my $f = &make_hnf_fname($ddays[$j]); 317 if (&has_ok($f)) { 318 $prevday = $ddays[$j]; 319 last; 320 } 321 $j--; 322} 323$j = ($ddays[$i] ge $day) ? $i+1 : $i; 324while ($j <= $#ddays) { 325 my $f = &make_hnf_fname($ddays[$j]); 326 if (&has_ok($f)) { 327 $nextday = $ddays[$j]; 328 last; 329 } 330 $j++; 331} 332 333if (!$use_onccnv) { 334 $out .= "content-type: text/html\n\n"; # content-type����� 335} 336$out .= "\n<html><head>\n"; 337$out .= "<!-- �� -->\n" if (!$nkf); #nkf��jcode.pl���Ȥ��ʤ��Ȥ��ϡ֤�ץƥ� 338#�֤�ץƥ��Ȥϡ�iMODE���Ӥ�EUC�Υ����Ȥ�ɽ�����뵻��(��) 339# tnx 2 masato-3, ari-3 340$out .= "<title>$title</title>\n"; 341$out .= "</head>\n"; 342 343&make_body; #<body>������������ 344 345$out .= "</html>\n"; #html��������� 346 347$out = &conv_html2onc($out, $baseuri, $baseuri, $ref_max, $flag_maru) if $use_onccnv; 348$out = &convert2sjis($out) if $nkf; #NKF,jcode.pl���ѻ���sjis�Ѵ� 349 350print $out; #���� 351 352################################################################ 353# 354# �����ޤ� 355# 356# ���Ȥ�subroutine 357# 358################################################################ 359 360 361# �ե�������ɤ߽Ф���ɽ�� 362sub fileprint { 363 my $tmpout; 364 open(IN, $_[0]); 365 while(<IN>) { 366 $tmpout .= "$_\n"; 367 } 368 $tmpout = &convert2euc($tmpout) if $nkf; #NKF,jcode.pl���ѻ���euc�Ѵ� 369 return $tmpout; 370} 371 372#���դ�ɽ�� 373sub dayprint { 374 my $yyyy,$mm,$dd,$m,$d,$w,$tmpday; 375 376 #$daystyle = "<b>%yyyyǯ%mm��%dd��(%w)</b>" if (!$daystyle) ; #default 377 378 if ($daystyle) { 379 $tmpday = $daystyle; 380 } else { 381 $tmpday = "<b>%yyyyǯ%mm��%dd��(%w)</b>"; #default 382 } 383 384 # %yyyy 4������ 385 # %mm 2��� 386 # %dd 2���� 387 # %m ��(0���ץ쥹�ʤ�) 388 # %d ��(0���ץ쥹�ʤ�) 389 # %w ���� 390 391 $day =~ /(\d\d\d\d)(\d\d)(\d\d)/; 392 $yyyy = $1; 393 $mm = $2; 394 $dd = $3; 395 $m = $mm; #0.9.5 fix 396 $m = sprintf("%1d", $mm) if ($mm < 10); 397 $d = $dd; #0.9.5 add 398 $d = sprintf("%1d", $dd) if ($dd < 10); 399 $w = getdayoftheweek( "$yyyy/$mm/$dd"); 400 401# $out .= "<br><b>$1ǯ$2��$3��</b>\n"; 402# $out .= "<b>$1ǯ$2��$3��</b>\n"; # br���ä� 403 $tmpday =~ s/%yyyy/$yyyy/; 404 $tmpday =~ s/%mm/$mm/; 405 $tmpday =~ s/%dd/$dd/; 406 $tmpday =~ s/%m/$m/; 407 $tmpday =~ s/%d/$d/; 408 $tmpday =~ s/%w/$w/; 409 $out .= "$tmpday\n"; 410} 411 412#���� 413sub parse { 414 $t = $_[0]; 415 my $o = ""; 416 $t =~ s/\r$//; 417 chomp($t); #����ϼ¤Ϥ���ʤ�? 418 419 if ( $t =~ /^OK$/ ) { #header���� 420 $ok = 1; 421 return; 422 } 423 424 if ($ok == 0) { #header������ 425 #$o .= $t; #for debugging 426 # �桼�����ѿ���ɽ�� 427 my ($var, $value) = $t =~ /^(\S+)\s+(\S.*)/; 428 if ($UserVarAlias{$var}) { 429 $var = $UserVarAlias{$var}; 430 } 431 my $v = $UserVarTemplates{$var}; 432 if ($var ne '' && $v ne '') { 433 $v =~ s/%value/$value/e; 434 $o .= $v; 435 } 436 return; 437 } 438 439 if ($t =~ /^RL(NEW|SUB)\s(\S+)\s(\S+)\s(.+)/) { #RLNEW ����1 2 ���� 440 $cmd = $1; 441 $orig = $2; 442 $url = $3; 443 $cmt = $4; 444 #$t = "cmd=$cmd orig=$orig url=$url $cmt"; 445 open(RLINK, "$diarydir" . "conf/rlink.txt"); 446 while($a = <RLINK>) { 447 $a =~ /^(\S+)\s(.*)/; 448 #$t .= "-$1- -$orig-"; 449 if ( $1 eq $orig ) { # ���פ����� 450 $url = $2 . $url; 451 $t = "L$cmd $url $cmt"; #LNEW,LSUB���ִ����Ƥ��ޤ�! 452 } 453 } 454 close(RLINK); 455 } 456 457 # <,>,&���ִ����Ƥ��� 458 if ($t =~ /^((LNEW|LSUB|LSTRIKE|LSTRONG|LINK|URL)\s+(\S+))(\s+.+)?/) { 459 $t = &html_escape($1) . &html_escape_zen($4); 460 } else { 461 $t = &html_escape_zen($t); 462 } 463 464 if ($t =~ /~$/) { #�����β��Ԥ��Ѵ� 465 $t =~ s/~$/<br>/; 466 } 467 468 if ($grp > 0) { #GRP��ǽ�б� kenji-3 469 if ($t =~ /^(NEW|LNEW|RLNEW|GRP)\s.*/) { 470 # GRP����������ɽ���ˤ��� 471 } 472 else { 473 return; 474 } 475 } 476 477 my ($cmd, $p) = ($t =~ /^(\/?[A-Z]+)(?:(?:\s*)|(?:\s+(.*)))$/); 478 if ($cmd eq "CAT") { # CAT hoge 479 $cat = $cat . $p; #ʣ���Ԥ�CAT���б� 480 } elsif ($cmd eq "GRP") { # GRP��ǽ 481 $grp = 1; # grp mode on 482 } elsif ($cmd eq "NEW") { # NEW hogehoge 483 $newtopic = $2; # search�ǻȤ������new����Ȥ���¸ 484 if ($grp == 1) { 485 # GRP����������ɽ���ˤ��� 486 $grp = 2; 487 return; 488 } elsif ($grp == 2) { 489 $grp = 0; 490 } 491 492 $newcount++; 493 #if ( $newcount != 1 and $imode != 1) { 494 if ( $imode != 1) { #��� $newline�Ƕ��ڤäƤߤ� 495 $o .= "$newline"; 496 } else { #iMODE�ΤȤ��� 497 $o .= "<br>"; #�Ȥꤢ�������� 498 } 499 $subcount = 1; 500 $o .= "$newmark$newcount:"; 501 $o .= "$new1$p"; 502 if ($cat && $catprint ) { #cat ɽ����on/off��ǽ�� 503 $o .= "\n[$cat]\n"; 504 $cat = ""; 505 } 506 $o .= "$new2"; 507 } elsif ($cmd eq "LNEW" && $p =~ /(\S+)\s(.+)/) { # LNEW url hogehoge 508 #$newtopic = $2; # search�ǻȤ������new����Ȥ���¸ 509 if ($grp == 1) { 510 # GRP����������ɽ���ˤ��� 511 $grp = 2; 512 return; 513 } elsif ($grp == 2) { 514 $grp = 0; 515 } 516 517 $newcount++; 518 #if ( $newcount != 1 and $imode != 1) { 519 if ( $imode != 1) { #��� $newline�Ƕ��ڤäƤߤ� 520 $o .= $newline; 521 } else { #iMODE�ΤȤ��� 522 $o .= "<br>"; #�Ȥꤢ�������� 523 } 524 $subcount = 1; 525 $fncount = 1; 526 $fnmode = 0; 527 $fn = ""; 528 $o .= "$newmark$newcount:"; 529 $o .= $new1; 530 $o .= &make_link($1); 531 $o .= "$2</a>"; 532 if ($cat && $catprint ) { #cat ɽ����on/off��ǽ�� 533 #print "[$cat]\n"; 534 $o .= "\n[$cat]\n"; 535 $cat = ""; 536 } 537 $o .= $new2; 538 } elsif ($cmd eq "SUB") { # SUB hogehoge 539 #$subtopic = $p; # search�ǻȤ������sub����Ȥ���¸ 540 $o .= "$subline"; 541 $o .= "$submark$subcount:"; 542 $subcount++; 543 $o .= "$sub1$p$sub2"; 544 } elsif ($cmd eq "LSUB" && $p =~ /(\S+)\s(.+)/) { # LSUB url hogehoge 545 #$subtopic = $2; # search�ǻȤ������sub����Ȥ���¸ 546 $o .= "$subline"; 547 $o .= "$submark$subcount:"; 548 $subcount++; 549 $o .= &make_link($1); 550 $o .= "$sub1$2$sub2</a>"; 551 552 } elsif ($cmd eq "LINK" && $p =~ /(\S+)\s(.+)/) { # LINK url hogehoge 553 $o .= &make_link($1); 554 $o .= "$2</a>"; 555 } elsif ($cmd eq "URL" && $p =~ /(\S+)(\s(.+))?/) { # URL url hogehoge 556 $o .= &make_link($1); 557 $o .= "$3 ($1)</a>"; 558 } elsif ( $cmd eq "UL" or $cmd eq "/UL" or 559 $cmd eq "DL" or $cmd eq "/DL" or 560 $cmd eq "OL" or $cmd eq "/OL") { 561 $cmd =~ tr/A-Z/a-z/; 562 $o .= "<$cmd>"; 563 564 } elsif ( $cmd eq "/PRE") { # /PRE 565 $premode = 0; 566 $o .= "</pre>"; 567 } elsif ( $cmd eq "PRE") { # PRE 568 if ($premode) { 569 $o .= "$1"; 570 } else { 571 $o .= "<pre>"; 572 $premode = 1; 573 } 574 575 } elsif ($cmd eq "CITE") { 576 $o .= "<blockquote>\n"; 577 } elsif ($cmd eq "/CITE") { 578 $o .= "</blockquote>\n"; 579 } elsif ($cmd eq "/BIG") { 580 # do nothing 581 } elsif ($cmd eq "/DIV") { 582 # do nothing 583 } elsif ($cmd eq "DIV") { 584 #do nothing 585 } elsif ($cmd eq "BIG" ) { 586 # do nothing 587 } elsif ($cmd eq "/SMALL") { 588 # do nothing 589 } elsif ($cmd eq "SMALL") { 590 # do nothing 591 } elsif ($cmd eq "LIMG" && $p =~ /(\S+)\s(\S+)\s(\S+)\s(.+)/) { 592 # LIMG url {r|l|n} �ե�����̾ ʸ���� 593 $o .= "[LIMG $4]"; 594 } elsif ($cmd eq "LI") { # LI hoge 595 $o .= "<li>$p"; 596 } elsif ($cmd eq "DT") { #DT hoge 597 $o .= "<dt>$p"; 598 } elsif ($cmd eq "DD") { #DD hoge 599 $o .= "<dd>$p"; 600 } elsif ($cmd eq "STRIKE") { # STRIKE hoge 601 $o .= "$strike$p$strike2"; 602 } elsif ($cmd eq "LSTRIKE" && $p =~ /(\S+)\s(.*)/) { # LSTRIKE url hoge 603 $o .= $strike; 604 $o .= &make_link($1); 605 $o .= "$2</a>$strike2"; 606 } elsif ($cmd eq "STRONG") { # STRONG hoge 607 $o .= "$strong$p$strong2"; 608 } elsif ($cmd eq "LSTRONG" && $p =~ /(\S+)\s(.*)/) { #LSTRONG url hoge 609 $o .= $strong; 610 $o .= &make_link($1); 611 $0 .= "$2</a>$strong2"; 612 } elsif ($cmd eq "SPAN" && $p =~ /(\S+)\s(.*)/) { #SPAN classname hoge 613 $o .= $2; 614 } elsif ($cmd eq "FONT" && $p =~ /(\S+)\s(\S+)\s(.+)/) { # FONT para value hoge 615 $o .= "<font $1=\"$2\">$3</font>"; 616 617 } elsif ($cmd eq "IMG" && $p =~ /(\S+)\s(\S+)\s(.+)/) { # IMG para url alt 618 if ($1 eq "r") { 619 $aln = "align=\"right\""; 620 } elsif ($1 eq "l") { 621 $aln = "align=\"left\""; 622 } elsif ($1 eq "n") { 623 $aln = ""; 624 } 625 #$o .= "<img src=\"$2\" $aln ALT=\"$3\"$1=\"$2\">$3</img>\n"; (23:22) 626 #iMODE�ʤΤǴ���Ū�˲�����ɽ�����ޤ��� 627 $o .= "[IMG $3]"; 628 } elsif ( $t =~ /^!(.*)/) { # ! hoge 629 #$o .= "<!-- $1 -->\n"; �̤�ɽ�����ʤ��Ƥ⤤����� 630 } elsif ( $t =~ /^!#(.*)/) { # !# hoge 631 } elsif ($cmd eq "FN") { # FN 632 $fnmode = 1; 633 $o .= "<font size=\"-1\" color=GREEN>("; 634 } elsif ($cmd eq "/FN") { # /FN 635 $fnmode = 0; 636 $fncount++; 637 $o .= ")</font>\n"; 638 } elsif ($cmd eq "ALIAS") { # ALIAS ̤�б����ä�!! 639 #����Ū��aliasʸ�����Ф��Ƥ��� 640 #$o .= "$p"; 641 $orig = $p; 642 open(ALIAS, "$diarydir" ."conf/alias.txt"); 643 while($a = <ALIAS>) { 644 $a =~ /^(\S+)\s(.*)/; 645 #print "$a,$1<br>"; 646 if ( $1 eq $orig ) { # ���פ����� 647 $o .= "$2"; 648 } 649 } 650 close(ALIAS); 651 } elsif ($cmd eq "RLINK" && $p =~ /(.+)\s(.+)\s(.+)/ ) { # RLINK ����1 ����2 ����ʸ�� 652 $orig = $1; 653 $url = $2; 654 $cmt = $3; 655 open(RLINK, "$diarydir" . "conf/rlink.txt"); 656 while($a = <RLINK>) { 657 $a =~ /^(\S+)\s(.*)/; 658 if ( $1 eq $orig ) { # ���פ����� 659 $url = $2 . $url; 660 $o .= &make_link($url); 661 $0 .= "$cmt</a>"; 662 } 663 } 664 close(RLINK); 665 } elsif ($cmd eq "MARK") { #MARK���ޥ�ɼ�����˺�� 666 $o .= $p; 667 } elsif ($cmd eq "P") { # P 668 $o .= "<p>"; 669 } elsif ($cmd eq "/P") { # /P 670 $o .= "</p>"; 671 } else { 672 $o .= $t; 673 } 674 return $o; 675} 676 677#�����ȥ������ɽ������ 678sub title { 679 #$out .= "<ol>\n"; 680 my $ok; 681 my $uv, @sect; 682 while(<IN>) { 683 chomp; 684 s/\r$//; #CR+LF to LF 685 $_ = convert2euc($_) if ($hnfconv and $nkf); 686 if (!$ok) { # header 687 if (/^OK$/) { #header���� 688 $ok = 1; 689 $out .= $uv; 690 next; 691 } 692 if (/^(\S+)\s+(\S.*)/) { 693 my $var = $1; 694 if ($UserVarAlias{$var}) { 695 $var = $UserVarAlias{$var}; 696 } 697 my $v = $UserVarTemplates{$var}; 698 my $value = $2; 699 if ($v ne '' && $catprint) { 700 $v =~ s/%value/$value/e; 701 $uv .= $v; 702 } 703 } 704 next; 705 } 706 if (/^GRP/) { # GRP��ǽ kenji-3 707 $grp = 1; # grp mode on 708 } 709 710 if (/^NEW()$/ or /^NEW\s(.+)/ or /^LNEW\s\S+\s(.+)/ or /^RLNEW\s\S+\s\S+\s(.+)/){ 711 if ($grp == 1) { 712 # GRP����������ɽ���ˤ��� 713 $grp = 2; 714 } elsif ($grp == 2) { 715 $grp = 0; 716 } 717 718 $newcount++ unless ($grp); 719 #$out .= "<br>\n"; 720 $sect[$newcount] .= "<br>\n" unless ($grp); 721 $uri = $day . "S$newcount"; 722 my $t = &html_escape($1); 723 if ($t eq "") { 724 $t = "_"; 725 } 726 #$out .= "$newmark$newcount:$new1" . make_self_link("?$uri") . "$t</a>$new2\n" unless ($grp); 727 $sect[$newcount] .= "$newmark$newcount:$new1" . make_self_link("?$uri") . "$t</a>$new2\n" unless ($grp); 728 # listing��� 729 } elsif (/^SUB()$/ or /^SUB\s(.+)/ or /^LSUB\s\S+\s(.+)/ or /^RLSUB\s\S+\s\S+\s(.+)/) { 730 my $t = &html_escape($1); 731 if ($t eq "") { 732 $t = "_"; 733 } 734 #$out .= "$t$sub_separator\n" unless ($grp); 735 $sect[$newcount] .= "$sub_separator$t\n" unless ($grp); 736 } 737 } 738 739if ($titlereverse) { 740 for( $xx = $newcount; $xx >=0; $xx--) { 741 $out .= $sect[$xx]; 742 } 743} else { 744 for($xx = 0; $xx <= $newcount; $xx++) { 745 $out .= $sect[$xx]; 746 } 747} 748 749$out .= "<hr>\n"; 750 if ($prevday) { 751 $out .= make_self_link("?$prevday", "1") . "[������]</a>"; 752 } 753 if ($nextday) { 754 $out .= make_self_link("?$nextday", "3") . "[������]</a>"; 755 } 756 $up = "?$day" . "P"; 757 $ut = "?$day" . "T"; 758 759 $out .= make_self_link("?J", "5") . "[���հ�ư]</a>\n"; 760 761 $out .= make_self_link("$up", "4") . "[ͽ��]</a>\n"; 762 $out .= make_self_link("$ut", "6") . "[TODO]</a>\n"; 763 $out .= make_self_link("?E", "8") . "[����]</a>\n"; #(5) 764 $out .= make_self_link("?${day}SALL") . "[����]</a>\n" unless ($imode); 765 #iMODE�Ǥϡ�������ɽ���Ϥ��ʤ�(ɽ���Ǥ��ʤ�����) 766 $out .= make_self_link("http://yar-3.net/mi/","0") . "[�ߤ�]</a>\n"; 767 768 $out .= "<br><a href=$isystem>i system</a> ver $ver<br>\n"; 769} 770 771# ͽ���ɽ������ 772sub planprint { 773 my %abc = (A => 10.5, B => 20.5, C => 31.5, 774 a => 10.5, b => 20.5, c => 31.5); 775 my %abcString = (A => '��', B => '��', C => '��', 776 a => '��', b => '��', c => '��'); 777 my %dowNum = ('sun', 0, 'mon', 1, 'tue', 2, 'wed', 3, 778 'thu', 4, 'fri', 5, 'sat', 6, 779 'su', 0, 'mo', 1, 'tu', 2, 'we', 3, 780 'th', 4, 'fr', 5, 'sa', 6, 781 '��', 0, '��', 1, '��', 2, '��', 3, 782 '��', 4, '��', 5, '��', 6); 783 my @pp, @p, @repeats; 784 local (*PLAN); 785 786 $out .= "[ͽ��]<br>\n"; 787 788 # �����֤�ͽ����ɤ߹��� 789 my $planf = $diarydir . "repeat"; 790 open(PLAN, $planf); 791 while(<PLAN>) { 792 $_ = convert2euc($_) if ($hnfconv and $nkf); 793 s/\r$//; 794 chomp; 795 next if /^\s*#/; # �����ȹ� 796 next if /^\s*$/; # ���Ԥ��ߤ������ 797 if (/^([^\[\s]+)(?:\[([^\]]+)\])?\s+(.*)$/) { 798 my @range = parse_range($2); 799 push(@repeats, [$1, $3, @range]); # [dp dsec begin end] 800 } elsif (/^\[([^\]]+)\]\s+(.*)$/) { 801 my @range = parse_range($1); 802 push(@repeats, ['', $2, @range]); # ['' dsec begin end] �ϰ��դ�����ͽ�� 803 } 804 } 805 close PLAN; 806 807 # ��������Σ������ͽ������ 808 my ($ly, $lm) = ($year, $mon); 809 for (1 .. 2) { 810 my $me = &month_days($ly, $lm); 811 812 # �Ʒ��ͽ�� 813 # ͽ��ե�����̾���� /home/hoge/diary/1999/y199902 814 $planf = "$diarydir$ly/y$ly$lm"; 815 open(PLAN, $planf); 816 while(<PLAN>) { 817 $_ = convert2euc($_) if ($hnfconv and $nkf); 818 s/\r$//; 819 chomp; 820 my $d, $dd, $m; 821 if (/^((\d+)\/)?(\d+)\s/) { 822 # 18 �ǡ��� ���뤤�� 2/18 �뺧�� �ʤ� ari-3 823 # ����˳�Ǽ��������� ["19991231" "1999/12/31 �ۤ�"] 824 $m = $2; 825 $d = $3; 826 #$d = "0" . $d if ($d < 10); 827 $d = substr("0" . $d, -2); 828 $dd = $d; 829 } elsif (/^((\d+)\/)?([abcABC])\s/) { 830 # A �ǡ��� ���뤤�� 2/A �뺧�� �ʤ� 831 # ����˳�Ǽ��������� ["19991210.5" "1999/12/A �ۤ�"] 832 $m = $2; 833 $d = $abc{$3}; 834 $dd = $3; 835 } 836 $m = $lm if ($m == 0); 837 if ($d && $m == $lm) { 838 push(@pp, ["$ly$lm$d", "$ly/$lm/$dd $'"]); 839 } 840 } 841 close PLAN; 842 843 # �����֤�ͽ�� 844 foreach my $rplan (@repeats) { 845 my ($dp, $desc, $brng, $erng) = @$rplan; 846 my $m = $lm; 847 my $dd = ''; 848 my $d; 849 if (@$rplan == 4 && $dp ne '' 850 && ((sprintf("%04d%02d%02d", $ly, $lm, $me) < $brng) 851 || (sprintf("%04d%02d%02d", $ly, $lm, 1) > $erng))) { 852 next; 853 } 854 if ($dp =~ m!^(\d+)/(\d+)$!) { # ��ǯ������� 855 $m = $1; 856 $d = $2; 857 } elsif ($dp =~ m!^(\d+)/(-?\d+)([^\d].*)$!) { # ��ǯ�������n���� 858 my $dow = $3; 859 $dow =~ tr/A-Z/a-z/; 860 if ($dowNum{$dow} eq '') { 861 $d = 0; 862 $dd = $dp . '?' 863 } else { 864 $m = $1; 865 $d = &get_nth_dow($ly, $lm, $2, $dowNum{$dow}); 866 } 867 } elsif ($dp =~ m!^(\d+)/([abcABC])$!) { # ��ǯ������ 868 $m = $1; 869 $d = $abc{$2}; 870 $dd = $2; 871 } elsif ($dp=~ /^\d+$/) { # �������� 872 $d = $dp; 873 } elsif ($dp =~ /^[Ee]?(-\d+)?$/ && $dp ne '') { # ���E(����) ͽ�� 874 $d = $1; 875 $d = $me + $1; 876 } elsif ($dp =~ /^(-?\d+)([^\d].+)$/) { # �����n���� 877 my $dow = $2; 878 $dow =~ tr/A-Z/a-z/; 879 if ($dowNum{$dow} eq '') { 880 $d = 0; 881 $dd = $dp . '?' 882 } else { 883 $d = &get_nth_dow($ly, $lm, $1, $dowNum{$dow}); 884 $d = 0 if ($d < 0 || $d > $me); 885 } 886 } elsif ($dp =~ /^[abcABC]$/) { # ������� 887 $d = $abc{$dp}; 888 $dd = $2; 889 } else { 890 my $dow = $dp; 891 $dow =~ tr/A-Z/a-z/; 892 if ($dowNum{$dow} ne '') { # �轵�������� 893 # ʣ��push����ɬ�פ�����ΤǼ����ǽ��� 894 for (my $i = 1; $i <= 5; $i++) { 895 $d = &get_nth_dow($ly, $lm, $i, $dowNum{$dp}); 896 my $s = sprintf("%04d%02d%02d", $ly, $lm, $d); 897 if ($d >= 1 && $d <= $me 898 && (@$rplan == 2 || ($s >= $brng && $s <= $erng))) { 899 $d = sprintf("%02d", $d); 900 push(@pp, [$s, "$ly/$lm/$d $desc"]); 901 } 902 } 903 # ���Ȥ��Τ���:-) 904 $d = 0; 905 } elsif (@$rplan == 4 && $dp eq '') { # �ϰ��դ����� 906 for (my $i = 1; $i <= $me; $i++) { 907 my $s = sprintf("%04d%02d%02d", $ly, $lm, $i); 908 if ($s >= $brng && $s <= $erng) { 909 $d = sprintf("%02d", $i); 910 push(@pp, [$s, "$ly/$lm/$d $desc"]); 911 } 912 } 913 # ���Ȥ��Τ���:-) 914 $d = 0; 915 } else { # otherwise 916 $d = 32; 917 $dd = $dp . '?' 918 } 919 } 920 $m = sprintf("%02d", $m) if ($m ne ''); 921 if ($d && $m == $lm) { 922 my $s = sprintf("%04d%02d%02d", $ly, $m, $d); 923 if ((@$rplan == 2) || ($s >= $brng) && ($s <= $erng)) { 924 #$d = "0$d" if ($d < 10); 925 $d = substr("0". $d, -2); 926 $dd = $d if ($dd eq ''); 927 push(@pp, [$s, "$ly/$m/$dd $desc"]); 928 } 929 } 930 } 931 932 ($ly, $lm) = &next_month($ly, $lm); 933 } 934 935#print "** pp start **\n", join("\n", map("$_->[0], $_->[1]", @pp)), "\n** pp end **\n"; 936 937 #����κ����ʹߤΤ�Τ������Ф��ƥ����� 938 my $today = "$year$mon$mday"; 939 @p = sort { $a->[0] <=> $b->[0] || 940 $a->[1] cmp $b->[1] } grep($_->[0] >= $today, @pp); 941 #@p = sort { $a->[0] <=> $b->[0] } grep($_->[0] >= $today, @pp); 942 if (!$maxplan) { 943 $maxplan = 10; # ̤������κ������10�� 944 } 945 if ($#p < $maxplan) { # ���ʤ��Ȥ� 946 $maxplan = $#p + 1; 947 } 948 949 for ($i = 0 ; $i < $maxplan ; $i++){ 950 if ($p[$i]->[1] =~ /^(\d\d\d\d\/\d\d\/\d\d)\s/) { 951 $d = $1; 952 $d =~ /\d\d\d\d\/(\d\d)\/(\d\d)/; 953 $mm = $1; $dd = $2; 954 $d = "$mm/$dd(" . &getdayoftheweek($d) . ")"; 955 } elsif ($p[$i]->[1] =~ /^\d\d\d\d\/(\d\d\/)([abcABC])\s/) { 956 $d = $1 . $abcString{$2}; 957 $d = "$d "; 958 } elsif ($p[$i]->[1] =~ /^\d\d\d\d\/(\d\d)\s/) { 959 $d = "$1 "; 960 } else { 961 $d = "??"; 962 } 963 $a = $'; 964#print $1; 965 $out .= "��$d $a<br>\n"; # ������plan�θ����ܤ��ѹ���ǽ 966 } 967 $out .= "<hr>\n"; 968 #LINKɽ�� 969 &ichiran; 970} 971 972#���������! 973sub getdayoftheweek { 974 my ($y, $m, $d) = ($_[0] =~ /(\d\d\d\d)\/(\d\d)\/(\d\d)/); 975# return "$m/$d(" . $week[&get_dow($y,$m,$d)] . ")"; 976 return $week[&get_dow($y,$m,$d)]; 977} 978 979#���������(0:��, 1:��, ..., 6:��) 980sub get_dow { 981 # hns��Date.pm�ͤ˽����ޤ��� 982 # �����timelocal()��Ȥ鷺�ˤ��ߤޤ��衣 983 my ($y, $m, $d) = @_; 984 $y = $y + 399 if ($m < 3); 985 ($y + int($y/4) - int($y/100) + int($y/400) + 986 (0, 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4)[$m] + $d 987 ) % 7; 988} 989 990#����ǯ�����$n$dow����($n<0�ʤ�������������, $n=-1�ʤ�ǽ�) 991sub get_nth_dow { 992 my ($y, $m, $n, $dow) = @_; 993#print "get_nth_dow: y=$y, m=$m, n=$n, dow=$dow\n"; 994 my $days = &month_days($y, $m); 995 my $d; 996 if ($n > 0) { 997 my $first = &get_dow($y, $m, 1); 998 if ($dow >= $first) { 999 $d = ($n-1)*7 + $dow - $first + 1; 1000 } else { 1001 $d = $n*7 + $dow - $first + 1; 1002 } 1003 } elsif($n < 0) { 1004 my $last = &get_dow($y, $m, $days); 1005 if ($dow <= $last) { 1006 $d = $days - ($last - $dow) + ($n+1)*7; 1007 } else { 1008 $d = $days - ($last - $dow) + $n*7; 1009 } 1010 } 1011 if ($d < 1 || $d > $days) { 1012 return 0; 1013 } 1014 return $d; 1015} 1016 1017# repeat���ϰϻ����parse���� 1018# �����: () : �ϰϻ���ʤ� 1019# ('yyyymmdd', 'yyyymmdd') : �ϰϤκǽ�ȺǸ���� 1020sub parse_range($) { 1021 my ($spec) = @_; 1022 my @ba = (0, 1, 1); 1023 my @ea = (9999, 12, 31); 1024 return () if ($spec eq ''); 1025 if ($spec =~ /^([^-]*)-(.*)$/) { 1026 my ($b, $e) = ($1, $2); 1027 if ($b eq '') { 1028# @ba = (0, 1, 1); 1029 } elsif ($b =~ /^\d{4}$/) { 1030 @ba = ($b, 1, 1); 1031 } elsif ($b =~ m!^(\d{4})/(\d+)$!) { 1032 @ba = ($1, $2, 1); 1033 } elsif ($b =~ m!^(\d{4})/(\d+)/(\d+)$!) { 1034 @ba = ($1, $2, $3); 1035 } 1036 if ($e eq '') { 1037# @ea = (9999, 12, 31); 1038 } elsif ($e =~ /^\d{4}$/) { 1039 @ea = ($e, 12, 31); 1040 } elsif ($e =~ m!^(\d{4})/(\d+)$!) { 1041# my $dmonth = &month_days($1, $2); 1042# @ea = ($1, $2, $dmonth); 1043 @ea = ($1, $2, 31); 1044 } elsif ($e =~ m!^(\d{4})/(\d+)/(\d+)$!) { 1045 @ea = ($1, $2, $3); 1046 } 1047 } else { 1048 # illegal format 1049 } 1050 return (sprintf("%04d%02d%02d", @ba), sprintf("%04d%02d%02d", @ea)); 1051} 1052 1053# TODO��ɽ������ 1054sub todoprint { 1055 my (@num); 1056 $out .= "[TODO]<br>\n"; 1057 open(TODO, $todof); 1058 while(<TODO>) { 1059 $_ = convert2euc($_) if ($hnfconv and $nkf); 1060 if (/^(\d+)\s/) { # 99 ������³���� �ʤ� 1061 push(@num, [$1, $']); # ̵̾����[����, ����]������� 1062 } 1063 } 1064 close TODO; 1065 1066 # �������ˤ��ƾ���ǥ����� 1067 @num = sort { $b->[0] <=> $a->[0] } @num; 1068 1069 if (!$maxtodo) { 1070 $maxtodo = 10; # ̤������κ������10�� 1071 } 1072 if ($#num < $maxtodo) { # ���ʤ��Ȥ� 1073 $maxtodo = $#num + 1; 1074 } 1075 1076 for ($i = 0 ; $i < $maxtodo ; $i++){ 1077 $out .= "#$num[$i]->[0] $num[$i]->[1]<br>\n"; #������TODO�θ����ܤ��ѹ���ǽ 1078 } 1079 $out .= "<hr>\n"; 1080 #LINKɽ�� 1081 &ichiran; 1082} 1083 1084#[��][��]�äƤ�Ĥ� 1085sub section_jump { 1086 if ($section > 1) { # ���Υ��������¸�� 1087 $sec = $section - 1; 1088 $u = "?$day" . "S$sec"; 1089 $out .= make_self_link("$u", "1") . "[��]</a>"; 1090 } 1091 if ($newcount > $section) { # ��Υ��������¸�� 1092 $sec = $section + 1; 1093 $u = "?$day" . "S$sec"; 1094 $out .= make_self_link("$u", "3") . "[��]</a>"; 1095 } 1096 #���� 1097 &ichiran; 1098} 1099 1100#���հ�ư 1101sub print_jump_form { 1102if (!$use_onccnv) { 1103 $out .= "content-type: text/html\n\n"; 1104} 1105$out .= "<html><head>\n"; 1106$out .= "<!-- �� -->\n" if (!$nkf); 1107$out .= "</head>\n"; 1108$out .= "<title>i system jump</title>\n"; 1109$out .= "<body>\n"; 1110$out .= "<b>i system jump</b><p>\n"; 1111$out .= "Ǥ�դ����դ˥����פ��ޤ���<br>\n"; 1112$out .= "3.�������ܥ�����Ʋ�������<br>\n"; 1113 1114 if ($baseuri && $ezweb) { #ezweb�к� ari-3 1115 $out .= qq(<form method="GET" action="$baseuri">\n); 1116 } else { 1117 $out .= qq(<form method="GET" action="./">\n); 1118 } 1119 1120 $out .= qq(<input type="text" name="d" value="$today" size=10 maxsize="8" istyle="4">\n); # istyle is 502 tag 1121 $out .= qq(<input type="submit" name="g" value="" accesskey="3">\n); 1122 $out .= "</form>\n"; 1123 1124$out .= "��19990801�פΤ褦��8��ο����ǻ��ꤷ�Ʋ�������\n"; 1125$out .= "<br>\n"; 1126$out .= "</body></html>\n"; 1127 1128 1129$out = &conv_html2onc($out, $baseuri, $baseuri, $ref_max, $flag_maru) if $use_onccnv; 1130$out = &convert2sjis($out) if $nkf; #NKF,jcode.pl���ѻ���sjis�Ѵ� 1131print $out; 1132} 1133 1134#�����ե������ɽ�� 1135sub print_search_form { 1136if (!$use_onccnv) { 1137 $out .= "content-type: text/html\n\n"; 1138} 1139$out .= "<html><head>\n"; 1140$out .= "<!-- �� -->\n" if (!$nkf); 1141$out .= "</head>\n"; 1142$out .= "<title>i search system</title>\n"; 1143$out .= "<body>\n"; 1144$out .= "<b>i search system</b><br>\n"; 1145$out .= "Ǥ�դ�ñ������ޤ���<br>\n"; 1146 1147 if ($baseuri) { 1148 $out .= qq(<form method="GET" action="$baseuri">\n); 1149 } else { 1150 $out .= qq(<form method="GET" action="./">\n); 1151 } 1152 1153 $out .= qq(<input type="text" name="word" size=16>\n); 1154 $out .= qq(<input type="submit" name="g" value="" accesskey="3">\n); 1155 $out .= "</form>\n"; 1156 1157$out .= "ñ������Ϥ���\n"; 1158$out .= "3.�������ܥ�����Ʋ�������<br>\n"; 1159 1160$out .= "<br>\n"; 1161$out .= "����ɽ����Ȥ��ޤ�\n"; 1162$out .= "</body></html>\n"; 1163 1164$out = &conv_html2onc($out, $baseuri, $baseuri, $ref_max, $flag_maru) if $use_onccnv; 1165$out = &convert2sjis($out) if $nkf; #NKF,jcode.pl���ѻ���sjis�Ѵ� 1166print $out; 1167} 1168 1169# 1170# log���� 1171# 1172sub logging { 1173# logging subroutine is based on 1174# tohoho wwwwcounter 1175# http://wakusei.cplaza.ne.jp/twn/wwwcount.htm 1176# thanks 2 tohoho 1177 1178# server setup 1179# 1180# $ mkdir lock 1181# $ touch isystem.cnt 1182# $ touch isystem.dat 1183# $ touch isystem.acc 1184# $ chmod 777 lock 1185# $ chmod 666 isystem.* 1186 1187# from 0.6.8 1188my $logdir, $count_name, $file_count, $file_date, $file_access, $file_lock; 1189 1190$logdir = $diarydir . "log/"; #hns�ξ��Ϥ����OK�ΤϤ� 1191 1192$count_name = "isystem"; 1193$file_count = $logdir . "$count_name" . ".cnt"; 1194$file_date = $logdir . "$count_name" . ".dat"; 1195$file_access = $logdir . "$count_name" . ".acc"; 1196# tnx 2 chihalin-3 1197$file_lock = $logdir . "lock/isystem.loc"; 1198 1199 1200# 1201# �Ķ��ѿ�TZ�����ܻ��֤����ꤹ�� 1202# 1203$ENV{'TZ'} = "JST-9"; 1204 1205# 1206# ��å��������� 1207# 1208if ($do_file_lock) { 1209 foreach $i ( 1, 2, 3, 4, 5, 6 ) { 1210 if (mkdir("$file_lock", 0755)) { 1211 # ��å����������ν����ء� 1212 last; 1213 } elsif ($i == 1) { 1214 # 10ʬ�ʾ�Ť���å��ե�����Ϻ�����롣 1215 ($mtime) = (stat($file_lock))[9]; 1216 if ($mtime < time() - 600) { 1217 rmdir($file_lock); 1218 } 1219 } elsif ($i < 6) { 1220 # ��å����ԡ�1���Ԥäƺƥȥ饤�� 1221 sleep(1); 1222 } else { 1223 # ���٤�äƤ��å����ԡ��������롣 1224 exit(1); 1225 } 1226 } 1227} 1228 1229# 1230# ����ǽ�λ���Ƥ��å��ե����뤬�Ĥ�ʤ��褦�ˤ��� 1231# 1232$SIG{'PIPE'} = $SIG{'INT'} = $SIG{'HUP'} = $SIG{'QUIT'} = $SIG{'TERM'} = "sigexit"; 1233 1234# 1235# �������ե����뤫�饫�����ͤ��ɤ߽Ф��� 1236# 1237if (open(IN, "< $file_count")) { 1238 $count = <IN>; 1239 close(IN); 1240} else { 1241 $count = -1; 1242} 1243 1244#print "count=$count\n"; 1245# 1246# ���եե����뤫��ǽ������������դ��ɤ߽Ф��� 1247# 1248if (open(IN, "< $file_date")) { 1249 $date_log = <IN>; 1250 close(IN); 1251} else { 1252 $date_log = ""; 1253} 1254 1255# 1256# ���������դ����� 1257# 1258($sec, $min, $hour, $mday, $mon, $year) = localtime(time()); 1259$date_now = sprintf("%04d/%02d/%02d", 1900 + $year, $mon + 1, $mday); 1260$time_now = sprintf("%02d:%02d:%02d", $hour, $min, $sec); 1261#print "$time_now\n"; 1262 1263# 1264# ���դ��ۤʤ롢�Ĥޤꡢ�������ƤΥ��������Ǥ���� 1265# 1266if ($date_log ne $date_now) { 1267#print "mail log\n"; 1268 1269 # 1270 # ����������������������� 1271 # 1272 if ($mailto ne "") { 1273 $tmp_count = 0; 1274 open(IN, "< $file_access"); 1275 while (<IN>) { 1276 if (/^COUNT/) { 1277 $tmp_count++; 1278 } 1279 } 1280 close(IN); 1281 $msg = ""; 1282 $msg .= "To: $mailto\n"; 1283 $msg .= "From: $count_name\n"; 1284 $msg .= "Subject: ACCESS $date_log $tmp_count\n"; 1285 $msg .= "\n"; 1286 if ($account_detail) { 1287 open(IN, "< $file_access"); 1288 while (<IN>) { 1289 $msg .= $_; 1290 } 1291 close(IN); 1292 } else { 1293 $msg .= "Access = $tmp_count\n"; 1294 } 1295 open(OUT, "| $sendmail $mailto"); 1296 print OUT $msg; 1297 close(OUT); 1298 } 1299 1300 # 1301 # �������������������� 1302 # 1303 open(OUT, "> $file_access"); 1304 close(OUT); 1305 1306 # 1307 # ���������դ����ե��ե�����˽Ф� 1308 # 1309 open(OUT, "> $file_date"); 1310 print(OUT "$date_now"); 1311 close(OUT); 1312} 1313# 1314# ������ȥ��å��� 1315# 1316#print "count up mae\n"; 1317if ($count >= 0) { 1318#print "count up\n"; 1319 1320 # 1321 # ������ҤȤĥ�����Ȥ��� 1322 # 1323 $count++; 1324 1325 # 1326 # %7E �� \~ �ʤɤ�������� 1327 # 1328 $referer = $ENV{'HTTP_REFERER'}; 1329 $referer =~ s/%([0-9a-fA-F][0-9a-fA-F])/pack("C", hex($1))/eg; 1330 $reffile =~ s/\\//g; 1331 1332 # 1333 # ������������Ͽ���� 1334 # 1335 open(OUT, ">> $file_access"); 1336 print(OUT "COUNT = [ $count ]\n"); 1337 print(OUT "TIME = [ $time_now ]\n"); 1338 #print(OUT "ADDR = [ $ENV{'REMOTE_ADDR'} ]\n"); 1339 #if ($ENV{'REMOTE_HOST'} ne $ENV{'REMOTE_ADDR'}) { 1340 print(OUT "HOST = [ $ENV{'REMOTE_HOST'} ]\n"); 1341 #} 1342 print(OUT "AGENT = [ $ENV{'HTTP_USER_AGENT'} ]\n"); 1343 # print(OUT "REFER = [ $referer ]\n"); 1344 if ($reffile && (!$my_url || ($reffile !~ /$my_url/))) { 1345 print(OUT "FROM = [ $reffile ]\n"); 1346 } 1347 print(OUT "\n"); 1348 close(OUT); 1349 1350 # 1351 # �������ե�����˽��᤹ 1352 # 1353 if (open(OUT, "> $file_count")) { 1354 print(OUT "$count"); 1355 close(OUT); 1356 } 1357} 1358# 1359# ��å����������� 1360# 1361if ($do_file_lock) { 1362 rmdir($file_lock); 1363} 1364 1365 1366 1367} 1368 1369# log�� lockfile����롼���� 1370sub sigexit { rmdir($file_lock); exit(0); } 1371 1372 1373#�������ޤ��� 1374sub search_word { # ���� 1375 my ($word) = @_; #������ 1376 my $hitcount = 0; #hit�� 1377 my $bgncount = $FORM{b}; # �����ɽ�����Ϸ�� 1378 my $totalhit = $FORM{h}; # ��������Ƚ��������Hit�� 1379 my $bgnday = $FORM{t}; # �������κǽ��� 1380 my $bgnhit = $FORM{th}; # �������κǽ����ޤǤΥҥåȿ� 1381 1382 if (!$use_onccnv) { 1383 $out .= "content-type: text/html\n\n"; #apache�к�? ari-3 1384 } 1385 $out .= "<html><head>\n"; 1386 $out .= "<!-- �� -->\n" if (!$nkf); 1387 $out .= "</head>\n"; 1388 $out .= "<title>result</title>\n"; 1389 $out .= "<body>\n"; 1390 $out .= "<b>�������</b><br>\n"; 1391 1392 $word = convert2euc($word) if ($nkf); # EUC���Ѵ����� 1393 #���졩jcode.pl��ȤäƤʤ��Ȥ��Ϥɤ���������???? 1394 1395# print $word; 1396 1397 # �ե������pick up masato-3 1398 my @a; 1399 for my $y ($year-1..$year) { # ��ǯ�ȵ�ǯ���������о� 1400 opendir DIR, "$diarydir$y" || next; 1401 push(@a, (sort grep s/^(d\d+\.hnf)$/$diarydir$y\/$1/, readdir DIR)); 1402 closedir DIR; 1403 } 1404 @a = sort { $b cmp $a } @a; # �¤��ؤ�(�߽�) 1405 #����ǡ��ǿ���hnf�������¤�Ǥ���Ϥ��� 1406 1407 if (!$maxday) { 1408 $maxday = 60; #�ǥե���ȤǺ���60���� 1409 } 1410 if ($#a < $maxday) { #���ʤ��Ȥ� 1411 $maxday = $#a + 1; 1412 } 1413 @a = @a[0 .. $maxday-1]; #��������ʬ�����ˤ��� 1414 if (!$maxresult) { #�ǥե���Ȥ�10�鷺��ɽ�� 1415 $maxresult = 10; 1416 } 1417 1418 if ($bgnday ne '') { # �������˴��˸��������������Ф� 1419 my $f; 1420 while ($f = shift(@a)) { 1421 if (($f =~ /d(\d{8})\.hnf/) && ($1 le $bgnday)) { 1422 unshift(@a, $f); 1423 last; 1424 } 1425 } 1426 $hitcount = $bgnhit; # �ҥåȿ���Ĵ��(^^) 1427 } 1428 1429 my $day; 1430 my $day2; 1431 my $lastdday; 1432 my $lastdhit; 1433 SEARCH: foreach my $f (@a) { 1434 $ok = 0; #�桼���ѿ������ʤ��褦�˽���� 1435 $newcount = 0; 1436 $subcount = 0; 1437 if ($f =~ /d(\d{8})\.hnf/) { 1438 $day = $day2 = $1; 1439 } else { 1440 next; 1441 } 1442 $day2 =~ s/(\d\d\d\d)(\d\d)(\d\d)/$1\/$2\/$3/; 1443 open(IN, $f); # �ǿ��Υե����뤫���˳��� 1444 while(<IN>) { 1445 $_ = convert2euc($_) if ($hnfconv and $nkf); 1446 s/\r$//; 1447 chomp; # ���Խ��� 1448 $o = &parse($_); # ���� 1449 next if ($o !~ /$word/i); #���פ��ʤ��ΤǼ��ι� 1450 #$out .= $o; # for debug 1451 $u = "?$day" . "S" . "$newcount"; 1452 next if ($u eq $lastu); #��ۤɤ�url(NEW,SUB)��Ʊ���ʤΤǥȥХ� 1453 1454 if ($bgncount <= $hitcount && $hitcount < $bgncount+$maxresult) { 1455 #$out .= "��<a href=$u>$day2:$newtopic:$subtopic</a> \n"; 1456 $out .= "��" . make_self_link("$u") . "$day2:$newcount:$subcount</a> \n"; 1457 s/($word)/<b>$1<\/b>/ig; 1458 s/^(LNEW|LSUB|LSTRIKE|LSTRONG|LINK|URL|RLNEW|RLSUB)\s\S+//; 1459 # LNEW, LSUB, LSTRIKE, LSTRONG �ʤ�uri�������ޤ��� 1460 s/^[A-Z]+\s//; # hnf���ޥ�ɤ����� 1461 s/~$//; # ���Ԥ�'~'����� 1462 $out .= "$_<br>\n"; 1463 $lastvc = $hitcount; 1464 if ($lastdday ne $day) { 1465 $lastdhit = $hitcount; 1466 } 1467 $lastdday = $day; 1468 } 1469 $lastu = $u; 1470 $lastc = $hitcount; 1471 $hitcount++; 1472 if ($totalhit && ($hitcount >= $maxresult+$bgncount)) { 1473 # ���٤�ɽ���Ǥ�������ã�����Τ���ҥåȿ��� 1474 # ��������������ҥåȿ����ִ����ƥ�� 1475 $hitcount = $totalhit; 1476 last SEARCH; 1477 } 1478 } 1479 close(IN); 1480 } 1481 1482 $out .= sprintf("<hr>$hitcount����(%d��%d)<br>\n", $bgncount+1, $lastvc+1); 1483 1484 # ����$maxresult�� 1485 if ($bgncount >= $maxresult) { 1486 $u = sprintf("?word=%s&b=%d&h=%d", $origword, $bgncount-$maxresult, $hitcount); 1487 $out .= make_self_link("$u", "1") . "[��$maxresult��]</a>\n"; 1488 } 1489 # ���� 1490 &ichiran; 1491 # ����$maxresult�� 1492 if ($bgncount < $hitcount - $maxresult) { 1493# $u = sprintf("?word=%s&b=%d&h=%d", $origword, $bgncount+$maxresult, $hitcount); 1494 $u = sprintf("?word=%s&b=%d&h=%d&t=%s&th=%d", $origword, $bgncount+$maxresult, $hitcount, $lastdday, $lastdhit); 1495 # URI�Ȥ����Ϥ�word��URL encode����Ƥ��ʤ��ƤϤʤ�ʤ�! 1496 $out .= make_self_link("$u", "3") . "[��$maxresult��]</a>\n"; 1497 } 1498 $out .= "</body></html>\n"; 1499 1500 $out = &conv_html2onc($out, $baseuri, $baseuri, $ref_max, $flag_maru) if $use_onccnv; 1501 $out = &convert2sjis($out) if $nkf; #NKF,jcode.pl���ѻ���sjis�Ѵ� 1502 print $out; 1503 1504} 1505 1506#[����]��ɽ������ 1507sub ichiran { 1508 $u = "?$day"; 1509 $out .= make_self_link("$u", "2") . "[����]</a>\n"; 1510} 1511 1512# HTML��ǥ��������פ���ʸ�����Ѵ� 1513sub html_escape { 1514 my ($t) = @_; 1515 my %cv = ('&' => '&', '"' => '"', 1516 '<' => '<', '>' => '>'); 1517 $t =~ s/([&<>"])/$cv{$1}||$1/ge; 1518 $t; 1519} 1520 1521# HTML��ǥ��������פ���ʸ��������ʸ�����Ѵ� 1522sub html_escape_zen { 1523 my ($t) = @_; 1524 my %zcv = ('&' => '��', '"' => '��', 1525 '<' => '��', '>' => '��'); 1526 $t =~ s/([&<>"])/$zcv{$1}||$1/ge; 1527 $t; 1528} 1529 1530# ���������ɤ�EUC���Ѵ� 1531sub convert2euc { 1532 my ($tmp) = @_; 1533 if ($nkf == 1) { 1534 $tmp = nkf('-e', $tmp); 1535 } elsif ($nkf == 2) { 1536 jcode::convert(\$tmp, "euc"); 1537 } 1538 $tmp; 1539} 1540 1541# ���������ɤ�Shift JIS���Ѵ� 1542sub convert2sjis { 1543 my ($tmp) = @_; 1544 if ($nkf == 1) { 1545 $tmp = nkf('-s', $tmp); 1546 } elsif ($nkf == 2) { 1547 jcode::convert(\$tmp, "sjis"); 1548 } 1549 $tmp; 1550} 1551 1552# ����ǯ������� 1553sub month_days { 1554 # hns��Date.pm�ͤ˽�ľ�� 1555 my ($y, $m) = @_; 1556 my @days = (0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); 1557 if ($m == 2 && (($y%4==0 && $y%100) || ($y==400))) { 1558 return 29; 1559 } else { 1560 return $days[$m]; 1561 } 1562} 1563 1564# ��� 1565sub next_month { 1566 my ($y, $m) = @_; 1567 $m++; 1568 if ($m > 12) { 1569 $m = 1; 1570 $y++; 1571 } 1572 $m = sprintf("%02d", $m); 1573 return ($y, $m); 1574} 1575 1576# hnf�ե�����Υե�ѥ�̾���� 1577sub make_hnf_fname { 1578 my ($f) = @_; 1579 my ($day, $year); 1580 if ($f =~ /d((\d{4})\d\d\d\d)\.hnf/) { # ������ d19991231.hnf �Ȥ� 1581 $day = $1; 1582 $year = $2; 1583 } elsif ($f =~ /^((\d{4})\d\d\d\d)$/) { # ������ 19991231 �Ȥ� 1584 $day = $1; 1585 $year = $2; 1586 } 1587 return "$diarydir$year/d$day.hnf"; 1588} 1589 1590sub make_self_link { 1591 my ($u, $accesskey) = @_; 1592 # $accesskey = 0 ���б� (00/7/5 yar-3) 1593 my @IGraph = ("戀", #0,1,2,3,..�Ȥʤ��Ǥ��� 1594 "驪", "麗", "黎", "力", 1595 "曆", "歷", "轢", "年", "憐"); 1596 if ($imode) { 1597 if ($accesskey ne "") { 1598 qq(<a href="$u" accesskey="$accesskey">$IGraph[$accesskey]); 1599 } else { 1600 qq(<a href="$u">$imode_graphic); 1601 } 1602 } elsif ($ezweb && $baseuri) { 1603 qq(<a href="$baseuri$u">); 1604 } else { 1605 qq(<a href="$u">); 1606 } 1607} 1608sub make_link { 1609 my ($u) = @_; 1610# $imodegw ��������Ƥ����ȡ������ͳ�ǥ�����������褦�ˤʤ롣 1611 1612 qq(<a href="$imodegw$u">); 1613} 1614 1615# hnf�ե������OK�����뤫�ɤ��������å� 1616sub has_ok { 1617 my ($file) = @_; 1618 local (*F); 1619 open (F, $file); 1620 while (<F>) { 1621 s/\r$//; 1622 chomp; 1623 if (/^OK$/ ) { 1624 close F; 1625 return 1; 1626 } 1627 } 1628 close F; 1629 return 0; 1630} 1631 1632 1633#<body>������������ 1634sub make_body { 1635 $out .= "<body>\n"; 1636 #print "day=$day\n"; 1637 1638 $imark = ""; 1639 if ($imode) { #iMODE���Ӥǥ������������iMODE mark���Ǥ� 1640 $imark = "略"; #iMODE mark 1641 } #�ۤ��δĶ���iMODE��ʸ����ɽ�������ʸ���������ޤ� 1642 if (!$section) { # title�⡼�ɤΤȤ����������ȥ��ɽ�� 1643 if ($head eq ""){ # h1�����Ǥ������� 1644 $out .= "<h1>$imark$title</h1>\n"; 1645 } else { 1646 $out .= "<h1>$imark$head</h1>\n"; 1647 } 1648 $out .= "<hr>\n"; 1649 } 1650 1651 $out .= "$head\n" if ($pdx); #PmailDX�λ���$head��ɽ�� 1652 $out .= "$header\n"; #ʸƬ 1653 1654 if ($section eq "ALL") { #������(C)tokumi-3 �ΤȤ� 1655 $out .= &fileprint($confdir . $titleheadfile) if ($titleheadfile); 1656 } elsif ($section) { #���������ɽ���ΤȤ��� 1657 $out .= &fileprint($confdir . $headfile) if ($headfile); 1658 } else { #�����ȥ�⡼�� 1659 $out .= &fileprint($confdir . $titleheadfile) if ($titleheadfile); 1660 } 1661 1662 &make_diary_body; #�������Τ��������� 1663 if ($piloweb and $piloweb_2days) { #piloweb�ǤΥ��������Ǥ��ģ���ɽ�� 1664 $hnf = make_hnf_fname($prevday); #���������ե�����ˤ��� 1665 $day = $prevday; 1666 &make_diary_body; 1667 } 1668 1669 if ($footfile ne ""){ 1670 $path = $confdir . $footfile; 1671 $out .= &fileprint($path); #ʸ���β��� 1672 } 1673 1674 if ($address ne "") { 1675 $out .= "<br>" if $use_onccnv; 1676 $out .= "<address><a href=mailto:$address>$address</a></address>\n"; #�ᥤ�륢�ɥ쥹 1677 } 1678 $out .= "</body>\n"; 1679} 1680 1681 1682sub make_diary_body { 1683 my $tmp, $i, @sect, $o; 1684 @sect = (); 1685 $newcount = 0; 1686 1687 &dayprint; #���դ�ɽ�� 1688 1689 open(IN, $hnf); #����hnf�� 1690 $ok = 0; #�桼���ѿ���ɽ�����ʤ��褦�� 1691 1692 if ($section) { #������titleɽ���ǤϤʤ� 1693 while($tmp = <IN>) { 1694 $tmp = convert2euc($tmp) if ($hnfconv and $nkf); #hnf��EUC�ʳ��ǽ�Ƥ���� 1695 $tmp =~ s/\r$//; 1696 chomp($tmp); #���Ԥ���Ȥ� 1697 $o = &parse($tmp); #��᤹�� 1698 $sect[$newcount] .= "$o\n" unless ($grp); 1699 } 1700 if ($section eq "ALL") { # �����������ɽ�� 1701 if ($reverse) { #�ս� 1702 for($i=$newcount; $i >=0; $i--) { 1703 $out .= "$sect[$i]\n"; 1704 } 1705 } else { # �̾� 1706 for($i=0; $i <=$newcount; $i++) { 1707 $out .= "$sect[$i]\n"; 1708 } 1709 } 1710 } else { #���ꥻ�������Τ� 1711 $out .= "$sect[$section]\n"; 1712 } 1713 # ɽ������� 1714 $out .= "<hr>\n"; #���ڤ� 1715 §ion_jump() if ($section ne "ALL"); #����ɽ���λ��ʳ���jump�������ɽ�� 1716 } else { # ������titleɽ���ʤ� 1717 if ($plan) { 1718 &planprint(); #ͽ�� 1719 } elsif ($todo) { 1720 &todoprint(); #TODO 1721 } else { 1722 &title(); #�����ȥ���� 1723 } 1724 } 1725 close(IN); 1726} 1727 1728 1729# i system history 1730# yns(1999/9) > mns(1999/10) > mns for iMODE(2000/1) > i system(2000/2) 1731# yns: yar-3 nikki system 1732# mns: MIOMIO nikki system 1733# 1734# version up list 1735# with many users....... 1736# 2000/05/26 0.7.4 yar-3 fix list.cgi mode 1737# 2000/05/26 0.7.3 yar-3 fix SALL 1738# 2000/05/16 0.7.2 yar-3 show titleheadfile when SALL and piloweb 1739# 2000/05/16 0.7.1 masato-3 repeat plan with range 1740# 2000/05/15 0.7.0 yar-3 RIS reverse, piloweb_2days 1741# 2000/05/15 0.6.9 chihalin-3 fix NEW bug, no caption section 1742# 2000/05/12 0.6.8 yar-3 fix ichiran bug 1743# 2000/05/12 0.6.7 chihalin-3 maenohi bug fixed 1744# 2000/05/11 0.6.6 tagoh-3 title, color bug fixed 1745# 2000/05/10 0.6.5 tagoh-3 RLNEW,RLSUB problem fixed 1746# 2000/05/10 0.6.4 ari-3 TSUGI problem fixed 1747# 2000/04/23 0.6.3 yar-3 cat on/off 1748# 2000/04/10 0.6.2 yar-3 use istyle tag 1749# 2000/04/10 0.6.1 chihalin-3 patched 1750# 2000/04/10 0.6.0 masato-3 default day user var 1751# 2000/04/09 0.5.9 yar-3 fix color imode bug 1752# 2000/04/06 0.5.8 yar-3,masato-3 pilo ua, fix default day 1753# 2000/04/06 0.5.7 yar-3 default day, Piloweb(P option) 1754# 2000/03/31 0.5.6 yar-3 BIG 1755# 2000/03/30 0.5.5 yar-3,masato-3 small, plan sort 1756# 2000/03/28 0.5.4 yar-3 title modify 1757# 2000/03/28 0.5.3 yar-3 color iMODE 1758# 2000/03/27 0.5.2 yar-3 MARK cmd 1759# 2000/03/24 0.5.1 masato-3 repeat plan 1760# 2000/03/15 0.5 masato-3 new generation monthly, yearly 1761# 2000/03/13 0.4.13 yar-3,masato-3 yearly plan 1762# 2000/03/10 0.4.12 masato-3 fix monthly plan bug 1763# 2000/03/08 0.4.11 masato-3 fix monthly plan bug, modify getdayoftheweek 1764# month-end plan support 1765# 2000/03/06 0.4.10 yar-3 monthly plan 1766# 2000/03/06 0.4.9 masato-3 NKF.pm 1767# 2000/03/02 0.4.8 northeye-3,masato-3 quote, counter file, PDXGW 1768# 2000/03/01 0.4.7 yar-3 RLNEW,RLSUB support, faster search 1769# 2000/03/01 0.4.6 masato-3 many bugs fixed and add new functions 1770# onccnv.pl plan(ABC), &, glob, capital 1771# 2000/02/25 0.4.5 yar-3 fix user-var search bug 1772# 2000/02/24 0.4.4 chihalin-3 lock file fixed(logging) 1773# 2000/02/24 0.4.3 masato-3 patched(maxresult,fix LI,DT,DD etc) 1774# yar-3 fix <> bug, maxresult bug(url encode) 1775# 2000/02/23 0.4.2 masato-3 patched(smarten,plan bug,search print) 1776# yar-3 support {jis|sjis} hnf 1777# 2000/02/22 0.4.1 masato-3 patched(sort,todo,dayoftheweek) 1778# 2000/02/22 0.4.0 yar-3 brush up 1779# 2000/02/22 0.3.5 ari-3 patched 1780# 2000/02/21 0.3.4 yar-3 search bug fix(regexp etc...) 1781# 2000/02/21 0.3.3 yar-3 i search system 1782# 2000/02/21 0.3.2 yar-3 with jcode.pl 1783# 2000/02/18 0.3.1 yar-3 PLAN,TODO 1784# 2000/02/17 0.3.0 yar-3 ez logger 1785# 2000/02/17 0.2.9 yar-3 jump refined $baseuri set 1786# 2000/02/17 0.2.8 yar-3 P fixed 1787# 2000/02/15 0.2.7 yar-3 ALL sections show 1788# 2000/02/15 0.2.6 ari-3 Lynx patched (SUB on title) 1789# 2000/02/15 0.2.5 yar-3 PDXGW(-H") patched 1790# 2000/02/15 0.2.4 key-3 iMODE char accesskey patched 1791# 2000/02/15 0.2.3 yar-3 RLINK 1792# 2000/02/15 0.2.2 yar-3 ALIAS problem fixed 1793# 2000/02/14 0.2.1 ari-3 patched (headfile, URL problem, SJIS) 1794# 2000/02/13 0.2.0 yar-3 (NEW fixed) 1795# 2000/02/13 0.1.7 key-3 patched (title,author, SUB problem) 1796# 2000/02/13 0.1.6 kenji-3 patched (GRP) 1797# 2000/02/13 0.1.5 masato-3 patched (without CGI.pm) 1798# 2000/02/04 by yar-3 1799# original 1999/10/06 by yar-3 1800# 1801# 1802# thanks 2 all users. 1803# 1999,2000,2001 (C)yar-3 All rights reserved. 1804 1805 1806 1807 1808 1809 1810