You are on page 1of 71

%% -------------------------------------------------------------------%% ----------- CorelDRAW!

USER-DEFINED FUNCTON FILE ------------------%% -------------------------------------------------------------------%% NOTES: There are two types of user defined functions: "Spot" and "Fill" - A "Spot" function is a function that takes two floating point argument s, X and Y, both between -1 and 1, and returns a single real value between -1 and 1 (otherwise an execution error occurs) called Z. The domain is a 2 X 2 rectangle that will be mapped (at print ti me) into each cell of the halftoning screen. The 3-D representation of the function Z = f(X,Y) (does not need to be continuous but f(X,Y) must be defined for all -1 <= X, Y < = 1 ) is a surface whose higher points will be whitened first in each cell. For more information about spot functions, read section 4.8 of t he POSTSCRIPT LANGUAGE REFERENCE MANUAL (By Adobe Systems Inc.). - A Fill function takes between 0 and 5 arguments. It assumes there is a path already drawn (may be closed or not, may be disconnected) a nd attempts to fill it. A simple fill function could be: /MyFill1 { %0 parms .70 setgray fill } bind def For more complex fills, the fill function may refer to the curre nt object's bounding box that is always defined in MILs (1/1000 of an inch) and relative to the bottom left of the current page. Globals Bbllx, Bblly, Bburx, Bbury can always be used to get the object's bbox's lower left and upper right corners. NOTE 1: For objects with disconnected paths like multi-letter wo rds and disconnected lines & curves, the fill function will be calle d once for each closed sub-path. However, the object's bounding box re mains the same for each call. NOTE 2: When called by CorelDRAW!, the fill function will be ins ide a "gsave - grestore" sequence so that the fill function does not n eed to restore the original graphics state. Also, the fill function sh

ould make no assumption about the current graphics state other than t he following: - The current rotation angle is 0 (-90 for sideways pages) - The current unit is the MIL (1 /1000 inch) - There is a path ready to be fi lled. SYNTAX FOR THIS FILE: - A function definition starts with a "%@Spot" or a "%@Fill" comment lin e starting in column one indicating that a spot or a fill function is abou t to be defined. The remainder of the line is ignored. - The line immediately following must start with the function name immediately preceeded by a '/' (slash) in column one (eg: /MyFirstFill). This name will be used to identify the fill in the .CDR file and the .EPS files. The remainder of the line indicates the name that appears in the custom function selection dialog box of CorelDRAW! and the user parameters for that function: Spot functions are not allowed any user parameters just a display name. Fill functions are allowed from 0 to 5 parmeters specified as follows: %<userfnname>,<# of parms> ,<parmname1>=<default1>,<parm name2>=<default2>,... where: <userfnname> is the name that is displayed in the PSFILL selection list box, this is the string that is translated for foreign language versions <# of parms> is an integer value between 0 and 5 <parmnameX> is the significance of parm X (string up to 20 chars) <defaultX> is the default numeric value for that parm (always integ er) The number of parameter names & defaults must always mat ch the <# of parms> value. Prior to calling that fill function, the main program wi ll stack the parameters in the same order they were specified. ALL PARMS ARE INTEGERS. EXAMPLE: a fill function with 3 parameters

%@Fill /MyFunction %MyFunctionName,3,Background gray=100,Foreground gr ay=50,Density=4 { ay> <Density> /Density exch 1 10 InRange def ty /ForeGray exch 0 100 InRange def % valida % validate densi % when called, STACK= <BackGray> <ForeGr

te foreground gray /BackGray exch 0 100 InRange def te background gray ... } bind def NOTE: the 'InRange' PostScript function. The main program cannot validate the range of the parame ters. The fill function can use the supplied function: 'InRang e' which is described below: <value> <min> <max> InRange ==> <newval> InRange takes 3 arguments from the stack, then m akes sure that <value> is between <min> and <max>. If so, it le aves <value> on the stack, otherwise it pushes a valid <newva l> on the stack. Note: The 'wDstChck' PostScript function. In the case of a maximum value that equals a minimum val ue, the difference will be null and in most cases will cause a d evision by zero. The fill function can use the supplied function: 'wDstCh ck' which is described below: <MaxValue> <MinValue> wDstChck ==> MaxValue or MaxVa lue+1 If the 2 values are equal then add 1 to MaxValue and leave it on the stack else leave MaxValue unchanged on the stack. - The next n lines contain the function's body enclosed in curly brackets and followed by a "bind def" sequence. - The content of the body is not parsed by CorelDRAW!. A function defin ition is terminated when the next '%@..." sequence is read or at the end of the f ile. - Lines should not exceed 150 characters long. - Function names should not exceed 20 characters. - Parameter names should not exceed 20 characters. - There is no limit for the number of lines in each function. % valida

%@Spot /InvertedSimpleDot %InvertedSimpleDot { %def --SPOT FUNCTION : InvertedSimpleDot dup mul exch dup mul add 1 sub } bind def %@Spot /OutCircleBlk %OutCircleBlk { %def --SPOT FUNCTION : OUTCIRCLE: empty black circles dup mul exch dup mul add 0.6 exch sub abs -0.5 mul } bind def

%@Spot /OutCircleWhi %OutCircleWhi { %def --SPOT FUNCTION : OUTCIRCLE: empty black circles dup mul exch dup mul add 0.6 exch sub abs 0.5 mul } bind def %@Spot /Diamond %Diamond { %def --SPOT FUNCTION : DIAMOND1 abs exch abs 2 copy add .75 le { dup mul exch dup mul add 1 } { 2 copy add 1.25 le {.85 mul add 1 exch sub} {1 sub dup mul exch 1 sub dup mul b} ifelse } ifelse } bind def %@Spot /Diamond2 %Diamond2 { %def --SPOT FUNCTION : DIAMOND2 abs exch abs add 1 exch sub } bind def %@Spot /MicroWaves %MicroWaves { %def --SPOT FUNCTION : MICROWAVES /wy exch def 180 mul cos 2 div wy dup dup dup mul mul sub mul wy add 180 mul cos } bind def %@Spot /Grid %Grid { %def --SPOT FUNCTION : A SQUARE GRID 2 copy abs exch abs gt {exch} if pop 2 mul 1 exch sub 3.5 div } bind def %@Spot /Lines %Lines { %def --SPOT FUNCTION : STRAIGHT LINES pop abs 2 mul 1 exch sub } bind def %@Spot /Star %Star { %def --SPOT FUNCTION : Star abs exch abs 2 copy gt {exch} if 1 sub dup 0 eq { 0.01 add } if atan 360 div } bind def %@Spot /Euclidean %Euclidean { %def --SPOT FUNCTION : EUCLIDEAN composite dot

exch sub

add 1 su

abs exch abs 2 copy add 1 gt {1 sub dup mul exch 1 sub dup mul add 1 sub} {dup mul exch dup mul add 1 exch sub} if else } bind def %@Spot /Rhomboid %Rhomboid { %def --SPOT FUNCTION : RHOMBOID abs exch abs .9 mul add 2 div } bind def %@Spot /Round %Round { %def --SPOT FUNCTION : Round abs exch abs 2 copy add 1 le { dup mul exch dup mul add 1 exch sub } { 1 sub dup mul exch 1 sub dup mul add 1 sub } ifelse } bind def %@Spot /Ellipse %Ellipse { %def --SPOT FUNCTION : Ellipse abs exch abs 2 copy 3 mul exch 4 mul add 3 sub dup 0 lt { pop dup mul exch .75 div dup mul add 4 div 1 exch sub } { dup 1 gt { pop 1 exch sub dup mul exch 1 exch sub .75 div dup mul add 4 div 1 sub } { .5 exch sub exch pop exch pop } ifelse } ifelse } bind def %@Spot /EllipseA %EllipseA { %def --SPOT FUNCTION : EllipseA dup mul .9 mul exch dup mul add 1 exch sub } bind def %@Spot /InvertedEllipseA %InvertedEllipseA { %def --SPOT FUNCTION : InvertedEllipseA dup mul .9 mul exch dup mul add 1 sub } bind def %@Spot /EllipseB %EllipseB { %def --SPOT FUNCTION : EllipseB dup 5 mul 8 div mul exch dup mul exch add sqrt 1 exch sub } bind def %@Spot /EllipseC %EllipseC { %def --SPOT FUNCTION : EllipseC dup mul .9 mul exch dup mul add 1 exch sub } bind def %@Spot /InvertedEllipseC %InvertedEllipseC { %def --SPOT FUNCTION : InvertedEllipseC

dup mul .9 mul exch dup mul add 1 sub } bind def %@Spot /LineX %LineX { %def --SPOT FUNCTION : LineX pop } bind def %@Spot /LineY %LineY { %def --SPOT FUNCTION : LineY exch pop } bind def %@Spot /Square %Square { %def --SPOT FUNCTION : Square abs exch abs 2 copy lt { exch } if pop neg } bind def %@Spot /Cross %Cross { %def --SPOT FUNCTION : Cross abs exch abs 2 copy gt { exch } if pop neg } bind def %@Spot /DoubleDot %DoubleDot { %def --SPOT FUNCTION : DoubleDot 2 {360 mul sin 2 div exch } repeat add } bind def %@Spot /InvertedDoubleDot %InvertedDoubleDot { %def --SPOT FUNCTION : InvertedDoubleDot 2 {360 mul sin 2 div exch } repeat add neg } bind def %@Spot /CosineDot %CosineDot { %def --SPOT FUNCTION : CosineDot 180 mul cos exch 180 mul cos add 2 div } bind def %@Spot /Double %Double { %def --SPOT FUNCTION : Double exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add } bind def %@Spot /InvertedDouble %InvertedDouble { %def --SPOT FUNCTION : InvertedDouble exch 2 div exch 2 { 360 mul sin 2 div exch } repeat add neg } bind def

%---------------------------------------------------------------------------%@Fill /Archimedes %Archimedes,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgr oundgray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.3660 0 0 0.3660 0 0] def /FontType 3 def /FontBBox [0 0 2.7320 2.7320] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 2.7320 0 -0.1 -0.1 2.8320 2.8320 setcachedevice pop begin 0 0 moveto 0.5 0 lineto 0 0.8660 lineto 0.866 1.366 lineto 0 1.866 lineto 0 0.866 lineto 0 1.866 moveto 0.5 2.7320 lineto 1.3660 2.2320 lineto 0.8660 1.3660 lineto 1.8660 1.3660 lineto 1.3660 2.2320 lineto 2.2320 2.7320 lineto 2.7320 1.8660 lineto 1.8660 1.3660 lineto 2.7320 0.8660 lineto 2.2320 0 lineto 1.3660 0.5 lineto 1.8660 1.3660 lineto 1.3660 2.7320 moveto 1.3660 2.2320 lineto 1.3660 0 moveto 1.3660 0.5 lineto 0.5 0 moveto 1.3660 0.5 lineto 0.8660 1.3660 lineto 2.2320 0 moveto

2.7320 0 lineto 2.2320 2.7320 moveto 2.7320 2.7320 lineto 0 2.7320 moveto 0.5 2.7320 lineto 2.7320 0.8660 moveto 2.7320 1.8660 lineto Linewidth pntsize div 2.7320 mul setlinewidth stroke end } def end /pntsize 2000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx pntsize Bburx { 1 index moveto (a) show } for pop } for } bind def %@Fill /Bars %Bars,4, Width:=10, Spacing(%):=100, Maximumgray:=100, Minimumgray:=10 { /MinGrey exch 0 100 InRange def /MaxGrey exch MinGrey 100 InRange def /Spacing exch 0 300 InRange def /Width exch 1 100 InRange def /dgrey MaxGrey MinGrey sub def /inc 1 Spacing 100 div add def eoclip newpath currentscreen 3 -1 roll pop 90 3 1 roll setscreen Bbllx Bblly translate /dx Bburx Bbllx sub Width div def /dy Bbury Bblly sub Width div def Width 10 mul dup scale

/mtx matrix currentmatrix def .05 setlinewidth 0 inc dx { 0 translate -.5 .05 .5 { dup 0 moveto dup dy lineto dup mul 0.250001 exch sub sqrt dgrey mul MaxGrey exch sub 100 stroke } for mtx setmatrix } for dx 0 translate 90 rotate /mtx matrix currentmatrix def 0 inc dy { 0 translate -.5 .05 .5 { dup 0 moveto dup dx lineto dup mul 0.250001 exch sub sqrt dgrey mul MaxGrey exch sub 100 stroke } for mtx setmatrix } for } bind def

2 mul div 1 exch sub setgray

2 mul div 1 exch sub setgray

%@Fill /Basketweave %Basketweave,4, Frequency:=6, Linewidth:=10, Foregroundgray:=100, Wea vewidth(%):=100 { /Width exch 1 200 InRange def /Grey exch 0 100 InRange def /LineWidth exch 0 100 InRange def /Frequency exch 1 100 InRange def /dif Width 100 sub 100 div def /newfont 10 dict def newfont begin /FontMatrix [.25 0 0 .25 0 0] def /FontType 3 def /FontBBox [0 0 4 4] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for Encoding 97 /Holes put Encoding 98 /Weave put /CharProcs 3 dict def CharProcs begin /.notdef {} def /Holes { 1 dif moveto

2 dif sub 1 lineto 1 2 dif sub lineto dif 1 lineto closepath fill 3 2 dif add 4 dif sub 3 3 4 dif sub 2 dif add 3 closepath fill } def /Weave { 0 3 dif add 1 dif sub 4 moveto lineto lineto lineto

moveto lineto

0 1 dif add moveto 1 dif lineto 3 dif sub 4 moveto 4 dif sub 3 lineto 1 dif sub 0 moveto 2 dif sub 1 lineto 4 3 dif add moveto 3 2 dif add lineto 3 dif sub 0 moveto 1 2 dif sub lineto 4 1 dif add moveto 2 dif add 3 lineto dif 1 moveto 3 4 dif sub lineto LineWidth 100 div setlinewidth stroke } def end /BuildChar { 4 0 -0.1 -0.1 4.1 4.1 setcachedevice exch begin Encoding exch get CharProcs exch get end exec } def end /pntsize 1000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont

eoclip newpath Grey 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx exch moveto { (a) show currentpoint pop Bburx gt {exit} if } loop } for 0 setgray Bblly pntsize Bbury { Bbllx exch moveto { (b) show currentpoint pop Bburx gt {exit} if } loop } for } bind def %@Fill /Birds %Birds,4, Frequency:=8, Linewidth:=4, Foregroundgray:=100, Backgroundgray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.0061 0 0 0.0061 0 0] def /FontType 3 def /FontBBox [-92 -150 46 12] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 138 0 -92 -150 46 12 setcachedevice pop begin 2 { gsave 3 { -10 -8 moveto 60 24 -54 60 -9 72 curveto -2.5 73.7 11.5 70.3 29 75.4 curveto -54 6 moveto -45 14 -27 16 -18 18 curveto 27 27 -81 54 -9 90 curveto

-126 9 moveto -114 27 -66 66 -54 24 curveto -53 21 -49 15 -43 12 curveto [ -1 0 0 1 0 0 ] concat 135 -81 translate } repeat Linewidth pntsize div 162 mul setlinewidth stroke grestore 138 0 translate } repeat end } def end /pntsize 1174 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray /urx Bburx pntsize add def /ury Bbury pntsize add def Bblly pntsize ury { Bbllx exch moveto { (a) show currentpoint pop urx gt {exit} if } loop } for } bind def %@Fill /Bricks %Bricks,4, =0 { /BackgroundGray /ForegroundGray /Linewidth /Frequency Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgroundgray: exch exch exch exch -1 100 InRange def 0 100 InRange def 0 100 InRange def 2 100 InRange def

/newfont 10 dict def newfont begin /FontMatrix [1 0 0 1 0 0] def

/FontType 3 def /FontBBox [0 0 1 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 0 -0.1 -0.1 1.1 1.1 setcachedevice pop begin 0 0 moveto 1 0 lineto 1 .5 lineto 0 .5 lineto closepath .5 .5 moveto .5 1 lineto Linewidth pntsize div setlinewidth stroke end } def end /pntsize 1000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx exch moveto { (a) show currentpoint pop Bburx gt {exit} if } loop } for } bind def %@Fill /Bubbles %Bubbles,5, Number(sqinch):=25, Maxsize:=300:, Minsize:=10, Linewidth:=10, R andomseed:=0 { srand /LineWidth exch 0 50 InRange def /MinSize exch 1 1000 InRange def /MaxSize exch MinSize 1000 InRange def /Number exch 1 250 InRange def eoclip newpath /pntsize MaxSize MinSize div cvi def

/dx Bburx Bbllx sub def /dy Bbury Bblly sub def dx dy mul Number mul 1000000 div cvi { rand dx mod Bbllx add rand dy mod Bblly add rand pntsize mod 1 add pntsize exch div MinSize mul 3 copy 2 index add exch moveto pop 0 360 arc gsave 0 setgray LineWidth setlinewidth stroke grestore 1 setgray fill } repeat } bind def %@Fill /Carpet %Carpet,5, Frequency(dpi):=72, Gray:=100, Gamma(boxsize):=50, Modfactor:=3, Alpha:=10 { /Alpha exch def /Modf exch def /Gamma exch def /Grey exch 0 100 InRange def /Frequency exch 10 300 InRange def /Beta1 -10 def /Beta2 -15 def eoclip newpath /wz 360 def 2 1 Gamma sqrt { dup Gamma exch mod 0 eq { dup wz exch mod 0 eq { /wz wz 2 index div cvi def } if } if pop } for /newfont 10 dict def newfont begin /FontMatrix [1 wz div 0 0 1 wz div 0 0] def /FontType 3 def /FontBBox [0 0 wz wz] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for

/BuildChar { wz 0 -0.1 -0.1 wz 0.1 add wz 0.1 add setcachedevice pop begin 0 1 wz { 0 1 wz { 1 index 2 copy Gamma mul Beta2 add sin exch Gamma mul Beta1 add sin add Alpha mul cvi Modf mod 0 eq { moveto 1 0 rlineto 0 1 rlineto -1 0 rlineto closepath fill } { pop pop } ifelse } for pop } for end } def end /pntsize wz 1000 mul Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont Grey 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /CircleGrid %CircleGrid,5, Frequency:=6, Linewidth1:=6, Linewidth2:=6, Gray1:=40, Gra y2:=40 { /Grey2 exch -1 100 InRange def /Grey1 exch -1 100 InRange def /LineWidth2 exch 0 100 InRange def /LineWidth1 exch 0 100 InRange def /Frequency exch 1 72 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.1924 0

0 0 /FontType 3 def /FontBBox [0 0 2 5.1961] def

0.1924 0] def

/Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for Encoding 97 /OneCircle put Encoding 98 /OneCircleFilled put Encoding 99 /TwoCircles put Encoding 100 /TwoCirclesFilled put /CharProcs 5 dict def CharProcs begin /.notdef {} def /OneCircle { 1.8660 4.3301 moveto 1 4.3301 0.8660 0 360 arc LineWidth1 pntsize div 5.1961 mul setlinewidth stroke } def /OneCircleFilled { 1.8660 4.3301 moveto 1 4.3301 0.8660 0 350 arc fill } def /TwoCircles { 1.8660 0.8660 moveto 1 3 sqrt 2 div dup 0 360 arc 1.8660 2.5980 moveto 1 2.5980 0.8660 0 360 arc LineWidth2 pntsize div 5.1961 mul setlinewidth stroke } def /TwoCirclesFilled { 1.8660 0.8660 moveto 1 3 sqrt 2 div dup 0 360 arc 1.8660 2.5980 moveto 1 2.5980 0.8660 0 360 arc fill } def end /BuildChar {1.5 2.5980 -0.1 -0.1 2.1 5.2961 setcachedevice exch begin Encoding exch get CharProcs exch get

end exec }def end /pntsize 3000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /Bbllx /Bblly /Bburx /Bbury Bbllx Bblly Bburx Bbury pntsize pntsize pntsize pntsize sub sub add add def def def def

eoclip newpath Grey1 0 ge { Grey1 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (b) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } if Grey2 0 ge { Grey2 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (d) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } if LineWidth1 0 gt { 0 setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for

} if LineWidth2 0 gt { 0 setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (c) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } if } bind def %@Fill /Construction %Construction,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Ba ckgroundgray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [ .1 0 0 .1 0 0] def /FontType 3 def /FontBBox [-1 -1 9.66 11] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 8.66 5 -1 -1 9.66 11 setcachedevice pop begin 1 0 moveto 0 0 1 -60 300 arc 9.1602 4.1339 lineto 8.6602 5 1 -60 420 arc .5 10.866 lineto 0 10 1 60 180 arc -1 0 lineto -.5 3 sqrt 2 div moveto 8.1602 5.8660 lineto 8.1602 4.1339 moveto -.5 9.134 lineto 1 10 moveto 1 0 lineto

Linewidth pntsize div 10 mul setlinewidth stroke end } def end /pntsize 1126 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /Bbllx Bbllx pntsize sub def eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /Cracks %Cracks,5, Number:=20, Maxlength:=125, Minlength:=75, Steplength:=14, Linewi dth:=5 { /LineWidth exch 0 100 InRange def /StepLength exch 1 100 InRange def /MinLength exch 1 300 InRange def /MaxLength exch MinLength 300 InRange MinLength wDstChck def /Number exch 1 100 InRange def eoclip newpath /dx Bburx Bbllx sub def /dy Bbury Bblly sub def Number { gsave /theta rand 360 mod def rand dx mod Bbllx add rand dy mod Bblly add moveto StepLength dup scale LineWidth StepLength div setlinewidth MinLength MaxLength MinLength sub

rand 1 index mod 2 index add { currentpoint translate rand 120 mod 60 sub theta add dup rotate 0 0 moveto 1 0 lineto stroke 1 0 moveto neg rotate } repeat grestore pop pop } repeat } bind def %@Fill /Craters %Craters,5, Number:=15, Maximumsize:=300, Minimumsize:=75, Backgroundgray: =0, Randomseed:=0 { srand /BackgroundGrey exch 0 100 InRange def /MinSize exch 1 500 InRange def /MaxSize exch MinSize 500 InRange MinSize wDstChck def /Number exch 1 50 InRange def eoclip BackgroundGrey 100 div 1 exch sub setgray fill /pntsize 333 def /dx Bburx Bbllx sub def /dy Bbury Bblly sub def /DifSize MaxSize MinSize sub cvi def Bbllx Bblly translate matrix currentmatrix dx dy mul 1000000 div Number mul cvi { dup rand dx mod rand dy mod translate /size rand DifSize mod MinSize add def 0 0 size .7 mul 0 360 arc BackgroundGrey 100 div 1 exch sub setgray fill 0 { rand 18 mod add 10 add dup 360 gt { pop exit } if dup rotate size 5 div 0 moveto rand 300 mod 200 add 500 div size mul 0 lineto dup neg rotate } loop 0 setgray 5 setlinewidth stroke setmatrix } repeat pop } bind def

%@Fill /Crosshatching %Crosshatching,5, Maxdistance:=75, Mindistance:=0, Linewidth:=5, Ang le:=45, Randomseed:=0 { srand /Angle exch -180 180 InRange def /LineWidth exch 0 100 InRange def /MinDist exch 0 500 InRange def /MaxDist exch MinDist 500 InRange MinDist wDstChck def eoclip newpath /pntsize MaxDist MinDist sub def /dx2 Bburx Bbllx sub 2 div def /dy2 Bbury Bblly sub 2 div def /hyp2 dx2 dup mul dy2 dup mul add sqrt def Bbllx Bblly translate dx2 dy2 translate Angle rotate LineWidth setlinewidth /wd hyp2 neg def { /wd rand pntsize mod MinDist add wd add def wd hyp2 neg moveto wd hyp2 lineto stroke wd hyp2 gt {exit} if } loop Angle -2 mul rotate /wd hyp2 neg def { /wd rand pntsize mod MinDist add wd add def wd hyp2 neg moveto wd hyp2 lineto stroke wd hyp2 gt {exit} if } loop } bind def %@Fill /CrystalLattice %CrystalLattice,4, Frequency:=4, Backgray:=100, Frontgray:=0, Scal ing(%):=75 { /Scaling exch 10 100 InRange def /FrontGrey exch 0 100 InRange def /BackGrey exch -100 100 InRange def /Frequency exch 1 50 InRange def /newfont 10 dict def newfont begin /FontMatrix [1 0 0 /FontType 3 def /FontBBox [0 0 1 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef 0 1 0] def

put} for

/BuildChar { 1 0 -0.1 -0.1 1.1 1.1 setcachedevice pop begin gsave 0 0 moveto 3 { 1 0 lineto currentpoint translate 90 rotate } repeat closepath .05 setlinewidth stroke grestore gsave 4 { .2 0 moveto 0 0 .2 0 360 arc fill 1 0 translate 90 rotate } repeat grestore end } def end /pntsize 1000 Frequency div cvi def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /dx Bburx Bbllx sub def /dy Bbury Bblly sub def eoclip newpath currentscreen 3 -1 roll pop 120 3 1 roll setscreen Bbllx dx 2 div add Bblly dy 2 div add translate /dx dx 100 mul Scaling div def /dy dy 100 mul Scaling div def Scaling 100 div dup scale 100 Scaling div log 10 div 10 exch exp BackGrey 0 100 InRange 100 div FrontGrey BackGrey sub 1000 div FrontGrey .1 sub 100 div { 1 exch sub setgray dup dup scale dy 2 div cvi dup pntsize mod pntsize 2 div sub sub neg pntsize dy pntsize add 2 div

{ dx 2 div cvi dup pntsize mod pntsize 2 div sub sub neg 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index dx pntsize add 2 div gt { pop pop pop exit } if moveto } loop } for } for pop } bind def %@Fill /Denim %Denim,5, Frequency:=72, Maxgray:=100, Mingray:=0, Halftonescreen:=60, Rando mseed:=0 { srand /Screen exch 30 300 InRange def /MinGrey exch 0 100 InRange def /MaxGrey exch MinGrey 100 InRange def /Frequency exch 1 300 InRange def eoclip newpath currentscreen 3 -1 roll pop Screen 3 1 roll setscreen /dx Bburx Bbllx sub def /dy Bbury Bblly sub def /wf Frequency 1000 div def /dgrey MaxGrey MinGrey sub 100 div def Bbllx Bblly translate /str 512 string def dx wf mul cvi 1 add dy wf mul cvi 1 add 8 [wf 0 0 wf 0 0] { dgrey MinGrey 2.55 mul 0 1 511 { str exch rand -11 bitshift 255 and 4 index mul 3 index add cvi put } for pop pop str }image } bind def %@Fill /DNA %DNA,5, Frequency:=4, Linewidth:=1, Foregroundgray:=100, Backgroundgray:=0, Sp acing(%):=100 { /Spacing exch 1 300 InRange def /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def

/Linewidth /Frequency

exch 0 100 InRange def exch 1 100 InRange def

/newfont 10 dict def newfont begin /FontMatrix [1 360 div 0 0 1 360 div 0 0] def /FontType 3 def /FontBBox [-20 0 20 360] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { Spacing 110 -20 0 20 360 setcachedevice pop begin Linewidth pntsize mul 110 div setlinewidth 0 0 moveto 0 1 360 { dup sin 20 mul exch lineto } for stroke 20 0 moveto 0 1 360 { dup cos 20 mul exch lineto } for stroke 0 20 360 { dup dup sin 20 mul exch moveto dup cos 20 mul exch lineto } for stroke end } def end /pntsize 2000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize sub pntsize Bbury pntsize add { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt

{pop pop pop exit} if moveto } loop } for } bind def %@Fill /Fishscale %Fishscale,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgrou ndgray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /FontBBox [0 0 1 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 0 0 0 1 1 setcachedevice pop begin 0.5 0.5 0.5 360 180 arcn 0 1 0.5 270 360 arc 1 1 0.5 180 270 arc Linewidth pntsize div setlinewidth stroke end } def end /pntsize 1000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx exch moveto { (a) show currentpoint pop Bburx gt {exit} if } loop

} for } bind def %@Fill /Grass %Grass,5, Number:=100, Maximumsize:=35, Minimumsize:=7, Gray:=0, Randomseed: =0 { srand /Grey exch -1 100 InRange def /MinSize exch 1 100 InRange def /MaxSize exch MinSize 100 InRange MinSize wDstChck def /Number exch 1 500 InRange def eoclip Grey 0 ge { Grey 100 div 1 exch sub setgray fill } { newpath } ifelse /Bbllx Bbllx MaxSize sub def /Bblly Bblly MaxSize sub def /dx Bburx Bbllx sub def /dy Bbury Bblly sub def /dSize MaxSize MinSize sub def dx dy mul 1000000 div Number mul cvi { matrix currentmatrix rand dx mod Bbllx add rand dy mod Bblly add translate rand dSize mod MinSize add dup scale -0.5 0 moveto rand 14 mod 7 sub -0.5 3 2 index 3 div 0.3 sub 10 4 index 10 curveto 3 div 0.3 add 10 0.5 3 0.5 0 curveto gsave 1 setgray fill grestore 0.1 setlinewidth 0 setgray stroke setmatrix } repeat } bind def %@Fill /Hatching %Hatching,5, Maxdistance:=75, Mindistance:=0, Linewidth:=5, Angle:=45, Ra ndomseed:=0 { srand /Angle exch -180 180 InRange def

/LineWidth exch 0 100 InRange def /MinDist exch 0 500 InRange def /MaxDist exch MinDist 500 InRange MinDist wDstChck def eoclip newpath /pntsize MaxDist MinDist sub def /dx2 Bburx Bbllx sub 2 div def /dy2 Bbury Bblly sub 2 div def /hyp2 dx2 dup mul dy2 dup mul add sqrt def Bbllx Bblly translate dx2 dy2 translate Angle rotate LineWidth setlinewidth /wd hyp2 neg def { /wd rand pntsize mod MinDist add wd add def wd hyp2 neg moveto wd hyp2 lineto stroke wd hyp2 gt {exit} if } loop } bind def %@Fill /Hexagons %Hexagons,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgroundg ray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /LineWidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.5773 0 0 0.5773 0 0] def /FontType 3 def /FontBBox [0 0 2 1.7320] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1.5 0.8660 -0.1 -0.1 2.1 1.8320 setcachedevice pop begin 0.5 0 moveto 1.5 0 lineto 2 0.8660 lineto 1.5 1.7320 lineto 0.5 1.7320 lineto 0 0.8660 lineto

closepath LineWidth pntsize div 1.7320 mul setlinewidth stroke end } def end /pntsize 1155 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /Honeycomb %Honeycomb,5, Frequency:=4, Backgray:=100, Frontgray:=0, Scaling(%):=75, Linewidth:=5 { /LineWidth exch 0 100 InRange def /Scaling exch 10 100 InRange def /FrontGrey exch 0 100 InRange def /BackGrey exch -100 100 InRange def /Frequency exch 1 50 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.5773 0 0 0.5773 0 0] def /FontType 3 def /FontBBox [0 0 2 3 sqrt] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1.5 0.8660 -0.1 -0.1 2.1 1.8320 setcachedevice pop begin

0.5 0 moveto 1.5 0 lineto 2 0.8660 lineto 1.5 1.7320 lineto 0.5 1.7320 lineto 0 0.8660 lineto closepath LineWidth pntsize div 3 sqrt mul setlinewidth stroke end } def end /pntsize 1000 Frequency div cvi def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /dx Bburx Bbllx sub def /dy Bbury Bblly sub def eoclip newpath currentscreen 3 -1 roll pop 120 3 1 roll setscreen Bbllx dx 2 div add Bblly dy 2 div add translate /dx dx 100 mul Scaling div def /dy dy 100 mul Scaling div def Scaling 100 div dup scale 100 Scaling div log 10 div 10 exch exp BackGrey 0 100 InRange 100 div FrontGrey BackGrey sub 1000 div FrontGrey .1 sub 100 div { 1 exch sub setgray dup dup scale dy 2 div cvi dup pntsize mod pntsize 2 div sub sub neg pntsize dy pntsize add 2 div { dx 2 div cvi dup pntsize mod pntsize 2 div sub sub neg 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index dx pntsize add 2 div gt { pop pop pop exit } if moveto } loop } for } for pop } bind def %@Fill

/Impact %Impact,5, Linewidth:=5, Steplength:=15, Maximumangle:=40, Minimumangle:=10, Randomseed:=0 { srand /MinAng exch 2 90 InRange def /MaxAng exch MinAng 90 InRange MinAng wDstChck def /Step exch 10 500 InRange def /Linewidth exch 0 100 InRange def eoclip newpath /dx Bburx Bbllx sub def /dy Bbury Bblly sub def /DifAng MaxAng MinAng sub def Bbllx Bblly translate dx 2 div dy 2 div translate Linewidth Step div setlinewidth Step Step scale /theta 0 def { matrix currentmatrix /theta theta rand DifAng mod add MinAng add def theta 360 gt {pop exit} if theta rotate 0 0 moveto rand 150 mod 50 add { currentpoint translate rand 120 mod 60 sub theta add dup rotate 1 0 lineto neg rotate } repeat stroke setmatrix } loop } bind def %@Fill /Landscape %Landscape,4, Depth:=6, Maximumgray:=100, Minimumgray:=0, Randomseed:=0 { srand /MinGrey exch 0 100 InRange def /MaxGrey exch MinGrey 100 InRange def /maxdepth exch 1 7 InRange def /dGrey MaxGrey MinGrey sub 200 div def /AvGrey MaxGrey MinGrey add 200 div def eoclip newpath /depth 0 def /ardepth 2 maxdepth 1 sub exp cvi def /height 1.8 8 maxdepth sub exp def /horz 0 def /vert 0 def /Array ardepth 1 add array def 0 1 ardepth

{ Array exch ardepth 1 add array put } for 0 1 ardepth { Array exch get 0 1 ardepth { 2 copy 0 put pop } for pop } for /Square { /depth depth 1 add def depth maxdepth eq { Array horz get vert get dup 1 add dup moveto Array horz 1 add get vert get dup 1 add lineto Array horz 1 add get vert 1 add get dup dup lineto Array horz get vert 1 add get dup 1 add exch lineto closepath sub dGrey mul AvGrey add setgray fill } { /wd 2 maxdepth depth sub 1 sub exp cvi def Array Array Array Array horz horz horz horz wd 2 mul get vert wd 2 mul get vert add get vert wd 2 mul add get wd 2 mul add get add get vert get get

%ur %ul %ll %lr

4 copy add rand Array horz vert

add add 4 div 50 mod 25 sub height div 2 depth exp div add wd add get wd add 2 index put pop

3 index 2 index add 2 div rand 50 mod 25 sub height div 2 depth exp div add Array horz wd 2 mul add get vert wd add 2 index put pop 3 index 3 index add 2 div rand 50 mod 25 sub height div 2 depth exp div add Array horz wd add get vert wd 2 mul add 2 index put pop horz 0 eq { 2 index 1 index add 2 div rand 50 mod 25 sub height div 2 depth exp div add Array horz get vert wd add 2 index put pop } if vert 0 eq { 1 index 1 index add 2 div rand 50 mod 25 sub height div 2 depth exp div add Array horz wd add get

vert 2 index put } if pop pop pop pop .5 .5 translate .5 .5 scale Square 2 2 scale

pop

/horz horz 2 maxdepth depth sub 1 sub exp cvi add def -.5 0 translate .5 .5 scale Square 2 2 scale /horz horz 2 maxdepth depth sub 1 sub exp cvi sub def /vert vert 2 maxdepth depth sub 1 sub exp cvi add def .5 -.5 translate .5 .5 scale Square 2 2 scale /vert vert 2 maxdepth depth sub 1 sub exp cvi sub def /horz horz 2 maxdepth /vert vert 2 maxdepth -.5 0 translate .5 .5 scale Square 2 2 scale /horz horz 2 maxdepth /vert vert 2 maxdepth } ifelse /depth depth 1 sub def } def /dx Bburx Bbllx sub def /dy Bbury Bblly sub def /hyp dx dup mul dy dup mul add sqrt def Bbllx dx 2 div add Bblly dy 2 div add translate hyp 1.2 mul dup scale 45 rotate -.5 -.5 translate currentscreen 3 -1 roll pop 120 3 1 roll setscreen 0 0 0 0 Square 4{ pop }repeat } bind def %@Fill /Leaves %Leaves,5, Number(sqinch):=50, Maximumgray:=100, Minimumgray:=0, Maximumsize: =100, Minimumsize:=10 depth sub 1 sub exp cvi add def depth sub 1 sub exp cvi add def

depth sub 1 sub exp cvi sub def depth sub 1 sub exp cvi sub def

{ /MinSize exch 1 200 InRange def /MaxSize exch MinSize 200 InRange MinSize wDstChck def /MinGrey exch 0 100 InRange def /MaxGrey exch MinGrey 100 InRange def /Number exch 1 250 InRange def eoclip newpath currentscreen 3 -1 roll pop 90 3 1 roll setscreen /dx Bburx Bbllx sub def /dy Bbury Bblly sub def dx dy mul Number mul 1000000 div cvi { matrix currentmatrix rand dx mod Bbllx add rand dy mod Bblly add translate rand 360 mod rotate MaxSize MinSize eq { Maxsize 10.8 div } { rand MaxSize MinSize sub mod MinSize add 10.8 div } ifelse dup scale 17 0 moveto 65 -18 106 -13 125 0 curveto 106 13 65 18 17 0 curveto gsave MaxGrey MinGrey eq { MaxGrey 100 div } { rand MaxGrey MinGrey sub mod MinGrey add 100 div } ifelse setgray fill grestore 0.3 setlinewidth 0 setgray stroke setmatrix } repeat } bind def %@Fill /Mesh %Mesh,5, Frequency:=6, Squaresize(%):=80, Shadowlowerleft:=3, Shadowupperright:= 15, Foregroundgray:=100 { /ForegroundGray exch 0 100 InRange def /Shadow2 exch 0 100 InRange def /Shadow1 exch 0 100 InRange def

/SquareSize exch 1 100 InRange def /Frequency exch 1 25 InRange def /newfont 10 dict def newfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /FontBBox [0 0 1 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 0 -0.1 -0.1 1.1 1.1 setcachedevice pop begin 0 setlinejoin SquareSize 100 div dup scale 0 0 moveto 1 0 lineto 1 1 lineto 0 1 lineto closepath Shadow1 100 div 1 Shadow2 100 div sub 1 index dup moveto 1 index 1 index lineto dup dup lineto dup 2 index lineto closepath 2{pop}repeat fill end } def end /pntsize 1000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip newpath ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx exch moveto { (a) show currentpoint pop Bburx gt {exit} if } loop } for

} bind def %@Fill /Motifs %Motifs,4, { /ForegroundGray /Spacing exch 1 /Frequency exch /Character exch Motif:=1, Frequency:=2, Spacing(%):=100, Foregroundgray:=100 exch 0 100 InRange def 300 InRange def 1 25 InRange def 1 8 InRange def

/str 1 string def str 0 Character put /newfont 10 dict def newfont begin /FontMatrix [.001 0 0 /FontType 3 def /FontBBox [0 0 500 1000] def 0 .001 0] def

/Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for Encoding 1 /CanadianFlag put Encoding 2 /Corels put Encoding 3 /Globe put Encoding 4 /CubeSolid put Encoding 5 /CubeFrame put Encoding 6 /Balls put Encoding 7 /Checkerboard put Encoding 8 /CCCTlogo put /CharProcs 9 dict def CharProcs begin /.notdef {} def /CanadianFlag { 9.6 9.6 scale 9 -30 translate -9 60 moveto -9 30 lineto -1 30 lineto -1 60 lineto closepath 43 60 moveto 43 30 lineto 35 30 lineto 35 60 lineto closepath 17 15 12 14 10 10 05 07 58 54 55 47 51 49 50 45 moveto lineto lineto lineto lineto lineto lineto lineto

05 45 lineto 12 39 lineto 10 37 lineto 16.5 38 lineto 16.5 32 lineto 17.5 32 lineto 17.5 38 lineto 24 37 lineto 22 39 lineto 29 45 lineto 27 45 lineto 29 50 lineto 24 49 lineto 24 51 lineto 20 47 lineto 22 55 lineto 19 54 lineto closepath % % 0.3 setlinewidth stroke fill } def /Corels { 250 250 translate 113 113 scale 7 { 45 rotate gsave 1.7071 0 translate .5 .5 moveto -.5 .5 lineto -.5 -.5 lineto .5 -.5 lineto closepath fill grestore } repeat } def /Globe { 250 250 translate 250 250 scale 0 1 4 { matrix currentmatrix exch 22.5 mul sin 1 scale 0 0 1 90 450 arc setmatrix } for -3 1 3 { 22.5 mul sin dup dup mul 1 sub neg sqrt dup neg 2 index moveto exch lineto } for .01 setlinewidth

stroke } def /CubeSolid { 250 250 translate 145 145 scale /Rotm { 30 matrix rotate transform exch 3 1 roll 30 matrix rotate transform pop exch moveto } bind def /Rotl { 30 matrix rotate transform exch 3 1 roll 30 matrix rotate transform pop exch lineto } bind def 1 1 1 Rotm -1 1 1 Rotl -1 -1 1 Rotl 1 -1 1 Rotl closepath -1 -1 1 1 1 1 1 1 -1 -1 1 -1 -1 -1 1 Rotm Rotl Rotl Rotl Rotl

1 1 1 Rotm 1 1 -1 Rotl .01 setlinewidth stroke } def /CubeFrame { 250 250 translate 145 145 scale /Rotm { 30 matrix rotate transform exch 3 1 roll 30 matrix rotate transform pop exch moveto } bind def /Rotl { 30 matrix rotate transform exch 3 1 roll 30 matrix rotate transform pop exch lineto } bind def 1 1 1 Rotm -1 1 1 Rotl

-1 -1 1 Rotl 1 -1 1 Rotl closepath 1 1 -1 Rotm -1 1 -1 Rotl -1 -1 -1 Rotl 1 -1 -1 Rotl closepath 1 1 -1 -1 -1 -1 1 1 1 1 1 1 -1 -1 -1 -1 1 -1 1 -1 1 -1 1 -1 Rotm Rotl Rotm Rotl Rotm Rotl Rotm Rotl

.01 setlinewidth stroke } def /Balls { 250 250 translate 225 225 scale 0 0 1.1 0 360 arc -0.32 0.55 translate 30 rotate 0.5 0.3333 scale 0 0 1.1 360 0 arcn fill } def /Checkerboard { 0 0 moveto 500 0 lineto 500 500 lineto 0 500 lineto closepath fill } def /CCCTlogo { 4.8 4.8 scale -21 -26 translate 36.4 28.4 moveto 70 38 35 196 176.7 arcn 35.1 40 35 42 24 41 curveto 21 37 24 38 22 32 curveto 21 28 25 27 28 28 curveto 33 26 32 30 36.4 28.4 curveto 36.5 48.2 moveto 70 38 35 163.1 144.5 arcn 40 59 39 60 36 61 curveto 33 63 29 62 27 61 curveto 24 58 29 55 26 54 curveto 24 53 25 50 25 50 curveto 28 47 30 44 36.5 48.2 curveto

44.3 61.7 moveto 70 38 35 137.3 111.5 arcn 56 81 52 75 53 81 curveto 52 87 50 81 46 84 curveto 37 84 40 80 40 76 curveto 42 70 35 73 44.3 61.7 curveto 60.8 71.8 moveto 70 38 35 105.3 80.0 arcn 78 72 78 76 77 80 curveto 77 81 80 82 79 83 curveto 77 85 74 84 70 85 curveto 65 85 69 80 62 80 curveto 59 77 61 74 60.8 71.8 curveto 97.1 60.1 moveto 70 38 35 39.2 66.4 arc 81 74 82 78 85 81 curveto 91 81 98 84 95 76 curveto 98 74 115 77 103 72 curveto 101 68 100 61 97.1 60.1 curveto 100 56 moveto 70 38 35 31 11.6 arcn 113 42 114 49 118 50 curveto 115 57 123 56 120 60 curveto 115 60 116 64 109 63 curveto 104 62 107 57 100 56 curveto 105 39 moveto 70 38 35 1.6 -14.8 arcn 107 27 110 28 112 27 curveto 115 27 111 31 118 32 curveto 120 33 125 33 122 36 curveto 121 37 119 38 117 39 curveto 113 46 112 39 105 39 curveto fill } def end /BuildChar {Spacing 100 div 500 mul dup -0.1 -0.1 500.1 1000.1 setcachedevice exch begin Encoding exch get CharProcs exch get end exec }def end /pntsize 100000 Frequency div Spacing div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /increment Spacing 100 div pntsize mul def

/ury Bbury increment add def eoclip newpath ForegroundGray 100 div 1 exch sub setgray Bblly increment ury { Bbllx 1 index moveto { str show currentpoint dup 3 index sub increment 2.1 div gt { increment sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /Octagons %Octagons,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgroundg ray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.4142 0 0.4142 0 0] def /FontType 3 def /FontBBox [0 0 2.4142 2.4142] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 2.4142 0 -0.5 -0.5 2.9142 2.9142 setcachedevice pop begin 0.7071 0 moveto 1.7071 0 lineto 2.4142 0.7071 lineto 2.4142 1.7071 lineto 1.7071 2.4142 lineto 0.7071 2.4142 lineto 0 1.7071 lineto 0 0.7071 lineto closepath Linewidth pntsize div 2.4142 mul setlinewidth stroke end } def end 0

/pntsize 1000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx pntsize Bburx { 1 index moveto (a) show } for pop } for } bind def %@Fill /Patio %Patio,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgroundgray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.2857 0 0 /FontType 3 def /FontBBox [0 0 3.4641 3.5] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef /BuildChar { 2.5980 1.5 -0.5 -0.5 3.9641 4 setcachedevice pop begin 1.7320 1.5 translate 0.8660 0.5 moveto 3 { 120 rotate 0.8660 -1.5 lineto 1.7320 -1 lineto 1.7320 0 lineto 0.8660 0.5 lineto } repeat Linewidth pntsize div 3.5 mul setlinewidth stroke end } def end 0 0.2857 0] def

put} for

/pntsize 1250 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /Pointsize pntsize 6 mul 7 div def eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly Pointsize Bbury { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub Pointsize 2 div gt { Pointsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /Rectangles %Rectangles,5, Area:=100, Number:=50, Linewidth:=5, Gray:=0, Randomsee d:=0 { srand /Grey exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Number exch 1 200 InRange def /area exch 10 300 InRange def /dx Bburx Bbllx sub 2 mul def /dy Bbury Bblly sub 2 mul def /Area area 10000 mul def eoclip newpath Linewidth setlinewidth Bbllx dx 2 div sub Bblly dy 2 div sub translate % Area log Number { rand dx mod rand dy mod moveto % rand 180 mod 90 sub 100 div dup dup mul 1 exch sub sqrt % exch atan 180 div 1 index mul 10 exch exp rand Area mod rand Area mod mul sqrt sqrt dup 0 rlineto 0 Area 2 index div rlineto dup neg 0 rlineto closepath pop gsave

Grey 100 div 1 exch sub setgray fill grestore 0 setgray stroke } repeat } bind def %@Fill /Reptiles %Reptiles,5, Frequency:=4, Gray1:=60, Gray2:=30, Gray3:=0, Linewidth:=8 { /LineWidth exch 0 250 InRange def /Gray3 exch 0 100 InRange 100 div def /Gray2 exch -1 100 InRange 100 div def /Gray1 exch -1 100 InRange 100 div def /Frequency exch 1 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.2857 0 0 0.2857 0 0] def /FontType 3 def /FontBBox [-1.73 -1.86 2.36 2.0] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for Encoding 97 /ReptilesStroked put Encoding 98 /ReptileFilled put /CharProcs 3 dict def CharProcs begin /.notdef {} def /ReptilesStroked { %3 sqrt 1.5 translate 0.8660 0.5 moveto 3 { 120 rotate 0 0.32 0.32 0 0.05 0.4 0.84 0.5 0.31 0.87 0.58 0.8 0.94 1.24 1.42 0 -0.40 -0.48 -0.72 -1.03 -0.76 -0.84 -0.96 -1.18 -1.5 -1.28 -1.14 -1.18 -1.08 -1.18 moveto lineto lineto lineto moveto lineto lineto lineto lineto moveto lineto lineto lineto lineto lineto

1.68 1.52 1.64 1.73 1.73 1.41 1.32 1.06 1.42 0.87 0.87 0.99 1.05 0.82 0.68 0.62

-1.02 -0.84 -0.66 -0.36 0 -0.26 -0.49 -0.24 0.18 0.57 0.26 0.26 0.12 -0.07 -0.07 0.36

moveto lineto lineto lineto moveto lineto lineto lineto lineto moveto lineto lineto lineto lineto lineto lineto

0.8660 0.5 moveto } repeat LineWidth Pointsize div 3.5 mul setlinewidth stroke } def /ReptileFilled { 0 0 moveto 0.32 -0.40 lineto 0.32 -0.48 lineto 0 -0.72 lineto -0.40 -0.47 -0.42 -0.27 -0.21 0.05 0.4 0.84 0.5 0.31 0.32 0.55 0.59 0.82 0.87 0.58 0.8 0.94 1.24 1.42 1.52 -0.55 -0.68 -0.97 -0.99 -0.88 -1.03 -0.76 -0.84 -0.96 -1.18 -1.39 -1.60 -1.74 -1.86 -1.5 -1.28 -1.14 -1.18 -1.08 -1.18 -1.45 lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto

1.45 1.74 1.68 1.52 1.64 1.73 2.28 2.36 2.12 1.73 1.41 1.32 1.06 1.42 1.21 1.11

-1.81 -1.47 -1.02 -0.84 -0.66 -0.36 -0.46 -0.11 -0.15 0 -0.26 -0.49 -0.24 0.18 0.41 0.60

lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto

0.87 0.57 0.87 0.26 0.99 0.26 1.05 0.12 0.82 -0.07 0.68 -0.07 0.62 0.36 0.26 0.52 0.19 0.48 closepath fill } def end

/BuildChar { 2.5980 1.5 -1.83 -1.96 2.46 2.1 setcachedevice exch begin Encoding exch get CharProcs exch get end exec } def end /Pointsize 2000 Frequency div def /FillFont newfont definefont pop /FillFont findfont Pointsize scalefont setfont /pntsize Pointsize 6 mul 7 div def /HeightDiff Pointsize 2 mul 7 div .49 mul def eoclip newpath currentscreen 3 -1 roll pop 120 3 1 roll setscreen

Bblly pntsize Bbury pntsize add HeightDiff add { Bbllx 1 index moveto { currentpoint 1 index exch 2 copy 2 copy translate 240 rotate Gray1 0 ge { Gray1 1 exch sub setgray (b) show } if 0 0 moveto -240 rotate neg exch neg exch translate 2 copy translate 120 rotate Gray2 0 ge { Gray2 1 exch sub setgray (b) show } if 0 0 moveto -120 rotate neg exch neg exch translate Gray3 1 exch sub setgray (b) show currentpoint dup 4 index sub pntsize 2.1 div gt { pntsize sub } if 3 -1 roll Bburx gt {pop pop pop exit} if moveto } loop } for LineWidth 0 gt { 0 setgray Bblly pntsize Bbury pntsize add { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } if } bind def %@Fill /SpiderWeb %SpiderWeb,5, Linewidth:=5, Separation:=300, Maximumangle:=40, Minimuman

gle:=10, Randomseed:=0 { srand /MinAng exch 2 90 InRange def /MaxAng exch MinAng 90 InRange MinAng wDstChck def /Sep exch 10 500 InRange def /Linewidth exch 0 100 InRange def eoclip newpath /dx Bburx Bbllx sub def /dy Bbury Bblly sub def /hyp dx dup mul dy dup mul add sqrt def /DifAng MaxAng MinAng sub def Bbllx Bblly translate dx 2 div dy 2 div translate /theta 0 def /dtheta 0 def { 0 0 moveto /theta theta dtheta add def theta 360 ge { exit } if /dtheta rand DifAng mod MinAng add def theta dtheta add 350 gt { /dtheta 360 theta sub def } if hyp theta cos mul hyp theta sin mul lineto 0 Sep hyp { dup theta cos mul 1 index theta sin mul moveto dup theta dtheta add cos theta cos add mul 1 index theta dtheta add sin theta sin add mul 2 index theta 180 add dtheta add theta 180 add arcn pop } for Linewidth setlinewidth stroke } loop } bind def %@Fill /Spirals %Spirals,4, Size:=150, Linewidth:=5, Foregroundgray:=100, Backgroundgray:= 0 { /BackgroundGrey exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Size exch 10 500 InRange def

eoclip BackgroundGrey 0 ge { BackgroundGrey 100 div 1 exch sub setgray fill } { newpath } ifelse /cx Bburx Bbllx add 2 div def /cy Bbury Bblly add 2 div def /pntsize2 Size 2 div def /cy2 cy pntsize2 add def /hyp Bburx Bbllx sub dup mul Bbury Bblly sub dup mul add sqrt 2 div def ForegroundGray 100 div 1 exch sub setgray Linewidth setlinewidth 0 Size hyp { cx cy 2 index 90 270 arc cx cy2 2 index pntsize2 add -90 90 arc pop } for stroke } bind def %@Fill /Spokes %Spokes,5, Number:=120, Linewidth:=5, Horizontal:=0, Vertical:=0, Foregro undgray:=100 { %def -- Fill function that fills with spokes /ForegroundGray exch 0 100 InRange def /wY exch 0 100 InRange def /wX exch 0 100 InRange def /LineWidth exch 0 100 InRange def /Number exch 4 360 InRange def eoclip newpath /Flen Bburx Bbllx sub dup mul Bbury Bblly sub dup mul add sqrt def Bbllx Bblly translate Bburx Bbllx sub wX mul 100 div Bbury Bblly sub wY mul 100 div translate 360 Number div Number { 0 0 moveto Flen 0 lineto dup rotate } repeat pop ForegroundGray 100 div 1 exch sub setgray LineWidth setlinewidth stroke } bind def %@Fill /Squares %Squares,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgroundgra y:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def

/Frequency

exch 2 100 InRange def

/newfont 10 dict def newfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /FontBBox [0 0 1 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 0 -0.1 -0.1 1.1 1.1 setcachedevice pop begin 0 0 1 1 0 1 1 0 moveto lineto lineto lineto

Linewidth pntsize div setlinewidth stroke end } def end /pntsize 1000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx exch moveto { (a) show currentpoint pop Bburx gt {exit} if } loop } for } bind def %@Fill /StarOfDavid %StarOfDavid,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Back groundgray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def

/newfont 10 dict def newfont begin /FontMatrix [0.2886 0 0 0.2886 0 0] def /FontType 3 def /FontBBox [0 0 2 3.4641] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 1.7320 -0.1 -0.1 2.1 3.564 setcachedevice pop begin 0.5 0 moveto 1.5 0 lineto 2 0.8660 lineto 1.5 1.7320 lineto 0.5 1.7320 lineto 0 0.8660 lineto closepath Linewidth pntsize div 3.4641 mul setlinewidth stroke end } def end /pntsize 1732 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray /ury Bbury pntsize add def Bblly pntsize ury { Bbllx pntsize sub 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill

/Stars %Stars,4, Number:=100, Maximumsize:=300, Minimumsize:=3, Randomseed:=0 { srand /MinSize exch 1 1000 InRange def /MaxSize exch MinSize 1000 InRange def /Number exch 1 2000 InRange def /newfont 10 dict def newfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /FontBBox [0 0 1 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 0 -0.1 -0.1 1.1 1.1 setcachedevice pop begin 1 .5 moveto .5 .5 .5 0 360 arc fill end } def end /FillFont newfont definefont pop /FillFont findfont 2 scalefont setfont /dx Bburx Bbllx sub def /dy Bbury Bblly sub def eoclip 0 setgray fill 1 setgray /mtx matrix currentmatrix def dx dy mul Number mul 100000 div cvi { rand dx mod Bbllx add rand dy mod Bblly add moveto MaxSize rand MaxSize MinSize div cvi mod 1 add div 10 div dup scale (a) show mtx setmatrix } repeat } bind def %@Fill /StarShapes %StarShapes,5, Points:=5, Frequency:=2, Spacing:=100, Angle:=36, Gra y:=100 { /Grey exch 0 100 InRange def /Theta exch 1 90 InRange def

/Spacing exch 1 300 InRange def /Frequency exch 1 25 InRange def /Points exch 1 15 InRange def /str 1 string def str 0 Points put /newfont 10 dict def newfont begin /FontMatrix [.001 0 0 /FontType 3 def /FontBBox [0 0 500 1000] def 0 .001 0] def

/Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar {Spacing 100 div 500 mul dup -0.1 -0.1 500.1 1000.1 setcachedevice exch begin 250 250 translate 250 250 scale 90 rotate dup 180 exch div dup sin exch cos div Theta 2 div dup sin exch cos div 1 0 moveto 2 index { 360 3 index div rotate dup dup 3 index add div dup 3 index mul neg lineto 1 0 lineto } repeat closepath fill pop pop pop end }def end /pntsize 100000 Frequency div Spacing div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /increment Spacing 100 div pntsize mul def eoclip newpath

Grey 100 div 1 exch sub setgray Bblly increment Bbury { Bbllx 1 index moveto { str show currentpoint dup 3 index sub increment 2.1 div gt { increment sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /StoneWall %StoneWall,4, Frequency:=15, Maximumgray:=100, Minimumgray:=0, Linewidth :=5 { /Linewidth exch 0 100 InRange def /MinGrey exch 0 100 InRange def /MaxGrey exch MinGrey 100 InRange def /Frequency exch 1 50 InRange def /DifGrey MaxGrey MinGrey sub def DifGrey 0 eq { /DifGrey 1 def } if Linewidth Frequency mul 250 div setlinewidth eoclip newpath 0 srand currentscreen 3 -1 roll pop 100 3 1 roll setscreen /dy Bbury Bblly sub def /dx Bburx Bbllx sub def Bbllx Bbury translate 250 Frequency div dup scale dy 920 0 0 /x0 /y0 /x1 /y1 /x2 /y2 /x3 /y3 0 5 div Frequency mul cvi { moveto 0 def 0 def 0 def 0 def 0 def 0 def 0 def 0 def dx 200 div Frequency mul { rand 50 mod 25 div 1 sub add x3 y3 moveto x2 y2 x1 y1 x0 y0 curveto dup rand 30 mod 15 div neg 2 sub 2 copy /y0 exch def /x0 exch def

lineto dup rand 50 mod 10 div 2.5 sub add rand 50 mod 10 div neg 1 index rand 50 mod 10 div 4 index rand 30 mod 15 div 2 add 6 copy /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch def curveto pop closepath gsave rand DifGrey mod MinGrey add 100 div 1 exch sub setgray fill grestore 0 setgray stroke } for 0 -4 translate } repeat } bind def %@Fill /Text %Text,5, Font:=1, Character:=67, Frequency:=4, Spacing:=100, Backgroundgray :=0 { /BackGrey exch -1 100 InRange def /Spacing exch 30 300 InRange def /Frequency exch 1 50 InRange def /Character exch 33 255 InRange def /Font exch 1 35 InRange def /pntsize 100000 Frequency div Spacing div def Font 1 eq { /Times-Roman } if Font 2 eq { /Times-Italic } if Font 3 eq { /Times-Bold } if Font 4 eq { /Times-BoldItalic } if Font 5 eq { /Helvetica } if Font 6 eq { /Helvetica-Oblique } if Font 7 eq { /Helvetica-Bold } if Font 8 eq { /Helvetica-BoldOblique } if Font 9 eq { /Courier } if Font 10 eq { /Courier-Oblique } if Font 11 eq { /Courier-Bold } if Font 12 eq { /Courier-BoldOblique } if Font 13 eq { /Symbol } if Font 14 eq { /AvantGarde-Book } if Font 15 eq { /AvantGarde-BookOblique } if Font 16 eq { /AvantGarde-Demi } if Font 17 eq { /AvantGarde-DemiOblique } if Font 18 eq { /Bookman-Demi } if Font 19 eq { /Bookman-DemiItalic } if Font 20 eq { /Bookman-Light } if Font 21 eq { /Bookman-LightItalic } if Font 22 eq { /Helvetica-Narrow } if Font 23 eq { /Helvetica-Narrow-Bold } if Font 24 eq { /Helvetica-Narrow-BoldOblique } if Font 25 eq { /Helvetica-Narrow-Oblique } if Font 26 eq { /NewCenturySchlbk-Roman } if

Font 27 eq { /NewCenturySchlbk-Bold } if Font 28 eq { /NewCenturySchlbk-Italic } if Font 29 eq { /NewCenturySchlbk-BoldItalic } if Font 30 eq { /Palatino-Roman } if Font 31 eq { /Palatino-Bold } if Font 32 eq { /Palatino-Italic } if Font 33 eq { /Palatino-BoldItalic } if Font 34 eq { /ZapfChancery-MediumItalic } if Font 35 eq { /ZapfDingbats } if findfont pntsize scalefont setfont /str 1 string def str 0 Character put /increment Spacing 100 div pntsize mul 2 mul def eoclip BackGrey 0 ge { BackGrey 100 div 1 exch sub setgray fill } { newpath } ifelse /Bbury Bbury pntsize add def 0 setgray Bblly increment Bbury { Bbllx 1 index moveto { str show currentpoint increment 2 div add dup 3 index sub increment 2.1 div gt { increment sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /Tiles %Tiles,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgroundgray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /FontBBox [0 0 2 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 2 .5 -0.1 -0.1 2.1 1.1 setcachedevice pop begin

0 0 moveto 1.5 0 lineto 1.75 0 .25 180 90 arcn 1.75 .5 .25 -90 90 arc 1.75 1 .25 270 180 arcn 0 1 lineto Linewidth pntsize div setlinewidth stroke end } def end /pntsize 500 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } bind def %@Fill /TreeRings %TreeRings,5, Maxdistance:=150, Mindistance:=0, Linewidth:=5, Backgroundg ray:=0, Randomseed:=0 { srand /BackGrey exch -1 100 InRange def /LineWidth exch 0 100 InRange def /MinDist exch 0 500 InRange def /MaxDist exch MinDist 500 InRange MinDist wDstChck def eoclip BackGrey 0 ge { BackGrey 100 div 1 exch sub setgray fill } { newpath } ifelse /cx Bburx Bbllx add 2 div def /cy Bbury Bblly add 2 div def /pntsize MaxDist MinDist sub def /hyp Bburx Bbllx sub dup mul Bbury Bblly sub dup mul add sqrt def /wr 0 def

0 setgray LineWidth setlinewidth { /wr rand pntsize mod MinDist add wr add def cx wr add cy moveto cx cy wr 0 360 arc stroke wr hyp gt {exit} if } loop } bind def %@Fill /Triangle %Triangle,4, Frequency:=8, Linewidth:=5, Foregroundgray:=100, Backgroundg ray:=0 { /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [ 0.5773 0 0 0.5773 0 0] def /FontType 3 def /FontBBox [0 0 1 3 sqrt] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 0 -0.1 -0.1 1.1 1.8320 setcachedevice pop begin 0 0 moveto 1 1.7320 lineto 0 1.7320 lineto 1 0 lineto closepath 0 0.8660 moveto 1 0.8660 lineto Linewidth pntsize div 1.7320 mul setlinewidth stroke end } def end /pntsize 1732 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge

{ BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly pntsize Bbury { Bbllx pntsize sub pntsize 3 sqrt div Bburx { 1 index moveto (a) show } for pop } for } bind def %@Fill /Waves %Waves,5, Frequency:=6, Linewidth:=5, Foregroundgray:=100, Backgroundgray:=0 , Spacing(%):=100 { /Spacing exch 30 300 InRange def /BackgroundGray exch -1 100 InRange def /ForegroundGray exch 0 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /newfont 10 dict def newfont begin /FontMatrix [0.0119 0 0 0.0119 0 0] def /FontType 3 def /FontBBox [37 56 111 114] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 74 0 36.9 55.9 111.1 114.1 setcachedevice pop begin 1 1.5 scale 37 38 moveto 76 38 79 73 111 57 curveto 80 60 80 38 111 38 curveto Linewidth pntsize div 84 mul setlinewidth stroke end } def end /pntsize 783 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont /Height pntsize Spacing 100 div mul def

/Bbllx /Bblly /Bburx /Bbury

Bbllx Bblly Bburx Bbury

Height Height Height Height

sub sub add add

def def def def

eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse ForegroundGray 100 div 1 exch sub setgray Bblly Height Bbury { Bbllx exch moveto { (a) show currentpoint pop Bburx gt {exit} if } loop } for } bind def %------ Color PostScript fills added for v6.0 %@Fill /ColorBubbles %ColorBubbles,5, Number(sqinch):=25, Maxsize:=300, Minsize:=10, Linewid th:=10, Randomseed:=0 { srand /LineWidth exch 0 50 InRange def /MinSize exch 1 1000 InRange def /MaxSize exch MinSize 1000 InRange def /Number exch 1 250 InRange def /SetRandomRGB { 3 ck {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def eoclip newpath /pntsize MaxSize MinSize div cvi def /dx Bburx Bbllx sub def /dy Bbury Bblly sub def dx dy mul Number mul 1000000 div cvi { rand dx mod Bbllx add rand dy mod Bblly add rand pntsize mod 1 add pntsize exch div MinSize mul 3 copy 2 index add exch moveto pop 0 360 arc gsave

%put 3 random numbers between 0 and 1 on the sta

SetRandomRGB LineWidth setlinewidth stroke grestore 1 setgray fill } repeat } bind def %@Fill /ColorCircles %ColorCircles,4, Number(sqinch):=25, Maxsize:=300, Minsize:=10, Randoms eed:=0 { srand /MinSize exch 1 1000 InRange def /MaxSize exch MinSize 1000 InRange def /Number exch 1 250 InRange def /SetRandomRGB { 3 ck {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def eoclip newpath /pntsize MaxSize MinSize div cvi def /dx Bburx Bbllx sub def /dy Bbury Bblly sub def dx dy mul Number mul 1000000 div cvi { rand dx mod Bbllx add rand dy mod Bblly add rand pntsize mod 1 add pntsize exch div MinSize mul 3 copy 2 index add exch moveto pop 0 360 arc SetRandomRGB fill } repeat } bind def %@Fill /ColorCrosshatching %ColorCrosshatching,5, Maxdistance:=75, Mindistance:=0, Linewid th:=5, Angle:=45, Randomseed:=0 { srand /Angle exch -180 180 InRange def /LineWidth exch 0 100 InRange def

%put 3 random numbers between 0 and 1 on the sta

/MinDist exch 0 500 InRange def /MaxDist exch MinDist 500 InRange MinDist wDstChck def /SetRandomRGB { 3 ck {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def eoclip newpath /pntsize MaxDist MinDist sub def /dx2 Bburx Bbllx sub 2 div def /dy2 Bbury Bblly sub 2 div def /hyp2 dx2 dup mul dy2 dup mul add sqrt def Bbllx Bblly translate dx2 dy2 translate Angle rotate LineWidth setlinewidth /wd hyp2 neg def { /wd rand pntsize mod MinDist add wd add def wd hyp2 neg moveto wd hyp2 lineto SetRandomRGB stroke wd hyp2 gt {exit} if } loop Angle -2 mul rotate /wd hyp2 neg def { /wd rand pntsize mod MinDist add wd add def wd hyp2 neg moveto wd hyp2 lineto SetRandomRGB stroke wd hyp2 gt {exit} if } loop } bind def %@Fill /ColorFishscale %ColorFishscale,3, Frequency:=8, Linewidth:=5, Backgroundgray:=0 { /BackgroundGray exch -1 100 InRange def /Linewidth exch 0 100 InRange def /Frequency exch 2 100 InRange def /SetRandomRGB { 3

%put 3 random numbers between 0 and 1 on the sta

%put 3 random numbers between 0 and 1 on the sta

ck {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def /newfont 10 dict def newfont begin /FontMatrix [1 0 0 1 0 0] def /FontType 3 def /FontBBox [0 0 1 1] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for /BuildChar { 1 0 0 0 1 1 setcachedevice pop begin 0.5 0.5 0.5 360 180 arcn 0 1 0.5 270 360 arc 1 1 0.5 180 270 arc Linewidth pntsize div setlinewidth stroke end } def end /pntsize 1000 Frequency div def /FillFont newfont definefont pop /FillFont findfont pntsize scalefont setfont eoclip BackgroundGray 0 ge { BackgroundGray 100 div 1 exch sub setgray fill } { newpath } ifelse Bblly pntsize Bbury { Bbllx exch moveto { SetRandomRGB (a) show currentpoint pop Bburx gt {exit} if } loop } for } bind def %@Fill /GreenGrass %GreenGrass,5, Number:=100, Maximumsize:=35, Minimumsize:=7, Gray:=0, Randomseed:=0 { srand /Grey exch -1 100 InRange def

/MinSize exch 1 100 InRange def /MaxSize exch MinSize 100 InRange MinSize wDstChck def /Number exch 1 500 InRange def eoclip Grey 0 ge { Grey 100 div 1 exch sub setgray fill } { newpath } ifelse /Bbllx Bbllx MaxSize sub def /Bblly Bblly MaxSize sub def /dx Bburx Bbllx sub def /dy Bbury Bblly sub def /dSize MaxSize MinSize sub def dx dy mul 1000000 div Number mul cvi { matrix currentmatrix rand dx mod Bbllx add rand dy mod Bblly add translate rand dSize mod MinSize add dup scale -0.5 0 moveto rand 14 mod 7 sub -0.5 3 2 index 3 div 0.3 sub 10 4 index 10 curveto 3 div 0.3 add 10 0.5 3 0.5 0 curveto closepath gsave 0 %0 red rand 100 mod 1 add 100 div 1 exch sub %random green dup 0.7 lt {pop 0.7} if %above .7 0 %0 blue setrgbcolor fill grestore 0.1 setlinewidth 0 setgray stroke setmatrix } repeat } bind def %@Fill /ColorHatching %ColorHatching,5, Maxdistance:=75, Mindistance:=0, Linewidth:=5, Ang le:=45, Randomseed:=0 { srand

/Angle exch -180 180 InRange def /LineWidth exch 0 100 InRange def /MinDist exch 0 500 InRange def /MaxDist exch MinDist 500 InRange MinDist wDstChck def /SetRandomRGB { 3 %put 3 random numbers between 0 and 1 on the stack {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def eoclip newpath /pntsize MaxDist MinDist sub def /dx2 Bburx Bbllx sub 2 div def /dy2 Bbury Bblly sub 2 div def /hyp2 dx2 dup mul dy2 dup mul add sqrt def Bbllx Bblly translate dx2 dy2 translate Angle rotate LineWidth setlinewidth /wd hyp2 neg def { /wd rand pntsize mod MinDist add wd add def wd hyp2 neg moveto wd hyp2 lineto SetRandomRGB stroke wd hyp2 gt {exit} if } loop } bind def %@Fill /GreenLeaves %GreenLeaves,5, Number(sqinch):=50, Maximumgreen:=100, Minimumgreen:=70 , Maximumsize:=100, Minimumsize:=10 { /MinSize exch 1 200 InRange def /MaxSize exch MinSize 200 InRange MinSize wDstChck def /MinGreen exch 0 100 InRange def /MaxGreen exch MinGreen 100 InRange def /Number exch 1 250 InRange def eoclip newpath currentscreen 3 -1 roll pop 90 3 1 roll setscreen /dx Bburx Bbllx sub def /dy Bbury Bblly sub def

dx dy mul Number mul 1000000 div cvi { matrix currentmatrix rand dx mod Bbllx add rand dy mod Bblly add translate rand 360 mod rotate MaxSize MinSize eq { Maxsize 10.8 div } { rand MaxSize MinSize sub mod MinSize add 10.8 div } ifelse dup scale 17 0 moveto 65 -18 106 -13 125 0 curveto 106 13 65 18 17 0 curveto gsave 0 % 0 red MaxGreen MinGreen eq { MaxGreen 100 div } { rand MaxGreen MinGreen sub mod MinGreen add 100 div } ifelse 0 % 0 blue setrgbcolor fill grestore 0.3 setlinewidth 0 setgray stroke setmatrix } repeat } bind def %@Fill /ColorLeaves %ColorLeaves,3, Number(sqinch):=50, Maximumsize:=100, Minimumsize:=10 { /MinSize exch 1 200 InRange def /MaxSize exch MinSize 200 InRange MinSize wDstChck def /Number exch 1 250 InRange def /SetRandomRGB { 3 ck {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def eoclip newpath currentscreen 3 -1 roll pop 90 3 1 roll setscreen

%put 3 random numbers between 0 and 1 on the sta

/dx Bburx Bbllx sub def /dy Bbury Bblly sub def dx dy mul Number mul 1000000 div cvi { matrix currentmatrix rand dx mod Bbllx add rand dy mod Bblly add translate rand 360 mod rotate MaxSize MinSize eq { Maxsize 10.8 div } { rand MaxSize MinSize sub mod MinSize add 10.8 div } ifelse dup scale 17 0 moveto 65 -18 106 -13 125 0 curveto 106 13 65 18 17 0 curveto gsave SetRandomRGB fill grestore 0.3 setlinewidth 0 setgray stroke setmatrix } repeat } bind def %@Fill /ColorReptiles %ColorReptiles,2, Frequency:=4, Linewidth:=8 { /LineWidth exch 0 250 InRange def /Frequency exch 1 100 InRange def /SetRandomRGB { 3 %put 3 random numbers between 0 and 1 on the stack {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def /newfont 10 dict def newfont begin /FontMatrix [0.2857 0 0 /FontType 3 def 0 0.2857 0] def

/FontBBox [-1.73 -1.86 2.36 2.0] def /Encoding 256 array def 0 1 255 {Encoding exch /.notdef put} for Encoding 97 /ReptilesStroked put Encoding 98 /ReptileFilled put /CharProcs 3 dict def CharProcs begin /.notdef {} def /ReptilesStroked { %3 sqrt 1.5 translate 0.8660 0.5 moveto 3 { 120 rotate 0 0.32 0.32 0 0.05 0.4 0.84 0.5 0.31 0.87 0.58 0.8 0.94 1.24 1.42 1.68 1.52 1.64 1.73 1.73 1.41 1.32 1.06 1.42 0.87 0.87 0.99 1.05 0.82 0.68 0.62 0 -0.40 -0.48 -0.72 -1.03 -0.76 -0.84 -0.96 -1.18 -1.5 -1.28 -1.14 -1.18 -1.08 -1.18 -1.02 -0.84 -0.66 -0.36 0 -0.26 -0.49 -0.24 0.18 0.57 0.26 0.26 0.12 -0.07 -0.07 0.36 moveto lineto lineto lineto moveto lineto lineto lineto lineto moveto lineto lineto lineto lineto lineto moveto lineto lineto lineto moveto lineto lineto lineto lineto moveto lineto lineto lineto lineto lineto lineto

0.8660 0.5 moveto } repeat

LineWidth Pointsize div 3.5 mul setlinewidth stroke } def /ReptileFilled { 0 0 moveto 0.32 -0.40 lineto 0.32 -0.48 lineto 0 -0.72 lineto -0.40 -0.47 -0.42 -0.27 -0.21 0.05 0.4 0.84 0.5 0.31 0.32 0.55 0.59 0.82 0.87 0.58 0.8 0.94 1.24 1.42 1.52 1.45 1.74 1.68 1.52 1.64 1.73 2.28 2.36 2.12 1.73 1.41 1.32 1.06 1.42 1.21 1.11 0.87 0.87 0.99 1.05 0.82 0.68 0.62 0.26 -0.55 -0.68 -0.97 -0.99 -0.88 -1.03 -0.76 -0.84 -0.96 -1.18 -1.39 -1.60 -1.74 -1.86 -1.5 -1.28 -1.14 -1.18 -1.08 -1.18 -1.45 -1.81 -1.47 -1.02 -0.84 -0.66 -0.36 -0.46 -0.11 -0.15 0 -0.26 -0.49 -0.24 0.18 0.41 0.60 0.57 0.26 0.26 0.12 -0.07 -0.07 0.36 0.52 lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto lineto

0.19 0.48 lineto closepath fill } def end /BuildChar { 2.5980 1.5 -1.83 -1.96 2.46 2.1 setcachedevice exch begin Encoding exch get CharProcs exch get end exec } def end /Pointsize 2000 Frequency div def /FillFont newfont definefont pop /FillFont findfont Pointsize scalefont setfont /pntsize Pointsize 6 mul 7 div def /HeightDiff Pointsize 2 mul 7 div .49 mul def eoclip newpath currentscreen 3 -1 roll pop 120 3 1 roll setscreen Bblly pntsize Bbury pntsize add HeightDiff add { Bbllx 1 index moveto { currentpoint 1 index exch 2 copy 2 copy translate 240 rotate SetRandomRGB (b) show 0 0 moveto -240 rotate neg exch neg exch translate 2 copy translate 120 rotate SetRandomRGB (b) show 0 0 moveto -120 rotate

neg exch neg exch translate SetRandomRGB (b) show currentpoint dup 4 index sub pntsize 2.1 div gt { pntsize sub } if 3 -1 roll Bburx gt {pop pop pop exit} if moveto } loop } for LineWidth 0 gt { 0 setgray Bblly pntsize Bbury pntsize add { Bbllx 1 index moveto { (a) show currentpoint dup 3 index sub pntsize 2.1 div gt { pntsize sub } if 1 index Bburx gt {pop pop pop exit} if moveto } loop } for } if } bind def %@Fill /StainedGlass %StainedGlass,2, Frequency:=15, Linewidth:=5 { /Linewidth exch 0 100 InRange def /Frequency exch 1 50 InRange def /SetRandomRGB { 3 %put 3 randoms number between 0 and 1 on the stack {rand 100 mod 1 add 100 div 1 exch sub} repeat setrgbcolor } def Linewidth Frequency mul 250 div setlinewidth eoclip newpath 0 srand currentscreen 3 -1 roll pop 100 3 1 roll setscreen /dy Bbury Bblly sub def /dx Bburx Bbllx sub def Bbllx Bbury translate

250 Frequency div dup scale dy 920 0 0 /x0 /y0 /x1 /y1 /x2 /y2 /x3 /y3 0 5 div Frequency mul cvi { moveto 0 def 0 def 0 def 0 def 0 def 0 def 0 def 0 def dx 200 div Frequency mul { rand 50 mod 25 div 1 sub x3 y3 moveto x2 y2 x1 y1 x0 y0 curveto dup rand 30 mod 15 div neg 2 copy /y0 exch def /x0 exch def lineto dup rand 50 mod 10 div 2.5 1 index rand 50 mod 10 div 4 index rand 30 mod 15 div 6 copy /y3 exch def /x3 exch def /y2 exch def /x2 exch def /y1 exch def /x1 exch def curveto pop closepath

add 2 sub

sub add rand 50 mod 10 div neg 2 add

gsave SetRandomRGB fill grestore 0 setgray stroke } for 0 -4 translate } repeat } bind def

You might also like