\setlength{\unitlength}{0.012500in}%
%
\ifx \SetFigFont\undefined
  \begingroup\makeatletter
  % extract first six characters in \fmtname
  \def\x#1#2#3#4#5#6#7\relax{\def\x{#1#2#3#4#5#6}}%
  \expandafter\x\fmtname xxxxxx\relax \def\y{splain}%
  \ifx\x\y   % LaTeX or SliTeX?
  \gdef\SetFigFont#1#2#3{%
    \ifnum #1<17\tiny\else \ifnum #1<20\small\else
    \ifnum #1<24\normalsize\else \ifnum #1<29\large\else
    \ifnum #1<34\Large\else \ifnum #1<41\LARGE\else
       \huge\fi\fi\fi\fi\fi\fi
    \csname #3\endcsname}%
  \else
  \gdef\SetFigFont#1#2#3{\begingroup
    \count@#1\relax \ifnum 25<\count@\count@25\fi
    \def\x{\endgroup\@setsize\SetFigFont{#2pt}}%
    \expandafter\x
      \csname \romannumeral\the\count@ pt\expandafter\endcsname
      \csname @\romannumeral\the\count@ pt\endcsname
    \csname #3\endcsname}%
  \fi
  \endgroup
\fi
\begin{picture}(402,270)(6,561)
\thinlines
\put(264,783){\vector(-1, 0){ 60}}
\put(204,591){\vector( 1, 0){ 60}}
\put(108,759){\line( 0,-1){ 12}}
\put(108,735){\vector( 0,-1){ 12}}
\put(108,651){\line( 0,-1){ 12}}
\put(108,627){\vector( 0,-1){ 15}}
\multiput(  6,561)(8.87500,0.00000){25}{\makebox(0.1111,0.7778){\SetFigFont{5}{6}{rm}.}}
\multiput(  6,819)(8.87500,0.00000){25}{\makebox(0.1111,0.7778){\SetFigFont{5}{6}{rm}.}}
\multiput(  6,561)(0.00000,8.89655){30}{\makebox(0.1111,0.7778){\SetFigFont{5}{6}{rm}.}}
\multiput(219,561)(0.00000,8.89655){30}{\makebox(0.1111,0.7778){\SetFigFont{5}{6}{rm}.}}
\put( 18,762){\framebox(180,42){}}
\put( 18,657){\framebox(180,60){}}
\put( 18,576){\framebox(180,33){}}
\put(270,780){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}unformatted source code}}}
\put(270,588){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}typeset document}}}
\multiput(  6,687)(7.96040,0.00000){51}{\line( 1, 0){  3.980}}
\put(108,738){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{rm}complex attribute}}}
\put(  6,822){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}prettyprinter}}}
\put(108,630){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{rm}text with markup}}}
\put(108,780){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{it}prettyprinting scanner}}}
\put(108,768){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{it}prettyprinting parser}}}
\put( 42,792){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}flex/Bison generated functions:}}}
\put(108,675){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{it}preprocessing of format commands}}}
\put(108,693){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{it}attribute traversal}}}
\put(108,663){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{it}transformation into strings}}}
\put( 42,705){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}output object:}}}
\put(108,582){\makebox(0,0)[b]{\smash{\SetFigFont{10}{12.0}{it}formatting algorithm}}}
\put( 42,597){\makebox(0,0)[lb]{\smash{\SetFigFont{10}{12.0}{rm}document formatter (TeX):}}}
\put(402,675){\makebox(0,0)[rb]{\smash{\SetFigFont{10}{12.0}{rm}language independent back end}}}
\put(402,693){\makebox(0,0)[rb]{\smash{\SetFigFont{10}{12.0}{rm}language dependent front end}}}
\end{picture}
