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

