#!/usr/local/bin/perl
#
# Brad Donison bdonison@grmi.org
# 4 Aug 95
#
# updates the access count and prints it for a specified file
#
# usage:
# counter
#
# NOTE: it looks at the url that is running, and creates a counter file if
#       none exists.  Then it just appends a single character to the file,
#       and then prints the size of the file.

unshift(@INC, '/local/www/tools');
unshift(@INC, '.');

require "digits.pl";

$what = $ARGV[0];

if ($what eq "MYSELF") {
  print "http://", $ENV{'SERVER_NAME'};
  print ":", $ENV{'SERVER_PORT'} if ($ENV{'SERVER_PORT'} ne "80");
  $earl = $ENV{'DOCUMENT_URI'};
  $earl =~ s/\/index\.html/\//i;
  print $earl;
} elsif ($what eq "DOCUMENT_URI") {
  $earl = $ENV{'DOCUMENT_URI'};
  $earl =~ s/\/index\.html/\//i;
  print $earl;
} elsif ($what eq "DATE_MODIFIED") {
  $wen = $ENV{'LAST_MODIFIED'};
  @ever = split(/ /, $wen);
  print $ever[0], " ", $ever[1];
} elsif ($what eq "TZ") {
  $tz = $ENV{'DATE_LOCAL'};
  @TZ = split(/ /, $tz);
  print $TZ[$#TZ];
} elsif ($what eq "COUNTER") {
  $c = &counter;
  print $c;
} elsif ($what eq "NUMBER") {
  $c = &counter;
  &number($c);
} elsif ($what eq "ODOMETER") {
  $c = &counter;
  &odo($c);
} elsif ($what eq "RAINBOW") {
  $c = &counter;
  &rain($c);
} elsif ($what) {
  print $ENV{$what};
} else {
  foreach $key (sort keys %ENV) {
    print "<B>", $key, "</B> = ", $ENV{$key}, "<BR>\n";
  }
}

sub counter {
  $base = "/local/www/tools/counters/";
  $me = $ENV{'DOCUMENT_URI'};
  $me =~ s/\//=/g;
  $log = $base.$me.".count";

  open (LOGFILE, ">> $log");
  print LOGFILE "x";
  close (LOGFILE);
  @info = stat($log);
  return ($info[7]);
}

# Displays graphic odometer for web pages
sub number {
  local($number) = @_;

  local($base) = "/local/www/httpd/htdocs/pics/meter/";
  local($me) = $ENV{'DOCUMENT_URI'};
  $me =~ s/\//=/g;
  local($numfile) = $base.$me.".xbm";

  if (!$number) {
    exit;
  }

  &digits($number, $numfile);
  select STDOUT;
  print "<IMG SRC=\"/pics/meter/", $me, ".xbm\" height=16 width=80>\n";
}

# Displays graphic odometer for web pages
sub odo {
  local($number) = @_;

  local($base) = "/local/www/httpd/htdocs/pics/meter/";
  local($me) = $ENV{'DOCUMENT_URI'};
  $me =~ s/\//=/g;
  local($numfile) = $base.$me.".xbm";

  if (!$number) {
    exit;
  }

  &digits($number, $numfile, 1);
  select STDOUT;
  print "<IMG SRC=\"/pics/meter/", $me, ".xbm\" height=16 width=80>\n";
}

sub rain {
  local($number) = @_;

  local($base) = "/local/www/httpd/htdocs/pics/meter/";
  local($me) = $ENV{'DOCUMENT_URI'};
  $me =~ s/\//=/g;
  local($numfile) = "/tmp/".$me.$$.".xbm";
  local($pbmfile) = "/tmp/".$me.$$.".pbm";
  local($pgmfile) = "/tmp/".$me.$$.".pgm";
  local($ppmfile) = "/tmp/".$me.$$.".ppm";
  local($file1) = "/local/www/tools/bow.ppm";
  local($file2) = "/tmp/".$me.$$."1.ppm";
  local($result) = "/tmp/".$me.$$."mixd.ppm";
  local($giffile) = $base.$me.".gif";

  if (!$number) {
    exit;
  }

  &digits($number, $numfile);
  select STDOUT;
  system "/usr/local/bin/xbmtopbm $numfile > $pbmfile";
  sleep 1;
  system "/usr/local/bin/pbmtopgm 2 2 $pbmfile > $pgmfile";
  unlink $numfile;
  system "/usr/local/bin/pgmtoppm \"#E0E0E0E0E0E0\" $pgmfile > $ppmfile";
  unlink $pbmfile;
  system "/usr/local/bin/pnmdepth 255 $ppmfile > $file2";
  unlink $pgmfile;
  system "/usr/local/bin/ppmmix 0.5 $file1 $file2 > $result";
  unlink $ppmfile;
  system "/usr/local/bin/ppmtogif -sort $result > $giffile";
  unlink $file2;
  print "<IMG SRC=\"/pics/meter/", $me, ".gif\" height=16 width=80>\n";
  unlink $result;
}
