Lapack++
f2c.h
Go to the documentation of this file.
00001 /* This is also plain -*-c-*-
00002 
00003 // Copyright (C) 2004
00004 // Christian Stimming <stimming@tuhh.de>
00005 
00006 // This library is free software; you can redistribute it and/or
00007 // modify it under the terms of the GNU Lesser General Public License as
00008 // published by the Free Software Foundation; either version 2, or (at
00009 // your option) any later version.
00010 
00011 // This library is distributed in the hope that it will be useful,
00012 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00013 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00014 // GNU Lesser General Public License for more details.
00015 
00016 // You should have received a copy of the GNU Lesser General Public License along
00017 // with this library; see the file COPYING.  If not, write to the Free
00018 // Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307,
00019 // USA.
00020 */
00021 
00022 /*
00023 // NOTE: this is a modified file of f2c.h to work with most C++ compilers.
00024 //       f2c.h for example, defines abs() as a macro, casuing parsing
00025 //       problems when it encounters abs() in stdlib.h, and so on.
00026 //       It is needed in Lapack++ because some of the C/Lapack functions, like
00027 //       ilaenv_(), need to know what ftn_len is (system dependent.)
00028 //
00029 //       pow_ri() has been removed, since it collides with
00030 //       sunmath.h on SUN4s.
00031 //
00032 //        "typedef float real" has been removed, due to conflict with
00033 //        AT&T CC with real() for complex.
00034 //
00035 //        "typedef ... complex" has been renamed to f2c_complex to
00036 //        avoid conflicts with C++ complex class.
00037 */
00038 
00045 #ifndef _F2C_INCLUDE_H
00046 #define _F2C_INCLUDE_H
00047 
00048 typedef long int integer;
00049 typedef char *address;
00050 typedef short int shortint;
00051 typedef float f2c_real;
00052 typedef double doublereal;
00053 typedef struct
00054 {
00055     f2c_real r, i;
00056 } f2c_complex;
00064 typedef struct
00065 {
00066     doublereal r, i;
00067 } doublecomplex;
00068 typedef long int logical;
00069 typedef short int shortlogical;
00070 
00071 #define TRUE_ (1)
00072 #define FALSE_ (0)
00073 
00074 /* Extern is for use with -E */
00075 #ifndef Extern
00076 #define Extern extern
00077 #endif
00078 
00079 extern int ungetc();    /* This is not declared in Sun's <stdio.h> */
00080 
00081 /* I/O stuff */
00082 #ifndef DOXYGEN_IGNORE
00083 
00084 #ifdef f2c_i2
00085 /* for -i2 */
00086 typedef short flag;
00087 typedef short ftnlen;
00088 typedef short ftnint;
00089 #else
00090 typedef long flag;
00091 typedef long ftnlen;
00092 typedef long ftnint;
00093 #endif /* f2c_i2 */
00094 
00095 /*external read, write*/
00096 typedef struct
00097 {
00098     flag cierr;
00099     ftnint ciunit;
00100     flag ciend;
00101     char *cifmt;
00102     ftnint cirec;
00103 } cilist;
00104 
00105 /*internal read, write*/
00106 typedef struct
00107 {
00108     flag icierr;
00109     char *iciunit;
00110     flag iciend;
00111     char *icifmt;
00112     ftnint icirlen;
00113     ftnint icirnum;
00114 } icilist;
00115 
00116 /*open*/
00117 typedef struct
00118 {
00119     flag oerr;
00120     ftnint ounit;
00121     char *ofnm;
00122     ftnlen ofnmlen;
00123     char *osta;
00124     char *oacc;
00125     char *ofm;
00126     ftnint orl;
00127     char *oblnk;
00128 } olist;
00129 
00130 /*close*/
00131 typedef struct
00132 {
00133     flag cerr;
00134     ftnint cunit;
00135     char *csta;
00136 } cllist;
00137 
00138 /*rewind, backspace, endfile*/
00139 typedef struct
00140 {
00141     flag aerr;
00142     ftnint aunit;
00143 } alist;
00144 
00145 /* inquire */
00146 typedef struct
00147 {
00148     flag inerr;
00149     ftnint inunit;
00150     char *infile;
00151     ftnlen infilen;
00152     ftnint  *inex;  /*parameters in standard's order*/
00153     ftnint  *inopen;
00154     ftnint  *innum;
00155     ftnint  *innamed;
00156     char    *inname;
00157     ftnlen  innamlen;
00158     char    *inacc;
00159     ftnlen  inacclen;
00160     char    *inseq;
00161     ftnlen  inseqlen;
00162     char    *indir;
00163     ftnlen  indirlen;
00164     char    *infmt;
00165     ftnlen  infmtlen;
00166     char    *inform;
00167     ftnint  informlen;
00168     char    *inunf;
00169     ftnlen  inunflen;
00170     ftnint  *inrecl;
00171     ftnint  *innrec;
00172     char    *inblank;
00173     ftnlen  inblanklen;
00174 } inlist;
00175 
00176 #define VOID void
00177 
00178 union Multitype     /* for multiple entry points */
00179 {
00180     shortint h;
00181     integer i;
00182     f2c_real r;
00183     doublereal d;
00184     f2c_complex c;
00185     doublecomplex z;
00186 };
00187 
00188 typedef union Multitype Multitype;
00189 
00190 typedef long Long;  /* No longer used; formerly in Namelist */
00191 
00192 struct Vardesc      /* for Namelist */
00193 {
00194     char *name;
00195     char *addr;
00196     ftnlen *dims;
00197     int  type;
00198 };
00199 typedef struct Vardesc Vardesc;
00200 
00201 struct Namelist
00202 {
00203     char *name;
00204     Vardesc **vars;
00205     int nvars;
00206 };
00207 typedef struct Namelist Namelist;
00208 
00209 /* procedure parameter types for -A and -C++ */
00210 #endif /* DOXYGEN_IGNORE */
00211 
00212 #define F2C_proc_par_types 1
00213 #ifdef __cplusplus
00214 typedef int /* Unknown procedure type */ (*U_fp)(...);
00215 typedef shortint (*J_fp)(...);
00216 typedef integer (*I_fp)(...);
00217 typedef f2c_real (*R_fp)(...);
00218 typedef doublereal (*D_fp)(...), (*E_fp)(...);
00219 typedef /* Complex */ VOID (*C_fp)(...);
00220 typedef /* Double Complex */ VOID (*Z_fp)(...);
00221 typedef logical (*L_fp)(...);
00222 typedef shortlogical (*K_fp)(...);
00223 typedef /* Character */ VOID (*H_fp)(...);
00224 typedef /* Subroutine */ int (*S_fp)(...);
00225 #else /* __cplusplus */
00226 typedef int /* Unknown procedure type */ (*U_fp)();
00227 typedef shortint (*J_fp)();
00228 typedef integer (*I_fp)();
00229 typedef f2c_real (*R_fp)();
00230 typedef doublereal (*D_fp)(), (*E_fp)();
00231 typedef /* Complex */ VOID (*C_fp)();
00232 typedef /* Double Complex */ VOID (*Z_fp)();
00233 typedef logical (*L_fp)();
00234 typedef shortlogical (*K_fp)();
00235 typedef /* Character */ VOID (*H_fp)();
00236 typedef /* Subroutine */ int (*S_fp)();
00237 #endif /* __cplusplus */
00238 /* E_fp is for real functions when -R is not specified */
00239 typedef VOID C_f;   /* (single precision ) complex function */
00240 typedef VOID H_f;   /* character function */
00241 typedef VOID Z_f;   /* double complex function */
00242 typedef doublereal E_f; /* real function with -R not specified */
00243 
00244 /* undef any lower-case symbols that your C compiler predefines, e.g.: */
00245 
00246 #ifndef Skip_f2c_Undefs
00247 #undef cray
00248 #undef gcos
00249 #undef mc68010
00250 #undef mc68020
00251 #undef mips
00252 #undef pdp11
00253 #undef sgi
00254 #undef sparc
00255 #undef sun
00256 #undef sun2
00257 #undef sun3
00258 #undef sun4
00259 #undef u370
00260 #undef u3b
00261 #undef u3b2
00262 #undef u3b5
00263 #undef unix
00264 #undef vax
00265 #endif /* Skip_f2c_Undefs */
00266 
00267 
00268 /* If you are using a C++ compiler, append the following to f2c.h
00269    for compiling libF77 and libI77. */
00270 
00271 #ifdef __cplusplus
00272 extern "C" {
00273     extern int abort_(void);
00274     extern double c_abs(f2c_complex *);
00275     extern void c_cos(f2c_complex *, f2c_complex *);
00276     extern void c_div(f2c_complex *, f2c_complex *, f2c_complex *);
00277     extern void c_exp(f2c_complex *, f2c_complex *);
00278     extern void c_log(f2c_complex *, f2c_complex *);
00279     extern void c_sin(f2c_complex *, f2c_complex *);
00280     extern void c_sqrt(f2c_complex *, f2c_complex *);
00281     extern double d_abs(double *);
00282     extern double d_acos(double *);
00283     extern double d_asin(double *);
00284     extern double d_atan(double *);
00285     extern double d_atn2(double *, double *);
00286     extern void d_cnjg(doublecomplex *, doublecomplex *);
00287     extern double d_cos(double *);
00288     extern double d_cosh(double *);
00289     extern double d_dim(double *, double *);
00290     extern double d_exp(double *);
00291     extern double d_imag(doublecomplex *);
00292     extern double d_int(double *);
00293     extern double d_lg10(double *);
00294     extern double d_log(double *);
00295     extern double d_mod(double *, double *);
00296     extern double d_nint(double *);
00297     extern double d_prod(float *, float *);
00298     extern double d_sign(double *, double *);
00299     extern double d_sin(double *);
00300     extern double d_sinh(double *);
00301     extern double d_sqrt(double *);
00302     extern double d_tan(double *);
00303     extern double d_tanh(double *);
00304     extern double derf_(double *);
00305     extern double derfc_(double *);
00306     extern integer do_fio(ftnint *, char *, ftnlen);
00307     extern integer do_lio(ftnint *, ftnint *, char *, ftnlen);
00308     extern integer do_uio(ftnint *, char *, ftnlen);
00309     extern integer e_rdfe(void);
00310     extern integer e_rdue(void);
00311     extern integer e_rsfe(void);
00312     extern integer e_rsfi(void);
00313     extern integer e_rsle(void);
00314     extern integer e_rsli(void);
00315     extern integer e_rsue(void);
00316     extern integer e_wdfe(void);
00317     extern integer e_wdue(void);
00318     extern integer e_wsfe(void);
00319     extern integer e_wsfi(void);
00320     extern integer e_wsle(void);
00321     extern integer e_wsli(void);
00322     extern integer e_wsue(void);
00323     extern int ef1asc_(ftnint *, ftnlen *, ftnint *, ftnlen *);
00324     extern integer ef1cmc_(ftnint *, ftnlen *, ftnint *, ftnlen *);
00325     /*
00326       #if defined(OS_WIN32) || LAPACK_OS_WIN32 || defined(OS_freebsd)
00327       extern double erf(double);
00328       extern double erfc(double);
00329       #else
00330       extern double erf(double) throw ();
00331       extern double erfc(double) throw ();
00332       #endif
00333     */
00334     /* 2004-09-08 Christian Stimming <stimming@tuhh.de>: Remove
00335        declaration of erf() and erfc() since they cause trouble with
00336        FreeBSD and they seem to be unneeded anyway. */
00337     extern double erf_(float *);
00338     extern double erfc_(float *);
00339     extern integer f_back(alist *);
00340     extern integer f_clos(cllist *);
00341     extern integer f_end(alist *);
00342     extern void f_exit(void);
00343     extern integer f_inqu(inlist *);
00344     extern integer f_open(olist *);
00345     extern integer f_rew(alist *);
00346     extern int flush_(void);
00347     extern void getarg_(integer *, char *, ftnlen);
00348     extern void getenv_(char *, char *, ftnlen, ftnlen);
00349     extern short h_abs(short *);
00350     extern short h_dim(short *, short *);
00351     extern short h_dnnt(double *);
00352     extern short h_indx(char *, char *, ftnlen, ftnlen);
00353     extern short h_len(char *, ftnlen);
00354     extern short h_mod(short *, short *);
00355     extern short h_nint(float *);
00356     extern short h_sign(short *, short *);
00357     extern short hl_ge(char *, char *, ftnlen, ftnlen);
00358     extern short hl_gt(char *, char *, ftnlen, ftnlen);
00359     extern short hl_le(char *, char *, ftnlen, ftnlen);
00360     extern short hl_lt(char *, char *, ftnlen, ftnlen);
00361     extern integer i_abs(integer *);
00362     extern integer i_dim(integer *, integer *);
00363     extern integer i_dnnt(double *);
00364     extern integer i_indx(char *, char *, ftnlen, ftnlen);
00365     extern integer i_len(char *, ftnlen);
00366     extern integer i_mod(integer *, integer *);
00367     extern integer i_nint(float *);
00368     extern integer i_sign(integer *, integer *);
00369     extern integer iargc_(void);
00370     extern ftnlen l_ge(char *, char *, ftnlen, ftnlen);
00371     extern ftnlen l_gt(char *, char *, ftnlen, ftnlen);
00372     extern ftnlen l_le(char *, char *, ftnlen, ftnlen);
00373     extern ftnlen l_lt(char *, char *, ftnlen, ftnlen);
00374     extern void pow_ci(f2c_complex *, f2c_complex *, integer *);
00375     extern double pow_dd(double *, double *);
00376     extern double pow_di(double *, integer *);
00377     extern short pow_hh(short *, shortint *);
00378     extern integer pow_ii(integer *, integer *);
00379     /* extern double pow_ri(float *, integer *); */
00380     extern void pow_zi(doublecomplex *, doublecomplex *, integer *);
00381     extern void pow_zz(doublecomplex *, doublecomplex *, doublecomplex *);
00382     extern double r_abs(float *);
00383     extern double r_acos(float *);
00384     extern double r_asin(float *);
00385     extern double r_atan(float *);
00386     extern double r_atn2(float *, float *);
00387     extern void r_cnjg(f2c_complex *, f2c_complex *);
00388     extern double r_cos(float *);
00389     extern double r_cosh(float *);
00390     extern double r_dim(float *, float *);
00391     extern double r_exp(float *);
00392     extern double r_imag(f2c_complex *);
00393     extern double r_int(float *);
00394     extern double r_lg10(float *);
00395     extern double r_log(float *);
00396     extern double r_mod(float *, float *);
00397     extern double r_nint(float *);
00398     extern double r_sign(float *, float *);
00399     extern double r_sin(float *);
00400     extern double r_sinh(float *);
00401     extern double r_sqrt(float *);
00402     extern double r_tan(float *);
00403     extern double r_tanh(float *);
00404     extern void s_cat(char *, char **, integer *, integer *, ftnlen);
00405     extern integer s_cmp(char *, char *, ftnlen, ftnlen);
00406     extern void s_copy(char *, char *, ftnlen, ftnlen);
00407     extern int s_paus(char *, ftnlen);
00408     extern integer s_rdfe(cilist *);
00409     extern integer s_rdue(cilist *);
00410     extern integer s_rnge(char *, integer, char *, integer);
00411     extern integer s_rsfe(cilist *);
00412     extern integer s_rsfi(icilist *);
00413     extern integer s_rsle(cilist *);
00414     extern integer s_rsli(icilist *);
00415     extern integer s_rsne(cilist *);
00416     extern integer s_rsni(icilist *);
00417     extern integer s_rsue(cilist *);
00418     extern int s_stop(char *, ftnlen);
00419     extern integer s_wdfe(cilist *);
00420     extern integer s_wdue(cilist *);
00421     extern integer s_wsfe(cilist *);
00422     extern integer s_wsfi(icilist *);
00423     extern integer s_wsle(cilist *);
00424     extern integer s_wsli(icilist *);
00425     extern integer s_wsne(cilist *);
00426     extern integer s_wsni(icilist *);
00427     extern integer s_wsue(cilist *);
00428     extern void sig_die(char *, int);
00429     extern integer signal_(integer *, void (*)(int));
00430     extern int system_(char *, ftnlen);
00431     extern double z_abs(doublecomplex *);
00432     extern void z_cos(doublecomplex *, doublecomplex *);
00433     extern void z_div(doublecomplex *, doublecomplex *, doublecomplex *);
00434     extern void z_exp(doublecomplex *, doublecomplex *);
00435     extern void z_log(doublecomplex *, doublecomplex *);
00436     extern void z_sin(doublecomplex *, doublecomplex *);
00437     extern void z_sqrt(doublecomplex *, doublecomplex *);
00438 }
00439 #endif /* __cplusplus  */
00440 
00441 #endif /* _F2C_INCLUDE_H */