\section{CGI server}\label{sec:cgi-server}
%
\begin{description}
\item[Used files:] cgi-server.scm
\item[Name of the package:] cgi-server
\end{description}
%
\subsection{Variables}

\defvar{cgi-default-bin-path}{string}
\begin{desc}
  This variable contains the path for scripts. Its value is
  \codex{/bin:/usr/bin:/usr/ucb:/usr/bsd:/usr/local/bin}
\end{desc}

\subsection{Procedures}

\begin{defundesc}{cgi-handler}{bin-dir}{path-handler}
  Returns a path handler (see \ref{httpd:path-handlers} for details
  about path handlers) for cgi-scripts located in
  \semvar{bin-dir}. The scripts are called as specified by
  CGI/1.1\footnote{see
\ex{http://hoohoo.ncsa.uiuc.edu/cgi/interface.html} for a sort of
specification.}.

\begin{itemize}
\item Various environment variables are set (like
  \ex{QUERY\_STRING} or \ex{REMOTE\_HOST}).
\item ISINDEX queries get their arguments as command line arguments.
\item Scripts are handled differently according to their name:

  \begin{itemize}

    \item If the name of the script starts with `\ex{nph-}', its reply
    is read, the RFC~822-fields like ``Content-Type'' and ``Status''
    are parsed and the client is sent back a real HTTP reply,
    containing the rest of the script's output.  

    \item If the name of the script doesn't start with `\ex{nph-}',
    its output is sent back to the client directly. If its return code
    is not zero, an error message is generated.

\end{itemize}
\end{itemize}
\end{defundesc}

\begin{defundesc}{initialise-request-invariant-cgi-env}{}{\noreturn}
  Initializes the environment variables that are invariant from
  cgi-call to cgi-call in order to save calculation time. Call this
  procedure before you start your httpd. You have to do this, if you
  use cgi-scripts, that read out the environment variables \ex{PATH},
  \ex{SERVER\_SOFTWARE}, \ex{SERVER\_NAME} or \ex{GATEWAY\_INTERFACE}.
\end{defundesc}
