[fa.laser-lovers] Scribe defn for multipage output on PostScript printers

laser-lovers@uw-beaver (07/28/85)

From: Brian Reid <reid@Cascade>

I have put together two new Scribe device definitions, which work with
Unilogic's Scribe PostScript driver to produce 2-up and 4-up output
pages. If you say @Device(PShalfpage), then your output comes out
rotated 90 degrees, with two logical pages per physical page, each
reduced by an appropriate amount. If you say @Device(PSquarterpage),
then your output comes out with 4 logical pages per physical page. 

The 2-up output is obviously useful; you might wonder what 4-up is good
for. Well, I use it for doing layout proofs of big documents on my home
printer. My LaserWriter only holds 100 sheets of paper. If I print a
document 4-up, I can get 400 pages printed without me having to tend to
the printer. It also saves paper. The 4-up pages are perfectly readable
as proof copy, though the resulting 4-point and 6-point type is not as
crisp as the 8- or 12-point stuff that comes out on full size pages.

As a complete non sequitur to PostScript Scribe sites, I recommend
strongly that you change Unilogic's "ScaleableLaser" generic device
into a "PostScript" generic device. This is because of the interaction
of the @Picture command with the generic device. If some other
scaleable laser format comes along (e.g. if Interpress printers that
can scale fonts ever become available), and you try to piggyback it on
"ScaleableLaser", you will find that @Picture commands will stop
working. Also, users don't seem to be able to spell "Scaleable" very
well; they are constantly writing "ScalableLaser".

------------------ here's how to make the database files ---------------------
For @Device(PShalfpage), copy postsc.dev into pshalf.dev, then make
these changes:

@declare(DeviceInitialization
"%%EndComments
% PostScript Prelude for Scribe (2-up page images 67% scale).
11 2 div 8.5 div dup scale 90 rotate 0 -792 translate
/NP {/COL 1 COL sub def}def
/EOD {COL 0 ne {showpage}if}def
/COL 0 def
/BS {/SV save def COL 612 mul 0 translate
	 newpath 0 0 moveto 612 0 lineto 612 792 lineto
	 0 setlinewidth stroke} def
/ES {COL 1 eq {showpage} if SV restore NP} def
/SC {setrgbcolor} def
/RST {100 div} def
/CVTXY {RST 792 sub abs exch RST exch} def
/RDF {WFT findfont SLT 0 eq 
  {SSZ scalefont}
  {[SSZ 0 SLT sin SLT cos div SSZ mul SSZ 0 0]makefont}
  ifelse
  setfont} def
/SLT 0 def
/SI { /SLT exch def RDF } def
/WFT /Courier def
/SF { /WFT exch def RDF } def
/SSZ 10 def
/SS { /SSZ exch def RDF } def
/MT { CVTXY moveto } def
/XM {RST currentpoint exch pop moveto} def
/UL {gsave newpath CVTXY moveto RST dup 2 div 0 exch rmoveto
   setlinewidth RST 0 rlineto stroke grestore} def
/PB {/PV save def CVTXY translate pop}def
/PE {PV restore}def
/SH{show}def
/MSS {SSW RST 0 rmoveto} def
/SNS { SSW add /SSW exch def MSS} def
/MX {/SSW exch def SH MSS} def
/M2 {SH MSS MSS} def
/M {SH MSS} def
/M+ {SH 1  SNS} def
/M- {SH -1 SNS} def
%%EndProlog
",DeviceFinalization "EOD
")


For 4-up output, create psquar.dev from postsc.dev, then make these
changes:

@declare(DeviceInitialization
"%%EndComments
% PostScript Prelude for Scribe (4-up page images 50% scale).
0.5 0.5 scale
/NP {/COL COL 1 add def COL 1 gt
	{/COL 0 def /ROW ROW 1 add def
	 ROW 1 gt {/ROW 0 def} if } if
	} def
/EOD {ROW 0 ne COL 0 ne or{showpage}if} def
/ROW 0 def /COL 0 def
/BS {/SV save def COL 612 mul 1 ROW sub 792 mul translate
	 newpath 0 0 moveto 612 0 lineto 612 792 lineto
	 0 setlinewidth stroke} def
/ES {ROW 1 eq {COL 1 eq {showpage} if} if SV restore NP} def
/SC {setrgbcolor} def
/RST {100 div} def
/CVTXY {RST 792 sub abs exch RST exch} def
/RDF {WFT findfont SLT 0 eq 
  {SSZ scalefont}
  {[SSZ 0 SLT sin SLT cos div SSZ mul SSZ 0 0]makefont}
  ifelse
  setfont} def
/SLT 0 def
/SI { /SLT exch def RDF } def
/WFT /Courier def
/SF { /WFT exch def RDF } def
/SSZ 10 def
/SS { /SSZ exch def RDF } def
/MT { CVTXY moveto } def
/XM {RST currentpoint exch pop moveto} def
/UL {gsave newpath CVTXY moveto RST dup 2 div 0 exch rmoveto
   setlinewidth RST 0 rlineto stroke grestore} def
/PB {/PV save def CVTXY translate pop}def
/PE {PV restore}def
/SH{show}def
/MSS {SSW RST 0 rmoveto} def
/SNS { SSW add /SSW exch def MSS} def
/MX {/SSW exch def SH MSS} def
/M2 {SH MSS MSS} def
/M {SH MSS} def
/M+ {SH 1  SNS} def
/M- {SH -1 SNS} def
%%EndProlog
",DeviceFinalization "EOD
")

Don't forget to change the @Marker commands too.