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