%% -*- mode: LaTeX -*-
%%
%% Copyright (c) 1995, 1996, 1999 The University of Utah and the Computer
%% Systems Laboratory at the University of Utah (CSL).
%%
%% This file is part of Flick, the Flexible IDL Compiler Kit.
%%
%% Flick is free software; you can redistribute it and/or modify it under the
%% terms of the GNU General Public License as published by the Free Software
%% Foundation; either version 2 of the License, or (at your option) any later
%% version.
%%
%% Flick is distributed in the hope that it will be useful, but WITHOUT ANY
%% WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
%% FOR A PARTICULAR PURPOSE.  See the GNU General Public License for more
%% details.
%%
%% You should have received a copy of the GNU General Public License along with
%% Flick; see the file COPYING.  If not, write to the Free Software Foundation,
%% 59 Temple Place #330, Boston, MA 02111, USA.
%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

\section{Organization of this Document}
\label{sec:Intro:Organization of this Document}

Part~\ref{part:Introduction} of this manual, which you are reading now,
introduces Flick.  Chapter~\ref{cha:Coding} contains an overview of Flick's
components, a catalog of the directories in the Flick source tree, and a
summary of the coding style used in the Flick sources.

Part~\ref{part:The Intermediate Representations} of this manual describes the
data structures that Flick uses at different stages of \IDL{} compilation.
These data structures are the intermediate ``languages'' used by different
parts of Flick and include:

\begin{itemize}
  \item \META{}, for keeping track of the files that Flick reads and writes
  (Chapter~\ref{cha:META});

  \item \AOI{}, to represent \IDL{} specifications (Chapter~\ref{cha:AOI});

  \item \MINT{}, to represent the abstract structure of on-the-wire messages
  (Chapter~\ref{cha:MINT});

  \item \CAST{}, to describe C and C++ code (Chapter~\ref{cha:CAST});

  \item \PRESC{}, to represent the behavior of generated stubs and skeletons
  (Chapter~\ref{cha:PRESC}); and

  \item \SCML{}, to define templates for other functions that Flick must
  generate as part of an interface presentation (Chapter~\ref{cha:SCML}).
\end{itemize}

\noindent Understanding these intermediate languages --- and the associated
libraries for using them --- is critical to understanding Flick overall.

In Part~\ref{part:The Programs and Libraries}, this manual describes the inner
workings of Flick's front ends (Chapter~\ref{cha:FE}), presentation generators
(Chapter~\ref{cha:PG}), and back ends (Chapter~\ref{cha:BE}).  The chapters in
this part of the manual describe the individual implementations of each
compiler stage, as well as the libraries that are common to each stage.  The
guide concludes with a summary of the runtime libraries that provide support to
the code generated by Flick's various back ends (Chapter~\ref{cha:Runtime}).

In summary, this document is intended to be a programmer's guide to the inner
workings of Flick: the overall architecture, the intermediate data structures,
and the individual Flick compiler programs and libraries.  This ``road map''
can only take you so far, however, and it is not a substitute for actually
reading and working through the Flick source code.  Flick is complex but not
obscure --- don't be afraid to read the code!

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%% End of file.

