% Copyright 2003 by Till Tantau <tantau@cs.tu-berlin.de>.
%
% This program can be redistributed and/or modified under the terms
% of the LaTeX Project Public License Distributed from CTAN
% archives in directory macros/latex/base/lppl.txt.

\section{Design of the System Layer}

\makeatletter


\subsection{Driver Files}
\label{section-pgfsys}

The \pgfname\ system layer mainly consists of a large number of
commands starting with |\pgfsys@|. These commands will be called
\emph{system commands} in the following. The higher layers
``interface'' with the system layer by calling these commands. The
higher layers should never use |\special| commands directly or even
check whether |\pdfoutput| is defined. Instead, all drawing requests
should be ``channeled'' through the system commands. 

The system layer is loaded and setup by the following package:

\begin{package}{pgfsys}
  This file provides ``default implementations'' of all system
  commands, but most simply produce a warning that they are not
  implemented. The actual implementations of the system commands for a
  particular driver like, say, |pdftex| reside in files called
  |pgfsys-xxxx.sty|, where |xxxx| is the driver name. These will be
  called \emph{driver files} in the following.

  When |pgfsys.sty| is loaded, it will try to determine which driver
  is used by loading |pgf.cfg|. This file should setup the macro
  |\pgfsysdriver| appropriately. The, |pgfsys.sty| will input the
  appropriate |pgfsys-|\meta{drivername}|.sty|. 
\end{package}

\begin{command}{\pgfsysdriver}
  This macro should expand to the name of the driver to be used by
  |pgfsys|. The default from |pgf.cfg| is |pgfsys-\Gin@driver|. This
  is very likely to be correct if you are using \LaTeX. For plain
  \TeX, the macro will be set to |pgfsys-pdftex.def| if |pdftex| is
  used and to |pgfsys-dvips.def| otherwise.
\end{command}

\begin{filedescription}{pgf.cfg}
  This file should setup the command |\pgfsysdriver| correctly. If
  |\pgfsysdriver| is already set to some value, the driver normally
  should not change it. Otherwise, it should make a ``good guess'' at
  which driver will be appropriate.
\end{filedescription}


The currently supported backend drivers are discussed in
Section~\ref{section-drivers}. 


\subsection{Common Definition Files}

Some drivers share many |\pgfsys@| commands. For the reason, files
defining these ``common'' commands are available. These files are
\emph{not} usable alone.

\begin{filedescription}{pgfsys-common-postscript}
  This file defines some |\pgfsys@| commands so that they produce
  appropriate PostScript code.
\end{filedescription}

\begin{filedescription}{pgfsys-common-pdf}
  This file defines some |\pgfsys@| commands so that they produce
  appropriate \textsc{pdf} code.
\end{filedescription}


%%% Local Variables: 
%%% mode: latex
%%% TeX-master: "pgfmanual"
%%% End: 
