[comp.lang.postscript] Getting all font names from your PostScript printer.

jos@idca.tds.PHILIPS.nl (Jos Vos) (10/04/88)

After receiving my Apple LaserWriter IINTX, I was wondered about the fact
that Apple didn't include the names to be used in PostScript of all the
35 fonts (e.g. Courier-Bold).

So, I wrote a small PostScript program, that returns all font names on
its output (not on paper!):

	FontDirectory { /FontName get == } forall

Maybe this program might also be interesting for others, dealing with
the same lack of information in the printer documentation.

-- 
-- ######   Jos Vos   ######   Internet   jos@idca.tds.philips.nl   ######
-- ######             ######   UUCP         ...!mcvax!philapd!jos   ######

ulfis@nada.kth.se (Anders Ulfheden) (10/05/88)

In article <567@ssp15.idca.tds.philips.nl> jos@idca.tds.PHILIPS.nl (Jos Vos) writes:
>After receiving my Apple LaserWriter IINTX, I was wondered about the fact
>that Apple didn't include the names to be used in PostScript of all the
>35 fonts (e.g. Courier-Bold).
>
>So, I wrote a small PostScript program, that returns all font names on
>its output (not on paper!):
>
>	FontDirectory { /FontName get == } forall
>
>Maybe this program might also be interesting for others, dealing with
>the same lack of information in the printer documentation.

I have written/stolen/modifyed a program from the net that produced the
same result. The result is presented on a paper from the printer.
The difference is that the fontnames are sorted in alphabetic order together
with some, maybe useful, information from the LaserWriter. The program
uses Bubblesort to sort the names of the fonts. Please dont't flame me
for a bad algorithm in the sorting, it's just a happy hack...
NOTE: that it's assumed that no more then 50 fonts exists in the LaserWriter.
Use the program, and have a Happy Smile!

-------Cut Here------8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----
%!
/MaxNrOfFonts 50 def 	% Maximum numbers of fonts...
/Xpos 136 def
/Ypos 690 def
/num 0 def 		% local counter
/incr {
  /num num 1 add def
} def

/s40 { 40 string } def	% Proper length of the fontname

/showline {		% Show and newlines
  show
  newline
} def

/newline {		% Spacing between lines
  /Ypos Ypos 12 sub def
  Xpos Ypos moveto
} def

/CountFonts {		% Count the fonts and put the names into array
  FontDirectory 
  {
    pop
    s40
    cvs
    incr
  }
  forall
  /FontArray num array def
  FontArray astore
  pop
} def

/ListFonts {		% Sort the fonts and show them on paper
  Bubbelsort
  FontArray
  {
    showline
  }
  forall
} def

/Bubbelsort {		% Here is the sorting routine
  1 1 num 1 sub
  {
    /localcount exch def
    num 1 sub -1 localcount
    {
      /innercount exch def
      /firststring FontArray innercount 1 sub get def
      /secondstring FontArray innercount get def
      firststring secondstring gt
      {
         FontArray innercount 1 sub secondstring put
         FontArray innercount firststring put
      } if
    } for
  } for
} def

/prettyline
{  /YPOSition exch def
   newpath 
     Xpos Ypos YPOSition add moveto
     Xpos 100 add Ypos YPOSition add lineto
   stroke
} def

/Times-Roman findfont 12 scalefont setfont
14 prettyline

Xpos Ypos 18 add moveto
CountFonts
(Number of fonts: ) show
num s40 cvs show

30 prettyline
Xpos Ypos moveto
ListFonts
newline

/Times-Bold findfont 12 scalefont setfont
(Total memory: ) show
vmstatus s40 cvs show newline
(Memory used: ) show
s40 cvs show newline
pop
(Free memory: ) show
vmstatus exch sub s40 cvs show newline newline
pop
/Times-Roman findfont 12 scalefont setfont
(From ulfis@nada.kth.se, 88-10-05) show
showpage
-------Cut Here------8<-----8<-----8<-----8<-----8<-----8<-----8<-----8<-----