#!/usr/bin/perl

$guest_log = "./guest.log";
$guest_cgi = "http://www.railpage.org.au/guestbook.cgi";

$date = `date`;
chop($date);


# HTML for user interface

sub main_page_top
{
 print <<"EOT";

  <HEAD>
  <TITLE>RailPage guestbook</TITLE>
  </HEAD>

  <BODY BGCOLOR = "#FFFFFF" TEXT = "#000000" LINK = "#0000FF" VLink ="#FF0000">

  <CENTER>
  <IMG SRC="rp_sign.gif"><P>
  <h2><A HREF="$guest_cgi?add">Sign guestbook</A></h2>
  </CENTER>
  <P>

EOT
}


sub main_page_bottom
{
   print <<"EOT";

   <P><HR><P>

   <A HREF=\"./\">Back to RailPage</A><P>

  Guestbook script coded by David Bromage. Held together with putty and
bits of wire.

EOT
}


sub entry_page_top
{
 print <<"EOT";

  <HEAD>
  <TITLE>RailPage guestbook</TITLE>
  </HEAD>

  <BODY BGCOLOR = "#FFFFFF" TEXT = "#000000" LINK = "#0000FF" VLink ="#FF0000">

  <CENTER><h2>Sign guestbook</h2></CENTER>

  <P>

EOT
}



# The guts of the script

@ARGV = split(/\\*\&/, $ENV{'QUERY_STRING'});

if ($ARGV[0] eq "add") { &add_to_guestbook; }

# Get the input
read(STDIN, $buffer, $ENV{'CONTENT_LENGTH'});

# Split name-value pairs
@pairs = split(/&/, $buffer);

foreach $pair (@pairs) 
{
   ($name, $value) = split(/=/, $pair);

   # dewebify plus signs and %-encoding
   $value =~ tr/+/ /;
   $value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C", hex($1))/eg;
   $value =~ s/<!--(.|\n)*-->//g;

   # remove HTML tags
   $value =~ s/<([^>]|\n)*>//g;

   $FORM{$name} = $value;
} 

print "Content-Type: text/html\n\n";

if ($FORM{'new'})
{

$FORM{'comments'} =~ s/\cM//g;
$FORM{'comments'} =~ s/\n\n/<P>/gi;
$FORM{'comments'} =~ s/\n/ /g;


open(GUESTLOG, "$guest_log");
flock(GUESTLOG, 2);
@FILE = <GUESTLOG>;
close(GUESTLOG);
flock(GUESTLOG, 8);

	print GUESTLOG "Content-Type: text/plain\n\n";

open(GUESTLOG, ">$guest_log");
flock(GUESTLOG, 2);

print GUESTLOG "$FORM{'name'}&nbsp;&nbsp;";
print GUESTLOG "<A HREF=\"mailto:$FORM{'emailadd'}\">$FORM{'emailadd'}</A><BR>";
print GUESTLOG "$FORM{'comments'}<BR>";
print GUESTLOG "$date<BR>";
print GUESTLOG "<P>\n";
print GUESTLOG @FILE; 

close(GUESTLOG);
flock(GUESTLOG, 8);


# Thank user

print <<"EOT";

<HEAD>
<META HTTP-EQUIV="Refresh" CONTENT="0; URL=$guest_cgi">
<TITLE>Thankyou</TITLE>
</HEAD>

<BODY BGCOLOR = "#FFFFFF" TEXT = "#000000" LINK = "#0000FF" VLink ="#FF0000">

<CENTER> 
<h2>Your comments have been recorded. Thankyou.</h2><BR>
</CENTER>

<BR><HR><BR>

<A HREF=\"$guest_cgi\">Back</A> to Guestbook</B>

EOT



if ($FORM{'new'}) {}
    
}

else

{

&main_page_top;

open(GUESTLOG, "$guest_log");
flock(GUESTLOG, 2);
@filein = <GUESTLOG>;
close(GUESTLOG); 
flock(GUESTLOG, 8);

print @filein;

&main_page_bottom;

}



# Name field blank

sub no_name 
{
   print "Content-type: text/html\n\n";
   print "<head><title>No Name</title></head>\n";
   print "<body BGCOLOR=#FFCC00 TEXT=BLACK><h1>No name entered.</h1>\n";
   print "  Please go <b>BACK</b> and enter your name.<P>\n";
   print "\n</body>\n";

   exit;
}



# Comments field blank

sub no_comments 
{
   print "Content-type: text/html\n\n";
   print "<head><title>No Comments</title></head>\n";
   print "<body BGCOLOR=#FFCC00 TEXT=BLACK><h1>No comments entered.</h1>\n";
   print "  Please go <b>BACK</b> and enter your comments.<P>\n";
   print "\n</body>\n";
  
   exit;
}


# Add to guestbook

sub add_to_guestbook 

{

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

&entry_page_top;

print <<"EOT";

<FORM METHOD="POST" ACTION="$guest_cgi">

<INPUT TYPE="HIDDEN" NAME="new" VALUE="new">

<CENTER>
<table border=0 cellpadding=10 bgcolor=#CCCCCC>
<tr><td>
<FONT COLOR=BLACK>
        <b>Name</b><br>
        <input type=text name="name" size=60><P>

        <b>Email address</b>: (optional)<br>
        <input type=text name="emailadd" size=60><P>

        <b>Comments</b><br>
        <textarea name="comments" WRAP=physical COLS=60 ROWS=5></textarea><P>
</FONT>
</td></tr>

<tr><td align=center>
        <input type=submit value="Post comments">

        <input type=reset value="Reset form"><br>
</td></tr>

</table>
</CENTER>

</form>
<hr>

</body>

EOT
exit;
}



	
