
%% \begin{identation}{<leftmargin>}{<rightmargin>} ... \end{indentation}

\newenvironment{indentation}[2]%
{%\par%
\setlength{\leftmargin}{#1}%
\setlength{\rightmargin}{#2}%
\advance\linewidth -\leftmargin%
\advance\linewidth -\rightmargin%
\advance\@totalleftmargin\leftmargin%
\@setpar{{\@@par}}%
\parshape 1 \@totalleftmargin \linewidth%
\ignorespaces}%
{\par}

\newdimen\df@bx

\def\df@sig #1 #2 #3{\vbox{%
\setbox0=\hbox{{{\sl \ignorespaces #3}}}%
\setbox1=\hbox{{{\tt \ignorespaces #1}~~}}%
%
\df@bx=\textwidth%
\advance\df@bx by -\wd0%
\advance\df@bx by -\wd1%
\noindent\begin{tabular}{@{}p{\wd1}@{}p{\df@bx}@{}p{\wd0}@{}}%
{{\tt \ignorespaces #1}~~}&%
\begin{minipage}[t]{\df@bx}{\sl\begin{tabbing}#2\end{tabbing}}\end{minipage}&%
{{\sl \ignorespaces #3}}%
\end{tabular}\nopagebreak%
}}

%% \begin{defun}{foo}{x y}{Function} ... \end{defun}

\newenvironment{defun}[3]{%
\pagebreak[1]\vbox{\vskip 1em plus 4em{}
\noindent\rule{\linewidth}{0.5pt}\vskip 3pt\nopagebreak[4]{}
\df@sig {#1} {#2} {#3}\nopagebreak[4]}%
\begin{indentation}{2em}{0em}\nopagebreak\noindent\ignorespaces\vskip-\parskip\vskip-\parskip\noindent\nopagebreak[4]\par\nopagebreak[4]%
}{\end{indentation}}

\def\key{{\tt\&key} }
\def\allow{{\tt\&allow-other-keys} }
\def\rest{{\tt\&rest} }
\def\optional{{\tt\&optional} }
\def\body{{\tt\&body} }
\def\arg#1{{\it #1}}
\def\cl#1{{\tt #1}}

\def\yields{\setbox0=\hbox{$\rightarrow$~~}\hskip-\wd0\box0}
