#!/usr/mesh/bin/perl # # program name : showldc.cgi (Show Link Destination Counts) # # function : Show Link-Destination-Counts on Web page. # # note : This counter is made for web site where cgi written by perl # is available. # # programmer : makoto takenaka : takesoft@mxs.meshnet.or.jp # # copyright : (c) 1996 by Takesoft # # version(date): # 1.0(Nov 5, 1996) # 1.1(Nov 6, 1996) Add URL numbering column to table. # 1.2(Nov 9, 1996) Add knum, first and last parameters. # 1.3(Nov 10, 1996) Add tail parameter. # 1.4(Nov 15, 1996) Add bdir, ldc1 and s_count parameters. # Change die to "exit 1" in sub error_message. # Table is centered. sub error_message does not # mail, but print out error message. # 1.5(Dec 20, 1996) Show total hit counts $total. # # parameters : # order=1 (original URL order) # 2 (descending order) # 3 (ascendting order) # 4 (URL-alphabetic order) # knum=0 (no numbering) # 1 (normal numbering) # 2 (reverse numbering) # first=n (first URL data to be shown, def is 1) # last=n (lase URL data to be shown, def is 1000000) # tail=n (show last n URL) # # Form Button (1): #
# # # # #
# # Form Button (2): #
# # # # #
# # Anchor tag : # [TOP 20] # shows top 20 URL with numbering. # #(1) Send Content-type to browser. # print "Content-type: text/html\n\n"; # #(2) set constants and initial value. # $limit = 1000000; # size limit of ldc1.txt file for sorting(byte) $def_bdir = "./"; # default name of directory $def_ldc1 = "ldc1"; # default ldc1 file(.txt) $def_s_count = "s_count"; # default s_count file(.txt) $showldc_cgi = "showldc.cgi"; # URL of showldc.cgi $link_page = "link.html"; # URL of link page $home_page = "../index.html"; # URL of home page # $url_number = 0; # URL number # # If absolute directory name is required, change $def_bdir such as # "/home*/user_id/public_html/link/" or # "/home/usr*/user_id/public_html/link/", # where * is a number, "link" is an example of directory of link page. # #(3) get parameters from string. # $buffer = $ENV{'QUERY_STRING'}; # @pairs = split(/&/, $buffer); # foreach $pair (@pairs) { ($name, $value) = split(/=/, $pair); $parameters{$name} = $value; } # $order = $parameters{'order'}; unless($order) {$order = 1;} # Default for $order is 1. $knum = $parameters{'knum'}; $first = $parameters{'first'}; unless($first) {$first = 1;} # Default for $first is 1. $last = $parameters{'last'}; unless($last) {$last = 1000000;} # Default for $last is a big number. $tail = $parameters{'tail'}; $bdir = $parameters{'bdir'}; unless($bdir) {$bdir = $def_bdir;} # name of base directory $ldc1 = $parameters{'ldc1'}; unless($ldc1) {$ldc1 = $def_ldc1;} $s_count = $parameters{'s_count'}; unless($s_count) {$s_count = $def_s_count;} # $ldc1_file = "$bdir$ldc1.txt"; # file of link destination count $s_count_file = "$bdir$s_count.txt"; #number of guests to showldc.cgi # if(-e $ldc1_file) { $ldc1_size = (-s $ldc1_file); # Get size of ldc1_file. if($ldc1_size > $limit) { print "ldc1.txt file size ($ldc1_size bytes) is lager than $limit.\n"; print "Sorting is not available, show as present order.\n"; $order = 1; } } else {&error_message("(3): File $ldc1_file is not found.");} # #(4) Print first part of Web page. # #(4.1) Set counter. # open(COUNTFILE, "+< $s_count_file") || &error_message("(4.1): Unable to open $s_count_file"); flock(COUNTFILE, 2); $scount = ; $scount = $scount + 1; seek(COUNTFILE, 0, 0); print COUNTFILE $scount; flock(COUNTFILE, 8); close(COUNTFILE); # #(4.2) Print tags. # print < Link Destination Counts

[ACCESS #$scount]

Link Destination Counts


EOF print "\n"; if($knum){print "";} print ""; # #(5) Original order($order = 1) # #(5.1) Open $ldc1_file. # if($order == 1) { open(LDC1, "$ldc1_file") || &error_message("(5): Unable to open $ldc1_file as read only file"); # #(5.2) Get number of lines $nlines if $knum=2 or $tail>0. # if(($knum > 1) || ($tail > 0)) { $nlines = 0; while(){$nlines++;} seek(LDC1, 0, 0); if($tail) { $first = $nlines - $tail + 1; $last = $nlines } } # #(5.3) Show each URL line. # $total = 0; # while() { $url_number = $url_number + 1; chop; ($count, $url, $comment) = (/^(\S+)\s+(\S+)\s*(.*)/); $total = $total + $count; next if($url_number < $first); if($url_number <= $last) { print ""; if($knum == 1){print "";} elsif($knum == 2) { $reverse = $nlines - $url_number + 1; print ""; } print ""; if($comment) {print "";} else {print "";} print "\n"; } } close(LDC1); # go to (9); } # #(6) Read ldc1.txt for $order > 1. # else { open(LDC1, "$ldc1_file") || &error_message("(4): Unable to open $ldc1_file as read only file"); # @ldc_data = ; close(LDC1); # $nlines = @ldc_data; # if($tail) { $first = $nlines - $tail + 1; $last = $nlines } # #(7) Sort @ldc_data for $order > 1. # #(7.1) Set key data. # $total = 0; # foreach(@ldc_data) { ($count, $url) = split; push(@datakeys, $count); push(@urlname, $url); $total = $total + $count; } # #(7.2) Descending order # if($order == 2) { sub descending_order{($datakeys[$b] <=> $datakeys[$a]) || ($urlname[$a] cmp $urlname[$b]);} @ldc_data = @ldc_data[sort descending_order $[..$#ldc_data]; } # #(7.3) Ascending order # elsif($order == 3) { sub ascending_order{($datakeys[$a] <=> $datakeys[$b]) || ($urlname[$a] cmp $urlname[$b]);} @ldc_data = @ldc_data[sort ascending_order $[..$#ldc_data]; } # #(7.4) Alphabetic order of url # elsif($order == 4) { sub alphabetic_order{$urlname[$a] cmp $urlname[$b];} @ldc_data = @ldc_data[sort alphabetic_order $[..$#ldc_data]; } else {&error_message("(7.4): \$order is wrong. \$order = $order");} # #(8) Print count data for $order > 1. # foreach(@ldc_data) { $url_number = $url_number + 1; last if($url_number > $last); next if($url_number < $first); chop; ($count, $url, $comment) = (/^(\S+)\s+(\S+)\s*(.*)/); print ""; if($knum == 1){print "";} elsif($knum == 2) { $reverse = $nlines - $url_number + 1; print ""; } print ""; if($comment) {print "";} else {print "";} print "\n"; } } # #(9) Print last tags. # $parms=""; if($bdir ne $def_bdir) {$parms = "bdir=${bdir}&";} if($ldc1 ne $def_ldc1) {$parms = "${parms}ldc1=${ldc1}&";} if($s_count ne $def_s_count) {$parms = "${parms}s_count=${s_count}&";} # print ""; if($knum > 0) {print "";} print "\n"; print "
TABLE 1 Hit Counts of URL "; if($order == 1) {print "(Original Order)";} elsif($order == 2){print "(Descending Order)";} elsif($order == 3){print "(Ascending Order)";} elsif($order == 4){print "(URL-Alphabetic Order)";} else {print "(\$order is wrong.)";} print "
NumberCountURLComments
$url_number$reverse$count$url$comment
$url_number$reverse$count$url$comment

$totalTotal URL hit counts

\n"; print "[Original Order]\n"; print "[Descending Order]\n"; print "[Ascending Order]\n"; print "[URL-Alphabetic Order]
\n"; print "[Back to Link Page]\n"; print "[Back to Home Page]\n"; print "
\n"; # #(10) Normal end of main program # exit 0; # sub error_message { local($message) = @_; # #(sub routine) Print error message and stop. # print "Error Message from showldc.cgi of Web page: \n"; print "$message\n"; # # stop this perl program. # exit 1; }