plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

postdmd.ps (2562B)


      1 %
      2 % Version 3.3.2 prologue for DMD bitmap files.
      3 %
      4 
      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
     16 
     17 /useclippath true def
     18 /pagebbox [0 0 612 792] def
     19 
     20 /inch {72 mul} bind def
     21 /min {2 copy gt {exch} if pop} bind def
     22 
     23 /setup {
     24 	counttomark 2 idiv {def} repeat pop
     25 
     26 	landscape {/orientation 90 orientation add def} if
     27 
     28 	pagedimensions
     29 	xcenter ycenter translate
     30 	orientation rotation mul rotate
     31 	xoffset inch yoffset inch translate
     32 	magnification dup aspectratio mul scale
     33 
     34 	/height height margin sub def
     35 	/width width margin sub def
     36 } def
     37 
     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
     51 
     52 /pagesetup {/page exch def} bind def
     53 
     54 /bitmap {
     55 	/scanlines exch def
     56 	/scanlength exch def
     57 	/flip exch def
     58 	/v8format exch def
     59 
     60 	/bytelength scanlength 8 idiv def
     61 	/picstr bytelength string def
     62 	/lpicstr bytelength string def
     63 	/bytelength bytelength 1 sub def
     64 
     65 	gsave
     66 
     67 % First the overall scaling.
     68 
     69 	height scanlines div width scanlength div min
     70 	72 screenres div min
     71 	dup scale
     72 
     73 % Followed by the one for the unit square.
     74 
     75 	scanlength neg 2 div scanlines neg 2 div translate
     76 	scanlength scanlines scale
     77 	v8format {getv8bitmap} {getbitmap} ifelse
     78 	grestore
     79 } bind def
     80 
     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
     99 
    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
    123 
    124 /done {/lastpage where {pop lastpage} if} def