#!/usr/bin/perl -w
require 5.004;
use strict;
my (@Query,$CGIPath,$TmpAbs,$TmpVrt,$HtmOut,$HtmTmp);
my ($HtmName,$Status,$ForkVal,$STime,$Elapsed,$Ticks,$Prg,$QI);
$Prg = "demo.cgi";
@Query = split(/&/,$ENV{'QUERY_STRING'});
$CGIPath = $ENV{'SCRIPT_NAME'};
while (chop($CGIPath) ne "/") { }
$TmpAbs = "/www/WEBSERVER/htdocs/tmp";
$TmpVrt = "/tmp";
$HtmName = "demo.html";
$HtmOut = sprintf("%s/%s",$TmpAbs,$HtmName);
$HtmTmp = sprintf("%s/%s.tmp",$TmpAbs,$HtmName);
for ($QI=0;$QI<=$#Query;++$QI) {
if ($Query[$QI] =~ /^Time=/) { ($STime) = ($Query[$QI] =~ /Time=(.*?)$/); }
elsif ($Query[$QI] =~ /^Tick=/) { ($Ticks) = ($Query[$QI] =~ /Tick=(.*?)$/); }
elsif ($Query[$QI] =~ /^STAT=/) { ($Status) = ($Query[$QI] =~ /STAT=(.*?)$/); } }
if (!defined($Status)) { $Status = 0; }
#---- If "Start Page" is selected ----------
if ($Status == 0) { &StartPage; }
#---- If "Processing" is selected ----------
elsif ($Status == 1) {
if (!open(HTMFILE,">$HtmTmp")) { &ErrorMsg(1,$HtmTmp); }
$ForkVal = fork();
if (!defined($ForkVal)) { &ErrorMsg(0,""); }
if ($ForkVal == 0) {
$Elapsed = "00:00:00";
&WaitingPage(sprintf("%s/%s?STAT=2&Time=%s",$CGIPath,$Prg,&CurrTime));
close(STDOUT); close(STDERR); close(STDIN);
exit(0);
}
else {
print HTMFILE &ProcessPage;
close(HTMFILE);
system("mv $HtmTmp $HtmOut");
}
}
#---- If "Waiting Page" is selected ----------
elsif ($Status == 2) {
$Elapsed = &ElapsedTime;
if (-s $HtmOut) { &WaitingPage(sprintf("%s/%s",$TmpVrt,$HtmName)); }
else { &WaitingPage(sprintf("%s/%s?STAT=2&Time=%s",$CGIPath,$Prg,$STime)); }
exit(0);
}
sub ErrorMsg {
my ($Stat,$Mess) = @_;
print "Content-type: text/html \n\n";
print "\n\n\n";
print "
\n DEMO Error Message\n\n\n";
print "\n\n\n";
print "DEMO ERROR MESSAGE
\n
\n";
if ($Stat == 0) { print "!!! System error - could NOT fork process !!!
\n"; }
elsif ($Stat == 1) { print "!!! System error - could NOT write \"HTML\" file '$Mess'!!!
\n"; }
print "\n\n\n";
exit(0);
}
sub StartPage {
print "Content-type: text/html \n\n";
print "\n\n";
print "\n DEMO START PAGE\n\n\n";
print "\n\n
\n";
print "DEMO START PAGE
\n
\n";
print "\n\n\n\n";
}
sub ProcessPage {
my $Html = "\n\n";
$Html .= "\n DEMO PROCESS PAGE\n";
$Html .= " \n\n\n";
$Html .= "\n\n
\n";
$Html .= "DEMO PROCESS PAGE
\n
\n";
$Html .= "...THAT'S THE TEST...
\n
\n";
$Html .= "...go back to the DEMO start page...
\n";
$Html .= "\n\n\n";
sleep($Ticks);
$Html;
}
sub WaitingPage {
my ($Url) = @_;
print "Content-type: text/html \n\n";
print "\n\n";
print "\n ...DEMO is running...\n";
print " \n\n\n";
print "\n\n
\n";
print "...DEMO is running...
\n";
print "
\nDon't go BACK!
\n
\n";
print "Elapsed Time: $Elapsed
\n";
print "\n\n\n";
}
sub CurrTime {
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $LocTime = "$mday $mon $year $wday $yday $isdst";
$LocTime = sprintf("%02d:%02d:%02d",$hour,$min,$sec);
$LocTime;
}
sub ElapsedTime {
my ($Sec,$Min,$Hour,$mday,$mon,$year,$wday,$yday,$isdst) = localtime(time);
my $CTime = "$mday $mon $year $wday $yday $isdst";
$CTime = ((($Hour * 60) + $Min) * 60) + $Sec;
($Hour,$Min,$Sec) = split(/:/,$STime);
my $ITime = ((($Hour * 60) + $Min) * 60) + $Sec;
if ($CTime < $ITime) {
$CTime += 86400; }
my $ETime = $CTime - $ITime;
$Sec = $ETime % 60;
$ETime = ($ETime - $Sec) / 60;
$Min = $ETime % 60;
$Hour = ($ETime - $Min) / 60;
$ETime = sprintf("%02d:%02d:%02d",$Hour,$Min,$Sec);
$ETime;
}