f2c.h
上传用户:center1979
上传日期:2022-07-26
资源大小:50633k
文件大小:16k
- /*
- -Header_File f2c.h ( CSPICE version of the f2c standard header file )
- -Abstract
- Perform standard f2c declarations, customized for the host
- environment.
-
- -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
- The standard f2c header file f2c.h must be included by every function
- generated by running f2c on Fortran source code. The header f2c.h
- includes typedefs used to provide a level of indirection in mapping
- Fortran data types to native C data types. For example, Fortran
- INTEGER variables are mapped to variables of type integer, where
- integer is a C typedef. In the standard f2c.h header, the typedef
- integer tranlates to the C type long.
-
- Because the standard version of f2c.h does not work on all platforms,
- this header file contains two platform-dependent versions of it,
- meant to be selected at build time via precompiler switches. The
- precompiler switches reference macros defined in SpiceZpl.h to
- determine for which host platform the code is targeted. The first
- version of f2c.h, which works on most platforms, is copied directly
- from the standard version of f2c.h. The second version is intended
- for use on the DEC Alpha running Digital Unix and the Sun/Solaris
- platform using 64 bit mode and running gcc. On those systems, longs
- occupy 8 bytes, as do doubles. Because the Fortran standard requires
- that INTEGERS occupy half the storage of DOUBLE PRECISION numbers,
- INTEGERS should be mapped to 4-byte ints rather than 8-byte longs
- on the platforms having 8-byte longs. In order to achieve this, the
- header f2c.h was transformed using the sed command
-
- sed 's/long //' f2c.h
-
- The high-level structure of this file is then:
-
- # if ( defined(CSPICE_ALPHA_DIGITAL_UNIX )
- || defined(CSPICE_SUN_SOLARIS_64BIT_GCC ) )
-
-
- [ Alpha/Digital Unix and Sun Solaris 64 bit mode/gcc
- version of f2c.h source code ]
-
- # else
-
- [ Standard version of f2c.h source code ]
-
- # endif
-
- -Literature_References
- None.
- -Author_and_Institution
- N.J. Bachman (JPL)
-
- -Restrictions
- 1) This header file must be updated whenever the f2c processor
- or the f2c libraries libI77 and libF77 are updated.
-
- 2) This header may need to be updated to support new platforms.
- The supported platforms at the time of the 31-JAN-1999 release
- are:
-
- ALPHA-DIGITAL-UNIX
- HP
- NEXT
- PC-LINUX
- PC-MS
- SGI-IRIX-N32
- SGI-IRIX-NO2
- SUN-SOLARIS
-
- -Version
- -CSPICE Version 1.2.0, 27-JAN-2003 (NJB)
- Updated to support the Sun Solaris 64 bit mode/gcc platform.
- -CSPICE Version 2.0.0, 19-DEC-2001 (NJB)
- Updated to support linking CSPICE into executables that
- also link in objects compiled from Fortran, in particular
- ones that perform Fortran I/O. To enable this odd mix,
- one defines the preprocessor flag
- MIX_C_AND_FORTRAN
-
- This macro is undefined by default, since the action it invokes
- is usually not desirable. See the header
- f2cMang.h
- for further information.
- -CSPICE Version 1.0.0, 07-FEB-1999 (NJB)
- */
- /*
- Optionally include name-mangling macros for f2c external symbols.
- */
- #ifdef MIX_C_AND_FORTRAN
- #include "f2cMang.h"
- #endif
- /*
- Include CSPICE platform macro definitions.
- */
- #include "SpiceZpl.h"
-
- # if ( defined(CSPICE_ALPHA_DIGITAL_UNIX )
- || defined(CSPICE_SUN_SOLARIS_64BIT_GCC ) )
- /*
- The following code is intended to be used on the Alpha/Digital Unix
- platform, where a long is the size of a double and an int is half the
- size of a double.
-
- Note that the comment line below indicating that the header is
- "Standard" has been retained from the original, but is no longer
- true.
- */
- /* f2c.h -- Standard Fortran to C header file */
- /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed."
- - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */
- #ifndef F2C_INCLUDE
- #define F2C_INCLUDE
- typedef int integer;
- typedef unsigned uinteger;
- typedef char *address;
- typedef short int shortint;
- typedef float real;
- typedef double doublereal;
- typedef struct { real r, i; } complex;
- typedef struct { doublereal r, i; } doublecomplex;
- typedef int logical;
- typedef short int shortlogical;
- typedef char logical1;
- typedef char integer1;
- #if 0 /* Adjust for integer*8. */
- typedef long longint; /* system-dependent */
- typedef unsigned long ulongint; /* system-dependent */
- #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b)))
- #define qbit_set(a,b) ((a) | ((ulongint)1 << (b)))
- #endif
- #define TRUE_ (1)
- #define FALSE_ (0)
- /* Extern is for use with -E */
- #ifndef Extern
- #define Extern extern
- #endif
- /* I/O stuff */
- #ifdef f2c_i2
- /* for -i2 */
- typedef short flag;
- typedef short ftnlen;
- typedef short ftnint;
- #else
- typedef int flag;
- typedef int ftnlen;
- typedef int ftnint;
- #endif
- /*external read, write*/
- typedef struct
- { flag cierr;
- ftnint ciunit;
- flag ciend;
- char *cifmt;
- ftnint cirec;
- } cilist;
- /*internal read, write*/
- typedef struct
- { flag icierr;
- char *iciunit;
- flag iciend;
- char *icifmt;
- ftnint icirlen;
- ftnint icirnum;
- } icilist;
- /*open*/
- typedef struct
- { flag oerr;
- ftnint ounit;
- char *ofnm;
- ftnlen ofnmlen;
- char *osta;
- char *oacc;
- char *ofm;
- ftnint orl;
- char *oblnk;
- } olist;
- /*close*/
- typedef struct
- { flag cerr;
- ftnint cunit;
- char *csta;
- } cllist;
- /*rewind, backspace, endfile*/
- typedef struct
- { flag aerr;
- ftnint aunit;
- } alist;
- /* inquire */
- typedef struct
- { flag inerr;
- ftnint inunit;
- char *infile;
- ftnlen infilen;
- ftnint *inex; /*parameters in standard's order*/
- ftnint *inopen;
- ftnint *innum;
- ftnint *innamed;
- char *inname;
- ftnlen innamlen;
- char *inacc;
- ftnlen inacclen;
- char *inseq;
- ftnlen inseqlen;
- char *indir;
- ftnlen indirlen;
- char *infmt;
- ftnlen infmtlen;
- char *inform;
- ftnint informlen;
- char *inunf;
- ftnlen inunflen;
- ftnint *inrecl;
- ftnint *innrec;
- char *inblank;
- ftnlen inblanklen;
- } inlist;
- #define VOID void
- union Multitype { /* for multiple entry points */
- integer1 g;
- shortint h;
- integer i;
- /* longint j; */
- real r;
- doublereal d;
- complex c;
- doublecomplex z;
- };
- typedef union Multitype Multitype;
- /*typedef int Long;*/ /* No longer used; formerly in Namelist */
- struct Vardesc { /* for Namelist */
- char *name;
- char *addr;
- ftnlen *dims;
- int type;
- };
- typedef struct Vardesc Vardesc;
- struct Namelist {
- char *name;
- Vardesc **vars;
- int nvars;
- };
- typedef struct Namelist Namelist;
- #define abs(x) ((x) >= 0 ? (x) : -(x))
- #define dabs(x) (doublereal)abs(x)
- #define min(a,b) ((a) <= (b) ? (a) : (b))
- #define max(a,b) ((a) >= (b) ? (a) : (b))
- #define dmin(a,b) (doublereal)min(a,b)
- #define dmax(a,b) (doublereal)max(a,b)
- #define bit_test(a,b) ((a) >> (b) & 1)
- #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b)))
- #define bit_set(a,b) ((a) | ((uinteger)1 << (b)))
- /* procedure parameter types for -A and -C++ */
- #define F2C_proc_par_types 1
- #ifdef __cplusplus
- typedef int /* Unknown procedure type */ (*U_fp)(...);
- typedef shortint (*J_fp)(...);
- typedef integer (*I_fp)(...);
- typedef real (*R_fp)(...);
- typedef doublereal (*D_fp)(...), (*E_fp)(...);
- typedef /* Complex */ VOID (*C_fp)(...);
- typedef /* Double Complex */ VOID (*Z_fp)(...);
- typedef logical (*L_fp)(...);
- typedef shortlogical (*K_fp)(...);
- typedef /* Character */ VOID (*H_fp)(...);
- typedef /* Subroutine */ int (*S_fp)(...);
- #else
- typedef int /* Unknown procedure type */ (*U_fp)();
- typedef shortint (*J_fp)();
- typedef integer (*I_fp)();
- typedef real (*R_fp)();
- typedef doublereal (*D_fp)(), (*E_fp)();
- typedef /* Complex */ VOID (*C_fp)();
- typedef /* Double Complex */ VOID (*Z_fp)();
- typedef logical (*L_fp)();
- typedef shortlogical (*K_fp)();
- typedef /* Character */ VOID (*H_fp)();
- typedef /* Subroutine */ int (*S_fp)();
- #endif
- /* E_fp is for real functions when -R is not specified */
- typedef VOID C_f; /* complex function */
- typedef VOID H_f; /* character function */
- typedef VOID Z_f; /* double complex function */
- typedef doublereal E_f; /* real function with -R not specified */
- /* undef any lower-case symbols that your C compiler predefines, e.g.: */
- #ifndef Skip_f2c_Undefs
- #undef cray
- #undef gcos
- #undef mc68010
- #undef mc68020
- #undef mips
- #undef pdp11
- #undef sgi
- #undef sparc
- #undef sun
- #undef sun2
- #undef sun3
- #undef sun4
- #undef u370
- #undef u3b
- #undef u3b2
- #undef u3b5
- #undef unix
- #undef vax
- #endif
- #endif
- /*
- This marks the end of the Alpha/Digital Unix version of f2c.h.
- */
- #else
- /*
- The following code is the standard f2c.h header. In this
- header, an "integer" is defined to be of type long.
-
- Because the code is copied verbatim, it does not follow the usual
- CSPICE indentation pattern.
- */
- /* f2c.h -- Standard Fortran to C header file */
- /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed."
- - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */
- #ifndef F2C_INCLUDE
- #define F2C_INCLUDE
- typedef long int integer;
- typedef unsigned long uinteger;
- typedef char *address;
- typedef short int shortint;
- typedef float real;
- typedef double doublereal;
- typedef struct { real r, i; } complex;
- typedef struct { doublereal r, i; } doublecomplex;
- typedef long int logical;
- typedef short int shortlogical;
- typedef char logical1;
- typedef char integer1;
- #if 0 /* Adjust for integer*8. */
- typedef long long longint; /* system-dependent */
- typedef unsigned long long ulongint; /* system-dependent */
- #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b)))
- #define qbit_set(a,b) ((a) | ((ulongint)1 << (b)))
- #endif
- #define TRUE_ (1)
- #define FALSE_ (0)
- /* Extern is for use with -E */
- #ifndef Extern
- #define Extern extern
- #endif
- /* I/O stuff */
- #ifdef f2c_i2
- /* for -i2 */
- typedef short flag;
- typedef short ftnlen;
- typedef short ftnint;
- #else
- typedef long int flag;
- typedef long int ftnlen;
- typedef long int ftnint;
- #endif
- /*external read, write*/
- typedef struct
- { flag cierr;
- ftnint ciunit;
- flag ciend;
- char *cifmt;
- ftnint cirec;
- } cilist;
- /*internal read, write*/
- typedef struct
- { flag icierr;
- char *iciunit;
- flag iciend;
- char *icifmt;
- ftnint icirlen;
- ftnint icirnum;
- } icilist;
- /*open*/
- typedef struct
- { flag oerr;
- ftnint ounit;
- char *ofnm;
- ftnlen ofnmlen;
- char *osta;
- char *oacc;
- char *ofm;
- ftnint orl;
- char *oblnk;
- } olist;
- /*close*/
- typedef struct
- { flag cerr;
- ftnint cunit;
- char *csta;
- } cllist;
- /*rewind, backspace, endfile*/
- typedef struct
- { flag aerr;
- ftnint aunit;
- } alist;
- /* inquire */
- typedef struct
- { flag inerr;
- ftnint inunit;
- char *infile;
- ftnlen infilen;
- ftnint *inex; /*parameters in standard's order*/
- ftnint *inopen;
- ftnint *innum;
- ftnint *innamed;
- char *inname;
- ftnlen innamlen;
- char *inacc;
- ftnlen inacclen;
- char *inseq;
- ftnlen inseqlen;
- char *indir;
- ftnlen indirlen;
- char *infmt;
- ftnlen infmtlen;
- char *inform;
- ftnint informlen;
- char *inunf;
- ftnlen inunflen;
- ftnint *inrecl;
- ftnint *innrec;
- char *inblank;
- ftnlen inblanklen;
- } inlist;
- #define VOID void
- union Multitype { /* for multiple entry points */
- integer1 g;
- shortint h;
- integer i;
- /* longint j; */
- real r;
- doublereal d;
- complex c;
- doublecomplex z;
- };
- typedef union Multitype Multitype;
- /*typedef long int Long;*/ /* No longer used; formerly in Namelist */
- struct Vardesc { /* for Namelist */
- char *name;
- char *addr;
- ftnlen *dims;
- int type;
- };
- typedef struct Vardesc Vardesc;
- struct Namelist {
- char *name;
- Vardesc **vars;
- int nvars;
- };
- typedef struct Namelist Namelist;
- #define abs(x) ((x) >= 0 ? (x) : -(x))
- #define dabs(x) (doublereal)abs(x)
- #define min(a,b) ((a) <= (b) ? (a) : (b))
- #define max(a,b) ((a) >= (b) ? (a) : (b))
- #define dmin(a,b) (doublereal)min(a,b)
- #define dmax(a,b) (doublereal)max(a,b)
- #define bit_test(a,b) ((a) >> (b) & 1)
- #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b)))
- #define bit_set(a,b) ((a) | ((uinteger)1 << (b)))
- /* procedure parameter types for -A and -C++ */
- #define F2C_proc_par_types 1
- #ifdef __cplusplus
- typedef int /* Unknown procedure type */ (*U_fp)(...);
- typedef shortint (*J_fp)(...);
- typedef integer (*I_fp)(...);
- typedef real (*R_fp)(...);
- typedef doublereal (*D_fp)(...), (*E_fp)(...);
- typedef /* Complex */ VOID (*C_fp)(...);
- typedef /* Double Complex */ VOID (*Z_fp)(...);
- typedef logical (*L_fp)(...);
- typedef shortlogical (*K_fp)(...);
- typedef /* Character */ VOID (*H_fp)(...);
- typedef /* Subroutine */ int (*S_fp)(...);
- #else
- typedef int /* Unknown procedure type */ (*U_fp)();
- typedef shortint (*J_fp)();
- typedef integer (*I_fp)();
- typedef real (*R_fp)();
- typedef doublereal (*D_fp)(), (*E_fp)();
- typedef /* Complex */ VOID (*C_fp)();
- typedef /* Double Complex */ VOID (*Z_fp)();
- typedef logical (*L_fp)();
- typedef shortlogical (*K_fp)();
- typedef /* Character */ VOID (*H_fp)();
- typedef /* Subroutine */ int (*S_fp)();
- #endif
- /* E_fp is for real functions when -R is not specified */
- typedef VOID C_f; /* complex function */
- typedef VOID H_f; /* character function */
- typedef VOID Z_f; /* double complex function */
- typedef doublereal E_f; /* real function with -R not specified */
- /* undef any lower-case symbols that your C compiler predefines, e.g.: */
- #ifndef Skip_f2c_Undefs
- #undef cray
- #undef gcos
- #undef mc68010
- #undef mc68020
- #undef mips
- #undef pdp11
- #undef sgi
- #undef sparc
- #undef sun
- #undef sun2
- #undef sun3
- #undef sun4
- #undef u370
- #undef u3b
- #undef u3b2
- #undef u3b5
- #undef unix
- #undef vax
- #endif
- #endif
- #endif