[LON-CAPA-cvs] cvs: loncom /interface printout.pl

albertel lon-capa-cvs@mail.lon-capa.org
Wed, 28 Jul 2004 22:00:14 -0000


This is a MIME encoded message

--albertel1091052014
Content-Type: text/plain

albertel		Wed Jul 28 18:00:14 2004 EDT

  Modified files:              
    /loncom/interface	printout.pl 
  Log:
  - BUG#3222, we now busy wait on the system conversion steps, and output number of bytes
    thus not having things time out.
  
  
--albertel1091052014
Content-Type: text/plain
Content-Disposition: attachment; filename="albertel-20040728180014.txt"

Index: loncom/interface/printout.pl
diff -u loncom/interface/printout.pl:1.58 loncom/interface/printout.pl:1.59
--- loncom/interface/printout.pl:1.58	Wed May 12 14:44:50 2004
+++ loncom/interface/printout.pl	Wed Jul 28 18:00:14 2004
@@ -1,7 +1,7 @@
 #!/usr/bin/perl
 # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.
 #
-# $Id: printout.pl,v 1.58 2004/05/12 18:44:50 sakharuk Exp $
+# $Id: printout.pl,v 1.59 2004/07/28 22:00:14 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -27,7 +27,6 @@
 #
 
 use lib '/home/httpd/lib/perl';
-use Time::Local;
 use LONCAPA::loncgi();
 use File::Path;
 use IO::File;
@@ -36,6 +35,7 @@
 use Apache::loncommon;
 use Apache::lonlocal;
 
+use strict;
 $|=1;
 my %origENV=%ENV;
 if (! &LONCAPA::loncgi::check_cookie_and_load_env()) {
@@ -89,8 +89,8 @@
       close $temporary_file;  
       my $noteps;
       my %prog_state;
-      if ($adv) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Coverting Images to EPS','Picture Conversion Status',$#content_of_file,'inline','75');  }
-      foreach $not_eps (@content_of_file) {
+      if ($adv) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Coverting Images to EPS','Picture Conversion Status',$#content_of_file,'inline','80');  }
+      foreach my $not_eps (@content_of_file) {
 	  chomp($not_eps);
 	  if ($not_eps ne '') {
               my $status_statement='EPS picture for '.$not_eps;
@@ -122,7 +122,7 @@
 		  $prettyname=~s|$Apache::lonnet::perlvar{'lonDocRoot'}/|/|;
 		  &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,'Converting to EPS '.$prettyname); }
 	      $done_conversion{$not_eps}=1;
-	      $status = $image->Read($not_eps);
+	      my $status = $image->Read($not_eps);
 	      if ($status) {print "  $status  ";}
 	      $image->Set(page => '+100+200'); 
 	      $status = $image->Write($eps_f);	    
@@ -154,7 +154,7 @@
 
 my $ind=-1;
 my %prog_state;
-if ($adv) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Print Status','Class Print Status',$number_of_files,'inline','75'); }
+if ($adv) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Print Status','Class Print Status',$number_of_files,'inline','80'); }
 my $final_statement="<a href=\"$backref\"><b>Return</b></a> to last resource.<br /><br />Generated PDF File for:<br />";
 foreach $texfile (@texfile) {
   my $status_statement='';
@@ -186,7 +186,10 @@
       my $name_file = $2;
       my $path_file = $1.'/';
       chdir $path_file;
-      system("latex $name_file 1>/dev/null 2>/dev/null");
+      my $dvi_file= $name_file; $dvi_file =~ s/\.tex/\.dvi/;
+      &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",
+			 "for $status_statement now LaTeXing file",
+			 \%prog_state,$dvi_file);
       if ($tableofcontents eq 'yes') {
 	  system("latex $name_file 1>/dev/null 2>/dev/null");
       } #to create table of contents
@@ -250,7 +253,7 @@
 
       } elsif ($body_log_file=~m/<inserted text>/) {
 	  my $whereitbegins = index $body_log_file,'<inserted text>';
-	  print "You are running LaTeX in the <b>batch mode</b>.";
+	  print "You are running LaTeX in <b>batch mode</b>.";
 	  while ($whereitbegins != -1) {
 	      my $tempobegin=$whereitbegins;
 	      $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART',$whereitbegins;
@@ -263,23 +266,31 @@
 	  my $new_name_file = $name_file;
 	  $new_name_file =~ s/\.dvi/\.ps/;
 	  my $comma = "dvips -Ppdf -G0 -o $new_name_file";
-	  system("$comma $name_file 1>/dev/null 2>/dev/null");
+	  &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
+			     "for $status_statement now Converting to PS",
+			     \%prog_state,$new_name_file);
 	  if (-e $new_name_file) {
 	      print "<h1>PDF output file (see link below)</h1>\n";
 	      $new_name_file =~ m/^(.*)\./;
-	      my $tempo_file = $1.'temporar.ps';
-	      my $name_file = $1.'.pdf';
+	      my $ps_file = my $tempo_file = $1.'temporar.ps';
+	      my $pdf_file = $1.'.pdf';
 	      if ($laystyle eq 'album' and $numberofcolumns eq '2') {
 		  $comma = "psnup -2 -s1.0 $new_name_file";
-		  system("$comma $tempo_file 1>/dev/null 2>/dev/null"); 
-		  system("ps2pdf $tempo_file $name_file 1>/dev/null 2>/dev/null");
+		  &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",
+				     "for $status_statement now Modifying PS layout",
+				     \%prog_state,$tempo_file); 
 	      } elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {
 		  $comma = 'pstops -pletter "2:0+1(0.48w,0)"';
-		  system("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null");
-		  system("ps2pdf $tempo_file $name_file 1>/dev/null 2>/dev/null");
+		  &busy_wait_command("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null",
+				     "for $status_statement now Modifying PS layout",
+				     \%prog_state,$tempo_file); 
 	      } else {
-		  system("ps2pdf $new_name_file $name_file 1>/dev/null 2>/dev/null");
+		  $ps_file=$new_name_file;
 	      }	    
+	      &busy_wait_command("ps2pdf $ps_file $pdf_file 1>/dev/null 2>/dev/null",
+				 "for $status_statement now Converting PS to PDF",
+				 \%prog_state, $pdf_file);
+
 	      my $texlog = $texfile;
 	      my $texaux = $texfile;
 	      my $texdvi = $texfile;
@@ -291,7 +302,7 @@
 	      my @garb = ($texaux,$texdvi,$texps);
 #	  unlink @garb;
 	      unlink $duefile;
-	      print "<a href=\"/prtspool/$name_file\">Your PDF document</a>";
+	      print "<a href=\"/prtspool/$pdf_file\">Your PDF document</a>";
 	      if ($advans_role) {  
 		  print "<br /><br />";
 		  print "<b><big>The link to ";
@@ -319,24 +330,32 @@
 	  my $new_name_file = $name_file;
 	  $new_name_file =~ s/\.dvi/\.ps/;
 	  my $comma = "dvips -Ppdf -G0 -o $new_name_file";
-	  system("$comma $name_file 1>/dev/null 2>/dev/null");
+	  &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
+			     "for $status_statement now Converting to PS",
+			     \%prog_state,$new_name_file);
 	  if (-e $new_name_file) {
 	      print "<br />$final_statement ";
 	      $final_statement='';
 	      $new_name_file =~ m/^(.*)\./;
-	      my $tempo_file = $1.'temporar.ps';
-	      my $name_file = $1.'.pdf';
+	      my $ps_file = my $tempo_file = $1.'temporar.ps';
+	      my $pdf_file = $1.'.pdf';
 	      if ($laystyle eq 'album' and $numberofcolumns eq '2') {
 		  $comma = "psnup -2 -s1.0 $new_name_file";
-		  system("$comma $tempo_file 1>/dev/null 2>/dev/null"); 
-		  system("ps2pdf $tempo_file $name_file 1>/dev/null 2>/dev/null");
+		  &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",
+				     "for $status_statement now Modifying PS layout",
+				     \%prog_state,$tempo_file);
 	      } elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {
 		  $comma = 'pstops -pletter "2:0+1(0.48w,0)"';
-		  system("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null");
-		  system("ps2pdf $tempo_file $name_file 1>/dev/null 2>/dev/null");
+		  &busy_wait_command("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null",
+				     "for $status_statement now Modifying PS layout",
+				     \%prog_state,$tempo_file); 
 	      } else {
-		  system("ps2pdf $new_name_file $name_file 1>/dev/null 2>/dev/null");
-	      }	    
+		  $ps_file=$new_name_file;
+	      }
+	      &busy_wait_command("ps2pdf $ps_file $pdf_file 1>/dev/null 2>/dev/null",
+				 "for $status_statement now Converting PS to PDF",
+				 \%prog_state,$pdf_file);
+	    
 	      my $texlog = $texfile;
 	      my $texaux = $texfile;
 	      my $texdvi = $texfile;
@@ -348,7 +367,7 @@
 	      my @garb = ($texlog,$texaux,$texdvi,$texps);
 #	  unlink @garb;
 	      unlink $duefile;
-	      print "<a href=\"/prtspool/$name_file\">$link_text</a>";
+	      print "<a href=\"/prtspool/$pdf_file\">$link_text</a>";
 	      print "\n";
 	  }
       }
@@ -373,6 +392,31 @@
 }
 if ($adv) { &Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); }
 
+my $done;
+sub REAPER {
+    $done=1;
+}
+
+sub busy_wait_command {
+    my ($command,$message,$progress_win,$output_file)=@_;
+    
+    $SIG{CHLD} = \&REAPER;
+    $done=0;
+    my $pid=open(CMD,"$command |");
+    &Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,$message);
+    while(!$done) {
+	sleep 1;
+	my $extra_msg;
+	if ($output_file) {
+	    my $size=(stat($output_file))[7];
+	    $extra_msg=", $size bytes generated";
+	}
+	&Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,
+					      $message.$extra_msg);
+    }
+    $SIG{CHLD}='IGNORE';
+    close(CMD);
+}
 
 
 

--albertel1091052014--