#!/usr/local/bin/perl

#
# The variables in angle brackets are updated
# by the web-generation scripts.
#

require  "/usr/faculty/professor/cjlin/server-3.0/server/lib/cgi-lib.pl";
$SERVER_VAR = "/usr/faculty/professor/cjlin/server-3.0/server/var";
$SERVER_BIN = "/usr/faculty/professor/cjlin/server-3.0/server/bin";
$base_href = "http://www.csie.ntu.edu.tw/~cjlin/neos/"; 
$base_dir = "/usr/faculty/professor/cjlin/htdocs/neos"; 
$| = 1;  # turn off I/O buffering


#
# Read in cgi data 
#

$USER = $ENV{REMOTE_HOST}; 
$USER = "TRIAL_WEB_USER\@$USER";
&ReadParse();
$email = $in{"field.0"};
$url   = $in{"field.1"};

#
# Start outputing HTML
#

print "Content-type: text/html\n\n";
print "<HTML>\n";
print "<BODY>\n";

if (length($url)>0) {
  chdir("$SERVER_BIN");
  unless ($data = `./url_get $url`) {
    print "ERROR: Cannot open \"$url\"<br>\n";
    print "       Please correct and resubmit.\n";
    print "</BODY>\n";
    print "</HTML>\n";
    exit 0;
  }
} else {
  print "ERROR: No URL specified.<br>\n";
  print "</BODY>\n";
  print "</HTML>\n";
  exit 0;
}

#
# create job.recieved
#

chdir("$SERVER_VAR/spool/WEB");
chop($tmpFile = `$SERVER_BIN/tempfile`);
open(HANDLE, ">$tmpFile");
print HANDLE "From: $USER\n\n";
print HANDLE "$data\n";
if (length($email)>0) {
  print HANDLE "forward $email\n";
}
close(HANDLE);
system("chmod a+r $tmpFile");

#
# Give job to server in $jobFile and wait
# for job number in $numberFile
#

$jobFile = "websub.$tmpFile";
system("mv $tmpFile $jobFile");
system("touch MAIL");
$numberFile = "$jobFile.number";
while (!-s "$numberFile") {sleep 1;}
chop($JOB = `cat $numberFile`);
system("/bin/rm -f $numberFile");


&clear;

if (fork) {
  print "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"1; URL=$base_href/jobs/$JOB.html\">";
  exit 0;
} else {
  close STDOUT; close STDIN; close STDERR;
}

#
# Update html file with job.out until job.results is ready.
#

do {sleep 1} until (-f "$SERVER_VAR/jobs/job.$JOB/job.out");
open(HANDLE, "$SERVER_VAR/jobs/job.$JOB/job.out");
do {
  $_ = <HANDLE>;
  if (length($_)>0) {
    chop;
    if ((/CLEAR_SCREEN/)||(/END-SOFTWARE-OUTPUT/)) {
      #&clear;
    } else {
      open(WEB, ">>$base_dir/jobs/$JOB.html");
      print WEB "$_<br>\n";
      close(WEB);
    }
  }
  sleep 1;
} until (/END-SOFTWARE-OUTPUT/);


#
# Job results
#

open(WEB, ">$base_dir/jobs/$JOB.html.tmp");
print WEB "<title>testneos Job #$JOB</title>\n"; 
print WEB "<center>\n";
print WEB "[<a href = \"$base_href\" >testneos Server</a>]";
print WEB "</center>\n";
print WEB "<P><hr><br>\n";
print WEB "<PRE>\n";
$RESULTS = `cat $SERVER_VAR/jobs/job.$JOB/job.results`;
print WEB "$RESULTS\n";
print WEB "</PRE>\n";
print WEB "<center>\n";
print WEB "<P><hr><br>\n";
print WEB "[<a href = \"$base_href\" >testneos Server</a>]";
print WEB "</center>\n";
close(WEB);
system("mv $base_dir/jobs/$JOB.html.tmp $base_dir/jobs/$JOB.html");

sub clear {
  open(handle, ">$base_dir/jobs/$JOB.tmp");
  print handle "<META HTTP-EQUIV=\"Refresh\" CONTENT=\"5; URL=$base_href/jobs/$JOB.html\">\n";
  print handle "<TITLE>testneos Job #$JOB</title>\n";
  print handle "<BLINK> Keep waiting for the results. </BLINK>\n";
  print handle "<hr><P>\n";
  close (handle);
  system("mv $base_dir/jobs/$JOB.tmp $base_dir/jobs/$JOB.html");
}
