Lapack++
|
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 */