\subsection{DRAGON Data Structure and Module Declarations}\label{sect:StrucMod}

DRAGON is built around the Ganlib kernel and its modules can be called from CLE-2000.\cite{ganlib5,cle2000}
Accordingly, all the modules that will be used during the current execution must
be first identified. One must also define the format of each data structure that
will be processed by these modules. Then, the modules required for the specific
DRAGON calculation are called successively, information being
transferred from one module to the next via the data structures. Finally,
the execution of DRAGON is terminated when it encounters the \moc{END:} module
even if it is followed by additional data records in the input data stream. The
general input data structure therefore follows the calling specifications given
below:

\begin{DataStructure}{Structure \dstr{DRAGON}}
$[$ \moc{MODULE} $[[$ \dusa{MODNAME} $]]$ \moc{;} $]$ \\
$[$ \moc{LINKED\_LIST} $[[$ \dusa{STRNAME} $]]$ \moc{;} $]$ \\
$[$ \moc{XSM\_FILE} $[[$ \dusa{STRNAME} $]]$ \moc{;} $]$ \\
$[$ \moc{SEQ\_BINARY} $[[$ \dusa{STRNAME} $]]$ \moc{;} $]$ \\
$[$ \moc{SEQ\_ASCII} $[[$ \dusa{STRNAME} $]]$ \moc{;} $]$ \\
$[[$ \dstr{module}  \moc{;} $]]$ \\
\moc{END:} \moc{;}
\end{DataStructure}

\noindent where
\begin{ListeDeDescription}{mmmmmmmm}

\item[\moc{MODULE}]  keyword used to specify the list of modules to be used in
this DRAGON execution.

\item[\dusa{MODNAME}] {\tt character*12} name of a DRAGON or utility module.
The list of DRAGON module is provided in \Sect{DragonModules} while the list of
Utility module is described in \Sect{UtilityModules}. By default a ` ' module
is always available (see \Sectand{UtilityModules}{EQUData}).

\item[\moc{LINKED\_LIST}]  keyword used to specify which data structures will
be stored in linked lists. 

\item[\moc{XSM\_FILE}]  keyword used to specify which data structures will be
stored on XSM format files. 

\item[\moc{SEQ\_BINARY}]  keyword used to specify which data structures will be
stored on sequential binary files. 

\item[\moc{SEQ\_ASCII}]  keyword used to specify which data structures will be
stored on sequential ASCII files. 

\item[\dusa{STRNAME}] {\tt character*12} name of a DRAGON data structure.
Note that on MVS file names are truncated to 7 characters due to a constraint of
this operating system. The list of DRAGON data structure is presented in
\Sect{DragonDataStructures}.

\item[\dstr{module}] input specifications for a DRAGON or utility module.  For
the DRAGON specific modules these input structures will be defined in
\Sect{DragonModuleInput}. For utility modules, the required structures are
described in \Sect{UtilityModuleInput}.

\item[\moc{END:}] keyword to call the normal end-of-execution utility module.

\item[\moc{;}] end of record keyword. This keyword is used by DRAGON to
delimit the part of the input data stream associated with each module.

\end{ListeDeDescription}

Note that the user generally has the choice to declare most of the data
structures in the format of a linked list to reduce CPU times or as a XSM
file to reduce memory resources. Some exceptions to this general rule are
the tracking files as we will see in \Sect{TRKData}. In general, the data
structure are stored on the sequential ASCII files only for backup purposes.

\vskip 0.2cm

The input data normally ends with a call to
the \moc{END:} module (see \Sect{ENDData}). However, the GAN driver will insert
automatically the
\moc{END:} module, even if it was not provided, upon reaching an end-of-file in
the input stream.

\vskip 0.2cm

Each \dstr{module} specification contains a description of the execution modules to
be called and its associated input structure. All these
modules, except the \moc{END:} module may be called more than once.

