cfortran.h

Go to the documentation of this file.
00001 /* cfortran.h  4.4 */
00002 /* http://www-zeus.desy.de/~burow/cfortran/                   */
00003 /* Burkhard Burow  burow@desy.de                 1990 - 2002. */
00004 
00005 #ifndef __CFORTRAN_LOADED
00006 #define __CFORTRAN_LOADED
00007 
00008 /* 
00009    THIS FILE IS PROPERTY OF BURKHARD BUROW. IF YOU ARE USING THIS FILE YOU
00010    SHOULD ALSO HAVE ACCESS TO CFORTRAN.DOC WHICH PROVIDES TERMS FOR USING,
00011    MODIFYING, COPYING AND DISTRIBUTING THE CFORTRAN.H PACKAGE.
00012 */
00013 
00014 /* The following modifications were made by the authors of CFITSIO or by me. 
00015  * They are flagged below with CFITSIO, the author's initials, or KMCCARTY.
00016  * PDW = Peter Wilson
00017  * DM  = Doug Mink
00018  * LEB = Lee E Brotzman
00019  * MR  = Martin Reinecke
00020  * WDP = William D Pence
00021  * -- Kevin McCarty, for Debian (19 Dec. 2005) */
00022 
00023 /*******
00024    Modifications:
00025       Oct 1997: Changed symbol name extname to appendus (PDW/HSTX)
00026                 (Conflicted with a common variable name in FTOOLS)
00027       Nov 1997: If g77Fortran defined, also define f2cFortran (PDW/HSTX)
00028       Feb 1998: Let VMS see the NUM_ELEMS code. Lets programs treat
00029                 single strings as vectors with single elements
00030       Nov 1999: If macintoxh defined, also define f2cfortran (for Mac OS-X)
00031       Apr 2000: If WIN32 defined, also define PowerStationFortran and
00032                 VISUAL_CPLUSPLUS (Visual C++)
00033       Jun 2000: If __GNUC__ and linux defined, also define f2cFortran
00034                 (linux/gcc environment detection)
00035       Apr 2002: If __CYGWIN__ is defined, also define f2cFortran
00036       Nov 2002: If __APPLE__ defined, also define f2cfortran (for Mac OS-X)
00037 
00038       Nov 2003: If __INTEL_COMPILER or INTEL_COMPILER defined, also define
00039                 f2cFortran (KMCCARTY)
00040       Dec 2005: If f2cFortran is defined, enforce REAL functions in FORTRAN
00041                 returning "double" in C.  This was one of the items on
00042                 Burkhard's TODO list. (KMCCARTY)
00043       Dec 2005: Modifications to support 8-byte integers. (MR)
00044                 USE AT YOUR OWN RISK!
00045       Feb 2006  Added logic to typedef the symbol 'LONGLONG' to an appropriate
00046                 intrinsic 8-byte integer datatype  (WDP)
00047       Apr 2006: Modifications to support gfortran (and g77 with -fno-f2c flag)
00048                 since by default it returns "float" for FORTRAN REAL function.
00049                 (KMCCARTY)
00050       May 2008: Revert commenting out of "extern" in COMMON_BLOCK_DEF macro.
00051                 Add braces around do-nothing ";" in 3 empty while blocks to
00052                 get rid of compiler warnings.  Thanks to ROOT developers
00053                 Jacek Holeczek and Rene Brun for these suggestions. (KMCCARTY)
00054  *******/
00055 
00056 /* 
00057   Avoid symbols already used by compilers and system *.h:
00058   __ - OSF1 zukal06 V3.0 347 alpha, cc -c -std1 cfortest.c
00059 
00060 */
00061 
00062 /* 
00063    Determine what 8-byte integer data type is available.
00064   'long long' is now supported by most compilers, but older
00065   MS Visual C++ compilers before V7.0 use '__int64' instead. (WDP)
00066 */
00067 
00068 #ifndef LONGLONG_TYPE   /* this may have been previously defined */
00069 #if defined(_MSC_VER)   /* Microsoft Visual C++ */
00070 
00071 #if (_MSC_VER < 1300)   /* versions earlier than V7.0 do not have 'long long' */
00072     typedef __int64 LONGLONG;
00073 #else                   /* newer versions do support 'long long' */
00074     typedef long long LONGLONG; 
00075 #endif
00076 
00077 #else
00078     typedef long long LONGLONG; 
00079 #endif
00080 
00081 #define LONGLONG_TYPE
00082 #endif  
00083 
00084 
00085 /* First prepare for the C compiler. */
00086 
00087 #ifndef ANSI_C_preprocessor /* i.e. user can override. */
00088 #ifdef __CF__KnR
00089 #define ANSI_C_preprocessor 0
00090 #else
00091 #ifdef __STDC__
00092 #define ANSI_C_preprocessor 1
00093 #else
00094 #define _cfleft             1
00095 #define _cfright 
00096 #define _cfleft_cfright     0
00097 #define ANSI_C_preprocessor _cfleft/**/_cfright
00098 #endif
00099 #endif
00100 #endif
00101 
00102 #if ANSI_C_preprocessor
00103 #define _0(A,B)   A##B
00104 #define  _(A,B)   _0(A,B)  /* see cat,xcat of K&R ANSI C p. 231 */
00105 #define _2(A,B)   A##B     /* K&R ANSI C p.230: .. identifier is not replaced */
00106 #define _3(A,B,C) _(A,_(B,C))
00107 #else                      /* if it turns up again during rescanning.         */
00108 #define  _(A,B)   A/**/B
00109 #define _2(A,B)   A/**/B
00110 #define _3(A,B,C) A/**/B/**/C
00111 #endif
00112 
00113 #if (defined(vax)&&defined(unix)) || (defined(__vax__)&&defined(__unix__))
00114 #define VAXUltrix
00115 #endif
00116 
00117 #include <stdio.h>     /* NULL [in all machines stdio.h]                      */
00118 #include <string.h>    /* strlen, memset, memcpy, memchr.                     */
00119 #if !( defined(VAXUltrix) || defined(sun) || (defined(apollo)&&!defined(__STDCPP__)) )
00120 #include <stdlib.h>    /* malloc,free                                         */
00121 #else
00122 #include <malloc.h>    /* Had to be removed for DomainOS h105 10.4 sys5.3 425t*/
00123 #ifdef apollo
00124 #define __CF__APOLLO67 /* __STDCPP__ is in Apollo 6.8 (i.e. ANSI) and onwards */
00125 #endif
00126 #endif
00127 
00128 #if !defined(__GNUC__) && !defined(__sun) && (defined(sun)||defined(VAXUltrix)||defined(lynx))
00129 #define __CF__KnR     /* Sun, LynxOS and VAX Ultrix cc only supports K&R.     */
00130                       /* Manually define __CF__KnR for HP if desired/required.*/
00131 #endif                /*       i.e. We will generate Kernighan and Ritchie C. */
00132 /* Note that you may define __CF__KnR before #include cfortran.h, in order to
00133 generate K&R C instead of the default ANSI C. The differences are mainly in the
00134 function prototypes and declarations. All machines, except the Apollo, work
00135 with either style. The Apollo's argument promotion rules require ANSI or use of
00136 the obsolete std_$call which we have not implemented here. Hence on the Apollo,
00137 only C calling FORTRAN subroutines will work using K&R style.*/
00138 
00139 
00140 /* Remainder of cfortran.h depends on the Fortran compiler. */
00141 
00142 /* 11/29/2003 (KMCCARTY): add *INTEL_COMPILER symbols here */
00143 /* 04/05/2006 (KMCCARTY): add gFortran symbol here */
00144 #if defined(CLIPPERFortran) || defined(pgiFortran) || defined(__INTEL_COMPILER) || defined(INTEL_COMPILER) || defined(gFortran)
00145 #define f2cFortran
00146 #endif
00147 
00148 /* VAX/VMS does not let us \-split long #if lines. */ 
00149 /* Split #if into 2 because some HP-UX can't handle long #if */
00150 #if !(defined(NAGf90Fortran)||defined(f2cFortran)||defined(hpuxFortran)||defined(apolloFortran)||defined(sunFortran)||defined(IBMR2Fortran)||defined(CRAYFortran))
00151 #if !(defined(mipsFortran)||defined(DECFortran)||defined(vmsFortran)||defined(CONVEXFortran)||defined(PowerStationFortran)||defined(AbsoftUNIXFortran)||defined(AbsoftProFortran)||defined(SXFortran))
00152 /* If no Fortran compiler is given, we choose one for the machines we know.   */
00153 #if defined(lynx) || defined(VAXUltrix)
00154 #define f2cFortran    /* Lynx:      Only support f2c at the moment.
00155                          VAXUltrix: f77 behaves like f2c.
00156                            Support f2c or f77 with gcc, vcc with f2c. 
00157                            f77 with vcc works, missing link magic for f77 I/O.*/
00158 #endif
00159 /* 04/13/00 DM (CFITSIO): Add these lines for NT */
00160 /*   with PowerStationFortran and and Visual C++ */
00161 #if defined(WIN32) && !defined(__CYGWIN__)
00162 #define PowerStationFortran   
00163 #define VISUAL_CPLUSPLUS
00164 #endif
00165 #if defined(g77Fortran)                        /* 11/03/97 PDW (CFITSIO) */
00166 #define f2cFortran
00167 #endif
00168 #if        defined(__CYGWIN__)                 /* 04/11/02 LEB (CFITSIO) */
00169 #define       f2cFortran 
00170 #endif
00171 #if        defined(__GNUC__) && defined(linux) /* 06/21/00 PDW (CFITSIO) */
00172 #define       f2cFortran 
00173 #endif
00174 #if defined(macintosh)                         /* 11/1999 (CFITSIO) */
00175 #define f2cFortran
00176 #endif
00177 #if defined(__APPLE__)                         /* 11/2002 (CFITSIO) */
00178 #define f2cFortran
00179 #endif
00180 #if defined(__FreeBSD__)
00181 #define f2cFortran
00182 #endif
00183 #if defined(__hpux)             /* 921107: Use __hpux instead of __hp9000s300 */
00184 #define       hpuxFortran       /*         Should also allow hp9000s7/800 use.*/
00185 #endif
00186 #if       defined(apollo)
00187 #define           apolloFortran /* __CF__APOLLO67 also defines some behavior. */
00188 #endif
00189 #if          defined(sun) || defined(__sun) 
00190 #define              sunFortran
00191 #endif
00192 #if       defined(_IBMR2)
00193 #define            IBMR2Fortran
00194 #endif
00195 #if        defined(_CRAY)
00196 #define             CRAYFortran /*       _CRAYT3E also defines some behavior. */
00197 #endif
00198 #if        defined(_SX)
00199 #define               SXFortran
00200 #endif
00201 #if         defined(mips) || defined(__mips)
00202 #define             mipsFortran
00203 #endif
00204 #if          defined(vms) || defined(__vms)
00205 #define              vmsFortran
00206 #endif
00207 #if      defined(__alpha) && defined(__unix__)
00208 #define              DECFortran
00209 #endif
00210 #if   defined(__convex__)
00211 #define           CONVEXFortran
00212 #endif
00213 #if   defined(VISUAL_CPLUSPLUS)
00214 #define     PowerStationFortran
00215 #endif
00216 #endif /* ...Fortran */
00217 #endif /* ...Fortran */
00218 
00219 /* Split #if into 2 because some HP-UX can't handle long #if */
00220 #if !(defined(NAGf90Fortran)||defined(f2cFortran)||defined(hpuxFortran)||defined(apolloFortran)||defined(sunFortran)||defined(IBMR2Fortran)||defined(CRAYFortran))
00221 #if !(defined(mipsFortran)||defined(DECFortran)||defined(vmsFortran)||defined(CONVEXFortran)||defined(PowerStationFortran)||defined(AbsoftUNIXFortran)||defined(AbsoftProFortran)||defined(SXFortran))
00222 /* If your compiler barfs on ' #error', replace # with the trigraph for #     */
00223  #error "cfortran.h:  Can't find your environment among:\
00224     - GNU gcc (g77) on Linux.                                            \
00225     - MIPS cc and f77 2.0. (e.g. Silicon Graphics, DECstations, ...)     \
00226     - IBM AIX XL C and FORTRAN Compiler/6000 Version 01.01.0000.0000     \
00227     - VAX   VMS CC 3.1 and FORTRAN 5.4.                                  \
00228     - Alpha VMS DEC C 1.3 and DEC FORTRAN 6.0.                           \
00229     - Alpha OSF DEC C and DEC Fortran for OSF/1 AXP Version 1.2          \
00230     - Apollo DomainOS 10.2 (sys5.3) with f77 10.7 and cc 6.7.            \
00231     - CRAY                                                               \
00232     - NEC SX-4 SUPER-UX                                                  \
00233     - CONVEX                                                             \
00234     - Sun                                                                \
00235     - PowerStation Fortran with Visual C++                               \
00236     - HP9000s300/s700/s800 Latest test with: HP-UX A.08.07 A 9000/730    \
00237     - LynxOS: cc or gcc with f2c.                                        \
00238     - VAXUltrix: vcc,cc or gcc with f2c. gcc or cc with f77.             \
00239     -            f77 with vcc works; but missing link magic for f77 I/O. \
00240     -            NO fort. None of gcc, cc or vcc generate required names.\
00241     - f2c/g77:   Use #define    f2cFortran, or cc -Df2cFortran           \
00242     - gfortran:  Use #define    gFortran,   or cc -DgFortran             \
00243                  (also necessary for g77 with -fno-f2c option)           \
00244     - NAG f90: Use #define NAGf90Fortran, or cc -DNAGf90Fortran          \
00245     - Absoft UNIX F77: Use #define AbsoftUNIXFortran or cc -DAbsoftUNIXFortran \
00246     - Absoft Pro Fortran: Use #define AbsoftProFortran \
00247     - Portland Group Fortran: Use #define pgiFortran \
00248     - Intel Fortran: Use #define INTEL_COMPILER"
00249 /* Compiler must throw us out at this point! */
00250 #endif
00251 #endif
00252 
00253 
00254 #if defined(VAXC) && !defined(__VAXC)
00255 #define OLD_VAXC
00256 #pragma nostandard                       /* Prevent %CC-I-PARAMNOTUSED.       */
00257 #endif
00258 
00259 /* Throughout cfortran.h we use: UN = Uppercase Name.  LN = Lowercase Name.   */
00260 
00261 /* "extname" changed to "appendus" below (CFITSIO) */
00262 #if defined(f2cFortran) || defined(NAGf90Fortran) || defined(DECFortran) || defined(mipsFortran) || defined(apolloFortran) || defined(sunFortran) || defined(CONVEXFortran) || defined(SXFortran) || defined(appendus)
00263 #define CFC_(UN,LN)            _(LN,_)      /* Lowercase FORTRAN symbols.     */
00264 #define orig_fcallsc(UN,LN)    CFC_(UN,LN)
00265 #else 
00266 #if defined(CRAYFortran) || defined(PowerStationFortran) || defined(AbsoftProFortran)
00267 #ifdef _CRAY          /* (UN), not UN, circumvents CRAY preprocessor bug.     */
00268 #define CFC_(UN,LN)            (UN)         /* Uppercase FORTRAN symbols.     */
00269 #else                 /* At least VISUAL_CPLUSPLUS barfs on (UN), so need UN. */
00270 #define CFC_(UN,LN)            UN           /* Uppercase FORTRAN symbols.     */
00271 #endif
00272 #define orig_fcallsc(UN,LN)    CFC_(UN,LN)  /* CRAY insists on arg.'s here.   */
00273 #else  /* For following machines one may wish to change the fcallsc default.  */
00274 #define CF_SAME_NAMESPACE
00275 #ifdef vmsFortran
00276 #define CFC_(UN,LN)            LN           /* Either case FORTRAN symbols.   */
00277      /* BUT we usually use UN for C macro to FORTRAN routines, so use LN here,*/
00278      /* because VAX/VMS doesn't do recursive macros.                          */
00279 #define orig_fcallsc(UN,LN)    UN
00280 #else      /* HP-UX without +ppu or IBMR2 without -qextname. NOT reccomended. */
00281 #define CFC_(UN,LN)            LN           /* Lowercase FORTRAN symbols.     */
00282 #define orig_fcallsc(UN,LN)    CFC_(UN,LN)
00283 #endif /*  vmsFortran */
00284 #endif /* CRAYFortran PowerStationFortran */
00285 #endif /* ....Fortran */
00286 
00287 #define fcallsc(UN,LN)               orig_fcallsc(UN,LN)
00288 #define preface_fcallsc(P,p,UN,LN)   CFC_(_(P,UN),_(p,LN))
00289 #define  append_fcallsc(P,p,UN,LN)   CFC_(_(UN,P),_(LN,p))
00290 
00291 #define C_FUNCTION(UN,LN)            fcallsc(UN,LN)      
00292 #define FORTRAN_FUNCTION(UN,LN)      CFC_(UN,LN)
00293 
00294 #ifndef COMMON_BLOCK
00295 #ifndef CONVEXFortran
00296 #ifndef CLIPPERFortran
00297 #if     !(defined(AbsoftUNIXFortran)||defined(AbsoftProFortran))
00298 #define COMMON_BLOCK(UN,LN)          CFC_(UN,LN)
00299 #else
00300 #define COMMON_BLOCK(UN,LN)          _(_C,LN)
00301 #endif  /* AbsoftUNIXFortran or AbsoftProFortran */
00302 #else
00303 #define COMMON_BLOCK(UN,LN)          _(LN,__)
00304 #endif  /* CLIPPERFortran */
00305 #else
00306 #define COMMON_BLOCK(UN,LN)          _3(_,LN,_)
00307 #endif  /* CONVEXFortran */
00308 #endif  /* COMMON_BLOCK */
00309 
00310 #ifndef DOUBLE_PRECISION
00311 #if defined(CRAYFortran) && !defined(_CRAYT3E)
00312 #define DOUBLE_PRECISION long double
00313 #else
00314 #define DOUBLE_PRECISION double
00315 #endif
00316 #endif
00317 
00318 #ifndef FORTRAN_REAL
00319 #if defined(CRAYFortran) &&  defined(_CRAYT3E)
00320 #define FORTRAN_REAL double
00321 #else
00322 #define FORTRAN_REAL float
00323 #endif
00324 #endif
00325 
00326 #ifdef CRAYFortran
00327 #ifdef _CRAY
00328 #include <fortran.h>
00329 #else
00330 #include "fortran.h"  /* i.e. if crosscompiling assume user has file. */
00331 #endif
00332 #define FLOATVVVVVVV_cfPP (FORTRAN_REAL *)   /* Used for C calls FORTRAN.     */
00333 /* CRAY's double==float but CRAY says pointers to doubles and floats are diff.*/
00334 #define VOIDP  (void *)  /* When FORTRAN calls C, we don't know if C routine 
00335                             arg.'s have been declared float *, or double *.   */
00336 #else
00337 #define FLOATVVVVVVV_cfPP
00338 #define VOIDP
00339 #endif
00340 
00341 #ifdef vmsFortran
00342 #if    defined(vms) || defined(__vms)
00343 #include <descrip.h>
00344 #else
00345 #include "descrip.h"  /* i.e. if crosscompiling assume user has file. */
00346 #endif
00347 #endif
00348 
00349 #ifdef sunFortran
00350 #if defined(sun) || defined(__sun)
00351 #include <math.h>     /* Sun's FLOATFUNCTIONTYPE, ASSIGNFLOAT, RETURNFLOAT.  */
00352 #else
00353 #include "math.h"     /* i.e. if crosscompiling assume user has file. */
00354 #endif
00355 /* At least starting with the default C compiler SC3.0.1 of SunOS 5.3,
00356  * FLOATFUNCTIONTYPE, ASSIGNFLOAT, RETURNFLOAT are not required and not in
00357  * <math.h>, since sun C no longer promotes C float return values to doubles.
00358  * Therefore, only use them if defined.
00359  * Even if gcc is being used, assume that it exhibits the Sun C compiler
00360  * behavior in order to be able to use *.o from the Sun C compiler.
00361  * i.e. If FLOATFUNCTIONTYPE, etc. are in math.h, they required by gcc.
00362  */
00363 #endif
00364 
00365 #ifndef apolloFortran
00366 #define COMMON_BLOCK_DEF(DEFINITION, NAME) extern DEFINITION NAME
00367 #define CF_NULL_PROTO
00368 #else                                         /* HP doesn't understand #elif. */
00369 /* Without ANSI prototyping, Apollo promotes float functions to double.    */
00370 /* Note that VAX/VMS, IBM, Mips choke on 'type function(...);' prototypes. */
00371 #define CF_NULL_PROTO ...
00372 #ifndef __CF__APOLLO67
00373 #define COMMON_BLOCK_DEF(DEFINITION, NAME) \
00374  DEFINITION NAME __attribute((__section(NAME)))
00375 #else
00376 #define COMMON_BLOCK_DEF(DEFINITION, NAME) \
00377  DEFINITION NAME #attribute[section(NAME)]
00378 #endif
00379 #endif
00380 
00381 #ifdef __cplusplus
00382 #undef  CF_NULL_PROTO
00383 #define CF_NULL_PROTO  ...
00384 #endif
00385 
00386 
00387 #ifndef USE_NEW_DELETE
00388 #ifdef __cplusplus
00389 #define USE_NEW_DELETE 1
00390 #else
00391 #define USE_NEW_DELETE 0
00392 #endif
00393 #endif
00394 #if USE_NEW_DELETE
00395 #define _cf_malloc(N) new char[N]
00396 #define _cf_free(P)   delete[] P
00397 #else
00398 #define _cf_malloc(N) (char *)malloc(N)
00399 #define _cf_free(P)   free(P)
00400 #endif
00401 
00402 #ifdef mipsFortran
00403 #define CF_DECLARE_GETARG         int f77argc; char **f77argv
00404 #define CF_SET_GETARG(ARGC,ARGV)  f77argc = ARGC; f77argv = ARGV
00405 #else
00406 #define CF_DECLARE_GETARG
00407 #define CF_SET_GETARG(ARGC,ARGV)
00408 #endif
00409 
00410 #ifdef OLD_VAXC                          /* Allow %CC-I-PARAMNOTUSED.         */
00411 #pragma standard                         
00412 #endif
00413 
00414 #define AcfCOMMA ,
00415 #define AcfCOLON ;
00416 
00417 /*-------------------------------------------------------------------------*/
00418 
00419 /*               UTILITIES USED WITHIN CFORTRAN.H                          */
00420 
00421 #define _cfMIN(A,B) (A<B?A:B)
00422 
00423 /* 970211 - XIX.145:
00424    firstindexlength  - better name is all_but_last_index_lengths
00425    secondindexlength - better name is         last_index_length
00426  */
00427 #define  firstindexlength(A) (sizeof(A[0])==1 ? 1 : (sizeof(A) / sizeof(A[0])) )
00428 #define secondindexlength(A) (sizeof(A[0])==1 ?      sizeof(A) : sizeof(A[0])  )
00429 
00430 /* Behavior of FORTRAN LOGICAL. All machines' LOGICAL is same size as C's int.
00431 Conversion is automatic except for arrays which require F2CLOGICALV/C2FLOGICALV.
00432 f2c, MIPS f77 [DECstation, SGI], VAX Ultrix f77,
00433 HP-UX f77                                        : as in C.
00434 VAX/VMS FORTRAN, VAX Ultrix fort,
00435 Absoft Unix Fortran, IBM RS/6000 xlf             : LS Bit = 0/1 = TRUE/FALSE.
00436 Apollo                                           : neg.   = TRUE, else FALSE. 
00437 [Apollo accepts -1 as TRUE for function values, but NOT all other neg. values.]
00438 [DECFortran for Ultrix RISC is also called f77 but is the same as VAX/VMS.]   
00439 [MIPS f77 treats .eqv./.neqv. as .eq./.ne. and hence requires LOGICAL_STRICT.]*/
00440 
00441 #if defined(NAGf90Fortran) || defined(f2cFortran) || defined(mipsFortran) || defined(PowerStationFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran) || defined(AbsoftProFortran) || defined(SXFortran)
00442 /* SX/PowerStationFortran have 0 and 1 defined, others are neither T nor F.   */
00443 /* hpuxFortran800 has 0 and 0x01000000 defined. Others are unknown.           */
00444 #define LOGICAL_STRICT      /* Other Fortran have .eqv./.neqv. == .eq./.ne.   */
00445 #endif
00446 
00447 #define C2FLOGICALV(A,I) \
00448  do {int __i; for(__i=0;__i<I;__i++) A[__i]=C2FLOGICAL(A[__i]); } while (0)
00449 #define F2CLOGICALV(A,I) \
00450  do {int __i; for(__i=0;__i<I;__i++) A[__i]=F2CLOGICAL(A[__i]); } while (0)
00451 
00452 #if defined(apolloFortran)
00453 #define C2FLOGICAL(L) ((L)?-1:(L)&~((unsigned)1<<sizeof(int)*8-1))
00454 #define F2CLOGICAL(L) ((L)<0?(L):0) 
00455 #else
00456 #if defined(CRAYFortran)
00457 #define C2FLOGICAL(L) _btol(L)
00458 #define F2CLOGICAL(L) _ltob(&(L))     /* Strangely _ltob() expects a pointer. */
00459 #else
00460 #if defined(IBMR2Fortran) || defined(vmsFortran) || defined(DECFortran) || defined(AbsoftUNIXFortran)
00461 /* How come no AbsoftProFortran ? */
00462 #define C2FLOGICAL(L) ((L)?(L)|1:(L)&~(int)1)
00463 #define F2CLOGICAL(L) ((L)&1?(L):0)
00464 #else
00465 #if defined(CONVEXFortran)
00466 #define C2FLOGICAL(L) ((L) ? ~0 : 0 )
00467 #define F2CLOGICAL(L) (L)
00468 #else   /* others evaluate LOGICALs as for C. */
00469 #define C2FLOGICAL(L) (L)
00470 #define F2CLOGICAL(L) (L)
00471 #ifndef LOGICAL_STRICT
00472 #undef  C2FLOGICALV
00473 #undef  F2CLOGICALV
00474 #define C2FLOGICALV(A,I)
00475 #define F2CLOGICALV(A,I)
00476 #endif  /* LOGICAL_STRICT                     */
00477 #endif  /* CONVEXFortran || All Others        */
00478 #endif  /* IBMR2Fortran vmsFortran DECFortran AbsoftUNIXFortran */
00479 #endif  /* CRAYFortran                        */
00480 #endif  /* apolloFortran                      */
00481 
00482 /* 970514 - In addition to CRAY, there may be other machines
00483             for which LOGICAL_STRICT makes no sense. */
00484 #if defined(LOGICAL_STRICT) && !defined(CRAYFortran)
00485 /* Force C2FLOGICAL to generate only the values for either .TRUE. or .FALSE.
00486    SX/PowerStationFortran only have 0 and 1 defined.
00487    Elsewhere, only needed if you want to do:
00488      logical lvariable
00489      if (lvariable .eq.  .true.) then       ! (1)
00490    instead of
00491      if (lvariable .eqv. .true.) then       ! (2)
00492    - (1) may not even be FORTRAN/77 and that Apollo's f77 and IBM's xlf
00493      refuse to compile (1), so you are probably well advised to stay away from 
00494      (1) and from LOGICAL_STRICT.
00495    - You pay a (slight) performance penalty for using LOGICAL_STRICT. */
00496 #undef  C2FLOGICAL
00497 #ifdef hpuxFortran800
00498 #define C2FLOGICAL(L) ((L)?0x01000000:0)
00499 #else
00500 #if defined(apolloFortran) || defined(vmsFortran) || defined(DECFortran)
00501 #define C2FLOGICAL(L) ((L)?-1:0) /* These machines use -1/0 for .true./.false.*/
00502 #else
00503 #define C2FLOGICAL(L) ((L)? 1:0) /* All others     use +1/0 for .true./.false.*/
00504 #endif
00505 #endif
00506 #endif /* LOGICAL_STRICT */
00507 
00508 /* Convert a vector of C strings into FORTRAN strings. */
00509 #ifndef __CF__KnR
00510 static char *c2fstrv(char* cstr, char *fstr, int elem_len, int sizeofcstr)
00511 #else
00512 static char *c2fstrv(      cstr,       fstr,     elem_len,     sizeofcstr)
00513                      char* cstr; char *fstr; int elem_len; int sizeofcstr;
00514 #endif
00515 { int i,j;
00516 /* elem_len includes \0 for C strings. Fortran strings don't have term. \0.
00517    Useful size of string must be the same in both languages. */
00518 for (i=0; i<sizeofcstr/elem_len; i++) {
00519   for (j=1; j<elem_len && *cstr; j++) *fstr++ = *cstr++;
00520   cstr += 1+elem_len-j;
00521   for (; j<elem_len; j++) *fstr++ = ' ';
00522 } /* 95109 - Seems to be returning the original fstr. */
00523 return fstr-sizeofcstr+sizeofcstr/elem_len; }
00524 
00525 /* Convert a vector of FORTRAN strings into C strings. */
00526 #ifndef __CF__KnR
00527 static char *f2cstrv(char *fstr, char* cstr, int elem_len, int sizeofcstr)
00528 #else
00529 static char *f2cstrv(      fstr,       cstr,     elem_len,     sizeofcstr)
00530                      char *fstr; char* cstr; int elem_len; int sizeofcstr; 
00531 #endif
00532 { int i,j;
00533 /* elem_len includes \0 for C strings. Fortran strings don't have term. \0.
00534    Useful size of string must be the same in both languages. */
00535 cstr += sizeofcstr;
00536 fstr += sizeofcstr - sizeofcstr/elem_len;
00537 for (i=0; i<sizeofcstr/elem_len; i++) {
00538   *--cstr = '\0';
00539   for (j=1; j<elem_len; j++) *--cstr = *--fstr;
00540 } return cstr; }
00541 
00542 /* kill the trailing char t's in string s. */
00543 #ifndef __CF__KnR
00544 static char *kill_trailing(char *s, char t)
00545 #else
00546 static char *kill_trailing(      s,      t) char *s; char t;
00547 #endif
00548 {char *e; 
00549 e = s + strlen(s);
00550 if (e>s) {                           /* Need this to handle NULL string.*/
00551   while (e>s && *--e==t) {;}         /* Don't follow t's past beginning. */
00552   e[*e==t?0:1] = '\0';               /* Handle s[0]=t correctly.       */
00553 } return s; }
00554 
00555 /* kill_trailingn(s,t,e) will kill the trailing t's in string s. e normally 
00556 points to the terminating '\0' of s, but may actually point to anywhere in s.
00557 s's new '\0' will be placed at e or earlier in order to remove any trailing t's.
00558 If e<s string s is left unchanged. */ 
00559 #ifndef __CF__KnR
00560 static char *kill_trailingn(char *s, char t, char *e)
00561 #else
00562 static char *kill_trailingn(      s,      t,       e) char *s; char t; char *e;
00563 #endif
00564 { 
00565 if (e==s) *e = '\0';                 /* Kill the string makes sense here.*/
00566 else if (e>s) {                      /* Watch out for neg. length string.*/
00567   while (e>s && *--e==t){;}          /* Don't follow t's past beginning. */
00568   e[*e==t?0:1] = '\0';               /* Handle s[0]=t correctly.       */
00569 } return s; }
00570 
00571 /* Note the following assumes that any element which has t's to be chopped off,
00572 does indeed fill the entire element. */
00573 #ifndef __CF__KnR
00574 static char *vkill_trailing(char* cstr, int elem_len, int sizeofcstr, char t)
00575 #else
00576 static char *vkill_trailing(      cstr,     elem_len,     sizeofcstr,      t)
00577                             char* cstr; int elem_len; int sizeofcstr; char t;
00578 #endif
00579 { int i;
00580 for (i=0; i<sizeofcstr/elem_len; i++) /* elem_len includes \0 for C strings. */
00581   kill_trailingn(cstr+elem_len*i,t,cstr+elem_len*(i+1)-1);
00582 return cstr; }
00583 
00584 #ifdef vmsFortran
00585 typedef struct dsc$descriptor_s fstring;
00586 #define DSC$DESCRIPTOR_A(DIMCT)                                                \
00587 struct {                                                                       \
00588   unsigned short dsc$w_length;          unsigned char    dsc$b_dtype;          \
00589   unsigned char  dsc$b_class;                    char   *dsc$a_pointer;        \
00590            char  dsc$b_scale;           unsigned char    dsc$b_digits;         \
00591   struct {                                                                     \
00592     unsigned                   : 3;       unsigned dsc$v_fl_binscale : 1;      \
00593     unsigned dsc$v_fl_redim    : 1;       unsigned dsc$v_fl_column   : 1;      \
00594     unsigned dsc$v_fl_coeff    : 1;       unsigned dsc$v_fl_bounds   : 1;      \
00595   } dsc$b_aflags;                                                              \
00596   unsigned char  dsc$b_dimct;           unsigned long    dsc$l_arsize;         \
00597            char *dsc$a_a0;                       long    dsc$l_m [DIMCT];      \
00598   struct {                                                                     \
00599     long dsc$l_l;                         long dsc$l_u;                        \
00600   } dsc$bounds [DIMCT];                                                        \
00601 }
00602 typedef DSC$DESCRIPTOR_A(1) fstringvector;
00603 /*typedef DSC$DESCRIPTOR_A(2) fstringarrarr;
00604   typedef DSC$DESCRIPTOR_A(3) fstringarrarrarr;*/
00605 #define initfstr(F,C,ELEMNO,ELEMLEN)                                           \
00606 ( (F).dsc$l_arsize=  ( (F).dsc$w_length                        =(ELEMLEN) )    \
00607                     *( (F).dsc$l_m[0]=(F).dsc$bounds[0].dsc$l_u=(ELEMNO)  ),   \
00608   (F).dsc$a_a0    =  ( (F).dsc$a_pointer=(C) ) - (F).dsc$w_length          ,(F))
00609 
00610 #endif      /* PDW: 2/10/98 (CFITSIO) -- Let VMS see NUM_ELEMS definitions */
00611 #define _NUM_ELEMS      -1
00612 #define _NUM_ELEM_ARG   -2
00613 #define NUM_ELEMS(A)    A,_NUM_ELEMS
00614 #define NUM_ELEM_ARG(B) *_2(A,B),_NUM_ELEM_ARG
00615 #define TERM_CHARS(A,B) A,B
00616 #ifndef __CF__KnR
00617 static int num_elem(char *strv, unsigned elem_len, int term_char, int num_term)
00618 #else
00619 static int num_elem(      strv,          elem_len,     term_char,     num_term)
00620                     char *strv; unsigned elem_len; int term_char; int num_term;
00621 #endif
00622 /* elem_len is the number of characters in each element of strv, the FORTRAN
00623 vector of strings. The last element of the vector must begin with at least
00624 num_term term_char characters, so that this routine can determine how 
00625 many elements are in the vector. */
00626 {
00627 unsigned num,i;
00628 if (num_term == _NUM_ELEMS || num_term == _NUM_ELEM_ARG) 
00629   return term_char;
00630 if (num_term <=0) num_term = (int)elem_len;
00631 for (num=0; ; num++) {
00632   for (i=0; i<(unsigned)num_term && *strv==term_char; i++,strv++){;}
00633   if (i==(unsigned)num_term) break;
00634   else strv += elem_len-i;
00635 }
00636 if (0) {  /* to prevent not used warnings in gcc (added by ROOT) */
00637    c2fstrv(0, 0, 0, 0); f2cstrv(0, 0, 0, 0); kill_trailing(0, 0);
00638    vkill_trailing(0, 0, 0, 0); num_elem(0, 0, 0, 0);
00639 }
00640 return (int)num;
00641 }
00642 /* #endif removed 2/10/98 (CFITSIO) */
00643 
00644 /*-------------------------------------------------------------------------*/
00645 
00646 /*           UTILITIES FOR C TO USE STRINGS IN FORTRAN COMMON BLOCKS       */
00647 
00648 /* C string TO Fortran Common Block STRing. */
00649 /* DIM is the number of DIMensions of the array in terms of strings, not
00650    characters. e.g. char a[12] has DIM = 0, char a[12][4] has DIM = 1, etc. */
00651 #define C2FCBSTR(CSTR,FSTR,DIM)                                                \
00652  c2fstrv((char *)CSTR, (char *)FSTR, sizeof(FSTR)/cfelementsof(FSTR,DIM)+1,    \
00653          sizeof(FSTR)+cfelementsof(FSTR,DIM))
00654 
00655 /* Fortran Common Block string TO C STRing. */
00656 #define FCB2CSTR(FSTR,CSTR,DIM)                                                \
00657  vkill_trailing(f2cstrv((char *)FSTR, (char *)CSTR,                            \
00658                         sizeof(FSTR)/cfelementsof(FSTR,DIM)+1,                 \
00659                         sizeof(FSTR)+cfelementsof(FSTR,DIM)),                  \
00660                 sizeof(FSTR)/cfelementsof(FSTR,DIM)+1,                         \
00661                 sizeof(FSTR)+cfelementsof(FSTR,DIM), ' ')
00662 
00663 #define cfDEREFERENCE0
00664 #define cfDEREFERENCE1 *
00665 #define cfDEREFERENCE2 **
00666 #define cfDEREFERENCE3 ***
00667 #define cfDEREFERENCE4 ****
00668 #define cfDEREFERENCE5 *****
00669 #define cfelementsof(A,D) (sizeof(A)/sizeof(_(cfDEREFERENCE,D)(A)))
00670 
00671 /*-------------------------------------------------------------------------*/
00672 
00673 /*               UTILITIES FOR C TO CALL FORTRAN SUBROUTINES               */
00674 
00675 /* Define lookup tables for how to handle the various types of variables.  */
00676 
00677 #ifdef OLD_VAXC                                /* Prevent %CC-I-PARAMNOTUSED. */
00678 #pragma nostandard
00679 #endif
00680 
00681 #define ZTRINGV_NUM(I)       I
00682 #define ZTRINGV_ARGFP(I) (*(_2(A,I))) /* Undocumented. For PINT, etc. */
00683 #define ZTRINGV_ARGF(I) _2(A,I)
00684 #ifdef CFSUBASFUN
00685 #define ZTRINGV_ARGS(I) ZTRINGV_ARGF(I)
00686 #else
00687 #define ZTRINGV_ARGS(I) _2(B,I)
00688 #endif
00689 
00690 #define    PBYTE_cfVP(A,B) PINT_cfVP(A,B)
00691 #define  PDOUBLE_cfVP(A,B)
00692 #define   PFLOAT_cfVP(A,B)
00693 #ifdef ZTRINGV_ARGS_allows_Pvariables
00694 /* This allows Pvariables for ARGS. ARGF machinery is above ARGFP.
00695  * B is not needed because the variable may be changed by the Fortran routine,
00696  * but because B is the only way to access an arbitrary macro argument.       */
00697 #define     PINT_cfVP(A,B) int  B = (int)A;              /* For ZSTRINGV_ARGS */
00698 #else
00699 #define     PINT_cfVP(A,B)
00700 #endif
00701 #define PLOGICAL_cfVP(A,B) int *B;      /* Returning LOGICAL in FUNn and SUBn */
00702 #define    PLONG_cfVP(A,B) PINT_cfVP(A,B)
00703 #define   PSHORT_cfVP(A,B) PINT_cfVP(A,B)
00704 
00705 #define        VCF_INT_S(T,A,B) _(T,VVVVVVV_cfTYPE) B = A;
00706 #define        VCF_INT_F(T,A,B) _(T,_cfVCF)(A,B)
00707 /* _cfVCF table is directly mapped to _cfCCC table. */
00708 #define     BYTE_cfVCF(A,B)
00709 #define   DOUBLE_cfVCF(A,B)
00710 #if !defined(__CF__KnR)
00711 #define    FLOAT_cfVCF(A,B)
00712 #else
00713 #define    FLOAT_cfVCF(A,B) FORTRAN_REAL B = A;
00714 #endif
00715 #define      INT_cfVCF(A,B)
00716 #define  LOGICAL_cfVCF(A,B)
00717 #define     LONG_cfVCF(A,B)
00718 #define    SHORT_cfVCF(A,B)
00719 
00720 /* 980416
00721    Cast (void (*)(CF_NULL_PROTO)) causes SunOS CC 4.2 occasionally to barf,
00722    while the following equivalent typedef is fine.
00723    For consistency use the typedef on all machines.
00724  */
00725 typedef void (*cfCAST_FUNCTION)(CF_NULL_PROTO);
00726 
00727 #define VCF(TN,I)       _Icf4(4,V,TN,_(A,I),_(B,I),F)
00728 #define VVCF(TN,AI,BI)  _Icf4(4,V,TN,AI,BI,S)
00729 #define        INT_cfV(T,A,B,F) _(VCF_INT_,F)(T,A,B)
00730 #define       INTV_cfV(T,A,B,F)
00731 #define      INTVV_cfV(T,A,B,F)
00732 #define     INTVVV_cfV(T,A,B,F)
00733 #define    INTVVVV_cfV(T,A,B,F)
00734 #define   INTVVVVV_cfV(T,A,B,F)
00735 #define  INTVVVVVV_cfV(T,A,B,F)
00736 #define INTVVVVVVV_cfV(T,A,B,F)
00737 #define PINT_cfV(      T,A,B,F) _(T,_cfVP)(A,B)
00738 #define PVOID_cfV(     T,A,B,F)
00739 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
00740 #define    ROUTINE_cfV(T,A,B,F) void (*B)(CF_NULL_PROTO) = (cfCAST_FUNCTION)A;
00741 #else
00742 #define    ROUTINE_cfV(T,A,B,F)
00743 #endif
00744 #define     SIMPLE_cfV(T,A,B,F)
00745 #ifdef vmsFortran
00746 #define     STRING_cfV(T,A,B,F) static struct {fstring f; unsigned clen;} B =  \
00747                                        {{0,DSC$K_DTYPE_T,DSC$K_CLASS_S,NULL},0};
00748 #define    PSTRING_cfV(T,A,B,F) static fstring B={0,DSC$K_DTYPE_T,DSC$K_CLASS_S,NULL};
00749 #define    STRINGV_cfV(T,A,B,F) static fstringvector B =                       \
00750   {sizeof(A),DSC$K_DTYPE_T,DSC$K_CLASS_A,NULL,0,0,{0,0,1,1,1},1,0,NULL,0,{1,0}};
00751 #define   PSTRINGV_cfV(T,A,B,F) static fstringvector B =                       \
00752           {0,DSC$K_DTYPE_T,DSC$K_CLASS_A,NULL,0,0,{0,0,1,1,1},1,0,NULL,0,{1,0}};
00753 #else
00754 #define     STRING_cfV(T,A,B,F) struct {unsigned int clen, flen; char *nombre;} B;
00755 #define    STRINGV_cfV(T,A,B,F) struct {char *s, *fs; unsigned flen; char *nombre;} B;
00756 #define    PSTRING_cfV(T,A,B,F) int     B;
00757 #define   PSTRINGV_cfV(T,A,B,F) struct{char *fs; unsigned int sizeofA,flen;}B;
00758 #endif
00759 #define    ZTRINGV_cfV(T,A,B,F)  STRINGV_cfV(T,A,B,F)
00760 #define   PZTRINGV_cfV(T,A,B,F) PSTRINGV_cfV(T,A,B,F)
00761 
00762 /* Note that the actions of the A table were performed inside the AA table.
00763    VAX Ultrix vcc, and HP-UX cc, didn't evaluate arguments to functions left to
00764    right, so we had to split the original table into the current robust two. */
00765 #define ACF(NAME,TN,AI,I)      _(TN,_cfSTR)(4,A,NAME,I,AI,_(B,I),0)
00766 #define   DEFAULT_cfA(M,I,A,B)
00767 #define   LOGICAL_cfA(M,I,A,B) B=C2FLOGICAL(B);
00768 #define  PLOGICAL_cfA(M,I,A,B) A=C2FLOGICAL(A);
00769 #define    STRING_cfA(M,I,A,B)  STRING_cfC(M,I,A,B,sizeof(A))
00770 #define   PSTRING_cfA(M,I,A,B) PSTRING_cfC(M,I,A,B,sizeof(A))
00771 #ifdef vmsFortran
00772 #define  AATRINGV_cfA(    A,B, sA,filA,silA)                                   \
00773  initfstr(B,_cf_malloc((sA)-(filA)),(filA),(silA)-1),                          \
00774           c2fstrv(A,B.dsc$a_pointer,(silA),(sA));
00775 #define APATRINGV_cfA(    A,B, sA,filA,silA)                                   \
00776  initfstr(B,A,(filA),(silA)-1),c2fstrv(A,A,(silA),(sA));
00777 #else
00778 #define  AATRINGV_cfA(    A,B, sA,filA,silA)                                   \
00779      (B.s=_cf_malloc((sA)-(filA)),B.fs=c2fstrv(A,B.s,(B.flen=(silA)-1)+1,(sA)));
00780 #define APATRINGV_cfA(    A,B, sA,filA,silA)                                   \
00781  B.fs=c2fstrv(A,A,(B.flen=(silA)-1)+1,B.sizeofA=(sA));
00782 #endif
00783 #define   STRINGV_cfA(M,I,A,B)                                                 \
00784     AATRINGV_cfA((char *)A,B,sizeof(A),firstindexlength(A),secondindexlength(A))
00785 #define  PSTRINGV_cfA(M,I,A,B)                                                 \
00786    APATRINGV_cfA((char *)A,B,sizeof(A),firstindexlength(A),secondindexlength(A))
00787 #define   ZTRINGV_cfA(M,I,A,B)  AATRINGV_cfA( (char *)A,B,                     \
00788                     (_3(M,_ELEMS_,I))*(( _3(M,_ELEMLEN_,I))+1),                \
00789                               (_3(M,_ELEMS_,I)),(_3(M,_ELEMLEN_,I))+1)
00790 #define  PZTRINGV_cfA(M,I,A,B) APATRINGV_cfA( (char *)A,B,                     \
00791                     (_3(M,_ELEMS_,I))*(( _3(M,_ELEMLEN_,I))+1),                \
00792                               (_3(M,_ELEMS_,I)),(_3(M,_ELEMLEN_,I))+1)
00793 
00794 #define    PBYTE_cfAAP(A,B) &A
00795 #define  PDOUBLE_cfAAP(A,B) &A
00796 #define   PFLOAT_cfAAP(A,B) FLOATVVVVVVV_cfPP &A
00797 #define     PINT_cfAAP(A,B) &A
00798 #define PLOGICAL_cfAAP(A,B) B= &A         /* B used to keep a common W table. */
00799 #define    PLONG_cfAAP(A,B) &A
00800 #define   PSHORT_cfAAP(A,B) &A
00801 
00802 #define AACF(TN,AI,I,C) _SEP_(TN,C,cfCOMMA) _Icf(3,AA,TN,AI,_(B,I))
00803 #define        INT_cfAA(T,A,B) &B
00804 #define       INTV_cfAA(T,A,B) _(T,VVVVVV_cfPP) A
00805 #define      INTVV_cfAA(T,A,B) _(T,VVVVV_cfPP)  A[0]
00806 #define     INTVVV_cfAA(T,A,B) _(T,VVVV_cfPP)   A[0][0]
00807 #define    INTVVVV_cfAA(T,A,B) _(T,VVV_cfPP)    A[0][0][0]
00808 #define   INTVVVVV_cfAA(T,A,B) _(T,VV_cfPP)     A[0][0][0][0]
00809 #define  INTVVVVVV_cfAA(T,A,B) _(T,V_cfPP)      A[0][0][0][0][0]
00810 #define INTVVVVVVV_cfAA(T,A,B) _(T,_cfPP)       A[0][0][0][0][0][0]
00811 #define       PINT_cfAA(T,A,B) _(T,_cfAAP)(A,B)
00812 #define      PVOID_cfAA(T,A,B) (void *) A
00813 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
00814 #define    ROUTINE_cfAA(T,A,B) &B
00815 #else
00816 #define    ROUTINE_cfAA(T,A,B) (cfCAST_FUNCTION)A
00817 #endif
00818 #define     STRING_cfAA(T,A,B)  STRING_cfCC(T,A,B)
00819 #define    PSTRING_cfAA(T,A,B) PSTRING_cfCC(T,A,B)
00820 #ifdef vmsFortran
00821 #define    STRINGV_cfAA(T,A,B) &B
00822 #else
00823 #ifdef CRAYFortran
00824 #define    STRINGV_cfAA(T,A,B) _cptofcd(B.fs,B.flen)
00825 #else
00826 #define    STRINGV_cfAA(T,A,B) B.fs
00827 #endif
00828 #endif
00829 #define   PSTRINGV_cfAA(T,A,B) STRINGV_cfAA(T,A,B)
00830 #define    ZTRINGV_cfAA(T,A,B) STRINGV_cfAA(T,A,B)
00831 #define   PZTRINGV_cfAA(T,A,B) STRINGV_cfAA(T,A,B)
00832 
00833 #if defined(vmsFortran) || defined(CRAYFortran)
00834 #define JCF(TN,I)
00835 #define KCF(TN,I)
00836 #else
00837 #define JCF(TN,I)    _(TN,_cfSTR)(1,J,_(B,I), 0,0,0,0)
00838 #if defined(AbsoftUNIXFortran)
00839 #define  DEFAULT_cfJ(B) ,0
00840 #else
00841 #define  DEFAULT_cfJ(B)
00842 #endif
00843 #define  LOGICAL_cfJ(B) DEFAULT_cfJ(B)
00844 #define PLOGICAL_cfJ(B) DEFAULT_cfJ(B)
00845 #define   STRING_cfJ(B) ,B.flen
00846 #define  PSTRING_cfJ(B) ,B
00847 #define  STRINGV_cfJ(B) STRING_cfJ(B)
00848 #define PSTRINGV_cfJ(B) STRING_cfJ(B)
00849 #define  ZTRINGV_cfJ(B) STRING_cfJ(B)
00850 #define PZTRINGV_cfJ(B) STRING_cfJ(B)
00851 
00852 /* KCF is identical to DCF, except that KCF ZTRING is not empty. */
00853 #define KCF(TN,I)    _(TN,_cfSTR)(1,KK,_(B,I), 0,0,0,0)
00854 #if defined(AbsoftUNIXFortran)
00855 #define  DEFAULT_cfKK(B) , unsigned B
00856 #else
00857 #define  DEFAULT_cfKK(B)
00858 #endif
00859 #define  LOGICAL_cfKK(B) DEFAULT_cfKK(B)
00860 #define PLOGICAL_cfKK(B) DEFAULT_cfKK(B)
00861 #define   STRING_cfKK(B) , unsigned B
00862 #define  PSTRING_cfKK(B) STRING_cfKK(B)
00863 #define  STRINGV_cfKK(B) STRING_cfKK(B)
00864 #define PSTRINGV_cfKK(B) STRING_cfKK(B)
00865 #define  ZTRINGV_cfKK(B) STRING_cfKK(B)
00866 #define PZTRINGV_cfKK(B) STRING_cfKK(B)
00867 #endif
00868 
00869 #define WCF(TN,AN,I)      _(TN,_cfSTR)(2,W,AN,_(B,I), 0,0,0)
00870 #define  DEFAULT_cfW(A,B)
00871 #define  LOGICAL_cfW(A,B)
00872 #define PLOGICAL_cfW(A,B) *B=F2CLOGICAL(*B);
00873 #define   STRING_cfW(A,B) (B.nombre=A,B.nombre[B.clen]!='\0'?B.nombre[B.clen]='\0':0); /* A?="constnt"*/
00874 #define  PSTRING_cfW(A,B) kill_trailing(A,' ');
00875 #ifdef vmsFortran
00876 #define  STRINGV_cfW(A,B) _cf_free(B.dsc$a_pointer);
00877 #define PSTRINGV_cfW(A,B)                                                      \
00878   vkill_trailing(f2cstrv((char*)A, (char*)A,                                   \
00879                            B.dsc$w_length+1, B.dsc$l_arsize+B.dsc$l_m[0]),     \
00880                    B.dsc$w_length+1, B.dsc$l_arsize+B.dsc$l_m[0], ' ');
00881 #else
00882 #define  STRINGV_cfW(A,B) _cf_free(B.s);
00883 #define PSTRINGV_cfW(A,B) vkill_trailing(                                      \
00884          f2cstrv((char*)A,(char*)A,B.flen+1,B.sizeofA), B.flen+1,B.sizeofA,' ');
00885 #endif
00886 #define  ZTRINGV_cfW(A,B)      STRINGV_cfW(A,B)
00887 #define PZTRINGV_cfW(A,B)     PSTRINGV_cfW(A,B)
00888 
00889 #define   NCF(TN,I,C)       _SEP_(TN,C,cfCOMMA) _Icf(2,N,TN,_(A,I),0) 
00890 #define  NNCF(TN,I,C)        UUCF(TN,I,C)
00891 #define NNNCF(TN,I,C)       _SEP_(TN,C,cfCOLON) _Icf(2,N,TN,_(A,I),0) 
00892 #define        INT_cfN(T,A) _(T,VVVVVVV_cfTYPE) * A
00893 #define       INTV_cfN(T,A) _(T,VVVVVV_cfTYPE)  * A
00894 #define      INTVV_cfN(T,A) _(T,VVVVV_cfTYPE)   * A
00895 #define     INTVVV_cfN(T,A) _(T,VVVV_cfTYPE)    * A
00896 #define    INTVVVV_cfN(T,A) _(T,VVV_cfTYPE)     * A
00897 #define   INTVVVVV_cfN(T,A) _(T,VV_cfTYPE)      * A
00898 #define  INTVVVVVV_cfN(T,A) _(T,V_cfTYPE)       * A
00899 #define INTVVVVVVV_cfN(T,A) _(T,_cfTYPE)        * A
00900 #define       PINT_cfN(T,A) _(T,_cfTYPE)        * A
00901 #define      PVOID_cfN(T,A) void *                A
00902 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
00903 #define    ROUTINE_cfN(T,A) void (**A)(CF_NULL_PROTO)
00904 #else
00905 #define    ROUTINE_cfN(T,A) void ( *A)(CF_NULL_PROTO)
00906 #endif
00907 #ifdef vmsFortran
00908 #define     STRING_cfN(T,A) fstring *             A
00909 #define    STRINGV_cfN(T,A) fstringvector *       A
00910 #else
00911 #ifdef CRAYFortran
00912 #define     STRING_cfN(T,A) _fcd                  A
00913 #define    STRINGV_cfN(T,A) _fcd                  A
00914 #else
00915 #define     STRING_cfN(T,A) char *                A
00916 #define    STRINGV_cfN(T,A) char *                A
00917 #endif
00918 #endif
00919 #define    PSTRING_cfN(T,A)   STRING_cfN(T,A) /* CRAY insists on arg.'s here. */
00920 #define   PNSTRING_cfN(T,A)   STRING_cfN(T,A) /* CRAY insists on arg.'s here. */
00921 #define   PPSTRING_cfN(T,A)   STRING_cfN(T,A) /* CRAY insists on arg.'s here. */
00922 #define   PSTRINGV_cfN(T,A)  STRINGV_cfN(T,A)
00923 #define    ZTRINGV_cfN(T,A)  STRINGV_cfN(T,A)
00924 #define   PZTRINGV_cfN(T,A) PSTRINGV_cfN(T,A)
00925 
00926 
00927 /* Apollo 6.7, CRAY, old Sun, VAX/Ultrix vcc/cc and new ultrix
00928    can't hack more than 31 arg's.
00929    e.g. ultrix >= 4.3 gives message:
00930        zow35> cc -c -DDECFortran cfortest.c
00931        cfe: Fatal: Out of memory: cfortest.c
00932        zow35>
00933    Old __hpux had the problem, but new 'HP-UX A.09.03 A 9000/735' is fine
00934    if using -Aa, otherwise we have a problem.
00935  */
00936 #ifndef MAX_PREPRO_ARGS
00937 #if !defined(__GNUC__) && (defined(VAXUltrix) || defined(__CF__APOLLO67) || (defined(sun)&&!defined(__sun)) || defined(_CRAY) || defined(__ultrix__) || (defined(__hpux)&&defined(__CF__KnR)))
00938 #define MAX_PREPRO_ARGS 31
00939 #else
00940 #define MAX_PREPRO_ARGS 99
00941 #endif
00942 #endif
00943 
00944 #if defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
00945 /* In addition to explicit Absoft stuff, only Absoft requires:
00946    - DEFAULT coming from _cfSTR.
00947      DEFAULT could have been called e.g. INT, but keep it for clarity.
00948    - M term in CFARGT14 and CFARGT14FS.
00949  */
00950 #define ABSOFT_cf1(T0) _(T0,_cfSTR)(0,ABSOFT1,0,0,0,0,0)
00951 #define ABSOFT_cf2(T0) _(T0,_cfSTR)(0,ABSOFT2,0,0,0,0,0)
00952 #define ABSOFT_cf3(T0) _(T0,_cfSTR)(0,ABSOFT3,0,0,0,0,0)
00953 #define DEFAULT_cfABSOFT1
00954 #define LOGICAL_cfABSOFT1
00955 #define  STRING_cfABSOFT1 ,MAX_LEN_FORTRAN_FUNCTION_STRING
00956 #define DEFAULT_cfABSOFT2
00957 #define LOGICAL_cfABSOFT2
00958 #define  STRING_cfABSOFT2 ,unsigned D0
00959 #define DEFAULT_cfABSOFT3
00960 #define LOGICAL_cfABSOFT3
00961 #define  STRING_cfABSOFT3 ,D0
00962 #else
00963 #define ABSOFT_cf1(T0)
00964 #define ABSOFT_cf2(T0)
00965 #define ABSOFT_cf3(T0)
00966 #endif
00967 
00968 /* _Z introduced to cicumvent IBM and HP silly preprocessor warning.
00969    e.g. "Macro CFARGT14 invoked with a null argument."
00970  */
00971 #define _Z
00972 
00973 #define  CFARGT14S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)                \
00974  S(T1,1)   S(T2,2)   S(T3,3)    S(T4,4)    S(T5,5)    S(T6,6)    S(T7,7)       \
00975  S(T8,8)   S(T9,9)   S(TA,10)   S(TB,11)   S(TC,12)   S(TD,13)   S(TE,14)
00976 #define  CFARGT27S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
00977  S(T1,1)   S(T2,2)   S(T3,3)    S(T4,4)    S(T5,5)    S(T6,6)    S(T7,7)       \
00978  S(T8,8)   S(T9,9)   S(TA,10)   S(TB,11)   S(TC,12)   S(TD,13)   S(TE,14)      \
00979  S(TF,15)  S(TG,16)  S(TH,17)   S(TI,18)   S(TJ,19)   S(TK,20)   S(TL,21)      \
00980  S(TM,22)  S(TN,23)  S(TO,24)   S(TP,25)   S(TQ,26)   S(TR,27)
00981 
00982 #define  CFARGT14FS(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)           \
00983  F(T1,1,0) F(T2,2,1) F(T3,3,1)  F(T4,4,1)  F(T5,5,1)  F(T6,6,1)  F(T7,7,1)     \
00984  F(T8,8,1) F(T9,9,1) F(TA,10,1) F(TB,11,1) F(TC,12,1) F(TD,13,1) F(TE,14,1)    \
00985  M       CFARGT14S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
00986 #define  CFARGT27FS(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
00987  F(T1,1,0)  F(T2,2,1)  F(T3,3,1)  F(T4,4,1)  F(T5,5,1)  F(T6,6,1)  F(T7,7,1)   \
00988  F(T8,8,1)  F(T9,9,1)  F(TA,10,1) F(TB,11,1) F(TC,12,1) F(TD,13,1) F(TE,14,1)  \
00989  F(TF,15,1) F(TG,16,1) F(TH,17,1) F(TI,18,1) F(TJ,19,1) F(TK,20,1) F(TL,21,1)  \
00990  F(TM,22,1) F(TN,23,1) F(TO,24,1) F(TP,25,1) F(TQ,26,1) F(TR,27,1)             \
00991  M       CFARGT27S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)
00992 
00993 #if !(defined(PowerStationFortran)||defined(hpuxFortran800))
00994 /*  Old CFARGT14 -> CFARGT14FS as seen below, for Absoft cross-compile yields:
00995       SunOS> cc -c -Xa -DAbsoftUNIXFortran c.c
00996       "c.c", line 406: warning: argument mismatch
00997     Haven't checked if this is ANSI C or a SunOS bug. SunOS -Xs works ok.
00998     Behavior is most clearly seen in example:
00999       #define A 1 , 2
01000       #define  C(X,Y,Z) x=X. y=Y. z=Z.
01001       #define  D(X,Y,Z) C(X,Y,Z)
01002       D(x,A,z)
01003     Output from preprocessor is: x = x . y = 1 . z = 2 .
01004  #define CFARGT14(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
01005        CFARGT14FS(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
01006 */
01007 #define  CFARGT14(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)             \
01008  F(T1,1,0) F(T2,2,1) F(T3,3,1)  F(T4,4,1)  F(T5,5,1)  F(T6,6,1)  F(T7,7,1)     \
01009  F(T8,8,1) F(T9,9,1) F(TA,10,1) F(TB,11,1) F(TC,12,1) F(TD,13,1) F(TE,14,1)    \
01010  M       CFARGT14S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
01011 #define  CFARGT27(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
01012  F(T1,1,0)  F(T2,2,1)  F(T3,3,1)  F(T4,4,1)  F(T5,5,1)  F(T6,6,1)  F(T7,7,1)   \
01013  F(T8,8,1)  F(T9,9,1)  F(TA,10,1) F(TB,11,1) F(TC,12,1) F(TD,13,1) F(TE,14,1)  \
01014  F(TF,15,1) F(TG,16,1) F(TH,17,1) F(TI,18,1) F(TJ,19,1) F(TK,20,1) F(TL,21,1)  \
01015  F(TM,22,1) F(TN,23,1) F(TO,24,1) F(TP,25,1) F(TQ,26,1) F(TR,27,1)             \
01016  M       CFARGT27S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)
01017 
01018 #define  CFARGT20(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
01019  F(T1,1,0)  F(T2,2,1)  F(T3,3,1)  F(T4,4,1)  F(T5,5,1)  F(T6,6,1)  F(T7,7,1)   \
01020  F(T8,8,1)  F(T9,9,1)  F(TA,10,1) F(TB,11,1) F(TC,12,1) F(TD,13,1) F(TE,14,1)  \
01021  F(TF,15,1) F(TG,16,1) F(TH,17,1) F(TI,18,1) F(TJ,19,1) F(TK,20,1)             \
01022  S(T1,1)    S(T2,2)    S(T3,3)    S(T4,4)    S(T5,5)    S(T6,6)    S(T7,7)     \
01023  S(T8,8)    S(T9,9)    S(TA,10)   S(TB,11)   S(TC,12)   S(TD,13)   S(TE,14)    \
01024  S(TF,15)   S(TG,16)   S(TH,17)   S(TI,18)   S(TJ,19)   S(TK,20)
01025 #define CFARGTA14(F,S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE) \
01026  F(T1,A1,1,0)  F(T2,A2,2,1)  F(T3,A3,3,1) F(T4,A4,4,1)  F(T5,A5,5,1)  F(T6,A6,6,1)  \
01027  F(T7,A7,7,1)  F(T8,A8,8,1)  F(T9,A9,9,1) F(TA,AA,10,1) F(TB,AB,11,1) F(TC,AC,12,1) \
01028  F(TD,AD,13,1) F(TE,AE,14,1) S(T1,1)      S(T2,2)       S(T3,3)       S(T4,4)       \
01029  S(T5,5)       S(T6,6)       S(T7,7)      S(T8,8)       S(T9,9)       S(TA,10)      \
01030  S(TB,11)      S(TC,12)      S(TD,13)     S(TE,14)
01031 #if MAX_PREPRO_ARGS>31
01032 #define CFARGTA20(F,S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) \
01033  F(T1,A1,1,0)  F(T2,A2,2,1)  F(T3,A3,3,1)  F(T4,A4,4,1)  F(T5,A5,5,1)  F(T6,A6,6,1)  \
01034  F(T7,A7,7,1)  F(T8,A8,8,1)  F(T9,A9,9,1)  F(TA,AA,10,1) F(TB,AB,11,1) F(TC,AC,12,1) \
01035  F(TD,AD,13,1) F(TE,AE,14,1) F(TF,AF,15,1) F(TG,AG,16,1) F(TH,AH,17,1) F(TI,AI,18,1) \
01036  F(TJ,AJ,19,1) F(TK,AK,20,1) S(T1,1)       S(T2,2)       S(T3,3)       S(T4,4)       \
01037  S(T5,5)       S(T6,6)       S(T7,7)       S(T8,8)       S(T9,9)       S(TA,10)      \
01038  S(TB,11)      S(TC,12)      S(TD,13)      S(TE,14)      S(TF,15)      S(TG,16)      \
01039  S(TH,17)      S(TI,18)      S(TJ,19)      S(TK,20)
01040 #define CFARGTA27(F,S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR) \
01041  F(T1,A1,1,0)  F(T2,A2,2,1)  F(T3,A3,3,1)  F(T4,A4,4,1)  F(T5,A5,5,1)  F(T6,A6,6,1)  \
01042  F(T7,A7,7,1)  F(T8,A8,8,1)  F(T9,A9,9,1)  F(TA,AA,10,1) F(TB,AB,11,1) F(TC,AC,12,1) \
01043  F(TD,AD,13,1) F(TE,AE,14,1) F(TF,AF,15,1) F(TG,AG,16,1) F(TH,AH,17,1) F(TI,AI,18,1) \
01044  F(TJ,AJ,19,1) F(TK,AK,20,1) F(TL,AL,21,1) F(TM,AM,22,1) F(TN,AN,23,1) F(TO,AO,24,1) \
01045  F(TP,AP,25,1) F(TQ,AQ,26,1) F(TR,AR,27,1) S(T1,1)       S(T2,2)       S(T3,3)       \
01046  S(T4,4)       S(T5,5)       S(T6,6)       S(T7,7)       S(T8,8)       S(T9,9)       \
01047  S(TA,10)      S(TB,11)      S(TC,12)      S(TD,13)      S(TE,14)      S(TF,15)      \
01048  S(TG,16)      S(TH,17)      S(TI,18)      S(TJ,19)      S(TK,20)      S(TL,21)      \
01049  S(TM,22)      S(TN,23)      S(TO,24)      S(TP,25)      S(TQ,26)      S(TR,27)
01050 #endif
01051 #else
01052 #define  CFARGT14(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)             \
01053  F(T1,1,0) S(T1,1) F(T2,2,1)  S(T2,2)  F(T3,3,1)  S(T3,3)  F(T4,4,1)  S(T4,4)  \
01054  F(T5,5,1) S(T5,5) F(T6,6,1)  S(T6,6)  F(T7,7,1)  S(T7,7)  F(T8,8,1)  S(T8,8)  \
01055  F(T9,9,1) S(T9,9) F(TA,10,1) S(TA,10) F(TB,11,1) S(TB,11) F(TC,12,1) S(TC,12) \
01056  F(TD,13,1) S(TD,13) F(TE,14,1) S(TE,14)
01057 #define  CFARGT27(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
01058  F(T1,1,0)  S(T1,1)  F(T2,2,1)  S(T2,2)  F(T3,3,1)  S(T3,3)  F(T4,4,1)  S(T4,4)  \
01059  F(T5,5,1)  S(T5,5)  F(T6,6,1)  S(T6,6)  F(T7,7,1)  S(T7,7)  F(T8,8,1)  S(T8,8)  \
01060  F(T9,9,1)  S(T9,9)  F(TA,10,1) S(TA,10) F(TB,11,1) S(TB,11) F(TC,12,1) S(TC,12) \
01061  F(TD,13,1) S(TD,13) F(TE,14,1) S(TE,14) F(TF,15,1) S(TF,15) F(TG,16,1) S(TG,16) \
01062  F(TH,17,1) S(TH,17) F(TI,18,1) S(TI,18) F(TJ,19,1) S(TJ,19) F(TK,20,1) S(TK,20) \
01063  F(TL,21,1) S(TL,21) F(TM,22,1) S(TM,22) F(TN,23,1) S(TN,23) F(TO,24,1) S(TO,24) \
01064  F(TP,25,1) S(TP,25) F(TQ,26,1) S(TQ,26) F(TR,27,1) S(TR,27)
01065 
01066 #define  CFARGT20(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
01067  F(T1,1,0)  S(T1,1)  F(T2,2,1)  S(T2,2)  F(T3,3,1)  S(T3,3)  F(T4,4,1)  S(T4,4)  \
01068  F(T5,5,1)  S(T5,5)  F(T6,6,1)  S(T6,6)  F(T7,7,1)  S(T7,7)  F(T8,8,1)  S(T8,8)  \
01069  F(T9,9,1)  S(T9,9)  F(TA,10,1) S(TA,10) F(TB,11,1) S(TB,11) F(TC,12,1) S(TC,12) \
01070  F(TD,13,1) S(TD,13) F(TE,14,1) S(TE,14) F(TF,15,1) S(TF,15) F(TG,16,1) S(TG,16) \
01071  F(TH,17,1) S(TH,17) F(TI,18,1) S(TI,18) F(TJ,19,1) S(TJ,19) F(TK,20,1) S(TK,20)
01072 #define CFARGTA14(F,S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE) \
01073  F(T1,A1,1,0)  S(T1,1)  F(T2,A2,2,1)  S(T2,2)  F(T3,A3,3,1)  S(T3,3)           \
01074  F(T4,A4,4,1)  S(T4,4)  F(T5,A5,5,1)  S(T5,5)  F(T6,A6,6,1)  S(T6,6)           \
01075  F(T7,A7,7,1)  S(T7,7)  F(T8,A8,8,1)  S(T8,8)  F(T9,A9,9,1)  S(T9,9)           \
01076  F(TA,AA,10,1) S(TA,10) F(TB,AB,11,1) S(TB,11) F(TC,AC,12,1) S(TC,12)          \
01077  F(TD,AD,13,1) S(TD,13) F(TE,AE,14,1) S(TE,14)
01078 #if MAX_PREPRO_ARGS>31
01079 #define CFARGTA20(F,S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) \
01080  F(T1,A1,1,0)  S(T1,1)  F(T2,A2,2,1)  S(T2,2)  F(T3,A3,3,1)  S(T3,3)           \
01081  F(T4,A4,4,1)  S(T4,4)  F(T5,A5,5,1)  S(T5,5)  F(T6,A6,6,1)  S(T6,6)           \
01082  F(T7,A7,7,1)  S(T7,7)  F(T8,A8,8,1)  S(T8,8)  F(T9,A9,9,1)  S(T9,9)           \
01083  F(TA,AA,10,1) S(TA,10) F(TB,AB,11,1) S(TB,11) F(TC,AC,12,1) S(TC,12)          \
01084  F(TD,AD,13,1) S(TD,13) F(TE,AE,14,1) S(TE,14) F(TF,AF,15,1) S(TF,15)          \
01085  F(TG,AG,16,1) S(TG,16) F(TH,AH,17,1) S(TH,17) F(TI,AI,18,1) S(TI,18)          \
01086  F(TJ,AJ,19,1) S(TJ,19) F(TK,AK,20,1) S(TK,20)                
01087 #define CFARGTA27(F,S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR) \
01088  F(T1,A1,1,0)  S(T1,1)  F(T2,A2,2,1)  S(T2,2)  F(T3,A3,3,1)  S(T3,3)           \
01089  F(T4,A4,4,1)  S(T4,4)  F(T5,A5,5,1)  S(T5,5)  F(T6,A6,6,1)  S(T6,6)           \
01090  F(T7,A7,7,1)  S(T7,7)  F(T8,A8,8,1)  S(T8,8)  F(T9,A9,9,1)  S(T9,9)           \
01091  F(TA,AA,10,1) S(TA,10) F(TB,AB,11,1) S(TB,11) F(TC,AC,12,1) S(TC,12)          \
01092  F(TD,AD,13,1) S(TD,13) F(TE,AE,14,1) S(TE,14) F(TF,AF,15,1) S(TF,15)          \
01093  F(TG,AG,16,1) S(TG,16) F(TH,AH,17,1) S(TH,17) F(TI,AI,18,1) S(TI,18)          \
01094  F(TJ,AJ,19,1) S(TJ,19) F(TK,AK,20,1) S(TK,20) F(TL,AL,21,1) S(TL,21)          \
01095  F(TM,AM,22,1) S(TM,22) F(TN,AN,23,1) S(TN,23) F(TO,AO,24,1) S(TO,24)          \
01096  F(TP,AP,25,1) S(TP,25) F(TQ,AQ,26,1) S(TQ,26) F(TR,AR,27,1) S(TR,27)
01097 #endif
01098 #endif
01099 
01100 
01101 #define PROTOCCALLSFSUB1( UN,LN,T1) \
01102         PROTOCCALLSFSUB14(UN,LN,T1,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01103 #define PROTOCCALLSFSUB2( UN,LN,T1,T2) \
01104         PROTOCCALLSFSUB14(UN,LN,T1,T2,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01105 #define PROTOCCALLSFSUB3( UN,LN,T1,T2,T3) \
01106         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01107 #define PROTOCCALLSFSUB4( UN,LN,T1,T2,T3,T4) \
01108         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01109 #define PROTOCCALLSFSUB5( UN,LN,T1,T2,T3,T4,T5) \
01110         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01111 #define PROTOCCALLSFSUB6( UN,LN,T1,T2,T3,T4,T5,T6) \
01112         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01113 #define PROTOCCALLSFSUB7( UN,LN,T1,T2,T3,T4,T5,T6,T7) \
01114         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01115 #define PROTOCCALLSFSUB8( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8) \
01116         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01117 #define PROTOCCALLSFSUB9( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9) \
01118         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0,CF_0,CF_0,CF_0,CF_0)
01119 #define PROTOCCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA) \
01120         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0)
01121 #define PROTOCCALLSFSUB11(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB) \
01122         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0)
01123 #define PROTOCCALLSFSUB12(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC) \
01124         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0)
01125 #define PROTOCCALLSFSUB13(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD) \
01126         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0)
01127 
01128 
01129 #define PROTOCCALLSFSUB15(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF) \
01130         PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,CF_0,CF_0,CF_0,CF_0,CF_0)
01131 #define PROTOCCALLSFSUB16(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG) \
01132         PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,CF_0,CF_0,CF_0,CF_0)
01133 #define PROTOCCALLSFSUB17(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH) \
01134         PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,CF_0,CF_0,CF_0)
01135 #define PROTOCCALLSFSUB18(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI) \
01136         PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,CF_0,CF_0)
01137 #define PROTOCCALLSFSUB19(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ) \
01138         PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,CF_0)
01139 
01140 #define PROTOCCALLSFSUB21(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL) \
01141         PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
01142 #define PROTOCCALLSFSUB22(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM) \
01143         PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,CF_0,CF_0,CF_0,CF_0,CF_0)
01144 #define PROTOCCALLSFSUB23(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN) \
01145         PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,CF_0,CF_0,CF_0,CF_0)
01146 #define PROTOCCALLSFSUB24(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO) \
01147         PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,CF_0,CF_0,CF_0)
01148 #define PROTOCCALLSFSUB25(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP) \
01149         PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,CF_0,CF_0)
01150 #define PROTOCCALLSFSUB26(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ) \
01151         PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,CF_0)
01152 
01153 
01154 #ifndef FCALLSC_QUALIFIER
01155 #ifdef VISUAL_CPLUSPLUS
01156 #define FCALLSC_QUALIFIER __stdcall
01157 #else
01158 #define FCALLSC_QUALIFIER
01159 #endif
01160 #endif
01161 
01162 #ifdef __cplusplus
01163 #define CFextern extern "C"
01164 #else
01165 #define CFextern extern
01166 #endif
01167 
01168 
01169 #ifdef CFSUBASFUN
01170 #define PROTOCCALLSFSUB0(UN,LN) \
01171    PROTOCCALLSFFUN0( VOID,UN,LN)
01172 #define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
01173    PROTOCCALLSFFUN14(VOID,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
01174 #define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)\
01175    PROTOCCALLSFFUN20(VOID,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)
01176 #define PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)\
01177    PROTOCCALLSFFUN27(VOID,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)
01178 #else
01179 /* Note: Prevent compiler warnings, null #define PROTOCCALLSFSUB14/20 after 
01180    #include-ing cfortran.h if calling the FORTRAN wrapper within the same 
01181    source code where the wrapper is created. */
01182 #define PROTOCCALLSFSUB0(UN,LN)     _(VOID,_cfPU)(CFC_(UN,LN))();
01183 #ifndef __CF__KnR
01184 #define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
01185  _(VOID,_cfPU)(CFC_(UN,LN))( CFARGT14(NCF,KCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) );
01186 #define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)\
01187  _(VOID,_cfPU)(CFC_(UN,LN))( CFARGT20(NCF,KCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) );
01188 #define PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)\
01189  _(VOID,_cfPU)(CFC_(UN,LN))( CFARGT27(NCF,KCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) );
01190 #else
01191 #define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)     \
01192          PROTOCCALLSFSUB0(UN,LN)
01193 #define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
01194          PROTOCCALLSFSUB0(UN,LN)
01195 #define PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
01196          PROTOCCALLSFSUB0(UN,LN)
01197 #endif
01198 #endif
01199 
01200 
01201 #ifdef OLD_VAXC                                  /* Allow %CC-I-PARAMNOTUSED. */
01202 #pragma standard
01203 #endif
01204 
01205 
01206 #define CCALLSFSUB1( UN,LN,T1,                        A1)         \
01207         CCALLSFSUB5 (UN,LN,T1,CF_0,CF_0,CF_0,CF_0,A1,0,0,0,0)
01208 #define CCALLSFSUB2( UN,LN,T1,T2,                     A1,A2)      \
01209         CCALLSFSUB5 (UN,LN,T1,T2,CF_0,CF_0,CF_0,A1,A2,0,0,0)
01210 #define CCALLSFSUB3( UN,LN,T1,T2,T3,                  A1,A2,A3)   \
01211         CCALLSFSUB5 (UN,LN,T1,T2,T3,CF_0,CF_0,A1,A2,A3,0,0)
01212 #define CCALLSFSUB4( UN,LN,T1,T2,T3,T4,               A1,A2,A3,A4)\
01213         CCALLSFSUB5 (UN,LN,T1,T2,T3,T4,CF_0,A1,A2,A3,A4,0)
01214 #define CCALLSFSUB5( UN,LN,T1,T2,T3,T4,T5,            A1,A2,A3,A4,A5)          \
01215         CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,0,0,0,0,0)
01216 #define CCALLSFSUB6( UN,LN,T1,T2,T3,T4,T5,T6,         A1,A2,A3,A4,A5,A6)       \
01217         CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,0,0,0,0)
01218 #define CCALLSFSUB7( UN,LN,T1,T2,T3,T4,T5,T6,T7,      A1,A2,A3,A4,A5,A6,A7)    \
01219         CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,0,0,0)
01220 #define CCALLSFSUB8( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,   A1,A2,A3,A4,A5,A6,A7,A8) \
01221         CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,0,0)
01222 #define CCALLSFSUB9( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,A1,A2,A3,A4,A5,A6,A7,A8,A9)\
01223         CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,0)
01224 #define CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA)\
01225         CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,0,0,0,0)
01226 #define CCALLSFSUB11(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB)\
01227         CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,0,0,0)
01228 #define CCALLSFSUB12(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC)\
01229         CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,0,0)
01230 #define CCALLSFSUB13(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD)\
01231         CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,0)
01232 
01233 #ifdef __cplusplus
01234 #define CPPPROTOCLSFSUB0( UN,LN)
01235 #define CPPPROTOCLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
01236 #define CPPPROTOCLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)
01237 #define CPPPROTOCLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)
01238 #else
01239 #define CPPPROTOCLSFSUB0(UN,LN) \
01240         PROTOCCALLSFSUB0(UN,LN)
01241 #define CPPPROTOCLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)     \
01242         PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
01243 #define CPPPROTOCLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
01244         PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)
01245 #define CPPPROTOCLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
01246         PROTOCCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)
01247 #endif
01248 
01249 #ifdef CFSUBASFUN
01250 #define CCALLSFSUB0(UN,LN) CCALLSFFUN0(UN,LN)
01251 #define CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE)\
01252         CCALLSFFUN14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE)
01253 #else
01254 /* do{...}while(0) allows if(a==b) FORT(); else BORT(); */
01255 #define CCALLSFSUB0( UN,LN) do{CPPPROTOCLSFSUB0(UN,LN) CFC_(UN,LN)();}while(0)
01256 #define CCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE)\
01257 do{VVCF(T1,A1,B1) VVCF(T2,A2,B2) VVCF(T3,A3,B3) VVCF(T4,A4,B4) VVCF(T5,A5,B5)  \
01258    VVCF(T6,A6,B6) VVCF(T7,A7,B7) VVCF(T8,A8,B8) VVCF(T9,A9,B9) VVCF(TA,AA,B10) \
01259    VVCF(TB,AB,B11) VVCF(TC,AC,B12) VVCF(TD,AD,B13) VVCF(TE,AE,B14)             \
01260    CPPPROTOCLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)          \
01261    ACF(LN,T1,A1,1)  ACF(LN,T2,A2,2)  ACF(LN,T3,A3,3)                           \
01262    ACF(LN,T4,A4,4)  ACF(LN,T5,A5,5)  ACF(LN,T6,A6,6)  ACF(LN,T7,A7,7)          \
01263    ACF(LN,T8,A8,8)  ACF(LN,T9,A9,9)  ACF(LN,TA,AA,10) ACF(LN,TB,AB,11)         \
01264    ACF(LN,TC,AC,12) ACF(LN,TD,AD,13) ACF(LN,TE,AE,14)                          \
01265    CFC_(UN,LN)( CFARGTA14(AACF,JCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE) );\
01266    WCF(T1,A1,1)  WCF(T2,A2,2)  WCF(T3,A3,3)  WCF(T4,A4,4)  WCF(T5,A5,5)        \
01267    WCF(T6,A6,6)  WCF(T7,A7,7)  WCF(T8,A8,8)  WCF(T9,A9,9)  WCF(TA,AA,10)       \
01268    WCF(TB,AB,11) WCF(TC,AC,12) WCF(TD,AD,13) WCF(TE,AE,14)      }while(0)
01269 #endif
01270 
01271 
01272 #if MAX_PREPRO_ARGS>31
01273 #define CCALLSFSUB15(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF)\
01274         CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,CF_0,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,0,0,0,0,0)
01275 #define CCALLSFSUB16(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG)\
01276         CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,0,0,0,0)
01277 #define CCALLSFSUB17(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH)\
01278         CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,0,0,0)
01279 #define CCALLSFSUB18(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI)\
01280         CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,0,0)
01281 #define CCALLSFSUB19(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ)\
01282         CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,0)
01283 
01284 #ifdef CFSUBASFUN
01285 #define CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH, \
01286         TI,TJ,TK, A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) \
01287         CCALLSFFUN20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH, \
01288         TI,TJ,TK, A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK)
01289 #else
01290 #define CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH, \
01291         TI,TJ,TK, A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) \
01292 do{VVCF(T1,A1,B1)  VVCF(T2,A2,B2)  VVCF(T3,A3,B3)  VVCF(T4,A4,B4)  VVCF(T5,A5,B5)   \
01293    VVCF(T6,A6,B6)  VVCF(T7,A7,B7)  VVCF(T8,A8,B8)  VVCF(T9,A9,B9)  VVCF(TA,AA,B10)  \
01294    VVCF(TB,AB,B11) VVCF(TC,AC,B12) VVCF(TD,AD,B13) VVCF(TE,AE,B14) VVCF(TF,AF,B15)  \
01295    VVCF(TG,AG,B16) VVCF(TH,AH,B17) VVCF(TI,AI,B18) VVCF(TJ,AJ,B19) VVCF(TK,AK,B20)  \
01296    CPPPROTOCLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)  \
01297    ACF(LN,T1,A1,1)  ACF(LN,T2,A2,2)  ACF(LN,T3,A3,3)  ACF(LN,T4,A4,4)          \
01298    ACF(LN,T5,A5,5)  ACF(LN,T6,A6,6)  ACF(LN,T7,A7,7)  ACF(LN,T8,A8,8)          \
01299    ACF(LN,T9,A9,9)  ACF(LN,TA,AA,10) ACF(LN,TB,AB,11) ACF(LN,TC,AC,12)         \
01300    ACF(LN,TD,AD,13) ACF(LN,TE,AE,14) ACF(LN,TF,AF,15) ACF(LN,TG,AG,16)         \
01301    ACF(LN,TH,AH,17) ACF(LN,TI,AI,18) ACF(LN,TJ,AJ,19) ACF(LN,TK,AK,20)         \
01302    CFC_(UN,LN)( CFARGTA20(AACF,JCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) ); \
01303  WCF(T1,A1,1)  WCF(T2,A2,2)  WCF(T3,A3,3)  WCF(T4,A4,4)  WCF(T5,A5,5)  WCF(T6,A6,6)  \
01304  WCF(T7,A7,7)  WCF(T8,A8,8)  WCF(T9,A9,9)  WCF(TA,AA,10) WCF(TB,AB,11) WCF(TC,AC,12) \
01305  WCF(TD,AD,13) WCF(TE,AE,14) WCF(TF,AF,15) WCF(TG,AG,16) WCF(TH,AH,17) WCF(TI,AI,18) \
01306  WCF(TJ,AJ,19) WCF(TK,AK,20) }while(0)
01307 #endif
01308 #endif         /* MAX_PREPRO_ARGS */
01309 
01310 #if MAX_PREPRO_ARGS>31
01311 #define CCALLSFSUB21(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL)\
01312         CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,0,0,0,0,0,0)
01313 #define CCALLSFSUB22(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM)\
01314         CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,CF_0,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,0,0,0,0,0)
01315 #define CCALLSFSUB23(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN)\
01316         CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,0,0,0,0)
01317 #define CCALLSFSUB24(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO)\
01318         CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,0,0,0)
01319 #define CCALLSFSUB25(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP)\
01320         CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,0,0)
01321 #define CCALLSFSUB26(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ)\
01322         CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,0)
01323 
01324 #ifdef CFSUBASFUN
01325 #define CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR, \
01326                            A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR) \
01327         CCALLSFFUN27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR, \
01328                            A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR)
01329 #else
01330 #define CCALLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR, \
01331                            A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR) \
01332 do{VVCF(T1,A1,B1)  VVCF(T2,A2,B2)  VVCF(T3,A3,B3)  VVCF(T4,A4,B4)  VVCF(T5,A5,B5)   \
01333    VVCF(T6,A6,B6)  VVCF(T7,A7,B7)  VVCF(T8,A8,B8)  VVCF(T9,A9,B9)  VVCF(TA,AA,B10)  \
01334    VVCF(TB,AB,B11) VVCF(TC,AC,B12) VVCF(TD,AD,B13) VVCF(TE,AE,B14) VVCF(TF,AF,B15)  \
01335    VVCF(TG,AG,B16) VVCF(TH,AH,B17) VVCF(TI,AI,B18) VVCF(TJ,AJ,B19) VVCF(TK,AK,B20)  \
01336    VVCF(TL,AL,B21) VVCF(TM,AM,B22) VVCF(TN,AN,B23) VVCF(TO,AO,B24) VVCF(TP,AP,B25)  \
01337    VVCF(TQ,AQ,B26) VVCF(TR,AR,B27)                                                  \
01338    CPPPROTOCLSFSUB27(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
01339    ACF(LN,T1,A1,1)  ACF(LN,T2,A2,2)  ACF(LN,T3,A3,3)  ACF(LN,T4,A4,4)          \
01340    ACF(LN,T5,A5,5)  ACF(LN,T6,A6,6)  ACF(LN,T7,A7,7)  ACF(LN,T8,A8,8)          \
01341    ACF(LN,T9,A9,9)  ACF(LN,TA,AA,10) ACF(LN,TB,AB,11) ACF(LN,TC,AC,12)         \
01342    ACF(LN,TD,AD,13) ACF(LN,TE,AE,14) ACF(LN,TF,AF,15) ACF(LN,TG,AG,16)         \
01343    ACF(LN,TH,AH,17) ACF(LN,TI,AI,18) ACF(LN,TJ,AJ,19) ACF(LN,TK,AK,20)         \
01344    ACF(LN,TL,AL,21) ACF(LN,TM,AM,22) ACF(LN,TN,AN,23) ACF(LN,TO,AO,24)         \
01345    ACF(LN,TP,AP,25) ACF(LN,TQ,AQ,26) ACF(LN,TR,AR,27)                          \
01346    CFC_(UN,LN)( CFARGTA27(AACF,JCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR,\
01347                                    A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK,AL,AM,AN,AO,AP,AQ,AR) ); \
01348  WCF(T1,A1,1)  WCF(T2,A2,2)  WCF(T3,A3,3)  WCF(T4,A4,4)  WCF(T5,A5,5)  WCF(T6,A6,6)  \
01349  WCF(T7,A7,7)  WCF(T8,A8,8)  WCF(T9,A9,9)  WCF(TA,AA,10) WCF(TB,AB,11) WCF(TC,AC,12) \
01350  WCF(TD,AD,13) WCF(TE,AE,14) WCF(TF,AF,15) WCF(TG,AG,16) WCF(TH,AH,17) WCF(TI,AI,18) \
01351  WCF(TJ,AJ,19) WCF(TK,AK,20) WCF(TL,AL,21) WCF(TM,AM,22) WCF(TN,AN,23) WCF(TO,AO,24) \
01352  WCF(TP,AP,25) WCF(TQ,AQ,26) WCF(TR,AR,27) }while(0)
01353 #endif
01354 #endif         /* MAX_PREPRO_ARGS */
01355 
01356 /*-------------------------------------------------------------------------*/
01357 
01358 /*               UTILITIES FOR C TO CALL FORTRAN FUNCTIONS                 */
01359 
01360 /*N.B. PROTOCCALLSFFUNn(..) generates code, whether or not the FORTRAN
01361   function is called. Therefore, especially for creator's of C header files
01362   for large FORTRAN libraries which include many functions, to reduce
01363   compile time and object code size, it may be desirable to create
01364   preprocessor directives to allow users to create code for only those
01365   functions which they use.                                                */
01366 
01367 /* The following defines the maximum length string that a function can return.
01368    Of course it may be undefine-d and re-define-d before individual
01369    PROTOCCALLSFFUNn(..) as required. It would also be nice to have this derived
01370    from the individual machines' limits.                                      */
01371 #define MAX_LEN_FORTRAN_FUNCTION_STRING 0x4FE
01372 
01373 /* The following defines a character used by CFORTRAN.H to flag the end of a
01374    string coming out of a FORTRAN routine.                                 */
01375 #define CFORTRAN_NON_CHAR 0x7F
01376 
01377 #ifdef OLD_VAXC                                /* Prevent %CC-I-PARAMNOTUSED. */
01378 #pragma nostandard
01379 #endif
01380 
01381 #define _SEP_(TN,C,cfCOMMA)     _(__SEP_,C)(TN,cfCOMMA)
01382 #define __SEP_0(TN,cfCOMMA)  
01383 #define __SEP_1(TN,cfCOMMA)     _Icf(2,SEP,TN,cfCOMMA,0)
01384 #define        INT_cfSEP(T,B) _(A,B)
01385 #define       INTV_cfSEP(T,B) INT_cfSEP(T,B)
01386 #define      INTVV_cfSEP(T,B) INT_cfSEP(T,B)
01387 #define     INTVVV_cfSEP(T,B) INT_cfSEP(T,B)
01388 #define    INTVVVV_cfSEP(T,B) INT_cfSEP(T,B)
01389 #define   INTVVVVV_cfSEP(T,B) INT_cfSEP(T,B)
01390 #define  INTVVVVVV_cfSEP(T,B) INT_cfSEP(T,B)
01391 #define INTVVVVVVV_cfSEP(T,B) INT_cfSEP(T,B)
01392 #define       PINT_cfSEP(T,B) INT_cfSEP(T,B)
01393 #define      PVOID_cfSEP(T,B) INT_cfSEP(T,B)
01394 #define    ROUTINE_cfSEP(T,B) INT_cfSEP(T,B)
01395 #define     SIMPLE_cfSEP(T,B) INT_cfSEP(T,B)
01396 #define       VOID_cfSEP(T,B) INT_cfSEP(T,B)    /* For FORTRAN calls C subr.s.*/
01397 #define     STRING_cfSEP(T,B) INT_cfSEP(T,B)
01398 #define    STRINGV_cfSEP(T,B) INT_cfSEP(T,B)
01399 #define    PSTRING_cfSEP(T,B) INT_cfSEP(T,B)
01400 #define   PSTRINGV_cfSEP(T,B) INT_cfSEP(T,B)
01401 #define   PNSTRING_cfSEP(T,B) INT_cfSEP(T,B)
01402 #define   PPSTRING_cfSEP(T,B) INT_cfSEP(T,B)
01403 #define    ZTRINGV_cfSEP(T,B) INT_cfSEP(T,B)
01404 #define   PZTRINGV_cfSEP(T,B) INT_cfSEP(T,B)
01405                          
01406 #if defined(SIGNED_BYTE) || !defined(UNSIGNED_BYTE)
01407 #ifdef OLD_VAXC
01408 #define INTEGER_BYTE               char    /* Old VAXC barfs on 'signed char' */
01409 #else
01410 #define INTEGER_BYTE        signed char    /* default */
01411 #endif
01412 #else
01413 #define INTEGER_BYTE        unsigned char
01414 #endif
01415 #define    BYTEVVVVVVV_cfTYPE INTEGER_BYTE
01416 #define  DOUBLEVVVVVVV_cfTYPE DOUBLE_PRECISION 
01417 #define   FLOATVVVVVVV_cfTYPE FORTRAN_REAL
01418 #define     INTVVVVVVV_cfTYPE int
01419 #define LOGICALVVVVVVV_cfTYPE int
01420 #define    LONGVVVVVVV_cfTYPE long
01421 #define LONGLONGVVVVVVV_cfTYPE LONGLONG   /* added by MR December 2005 */
01422 #define   SHORTVVVVVVV_cfTYPE short
01423 #define          PBYTE_cfTYPE INTEGER_BYTE
01424 #define        PDOUBLE_cfTYPE DOUBLE_PRECISION 
01425 #define         PFLOAT_cfTYPE FORTRAN_REAL
01426 #define           PINT_cfTYPE int
01427 #define       PLOGICAL_cfTYPE int
01428 #define          PLONG_cfTYPE long
01429 #define      PLONGLONG_cfTYPE LONGLONG  /* added by MR December 2005 */
01430 #define         PSHORT_cfTYPE short
01431 
01432 #define CFARGS0(A,T,V,W,X,Y,Z) _3(T,_cf,A)
01433 #define CFARGS1(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V)
01434 #define CFARGS2(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W)
01435 #define CFARGS3(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X)
01436 #define CFARGS4(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X,Y)
01437 #define CFARGS5(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X,Y,Z)
01438 
01439 #define  _Icf(N,T,I,X,Y)                 _(I,_cfINT)(N,T,I,X,Y,0)
01440 #define _Icf4(N,T,I,X,Y,Z)               _(I,_cfINT)(N,T,I,X,Y,Z)
01441 #define           BYTE_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)
01442 #define         DOUBLE_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INT,B,X,Y,Z,0)
01443 #define          FLOAT_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)
01444 #define            INT_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)
01445 #define        LOGICAL_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)
01446 #define           LONG_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)
01447 #define       LONGLONG_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01448 #define          SHORT_cfINT(N,A,B,X,Y,Z)        DOUBLE_cfINT(N,A,B,X,Y,Z)
01449 #define          PBYTE_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)
01450 #define        PDOUBLE_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,PINT,B,X,Y,Z,0)
01451 #define         PFLOAT_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)
01452 #define           PINT_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)
01453 #define       PLOGICAL_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)
01454 #define          PLONG_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)
01455 #define      PLONGLONG_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01456 #define         PSHORT_cfINT(N,A,B,X,Y,Z)       PDOUBLE_cfINT(N,A,B,X,Y,Z)
01457 #define          BYTEV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)
01458 #define         BYTEVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)
01459 #define        BYTEVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
01460 #define       BYTEVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
01461 #define      BYTEVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
01462 #define     BYTEVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
01463 #define    BYTEVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
01464 #define        DOUBLEV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTV,B,X,Y,Z,0)
01465 #define       DOUBLEVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVV,B,X,Y,Z,0)
01466 #define      DOUBLEVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVV,B,X,Y,Z,0)
01467 #define     DOUBLEVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVV,B,X,Y,Z,0)
01468 #define    DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVV,B,X,Y,Z,0)
01469 #define   DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVVV,B,X,Y,Z,0)
01470 #define  DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVVVV,B,X,Y,Z,0)
01471 #define         FLOATV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)
01472 #define        FLOATVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)
01473 #define       FLOATVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
01474 #define      FLOATVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
01475 #define     FLOATVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
01476 #define    FLOATVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
01477 #define   FLOATVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
01478 #define           INTV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)
01479 #define          INTVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)
01480 #define         INTVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
01481 #define        INTVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
01482 #define       INTVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
01483 #define      INTVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
01484 #define     INTVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
01485 #define       LOGICALV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)
01486 #define      LOGICALVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)
01487 #define     LOGICALVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
01488 #define    LOGICALVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
01489 #define   LOGICALVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
01490 #define  LOGICALVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
01491 #define LOGICALVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
01492 #define          LONGV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)
01493 #define         LONGVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)
01494 #define        LONGVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
01495 #define       LONGVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
01496 #define      LONGVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
01497 #define     LONGVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
01498 #define    LONGVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
01499 #define      LONGLONGV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01500 #define     LONGLONGVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01501 #define    LONGLONGVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01502 #define   LONGLONGVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01503 #define  LONGLONGVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01504 #define LONGLONGVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01505 #define LONGLONGVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
01506 #define         SHORTV_cfINT(N,A,B,X,Y,Z)       DOUBLEV_cfINT(N,A,B,X,Y,Z)
01507 #define        SHORTVV_cfINT(N,A,B,X,Y,Z)      DOUBLEVV_cfINT(N,A,B,X,Y,Z)
01508 #define       SHORTVVV_cfINT(N,A,B,X,Y,Z)     DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
01509 #define      SHORTVVVV_cfINT(N,A,B,X,Y,Z)    DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
01510 #define     SHORTVVVVV_cfINT(N,A,B,X,Y,Z)   DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
01511 #define    SHORTVVVVVV_cfINT(N,A,B,X,Y,Z)  DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
01512 #define   SHORTVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
01513 #define          PVOID_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,B,B,X,Y,Z,0)
01514 #define        ROUTINE_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01515 /*CRAY coughs on the first,
01516   i.e. the usual trouble of not being able to
01517   define macros to macros with arguments. 
01518   New ultrix is worse, it coughs on all such uses.
01519  */
01520 /*#define       SIMPLE_cfINT                    PVOID_cfINT*/
01521 #define         SIMPLE_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01522 #define           VOID_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01523 #define         STRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01524 #define        STRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01525 #define        PSTRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01526 #define       PSTRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01527 #define       PNSTRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01528 #define       PPSTRING_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01529 #define        ZTRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01530 #define       PZTRINGV_cfINT(N,A,B,X,Y,Z)         PVOID_cfINT(N,A,B,X,Y,Z)
01531 #define           CF_0_cfINT(N,A,B,X,Y,Z)
01532                          
01533 
01534 #define   UCF(TN,I,C)  _SEP_(TN,C,cfCOMMA) _Icf(2,U,TN,_(A,I),0)
01535 #define  UUCF(TN,I,C)  _SEP_(TN,C,cfCOMMA) _SEP_(TN,1,I) 
01536 #define UUUCF(TN,I,C)  _SEP_(TN,C,cfCOLON) _Icf(2,U,TN,_(A,I),0)
01537 #define        INT_cfU(T,A) _(T,VVVVVVV_cfTYPE)   A
01538 #define       INTV_cfU(T,A) _(T,VVVVVV_cfTYPE)  * A
01539 #define      INTVV_cfU(T,A) _(T,VVVVV_cfTYPE)   * A
01540 #define     INTVVV_cfU(T,A) _(T,VVVV_cfTYPE)    * A
01541 #define    INTVVVV_cfU(T,A) _(T,VVV_cfTYPE)     * A
01542 #define   INTVVVVV_cfU(T,A) _(T,VV_cfTYPE)      * A
01543 #define  INTVVVVVV_cfU(T,A) _(T,V_cfTYPE)       * A
01544 #define INTVVVVVVV_cfU(T,A) _(T,_cfTYPE)        * A
01545 #define       PINT_cfU(T,A) _(T,_cfTYPE)        * A
01546 #define      PVOID_cfU(T,A) void  *A 
01547 #define    ROUTINE_cfU(T,A) void (*A)(CF_NULL_PROTO) 
01548 #define       VOID_cfU(T,A) void   A    /* Needed for C calls FORTRAN sub.s.  */
01549 #define     STRING_cfU(T,A) char  *A    /*            via VOID and wrapper.   */
01550 #define    STRINGV_cfU(T,A) char  *A
01551 #define    PSTRING_cfU(T,A) char  *A
01552 #define   PSTRINGV_cfU(T,A) char  *A
01553 #define    ZTRINGV_cfU(T,A) char  *A
01554 #define   PZTRINGV_cfU(T,A) char  *A
01555 
01556 /* VOID breaks U into U and UU. */
01557 #define       INT_cfUU(T,A) _(T,VVVVVVV_cfTYPE) A
01558 #define      VOID_cfUU(T,A)             /* Needed for FORTRAN calls C sub.s.  */
01559 #define    STRING_cfUU(T,A) char *A 
01560 
01561 
01562 #define      BYTE_cfPU(A)   CFextern INTEGER_BYTE      FCALLSC_QUALIFIER A
01563 #define    DOUBLE_cfPU(A)   CFextern DOUBLE_PRECISION  FCALLSC_QUALIFIER A
01564 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
01565 #if defined (f2cFortran) && ! defined (gFortran)
01566 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
01567 #define     FLOAT_cfPU(A)   CFextern DOUBLE_PRECISION  FCALLSC_QUALIFIER A
01568 #else
01569 #define     FLOAT_cfPU(A)   CFextern FORTRAN_REAL      FCALLSC_QUALIFIER A
01570 #endif
01571 #else                                                      
01572 #define     FLOAT_cfPU(A)   CFextern FLOATFUNCTIONTYPE FCALLSC_QUALIFIER A
01573 #endif                                                     
01574 #define       INT_cfPU(A)   CFextern int   FCALLSC_QUALIFIER   A
01575 #define   LOGICAL_cfPU(A)   CFextern int   FCALLSC_QUALIFIER   A
01576 #define      LONG_cfPU(A)   CFextern long  FCALLSC_QUALIFIER   A
01577 #define     SHORT_cfPU(A)   CFextern short FCALLSC_QUALIFIER   A
01578 #define    STRING_cfPU(A)   CFextern void  FCALLSC_QUALIFIER   A
01579 #define      VOID_cfPU(A)   CFextern void  FCALLSC_QUALIFIER   A
01580 
01581 #define    BYTE_cfE INTEGER_BYTE     A0;
01582 #define  DOUBLE_cfE DOUBLE_PRECISION A0;
01583 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
01584 #define   FLOAT_cfE FORTRAN_REAL  A0;
01585 #else
01586 #define   FLOAT_cfE FORTRAN_REAL AA0;   FLOATFUNCTIONTYPE A0;
01587 #endif
01588 #define     INT_cfE int    A0;
01589 #define LOGICAL_cfE int    A0;
01590 #define    LONG_cfE long   A0;
01591 #define   SHORT_cfE short  A0;
01592 #define    VOID_cfE
01593 #ifdef vmsFortran
01594 #define  STRING_cfE static char AA0[1+MAX_LEN_FORTRAN_FUNCTION_STRING];        \
01595                        static fstring A0 =                                     \
01596              {MAX_LEN_FORTRAN_FUNCTION_STRING,DSC$K_DTYPE_T,DSC$K_CLASS_S,AA0};\
01597                memset(AA0, CFORTRAN_NON_CHAR, MAX_LEN_FORTRAN_FUNCTION_STRING);\
01598                                     *(AA0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';
01599 #else
01600 #ifdef CRAYFortran
01601 #define  STRING_cfE static char AA0[1+MAX_LEN_FORTRAN_FUNCTION_STRING];        \
01602                    static _fcd A0; *(AA0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';\
01603                 memset(AA0,CFORTRAN_NON_CHAR, MAX_LEN_FORTRAN_FUNCTION_STRING);\
01604                             A0 = _cptofcd(AA0,MAX_LEN_FORTRAN_FUNCTION_STRING);
01605 #else
01606 /* 'cc: SC3.0.1 13 Jul 1994' barfs on char A0[0x4FE+1]; 
01607  * char A0[0x4FE +1]; char A0[1+0x4FE]; are both OK.     */
01608 #define STRING_cfE static char A0[1+MAX_LEN_FORTRAN_FUNCTION_STRING];          \
01609                        memset(A0, CFORTRAN_NON_CHAR,                           \
01610                               MAX_LEN_FORTRAN_FUNCTION_STRING);                \
01611                        *(A0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';
01612 #endif
01613 #endif
01614 /* ESTRING must use static char. array which is guaranteed to exist after
01615    function returns.                                                     */
01616 
01617 /* N.B.i) The diff. for 0 (Zero) and >=1 arguments.
01618        ii)That the following create an unmatched bracket, i.e. '(', which
01619           must of course be matched in the call.
01620        iii)Commas must be handled very carefully                         */
01621 #define    INT_cfGZ(T,UN,LN) A0=CFC_(UN,LN)(
01622 #define   VOID_cfGZ(T,UN,LN)    CFC_(UN,LN)(
01623 #ifdef vmsFortran
01624 #define STRING_cfGZ(T,UN,LN)    CFC_(UN,LN)(&A0
01625 #else
01626 #if defined(CRAYFortran) || defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
01627 #define STRING_cfGZ(T,UN,LN)    CFC_(UN,LN)( A0
01628 #else
01629 #define STRING_cfGZ(T,UN,LN)    CFC_(UN,LN)( A0,MAX_LEN_FORTRAN_FUNCTION_STRING
01630 #endif
01631 #endif
01632 
01633 #define     INT_cfG(T,UN,LN)    INT_cfGZ(T,UN,LN)
01634 #define    VOID_cfG(T,UN,LN)   VOID_cfGZ(T,UN,LN)
01635 #define  STRING_cfG(T,UN,LN) STRING_cfGZ(T,UN,LN), /*, is only diff. from _cfG*/
01636 
01637 #define    BYTEVVVVVVV_cfPP
01638 #define     INTVVVVVVV_cfPP     /* These complement FLOATVVVVVVV_cfPP. */
01639 #define  DOUBLEVVVVVVV_cfPP
01640 #define LOGICALVVVVVVV_cfPP
01641 #define    LONGVVVVVVV_cfPP
01642 #define   SHORTVVVVVVV_cfPP
01643 #define          PBYTE_cfPP
01644 #define           PINT_cfPP
01645 #define        PDOUBLE_cfPP
01646 #define       PLOGICAL_cfPP
01647 #define          PLONG_cfPP
01648 #define         PSHORT_cfPP
01649 #define         PFLOAT_cfPP FLOATVVVVVVV_cfPP
01650 
01651 #define BCF(TN,AN,C)        _SEP_(TN,C,cfCOMMA) _Icf(2,B,TN,AN,0)
01652 #define        INT_cfB(T,A) (_(T,VVVVVVV_cfTYPE)) A
01653 #define       INTV_cfB(T,A)            A
01654 #define      INTVV_cfB(T,A)           (A)[0]
01655 #define     INTVVV_cfB(T,A)           (A)[0][0]
01656 #define    INTVVVV_cfB(T,A)           (A)[0][0][0]
01657 #define   INTVVVVV_cfB(T,A)           (A)[0][0][0][0]
01658 #define  INTVVVVVV_cfB(T,A)           (A)[0][0][0][0][0]
01659 #define INTVVVVVVV_cfB(T,A)           (A)[0][0][0][0][0][0]
01660 #define       PINT_cfB(T,A) _(T,_cfPP)&A
01661 #define     STRING_cfB(T,A) (char *)   A
01662 #define    STRINGV_cfB(T,A) (char *)   A
01663 #define    PSTRING_cfB(T,A) (char *)   A
01664 #define   PSTRINGV_cfB(T,A) (char *)   A
01665 #define      PVOID_cfB(T,A) (void *)   A
01666 #define    ROUTINE_cfB(T,A) (cfCAST_FUNCTION)A
01667 #define    ZTRINGV_cfB(T,A) (char *)   A
01668 #define   PZTRINGV_cfB(T,A) (char *)   A
01669                                                                 
01670 #define SCF(TN,NAME,I,A)    _(TN,_cfSTR)(3,S,NAME,I,A,0,0)
01671 #define  DEFAULT_cfS(M,I,A)
01672 #define  LOGICAL_cfS(M,I,A)
01673 #define PLOGICAL_cfS(M,I,A)
01674 #define   STRING_cfS(M,I,A) ,sizeof(A)
01675 #define  STRINGV_cfS(M,I,A) ,( (unsigned)0xFFFF*firstindexlength(A) \
01676                               +secondindexlength(A))
01677 #define  PSTRING_cfS(M,I,A) ,sizeof(A)
01678 #define PSTRINGV_cfS(M,I,A) STRINGV_cfS(M,I,A)
01679 #define  ZTRINGV_cfS(M,I,A)
01680 #define PZTRINGV_cfS(M,I,A)
01681 
01682 #define   HCF(TN,I)         _(TN,_cfSTR)(3,H,cfCOMMA, H,_(C,I),0,0)
01683 #define  HHCF(TN,I)         _(TN,_cfSTR)(3,H,cfCOMMA,HH,_(C,I),0,0)
01684 #define HHHCF(TN,I)         _(TN,_cfSTR)(3,H,cfCOLON, H,_(C,I),0,0)
01685 #define  H_CF_SPECIAL       unsigned
01686 #define HH_CF_SPECIAL
01687 #define  DEFAULT_cfH(M,I,A)
01688 #define  LOGICAL_cfH(S,U,B)
01689 #define PLOGICAL_cfH(S,U,B)
01690 #define   STRING_cfH(S,U,B) _(A,S) _(U,_CF_SPECIAL) B
01691 #define  STRINGV_cfH(S,U,B) STRING_cfH(S,U,B)
01692 #define  PSTRING_cfH(S,U,B) STRING_cfH(S,U,B)
01693 #define PSTRINGV_cfH(S,U,B) STRING_cfH(S,U,B)
01694 #define PNSTRING_cfH(S,U,B) STRING_cfH(S,U,B)
01695 #define PPSTRING_cfH(S,U,B) STRING_cfH(S,U,B)
01696 #define  ZTRINGV_cfH(S,U,B)
01697 #define PZTRINGV_cfH(S,U,B)
01698 
01699 /* Need VOID_cfSTR because Absoft forced function types go through _cfSTR. */
01700 /* No spaces inside expansion. They screws up macro catenation kludge.     */
01701 #define           VOID_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01702 #define           BYTE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01703 #define         DOUBLE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01704 #define          FLOAT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01705 #define            INT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01706 #define        LOGICAL_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,LOGICAL,A,B,C,D,E)
01707 #define           LONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01708 #define       LONGLONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01709 #define          SHORT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01710 #define          BYTEV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01711 #define         BYTEVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01712 #define        BYTEVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01713 #define       BYTEVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01714 #define      BYTEVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01715 #define     BYTEVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01716 #define    BYTEVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01717 #define        DOUBLEV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01718 #define       DOUBLEVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01719 #define      DOUBLEVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01720 #define     DOUBLEVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01721 #define    DOUBLEVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01722 #define   DOUBLEVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01723 #define  DOUBLEVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01724 #define         FLOATV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01725 #define        FLOATVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01726 #define       FLOATVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01727 #define      FLOATVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01728 #define     FLOATVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01729 #define    FLOATVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01730 #define   FLOATVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01731 #define           INTV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01732 #define          INTVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01733 #define         INTVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01734 #define        INTVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01735 #define       INTVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01736 #define      INTVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01737 #define     INTVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01738 #define       LOGICALV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01739 #define      LOGICALVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01740 #define     LOGICALVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01741 #define    LOGICALVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01742 #define   LOGICALVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01743 #define  LOGICALVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01744 #define LOGICALVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01745 #define          LONGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01746 #define         LONGVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01747 #define        LONGVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01748 #define       LONGVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01749 #define      LONGVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01750 #define     LONGVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01751 #define    LONGVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01752 #define      LONGLONGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01753 #define     LONGLONGVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01754 #define    LONGLONGVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01755 #define   LONGLONGVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01756 #define  LONGLONGVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01757 #define LONGLONGVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01758 #define LONGLONGVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01759 #define         SHORTV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01760 #define        SHORTVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01761 #define       SHORTVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01762 #define      SHORTVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01763 #define     SHORTVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01764 #define    SHORTVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01765 #define   SHORTVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01766 #define          PBYTE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01767 #define        PDOUBLE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01768 #define         PFLOAT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01769 #define           PINT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01770 #define       PLOGICAL_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PLOGICAL,A,B,C,D,E)
01771 #define          PLONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01772 #define      PLONGLONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
01773 #define         PSHORT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01774 #define         STRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,STRING,A,B,C,D,E)
01775 #define        PSTRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PSTRING,A,B,C,D,E)
01776 #define        STRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,STRINGV,A,B,C,D,E)
01777 #define       PSTRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PSTRINGV,A,B,C,D,E)
01778 #define       PNSTRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PNSTRING,A,B,C,D,E)
01779 #define       PPSTRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PPSTRING,A,B,C,D,E)
01780 #define          PVOID_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01781 #define        ROUTINE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01782 #define         SIMPLE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
01783 #define        ZTRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,ZTRINGV,A,B,C,D,E)
01784 #define       PZTRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PZTRINGV,A,B,C,D,E)
01785 #define           CF_0_cfSTR(N,T,A,B,C,D,E)
01786 
01787 /* See ACF table comments, which explain why CCF was split into two. */
01788 #define CCF(NAME,TN,I)     _(TN,_cfSTR)(5,C,NAME,I,_(A,I),_(B,I),_(C,I))
01789 #define  DEFAULT_cfC(M,I,A,B,C)
01790 #define  LOGICAL_cfC(M,I,A,B,C)  A=C2FLOGICAL( A);
01791 #define PLOGICAL_cfC(M,I,A,B,C) *A=C2FLOGICAL(*A);
01792 #ifdef vmsFortran
01793 #define   STRING_cfC(M,I,A,B,C) (B.clen=strlen(A),B.f.dsc$a_pointer=A,         \
01794         C==sizeof(char*)||C==(unsigned)(B.clen+1)?B.f.dsc$w_length=B.clen:     \
01795           (memset((A)+B.clen,' ',C-B.clen-1),A[B.f.dsc$w_length=C-1]='\0'));
01796       /* PSTRING_cfC to beware of array A which does not contain any \0.      */
01797 #define  PSTRING_cfC(M,I,A,B,C) (B.dsc$a_pointer=A, C==sizeof(char*) ?         \
01798              B.dsc$w_length=strlen(A):  (A[C-1]='\0',B.dsc$w_length=strlen(A), \
01799        memset((A)+B.dsc$w_length,' ',C-B.dsc$w_length-1), B.dsc$w_length=C-1));
01800 #else
01801 #define   STRING_cfC(M,I,A,B,C) (B.nombre=A,B.clen=strlen(A),                             \
01802                 C==sizeof(char*)||C==(unsigned)(B.clen+1)?B.flen=B.clen:       \
01803                         (memset(B.nombre+B.clen,' ',C-B.clen-1),B.nombre[B.flen=C-1]='\0'));
01804 #define  PSTRING_cfC(M,I,A,B,C) (C==sizeof(char*)? B=strlen(A):                \
01805                     (A[C-1]='\0',B=strlen(A),memset((A)+B,' ',C-B-1),B=C-1));
01806 #endif
01807           /* For CRAYFortran for (P)STRINGV_cfC, B.fs is set, but irrelevant. */
01808 #define  STRINGV_cfC(M,I,A,B,C) \
01809         AATRINGV_cfA(    A,B,(C/0xFFFF)*(C%0xFFFF),C/0xFFFF,C%0xFFFF)
01810 #define PSTRINGV_cfC(M,I,A,B,C) \
01811        APATRINGV_cfA(    A,B,(C/0xFFFF)*(C%0xFFFF),C/0xFFFF,C%0xFFFF)
01812 #define  ZTRINGV_cfC(M,I,A,B,C) \
01813         AATRINGV_cfA(    A,B, (_3(M,_ELEMS_,I))*((_3(M,_ELEMLEN_,I))+1),       \
01814                               (_3(M,_ELEMS_,I)), (_3(M,_ELEMLEN_,I))+1   )
01815 #define PZTRINGV_cfC(M,I,A,B,C) \
01816        APATRINGV_cfA(    A,B, (_3(M,_ELEMS_,I))*((_3(M,_ELEMLEN_,I))+1),       \
01817                               (_3(M,_ELEMS_,I)), (_3(M,_ELEMLEN_,I))+1   )
01818 
01819 #define     BYTE_cfCCC(A,B) &A
01820 #define   DOUBLE_cfCCC(A,B) &A
01821 #if !defined(__CF__KnR)
01822 #define    FLOAT_cfCCC(A,B) &A
01823                                /* Although the VAX doesn't, at least the      */
01824 #else                          /* HP and K&R mips promote float arg.'s of     */
01825 #define    FLOAT_cfCCC(A,B) &B /* unprototyped functions to double. Cannot    */
01826 #endif                         /* use A here to pass the argument to FORTRAN. */
01827 #define      INT_cfCCC(A,B) &A
01828 #define  LOGICAL_cfCCC(A,B) &A
01829 #define     LONG_cfCCC(A,B) &A
01830 #define    SHORT_cfCCC(A,B) &A
01831 #define    PBYTE_cfCCC(A,B)  A
01832 #define  PDOUBLE_cfCCC(A,B)  A
01833 #define   PFLOAT_cfCCC(A,B)  A
01834 #define     PINT_cfCCC(A,B)  A
01835 #define PLOGICAL_cfCCC(A,B)  B=A       /* B used to keep a common W table. */
01836 #define    PLONG_cfCCC(A,B)  A
01837 #define   PSHORT_cfCCC(A,B)  A
01838 
01839 #define CCCF(TN,I,M)           _SEP_(TN,M,cfCOMMA) _Icf(3,CC,TN,_(A,I),_(B,I))
01840 #define        INT_cfCC(T,A,B) _(T,_cfCCC)(A,B) 
01841 #define       INTV_cfCC(T,A,B)  A
01842 #define      INTVV_cfCC(T,A,B)  A
01843 #define     INTVVV_cfCC(T,A,B)  A
01844 #define    INTVVVV_cfCC(T,A,B)  A
01845 #define   INTVVVVV_cfCC(T,A,B)  A
01846 #define  INTVVVVVV_cfCC(T,A,B)  A
01847 #define INTVVVVVVV_cfCC(T,A,B)  A
01848 #define       PINT_cfCC(T,A,B) _(T,_cfCCC)(A,B) 
01849 #define      PVOID_cfCC(T,A,B)  A
01850 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
01851 #define    ROUTINE_cfCC(T,A,B) &A
01852 #else
01853 #define    ROUTINE_cfCC(T,A,B)  A
01854 #endif
01855 #define     SIMPLE_cfCC(T,A,B)  A
01856 #ifdef vmsFortran
01857 #define     STRING_cfCC(T,A,B) &B.f
01858 #define    STRINGV_cfCC(T,A,B) &B
01859 #define    PSTRING_cfCC(T,A,B) &B
01860 #define   PSTRINGV_cfCC(T,A,B) &B
01861 #else
01862 #ifdef CRAYFortran
01863 #define     STRING_cfCC(T,A,B) _cptofcd(A,B.flen)
01864 #define    STRINGV_cfCC(T,A,B) _cptofcd(B.s,B.flen)
01865 #define    PSTRING_cfCC(T,A,B) _cptofcd(A,B)
01866 #define   PSTRINGV_cfCC(T,A,B) _cptofcd(A,B.flen)
01867 #else
01868 #define     STRING_cfCC(T,A,B)  A
01869 #define    STRINGV_cfCC(T,A,B)  B.fs
01870 #define    PSTRING_cfCC(T,A,B)  A
01871 #define   PSTRINGV_cfCC(T,A,B)  B.fs
01872 #endif
01873 #endif
01874 #define    ZTRINGV_cfCC(T,A,B)   STRINGV_cfCC(T,A,B)
01875 #define   PZTRINGV_cfCC(T,A,B)  PSTRINGV_cfCC(T,A,B)
01876 
01877 #define    BYTE_cfX  return A0;
01878 #define  DOUBLE_cfX  return A0;
01879 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
01880 #define   FLOAT_cfX  return A0;
01881 #else
01882 #define   FLOAT_cfX  ASSIGNFLOAT(AA0,A0); return AA0;
01883 #endif
01884 #define     INT_cfX  return A0;
01885 #define LOGICAL_cfX  return F2CLOGICAL(A0);
01886 #define    LONG_cfX  return A0;
01887 #define   SHORT_cfX  return A0;
01888 #define    VOID_cfX  return   ;
01889 #if defined(vmsFortran) || defined(CRAYFortran)
01890 #define  STRING_cfX  return kill_trailing(                                     \
01891                                       kill_trailing(AA0,CFORTRAN_NON_CHAR),' ');
01892 #else
01893 #define  STRING_cfX  return kill_trailing(                                     \
01894                                       kill_trailing( A0,CFORTRAN_NON_CHAR),' ');
01895 #endif
01896 
01897 #define CFFUN(NAME) _(__cf__,NAME)
01898 
01899 /* Note that we don't use LN here, but we keep it for consistency. */
01900 #define CCALLSFFUN0(UN,LN) CFFUN(UN)()
01901 
01902 #ifdef OLD_VAXC                                  /* Allow %CC-I-PARAMNOTUSED. */
01903 #pragma standard
01904 #endif
01905 
01906 #define CCALLSFFUN1( UN,LN,T1,                        A1)         \
01907         CCALLSFFUN5 (UN,LN,T1,CF_0,CF_0,CF_0,CF_0,A1,0,0,0,0)
01908 #define CCALLSFFUN2( UN,LN,T1,T2,                     A1,A2)      \
01909         CCALLSFFUN5 (UN,LN,T1,T2,CF_0,CF_0,CF_0,A1,A2,0,0,0)
01910 #define CCALLSFFUN3( UN,LN,T1,T2,T3,                  A1,A2,A3)   \
01911         CCALLSFFUN5 (UN,LN,T1,T2,T3,CF_0,CF_0,A1,A2,A3,0,0)
01912 #define CCALLSFFUN4( UN,LN,T1,T2,T3,T4,               A1,A2,A3,A4)\
01913         CCALLSFFUN5 (UN,LN,T1,T2,T3,T4,CF_0,A1,A2,A3,A4,0)
01914 #define CCALLSFFUN5( UN,LN,T1,T2,T3,T4,T5,            A1,A2,A3,A4,A5)          \
01915         CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,0,0,0,0,0)
01916 #define CCALLSFFUN6( UN,LN,T1,T2,T3,T4,T5,T6,         A1,A2,A3,A4,A5,A6)       \
01917         CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,0,0,0,0)
01918 #define CCALLSFFUN7( UN,LN,T1,T2,T3,T4,T5,T6,T7,      A1,A2,A3,A4,A5,A6,A7)    \
01919         CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,0,0,0)
01920 #define CCALLSFFUN8( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,   A1,A2,A3,A4,A5,A6,A7,A8) \
01921         CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,0,0)
01922 #define CCALLSFFUN9( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,A1,A2,A3,A4,A5,A6,A7,A8,A9)\
01923         CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,0)
01924 #define CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA)\
01925         CCALLSFFUN14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,0,0,0,0)
01926 #define CCALLSFFUN11(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB)\
01927         CCALLSFFUN14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,0,0,0)
01928 #define CCALLSFFUN12(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC)\
01929         CCALLSFFUN14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,0,0)
01930 #define CCALLSFFUN13(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD)\
01931         CCALLSFFUN14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,0)
01932 
01933 #define CCALLSFFUN14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE)\
01934 ((CFFUN(UN)(  BCF(T1,A1,0) BCF(T2,A2,1) BCF(T3,A3,1) BCF(T4,A4,1) BCF(T5,A5,1) \
01935               BCF(T6,A6,1) BCF(T7,A7,1) BCF(T8,A8,1) BCF(T9,A9,1) BCF(TA,AA,1) \
01936               BCF(TB,AB,1) BCF(TC,AC,1) BCF(TD,AD,1) BCF(TE,AE,1)              \
01937            SCF(T1,LN,1,A1)  SCF(T2,LN,2,A2)  SCF(T3,LN,3,A3)  SCF(T4,LN,4,A4)  \
01938            SCF(T5,LN,5,A5)  SCF(T6,LN,6,A6)  SCF(T7,LN,7,A7)  SCF(T8,LN,8,A8)  \
01939            SCF(T9,LN,9,A9)  SCF(TA,LN,10,AA) SCF(TB,LN,11,AB) SCF(TC,LN,12,AC) \
01940            SCF(TD,LN,13,AD) SCF(TE,LN,14,AE))))
01941 
01942 /*  N.B. Create a separate function instead of using (call function, function
01943 value here) because in order to create the variables needed for the input
01944 arg.'s which may be const.'s one has to do the creation within {}, but these
01945 can never be placed within ()'s. Therefore one must create wrapper functions.
01946 gcc, on the other hand may be able to avoid the wrapper functions. */
01947 
01948 /* Prototypes are needed to correctly handle the value returned correctly. N.B.
01949 Can only have prototype arg.'s with difficulty, a la G... table since FORTRAN
01950 functions returning strings have extra arg.'s. Don't bother, since this only
01951 causes a compiler warning to come up when one uses FCALLSCFUNn and CCALLSFFUNn
01952 for the same function in the same source code. Something done by the experts in
01953 debugging only.*/    
01954 
01955 #define PROTOCCALLSFFUN0(F,UN,LN)                                              \
01956 _(F,_cfPU)( CFC_(UN,LN))(CF_NULL_PROTO);                                       \
01957 static _Icf(2,U,F,CFFUN(UN),0)() {_(F,_cfE) _Icf(3,GZ,F,UN,LN) ABSOFT_cf1(F));_(F,_cfX)}
01958 
01959 #define PROTOCCALLSFFUN1( T0,UN,LN,T1)                                         \
01960         PROTOCCALLSFFUN5 (T0,UN,LN,T1,CF_0,CF_0,CF_0,CF_0)
01961 #define PROTOCCALLSFFUN2( T0,UN,LN,T1,T2)                                      \
01962         PROTOCCALLSFFUN5 (T0,UN,LN,T1,T2,CF_0,CF_0,CF_0)
01963 #define PROTOCCALLSFFUN3( T0,UN,LN,T1,T2,T3)                                   \
01964         PROTOCCALLSFFUN5 (T0,UN,LN,T1,T2,T3,CF_0,CF_0)
01965 #define PROTOCCALLSFFUN4( T0,UN,LN,T1,T2,T3,T4)                                \
01966         PROTOCCALLSFFUN5 (T0,UN,LN,T1,T2,T3,T4,CF_0)
01967 #define PROTOCCALLSFFUN5( T0,UN,LN,T1,T2,T3,T4,T5)                             \
01968         PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0)
01969 #define PROTOCCALLSFFUN6( T0,UN,LN,T1,T2,T3,T4,T5,T6)                          \
01970         PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0)
01971 #define PROTOCCALLSFFUN7( T0,UN,LN,T1,T2,T3,T4,T5,T6,T7)                       \
01972         PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0)
01973 #define PROTOCCALLSFFUN8( T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8)                    \
01974         PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0)
01975 #define PROTOCCALLSFFUN9( T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9)                 \
01976         PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0)
01977 #define PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA)              \
01978         PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0)
01979 #define PROTOCCALLSFFUN11(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB)           \
01980         PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0)
01981 #define PROTOCCALLSFFUN12(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC)        \
01982         PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0)
01983 #define PROTOCCALLSFFUN13(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD)     \
01984         PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0)
01985 
01986 /* HP/UX 9.01 cc requires the blank between '_Icf(3,G,T0,UN,LN) CCCF(T1,1,0)' */
01987 
01988 #ifndef __CF__KnR
01989 #define PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)  \
01990  _(T0,_cfPU)(CFC_(UN,LN))(CF_NULL_PROTO); static _Icf(2,U,T0,CFFUN(UN),0)(     \
01991    CFARGT14FS(UCF,HCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) )          \
01992 {       CFARGT14S(VCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)    _(T0,_cfE) \
01993  CCF(LN,T1,1)  CCF(LN,T2,2)  CCF(LN,T3,3)  CCF(LN,T4,4)  CCF(LN,T5,5)          \
01994  CCF(LN,T6,6)  CCF(LN,T7,7)  CCF(LN,T8,8)  CCF(LN,T9,9)  CCF(LN,TA,10)         \
01995  CCF(LN,TB,11) CCF(LN,TC,12) CCF(LN,TD,13) CCF(LN,TE,14)    _Icf(3,G,T0,UN,LN) \
01996  CFARGT14(CCCF,JCF,ABSOFT_cf1(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)); \
01997  WCF(T1,A1,1)   WCF(T2,A2,2)   WCF(T3,A3,3)   WCF(T4,A4,4)  WCF(T5,A5,5)       \
01998  WCF(T6,A6,6)   WCF(T7,A7,7)   WCF(T8,A8,8)   WCF(T9,A9,9)  WCF(TA,A10,10)     \
01999  WCF(TB,A11,11) WCF(TC,A12,12) WCF(TD,A13,13) WCF(TE,A14,14) _(T0,_cfX)}
02000 #else
02001 #define PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)  \
02002  _(T0,_cfPU)(CFC_(UN,LN))(CF_NULL_PROTO); static _Icf(2,U,T0,CFFUN(UN),0)(     \
02003    CFARGT14FS(UUCF,HHCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) )        \
02004  CFARGT14FS(UUUCF,HHHCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) ;        \
02005 {       CFARGT14S(VCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)    _(T0,_cfE) \
02006  CCF(LN,T1,1)  CCF(LN,T2,2)  CCF(LN,T3,3)  CCF(LN,T4,4)  CCF(LN,T5,5)          \
02007  CCF(LN,T6,6)  CCF(LN,T7,7)  CCF(LN,T8,8)  CCF(LN,T9,9)  CCF(LN,TA,10)         \
02008  CCF(LN,TB,11) CCF(LN,TC,12) CCF(LN,TD,13) CCF(LN,TE,14)    _Icf(3,G,T0,UN,LN) \
02009  CFARGT14(CCCF,JCF,ABSOFT_cf1(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)); \
02010  WCF(T1,A1,1)   WCF(T2,A2,2)   WCF(T3,A3,3)   WCF(T4,A4,4)   WCF(T5,A5,5)      \
02011  WCF(T6,A6,6)   WCF(T7,A7,7)   WCF(T8,A8,8)   WCF(T9,A9,9)   WCF(TA,A10,10)    \
02012  WCF(TB,A11,11) WCF(TC,A12,12) WCF(TD,A13,13) WCF(TE,A14,14) _(T0,_cfX)}
02013 #endif
02014 
02015 /*-------------------------------------------------------------------------*/
02016 
02017 /*               UTILITIES FOR FORTRAN TO CALL C ROUTINES                  */
02018 
02019 #ifdef OLD_VAXC                                /* Prevent %CC-I-PARAMNOTUSED. */
02020 #pragma nostandard
02021 #endif
02022 
02023 #if defined(vmsFortran) || defined(CRAYFortran)
02024 #define   DCF(TN,I)
02025 #define  DDCF(TN,I)
02026 #define DDDCF(TN,I)
02027 #else
02028 #define   DCF(TN,I)          HCF(TN,I)
02029 #define  DDCF(TN,I)         HHCF(TN,I)
02030 #define DDDCF(TN,I)        HHHCF(TN,I)
02031 #endif
02032 
02033 #define QCF(TN,I)       _(TN,_cfSTR)(1,Q,_(B,I), 0,0,0,0)
02034 #define  DEFAULT_cfQ(B)
02035 #define  LOGICAL_cfQ(B)
02036 #define PLOGICAL_cfQ(B)
02037 #define  STRINGV_cfQ(B) char *B; unsigned int _(B,N);
02038 #define   STRING_cfQ(B) char *B=NULL;
02039 #define  PSTRING_cfQ(B) char *B=NULL;
02040 #define PSTRINGV_cfQ(B) STRINGV_cfQ(B)
02041 #define PNSTRING_cfQ(B) char *B=NULL;
02042 #define PPSTRING_cfQ(B)
02043 
02044 #ifdef     __sgi   /* Else SGI gives warning 182 contrary to its C LRM A.17.7 */
02045 #define ROUTINE_orig    *(void**)& 
02046 #else
02047 #define ROUTINE_orig     (void *)  
02048 #endif
02049 
02050 #define ROUTINE_1     ROUTINE_orig   
02051 #define ROUTINE_2     ROUTINE_orig   
02052 #define ROUTINE_3     ROUTINE_orig   
02053 #define ROUTINE_4     ROUTINE_orig   
02054 #define ROUTINE_5     ROUTINE_orig   
02055 #define ROUTINE_6     ROUTINE_orig   
02056 #define ROUTINE_7     ROUTINE_orig   
02057 #define ROUTINE_8     ROUTINE_orig   
02058 #define ROUTINE_9     ROUTINE_orig   
02059 #define ROUTINE_10    ROUTINE_orig   
02060 #define ROUTINE_11    ROUTINE_orig   
02061 #define ROUTINE_12    ROUTINE_orig   
02062 #define ROUTINE_13    ROUTINE_orig   
02063 #define ROUTINE_14    ROUTINE_orig   
02064 #define ROUTINE_15    ROUTINE_orig   
02065 #define ROUTINE_16    ROUTINE_orig   
02066 #define ROUTINE_17    ROUTINE_orig   
02067 #define ROUTINE_18    ROUTINE_orig   
02068 #define ROUTINE_19    ROUTINE_orig   
02069 #define ROUTINE_20    ROUTINE_orig   
02070 #define ROUTINE_21    ROUTINE_orig   
02071 #define ROUTINE_22    ROUTINE_orig   
02072 #define ROUTINE_23    ROUTINE_orig   
02073 #define ROUTINE_24    ROUTINE_orig   
02074 #define ROUTINE_25    ROUTINE_orig   
02075 #define ROUTINE_26    ROUTINE_orig   
02076 #define ROUTINE_27    ROUTINE_orig   
02077 
02078 #define TCF(NAME,TN,I,M)              _SEP_(TN,M,cfCOMMA) _(TN,_cfT)(NAME,I,_(A,I),_(B,I),_(C,I))
02079 #define           BYTE_cfT(M,I,A,B,D) *A
02080 #define         DOUBLE_cfT(M,I,A,B,D) *A
02081 #define          FLOAT_cfT(M,I,A,B,D) *A
02082 #define            INT_cfT(M,I,A,B,D) *A
02083 #define        LOGICAL_cfT(M,I,A,B,D)  F2CLOGICAL(*A)
02084 #define           LONG_cfT(M,I,A,B,D) *A
02085 #define       LONGLONG_cfT(M,I,A,B,D) *A /* added by MR December 2005 */
02086 #define          SHORT_cfT(M,I,A,B,D) *A
02087 #define          BYTEV_cfT(M,I,A,B,D)  A
02088 #define        DOUBLEV_cfT(M,I,A,B,D)  A
02089 #define         FLOATV_cfT(M,I,A,B,D)  VOIDP A
02090 #define           INTV_cfT(M,I,A,B,D)  A
02091 #define       LOGICALV_cfT(M,I,A,B,D)  A
02092 #define          LONGV_cfT(M,I,A,B,D)  A
02093 #define      LONGLONGV_cfT(M,I,A,B,D)  A /* added by MR December 2005 */
02094 #define         SHORTV_cfT(M,I,A,B,D)  A
02095 #define         BYTEVV_cfT(M,I,A,B,D)  (void *)A /* We have to cast to void *,*/
02096 #define        BYTEVVV_cfT(M,I,A,B,D)  (void *)A /* since we don't know the   */
02097 #define       BYTEVVVV_cfT(M,I,A,B,D)  (void *)A /* dimensions of the array.  */
02098 #define      BYTEVVVVV_cfT(M,I,A,B,D)  (void *)A /* i.e. Unfortunately, can't */
02099 #define     BYTEVVVVVV_cfT(M,I,A,B,D)  (void *)A /* check that the type       */
02100 #define    BYTEVVVVVVV_cfT(M,I,A,B,D)  (void *)A /* matches the prototype.    */
02101 #define       DOUBLEVV_cfT(M,I,A,B,D)  (void *)A
02102 #define      DOUBLEVVV_cfT(M,I,A,B,D)  (void *)A
02103 #define     DOUBLEVVVV_cfT(M,I,A,B,D)  (void *)A
02104 #define    DOUBLEVVVVV_cfT(M,I,A,B,D)  (void *)A
02105 #define   DOUBLEVVVVVV_cfT(M,I,A,B,D)  (void *)A
02106 #define  DOUBLEVVVVVVV_cfT(M,I,A,B,D)  (void *)A
02107 #define        FLOATVV_cfT(M,I,A,B,D)  (void *)A
02108 #define       FLOATVVV_cfT(M,I,A,B,D)  (void *)A
02109 #define      FLOATVVVV_cfT(M,I,A,B,D)  (void *)A
02110 #define     FLOATVVVVV_cfT(M,I,A,B,D)  (void *)A
02111 #define    FLOATVVVVVV_cfT(M,I,A,B,D)  (void *)A
02112 #define   FLOATVVVVVVV_cfT(M,I,A,B,D)  (void *)A
02113 #define          INTVV_cfT(M,I,A,B,D)  (void *)A  
02114 #define         INTVVV_cfT(M,I,A,B,D)  (void *)A  
02115 #define        INTVVVV_cfT(M,I,A,B,D)  (void *)A  
02116 #define       INTVVVVV_cfT(M,I,A,B,D)  (void *)A
02117 #define      INTVVVVVV_cfT(M,I,A,B,D)  (void *)A
02118 #define     INTVVVVVVV_cfT(M,I,A,B,D)  (void *)A
02119 #define      LOGICALVV_cfT(M,I,A,B,D)  (void *)A
02120 #define     LOGICALVVV_cfT(M,I,A,B,D)  (void *)A
02121 #define    LOGICALVVVV_cfT(M,I,A,B,D)  (void *)A
02122 #define   LOGICALVVVVV_cfT(M,I,A,B,D)  (void *)A
02123 #define  LOGICALVVVVVV_cfT(M,I,A,B,D)  (void *)A
02124 #define LOGICALVVVVVVV_cfT(M,I,A,B,D)  (void *)A
02125 #define         LONGVV_cfT(M,I,A,B,D)  (void *)A
02126 #define        LONGVVV_cfT(M,I,A,B,D)  (void *)A
02127 #define       LONGVVVV_cfT(M,I,A,B,D)  (void *)A
02128 #define      LONGVVVVV_cfT(M,I,A,B,D)  (void *)A
02129 #define     LONGVVVVVV_cfT(M,I,A,B,D)  (void *)A
02130 #define    LONGVVVVVVV_cfT(M,I,A,B,D)  (void *)A
02131 #define     LONGLONGVV_cfT(M,I,A,B,D)  (void *)A /* added by MR December 2005 */
02132 #define    LONGLONGVVV_cfT(M,I,A,B,D)  (void *)A /* added by MR December 2005 */
02133 #define   LONGLONGVVVV_cfT(M,I,A,B,D)  (void *)A /* added by MR December 2005 */
02134 #define  LONGLONGVVVVV_cfT(M,I,A,B,D)  (void *)A /* added by MR December 2005 */
02135 #define LONGLONGVVVVVV_cfT(M,I,A,B,D)  (void *)A /* added by MR December 2005 */
02136 #define LONGLONGVVVVVVV_cfT(M,I,A,B,D)  (void *)A /* added by MR December 2005 */
02137 #define        SHORTVV_cfT(M,I,A,B,D)  (void *)A
02138 #define       SHORTVVV_cfT(M,I,A,B,D)  (void *)A
02139 #define      SHORTVVVV_cfT(M,I,A,B,D)  (void *)A
02140 #define     SHORTVVVVV_cfT(M,I,A,B,D)  (void *)A
02141 #define    SHORTVVVVVV_cfT(M,I,A,B,D)  (void *)A
02142 #define   SHORTVVVVVVV_cfT(M,I,A,B,D)  (void *)A
02143 #define          PBYTE_cfT(M,I,A,B,D)  A
02144 #define        PDOUBLE_cfT(M,I,A,B,D)  A
02145 #define         PFLOAT_cfT(M,I,A,B,D)  VOIDP A
02146 #define           PINT_cfT(M,I,A,B,D)  A
02147 #define       PLOGICAL_cfT(M,I,A,B,D)  ((*A=F2CLOGICAL(*A)),A)
02148 #define          PLONG_cfT(M,I,A,B,D)  A
02149 #define      PLONGLONG_cfT(M,I,A,B,D)  A /* added by MR December 2005 */
02150 #define         PSHORT_cfT(M,I,A,B,D)  A
02151 #define          PVOID_cfT(M,I,A,B,D)  A
02152 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
02153 #define        ROUTINE_cfT(M,I,A,B,D)  _(ROUTINE_,I)  (*A)
02154 #else
02155 #define        ROUTINE_cfT(M,I,A,B,D)  _(ROUTINE_,I)    A
02156 #endif
02157 /* A == pointer to the characters
02158    D == length of the string, or of an element in an array of strings
02159    E == number of elements in an array of strings                             */
02160 #define TTSTR(    A,B,D)                                                       \
02161            ((B=_cf_malloc(D+1))[D]='\0', memcpy(B,A,D), kill_trailing(B,' '))
02162 #define TTTTSTR(  A,B,D)   (!(D<4||A[0]||A[1]||A[2]||A[3]))?NULL:              \
02163                             memchr(A,'\0',D)                 ?A   : TTSTR(A,B,D)
02164 #define TTTTSTRV( A,B,D,E) (_(B,N)=E,B=_cf_malloc(_(B,N)*(D+1)), (void *)      \
02165   vkill_trailing(f2cstrv(A,B,D+1, _(B,N)*(D+1)), D+1,_(B,N)*(D+1),' '))
02166 #ifdef vmsFortran
02167 #define         STRING_cfT(M,I,A,B,D)  TTTTSTR( A->dsc$a_pointer,B,A->dsc$w_length)
02168 #define        STRINGV_cfT(M,I,A,B,D)  TTTTSTRV(A->dsc$a_pointer, B,           \
02169                                              A->dsc$w_length , A->dsc$l_m[0])
02170 #define        PSTRING_cfT(M,I,A,B,D)    TTSTR( A->dsc$a_pointer,B,A->dsc$w_length)
02171 #define       PPSTRING_cfT(M,I,A,B,D)           A->dsc$a_pointer
02172 #else
02173 #ifdef CRAYFortran
02174 #define         STRING_cfT(M,I,A,B,D)  TTTTSTR( _fcdtocp(A),B,_fcdlen(A))
02175 #define        STRINGV_cfT(M,I,A,B,D)  TTTTSTRV(_fcdtocp(A),B,_fcdlen(A),      \
02176                               num_elem(_fcdtocp(A),_fcdlen(A),_3(M,_STRV_A,I)))
02177 #define        PSTRING_cfT(M,I,A,B,D)    TTSTR( _fcdtocp(A),B,_fcdlen(A))
02178 #define       PPSTRING_cfT(M,I,A,B,D)           _fcdtocp(A)
02179 #else
02180 #define         STRING_cfT(M,I,A,B,D)  TTTTSTR( A,B,D)
02181 #define        STRINGV_cfT(M,I,A,B,D)  TTTTSTRV(A,B,D, num_elem(A,D,_3(M,_STRV_A,I)))
02182 #define        PSTRING_cfT(M,I,A,B,D)    TTSTR( A,B,D)
02183 #define       PPSTRING_cfT(M,I,A,B,D)           A
02184 #endif
02185 #endif
02186 #define       PNSTRING_cfT(M,I,A,B,D)    STRING_cfT(M,I,A,B,D)
02187 #define       PSTRINGV_cfT(M,I,A,B,D)   STRINGV_cfT(M,I,A,B,D)
02188 #define           CF_0_cfT(M,I,A,B,D)
02189 
02190 #define RCF(TN,I)           _(TN,_cfSTR)(3,R,_(A,I),_(B,I),_(C,I),0,0)
02191 #define  DEFAULT_cfR(A,B,D)
02192 #define  LOGICAL_cfR(A,B,D)
02193 #define PLOGICAL_cfR(A,B,D) *A=C2FLOGICAL(*A);
02194 #define   STRING_cfR(A,B,D) if (B) _cf_free(B);
02195 #define  STRINGV_cfR(A,B,D) _cf_free(B);
02196 /* A and D as defined above for TSTRING(V) */
02197 #define RRRRPSTR( A,B,D)    if (B) memcpy(A,B, _cfMIN(strlen(B),D)),           \
02198                   (D>strlen(B)?memset(A+strlen(B),' ', D-strlen(B)):0), _cf_free(B);
02199 #define RRRRPSTRV(A,B,D)    c2fstrv(B,A,D+1,(D+1)*_(B,N)), _cf_free(B);
02200 #ifdef vmsFortran
02201 #define  PSTRING_cfR(A,B,D) RRRRPSTR( A->dsc$a_pointer,B,A->dsc$w_length)
02202 #define PSTRINGV_cfR(A,B,D) RRRRPSTRV(A->dsc$a_pointer,B,A->dsc$w_length)
02203 #else
02204 #ifdef CRAYFortran
02205 #define  PSTRING_cfR(A,B,D) RRRRPSTR( _fcdtocp(A),B,_fcdlen(A))
02206 #define PSTRINGV_cfR(A,B,D) RRRRPSTRV(_fcdtocp(A),B,_fcdlen(A))
02207 #else
02208 #define  PSTRING_cfR(A,B,D) RRRRPSTR( A,B,D)
02209 #define PSTRINGV_cfR(A,B,D) RRRRPSTRV(A,B,D)
02210 #endif
02211 #endif
02212 #define PNSTRING_cfR(A,B,D) PSTRING_cfR(A,B,D)
02213 #define PPSTRING_cfR(A,B,D)
02214 
02215 #define    BYTE_cfFZ(UN,LN) INTEGER_BYTE     FCALLSC_QUALIFIER fcallsc(UN,LN)(
02216 #define  DOUBLE_cfFZ(UN,LN) DOUBLE_PRECISION FCALLSC_QUALIFIER fcallsc(UN,LN)(
02217 #define     INT_cfFZ(UN,LN) int   FCALLSC_QUALIFIER fcallsc(UN,LN)(
02218 #define LOGICAL_cfFZ(UN,LN) int   FCALLSC_QUALIFIER fcallsc(UN,LN)(
02219 #define    LONG_cfFZ(UN,LN) long  FCALLSC_QUALIFIER fcallsc(UN,LN)(
02220 #define LONGLONG_cfFZ(UN,LN) LONGLONG FCALLSC_QUALIFIER fcallsc(UN,LN)( /* added by MR December 2005 */
02221 #define   SHORT_cfFZ(UN,LN) short FCALLSC_QUALIFIER fcallsc(UN,LN)(
02222 #define    VOID_cfFZ(UN,LN) void  FCALLSC_QUALIFIER fcallsc(UN,LN)(
02223 #ifndef __CF__KnR
02224 /* The void is req'd by the Apollo, to make this an ANSI function declaration.
02225    The Apollo promotes K&R float functions to double. */
02226 #if defined (f2cFortran) && ! defined (gFortran)
02227 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
02228 #define FLOAT_cfFZ(UN,LN) DOUBLE_PRECISION FCALLSC_QUALIFIER fcallsc(UN,LN)(void
02229 #else
02230 #define FLOAT_cfFZ(UN,LN) FORTRAN_REAL FCALLSC_QUALIFIER fcallsc(UN,LN)(void
02231 #endif
02232 #ifdef vmsFortran
02233 #define  STRING_cfFZ(UN,LN) void  FCALLSC_QUALIFIER fcallsc(UN,LN)(fstring *AS
02234 #else
02235 #ifdef CRAYFortran
02236 #define  STRING_cfFZ(UN,LN) void  FCALLSC_QUALIFIER fcallsc(UN,LN)(_fcd     AS
02237 #else
02238 #if  defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
02239 #define  STRING_cfFZ(UN,LN) void  FCALLSC_QUALIFIER fcallsc(UN,LN)(char    *AS
02240 #else
02241 #define  STRING_cfFZ(UN,LN) void  FCALLSC_QUALIFIER fcallsc(UN,LN)(char    *AS, unsigned D0
02242 #endif
02243 #endif
02244 #endif
02245 #else
02246 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
02247 #if defined (f2cFortran) && ! defined (gFortran)
02248 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
02249 #define   FLOAT_cfFZ(UN,LN) DOUBLE_PRECISION  FCALLSC_QUALIFIER fcallsc(UN,LN)(
02250 #else
02251 #define   FLOAT_cfFZ(UN,LN) FORTRAN_REAL      FCALLSC_QUALIFIER fcallsc(UN,LN)(
02252 #endif
02253 #else
02254 #define   FLOAT_cfFZ(UN,LN) FLOATFUNCTIONTYPE FCALLSC_QUALIFIER fcallsc(UN,LN)(
02255 #endif
02256 #if defined(vmsFortran) || defined(CRAYFortran) || defined(AbsoftUNIXFortran)
02257 #define  STRING_cfFZ(UN,LN) void  FCALLSC_QUALIFIER fcallsc(UN,LN)(AS
02258 #else
02259 #define  STRING_cfFZ(UN,LN) void  FCALLSC_QUALIFIER fcallsc(UN,LN)(AS, D0
02260 #endif
02261 #endif
02262 
02263 #define    BYTE_cfF(UN,LN)     BYTE_cfFZ(UN,LN)
02264 #define  DOUBLE_cfF(UN,LN)   DOUBLE_cfFZ(UN,LN)
02265 #ifndef __CF_KnR
02266 #if defined (f2cFortran) && ! defined (gFortran)
02267 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
02268 #define   FLOAT_cfF(UN,LN)  DOUBLE_PRECISION FCALLSC_QUALIFIER fcallsc(UN,LN)(
02269 #else
02270 #define   FLOAT_cfF(UN,LN)  FORTRAN_REAL FCALLSC_QUALIFIER fcallsc(UN,LN)(
02271 #endif
02272 #else
02273 #define   FLOAT_cfF(UN,LN)    FLOAT_cfFZ(UN,LN)
02274 #endif
02275 #define     INT_cfF(UN,LN)      INT_cfFZ(UN,LN)
02276 #define LOGICAL_cfF(UN,LN)  LOGICAL_cfFZ(UN,LN)
02277 #define    LONG_cfF(UN,LN)     LONG_cfFZ(UN,LN)
02278 #define LONGLONG_cfF(UN,LN) LONGLONG_cfFZ(UN,LN) /* added by MR December 2005 */
02279 #define   SHORT_cfF(UN,LN)    SHORT_cfFZ(UN,LN)
02280 #define    VOID_cfF(UN,LN)     VOID_cfFZ(UN,LN)
02281 #define  STRING_cfF(UN,LN)   STRING_cfFZ(UN,LN),
02282 
02283 #define     INT_cfFF
02284 #define    VOID_cfFF
02285 #ifdef vmsFortran
02286 #define  STRING_cfFF           fstring *AS; 
02287 #else
02288 #ifdef CRAYFortran
02289 #define  STRING_cfFF           _fcd     AS;
02290 #else
02291 #define  STRING_cfFF           char    *AS; unsigned D0;
02292 #endif
02293 #endif
02294 
02295 #define     INT_cfL            A0=
02296 #define  STRING_cfL            A0=
02297 #define    VOID_cfL                        
02298 
02299 #define    INT_cfK
02300 #define   VOID_cfK
02301 /* KSTRING copies the string into the position provided by the caller. */
02302 #ifdef vmsFortran
02303 #define STRING_cfK                                                             \
02304  memcpy(AS->dsc$a_pointer,A0,_cfMIN(AS->dsc$w_length,(A0==NULL?0:strlen(A0))));\
02305  AS->dsc$w_length>(A0==NULL?0:strlen(A0))?                                     \
02306   memset(AS->dsc$a_pointer+(A0==NULL?0:strlen(A0)),' ',                        \
02307          AS->dsc$w_length-(A0==NULL?0:strlen(A0))):0;
02308 #else
02309 #ifdef CRAYFortran
02310 #define STRING_cfK                                                             \
02311  memcpy(_fcdtocp(AS),A0, _cfMIN(_fcdlen(AS),(A0==NULL?0:strlen(A0))) );        \
02312  _fcdlen(AS)>(A0==NULL?0:strlen(A0))?                                          \
02313   memset(_fcdtocp(AS)+(A0==NULL?0:strlen(A0)),' ',                             \
02314          _fcdlen(AS)-(A0==NULL?0:strlen(A0))):0;
02315 #else
02316 #define STRING_cfK         memcpy(AS,A0, _cfMIN(D0,(A0==NULL?0:strlen(A0))) ); \
02317                  D0>(A0==NULL?0:strlen(A0))?memset(AS+(A0==NULL?0:strlen(A0)), \
02318                                             ' ', D0-(A0==NULL?0:strlen(A0))):0;
02319 #endif
02320 #endif
02321 
02322 /* Note that K.. and I.. can't be combined since K.. has to access data before
02323 R.., in order for functions returning strings which are also passed in as
02324 arguments to work correctly. Note that R.. frees and hence may corrupt the
02325 string. */
02326 #define    BYTE_cfI  return A0;
02327 #define  DOUBLE_cfI  return A0;
02328 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
02329 #define   FLOAT_cfI  return A0;
02330 #else
02331 #define   FLOAT_cfI  RETURNFLOAT(A0);
02332 #endif
02333 #define     INT_cfI  return A0;
02334 #ifdef hpuxFortran800
02335 /* Incredibly, functions must return true as 1, elsewhere .true.==0x01000000. */
02336 #define LOGICAL_cfI  return ((A0)?1:0);
02337 #else
02338 #define LOGICAL_cfI  return C2FLOGICAL(A0);
02339 #endif
02340 #define    LONG_cfI  return A0;
02341 #define LONGLONG_cfI  return A0; /* added by MR December 2005 */
02342 #define   SHORT_cfI  return A0;
02343 #define  STRING_cfI  return   ;
02344 #define    VOID_cfI  return   ;
02345 
02346 #ifdef OLD_VAXC                                  /* Allow %CC-I-PARAMNOTUSED. */
02347 #pragma standard
02348 #endif
02349 
02350 #define FCALLSCSUB0( CN,UN,LN)             FCALLSCFUN0(VOID,CN,UN,LN)
02351 #define FCALLSCSUB1( CN,UN,LN,T1)          FCALLSCFUN1(VOID,CN,UN,LN,T1)
02352 #define FCALLSCSUB2( CN,UN,LN,T1,T2)       FCALLSCFUN2(VOID,CN,UN,LN,T1,T2)
02353 #define FCALLSCSUB3( CN,UN,LN,T1,T2,T3)    FCALLSCFUN3(VOID,CN,UN,LN,T1,T2,T3)
02354 #define FCALLSCSUB4( CN,UN,LN,T1,T2,T3,T4) \
02355     FCALLSCFUN4(VOID,CN,UN,LN,T1,T2,T3,T4)
02356 #define FCALLSCSUB5( CN,UN,LN,T1,T2,T3,T4,T5) \
02357     FCALLSCFUN5(VOID,CN,UN,LN,T1,T2,T3,T4,T5)
02358 #define FCALLSCSUB6( CN,UN,LN,T1,T2,T3,T4,T5,T6) \
02359     FCALLSCFUN6(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6)       
02360 #define FCALLSCSUB7( CN,UN,LN,T1,T2,T3,T4,T5,T6,T7) \
02361     FCALLSCFUN7(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7)
02362 #define FCALLSCSUB8( CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8) \
02363     FCALLSCFUN8(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8)
02364 #define FCALLSCSUB9( CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9) \
02365     FCALLSCFUN9(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9)
02366 #define FCALLSCSUB10(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA) \
02367    FCALLSCFUN10(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA)
02368 #define FCALLSCSUB11(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB) \
02369    FCALLSCFUN11(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB)
02370 #define FCALLSCSUB12(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC) \
02371    FCALLSCFUN12(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC)
02372 #define FCALLSCSUB13(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD) \
02373    FCALLSCFUN13(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD)
02374 #define FCALLSCSUB14(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
02375    FCALLSCFUN14(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
02376 #define FCALLSCSUB15(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF) \
02377    FCALLSCFUN15(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF)
02378 #define FCALLSCSUB16(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG) \
02379    FCALLSCFUN16(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG)
02380 #define FCALLSCSUB17(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH) \
02381    FCALLSCFUN17(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH)
02382 #define FCALLSCSUB18(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI) \
02383    FCALLSCFUN18(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI)
02384 #define FCALLSCSUB19(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ) \
02385    FCALLSCFUN19(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ)
02386 #define FCALLSCSUB20(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
02387    FCALLSCFUN20(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)
02388 #define FCALLSCSUB21(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL) \
02389    FCALLSCFUN21(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL)
02390 #define FCALLSCSUB22(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM) \
02391    FCALLSCFUN22(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM)
02392 #define FCALLSCSUB23(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN) \
02393    FCALLSCFUN23(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN)
02394 #define FCALLSCSUB24(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO) \
02395    FCALLSCFUN24(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO)
02396 #define FCALLSCSUB25(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP) \
02397    FCALLSCFUN25(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP)
02398 #define FCALLSCSUB26(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ) \
02399    FCALLSCFUN26(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ)
02400 #define FCALLSCSUB27(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) \
02401    FCALLSCFUN27(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)
02402 
02403 
02404 #define FCALLSCFUN1( T0,CN,UN,LN,T1) \
02405         FCALLSCFUN5 (T0,CN,UN,LN,T1,CF_0,CF_0,CF_0,CF_0)
02406 #define FCALLSCFUN2( T0,CN,UN,LN,T1,T2) \
02407         FCALLSCFUN5 (T0,CN,UN,LN,T1,T2,CF_0,CF_0,CF_0)
02408 #define FCALLSCFUN3( T0,CN,UN,LN,T1,T2,T3) \
02409         FCALLSCFUN5 (T0,CN,UN,LN,T1,T2,T3,CF_0,CF_0)
02410 #define FCALLSCFUN4( T0,CN,UN,LN,T1,T2,T3,T4) \
02411         FCALLSCFUN5 (T0,CN,UN,LN,T1,T2,T3,T4,CF_0)
02412 #define FCALLSCFUN5( T0,CN,UN,LN,T1,T2,T3,T4,T5) \
02413         FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0)
02414 #define FCALLSCFUN6( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6) \
02415         FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0)
02416 #define FCALLSCFUN7( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7) \
02417         FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0)
02418 #define FCALLSCFUN8( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8) \
02419         FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0)
02420 #define FCALLSCFUN9( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9) \
02421         FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0)
02422 #define FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA) \
02423         FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0)
02424 #define FCALLSCFUN11(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB) \
02425         FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0)
02426 #define FCALLSCFUN12(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC) \
02427         FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0)
02428 #define FCALLSCFUN13(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD) \
02429         FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0)
02430 
02431 
02432 #define FCALLSCFUN15(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF) \
02433         FCALLSCFUN20(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,CF_0,CF_0,CF_0,CF_0,CF_0)
02434 #define FCALLSCFUN16(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG) \
02435         FCALLSCFUN20(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,CF_0,CF_0,CF_0,CF_0)
02436 #define FCALLSCFUN17(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH) \
02437         FCALLSCFUN20(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,CF_0,CF_0,CF_0)
02438 #define FCALLSCFUN18(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI) \
02439         FCALLSCFUN20(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,CF_0,CF_0)
02440 #define FCALLSCFUN19(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ) \
02441         FCALLSCFUN20(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,CF_0)
02442 #define FCALLSCFUN20(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
02443         FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
02444 #define FCALLSCFUN21(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL) \
02445         FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
02446 #define FCALLSCFUN22(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM) \
02447         FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,CF_0,CF_0,CF_0,CF_0,CF_0)
02448 #define FCALLSCFUN23(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN) \
02449         FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,CF_0,CF_0,CF_0,CF_0)
02450 #define FCALLSCFUN24(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO) \
02451         FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,CF_0,CF_0,CF_0)
02452 #define FCALLSCFUN25(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP) \
02453         FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,CF_0,CF_0)
02454 #define FCALLSCFUN26(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ) \
02455         FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,CF_0)
02456 
02457 
02458 #ifndef __CF__KnR
02459 #define FCALLSCFUN0(T0,CN,UN,LN) CFextern _(T0,_cfFZ)(UN,LN) ABSOFT_cf2(T0))   \
02460         {_Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN(); _Icf(0,K,T0,0,0) _(T0,_cfI)}
02461 
02462 #define FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)    \
02463                                  CFextern _(T0,_cfF)(UN,LN)                    \
02464  CFARGT14(NCF,DCF,ABSOFT_cf2(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) )  \
02465  {                 CFARGT14S(QCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)    \
02466   _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0)      CN(    TCF(LN,T1,1,0)  TCF(LN,T2,2,1) \
02467     TCF(LN,T3,3,1)  TCF(LN,T4,4,1) TCF(LN,T5,5,1)  TCF(LN,T6,6,1)  TCF(LN,T7,7,1) \
02468     TCF(LN,T8,8,1)  TCF(LN,T9,9,1) TCF(LN,TA,10,1) TCF(LN,TB,11,1) TCF(LN,TC,12,1) \
02469     TCF(LN,TD,13,1) TCF(LN,TE,14,1) );                          _Icf(0,K,T0,0,0) \
02470                    CFARGT14S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)  _(T0,_cfI) }
02471 
02472 #define FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)   \
02473                                  CFextern _(T0,_cfF)(UN,LN)                    \
02474  CFARGT27(NCF,DCF,ABSOFT_cf2(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR) ) \
02475  {                 CFARGT27S(QCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)   \
02476   _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0)      CN(     TCF(LN,T1,1,0)  TCF(LN,T2,2,1)  \
02477     TCF(LN,T3,3,1)  TCF(LN,T4,4,1)  TCF(LN,T5,5,1)  TCF(LN,T6,6,1)  TCF(LN,T7,7,1)  \
02478     TCF(LN,T8,8,1)  TCF(LN,T9,9,1)  TCF(LN,TA,10,1) TCF(LN,TB,11,1) TCF(LN,TC,12,1) \
02479     TCF(LN,TD,13,1) TCF(LN,TE,14,1) TCF(LN,TF,15,1) TCF(LN,TG,16,1) TCF(LN,TH,17,1) \
02480     TCF(LN,TI,18,1) TCF(LN,TJ,19,1) TCF(LN,TK,20,1) TCF(LN,TL,21,1) TCF(LN,TM,22,1) \
02481     TCF(LN,TN,23,1) TCF(LN,TO,24,1) TCF(LN,TP,25,1) TCF(LN,TQ,26,1) TCF(LN,TR,27,1) ); _Icf(0,K,T0,0,0) \
02482                    CFARGT27S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)  _(T0,_cfI) }
02483 
02484 #else
02485 #define FCALLSCFUN0(T0,CN,UN,LN) CFextern _(T0,_cfFZ)(UN,LN) ABSOFT_cf3(T0)) _Icf(0,FF,T0,0,0)\
02486         {_Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN(); _Icf(0,K,T0,0,0) _(T0,_cfI)}
02487 
02488 #define FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)    \
02489                                  CFextern _(T0,_cfF)(UN,LN)                    \
02490  CFARGT14(NNCF,DDCF,ABSOFT_cf3(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)) _Icf(0,FF,T0,0,0) \
02491        CFARGT14FS(NNNCF,DDDCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE);   \
02492  {                 CFARGT14S(QCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)    \
02493   _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0)      CN(  TCF(LN,T1,1,0) TCF(LN,T2,2,1) \
02494     TCF(LN,T3,3,1) TCF(LN,T4,4,1) TCF(LN,T5,5,1) TCF(LN,T6,6,1) TCF(LN,T7,7,1) \
02495     TCF(LN,T8,8,1) TCF(LN,T9,9,1) TCF(LN,TA,10,1) TCF(LN,TB,11,1) TCF(LN,TC,12,1) \
02496     TCF(LN,TD,13,1) TCF(LN,TE,14,1) );                          _Icf(0,K,T0,0,0) \
02497                    CFARGT14S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)  _(T0,_cfI)}
02498 
02499 #define FCALLSCFUN27(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)  \
02500                                  CFextern _(T0,_cfF)(UN,LN)                    \
02501  CFARGT27(NNCF,DDCF,ABSOFT_cf3(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)) _Icf(0,FF,T0,0,0) \
02502        CFARGT27FS(NNNCF,DDDCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR); \
02503  {                 CFARGT27S(QCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)  \
02504   _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0)      CN(     TCF(LN,T1,1,0)  TCF(LN,T2,2,1)  \
02505     TCF(LN,T3,3,1)  TCF(LN,T4,4,1)  TCF(LN,T5,5,1)  TCF(LN,T6,6,1)  TCF(LN,T7,7,1)  \
02506     TCF(LN,T8,8,1)  TCF(LN,T9,9,1)  TCF(LN,TA,10,1) TCF(LN,TB,11,1) TCF(LN,TC,12,1) \
02507     TCF(LN,TD,13,1) TCF(LN,TE,14,1) TCF(LN,TF,15,1) TCF(LN,TG,16,1) TCF(LN,TH,17,1) \
02508     TCF(LN,TI,18,1) TCF(LN,TJ,19,1) TCF(LN,TK,20,1) TCF(LN,TL,21,1) TCF(LN,TM,22,1) \
02509     TCF(LN,TN,23,1) TCF(LN,TO,24,1) TCF(LN,TP,25,1) TCF(LN,TQ,26,1) TCF(LN,TR,27,1) ); _Icf(0,K,T0,0,0) \
02510                    CFARGT27S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK,TL,TM,TN,TO,TP,TQ,TR)  _(T0,_cfI)}
02511 
02512 #endif
02513 
02514 
02515 #endif   /* __CFORTRAN_LOADED */

Generated on Tue Jul 5 14:24:56 2011 for ROOT_528-00b_version by  doxygen 1.5.1