%                       SWI-Prolog document-style

% Test for PDF generation using pdflatex

\newif\ifpdf
\ifx\pdfoutput\undefined
   \pdffalse
\else
   \pdfoutput=1
   \pdftrue
\fi

% Get hyperrefs to work

\usepackage{makeidx}
\usepackage{url}

\ifpdf
  \usepackage[pdftex,colorlinks=true,urlcolor=blue]{hyperref}
  \pdfcompresslevel=9
%  \pdfcatalog{
%    /PageMode /UseOutLines
%  }
  \usepackage[pdftex]{graphicx}
  \DeclareGraphicsExtensions{.pdf,.jpg,.png}
\else
  \usepackage[dvips]{graphicx}
  \DeclareGraphicsExtensions{.eps,.ps}
\fi
\graphicspath{{figs/}{./}}

%       Other styles

\input logo.sty
%\usepackage{a4wide}
% taken from a4wide -- hopefully these lines are not copyright violation
\oddsidemargin 0.1 in
\evensidemargin 0.15 in
\marginparwidth 1 in
\oddsidemargin 0.125 in
\evensidemargin 0.125 in
\marginparwidth 0.75 in
\textwidth 6.125 in
% end of a4wide
\usepackage{fancyhdr}
\usepackage{fancychap}
\usepackage{longtable}
\usepackage{ifthen}
\usepackage{dcolumn}
\usepackage{calc}
\setlongtables

\catcode`\^^A=8% downarrow are for subscripts
\catcode`\_=\active
\def_{\ifmmode\else\_\fi}
\def\vobeyspaces{\@vobeyspaces}

\newcommand{\onlinebreak}{}

%       References

\newcommand{\secref}[1]{section~\ref{sec:#1}}
\newcommand{\appref}[1]{appendix~\ref{sec:#1}}
\newcommand{\chapref}[1]{chapter~\ref{sec:#1}}
\newcommand{\figref}[1]{figure~\ref{fig:#1}}
\newcommand{\tabref}[1]{table~\ref{tab:#1}}

\newcommand{\Secref}[1]{Section~\ref{sec:#1}}
\newcommand{\Appref}[1]{Appendix~\ref{sec:#1}}
\newcommand{\Chapref}[1]{Chapter~\ref{sec:#1}}
\newcommand{\Figref}[1]{Figure~\ref{fig:#1}}
\newcommand{\Tabref}[1]{Table~\ref{tab:#1}}

\newcommand{\tm}{$^{tm}$}

\newcommand{\reffont}{\tt}
\newcommand{\predref}[2]{%              % functor/arity
        \mbox{\reffont #1/#2}}
\newcommand{\functor}[2]{%              % functor/arity (no predicate)
        \mbox{\reffont #1/#2}}
\newcommand{\manref}[2]{%               % page(n)
        \mbox{{\reffont #1(}{\rm #2}{\tt )}}}
\newcommand{\funcref}[2]{%              % function(Args...)
        \mbox{{\reffont #1(}{\it #2}{\tt )}}}

%       Descriptions (definitions) of various things

\def\@nodescription{false}

\newcommand{\defentry}[1]{\definition{#1}}
\newcommand{\definition}[1]{%
        \onlinebreak%
        \ifthenelse{\equal{\@nodescription}{true}}{%
            \def\@nodescription{false}%
            \makebox[-\leftmargin]{\mbox{}}\mbox{\bf #1}\\}{%
            \item[\mbox{#1}]\hfill\mbox{}\linebreak}}
\newcommand{\nodescription}{\def\@nodescription{true}}

\makeatletter
\def\cmdlineoptionitem{\@ifstar{\@gluedcmdoptitem}{\@cmdoptitem}}
\def\@gluedcmdoptitem#1#2{\definition{#1\var{#2}}}
\def\@cmdoptitem#1#2{\definition{#1 \var{#2}}}
\makeatother
\newcommand{\longoptionitem}[2]{%
        \ifthenelse{\equal{}{#2}}{%
            \definition{-{}-#1}}{%
            \definition{-{}-#1={\it #2}}}\ignorespaces}
\newcommand{\longoption}[2]{%
        \ifthenelse{\equal{}{#2}}{%
            \mbox{\reffont -{}-#1}}{%
            \mbox{\reffont -{}-#1={\it #2}}}}

\newcommand{\traceoption}[3]{%
        \definition{{\tt #1} (#2)}#3%
        \ignorespaces}
\newcommand{\pleaseoption}[3]{%
        \definition{#1 {\it #2} {\rm(default: \it #3)}}%
        \ignorespaces}
\newcommand{\prologflagitem}[3]{%
        \definition{#1 {\it (#2%
            \ifthenelse{\equal{rw}{#3}}{, changeable}{})}}%
        \ignorespaces}
\newcommand{\escapeitem}[1]{%
        \definition{\Sesc{\tt #1}}
        \ignorespaces}
\newcommand{\fmtchar}[1]{%
        \item[\tt #1]%
        \ignorespaces}
\newcommand{\directive}[3]{%
        \defentry{:- #1({\it #3})}%
        \index{#1/#2}\ignorespaces}
\newcommand{\predicate}[3]{%
        \ifthenelse{\equal{#2}{0}}{%
            \defentry{#1}}{%
            \defentry{#1({\it #3})}}%
        \index{#1/#2}\ignorespaces}
\newcommand{\infixop}[3]{%
        \defentry{{\it #2} #1 {\it #3}}%
        \index{#1/2}\ignorespaces}
\newcommand{\prefixop}[2]{%
        \defentry{#1 {\it #2}}%
        \index{#1/1}\ignorespaces}
\newcommand{\termitem}[2]{%
        \ifthenelse{\equal{}{#2}}{%
            \definition{#1}}{%
            \definition{#1({\it #2})}}\ignorespaces}
\def\term{}
\renewcommand{\term}[2]{%
        \ifthenelse{\equal{}{\protect #2}}{%
            {\reffont #1}}{%
            {\reffont #1}({\it #2})}}
\newcommand{\infixterm}[3]{{\it #2} #1 {\it #2}}
\newcommand{\errorterm}[2]{\mbox{\tt%
        \ifthenelse{\equal{}{#2}}{%
            #1}{%
            #1(#2)}}}
\newcommand{\cfunction}[3]{%
        \defentry{{\tt #1} #2{\rm (}{\it #3}{\rm )}}%
        \index{#2()}\ignorespaces}
\newcommand{\constructor}[2]{%
        \defentry{#1::#1{\rm (}{\it #2}{\rm )}}%
        \index{#1::#1()}\ignorespaces}
\newcommand{\destructor}[1]{%
        \defentry{#1::\Stilde{}#1{\rm ()}}%
        \index{#1::\Stilde{}#1()}\ignorespaces}
\newcommand{\cppcast}[2]{%
        \defentry{#1::operator #2{\rm ({\it void})}}%
        \index{#1::operator #2()}\ignorespaces}
\newcommand{\cdecl}[2]{{\tt #1} {\em #2}}
\newcommand{\cmacro}[3]{%
        \defentry{{\it #1} #2({\it #3})}%
        \index{#2()}\ignorespaces}
\newcommand{\cglobalvar}[1]{{\tt #1}}
\newcommand{\classitem}[1]{%
        \definition{Class #1}%
        \index{#1 \string\idxtype{class}}\ignorespaces}

\renewcommand{\arg}[1]{\ifmmode\mbox{\em #1}\else{\em #1}\fi}
\newcommand{\bnfmeta}[1]{\ifmmode{\langle\mbox{\it #1}\rangle}\else$\langle\mbox{\it #1}\rangle$\fi}
\newcommand{\bnfor}{\ifmmode\mid\else$\mid$\fi}
\newcommand{\isa}{& ::= &}
\newcommand{\ora}{& $\mid$ &}

\newcommand{\class}[1]{{\em #1}\index{#1 \string\idxtype{class}}}
\newcommand{\classs}[1]{{\em #1s}\index{#1 \string\idxtype{class}}}
\newcommand{\demo}[1]{{\sf #1}\index{#1 \string\idxtype{demo}}}
\newcommand{\pllib}[1]{library({\tt #1})\index{#1 \string\idxtype{library}}}
\newcommand{\clib}[1]{{\tt #1}\index{#1 \string\idxtype{library}}}
\newcommand{\tool}[1]{{\em #1}\index{#1 \string\idxtype{tool}}}
\newcommand{\constf}[1]{{\reffont #1}}
\newcommand{\const}[1]{{\tt #1}}
\newcommand{\plflag}[1]{{\tt #1}}
\newcommand{\type}[1]{{\reffont #1}}
\newcommand{\idx}[1]{#1\index{#1}}
\newcommand{\foreseen}[1]{\footnote{#1}}
\newcommand{\metafile}[1]{\mbox{\tt #1}}
\newcommand\file{\begingroup \urlstyle{tt}\Url}
\newcommand\email{\begingroup \urlstyle{tt}\Url}
\newcommand{\env}[1]{\mbox{\tt #1}}
\newcommand{\except}[1]{\mbox{\tt #1}}
\newcommand{\exam}[1]{\mbox{\tt #1}}
\newcommand{\module}[1]{\mbox{\reffont #1}}
\newcommand{\fileext}[1]{\mbox{\tt .#1}}
\newcommand{\option}[1]{\mbox{\tt #1}}
\newcommand{\cmdlineoption}[1]{\mbox{\tt #1}}
\newcommand{\argoption}[2]{\mbox{\tt #1 \em #2}}
\newcommand{\ctype}[1]{{\tt #1}}
\newcommand{\op}[1]{{\tt #1}}
\newcommand{\program}[1]{{\tt #1}}
\newcommand{\manpage}[2]{{\bf #1}(#2)}
\newcommand{\chr}[1]{{\tt #1}}
\newcommand{\jargon}[1]{{\em #1}}
\newcommand{\strong}[1]{{\bf #1}}
\newcommand{\texcmd}[1]{{\Sesc}{\tt #1}}
\newcommand{\texenv}[1]{{\tt #1}}
\newcommand{\texmode}[1]{{\tt #1}}
\newcommand{\HTML}[1]{{\bf #1}}

\newcommand\satom{\begingroup \urlstyle{tt}\Url}
\newcommand\fmtseq{\begingroup \urlstyle{tt}\Url}

\urldef{\Sexe}\satom{#!}                % #!
\urldef{\Scut}\satom{!}                 % !
\urldef{\Scomma}\satom{,}               % ,
\urldef{\Sifthen}\satom{->}             % ->
\urldef{\Ssoftcut}\satom{*->}           % *->
\urldef{\Sdot}\satom{.}                 % .
\urldef{\Ssemicolon}\satom{;}           % ;
\urldef{\Slt}\satom{<}                  % <
\urldef{\Seq}\satom{=}                  % =
\urldef{\Suniv}\satom{=..}              % =..
\urldef{\Saeq}\satom{=:=}               % =:=
\urldef{\Sle}\satom{=<}                 % =<
\urldef{\Sequal}\satom{==}              % ==
\urldef{\Sstructeq}\satom{=@=}          % =@=
\urldef{\Sstructneq}\satom{\=@=}        % \=@=
\urldef{\Sane}\satom{=\=}               % =\=
\urldef{\Sgt}\satom{>}                  % >
\urldef{\Sge}\satom{>=}                 % >=
\urldef{\Stlt}\satom{@<}                % @<
\urldef{\Stle}\satom{@=<}               % @=<
\urldef{\Stgt}\satom{@>}                % @>
\urldef{\Stge}\satom{@>=}               % @>=
\urldef{\Snot}\satom{\+}                % \+
\urldef{\Sne}\satom{\=}                 % \=
\urldef{\Snequal}\satom{\==}            % \==
\urldef{\Shat}\satom{^}                 % ^
\urldef{\Sbar}\satom{|}                 % |
\urldef{\Stimes}\satom{*}               % *
\urldef{\Spow}\satom{**}                % **
\urldef{\Splus}\satom{+}                % +
\urldef{\Sminus}\satom{-}               % -
\urldef{\Sdiv}\satom{/}                 % /
\urldef{\Sidiv}\satom{//}               % //
\urldef{\Sand}\satom{/\}                % /\
\urldef{\Slshift}\satom{<<}             % <<
\urldef{\Srshift}\satom{>>}             % >>
\urldef{\Sneg}\satom{\}                 % \
\urldef{\Sesc}\satom{\}                 % \
\urldef{\Sor}\satom{\/}                 % \/
\urldef{\Sdollar}\satom{$}              % $
\urldef{\Squest}\satom{?}               % ?
\urldef{\Smodule}\satom{:}              % :
\urldef{\Sneck}\satom{:-}               % :-
\urldef{\Sdirective}\satom{?-}          % ?-
\urldef{\Sdcg}\satom{-->}               % -->
\urldef{\Bc}\satom{\c}                  % \c
\urldef{\Bn}\satom{\n}                  % \n
\urldef{\Br}\satom{\r}                  % \r
\urldef{\Bl}\satom{\l}                  % \l
\urldef{\BB}\satom{\\}                  % \\
\urldef{\Stilde}\satom{~}               % ~
\urldef{\Spercent}\satom{%}             % %
\urldef{\Shash}\satom{#}                % #

\newcommand{\bug}[1]{\footnote{BUG: #1}}

\newcommand{\mod}[2]{#1 \mbox{\rm mod} #2}
\newcommand{\rem}[2]{#1 \mbox{\rm rem} #2}
\newcommand{\pow}[2]{{#1}^{#2}}

%       Index handling

\newcommand{\idxtype}[1]{{\small\em #1}}

%       Prolog predicate summary

\newenvironment{summarylist}[1]{\begin{longtable}[l]{#1}}{\end{longtable}}
\newcommand{\predicatesummary}[3]{#1/#2 & #3 \\}
\newcommand{\oppredsummary}[5]{#1/#2 & #5 \\}
\newcommand{\functionsummary}[3]{#1/#2 & #3 \\}
\newcommand{\opfuncsummary}[5]{#1/#2 & #5 \\}
\newcommand{\opsummary}[4]{#3 & #1 & #2 & #4 \\}
\newcommand{\hook}[1]{(hook)}


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%                       CODE environment                        %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\newlength{\codeindent}
\setlength{\codeindent}{\leftmargin}
\newenvironment{codequote}%
        {\begin{list}{}{\setlength{\leftmargin}{0pt}%
                        \setlength{\rightmargin}{0pt}}%
                        \item[]\small\ignorespaces}%
        {\end{list}}


%       just like verbatim, but indents like quote.
%       allows also the use of leading tabs

\makeatletter
{\catcode`\^^I=\active
    \gdef^^I{\mbox{}\space\space\space\space\space\space\space\space}}

\begingroup \catcode `|=0 \catcode `[= 1
\catcode`]=2 \catcode `\{=12 \catcode `\}=12
\catcode`\\=12
|gdef|@xcode#1\end{code}[#1|end[code]]
|endgroup

\def\@code{\trivlist\setlength{\leftmargin}{\codeindent}%
                    \setlength{\rightmargin}{\codeindent}%
                    \item[]\if@minipage\else\vskip\parskip\fi
\leftskip\@totalleftmargin\rightskip\z@
\parindent\z@\parfillskip\@flushglue\parskip\z@
\@tempswafalse \def\par{\if@tempswa\hbox{}\fi\@tempswatrue\@@par}
\obeylines \catcode`\^^I=\active \tt \let\do\@makeother \dospecials}

\def\code{\@code \frenchspacing\@vobeyspaces \@xcode}
\def\@endcode{\endtrivlist}
\let\endcode=\@endcode


%       PostScript figures
%       \postscriptfig[width=5in]{label}{Title}

\def\postscriptfig{\@ifnextchar[{\@scaledpostscriptfig}{\@postscriptfig}}
\def\@scaledpostscriptfig[#1]#2#3{%
        \begin{figure}%
            \centerline{\includegraphics[#1]{#2}}
            \caption{#3}
            \label{fig:#2}
        \end{figure}}
\def\@postscriptfig#1#2{%
        \begin{figure}%
            \centerline{\includegraphics{#1}}
            \caption{#2}
            \label{fig:#1}
        \end{figure}}
\makeatletter

%       \begin{tabularlp}{longest-text}

\newlength{\tabDright}
\newlength{\tabDleft}
\newcommand{\PreserveBackslash}[1]{\let\temp=\\#1\let\\=\temp}
\newcommand{\raggedrightcolumn}{\PreserveBackslash\raggedright\hspace{0pt}}
\newenvironment{tabularlp}[1]%
        {\settowidth{\tabDleft}{#1}%
         \setlength{\tabDright}{\linewidth-\columnsep*3-\tabDleft}%
         \begin{tabular}{|p{\tabDleft}|>{\raggedrightcolumn}p{\tabDright}|}}%
        {\end{tabular}}


%       PAGESTYLE
%
%       Chapter                            date
%       ---------------------------------------
%
%       bla, bla, bla, ...
%       
%       \bottomleft    - page -    \bottomright

\def\arabicday{\number\year-\number\month-\number\day}

\providecommand{\runningtitle}{none}

\ifthenelse{\equal{\runningtitle}{none}}{%
        \relax}{%
\pagestyle{fancyplain}
\headheight 14pt
\def\chaptermark{\mbox{}}
\renewcommand{\chaptermark}[1]{\markboth{#1}{#1}} % remember chapter title
\renewcommand{\sectionmark}[1]{\markright{\thesection\ #1}}

\lhead[\fancyplain{}{\bf\thepage}]{\fancyplain{}{\bf\rightmark}}
\rhead[\fancyplain{}{\bf\leftmark}]{\fancyplain{}{\bf\thepage}}
\footrulewidth 0.2pt
\lfoot[\tiny \runningtitle]{}
\rfoot[]{\tiny \runningtitle}
\cfoot{}}
