--- loncom/interface/printout.pl 2007/04/20 20:54:24 1.123
+++ loncom/interface/printout.pl 2008/03/11 01:48:57 1.132
@@ -1,7 +1,7 @@
#!/usr/bin/perl
# CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.
#
-# $Id: printout.pl,v 1.123 2007/04/20 20:54:24 albertel Exp $
+# $Id: printout.pl,v 1.132 2008/03/11 01:48:57 www Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -43,6 +43,7 @@ use LONCAPA::Configuration;
use strict;
+my $busy_wait_timeout = 30;
# Determine if a user is operating as a student for this course/domain.
#Parameters:
@@ -166,7 +167,7 @@ END
my %perlvar=%{&LONCAPA::Configuration::read_conf('loncapa.conf')};
&Apache::lonlocal::get_language_handle();
&Apache::loncommon::content_type(undef,'text/html');
-
+$env{'request.noversionuri'} = '/cgi-bin/printout.pl';
print(&Apache::loncommon::start_page('Creating PDF'));
my $identifier = $ENV{'QUERY_STRING'};
@@ -187,9 +188,10 @@ my %perlvar=%{&LONCAPA::Configuration::r
if ($student_names=~/_END_/) {
@names_pack=split(/_ENDPERSON_/,$student_names);
}
-
-print "Return to last resource.
";
-
+ if ($backref) {
+ print('
'.&mt("[_1]Return[_2] to editing resource.", + "","").'
'); + } my $figfile = $texfile; $figfile =~ s/^(.*_printout)_\d+_\d+_\d+\.tex/$1\.dat/; my $duefile = $texfile; @@ -204,7 +206,7 @@ print "Return'); foreach my $not_eps (@content_of_file) { chomp($not_eps); @@ -217,13 +219,13 @@ print "Return/dev/null 2>/dev/null", "for $status_statement now LaTeXing file", - \%prog_state,$dvi_file); + \%prog_state,$dvi_file, $busy_wait_timeout); if ($tableofcontents eq 'yes') { &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null", "for $status_statement First LaTeX of file for table of contents", - \%prog_state,$dvi_file); + \%prog_state,$dvi_file, $busy_wait_timeout); &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null", "for $status_statement Second LaTeX of file for table of contents", - \%prog_state,$dvi_file); + \%prog_state,$dvi_file,$busy_wait_timeout); } #to create table of contents my $idxname=$name_file; $idxname=~s/\.tex$/\.idx/; @@ -395,7 +397,7 @@ foreach $texfile (@texfile) { \%prog_state,$idxname); &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null", "for $status_statement now LaTeXing file for index section", - \%prog_state,$dvi_file); + \%prog_state,$dvi_file, $busy_wait_timeout); } #to create index #Do we have a latex error in the log file? my $logfilename = $texfile; $logfilename =~ s/\.tex$/\.log/; @@ -447,7 +449,7 @@ foreach $texfile (@texfile) { $logfilename=~s{^\Q$perlvar{'lonPrtDir'}\E}{/prtspool}; print "Your log file "; print "\n"; - #link tooriginal LaTeX file (included according Michael Hamlin desire) + #link to original LaTeX file my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open tex file $texfile for reading: $!\n"; my @tex_content_of_file = <$tex_temporary_file>; close $tex_temporary_file; @@ -511,24 +513,24 @@ foreach $texfile (@texfile) { # &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null", "for $status_statement first latex to repaginate", - \%prog_state, $name_file); + \%prog_state, $name_file,$busy_wait_timeout); if ($tableofcontents eq 'yes') { &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null", "for $status_statement second latex to repaginate", - \%prog_state, $name_file); + \%prog_state, $name_file,$busy_wait_timeout); &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null", "for $status_statement third latex to repaginate", - \%prog_state, $name_file); + \%prog_state, $name_file,$busy_wait_timeout); } if ($tableofindex eq 'yes') { my $idxname = $latex_file; $idxname =~ s/\.tex$/\.idx/; - &busy_wait_command("makindex $idxname", + &busy_wait_command("makeindex $idxname", "Re-creating index file", \%prog_state, $idxname); &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null", "for $status_statement now Recreting index (latex)", - \%prog_state, $dvi_file); + \%prog_state, $dvi_file,$busy_wait_timeout); } &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null", @@ -562,7 +564,7 @@ foreach $texfile (@texfile) { #print("Executing $command, the output file $output_file did not grow\n"; + print "after $timeout seconds. This may indicate $command\n"; + print "is in an infinite loop.\n"; + print "See if printing fewer copies helps. Please contact LON-CAPA\n"; + print "support about this in any event."; + print "
"; + kill(9, $pid); # Reaper will do the rest...I hope there's errors in the log. + } + } else { + $last_size = $size; + $unchanged_time = 0; + } } if ($advanced_role) { &Apache::lonhtmlcommon::Update_PrgWin('',$progress_win, @@ -868,7 +896,7 @@ sub repaginate { # bottom of the page, m the page number within the document. # - if ($line =~ /^%%Page:/) { + if ($line =~ /^%%Page:\s+\d+\s+\d+/) { my @pageinfo = split(/\s+/, $line); if ($page_number < $pageinfo[1]) { $page_number = $pageinfo[1]; @@ -1000,7 +1028,7 @@ sub create_missing_fonts { #print("