1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
|
/*@@
@header cctk_FortranString.h
@date Wed Feb 17 12:55 1999
@author Gabrielle Allen, Paul Walker
@desc
Macros for dealing with strings passed from fortran to C.
The memory for the new arguments created should be freed after use
To ensure that passing strings from fortran to C has a chance of
working with all compilers, we assume that
** Strings are always at the end of the argument list **
@enddesc
@version $Header$
@@*/
#include "cctk_Misc.h"
#if defined T3E
#include <fortran.h>
#define ONE_FORTSTRING_ARG\
_fcd fcdarg
#define TWO_FORTSTRINGS_ARGS\
_fcd fcd_n, _fcd fcd_w
#define THREE_FORTSTRINGS_ARGS\
_fcd fcd_arg1, _fcd fcd_arg2, _fcd fcd_arg3
#define ONE_FORTSTRING_CREATE(argn)\
int len = _fcdlen(fcdarg); \
char *argn = Util_NullTerminateString(_fcdtocp(fcdarg),len);;
#define TWO_FORTSTRINGS_CREATE(argn,argw)\
int nl = _fcdlen(fcd_n);\
int wl = _fcdlen(fcd_w);\
char *argn = Util_NullTerminateString(_fcdtocp(fcd_n),nl);\
char *argw = Util_NullTerminateString(_fcdtocp(fcd_w),wl);
#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\
int narg1 = _fcdlen(fcd_arg1);\
int narg2 = _fcdlen(fcd_arg2);\
int narg3 = _fcdlen(fcd_arg3);\
char *arg1 = Util_NullTerminateString(_fcdtocp(fcd_arg1),narg1);\
char *arg2 = Util_NullTerminateString(_fcdtocp(fcd_arg2),narg2);\
char *arg3 = Util_NullTerminateString(_fcdtocp(fcd_arg3),narg3);
#elif defined WIN32
#define ONE_FORTSTRING_ARG\
char *n, unsigned int nl
#define TWO_FORTSTRINGS_ARGS\
char *n, int nl, char *w, int wl
#define THREE_FORTSTRINGS_ARGS\
const char *CCTK_str1,\
const char *CCTK_str2,\
const char *CCTK_str3,\
unsigned int CCTK_len1,\
unsigned int CCTK_len2,\
unsigned int CCTK_len3
#define ONE_FORTSTRING_CREATE(argn)\
char *argn = Util_NullTerminateString(n,nl);
#define TWO_FORTSTRINGS_CREATE(argn,argw)\
char *argn = Util_NullTerminateString(n,nl);\
char *argw = Util_NullTerminateString(w,wl);
#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\
char *arg1 = Util_NullTerminateString(CCTK_str1,CCTK_len1);\
char *arg2 = Util_NullTerminateString(CCTK_str2,CCTK_len2);\
char *arg3 = Util_NullTerminateString(CCTK_str3,CCTK_len3);
#else
#define ONE_FORTSTRING_ARG\
const char *CCTK_str1,\
unsigned int CCTK_len1
#define TWO_FORTSTRINGS_ARGS\
const char *CCTK_str1,\
const char *CCTK_str2,\
unsigned int CCTK_len1,\
unsigned int CCTK_len2
#define THREE_FORTSTRINGS_ARGS\
const char *CCTK_str1,\
const char *CCTK_str2,\
const char *CCTK_str3,\
unsigned int CCTK_len1,\
unsigned int CCTK_len2,\
unsigned int CCTK_len3
#define ONE_FORTSTRING_CREATE(arg1)\
char *arg1 = Util_NullTerminateString(CCTK_str1,CCTK_len1);
#define TWO_FORTSTRINGS_CREATE(arg1,arg2)\
char *arg1 = Util_NullTerminateString(CCTK_str1,CCTK_len1);\
char *arg2 = Util_NullTerminateString(CCTK_str2,CCTK_len2);
#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\
char *arg1 = Util_NullTerminateString(CCTK_str1,CCTK_len1);\
char *arg2 = Util_NullTerminateString(CCTK_str2,CCTK_len2);\
char *arg3 = Util_NullTerminateString(CCTK_str3,CCTK_len3);
#endif
|