% make a (fairly large) font chart

\newlinechar=`@
\message{@Name of the font to chart = }
\read-1 to \fontname

\font\f=\fontname at .75in
\f

% Here's the best way I know to discover character height and depth
% when they are possibly negative.
\fontdimen5\f=-10000pt % a new (rather small) xheight
\textfont0=\f
\newdimen\h \newdimen\d % will be set to the character's height, depth
\def\htdp#1{\setbox0=\hbox{\char#1}\h=-\ht0
 \setbox0=\hbox{\accent#1\char#1}\advance\h\ht0 \advance\h-10000pt
 \setbox0=\null \wd0=-10000pt % in case the character has a charlist!
 \setbox0=\hbox{$\mathaccent#1{\box0}$}%
 \d=\ht0 \advance\d-10000pt \advance\d-\h}

% (By the way, my previous best was this:
% \textfont15=\f % use family "F
% \fontdimen8\tenex=0pt % set defaultrulethickness zero
% \setbox1=\null \ht1=-10000pt \setbox2=\null \dp3=-10000pt
% \newdimen\d \newdimen\h \newcount\n
% \n=#1 \advance\n"F00
% \setbox0=\hbox{$\radical\n{\copy1}$}
% \d=\dp0 \advance\d-5000pt \advance\d\d %\showthe\d
% \setbox0=\hbox{$\radical\n{\copy2}$}
% \h=\ht0 \advance\h-5000pt \advance\h-.5\d
% \ifdim\h>0pt \h=.5\h \fi
% ....very tricky! But it works only when height+depth is positive.)

\tracinglostchars=0
\nopagenumbers

\def\testrow#1#2{\setbox0=\hbox{\penalty1\def\\{\char'#1#2}%
 \\0\\1\\2\\3\\4\\5\\6\\7\global\chardef\p=\lastpenalty}} % p=1 if none there

\raggedbottom
\baselineskip=1in
\topskip=.75in
\newdimen\w \w=.75in
\headline={\vtop{\hbox{\tt\fontname\unskip, page \folio\hfil}
  \kern-.75in\unitsdigits}\hss}
\footline={\unitsdigits\hss}
\def\unitsdigits{\hbox{\kern.3in \tt
 \hbox to\w{\ \ 0\hss}%
 \hbox to\w{\ \ 1\hss}%
 \hbox to\w{\ \ 2\hss}%
 \hbox to\w{\ \ 3\hss}%
 \hbox to\w{\ \ 4\hss}%
 \hbox to\w{\ \ 5\hss}%
 \hbox to\w{\ \ 6\hss}%
 \hbox to\w{\ \ 7\hss}}}

\def\row#1#2{\testrow#1#2%
\ifnum\p=0\hbox{\hbox to.3in{\tt#1#2\hfil}%
 \mod#1#20\mod#1#21\mod#1#22\mod#1#23\mod#1#24\mod#1#25\mod#1#26\mod#1#27%
 \hbox to.3in{\tt\hfil#1#2}}\fi}

\newdimen\pixel \pixel=.00333333in
\def\mod#1#2#3{\chardef\c='#1#2#3 \htdp\c
 \setbox0=\hbox{\penalty1\c\global\chardef\p=\lastpenalty}%
 \ifnum\p=1 \hbox to\w{}\else
 \setbox2=\hbox{\c\/}%
 \hbox to\w{\kern-\pixel \vrule width\pixel height\h depth\d
  \copy\leftbox\copy0\copy\rightbox
  \vrule width\pixel height\h depth\d \kern-\pixel \kern-\wd0
  \raise\h\vbox{\hrule height\pixel width\wd0}\kern-\wd0
  \lower\d\vbox{\hrule height0pt depth\pixel width\wd0}\kern-\wd0
  \ifdim\wd2>\wd0 \kern\wd2\raise\h\copy\icbox \fi
  \hss}\fi}

\newbox\leftbox % marking the baseline at the left
\setbox\leftbox=\hbox{\kern-\pixel\vrule width\pixel height4pt
  \vrule height0pt depth\pixel width4pt \kern-4pt}
\newbox\rightbox % marking the baseline at the right
\setbox\rightbox=\hbox{\kern-4pt\vrule height0pt depth\pixel width4pt
  \vrule width\pixel height4pt \kern-\pixel}
\newbox\icbox % the mark of an italic correction
\setbox\icbox=\hbox{\kern-4pt\vrule height\pixel width4pt depth0pt
  \vrule width\pixel depth4pt}

\row00 \row01 \row02 \row03 \row04 \row05 \row06 \row07
\row10 \row11 \row12 \row13 \row14 \row15 \row16 \row17
\row20 \row21 \row22 \row23 \row24 \row25 \row26 \row27
\row30 \row31 \row32 \row33 \row34 \row35 \row36 \row37
\bye

.
