--- loncom/interface/lonprintout.pm	2004/04/26 18:21:26	1.294
+++ loncom/interface/lonprintout.pm	2004/05/06 06:45:13	1.300
@@ -1,7 +1,7 @@
 # The LearningOnline Network
 # Printout
 #
-# $Id: lonprintout.pm,v 1.294 2004/04/26 18:21:26 albertel Exp $
+# $Id: lonprintout.pm,v 1.300 2004/05/06 06:45:13 albertel Exp $
 #
 # Copyright Michigan State University Board of Trustees
 #
@@ -672,6 +672,22 @@ sub get_textwidth {
     return $textwidth;
 }
 
+
+sub unsupported {
+    my $currentURL=shift;
+    my $result.='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
+    if ($currentURL=~/\/(aboutme|syllabus|bulletinboard)$/) {
+	$result.='\textbf{'.$1.'}';
+    } elsif ($currentURL=~/\/ext\//) {
+	$result.=' \strut \\\\ THIS IS EXTERNAL RESOURCE WITH URL \strut \\\\ '.$currentURL.' ';
+    } else {
+	$result.=$currentURL;
+    }
+    $result.= '\vskip 0.5mm\noindent\makebox[\textwidth/$number_of_columns][b]{\hrulefill} \end{document}';
+    return $result;
+}
+
+
 sub output_data {
     my ($r,$helper,$rparmhash) = @_;
     my %parmhash = %$rparmhash;
@@ -738,6 +754,7 @@ ENDPART
 	}
 	$selectionmade = 1;
 	if ($currentURL=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+	    &Apache::lonnet::logthis("II AMAM IN A WRONG PLACE");
 	    my $rndseed=time;
 	    my $texversion='';
 	    if ($helper->{'VARS'}->{'ANSWER_TYPE'} ne 'only') {
@@ -860,29 +877,32 @@ ENDPART
 	    }
 	    if ($helper->{VARS}->{'construction'} eq '1') {$result=~s/(\\begin{document})/$1 \\fbox\{RANDOM SEED IS $rndseed\} /;}
 	    $result .= '\end{document}';   
-	} elsif ($currentURL=~/\/smppg$/) { 
+	} elsif ($currentURL=~/\/(smppg|syllabus)$/) { 
 		my %form;
 		$form{'grade_target'}='tex';
 		$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
 		$form{'latex_type'}=$helper->{'VARS'}->{'LATEX_TYPE'};
+		if ($currentURL=~/\/syllabus$/) {$currentURL=~s/\/res//;}
 		my $texversion=&Apache::lonnet::ssi($currentURL,%form);
 		$result .= $texversion;
 	} else {
-	  $result.='\documentclass[letterpaper]{article}\usepackage{calc}\begin{document}Printout of this type of document is currently not supported: ';
-	  if ($currentURL=~/\/(aboutme|syllabus|bulletinboard|smppg)$/) {
-	      $result.=$1;
-	  } elsif ($currentURL=~/\/ext\//) {
-	      $result.=' \strut \\\\ THIS IS EXTERNAL RESOURCE WITH URL \strut \\\\ '.$currentURL.' ';
-	  } else {
-	      $result.=$currentURL;
-	  }
-	  $result.=' \end{document}'
+	    &Apache::lonnet::logthis("IIII AMAM IN A WRONG PLACE");
+	    $result.=&unsupported($currentURL);
 	}
     } elsif (($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') or
              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') or
              ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') or
 	     ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences')) { 
         #-- produce an output string
+	if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') {
+	    $selectionmade = 2;
+	} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') {
+	    $selectionmade = 3;
+	} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') {
+	    $selectionmade = 4;
+	} elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences') {
+	    $selectionmade = 7;
+	}
 	my %form=();	   
 	$form{'grade_target'}='tex';
 	$form{'textwidth'}=&get_textwidth($helper,$LaTeXwidth);
@@ -897,71 +917,74 @@ ENDPART
 	for (my $i=0;$i<=$#master_seq;$i++) {
 	    my (undef,undef,$urlp)=&Apache::lonnet::decode_symb($master_seq[$i]);
 	    $urlp=&Apache::lonnet::clutter($urlp);
-	    if ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems') {
-		$selectionmade = 2;
-	    } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'map_problems_pages') {
-		$selectionmade = 3;
-	    } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'all_problems') {
-		$selectionmade = 4;
-	    } elsif ($helper->{'VARS'}->{'PRINT_TYPE'} eq 'select_sequences') {
-		$selectionmade = 7;
-	    }
 	    $form{'symb'}=$master_seq[$i];
 	    my ($sequence)=&Apache::lonnet::decode_symb($master_seq[$i]);
 	    my $assignment=&Apache::lonxml::latex_special_symbols(&Apache::lonnet::gettitle($sequence),'header'); #tittle of the assignment which contains this problem
 	    if ($selectionmade==7) {$helper->{VARS}->{'assignment'}=$assignment;}
 	    if ($i==0) {$prevassignment=$assignment;}
 	    #&Apache::lonnet::logthis("Trying to get $urlp with symb $master_seq[$i]");
-	    my $texversion.=&Apache::lonnet::ssi($urlp,%form);
-	    if ($urlp=~/\.page$/) {
-		($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
-		if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} 
-		$texversion =~ s/\\end{document}\d*/\\end{document}/;
-		$flag_page_in_sequence = 'YES';
-	    } 
-	    my $lonidsdir=$r->dir_config('lonIDsDir');
-	    my $envfile=$ENV{'user.environment'};
-	    $envfile=~/\/([^\/]+)\.id$/;
-            $envfile=$1;
-	    &Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile);
-	    my $current_counter=$ENV{'form.counter'};
-	    if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
-	       ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
-		my %form;
-		$form{'grade_target'}='answer';
-		$form{'answer_output_mode'}='tex';
-		my $answer=&Apache::lonnet::ssi($urlp,%form);
-                &Apache::lonnet::appenv(('form.counter' => $current_counter));
-		if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
-		    $texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
-		} else {
-		    if ($urlp=~/\.(problem|exam|quiz|library)$/) {
-			$texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
-			$texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($urlp).'}\vskip 0 mm ';
-			$texversion.=&path_to_problem ($urlp,$LaTeXwidth);
-			$texversion.='\vskip 1 mm '.$answer;
+	    my $texversion='';
+	    if ($urlp=~/\.(problem|exam|quiz|assess|survey|form|library|page|xml|html|htm|xhtml|xhtm)$/) {
+		$texversion.=&Apache::lonnet::ssi($urlp,%form);
+		if ($urlp=~/\.page$/) {
+		    ($texversion,my $number_of_columns_page) = &page_cleanup($texversion);
+		    if ($number_of_columns_page > $number_of_columns) {$number_of_columns=$number_of_columns_page;} 
+		    $texversion =~ s/\\end{document}\d*/\\end{document}/;
+		    $flag_page_in_sequence = 'YES';
+		} 
+		my $lonidsdir=$r->dir_config('lonIDsDir');
+		my $envfile=$ENV{'user.environment'};
+		$envfile=~/\/([^\/]+)\.id$/;
+		$envfile=$1;
+		&Apache::lonnet::transfer_profile_to_env($lonidsdir,$envfile);
+		my $current_counter=$ENV{'form.counter'};
+		if(($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') ||
+		   ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'only')) {
+		    my %form;
+		    $form{'grade_target'}='answer';
+		    $form{'answer_output_mode'}='tex';
+		    my $answer=&Apache::lonnet::ssi($urlp,%form);
+		    &Apache::lonnet::appenv(('form.counter' => $current_counter));
+		    if ($helper->{'VARS'}->{'ANSWER_TYPE'} eq 'no') {
+			$texversion=~s/(\\keephidden{ENDOFPROBLEM})/$answer$1/;
 		    } else {
-			$texversion='';
+			if ($urlp=~/\.(problem|exam|quiz|library)$/) {
+			    $texversion=&print_latex_header($helper->{'VARS'}->{'LATEX_TYPE'});
+			    $texversion.='\vskip 0 mm \noindent\textbf{'.&Apache::lonnet::gettitle($urlp).'}\vskip 0 mm ';
+			    $texversion.=&path_to_problem ($urlp,$LaTeXwidth);
+			    $texversion.='\vskip 1 mm '.$answer;
+			} else {
+			    $texversion='';
+			}
 		    }
 		}
-	    }
-	    if ($flag_latex_header_remove ne 'NO') {
-		$texversion = &latex_header_footer_remove($texversion);
+		if ($flag_latex_header_remove ne 'NO') {
+		    $texversion = &latex_header_footer_remove($texversion);
+		} else {
+		    $texversion =~ s/\\end{document}//;
+		}
+		if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
+		    $texversion=&IndexCreation($texversion,$urlp);
+		}
+		if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
+		    my $name = &get_name();
+		    my $courseidinfo = &get_course();
+		    if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
+		    $prevassignment=$assignment;
+		    $result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm ';
+		}
+		$result .= $texversion;
+		$flag_latex_header_remove = 'YES';   
 	    } else {
-		$texversion =~ s/\\end{document}//;
-	    }
-	    if ($helper->{'VARS'}->{'TABLE_INDEX'} eq 'yes') {
-		$texversion=&IndexCreation($texversion,$urlp);
-	    }
-	    if (($selectionmade == 4) and ($assignment ne $prevassignment)) {
-		my $name = &get_name();
-		my $courseidinfo = &get_course();
-		if (defined($courseidinfo)) { $courseidinfo=' - '.$courseidinfo }
-		$prevassignment=$assignment;
-		$result .='\newpage \noindent\parbox{\minipagewidth}{\noindent\\lhead{\\textit{\\textbf{'.$name.'}}'.$courseidinfo.' \\hfill \\thepage \\\\ \\textit{'.$assignment.'}}} \vskip -5 mm ';
-	    }
-	    $result .= $texversion;
-	    $flag_latex_header_remove = 'YES';   
+		$texversion=&unsupported($urlp);
+		if ($flag_latex_header_remove ne 'NO') {
+		    $texversion = &latex_header_footer_remove($texversion);
+		} else {
+		    $texversion =~ s/\\end{document}//;
+		}
+		$result .= $texversion;
+		$flag_latex_header_remove = 'YES';   
+	    }	    
 	}
 	&Apache::lonnet::delenv('form.counter');
 	if ($flag_page_in_sequence eq 'YES') {$result =~ s/\\usepackage{calc}/\\usepackage{calc}\\usepackage{longtable}/;}	
@@ -1009,9 +1032,13 @@ ENDPART
 	 my $old_name=$helper->{'VARS'}->{'REUSE_OLD_CODES'};
 	 my @master_seq=split /\|\|\|/, $helper->{'VARS'}->{'RESOURCES'};
 	 my ($type) = split(/_/,$helper->{'VARS'}->{'PRINT_TYPE'});
+	 my $number_per_page=$helper->{'VARS'}->{'NUMBER_TO_PRINT'};
+	 if ($number_per_page eq '0' || $number_per_page eq 'all') {
+	     $number_per_page=$num_todo;
+	 }
 	 my $flag_latex_header_remove = 'NO'; 
 	 my %moreenv = ('textwidth' => &get_textwidth($helper,$LaTeXwidth));
-	 my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline');
+	 my %prog_state=&Apache::lonhtmlcommon::Create_PrgWin($r,'Print Status','Class Print Status',$num_todo,'inline','75');
 	 my $seed=time+($$<<16)+($$);
 	 my @allcodes;
 	 if ($old_name) {
@@ -1019,6 +1046,7 @@ ENDPART
 	     @allcodes=split(',',$result{$old_name});
 	 } else {
 	     my %allcodes;
+	     srand($seed);
 	     for (my $i=0;$i<$num_todo;$i++) {
 		 $moreenv{'CODE'}=&get_CODE(\%allcodes,$i,$seed,'6');
 	     }
@@ -1029,17 +1057,18 @@ ENDPART
 	     }
 	     @allcodes=keys(%allcodes);
 	 }
-	 my $i=0;
+	 my $count=0;
 	 foreach my $code (sort(@allcodes)) {
+	     my $file_num=int($count/$number_per_page);
 	     $moreenv{'CODE'}=&num_to_letters($code);
 	     my ($output,$fullname)=
 		 &print_resources($r,$helper,'anonymous',$type,\%moreenv,
 				  \@master_seq,$flag_latex_header_remove);
-	     $print_array[$i].=$output;
+	     $print_array[$file_num].=$output;
 	     &Apache::lonhtmlcommon::Increment_PrgWin($r,\%prog_state,
 				       &mt('last assignment').' '.$fullname);
 	     $flag_latex_header_remove = 'YES';
-	     $i++;
+	     $count++;
 	 }
 	 &Apache::lonhtmlcommon::Close_PrgWin($r,\%prog_state);
 	 $result .= $print_array[0].'  \end{document}';
@@ -1219,7 +1248,6 @@ sub num_to_letters {
 sub get_CODE {
     my ($all_codes,$num,$seed,$size)=@_;
     my $max='1'.'0'x$size;
-    srand($seed);
     my $newcode;
     while(1) {
 	$newcode=sprintf("%06d",int(rand($max)));