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