| % | 
 | % 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 | 
 |  |