%%% shade/shade.tex (or shade.sty)
%%% shade macros for use with shade.mf
%%% see README for licensing and contact information.

\catcode`\:11

\font\grey:=shade at 10truept

\newbox\shade:box
\newdimen\fill:boundary
    \setbox0=\hbox{\grey:\char0\relax}\fill:boundary=\ht0
\newcount\fill:level \newdimen\fill:size \newdimen\fill:goal

\long\def\shade#1{\leavevmode
             \setbox\shade:box=\hbox{#1}%
             \def\shade:column{}\def\shade:row{}%
             \fill:level=5 \fill:goal=\wd\shade:box
                \advance\fill:goal by 2\fill:boundary
             \let\shade:v\relax \Fill: \shade:row\shade:v
             \fill:level=5
             \fill:goal=\ht\shade:box \advance\fill:goal by \dp\shade:box
                \advance\fill:goal by 2\fill:boundary
             \let\shade:h\relax \Fill: \shade:column\shade:h
             \fill:goal=\ht\shade:box \advance\fill:goal by \dp\shade:box
             \setbox0=\vbox to\fill:goal{\offinterlineskip\grey:
                 \def\shade:h##1{%
                     \def\shade:v####1{\char####1##1\relax}%
                     \hbox to \wd\shade:box{\hss\shade:row\hss}}
                 \vss \shade:column \vss
                 }\ht0=\ht\shade:box \dp0=\dp\shade:box
             \rlap{\box0}\box\shade:box
            }
\def\Fill: {\setbox0=\hbox{\grey:\char\fill:level\relax}\fill:size=\ht0 
            \fill:}
\def\fill: #1#2{%
    \ifdim \fill:size>\fill:goal
           \advance\fill:level by-1
            \ifnum \fill:level>-1 \let \fill:next = \Fill:
                            \else \let \fill:next = \fill:stop \fi
     \else \edef#1{#1#2\the\fill:level}\advance\fill:goal by -\fill:size
           \let \fill:next = \fill:
      \fi \fill:next #1#2}
\def\fill:stop#1#2{}

\endinput
