summaryrefslogtreecommitdiff
path: root/src/include/FortranString.h
blob: d2bcd9d6adc7e0a726c5a93027242f49d7341589 (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
 /*@@
   @header    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 "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