% SHADOW.TEX (RMCG19950401)

\ifx\MT\undefined \input metatex \fi
\ifx\framebox\undefined \input frame \fi

\let\TMline=\MTline

\catcode`\@=11

\newdimen\shadowdim \shadowdim=0.3pt % for 600dpi; try 0.85 for 300dpi

\TMline{\% Defined by SHADOW.TEX}
\TMline{}
\TMline{ if unknown prologues: font_size 12pt\#; fi}
\TMline{}
\TMline{ def shadowall(expr dist) =}
\TMline{  begingroup}
\TMline{  save u,v,distx,disty,zbase,zcur;}
\TMline{  pair zbase,zcur;}
\TMline{  u := floor(w/dist); if odd u: u := u + 1; fi distx = w/u;}
\TMline{  v := floor(h/dist); if odd v: v := v + 1; fi disty = h/v;}
\TMline{  zbase := (1/2distx,1/2disty);}
\TMline{  for i := 0 upto (u-1):}
\TMline{   zcur := zbase if odd i: + (0,disty) fi;}
\TMline{   for j := 0 upto (v-1): if (not odd(i+j)):}
\TMline{    addto currentpicture contour unitsquare shifted zcur;}
\TMline{    zcur := zcur + (0,2disty);}
\TMline{   fi endfor}
\TMline{   zbase := zbase + (distx,0);}
\TMline{  endfor}
\TMline{  endgroup;}
\TMline{ enddef;}
\TMline{}

\def\shadowbox{\afterassignment\sh@dowbox\count@=}
\def\sh@dowbox{\ifvoid\count@ \let\next=\relax \else
 \shadowchar
 \ifMTmf \let\next=\MTsh@dow \else
 \ifx\pdfliteral\undefined  \let\next=\PSsh@dow  \else
 \let\next=\ACsh@dow \fi \fi \fi
 \next}

\def\shadowchar{\bgroup
 \dimen0=\wd\count@ \dimen2=\ht\count@ \advance\dimen2\dp\count@
 \dimen4=16pt \count2=\dimen4
 \count0=\dimen0 \divide\count0 by \count2 \advance\count0 by 1
 \dimen4=\dimen0 \divide\dimen4 by \count0
 \count0=\dimen2 \divide\count0 by \count2 \advance\count0 by 1
 \dimen6=\dimen2 \divide\dimen6 by \count0
 \setbox0=\box\MTbox
 \MTbeginchar(\the\dimen4,\the\dimen6,0pt);%
  \MTline{ shadowall(\the\shadowdim);}%
 \MTendchar;%
 \global\setbox\@uxbox=\vtop to \dimen2{\cleaders
  \hbox to \dimen0{\cleaders\box\MTbox\hfil}\vfil}%
 \global\setbox\MTbox=\box0 \egroup}

\def\MTsh@dow{\wd\@uxbox=0pt \ht\@uxbox=0pt \dp\@uxbox=0pt
 \ifhbox\count@
  \setbox\count@=\hbox{\raise\ht\count@\box\@uxbox\box\count@}\else
  \setbox\count@=\vbox{\box\@uxbox\nointerlineskip\box\count@}\fi}

\def\PSsh@dow{\ifhbox\count@
 \setbox\count@=\hbox{\special{ps:gsave 0.8 setgray}%
  \rlap{\vrule width \wd\count@ height \ht\count@ depth \dp\count@}%
  \special{ps:0 setgray grestore}%
  \unhbox\count@}\else
 \setbox\count@=\vbox{\special{ps:gsave 0.8 setgray}
  \vtop to 0pt{\vbox to 0pt{
    \hrule width \wd\count@ height \ht\count@ depth \dp\count@
   \vss}\vss}
  \special{ps:0 setgray grestore}
  \nointerlineskip
  \unvbox\count@}\fi}

\def\ACsh@dow{\ifhbox\count@
 \setbox\count@=\hbox{\pdfliteral{q 0.8 g}%
  \rlap{\vrule width \wd\count@ height \ht\count@ depth \dp\count@}%
  \pdfliteral{0 g Q}\unhbox\count@}\else
 \setbox\count@=\vbox{\pdfliteral{q 0.8 g}
  \vtop to 0pt{\vbox to 0pt{
    \hrule width \wd\count@ height \ht\count@ depth \dp\count@
   \vss}\vss}\pdfliteral{0 g Q}\nointerlineskip\unvbox\count@}\fi}

\catcode`\@=12
