#!/usr/bin/perl -w use strict; # make-roster.pl "TITLE" ROSTER DAYSOFWEEK {DATE1} {DATE2} # verify that we have a title my $title; if(defined($ARGV[0])) { $title = $ARGV[0]; print "Title set to $title\n"; } else { print "Please specify a title!\n"; exit(0); } # verify that we have a roster file my @roster; if(defined($ARGV[1]) && -f $ARGV[1]) { @roster = `cat $ARGV[1]`; my $count; for($count=0; $count < @roster; $count++) { my $where = $count + 1; $roster[$count] = "{\\scriptsize $where} $roster[$count]"; } } else { print "Please specify a roster file!\n"; exit(0); } print "The roster is @roster ...\n"; # which days of the week? my @days; if(defined($ARGV[2])) { @days = split(//,$ARGV[2]); print "Days of the week are @days ...\n"; } else { print "Please specify days of the week!\n"; exit(0); } # first, establish what we are doing with dates use Date::Simple('date', 'today'); my $first; my $last; if(!defined($ARGV[3])) { $first = today(); $last = today(); } if(defined($ARGV[3]) && !defined($ARGV[4])) { $first = date($ARGV[3]); $last = $first; } if(defined($ARGV[3]) && defined($ARGV[4])) { $first = date($ARGV[3]); $last = date($ARGV[4]); } print "First date = $first, last date = $last\n"; my $i; for($i = $first; $i <= $last; $i++) { print "date: $i\n"; foreach(@days) { if($i->day_of_week == $_) { my $rep = $i->format("%A, %B %e"); print "Generating for $rep!\n"; make_day($i,$title,@roster); } } } # date, title, @people sub make_day { my $date = shift; my $title = shift; my @people = @_; # break into pages of 20 people each my $line_count = 0; my @lines = (); my $page_count = 0; foreach(@people) { $lines[$line_count++] = $_; if($line_count == 20) { $page_count++; make_page($page_count,$date,$title,@lines); print "Page break!\n"; $line_count = 0; @lines = (); } } if($line_count) { $page_count++; make_page($page_count,$date,$title,@lines); } } sub make_page { my $page_number = shift; my $date = shift; my $title = shift; my @lines = @_; my $middle = ""; my $where = 165; foreach(@lines) { chomp; $middle = $middle . "\\put(-35,$where){$_}\n"; $where = $where - 12; } print "middle = $middle\n"; my $top = <<'EOF'; \documentclass{article} \pagestyle{empty} \begin{document} \setlength\unitlength{1mm} \begin{picture}(110,160)(0,0) %\put(-38,-80){\line(1,0){180}} %1 \put(-38,-68){\line(1,0){180}} %2 \put(-38,-56){\line(1,0){180}} %3 \put(-38,-44){\line(1,0){180}} %4 \put(-38,-32){\line(1,0){180}} %5 \put(-38,-20){\line(1,0){180}} %6 \put(-38,-8){\line(1,0){180}} %7 \put(-38,4){\line(1,0){180}} %8 \put(-38,16){\line(1,0){180}} %9 \put(-38,28){\line(1,0){180}} %10 \put(-38,40){\line(1,0){180}} %11 \put(-38,52){\line(1,0){180}} %12 \put(-38,64){\line(1,0){180}} %13 \put(-38,76){\line(1,0){180}} %14 \put(-38,88){\line(1,0){180}} %15 \put(-38,100){\line(1,0){180}} %16 \put(-38,112){\line(1,0){180}} %17 \put(-38,124){\line(1,0){180}} %18 made a change starting here! \put(-38,136){\line(1,0){180}} %19 \put(-38,148){\line(1,0){180}} %20 \put(-38,160){\line(1,0){180}} %21 \put(-38,172){\line(1,0){180}} %22 \put(-38,184){\line(1,0){180}} %23 % %\put(-38,-80){\line(0,1){264}} %24 %\put(52,-80){\line(0,1){264}} %24 %\put(142,-80){\line(0,1){264}} %24 \put(-38,-68){\line(0,1){252}} %24 \put(52,-68){\line(0,1){252}} %24 \put(142,-68){\line(0,1){252}} %24 % \put(-35,190){TITLE} \put(55,190){DATE} \put(-35,176){\large Name} \put(55,176){\large Signature} % % Names section EOF my $bottom = <<'EOF'; % % \end{picture} \end{document} EOF my $rep = $date->format("%A, %B %e"); $top =~ s/TITLE/$title/; $top =~ s/DATE/$rep/; print "$top $middle $bottom\n"; open(FH,">${date}_${page_number}.tex"); print FH "$top $middle $bottom\n"; close(FH); }