home *** CD-ROM | disk | FTP | other *** search
/ DOS/V Power Report 2001 December (DVD) / VPR0112A.ISO / OLS / FSTAT / fstat.lzh / lib / main.pl < prev    next >
Text File  |  2001-08-29  |  35KB  |  1,117 lines

  1. ;#+------------------------------------------------------------------------
  2. ;#|efStat
  3. ;#|・愠ーイマ・。シ・チ・
  4. ;#+------------------------------------------------------------------------
  5.  
  6. if (($P{PASS} ne $Pass) && ($DoPass)) {
  7.     print "<CENTER><P><B>[・ィ・鬘シ]</B>・ム・ケ・。シ・ノ、ャーテラ、キ、゙、サ、ヌ、キ、ソ。」</P></CENTER>\n";
  8.     &html_tail;
  9.     exit(1);
  10. }
  11.  
  12.  
  13. ;### キラサササエヨツャトウォサマ
  14. $CPU_start = (times)[0] if ($DoPutBenchmark);
  15.  
  16. ### ・ウ。シ・ノハムエケヘム・ニ。シ・ヨ・、ノ、゚ケ、
  17. $TABLE{'agent'}    = &func::LoadTable('./lib/table/agent.tbl');
  18. $TABLE{'cctld'}    = &func::LoadTable('./lib/table/cctld.tbl');
  19. $TABLE{'gtld'}     = &func::LoadTable('./lib/table/gtld.tbl');
  20. $TABLE{'jpdomain'} = &func::LoadTable('./lib/table/jpdomain.tbl');
  21. $TABLE{'tinami'}   = &func::LoadTable('./lib/table/tinami.tbl');
  22.  
  23. foreach $filename (@filename) {
  24.     if ($filename eq '') { next; }        # ".log"・ユ・。・、・ツミコ
  25.     
  26.     ### ・ユ・。・、・、ェ。シ・ラ・
  27.     unless (open(LOG,"<${Dir_Log}${filename}.log")) {
  28.         print "<CENTER><P><B>[・ィ・鬘シ]</B>・「・ッ・サ・ケ・愠ー ( ${Dir_Log}${filename}.log ) 、ォ、ッ、ウ、ネ、ャ、ヌ、ュ、゙、サ、」<BR>、ス、ホ・ユ・。・、・、マヒワナヒツクコ゚、キ、ニ、、、、ォ。「・ム。シ・゚・テ・キ・逾マタオ、キ、、、ォ (606ヒマ666) 、ハ、ノ、ホヌァイシ、オ、、。」</P></CENTER>\n";
  29.         &html_tail;
  30.         exit(1);
  31.     }
  32.     flock(LOG,2);
  33.  
  34.     ### ・ラ・愠ー・鬣狆ツケヤサケ、霹タ
  35.     ($SEC,$MIN,$HOUR,$DAY,$MON,$YEAR,$YOUBI,$TOTAL) = localtime(time);
  36.  
  37.     ### ・リ・テ・タノノ、゚ケ、爍チ・ァ・テ・ッ
  38.     chop($HEAD = <LOG>);
  39.     ($LOG_ID, $LOG_SINCE{$filename}) = split(/\t/, $HEAD);
  40.     $LOG_SINCE{$filename} = &func::C62_Decode($LOG_SINCE{$filename});
  41.  
  42.     if ($LOG_ID ne 'FC2') { next; }
  43.  
  44.     ### ウニシセ
  45.     chomp($INFO{$filename} = <LOG>);
  46.     $RANK_ALL{$filename} = &func::C62_Decode((split(/\t/, $INFO{$filename}))[1]);
  47.  
  48.     ### ニハフスクキラ
  49.     chomp($DAY{$filename} = <LOG>);
  50.     $RANK_DAY{$filename} = &func::C62_Decode((split(/\t/, $DAY{$filename}))[0]);
  51.  
  52.     ### サエヨハフスクキラ
  53.     chomp($HOUR{$filename} = <LOG>);
  54.  
  55.     ### ヘヒニハフスクキラ
  56.     chomp($WEEK{$filename} = <LOG>);
  57.  
  58.     ### スオハフスクキラ
  59.     chomp($WEEKLY{$filename} = <LOG>);
  60.     $RANK_WEEKLY{$filename} = &func::C62_Decode((split(/\t/, $WEEKLY{$filename}))[0]);
  61.  
  62.     ### キ鑅フスクキラ
  63.     chomp($MONTH{$filename} = <LOG>);
  64.     $RANK_MONTH{$filename} = &func::C62_Decode((split(/\t/, $MONTH{$filename}))[$MON]);
  65.  
  66.     ### ヌッナルハフスクキラ
  67.     chomp($YEAR{$filename} = <LOG>);
  68.     # $RANK_YEAR{$filename} = &func::C62_Decode((split(/\t/, $YEAR{$filename}))[0]);
  69.  
  70.     ### ・「・ッ・サ・ケ・愠ースクキラ
  71.     # イマネマーマ、ャサリト熙オ、、ニ、、、セケ
  72.     if ((defined($P{'d'})) && ($P{'d'} ne 'a')) {
  73.         if ($P{'d'} eq 'y') { $TOTAL = --$TOTAL; }
  74.         @HOUR = ('0') x 24;
  75.         while (chomp($LINE = <LOG>)) {
  76.             &Macro_Split;
  77.             ($sec,$min,$hour,$day,$mon,$year,$youbi,$total) = localtime($date);
  78.             if ($TOTAL eq $total) {
  79.                 ++$HOUR[ $hour ];
  80.                 &Macro_ProcessLine;
  81.             }
  82.         }
  83.         foreach (@HOUR) { $_ = &func::C62_Encode($_); }
  84.         $HOUR{$filename} = join("\t", @HOUR);
  85.     }
  86.  
  87.     # チエ、ニノスシィ
  88.     else {
  89.         while (chop($LINE = <LOG>)) {
  90.             &Macro_Split;
  91.             &Macro_ProcessLine;
  92.         }
  93.     }
  94.  
  95.     flock(LOG,8);
  96.     close(LOG);
  97.  
  98.     ### タク・愠ーヘム・ォ・ヲ・ソ、魘イス、キ、ニ、ェ、ッ
  99.     $COUNT_RAWLOG = 0;
  100.  
  101.     ### ヒスチノサ゚ヘム・・゚・テ・ソ
  102.     if ($SAMPLES == $Limit_Analyzer) {
  103.         print "<CENTER><P><B>[・ィ・鬘シ]</B>ハンク鋙。ヌス\、ャニッ、ュ。「・ラ・愠ー・鬣爨ッタゥスェホサ、キ、゙、キ、ソ。」<BR>$Limit_Analyzerキ、゙、ヌ、ホ・愠ー、キ、ォス靉、ヌ、ュ、ハ、、、隍ヲ、ヒ、ハ、テ、ニ、、、゙、ケ。」<BR>ヒマ。「・ラ・愠ー・鬣爨ャヒス\チキ、゙、キ、ソ。」ソシケ、ハフ萃熙ヌ、ケ、ホ、ヌ。「、シ、メコ錡ヤ、ヒ、エマ「ヘ昀シ、オ、、。」</P></CENTER>\n";
  104.         &html_tail;
  105.         exit(1);
  106.     }
  107. }
  108.  
  109.  
  110. sub Macro_Split {
  111.     ($num, $date, $host, $agent, $ref, $screen) = split(/\t/, $LINE);
  112.     $num  = &func::C62_Decode($num);
  113.     $date = &func::C62_Decode($date);
  114.  
  115.     $host =~ tr/A-Z/a-z/;
  116.  
  117.     $ref  = &func::URLdecode($ref);
  118.     &jcode::convert(\$ref, 'euc', '', 'z');
  119.     &jcode::tr(\$ref, '」ー-」ケ」チ-」レ」-」奛。', '0-9a-za-z ');
  120.     $ref = &func::URLencode($ref);
  121. }
  122.  
  123. sub Macro_ProcessLine {
  124.     ### ーネヨソキ、キ、、・愠ー、ホオュマソニサ
  125.     $now = $date if ($SAMPLES == 0);
  126.  
  127.     ### タク・愠ー、霹タ
  128.     if (($P{MODE} eq 'rawlog') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_rawlog') || ($P{MODE} eq 'solo_all')) {
  129.         &Macro_CountRawlog() if ($COUNT_RAWLOG < $Limit_Log);
  130.     }
  131.  
  132.     ### サイセネクオナキラ, TINAMI・ォ・ニ・エ・ハャタマ, Surfers Paradiceハャタマ
  133.     &Macro_CountRef() if (($P{MODE} eq 'ref') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all'));
  134.  
  135.     ### ・ロ・ケ・ネフセナキラ, ケメハャタマ, ケ筵ノ・皈、・ャタマ
  136.     &Macro_CountHost() if (($P{MODE} eq 'host') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all'));
  137.  
  138.     ### ・ヨ・鬣ヲ・カナキラ, ・ヨ・鬣ヲ・カハャタマ, ・ケ・ッ・遙シ・
  139.     &Macro_CountAgent() if (($P{MODE} eq 'ua') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all'));
  140.  
  141.     ### ・ケ・ッ・遙シ・
  142.     &Macro_CountScreen() if (($P{MODE} eq 'screen') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all'));
  143.  
  144.     ### ・オ・ラ・・ー、キ、ソ・「・ッ・サ・ケ・愠ー、ホチ暠
  145.     $SAMPLES++;
  146.  
  147.     ### ーネヨクナ、、・愠ー、ホオュマソニサ
  148.     $old = $date;
  149. }
  150.  
  151.  
  152. ### スクキラキイフ、ス。シ・ネ
  153. ### マ「チロヌロホス、ケ、チー、ヒノャヘラ、ハセヤネキ、ニ、ェ、ッ
  154. ### ノヤヘラ、ヒ、ハ、テ、ソマ「チロヌロホス、ケ、
  155. if (($P{MODE} eq 'count') || ($P{MODE} eq 'all')) {
  156.     #チ晥逾鬣ュ・ー
  157.     @rank_all            = &func::MakeList(\%RANK_ALL, \0);
  158.     $COUNT_ALL            = &func::CalcSum(values(%RANK_ALL));
  159.     undef %RANK_ALL;
  160.  
  161.     #キ鋗ヨ・鬣ュ・ー
  162.     @rank_month            = &func::MakeList(\%RANK_MONTH, \0);
  163.     $COUNT_MONTH        = &func::CalcSum(values(%RANK_MONTH));
  164.     undef %RANK_MONTH;
  165.  
  166.     #スオエヨ・鬣ュ・ー
  167.     @rank_weekly        = &func::MakeList(\%RANK_WEEKLY, \0);
  168.     $COUNT_WEEKLY        = &func::CalcSum(values(%RANK_WEEKLY));
  169.     undef %RANK_WEEKLY;
  170.  
  171.     #ヒワニ・鬣ュ・ー
  172.     @rank_day            = &func::MakeList(\%RANK_DAY, \0);
  173.     $COUNT_DAY            = &func::CalcSum(values(%RANK_DAY));
  174.     undef %RANK_DAY;
  175. }
  176.  
  177.  
  178. if (($P{MODE} eq 'ref') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  179.     while (($key, $value) = each(%REF)) {
  180.         foreach (@Complete_URL) {
  181.             if ($key =~ /$$_[0]/) {
  182.                 $REF{"<B>[User]</B> $$_[1]"} += $value;
  183.                 delete $REF{$key};
  184.                 last;
  185.             }
  186.         }
  187.     }
  188.  
  189.     @ref                = &func::MakeList(\%REF, \$Limit_Ref);
  190.     $COUNT_REF            = &func::CalcSum(values(%REF));                    #シォ・オ・、・ネニ篏イセネソ
  191.     undef %REF;
  192.  
  193.     @ref_own            = &func::MakeList(\%REF_OWN, \0);
  194.     $COUNT_OWN            = &func::CalcSum(values(%REF_OWN));                #シォ・オ・、・ネニ篏イセネソ
  195.     undef %REF_OWN;
  196.  
  197.     @ref_search            = &func::MakeList(\%REF_SEARCH, \$Limit_Search);
  198.     $COUNT_SEARCH        = &func::CalcSum(values(%REF_SEARCH));            #・オ。シ・チ・ィ・ク・ホ・ュ。シ・。シ・ノチ暠
  199.     undef %REF_SEARCH;
  200.  
  201.     #・オ。シ・チ・ィ・ク・ォ、鯱隍ソソ
  202.     @ref_search_share    = &func::MakeList(\%REF_SEARCH_SHARE, \0);
  203.     $COUNT_SEARCH_SHARE    = &func::CalcSum(values(%REF_SEARCH_SHARE));    
  204.     $COUNT_TN_            = $REF_SEARCH_SHARE{'TINAMI'};                    #TINAMI、ォ、鯱隍ソソ
  205.     $COUNT_SP_            = $REF_SEARCH_SHARE{'Surfers Paradice'};        #SP、ォ、鯱隍ソソ
  206.     undef %REF_SEARCH_SHARE;
  207.  
  208.     @ref_tinami            = &func::MakeList(\%REF_TINAMI, \$Limit_Tinami);
  209.     $COUNT_TN            = &func::CalcSum(values(%REF_TINAMI));            #TINAMI、ホ・ュ。シ・。シ・ノチ暠
  210.     undef %REF_TINAMI;
  211.  
  212.     @ref_sp                = &func::MakeList(\%REF_SP, \$Limit_Sp);
  213.     $COUNT_SP            = &func::CalcSum(values(%REF_SP));                #SP、ホ・ュ。シ・。シ・ノチ暠
  214.     undef %REF_SP;
  215. }
  216.  
  217.  
  218. if (($P{MODE} eq 'host') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  219.     @host                = &func::MakeList(\%HOST, \$Limit_Host);
  220.     undef %HOST;
  221.  
  222.     @host_dm            = &func::MakeList(\%HOST_DM, \$Limit_Domain);
  223.     $COUNT_JP            = $HOST_DM{'jp'};
  224.     $COUNT_US            = $HOST_DM{'us'};
  225.     undef %HOST_DM;
  226.  
  227.     @host_dm_jp            = &func::MakeList(\%HOST_DM_JP, \$Limit_Jp);
  228.     undef %HOST_DM_JP;
  229.  
  230.     @host_dm_us            = &func::MakeList(\%HOST_DM_US, \$Limit_Us);
  231.     undef %HOST_DM_US;
  232. }
  233.  
  234.  
  235. if (($P{MODE} eq 'ua') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  236.     @agent                = &func::MakeList(\%AGENT, \$Limit_Agent);
  237.     undef %AGENT;
  238.  
  239.     @agent_ie            = &func::MakeList(\%AGENT_IE, \0);
  240.     $COUNT_IE            = &func::CalcSum(values(%AGENT_IE));            #IE、ホ・キ・ァ・「
  241.     undef %AGENT_IE;
  242.  
  243.     @agent_nn            = &func::MakeList(\%AGENT_NN, \0);
  244.     $COUNT_NN            = &func::CalcSum(values(%AGENT_NN));            #NN、ホ・キ・ァ・「
  245.     undef %AGENT_NN;
  246.  
  247.     @agent_os            = &func::MakeList(\%AGENT_OS, \0);
  248.     $COUNT_OS            = &func::CalcSum(values(%AGENT_OS));            #OS、ホ・キ・ァ・「
  249.     undef %AGENT_OS;
  250. }
  251.  
  252.  
  253. if (($P{MODE} eq 'screen') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  254.     @screen                = &func::MakeList(\%SCREEN, \0);
  255.     $COUNT_SCREEN        = &func::CalcSum(values(%SCREEN));                #ヘューユ、ハイ靂フセォ・ヲ・ネソ
  256.     undef %SCREEN;
  257.  
  258.     @screen_size        = &func::MakeList(\%SCREEN_SIZE, \0);
  259.     $COUNT_SCREEN_SIZE    = &func::CalcSum(values(%SCREEN_SIZE));            #ヘューユ、ハイ靂フセォ・ヲ・ネソ
  260.     undef %SCREEN_SIZE;
  261.  
  262.     @screen_color        = &func::MakeList(\%SCREEN_COLOR, \0);
  263.     $COUNT_SCREEN_COLOR    = &func::CalcSum(values(%SCREEN_COLOR));        #ヘューユ、ハイ靂フセォ・ヲ・ネソ
  264.     undef %SCREEN_COLOR;
  265. }
  266.  
  267.  
  268.  
  269. ### ・ウ。シ・ノ、莊ュケ讀ユフ」、「、ハクサ昀ヒハムエケ、ケ、
  270. &Macro_ChangeList;
  271.  
  272.  
  273. ### ウニシセ
  274. if (($P{MODE} eq 'solo_rawlog') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  275.     $days = ($now-$old)/86400;                        #・愠ー、隍テ、ソエエヨ(ニソ)
  276.     $now = &func::MakeDate($now);
  277.     $old = &func::MakeDate($old);
  278.  
  279.     print "<CENTER><TABLE BORDER=2 CELLSPACING=0 CELLPADDING=2>\n";
  280.     print "\t<TR><TH COLSPAN=4${tbc[0]}>ツミセン・愠ー・ユ・。・、・ : ${filename[0]}.log</TH></TR>\n";
  281.     print "\t<TR><TH${tbc[1]}>トエココエエヨ</TH><TD${tbc[5]}>$old 。チ $now</TD><TH${tbc[2]}>チ愠メ・テ・ネソ</TH><TD${tbc[6]}>$RANK_ALL{ $filename[0] }</TD></TR>\n";
  282.  
  283.     if ($days > 0) {
  284.         $ave  = sprintf("%0.2f", $SAMPLES/$days);
  285.         $days = sprintf("%0.2f", $days);
  286.         print "\t<TR><TH COLSPAN=4${tbc[8]}>$SAMPLES・「・ッ・サ・ケテ」タョ、ヒ$daysニヘラ、キ、゙、ケ。。(1ニハソカム $ave ・「・ッ・サ・ケ)</TH></TR>\n";
  287.     }
  288.     print "</TABLE></CENTER><HR>\n\n";
  289. }
  290.  
  291.  
  292. ### セョ・皈ヒ・蝪シ
  293. unless ($P{MODE} eq 'solo_rawlog') {
  294.     ### ・皈ヒ・蝪シ
  295.     $colspan = 6;        # ホホソ
  296.     print "<!-- セョ・皈ヒ・蝪シ -->\n<A name=menu></A>\n<CENTER><TABLE border=1 cellspacing=0 cellpadding=1${tbc[0]}>\n\t<TR><TH colspan=${colspan}><FONT size=+1>。 セョ・皈ヒ・蝪シ 。</FONT></TH></TR>\n";
  297.  
  298.     if ($P{MODE} eq 'rawlog') {
  299.         &menu_rawlog;
  300.     } elsif ($P{MODE} eq 'count') {
  301.         &menu_count;
  302.         &menu_rank;
  303.     } elsif ($P{MODE} eq 'ref') {
  304.         &menu_ref;
  305.     } elsif ($P{MODE} eq 'host') {
  306.         &menu_host;
  307.     } elsif ($P{MODE} eq 'ua') {
  308.         &menu_ua;
  309.     } elsif ($P{MODE} eq 'screen') {
  310.         &menu_screen;
  311.     } elsif ($P{MODE} eq 'all') {
  312.         print "\t<TR><TH colspan=${colspan}${tbc[0]}>「」タク・愠ー「」</TH></TR>\n";
  313.         &menu_rawlog;
  314.         print "\t<TR><TH colspan=${colspan}${tbc[0]}>「」、ス、ホツセスクキラ「」</TH></TR>\n";
  315.         &menu_count;
  316.         &menu_rank;
  317.         &menu_ref;
  318.         &menu_host;
  319.         &menu_ua;
  320.         &menu_screen;
  321.     } elsif (($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  322.         &menu_count;
  323.         &menu_ref;
  324.         &menu_host;
  325.         &menu_ua;
  326.         &menu_screen;
  327.     }
  328.     print "<TR><TD colspan=${colspan}><DIV ALIGN=right><A HREF=\"$self\">[「・ ・皈ヒ・蝪シ、ヒフ皃]</A></DIV></TD></TR></TABLE></CENTER><HR>\n\n";
  329. }
  330.  
  331.  
  332. ### タク・愠ー
  333. if (($P{MODE} eq 'rawlog') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_rawlog') || ($P{MODE} eq 'solo_all')) {
  334.     ### タク・愠ー、ホ・ニ。シ・ヨ・
  335.     print "<CENTER>\n";
  336.     foreach $filename (@filename) {
  337.         if (defined($RAWLOG{$filename})) {
  338.             print "<A NAME=rawlog_${filename}></A>\n<TABLE border=1 cellspacing=0 cellpadding=1${tbc[0]}><TR><TD><A HREF=\"#menu\"><B><FONT size=+1>タク・愠ー ($filename.log)</FONT> / コヌソキ$Limit_Logキ</B></A></TD></TR><TR><TD><PRE>\n";
  339.             print $RAWLOG{$filename};
  340.             print "</PRE></TD></TR></TABLE><BR>\n";
  341.         }
  342.     }
  343.     print "</CENTER>\n";
  344. }
  345.  
  346.  
  347. ### ・ォ・ヲ・ネスクキラ
  348. if (($P{MODE} eq 'count') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  349.     print "<!-- ・ォ・ヲ・ネソクキラ -->\n<CENTER>\n";
  350.     print "<!-- ニハフスクキラ -->\n<A name=day></A>\n";
  351.  
  352.     &Macro_PutTable_b(0, $koumoku{'day'}, \%DAY);
  353.     undef %DAY;
  354.     print "\n\n<BR>\n\n";
  355.     print "<!-- スオハフスクキラ -->\n<A name=weekly></A>\n";
  356.     &Macro_PutTable_b(0, $koumoku{'weekly'}, \%WEEKLY);
  357.     undef %WEEKLY;
  358.     print "\n\n<BR>\n\n";
  359.     print "<!-- キ鑅フスクキラ -->\n<A name=month></A>\n";
  360.     &Macro_PutTable_b(0, $koumoku{'month'}, \%MONTH);
  361.     undef %MONTH;
  362.     print "\n\n<BR>\n\n";
  363.     print "<!-- サエヨツモハフスクキラ -->\n<A name=hour></A>\n";
  364.     &Macro_PutTable_b(2, $koumoku{'hour'}, \%HOUR);
  365.     undef %HOUR;
  366.     print "\n\n<BR>\n\n";
  367.     print "<!-- ヘヒニハフスクキラ -->\n<A name=week></A>\n";
  368.     &Macro_PutTable_b(2, $koumoku{'week'}, \%WEEK);
  369.     undef %WEEK;
  370.     print "\n\n<BR>\n\n";
  371.     print "<!-- ヌッナルハフスクキラ -->\n<A name=year></A>\n";
  372.     &Macro_PutTable_b(0, $koumoku{'year'}, \%YEAR);
  373.     undef %YEAR;
  374.     print "\n</CENTER><BR>\n\n";
  375.  
  376.     unless (($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  377.         print "<!-- ・オ・、・ネニ筵鬣ュ・ー -->\n<A name=rank></A>\n<CENTER><TABLE border=0 cellpadding=4><TR><TD valign=top>\n";
  378.         &Macro_PutTable_a(0, 'チ晥逾鬣ュ・ー', '・レ。シ・クフセ', $COUNT_ALL,        '', 0, 0, \@rank_all);
  379.         undef @rank_all;
  380.         print "</TD><TD valign=top>\n";
  381.         &Macro_PutTable_a(0, 'キ鋗ヨ・鬣ュ・ー', '・レ。シ・クフセ', $COUNT_MONTH,    '', 0, 0, \@rank_month);
  382.         undef @rank_month;
  383.         print "</TD></TR><TR><TD valign=top>\n";
  384.         &Macro_PutTable_a(0, 'スオエヨ・鬣ュ・ー', '・レ。シ・クフセ', $COUNT_WEEKLY,    '', 0, 0, \@rank_weekly);
  385.         undef @rank_weekly;
  386.         print "</TD><TD valign=top>\n";
  387.         &Macro_PutTable_a(0, 'ヒワニ・鬣ュ・ー', '・レ。シ・クフセ', $COUNT_DAY,        '', 0, 0, \@rank_day);
  388.         undef @rank_day;
  389.         print "</TD></TR></TABLE></CENTER><BR>\n\n";
  390.     }
  391. }
  392.  
  393. ### サイセネクオキマ
  394. if (($P{MODE} eq 'ref') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  395.     print "<!-- サイセネクオ -->\n<A name=ref></A>\n<CENTER>\n";
  396.     &Macro_PutTable_a(0, 'サイセネクオナキラ', 'サイセネクオURL', $COUNT_REF, '', 0, $Limit_Ref, \@ref);
  397.     undef @ref;
  398.     print "</CENTER><BR>\n\n";
  399.     print "<!-- ・オ・、・ネニ箍ワニーハャタマ -->\n<A name=ref_own></A><CENTER>\n";
  400.     &Macro_PutTable_a(2, '・オ・、・ネニ箍ワニーハャタマ', 'ーワニー、ホニ篶', $COUNT_OWN, 'シォ・オ・、・ネニ笋ェシォ・オ・、・ネニ', $COUNT_OWN, 0, \@ref_own);
  401.     undef @ref_own;
  402.     print "</CENTER><BR>\n\n";
  403.  
  404.     print "<!-- ・オ。シ・チ・ィ・ク・キラ -->\n<CENTER><TABLE border=0 cellpadding=8><TR><TD valign=top>\n<A name=search_share></A>\n";
  405.     &Macro_PutTable_a(2, '・オ。シ・チ・ィ・ク・キ・ァ・「', 'フセチー', $COUNT_SEARCH_SHARE, '・オ。シ・チ・ィ・ク・ォ、', $COUNT_SEARCH_SHARE, 0, \@ref_search_share);
  406.     undef @ref_search_share;
  407.     print "\n</TD><TD valign=top>\n<A name=search_key></A>\n";
  408.     &Macro_PutTable_a(0, '・オ。シ・チ・ィ・ク・ャタマ', 'ク。コ。シ・ノ(ウオササ)', $COUNT_SEARCH, '', 0, $Limit_Search, \@ref_search);
  409.     undef @ref_search;
  410.     print "\n</TD></TR></TABLE></CENTER>\n\n";
  411.     print "<CENTER><TABLE border=0 cellpadding=8><TR><TD valign=top>\n<A name=tinami></A>\n";
  412.     &Macro_PutTable_a(1, 'TINAMIハャタマ', 'ク。コ。シ・ノ', $COUNT_TN, 'TINAMI、ォ、', $COUNT_TN_, $Limit_Tinami, \@ref_tinami);
  413.     undef @ref_tinami;
  414.     print "\n</TD><TD valign=top>\n<A name=sp></A>\n";
  415.     &Macro_PutTable_a(1, 'Surfers Paradiceハャタマ', 'ク。コ。シ・ノ', $COUNT_SP, 'SP、ォ、', $COUNT_SP_, $Limit_Sp, \@ref_sp);
  416.     undef @ref_sp;
  417.     print "\n</TD></TR></TABLE></CENTER><BR>\n\n";
  418. }
  419.  
  420. ### ・ロ・ケ・ネキマ
  421. if (($P{MODE} eq 'host') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  422.     print "<!-- ・ノ・皈、・キラ -->\n<CENTER><TABLE border=0 cellpadding=8><TR><TD valign=top>\n<A name=host></A>\n";
  423.     &Macro_PutTable_a(0, '・ノ・皈、・フナキラ', '・ノ・皈、・', $SAMPLES, '', 0, $Limit_Host, \@host);
  424.     undef @host;
  425.     print "\n</TD><TD valign=top>\n<A name=domain></A>\n";
  426.     &Macro_PutTable_a(0, 'ケメハフナキラ', 'ケメ (ccTLD)', $SAMPLES, '', 0, $Limit_Domain, \@host_dm);
  427.     undef @host_dm;
  428.     print "\n\n<BR>\n\n<A name=jp></A>\n";
  429.     &Macro_PutTable_a(2, 'ケ筵ノ・皈、・キラ', 'ツ2・・ル・・ノ・皈、・', $COUNT_JP, 'ニヒワ、ォ、', $COUNT_JP, 0, \@host_dm_jp);
  430.     undef @host_dm_jp;
  431.     print "\n\n<BR>\n\n<A name=us></A>\n";
  432.     &Macro_PutTable_a(2, 'ハニケノ・皈、・キラ', 'スツーチネソ・ (gTLD)', $COUNT_US, 'ハニケォ、', $COUNT_US, 0, \@host_dm_us);
  433.     undef @host_dm_us;
  434.     print "\n</TD></TR></TABLE></CENTER><BR>\n\n";
  435. }
  436.  
  437. ### ・ヨ・鬣ヲ・カキマ
  438. if (($P{MODE} eq 'ua') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  439.     print "<!-- ・ヨ・鬣ヲ・カナキラ -->\n<CENTER><TABLE border=0 cellpadding=8><TR><TD valign=top>\n<A name=ua></A>\n";
  440.     &Macro_PutTable_a(0, '・ヨ・鬣ヲ・カナキラ', '・ィ。シ・ク・ァ・ネフセセホ', $SAMPLES, '', 0, $Limit_Agent, \@agent);
  441.     undef @agent;
  442.     print "\n</TD><TD valign=top>\n<A name=share_ie></A>\n";
  443.     &Macro_PutTable_a(2, 'IEニアサホ、ホ・キ・ァ・「', 'IE・ミ。シ・ク・逾', $COUNT_IE, 'IEチ暠', $COUNT_IE, 0, \@agent_ie);
  444.     undef @agent_ie;
  445.     print "\n\n<BR>\n\n<A name=share_nn></A>\n";
  446.     &Macro_PutTable_a(2, 'NNニアサホ、ホ・キ・ァ・「', 'NN・ミ。シ・ク・逾', $COUNT_NN, 'NNチ暠', $COUNT_NN, 0, \@agent_nn);
  447.     undef @agent_nn;
  448.     print "\n\n<BR>\n\n<A name=share_os></A>\n";
  449.     &Macro_PutTable_a(0, 'ヘムOSナキラ', 'OSシハフ(ウオササ)', $COUNT_OS, '', 0, 0, \@agent_os);
  450.     undef @agent_os;
  451.     print "\n</TD></TR></TABLE></CENTER><BR>\n\n";
  452. }
  453.  
  454. if (($P{MODE} eq 'screen') || ($P{MODE} eq 'all') || ($P{MODE} eq 'solo_analyze') || ($P{MODE} eq 'solo_all')) {
  455.     print "<!-- イ靂フセマ -->\n<CENTER><TABLE border=0 cellpadding=8><TR><TD valign=top>\n<A name=screen></A>\n";
  456.     &Macro_PutTable_a(0, 'イ靂フセキラ', 'イ靂フセ', $COUNT_SCREEN, '', 0, 0, \@screen);
  457.     undef @screen;
  458.     print "\n</TD><TD valign=top>\n<A name=screen_size></A>\n";
  459.     &Macro_PutTable_a(0, '・オ・、・コハフナキラ', 'イ」 x スト', $COUNT_SCREEN_SIZE, '', 0, 0, \@screen_size);
  460.     undef @screen_size;
  461.     print "\n</TD><TD valign=top>\n<A name=screen_color></A>\n";
  462.     &Macro_PutTable_a(0, 'ソァソシナルハフナキラ', 'ソァソ', $COUNT_SCREEN_COLOR, '', 0, 0, \@screen_color);
  463.     undef @screen_color;
  464.     print "\n</TD></TR></TABLE></CENTER><BR>\n\n";
  465. }
  466.  
  467.  
  468. ### キラサササエヨツャトスェホサ
  469. if ($DoPutBenchmark) {
  470.     $CPU_end = (times)[0];
  471.     printf("<DIV align=right>セテネエヨ。ァ %.3f CPUノテ</DIV>\n",$CPU_end-$CPU_start);
  472. }
  473.  
  474.  
  475. ;#--------------------------------------------------------------------
  476. ;#・゙・ッ・
  477. ;#--------------------------------------------------------------------
  478. ;### タク・愠ー、ホ・・ケ・ネ、釥・゙・ッ・
  479. sub Macro_CountRawlog {
  480.     $work{'agent'} = $agent;
  481.     $work{'agent'} =~ s'^!'Mozilla/';
  482.     $work{'agent'} =~ s"\(!(.+)\)"\(compatible; MSIE $1\)";
  483.     $work{'ref'} = $ref;
  484.     $work{'ref'} =~ s'^!'http://';
  485.     $work{'date'} = &func::MakeDate($date);
  486.  
  487.     if (($DoLink) && ($work{'ref'} =~ /^http/)) {
  488.         $work{'ref'} = &func::MakeLink($work{'ref'}, 2) 
  489.     } else {
  490.         $work{'ref'} = &func::URLdecode($work{'ref'})
  491.     }
  492.  
  493.     if ($screen eq '-') {
  494.         $work{'screen'} = '-';
  495.     } else {
  496.         split(/,/, $screen);
  497.         $_[0] = &func::C62_Decode($_[0]);
  498.         $_[1] = &func::C62_Decode($_[1]);
  499.         $_[2] = &func::C62_Decode($_[2]);
  500.         $work{'screen'} = "$_[0]x$_[1]x$_[2]";
  501.     }
  502.  
  503.     $RAWLOG{$filename} .= "[$num] $work{'date'} $host $work{'screen'}\n\t$work{'agent'}\n\t$work{'ref'}\n\n";
  504.     ++$COUNT_RAWLOG;
  505. }
  506.  
  507.  
  508. ;### サイセネクオ、ォ・ヲ・ネ、ケ、・゙・ッ・
  509. sub Macro_CountRef {
  510.     # ・オ。シ・チ・ィ・ク・ォ、
  511.     if    ($ref =~ '^!\w+\.tinami\.com/')
  512.         { $flag =  1; ++$REF_SEARCH_SHARE{'TINAMI'}; }
  513.  
  514.     elsif ($ref =~ '\.surpara\.')
  515.         { $flag =  2; ++$REF_SEARCH_SHARE{'Surfers Paradice'}; }
  516.  
  517.     elsif ($ref =~ '^!dir\.yahoo\.')
  518.         { $flag =  3; ++$REF_SEARCH_SHARE{'Yahoo!(Directory)'}; }
  519.  
  520.     elsif (($ref =~ '^!\w+\.goo\.ne\.jp/'))
  521.         { $flag =  4; ++$REF_SEARCH_SHARE{'goo'}; }
  522.  
  523.     elsif ($ref =~ '^!\w+\.infoseek\.')
  524.         { $flag =  5; ++$REF_SEARCH_SHARE{'Infoseek'}; }
  525.  
  526.     elsif ($ref =~ '^!\w+\.msn\.')
  527.         { $flag =  6; ++$REF_SEARCH_SHARE{'MSN'}; }
  528.  
  529.     elsif ($ref =~ '^!\w+\.google\.')
  530.         { $flag =  7; ++$REF_SEARCH_SHARE{'Google'}; }
  531.  
  532.     elsif ($ref =~ '^!infonavi\.infoweb\.ne\.jp/')
  533.         { $flag = 8; $REF_SEARCH_SHARE{'InfoNavigator'}; }
  534.  
  535.     elsif ($ref =~ '^!\w+\.lycos\.')
  536.         { $flag =  9; ++$REF_SEARCH_SHARE{'Lycos'}; }
  537.  
  538.     elsif (($ref =~ '^!\w+\.fresheye\.') || ($ref =~ '^!\w+\.jplaza\.'))
  539.         { $flag = 10; ++$REF_SEARCH_SHARE{'Fresheye'}; }
  540.  
  541.     elsif ($ref =~ '^!kensaku\.org')
  542.         { $flag = 11; ++$REF_SEARCH_SHARE{'RingRing'}; }
  543.  
  544.     elsif ($ref =~ '^!\w+\.excite\.')
  545.         { $flag = 12; ++$REF_SEARCH_SHARE{'excite'}; }
  546.  
  547.     elsif ($ref =~ '^!\w+\.altavista\.')
  548.         { $flag = 13; ++$REF_SEARCH_SHARE{'altavista'}; }
  549.  
  550.     elsif ($ref =~ '^!search\.odn\.ne\.jp/')
  551.         { $flag = 14; ++$REF_SEARCH_SHARE{'ODN'}; }
  552.  
  553.     elsif ($ref =~ '^!\w+\.search\.biglobe\.ne\.jp/')
  554.         { $flag = 15; ++$REF_SEARCH_SHARE{'Biglobe'}; }
  555.  
  556.     elsif ($ref =~ '^!search\.yahoo\.')
  557.         { $flag = 16; ++$REF_SEARCH_SHARE{'Yahoo!(Keyword)'}; }
  558.  
  559.     elsif ($ref =~ '^!google\.yahoo\.')
  560.         { $flag = 17; ++$REF_SEARCH_SHARE{'Yahoo!(Google)'}; }
  561.  
  562.  
  563.     # トフセ、ホURL
  564.     else {
  565.         $flag = 0;
  566.         $flg = 0;
  567.  
  568.         # シォ・オ・、・ネ、ォ・チ・ァ・テ・ッ
  569.         foreach (@MySite) {
  570.             if ($ref =~ /^$_/) {
  571.                 $ref =~ s/^$_//;
  572.                 $ref = '/' if ($ref eq '');
  573.                 ++$REF_OWN{"$ref <B>>> $filename</B>"};
  574.                 ++$REF{'-own-'};
  575.                 $flg = 1;
  576.                 last;
  577.             }
  578.         }
  579.         ++$REF{$ref} if ($flg == 0);
  580.     }
  581.  
  582.     # ・オ。シ・チ・ィ・ク・ュ。シ・。シ・ノソカ、ハャ、ア
  583.     if ($flag > 0) {
  584.         ++$REF{'-search-'};
  585.         split(/&/, $ref);
  586.         foreach $_ (@_) {
  587.             s/%20|\+|\|/ /gi;                                # ス靉ツョナル、ホエリキク、ヌ、ォ、ハ、ロ」ヒ
  588. #            s/%81@|%81b|\+|\|/ /gi;                                # ス靉ツョナル、ホエリキク、ヌ、ォ、ハ、ロ」ヒ
  589.  
  590.             # TINAMI
  591.             if ($flag == 1) {
  592.                 ++$REF_TINAMI{$1} if (/(\w\w)=yes/ || /word=(.+)/);
  593.                 ++$REF_TINAMI{"[Charlotte] $1"} if (/key=(.+)/);
  594.             }
  595.  
  596.             # Surfers Paradice
  597.             elsif ($flag == 2) {
  598.                 ++$REF_SP{$1}    if ((/J=(.+)/) || (/search=(.+)/));
  599.             }
  600.  
  601.             # Yahoo!
  602.             elsif ($flag == 3) {
  603.                 ++$REF_SEARCH{$1}    if (/p=(.+)/);
  604.                 ++$REF_SEARCH{"<I>[Yahoo C]</I> $1"}    if (/r=(.+)/);
  605.             }
  606.  
  607.             # goo
  608.             elsif ($flag == 4) {
  609.                 ++$REF_SEARCH{$1}    if (/MT=(.+)/ || /AW\w=(.+)/);
  610.             }
  611.  
  612.             # infoseek
  613.             elsif ($flag == 5) {
  614.                 ++$REF_SEARCH{$1}    if (/qt=(.+)/ || /oq=(.+)/);
  615.             }
  616.  
  617.             # MSN, Biglobe
  618.             elsif (($flag == 6) || ($flag == 15)) {
  619.                 ++$REF_SEARCH{$1}    if (/q=(.+)/ || /aq=(.+)/ || /MT=(.+)/);
  620.             }
  621.  
  622.             # Google, excite, altavista
  623.             elsif (($flag == 7) || ($flag == 12) || ($flag == 13)) {
  624.                 ++$REF_SEARCH{$1}    if (/q=(.+)/);
  625.             }
  626.  
  627.             # infoweb, ODN
  628.             elsif (($flag == 8) || ($flag == 14)) {
  629.                 ++$REF_SEARCH{$1}    if (/QueryString=(.+)/ || /OLDQUERYDISPLAY=(.+)/);
  630.             }
  631.  
  632.             # lycos
  633.             elsif ($flag == 9) {
  634.                 ++$REF_SEARCH{$1}    if (/query=(.+)/);
  635.             }
  636.  
  637.             # fresheye
  638.             elsif ($flag == 10) {
  639.                 ++$REF_SEARCH{$1}    if (/kw=(.+)/);
  640.             }
  641.  
  642.             # RingRing
  643.             elsif ($flag == 11) {
  644.                 ++$REF_SEARCH{$1}    if (/key=(.+)/);
  645.             }
  646.  
  647.             # Yahoo! (search, google)
  648.             elsif (($flag == 16) || ($flag == 17)) {
  649.                 ++$REF_SEARCH{$1}    if (/p=(.+)/);
  650.             }
  651.         }
  652.     }
  653.     # ++$REF{$ref};
  654. }
  655.  
  656.  
  657. ;### ・ロ・ケ・ネフセ、ホキチシー、ェハフ、キ・ォ・ヲ・ネ、ケ、・゙・ッ・
  658. sub Macro_CountHost {
  659.     split(/\./, $host);
  660.  
  661.     if (($host eq '') || ($host eq '-')) {                        #'-'、キ、ォ、ハ、ォ、テ、ソ、
  662.         ++$HOST_DM{'-'};
  663.     }
  664.  
  665.     ### FQDN
  666.     elsif ($_[$#_] =~ /[a-z]$/) {
  667.         ## ccTLD
  668.         if (length($_[$#_]) == 2) {
  669.             ++$HOST_DM{ $_[$#_] };
  670.             $host = "*.$_[$#_-2].$_[$#_-1].$_[$#_]";
  671.  
  672.             # ニヒワ、マヌーニ、
  673.             if ($_[$#_] eq 'jp') { ++$HOST_DM_JP{$_[$#_-1]}; }
  674.         }
  675.  
  676.         ## gTLD
  677.         else {
  678.             ++$HOST_DM{'us'};
  679.             ++$HOST_DM_US{ $_[$#_] };
  680.             $host = "*.$_[$#_-1].$_[$#_]";
  681.         }
  682.     }
  683.  
  684.     ### IP
  685.     else {
  686.         ++$HOST_DM{'ipaddr'};
  687.         $host = "$_[$#_-3].$_[$#_-2].$_[$#_-1].*";
  688.     }
  689.  
  690.     ++$HOST{$host};
  691. }
  692.  
  693.  
  694. ;### ・ィ。シ・ク・ァ・ネフセ、ェハフ、キ・ォ・ヲ・ネ、ケ、・゙・ッ・
  695. sub Macro_CountAgent {
  696.     ### Mozzilaキマ
  697.     if ($agent =~ /^!/) {
  698.         $agent =~ '^!([\w.-]+)\s';                    # NN、ホ・皈ク・罍シ・ミ。シ・ク・逾ヌナキラ
  699.         $nnver = $1;
  700.  
  701.         $agent =~ /\((.*)\)/;                        # テ晴眄ハフゥ、ヒトエ、ル、ス猜
  702.         split(/; /, $1);
  703.  
  704.         # IEキマ
  705.         if ($_[0] =~ /^!([\w.-]+)/) {
  706.             # NetCaptor
  707.             if ($_[2] =~ /^NetCaptor/) {
  708.                 ++$AGENT{'NetCaptor'};
  709.             }
  710.  
  711.             # ス紵E
  712.             else {
  713.                 ++$AGENT{'Internet Explorer'};        # IEチエツホ、ホ・キ・ァ・「
  714.                 ++$AGENT_IE{$1};                    # IE、ホ・皈ク・罍シ・ミ。シ・ク・逾
  715.  
  716.                 ### IE、ホセケ遉ホOSナキラ
  717.                 if    ($_[1] eq 'Windows 98')     { ++$AGENT_OS{'Windows 98'}; }
  718.                 elsif ($_[1] eq 'Windows NT 5.0') { ++$AGENT_OS{'Windows 2000'}; }
  719.                 elsif ($_[1] eq 'Windows 95')     { ++$AGENT_OS{'Windows 95'}; }
  720.                 elsif ($_[1] eq 'Windows NT 4.0') { ++$AGENT_OS{'Windows NT'}; }    # ツソハャ
  721.                 elsif ($_[1] eq 'Windows NT')     { ++$AGENT_OS{'Windows NT'}; }
  722.                 elsif ($_[1] =~ /^MSN|^AOL/)      { ++$AGENT_OS{$_[2]}; }
  723.                 elsif ($_[1] eq 'Mac_PowerPC')    { ++$AGENT_OS{'Macintosh'}; }
  724.                 elsif ($_[1] eq 'Win32')          { ++$AGENT_OS{'Windows 95'}; }    # ツソハャ
  725.                 elsif ($_[1] eq 'Windows 3.1')    { ++$AGENT_OS{'Windows 3.1'}; }
  726.                 # else { ++$AGENT_OS{'-etc-'}; print "$agent<BR>\n"; }
  727.             }
  728.         }
  729.  
  730.         # NNキマ
  731.         elsif (($_[1] =~ /\bI\b/) || ($_[1] =~ /\bU\b/) || ($_[1] =~ /\bN\b/)) {
  732.             ++$AGENT{'Netscape Navigator'};        # NNチエツホ、ホ・キ・ァ・「
  733.             ++$AGENT_NN{$nnver};
  734.  
  735.             ### OSナキラ
  736.             if    (($_[0] eq 'Win98') || ($_[2] eq 'Win98'))
  737.                 { ++$AGENT_OS{'Windows 98'}; }
  738.             elsif (($_[0] eq 'Windows NT 5.0') || ($_[2] eq 'Windows NT 5.0'))
  739.                 { ++$AGENT_OS{'Windows 2000'}; }
  740.             elsif (($_[0] eq 'Win95') || ($_[2] eq 'Win95'))
  741.                 { ++$AGENT_OS{'Windows 95'}; }
  742.             elsif (($_[0] eq 'WinNT') || ($_[2] eq 'WinNT'))
  743.                 { ++$AGENT_OS{'Windows NT'}; }
  744.             elsif (($_[0] eq 'WinNT4.0') || ($_[2] eq 'WinNT4.0'))
  745.                 { ++$AGENT_OS{'Windows NT'}; }
  746.             elsif (($_[0] eq 'Macintosh') || ($_[2] eq 'Macintosh'))
  747.                 { ++$AGENT_OS{'Macintosh'}; }
  748.             elsif (($_[0] eq 'Win16') || ($_[2] eq 'Win16'))
  749.                 { ++$AGENT_OS{'Windows 3.1'}; }
  750.             elsif ($_[0] eq 'OS/2')
  751.                 { ++$AGENT_OS{'OS/2'}; }
  752.             # Xテシヒホセケ遉マ、筅ヲセッ、キサナハャ、ア、
  753.             elsif ($_[0] eq 'X11')
  754.                 { $_[2] =~ /^([^\s]+)/; ++$AGENT_OS{$1}; }
  755.             # else { ++$AGENT_OS{'-etc-'}; print "$agent<BR>\n"; }
  756.         }
  757.  
  758.         # 、ス、ホツセ・ウ・ム・チ
  759.         elsif ($_[0] eq 'compatible') {
  760.             if ($_[1] =~ '^([^/]*)/.*') {        # ver.ノスオュ、ャ、「、、テ、ン、、
  761.                 ++$AGENT{$1};                    # ver.ノスオュ、、
  762.             } else {
  763.                 ++$AGENT{$_[1]};                # 、ス、ホ、゙、゙コホヘム
  764.             }
  765.         }
  766.  
  767.         # 、ス、ヲ、、、ヲ、、ア、ヌ、筅ハ、、ネッ、ハホゥセ、ホ、荀ト
  768.         else {
  769.             if ($_[0] =~ "^DreamPassport/") {
  770.                 ++$AGENT{'DreamPassport'};
  771.             } elsif ($_[0] =~ "^PNWalker/") {
  772.                 ++$AGENT{'PNWalker'};
  773.             } elsif (($nnver == 3.01) && (!$_[1])) {    # CacheFlow
  774.                 ++$AGENT{'CacheFlow'};
  775.             } else {                                    # ヒワナヒ・゙・、・ハ。シ。ゥ
  776.                 ++$AGENT{'-etc-'};
  777.             }
  778.         }
  779.     }
  780.  
  781.     ### Mozilla、セセ隍鬢ハ、、ニネホゥキマ
  782.     else {
  783.         if ($agent =~ '^([^/]*)/.*') {            # ver.ノスオュ、ャ、「、、テ、ン、、
  784.             ++$AGENT{$1};                        # ver.ノスオュ、、
  785.         } else {
  786.             ++$AGENT{$agent};                    # 、ス、ホ、゙、゙コホヘム
  787.         }
  788.     }
  789. }
  790.  
  791.  
  792. ;### イ靂フセォ・ヲ・ネ、ケ、・゙・ッ・
  793. sub Macro_CountScreen {
  794.     unless (($screen eq '') || ($screen eq '-')) {
  795.         split(/,/, $screen);
  796.         $_[0] = &func::C62_Decode($_[0]);
  797.         $_[1] = &func::C62_Decode($_[1]);
  798.         $_[2] = &func::C62_Decode($_[2]);
  799.         ++$SCREEN{"$_[0]x$_[1]x$_[2]"};
  800.         ++$SCREEN_SIZE{"$_[0]x$_[1]"};
  801.         ++$SCREEN_COLOR{"$_[2]"};
  802.     }
  803. }
  804.  
  805.  
  806. ;### ・ウ。シ・ノ、莊ュケ讀ユフ」、「、ハクサ昀ヒハムエケ、ケ、
  807. sub Macro_ChangeList {
  808.     ### サイセネクオ
  809.     foreach (@ref) {
  810.         ($n, $data) = split(/\t/);
  811.  
  812.         if ($data eq '-') {
  813.             $data = '・ヨ・テ・ッ・゙。シ・ッ。ヲ、ェオ、、ヒニ、熙ォ、 / ・愠ワ・テ・ネ。ヲス茣ス・ユ・ネ / URLトセツヌ、チ / サイセネクオ、」ハテ、キ、ニ、ホ・「・ッ・サ・ケ';
  814.         } elsif ($data eq 'noscript') {
  815.             $data = 'JavaScript、リサ゚。「ヒマサネヘムスミヘ隍ハ、、・ヨ・鬣ヲ・カ、ヒ、隍サイセネクオシ霹タシコヌヤ';
  816.         } elsif ($data eq '-own-') {
  817.             $data = 'シォ・オ・、・ネニ筅ヌ、ホーワニー';
  818.         } elsif ($data eq '-search-') {
  819.             $data = '(efStat、ヒナミマソ、オ、、ニ、、、)・オ。シ・チ・ィ・ク・ォ、';
  820.         } else {
  821.             $data =~ s"^!"http://";
  822.             if (($DoLink) && ($data =~ /^http/)) {
  823.                 $data = &func::MakeLink($data, 1);
  824.             } else {
  825.                 $data = &func::URLdecode($data);
  826.             }
  827.         }
  828.  
  829.         $_ = "$n\t$data";
  830.     }
  831.  
  832.     ### ・オ・、・ネニ箍ワニーハャタマ
  833.     &change_a(\@ref_own);
  834.  
  835.     ### ・オ。シ・チ・ィ・ク・
  836.     &change_a(\@ref_search);
  837.  
  838.     ### TINAMI・ォ・ニ・エ・
  839.     foreach (@ref_tinami) {
  840.         ($n, $data) = split(/\t/);
  841.  
  842.         if ($TABLE{'tinami'}{$data}) {
  843.             $data = "[C] $TABLE{'tinami'}{$data}";
  844.         } else {
  845.             $data = &func::URLdecode($data);
  846.         }
  847.  
  848.         $_ = "$n\t$data";
  849.     }
  850.  
  851.     ## Surfers Paradice
  852.     &change_a(\@ref_sp);
  853.  
  854.  
  855.     ### ・ォ・ネ・遙シ・ウ。シ・ノ
  856.     foreach (@host_dm) {
  857.         ($n, $data) = split(/\t/);
  858.  
  859.         if ($data eq 'ipaddr') {
  860.             $data = "・ノ・皈、・スハフ、ヌ、ュ、コ (<B>IP・「・ノ・・ケ</B>)";
  861.         } elsif ($data eq '-') {
  862.             $data = "<B><FONT SIZE=+1>[キルケ IPオュマソフオ、キ</FONT><BR>(・ォ・ヲ・ソ、ELNET、ォ、鯑セタワシツケヤ?)</B>";
  863.         } elsif ($TABLE{'cctld'}{$data}) {
  864.             $data = "$TABLE{'cctld'}{$data} (\*.<B>${data}<\/B>)";
  865.         } else {
  866.             $data = "フ、トオチ、ホケメ・ウ。シ・ノ (*.<B>${data}<\/B>)";
  867.         }
  868.  
  869.         $_ = "$n\t$data";
  870.     }
  871.  
  872.     ## ニヒワツ2・・ル・・ノ・皈、・
  873.     foreach (@host_dm_jp) {
  874.         ($n, $data) = split(/\t/);
  875.  
  876.         if ($TABLE{'jpdomain'}{$data}) {
  877.             $data = "$TABLE{'jpdomain'}{$data} (\*.<B>${data}<\/B>.jp)";
  878.             $_ = "$n\t$data";
  879.         }
  880.     }
  881.  
  882.     ## ハニケ2・・ル・・ノ・皈、・
  883.     foreach (@host_dm_us) {
  884.         ($n, $data) = split;
  885.  
  886.         if ($TABLE{'gtld'}{$data}) {
  887.             $data = "$TABLE{'gtld'}{$data} (\*.<B>${data}<\/B>)";
  888.             $_ = "$n\t$data";
  889.         }
  890.     }
  891.  
  892.     ### User Agent
  893.     foreach (@agent) {
  894.         ($n, $data) = split(/\t/);
  895.  
  896.         if ($data eq '-etc-') {
  897.             $data = "、ス、ホツセ";
  898.         } elsif ($data eq '-') {
  899.             $data = "フセセホノヤフタ";
  900.         } elsif ($TABLE{'agent'}{$data}) {
  901.             $data = "${data}<BR>$TABLE{'agent'}{$data}";
  902.         }
  903.  
  904.         $_ = "$n\t$data";
  905.     }
  906.  
  907.     foreach (@screen_color) {
  908.         ($n, $data) = split;
  909.  
  910.         $data = "${data}bit";
  911.         $_ = "$n\t$data";
  912.     }
  913.  
  914.     sub change_a {
  915.         my($array) = @_;
  916.         my($line, $n, $data);
  917.         foreach $line (@$array) {
  918.             ($n, $data) = split(/\t/, $line);
  919.             $data = &func::URLdecode($data);
  920.             $line = "$n\t$data";
  921.         }
  922.     }
  923. }
  924.  
  925.  
  926. ;### スミホマヘム、ホ・ニ。シ・ヨ・、釥
  927. ;### ノスシィ・筍シ・ノ, ノスツ, ケ猯ワ, ウ荀ソ, ノ鄧猯ワ1, ノ鄧猯ワ2(ウ荀ソ), ノスシィイシクツ, ノスシィ、オ、サ、ヌロホ
  928. sub Macro_PutTable_a {
  929.     my($mode, $title, $item, $div, $sub1, $sub2, $limit, $array) = @_;
  930.     my($buf, $n, $data, $line, $ave, $width);
  931.  
  932.     unless (@$array == ()) {
  933.         if (($sub2==0) || ($SAMPLES==0)) { $ave = 0; }                            #0スササツミコ
  934.         else { $ave = sprintf("%2.1f", ($sub2*100)/$SAMPLES); }
  935.  
  936.         ### ノスツ
  937.         print "<TABLE border=1 cellspacing=0 cellpadding=1${tbc[5]}>\n";
  938.  
  939.         print "\t<TR><TH nowrap colspan=2${tbc[0]}><A HREF=\"#menu\"><FONT size=+1>「」 $title 「」</FONT></A><BR>";
  940.         if    ($mode == 0) { print "<FONT size=-1>(・オ・ラ・チ暠 : $div)</FONT>"; }                                                                                #トフセノスシィ
  941.         elsif ($mode == 1) { print "(<SUP>$sub1 : $sub2 ($ave%)</SUP> / <SUB>チエツホ : $SAMPLES</SUB>)<BR><FONT size=-1>(ヘュク妺オ・ラ・チ暠 : $div)</FONT>"; }        #TINAMI,SPハャタマヘム
  942.         elsif ($mode == 2) { print "(<SUP>$sub1 : $sub2 ($ave%)</SUP> / <SUB>チエツホ : $SAMPLES</SUB>)"; }                                                            #ケ筵ノ・皈、・,IE・キ・ァ・「,NN・キ・ァ・「ヘム
  943.         print "</TH></TR>\n";
  944.  
  945.         ### ノス、ホケ猯ワ
  946.         print "\t<TR><TH nowrap${tbc[1]}>キソ</TH>";
  947.         print "<TH${tbc[2]}>$item</TH></TR>\n";
  948.  
  949.         ### ノス、ホテ豼ネ
  950.         foreach $line (@$array) {
  951.             ($n, $data) = split(/\t/, $line);
  952.             $n = int($n);
  953.  
  954.             if (($n==0) || ($div==0)) { $ave = 0; }
  955.             else {
  956.                 $ave_old = $ave;
  957.                 $ave = sprintf("%2.1f",($n*100)/$div);
  958.                 $width = int($ave);
  959.                 $width = 1 if ($width < 1);
  960.             }
  961.  
  962.             print "\t<TR><TD>";
  963.             print "<IMG src=\"lib/b.gif\" height=10 width=${width}>" if ($DoPutGraph);
  964.             print " $n";
  965.             if ($ave_old != $ave) { print " ($ave%)"; }
  966.             print "</TD>";
  967.  
  968.             print "<TD${tbc[6]}>${data}</TD></TR>\n";
  969.         }
  970.  
  971.         ### ノスシィイシクツ、ャサリト熙オ、、ニ、、、セケ遑「テ晴皃スシィ
  972.         print "\t<TR><TD colspan=2 align=right${tbc[0]}><FONT size=-1><B>$limitキーハイシセハホャ</B></FONT></TD></TR>\n" unless ($limit == 0);
  973.         print "</TABLE>\n";
  974.     }
  975. }
  976.  
  977.  
  978. ;### ・ォ・ヲ・ソスクキラノス - イ」テヨ、ュ
  979. ;### ノスシィ・ソ・、・ラ, ケ猯ワシハフ, マ「チロヌロホ
  980. ;### ・ソ・、・ラ: 0=トフセ, 1=[・オ・、・ネチエツホ]、ャ、ハ、、, 2=[キラ]、ャ、ハ、、, 3=ホセハフオ、、
  981. sub Macro_PutTable_b {
  982.     my($type, $ptr, $hash) = @_;
  983.     my($colspan, @sum);
  984.  
  985.     if   (($type==2) || ($type==3)) {                        #[・レ。シ・クキラ]、スシィ、キ、ハ、、
  986.         $colspan = @$ptr;
  987.     } else { $colspan = @$ptr+1; }
  988.  
  989.     ### ケ猯ワ(ノスツ)
  990.     print "<TABLE border=1 cellspacing=0 cellpadding=1${tbc[6]}>\n";
  991.     print "\t<TR><TH colspan=${colspan}${tbc[0]}><A href=\"#menu\"><FONT size=+1>「」 $ptr->[0] 「」</FONT></A></TH></TR>\n";
  992.  
  993.     ### ケヤ : ケ猯ワ
  994.     print "\t<TR${tbc[5]}><TH nowrap${tbc[1]}>。。</TH>";
  995.     for ($i=1 ; $i < @$ptr ; $i++) { print "<TH>$ptr->[$i]</TH>"; }
  996.     ### ホ : ・レ。シ・クキラ
  997.     print "<TH${tbc[4]}>・レ。シ・クキラ</TH>" unless (($type==2) || ($type==3));
  998.     print "</TR>\n";
  999.  
  1000.     ### ケヤ : ニ簣ニ
  1001.     foreach (@filename) {
  1002.         print "\t<TR align=right><TH${tbc[2]}>$_</TH>";
  1003.  
  1004.         split(/\t/, $$hash{ $_ });
  1005.         foreach (@_) {
  1006.             $_ = &func::C62_Decode($_);
  1007.         }
  1008.         $all = &func::CalcSum(@_);
  1009.  
  1010.         for ($i=0 ; $i < @$ptr-1 ; $i++) {
  1011.             if (($_[$i]==0) || ($all==0)) { $ave = 0; }
  1012.             else {
  1013.                 $ave = sprintf("%2.1f",($_[$i]*100)/$all);
  1014.             }
  1015.             $height = int($ave);
  1016.             $height = 1 if ($height < 1);
  1017.  
  1018.             print "<TD valign=\"bottom\">";
  1019.             print "<IMG src=\"lib/b.gif\" height=${height} width=10 alt=\"$ave%\"><BR>" if ($DoPutGraph);
  1020.             print "$_[$i]";
  1021.             print "</TD>";
  1022.             $sum[$i] += $_[$i];
  1023.         }
  1024.         ### ホ : [・レ。シ・クキラ]
  1025.         unless (($type==2) || ($type==3)) {
  1026.             print "<TH${tbc[8]}>$all</TH>";
  1027.         }
  1028.         print "</TR>\n";
  1029.     }
  1030.  
  1031.     ### ケヤ : ・オ・、・ネチエツホ
  1032.     unless (($type==1) || ($type==3)) {
  1033.         print "\t<TR align=right${tbc[7]}><TH nowrap${tbc[3]}>・オ・、・ネキラ</TH>";
  1034.         $all = &func::CalcSum(@sum);
  1035.         foreach (@sum) {
  1036.             if (($_==0) || ($all==0)) { $ave = 0; }
  1037.             else {
  1038.                 $ave = sprintf("%2.1f",($_*100)/$all);
  1039.             }
  1040.             $height = int($ave);
  1041.             $height = 1 if ($height < 1);
  1042.  
  1043.             print "<TH valign=\"bottom\">";
  1044.             print "<IMG src=\"lib/b.gif\" height=${height} width=10 alt=\"$ave%\"><BR>" if ($DoPutGraph);
  1045.             print "$_";
  1046.             print "</TH>";
  1047.         }
  1048.         ### ホ : ク。ササノ ([・レ。シ・クキラ] = [・オ・、・ネキラ])
  1049.         printf("<TH%s>%d</TH>",${tbc[9]}, $all) unless ($type==2);
  1050.         print "<TR>\n";
  1051.     }
  1052.  
  1053.     print "</TABLE>\n";
  1054. }
  1055.  
  1056.  
  1057. ;### ・ォ・ヲ・ソスクキラノス - イ」テヨ、ュ
  1058. ;### ノスシィ・ソ・、・ラ, ケ猯ワシハフ, ノスツ, テアーフ, ケ猯ワソ, マ「チロヌロホ
  1059. ;### ・ソ・、・ラ: 0=トフセ, 1=[・オ・、・ネチエツホ]、ャ、ハ、、, 2=[キラ]、ャ、ハ、、, 3=ホセハフオ、、
  1060. ;### クトハフ・筍シ・ノ: 0=トフセ, 1=ヘヒニハフスクキラ, 2=キ鑅フスクキラ
  1061. sub Macro_PutTable_c {
  1062.     my($type, $mode, $title, $sub, $max, $assoc_array) = @_;
  1063.     my($colspan, @sum, @d, @w);
  1064.     @w=('ニ','キ','イミ','ソ','フレ','カ','ナレ');
  1065.  
  1066.     if   (($type==2) || ($type==3)) {                        #[・レ。シ・クキラ]、スシィ、キ、ハ、、
  1067.         $colspan = $max+1;                                    # -> ホコ、鬢ケ
  1068.     } else { $colspan = $max+2; }
  1069.  
  1070.     ### ケ猯ワ(ノスツ)
  1071.     print "<TABLE border=1 cellspacing=0 cellpadding=1${tbc[6]}>\n";
  1072.     print "\t<TR><TH colspan=${colspan}${tbc[0]}><A href=\"#menu\"><FONT size=+1>「」 $title 「」</FONT></A></TH></TR>\n";
  1073.  
  1074.     ### ケヤ : ケ猯ワ
  1075.     print "\t<TR${tbc[5]}><TH nowrap${tbc[1]}>。。</TH>";
  1076.     for ($i=0 ; $i < $max ; $i++) {
  1077.         print "<TH>";
  1078.         if    ($mode == 0) { print "$i$sub"; }                #トフセ
  1079.         elsif ($mode == 1) { print "$w[$i]$sub"; }            #ヘヒニハフスクキラ
  1080.         elsif ($mode == 2) { printf("%d$sub", $i+1); }        #キ鑅フスクキラ
  1081.         print "</TH>";
  1082.     }
  1083.     ### ホ : ・レ。シ・クキラ
  1084.     unless (($type==2) || ($type==3)) { print "<TH${tbc[4]}>・レ。シ・クキラ</TH>"; }
  1085.     print "</TR>\n";
  1086.  
  1087.     ### ケヤ : ニ簣ニ
  1088.     foreach $line (@filename) {
  1089.         print "\t<TR align=right><TH${tbc[2]}>$line</TH>";
  1090.  
  1091.         split(/\t/, $$assoc_array{ $line });
  1092.  
  1093.         for ($i=0 ; $i < $max ; $i++) {
  1094.             $_[$i] = &func::C62_Decode($_[$i]);
  1095.             print "<TD>$_[$i]</TD>";
  1096.             $sum[$i] += $_[$i];
  1097.         }
  1098.         ### ホ : [・レ。シ・クキラ]
  1099.         unless (($type==2) || ($type==3)) {
  1100.             printf("<TH%s>%d</TH>",${tbc[8]}, &func::CalcSum(@_));
  1101.         }
  1102.         print "</TR>\n";
  1103.     }
  1104.  
  1105.     ### ケヤ : ・オ・、・ネチエツホ
  1106.     unless (($type==1) || ($type==3)) {
  1107.         print "\t<TR align=right${tbc[7]}><TH nowrap${tbc[3]}>・オ・、・ネキラ</TH>";
  1108.         for ($i=0 ; $i < $#sum+1 ; $i++) { print "<TH>$sum[$i]</TH>"; }
  1109.         ### ホ : ク。ササノ ([・レ。シ・クキラ] = [・オ・、・ネキラ])
  1110.         unless ($type==2) { printf("<TH%s>%d</TH>",${tbc[9]}, &func::CalcSum(@sum)); }
  1111.         print "<TR>\n";
  1112.     }
  1113.  
  1114.     print "</TABLE>\n";
  1115. }
  1116. 1;
  1117.