% macros for icon display
\font\manual=manfnt
\def\activehex{\catcode`1\active
  \catcode`2\active
  \catcode`3\active
  \catcode`4\active
  \catcode`5\active
  \catcode`6\active
  \catcode`7\active
  \catcode`8\active
  \catcode`9\active
  \catcode`A\active
  \catcode`B\active
  \catcode`C\active
  \catcode`D\active
  \catcode`E\active
  \catcode`F\active
}
{\activehex
  \gdef\zero{SSSS}
  \gdef 1{SSSR}
  \gdef 2{SSRS}
  \gdef 3{SSRR}
  \gdef 4{SRSS}
  \gdef 5{SRSR}
  \gdef 6{SRRS}
  \gdef 7{SRRR}
  \gdef 8{RSSS}
  \gdef 9{RSSR}
  \gdef A{RSRS}
  \gdef B{RSRR}
  \gdef C{RRSS}
  \gdef D{RRSR}
  \gdef E{RRRS}
  \gdef F{RRRR}
}
{\catcode`0\active
  \gdef 0x#1,{{\let0=\zero \activehex #1}\ignorespaces}}
\def\beginicon{\vbox\bgroup\offinterlineskip\manual
  \let\par=\cr\obeylines\activehex\catcode`0\active\makeicon}
\def\makeicon#1\endicon{\halign{##\hfil\cr#1}\egroup}

% Beginning of article. I'm setting \hsize to approximate TUG column
% width, otherwise letting the rest of the format be inserted by
% the kindly Editor

\hsize=3.1in
\emergencystretch=5pt \tolerance=500 \hbadness=2000
%\raggedbottom

\font\logobf=logobf10
\font\ninerm=cmr9
\font\sixrm=cmr6
\hyphenchar\tentt=-1
\def\normsf{\spacefactor1000 }
\def\MF{{\manual META}\-{\manual FONT}\normsf}
\def\slMF{{\manual 89:;}\-{\manual <=>:}\normsf} % slanted version
\def\bfMF{{\logobf META}\-{\logobf FONT}\normsf} % boldface version
\def\LaTeX{L\kern -.36em\raise.6ex\hbox{\sixrm A}\kern-.15em\TeX\normsf}
\def\Cee{{\ninerm C}}
\def\UNIX{{\ninerm UNIX}\normsf}
\def\CWEB{{\tt CWEB}\normsf}

\centerline{\bf Icons for \TeX\ and \bfMF}
\smallskip
\centerline{\sl by Donald E. Knuth, Stanford University}
\bigskip
\noindent
Macintosh users have long been accustomed to seeing their files displayed
graphically in ``iconic'' form. I recently acquired a workstation with
a window system and file management software that gave me a similar
opportunity to visualize my own \UNIX\ files; so naturally I wanted my
\TeX-related material to be represented by suitable icons. The purpose of
this note is to present the icons I came up with, in hopes that other
users might enjoy working with them and/or enhancing them.

The file manager on my new machine invokes a ``classing engine,'' which
looks at each file's name and/or contents to decide what kind of file
it is. Every file type is then represented by a $32\times32$ bitmap
called its {\it icon}, together with another $32\times32$ bitmap
called its {\it icon mask}. In bit positions where the icon mask is~1,
the file manager displays one of two pixel colors, called the foreground
and background colors, depending on whether the icon has 1 or~0 in that
position. (The foreground and background colors may be different for each
file type.) In other positions of the bitmap, where the icon mask is~0,
the file manager displays its own background color.

Thus, I was able to fit my \TeX\ and \MF\ files into the file manager's scheme
as soon as I designed appropriate icons and masks, once I had told
the classing engine how to identify particular types of files.

For example, I decided that each file whose name ends with {\tt .tex}
or {\tt .mf} should be iconified with the bitmaps
$$\vcenter{\beginicon
% from file tex_source.icon
	0x0FFF,	0xFC00,
	0x0800,	0x0600,
	0x0800,	0x0500,
	0x0800,	0x0480,
	0x0800,	0x0440,
	0x0800,	0x0420,
	0x0800,	0x0410,
	0x0800,	0x07F8,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0BF8,	0x3B98,
	0x0A48,	0x1118,
	0x0840,	0x0A18,
	0x084F,	0xC418,
	0x0844,	0x4418,
	0x0844,	0x0A18,
	0x0844,	0x8A18,
	0x0847,	0x9118,
	0x08E4,	0xB398,
	0x0804,	0x0018,
	0x0804,	0x4018,
	0x080F,	0xC018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}\enspace\hbox{or}\enspace
\vcenter{\beginicon
% from file mf_source.icon
	0x0FFF,	0xFC00,
	0x0800,	0x0600,
	0x0800,	0x0500,
	0x0800,	0x0480,
	0x0800,	0x0440,
	0x0800,	0x0420,
	0x0800,	0x0410,
	0x0800,	0x07F8,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0398,
	0x0800,	0x0498,
	0x0800,	0x0418,
	0x08DD,	0x8F18,
	0x0866,	0x4418,
	0x0844,	0x4418,
	0x0844,	0x4418,
	0x0844,	0x4418,
	0x0844,	0x4418,
	0x0844,	0x4418,
	0x08EE,	0xEE18,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}\ ,$$
respectively; these are compatible with the existing scheme in which
\Cee\ program source and header files, identified by suffixes {\tt.c}
and {\tt.h}, have
$$\vcenter{\beginicon
% from file /usr/openwin/share/include/images/Code_csource_glyph.icon
	0x0FFF,0xFC00,
	0x0800,0x0600,
	0x0800,0x0500,
	0x0800,0x0480,
	0x09FF,0xE440,
	0x0800,0x0420,
	0x09FF,0xE410,
	0x0800,0x07F8,
	0x081F,0x8018,
	0x0800,0x0018,
	0x081F,0xE018,
	0x0800,0x0018,
	0x0801,0xFC18,
	0x0800,0x0018,
	0x0801,0xFF18,
	0x0800,0x0018,
	0x081F,0xF018,
	0x0800,0x0018,
	0x081F,0xE018,
	0x0800,0x0F18,
	0x0801,0xBFD8,
	0x0800,0x39D8,
	0x09FF,0x7018,
	0x0800,0x7018,
	0x081F,0x7018,
	0x0800,0x7018,
	0x081D,0xB9D8,
	0x0801,0xBFD8,
	0x0801,0x8F18,
	0x0800,0x0018,
	0x0FFF,0xFFF8,
	0x07FF,0xFFF8,
\endicon}\enspace\hbox{and}\enspace
\vcenter{\beginicon
% from file /usr/openwin/share/include/images/Code_cheader_glyph.icon
	0x0FFF,0xFC00,
	0x0800,0x0600,
	0x0800,0x0500,
	0x0800,0x0480,
	0x09FF,0xE440,
	0x0800,0x0420,
	0x09FF,0xE410,
	0x0800,0x07F8,
	0x083F,0x8018,
	0x0800,0x0018,
	0x083F,0xFF18,
	0x0800,0x0018,
	0x083C,0x0018,
	0x0800,0x0018,
	0x083F,0x0018,
	0x0800,0x0018,
	0x083C,0x7018,
	0x0800,0x7018,
	0x083F,0x7018,
	0x0800,0x7F18,
	0x083F,0x7F98,
	0x0800,0x7BD8,
	0x09FF,0x71D8,
	0x0800,0x71D8,
	0x09FF,0x75D8,
	0x0800,0x71D8,
	0x083B,0x71D8,
	0x0803,0x71D8,
	0x0803,0x71D8,
	0x0800,0x0018,
	0x0FFF,0xFFF8,
	0x07FF,0xFFF8,
\endicon}$$
as icons. Similarly, a file named {\tt*.ltx} will get the icon
$$\vcenter{\beginicon
% from file latex_source.icon
	0x0FFF,	0xFC00,
	0x0800,	0x0600,
	0x0800,	0x0500,
	0x0801,	0x0480,
	0x09C2,	0x8440,
	0x0882,	0x8420,
	0x0884,	0x4410,
	0x0887,	0xC7F8,
	0x0888,	0x2018,
	0x0898,	0x3018,
	0x0880,	0x0018,
	0x0884,	0x0018,
	0x09FC,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0BF8,	0x3B98,
	0x0A48,	0x1118,
	0x0840,	0x0A18,
	0x084F,	0xC418,
	0x0844,	0x4418,
	0x0844,	0x0A18,
	0x0844,	0x8A18,
	0x0847,	0x9118,
	0x08E4,	0xB398,
	0x0804,	0x0018,
	0x0804,	0x4018,
	0x080F,	0xC018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0800,	0x0018,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}\ .$$
In each case the corresponding icon mask is one that the file manager
already has built in as the {\tt Generic\char`\_Doc\char`\_glyph\char`_mask},
namely
$$\vcenter{\beginicon
% from file /usr/openwin/share/include/images/Generic_Doc_glyph_mask.icon
	0x0FFF,	0xFC00,
	0x0FFF,	0xFE00,
	0x0FFF,	0xFF00,
	0x0FFF,	0xFF80,
	0x0FFF,	0xFFC0,
	0x0FFF,	0xFFE0,
	0x0FFF,	0xFFF0,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}\ .$$

The transcript files output by \TeX\ and \MF\ provided me with a more
interesting design problem.
They're both named {\tt*.log} on my system, so they can't be distinguished
by file name. I decided that any file whose first 12 bytes are the
ASCII characters `{\tt This\char`\ is\char`\ TeX,}' should be
considered a \TeX\ transcript, and any file that begins with
`{\tt This\char`\ is\char`\ METAFONT,}' should be considered a
\MF\ transcript. The corresponding icons were fun to make; I based them
on the illustrations Duane Bibby had drawn for the user manuals:
$$\vcenter{\beginicon
% from file small_tex.icon
	0x0000,	0x0000,
	0x0218,	0x6000,
	0x05BB,	0x41E0,
	0x044B,	0x7210,
	0x05CC,	0xC4D0,
	0x0321,	0xA990,
	0x0180,	0x3310,
	0x0099,	0x80E0,
	0x00A2,	0x4120,
	0x0120,	0x4090,
	0x0159,	0x8050,
	0x0159,	0x8030,
	0x0124,	0x8010,
	0x0133,	0x0090,
	0x0100,	0x0048,
	0x0100,	0x0028,
	0x0200,	0x0008,
	0x0200,	0x0084,
	0x0408,	0x1044,
	0x09B0,	0x1024,
	0x18E0,	0x6094,
	0x0440,	0x810C,
	0x1803,	0x0084,
	0x07FC,	0x0848,
	0x0400,	0x0428,
	0x0200,	0x6428,
	0x0101,	0x8250,
	0x00FE,	0x8180,
	0x0088,	0x4100,
	0x0104,	0x2600,
	0x00FA,	0xF800,
	0x0007,	0x0000,
\endicon}\enspace\hbox{and}\enspace
\vcenter{\beginicon
% from file small_mf.icon
	0x0000,	0x0000,
	0x0000,	0x0000,
	0x0000,	0x0000,
	0x0000,	0x0000,
	0x0383,	0x7C00,
	0x0244,	0x923E,
	0x0269,	0x0242,
	0x0250,	0x058A,
	0x024F,	0x1812,
	0x0100,	0xE064,
	0x0080,	0x0008,
	0x0110,	0x201C,
	0x0100,	0x8024,
	0x015C,	0xEC04,
	0x00F4,	0xF80C,
	0x0100,	0x0030,
	0x0100,	0x0208,
	0x0F8E,	0x3C14,
	0x8104,	0x0220,
	0x7B00,	0x01F4,
	0x0500,	0x0008,
	0x091D,	0x8150,
	0x0086,	0x0120,
	0x0040,	0x02C0,
	0x0030,	0x1C00,
	0x002F,	0xE200,
	0x0020,	0x1200,
	0x002D,	0xE200,
	0x0012,	0x1400,
	0x0011,	0x5400,
	0x000C,	0x4800,
	0x0003,	0xF000,
\endicon}\ .$$
The icon masks for transcript files are then
$$\vcenter{\beginicon
% from file small_tex_mask.icon
	0x0000,	0x0000,
	0x0218,	0x6000,
	0x07BB,	0x41E0,
	0x07FF,	0xF3F0,
	0x07FF,	0xFFF0,
	0x03FF,	0xFFF0,
	0x01FF,	0xFFF0,
	0x00FF,	0xFFF0,
	0x00FF,	0xFFF0,
	0x01FF,	0xFFF0,
	0x01FF,	0xFFF0,
	0x01FF,	0xFFF0,
	0x01FF,	0xFFF0,
	0x01FF,	0xFFF0,
	0x01FF,	0xFFF8,
	0x01FF,	0xFFF8,
	0x03FF,	0xFFF8,
	0x03FF,	0xFFFC,
	0x07FF,	0xFFFC,
	0x0FFF,	0xFFFC,
	0x1FFF,	0xFFFC,
	0x07FF,	0xFFFC,
	0x1FFF,	0xFFFC,
	0x07FF,	0xFFF8,
	0x07FF,	0xFFF8,
	0x03FF,	0xFFF8,
	0x01FF,	0xFFF0,
	0x00FF,	0xFF80,
	0x00FF,	0xFF00,
	0x01FF,	0xFE00,
	0x00FF,	0xF800,
	0x0007,	0x0000,
\endicon}\enspace\hbox{and}\enspace
\vcenter{\beginicon
% from file small_mf_mask.icon
	0x0000,	0x0000,
	0x0000,	0x0000,
	0x0000,	0x0000,
	0x0000,	0x0000,
	0x0383,	0x7C00,
	0x03C7,	0xFF3E,
	0x03EF,	0xFF7E,
	0x03FF,	0xFFFE,
	0x03FF,	0xFFFE,
	0x01FF,	0xFFFC,
	0x00FF,	0xFFF8,
	0x01FF,	0xFFFC,
	0x01FF,	0xFFFC,
	0x01FF,	0xFFFC,
	0x00FF,	0xFFFC,
	0x01FF,	0xFFF8,
	0x01FF,	0xFFF8,
	0x0FFF,	0xFFFC,
	0x81FF,	0xFFF8,
	0x7BFF,	0xFFFC,
	0x05FF,	0xFFF8,
	0x09FF,	0xFFF0,
	0x00FF,	0xFFE0,
	0x007F,	0xFFC0,
	0x003F,	0xFF00,
	0x003F,	0xFE00,
	0x003F,	0xFE00,
	0x003F,	0xFE00,
	0x001F,	0xFC00,
	0x001F,	0xFC00,
	0x000F,	0xF800,
	0x0003,	0xF000,
\endicon}\ ,$$
respectively.

\TeX's main output is, of course, a device-independent ({\tt.dvi}) file,
and \MF\ produces generic font ({\tt gf}) files.
I decided to represent such files by
$$\vcenter{\beginicon
% from file dvi.icon
	0x0FFF,	0xFC00,
	0x0FFF,	0xFE00,
	0x0FFF,	0xFD00,
	0x0DE7,	0x9C80,
	0x0A44,	0xB440,
	0x0BB4,	0x8C20,
	0x0A33,	0x3C10,
	0x0CDE,	0x57F8,
	0x0E7F,	0xCCE8,
	0x0F66,	0x7F18,
	0x0F5D,	0xBED8,
	0x0EDF,	0xBF68,
	0x0EA6,	0x7FA8,
	0x0EA6,	0x7FC8,
	0x0EDB,	0x7FE8,
	0x0ECC,	0xFF68,
	0x0EFF,	0xFFB8,
	0x0EFF,	0xFFD8,
	0x0DFF,	0xFFF8,
	0x0DFF,	0xFF78,
	0x0BF7,	0xEFB8,
	0x064F,	0xEFD8,
	0x071F,	0x9F78,
	0x0BBF,	0x7EF8,
	0x07FC,	0xFD78,
	0x0803,	0xF7F8,
	0x0BFF,	0xFBF8,
	0x0DFF,	0x9FF8,
	0x0EFE,	0x7FF8,
	0x0F01,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}\enspace\hbox{and}\enspace
\vcenter{\beginicon
% from file gf.icon
	0x0FFF,	0xFC00,
	0x0FFF,	0xFE00,
	0x0FFF,	0xFD00,
	0x0FFF,	0xFC80,
	0x0FFF,	0xFC40,
	0x0FFF,	0xFC20,
	0x0FFF,	0xFC10,
	0x0FFF,	0xFFF8,
	0x0C7C,	0x83F8,
	0x0DBB,	0x6DC8,
	0x0D96,	0xFDB8,
	0x0DAF,	0xFA78,
	0x0DB0,	0xE7E8,
	0x0EFF,	0x1F98,
	0x0F7F,	0xFFF8,
	0x0EEF,	0xDFE8,
	0x0EFF,	0x7FD8,
	0x0EA3,	0x13F8,
	0x0F0A,	0x07F8,
	0x0EFF,	0xFFC8,
	0x0AFF,	0xFDF8,
	0x0C71,	0xC3E8,
	0x0EFB,	0xFDD8,
	0x0CFF,	0xFE08,
	0x0AFF,	0xFFF8,
	0x0EE2,	0x7EA8,
	0x0F79,	0xFED8,
	0x0FBF,	0xFD38,
	0x0FCF,	0xE3F8,
	0x0FD0,	0x1DF8,
	0x0FDF,	0xEDF8,
	0x07FF,	0xFFF8,
\endicon}\ ,$$
because they are analogous to photographic ``negatives'' that need to be
``developed'' by other software. When a gf file has been packed into
a pk~file, its icon will change to
$$\vcenter{\beginicon
% from file pk.icon
	0x0FFF,	0xFC00,
	0x0F7F,	0x7E00,
	0x0F7F,	0x7D00,
	0x0F7F,	0x7C80,
	0x0D5D,	0x5C40,
	0x0E3E,	0x3C20,
	0x0F7F,	0x7C10,
	0x0FFF,	0xFFF8,
	0x0C7C,	0x83F8,
	0x0DBB,	0x6DC8,
	0x0D96,	0xFDB8,
	0x0DAF,	0xFA78,
	0x0DB0,	0xE7E8,
	0x0EFF,	0x1F98,
	0x0F7F,	0xFFF8,
	0x0EEF,	0xDFE8,
	0x0EFF,	0x7FD8,
	0x0EA3,	0x13F8,
	0x0F0A,	0x07F8,
	0x0EFF,	0xFFC8,
	0x0AFF,	0xFDF8,
	0x0C71,	0xC3E8,
	0x0EFB,	0xFDD8,
	0x0CFF,	0xFE08,
	0x0AFF,	0xFFF8,
	0x0EE2,	0x7EA8,
	0x0F79,	0xFED8,
	0x0FBF,	0xFD38,
	0x0FCF,	0xE3F8,
	0x0FD0,	0x1DF8,
	0x0FDF,	0xEDF8,
	0x07FF,	0xFFF8,
\endicon}\ .$$
Virtual font files are represented by an analogous
$$\vcenter{\beginicon
% from file vf.icon
	0x0FFF,	0xFC00,
	0x0FFF,	0xFE00,
	0x0FFF,	0xFD00,
	0x0FFF,	0xFC80,
	0x0FFF,	0xFC40,
	0x0FFF,	0xFC20,
	0x0FFF,	0xFC10,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xF0F8,
	0x0FFF,	0xE6F8,
	0x0FFF,	0xE7F8,
	0x0F0C,	0x41F8,
	0x0F9E,	0xE7F8,
	0x0FCE,	0xE7F8,
	0x0FCD,	0xE7F8,
	0x0FE5,	0xE7F8,
	0x0FE3,	0xE7F8,
	0x0FF3,	0xE7F8,
	0x0FF7,	0xC3F8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}\ .$$
These file types are identifiable by the respective names {\tt*.dvi},
{\tt*gf}, {\tt*pk}, {\tt*.vf}, and they can also be identified by content:
The first byte always has the numerical value 247 (octal {\it367\/}), then
the next byte is respectively 2, 131, 89, 202 (octal {\it002}, {\it203},
{\it131}, {\it312}\/) for dvi, gf, pk, or~vf.

The other principal output of \MF\ is a font metric file, which can be
identified by the suffix {\tt.tfm} in its name. I assigned the following
icon and mask to such files:
$$\vcenter{\beginicon
% from file tfm.icon
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0200,	0x8020,
	0x0200,	0x8020,
	0x0200,	0x8020,
	0x1240,	0x8020,
	0x0A80,	0x8020,
	0x0700,	0x8020,
	0xFFFF,	0xCEFF,
	0x0000,	0x9220,
	0x0000,	0x9320,
	0x0000,	0x8320,
	0x0000,	0x9F20,
	0x0000,	0xB320,
	0x0000,	0xB320,
	0x0000,	0xB320,
	0xFFFF,	0x9DBF,
	0x0700,	0x8020,
	0x0A80,	0x8020,
	0x1244,	0x8024,
	0x0202,	0x8028,
	0x0201,	0x8030,
	0x023F,	0x803F,
	0x0001,	0x8030,
	0x0002,	0x8028,
	0x0004,	0x8024,
	0x0000,	0x8020,
\endicon}\enspace\hbox{and}\enspace
\vcenter{\beginicon
% from file tfm_mask.icon
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0000,	0x8020,
	0x0200,	0x8020,
	0x0200,	0x8020,
	0x0200,	0x8020,
	0x1240,	0x8020,
	0x0A80,	0x8020,
	0x0700,	0x8020,
	0xFFFF,	0xFFFF,
	0x0000,	0xFFE0,
	0x0000,	0xFFE0,
	0x0000,	0xFFE0,
	0x0000,	0xFFE0,
	0x0000,	0xFFE0,
	0x0000,	0xFFE0,
	0x0000,	0xFFE0,
	0xFFFF,	0xFFFF,
	0x0700,	0x8020,
	0x0A80,	0x8020,
	0x1244,	0x8024,
	0x0202,	0x8028,
	0x0201,	0x8030,
	0x023F,	0x803F,
	0x0001,	0x8030,
	0x0002,	0x8028,
	0x0004,	0x8024,
	0x0000,	0x8020,
\endicon}\ .$$

I do all my programming nowadays in the \CWEB\ language [1, 2, 3, 4],
hence I also accumulate lots of files of two additional types.
\CWEB\ source files are identified by the suffix {\tt.w}, and
\CWEB\ change files have the suffix {\tt.ch}; the corresponding icons
$$\vcenter{\beginicon
% from file cweb_source.icon
	0x0FFF,	0xFC00,
	0x0800,	0x0600,
	0x0800,	0x0500,
	0x0800,	0x0480,
	0x09FF,	0xE440,
	0x0800,	0x0420,
	0x09FF,	0xE410,
	0x0800,	0x07F8,
	0x081F,	0x8018,
	0x0800,	0x0018,
	0x081F,	0xE018,
	0x0800,	0x0018,
	0x0801,	0xFC18,
	0x0800,	0x0018,
	0x0801,	0xFF18,
	0x0800,	0x0018,
	0x081F,	0xF018,
	0x0800,	0x0018,
	0x08FC,	0x0018,
	0x0801,	0x80D8,
	0x0801,	0x80D8,
	0x0801,	0x9CD8,
	0x09F9,	0xDD98,
	0x0800,	0xDD98,
	0x08F8,	0xDD98,
	0x0800,	0xDD98,
	0x09CC,	0x7718,
	0x080C,	0x7718,
	0x080C,	0x7718,
	0x0800,	0x0018,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}\enspace\hbox{and}\enspace
\vcenter{\beginicon
% from file cweb_change.icon
	0x0FFF,	0xFC00,
	0x0911,	0x1600,
	0x0A22,	0x2500,
	0x0C44,	0x4480,
	0x09FF,	0xEC40,
	0x0911,	0x1420,
	0x0BFF,	0xE410,
	0x0C44,	0x47F8,
	0x089F,	0x8898,
	0x0911,	0x1118,
	0x0A3F,	0xE218,
	0x0C44,	0x4418,
	0x0889,	0xFC18,
	0x0911,	0x1018,
	0x0A23,	0xFF18,
	0x0C44,	0x4018,
	0x089F,	0xF018,
	0x0911,	0x0018,
	0x0AFE,	0x0018,
	0x0C45,	0x80D8,
	0x0889,	0x80D8,
	0x0911,	0x9CD8,
	0x0BF9,	0xDD98,
	0x0C40,	0xDD98,
	0x09F0,	0xDD98,
	0x0900,	0xDD98,
	0x0BCC,	0x7718,
	0x0C0C,	0x7718,
	0x080C,	0x7718,
	0x0800,	0x0018,
	0x0FFF,	0xFFF8,
	0x07FF,	0xFFF8,
\endicon}$$
are intended to blend with the system's existing conventions for {\tt.c}
and {\tt.h} files, mentioned above.

\def\rgb#1,#2,#3,{$\langle#1,#2,#3\rangle$}
What foreground colors and background colors should be assigned to
these icons? I'm not sure. At the moment I have a grayscale monitor,
not color, so I don't have enough experience to recommend particular
choices. Setting all the foreground colors equal to basic black
(RGB values \rgb0,0,0,) has worked fine; but I don't
want all the background colors to be pure white (RGB
\rgb255,255,255,). I'm tentatively using pure white for the background color
of the ``negative'' icons (dvi, gf, pk, and vf), and off-white
(RGB \rgb230,230,230,) for the background of transcript icons.
The \TeX\ and \MF\ source file icons currently have background
RGB values \rgb200,200,255,, corresponding to light blue; font metric icons
and \LaTeX\ source icons have background RGB values \rgb255,200,200,,
light red. (I~should perhaps have given \MF\ source files an orange hue,
more in keeping with the cover of {\sl The \slMF\kern.1em book}.) On my
grayscale monitor I had to lighten the background color assigned by the
system software to \Cee\ object files and to coredump files ({\tt*.o}
and {\tt core*}); otherwise it was impossible for me to see the detail
of the system icons
$$\vcenter{\beginicon
% from file /usr/openwin/share/include/images/Code_object_glyph.icon
	0x0FFF,0xFC00,
	0x0800,0x0600,
	0x0800,0x0500,
	0x0800,0x0480,
	0x09FF,0xF440,
	0x0955,0x5420,
	0x09FF,0xF410,
	0x0955,0x57F8,
	0x09FF,0xF018,
	0x0955,0x5018,
	0x09FF,0xFFD8,
	0x0955,0x5558,
	0x09FF,0xFFD8,
	0x0955,0x5558,
	0x09FF,0xFFD8,
	0x0955,0x5558,
	0x09FF,0xFFD8,
	0x0955,0x5558,
	0x09FF,0xC0D8,
	0x0955,0x1E58,
	0x09FF,0x7F98,
	0x0954,0x7398,
	0x09FE,0xE1D8,
	0x0954,0xE1D8,
	0x09FE,0xE1D8,
	0x0954,0xE1D8,
	0x09FF,0x7398,
	0x0803,0x7F98,
	0x0803,0x1E18,
	0x0800,0x0018,
	0x0FFF,0xFFF8,
	0x07FF,0xFFF8,
\endicon}\enspace\hbox{and}\enspace
\vcenter{\beginicon
% from file /usr/openwin/share/include/images/Corefile_glyph.icon
	0x0FFF,0xFC00,
	0x0800,0x0600,
	0x0800,0x0500,
	0x0804,0x0480,
	0x0824,0x8440,
	0x0815,0x0420,
	0x0800,0x0410,
	0x0871,0xC7F8,
	0x0800,0x0018,
	0x0814,0x8018,
	0x0825,0xE018,
	0x0804,0xE018,
	0x0803,0xE018,
	0x0809,0x7818,
	0x0817,0xFC18,
	0x082F,0xFE18,
	0x082F,0xFE18,
	0x085F,0xFF18,
	0x087F,0xFF18,
	0x085F,0xFF18,
	0x087F,0xFF18,
	0x087F,0xFF18,
	0x083F,0xFE18,
	0x083F,0xFE18,
	0x081F,0xFC18,
	0x080F,0xF818,
	0x0803,0xE018,
	0x0800,0x0018,
	0x0800,0x0018,
	0x0800,0x0018,
	0x0FFF,0xFFF8,
	0x07FF,0xFFF8,
\endicon}\ .$$
I expect other users will need to adjust foreground and background
colors to go with the decor of their own desktops.

In 1989 I had my first opportunity to work with a personal graphic
workstation, and I immediately decided to make $64\times64$-bit icons
for \TeX\ and \MF---for the programs, not for the files. But I've
always found it more convenient to run \TeX\ and \MF\ from \UNIX\ shells,
so I never have used those early icons. Here they are, still waiting
for their proper raison d'\^etre:
$$\vcenter{\beginicon
% from file tex.icon
	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x0000,	0x0000,	0x0000,
	0x0000,	0x1880,	0x3000,	0x0000,
	0x0003,	0x9DC0,	0x3900,	0xF000,
	0x0004,	0x0CC0,	0x1981,	0x0800,
	0x0004,	0x225E,	0x1982,	0x0800,
	0x0005,	0xB127,	0x099C,	0x2400,
	0x0005,	0xFDC0,	0xE118,	0x6400,
	0x0004,	0xB3B1,	0xF211,	0xE400,
	0x0003,	0x2163,	0xC673,	0xC400,
	0x0002,	0x3D41,	0x8EE3,	0x8800,
	0x0001,	0x4C00,	0x0E47,	0x1000,
	0x0001,	0x4000,	0x0406,	0x2000,
	0x0000,	0x8383,	0xE00C,	0x7C00,
	0x0000,	0x4040,	0x0000,	0xE200,
	0x0000,	0x4003,	0xC003,	0x0C00,
	0x0001,	0xC384,	0x2001,	0x9000,
	0x0003,	0x8448,	0x2000,	0x0C00,
	0x0007,	0x8850,	0x2001,	0xC300,
	0x0006,	0x1121,	0x8000,	0x0C80,
	0x0007,	0x13A3,	0xC000,	0x0280,
	0x0001,	0x23A7,	0x8000,	0xC480,
	0x0001,	0x2122,	0x8000,	0x3380,
	0x0001,	0x2220,	0x8000,	0x0880,
	0x0001,	0x1C21,	0x0000,	0x0480,
	0x0000,	0x881E,	0x0001,	0x8080,
	0x0001,	0x1800,	0x0000,	0x6080,
	0x0002,	0x1000,	0x0000,	0x1880,
	0x0002,	0x2000,	0x0000,	0x0640,
	0x0004,	0x4000,	0x0000,	0x8540,
	0x0004,	0x0000,	0x0000,	0x4640,
	0x0004,	0x0000,	0x0001,	0x01C0,
	0x0008,	0x0000,	0x0000,	0x8040,
	0x0008,	0x0020,	0x0000,	0x4820,
	0x0018,	0x0040,	0x0001,	0x0410,
	0x0010,	0x0040,	0x0002,	0x8210,
	0x0020,	0x00C0,	0x0081,	0x4010,
	0x0043,	0xFF00,	0x0080,	0x2010,
	0x0043,	0xFE01,	0x0082,	0x9010,
	0x03C1,	0xFC0E,	0x0307,	0x5110,
	0x0038,	0xF800,	0x3C02,	0xB490,
	0x0000,	0x2020,	0xC002,	0x0850,
	0x0040,	0x2001,	0x0012,	0x0460,
	0x00C0,	0x200D,	0x000A,	0x5420,
	0x0120,	0x0002,	0x0009,	0x52C0,
	0x0010,	0x301C,	0x00A5,	0x1240,
	0x000E,	0xCFE0,	0x0055,	0x0140,
	0x000B,	0x0180,	0x0652,	0x88C0,
	0x0008,	0x0000,	0x3922,	0x4880,
	0x0004,	0x0000,	0x4922,	0x5480,
	0x0002,	0x0000,	0x8902,	0x2280,
	0x0001,	0x0001,	0x0482,	0x2280,
	0x0000,	0x8E02,	0x8202,	0x4100,
	0x0000,	0xF10D,	0x41A0,	0x4000,
	0x0000,	0x9BF2,	0xA0B0,	0x8000,
	0x0000,	0x8A55,	0x50B1,	0x0000,
	0x0000,	0x8955,	0x48D2,	0x0000,
	0x0001,	0x2044,	0x4854,	0x0000,
	0x0001,	0xD024,	0x0458,	0x0000,
	0x0000,	0x8902,	0x0480,	0x0000,
	0x0000,	0x05C0,	0x7B00,	0x0000,
	0x0000,	0x032F,	0x8000,	0x0000,
	0x0000,	0x0018,	0x0000,	0x0000,
\endicon}$$
\vskip-\baselineskip
$$\vcenter{\beginicon
% from file mf.icon
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
        0x0001, 0x0000, 0x0300, 0x0000,
        0x0001, 0xE005, 0x81F0, 0x0008,
        0x0001, 0x502A, 0x000C, 0x0188,
        0x0001, 0x4854, 0x1003, 0x0608,
        0x0001, 0x54A8, 0x200C, 0x1810,
        0x0001, 0x5348, 0x400D, 0x21D0,
        0x0001, 0x9310, 0x003F, 0x42D0,
        0x0001, 0x5200, 0x01C4, 0x8650,
        0x0001, 0x4368, 0x0301, 0x0A10,
        0x0001, 0x6296, 0x2DC2, 0x1210,
        0x0000, 0xE001, 0xF820, 0x2410,
        0x0000, 0x9000, 0x0000, 0x2820,
        0x0002, 0x4000, 0x0000, 0x1040,
        0x0005, 0x8000, 0x0000, 0x0080,
        0x0004, 0x8200, 0x0400, 0x01D8,
        0x0004, 0x0040, 0x4000, 0x03F0,
        0x0004, 0x0800, 0x8000, 0x1E18,
        0x0002, 0x1011, 0x0100, 0x1470,
        0x0000, 0x3211, 0x2090, 0x0090,
        0x0004, 0x7FD0, 0xFC50, 0x0120,
        0x0004, 0xF360, 0xBFE8, 0x1C38,
        0x0002, 0x01A0, 0x8C80, 0x0000,
        0x0000, 0x0000, 0x0000, 0x1830,
        0x0001, 0x0000, 0x0000, 0x07C0,
        0x0001, 0x0000, 0x0000, 0x1FE0,
        0x0002, 0xC000, 0x0F04, 0x0800,
        0x00F9, 0x0000, 0x10B8, 0x2770,
        0x0007, 0xE0FE, 0x07F0, 0x1820,
        0x607C, 0x0078, 0x0008, 0x26C0,
        0x8183, 0xC010, 0x0006, 0x0900,
        0x7E3E, 0x0000, 0x0001, 0xF870,
        0x0042, 0x0000, 0x0000, 0x0020,
        0x0042, 0x0000, 0x0000, 0xC000,
        0x0082, 0x0224, 0x0001, 0x3940,
        0x0081, 0x01FF, 0xC001, 0x0780,
        0x0001, 0x0073, 0x0002, 0x2300,
        0x0000, 0x801C, 0x0002, 0x5C00,
        0x0000, 0x4000, 0x0003, 0xBC00,
        0x0000, 0x2000, 0x0004, 0x4000,
        0x0000, 0x1000, 0x0009, 0x6000,
        0x0000, 0x0C00, 0x00F0, 0x8000,
        0x0000, 0x0700, 0x03B0, 0x0000,
        0x0000, 0x0480, 0x1C28, 0x0000,
        0x0000, 0x05F9, 0xE0C8, 0x0000,
        0x0000, 0x0206, 0x0110, 0x0000,
        0x0000, 0x0530, 0x0268, 0x0000,
        0x0000, 0x050F, 0xFC88, 0x0000,
        0x0000, 0x0140, 0x0168, 0x0000,
        0x0000, 0x02A3, 0xFEA0, 0x0000,
        0x0000, 0x016C, 0x14A0, 0x0000,
        0x0000, 0x012A, 0x2700, 0x0000,
        0x0000, 0x009A, 0x2030, 0x0000,
        0x0000, 0x0041, 0xF0C0, 0x0000,
        0x0000, 0x0030, 0x0300, 0x0000,
        0x0000, 0x000D, 0x3C00, 0x0000,
        0x0000, 0x0000, 0x0000, 0x0000,
\endicon}$$

All of the icons shown above, except for those already present in
directory {\tt/usr/openwin/share/\allowbreak
include/images} of Sun Microsystem's
OpenWindows distribution, can be obtained via anonymous ftp from directory
{\tt \char`\~ftp/pub/tex/icons} at {\tt labrea.stanford.edu} on the Internet.
That directory also contains a file called {\tt cetex.ascii}, which can
be used to install the icons into OpenWindows by saying
`{\tt ce\char`\_db\char`\_merge} {\tt system} {\tt -from\char`\_ascii}
{\tt cetex.ascii}'.

\bigbreak
\centerline{\bf References}
\nobreak\medskip
\item{[1]} \CWEB\ public distribution, available by anonymous ftp from
directory {\tt\char`\~ftp/pub/cweb} at {\tt labrea.stanford.edu}.
\smallskip
\item{[2]} Silvio Levy and Donald E. Knuth, The \CWEB\ System of
Structured Documentation, Stanford Computer Science report
STAN-CS-1336 (Stanford, California, October 1990),  200~pp.
An up-to-date version is available online in [1].
\smallskip
\item{[3]} Donald E. Knuth, {\sl Literate Programming\/}\break (Stanford,
 California: Center for the Study of Language and Information, 1992),
 $\rm xvi+368$~pp. (CSLI Lecture Notes, no.~27.)
 Distributed by the University of Chicago Press.
\smallskip
\item{[4]} Donald E. Knuth, {\sl The Stanford GraphBase: A~Platform
for Combinatorial Computing\/}\break (New York: ACM Press, 1993).

\bye
