% Style parameters and macros used by most documents here

\input{a4wide.sty} % Take this out if it doesn't exist or doesn't work
\input{times.sty} % And this (at CWI, this uses PostScript fonts)

% This has to be tuned each time the repair person takes the printer apart:
%\addtolength{\oddsidemargin}{-2.5mm}
%\addtolength{\evensidemargin}{-2.5mm}

% Style parameters
\raggedbottom
\sloppy
\parindent =       0mm
\parskip =         2mm

% Variable used by begin code command
\newlength{\codewidth}

% Command to start a code block (follow this by \begin{verbatim})
\newcommand{\bcode}{
	% Calculate the text width for the minipage:
	\setlength{\codewidth}{\linewidth}
	\addtolength{\codewidth}{-\parindent}
	%
	\par
	\vspace{3mm}
	\indent
	\begin{minipage}[t]{\codewidth}
}

% Command to end a code block (precede this by \end{verbatim})
\newcommand{\ecode}{
	\end{minipage}
	\vspace{3mm}
	\par
	\noindent
}

% Underscores are not magic throughout the Python documentation.
% This still only gives the right effect in the tt font!!!
\def\_{\ifnum\fam=\ttfam \char'137\else{\tt\char'137}\fi}
\catcode`\_=12
\catcode`\_=\active\def_{\ifnum\fam=\ttfam \char'137 \else{\tt\char'137}\fi}

% Define \itembreak: force the text after an item to start on a new line
\newcommand{\itembreak}{
\mbox{}
\\*[0mm]
}

% Command to generate two index entries (using subentries)
\newcommand{\indexii}[2]{\index{#1!#2}\index{#2!#1}}

% And three entries (using only one level of subentries)
\newcommand{\indexiii}[3]{\index{#1!#2 #3}\index{#2!#3, #1}\index{#3!#1 #2}}

% And four (again, using only one level of subentries)
\newcommand{\indexiv}[4]{
\index{#1!#2 #3 #4}
\index{#2!#3 #4, #1}
\index{#3!#4, #1 #2}
\index{#4!#1 #2 #3}
}

% Command to generate a reference to a function, statement, keyword, operator
\newcommand{\stindex}[1]{\indexii{statement}{#1@{\tt#1}}}
\newcommand{\kwindex}[1]{\indexii{keyword}{#1@{\tt#1}}}
\newcommand{\opindex}[1]{\indexii{operator}{#1@{\tt#1}}}
\newcommand{\exindex}[1]{\indexii{exception}{#1@{\tt#1}}}
\newcommand{\obindex}[1]{\indexii{object}{#1}}
\newcommand{\bifuncindex}[1]{\index{#1@{\tt#1} (built-in function)}}

% Add an index entry for a module
\newcommand{\modindex}[2]{\index{#1@{\tt#1} (#2module)}}
\newcommand{\bimodindex}[1]{\modindex{#1}{built-in }}
\newcommand{\stmodindex}[1]{\modindex{#1}{standard }}

% Additional string for an index entry
\newcommand{\indexsubitem}{}
\newcommand{\ttindex}[1]{\index{#1@{\tt#1} \indexsubitem}}

% Define \itemjoin: some negative vspace to join two items together
\newcommand{\itemjoin}{
\mbox{}
\vspace{-\itemsep}
\vspace{-\parsep}
}

% Define \funcitem{func}{args}: define a function item
\newcommand{\funcitem}[2]{%
\ttindex{#1}%
%\item[{\tt #1(#2)}]
\item[\code{#1(\varvars{#2})}]
\ 
}


% from user-level, fulllineitems should be called as an environment
\def\fulllineitems{\list{}{\labelwidth \leftmargin \labelsep 0pt
\rightmargin 0pt \topsep -\parskip \partopsep \parskip
\itemsep -\parsep
\let\makelabel\itemnewline}}
\let\endfulllineitems\endlist


% funcdesc should be called as an \begin{funcdesc} ... \end{funcdesc}
\newcommand{\funcline}[2]{\item[\code{#1(\varvars{#2})}]\ttindex{#1}}
\newcommand{\funcdesc}[2]{\fulllineitems\funcline{#1}{#2}}
\let\endfuncdesc\endfulllineitems
\newcommand{\optional}[1]{{\ \Large[}{#1}\hspace{0.5mm}{\Large]}\ }


% same for excdesc
\newcommand{\excline}[1]{\item[\code{#1}]\ttindex{#1}}
\newcommand{\excdesc}[1]{\fulllineitems\excline{#1}}
\let\endexcdesc\endfulllineitems

% same for datadesc
\newcommand{\dataline}[1]{\item[\code{#1}]\ttindex{#1}}
\newcommand{\datadesc}[1]{\fulllineitems\dataline{#1}}
\let\enddatadesc\endfulllineitems


% Define \dataitem{name}: define a data item
\newcommand{\dataitem}[1]{%
\ttindex{#1}%
\item[{\tt #1}]
\ 
}

% Define \excitem{name}: define an exception item
\newcommand{\excitem}[1]{%
\ttindex{#1}%
\item[{\tt #1}]
\itembreak
}

\let\nodename=\label

\newcommand{\ABC}{{\sc abc}}
\newcommand{\UNIX}{{\sc Unix}}
\newcommand{\ASCII}{{\sc ascii}}
%\newcommand{\C}{{\bf C}}
\newcommand{\Cpp}{C\protect\raisebox{.18ex}{++}}
\newcommand{\C}{C}
\newcommand{\EOF}{{\sc eof}}

% code is the most difficult one...
%\frenchspacing removed, because \section, etc., can't handle it
\newcommand{\code}[1]{{\@vobeyspaces\@noligs\def\{{\char`\{}\def\}{\char`\}}\def\~{\char`\~}\def\^{\char`\^}\def\e{\char`\\}\def\${\char`\$}\def\#{\char`\#}\def\&{\char`\&}\def\%{\char`\%}%
\mbox{\tt #1}}}
%This one does not work
%%%% myspecials, same as dospecials, but without {, } and \
%%%\def\myspecials{\do\ \do\$\do\&%
%%%  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~}
%%%\newcommand{\code}[1]{\begingroup \catcode``=13 \@noligs
%%%\tt \let\do\@makeother \myspecials
%%%#1\endgroup}
\newcommand{\kbd}[1]{\mbox{\tt #1}}
\newcommand{\key}[1]{\mbox{\tt #1}}
\newcommand{\samp}[1]{\mbox{`\code{#1}'}}
\newcommand{\var}[1]{\mbox{\it#1\/}}
\let\file=\samp
\newcommand{\dfn}[1]{{\em #1\/}}
\newcommand{\emph}[1]{{\em #1\/}}
\newcommand{\strong}[1]{{\bf #1}}

%\newcommand{\varvars}[1]{{\catcode`\,=\active\def,{\tt\char`\,\/tt}\var{#1}}}
%\newcommand{\varvars}[1]{{\def\,{\/{\tt\char`\,}}\var{#1}}}
\newcommand{\varvars}[1]{{\def\,{\/{\tt\char`\,}}\def\({\/{\tt\char`\(}}\def\){\/{\tt\char`\)}}\var{#1}}}

\newif\iftexi\texifalse
%not supported yet%\newif\iflatex\latextrue

\newenvironment{tableii}[4]{\begin{center}\def\lineii##1##2{\csname#2\endcsname{##1}&##2\\}\begin{tabular}{#1}\hline#3&#4\\
\hline}{\hline\end{tabular}\end{center}}

\newenvironment{tableiii}[5]{\begin{center}\def\lineiii##1##2##3{\csname#2\endcsname{##1}&##2&##3\\}\begin{tabular}{#1}\hline#3&#4&#5\\
\hline}{\hline\end{tabular}\end{center}}

\newcommand{\itemnewline}[1]{\@tempdima\linewidth
\advance\@tempdima \leftmargin\makebox[\@tempdima][l]{#1}}

\newcommand{\sectcode}[1]{{\tt #1}}
%%%
%%%\let\orgchapter\chapter
%%%\def\chapter#1{{\let\code\sectcode\orgchapter{#1}}}
%%%\let\orgsection\section
%%%\def\section#1{{\let\code\sectcode\orgsection{#1}}}
%%%\let\orgsubsection\subsection
%%%\def\subsection#1{{\let\code\sectcode\orgsubsection{#1}}}
%%%\let\orgsubsubsection\subsubsection
%%%\def\subsubsection#1{{\let\code\sectcode\orgsubsubsection{#1}}}
%%%\let\orgsubsubsubsection\subsubsubsection
%%%\def\subsubsubsection#1{{\let\code\sectcode\orgsubsubsubsection{#1}}}

