#!/usr/bin/perl
##############################################################################
# Countdown                         Version 1.1                              #
# Copyright 1998-2000 Edward Preble scripts@datatrendsoftware.com            #
# Created 11/30/98                  Last Modified 01/28/00                   #
# Datatrend Softeware               http://www.datatrendsoftware.com/cgi.html#
##############################################################################
# This script will do the following:                                         #
# 1. Is activated by a link,                                                 #
#    "http://www.site.com/scripts/countdown.cgi?file.anything"               #
# 2. Will add a count to "countdown.log", for the proper file.               #
# 3. Will auto-forward to "file.anything" for download.                      #
# 4. The interface is seamless, no user prompts.                             #
##############################################################################
# COPYRIGHT NOTICE                                                           #
# Copyright 1998-2000 Edward Preble  All Rights Reserved.                    #
#                                                                            #
# This script is free.  You may use and modify this script as you please.    #
# Do not remove this header, as it is the only thing that gives me credit    #
# for my work in writing this code. If you wish to sell this code, you       #
# must obtain permission from the authors first.                             #
#                                                                            #
# Scripts provided by Datatrend Software are supplied "as-is". You agree     #
# to indemnify the author's from any liability that may arise from the use   #
# of this script. We will provide support for bugs and operation issues,     #
# but NOT for installation. Sorry for that, but it is just too time          #
# consuming and the volume of requests is truly staggering.                  #
#                                                                            #
# Obtain permission before redistributing this software over the Internet or #
# in any other medium.	In all cases copyright and header must remain intact.#
##############################################################################
#                                                                            #
# You must modify the the location of PERL in the first line above to match  #
# the location on your server. Your system admin must help you with this.    #
# You must also modify the following variables to match your preferences.    #

# This is the counter log filename
$Counter = '/var/sites/files.pceasies.com/countdown.log';

# This is the demo file that will be downloaded
$DownloadFileDir = 'http://files.pceasies.com';

##########################################################
# No changes need to be made after these lines
##########################################################
$File = $ENV{'QUERY_STRING'};
# Strip off anything up to, and including, the last "/", if present
if ($File =~ /\//) { ($File) = $File =~ /^.*\/([^\/]+)$/g; }
$DownloadFile = "$DownloadFileDir/$File";

# Add hit to main counter

open (CNT,"+<$Counter") || &endIt;
flock (CNT,2); seek (CNT,0,0);
@infile = <CNT>;

# This will put the hits in order from max to min for each file added
$record = 0;		# Starting record in the log is always 0
$correctspot = 'N';	# Tells script if this record is the one that was hit

# Proceeds as long as the record number is less than the total 
# number of records in the file and the correct record hasn't been found yet.
while (($correctspot eq 'N') && ($record <= $#infile))  
{ ($count,$filename,$eol) = split(/\|/,$infile[$record]);
  if ($filename eq $File)  #if this is the right record, hit it, trip correctspot
    {$count++;
    $infile[$record] = join ("\|",$count,$filename,"\n");
    $correctspot = 'Y';
    }
  $record++;
}
if ($correctspot eq 'N')
{ $count = 1;
  $newrecord = join ("\|",$count,$File,"\n");
  push @infile, $newrecord;
}

@outfile = sort {($b =~ /(\d+)/)[0] <=> ($a =~ /(\d+)/)[0]} @infile;

seek (CNT,0,0);
print (CNT @outfile);
truncate (CNT,tell(CNT));
close (CNT);

	print "Content-type: text/html\n";
	print "Location: $DownloadFile\n\n";

sub endIt # exit on error
{ exit;
} # end endIt
