Diff for /loncom/interface/printout.pl between versions 1.128 and 1.130

version 1.128, 2007/10/11 22:49:49 version 1.130, 2008/03/10 10:24:49
Line 43  use LONCAPA::Configuration; Line 43  use LONCAPA::Configuration;
   
 use strict;  use strict;
   
   my $busy_wait_timeout = 20;
   
 #   Determine if a user is operating as a student for this course/domain.  #   Determine if a user is operating as a student for this course/domain.
 #Parameters:  #Parameters:
Line 379  foreach $texfile (@texfile) { Line 380  foreach $texfile (@texfile) {
       my $dvi_file= $name_file; $dvi_file =~ s/\.tex/$name_range\.dvi/;        my $dvi_file= $name_file; $dvi_file =~ s/\.tex/$name_range\.dvi/;
       &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",        &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",
  "for $status_statement now LaTeXing file",   "for $status_statement now LaTeXing file",
  \%prog_state,$dvi_file);   \%prog_state,$dvi_file, $busy_wait_timeout);
       if ($tableofcontents eq 'yes') {        if ($tableofcontents eq 'yes') {
       &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",        &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",
  "for $status_statement First LaTeX of file for table of contents",   "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",        &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",
  "for $status_statement Second LaTeX of file for table of contents",   "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        } #to create table of contents
       my $idxname=$name_file;        my $idxname=$name_file;
       $idxname=~s/\.tex$/\.idx/;        $idxname=~s/\.tex$/\.idx/;
Line 396  foreach $texfile (@texfile) { Line 397  foreach $texfile (@texfile) {
      \%prog_state,$idxname);       \%prog_state,$idxname);
   &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",    &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",
      "for $status_statement now LaTeXing file for index section",       "for $status_statement now LaTeXing file for index section",
      \%prog_state,$dvi_file);       \%prog_state,$dvi_file, $busy_wait_timeout);
       } #to create index        } #to create index
       #Do we have a latex error in the log file?        #Do we have a latex error in the log file?
       my $logfilename = $texfile; $logfilename =~ s/\.tex$/\.log/;        my $logfilename = $texfile; $logfilename =~ s/\.tex$/\.log/;
Line 512  foreach $texfile (@texfile) { Line 513  foreach $texfile (@texfile) {
       #        #
       &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",        &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
  "for $status_statement first latex to repaginate",   "for $status_statement first latex to repaginate",
  \%prog_state, $name_file);   \%prog_state, $name_file,$busy_wait_timeout);
       if ($tableofcontents eq 'yes') {        if ($tableofcontents eq 'yes') {
   &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",    &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
      "for $status_statement second latex to repaginate",       "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",    &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
      "for $status_statement third latex to repaginate",       "for $status_statement third latex to repaginate",
      \%prog_state, $name_file);       \%prog_state, $name_file,$busy_wait_timeout);
       }        }
       if ($tableofindex eq 'yes') {        if ($tableofindex eq 'yes') {
   my $idxname = $latex_file;    my $idxname = $latex_file;
Line 529  foreach $texfile (@texfile) { Line 530  foreach $texfile (@texfile) {
      \%prog_state, $idxname);       \%prog_state, $idxname);
   &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",    &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
      "for $status_statement now Recreting index (latex)",       "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",        &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
Line 685  foreach $texfile (@texfile) { Line 686  foreach $texfile (@texfile) {
       &repaginate($new_name_file, $latex_file,  $numberofcolumns);        &repaginate($new_name_file, $latex_file,  $numberofcolumns);
       &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",        &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
  "for $status_statement first latex to repaginate",   "for $status_statement first latex to repaginate",
  \%prog_state, $name_file);   \%prog_state, $name_file, $busy_wait_timeout);
       if ($tableofcontents eq 'yes') {        if ($tableofcontents eq 'yes') {
   &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",    &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
      "for $status_statement second latex to repaginate",       "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",    &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
      "for $status_statement third latex to repaginate",       "for $status_statement third latex to repaginate",
      \%prog_state, $name_file);       \%prog_state, $name_file, $busy_wait_timeout);
       }        }
       if ($tableofindex eq 'yes') {        if ($tableofindex eq 'yes') {
   my $idxname = $latex_file;    my $idxname = $latex_file;
Line 702  foreach $texfile (@texfile) { Line 703  foreach $texfile (@texfile) {
      \%prog_state, $idxname);       \%prog_state, $idxname);
   &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",    &busy_wait_command("latex $latex_file 1>/dev/null 2>/dev/null",
      "for $status_statement now Recreting index (latex)",       "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",        &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
  "for $status_statement dvips to repaginate",   "for $status_statement dvips to repaginate",
Line 794  my $done; Line 795  my $done;
 sub REAPER {  sub REAPER {
     $done=1;      $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 {  sub busy_wait_command {
     my ($command,$message,$progress_win,$output_file)=@_;      my ($command,$message,$progress_win,$output_file, $timeout)=@_;
           
     $SIG{CHLD} = \&REAPER;      $SIG{CHLD} = \&REAPER;
     $done=0;      $done=0;
Line 804  sub busy_wait_command { Line 813  sub busy_wait_command {
     if ($advanced_role) {      if ($advanced_role) {
  &Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,$message);   &Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,$message);
     }      }
       my $last_size      = 0;
       my $unchanged_time = 0;
     while(!$done) {      while(!$done) {
  sleep 1;   sleep 1;
  my $extra_msg;   my $extra_msg;
  if ($output_file) {   if ($output_file) {
     my $size=(stat($output_file))[7];      my $size=(stat($output_file))[7];
     $extra_msg=", $size bytes generated";      $extra_msg=", $size bytes generated";
       if ($size == $last_size) {
    $unchanged_time++;
    if ($timeout && ($unchanged_time > $timeout)) {
       print "<h1>Operation timed out!!!</h1>\n";
       print "<p>Executing $command, The output file $output_file did not grow\n";
       print "after $timeout seconds.  This <em>may</em> indicate $command\n";
       print "is in an infinite loop.";
       print "See if printing fewer copies helps.  Please contact LonCAPA\n";
       print "support about this in any event";
       print "</p>";
       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) {   if ($advanced_role) {
     &Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,      &Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,

Removed from v.1.128  
changed lines
  Added in v.1.130


FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>