#!/usr/bin/perl

# Name: Selena Sol's Random Banner Generator
#
# Version: 4.0
#
# Last Modified: 07-31-96
#
# Aenderungen von Sven! - Es zeigt keine Bilder mehr an, sondern den
# Bildnamen, so ist es moeglich einfach links als Banner darzustellen.
#
#
# Copyright Info: This application was written by Selena Sol
#   (selena@eff.org, http://www.eff.org/~erict) having been inspired by
#   countless other Perl authors.  Feel free to copy, cite, reference,
#   sample, borrow, resell or plagiarize the contents.  However, if you
#   don't mind, please let me know where it goes so that I can at least
#   watch and take part in the development of the memes. Information wants
#   to be free, support public domain freware.  Donations are appreciated
#   and will be spent on further upgrades and other public domain scripts.


# Note: Take a look at the sample HTML file located in the sub-directory
# Html...it contains an important line <!--IMG GOES HERE--> which must
# appear in any HTML file you want to display a random banner in.
# Once you have configured the setup variables and the HTML file to the
# specifics of your own server setup, you can try out the random banner
# generator.  

#######################################################################
#                       Print http Header.                            #
#######################################################################

# First tell Perl to bypass the buffer so that information generated by
# the CGI will be sent immediately to the browser. The line $! = 1; does
# this. Then, print out the http header so that we will easily be able to
# debug and so that the browser will not time us out.

  $| = 1;
  print "Content-type: text/html\n\n";

#######################################################################
#                       Require Libraries.                            #
#######################################################################

# Further, cgi-lib.pl is loaded and the routine ReadParse is used to read
# and parse any incoming url encoded data.

  require "./random_banner.setup";
  require "$location_of_cgi_lib";
  &ReadParse(*form_data);

#######################################################################
#                       Initialize the Randomizer.                    #
#######################################################################

# Then, Perl's randomizer is accessed using the srand command.

  srand (time|$$);


#######################################################################
#                       Define Database and Html File to Use          #
#######################################################################

# The URL encoded data which may be coming in as form data will be the
# name of the image file that this script should use to find the locations
# of the images as well as the hyperlinks those images are associated
# with. If there was an image file specified in the URL, the script will
# assign that value to the variable $image_database, if there is none, the
# script will use the value of $default_image_list as was defined above.

  if ($form_data{'image_list'} ne "")
    {
    $image_database = $form_data{'image_list'};
    }
  else
    {
    $image_database = "$default_image_list";
    }

# Similarly, the script must determine which HTML file it should display
# with the randomly generated ad.  By default, it will load the HTML file
# defined in  $default_html_file.  However, if the client has specified an
# alternate file to load in the URL string, the script will load that
# instead.

  if ($form_data{'html_file'} ne "")
    {
    $html_file = "$html_directory_path/$form_data{'html_file'}";
    }
  else
    {
    $html_file = "$default_html_file";
    }

#######################################################################
#                       Get the Random Banner and Link.               #
#######################################################################

# Next, the script opens the image file, dying with CgiDie if there is a
# problem opening the image file specified in the URl or defined by
# $default_image_list.

  open (IMAGE_DATABASE, "$image_database") || 
        &CgiDie ("I am sorry, but I was not able to open the image
	databse in the Get the Random Banner and Link routine. The value I
	have  is $image_database.  Would you please check the path and
	permissions.");

# It then goes through the image list file a line at a time and, for every
# line, it gathers the image and the associated hyperlink by splitting the
# line by the pipe (|) symbol.  Further, it pushes the location of the
# image to the list array @imagelist and the associated URL to @url_list.  
# Finally, it closees the image list # file.

  while (<IMAGE_DATABASE>)
    {
    ($image, $url) = split (/\|/, $_);
    chop $url;
    push (@imagelist, $image);
    push (@url_list, $url);
    }
  close (IMAGE_DATABASE);

# Now that the script has a liust of all the images in the image file, it
# uses Perl's randomizer function to choose one of them at random.  Since
# "@imagelist" is interpreted by Perl as the number of values in the
# array, $random_number is set to be a random (rand) integer value (int)
# from zero to the number of images in the @images array.

  $random_number = int(rand(@imagelist));

# Then, the script takes the number assigned to $random_number and access
# the array element in @imagelist that is associated with the number.
# $random_image then becomes the name of one of the images in @imagelist.

  $random_image = $imagelist[$random_number];
  $random_url = $url_list[$random_number];

#######################################################################
#                      Insert Random Banner Into Page                 #
#######################################################################

# Next, the script opens the HTML file that the client has requested to
# see, using CgiDie if it cannot be opened for some reason.

  open (HTML_FILE, "$html_file") ||
        &CgiDie ("I'm sorry, but I was unable to open the requested
	HTML file in the Insert Random Banner Into Page routine.  The
	value I have is $html_file.  Would you please check the path and
	the permissions for the file.");

# The script then reads through the HTML file a line at a time.

  while (<HTML_FILE>)
    {

# If it comes upon a line which looks like the following:
# <!--IMG GOES HERE-->
# the script knows that it is supposed to replace the line with the
# randomly generated image and the associated hyperlink. So, using the
# "here" method of printing, it replaces the line with the HTML code.
# Remember that since the greater than (>) and less tha (<) symbols
# are Perl special characters and must be escaped if they are to be
# treated as patterns to match for.

    if (/\<!--IMG GOES HERE--\>/)
      {
      print qq!
      <A HREF = "$random_url">
      $random_image</A>!;
      }

# If the line is not the special tag, the script simply prints out the
# line. Thus, every line in the HTML file will be displayed through the
# Web browser except for the special tag line, which will be replaced with
# the <IMG> and <A HREF> tags.

    else
      {
      print "$_";
      }
   } # End of while (<HTML_FILE>)

# Finally, the HTML file is closed and the script exits.

  close (HTML_FILE);
