Chris@202: /* f2c.h -- Standard Fortran to C header file */ Chris@202: Chris@202: /** barf [ba:rf] 2. "He suggested using FORTRAN, and everybody barfed." Chris@202: Chris@202: - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition) */ Chris@202: Chris@202: #ifndef F2C_INCLUDE Chris@202: #define F2C_INCLUDE Chris@202: Chris@202: typedef int integer; Chris@202: typedef unsigned int uinteger; Chris@202: typedef char *address; Chris@202: typedef short shortint; Chris@202: typedef float real; Chris@202: typedef double doublereal; Chris@202: typedef struct { real r, i; } complex; Chris@202: typedef struct { doublereal r, i; } doublecomplex; Chris@202: typedef int logical; Chris@202: typedef short shortlogical; Chris@202: typedef char logical1; Chris@202: typedef char integer1; Chris@202: #ifdef INTEGER_STAR_8 /* Adjust for integer*8. */ Chris@202: typedef int64_t longint; /* system-dependent */ Chris@202: typedef uint64_t ulongint; /* system-dependent */ Chris@202: #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b))) Chris@202: #define qbit_set(a,b) ((a) | ((ulongint)1 << (b))) Chris@202: #endif Chris@202: Chris@202: #define TRUE_ (1) Chris@202: #define FALSE_ (0) Chris@202: Chris@202: /* Extern is for use with -E */ Chris@202: #ifndef Extern Chris@202: #define Extern extern Chris@202: #endif Chris@202: Chris@202: /* I/O stuff */ Chris@202: Chris@202: #ifdef f2c_i2 Chris@202: /* for -i2 */ Chris@202: typedef short flag; Chris@202: typedef short ftnlen; Chris@202: typedef short ftnint; Chris@202: #else Chris@202: typedef int flag; Chris@202: typedef int ftnlen; Chris@202: typedef int ftnint; Chris@202: #endif Chris@202: Chris@202: /*external read, write*/ Chris@202: typedef struct Chris@202: { flag cierr; Chris@202: ftnint ciunit; Chris@202: flag ciend; Chris@202: char *cifmt; Chris@202: ftnint cirec; Chris@202: } cilist; Chris@202: Chris@202: /*internal read, write*/ Chris@202: typedef struct Chris@202: { flag icierr; Chris@202: char *iciunit; Chris@202: flag iciend; Chris@202: char *icifmt; Chris@202: ftnint icirlen; Chris@202: ftnint icirnum; Chris@202: } icilist; Chris@202: Chris@202: /*open*/ Chris@202: typedef struct Chris@202: { flag oerr; Chris@202: ftnint ounit; Chris@202: char *ofnm; Chris@202: ftnlen ofnmlen; Chris@202: char *osta; Chris@202: char *oacc; Chris@202: char *ofm; Chris@202: ftnint orl; Chris@202: char *oblnk; Chris@202: } olist; Chris@202: Chris@202: /*close*/ Chris@202: typedef struct Chris@202: { flag cerr; Chris@202: ftnint cunit; Chris@202: char *csta; Chris@202: } cllist; Chris@202: Chris@202: /*rewind, backspace, endfile*/ Chris@202: typedef struct Chris@202: { flag aerr; Chris@202: ftnint aunit; Chris@202: } alist; Chris@202: Chris@202: /* inquire */ Chris@202: typedef struct Chris@202: { flag inerr; Chris@202: ftnint inunit; Chris@202: char *infile; Chris@202: ftnlen infilen; Chris@202: ftnint *inex; /*parameters in standard's order*/ Chris@202: ftnint *inopen; Chris@202: ftnint *innum; Chris@202: ftnint *innamed; Chris@202: char *inname; Chris@202: ftnlen innamlen; Chris@202: char *inacc; Chris@202: ftnlen inacclen; Chris@202: char *inseq; Chris@202: ftnlen inseqlen; Chris@202: char *indir; Chris@202: ftnlen indirlen; Chris@202: char *infmt; Chris@202: ftnlen infmtlen; Chris@202: char *inform; Chris@202: ftnint informlen; Chris@202: char *inunf; Chris@202: ftnlen inunflen; Chris@202: ftnint *inrecl; Chris@202: ftnint *innrec; Chris@202: char *inblank; Chris@202: ftnlen inblanklen; Chris@202: } inlist; Chris@202: Chris@202: #define VOID void Chris@202: Chris@202: union Multitype { /* for multiple entry points */ Chris@202: integer1 g; Chris@202: shortint h; Chris@202: integer i; Chris@202: /* longint j; */ Chris@202: real r; Chris@202: doublereal d; Chris@202: complex c; Chris@202: doublecomplex z; Chris@202: }; Chris@202: Chris@202: typedef union Multitype Multitype; Chris@202: Chris@202: /*typedef long int Long;*/ /* No longer used; formerly in Namelist */ Chris@202: Chris@202: struct Vardesc { /* for Namelist */ Chris@202: char *name; Chris@202: char *addr; Chris@202: ftnlen *dims; Chris@202: int type; Chris@202: }; Chris@202: typedef struct Vardesc Vardesc; Chris@202: Chris@202: struct Namelist { Chris@202: char *name; Chris@202: Vardesc **vars; Chris@202: int nvars; Chris@202: }; Chris@202: typedef struct Namelist Namelist; Chris@202: Chris@202: #define abs(x) ((x) >= 0 ? (x) : -(x)) Chris@202: #define dabs(x) (doublereal)abs(x) Chris@202: #define min(a,b) ((a) <= (b) ? (a) : (b)) Chris@202: #define max(a,b) ((a) >= (b) ? (a) : (b)) Chris@202: #define dmin(a,b) (doublereal)min(a,b) Chris@202: #define dmax(a,b) (doublereal)max(a,b) Chris@202: #define bit_test(a,b) ((a) >> (b) & 1) Chris@202: #define bit_clear(a,b) ((a) & ~((uinteger)1 << (b))) Chris@202: #define bit_set(a,b) ((a) | ((uinteger)1 << (b))) Chris@202: Chris@202: /* procedure parameter types for -A and -C++ */ Chris@202: Chris@202: #define F2C_proc_par_types 1 Chris@202: #ifdef __cplusplus Chris@202: typedef int /* Unknown procedure type */ (*U_fp)(...); Chris@202: typedef shortint (*J_fp)(...); Chris@202: typedef integer (*I_fp)(...); Chris@202: typedef real (*R_fp)(...); Chris@202: typedef doublereal (*D_fp)(...), (*E_fp)(...); Chris@202: typedef /* Complex */ VOID (*C_fp)(...); Chris@202: typedef /* Double Complex */ VOID (*Z_fp)(...); Chris@202: typedef logical (*L_fp)(...); Chris@202: typedef shortlogical (*K_fp)(...); Chris@202: typedef /* Character */ VOID (*H_fp)(...); Chris@202: typedef /* Subroutine */ int (*S_fp)(...); Chris@202: #else Chris@202: typedef int /* Unknown procedure type */ (*U_fp)(); Chris@202: typedef shortint (*J_fp)(); Chris@202: typedef integer (*I_fp)(); Chris@202: typedef real (*R_fp)(); Chris@202: typedef doublereal (*D_fp)(), (*E_fp)(); Chris@202: typedef /* Complex */ VOID (*C_fp)(); Chris@202: typedef /* Double Complex */ VOID (*Z_fp)(); Chris@202: typedef logical (*L_fp)(); Chris@202: typedef shortlogical (*K_fp)(); Chris@202: typedef /* Character */ VOID (*H_fp)(); Chris@202: typedef /* Subroutine */ int (*S_fp)(); Chris@202: #endif Chris@202: /* E_fp is for real functions when -R is not specified */ Chris@202: typedef VOID C_f; /* complex function */ Chris@202: typedef VOID H_f; /* character function */ Chris@202: typedef VOID Z_f; /* double complex function */ Chris@202: typedef doublereal E_f; /* real function with -R not specified */ Chris@202: Chris@202: /* undef any lower-case symbols that your C compiler predefines, e.g.: */ Chris@202: Chris@202: #ifndef Skip_f2c_Undefs Chris@202: #undef cray Chris@202: #undef gcos Chris@202: #undef mc68010 Chris@202: #undef mc68020 Chris@202: #undef mips Chris@202: #undef pdp11 Chris@202: #undef sgi Chris@202: #undef sparc Chris@202: #undef sun Chris@202: #undef sun2 Chris@202: #undef sun3 Chris@202: #undef sun4 Chris@202: #undef u370 Chris@202: #undef u3b Chris@202: #undef u3b2 Chris@202: #undef u3b5 Chris@202: #undef unix Chris@202: #undef vax Chris@202: #endif Chris@202: #endif