From: jdo@sjc.mentorg.com (James Do)
Subject: Re: Useful fonttable program with character names
Followup-To: comp.lang.postscript 
Keywords: code tables, ISO, Fontographer, VSCII
Reply-To: jdo@sjc.mentorg.com (James Do)
Organization: Mentor Graphics, San Jose, CA
Date: Fri, 2 Oct 1992 02:36:10 GMT

I'd like to share my additions to Fredric Ihren's useful PS program, in
order to print other code tables and fonts. The Fontographer code table
may be particularly useful to those who love that Macintosh product.

Enjoy! (With thanks, of course, to Fredric Ihren and Gisle Hannemyr!)

-----  Begin Included Text  --------------------------------------------
%!PS-Adobe-2.0
%%Title: fonttable.ps
%%Created: 23sep92 fred@nada.kth.se
%%Modified: 30sep92 jdo@sjc.mentorg.com - add GreyString to fonttable; 
%%  add MacFontographer, and VSCII (8-bit Viet Nam national Standard)
%%DocumentFonts: Times-Roman Times-Bold Times-Italic Helvetica
%%BoundingBox: 42 70 572 756
%%Pages: 1
%%EndComments

% This program prints the 16x16 encoding table of a font.
% The character names in the encoding vector are also included.
%
% Layout based on a program by Gisle Hannemyr (gisle@ifi.uio.no)
% This program is in the public domain.

% The definitions for the different encodings are not necessary
% and can be removed.

/mm { 72 25.4 div mul } bind def
/cellx 11 mm def      % x-size of character cell.
/celly 13 mm def      % y-size of character cell.
/notdefgray 0.96 def  % grayshade for undefined char.
/x0 15 mm def	      % position for left side of table
/y0 25 mm def	      % position for bottom of table

% *** Fonts ***

/TR /Times-Roman findfont def
/TB /Times-Bold findfont def	% for title
/TI /Times-Italic findfont def	% for hex and oct
/TRS TR 1.6 mm scalefont def	% small font for character names

%%<<< INSERT font file between this line and the next, if needed >>>%%
%!PS-AdobeFont-1.0: MyFnt 001.000                              ...
%%<<< INSERT font file between this line and the previous >>>%%

% *** Encodings ***

/ISOLatin1Encoding [
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
 /bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
%^^^^^/quoteleft in Adobe "PostScript Language Reference Manual"
 /braceleft/bar/braceright/asciitilde/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/dotlessi/grave/acute/circumflex/tilde/macron/breve/dotaccent
/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron
% previous 2 lines as in Adobe "PostScript Language Reference Manual"
/space/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen
/registered/macron/degree/plusminus/twosuperior/threesuperior/acute
/mu/paragraph/periodcentered/cedilla/onesuperior/ordmasculine
/guillemotright/onequarter/onehalf/threequarters/questiondown
/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis ] def

/ISOLatin2Encoding [
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
 /bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
 /braceleft/bar/braceright/asciitilde/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/dotlessi/grave/acute/circumflex/tilde/macron/breve/dotaccent
/dieresis/.notdef/ring/cedilla/.notdef/hungarumlaut/ogonek/caron
/space/Lacute/ogonek/Lslash/currency/Lcaron/Sacute/section
/dieresis/Scaron/Scedilla/Tcaron/Zacute/hyphen/Zcaron/Zdot
/degree/lacute/breve/lslash/acute/lcaron/sacute/caron
/cedilla/scaron/scedilla/tcaron/zacute/dotaccent/zcaron/zdot
/Agrave/Aacute/Acircumflex/Abreve/Adieresis/Aogonek/Cacute/Ccedilla
/Ccaron/Eacute/Eogonek/Edieresis/Ecaron/Iacute/Icircumflex/Dcaron
/Eth/Nacute/Ncaron/Oacute/Ocircumflex/Ohungar/Odieresis/Racute
/Rcaron/Udot/Uacute/Uhungar/Udieresis/Yacute/Jmacron/germandbls
/agrave/aacute/acircumflex/abreve/adieresis/aogonek/cacute/ccedilla
/ccaron/eacute/eogonek/edieresis/ecaron/iacute/icircumflex/dcaron
/dslash/nacute/ncaron/oacute/ocircumflex/ohungar/odieresis/racute
/rcaron/udot/uacute/uhungar/udieresis/yacute/tcedilla/hungarumlaut ] def

/WinLatin1Encoding [
% used by Windows; like ISOLatin1 except for:
%   39 = quoteright (quotesingle in ISOLatin1)
%   96 = grave	    (quoteleft [grave?] in ISOLatin1)
%  130-159	    (special control characters in ISOLatin1)
% 
% The characters on position 0-5 are there because Apple LW need all
% subcharacters of composite characters in current encoding (illogical,
% but thats the case); otherwise an "invalid font" will occur.
/caron/circumflex/tilde/ring/grave/dotlessi/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
/bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
/braceleft/bar/braceright/asciitilde/.notdef
/.notdef/.notdef/quotesinglbase/florin/quotedblbase/ellipsis/dagger
 /daggerdbl
/.notdef/perthousand/Scaron/guilsinglleft/OE/.notdef/.notdef/.notdef
/.notdef/quoteleft/quoteright/quotedblleft/quotedblright/bullet/endash
 /emdash
/.notdef/trademark/scaron/guilsinglright/oe/ydieresis/.notdef/.notdef
/space/exclamdown/cent/sterling/currency/yen/brokenbar/section
/dieresis/copyright/ordfeminine/guillemotleft/logicalnot/hyphen
 /registered/macron
/degree/plusminus/twosuperior/threesuperior/acute/mu/paragraph
 /periodcentered
/cedilla/onesuperior/ordmasculine/guillemotright/onequarter/onehalf
 /threequarters/questiondown
/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE/Ccedilla
/Egrave/Eacute/Ecircumflex/Edieresis/Igrave/Iacute/Icircumflex/Idieresis
/Eth/Ntilde/Ograve/Oacute/Ocircumflex/Otilde/Odieresis/multiply
/Oslash/Ugrave/Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
/agrave/aacute/acircumflex/atilde/adieresis/aring/ae/ccedilla
/egrave/eacute/ecircumflex/edieresis/igrave/iacute/icircumflex/idieresis
/eth/ntilde/ograve/oacute/ocircumflex/otilde/odieresis/divide
/oslash/ugrave/uacute/ucircumflex/udieresis/yacute/thorn/ydieresis ] def

/MacEncoding [
/NUL/SOH/STX/ETX/EOT/ENQ/ACK/BEL/BS/HT/LF/VT/FF/CR/SO/SI
/DLE/DC1/DC2/DC3/DC4/NAK/SYN/ETB/CAN/EM/SUB/ESC/FS/GS/RS/US
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quoteright
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
 /bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
 /braceleft/bar/braceright/asciitilde/DEL
/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute
/agrave/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave
/ecircumflex/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute
/ograve/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis
/dagger/degree/cent/sterling/section/bullet/paragraph/germandbls
/registered/copyright/trademark/acute/dieresis/notequal/AE/Oslash
/infinity/plusminus/lessequal/greaterequal/yen/mu/partialdiff/summation
/product/pi/integral/ordfeminine/ordmasculine/Omega/ae/oslash
/questiondown/exclamdown/logicalnot/radical/florin/approxequal/Delta
 /guillemotleft
/guillemotright/ellipsis/nbspace/Agrave/Atilde/Otilde/OE/oe
/endash/emdash/quotedblleft/quotedblright/quoteleft/quoteright/divide
 /lozenge
/ydieresis/Ydieresis/fraction/currency/guilsinglleft/guilsinglright/fi/fl
/daggerdbl/periodcentered/quotesinglbase/quotedblbase/perthousand
 /Acircumflex/Ecircumflex/Aacute
/Edieresis/Egrave/Iacute/Icircumflex/Idieresis/Igrave/Oacute/Ocircumflex
/apple/Ograve/Uacute/Ucircumflex/Ugrave/dotlessi/circumflex/tilde
/macron/breve/dotaccent/ring/cedilla/hungarumlaut/ogonek/caron ] def

/MacFontographerEncoding [
/NUL/Eth/eth/Lslash/lslash/Scaron/scaron/Yacute/yacute/HT/LF
/Thorn/thorn/CR/Zcaron/zcaron/DLE/DC1/DC2/DC3/DC4
/onehalf/onequarter/onesuperior/threequarters/threesuperior/twosuperior
/brokenbar/minus/multiply/RS/US
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash/zero/one/two
/three/four/five/six/seven/eight/nine/colon/semicolon/less/equal/greater
/question/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z/bracketleft
/backslash/bracketright/asciicircum/underscore/grave/a/b/c/d/e/f/g/h/i/j/k/l/m
/n/o/p/q/r/s/t/u/v/w/x/y/z/braceleft/bar/braceright/asciitilde/DEL
/Adieresis/Aring/Ccedilla/Eacute/Ntilde/Odieresis/Udieresis/aacute/agrave
/acircumflex/adieresis/atilde/aring/ccedilla/eacute/egrave/ecircumflex
/edieresis/iacute/igrave/icircumflex/idieresis/ntilde/oacute/ograve
/ocircumflex/odieresis/otilde/uacute/ugrave/ucircumflex/udieresis/dagger/degree
/cent/sterling/section/bullet/paragraph/germandbls/registered/copyright
/trademark/acute/dieresis/notequal/AE/Oslash/infinity/plusminus/lessequal
/greaterequal/yen/mu/partialdiff/summation/product/pi/integral/ordfeminine
/ordmasculine/Omega/ae/oslash/questiondown/exclamdown/logicalnot/radical
/florin/approxequal/Delta/guillemotleft/guillemotright/ellipsis/nbspace
/Agrave/Atilde/Otilde/OE/oe/endash/emdash/quotedblleft/quotedblright/quoteleft
/quoteright/divide/lozenge/ydieresis/Ydieresis/fraction/currency/guilsinglleft
/guilsinglright/fi/fl/daggerdbl/periodcentered/quotesinglbase/quotedblbase
/perthousand/Acircumflex/Ecircumflex/Aacute/Edieresis/Egrave/Iacute/Icircumflex
/Idieresis/Igrave/Oacute/Ocircumflex/apple/Ograve/Uacute/Ucircumflex/Ugrave
/dotlessi/circumflex/tilde/macron/breve/dotaccent/ring/cedilla/hungarumlaut
/ogonek/caron ] def

/VSCII1Encoding [
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
 /bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
 /braceleft/bar/braceright/asciitilde/DEL
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/Abreve/Acircumflex/Ecircumflex/Ocircumflex
/Ohorn/Uhorn/Dstroke/abreve
/acircumflex/ecircumflex/ocircumflex/ohorn
/uhorn/dstroke/Abrevegrave/Abrevehookabove
/combininggrave/combininghookabove/combiningtilde/combiningacute
/combiningdotbelow/agrave/ahookabove/atilde
/aacute/adotbelow/Abrevetilde/abrevegrave
/abrevehookabove/abrevetilde/abreveacute/Abreveacute
/Acircumflexgrave/Acircumflexhookabove/Acircumflextilde/Acircumflexacute
/Ecircumflexgrave/Ecircumflexhookabove/abrevedotbelow/acircumflexgrave
/acircumflexhookabove/acircumflextilde/acircumflexacute/acircumflexdotbelow
/egrave/Ecircumflextilde/ehookabove/etilde
/eacute/edotbelow/ecircumflexgrave/ecircumflexhookabove
/ecircumflextilde/ecircumflexacute/ecircumflexdotbelow/igrave
/ihookabove/Ecircumflexacute/Ocircumflexgrave/Ocircumflexhookabove
/itilde/iacute/idotbelow/ograve
/Ocircumflextilde/ohookabove/otilde/oacute
/odotbelow/ocircumflexgrave/ocircumflexhookabove/ocircumflextilde
/ocircumflexacute/ocircumflexdotbelow/ohorngrave/ohornhookabove
/ohorntilde/ohornacute/ohorndotbelow/ugrave
/Ocircumflexacute/uhookabove/utilde/uacute
/udotbelow/uhorngrave/uhornhookabove/uhorntilde
/uhornacute/uhorndotbelow/ygrave/yhookabove
/ytilde/yacute/ydotbelow/EOF ] def

/VSCII2Encoding [
/.notdef/Uacute/Udotbelow/.notdef/Uhorngrave/Uhornhookabove/.notdef
 /.notdef
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/Uhorntilde/Uhornacute/Uhorndotbelow/Ygrave/Yhookabove/Ytilde/Yacute
 /Ydotbelow
/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef/.notdef
/space/exclam/quotedbl/numbersign/dollar/percent/ampersand/quotesingle
/parenleft/parenright/asterisk/plus/comma/hyphen/period/slash
/zero/one/two/three/four/five/six/seven/eight
/nine/colon/semicolon/less/equal/greater/question
/at/A/B/C/D/E/F/G/H/I/J/K/L/M/N/O/P/Q/R/S/T/U/V/W/X/Y/Z
 /bracketleft/backslash/bracketright/asciicircum/underscore
/grave/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/y/z
 /braceleft/bar/braceright/asciitilde/DEL
/Agrave/Ahookabove/Atilde/Aacute/Adotbelow/Abrevedotbelow
 /Acircumflexdotbelow/Egrave
/Ehookabove/Etilde/Eacute/Edotbelow/Ecircumflexdotbelow/Igrave
 /Ihookabove/Itilde
/Iacute/Idotbelow/Ograve/Ohookabove/Otilde/Oacute/Odotbelow
 /Ocircumflexdotbelow
/Ohorngrave/Ohornhookabove/Ohorntilde/Ohornacute/Ohorndotbelow/Ugrave
 /Uhookabove/Utilde
/Abreve/Acircumflex/Ecircumflex/Ocircumflex/Ohorn/Uhorn/Dstroke/abreve
/acircumflex/ecircumflex/ocircumflex/ohorn/uhorn/dstroke/Abrevegrave
 /Abrevehookabove
/combininggrave/combininghookabove/combiningtilde/combiningacute
 /combiningdotbelow/agrave/ahookabove/atilde
/aacute/adotbelow/Abrevetilde/abrevegrave/abrevehookabove/abrevetilde
 /abreveacute/Abreveacute
/Acircumflexgrave/Acircumflexhookabove/Acircumflextilde/Acircumflexacute
 /Ecircumflexgrave/Ecircumflexhookabove/abrevedotbelow/acircumflexgrave
/acircumflexhookabove/acircumflextilde/acircumflexacute
 /acircumflexdotbelow/egrave/Ecircumflextilde/ehookabove/etilde
/eacute/edotbelow/ecircumflexgrave/ecircumflexhookabove
 /ecircumflextilde/ecircumflexacute/ecircumflexdotbelow/igrave
/ihookabove/Ecircumflexacute/Ocircumflexgrave/Ocircumflexhookabove
 /itilde/iacute/idotbelow/ograve
/Ocircumflextilde/ohookabove/otilde/oacute/odotbelow/ocircumflexgrave
 /ocircumflexhookabove/ocircumflextilde
/ocircumflexacute/ocircumflexdotbelow/ohorngrave/ohornhookabove
 /ohorntilde/ohornacute/ohorndotbelow/ugrave
/Ocircumflexacute/uhookabove/utilde/uacute/udotbelow/uhorngrave
 /uhornhookabove/uhorntilde
/uhornacute/uhorndotbelow/ygrave/yhookabove/ytilde/yacute/ydotbelow
 /EOF ] def

% *** Functions ***

% General reencode procedure
/REncode { % Encodingvector font /newname REncode -> font
  exch dup maxlength dict dup begin
    exch { 1 index /FID ne { def } { pop pop } ifelse } forall
    /Encoding 4 -1 roll def
  end definefont
} def

/rope 50 string def

/center { % string center ->		centers string around current position
  gsave dup stringwidth pop -0.5 mul 0 rmoveto show grestore
} def

/tablerow { % rownumber tablerow ->		prints a row of characters
  dup cellx mul 16celly celly sub moveto
  16 mul 1 1 index 15 add {
    dup tableencoding exch get dup /.notdef eq
      { pop pop
        gsave cellx 0 rlineto 0 celly rlineto cellx neg 0 rlineto
        closepath notdefgray setgray fill grestore }
      { gsave cellx 0.5 mul celly 1.8 mm sub rmoveto
        TRS setfont rope cvs center
        ( ) dup 0 4 -1 roll put grestore
        gsave cellx 0.5 mul yup rmoveto center grestore }
     ifelse
     0 celly neg rmoveto
  } for
} bind def

/fonttable { % font notestring greystring fonttable -> make a table
  /GreyString exch def
  /NoteString exch def
  gsave
  /fsize celly 0.6 mul def
  /16cellx 16 cellx mul def
  /16celly 16 celly mul def  
  /17cellx 16cellx cellx add def
  /17celly 16celly celly add def
  fsize scalefont setfont
  /fontname currentfont /FontName known
     { currentfont /FontName get dup type /stringtype ne { 100 string cvs } if
     } { () } ifelse def
  /tableencoding currentfont /Encoding get def
  cellx 0 translate
  /yup fsize 0.3 mul def
  0 1 15 { tablerow } for
  0 0 moveto 0 16celly rlineto 16cellx 0 rlineto 0 16celly neg rlineto
  closepath 2 setlinewidth stroke
  cellx neg 0 translate
  0 1 17 { celly mul 0 exch moveto 17cellx 0 rlineto } for
  0 1 17 { cellx mul 0 moveto 0 17celly rlineto } for
  0 setlinewidth stroke
  TI fsize 0.9 mul scalefont setfont
  cellx 2 div 16celly celly sub yup add moveto
  (0123456789ABCDEF)
    { ( ) dup 0 4 -1 roll put center 0 celly neg rmoveto } forall
  cellx 2 div 16celly fsize 0.2 mul add moveto (hex) center
  cellx 0 rmoveto
  (0123456789ABCDEF) { ( x) dup 0 4 -1 roll put center cellx 0 rmoveto } forall
  cellx 2 div 16celly celly sub yup add celly 0.5 mul add moveto
  TI fsize 0.4 mul scalefont setfont
  (0123456701234567)
    { ( ) dup 0 4 -1 roll put center 0 celly neg rmoveto } forall
  cellx 2 div 17celly fsize 0.4 mul sub moveto (oct) center cellx 0 rmoveto
  [(00x) (02x) (04x) (06x) (10x) (12x) (14x) (16x) (20x) (22x) (24x) (26x)
   (30x) (32x) (34x) (36x)] { center cellx 0 rmoveto } forall
  cellx 2 div 17celly fsize 0.8 mul sub moveto (dec) center cellx 0 rmoveto
  0 1 15 { 16 mul rope cvs center cellx 0 rmoveto } for
  0 17celly celly add moveto
  TB fsize scalefont setfont () show
  gsave TR fsize scalefont setfont fontname show
  grestore
  17cellx currentpoint exch pop moveto
  NoteString dup stringwidth pop neg 0 rmoveto show
  grestore
  0 17celly 2 mm add moveto
  gsave cellx 2 div 0 rlineto 0 celly 2 div rlineto cellx -2 div 0 rlineto
  closepath
  gsave notdefgray setgray fill grestore 0 setlinewidth stroke grestore
  TR 12 scalefont setfont
  cellx 0.7 mul 0 rmoveto
  GreyString show
} bind def

%%EndProlog
%%BeginSetup

x0 y0 translate

%%EndSetup
%%Page: - 1

% *** Examples ***

% /Helvetica findfont (Adobe Standard) (.notdef) fonttable gsave 
% showpage grestore

% /Symbol findfont (Adobe Standard) (.notdef) fonttable gsave showpage 
% grestore

ISOLatin1Encoding /Helvetica findfont /TR-ISO1 REncode 
(ISO 8859-1) (.notdef) fonttable gsave showpage grestore

% ISOLatin2Encoding /Helvetica findfont /TR-ISO2 REncode 
% (ISO 8859-2) (.notdef) fonttable gsave showpage grestore

% MacEncoding /Helvetica findfont /TR-Mac REncode (Macintosh)
% (= ASCII) fonttable gsave showpage grestore

MacFontographerEncoding /Helvetica findfont /TR-MFtg REncode 
(\(Mac\)Fontographer) (.notdef) fonttable gsave showpage grestore

% VSCII1Encoding /MyFnt findfont /TR-V1 REncode (VSCII-1)
% (as specified in ISO 8859-1) fonttable gsave showpage grestore

% VSCII2Encoding /MyFnt findfont /TR-V2 REncode (VSCII-2)
% (undefined code) fonttable gsave showpage grestore

% WinLatin1Encoding /Helvetica findfont /TR-MS REncode (Windows Latin1)
% (.notdef) fonttable gsave showpage grestore

% /MyFnt findfont (*Raw*) (.notdef) fonttable gsave showpage grestore

%%Trailer
-----  E n d Included Text  --------------------------------------------