summaryrefslogtreecommitdiff
path: root/src/include/cctk_FortranString.h
blob: ba2d242d2b90a6fe73a5d29eed49e3feb9dc9b5f (plain)
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
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
 /*@@
   @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"

#ifndef _CCTK_FORTRANSTRING_H_
#define _CCTK_FORTRANSTRING_H_

#if defined T3E

#include <fortran.h>
#define ONE_FORTSTRING_ARG\
    _fcd cctk_str1
#define TWO_FORTSTRING_ARG\
    _fcd cctk_str1, _fcd cctk_str2
#define THREE_FORTSTRING_ARG\
    _fcd cctk_str1, _fcd cctk_str2, _fcd cctk_str3

#define ONE_FORTSTRING_CREATE(arg1)\
       int cctk_strlen1 = _fcdlen(cctk_str1);\
       char *arg1 = Util_NullTerminateString(_fcdtocp(cctk_str1),cctk_strlen1);
#define TWO_FORTSTRING_CREATE(arg1,arg2)\
       int  cctk_strlen1    = _fcdlen(cctk_str1);\
       int  cctk_strlen2    = _fcdlen(cctk_str2);\
       char *arg1 = Util_NullTerminateString(_fcdtocp(cctk_str1),cctk_strlen1);\
       char *arg2 = Util_NullTerminateString(_fcdtocp(cctk_str2),cctk_strlen2);
#define THREE_FORTSTRING_CREATE(arg1,arg2,arg3)\
       int  cctk_strlen1    = _fcdlen(cctk_str1);\
       int  cctk_strlen2    = _fcdlen(cctk_str2);\
       int  cctk_strlen3    = _fcdlen(cctk_str3);\
       char *arg1 = Util_NullTerminateString(_fcdtocp(cctk_str1),cctk_strlen1);\
       char *arg2 = Util_NullTerminateString(_fcdtocp(cctk_str2),cctk_strlen2);\
       char *arg3 = Util_NullTerminateString(_fcdtocp(cctk_str3),cctk_strlen3);

#define ONE_FORTSTRING_PTR(arg1)\
       char *arg1 = _fcdtocp(cctk_str1);
#define TWO_FORTSTRING_PTR(arg1, arg2)\
       char *arg1 = _fcdtocp(cctk_str1);\
       char *arg2 = _fcdtocp(cctk_str2);
#define THREE_FORTSTRING_PTR(arg1, arg2, arg3)\
       char *arg1 = _fcdtocp(cctk_str1);\
       char *arg2 = _fcdtocp(cctk_str2);\
       char *arg3 = _fcdtocp(cctk_str3);

#define ONE_FORTSTRING_LEN(len1)\
       size_t len1 = _fcdlen(cctk_str1);
#define TWO_FORTSTRING_LEN(len1,len2)\
       size_t len1  = _fcdlen(cctk_str1);\
       size_t len2  = _fcdlen(cctk_str2);
#define THREE_FORTSTRING_LEN(len1,len2,len3)\
       size_t len1  = _fcdlen(cctk_str1);\
       size_t len2  = _fcdlen(cctk_str2);\
       size_t len3  = _fcdlen(cctk_str3);

/* DEPRECATED BETA 10 */
#define TWO_FORTSTRINGS_ARGS\
    _fcd cctk_str1, _fcd cctk_str2
#define THREE_FORTSTRINGS_ARGS\
    _fcd cctk_str1, _fcd cctk_str2, _fcd cctk_str3
#define TWO_FORTSTRINGS_CREATE(arg1,arg2)\
       int  cctk_strlen1    = _fcdlen(cctk_str1);\
       int  cctk_strlen2    = _fcdlen(cctk_str2);\
       char *arg1 = Util_NullTerminateString(_fcdtocp(cctk_str1),cctk_strlen1);\
       char *arg2 = Util_NullTerminateString(_fcdtocp(cctk_str2),cctk_strlen2);
#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\
       int  cctk_strlen1    = _fcdlen(cctk_str1);\
       int  cctk_strlen2    = _fcdlen(cctk_str2);\
       int  cctk_strlen3    = _fcdlen(cctk_str3);\
       char *arg1 = Util_NullTerminateString(_fcdtocp(cctk_str1),cctk_strlen1);\
       char *arg2 = Util_NullTerminateString(_fcdtocp(cctk_str2),cctk_strlen2);\
       char *arg3 = Util_NullTerminateString(_fcdtocp(cctk_str3),cctk_strlen3);
/* END DEPRECATED */

#elif defined WIN32_DIGITAL_FORTRAN

#define ONE_FORTSTRING_ARG\
   char *cctk_str1, unsigned int cctk_strlen1
#define TWO_FORTSTRING_ARG\
   char *cctk_str1,\
   int cctk_strlen1,\
   char *cctk_str2,\
   int cctk_strlen2
#define THREE_FORTSTRING_ARG\
   char *cctk_str1,\
   int cctk_strlen1,\
   char *cctk_str2,\
   int cctk_strlen2,\
   char *cctk_str3,\
   int cctk_strlen3

#define ONE_FORTSTRING_CREATE(arg1)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);
#define TWO_FORTSTRING_CREATE(arg1,arg2)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);
#define THREE_FORTSTRING_CREATE(arg1,arg2,arg3)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);\
   char *arg3 = Util_NullTerminateString(cctk_str3,cctk_strlen3);

#define ONE_FORTSTRING_PTR(arg1)\
       char *arg1 = cctk_str1;
#define TWO_FORTSTRING_PTR(arg1, arg2)\
       char *arg1 = cctk_str1;\
       char *arg2 = cctk_str2;
#define THREE_FORTSTRING_PTR(arg1, arg2, arg3)\
       char *arg1 = cctk_str1;\
       char *arg2 = cctk_str2;\
       char *arg3 = cctk_str3;

#define ONE_FORTSTRING_LEN(len1)\
       size_t len1 = cctk_strlen1;
#define TWO_FORTSTRING_LEN(len1,len2)\
       size_t len1 = cctk_strlen1;\
       size_t len2 = cctk_strlen2;
#define THREE_FORTSTRING_LEN(len1,len2,len3)\
       size_t len1 = cctk_strlen1;\
       size_t len2 = cctk_strlen2;\
       size_t len3 = cctk_strlen3;

/* DEPRECATED BETA 10 */
#define TWO_FORTSTRINGS_ARGS\
   char *cctk_str1, int cctk_strlen1, char *cctk_str2, int cctk_strlen2
#define THREE_FORTSTRINGS_ARGS\
   char *cctk_str1,\
   char *cctk_str2,\
   char *cctk_str3,\
   unsigned int cctk_strlen1,\
   unsigned int cctk_strlen2,\
   unsigned int cctk_strlen3
#define TWO_FORTSTRINGS_CREATE(arg1,arg2)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);
#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);\
   char *arg3 = Util_NullTerminateString(cctk_str3,cctk_strlen3);
/* END DEPRECATED */

#else

#define ONE_FORTSTRING_ARG\
   char *cctk_str1,\
   unsigned int cctk_strlen1
#define TWO_FORTSTRING_ARG\
   char *cctk_str1,\
   char *cctk_str2,\
   unsigned int cctk_strlen1,\
   unsigned int cctk_strlen2
#define THREE_FORTSTRING_ARG\
   char *cctk_str1,\
   char *cctk_str2,\
   char *cctk_str3,\
   unsigned int cctk_strlen1,\
   unsigned int cctk_strlen2,\
   unsigned int cctk_strlen3

#define ONE_FORTSTRING_CREATE(arg1)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);
#define TWO_FORTSTRING_CREATE(arg1,arg2)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);
#define THREE_FORTSTRING_CREATE(arg1,arg2,arg3)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);\
   char *arg3 = Util_NullTerminateString(cctk_str3,cctk_strlen3);

#define ONE_FORTSTRING_PTR(arg1)\
       char *arg1 = cctk_str1;
#define TWO_FORTSTRING_PTR(arg1, arg2)\
       char *arg1 = cctk_str1;\
       char *arg2 = cctk_str2;
#define THREE_FORTSTRING_PTR(arg1, arg2, arg3)\
       char *arg1 = cctk_str1;\
       char *arg2 = cctk_str2;\
       char *arg3 = cctk_str3;

#define ONE_FORTSTRING_LEN(len1)\
       size_t len1 = cctk_strlen1;
#define TWO_FORTSTRING_LEN(len1,len2)\
       size_t len1 = cctk_strlen1;\
       size_t len2 = cctk_strlen2;
#define THREE_FORTSTRING_LEN(len1,len2,len3)\
       size_t len1 = cctk_strlen1;\
       size_t len2 = cctk_strlen2;\
       size_t len3 = cctk_strlen3;

/* DEPRECATED BETA 10 */
#define TWO_FORTSTRINGS_ARGS\
   char *cctk_str1,\
   char *cctk_str2,\
   unsigned int cctk_strlen1,\
   unsigned int cctk_strlen2
#define THREE_FORTSTRINGS_ARGS\
   char *cctk_str1,\
   char *cctk_str2,\
   char *cctk_str3,\
   unsigned int cctk_strlen1,\
   unsigned int cctk_strlen2,\
   unsigned int cctk_strlen3
#define TWO_FORTSTRINGS_CREATE(arg1,arg2)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);
#define THREE_FORTSTRINGS_CREATE(arg1,arg2,arg3)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);\
   char *arg2 = Util_NullTerminateString(cctk_str2,cctk_strlen2);\
   char *arg3 = Util_NullTerminateString(cctk_str3,cctk_strlen3);
/* END DEPRECATED */

#endif

#endif /* _CCTK_FORTRANSTRING_H_*/