/*

-Header_File SpiceUsr.h ( CSPICE user interface definitions )

-Abstract

   Perform CSPICE user interface declarations, including type
   definitions and function prototype declarations.

-Disclaimer

   THIS SOFTWARE AND ANY RELATED MATERIALS WERE CREATED BY THE
   CALIFORNIA INSTITUTE OF TECHNOLOGY (CALTECH) UNDER A U.S.
   GOVERNMENT CONTRACT WITH THE NATIONAL AERONAUTICS AND SPACE
   ADMINISTRATION (NASA). THE SOFTWARE IS TECHNOLOGY AND SOFTWARE
   PUBLICLY AVAILABLE UNDER U.S. EXPORT LAWS AND IS PROVIDED "AS-IS"
   TO THE RECIPIENT WITHOUT WARRANTY OF ANY KIND, INCLUDING ANY
   WARRANTIES OF PERFORMANCE OR MERCHANTABILITY OR FITNESS FOR A
   PARTICULAR USE OR PURPOSE (AS SET FORTH IN UNITED STATES UCC
   SECTIONS 2312-2313) OR FOR ANY PURPOSE WHATSOEVER, FOR THE
   SOFTWARE AND RELATED MATERIALS, HOWEVER USED.

   IN NO EVENT SHALL CALTECH, ITS JET PROPULSION LABORATORY, OR NASA
   BE LIABLE FOR ANY DAMAGES AND/OR COSTS, INCLUDING, BUT NOT
   LIMITED TO, INCIDENTAL OR CONSEQUENTIAL DAMAGES OF ANY KIND,
   INCLUDING ECONOMIC DAMAGE OR INJURY TO PROPERTY AND LOST PROFITS,
   REGARDLESS OF WHETHER CALTECH, JPL, OR NASA BE ADVISED, HAVE
   REASON TO KNOW, OR, IN FACT, SHALL KNOW OF THE POSSIBILITY.

   RECIPIENT BEARS ALL RISK RELATING TO QUALITY AND PERFORMANCE OF
   THE SOFTWARE AND ANY RELATED MATERIALS, AND AGREES TO INDEMNIFY
   CALTECH AND NASA FOR ALL THIRD-PARTY CLAIMS RESULTING FROM THE
   ACTIONS OF RECIPIENT IN THE USE OF THE SOFTWARE.

-Required_Reading

   None.

-Particulars

   This file is an umbrella header that includes all header files
   required to support the CSPICE application programming interface
   (API).  Users' application code that calls CSPICE need include only
   this single header file.  This file includes function prototypes for
   the entire set of CSPICE routines.  Typedef statements used to create
   SPICE data types are also included.


   About SPICE data types
   ======================

   To assist with long-term maintainability of CSPICE, NAIF has elected
   to use typedefs to represent data types occurring in argument lists
   and as return values of CSPICE functions. These are:

      SpiceBoolean
      SpiceChar
      SpiceDouble
      SpiceInt
      ConstSpiceBoolean
      ConstSpiceChar
      ConstSpiceDouble
      ConstSpiceInt

   The SPICE typedefs map in an arguably natural way to ANSI C types:

      SpiceBoolean -> enum { SPICEFALSE = 0, SPICETRUE = 1 }
      SpiceChar    -> char
      SpiceDouble  -> double
      SpiceInt     -> int or long
      ConstX       -> const X  (X = any of the above types)

   The type SpiceInt is a special case: the corresponding type is picked
   so as to be half the size of a double. On all currently supported
   platforms, type double occupies 8 bytes and type int occupies 4
   bytes.  Other platforms may require a SpiceInt to map to type long.

   While other data types may be used internally in CSPICE, no other
   types appear in the API.


   About CSPICE function prototypes
   ================================

   Because CSPICE function prototypes enable substantial compile-time
   error checking, we recommend that user applications always reference
   them.  Including the header file SpiceUsr.h in any module that calls
   CSPICE will automatically make the prototypes available.


   About CSPICE C style
   ====================

   CSPICE is written in ANSI C.  No attempt has been made to support K&R
   conventions or restrictions.


   About C++ compatibility
   =======================

   The preprocessor directive -D__cplusplus should be used when
   compiling C++ source code that includes this header file.  This
   directive will suppress mangling of CSPICE names, permitting linkage
   to a CSPICE object library built from object modules produced by
   an ANSI C compiler.

-Literature_References

   None.

-Author_and_Institution

   N.J. Bachman       (JPL)
   S.C. Krening       (JPL)
   E.D. Wright        (JPL)

-Restrictions

   The #include statements contained in this file are not part of
   the CSPICE API.  The set of files included may change without notice.
   Users should not include these files directly in their own
   application code.

-Version

   -CSPICE Version 5.0.0, 11-MAY-2012 (NJB) (SCK)

      Updated to include header files

        SpiceErr.h
        SpiceFrm.h
        SpiceOccult.h

   -CSPICE Version 4.0.0, 30-SEP-2008 (NJB)

      Updated to include header file

        SpiceGF.h

   -CSPICE Version 3.0.0, 19-AUG-2002 (NJB)

      Updated to include header files

        SpiceCel.h
        SpiceCK.h
        SpiceSPK.h

   -CSPICE Version 3.0.0, 17-FEB-1999 (NJB)

      Updated to support suppression of name mangling when included in
      C++ source code.  Also now interface macros to intercept function
      calls and perform automatic type casting.

      Now includes platform macro definition header file.

      References to types SpiceVoid and ConstSpiceVoid were removed.

   -CSPICE Version 2.0.0, 06-MAY-1998 (NJB) (EDW)

*/

#ifdef __cplusplus
extern "C" {
#endif

#ifndef HAVE_SPICE_USER

#define HAVE_SPICE_USER

/*
Include CSPICE platform macro definitions.
*/
#include "SpiceZpl.h"

/*
Include CSPICE data type definitions.
*/
#include "SpiceZdf.h"

/*
Include the CSPICE error handling interface definitions.
*/
#include "SpiceErr.h"

/*
Include the CSPICE EK interface definitions.
*/
#include "SpiceEK.h"

/*
Include the CSPICE frame subsystem API definitions.
*/
#include "SpiceFrm.h"

/*
Include the CSPICE Cell interface definitions.
*/
#include "SpiceCel.h"

/*
Include the CSPICE CK interface definitions.
*/
#include "SpiceCK.h"

/*
Include the CSPICE SPK interface definitions.
*/
#include "SpiceSPK.h"

/*
Include the CSPICE GF interface definitions.
*/
#include "SpiceGF.h"

/*
Include the CSPICE occultation definitions.
*/
#include "SpiceOccult.h"

/*
Include CSPICE prototypes.
*/
#include "SpiceZpr.h"

/*
Define the CSPICE function interface macros.
*/
#include "SpiceZim.h"

#endif

#ifdef __cplusplus
}
#endif
