diff options
Diffstat (limited to 'postscript/prologues/postdmd.ps')
-rw-r--r-- | postscript/prologues/postdmd.ps | 124 |
1 files changed, 124 insertions, 0 deletions
diff --git a/postscript/prologues/postdmd.ps b/postscript/prologues/postdmd.ps new file mode 100644 index 00000000..fa312af0 --- /dev/null +++ b/postscript/prologues/postdmd.ps @@ -0,0 +1,124 @@ +% +% Version 3.3.2 prologue for DMD bitmap files. +% + +/#copies 1 store +/aspectratio 1 def +/formsperpage 1 def +/landscape false def +/magnification 1 def +/margin 0 def +/orientation 0 def +/rotation 1 def +/screenres 100 def +/xoffset 0 def +/yoffset 0 def + +/useclippath true def +/pagebbox [0 0 612 792] def + +/inch {72 mul} bind def +/min {2 copy gt {exch} if pop} bind def + +/setup { + counttomark 2 idiv {def} repeat pop + + landscape {/orientation 90 orientation add def} if + + pagedimensions + xcenter ycenter translate + orientation rotation mul rotate + xoffset inch yoffset inch translate + magnification dup aspectratio mul scale + + /height height margin sub def + /width width margin sub def +} def + +/pagedimensions { + useclippath { + /pagebbox [clippath pathbbox newpath] def + } if + pagebbox aload pop + 4 -1 roll exch 4 1 roll 4 copy + landscape {4 2 roll} if + sub /width exch def + sub /height exch def + add 2 div /xcenter exch def + add 2 div /ycenter exch def + userdict /gotpagebbox true put +} def + +/pagesetup {/page exch def} bind def + +/bitmap { + /scanlines exch def + /scanlength exch def + /flip exch def + /v8format exch def + + /bytelength scanlength 8 idiv def + /picstr bytelength string def + /lpicstr bytelength string def + /bytelength bytelength 1 sub def + + gsave + +% First the overall scaling. + + height scanlines div width scanlength div min + 72 screenres div min + dup scale + +% Followed by the one for the unit square. + + scanlength neg 2 div scanlines neg 2 div translate + scanlength scanlines scale + v8format {getv8bitmap} {getbitmap} ifelse + grestore +} bind def + +/getbitmap { + scanlength scanlines flip [scanlength 0 0 scanlines neg 0 scanlines] { + 0 { + currentfile token pop dup + 0 eq {pop pop exit} if + /charcount exch def + picstr 1 index charcount getinterval + /repl exch def + currentfile repl readhexstring pop pop + charcount add + currentfile token pop { + picstr 1 index repl putinterval + charcount add + } repeat + } loop + picstr + } imagemask +} bind def + +/getv8bitmap { + scanlength scanlines flip not [scanlength 0 0 scanlines neg 0 scanlines] { + 0 { + currentfile token pop dup + 0 eq {pop pop exit} if + /charcount exch def + picstr 1 index charcount getinterval + /repl exch def + currentfile repl readhexstring pop pop + charcount add + currentfile token pop { + picstr 1 index repl putinterval + charcount add + } repeat + } loop + 0 0 picstr { + exch lpicstr exch get xor + lpicstr exch 2 index exch put + 1 add dup + } forall + pop pop lpicstr + } imagemask +} bind def + +/done {/lastpage where {pop lastpage} if} def |