#!/usr/bin/perl -T package SlicingDemo; use POSIX ":signal_h"; use CGI qw(:standard); $CGI::POST_MAX=32768; # max 32K posts $ENV{PATH}="/bin:/usr/bin:/usr/local/bin"; $query = new CGI; $| = 1; $title = "A Type Error Slicer for MiniML"; $session = unpack("H*", pack("Nn", time, $$)); $submit_label = 'Display any type errors in MiniML code in entry panel'; $submit_example_label = 'Display any type errors in the example selected in the above menu'; sub write_status_page { my %params = @_; my @status = @{$params{-status}}; my $refresh_current = ""; open(INFO, ">tmp/$session.html"); print INFO $query->start_html(-title=> "$title", -head=>[$refresh_current], -dtd=>"-//W3C//DTD HTML 4.01//EN"); print INFO "
Writing source file...
"; write_status_page(-status=>[@status]); open(SOURCE, ">tmp/$session.sml"); print SOURCE $input; close(SOURCE); # Run the type error slicing tool push @status, "Running the type error slicing tool...
"; write_status_page(-status=>[@status]); my $childpid = fork; if($childpid == 0) { exec("bin/slicer tmp/$session.sml > tmp/$session.out 2> tmp/$session.err"); } else { $timeout = 0; eval { local $SIG{ALRM} = sub { die("timedout"); }; alarm(120); waitpid($childpid, 0); alarm(0); }; if ($@ and $@ =~ /timedout/) { $timeout = 1; kill 9, $childpid; } } if ($timeout) { push @status, "Timed out, sorry.
"; write_status_page(-status=>[@status]); return 2; } # Formatting the output push @status, "Formatting the output...
"; write_status_page(-status=>[@status]); system("./bin/post $session >> tmp/".$session.".err"); # Done push @status, "Success, redirecting you to the results...
"; write_final_page(-status=>[@status]); exit; } if(!$query->param("Action")) { open INPUT, "";
print "$title"; print "Welcome user@".$query->remote_host()."! "; print @intro; print $query->start_multipart_form(-action=>"slicing.cgi"); print "";
print $query->submit('Action',$submit_label);
print " ";
print "";
print " "; print @examples; print ""; print $query->submit('Action',$submit_example_label); print $query->textarea(-name=>'Source', -rows=>25, -cols=>80, -value=>"", -id=>"source"); print $query->endform; print " | "; print @authors; print " |
Invalid request.
"; print $query->end_html; }