Checkpoint.

This commit is contained in:
wkj 2004-05-16 07:54:22 +00:00
parent 61f5c35c94
commit b855148c9b
74 changed files with 5281 additions and 130 deletions

View file

@ -0,0 +1,11 @@
%
% A version of roundpage.ps that assumes a symmetric clipping path. Thanks
% to Matthijs Melchior for the suggestion.
%
/roundpagebbox {
pagebbox dup 0 get pagebbox 2 get add 2 exch put
pagebbox dup 1 get pagebbox 3 get add 3 exch put
pagebbox 0 0 put
pagebbox 1 0 put
} bind def

View file

@ -0,0 +1,11 @@
PostScript files that go in $(POSTLIB). Several, like forms.ps, are
used by most translators supplied in this package. Most PostScript
files only used by a single translator (e.g. the prologue) have been
been moved into the appropriate source directory. Files that end in
.enc support alternate character sets (e.g. ISO Latin 1 alphabet).
The implementation is left open, but typically redefines findfont.
That approach works because findfont is a procedure rather than an
operator, so it's not affected by bind. Also can't depend on having
a systemdict definition for findfont. It's in userdict on Version
48.0 VT600s.

View file

@ -0,0 +1,127 @@
%
% Tune things up so Linotronic output looks more like the APS-5. Pull this file
% into dpost output using the -C option. To get the best looking output run dpost
% with the -e2 option and use special font files that look like the APS tables but
% have character codes (ie. the fourth column in the width tables) appropriate for
% PostScript fonts. Widths in these tables must be for APS fonts!
%
% Start with fat versions of the stroked Courier and Courier-Oblique fonts - from
% Johnathan Shopiro.
%
/newdict /Courier findfont length dict def
/Courier findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 65 put
/Courier newdict definefont pop
/newdict /Courier-Oblique findfont length dict def
/Courier-Oblique findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 65 put
/Courier-Oblique newdict definefont pop
%
% Scaled down versions of the Helvetica font family.
%
/newdict /Helvetica findfont length dict def
/Helvetica findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica newdict definefont pop
/newdict /Helvetica-Oblique findfont length dict def
/Helvetica-Oblique findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica-Oblique newdict definefont pop
/newdict /Helvetica-Bold findfont length dict def
/Helvetica-Bold findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica-Bold newdict definefont pop
/newdict /Helvetica-BoldOblique findfont length dict def
/Helvetica-BoldOblique findfont {
1 index /FontMatrix eq {.922 .922 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Helvetica-BoldOblique newdict definefont pop
%
% Scaled up versions of the Times font family.
%
/newdict /Times-Roman findfont length dict def
/Times-Roman findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-Roman newdict definefont pop
/newdict /Times-Italic findfont length dict def
/Times-Italic findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-Italic newdict definefont pop
/newdict /Times-Bold findfont length dict def
/Times-Bold findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-Bold newdict definefont pop
/newdict /Times-BoldItalic findfont length dict def
/Times-BoldItalic findfont {
1 index /FontMatrix eq {1.0225 1.0225 matrix scale matrix concatmatrix} if
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
/Times-BoldItalic newdict definefont pop

View file

@ -0,0 +1,40 @@
%
% Simple program to print a banner page
%
/banner {
/saveobj save def
erasepage initgraphics
/#copies 1 def
/inch {72 mul} bind def
/pagebbox [clippath pathbbox newpath] def
/font /Helvetica def
/size 20 def
/height pagebbox 3 get def
/width pagebbox 2 get .09 mul def
.92 setgray
pagebbox 0 get pagebbox 1 get moveto
width 0 rlineto 0 height rlineto width neg 0 rlineto closepath eofill
pagebbox 2 get pagebbox 1 get moveto
width neg 0 rlineto 0 height rlineto width 0 rlineto closepath eofill
0 setgray
font findfont size scalefont setfont
/linesp size size .15 mul add neg def
/tab (Destination) stringwidth pop 1.5 mul def
/nextline {0 0 moveto show tab 0 moveto show 0 linesp translate} def
pagebbox 0 get 1.5 width mul add pagebbox 3 get 2.0 width mul sub translate
(Bin) nextline
(Name) nextline
(Owner) nextline
(File) nextline
(Account) nextline
(Destination) nextline
(Spooldate) nextline
showpage
saveobj restore
} bind def

View file

@ -0,0 +1,156 @@
%
% Stuff used to draw or set text along a baseline specified by parametric equations
% for x and y.
%
/left -1 def
/center 0 def
/right 1 def
/baselinedict 50 dict def
/newbaseline {
baselinedict begin
/g' exch bind def
/f' exch bind def
/g exch bind def
/f exch bind def
counttomark 2 eq {/hoffset exch def} if
/res exch def
/t 0 def
/s 0 def
/voffset false def
cleartomark
end
} bind def
/drawfunnytext {
baselinedict begin
/t exch def
/mode exch def
/str exch def
mode left eq {
/leftstring emptystring def
/rightstring str def
} if
mode right eq {
/leftstring str reversestring def
/rightstring emptystring def
} if
mode center eq {
str splitstring
/rightstring exch def
/leftstring exch reversestring def
} if
gsave currentpoint translate leftstring left t baselineshow grestore
gsave currentpoint translate rightstring right t baselineshow grestore
/t 0 def
/s 0 def
/voffset false def
cleartomark
end
} bind def
/setfunnytext {
baselinedict begin
/vpos exch def
/hpos exch def
/str exch def
voffset vpos ne {
/voffset vpos def
/t 0 def
/s hoffset def
} if
gsave
hoffset voffset translate
0 0 moveto
/ds hpos s sub def
/dt ds t f' dup mul t g' dup mul add sqrt res mul div def
/s s ds add def
/t t dt add def
str right t baselineshow
grestore
end
} bind def
baselinedict begin
/f {} bind def
/g {pop 0} bind def
/f' {pop 1} bind def
/g' {pop 0} bind def
/s 0 def
/t 0 def
/res 72 def
/onecharstring ( ) def
/emptystring () def
/baselineshow {
/t exch def
/mode exch def
/str exch def
gsave
t f res mul t g res mul translate
0 0 moveto
t g' t f' atan rotate
{
mode right eq {pop} if
grestore gsave
onecharstring 0 3 -1 roll put onecharstring stringwidth pop
/ds exch mode mul def
/dt ds t f' dup mul t g' dup mul add sqrt res mul div def
/t t dt add def
/s s ds add def
t f res mul t g res mul translate
0 0 moveto
t g' t f' atan rotate
mode left eq {pop} if
} str kshow
grestore
} bind def
/reversestring {
/str1 exch def
/str2 str1 length string def
/i 0 def
/n str1 length 1 sub def
{
str1 n get str2 exch i exch put
/i i 1 add def
/n n 1 sub def
n 0 lt {exit} if
} loop
str2
} bind def
/splitstring {
/str1 exch def
/len str1 stringwidth pop def
/s 0 def
/n 0 def
str1 length {
str1 n get onecharstring exch 0 exch put
/s onecharstring stringwidth pop s add def
s len 2 div ge {exit} if
/n n 1 add def
} repeat
str1 0 n 1 add getinterval
str1 n str1 length n sub getinterval
} bind def
end

View file

@ -0,0 +1,65 @@
%
% Color and reverse video support for dpost. A call made to setcolor with two
% arguments implies reverse video printing.
%
/rgb {setrgbcolor} bind def
/hsb {sethsbcolor} bind def
/colordict 50 dict dup begin
/red { 1 0 0 } def
/green { 0 1 0 } def
/blue { 0 0 1 } def
/cyan { 0 1 1 } def
/magenta { 1 0 1 } def
/yellow { 1 1 0 } def
/white { 1 1 1 } def
/black { 0 0 0 } def
end def
/setcolor {
counttomark 1 eq {
dup colordict exch known not {pop /black} if
colordict exch get exec setrgbcolor
} if
counttomark 2 eq {
/backcolor exch def
/textcolor exch def
colordict backcolor known not colordict textcolor known not or {
/backcolor colordict /black get def
/textcolor colordict /white get def
} if
/backcolor colordict backcolor get def
/textcolor colordict textcolor get def
/dY1 0 def
/dY2 0 def
textcolor exec setrgbcolor
} if
} bind def
/drawrvbox {
/x2 exch def
/x1 exch def
currentpoint dup
/y1 exch def
/y2 exch def pop
dY1 0 eq dY2 0 eq and {
currentfont /FontBBox get aload pop
currentfont /FontMatrix get dtransform /dY2 exch def pop
currentfont /FontMatrix get dtransform /dY1 exch def pop
} if
/y1 y1 dY1 add def
/y2 y2 dY2 add def
backcolor exec setrgbcolor
newpath
x1 y1 moveto
x2 y1 lineto
x2 y2 lineto
x1 y2 lineto
closepath fill
textcolor exec setrgbcolor
} bind def

View file

@ -0,0 +1,26 @@
%
% Fat versions of the stroked Courier and Courier-Oblique - from Johnathan Shopiro.
% Can be selectively pulled in using the -C option that's available with all the
% PostScript translators or permanently added to any of the prologues. Helps on
% Linotronic typesetters, where Courier and Courier-Oblique are too light!
%
/newdict /Courier findfont length 1 add dict def
/Courier findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 60 put
/Courier newdict definefont pop
/newdict /Courier-Oblique findfont length 1 add dict def
/Courier-Oblique findfont {
1 index /FID ne
{newdict 3 1 roll put}
{pop pop}
ifelse
} forall
newdict /StrokeWidth 60 put
/Courier-Oblique newdict definefont pop

View file

@ -0,0 +1,213 @@
%
% Procedures that let you print any number of pages on each sheet of paper. It's
% far from perfect and won't handle everything (eg. it's not recursive), but should
% be good enough for now. Assumes the default page coordinate system has been set
% up before setupforms is called. lastpage makes certain the last page is printed,
% and should be called immediately after the %%Trailer comment.
%
% Three lines of code needed for page image clipping have been commented out for
% now. It works, but can really slow things down on some versions of PostScript.
% Uncomment them if you want to clip pages.
%
/setupforms {
/formsperpage exch def
/currentform 0 def
/slop 5 def
/min {2 copy gt {exch} if pop} def
%
% Save the current environment so the real showpage can be restored when we're all
% done. Occasionally helps when a banner page is included with the job.
%
/saveobj save def
%
% Number of rows and columns we'll need - may exchange them later.
%
/columns formsperpage sqrt ceiling cvi def
/rows formsperpage columns div ceiling cvi def
%
% Slop leaves a little room around the edge so page images can be outlined and have
% the borders show up. Distance is in default coordinates, so we need to figure out
% how it maps into user coordinates.
%
6 array defaultmatrix
6 array currentmatrix
6 array invertmatrix
6 array concatmatrix
/tempmatrix exch def
0 slop tempmatrix dtransform dup mul exch dup mul add sqrt
/slop exch def
%
% Determine how big the image area is, using the clipping path bounding box minus
% a little and leave the coordinates of the lower left corner of the clipping path
% on the stack. Also temporarily set the size of each page (ie. formheight and
% formwidth) from the clipping path - just in case old software uses this stuff.
% Only works for coordinate systems that have been rotated by a multiple of 90
% degrees.
%
newpath clippath pathbbox
2 index sub dup /formheight exch def slop 2 mul sub /pageheight exch def
2 index sub dup /formwidth exch def slop 2 mul sub /pagewidth exch def
%
% New translators all store the size of each page in default coordinates in the
% pagebbox array and it can be different than the size determined by the clipping
% path. If we can find pagebbox use it to set the real dimensions of each page.
% Leaves the coordinates of the lower left corner on the stack, (either from
% pagebbox or clippath) so four numbers are there when we're done.
%
userdict /gotpagebbox known userdict /pagebbox known and {
newpath
pagebbox 0 get pagebbox 1 get tempmatrix transform moveto
pagebbox 0 get pagebbox 3 get tempmatrix transform lineto
pagebbox 2 get pagebbox 3 get tempmatrix transform lineto
pagebbox 2 get pagebbox 1 get tempmatrix transform lineto
closepath pathbbox
2 index sub /formheight exch def
2 index sub /formwidth exch def
} {2 copy} ifelse
%
% Top two numbers are the displacement from the job's origin to the lower left
% corner of each page image when we finish setting up the new coordinate system.
%
/ycorner exch def
/xcorner exch def
%
% The two numbers left on the stack are the coordinates of the lower left corner
% of the clipping path. Go there and then up a bit so page images can be outlined.
%
translate
slop slop translate
%
% If the page is wider than high we may be able to do better if we exchange rows
% and columns. Won't make a difference in the current orientation or if rows and
% columns are the same.
%
pagewidth pageheight gt {
rows columns /rows exch def /columns exch def
} if
%
% Find the orientation and scaling that makes things as large as possible. More
% than what's really needed. First calculation essentially finds the minimum of
% 1/rows and 1/columns.
%
pagewidth formwidth columns mul div pageheight formheight rows mul div min
pageheight formwidth columns mul div pagewidth formheight rows mul div min
2 copy lt {
rotation 1 eq {
landscape {
0 pageheight translate
-90 rotate
}{
pagewidth 0 translate
90 rotate
} ifelse
}{
landscape {
pagewidth 0 translate
90 rotate
}{
0 pageheight translate
-90 rotate
} ifelse
} ifelse
pagewidth pageheight /pagewidth exch def /pageheight exch def
exch
} if
%
% Second number from the top is the best choice. Scale so everything will fit on
% the current page, go back to the original origin, and then get ready for the
% first page - which goes in the upper left corner.
%
pop dup dup scale
xcorner neg ycorner neg translate
0 rows 1 sub formheight mul translate
%
% Try to center everything on the page - scaling we used is on top of the stack.
%
dup pagewidth exch div formwidth columns mul sub 2 div
exch pageheight exch div formheight rows mul sub 2 div translate
%
% Redefine showpage.
%
/!PreForms~showpage~ /showpage load def % save current showpage
/showpage {
saveobj restore
% initclip
formsperpage 1 gt {
gsave .1 setlinewidth outlineform stroke grestore
} if
formwidth 0 translate
/currentform currentform 1 add def
currentform columns mod 0 eq {
columns formwidth mul neg formheight neg translate
} if
currentform formsperpage mod 0 eq {
gsave !PreForms~showpage~ grestore
currentform columns mod formwidth mul neg
formsperpage columns idiv formheight mul translate
/currentform 0 def
} if
% outlineform clip newpath
/saveobj save def
} bind def
/outlineform {
newpath
xcorner ycorner moveto
formwidth 0 rlineto
0 formheight rlineto
formwidth neg 0 rlineto
closepath
} bind def
/lastpage {
formsperpage 1 gt {
currentform 0 ne {
/saveobj save def
0 1 formsperpage currentform sub formsperpage mod {
pop showpage
} for
saveobj restore
} if
saveobj restore
saveobj restore
} if
} def
%
% Clip the first page image and save the environment we just set up, including
% the redefined showpage.
%
% outlineform clip
newpath
/saveobj save def
} def

View file

@ -0,0 +1,12 @@
</$objtype/mkfile
<../config
all:VQ:
;
install installall:V:
cp *.ps ps.* $POSTLIB
clean nuke:VQ:
;

View file

@ -0,0 +1,16 @@
%
% Keywords begin with an @ in the first column. The value follows on the next
% line and includes everything up to next keyword line, except for comments
% which are lines that begin with % in the first column.
%
@manualfeed
statusdict begin
/manualfeedtimeout 300 def
/manualfeed true def
end
@ledgertray
statusdict begin
ledgertray
end

View file

@ -0,0 +1,30 @@
%
% Tries to round clipping path dimensions, as stored in array pagebbox, so they
% match one of the known sizes in the papersizes array. Lower left coordinates
% are always set to 0.
%
/roundpagebbox {
7 dict begin
/papersizes [8.5 inch 11 inch 14 inch 17 inch] def
/mappapersize {
/val exch def
/slop .5 inch def
/diff slop def
/j 0 def
0 1 papersizes length 1 sub {
/i exch def
papersizes i get val sub abs
dup diff le {/diff exch def /j i def} {pop} ifelse
} for
diff slop lt {papersizes j get} {val} ifelse
} def
pagebbox 0 0 put
pagebbox 1 0 put
pagebbox dup 2 get mappapersize 2 exch put
pagebbox dup 3 get mappapersize 3 exch put
end
} bind def

View file

@ -0,0 +1,52 @@
%
% Shading support - primarily for ASCII file translators.
%
/grays [0.98 0.9 0.75 0.6] def
/setshade {
/level exch def
level 0 le {
/textgray 0 def
/backgray 1 def
}{
/backgray level grays length gt
{/textgray 1 def 0}
{/textgray 0 def grays level 1 sub get}
ifelse def
} ifelse
textgray setgray
/dY1 0 def
/dY2 0 def
} bind def
/drawrvbox {
/x2 exch charwidth mul def
/x1 exch charwidth mul def
x1 x2 lt {
dup % expects y on top
/y1 exch linespace mul def
/y2 y1 def
dY1 0 eq dY2 0 eq and {
currentfont /FontBBox get aload pop
160 sub
currentfont /FontMatrix get dtransform /dY2 exch def pop
100 add
currentfont /FontMatrix get dtransform /dY1 exch def pop
} if
/y1 y1 dY1 add def
/y2 y2 dY2 add def
backgray setgray
newpath
x1 y1 moveto
x2 y1 lineto
x2 y2 lineto
x1 y2 lineto
closepath fill
} if
textgray setgray
} bind def

View file

@ -0,0 +1,28 @@
%
% Unbind the operators in an executable array or packedarray. Leaves the
% unbound array or the original object on the stack.
%
/unbind {
0 index xcheck
1 index type /arraytype eq
2 index type /packedarraytype eq or and {
dup length array copy cvx
dup 0 exch {
dup type /operatortype eq {
( ) cvs cvn cvx
} if
0 index xcheck
1 index type /arraytype eq
2 index type /packedarraytype eq or and {
unbind
} if
3 copy put pop
1 add
} forall
pop
} if
} def