Annotation of loncom/interface/printout.pl, revision 1.61

1.1       sakharuk    1: #!/usr/bin/perl
1.37      albertel    2: # CGI-script to run LaTeX, dvips, ps2ps, ps2pdf etc.
                      3: #
1.61    ! albertel    4: # $Id: printout.pl,v 1.60 2004/07/29 19:45:41 albertel Exp $
1.37      albertel    5: #
                      6: # Copyright Michigan State University Board of Trustees
                      7: #
                      8: # This file is part of the LearningOnline Network with CAPA (LON-CAPA).
                      9: #
                     10: # LON-CAPA is free software; you can redistribute it and/or modify
                     11: # it under the terms of the GNU General Public License as published by
                     12: # the Free Software Foundation; either version 2 of the License, or
                     13: # (at your option) any later version.
                     14: #
                     15: # LON-CAPA is distributed in the hope that it will be useful,
                     16: # but WITHOUT ANY WARRANTY; without even the implied warranty of
                     17: # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
                     18: # GNU General Public License for more details.
                     19: #
                     20: # You should have received a copy of the GNU General Public License
                     21: # along with LON-CAPA; if not, write to the Free Software
                     22: # Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
                     23: #
                     24: # /home/httpd/html/adm/gpl.txt
                     25: #
                     26: # http://www.lon-capa.org/
                     27: #
                     28: 
1.39      sakharuk   29: use lib '/home/httpd/lib/perl';
                     30: use LONCAPA::loncgi();
1.38      sakharuk   31: use File::Path;
1.6       sakharuk   32: use IO::File;
1.7       sakharuk   33: use Image::Magick;
1.47      sakharuk   34: use Apache::lonhtmlcommon;
1.51      albertel   35: use Apache::loncommon;
                     36: use Apache::lonlocal;
1.47      sakharuk   37: 
1.59      albertel   38: use strict;
1.49      albertel   39: $|=1;
1.46      albertel   40: my %origENV=%ENV;
1.39      sakharuk   41: if (! &LONCAPA::loncgi::check_cookie_and_load_env()) {
                     42:     print <<END;
                     43: Content-type: text/html
                     44: 
                     45: <html>
                     46: <head><title>Bad Cookie</title></head>
                     47: <body>
1.40      sakharuk   48: Your cookie information is incorrect.
1.39      sakharuk   49: </body>
                     50: </html>
                     51: END
                     52:     return;
                     53: }
1.51      albertel   54:  &Apache::lonlocal::get_language_handle();
                     55:  &Apache::loncommon::content_type(undef,'text/html');
                     56:  my $bodytag=&Apache::loncommon::bodytag('Creating PDF','','');
                     57:  print $bodytag;
1.39      sakharuk   58: 
1.40      sakharuk   59:   my $identifier = $ENV{'QUERY_STRING'};
                     60:   my $texfile = $ENV{'cgi.'.$identifier.'.file'};
                     61:   my $laystyle = $ENV{'cgi.'.$identifier.'.layout'};
                     62:   my $numberofcolumns = $ENV{'cgi.'.$identifier.'.numcol'};
                     63:   my $selectionmade = $ENV{'cgi.'.$identifier.'.selection'};
                     64:   my $tableofcontents = $ENV{'cgi.'.$identifier.'tableofcontents'};
                     65:   my $tableofindex = $ENV{'cgi.'.$identifier.'tableofindex'};
                     66:   my $advans_role = $ENV{'cgi.'.$identifier.'role'};
1.43      sakharuk   67:   my $number_of_files = $ENV{'cgi.'.$identifier.'numberoffiles'}+1;
1.44      sakharuk   68:   my $student_names = $ENV{'cgi.'.$identifier.'studentnames'};
1.47      sakharuk   69:   my $backref = $ENV{'cgi.'.$identifier.'backref'};
1.43      sakharuk   70: 
1.49      albertel   71:   my $adv = $ENV{'request.role.adv'};
                     72:   
1.44      sakharuk   73:   my @names_pack=();
                     74:   if ($student_names=~/_END_/) {  
                     75:       @names_pack=split(/_ENDPERSON_/,$student_names);
                     76:   }
1.46      albertel   77:   #got what we needed reset ENV in case it is to big for system
                     78:   %ENV=%origENV;
1.39      sakharuk   79: 
1.14      sakharuk   80:   my $figfile = $texfile;
                     81:   $figfile =~ s/^([^\.]+printout)[^t]+\.tex/$1\.dat/;
                     82:   my $duefile = $texfile;
                     83:   $duefile =~ s/^([^\.]+printout)[^t]+\.tex/$1\.due/;
                     84:   #do we have figures?
                     85:   if (-e $figfile) {
1.42      albertel   86:       my %done_conversion;
1.14      sakharuk   87:       my $temporary_file=IO::File->new($figfile) || die "Couldn't open file for reading: $!\n";
                     88:       my @content_of_file = <$temporary_file>;
                     89:       close $temporary_file;  
                     90:       my $noteps;
1.49      albertel   91:       my %prog_state;
1.59      albertel   92:       if ($adv) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Coverting Images to EPS','Picture Conversion Status',$#content_of_file,'inline','80');  }
                     93:       foreach my $not_eps (@content_of_file) {
1.49      albertel   94: 	  chomp($not_eps);
1.14      sakharuk   95: 	  if ($not_eps ne '') {
1.44      sakharuk   96:               my $status_statement='EPS picture for '.$not_eps;
1.41      sakharuk   97: 	      $not_eps=~s|\/\.\/|\/|g;
1.14      sakharuk   98: 	      my $eps_f = $not_eps;
                     99: 	      $eps_f =~ s/\.[^.]*$/\.eps/i;
1.41      sakharuk  100: 	      if ($eps_f=~/\/home\/([^\/]+)\/public_html\//) {
                    101:                   $eps_f=~s/\/home\/([^\/]+)\/public_html/$1/;
                    102: 		  $eps_f = '/home/httpd/prtspool/'.$eps_f;
1.58      sakharuk  103: 	      } elsif ($eps_f=~/$Apache::lonnet::perlvar{'lonDocRoot'}\/res\//) {
                    104: 		  $eps_f=~m/$Apache::lonnet::perlvar{'lonDocRoot'}\/res\/(.+)/;
1.41      sakharuk  105: 		  $eps_f = '/home/httpd/prtspool/'.$1;
1.58      sakharuk  106: 	      } elsif ($eps_f=~/$Apache::lonnet::perlvar{'lonUsersDir'}\//) {
1.57      sakharuk  107: 		  $eps_f=~/$Apache::lonnet::perlvar{'lonUsersDir'}\/([^\/]+)\/\w\/\w\/\w\/(.+)/;
1.56      sakharuk  108: 		  $eps_f = '/home/httpd/prtspool/'.$1.'/'.$2;
1.41      sakharuk  109: 	      }
1.38      sakharuk  110: 	      my $path=$eps_f;
1.41      sakharuk  111: 	      $path=~s/\/([^\/]+)\.eps$//;
1.38      sakharuk  112: 	      File::Path::mkpath($path,0,0777);
1.14      sakharuk  113: 	      my $image = Image::Magick->new;
                    114: 	      $not_eps =~ s/^\s+//;
                    115: 	      $not_eps =~ s/\s+$//;
1.42      albertel  116: 	      if ( exists($done_conversion{$not_eps})) {
                    117: 		  next;
                    118: 	      }
1.49      albertel  119: 	      if ($adv) {
                    120: 		  my $prettyname=$not_eps;
                    121: 		  $prettyname=~s|/home/([^/]+)/public_html|/priv/$1|;
1.58      sakharuk  122: 		  $prettyname=~s|$Apache::lonnet::perlvar{'lonDocRoot'}/|/|;
1.49      albertel  123: 		  &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,'Converting to EPS '.$prettyname); }
1.42      albertel  124: 	      $done_conversion{$not_eps}=1;
1.59      albertel  125: 	      my $status = $image->Read($not_eps);
1.14      sakharuk  126: 	      if ($status) {print "  $status  ";}
                    127: 	      $image->Set(page => '+100+200'); 
                    128: 	      $status = $image->Write($eps_f);	    
                    129: 	      if ($status) {print "  $status  ";}
1.20      sakharuk  130:               #check is eps exist in prtspool
                    131:               if(not -e $eps_f) {
                    132: 		  for (my $i=0;$i<10000;$i++) {
                    133: 		      if (-e $eps_f.'.'.$i) {
                    134: 			  rename $eps_f.'.'.$i, $eps_f;
                    135: 			  last;
                    136: 		      }
                    137: 		  }
                    138: 	      }  
1.14      sakharuk  139: 	  }
                    140:       }
1.49      albertel  141:       if ($adv) { &Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); }
1.52      albertel  142:       unlink($figfile);
1.14      sakharuk  143:   }
1.43      sakharuk  144:   #print "$texfile\n"; #name of the tex file for debugging only   
                    145:   my @texfile=($texfile);
                    146:   if ($number_of_files>1) {
1.49      albertel  147:       @texfile=();
                    148:       for (my $i=1;$i<=$number_of_files;$i++) {
1.43      sakharuk  149: 	  my $new_texfile=$texfile;
1.49      albertel  150: 	  $new_texfile=~s/\.tex/_$i\.tex/;
1.43      sakharuk  151: 	  push @texfile,$new_texfile;
                    152:       } 
                    153:   }
1.49      albertel  154: 
1.44      sakharuk  155: my $ind=-1;
1.49      albertel  156: my %prog_state;
1.61    ! albertel  157: print "<a href=\"$backref\"><b>Return</b></a> to last resource.<br /><br />";
1.59      albertel  158: if ($adv) { %prog_state=&Apache::lonhtmlcommon::Create_PrgWin('','Print Status','Class Print Status',$number_of_files,'inline','80'); }
1.61    ! albertel  159: print "<br />";
1.43      sakharuk  160: foreach $texfile (@texfile) {
1.49      albertel  161:   my $status_statement='';
                    162:   my $link_text='download PDF';
                    163:   $ind++;
                    164:   my @stud_info=split(/_END_/,$names_pack[$ind]);
                    165:   my @tempo_array=split(/:/,$stud_info[0]);
                    166:   my $name;
                    167:   if ($tempo_array[3]) {
                    168:       $name=$tempo_array[3];
                    169:   } else {
                    170:       $name=$tempo_array[0].'@'.$tempo_array[1];
                    171:   }
1.61    ! albertel  172:   $link_text='<b>'.$name.'</b>';
1.49      albertel  173:   $status_statement.=$name;
                    174:   if ($#stud_info>0) {
                    175:       @tempo_array=split(/:/,$stud_info[-1]);
1.48      albertel  176:       if ($tempo_array[3]) {
                    177: 	  $name=$tempo_array[3];
                    178:       } else {
                    179: 	  $name=$tempo_array[0].'@'.$tempo_array[1];
                    180:       }
1.61    ! albertel  181:       $link_text.=' - <b>'.$name.'</b>';
1.49      albertel  182:       $status_statement.=' -  '.$name;
                    183:   } 
                    184:   if ($adv) { &Apache::lonhtmlcommon::Update_PrgWin('',\%prog_state,'Creating PDF for '.$status_statement); }
1.29      sakharuk  185:   if (-e $texfile) {
                    186:       $texfile =~ m/^(.*)\/([^\/]+)$/; 
                    187:       my $name_file = $2;
                    188:       my $path_file = $1.'/';
                    189:       chdir $path_file;
1.59      albertel  190:       my $dvi_file= $name_file; $dvi_file =~ s/\.tex/\.dvi/;
                    191:       &busy_wait_command("latex $name_file 1>/dev/null 2>/dev/null",
                    192: 			 "for $status_statement now LaTeXing file",
                    193: 			 \%prog_state,$dvi_file);
1.40      sakharuk  194:       if ($tableofcontents eq 'yes') {
                    195: 	  system("latex $name_file 1>/dev/null 2>/dev/null");
                    196:       } #to create table of contents
1.33      sakharuk  197:       my $idxname=$name_file;
                    198:       $idxname=~s/\.tex$/\.idx/;
1.40      sakharuk  199:       if ($tableofindex eq 'yes') {
1.33      sakharuk  200: 	  system("makeindex $idxname");
                    201: 	  system("latex $name_file 1>/dev/null 2>/dev/null");
                    202:       } #to create index
1.29      sakharuk  203:       #Do we have a latex error in the log file?
                    204:       my $logfilename = $texfile;
                    205:       $logfilename =~ s/\.tex$/\.log/;
                    206:       my $temporary_file=IO::File->new($logfilename) || die "Couldn't open file for reading: $!\n";
                    207:       my @content_of_file = <$temporary_file>;
                    208:       close $temporary_file; 
1.30      sakharuk  209:       my $body_log_file = join(' ',@content_of_file);
                    210:       $logfilename =~ s/\.log$/\.html/;
                    211:       $temporary_file = IO::File->new('>'.$logfilename); 
                    212:       print $temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_log_file.'</pre></body></html>'."\n";
1.29      sakharuk  213:       if ($body_log_file=~m/!\s+Emergency stop/) {
                    214: 	  #LaTeX failed to parse tex file 
                    215: 	  print "<h2>LaTeX could not successfully parse your tex file.</h2>";
                    216: 	  print "It probably has errors in it.<br />";
                    217: 	  my $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART';
                    218: 	  my $whereitends = rindex $body_log_file,'STAMPOFPASSEDRESOURCEEND';
                    219: 	  if ($whereitbegins!=-1 and $whereitends!=-1) {
1.44      sakharuk  220:  	      print "With very high probability this error occured in ".substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26)."<br /><br />";
1.29      sakharuk  221: 	  }
                    222: 	  print "Here are the error messages in the LaTeX log file</br><br />";
                    223: 	  my $sygnal = 0;
                    224: 	  for (my $i=0;$i<=$#content_of_file;$i++) {
                    225: 	      if ($content_of_file[$i]=~m/^Runaway argument?/ or $content_of_file[$i]=~m/^!/) {
                    226: 		  $sygnal = 1;
                    227: 	      } 
                    228: 	      if ($content_of_file[$i]=~m/Here is how much of/) {
                    229: 		  $sygnal = 0;
                    230: 	      } 
                    231: 	      if ($sygnal) {
                    232: 		  print "$content_of_file[$i]<br />";
                    233: 	      }  
1.36      sakharuk  234: 	  }
                    235:           if ($advans_role) {  
1.35      sakharuk  236:               print "<b><big>The link to ";
                    237:               $logfilename=~s/\/home\/httpd//;
                    238: 	      print "<a href=\"$logfilename\">Your log file </a></big></b>";
                    239: 	      print "\n";
                    240:               #link tooriginal LaTeX file (included according Michael Hamlin desire)
                    241: 	      my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open file for reading: $!\n";
                    242: 	      my @tex_content_of_file = <$tex_temporary_file>;
                    243: 	      close $tex_temporary_file; 
                    244: 	      my $body_tex_file = join(' ',@tex_content_of_file);
                    245: 	      $texfile =~ s/\.tex$/aaaaa\.html/;
                    246: 	      $tex_temporary_file = IO::File->new('>'.$texfile); 
                    247: 	      print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";
                    248: 	      print "<br /><br />";
                    249: 	      print "<b><big>The link to ";
                    250: 	      $texfile=~s/\/home\/httpd//;
                    251: 	      print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";
                    252: 	      print "\n";
1.36      sakharuk  253: 	  }
1.35      sakharuk  254: 
1.29      sakharuk  255:       } elsif ($body_log_file=~m/<inserted text>/) {
                    256: 	  my $whereitbegins = index $body_log_file,'<inserted text>';
1.59      albertel  257: 	  print "You are running LaTeX in <b>batch mode</b>.";
1.30      sakharuk  258: 	  while ($whereitbegins != -1) {
                    259: 	      my $tempobegin=$whereitbegins;
                    260: 	      $whereitbegins = rindex $body_log_file,'STAMPOFPASSEDRESOURCESTART',$whereitbegins;
                    261: 	      my $whereitends = index $body_log_file,'STAMPOFPASSEDRESOURCEEND',$whereitbegins;
1.34      sakharuk  262: 	      print "<br />It has found an error in".substr($body_log_file,$whereitbegins+26,$whereitends-$whereitbegins-26)." <br /> and corrected it.\n";
1.30      sakharuk  263: 	      print "Usually this correction is valid but you probably need to check the indicated resource one more time and implement neccessary corrections by yourself.\n";
                    264: 	      $whereitbegins = index $body_log_file,'<inserted text>',$tempobegin+10;
                    265: 	  }
1.29      sakharuk  266: 	  $name_file =~ s/\.tex/\.dvi/;
                    267: 	  my $new_name_file = $name_file;
                    268: 	  $new_name_file =~ s/\.dvi/\.ps/;
                    269: 	  my $comma = "dvips -Ppdf -G0 -o $new_name_file";
1.59      albertel  270: 	  &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
                    271: 			     "for $status_statement now Converting to PS",
                    272: 			     \%prog_state,$new_name_file);
1.29      sakharuk  273: 	  if (-e $new_name_file) {
                    274: 	      print "<h1>PDF output file (see link below)</h1>\n";
                    275: 	      $new_name_file =~ m/^(.*)\./;
1.59      albertel  276: 	      my $ps_file = my $tempo_file = $1.'temporar.ps';
                    277: 	      my $pdf_file = $1.'.pdf';
1.29      sakharuk  278: 	      if ($laystyle eq 'album' and $numberofcolumns eq '2') {
                    279: 		  $comma = "psnup -2 -s1.0 $new_name_file";
1.59      albertel  280: 		  &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",
                    281: 				     "for $status_statement now Modifying PS layout",
                    282: 				     \%prog_state,$tempo_file); 
1.29      sakharuk  283: 	      } elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {
                    284: 		  $comma = 'pstops -pletter "2:0+1(0.48w,0)"';
1.59      albertel  285: 		  &busy_wait_command("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null",
                    286: 				     "for $status_statement now Modifying PS layout",
                    287: 				     \%prog_state,$tempo_file); 
1.29      sakharuk  288: 	      } else {
1.59      albertel  289: 		  $ps_file=$new_name_file;
1.29      sakharuk  290: 	      }	    
1.59      albertel  291: 	      &busy_wait_command("ps2pdf $ps_file $pdf_file 1>/dev/null 2>/dev/null",
                    292: 				 "for $status_statement now Converting PS to PDF",
                    293: 				 \%prog_state, $pdf_file);
                    294: 
1.29      sakharuk  295: 	      my $texlog = $texfile;
                    296: 	      my $texaux = $texfile;
                    297: 	      my $texdvi = $texfile;
                    298: 	      my $texps = $texfile;
                    299: 	      $texlog =~ s/\.tex/\.log/;
                    300: 	      $texaux =~ s/\.tex/\.aux/;
                    301: 	      $texdvi =~ s/\.tex/\.dvi/;
                    302: 	      $texps =~ s/\.tex/\.ps/;
1.30      sakharuk  303: 	      my @garb = ($texaux,$texdvi,$texps);
1.29      sakharuk  304: #	  unlink @garb;
                    305: 	      unlink $duefile;
1.59      albertel  306: 	      print "<a href=\"/prtspool/$pdf_file\">Your PDF document</a>";
1.36      sakharuk  307: 	      if ($advans_role) {  
                    308: 		  print "<br /><br />";
                    309: 		  print "<b><big>The link to ";
                    310: 		  $logfilename=~s/\/home\/httpd//;
                    311: 		  print "<a href=\"$logfilename\">Your log file </a></big></b>";
                    312: 		  print "\n";
                    313: 		  #link tooriginal LaTeX file (included according Michael Hamlin desire)
                    314: 		  my $tex_temporary_file=IO::File->new($texfile) || die "Couldn't open file for reading: $!\n";
                    315: 		  my @tex_content_of_file = <$tex_temporary_file>;
                    316: 		  close $tex_temporary_file; 
                    317: 		  my $body_tex_file = join(' ',@tex_content_of_file);
                    318: 		  $texfile =~ s/\.tex$/aaaaa\.html/;
                    319: 		  $tex_temporary_file = IO::File->new('>'.$texfile); 
                    320: 		  print $tex_temporary_file '<html><head><title>LOGFILE</title></head><body><pre>'.$body_tex_file.'</pre></body></html>'."\n";
                    321: 		  print "<br /><br />";
                    322: 		  print "<b><big>The link to ";
                    323: 		  $texfile=~s/\/home\/httpd//;
                    324: 		  print "<a href=\"$texfile\">Your original LaTeX file </a></big></b>";
                    325: 		  print "\n";
                    326: 	      }
1.29      sakharuk  327: 	  }
                    328:       } else {
                    329: 	  #LaTeX successfully parsed tex file 
                    330: 	  $name_file =~ s/\.tex/\.dvi/;
                    331: 	  my $new_name_file = $name_file;
                    332: 	  $new_name_file =~ s/\.dvi/\.ps/;
                    333: 	  my $comma = "dvips -Ppdf -G0 -o $new_name_file";
1.59      albertel  334: 	  &busy_wait_command("$comma $name_file 1>/dev/null 2>/dev/null",
                    335: 			     "for $status_statement now Converting to PS",
                    336: 			     \%prog_state,$new_name_file);
1.29      sakharuk  337: 	  if (-e $new_name_file) {
1.61    ! albertel  338: 	      print "<br />";
1.29      sakharuk  339: 	      $new_name_file =~ m/^(.*)\./;
1.59      albertel  340: 	      my $ps_file = my $tempo_file = $1.'temporar.ps';
                    341: 	      my $pdf_file = $1.'.pdf';
1.29      sakharuk  342: 	      if ($laystyle eq 'album' and $numberofcolumns eq '2') {
                    343: 		  $comma = "psnup -2 -s1.0 $new_name_file";
1.59      albertel  344: 		  &busy_wait_command("$comma $tempo_file 1>/dev/null 2>/dev/null",
                    345: 				     "for $status_statement now Modifying PS layout",
                    346: 				     \%prog_state,$tempo_file);
1.29      sakharuk  347: 	      } elsif ($laystyle eq 'book' and $numberofcolumns eq '2') {
                    348: 		  $comma = 'pstops -pletter "2:0+1(0.48w,0)"';
1.59      albertel  349: 		  &busy_wait_command("$comma $new_name_file $tempo_file 1>/dev/null 2>/dev/null",
                    350: 				     "for $status_statement now Modifying PS layout",
                    351: 				     \%prog_state,$tempo_file); 
1.29      sakharuk  352: 	      } else {
1.59      albertel  353: 		  $ps_file=$new_name_file;
                    354: 	      }
                    355: 	      &busy_wait_command("ps2pdf $ps_file $pdf_file 1>/dev/null 2>/dev/null",
                    356: 				 "for $status_statement now Converting PS to PDF",
                    357: 				 \%prog_state,$pdf_file);
                    358: 	    
1.29      sakharuk  359: 	      my $texlog = $texfile;
                    360: 	      my $texaux = $texfile;
                    361: 	      my $texdvi = $texfile;
                    362: 	      my $texps = $texfile;
                    363: 	      $texlog =~ s/\.tex/\.log/;
                    364: 	      $texaux =~ s/\.tex/\.aux/;
                    365: 	      $texdvi =~ s/\.tex/\.dvi/;
                    366: 	      $texps =~ s/\.tex/\.ps/;
                    367: 	      my @garb = ($texlog,$texaux,$texdvi,$texps);
1.22      sakharuk  368: #	  unlink @garb;
1.29      sakharuk  369: 	      unlink $duefile;
1.59      albertel  370: 	      print "<a href=\"/prtspool/$pdf_file\">$link_text</a>";
1.29      sakharuk  371: 	      print "\n";
                    372: 	  }
1.14      sakharuk  373:       }
1.29      sakharuk  374:   } else {
                    375:       print "LaTeX file $texfile was not created successfully";
1.14      sakharuk  376:   }
1.43      sakharuk  377: }
1.45      sakharuk  378: print "<br />";
1.44      sakharuk  379: if ($number_of_files>1) {
1.45      sakharuk  380:     my $zipfile=$texfile[0];
                    381:     $zipfile=~s/\.tex/\.zip/;
                    382:     my $statement="zip $zipfile";
1.44      sakharuk  383:     foreach my $file (@texfile) {
1.45      sakharuk  384: 	$file=~s/\.tex/.\pdf/;
                    385: 	$statement.=' '.$file; 
1.44      sakharuk  386:     }
1.49      albertel  387:     print("<pre>Zip Output:\n");
                    388:     system($statement);
                    389:     print("</pre>");
1.45      sakharuk  390:     $zipfile=~s/\/home\/httpd//;
1.49      albertel  391:     print "<br /> A <a href=\"$zipfile\">ZIP file</a> of all the PDFs.";
1.44      sakharuk  392: }
1.49      albertel  393: if ($adv) { &Apache::lonhtmlcommon::Close_PrgWin('',\%prog_state); }
1.1       sakharuk  394: 
1.59      albertel  395: my $done;
                    396: sub REAPER {
                    397:     $done=1;
                    398: }
                    399: 
                    400: sub busy_wait_command {
                    401:     my ($command,$message,$progress_win,$output_file)=@_;
                    402:     
                    403:     $SIG{CHLD} = \&REAPER;
                    404:     $done=0;
                    405:     my $pid=open(CMD,"$command |");
1.60      albertel  406:     if ($adv) {
                    407: 	&Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,$message);
                    408:     }
1.59      albertel  409:     while(!$done) {
                    410: 	sleep 1;
                    411: 	my $extra_msg;
                    412: 	if ($output_file) {
                    413: 	    my $size=(stat($output_file))[7];
                    414: 	    $extra_msg=", $size bytes generated";
                    415: 	}
1.60      albertel  416: 	if ($adv) {
                    417: 	    &Apache::lonhtmlcommon::Update_PrgWin('',$progress_win,
                    418: 						  $message.$extra_msg);
                    419: 	}
1.59      albertel  420:     }
                    421:     $SIG{CHLD}='IGNORE';
                    422:     close(CMD);
                    423: }
1.1       sakharuk  424: 
                    425: 
                    426: 
1.4       sakharuk  427: 

FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>
500 Internal Server Error

Internal Server Error

The server encountered an internal error or misconfiguration and was unable to complete your request.

Please contact the server administrator at root@localhost to inform them of the time this error occurred, and the actions you performed just before this error.

More information about this error may be available in the server error log.