NetCDF-Fortran  4.4.4
 All Classes Files Functions Variables Typedefs Macros Pages
cfortran.h
Go to the documentation of this file.
1 /* cfortran.h 4.4 */
2 /* http://www-zeus.desy.de/~burow/cfortran/ */
3 /* Burkhard Burow burow@desy.de 1990 - 2002. */
4 
5 #ifndef __CFORTRAN_LOADED
6 #define __CFORTRAN_LOADED
7 
8 /*
9  THIS FILE IS PROPERTY OF BURKHARD BUROW. IF YOU ARE USING THIS FILE YOU
10  SHOULD ALSO HAVE ACCESS TO CFORTRAN.DOC WHICH PROVIDES TERMS FOR USING,
11  MODIFYING, COPYING AND DISTRIBUTING THE CFORTRAN.H PACKAGE.
12 */
13 
14 /* The following modifications were made by the authors of CFITSIO or by me.
15  * They are flagged below with CFITSIO, the author's initials, or KMCCARTY.
16  * PDW = Peter Wilson
17  * DM = Doug Mink
18  * LEB = Lee E Brotzman
19  * MR = Martin Reinecke
20  * WDP = William D Pence
21  * -- Kevin McCarty, for Debian (19 Dec. 2005)
22  * RKR = Russ Rew (24 Feb 2012) */
23 
24 /*******
25  Modifications:
26  Oct 1997: Changed symbol name extname to appendus (PDW/HSTX)
27  (Conflicted with a common variable name in FTOOLS)
28  Nov 1997: If g77Fortran defined, also define f2cFortran (PDW/HSTX)
29  Feb 1998: Let VMS see the NUM_ELEMS code. Lets programs treat
30  single strings as vectors with single elements
31  Nov 1999: If macintoxh defined, also define f2cfortran (for Mac OS-X)
32  Apr 2000: If WIN32 defined, also define PowerStationFortran and
33  VISUAL_CPLUSPLUS (Visual C++)
34  Jun 2000: If __GNUC__ and linux defined, also define f2cFortran
35  (linux/gcc environment detection)
36  Apr 2002: If __CYGWIN__ is defined, also define f2cFortran
37  Nov 2002: If __APPLE__ defined, also define f2cfortran (for Mac OS-X)
38 
39  Nov 2003: If __INTEL_COMPILER or INTEL_COMPILER defined, also define
40  f2cFortran (KMCCARTY)
41  Dec 2005: If f2cFortran is defined, enforce REAL functions in FORTRAN
42  returning "double" in C. This was one of the items on
43  Burkhard's TODO list. (KMCCARTY)
44  Dec 2005: Modifications to support 8-byte integers. (MR)
45  USE AT YOUR OWN RISK!
46  Feb 2006 Added logic to typedef the symbol 'LONGLONG' to an appropriate
47  intrinsic 8-byte integer datatype (WDP)
48  Apr 2006: Modifications to support gfortran (and g77 with -fno-f2c flag)
49  since by default it returns "float" for FORTRAN REAL function.
50  (KMCCARTY)
51  May 2008: Revert commenting out of "extern" in COMMON_BLOCK_DEF macro.
52  Add braces around do-nothing ";" in 3 empty while blocks to
53  get rid of compiler warnings. Thanks to ROOT developers
54  Jacek Holeczek and Rene Brun for these suggestions. (KMCCARTY)
55  Aug 2008: If __GNUC__ is defined and no FORTRAN compiler is specified
56  via a #define or -D, default to gfortran behavior rather than
57  g77 behavior. (KMCCARTY)
58  Feb 2012: Integrate AbsoftProFortran11 changes for versions 10.2 and later (RKR)
59  *******/
60 
61 /*
62  Avoid symbols already used by compilers and system *.h:
63  __ - OSF1 zukal06 V3.0 347 alpha, cc -c -std1 cfortest.c
64 
65 */
66 
67 /*
68  Determine what 8-byte integer data type is available.
69  'long long' is now supported by most compilers, but older
70  MS Visual C++ compilers before V7.0 use '__int64' instead. (WDP)
71 */
72 
73 #ifndef LONGLONG_TYPE /* this may have been previously defined */
74 #if defined(_MSC_VER) /* Microsoft Visual C++ */
75 #if (_MSC_VER < 1300) /* versions earlier than V7.0 do not have 'long long' */
76  typedef __int64 LONGLONG;
77 #else /* newer versions do support 'long long' */
78  typedef long long LONGLONG;
79 #endif /* (_MSC_VER...) */
80 #else
81 #ifdef LONGLONG_IS_LONG
82  typedef long LONGLONG;
83 #else
84  typedef long long LONGLONG;
85 #endif /* ifdef LONGLONG_IS_LONG */
86 #endif /* if defined(_MSC_VER)... */
87 #define LONGLONG_TYPE
88 #endif /* ifndef LONGLONG_TYPE */
89 
90 /* First prepare for the C compiler. */
91 
92 #ifndef ANSI_C_preprocessor /* i.e. user can override. */
93 #ifdef __CF__KnR
94 #define ANSI_C_preprocessor 0
95 #else
96 #ifdef __STDC__
97 #define ANSI_C_preprocessor 1
98 #else
99 #define _cfleft 1
100 #define _cfright
101 #define _cfleft_cfright 0
102 #define ANSI_C_preprocessor _cfleft_cfright
103 #endif
104 #endif
105 #endif
106 
107 #if ANSI_C_preprocessor
108 #define _0(A,B) A##B
109 #define _(A,B) _0(A,B) /* see cat,xcat of K&R ANSI C p. 231 */
110 #define _2(A,B) A##B /* K&R ANSI C p.230: .. identifier is not replaced */
111 #define _3(A,B,C) _(A,_(B,C))
112 #else /* if it turns up again during rescanning. */
113 #define _(A,B) AB
114 #define _2(A,B) AB
115 #define _3(A,B,C) ABC
116 #endif
117 
118 #if (defined(vax)&&defined(unix)) || (defined(__vax__)&&defined(__unix__))
119 #define VAXUltrix
120 #endif
121 
122 #include <stdio.h> /* NULL [in all machines stdio.h] */
123 #include <string.h> /* strlen, memset, memcpy, memchr. */
124 #if !( defined(VAXUltrix) || defined(sun) || (defined(apollo)&&!defined(__STDCPP__)) )
125 #include <stdlib.h> /* malloc,free */
126 #else
127 #include <malloc.h> /* Had to be removed for DomainOS h105 10.4 sys5.3 425t*/
128 #ifdef apollo
129 #define __CF__APOLLO67 /* __STDCPP__ is in Apollo 6.8 (i.e. ANSI) and onwards */
130 #endif
131 #endif
132 
133 #if !defined(__GNUC__) && !defined(__sun) && (defined(sun)||defined(VAXUltrix)||defined(lynx))
134 #define __CF__KnR /* Sun, LynxOS and VAX Ultrix cc only supports K&R. */
135  /* Manually define __CF__KnR for HP if desired/required.*/
136 #endif /* i.e. We will generate Kernighan and Ritchie C. */
137 /* Note that you may define __CF__KnR before #include cfortran.h, in order to
138 generate K&R C instead of the default ANSI C. The differences are mainly in the
139 function prototypes and declarations. All machines, except the Apollo, work
140 with either style. The Apollo's argument promotion rules require ANSI or use of
141 the obsolete std_$call which we have not implemented here. Hence on the Apollo,
142 only C calling FORTRAN subroutines will work using K&R style.*/
143 
144 
145 /* Remainder of cfortran.h depends on the Fortran compiler. */
146 
147 /* 11/29/2003 (KMCCARTY): add *INTEL_COMPILER symbols here */
148 /* 04/05/2006 (KMCCARTY): add gFortran symbol here */
149 #if defined(CLIPPERFortran) || defined(pgiFortran) || defined(__INTEL_COMPILER) || defined(INTEL_COMPILER) || defined(gFortran)
150 #define f2cFortran
151 #endif
152 
153 /* RKR: add AbsoftProFortran11 */
154 /* VAX/VMS does not let us \-split long #if lines. */
155 /* Split #if into 2 because some HP-UX can't handle long #if */
156 #if !(defined(NAGf90Fortran)||defined(f2cFortran)||defined(hpuxFortran)||defined(apolloFortran)||defined(sunFortran)||defined(IBMR2Fortran)||defined(CRAYFortran))
157 #if !(defined(mipsFortran)||defined(DECFortran)||defined(vmsFortran)||defined(CONVEXFortran)||defined(PowerStationFortran)||defined(AbsoftUNIXFortran)||defined(AbsoftProFortran)||defined(AbsoftProFortran11)||defined(SXFortran))
158 /* If no Fortran compiler is given, we choose one for the machines we know. */
159 #if defined(lynx) || defined(VAXUltrix)
160 #define f2cFortran /* Lynx: Only support f2c at the moment.
161  VAXUltrix: f77 behaves like f2c.
162  Support f2c or f77 with gcc, vcc with f2c.
163  f77 with vcc works, missing link magic for f77 I/O.*/
164 #endif
165 /* 04/13/00 DM (CFITSIO): Add these lines for NT */
166 /* with PowerStationFortran and and Visual C++ */
167 #if defined(WIN32) && !defined(__CYGWIN__)
168 #define PowerStationFortran
169 #define VISUAL_CPLUSPLUS
170 #endif
171 #if defined(g77Fortran) /* 11/03/97 PDW (CFITSIO) */
172 #define f2cFortran
173 #endif
174 #if defined(__CYGWIN__) /* 04/11/02 LEB (CFITSIO) */
175 #define f2cFortran
176 #define gFortran /* 8/26/08 (KMCCARTY) */
177 #endif
178 #if defined(__GNUC__) && defined(linux) /* 06/21/00 PDW (CFITSIO) */
179 #define f2cFortran
180 #define gFortran /* 8/26/08 (KMCCARTY) */
181 #endif
182 #if defined(macintosh) /* 11/1999 (CFITSIO) */
183 #define f2cFortran
184 #define gFortran /* 8/26/08 (KMCCARTY) */
185 #endif
186 #if defined(__APPLE__) /* 11/2002 (CFITSIO) */
187 #define f2cFortran
188 #define gFortran /* 8/26/08 (KMCCARTY) */
189 #endif
190 #if defined(__hpux) /* 921107: Use __hpux instead of __hp9000s300 */
191 #define hpuxFortran /* Should also allow hp9000s7/800 use.*/
192 #endif
193 #if defined(apollo)
194 #define apolloFortran /* __CF__APOLLO67 also defines some behavior. */
195 #endif
196 #if defined(sun) || defined(__sun)
197 #define sunFortran
198 #endif
199 #if defined(_IBMR2)
200 #define IBMR2Fortran
201 #endif
202 #if defined(_CRAY)
203 #define CRAYFortran /* _CRAYT3E also defines some behavior. */
204 #endif
205 #if defined(_SX)
206 #define SXFortran
207 #endif
208 #if defined(mips) || defined(__mips)
209 #define mipsFortran
210 #endif
211 #if defined(vms) || defined(__vms)
212 #define vmsFortran
213 #endif
214 #if defined(__alpha) && defined(__unix__)
215 #define DECFortran
216 #endif
217 #if defined(__convex__)
218 #define CONVEXFortran
219 #endif
220 #if defined(VISUAL_CPLUSPLUS)
221 #define PowerStationFortran
222 #endif
223 #endif /* ...Fortran */
224 #endif /* ...Fortran */
225 
226 /* RKR: add AbsoftProFortran11 */
227 /* Split #if into 2 because some HP-UX can't handle long #if */
228 #if !(defined(NAGf90Fortran)||defined(f2cFortran)||defined(hpuxFortran)||defined(apolloFortran)||defined(sunFortran)||defined(IBMR2Fortran)||defined(CRAYFortran))
229 #if !(defined(mipsFortran)||defined(DECFortran)||defined(vmsFortran)||defined(CONVEXFortran)||defined(PowerStationFortran)||defined(AbsoftUNIXFortran)||defined(AbsoftProFortran)||defined(AbsoftProFortran11)||defined(SXFortran))
230 /* If your compiler barfs on ' #error', replace # with the trigraph for # */
231  #error "cfortran.h: Can't find your environment among:\
232  - GNU gcc (gfortran) on Linux. \
233  - MIPS cc and f77 2.0. (e.g. Silicon Graphics, DECstations, ...) \
234  - IBM AIX XL C and FORTRAN Compiler/6000 Version 01.01.0000.0000 \
235  - VAX VMS CC 3.1 and FORTRAN 5.4. \
236  - Alpha VMS DEC C 1.3 and DEC FORTRAN 6.0. \
237  - Alpha OSF DEC C and DEC Fortran for OSF/1 AXP Version 1.2 \
238  - Apollo DomainOS 10.2 (sys5.3) with f77 10.7 and cc 6.7. \
239  - CRAY \
240  - NEC SX-4 SUPER-UX \
241  - CONVEX \
242  - Sun \
243  - PowerStation Fortran with Visual C++ \
244  - HP9000s300/s700/s800 Latest test with: HP-UX A.08.07 A 9000/730 \
245  - LynxOS: cc or gcc with f2c. \
246  - VAXUltrix: vcc,cc or gcc with f2c. gcc or cc with f77. \
247  - f77 with vcc works; but missing link magic for f77 I/O. \
248  - NO fort. None of gcc, cc or vcc generate required names.\
249  - f2c/g77: Use #define f2cFortran, or cc -Df2cFortran \
250  - gfortran: Use #define gFortran, or cc -DgFortran \
251  (also necessary for g77 with -fno-f2c option) \
252  - NAG f90: Use #define NAGf90Fortran, or cc -DNAGf90Fortran \
253  - Absoft UNIX F77: Use #define AbsoftUNIXFortran or cc -DAbsoftUNIXFortran \
254  - Absoft Pro Fortran: Use #define AbsoftProFortran \
255  - Absoft Fortran 10.2 or later: Use #define AbsoftProFortran11 or cc -DAbsoftProFortran11 \
256  - Portland Group Fortran: Use #define pgiFortran \
257  - Intel Fortran: Use #define INTEL_COMPILER"
258 /* Compiler must throw us out at this point! */
259 #endif
260 #endif
261 
262 
263 #if defined(VAXC) && !defined(__VAXC)
264 #define OLD_VAXC
265 #pragma nostandard /* Prevent %CC-I-PARAMNOTUSED. */
266 #endif
267 
268 /* Throughout cfortran.h we use: UN = Uppercase Name. LN = Lowercase Name. */
269 
270 /* RKR: add AbsoftProFortran11 */
271 /* "extname" changed to "appendus" below (CFITSIO) */
272 #if defined(f2cFortran) || defined(NAGf90Fortran) || defined(DECFortran) || defined(mipsFortran) || defined(apolloFortran) || defined(sunFortran) || defined(CONVEXFortran) || defined(SXFortran) || defined(appendus) || defined(AbsoftProFortran11)
273 #define CFC_(UN,LN) _(LN,_) /* Lowercase FORTRAN symbols. */
274 #define orig_fcallsc(UN,LN) CFC_(UN,LN)
275 #else
276 #if defined(CRAYFortran) || defined(PowerStationFortran) || defined(AbsoftProFortran)
277 #ifdef _CRAY /* (UN), not UN, circumvents CRAY preprocessor bug. */
278 #define CFC_(UN,LN) (UN) /* Uppercase FORTRAN symbols. */
279 #else /* At least VISUAL_CPLUSPLUS barfs on (UN), so need UN. */
280 #define CFC_(UN,LN) UN /* Uppercase FORTRAN symbols. */
281 #endif
282 #define orig_fcallsc(UN,LN) CFC_(UN,LN) /* CRAY insists on arg.'s here. */
283 #else /* For following machines one may wish to change the fcallsc default. */
284 #define CF_SAME_NAMESPACE
285 #ifdef vmsFortran
286 #define CFC_(UN,LN) LN /* Either case FORTRAN symbols. */
287  /* BUT we usually use UN for C macro to FORTRAN routines, so use LN here,*/
288  /* because VAX/VMS doesn't do recursive macros. */
289 #define orig_fcallsc(UN,LN) UN
290 #else /* HP-UX without +ppu or IBMR2 without -qextname. NOT reccomended. */
291 #define CFC_(UN,LN) LN /* Lowercase FORTRAN symbols. */
292 #define orig_fcallsc(UN,LN) CFC_(UN,LN)
293 #endif /* vmsFortran */
294 #endif /* CRAYFortran PowerStationFortran */
295 #endif /* ....Fortran */
296 
297 #define fcallsc(UN,LN) orig_fcallsc(UN,LN)
298 #define preface_fcallsc(P,p,UN,LN) CFC_(_(P,UN),_(p,LN))
299 #define append_fcallsc(P,p,UN,LN) CFC_(_(UN,P),_(LN,p))
300 
301 #define C_FUNCTION(UN,LN) fcallsc(UN,LN)
302 #define FORTRAN_FUNCTION(UN,LN) CFC_(UN,LN)
303 
304 #ifndef COMMON_BLOCK
305 #ifndef CONVEXFortran
306 #ifndef CLIPPERFortran
307 #if !(defined(AbsoftUNIXFortran)||defined(AbsoftProFortran)||defined(AbsoftProFortran11))
308 #define COMMON_BLOCK(UN,LN) CFC_(UN,LN)
309 #else
310 #define COMMON_BLOCK(UN,LN) _(_C,LN)
311 #endif /* AbsoftUNIXFortran or AbsoftProFortran or AbsoftProFortran11 */
312 #else
313 #define COMMON_BLOCK(UN,LN) _(LN,__)
314 #endif /* CLIPPERFortran */
315 #else
316 #define COMMON_BLOCK(UN,LN) _3(_,LN,_)
317 #endif /* CONVEXFortran */
318 #endif /* COMMON_BLOCK */
319 
320 #ifndef DOUBLE_PRECISION
321 #if defined(CRAYFortran) && !defined(_CRAYT3E)
322 #define DOUBLE_PRECISION long double
323 #else
324 #define DOUBLE_PRECISION double
325 #endif
326 #endif
327 
328 #ifndef FORTRAN_REAL
329 #if defined(CRAYFortran) && defined(_CRAYT3E)
330 #define FORTRAN_REAL double
331 #else
332 #define FORTRAN_REAL float
333 #endif
334 #endif
335 
336 #ifdef CRAYFortran
337 #ifdef _CRAY
338 #include <fortran.h>
339 #else
340 #include "fortran.h" /* i.e. if crosscompiling assume user has file. */
341 #endif
342 #define FLOATVVVVVVV_cfPP (FORTRAN_REAL *) /* Used for C calls FORTRAN. */
343 /* CRAY's double==float but CRAY says pointers to doubles and floats are diff.*/
344 #define VOIDP (void *) /* When FORTRAN calls C, we don't know if C routine
345  arg.'s have been declared float *, or double *. */
346 #else
347 #define FLOATVVVVVVV_cfPP
348 #define VOIDP
349 #endif
350 
351 #ifdef vmsFortran
352 #if defined(vms) || defined(__vms)
353 #include <descrip.h>
354 #else
355 #include "descrip.h" /* i.e. if crosscompiling assume user has file. */
356 #endif
357 #endif
358 
359 #ifdef sunFortran
360 #if defined(sun) || defined(__sun)
361 #include <math.h> /* Sun's FLOATFUNCTIONTYPE, ASSIGNFLOAT, RETURNFLOAT. */
362 #else
363 #include "math.h" /* i.e. if crosscompiling assume user has file. */
364 #endif
365 /* At least starting with the default C compiler SC3.0.1 of SunOS 5.3,
366  * FLOATFUNCTIONTYPE, ASSIGNFLOAT, RETURNFLOAT are not required and not in
367  * <math.h>, since sun C no longer promotes C float return values to doubles.
368  * Therefore, only use them if defined.
369  * Even if gcc is being used, assume that it exhibits the Sun C compiler
370  * behavior in order to be able to use *.o from the Sun C compiler.
371  * i.e. If FLOATFUNCTIONTYPE, etc. are in math.h, they required by gcc.
372  */
373 #endif
374 
375 #ifndef apolloFortran
376 #define COMMON_BLOCK_DEF(DEFINITION, NAME) extern DEFINITION NAME
377 #define CF_NULL_PROTO
378 #else /* HP doesn't understand #elif. */
379 /* Without ANSI prototyping, Apollo promotes float functions to double. */
380 /* Note that VAX/VMS, IBM, Mips choke on 'type function(...);' prototypes. */
381 #define CF_NULL_PROTO ...
382 #ifndef __CF__APOLLO67
383 #define COMMON_BLOCK_DEF(DEFINITION, NAME) \
384  DEFINITION NAME __attribute((__section(NAME)))
385 #else
386 #define COMMON_BLOCK_DEF(DEFINITION, NAME) \
387  DEFINITION NAME #attribute[section(NAME)]
388 #endif
389 #endif
390 
391 #ifdef __cplusplus
392 #undef CF_NULL_PROTO
393 #define CF_NULL_PROTO ...
394 #endif
395 
396 
397 #ifndef USE_NEW_DELETE
398 #ifdef __cplusplus
399 #define USE_NEW_DELETE 1
400 #else
401 #define USE_NEW_DELETE 0
402 #endif
403 #endif
404 #if USE_NEW_DELETE
405 #define _cf_malloc(N) new char[N]
406 #define _cf_free(P) delete[] P
407 #else
408 #define _cf_malloc(N) (char *)malloc(N)
409 #define _cf_free(P) free(P)
410 #endif
411 
412 #ifdef mipsFortran
413 #define CF_DECLARE_GETARG int f77argc; char **f77argv
414 #define CF_SET_GETARG(ARGC,ARGV) f77argc = ARGC; f77argv = ARGV
415 #else
416 #define CF_DECLARE_GETARG
417 #define CF_SET_GETARG(ARGC,ARGV)
418 #endif
419 
420 #ifdef OLD_VAXC /* Allow %CC-I-PARAMNOTUSED. */
421 #pragma standard
422 #endif
423 
424 #define AcfCOMMA ,
425 #define AcfCOLON ;
426 
427 /*-------------------------------------------------------------------------*/
428 
429 /* UTILITIES USED WITHIN CFORTRAN.H */
430 
431 #define _cfMIN(A,B) (A<B?A:B)
432 
433 /* 970211 - XIX.145:
434  firstindexlength - better name is all_but_last_index_lengths
435  secondindexlength - better name is last_index_length
436  */
437 #define firstindexlength(A) (sizeof(A[0])==1 ? 1 : (sizeof(A) / sizeof(A[0])) )
438 #define secondindexlength(A) (sizeof(A[0])==1 ? sizeof(A) : sizeof(A[0]) )
439 
440 /* Behavior of FORTRAN LOGICAL. All machines' LOGICAL is same size as C's int.
441 Conversion is automatic except for arrays which require F2CLOGICALV/C2FLOGICALV.
442 f2c, MIPS f77 [DECstation, SGI], VAX Ultrix f77,
443 HP-UX f77 : as in C.
444 VAX/VMS FORTRAN, VAX Ultrix fort,
445 Absoft Unix Fortran, IBM RS/6000 xlf : LS Bit = 0/1 = TRUE/FALSE.
446 Apollo : neg. = TRUE, else FALSE.
447 [Apollo accepts -1 as TRUE for function values, but NOT all other neg. values.]
448 [DECFortran for Ultrix RISC is also called f77 but is the same as VAX/VMS.]
449 [MIPS f77 treats .eqv./.neqv. as .eq./.ne. and hence requires LOGICAL_STRICT.]*/
450 
451 #if defined(NAGf90Fortran) || defined(f2cFortran) || defined(mipsFortran) || defined(PowerStationFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran) || defined(AbsoftProFortran) || defined(AbsoftProFortran11) || defined(SXFortran)
452 /* SX/PowerStationFortran have 0 and 1 defined, others are neither T nor F. */
453 /* hpuxFortran800 has 0 and 0x01000000 defined. Others are unknown. */
454 #define LOGICAL_STRICT /* Other Fortran have .eqv./.neqv. == .eq./.ne. */
455 #endif
456 
457 #define C2FLOGICALV(A,I) \
458  do {int __i; for(__i=0;__i<I;__i++) A[__i]=C2FLOGICAL(A[__i]); } while (0)
459 #define F2CLOGICALV(A,I) \
460  do {int __i; for(__i=0;__i<I;__i++) A[__i]=F2CLOGICAL(A[__i]); } while (0)
461 
462 #if defined(apolloFortran)
463 #define C2FLOGICAL(L) ((L)?-1:(L)&~((unsigned)1<<sizeof(int)*8-1))
464 #define F2CLOGICAL(L) ((L)<0?(L):0)
465 #else
466 #if defined(CRAYFortran)
467 #define C2FLOGICAL(L) _btol(L)
468 #define F2CLOGICAL(L) _ltob(&(L)) /* Strangely _ltob() expects a pointer. */
469 #else
470 #if defined(IBMR2Fortran) || defined(vmsFortran) || defined(DECFortran) || defined(AbsoftUNIXFortran)||defined(AbsoftProFortran11)
471 /* How come no AbsoftProFortran ? */
472 #define C2FLOGICAL(L) ((L)?(L)|1:(L)&~(int)1)
473 #define F2CLOGICAL(L) ((L)&1?(L):0)
474 #else
475 #if defined(CONVEXFortran)
476 #define C2FLOGICAL(L) ((L) ? ~0 : 0 )
477 #define F2CLOGICAL(L) (L)
478 #else /* others evaluate LOGICALs as for C. */
479 #define C2FLOGICAL(L) (L)
480 #define F2CLOGICAL(L) (L)
481 #ifndef LOGICAL_STRICT
482 #undef C2FLOGICALV
483 #undef F2CLOGICALV
484 #define C2FLOGICALV(A,I)
485 #define F2CLOGICALV(A,I)
486 #endif /* LOGICAL_STRICT */
487 #endif /* CONVEXFortran || All Others */
488 #endif /* IBMR2Fortran vmsFortran DECFortran AbsoftUNIXFortran */
489 #endif /* CRAYFortran */
490 #endif /* apolloFortran */
491 
492 /* 970514 - In addition to CRAY, there may be other machines
493  for which LOGICAL_STRICT makes no sense. */
494 #if defined(LOGICAL_STRICT) && !defined(CRAYFortran)
495 /* Force C2FLOGICAL to generate only the values for either .TRUE. or .FALSE.
496  SX/PowerStationFortran only have 0 and 1 defined.
497  Elsewhere, only needed if you want to do:
498  logical lvariable
499  if (lvariable .eq. .true.) then ! (1)
500  instead of
501  if (lvariable .eqv. .true.) then ! (2)
502  - (1) may not even be FORTRAN/77 and that Apollo's f77 and IBM's xlf
503  refuse to compile (1), so you are probably well advised to stay away from
504  (1) and from LOGICAL_STRICT.
505  - You pay a (slight) performance penalty for using LOGICAL_STRICT. */
506 #undef C2FLOGICAL
507 #ifdef hpuxFortran800
508 #define C2FLOGICAL(L) ((L)?0x01000000:0)
509 #else
510 #if defined(apolloFortran) || defined(vmsFortran) || defined(DECFortran)
511 #define C2FLOGICAL(L) ((L)?-1:0) /* These machines use -1/0 for .true./.false.*/
512 #else
513 #define C2FLOGICAL(L) ((L)? 1:0) /* All others use +1/0 for .true./.false.*/
514 #endif
515 #endif
516 #endif /* LOGICAL_STRICT */
517 
518 /* Convert a vector of C strings into FORTRAN strings. */
519 #ifndef __CF__KnR
520 static char *c2fstrv(char* cstr, char *fstr, int elem_len, int sizeofcstr)
521 #else
522 static char *c2fstrv( cstr, fstr, elem_len, sizeofcstr)
523  char* cstr; char *fstr; int elem_len; int sizeofcstr;
524 #endif
525 { int i,j;
526 /* elem_len includes \0 for C strings. Fortran strings don't have term. \0.
527  Useful size of string must be the same in both languages. */
528 for (i=0; i<sizeofcstr/elem_len; i++) {
529  for (j=1; j<elem_len && *cstr; j++) *fstr++ = *cstr++;
530  cstr += 1+elem_len-j;
531  for (; j<elem_len; j++) *fstr++ = ' ';
532 } /* 95109 - Seems to be returning the original fstr. */
533 return fstr-sizeofcstr+sizeofcstr/elem_len; }
534 
535 /* Convert a vector of FORTRAN strings into C strings. */
536 #ifndef __CF__KnR
537 static char *f2cstrv(char *fstr, char* cstr, int elem_len, int sizeofcstr)
538 #else
539 static char *f2cstrv( fstr, cstr, elem_len, sizeofcstr)
540  char *fstr; char* cstr; int elem_len; int sizeofcstr;
541 #endif
542 { int i,j;
543 /* elem_len includes \0 for C strings. Fortran strings don't have term. \0.
544  Useful size of string must be the same in both languages. */
545 cstr += sizeofcstr;
546 fstr += sizeofcstr - sizeofcstr/elem_len;
547 for (i=0; i<sizeofcstr/elem_len; i++) {
548  *--cstr = '\0';
549  for (j=1; j<elem_len; j++) *--cstr = *--fstr;
550 } return cstr; }
551 
552 /* kill the trailing char t's in string s. */
553 #ifndef __CF__KnR
554 static char *kill_trailing(char *s, char t)
555 #else
556 static char *kill_trailing( s, t) char *s; char t;
557 #endif
558 {char *e;
559 e = s + strlen(s);
560 if (e>s) { /* Need this to handle NULL string.*/
561  while (e>s && *--e==t) {;} /* Don't follow t's past beginning. */
562  e[*e==t?0:1] = '\0'; /* Handle s[0]=t correctly. */
563 } return s; }
564 
565 /* kill_trailingn(s,t,e) will kill the trailing t's in string s. e normally
566 points to the terminating '\0' of s, but may actually point to anywhere in s.
567 s's new '\0' will be placed at e or earlier in order to remove any trailing t's.
568 If e<s string s is left unchanged. */
569 #ifndef __CF__KnR
570 static char *kill_trailingn(char *s, char t, char *e)
571 #else
572 static char *kill_trailingn( s, t, e) char *s; char t; char *e;
573 #endif
574 {
575 if (e==s) *e = '\0'; /* Kill the string makes sense here.*/
576 else if (e>s) { /* Watch out for neg. length string.*/
577  while (e>s && *--e==t){;} /* Don't follow t's past beginning. */
578  e[*e==t?0:1] = '\0'; /* Handle s[0]=t correctly. */
579 } return s; }
580 
581 /* Note the following assumes that any element which has t's to be chopped off,
582 does indeed fill the entire element. */
583 #ifndef __CF__KnR
584 static char *vkill_trailing(char* cstr, int elem_len, int sizeofcstr, char t)
585 #else
586 static char *vkill_trailing( cstr, elem_len, sizeofcstr, t)
587  char* cstr; int elem_len; int sizeofcstr; char t;
588 #endif
589 { int i;
590 for (i=0; i<sizeofcstr/elem_len; i++) /* elem_len includes \0 for C strings. */
591  kill_trailingn(cstr+elem_len*i,t,cstr+elem_len*(i+1)-1);
592 return cstr; }
593 
594 #ifdef vmsFortran
595 typedef struct dsc$descriptor_s fstring;
596 #define DSC$DESCRIPTOR_A(DIMCT) \
597 struct { \
598  unsigned short dsc$w_length; unsigned char dsc$b_dtype; \
599  unsigned char dsc$b_class; char *dsc$a_pointer; \
600  char dsc$b_scale; unsigned char dsc$b_digits; \
601  struct { \
602  unsigned : 3; unsigned dsc$v_fl_binscale : 1; \
603  unsigned dsc$v_fl_redim : 1; unsigned dsc$v_fl_column : 1; \
604  unsigned dsc$v_fl_coeff : 1; unsigned dsc$v_fl_bounds : 1; \
605  } dsc$b_aflags; \
606  unsigned char dsc$b_dimct; unsigned long dsc$l_arsize; \
607  char *dsc$a_a0; long dsc$l_m [DIMCT]; \
608  struct { \
609  long dsc$l_l; long dsc$l_u; \
610  } dsc$bounds [DIMCT]; \
611 }
612 typedef DSC$DESCRIPTOR_A(1) fstringvector;
613 /*typedef DSC$DESCRIPTOR_A(2) fstringarrarr;
614  typedef DSC$DESCRIPTOR_A(3) fstringarrarrarr;*/
615 #define initfstr(F,C,ELEMNO,ELEMLEN) \
616 ( (F).dsc$l_arsize= ( (F).dsc$w_length =(ELEMLEN) ) \
617  *( (F).dsc$l_m[0]=(F).dsc$bounds[0].dsc$l_u=(ELEMNO) ), \
618  (F).dsc$a_a0 = ( (F).dsc$a_pointer=(C) ) - (F).dsc$w_length ,(F))
619 
620 #endif /* PDW: 2/10/98 (CFITSIO) -- Let VMS see NUM_ELEMS definitions */
621 #define _NUM_ELEMS -1
622 #define _NUM_ELEM_ARG -2
623 #define NUM_ELEMS(A) A,_NUM_ELEMS
624 #define NUM_ELEM_ARG(B) *_2(A,B),_NUM_ELEM_ARG
625 #define TERM_CHARS(A,B) A,B
626 #ifndef __CF__KnR
627 static int num_elem(char *strv, unsigned elem_len, int term_char, int num_term)
628 #else
629 static int num_elem( strv, elem_len, term_char, num_term)
630  char *strv; unsigned elem_len; int term_char; int num_term;
631 #endif
632 /* elem_len is the number of characters in each element of strv, the FORTRAN
633 vector of strings. The last element of the vector must begin with at least
634 num_term term_char characters, so that this routine can determine how
635 many elements are in the vector. */
636 {
637 unsigned num,i;
638 if (num_term == _NUM_ELEMS || num_term == _NUM_ELEM_ARG)
639  return term_char;
640 if (num_term <=0) num_term = (int)elem_len;
641 for (num=0; ; num++) {
642  for (i=0; i<(unsigned)num_term && *strv==term_char; i++,strv++){;}
643  if (i==(unsigned)num_term) break;
644  else strv += elem_len-i;
645 }
646 if (0) { /* to prevent not used warnings in gcc (added by ROOT) */
647  c2fstrv(0, 0, 0, 0); f2cstrv(0, 0, 0, 0); kill_trailing(0, 0);
648  vkill_trailing(0, 0, 0, 0); num_elem(0, 0, 0, 0);
649 }
650 return (int)num;
651 }
652 /* #endif removed 2/10/98 (CFITSIO) */
653 
654 /*-------------------------------------------------------------------------*/
655 
656 /* UTILITIES FOR C TO USE STRINGS IN FORTRAN COMMON BLOCKS */
657 
658 /* C string TO Fortran Common Block STRing. */
659 /* DIM is the number of DIMensions of the array in terms of strings, not
660  characters. e.g. char a[12] has DIM = 0, char a[12][4] has DIM = 1, etc. */
661 #define C2FCBSTR(CSTR,FSTR,DIM) \
662  c2fstrv((char *)CSTR, (char *)FSTR, sizeof(FSTR)/cfelementsof(FSTR,DIM)+1, \
663  sizeof(FSTR)+cfelementsof(FSTR,DIM))
664 
665 /* Fortran Common Block string TO C STRing. */
666 #define FCB2CSTR(FSTR,CSTR,DIM) \
667  vkill_trailing(f2cstrv((char *)FSTR, (char *)CSTR, \
668  sizeof(FSTR)/cfelementsof(FSTR,DIM)+1, \
669  sizeof(FSTR)+cfelementsof(FSTR,DIM)), \
670  sizeof(FSTR)/cfelementsof(FSTR,DIM)+1, \
671  sizeof(FSTR)+cfelementsof(FSTR,DIM), ' ')
672 
673 #define cfDEREFERENCE0
674 #define cfDEREFERENCE1 *
675 #define cfDEREFERENCE2 **
676 #define cfDEREFERENCE3 ***
677 #define cfDEREFERENCE4 ****
678 #define cfDEREFERENCE5 *****
679 #define cfelementsof(A,D) (sizeof(A)/sizeof(_(cfDEREFERENCE,D)(A)))
680 
681 /*-------------------------------------------------------------------------*/
682 
683 /* UTILITIES FOR C TO CALL FORTRAN SUBROUTINES */
684 
685 /* Define lookup tables for how to handle the various types of variables. */
686 
687 #ifdef OLD_VAXC /* Prevent %CC-I-PARAMNOTUSED. */
688 #pragma nostandard
689 #endif
690 
691 #define ZTRINGV_NUM(I) I
692 #define ZTRINGV_ARGFP(I) (*(_2(A,I))) /* Undocumented. For PINT, etc. */
693 #define ZTRINGV_ARGF(I) _2(A,I)
694 #ifdef CFSUBASFUN
695 #define ZTRINGV_ARGS(I) ZTRINGV_ARGF(I)
696 #else
697 #define ZTRINGV_ARGS(I) _2(B,I)
698 #endif
699 
700 #define PBYTE_cfVP(A,B) PINT_cfVP(A,B)
701 #define PDOUBLE_cfVP(A,B)
702 #define PFLOAT_cfVP(A,B)
703 #ifdef ZTRINGV_ARGS_allows_Pvariables
704 /* This allows Pvariables for ARGS. ARGF machinery is above ARGFP.
705  * B is not needed because the variable may be changed by the Fortran routine,
706  * but because B is the only way to access an arbitrary macro argument. */
707 #define PINT_cfVP(A,B) int B = (int)A; /* For ZSTRINGV_ARGS */
708 #else
709 #define PINT_cfVP(A,B)
710 #endif
711 #define PLOGICAL_cfVP(A,B) int *B; /* Returning LOGICAL in FUNn and SUBn */
712 #define PLONG_cfVP(A,B) PINT_cfVP(A,B)
713 #define PSHORT_cfVP(A,B) PINT_cfVP(A,B)
714 
715 #define VCF_INT_S(T,A,B) _(T,VVVVVVV_cfTYPE) B = A;
716 #define VCF_INT_F(T,A,B) _(T,_cfVCF)(A,B)
717 /* _cfVCF table is directly mapped to _cfCCC table. */
718 #define BYTE_cfVCF(A,B)
719 #define DOUBLE_cfVCF(A,B)
720 #if !defined(__CF__KnR)
721 #define FLOAT_cfVCF(A,B)
722 #else
723 #define FLOAT_cfVCF(A,B) FORTRAN_REAL B = A;
724 #endif
725 #define INT_cfVCF(A,B)
726 #define LOGICAL_cfVCF(A,B)
727 #define LONG_cfVCF(A,B)
728 #define SHORT_cfVCF(A,B)
729 
730 /* 980416
731  Cast (void (*)(CF_NULL_PROTO)) causes SunOS CC 4.2 occasionally to barf,
732  while the following equivalent typedef is fine.
733  For consistency use the typedef on all machines.
734  */
736 
737 #define VCF(TN,I) _Icf4(4,V,TN,_(A,I),_(B,I),F)
738 #define VVCF(TN,AI,BI) _Icf4(4,V,TN,AI,BI,S)
739 #define INT_cfV(T,A,B,F) _(VCF_INT_,F)(T,A,B)
740 #define INTV_cfV(T,A,B,F)
741 #define INTVV_cfV(T,A,B,F)
742 #define INTVVV_cfV(T,A,B,F)
743 #define INTVVVV_cfV(T,A,B,F)
744 #define INTVVVVV_cfV(T,A,B,F)
745 #define INTVVVVVV_cfV(T,A,B,F)
746 #define INTVVVVVVV_cfV(T,A,B,F)
747 #define PINT_cfV( T,A,B,F) _(T,_cfVP)(A,B)
748 #define PVOID_cfV( T,A,B,F)
749 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
750 #define ROUTINE_cfV(T,A,B,F) void (*B)(CF_NULL_PROTO) = (cfCAST_FUNCTION)A;
751 #else
752 #define ROUTINE_cfV(T,A,B,F)
753 #endif
754 #define SIMPLE_cfV(T,A,B,F)
755 #ifdef vmsFortran
756 #define STRING_cfV(T,A,B,F) static struct {fstring f; unsigned clen;} B = \
757  {{0,DSC$K_DTYPE_T,DSC$K_CLASS_S,NULL},0};
758 #define PSTRING_cfV(T,A,B,F) static fstring B={0,DSC$K_DTYPE_T,DSC$K_CLASS_S,NULL};
759 #define STRINGV_cfV(T,A,B,F) static fstringvector B = \
760  {sizeof(A),DSC$K_DTYPE_T,DSC$K_CLASS_A,NULL,0,0,{0,0,1,1,1},1,0,NULL,0,{1,0}};
761 #define PSTRINGV_cfV(T,A,B,F) static fstringvector B = \
762  {0,DSC$K_DTYPE_T,DSC$K_CLASS_A,NULL,0,0,{0,0,1,1,1},1,0,NULL,0,{1,0}};
763 #else
764 #define STRING_cfV(T,A,B,F) struct {unsigned int clen, flen; char *nombre;} B;
765 #define STRINGV_cfV(T,A,B,F) struct {char *s, *fs; unsigned flen; char *nombre;} B;
766 #define PSTRING_cfV(T,A,B,F) int B;
767 #define PSTRINGV_cfV(T,A,B,F) struct{char *fs; unsigned int sizeofA,flen;}B;
768 #endif
769 #define ZTRINGV_cfV(T,A,B,F) STRINGV_cfV(T,A,B,F)
770 #define PZTRINGV_cfV(T,A,B,F) PSTRINGV_cfV(T,A,B,F)
771 
772 /* Note that the actions of the A table were performed inside the AA table.
773  VAX Ultrix vcc, and HP-UX cc, didn't evaluate arguments to functions left to
774  right, so we had to split the original table into the current robust two. */
775 #define ACF(NAME,TN,AI,I) _(TN,_cfSTR)(4,A,NAME,I,AI,_(B,I),0)
776 #define DEFAULT_cfA(M,I,A,B)
777 #define LOGICAL_cfA(M,I,A,B) B=C2FLOGICAL(B);
778 #define PLOGICAL_cfA(M,I,A,B) A=C2FLOGICAL(A);
779 #define STRING_cfA(M,I,A,B) STRING_cfC(M,I,A,B,sizeof(A))
780 #define PSTRING_cfA(M,I,A,B) PSTRING_cfC(M,I,A,B,sizeof(A))
781 #ifdef vmsFortran
782 #define AATRINGV_cfA( A,B, sA,filA,silA) \
783  initfstr(B,_cf_malloc((sA)-(filA)),(filA),(silA)-1), \
784  c2fstrv(A,B.dsc$a_pointer,(silA),(sA));
785 #define APATRINGV_cfA( A,B, sA,filA,silA) \
786  initfstr(B,A,(filA),(silA)-1),c2fstrv(A,A,(silA),(sA));
787 #else
788 #define AATRINGV_cfA( A,B, sA,filA,silA) \
789  (B.s=_cf_malloc((sA)-(filA)),B.fs=c2fstrv(A,B.s,(B.flen=(silA)-1)+1,(sA)));
790 #define APATRINGV_cfA( A,B, sA,filA,silA) \
791  B.fs=c2fstrv(A,A,(B.flen=(silA)-1)+1,B.sizeofA=(sA));
792 #endif
793 #define STRINGV_cfA(M,I,A,B) \
794  AATRINGV_cfA((char *)A,B,sizeof(A),firstindexlength(A),secondindexlength(A))
795 #define PSTRINGV_cfA(M,I,A,B) \
796  APATRINGV_cfA((char *)A,B,sizeof(A),firstindexlength(A),secondindexlength(A))
797 #define ZTRINGV_cfA(M,I,A,B) AATRINGV_cfA( (char *)A,B, \
798  (_3(M,_ELEMS_,I))*(( _3(M,_ELEMLEN_,I))+1), \
799  (_3(M,_ELEMS_,I)),(_3(M,_ELEMLEN_,I))+1)
800 #define PZTRINGV_cfA(M,I,A,B) APATRINGV_cfA( (char *)A,B, \
801  (_3(M,_ELEMS_,I))*(( _3(M,_ELEMLEN_,I))+1), \
802  (_3(M,_ELEMS_,I)),(_3(M,_ELEMLEN_,I))+1)
803 
804 #define PBYTE_cfAAP(A,B) &A
805 #define PDOUBLE_cfAAP(A,B) &A
806 #define PFLOAT_cfAAP(A,B) FLOATVVVVVVV_cfPP &A
807 #define PINT_cfAAP(A,B) &A
808 #define PLOGICAL_cfAAP(A,B) B= &A /* B used to keep a common W table. */
809 #define PLONG_cfAAP(A,B) &A
810 #define PSHORT_cfAAP(A,B) &A
811 
812 #define AACF(TN,AI,I,C) _SEP_(TN,C,cfCOMMA) _Icf(3,AA,TN,AI,_(B,I))
813 #define INT_cfAA(T,A,B) &B
814 #define INTV_cfAA(T,A,B) _(T,VVVVVV_cfPP) A
815 #define INTVV_cfAA(T,A,B) _(T,VVVVV_cfPP) A[0]
816 #define INTVVV_cfAA(T,A,B) _(T,VVVV_cfPP) A[0][0]
817 #define INTVVVV_cfAA(T,A,B) _(T,VVV_cfPP) A[0][0][0]
818 #define INTVVVVV_cfAA(T,A,B) _(T,VV_cfPP) A[0][0][0][0]
819 #define INTVVVVVV_cfAA(T,A,B) _(T,V_cfPP) A[0][0][0][0][0]
820 #define INTVVVVVVV_cfAA(T,A,B) _(T,_cfPP) A[0][0][0][0][0][0]
821 #define PINT_cfAA(T,A,B) _(T,_cfAAP)(A,B)
822 #define PVOID_cfAA(T,A,B) (void *) A
823 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
824 #define ROUTINE_cfAA(T,A,B) &B
825 #else
826 #define ROUTINE_cfAA(T,A,B) (cfCAST_FUNCTION)A
827 #endif
828 #define STRING_cfAA(T,A,B) STRING_cfCC(T,A,B)
829 #define PSTRING_cfAA(T,A,B) PSTRING_cfCC(T,A,B)
830 #ifdef vmsFortran
831 #define STRINGV_cfAA(T,A,B) &B
832 #else
833 #ifdef CRAYFortran
834 #define STRINGV_cfAA(T,A,B) _cptofcd(B.fs,B.flen)
835 #else
836 #define STRINGV_cfAA(T,A,B) B.fs
837 #endif
838 #endif
839 #define PSTRINGV_cfAA(T,A,B) STRINGV_cfAA(T,A,B)
840 #define ZTRINGV_cfAA(T,A,B) STRINGV_cfAA(T,A,B)
841 #define PZTRINGV_cfAA(T,A,B) STRINGV_cfAA(T,A,B)
842 
843 #if defined(vmsFortran) || defined(CRAYFortran)
844 #define JCF(TN,I)
845 #define KCF(TN,I)
846 #else
847 #define JCF(TN,I) _(TN,_cfSTR)(1,J,_(B,I), 0,0,0,0)
848 #if defined(AbsoftUNIXFortran)
849 #define DEFAULT_cfJ(B) ,0
850 #else
851 #define DEFAULT_cfJ(B)
852 #endif
853 #define LOGICAL_cfJ(B) DEFAULT_cfJ(B)
854 #define PLOGICAL_cfJ(B) DEFAULT_cfJ(B)
855 #define STRING_cfJ(B) ,B.flen
856 #define PSTRING_cfJ(B) ,B
857 #define STRINGV_cfJ(B) STRING_cfJ(B)
858 #define PSTRINGV_cfJ(B) STRING_cfJ(B)
859 #define ZTRINGV_cfJ(B) STRING_cfJ(B)
860 #define PZTRINGV_cfJ(B) STRING_cfJ(B)
861 
862 /* KCF is identical to DCF, except that KCF ZTRING is not empty. */
863 #define KCF(TN,I) _(TN,_cfSTR)(1,KK,_(B,I), 0,0,0,0)
864 #if defined(AbsoftUNIXFortran)
865 #define DEFAULT_cfKK(B) , unsigned B
866 #else
867 #define DEFAULT_cfKK(B)
868 #endif
869 #define LOGICAL_cfKK(B) DEFAULT_cfKK(B)
870 #define PLOGICAL_cfKK(B) DEFAULT_cfKK(B)
871 #define STRING_cfKK(B) , unsigned B
872 #define PSTRING_cfKK(B) STRING_cfKK(B)
873 #define STRINGV_cfKK(B) STRING_cfKK(B)
874 #define PSTRINGV_cfKK(B) STRING_cfKK(B)
875 #define ZTRINGV_cfKK(B) STRING_cfKK(B)
876 #define PZTRINGV_cfKK(B) STRING_cfKK(B)
877 #endif
878 
879 #define WCF(TN,AN,I) _(TN,_cfSTR)(2,W,AN,_(B,I), 0,0,0)
880 #define DEFAULT_cfW(A,B)
881 #define LOGICAL_cfW(A,B)
882 #define PLOGICAL_cfW(A,B) *B=F2CLOGICAL(*B);
883 #define STRING_cfW(A,B) (B.nombre=A,B.nombre[B.clen]!='\0'?B.nombre[B.clen]='\0':0); /* A?="constnt"*/
884 #define PSTRING_cfW(A,B) kill_trailing(A,' ');
885 #ifdef vmsFortran
886 #define STRINGV_cfW(A,B) _cf_free(B.dsc$a_pointer);
887 #define PSTRINGV_cfW(A,B) \
888  vkill_trailing(f2cstrv((char*)A, (char*)A, \
889  B.dsc$w_length+1, B.dsc$l_arsize+B.dsc$l_m[0]), \
890  B.dsc$w_length+1, B.dsc$l_arsize+B.dsc$l_m[0], ' ');
891 #else
892 #define STRINGV_cfW(A,B) _cf_free(B.s);
893 #define PSTRINGV_cfW(A,B) vkill_trailing( \
894  f2cstrv((char*)A,(char*)A,B.flen+1,B.sizeofA), B.flen+1,B.sizeofA,' ');
895 #endif
896 #define ZTRINGV_cfW(A,B) STRINGV_cfW(A,B)
897 #define PZTRINGV_cfW(A,B) PSTRINGV_cfW(A,B)
898 
899 #define NCF(TN,I,C) _SEP_(TN,C,cfCOMMA) _Icf(2,N,TN,_(A,I),0)
900 #define NNCF(TN,I,C) UUCF(TN,I,C)
901 #define NNNCF(TN,I,C) _SEP_(TN,C,cfCOLON) _Icf(2,N,TN,_(A,I),0)
902 #define INT_cfN(T,A) _(T,VVVVVVV_cfTYPE) * A
903 #define INTV_cfN(T,A) _(T,VVVVVV_cfTYPE) * A
904 #define INTVV_cfN(T,A) _(T,VVVVV_cfTYPE) * A
905 #define INTVVV_cfN(T,A) _(T,VVVV_cfTYPE) * A
906 #define INTVVVV_cfN(T,A) _(T,VVV_cfTYPE) * A
907 #define INTVVVVV_cfN(T,A) _(T,VV_cfTYPE) * A
908 #define INTVVVVVV_cfN(T,A) _(T,V_cfTYPE) * A
909 #define INTVVVVVVV_cfN(T,A) _(T,_cfTYPE) * A
910 #define PINT_cfN(T,A) _(T,_cfTYPE) * A
911 #define PVOID_cfN(T,A) void * A
912 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
913 #define ROUTINE_cfN(T,A) void (**A)(CF_NULL_PROTO)
914 #else
915 #define ROUTINE_cfN(T,A) void ( *A)(CF_NULL_PROTO)
916 #endif
917 #ifdef vmsFortran
918 #define STRING_cfN(T,A) fstring * A
919 #define STRINGV_cfN(T,A) fstringvector * A
920 #else
921 #ifdef CRAYFortran
922 #define STRING_cfN(T,A) _fcd A
923 #define STRINGV_cfN(T,A) _fcd A
924 #else
925 #define STRING_cfN(T,A) char * A
926 #define STRINGV_cfN(T,A) char * A
927 #endif
928 #endif
929 #define PSTRING_cfN(T,A) STRING_cfN(T,A) /* CRAY insists on arg.'s here. */
930 #define PNSTRING_cfN(T,A) STRING_cfN(T,A) /* CRAY insists on arg.'s here. */
931 #define PPSTRING_cfN(T,A) STRING_cfN(T,A) /* CRAY insists on arg.'s here. */
932 #define PSTRINGV_cfN(T,A) STRINGV_cfN(T,A)
933 #define ZTRINGV_cfN(T,A) STRINGV_cfN(T,A)
934 #define PZTRINGV_cfN(T,A) PSTRINGV_cfN(T,A)
935 
936 
937 /* Apollo 6.7, CRAY, old Sun, VAX/Ultrix vcc/cc and new ultrix
938  can't hack more than 31 arg's.
939  e.g. ultrix >= 4.3 gives message:
940  zow35> cc -c -DDECFortran cfortest.c
941  cfe: Fatal: Out of memory: cfortest.c
942  zow35>
943  Old __hpux had the problem, but new 'HP-UX A.09.03 A 9000/735' is fine
944  if using -Aa, otherwise we have a problem.
945  */
946 #ifndef MAX_PREPRO_ARGS
947 #if !defined(__GNUC__) && (defined(VAXUltrix) || defined(__CF__APOLLO67) || (defined(sun)&&!defined(__sun)) || defined(_CRAY) || defined(__ultrix__) || (defined(__hpux)&&defined(__CF__KnR)))
948 #define MAX_PREPRO_ARGS 31
949 #else
950 #define MAX_PREPRO_ARGS 99
951 #endif
952 #endif
953 
954 #if defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
955 /* NOT NECESSARY FOR Absoft 10.2 and later */
956 /* In addition to explicit Absoft stuff, only Absoft requires:
957  - DEFAULT coming from _cfSTR.
958  DEFAULT could have been called e.g. INT, but keep it for clarity.
959  - M term in CFARGT14 and CFARGT14FS.
960  */
961 #define ABSOFT_cf1(T0) _(T0,_cfSTR)(0,ABSOFT1,0,0,0,0,0)
962 #define ABSOFT_cf2(T0) _(T0,_cfSTR)(0,ABSOFT2,0,0,0,0,0)
963 #define ABSOFT_cf3(T0) _(T0,_cfSTR)(0,ABSOFT3,0,0,0,0,0)
964 #define DEFAULT_cfABSOFT1
965 #define LOGICAL_cfABSOFT1
966 #define STRING_cfABSOFT1 ,MAX_LEN_FORTRAN_FUNCTION_STRING
967 #define DEFAULT_cfABSOFT2
968 #define LOGICAL_cfABSOFT2
969 #define STRING_cfABSOFT2 ,unsigned D0
970 #define DEFAULT_cfABSOFT3
971 #define LOGICAL_cfABSOFT3
972 #define STRING_cfABSOFT3 ,D0
973 #else
974 #define ABSOFT_cf1(T0)
975 #define ABSOFT_cf2(T0)
976 #define ABSOFT_cf3(T0)
977 #endif
978 
979 /* _Z introduced to cicumvent IBM and HP silly preprocessor warning.
980  e.g. "Macro CFARGT14 invoked with a null argument."
981  */
982 #define _Z
983 
984 #define CFARGT14S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
985  S(T1,1) S(T2,2) S(T3,3) S(T4,4) S(T5,5) S(T6,6) S(T7,7) \
986  S(T8,8) S(T9,9) S(TA,10) S(TB,11) S(TC,12) S(TD,13) S(TE,14)
987 #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) \
988  S(T1,1) S(T2,2) S(T3,3) S(T4,4) S(T5,5) S(T6,6) S(T7,7) \
989  S(T8,8) S(T9,9) S(TA,10) S(TB,11) S(TC,12) S(TD,13) S(TE,14) \
990  S(TF,15) S(TG,16) S(TH,17) S(TI,18) S(TJ,19) S(TK,20) S(TL,21) \
991  S(TM,22) S(TN,23) S(TO,24) S(TP,25) S(TQ,26) S(TR,27)
992 
993 #define CFARGT14FS(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
994  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) \
995  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) \
996  M CFARGT14S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
997 #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) \
998  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) \
999  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) \
1000  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) \
1001  F(TM,22,1) F(TN,23,1) F(TO,24,1) F(TP,25,1) F(TQ,26,1) F(TR,27,1) \
1002  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)
1003 
1004 #if !(defined(PowerStationFortran)||defined(hpuxFortran800))
1005 /* Old CFARGT14 -> CFARGT14FS as seen below, for Absoft cross-compile yields:
1006  SunOS> cc -c -Xa -DAbsoftUNIXFortran c.c
1007  "c.c", line 406: warning: argument mismatch
1008  Haven't checked if this is ANSI C or a SunOS bug. SunOS -Xs works ok.
1009  Behavior is most clearly seen in example:
1010  #define A 1 , 2
1011  #define C(X,Y,Z) x=X. y=Y. z=Z.
1012  #define D(X,Y,Z) C(X,Y,Z)
1013  D(x,A,z)
1014  Output from preprocessor is: x = x . y = 1 . z = 2 .
1015  #define CFARGT14(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1016  CFARGT14FS(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
1017 */
1018 #define CFARGT14(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1019  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) \
1020  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) \
1021  M CFARGT14S(S,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
1022 #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) \
1023  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) \
1024  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) \
1025  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) \
1026  F(TM,22,1) F(TN,23,1) F(TO,24,1) F(TP,25,1) F(TQ,26,1) F(TR,27,1) \
1027  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)
1028 
1029 #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) \
1030  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) \
1031  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) \
1032  F(TF,15,1) F(TG,16,1) F(TH,17,1) F(TI,18,1) F(TJ,19,1) F(TK,20,1) \
1033  S(T1,1) S(T2,2) S(T3,3) S(T4,4) S(T5,5) S(T6,6) S(T7,7) \
1034  S(T8,8) S(T9,9) S(TA,10) S(TB,11) S(TC,12) S(TD,13) S(TE,14) \
1035  S(TF,15) S(TG,16) S(TH,17) S(TI,18) S(TJ,19) S(TK,20)
1036 #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) \
1037  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) \
1038  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) \
1039  F(TD,AD,13,1) F(TE,AE,14,1) S(T1,1) S(T2,2) S(T3,3) S(T4,4) \
1040  S(T5,5) S(T6,6) S(T7,7) S(T8,8) S(T9,9) S(TA,10) \
1041  S(TB,11) S(TC,12) S(TD,13) S(TE,14)
1042 #if MAX_PREPRO_ARGS>31
1043 #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) \
1044  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) \
1045  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) \
1046  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) \
1047  F(TJ,AJ,19,1) F(TK,AK,20,1) S(T1,1) S(T2,2) S(T3,3) S(T4,4) \
1048  S(T5,5) S(T6,6) S(T7,7) S(T8,8) S(T9,9) S(TA,10) \
1049  S(TB,11) S(TC,12) S(TD,13) S(TE,14) S(TF,15) S(TG,16) \
1050  S(TH,17) S(TI,18) S(TJ,19) S(TK,20)
1051 #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) \
1052  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) \
1053  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) \
1054  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) \
1055  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) \
1056  F(TP,AP,25,1) F(TQ,AQ,26,1) F(TR,AR,27,1) S(T1,1) S(T2,2) S(T3,3) \
1057  S(T4,4) S(T5,5) S(T6,6) S(T7,7) S(T8,8) S(T9,9) \
1058  S(TA,10) S(TB,11) S(TC,12) S(TD,13) S(TE,14) S(TF,15) \
1059  S(TG,16) S(TH,17) S(TI,18) S(TJ,19) S(TK,20) S(TL,21) \
1060  S(TM,22) S(TN,23) S(TO,24) S(TP,25) S(TQ,26) S(TR,27)
1061 #endif
1062 #else
1063 #define CFARGT14(F,S,M,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1064  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) \
1065  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) \
1066  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) \
1067  F(TD,13,1) S(TD,13) F(TE,14,1) S(TE,14)
1068 #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) \
1069  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) \
1070  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) \
1071  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) \
1072  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) \
1073  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) \
1074  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) \
1075  F(TP,25,1) S(TP,25) F(TQ,26,1) S(TQ,26) F(TR,27,1) S(TR,27)
1076 
1077 #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) \
1078  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) \
1079  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) \
1080  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) \
1081  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) \
1082  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)
1083 #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) \
1084  F(T1,A1,1,0) S(T1,1) F(T2,A2,2,1) S(T2,2) F(T3,A3,3,1) S(T3,3) \
1085  F(T4,A4,4,1) S(T4,4) F(T5,A5,5,1) S(T5,5) F(T6,A6,6,1) S(T6,6) \
1086  F(T7,A7,7,1) S(T7,7) F(T8,A8,8,1) S(T8,8) F(T9,A9,9,1) S(T9,9) \
1087  F(TA,AA,10,1) S(TA,10) F(TB,AB,11,1) S(TB,11) F(TC,AC,12,1) S(TC,12) \
1088  F(TD,AD,13,1) S(TD,13) F(TE,AE,14,1) S(TE,14)
1089 #if MAX_PREPRO_ARGS>31
1090 #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) \
1091  F(T1,A1,1,0) S(T1,1) F(T2,A2,2,1) S(T2,2) F(T3,A3,3,1) S(T3,3) \
1092  F(T4,A4,4,1) S(T4,4) F(T5,A5,5,1) S(T5,5) F(T6,A6,6,1) S(T6,6) \
1093  F(T7,A7,7,1) S(T7,7) F(T8,A8,8,1) S(T8,8) F(T9,A9,9,1) S(T9,9) \
1094  F(TA,AA,10,1) S(TA,10) F(TB,AB,11,1) S(TB,11) F(TC,AC,12,1) S(TC,12) \
1095  F(TD,AD,13,1) S(TD,13) F(TE,AE,14,1) S(TE,14) F(TF,AF,15,1) S(TF,15) \
1096  F(TG,AG,16,1) S(TG,16) F(TH,AH,17,1) S(TH,17) F(TI,AI,18,1) S(TI,18) \
1097  F(TJ,AJ,19,1) S(TJ,19) F(TK,AK,20,1) S(TK,20)
1098 #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) \
1099  F(T1,A1,1,0) S(T1,1) F(T2,A2,2,1) S(T2,2) F(T3,A3,3,1) S(T3,3) \
1100  F(T4,A4,4,1) S(T4,4) F(T5,A5,5,1) S(T5,5) F(T6,A6,6,1) S(T6,6) \
1101  F(T7,A7,7,1) S(T7,7) F(T8,A8,8,1) S(T8,8) F(T9,A9,9,1) S(T9,9) \
1102  F(TA,AA,10,1) S(TA,10) F(TB,AB,11,1) S(TB,11) F(TC,AC,12,1) S(TC,12) \
1103  F(TD,AD,13,1) S(TD,13) F(TE,AE,14,1) S(TE,14) F(TF,AF,15,1) S(TF,15) \
1104  F(TG,AG,16,1) S(TG,16) F(TH,AH,17,1) S(TH,17) F(TI,AI,18,1) S(TI,18) \
1105  F(TJ,AJ,19,1) S(TJ,19) F(TK,AK,20,1) S(TK,20) F(TL,AL,21,1) S(TL,21) \
1106  F(TM,AM,22,1) S(TM,22) F(TN,AN,23,1) S(TN,23) F(TO,AO,24,1) S(TO,24) \
1107  F(TP,AP,25,1) S(TP,25) F(TQ,AQ,26,1) S(TQ,26) F(TR,AR,27,1) S(TR,27)
1108 #endif
1109 #endif
1110 
1111 
1112 #define PROTOCCALLSFSUB1( UN,LN,T1) \
1113  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)
1114 #define PROTOCCALLSFSUB2( UN,LN,T1,T2) \
1115  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)
1116 #define PROTOCCALLSFSUB3( UN,LN,T1,T2,T3) \
1117  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)
1118 #define PROTOCCALLSFSUB4( UN,LN,T1,T2,T3,T4) \
1119  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)
1120 #define PROTOCCALLSFSUB5( UN,LN,T1,T2,T3,T4,T5) \
1121  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)
1122 #define PROTOCCALLSFSUB6( UN,LN,T1,T2,T3,T4,T5,T6) \
1123  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)
1124 #define PROTOCCALLSFSUB7( UN,LN,T1,T2,T3,T4,T5,T6,T7) \
1125  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
1126 #define PROTOCCALLSFSUB8( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8) \
1127  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0,CF_0,CF_0,CF_0,CF_0)
1128 #define PROTOCCALLSFSUB9( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9) \
1129  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0,CF_0,CF_0,CF_0,CF_0)
1130 #define PROTOCCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA) \
1131  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0)
1132 #define PROTOCCALLSFSUB11(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB) \
1133  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0)
1134 #define PROTOCCALLSFSUB12(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC) \
1135  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0)
1136 #define PROTOCCALLSFSUB13(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD) \
1137  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0)
1138 
1139 
1140 #define PROTOCCALLSFSUB15(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF) \
1141  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)
1142 #define PROTOCCALLSFSUB16(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG) \
1143  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)
1144 #define PROTOCCALLSFSUB17(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH) \
1145  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)
1146 #define PROTOCCALLSFSUB18(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI) \
1147  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)
1148 #define PROTOCCALLSFSUB19(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ) \
1149  PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,CF_0)
1150 
1151 #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) \
1152  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)
1153 #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) \
1154  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)
1155 #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) \
1156  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)
1157 #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) \
1158  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)
1159 #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) \
1160  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)
1161 #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) \
1162  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)
1163 
1164 
1165 #ifndef FCALLSC_QUALIFIER
1166 #ifdef VISUAL_CPLUSPLUS
1167 #define FCALLSC_QUALIFIER __stdcall
1168 #else
1169 #define FCALLSC_QUALIFIER
1170 #endif
1171 #endif
1172 
1173 #ifdef __cplusplus
1174 #define CFextern extern "C"
1175 #else
1176 #define CFextern extern
1177 #endif
1178 
1179 
1180 #ifdef CFSUBASFUN
1181 #define PROTOCCALLSFSUB0(UN,LN) \
1182  PROTOCCALLSFFUN0( VOID,UN,LN)
1183 #define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1184  PROTOCCALLSFFUN14(VOID,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
1185 #define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)\
1186  PROTOCCALLSFFUN20(VOID,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)
1187 #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)\
1188  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)
1189 #else
1190 /* Note: Prevent compiler warnings, null #define PROTOCCALLSFSUB14/20 after
1191  #include-ing cfortran.h if calling the FORTRAN wrapper within the same
1192  source code where the wrapper is created. */
1193 #define PROTOCCALLSFSUB0(UN,LN) _(VOID,_cfPU)(CFC_(UN,LN))();
1194 #ifndef __CF__KnR
1195 #define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1196  _(VOID,_cfPU)(CFC_(UN,LN))( CFARGT14(NCF,KCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) );
1197 #define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)\
1198  _(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) );
1199 #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)\
1200  _(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) );
1201 #else
1202 #define PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1203  PROTOCCALLSFSUB0(UN,LN)
1204 #define PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
1205  PROTOCCALLSFSUB0(UN,LN)
1206 #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) \
1207  PROTOCCALLSFSUB0(UN,LN)
1208 #endif
1209 #endif
1210 
1211 
1212 #ifdef OLD_VAXC /* Allow %CC-I-PARAMNOTUSED. */
1213 #pragma standard
1214 #endif
1215 
1216 
1217 #define CCALLSFSUB1( UN,LN,T1, A1) \
1218  CCALLSFSUB5 (UN,LN,T1,CF_0,CF_0,CF_0,CF_0,A1,0,0,0,0)
1219 #define CCALLSFSUB2( UN,LN,T1,T2, A1,A2) \
1220  CCALLSFSUB5 (UN,LN,T1,T2,CF_0,CF_0,CF_0,A1,A2,0,0,0)
1221 #define CCALLSFSUB3( UN,LN,T1,T2,T3, A1,A2,A3) \
1222  CCALLSFSUB5 (UN,LN,T1,T2,T3,CF_0,CF_0,A1,A2,A3,0,0)
1223 #define CCALLSFSUB4( UN,LN,T1,T2,T3,T4, A1,A2,A3,A4)\
1224  CCALLSFSUB5 (UN,LN,T1,T2,T3,T4,CF_0,A1,A2,A3,A4,0)
1225 #define CCALLSFSUB5( UN,LN,T1,T2,T3,T4,T5, A1,A2,A3,A4,A5) \
1226  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)
1227 #define CCALLSFSUB6( UN,LN,T1,T2,T3,T4,T5,T6, A1,A2,A3,A4,A5,A6) \
1228  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)
1229 #define CCALLSFSUB7( UN,LN,T1,T2,T3,T4,T5,T6,T7, A1,A2,A3,A4,A5,A6,A7) \
1230  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)
1231 #define CCALLSFSUB8( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8, A1,A2,A3,A4,A5,A6,A7,A8) \
1232  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)
1233 #define CCALLSFSUB9( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,A1,A2,A3,A4,A5,A6,A7,A8,A9)\
1234  CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,0)
1235 #define CCALLSFSUB10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA)\
1236  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)
1237 #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)\
1238  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)
1239 #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)\
1240  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)
1241 #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)\
1242  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)
1243 
1244 #ifdef __cplusplus
1245 #define CPPPROTOCLSFSUB0( UN,LN)
1246 #define CPPPROTOCLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
1247 #define CPPPROTOCLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)
1248 #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)
1249 #else
1250 #define CPPPROTOCLSFSUB0(UN,LN) \
1251  PROTOCCALLSFSUB0(UN,LN)
1252 #define CPPPROTOCLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1253  PROTOCCALLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
1254 #define CPPPROTOCLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
1255  PROTOCCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK)
1256 #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) \
1257  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)
1258 #endif
1259 
1260 #ifdef CFSUBASFUN
1261 #define CCALLSFSUB0(UN,LN) CCALLSFFUN0(UN,LN)
1262 #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)\
1263  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)
1264 #else
1265 /* do{...}while(0) allows if(a==b) FORT(); else BORT(); */
1266 #define CCALLSFSUB0( UN,LN) do{CPPPROTOCLSFSUB0(UN,LN) CFC_(UN,LN)();}while(0)
1267 #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)\
1268 do{VVCF(T1,A1,B1) VVCF(T2,A2,B2) VVCF(T3,A3,B3) VVCF(T4,A4,B4) VVCF(T5,A5,B5) \
1269  VVCF(T6,A6,B6) VVCF(T7,A7,B7) VVCF(T8,A8,B8) VVCF(T9,A9,B9) VVCF(TA,AA,B10) \
1270  VVCF(TB,AB,B11) VVCF(TC,AC,B12) VVCF(TD,AD,B13) VVCF(TE,AE,B14) \
1271  CPPPROTOCLSFSUB14(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
1272  ACF(LN,T1,A1,1) ACF(LN,T2,A2,2) ACF(LN,T3,A3,3) \
1273  ACF(LN,T4,A4,4) ACF(LN,T5,A5,5) ACF(LN,T6,A6,6) ACF(LN,T7,A7,7) \
1274  ACF(LN,T8,A8,8) ACF(LN,T9,A9,9) ACF(LN,TA,AA,10) ACF(LN,TB,AB,11) \
1275  ACF(LN,TC,AC,12) ACF(LN,TD,AD,13) ACF(LN,TE,AE,14) \
1276  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) );\
1277  WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) \
1278  WCF(T6,A6,6) WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,AA,10) \
1279  WCF(TB,AB,11) WCF(TC,AC,12) WCF(TD,AD,13) WCF(TE,AE,14) }while(0)
1280 #endif
1281 
1282 
1283 #if MAX_PREPRO_ARGS>31
1284 #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)\
1285  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)
1286 #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)\
1287  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)
1288 #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)\
1289  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)
1290 #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)\
1291  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)
1292 #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)\
1293  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)
1294 
1295 #ifdef CFSUBASFUN
1296 #define CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH, \
1297  TI,TJ,TK, A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) \
1298  CCALLSFFUN20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH, \
1299  TI,TJ,TK, A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK)
1300 #else
1301 #define CCALLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH, \
1302  TI,TJ,TK, A1,A2,A3,A4,A5,A6,A7,A8,A9,AA,AB,AC,AD,AE,AF,AG,AH,AI,AJ,AK) \
1303 do{VVCF(T1,A1,B1) VVCF(T2,A2,B2) VVCF(T3,A3,B3) VVCF(T4,A4,B4) VVCF(T5,A5,B5) \
1304  VVCF(T6,A6,B6) VVCF(T7,A7,B7) VVCF(T8,A8,B8) VVCF(T9,A9,B9) VVCF(TA,AA,B10) \
1305  VVCF(TB,AB,B11) VVCF(TC,AC,B12) VVCF(TD,AD,B13) VVCF(TE,AE,B14) VVCF(TF,AF,B15) \
1306  VVCF(TG,AG,B16) VVCF(TH,AH,B17) VVCF(TI,AI,B18) VVCF(TJ,AJ,B19) VVCF(TK,AK,B20) \
1307  CPPPROTOCLSFSUB20(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ,TK) \
1308  ACF(LN,T1,A1,1) ACF(LN,T2,A2,2) ACF(LN,T3,A3,3) ACF(LN,T4,A4,4) \
1309  ACF(LN,T5,A5,5) ACF(LN,T6,A6,6) ACF(LN,T7,A7,7) ACF(LN,T8,A8,8) \
1310  ACF(LN,T9,A9,9) ACF(LN,TA,AA,10) ACF(LN,TB,AB,11) ACF(LN,TC,AC,12) \
1311  ACF(LN,TD,AD,13) ACF(LN,TE,AE,14) ACF(LN,TF,AF,15) ACF(LN,TG,AG,16) \
1312  ACF(LN,TH,AH,17) ACF(LN,TI,AI,18) ACF(LN,TJ,AJ,19) ACF(LN,TK,AK,20) \
1313  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) ); \
1314  WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) WCF(T6,A6,6) \
1315  WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,AA,10) WCF(TB,AB,11) WCF(TC,AC,12) \
1316  WCF(TD,AD,13) WCF(TE,AE,14) WCF(TF,AF,15) WCF(TG,AG,16) WCF(TH,AH,17) WCF(TI,AI,18) \
1317  WCF(TJ,AJ,19) WCF(TK,AK,20) }while(0)
1318 #endif
1319 #endif /* MAX_PREPRO_ARGS */
1320 
1321 #if MAX_PREPRO_ARGS>31
1322 #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)\
1323  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)
1324 #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)\
1325  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)
1326 #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)\
1327  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)
1328 #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)\
1329  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)
1330 #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)\
1331  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)
1332 #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)\
1333  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)
1334 
1335 #ifdef CFSUBASFUN
1336 #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, \
1337  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) \
1338  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, \
1339  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)
1340 #else
1341 #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, \
1342  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) \
1343 do{VVCF(T1,A1,B1) VVCF(T2,A2,B2) VVCF(T3,A3,B3) VVCF(T4,A4,B4) VVCF(T5,A5,B5) \
1344  VVCF(T6,A6,B6) VVCF(T7,A7,B7) VVCF(T8,A8,B8) VVCF(T9,A9,B9) VVCF(TA,AA,B10) \
1345  VVCF(TB,AB,B11) VVCF(TC,AC,B12) VVCF(TD,AD,B13) VVCF(TE,AE,B14) VVCF(TF,AF,B15) \
1346  VVCF(TG,AG,B16) VVCF(TH,AH,B17) VVCF(TI,AI,B18) VVCF(TJ,AJ,B19) VVCF(TK,AK,B20) \
1347  VVCF(TL,AL,B21) VVCF(TM,AM,B22) VVCF(TN,AN,B23) VVCF(TO,AO,B24) VVCF(TP,AP,B25) \
1348  VVCF(TQ,AQ,B26) VVCF(TR,AR,B27) \
1349  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) \
1350  ACF(LN,T1,A1,1) ACF(LN,T2,A2,2) ACF(LN,T3,A3,3) ACF(LN,T4,A4,4) \
1351  ACF(LN,T5,A5,5) ACF(LN,T6,A6,6) ACF(LN,T7,A7,7) ACF(LN,T8,A8,8) \
1352  ACF(LN,T9,A9,9) ACF(LN,TA,AA,10) ACF(LN,TB,AB,11) ACF(LN,TC,AC,12) \
1353  ACF(LN,TD,AD,13) ACF(LN,TE,AE,14) ACF(LN,TF,AF,15) ACF(LN,TG,AG,16) \
1354  ACF(LN,TH,AH,17) ACF(LN,TI,AI,18) ACF(LN,TJ,AJ,19) ACF(LN,TK,AK,20) \
1355  ACF(LN,TL,AL,21) ACF(LN,TM,AM,22) ACF(LN,TN,AN,23) ACF(LN,TO,AO,24) \
1356  ACF(LN,TP,AP,25) ACF(LN,TQ,AQ,26) ACF(LN,TR,AR,27) \
1357  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,\
1358  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) ); \
1359  WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) WCF(T6,A6,6) \
1360  WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,AA,10) WCF(TB,AB,11) WCF(TC,AC,12) \
1361  WCF(TD,AD,13) WCF(TE,AE,14) WCF(TF,AF,15) WCF(TG,AG,16) WCF(TH,AH,17) WCF(TI,AI,18) \
1362  WCF(TJ,AJ,19) WCF(TK,AK,20) WCF(TL,AL,21) WCF(TM,AM,22) WCF(TN,AN,23) WCF(TO,AO,24) \
1363  WCF(TP,AP,25) WCF(TQ,AQ,26) WCF(TR,AR,27) }while(0)
1364 #endif
1365 #endif /* MAX_PREPRO_ARGS */
1366 
1367 /*-------------------------------------------------------------------------*/
1368 
1369 /* UTILITIES FOR C TO CALL FORTRAN FUNCTIONS */
1370 
1371 /*N.B. PROTOCCALLSFFUNn(..) generates code, whether or not the FORTRAN
1372  function is called. Therefore, especially for creator's of C header files
1373  for large FORTRAN libraries which include many functions, to reduce
1374  compile time and object code size, it may be desirable to create
1375  preprocessor directives to allow users to create code for only those
1376  functions which they use. */
1377 
1378 /* The following defines the maximum length string that a function can return.
1379  Of course it may be undefine-d and re-define-d before individual
1380  PROTOCCALLSFFUNn(..) as required. It would also be nice to have this derived
1381  from the individual machines' limits. */
1382 #define MAX_LEN_FORTRAN_FUNCTION_STRING 0x4FE
1383 
1384 /* The following defines a character used by CFORTRAN.H to flag the end of a
1385  string coming out of a FORTRAN routine. */
1386 #define CFORTRAN_NON_CHAR 0x7F
1387 
1388 #ifdef OLD_VAXC /* Prevent %CC-I-PARAMNOTUSED. */
1389 #pragma nostandard
1390 #endif
1391 
1392 #define _SEP_(TN,C,cfCOMMA) _(__SEP_,C)(TN,cfCOMMA)
1393 #define __SEP_0(TN,cfCOMMA)
1394 #define __SEP_1(TN,cfCOMMA) _Icf(2,SEP,TN,cfCOMMA,0)
1395 #define INT_cfSEP(T,B) _(A,B)
1396 #define INTV_cfSEP(T,B) INT_cfSEP(T,B)
1397 #define INTVV_cfSEP(T,B) INT_cfSEP(T,B)
1398 #define INTVVV_cfSEP(T,B) INT_cfSEP(T,B)
1399 #define INTVVVV_cfSEP(T,B) INT_cfSEP(T,B)
1400 #define INTVVVVV_cfSEP(T,B) INT_cfSEP(T,B)
1401 #define INTVVVVVV_cfSEP(T,B) INT_cfSEP(T,B)
1402 #define INTVVVVVVV_cfSEP(T,B) INT_cfSEP(T,B)
1403 #define PINT_cfSEP(T,B) INT_cfSEP(T,B)
1404 #define PVOID_cfSEP(T,B) INT_cfSEP(T,B)
1405 #define ROUTINE_cfSEP(T,B) INT_cfSEP(T,B)
1406 #define SIMPLE_cfSEP(T,B) INT_cfSEP(T,B)
1407 #define VOID_cfSEP(T,B) INT_cfSEP(T,B) /* For FORTRAN calls C subr.s.*/
1408 #define STRING_cfSEP(T,B) INT_cfSEP(T,B)
1409 #define STRINGV_cfSEP(T,B) INT_cfSEP(T,B)
1410 #define PSTRING_cfSEP(T,B) INT_cfSEP(T,B)
1411 #define PSTRINGV_cfSEP(T,B) INT_cfSEP(T,B)
1412 #define PNSTRING_cfSEP(T,B) INT_cfSEP(T,B)
1413 #define PPSTRING_cfSEP(T,B) INT_cfSEP(T,B)
1414 #define ZTRINGV_cfSEP(T,B) INT_cfSEP(T,B)
1415 #define PZTRINGV_cfSEP(T,B) INT_cfSEP(T,B)
1416 
1417 #if defined(SIGNED_BYTE) || !defined(UNSIGNED_BYTE)
1418 #ifdef OLD_VAXC
1419 #define INTEGER_BYTE char /* Old VAXC barfs on 'signed char' */
1420 #else
1421 #define INTEGER_BYTE signed char /* default */
1422 #endif
1423 #else
1424 #define INTEGER_BYTE unsigned char
1425 #endif
1426 #define BYTEVVVVVVV_cfTYPE INTEGER_BYTE
1427 #define DOUBLEVVVVVVV_cfTYPE DOUBLE_PRECISION
1428 #define FLOATVVVVVVV_cfTYPE FORTRAN_REAL
1429 #define INTVVVVVVV_cfTYPE int
1430 #define LOGICALVVVVVVV_cfTYPE int
1431 #define LONGVVVVVVV_cfTYPE long
1432 #define LONGLONGVVVVVVV_cfTYPE LONGLONG /* added by MR December 2005 */
1433 #define SHORTVVVVVVV_cfTYPE short
1434 #define PBYTE_cfTYPE INTEGER_BYTE
1435 #define PDOUBLE_cfTYPE DOUBLE_PRECISION
1436 #define PFLOAT_cfTYPE FORTRAN_REAL
1437 #define PINT_cfTYPE int
1438 #define PLOGICAL_cfTYPE int
1439 #define PLONG_cfTYPE long
1440 #define PLONGLONG_cfTYPE LONGLONG /* added by MR December 2005 */
1441 #define PSHORT_cfTYPE short
1442 
1443 #define CFARGS0(A,T,V,W,X,Y,Z) _3(T,_cf,A)
1444 #define CFARGS1(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V)
1445 #define CFARGS2(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W)
1446 #define CFARGS3(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X)
1447 #define CFARGS4(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X,Y)
1448 #define CFARGS5(A,T,V,W,X,Y,Z) _3(T,_cf,A)(V,W,X,Y,Z)
1449 
1450 #define _Icf(N,T,I,X,Y) _(I,_cfINT)(N,T,I,X,Y,0)
1451 #define _Icf4(N,T,I,X,Y,Z) _(I,_cfINT)(N,T,I,X,Y,Z)
1452 #define BYTE_cfINT(N,A,B,X,Y,Z) DOUBLE_cfINT(N,A,B,X,Y,Z)
1453 #define DOUBLE_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INT,B,X,Y,Z,0)
1454 #define FLOAT_cfINT(N,A,B,X,Y,Z) DOUBLE_cfINT(N,A,B,X,Y,Z)
1455 #define INT_cfINT(N,A,B,X,Y,Z) DOUBLE_cfINT(N,A,B,X,Y,Z)
1456 #define LOGICAL_cfINT(N,A,B,X,Y,Z) DOUBLE_cfINT(N,A,B,X,Y,Z)
1457 #define LONG_cfINT(N,A,B,X,Y,Z) DOUBLE_cfINT(N,A,B,X,Y,Z)
1458 #define LONGLONG_cfINT(N,A,B,X,Y,Z) DOUBLE_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1459 #define SHORT_cfINT(N,A,B,X,Y,Z) DOUBLE_cfINT(N,A,B,X,Y,Z)
1460 #define PBYTE_cfINT(N,A,B,X,Y,Z) PDOUBLE_cfINT(N,A,B,X,Y,Z)
1461 #define PDOUBLE_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,PINT,B,X,Y,Z,0)
1462 #define PFLOAT_cfINT(N,A,B,X,Y,Z) PDOUBLE_cfINT(N,A,B,X,Y,Z)
1463 #define PINT_cfINT(N,A,B,X,Y,Z) PDOUBLE_cfINT(N,A,B,X,Y,Z)
1464 #define PLOGICAL_cfINT(N,A,B,X,Y,Z) PDOUBLE_cfINT(N,A,B,X,Y,Z)
1465 #define PLONG_cfINT(N,A,B,X,Y,Z) PDOUBLE_cfINT(N,A,B,X,Y,Z)
1466 #define PLONGLONG_cfINT(N,A,B,X,Y,Z) PDOUBLE_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1467 #define PSHORT_cfINT(N,A,B,X,Y,Z) PDOUBLE_cfINT(N,A,B,X,Y,Z)
1468 #define BYTEV_cfINT(N,A,B,X,Y,Z) DOUBLEV_cfINT(N,A,B,X,Y,Z)
1469 #define BYTEVV_cfINT(N,A,B,X,Y,Z) DOUBLEVV_cfINT(N,A,B,X,Y,Z)
1470 #define BYTEVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
1471 #define BYTEVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
1472 #define BYTEVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
1473 #define BYTEVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
1474 #define BYTEVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
1475 #define DOUBLEV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTV,B,X,Y,Z,0)
1476 #define DOUBLEVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVV,B,X,Y,Z,0)
1477 #define DOUBLEVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVV,B,X,Y,Z,0)
1478 #define DOUBLEVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVV,B,X,Y,Z,0)
1479 #define DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVV,B,X,Y,Z,0)
1480 #define DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVVV,B,X,Y,Z,0)
1481 #define DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,INTVVVVVVV,B,X,Y,Z,0)
1482 #define FLOATV_cfINT(N,A,B,X,Y,Z) DOUBLEV_cfINT(N,A,B,X,Y,Z)
1483 #define FLOATVV_cfINT(N,A,B,X,Y,Z) DOUBLEVV_cfINT(N,A,B,X,Y,Z)
1484 #define FLOATVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
1485 #define FLOATVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
1486 #define FLOATVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
1487 #define FLOATVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
1488 #define FLOATVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
1489 #define INTV_cfINT(N,A,B,X,Y,Z) DOUBLEV_cfINT(N,A,B,X,Y,Z)
1490 #define INTVV_cfINT(N,A,B,X,Y,Z) DOUBLEVV_cfINT(N,A,B,X,Y,Z)
1491 #define INTVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
1492 #define INTVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
1493 #define INTVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
1494 #define INTVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
1495 #define INTVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
1496 #define LOGICALV_cfINT(N,A,B,X,Y,Z) DOUBLEV_cfINT(N,A,B,X,Y,Z)
1497 #define LOGICALVV_cfINT(N,A,B,X,Y,Z) DOUBLEVV_cfINT(N,A,B,X,Y,Z)
1498 #define LOGICALVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
1499 #define LOGICALVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
1500 #define LOGICALVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
1501 #define LOGICALVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
1502 #define LOGICALVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
1503 #define LONGV_cfINT(N,A,B,X,Y,Z) DOUBLEV_cfINT(N,A,B,X,Y,Z)
1504 #define LONGVV_cfINT(N,A,B,X,Y,Z) DOUBLEVV_cfINT(N,A,B,X,Y,Z)
1505 #define LONGVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
1506 #define LONGVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
1507 #define LONGVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
1508 #define LONGVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
1509 #define LONGVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
1510 #define LONGLONGV_cfINT(N,A,B,X,Y,Z) DOUBLEV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1511 #define LONGLONGVV_cfINT(N,A,B,X,Y,Z) DOUBLEVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1512 #define LONGLONGVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1513 #define LONGLONGVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1514 #define LONGLONGVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1515 #define LONGLONGVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1516 #define LONGLONGVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z) /* added by MR December 2005 */
1517 #define SHORTV_cfINT(N,A,B,X,Y,Z) DOUBLEV_cfINT(N,A,B,X,Y,Z)
1518 #define SHORTVV_cfINT(N,A,B,X,Y,Z) DOUBLEVV_cfINT(N,A,B,X,Y,Z)
1519 #define SHORTVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVV_cfINT(N,A,B,X,Y,Z)
1520 #define SHORTVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVV_cfINT(N,A,B,X,Y,Z)
1521 #define SHORTVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVV_cfINT(N,A,B,X,Y,Z)
1522 #define SHORTVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVV_cfINT(N,A,B,X,Y,Z)
1523 #define SHORTVVVVVVV_cfINT(N,A,B,X,Y,Z) DOUBLEVVVVVVV_cfINT(N,A,B,X,Y,Z)
1524 #define PVOID_cfINT(N,A,B,X,Y,Z) _(CFARGS,N)(A,B,B,X,Y,Z,0)
1525 #define ROUTINE_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1526 /*CRAY coughs on the first,
1527  i.e. the usual trouble of not being able to
1528  define macros to macros with arguments.
1529  New ultrix is worse, it coughs on all such uses.
1530  */
1531 /*#define SIMPLE_cfINT PVOID_cfINT*/
1532 #define SIMPLE_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1533 #define VOID_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1534 #define STRING_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1535 #define STRINGV_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1536 #define PSTRING_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1537 #define PSTRINGV_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1538 #define PNSTRING_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1539 #define PPSTRING_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1540 #define ZTRINGV_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1541 #define PZTRINGV_cfINT(N,A,B,X,Y,Z) PVOID_cfINT(N,A,B,X,Y,Z)
1542 #define CF_0_cfINT(N,A,B,X,Y,Z)
1543 
1544 
1545 #define UCF(TN,I,C) _SEP_(TN,C,cfCOMMA) _Icf(2,U,TN,_(A,I),0)
1546 #define UUCF(TN,I,C) _SEP_(TN,C,cfCOMMA) _SEP_(TN,1,I)
1547 #define UUUCF(TN,I,C) _SEP_(TN,C,cfCOLON) _Icf(2,U,TN,_(A,I),0)
1548 #define INT_cfU(T,A) _(T,VVVVVVV_cfTYPE) A
1549 #define INTV_cfU(T,A) _(T,VVVVVV_cfTYPE) * A
1550 #define INTVV_cfU(T,A) _(T,VVVVV_cfTYPE) * A
1551 #define INTVVV_cfU(T,A) _(T,VVVV_cfTYPE) * A
1552 #define INTVVVV_cfU(T,A) _(T,VVV_cfTYPE) * A
1553 #define INTVVVVV_cfU(T,A) _(T,VV_cfTYPE) * A
1554 #define INTVVVVVV_cfU(T,A) _(T,V_cfTYPE) * A
1555 #define INTVVVVVVV_cfU(T,A) _(T,_cfTYPE) * A
1556 #define PINT_cfU(T,A) _(T,_cfTYPE) * A
1557 #define PVOID_cfU(T,A) void *A
1558 #define ROUTINE_cfU(T,A) void (*A)(CF_NULL_PROTO)
1559 #define VOID_cfU(T,A) void A /* Needed for C calls FORTRAN sub.s. */
1560 #define STRING_cfU(T,A) char *A /* via VOID and wrapper. */
1561 #define STRINGV_cfU(T,A) char *A
1562 #define PSTRING_cfU(T,A) char *A
1563 #define PSTRINGV_cfU(T,A) char *A
1564 #define ZTRINGV_cfU(T,A) char *A
1565 #define PZTRINGV_cfU(T,A) char *A
1566 
1567 /* VOID breaks U into U and UU. */
1568 #define INT_cfUU(T,A) _(T,VVVVVVV_cfTYPE) A
1569 #define VOID_cfUU(T,A) /* Needed for FORTRAN calls C sub.s. */
1570 #define STRING_cfUU(T,A) char *A
1571 
1572 
1573 #define BYTE_cfPU(A) CFextern INTEGER_BYTE FCALLSC_QUALIFIER A
1574 #define DOUBLE_cfPU(A) CFextern DOUBLE_PRECISION FCALLSC_QUALIFIER A
1575 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
1576 #if defined (f2cFortran) && ! defined (gFortran)
1577 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
1578 #define FLOAT_cfPU(A) CFextern DOUBLE_PRECISION FCALLSC_QUALIFIER A
1579 #else
1580 #define FLOAT_cfPU(A) CFextern FORTRAN_REAL FCALLSC_QUALIFIER A
1581 #endif
1582 #else
1583 #define FLOAT_cfPU(A) CFextern FLOATFUNCTIONTYPE FCALLSC_QUALIFIER A
1584 #endif
1585 #define INT_cfPU(A) CFextern int FCALLSC_QUALIFIER A
1586 #define LOGICAL_cfPU(A) CFextern int FCALLSC_QUALIFIER A
1587 #define LONG_cfPU(A) CFextern long FCALLSC_QUALIFIER A
1588 #define SHORT_cfPU(A) CFextern short FCALLSC_QUALIFIER A
1589 #define STRING_cfPU(A) CFextern void FCALLSC_QUALIFIER A
1590 #define VOID_cfPU(A) CFextern void FCALLSC_QUALIFIER A
1591 
1592 #define BYTE_cfE INTEGER_BYTE A0;
1593 #define DOUBLE_cfE DOUBLE_PRECISION A0;
1594 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
1595 #define FLOAT_cfE FORTRAN_REAL A0;
1596 #else
1597 #define FLOAT_cfE FORTRAN_REAL AA0; FLOATFUNCTIONTYPE A0;
1598 #endif
1599 #define INT_cfE int A0;
1600 #define LOGICAL_cfE int A0;
1601 #define LONG_cfE long A0;
1602 #define SHORT_cfE short A0;
1603 #define VOID_cfE
1604 #ifdef vmsFortran
1605 #define STRING_cfE static char AA0[1+MAX_LEN_FORTRAN_FUNCTION_STRING]; \
1606  static fstring A0 = \
1607  {MAX_LEN_FORTRAN_FUNCTION_STRING,DSC$K_DTYPE_T,DSC$K_CLASS_S,AA0};\
1608  memset(AA0, CFORTRAN_NON_CHAR, MAX_LEN_FORTRAN_FUNCTION_STRING);\
1609  *(AA0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';
1610 #else
1611 #ifdef CRAYFortran
1612 #define STRING_cfE static char AA0[1+MAX_LEN_FORTRAN_FUNCTION_STRING]; \
1613  static _fcd A0; *(AA0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';\
1614  memset(AA0,CFORTRAN_NON_CHAR, MAX_LEN_FORTRAN_FUNCTION_STRING);\
1615  A0 = _cptofcd(AA0,MAX_LEN_FORTRAN_FUNCTION_STRING);
1616 #else
1617 /* 'cc: SC3.0.1 13 Jul 1994' barfs on char A0[0x4FE+1];
1618  * char A0[0x4FE +1]; char A0[1+0x4FE]; are both OK. */
1619 #define STRING_cfE static char A0[1+MAX_LEN_FORTRAN_FUNCTION_STRING]; \
1620  memset(A0, CFORTRAN_NON_CHAR, \
1621  MAX_LEN_FORTRAN_FUNCTION_STRING); \
1622  *(A0+MAX_LEN_FORTRAN_FUNCTION_STRING)='\0';
1623 #endif
1624 #endif
1625 /* ESTRING must use static char. array which is guaranteed to exist after
1626  function returns. */
1627 
1628 /* N.B.i) The diff. for 0 (Zero) and >=1 arguments.
1629  ii)That the following create an unmatched bracket, i.e. '(', which
1630  must of course be matched in the call.
1631  iii)Commas must be handled very carefully */
1632 #define INT_cfGZ(T,UN,LN) A0=CFC_(UN,LN)(
1633 #define VOID_cfGZ(T,UN,LN) CFC_(UN,LN)(
1634 #ifdef vmsFortran
1635 #define STRING_cfGZ(T,UN,LN) CFC_(UN,LN)(&A0
1636 #else
1637 #if defined(CRAYFortran) || defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
1638 #define STRING_cfGZ(T,UN,LN) CFC_(UN,LN)( A0
1639 #else
1640 #define STRING_cfGZ(T,UN,LN) CFC_(UN,LN)( A0,MAX_LEN_FORTRAN_FUNCTION_STRING
1641 #endif
1642 #endif
1643 
1644 #define INT_cfG(T,UN,LN) INT_cfGZ(T,UN,LN)
1645 #define VOID_cfG(T,UN,LN) VOID_cfGZ(T,UN,LN)
1646 #define STRING_cfG(T,UN,LN) STRING_cfGZ(T,UN,LN), /*, is only diff. from _cfG*/
1647 
1648 #define BYTEVVVVVVV_cfPP
1649 #define INTVVVVVVV_cfPP /* These complement FLOATVVVVVVV_cfPP. */
1650 #define DOUBLEVVVVVVV_cfPP
1651 #define LOGICALVVVVVVV_cfPP
1652 #define LONGVVVVVVV_cfPP
1653 #define SHORTVVVVVVV_cfPP
1654 #define PBYTE_cfPP
1655 #define PINT_cfPP
1656 #define PDOUBLE_cfPP
1657 #define PLOGICAL_cfPP
1658 #define PLONG_cfPP
1659 #define PSHORT_cfPP
1660 #define PFLOAT_cfPP FLOATVVVVVVV_cfPP
1661 
1662 #define BCF(TN,AN,C) _SEP_(TN,C,cfCOMMA) _Icf(2,B,TN,AN,0)
1663 #define INT_cfB(T,A) (_(T,VVVVVVV_cfTYPE)) A
1664 #define INTV_cfB(T,A) A
1665 #define INTVV_cfB(T,A) (A)[0]
1666 #define INTVVV_cfB(T,A) (A)[0][0]
1667 #define INTVVVV_cfB(T,A) (A)[0][0][0]
1668 #define INTVVVVV_cfB(T,A) (A)[0][0][0][0]
1669 #define INTVVVVVV_cfB(T,A) (A)[0][0][0][0][0]
1670 #define INTVVVVVVV_cfB(T,A) (A)[0][0][0][0][0][0]
1671 #define PINT_cfB(T,A) _(T,_cfPP)&A
1672 #define STRING_cfB(T,A) (char *) A
1673 #define STRINGV_cfB(T,A) (char *) A
1674 #define PSTRING_cfB(T,A) (char *) A
1675 #define PSTRINGV_cfB(T,A) (char *) A
1676 #define PVOID_cfB(T,A) (void *) A
1677 #define ROUTINE_cfB(T,A) (cfCAST_FUNCTION)A
1678 #define ZTRINGV_cfB(T,A) (char *) A
1679 #define PZTRINGV_cfB(T,A) (char *) A
1680 
1681 #define SCF(TN,NAME,I,A) _(TN,_cfSTR)(3,S,NAME,I,A,0,0)
1682 #define DEFAULT_cfS(M,I,A)
1683 #define LOGICAL_cfS(M,I,A)
1684 #define PLOGICAL_cfS(M,I,A)
1685 #define STRING_cfS(M,I,A) ,sizeof(A)
1686 #define STRINGV_cfS(M,I,A) ,( (unsigned)0xFFFF*firstindexlength(A) \
1687  +secondindexlength(A))
1688 #define PSTRING_cfS(M,I,A) ,sizeof(A)
1689 #define PSTRINGV_cfS(M,I,A) STRINGV_cfS(M,I,A)
1690 #define ZTRINGV_cfS(M,I,A)
1691 #define PZTRINGV_cfS(M,I,A)
1692 
1693 #define HCF(TN,I) _(TN,_cfSTR)(3,H,cfCOMMA, H,_(C,I),0,0)
1694 #define HHCF(TN,I) _(TN,_cfSTR)(3,H,cfCOMMA,HH,_(C,I),0,0)
1695 #define HHHCF(TN,I) _(TN,_cfSTR)(3,H,cfCOLON, H,_(C,I),0,0)
1696 #define H_CF_SPECIAL unsigned
1697 #define HH_CF_SPECIAL
1698 #define DEFAULT_cfH(M,I,A)
1699 #define LOGICAL_cfH(S,U,B)
1700 #define PLOGICAL_cfH(S,U,B)
1701 #define STRING_cfH(S,U,B) _(A,S) _(U,_CF_SPECIAL) B
1702 #define STRINGV_cfH(S,U,B) STRING_cfH(S,U,B)
1703 #define PSTRING_cfH(S,U,B) STRING_cfH(S,U,B)
1704 #define PSTRINGV_cfH(S,U,B) STRING_cfH(S,U,B)
1705 #define PNSTRING_cfH(S,U,B) STRING_cfH(S,U,B)
1706 #define PPSTRING_cfH(S,U,B) STRING_cfH(S,U,B)
1707 #define ZTRINGV_cfH(S,U,B)
1708 #define PZTRINGV_cfH(S,U,B)
1709 
1710 /* Need VOID_cfSTR because Absoft forced function types go through _cfSTR. */
1711 /* No spaces inside expansion. They screws up macro catenation kludge. */
1712 #define VOID_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1713 #define BYTE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1714 #define DOUBLE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1715 #define FLOAT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1716 #define INT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1717 #define LOGICAL_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,LOGICAL,A,B,C,D,E)
1718 #define LONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1719 #define LONGLONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1720 #define SHORT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1721 #define BYTEV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1722 #define BYTEVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1723 #define BYTEVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1724 #define BYTEVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1725 #define BYTEVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1726 #define BYTEVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1727 #define BYTEVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1728 #define DOUBLEV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1729 #define DOUBLEVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1730 #define DOUBLEVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1731 #define DOUBLEVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1732 #define DOUBLEVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1733 #define DOUBLEVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1734 #define DOUBLEVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1735 #define FLOATV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1736 #define FLOATVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1737 #define FLOATVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1738 #define FLOATVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1739 #define FLOATVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1740 #define FLOATVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1741 #define FLOATVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1742 #define INTV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1743 #define INTVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1744 #define INTVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1745 #define INTVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1746 #define INTVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1747 #define INTVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1748 #define INTVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1749 #define LOGICALV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1750 #define LOGICALVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1751 #define LOGICALVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1752 #define LOGICALVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1753 #define LOGICALVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1754 #define LOGICALVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1755 #define LOGICALVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1756 #define LONGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1757 #define LONGVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1758 #define LONGVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1759 #define LONGVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1760 #define LONGVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1761 #define LONGVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1762 #define LONGVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1763 #define LONGLONGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1764 #define LONGLONGVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1765 #define LONGLONGVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1766 #define LONGLONGVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1767 #define LONGLONGVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1768 #define LONGLONGVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1769 #define LONGLONGVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1770 #define SHORTV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1771 #define SHORTVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1772 #define SHORTVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1773 #define SHORTVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1774 #define SHORTVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1775 #define SHORTVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1776 #define SHORTVVVVVVV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1777 #define PBYTE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1778 #define PDOUBLE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1779 #define PFLOAT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1780 #define PINT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1781 #define PLOGICAL_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PLOGICAL,A,B,C,D,E)
1782 #define PLONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1783 #define PLONGLONG_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E) /* added by MR December 2005 */
1784 #define PSHORT_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1785 #define STRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,STRING,A,B,C,D,E)
1786 #define PSTRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PSTRING,A,B,C,D,E)
1787 #define STRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,STRINGV,A,B,C,D,E)
1788 #define PSTRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PSTRINGV,A,B,C,D,E)
1789 #define PNSTRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PNSTRING,A,B,C,D,E)
1790 #define PPSTRING_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PPSTRING,A,B,C,D,E)
1791 #define PVOID_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1792 #define ROUTINE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1793 #define SIMPLE_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,DEFAULT,A,B,C,D,E)
1794 #define ZTRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,ZTRINGV,A,B,C,D,E)
1795 #define PZTRINGV_cfSTR(N,T,A,B,C,D,E) _(CFARGS,N)(T,PZTRINGV,A,B,C,D,E)
1796 #define CF_0_cfSTR(N,T,A,B,C,D,E)
1797 
1798 /* See ACF table comments, which explain why CCF was split into two. */
1799 #define CCF(NAME,TN,I) _(TN,_cfSTR)(5,C,NAME,I,_(A,I),_(B,I),_(C,I))
1800 #define DEFAULT_cfC(M,I,A,B,C)
1801 #define LOGICAL_cfC(M,I,A,B,C) A=C2FLOGICAL( A);
1802 #define PLOGICAL_cfC(M,I,A,B,C) *A=C2FLOGICAL(*A);
1803 #ifdef vmsFortran
1804 #define STRING_cfC(M,I,A,B,C) (B.clen=strlen(A),B.f.dsc$a_pointer=A, \
1805  C==sizeof(char*)||C==(unsigned)(B.clen+1)?B.f.dsc$w_length=B.clen: \
1806  (memset((A)+B.clen,' ',C-B.clen-1),A[B.f.dsc$w_length=C-1]='\0'));
1807  /* PSTRING_cfC to beware of array A which does not contain any \0. */
1808 #define PSTRING_cfC(M,I,A,B,C) (B.dsc$a_pointer=A, C==sizeof(char*) ? \
1809  B.dsc$w_length=strlen(A): (A[C-1]='\0',B.dsc$w_length=strlen(A), \
1810  memset((A)+B.dsc$w_length,' ',C-B.dsc$w_length-1), B.dsc$w_length=C-1));
1811 #else
1812 #define STRING_cfC(M,I,A,B,C) (B.nombre=A,B.clen=strlen(A), \
1813  C==sizeof(char*)||C==(unsigned)(B.clen+1)?B.flen=B.clen: \
1814  (memset(B.nombre+B.clen,' ',C-B.clen-1),B.nombre[B.flen=C-1]='\0'));
1815 #define PSTRING_cfC(M,I,A,B,C) (C==sizeof(char*)? B=strlen(A): \
1816  (A[C-1]='\0',B=strlen(A),memset((A)+B,' ',C-B-1),B=C-1));
1817 #endif
1818  /* For CRAYFortran for (P)STRINGV_cfC, B.fs is set, but irrelevant. */
1819 #define STRINGV_cfC(M,I,A,B,C) \
1820  AATRINGV_cfA( A,B,(C/0xFFFF)*(C%0xFFFF),C/0xFFFF,C%0xFFFF)
1821 #define PSTRINGV_cfC(M,I,A,B,C) \
1822  APATRINGV_cfA( A,B,(C/0xFFFF)*(C%0xFFFF),C/0xFFFF,C%0xFFFF)
1823 #define ZTRINGV_cfC(M,I,A,B,C) \
1824  AATRINGV_cfA( A,B, (_3(M,_ELEMS_,I))*((_3(M,_ELEMLEN_,I))+1), \
1825  (_3(M,_ELEMS_,I)), (_3(M,_ELEMLEN_,I))+1 )
1826 #define PZTRINGV_cfC(M,I,A,B,C) \
1827  APATRINGV_cfA( A,B, (_3(M,_ELEMS_,I))*((_3(M,_ELEMLEN_,I))+1), \
1828  (_3(M,_ELEMS_,I)), (_3(M,_ELEMLEN_,I))+1 )
1829 
1830 #define BYTE_cfCCC(A,B) &A
1831 #define DOUBLE_cfCCC(A,B) &A
1832 #if !defined(__CF__KnR)
1833 #define FLOAT_cfCCC(A,B) &A
1834  /* Although the VAX doesn't, at least the */
1835 #else /* HP and K&R mips promote float arg.'s of */
1836 #define FLOAT_cfCCC(A,B) &B /* unprototyped functions to double. Cannot */
1837 #endif /* use A here to pass the argument to FORTRAN. */
1838 #define INT_cfCCC(A,B) &A
1839 #define LOGICAL_cfCCC(A,B) &A
1840 #define LONG_cfCCC(A,B) &A
1841 #define SHORT_cfCCC(A,B) &A
1842 #define PBYTE_cfCCC(A,B) A
1843 #define PDOUBLE_cfCCC(A,B) A
1844 #define PFLOAT_cfCCC(A,B) A
1845 #define PINT_cfCCC(A,B) A
1846 #define PLOGICAL_cfCCC(A,B) B=A /* B used to keep a common W table. */
1847 #define PLONG_cfCCC(A,B) A
1848 #define PSHORT_cfCCC(A,B) A
1849 
1850 #define CCCF(TN,I,M) _SEP_(TN,M,cfCOMMA) _Icf(3,CC,TN,_(A,I),_(B,I))
1851 #define INT_cfCC(T,A,B) _(T,_cfCCC)(A,B)
1852 #define INTV_cfCC(T,A,B) A
1853 #define INTVV_cfCC(T,A,B) A
1854 #define INTVVV_cfCC(T,A,B) A
1855 #define INTVVVV_cfCC(T,A,B) A
1856 #define INTVVVVV_cfCC(T,A,B) A
1857 #define INTVVVVVV_cfCC(T,A,B) A
1858 #define INTVVVVVVV_cfCC(T,A,B) A
1859 #define PINT_cfCC(T,A,B) _(T,_cfCCC)(A,B)
1860 #define PVOID_cfCC(T,A,B) A
1861 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
1862 #define ROUTINE_cfCC(T,A,B) &A
1863 #else
1864 #define ROUTINE_cfCC(T,A,B) A
1865 #endif
1866 #define SIMPLE_cfCC(T,A,B) A
1867 #ifdef vmsFortran
1868 #define STRING_cfCC(T,A,B) &B.f
1869 #define STRINGV_cfCC(T,A,B) &B
1870 #define PSTRING_cfCC(T,A,B) &B
1871 #define PSTRINGV_cfCC(T,A,B) &B
1872 #else
1873 #ifdef CRAYFortran
1874 #define STRING_cfCC(T,A,B) _cptofcd(A,B.flen)
1875 #define STRINGV_cfCC(T,A,B) _cptofcd(B.s,B.flen)
1876 #define PSTRING_cfCC(T,A,B) _cptofcd(A,B)
1877 #define PSTRINGV_cfCC(T,A,B) _cptofcd(A,B.flen)
1878 #else
1879 #define STRING_cfCC(T,A,B) A
1880 #define STRINGV_cfCC(T,A,B) B.fs
1881 #define PSTRING_cfCC(T,A,B) A
1882 #define PSTRINGV_cfCC(T,A,B) B.fs
1883 #endif
1884 #endif
1885 #define ZTRINGV_cfCC(T,A,B) STRINGV_cfCC(T,A,B)
1886 #define PZTRINGV_cfCC(T,A,B) PSTRINGV_cfCC(T,A,B)
1887 
1888 #define BYTE_cfX return A0;
1889 #define DOUBLE_cfX return A0;
1890 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
1891 #define FLOAT_cfX return A0;
1892 #else
1893 #define FLOAT_cfX ASSIGNFLOAT(AA0,A0); return AA0;
1894 #endif
1895 #define INT_cfX return A0;
1896 #define LOGICAL_cfX return F2CLOGICAL(A0);
1897 #define LONG_cfX return A0;
1898 #define SHORT_cfX return A0;
1899 #define VOID_cfX return ;
1900 #if defined(vmsFortran) || defined(CRAYFortran)
1901 #define STRING_cfX return kill_trailing( \
1902  kill_trailing(AA0,CFORTRAN_NON_CHAR),' ');
1903 #else
1904 #define STRING_cfX return kill_trailing( \
1905  kill_trailing( A0,CFORTRAN_NON_CHAR),' ');
1906 #endif
1907 
1908 #define CFFUN(NAME) _(__cf__,NAME)
1909 
1910 /* Note that we don't use LN here, but we keep it for consistency. */
1911 #define CCALLSFFUN0(UN,LN) CFFUN(UN)()
1912 
1913 #ifdef OLD_VAXC /* Allow %CC-I-PARAMNOTUSED. */
1914 #pragma standard
1915 #endif
1916 
1917 #define CCALLSFFUN1( UN,LN,T1, A1) \
1918  CCALLSFFUN5 (UN,LN,T1,CF_0,CF_0,CF_0,CF_0,A1,0,0,0,0)
1919 #define CCALLSFFUN2( UN,LN,T1,T2, A1,A2) \
1920  CCALLSFFUN5 (UN,LN,T1,T2,CF_0,CF_0,CF_0,A1,A2,0,0,0)
1921 #define CCALLSFFUN3( UN,LN,T1,T2,T3, A1,A2,A3) \
1922  CCALLSFFUN5 (UN,LN,T1,T2,T3,CF_0,CF_0,A1,A2,A3,0,0)
1923 #define CCALLSFFUN4( UN,LN,T1,T2,T3,T4, A1,A2,A3,A4)\
1924  CCALLSFFUN5 (UN,LN,T1,T2,T3,T4,CF_0,A1,A2,A3,A4,0)
1925 #define CCALLSFFUN5( UN,LN,T1,T2,T3,T4,T5, A1,A2,A3,A4,A5) \
1926  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)
1927 #define CCALLSFFUN6( UN,LN,T1,T2,T3,T4,T5,T6, A1,A2,A3,A4,A5,A6) \
1928  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)
1929 #define CCALLSFFUN7( UN,LN,T1,T2,T3,T4,T5,T6,T7, A1,A2,A3,A4,A5,A6,A7) \
1930  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)
1931 #define CCALLSFFUN8( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8, A1,A2,A3,A4,A5,A6,A7,A8) \
1932  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)
1933 #define CCALLSFFUN9( UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,A1,A2,A3,A4,A5,A6,A7,A8,A9)\
1934  CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0,A1,A2,A3,A4,A5,A6,A7,A8,A9,0)
1935 #define CCALLSFFUN10(UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,A1,A2,A3,A4,A5,A6,A7,A8,A9,AA)\
1936  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)
1937 #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)\
1938  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)
1939 #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)\
1940  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)
1941 #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)\
1942  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)
1943 
1944 #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)\
1945 ((CFFUN(UN)( BCF(T1,A1,0) BCF(T2,A2,1) BCF(T3,A3,1) BCF(T4,A4,1) BCF(T5,A5,1) \
1946  BCF(T6,A6,1) BCF(T7,A7,1) BCF(T8,A8,1) BCF(T9,A9,1) BCF(TA,AA,1) \
1947  BCF(TB,AB,1) BCF(TC,AC,1) BCF(TD,AD,1) BCF(TE,AE,1) \
1948  SCF(T1,LN,1,A1) SCF(T2,LN,2,A2) SCF(T3,LN,3,A3) SCF(T4,LN,4,A4) \
1949  SCF(T5,LN,5,A5) SCF(T6,LN,6,A6) SCF(T7,LN,7,A7) SCF(T8,LN,8,A8) \
1950  SCF(T9,LN,9,A9) SCF(TA,LN,10,AA) SCF(TB,LN,11,AB) SCF(TC,LN,12,AC) \
1951  SCF(TD,LN,13,AD) SCF(TE,LN,14,AE))))
1952 
1953 /* N.B. Create a separate function instead of using (call function, function
1954 value here) because in order to create the variables needed for the input
1955 arg.'s which may be const.'s one has to do the creation within {}, but these
1956 can never be placed within ()'s. Therefore one must create wrapper functions.
1957 gcc, on the other hand may be able to avoid the wrapper functions. */
1958 
1959 /* Prototypes are needed to correctly handle the value returned correctly. N.B.
1960 Can only have prototype arg.'s with difficulty, a la G... table since FORTRAN
1961 functions returning strings have extra arg.'s. Don't bother, since this only
1962 causes a compiler warning to come up when one uses FCALLSCFUNn and CCALLSFFUNn
1963 for the same function in the same source code. Something done by the experts in
1964 debugging only.*/
1965 
1966 #define PROTOCCALLSFFUN0(F,UN,LN) \
1967 _(F,_cfPU)( CFC_(UN,LN))(CF_NULL_PROTO); \
1968 static _Icf(2,U,F,CFFUN(UN),0)() {_(F,_cfE) _Icf(3,GZ,F,UN,LN) ABSOFT_cf1(F));_(F,_cfX)}
1969 
1970 #define PROTOCCALLSFFUN1( T0,UN,LN,T1) \
1971  PROTOCCALLSFFUN5 (T0,UN,LN,T1,CF_0,CF_0,CF_0,CF_0)
1972 #define PROTOCCALLSFFUN2( T0,UN,LN,T1,T2) \
1973  PROTOCCALLSFFUN5 (T0,UN,LN,T1,T2,CF_0,CF_0,CF_0)
1974 #define PROTOCCALLSFFUN3( T0,UN,LN,T1,T2,T3) \
1975  PROTOCCALLSFFUN5 (T0,UN,LN,T1,T2,T3,CF_0,CF_0)
1976 #define PROTOCCALLSFFUN4( T0,UN,LN,T1,T2,T3,T4) \
1977  PROTOCCALLSFFUN5 (T0,UN,LN,T1,T2,T3,T4,CF_0)
1978 #define PROTOCCALLSFFUN5( T0,UN,LN,T1,T2,T3,T4,T5) \
1979  PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0)
1980 #define PROTOCCALLSFFUN6( T0,UN,LN,T1,T2,T3,T4,T5,T6) \
1981  PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0)
1982 #define PROTOCCALLSFFUN7( T0,UN,LN,T1,T2,T3,T4,T5,T6,T7) \
1983  PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0)
1984 #define PROTOCCALLSFFUN8( T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8) \
1985  PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0)
1986 #define PROTOCCALLSFFUN9( T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9) \
1987  PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0)
1988 #define PROTOCCALLSFFUN10(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA) \
1989  PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0)
1990 #define PROTOCCALLSFFUN11(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB) \
1991  PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0)
1992 #define PROTOCCALLSFFUN12(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC) \
1993  PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0)
1994 #define PROTOCCALLSFFUN13(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD) \
1995  PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0)
1996 
1997 /* HP/UX 9.01 cc requires the blank between '_Icf(3,G,T0,UN,LN) CCCF(T1,1,0)' */
1998 
1999 #ifndef __CF__KnR
2000 #define PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
2001  _(T0,_cfPU)(CFC_(UN,LN))(CF_NULL_PROTO); static _Icf(2,U,T0,CFFUN(UN),0)( \
2002  CFARGT14FS(UCF,HCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) ) \
2003 { CFARGT14S(VCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) _(T0,_cfE) \
2004  CCF(LN,T1,1) CCF(LN,T2,2) CCF(LN,T3,3) CCF(LN,T4,4) CCF(LN,T5,5) \
2005  CCF(LN,T6,6) CCF(LN,T7,7) CCF(LN,T8,8) CCF(LN,T9,9) CCF(LN,TA,10) \
2006  CCF(LN,TB,11) CCF(LN,TC,12) CCF(LN,TD,13) CCF(LN,TE,14) _Icf(3,G,T0,UN,LN) \
2007  CFARGT14(CCCF,JCF,ABSOFT_cf1(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)); \
2008  WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) \
2009  WCF(T6,A6,6) WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,A10,10) \
2010  WCF(TB,A11,11) WCF(TC,A12,12) WCF(TD,A13,13) WCF(TE,A14,14) _(T0,_cfX)}
2011 #else
2012 #define PROTOCCALLSFFUN14(T0,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
2013  _(T0,_cfPU)(CFC_(UN,LN))(CF_NULL_PROTO); static _Icf(2,U,T0,CFFUN(UN),0)( \
2014  CFARGT14FS(UUCF,HHCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) ) \
2015  CFARGT14FS(UUUCF,HHHCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) ; \
2016 { CFARGT14S(VCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) _(T0,_cfE) \
2017  CCF(LN,T1,1) CCF(LN,T2,2) CCF(LN,T3,3) CCF(LN,T4,4) CCF(LN,T5,5) \
2018  CCF(LN,T6,6) CCF(LN,T7,7) CCF(LN,T8,8) CCF(LN,T9,9) CCF(LN,TA,10) \
2019  CCF(LN,TB,11) CCF(LN,TC,12) CCF(LN,TD,13) CCF(LN,TE,14) _Icf(3,G,T0,UN,LN) \
2020  CFARGT14(CCCF,JCF,ABSOFT_cf1(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)); \
2021  WCF(T1,A1,1) WCF(T2,A2,2) WCF(T3,A3,3) WCF(T4,A4,4) WCF(T5,A5,5) \
2022  WCF(T6,A6,6) WCF(T7,A7,7) WCF(T8,A8,8) WCF(T9,A9,9) WCF(TA,A10,10) \
2023  WCF(TB,A11,11) WCF(TC,A12,12) WCF(TD,A13,13) WCF(TE,A14,14) _(T0,_cfX)}
2024 #endif
2025 
2026 /*-------------------------------------------------------------------------*/
2027 
2028 /* UTILITIES FOR FORTRAN TO CALL C ROUTINES */
2029 
2030 #ifdef OLD_VAXC /* Prevent %CC-I-PARAMNOTUSED. */
2031 #pragma nostandard
2032 #endif
2033 
2034 #if defined(vmsFortran) || defined(CRAYFortran)
2035 #define DCF(TN,I)
2036 #define DDCF(TN,I)
2037 #define DDDCF(TN,I)
2038 #else
2039 #define DCF(TN,I) HCF(TN,I)
2040 #define DDCF(TN,I) HHCF(TN,I)
2041 #define DDDCF(TN,I) HHHCF(TN,I)
2042 #endif
2043 
2044 #define QCF(TN,I) _(TN,_cfSTR)(1,Q,_(B,I), 0,0,0,0)
2045 #define DEFAULT_cfQ(B)
2046 #define LOGICAL_cfQ(B)
2047 #define PLOGICAL_cfQ(B)
2048 #define STRINGV_cfQ(B) char *B; unsigned int _(B,N);
2049 #define STRING_cfQ(B) char *B=NULL;
2050 #define PSTRING_cfQ(B) char *B=NULL;
2051 #define PSTRINGV_cfQ(B) STRINGV_cfQ(B)
2052 #define PNSTRING_cfQ(B) char *B=NULL;
2053 #define PPSTRING_cfQ(B)
2054 
2055 #ifdef __sgi /* Else SGI gives warning 182 contrary to its C LRM A.17.7 */
2056 #define ROUTINE_orig *(void**)&
2057 #else
2058 #define ROUTINE_orig (void *)
2059 #endif
2060 
2061 #define ROUTINE_1 ROUTINE_orig
2062 #define ROUTINE_2 ROUTINE_orig
2063 #define ROUTINE_3 ROUTINE_orig
2064 #define ROUTINE_4 ROUTINE_orig
2065 #define ROUTINE_5 ROUTINE_orig
2066 #define ROUTINE_6 ROUTINE_orig
2067 #define ROUTINE_7 ROUTINE_orig
2068 #define ROUTINE_8 ROUTINE_orig
2069 #define ROUTINE_9 ROUTINE_orig
2070 #define ROUTINE_10 ROUTINE_orig
2071 #define ROUTINE_11 ROUTINE_orig
2072 #define ROUTINE_12 ROUTINE_orig
2073 #define ROUTINE_13 ROUTINE_orig
2074 #define ROUTINE_14 ROUTINE_orig
2075 #define ROUTINE_15 ROUTINE_orig
2076 #define ROUTINE_16 ROUTINE_orig
2077 #define ROUTINE_17 ROUTINE_orig
2078 #define ROUTINE_18 ROUTINE_orig
2079 #define ROUTINE_19 ROUTINE_orig
2080 #define ROUTINE_20 ROUTINE_orig
2081 #define ROUTINE_21 ROUTINE_orig
2082 #define ROUTINE_22 ROUTINE_orig
2083 #define ROUTINE_23 ROUTINE_orig
2084 #define ROUTINE_24 ROUTINE_orig
2085 #define ROUTINE_25 ROUTINE_orig
2086 #define ROUTINE_26 ROUTINE_orig
2087 #define ROUTINE_27 ROUTINE_orig
2088 
2089 #define TCF(NAME,TN,I,M) _SEP_(TN,M,cfCOMMA) _(TN,_cfT)(NAME,I,_(A,I),_(B,I),_(C,I))
2090 #define BYTE_cfT(M,I,A,B,D) *A
2091 #define DOUBLE_cfT(M,I,A,B,D) *A
2092 #define FLOAT_cfT(M,I,A,B,D) *A
2093 #define INT_cfT(M,I,A,B,D) *A
2094 #define LOGICAL_cfT(M,I,A,B,D) F2CLOGICAL(*A)
2095 #define LONG_cfT(M,I,A,B,D) *A
2096 #define LONGLONG_cfT(M,I,A,B,D) *A /* added by MR December 2005 */
2097 #define SHORT_cfT(M,I,A,B,D) *A
2098 #define BYTEV_cfT(M,I,A,B,D) A
2099 #define DOUBLEV_cfT(M,I,A,B,D) A
2100 #define FLOATV_cfT(M,I,A,B,D) VOIDP A
2101 #define INTV_cfT(M,I,A,B,D) A
2102 #define LOGICALV_cfT(M,I,A,B,D) A
2103 #define LONGV_cfT(M,I,A,B,D) A
2104 #define LONGLONGV_cfT(M,I,A,B,D) A /* added by MR December 2005 */
2105 #define SHORTV_cfT(M,I,A,B,D) A
2106 #define BYTEVV_cfT(M,I,A,B,D) (void *)A /* We have to cast to void *,*/
2107 #define BYTEVVV_cfT(M,I,A,B,D) (void *)A /* since we don't know the */
2108 #define BYTEVVVV_cfT(M,I,A,B,D) (void *)A /* dimensions of the array. */
2109 #define BYTEVVVVV_cfT(M,I,A,B,D) (void *)A /* i.e. Unfortunately, can't */
2110 #define BYTEVVVVVV_cfT(M,I,A,B,D) (void *)A /* check that the type */
2111 #define BYTEVVVVVVV_cfT(M,I,A,B,D) (void *)A /* matches the prototype. */
2112 #define DOUBLEVV_cfT(M,I,A,B,D) (void *)A
2113 #define DOUBLEVVV_cfT(M,I,A,B,D) (void *)A
2114 #define DOUBLEVVVV_cfT(M,I,A,B,D) (void *)A
2115 #define DOUBLEVVVVV_cfT(M,I,A,B,D) (void *)A
2116 #define DOUBLEVVVVVV_cfT(M,I,A,B,D) (void *)A
2117 #define DOUBLEVVVVVVV_cfT(M,I,A,B,D) (void *)A
2118 #define FLOATVV_cfT(M,I,A,B,D) (void *)A
2119 #define FLOATVVV_cfT(M,I,A,B,D) (void *)A
2120 #define FLOATVVVV_cfT(M,I,A,B,D) (void *)A
2121 #define FLOATVVVVV_cfT(M,I,A,B,D) (void *)A
2122 #define FLOATVVVVVV_cfT(M,I,A,B,D) (void *)A
2123 #define FLOATVVVVVVV_cfT(M,I,A,B,D) (void *)A
2124 #define INTVV_cfT(M,I,A,B,D) (void *)A
2125 #define INTVVV_cfT(M,I,A,B,D) (void *)A
2126 #define INTVVVV_cfT(M,I,A,B,D) (void *)A
2127 #define INTVVVVV_cfT(M,I,A,B,D) (void *)A
2128 #define INTVVVVVV_cfT(M,I,A,B,D) (void *)A
2129 #define INTVVVVVVV_cfT(M,I,A,B,D) (void *)A
2130 #define LOGICALVV_cfT(M,I,A,B,D) (void *)A
2131 #define LOGICALVVV_cfT(M,I,A,B,D) (void *)A
2132 #define LOGICALVVVV_cfT(M,I,A,B,D) (void *)A
2133 #define LOGICALVVVVV_cfT(M,I,A,B,D) (void *)A
2134 #define LOGICALVVVVVV_cfT(M,I,A,B,D) (void *)A
2135 #define LOGICALVVVVVVV_cfT(M,I,A,B,D) (void *)A
2136 #define LONGVV_cfT(M,I,A,B,D) (void *)A
2137 #define LONGVVV_cfT(M,I,A,B,D) (void *)A
2138 #define LONGVVVV_cfT(M,I,A,B,D) (void *)A
2139 #define LONGVVVVV_cfT(M,I,A,B,D) (void *)A
2140 #define LONGVVVVVV_cfT(M,I,A,B,D) (void *)A
2141 #define LONGVVVVVVV_cfT(M,I,A,B,D) (void *)A
2142 #define LONGLONGVV_cfT(M,I,A,B,D) (void *)A /* added by MR December 2005 */
2143 #define LONGLONGVVV_cfT(M,I,A,B,D) (void *)A /* added by MR December 2005 */
2144 #define LONGLONGVVVV_cfT(M,I,A,B,D) (void *)A /* added by MR December 2005 */
2145 #define LONGLONGVVVVV_cfT(M,I,A,B,D) (void *)A /* added by MR December 2005 */
2146 #define LONGLONGVVVVVV_cfT(M,I,A,B,D) (void *)A /* added by MR December 2005 */
2147 #define LONGLONGVVVVVVV_cfT(M,I,A,B,D) (void *)A /* added by MR December 2005 */
2148 #define SHORTVV_cfT(M,I,A,B,D) (void *)A
2149 #define SHORTVVV_cfT(M,I,A,B,D) (void *)A
2150 #define SHORTVVVV_cfT(M,I,A,B,D) (void *)A
2151 #define SHORTVVVVV_cfT(M,I,A,B,D) (void *)A
2152 #define SHORTVVVVVV_cfT(M,I,A,B,D) (void *)A
2153 #define SHORTVVVVVVV_cfT(M,I,A,B,D) (void *)A
2154 #define PBYTE_cfT(M,I,A,B,D) A
2155 #define PDOUBLE_cfT(M,I,A,B,D) A
2156 #define PFLOAT_cfT(M,I,A,B,D) VOIDP A
2157 #define PINT_cfT(M,I,A,B,D) A
2158 #define PLOGICAL_cfT(M,I,A,B,D) ((*A=F2CLOGICAL(*A)),A)
2159 #define PLONG_cfT(M,I,A,B,D) A
2160 #define PLONGLONG_cfT(M,I,A,B,D) A /* added by MR December 2005 */
2161 #define PSHORT_cfT(M,I,A,B,D) A
2162 #define PVOID_cfT(M,I,A,B,D) A
2163 #if defined(apolloFortran) || defined(hpuxFortran800) || defined(AbsoftUNIXFortran)
2164 #define ROUTINE_cfT(M,I,A,B,D) _(ROUTINE_,I) (*A)
2165 #else
2166 #define ROUTINE_cfT(M,I,A,B,D) _(ROUTINE_,I) A
2167 #endif
2168 /* A == pointer to the characters
2169  D == length of the string, or of an element in an array of strings
2170  E == number of elements in an array of strings */
2171 #define TTSTR( A,B,D) \
2172  ((B=_cf_malloc(D+1))[D]='\0', memcpy(B,A,D), kill_trailing(B,' '))
2173 #define TTTTSTR( A,B,D) (!(D<4||A[0]||A[1]||A[2]||A[3]))?NULL: \
2174  memchr(A,'\0',D) ?A : TTSTR(A,B,D)
2175 #define TTTTSTRV( A,B,D,E) (_(B,N)=E,B=_cf_malloc(_(B,N)*(D+1)), (void *) \
2176  vkill_trailing(f2cstrv(A,B,D+1, _(B,N)*(D+1)), D+1,_(B,N)*(D+1),' '))
2177 #ifdef vmsFortran
2178 #define STRING_cfT(M,I,A,B,D) TTTTSTR( A->dsc$a_pointer,B,A->dsc$w_length)
2179 #define STRINGV_cfT(M,I,A,B,D) TTTTSTRV(A->dsc$a_pointer, B, \
2180  A->dsc$w_length , A->dsc$l_m[0])
2181 #define PSTRING_cfT(M,I,A,B,D) TTSTR( A->dsc$a_pointer,B,A->dsc$w_length)
2182 #define PPSTRING_cfT(M,I,A,B,D) A->dsc$a_pointer
2183 #else
2184 #ifdef CRAYFortran
2185 #define STRING_cfT(M,I,A,B,D) TTTTSTR( _fcdtocp(A),B,_fcdlen(A))
2186 #define STRINGV_cfT(M,I,A,B,D) TTTTSTRV(_fcdtocp(A),B,_fcdlen(A), \
2187  num_elem(_fcdtocp(A),_fcdlen(A),_3(M,_STRV_A,I)))
2188 #define PSTRING_cfT(M,I,A,B,D) TTSTR( _fcdtocp(A),B,_fcdlen(A))
2189 #define PPSTRING_cfT(M,I,A,B,D) _fcdtocp(A)
2190 #else
2191 #define STRING_cfT(M,I,A,B,D) TTTTSTR( A,B,D)
2192 #define STRINGV_cfT(M,I,A,B,D) TTTTSTRV(A,B,D, num_elem(A,D,_3(M,_STRV_A,I)))
2193 #define PSTRING_cfT(M,I,A,B,D) TTSTR( A,B,D)
2194 #define PPSTRING_cfT(M,I,A,B,D) A
2195 #endif
2196 #endif
2197 #define PNSTRING_cfT(M,I,A,B,D) STRING_cfT(M,I,A,B,D)
2198 #define PSTRINGV_cfT(M,I,A,B,D) STRINGV_cfT(M,I,A,B,D)
2199 #define CF_0_cfT(M,I,A,B,D)
2200 
2201 #define RCF(TN,I) _(TN,_cfSTR)(3,R,_(A,I),_(B,I),_(C,I),0,0)
2202 #define DEFAULT_cfR(A,B,D)
2203 #define LOGICAL_cfR(A,B,D)
2204 #define PLOGICAL_cfR(A,B,D) *A=C2FLOGICAL(*A);
2205 #define STRING_cfR(A,B,D) if (B) _cf_free(B);
2206 #define STRINGV_cfR(A,B,D) _cf_free(B);
2207 /* A and D as defined above for TSTRING(V) */
2208 #define RRRRPSTR( A,B,D) if (B) memcpy(A,B, _cfMIN(strlen(B),D)), \
2209  (D>strlen(B)?memset(A+strlen(B),' ', D-strlen(B)):0), _cf_free(B);
2210 #define RRRRPSTRV(A,B,D) c2fstrv(B,A,D+1,(D+1)*_(B,N)), _cf_free(B);
2211 #ifdef vmsFortran
2212 #define PSTRING_cfR(A,B,D) RRRRPSTR( A->dsc$a_pointer,B,A->dsc$w_length)
2213 #define PSTRINGV_cfR(A,B,D) RRRRPSTRV(A->dsc$a_pointer,B,A->dsc$w_length)
2214 #else
2215 #ifdef CRAYFortran
2216 #define PSTRING_cfR(A,B,D) RRRRPSTR( _fcdtocp(A),B,_fcdlen(A))
2217 #define PSTRINGV_cfR(A,B,D) RRRRPSTRV(_fcdtocp(A),B,_fcdlen(A))
2218 #else
2219 #define PSTRING_cfR(A,B,D) RRRRPSTR( A,B,D)
2220 #define PSTRINGV_cfR(A,B,D) RRRRPSTRV(A,B,D)
2221 #endif
2222 #endif
2223 #define PNSTRING_cfR(A,B,D) PSTRING_cfR(A,B,D)
2224 #define PPSTRING_cfR(A,B,D)
2225 
2226 #define BYTE_cfFZ(UN,LN) INTEGER_BYTE FCALLSC_QUALIFIER fcallsc(UN,LN)(
2227 #define DOUBLE_cfFZ(UN,LN) DOUBLE_PRECISION FCALLSC_QUALIFIER fcallsc(UN,LN)(
2228 #define INT_cfFZ(UN,LN) int FCALLSC_QUALIFIER fcallsc(UN,LN)(
2229 #define LOGICAL_cfFZ(UN,LN) int FCALLSC_QUALIFIER fcallsc(UN,LN)(
2230 #define LONG_cfFZ(UN,LN) long FCALLSC_QUALIFIER fcallsc(UN,LN)(
2231 #define LONGLONG_cfFZ(UN,LN) LONGLONG FCALLSC_QUALIFIER fcallsc(UN,LN)( /* added by MR December 2005 */
2232 #define SHORT_cfFZ(UN,LN) short FCALLSC_QUALIFIER fcallsc(UN,LN)(
2233 #define VOID_cfFZ(UN,LN) void FCALLSC_QUALIFIER fcallsc(UN,LN)(
2234 #ifndef __CF__KnR
2235 /* The void is req'd by the Apollo, to make this an ANSI function declaration.
2236  The Apollo promotes K&R float functions to double. */
2237 #if defined (f2cFortran) && ! defined (gFortran)
2238 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
2239 #define FLOAT_cfFZ(UN,LN) DOUBLE_PRECISION FCALLSC_QUALIFIER fcallsc(UN,LN)(void
2240 #else
2241 #define FLOAT_cfFZ(UN,LN) FORTRAN_REAL FCALLSC_QUALIFIER fcallsc(UN,LN)(void
2242 #endif
2243 #ifdef vmsFortran
2244 #define STRING_cfFZ(UN,LN) void FCALLSC_QUALIFIER fcallsc(UN,LN)(fstring *AS
2245 #else
2246 #ifdef CRAYFortran
2247 #define STRING_cfFZ(UN,LN) void FCALLSC_QUALIFIER fcallsc(UN,LN)(_fcd AS
2248 #else
2249 #if defined(AbsoftUNIXFortran) || defined(AbsoftProFortran)
2250 #define STRING_cfFZ(UN,LN) void FCALLSC_QUALIFIER fcallsc(UN,LN)(char *AS
2251 #else
2252 #define STRING_cfFZ(UN,LN) void FCALLSC_QUALIFIER fcallsc(UN,LN)(char *AS, unsigned D0
2253 #endif
2254 #endif
2255 #endif
2256 #else
2257 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
2258 #if defined (f2cFortran) && ! defined (gFortran)
2259 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
2260 #define FLOAT_cfFZ(UN,LN) DOUBLE_PRECISION FCALLSC_QUALIFIER fcallsc(UN,LN)(
2261 #else
2262 #define FLOAT_cfFZ(UN,LN) FORTRAN_REAL FCALLSC_QUALIFIER fcallsc(UN,LN)(
2263 #endif
2264 #else
2265 #define FLOAT_cfFZ(UN,LN) FLOATFUNCTIONTYPE FCALLSC_QUALIFIER fcallsc(UN,LN)(
2266 #endif
2267 #if defined(vmsFortran) || defined(CRAYFortran) || defined(AbsoftUNIXFortran)
2268 #define STRING_cfFZ(UN,LN) void FCALLSC_QUALIFIER fcallsc(UN,LN)(AS
2269 #else
2270 #define STRING_cfFZ(UN,LN) void FCALLSC_QUALIFIER fcallsc(UN,LN)(AS, D0
2271 #endif
2272 #endif
2273 
2274 #define BYTE_cfF(UN,LN) BYTE_cfFZ(UN,LN)
2275 #define DOUBLE_cfF(UN,LN) DOUBLE_cfFZ(UN,LN)
2276 #ifndef __CF_KnR
2277 #if defined (f2cFortran) && ! defined (gFortran)
2278 /* f2c/g77 return double from FORTRAN REAL functions. (KMCCARTY, 2005/12/09) */
2279 #define FLOAT_cfF(UN,LN) DOUBLE_PRECISION FCALLSC_QUALIFIER fcallsc(UN,LN)(
2280 #else
2281 #define FLOAT_cfF(UN,LN) FORTRAN_REAL FCALLSC_QUALIFIER fcallsc(UN,LN)(
2282 #endif
2283 #else
2284 #define FLOAT_cfF(UN,LN) FLOAT_cfFZ(UN,LN)
2285 #endif
2286 #define INT_cfF(UN,LN) INT_cfFZ(UN,LN)
2287 #define LOGICAL_cfF(UN,LN) LOGICAL_cfFZ(UN,LN)
2288 #define LONG_cfF(UN,LN) LONG_cfFZ(UN,LN)
2289 #define LONGLONG_cfF(UN,LN) LONGLONG_cfFZ(UN,LN) /* added by MR December 2005 */
2290 #define SHORT_cfF(UN,LN) SHORT_cfFZ(UN,LN)
2291 #define VOID_cfF(UN,LN) VOID_cfFZ(UN,LN)
2292 #define STRING_cfF(UN,LN) STRING_cfFZ(UN,LN),
2293 
2294 #define INT_cfFF
2295 #define VOID_cfFF
2296 #ifdef vmsFortran
2297 #define STRING_cfFF fstring *AS;
2298 #else
2299 #ifdef CRAYFortran
2300 #define STRING_cfFF _fcd AS;
2301 #else
2302 #define STRING_cfFF char *AS; unsigned D0;
2303 #endif
2304 #endif
2305 
2306 #define INT_cfL A0=
2307 #define STRING_cfL A0=
2308 #define VOID_cfL
2309 
2310 #define INT_cfK
2311 #define VOID_cfK
2312 /* KSTRING copies the string into the position provided by the caller. */
2313 #ifdef vmsFortran
2314 #define STRING_cfK \
2315  memcpy(AS->dsc$a_pointer,A0,_cfMIN(AS->dsc$w_length,(A0==NULL?0:strlen(A0))));\
2316  AS->dsc$w_length>(A0==NULL?0:strlen(A0))? \
2317  memset(AS->dsc$a_pointer+(A0==NULL?0:strlen(A0)),' ', \
2318  AS->dsc$w_length-(A0==NULL?0:strlen(A0))):0;
2319 #else
2320 #ifdef CRAYFortran
2321 #define STRING_cfK \
2322  memcpy(_fcdtocp(AS),A0, _cfMIN(_fcdlen(AS),(A0==NULL?0:strlen(A0))) ); \
2323  _fcdlen(AS)>(A0==NULL?0:strlen(A0))? \
2324  memset(_fcdtocp(AS)+(A0==NULL?0:strlen(A0)),' ', \
2325  _fcdlen(AS)-(A0==NULL?0:strlen(A0))):0;
2326 #else
2327 #define STRING_cfK memcpy(AS,A0, _cfMIN(D0,(A0==NULL?0:strlen(A0))) ); \
2328  D0>(A0==NULL?0:strlen(A0))?memset(AS+(A0==NULL?0:strlen(A0)), \
2329  ' ', D0-(A0==NULL?0:strlen(A0))):0;
2330 #endif
2331 #endif
2332 
2333 /* Note that K.. and I.. can't be combined since K.. has to access data before
2334 R.., in order for functions returning strings which are also passed in as
2335 arguments to work correctly. Note that R.. frees and hence may corrupt the
2336 string. */
2337 #define BYTE_cfI return A0;
2338 #define DOUBLE_cfI return A0;
2339 #if ! (defined(FLOATFUNCTIONTYPE)&&defined(ASSIGNFLOAT)&&defined(RETURNFLOAT))
2340 #define FLOAT_cfI return A0;
2341 #else
2342 #define FLOAT_cfI RETURNFLOAT(A0);
2343 #endif
2344 #define INT_cfI return A0;
2345 #ifdef hpuxFortran800
2346 /* Incredibly, functions must return true as 1, elsewhere .true.==0x01000000. */
2347 #define LOGICAL_cfI return ((A0)?1:0);
2348 #else
2349 #define LOGICAL_cfI return C2FLOGICAL(A0);
2350 #endif
2351 #define LONG_cfI return A0;
2352 #define LONGLONG_cfI return A0; /* added by MR December 2005 */
2353 #define SHORT_cfI return A0;
2354 #define STRING_cfI return ;
2355 #define VOID_cfI return ;
2356 
2357 #ifdef OLD_VAXC /* Allow %CC-I-PARAMNOTUSED. */
2358 #pragma standard
2359 #endif
2360 
2361 #define FCALLSCSUB0( CN,UN,LN) FCALLSCFUN0(VOID,CN,UN,LN)
2362 #define FCALLSCSUB1( CN,UN,LN,T1) FCALLSCFUN1(VOID,CN,UN,LN,T1)
2363 #define FCALLSCSUB2( CN,UN,LN,T1,T2) FCALLSCFUN2(VOID,CN,UN,LN,T1,T2)
2364 #define FCALLSCSUB3( CN,UN,LN,T1,T2,T3) FCALLSCFUN3(VOID,CN,UN,LN,T1,T2,T3)
2365 #define FCALLSCSUB4( CN,UN,LN,T1,T2,T3,T4) \
2366  FCALLSCFUN4(VOID,CN,UN,LN,T1,T2,T3,T4)
2367 #define FCALLSCSUB5( CN,UN,LN,T1,T2,T3,T4,T5) \
2368  FCALLSCFUN5(VOID,CN,UN,LN,T1,T2,T3,T4,T5)
2369 #define FCALLSCSUB6( CN,UN,LN,T1,T2,T3,T4,T5,T6) \
2370  FCALLSCFUN6(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6)
2371 #define FCALLSCSUB7( CN,UN,LN,T1,T2,T3,T4,T5,T6,T7) \
2372  FCALLSCFUN7(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7)
2373 #define FCALLSCSUB8( CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8) \
2374  FCALLSCFUN8(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8)
2375 #define FCALLSCSUB9( CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9) \
2376  FCALLSCFUN9(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9)
2377 #define FCALLSCSUB10(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA) \
2378  FCALLSCFUN10(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA)
2379 #define FCALLSCSUB11(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB) \
2380  FCALLSCFUN11(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB)
2381 #define FCALLSCSUB12(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC) \
2382  FCALLSCFUN12(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC)
2383 #define FCALLSCSUB13(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD) \
2384  FCALLSCFUN13(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD)
2385 #define FCALLSCSUB14(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
2386  FCALLSCFUN14(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE)
2387 #define FCALLSCSUB15(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF) \
2388  FCALLSCFUN15(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF)
2389 #define FCALLSCSUB16(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG) \
2390  FCALLSCFUN16(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG)
2391 #define FCALLSCSUB17(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH) \
2392  FCALLSCFUN17(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH)
2393 #define FCALLSCSUB18(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI) \
2394  FCALLSCFUN18(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI)
2395 #define FCALLSCSUB19(CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ) \
2396  FCALLSCFUN19(VOID,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI,TJ)
2397 #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) \
2398  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)
2399 #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) \
2400  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)
2401 #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) \
2402  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)
2403 #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) \
2404  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)
2405 #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) \
2406  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)
2407 #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) \
2408  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)
2409 #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) \
2410  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)
2411 #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) \
2412  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)
2413 
2414 
2415 #define FCALLSCFUN1( T0,CN,UN,LN,T1) \
2416  FCALLSCFUN5 (T0,CN,UN,LN,T1,CF_0,CF_0,CF_0,CF_0)
2417 #define FCALLSCFUN2( T0,CN,UN,LN,T1,T2) \
2418  FCALLSCFUN5 (T0,CN,UN,LN,T1,T2,CF_0,CF_0,CF_0)
2419 #define FCALLSCFUN3( T0,CN,UN,LN,T1,T2,T3) \
2420  FCALLSCFUN5 (T0,CN,UN,LN,T1,T2,T3,CF_0,CF_0)
2421 #define FCALLSCFUN4( T0,CN,UN,LN,T1,T2,T3,T4) \
2422  FCALLSCFUN5 (T0,CN,UN,LN,T1,T2,T3,T4,CF_0)
2423 #define FCALLSCFUN5( T0,CN,UN,LN,T1,T2,T3,T4,T5) \
2424  FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,CF_0,CF_0,CF_0,CF_0,CF_0)
2425 #define FCALLSCFUN6( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6) \
2426  FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,CF_0,CF_0,CF_0,CF_0)
2427 #define FCALLSCFUN7( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7) \
2428  FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,CF_0,CF_0,CF_0)
2429 #define FCALLSCFUN8( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8) \
2430  FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,CF_0,CF_0)
2431 #define FCALLSCFUN9( T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9) \
2432  FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,CF_0)
2433 #define FCALLSCFUN10(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA) \
2434  FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,CF_0,CF_0,CF_0,CF_0)
2435 #define FCALLSCFUN11(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB) \
2436  FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,CF_0,CF_0,CF_0)
2437 #define FCALLSCFUN12(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC) \
2438  FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,CF_0,CF_0)
2439 #define FCALLSCFUN13(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD) \
2440  FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,CF_0)
2441 
2442 
2443 #define FCALLSCFUN15(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF) \
2444  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)
2445 #define FCALLSCFUN16(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG) \
2446  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)
2447 #define FCALLSCFUN17(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH) \
2448  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)
2449 #define FCALLSCFUN18(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE,TF,TG,TH,TI) \
2450  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)
2451 #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) \
2452  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)
2453 #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) \
2454  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)
2455 #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) \
2456  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)
2457 #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) \
2458  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)
2459 #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) \
2460  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)
2461 #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) \
2462  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)
2463 #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) \
2464  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)
2465 #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) \
2466  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)
2467 
2468 
2469 #ifndef __CF__KnR
2470 #define FCALLSCFUN0(T0,CN,UN,LN) CFextern _(T0,_cfFZ)(UN,LN) ABSOFT_cf2(T0)) \
2471  {_Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN(); _Icf(0,K,T0,0,0) _(T0,_cfI)}
2472 
2473 #define FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
2474  CFextern _(T0,_cfF)(UN,LN) \
2475  CFARGT14(NCF,DCF,ABSOFT_cf2(T0),T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) ) \
2476  { CFARGT14S(QCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
2477  _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN( TCF(LN,T1,1,0) TCF(LN,T2,2,1) \
2478  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) \
2479  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) \
2480  TCF(LN,TD,13,1) TCF(LN,TE,14,1) ); _Icf(0,K,T0,0,0) \
2481  CFARGT14S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) _(T0,_cfI) }
2482 
2483 #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) \
2484  CFextern _(T0,_cfF)(UN,LN) \
2485  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) ) \
2486  { 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) \
2487  _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN( TCF(LN,T1,1,0) TCF(LN,T2,2,1) \
2488  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) \
2489  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) \
2490  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) \
2491  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) \
2492  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) \
2493  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) }
2494 
2495 #else
2496 #define FCALLSCFUN0(T0,CN,UN,LN) CFextern _(T0,_cfFZ)(UN,LN) ABSOFT_cf3(T0)) _Icf(0,FF,T0,0,0)\
2497  {_Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN(); _Icf(0,K,T0,0,0) _(T0,_cfI)}
2498 
2499 #define FCALLSCFUN14(T0,CN,UN,LN,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
2500  CFextern _(T0,_cfF)(UN,LN) \
2501  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) \
2502  CFARGT14FS(NNNCF,DDDCF,_Z,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE); \
2503  { CFARGT14S(QCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) \
2504  _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN( TCF(LN,T1,1,0) TCF(LN,T2,2,1) \
2505  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) \
2506  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) \
2507  TCF(LN,TD,13,1) TCF(LN,TE,14,1) ); _Icf(0,K,T0,0,0) \
2508  CFARGT14S(RCF,T1,T2,T3,T4,T5,T6,T7,T8,T9,TA,TB,TC,TD,TE) _(T0,_cfI)}
2509 
2510 #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) \
2511  CFextern _(T0,_cfF)(UN,LN) \
2512  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) \
2513  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); \
2514  { 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) \
2515  _Icf(2,UU,T0,A0,0); _Icf(0,L,T0,0,0) CN( TCF(LN,T1,1,0) TCF(LN,T2,2,1) \
2516  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) \
2517  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) \
2518  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) \
2519  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) \
2520  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) \
2521  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)}
2522 
2523 #endif
2524 
2525 
2526 #endif /* __CFORTRAN_LOADED */
#define _NUM_ELEMS
Definition: cfortran.h:621
void(* cfCAST_FUNCTION)(CF_NULL_PROTO)
Definition: cfortran.h:735
static char * c2fstrv(char *cstr, char *fstr, int elem_len, int sizeofcstr)
Definition: cfortran.h:520
long long LONGLONG
Definition: cfortran.h:84
#define CF_NULL_PROTO
Definition: cfortran.h:377
static char * kill_trailing(char *s, char t)
Definition: cfortran.h:554
static char * f2cstrv(char *fstr, char *cstr, int elem_len, int sizeofcstr)
Definition: cfortran.h:537
#define _NUM_ELEM_ARG
Definition: cfortran.h:622
static int num_elem(char *strv, unsigned elem_len, int term_char, int num_term)
Definition: cfortran.h:627
static char * vkill_trailing(char *cstr, int elem_len, int sizeofcstr, char t)
Definition: cfortran.h:584
static char * kill_trailingn(char *s, char t, char *e)
Definition: cfortran.h:570

Return to the Main Unidata NetCDF page.
Generated on Mon Dec 19 2016 16:43:42 for NetCDF-Fortran. NetCDF is a Unidata library.