pic: use troff drawing commands for filling objects
[troff.git] / home / ps / postdmd.ps
blobfa312af0260f8dd3b0de8a34e1efa8baacf79b7e
2 % Version 3.3.2 prologue for DMD bitmap files.
5 /#copies 1 store
6 /aspectratio 1 def
7 /formsperpage 1 def
8 /landscape false def
9 /magnification 1 def
10 /margin 0 def
11 /orientation 0 def
12 /rotation 1 def
13 /screenres 100 def
14 /xoffset 0 def
15 /yoffset 0 def
17 /useclippath true def
18 /pagebbox [0 0 612 792] def
20 /inch {72 mul} bind def
21 /min {2 copy gt {exch} if pop} bind def
23 /setup {
24         counttomark 2 idiv {def} repeat pop
26         landscape {/orientation 90 orientation add def} if
28         pagedimensions
29         xcenter ycenter translate
30         orientation rotation mul rotate
31         xoffset inch yoffset inch translate
32         magnification dup aspectratio mul scale
34         /height height margin sub def
35         /width width margin sub def
36 } def
38 /pagedimensions {
39         useclippath {
40                 /pagebbox [clippath pathbbox newpath] def
41         } if
42         pagebbox aload pop
43         4 -1 roll exch 4 1 roll 4 copy
44         landscape {4 2 roll} if
45         sub /width exch def
46         sub /height exch def
47         add 2 div /xcenter exch def
48         add 2 div /ycenter exch def
49         userdict /gotpagebbox true put
50 } def
52 /pagesetup {/page exch def} bind def
54 /bitmap {
55         /scanlines exch def
56         /scanlength exch def
57         /flip exch def
58         /v8format exch def
60         /bytelength scanlength 8 idiv def
61         /picstr bytelength string def
62         /lpicstr bytelength string def
63         /bytelength bytelength 1 sub def
65         gsave
67 % First the overall scaling.
69         height scanlines div width scanlength div min
70         72 screenres div min
71         dup scale
73 % Followed by the one for the unit square.
75         scanlength neg 2 div scanlines neg 2 div translate
76         scanlength scanlines scale
77         v8format {getv8bitmap} {getbitmap} ifelse
78         grestore
79 } bind def
81 /getbitmap {
82         scanlength scanlines flip [scanlength 0 0 scanlines neg 0 scanlines] {
83                 0 {
84                         currentfile token pop dup
85                         0 eq {pop pop exit} if
86                         /charcount exch def
87                         picstr 1 index charcount getinterval
88                         /repl exch def
89                         currentfile repl readhexstring pop pop
90                         charcount add
91                         currentfile token pop {
92                                 picstr 1 index repl putinterval
93                                 charcount add
94                         } repeat
95                 } loop
96                 picstr
97         } imagemask
98 } bind def
100 /getv8bitmap {
101         scanlength scanlines flip not [scanlength 0 0 scanlines neg 0 scanlines] {
102                 0 {
103                         currentfile token pop dup
104                         0 eq {pop pop exit} if
105                         /charcount exch def
106                         picstr 1 index charcount getinterval
107                         /repl exch def
108                         currentfile repl readhexstring pop pop
109                         charcount add
110                         currentfile token pop {
111                                 picstr 1 index repl putinterval
112                                 charcount add
113                         } repeat
114                 } loop
115                 0 0 picstr {
116                         exch lpicstr exch get xor
117                         lpicstr exch 2 index exch put
118                         1 add dup
119                 } forall
120                 pop pop lpicstr
121         } imagemask
122 } bind def
124 /done {/lastpage where {pop lastpage} if} def