#!/usr/local/bin/tclsh7.6 puts "Automated printing Version 1.1" proc quit { } { global dir cd $dir exit } proc parseCapaConfig { } { global onesided twosided set filename [file join [pwd] capa.config] set error [ catch { set fileId [open $filename "r"] } ] if { $error } { return } while { 1 } { gets $fileId aline if { [eof $fileId ] } { break } switch -glob -- "$aline" { "lprOneSided_command *= *" { set onesided [lindex $aline end] } "lprTwoSided_command *= *" { set twosided [lindex $aline end] } } } if { [string first \$PS_file $onesided] == -1 } { set onesided "$onesided \$PS_file" } if { [string first \$PS_file $twosided] == -1 } { set twosided "$twosided \$PS_file" } } proc parsesection { sec set } { if { [ catch { exec echo [pwd] | qzparse -sec $sec \ -set $set >&@ file1 } ] } { puts "Error occured while parsing set: $set section: $sec" quit } } proc latexsection { sec set } { if { [ catch { cd TeX } ] } { puts "Unable to find [pwd]/TeX" quit } if { [ catch { exec latex section$sec-set$set < /dev/null >&@ file1 } ] } { puts "Error occured while latexing set: $set section: $sec" quit } cd .. } proc dvisection { sec set } { if { [ catch { cd TeX } ] } { puts "Unable to find [pwd]/TeX" quit } if { [ catch { exec dvips -o section$sec-set$set.ps \ section$sec-set$set.dvi < /dev/null >&@ file1 } ] } { puts "Error occured while creating dvi, set: $set section: $sec" quit } cd .. } proc printonesided { sec set Printer_selected } { global onesided if { [ catch { cd TeX } ] } { puts "Unable to find [pwd]/TeX" quit } set PS_file section$sec-set$set.ps if { [ catch { eval "exec $onesided < /dev/null >&@ file1" } ] } { puts "Error occured while printing set: $set section: $sec" quit } cd .. } proc printtwosided { sec set Printer_selected } { if { [ catch { cd TeX } ] } { puts "Unable to find [pwd]/TeX" quit } set PS_file section$sec-set$set.ps if { [ catch { eval "exec $twosided < /dev/null >&@file1" } ] } { puts "Error occured while printing set: $set section: $sec" quit } cd .. } proc cleanup { sec set { some 0 } } { set ext "dvi log aux ps tex" if { $some } { set ext "dvi log aux" } foreach ext { tex dvi ps log aux } { exec rm -f TeX/section$sec-set$set.$ext } } if { $argc == 6 } { set pathname [lindex $argv 0] set startsection [lindex $argv 1] set endsection [lindex $argv 2] set setnumber [lindex $argv 3] set sided [lindex $argv 4] set printqueue [lindex $argv 5] puts "Running class $pathname for sections $startsection:$endsection for set $setnumber on printer $printqueue, printing $sided side(s)" } else { if { $argc != 0 } { puts "Usage is $argv0 pathname startsection endsection setnumber #sides printqueue" puts " Specifying 0 sides will leave the postscript files behind and not print" } while { 1 } { puts "Enter the ABSOLUTE pathname of the class:" gets file0 pathname puts "Enter start section:" gets file0 startsection puts "Enter end section:" gets file0 endsection puts "Enter set:" gets file0 setnumber puts "One sided or two sided: (1 or 2)" gets file0 sided if { $sided != 0 } { puts "Enter the name of the printer:" gets file0 printqueue puts "Run class $pathname for sections $startsection:$endsection for set $setnumber on printer $printqueue, printing $sided side(s)? (y or n)" } else { puts "Run class $pathname for sections $startsection:$endsection for set $setnumber with no printing? (y or n)" } if { "y" == [string range [string trimleft [gets file0] ] 0 0 ] } { break } } } set dir [pwd] if { [ catch { cd $pathname } ] } { puts "Invalid class $pathname" quit } set onesided "lpr -P\$Printer_selected" set twosided "lpspr -K2 \$PS_file | lpr -P\$Printer_selected" parseCapaConfig if { $endsection == 0 } { set endsection $startsection } for { set i $startsection } { $i <= $endsection } { incr i } { parsesection $i $setnumber latexsection $i $setnumber dvisection $i $setnumber if { $sided == 1 } { printonesided $i $setnumber $printqueue } elseif { $sided == 2 } { printonesided $i $setnumber $printqueue } if { $sided != 0 } { cleanup $i $setnumber } else { cleanup $i $setnumber 1 } }