summaryrefslogtreecommitdiff
path: root/src/include/cctk_FortranString.h
blob: 9de3a644a55e1889b1f165ba713ff81ab854667d (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
 /*@@
   @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_FORTSTRINGS_ARGS\
    _fcd cctk_str1, _fcd cctk_str2
#define THREE_FORTSTRINGS_ARGS\
    _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_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);

#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);

#elif defined WIN32

#define ONE_FORTSTRING_ARG\
   char *cctk_str1, unsigned int cctk_strlen1
#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 ONE_FORTSTRING_CREATE(arg1)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);
#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);

#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;

#else

#define ONE_FORTSTRING_ARG\
   char *cctk_str1,\
   unsigned int cctk_strlen1
#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 ONE_FORTSTRING_CREATE(arg1)\
   char *arg1 = Util_NullTerminateString(cctk_str1,cctk_strlen1);
#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);

#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;

#endif

#endif /* _CCTK_FORTRANSTRING_H_*/