%
% definitions related to function declarations/displays
%
\ifx\undefined\@psfonts
\def\argfont{\tt}
\else
\font\argfont = pcrb
\hyphenchar\argfont = -1
\fi
\let\funcfont=\bf
\newcount\argc@ount
%\setlength{\marginparsep}{0.05in}
%\setlength{\marginparwidth}{1.45in}
%
%  This function fixes up the function name to be displayed in the
%  margin so that the krb5_, if any, is stripped.
%
%  Note: this is a hack; what's really happening is that name beginning with
%	krb5 will have its first five characters stripped from it.
%	This means that 'Krb5abc' will get rewritten to be 'bc'.
%	Unfortunately, we can't do better because of the underscore
%	hacks that are going on elsewhere.
%
%  WARNING: This is ugly; don't look at it too soon after lunch!
%     [tytso:19900920.2231EDT]
\newif\if@krbfunc
\def\endkrb{}
\def\fix@parname#1{\expandafter\parse@krb#1\endkrb%
\endkrb\endkrb\endkrb\endkrb}%  In case the argument is less
%				than five letters, we don't want to 
%				lose on the argument parsing.
\def\parse@krb#1#2#3#4#5#6\endkrb{\@krbfuncfalse%
\if#1k\if#2r\if#3b\if#45\@krbfunctrue\fi\fi\fi\fi%
\if@krbfunc#6\else#1#2#3#4#5#6\fi}
%
% funcdecl is used as \begin{funcdecl}{funcname}{return type}{firstline}
%
% see fixunder.sty for comments on why the \underrealtrue & \underrealfalse
% stuff is here.
\newenvironment{funcdecl}[3]{\underrealtrue\index{#1}\underrealfalse%
\medbreak
\gdef\funcn@me{#1}
\argc@ount=0\noindent%
%the \mbox{} is to prevent the line/paragraph breaking from eating the
%fill space.
\marginpar[{{\sloppy \hfil\fix@parname{\funcn@me}\hfill\mbox{}}}]%
{{\sloppy \hfill\fix@parname{\funcn@me}\hfil\mbox{}}}%
\vbox\bgroup\begin{minipage}[t]{\textwidth}\begin{tabbing}
#2 \\
{\bf #1}(\= \+ #3%
}{)
\end{tabbing}\vfil\end{minipage}\egroup\par\nopagebreak
}
\newcommand{\docomm@}{\ifnum\argc@ount >0, \\\fi}
\newcommand{\funcvoid}{\argc@ount=0}
\newcommand{\funcin}{\docomm@\argc@ount=0{\sl /* IN */}\\}
\newcommand{\funcinout}{\docomm@\argc@ount=0{\sl /* INOUT */}\\}
\newcommand{\funcout}{\docomm@\argc@ount=0{\sl /* OUT */}\\}
\newcommand{\funcarg}[2]{\docomm@#1 {\argfont #2}\advance\argc@ount by1}
\newcommand{\funcparam}[1]{{\argfont #1}}
\newcommand{\funcfuncarg}[2]{\docomm@#1 {\argfont #2}(\= \+ \argc@ount=0}
\newcommand{\funcendfuncarg}{), \- \\ \argc@ount=0}
\newcommand{\libname}[1]{{\argfont #1}}
\newcommand{\globalname}[1]{{\argfont #1}}
\newcommand{\ptsto}{->\discretionary{}{}{}}
\newcommand{\datatype}[1]{{\bf #1}}
\newcommand{\filename}[1]{{\sl #1\/}}

\newcommand{\funcname}[1]{\underrealtrue\index{#1}\underrealfalse{\funcfont #1}()}
\newcommand{\funcnamenoparens}[1]{\underrealtrue\index{#1}\underrealfalse{\funcfont #1}}
