#!/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"; print "\n"; print "TYPE A "TICK NUMBER":
\n"; print "

\n"; print " \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; }