--- loncom/interface/printout.pl 2007/04/20 20:54:24 1.123
+++ loncom/interface/printout.pl 2008/01/28 11:24:48 1.129
@@ -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.129 2008/01/28 11:24:48 foxr Exp $
#
# Copyright Michigan State University Board of Trustees
#
@@ -166,7 +166,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 +187,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;
@@ -217,13 +218,13 @@ print "Return/dev/null 2>/dev/null",
"for $status_statement now LaTeXing file",
- \%prog_state,$dvi_file);
+ \%prog_state,$dvi_file, 10);
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, 10);
&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,10);
} #to create table of contents
my $idxname=$name_file;
$idxname=~s/\.tex$/\.idx/;
@@ -395,7 +396,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,10);
} #to create index
#Do we have a latex error in the log file?
my $logfilename = $texfile; $logfilename =~ s/\.tex$/\.log/;
@@ -511,24 +512,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,10);
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,10);
&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,10);
}
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,10);
}
&busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
@@ -562,7 +563,7 @@ foreach $texfile (@texfile) {
#print("
Missing fonts file is: $missfonts_file");
if (-e $missfonts_file) {
#print("
Missing fonts file exists\n");
- &create_missing_fonts($missfonts_file);
+ &create_missing_fonts($missfonts_file,\%prog_state);
&busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
"for $status_statement dvips generated missing fonts",
\%prog_state, $new_name_file);
@@ -673,7 +674,7 @@ foreach $texfile (@texfile) {
#print("
Missing fonts file is: $missfonts_file");
if (-e $missfonts_file) {
#print("
Missing fonts file exists\n");
- &create_missing_fonts($missfonts_file);
+ &create_missing_fonts($missfonts_file,\%prog_state);
&busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
"for $status_statement dvips generated missing fonts",
\%prog_state, $new_name_file);
@@ -684,14 +685,14 @@ foreach $texfile (@texfile) {
&repaginate($new_name_file, $latex_file, $numberofcolumns);
&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,10);
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,10);
&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,10);
}
if ($tableofindex eq 'yes') {
my $idxname = $latex_file;
@@ -701,7 +702,7 @@ foreach $texfile (@texfile) {
\%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,10);
}
&busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
"for $status_statement dvips to repaginate",
@@ -793,9 +794,17 @@ my $done;
sub REAPER {
$done=1;
}
-
+#
+# Execute a command updating the status window as the command's
+# output file builds up (at intervals of a second).
+#
+# If the timeout argument defined, then if that many seconds
+# elapses without an increase in the size of the output file,
+# the command will be killed (this deals with the case when
+# latex crawls into an infinite loop).
+#
sub busy_wait_command {
- my ($command,$message,$progress_win,$output_file)=@_;
+ my ($command,$message,$progress_win,$output_file, $timeout)=@_;
$SIG{CHLD} = \&REAPER;
$done=0;
@@ -803,12 +812,23 @@ sub busy_wait_command {
if ($advanced_role) {
&Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,$message);
}
+ my $last_size = 0;
+ my $unchanged_time = 0;
while(!$done) {
sleep 1;
my $extra_msg;
if ($output_file) {
my $size=(stat($output_file))[7];
$extra_msg=", $size bytes generated";
+ if ($size == $last_size) {
+ $unchanged_time++;
+ if ($timeout && ($unchanged_time > $timeout)) {
+ 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 +888,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 +1020,7 @@ sub create_missing_fonts {
#print("
Creating fonts via command: $command");
&busy_wait_command("$command 1>/dev/null 2>/dev/null",
"Creating missing font",
- $state, $command);
+ $state);
}