| % |
| % Formatted font dump. Assumes all fonts include valid FontBBox arrays. |
| % |
| |
| /#copies 1 store |
| /aspectratio 1 def |
| /landscape false def |
| /magnification 1 def |
| /margin 10 def |
| /orientation 0 def |
| /rotation 1 def |
| /xoffset 0 def |
| /yoffset 0 def |
| |
| /axescount 0 def |
| /charwidth false def |
| /graynotdef 0.85 def |
| /hireslinewidth 0.2 def |
| /longnames false def |
| /maxsize 6.0 def |
| /minsize 4.5 def |
| /numbercell true def |
| /radix 16 def |
| /labelfont /Helvetica def |
| /labelspace 36 def |
| /zerocell 0 def |
| |
| /roundpage true def |
| /useclippath true def |
| /pagebbox [0 0 612 792] def |
| |
| /inch {72 mul} def |
| /min {2 copy gt {exch} if pop} def |
| /max {2 copy lt {exch} if pop} def |
| |
| /LLx {0 get} bind def |
| /LLy {1 get} bind def |
| /URx {2 get} bind def |
| /URy {3 get} bind def |
| /BBoxHeight {dup URy exch LLy sub} bind def |
| /BBoxWidth {dup URx exch LLx sub} bind def |
| |
| /setup { |
| /graylevels [1 0 0] def |
| /scratchstring 512 string def |
| /Product statusdict begin /product where {pop product}{(Unknown)} ifelse end def |
| /Resolution 0 72 dtransform dup mul exch dup mul add sqrt cvi def |
| /Version /version where {pop version}{(???)} ifelse def |
| |
| landscape {/orientation 90 orientation add def} if |
| |
| pagedimensions |
| xcenter ycenter translate |
| orientation rotation mul rotate |
| width 2 div neg height 2 div translate |
| xoffset inch yoffset inch neg translate |
| margin dup neg translate |
| 0 labelspace .75 mul neg translate |
| magnification dup aspectratio mul scale |
| 0 0 transform round exch round exch itransform translate |
| |
| currentdict /linewidth known not { |
| /linewidth Resolution 400 le {0}{hireslinewidth} ifelse def |
| } if |
| } def |
| |
| /pagedimensions { |
| useclippath { |
| /pagebbox [clippath pathbbox newpath] def |
| roundpage currentdict /roundpagebbox known and {roundpagebbox} if |
| } 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 |
| } def |
| |
| /CharSetup { |
| /chcode exch def |
| /chname Encoding chcode get def |
| /chstring ( ) dup 0 chcode put def |
| /chknown true def |
| |
| graylevels 0 1 put % initial cell fill |
| graylevels 1 0 put % cell text |
| graylevels 2 0 put % cell border |
| |
| FontDict /CharStrings known { |
| FontDict /CharStrings get chname known not { |
| /chknown false def |
| graylevels 0 0 put |
| graylevels 1 1 put |
| } if |
| } if |
| |
| chname /.notdef eq { |
| /chknown false def |
| graylevels 0 graynotdef put |
| graylevels 1 graynotdef put |
| } if |
| |
| /chwid chknown |
| {FontDict 1 scalefont setfont chstring stringwidth pop} |
| {0} |
| ifelse def |
| } bind def |
| |
| /CellSetup { |
| /gridwidth width margin 2 mul sub def |
| /gridheight height labelspace sub margin 2 mul sub def |
| /cellwidth gridwidth radix div def |
| /cellheight gridheight Entries radix div ceiling div def |
| |
| cellwidth cellheight dtransform truncate exch truncate exch idtransform |
| /cellheight exch def |
| /cellwidth exch def |
| |
| labelfont findfont 1 scalefont setfont |
| /LabelBBox currentfont /FontBBox get TransformBBox def |
| |
| LabelBBox 2 0 Encoding { |
| scratchstring cvs stringwidth pop |
| 2 copy lt {exch} if |
| pop |
| } forall put |
| |
| /CellLabelSize |
| cellheight .20 mul cellwidth .90 mul LabelBBox BestFit |
| minsize max |
| maxsize min |
| def |
| zerocell CellOrigin cellheight add neg exch neg exch translate |
| } bind def |
| |
| /FontSetup { |
| FontName findfont 1 scalefont setfont |
| /BBox currentfont /FontBBox get TransformBBox def |
| /PointSize cellheight .5 mul cellwidth .8 mul BBox BestFit def |
| BBox {PointSize mul} forall BBox astore pop |
| |
| /xorigin cellwidth BBox BBoxWidth sub 2 div BBox LLx sub def |
| /yorigin cellheight BBox BBoxHeight sub 2 div BBox LLy sub def |
| } bind def |
| |
| /BestFit { |
| /bbox exch def |
| bbox BBoxWidth div exch |
| bbox BBoxHeight div min |
| } bind def |
| |
| /TransformBBox { % font bbox to user space |
| aload pop |
| currentfont /FontMatrix get dtransform 4 2 roll |
| currentfont /FontMatrix get dtransform 4 2 roll |
| 4 array astore % should build user space bbox if all zeros |
| } bind def |
| |
| /CellOrigin { |
| dup |
| exch radix mod cellwidth mul |
| exch radix idiv 1 add neg cellheight mul |
| } bind def |
| |
| /CellOutline { |
| newpath |
| CellOrigin moveto |
| cellwidth 0 rlineto |
| 0 cellheight rlineto |
| cellwidth neg 0 rlineto |
| closepath |
| } bind def |
| |
| /LabelCell { |
| gsave |
| chcode CellOrigin translate |
| linewidth .5 mul setlinewidth |
| labelfont findfont CellLabelSize scalefont setfont |
| |
| numbercell { |
| cellwidth .025 mul cellheight .05 mul moveto |
| chcode radix scratchstring cvrs show |
| } if |
| |
| charwidth chknown and { |
| /wid chwid 0.0005 add scratchstring cvs 0 5 getinterval def |
| cellwidth wid stringwidth pop 1.10 mul sub cellheight .05 mul moveto |
| wid show |
| } if |
| |
| longnames chknown not or { |
| cellwidth .025 mul |
| cellheight LabelBBox URy CellLabelSize mul sub .05 sub moveto |
| Encoding chcode get scratchstring cvs show |
| } if |
| |
| axescount 1 ge chknown and { % gsave/grestore if not last |
| newpath |
| xorigin yorigin translate |
| |
| BBox LLx 0 moveto % baseline |
| BBox URx 0 lineto stroke |
| |
| axescount 2 ge { % vertical through current origin |
| 0 BBox LLy moveto |
| 0 BBox URy lineto stroke |
| } if |
| |
| axescount 3 ge { % vertical through next origin |
| chwid PointSize mul BBox LLy |
| dtransform round exch round exch idtransform moveto |
| 0 BBox BBoxHeight rlineto stroke |
| %chwid PointSize mul BBox URy lineto stroke |
| } if |
| } if |
| grestore |
| } bind def |
| |
| /PlaceChar { |
| FontName findfont PointSize scalefont setfont |
| chcode CellOrigin moveto |
| xorigin yorigin rmoveto |
| ( ) dup 0 chcode put show |
| } bind def |
| |
| /LabelPage { |
| labelfont findfont labelspace .75 mul .75 mul 18 min scalefont setfont |
| 0 labelspace .75 mul .25 mul moveto |
| FontName scratchstring cvs show |
| |
| labelfont findfont labelspace .25 mul .75 mul 9 min scalefont setfont |
| 0 gridheight neg moveto |
| 0 labelspace .25 mul .75 mul neg rmoveto |
| Product show ( Version ) show Version show |
| ( \() show Resolution scratchstring cvs show (dpi\)) show |
| |
| gridwidth gridheight neg moveto |
| 0 labelspace .25 mul .75 mul neg rmoveto |
| (size=, ) stringwidth pop neg 0 rmoveto |
| PointSize cvi scratchstring cvs stringwidth pop neg 0 rmoveto |
| (gray=, ) stringwidth pop neg 0 rmoveto |
| graynotdef scratchstring cvs stringwidth pop neg 0 rmoveto |
| (linewidth=) stringwidth pop neg 0 rmoveto |
| linewidth scratchstring cvs stringwidth pop neg 0 rmoveto |
| (size=) show PointSize cvi scratchstring cvs show (, ) show |
| (gray=) show graynotdef scratchstring cvs show (, ) show |
| (linewidth=) show linewidth scratchstring cvs show |
| } bind def |
| |
| % |
| % Formatted dump of the encoded characters in a single font. |
| % |
| |
| /PrintFont { |
| /saveobj save def |
| /FontName exch def |
| /FontDict FontName findfont def |
| /Encoding FontDict /Encoding get def |
| /Entries Encoding length def |
| |
| CellSetup |
| FontSetup |
| LabelPage |
| zerocell 1 Entries 1 sub { |
| CharSetup |
| graylevels 0 get setgray |
| chcode CellOutline fill |
| graylevels 1 get setgray |
| LabelCell |
| PlaceChar |
| graylevels 2 get setgray |
| linewidth setlinewidth |
| chcode CellOutline stroke |
| } for |
| showpage |
| saveobj restore |
| } bind def |
| |
| % |
| % Dump of all ROM and disk fonts - in alphabetical order. |
| % |
| |
| /AllFonts { |
| /AllFontNames FontDirectory maxlength array def |
| AllFontNames 0 0 put |
| |
| FontDirectory {pop AllFontNames Insert} forall |
| |
| /filenameforall where { |
| pop |
| (fonts/*) |
| {(fonts/) search pop pop pop AllFontNames Insert} |
| 200 string |
| filenameforall |
| } if |
| |
| 1 1 AllFontNames 0 get { |
| AllFontNames exch get cvn PrintFont |
| } for |
| } bind def |
| |
| /Insert { % name in a sorted list |
| /List exch def |
| /Name exch 128 string cvs def |
| |
| /Slot 1 def |
| List 0 get { |
| Name List Slot get le {exit} if |
| /Slot Slot 1 add def |
| } repeat |
| |
| List 0 get -1 Slot { |
| dup List exch get |
| List 3 1 roll exch 1 add exch put |
| } for |
| List Slot Name put |
| List 0 List 0 get 1 add put |
| } bind def |
| |