libflame  revision_anchor
FLA_f2c.h
Go to the documentation of this file.
00001 // f2c.h  --  Standard Fortran to C header file
00002 //  barf  [ba:rf]  2.  "He suggested using FORTRAN, and everybody barfed."
00003 //  - From The Shogakukan DICTIONARY OF NEW ENGLISH (Second edition)
00004 
00005 #ifndef F2C_INCLUDE
00006 #define F2C_INCLUDE
00007 
00008 typedef long int integer;
00009 typedef unsigned long int uinteger;
00010 typedef char *address;
00011 typedef short int shortint;
00012 typedef float real;
00013 typedef double doublereal;
00014 typedef struct { real r, i; } complex;
00015 typedef struct { doublereal r, i; } doublecomplex;
00016 typedef long int logical;
00017 typedef short int shortlogical;
00018 typedef char logical1;
00019 typedef char integer1;
00020 #ifdef INTEGER_STAR_8   /* Adjust for integer*8. */
00021 typedef long long longint;      /* system-dependent */
00022 typedef unsigned long long ulongint;    /* system-dependent */
00023 #define qbit_clear(a,b) ((a) & ~((ulongint)1 << (b)))
00024 #define qbit_set(a,b)   ((a) |  ((ulongint)1 << (b)))
00025 #endif
00026 
00027 #define TRUE_ (1)
00028 #define FALSE_ (0)
00029 
00030 /* Extern is for use with -E */
00031 #ifndef Extern
00032 #define Extern extern
00033 #endif
00034 
00035 /* I/O stuff */
00036 
00037 #ifdef f2c_i2
00038 /* for -i2 */
00039 typedef short flag;
00040 typedef short ftnlen;
00041 typedef short ftnint;
00042 #else
00043 typedef long int flag;
00044 typedef long int ftnlen;
00045 typedef long int ftnint;
00046 #endif
00047 
00048 /*external read, write*/
00049 typedef struct
00050 {   flag cierr;
00051     ftnint ciunit;
00052     flag ciend;
00053     char *cifmt;
00054     ftnint cirec;
00055 } cilist;
00056 
00057 /*internal read, write*/
00058 typedef struct
00059 {   flag icierr;
00060     char *iciunit;
00061     flag iciend;
00062     char *icifmt;
00063     ftnint icirlen;
00064     ftnint icirnum;
00065 } icilist;
00066 
00067 /*open*/
00068 typedef struct
00069 {   flag oerr;
00070     ftnint ounit;
00071     char *ofnm;
00072     ftnlen ofnmlen;
00073     char *osta;
00074     char *oacc;
00075     char *ofm;
00076     ftnint orl;
00077     char *oblnk;
00078 } olist;
00079 
00080 /*close*/
00081 typedef struct
00082 {   flag cerr;
00083     ftnint cunit;
00084     char *csta;
00085 } cllist;
00086 
00087 /*rewind, backspace, endfile*/
00088 typedef struct
00089 {   flag aerr;
00090     ftnint aunit;
00091 } alist;
00092 
00093 /* inquire */
00094 typedef struct
00095 {   flag inerr;
00096     ftnint inunit;
00097     char *infile;
00098     ftnlen infilen;
00099     ftnint  *inex;  /*parameters in standard's order*/
00100     ftnint  *inopen;
00101     ftnint  *innum;
00102     ftnint  *innamed;
00103     char    *inname;
00104     ftnlen  innamlen;
00105     char    *inacc;
00106     ftnlen  inacclen;
00107     char    *inseq;
00108     ftnlen  inseqlen;
00109     char    *indir;
00110     ftnlen  indirlen;
00111     char    *infmt;
00112     ftnlen  infmtlen;
00113     char    *inform;
00114     ftnint  informlen;
00115     char    *inunf;
00116     ftnlen  inunflen;
00117     ftnint  *inrecl;
00118     ftnint  *innrec;
00119     char    *inblank;
00120     ftnlen  inblanklen;
00121 } inlist;
00122 
00123 #define VOID void
00124 
00125 union Multitype {   /* for multiple entry points */
00126     integer1 g;
00127     shortint h;
00128     integer i;
00129     /* longint j; */
00130     real r;
00131     doublereal d;
00132     complex c;
00133     doublecomplex z;
00134     };
00135 
00136 typedef union Multitype Multitype;
00137 
00138 /*typedef long int Long;*/  /* No longer used; formerly in Namelist */
00139 
00140 struct Vardesc {    /* for Namelist */
00141     char *name;
00142     char *addr;
00143     ftnlen *dims;
00144     int  type;
00145     };
00146 typedef struct Vardesc Vardesc;
00147 
00148 struct Namelist {
00149     char *name;
00150     Vardesc **vars;
00151     int nvars;
00152     };
00153 typedef struct Namelist Namelist;
00154 
00155 #ifndef abs
00156   #define abs(x) ((x) >= 0 ? (x) : -(x))
00157 #endif
00158 #ifndef dabs
00159   #define dabs(x) (doublereal)abs(x)
00160 #endif
00161 #ifndef min
00162   #define min(a,b) ((a) <= (b) ? (a) : (b))
00163 #endif
00164 #ifndef max
00165   #define max(a,b) ((a) >= (b) ? (a) : (b))
00166 #endif
00167 #ifndef dmin
00168   #define dmin(a,b) (doublereal)min(a,b)
00169 #endif
00170 #ifndef dmax
00171   #define dmax(a,b) (doublereal)max(a,b)
00172 #endif
00173 
00174 #define bit_test(a,b)   ((a) >> (b) & 1)
00175 #define bit_clear(a,b)  ((a) & ~((uinteger)1 << (b)))
00176 #define bit_set(a,b)    ((a) |  ((uinteger)1 << (b)))
00177 
00178 /* procedure parameter types for -A and -C++ */
00179 
00180 #define F2C_proc_par_types 1
00181 #ifdef __cplusplus
00182 typedef int /* Unknown procedure type */ (*U_fp)(...);
00183 typedef shortint (*J_fp)(...);
00184 typedef integer (*I_fp)(...);
00185 typedef real (*R_fp)(...);
00186 typedef doublereal (*D_fp)(...);
00187 typedef doublereal (*E_fp)(...);
00188 typedef /* Complex */ VOID (*C_fp)(...);
00189 typedef /* Double Complex */ VOID (*Z_fp)(...);
00190 typedef logical (*L_fp)(...);
00191 typedef shortlogical (*K_fp)(...);
00192 typedef /* Character */ VOID (*H_fp)(...);
00193 typedef /* Subroutine */ int (*S_fp)(...);
00194 #else
00195 typedef int /* Unknown procedure type */ (*U_fp)();
00196 typedef shortint (*J_fp)();
00197 typedef integer (*I_fp)();
00198 typedef real (*R_fp)();
00199 typedef doublereal (*D_fp)();
00200 typedef doublereal (*E_fp)();
00201 typedef /* Complex */ VOID (*C_fp)();
00202 typedef /* Double Complex */ VOID (*Z_fp)();
00203 typedef logical (*L_fp)();
00204 typedef shortlogical (*K_fp)();
00205 typedef /* Character */ VOID (*H_fp)();
00206 typedef /* Subroutine */ int (*S_fp)();
00207 #endif
00208 /* E_fp is for real functions when -R is not specified */
00209 typedef VOID C_f;   /* complex function */
00210 typedef VOID H_f;   /* character function */
00211 typedef VOID Z_f;   /* double complex function */
00212 typedef doublereal E_f; /* real function with -R not specified */
00213 
00214 /* undef any lower-case symbols that your C compiler predefines, e.g.: */
00215 
00216 #ifndef Skip_f2c_Undefs
00217 #undef cray
00218 #undef gcos
00219 #undef mc68010
00220 #undef mc68020
00221 #undef mips
00222 #undef pdp11
00223 #undef sgi
00224 #undef sparc
00225 #undef sun
00226 #undef sun2
00227 #undef sun3
00228 #undef sun4
00229 #undef u370
00230 #undef u3b
00231 #undef u3b2
00232 #undef u3b5
00233 #undef unix
00234 #undef vax
00235 #endif
00236 #endif