#!/bin/csh -f # # Andrew Trevorrow, October 1988 # This shell script can print a DVI file, PostScript program, or text file # on an Apple LaserWriter, DEC PrintServer 40 or Linotronic 300. # Search for SYSDEP to locate site-specific values that you may want to change. # set tex_ps = (/usr/users/applied/staff/atrevorr/ps) # SYSDEP set tfminfo = (-T /usr/local/lib/tex/fonts/ -P ps-) # SYSDEP set dev = lw # SYSDEP: use LaserWriter if no -dev value # # DON'T change these values unless you know what you're doing: # set filename # changed by last argument without "-" prefix set filetype = UNKNOWN # changed by -dvi/-ps/-text/-two/-wide or filename set ps_queue = default # use device-specific default if no -q value set conserve = default # use device-specific default if no -con or -nocon set rev = default # use device-specific default if no -rev or -norev set copies = 1 # changed by -c value set output # changed by -o value set note # changed by -n value set hoff # changed by -ho value set voff # changed by -vo value set pages # changed by -p value set inc # changed by -i value set mag # changed by -m value set units # changed by -u value set stats # changed by -s set landscape # changed by -l set linores = 1270 # changed by -lowres (to 635) set size = a4p # changed by -size value set cutmarks = true # -cut = do cut marks; changed by -nocut set flag = true # -flag = flag page enabled; changed by -noflag set manual = false # no manual feed; changed by -manual # # Parse command line and set various parameters. # @ i = 1 while ($i <= $#argv) set arg = "$argv[$i]" if ("$arg" =~ -*) then # arg must be an option if ("$arg" == '-dvi') then set filetype = DVI else if ("$arg" == '-ps') then set filetype = PS else if ("$arg" == '-text') then set filetype = TEXT else if ("$arg" == '-two') then set filetype = TWO else if ("$arg" == '-wide') then set filetype = WIDE else if ("$arg" == '-dev' | "$arg" == '-device') then @ i++ if ($i > $#argv) then echo 'Missing string after -dev\!' exit(1) endif set dev = "$argv[$i]" else if ("$arg" == '-o') then @ i++ if ($i > $#argv) then echo 'Missing file after -o\!' exit(1) endif set output = "$argv[$i]" else if ("$arg" == '-n') then @ i++ if ($i > $#argv) then echo 'Missing string after -n\!' exit(1) endif set note = "$argv[$i]" else if ("$arg" == '-ho') then @ i++ if ($i > $#argv) then echo 'Missing dimension after -ho\!' exit(1) endif set hoff = (-H"$argv[$i]") else if ("$arg" == '-vo') then @ i++ if ($i > $#argv) then echo 'Missing dimension after -vo\!' exit(1) endif set voff = (-V"$argv[$i]") else if ("$arg" == '-c') then @ i++ if ($i > $#argv) then echo 'Missing integer after -c\!' exit(1) endif set copies = "$argv[$i]" if ("$copies" !~ [0,1,2,3,4,5,6,7,8,9]*) then echo 'Bad -c value:' $copies echo 'Specify a positive integer.' exit(1) else if ("$copies" < 1 | "$copies" > 25) then echo 'Bad -c value:' $copies echo 'Specify a positive integer from 1 to 25.' exit(1) endif else if ("$arg" == '-i') then @ i++ if ($i > $#argv) then echo 'Missing integer after -i\!' exit(1) endif set inc = (-i"$argv[$i]") else if ("$arg" == '-m') then @ i++ if ($i > $#argv) then echo 'Missing integer after -m\!' exit(1) endif set mag = (-m"$argv[$i]") else if ("$arg" == '-u') then @ i++ if ($i > $#argv) then echo 'Missing units after -u\!' exit(1) endif set units = (-u"$argv[$i]") else if ("$arg" == '-p') then @ i++ if ($i > $#argv) then echo 'Missing page range after -p\!' exit(1) endif set pages = (-p"$argv[$i]") else if ("$arg" == '-s') then set stats = -s # show stats (if DVI) else if ("$arg" == '-con' | "$arg" == '-conserve') then set conserve = -c # conserve VM (if DVI) else if ("$arg" == '-nocon' | "$arg" == '-noconserve') then set conserve # don't conserve VM else if ("$arg" == '-rev' | "$arg" == '-reverse') then set rev = -b # reverse page order (if DVI) else if ("$arg" == '-norev' | "$arg" == '-noreverse') then set rev # don't reverse else if ("$arg" == '-l') then set landscape = -l # swap paper dimens (if DVI) else if ("$arg" == '-f' | "$arg" == '-flag') then set flag = true # we want a flag page (if lw) else if ("$arg" == '-nof' | "$arg" == '-noflag') then set flag = false # no flag page else if ("$arg" == '-man' | "$arg" == '-manual') then set manual = true # wait for manual feed (if lw) else if ("$arg" == '-low' | "$arg" == '-lowres') then set linores = 635 # low resolution (if lino) else if ("$arg" == '-cut' | "$arg" == '-cutmarks') then set cutmarks = true # show cut marks (if lino) else if ("$arg" == '-nocut' | "$arg" == '-nocutmarks') then set cutmarks = false # no cut marks else if ("$arg" == '-size') then @ i++ if ($i > $#argv) then echo 'Missing value after -size\!' exit(1) endif set size = "$argv[$i]" else if ("$arg" == '-q') then @ i++ if ($i > $#argv) then echo 'Missing queue after -q\!' exit(1) endif set ps_queue = "$argv[$i]" else echo 'Unknown option:' $arg exit(1) endif else # arg does not start with '-' so assume it is filename set filename = "$arg" endif @ i++ end if ($filename == '') then echo 'File not given\!' exit(1) endif # # If filetype is still UNKNOWN then we check filename to determine filetype. # Note that if foo and foo.dvi exist then "psprint foo" will use foo.dvi # (and "psprint foo -text" will use foo): # if ($filetype == 'UNKNOWN') then if ($filename =~ *.ps) then set filetype = PS else if ($filename =~ *.dvi) then set filetype = DVI else if (-e {$filename}.dvi) then set filename = {$filename}.dvi set filetype = DVI else set filetype = TEXT endif endif # # Check that file exists: # if (-e $filename) then # file exists else echo File not found: $filename exit(1) endif # # Check for valid device; if ok then set up some device-specific values: # if ("$dev" == 'lw') then if ("$ps_queue" == 'default') then set ps_queue = ps_local # SYSDEP: default LaserWriter queue else # SYSDEP: test for valid queue? endif if ("$rev" == 'default') set rev = -b # default is reverse pages if ("$conserve" == 'default') set conserve # default is don't conserve VM set papersize = "-x 210mm -y 297mm" # SYSDEP: A4 set res = 300 set dummyfont = (-d cmr10.300pk) # SYSDEP set pkdir = (-f /usr/local/bin/dvitovdu/pk/) # SYSDEP else if ("$dev" == 'lino') then if ("$ps_queue" == 'default') then set ps_queue = lino_queue # SYSDEP: default Linotronic queue else # SYSDEP: test for valid queue? endif if ("$rev" == 'default') set rev # default is don't reverse if ("$conserve" == 'default') set conserve = -c # default is conserve VM if ("$size" == 'a3l') then set pagesetup = A3Lsetup # defined in lino_header.ps set papersize = "-x 297mm -y 420mm" # A3 else if ("$size" == 'a4p') then set pagesetup = A4Psetup set papersize = "-x 210mm -y 297mm" # A4 else if ("$size" == 'a4l') then set pagesetup = A4Lsetup set papersize = "-x 210mm -y 297mm" else if ("$size" == 'a5p') then set pagesetup = A5Psetup set papersize = "-x 148mm -y 210mm" # A5 else if ("$size" == 'a5l') then set pagesetup = A5Lsetup set papersize = "-x 148mm -y 210mm" else if ("$size" == 'b5p') then set pagesetup = B5Psetup set papersize = "-x 176mm -y 250mm" # B5 else if ("$size" == 'b5l') then set pagesetup = B5Lsetup set papersize = "-x 176mm -y 250mm" else echo 'Unknown -size value:' "$size" '(use a3l,a4p,a4l,a5p,a5l,b5p,b5l)' exit(1) endif set res = $linores # 635 or 1270 set dummyfont = (-d cmr10.{$res}pk) # SYSDEP set pkdir = (-f /usr/local/tex/linopk/) # SYSDEP else if ("$dev" == 'ps40') then if ("$ps_queue" == 'default') then set ps_queue = ps40_queue # SYSDEP: default PrintServer queue else # SYSDEP: test for valid queue? endif if ("$rev" == 'default') set rev # default is don't reverse pages if ("$conserve" == 'default') set conserve # default is don't conserve VM set papersize = "-x 210mm -y 297mm" # SYSDEP: A4 set res = 300 set dummyfont = (-d cmr10.300pk) # SYSDEP set pkdir = (-f /usr/local/tex/write-white/) # SYSDEP else echo 'Unknown device:' "$dev" '(specify lw, lino or ps40)' exit(1) endif # # Linotronic should only be used to print DVI or PS files: # if ("$dev" == 'lino') then if ($filetype != 'DVI' & $filetype != 'PS') then echo 'Linotronic should not be used to print a text file\!' exit(1) endif endif # # Build temporary file in current directory: # set tmpfile = (psprint.tmp) echo Creating $tmpfile if ("$dev" == 'lw') then # # We no longer start with ^D because of problems encountered when # a LaserWriter is connected to an X25 pad (due to echoing of ^D): # cp $tex_ps/lw_header.ps $tmpfile echo '/@USER (USER :' $user ') def' >> $tmpfile echo '/@NODE (NODE :' $HOST ') def' >> $tmpfile echo '/@FILE (FILE :' $filename ') def' >> $tmpfile echo '/@FORMAT (FORMAT :' $filetype ') def' >> $tmpfile echo '/@QUEUED (QUEUED :' `date` ') def' >> $tmpfile echo '/@NOTE (NOTE :' $note ') def' >> $tmpfile if ($flag != 'true') then echo '/@bannerpage { } def' >> $tmpfile # no flag page endif if ($manual == 'true') then echo 'statusdict begin /manualfeed true def end' >> $tmpfile endif else if ("$dev" == 'lino') then echo '/@USER ('$user' '$filename') def' >> $tmpfile echo '/@DATE ('`date`') def' >> $tmpfile echo '/@NOTE ('$note') def' >> $tmpfile cat $tex_ps/lino_header.ps >> $tmpfile echo $pagesetup >> $tmpfile # call page setup procedure if ($cutmarks != 'true') then echo '/@cutmarks { } def' >> $tmpfile # no cutmarks endif else # "$dev" must be 'ps40' cp $tex_ps/ps40_header.ps $tmpfile endif # # The value of #copies will be used by PostScript's showpage operator to # print multiple copies of each page: # echo '/#copies '$copies' def' >> $tmpfile # # Here are some definitions used in the various prologues: # if ("$dev" == 'lw') echo '/dev (LW) def' >> $tmpfile if ("$dev" == 'lino') echo '/dev (LINO) def' >> $tmpfile if ("$dev" == 'ps40') echo '/dev (PS40) def' >> $tmpfile echo '/res '$res' def' >> $tmpfile echo '/fspec ('$filename') def' >> $tmpfile # used in two.ps and wide.ps if ("$landscape" == '-l') then echo '/land true def' >> $tmpfile else echo '/land false def' >> $tmpfile endif # # Each type of file has its own prologue: # if ($filetype == 'DVI') cat $tex_ps/tex.ps $tex_ps/{$dev}_fonts.ps >> $tmpfile if ($filetype == 'PS') cat $tex_ps/ps.ps >> $tmpfile if ($filetype == 'TEXT') cat $tex_ps/text.ps >> $tmpfile if ($filetype == 'TWO') cat $tex_ps/two.ps >> $tmpfile if ($filetype == 'WIDE') cat $tex_ps/wide.ps >> $tmpfile # # If DVI file then run psdvi and check exit status: # if ($filetype == 'DVI') then set psdvifile = (psdvi.tmp) $tex_ps/psdvi \ $rev $landscape $stats $conserve $pkdir $dummyfont $tfminfo \ "$pages" $inc $mag $units $hoff $voff $papersize \ -h $tmpfile -o $psdvifile -r $res \ $filename # best if last argument # # psdvi can exit with 0=success, 1=error, 2=warning: # if ($status >= '1') then # psdvi saw warning(s) or fatal error rm $tmpfile # delete temporary header echo 'Printing aborted due to error(s). '$tmpfile deleted. if (-e $psdvifile) then # psdvi output file exists rm $psdvifile # so delete it endif exit(1) else # no errors rm $tmpfile # delete header mv $psdvifile $tmpfile # and use psdvi output as temporary file endif endif # # Complete temporary file: # if ("$dev" == 'lw') then if ($filetype == 'DVI') then cat $tex_ps/lw_trailer.ps $tex_ps/ctrld >> $tmpfile else if ($filetype == 'PS') then cat $filename $tex_ps/lw_trailer.ps $tex_ps/ctrld >> $tmpfile else # TEXT/TWO/WIDE cat $filename $tex_ps/ctrld >> $tmpfile endif else if ("$dev" == 'lino') then if ($filetype == 'DVI') then cat $tex_ps/lino_trailer.ps $tex_ps/ctrld >> $tmpfile else if ($filetype == 'PS') then cat $filename $tex_ps/lino_trailer.ps $tex_ps/ctrld >> $tmpfile else # TEXT/TWO/WIDE not supported on Linotronic endif else # dev = 'ps40'; no trailer file or ^D needed for PrintServer endif # # If -o used then rename temporary file, else print it: # if ("$output" == '') then lpr -P$ps_queue -h $tmpfile echo Your output has been sent to $ps_queue # echo debug: lpr '-P'$ps_queue '-h' $tmpfile rm $tmpfile else mv $tmpfile $output echo PostScript code saved in $output endif