diff options
author | allen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 1999-02-14 18:58:28 +0000 |
---|---|---|
committer | allen <allen@17b73243-c579-4c4c-a9d2-2d5706c11dac> | 1999-02-14 18:58:28 +0000 |
commit | 9f3351d7a237bbaa028219397ec94521c3986db2 (patch) | |
tree | 4a0fb0bc19fe56682efbfa411f7050b4bd7d036a /src/util/Misc.c | |
parent | ad7ea05ad3fb5da4a0b8cee962be637fcbf0d20b (diff) |
Added Fortran interface for CCTK_Equals. Defined macros for using
when passing one or two fortran strings into routines (two strings since
I originally forgot that there was really only one string)
git-svn-id: http://svn.cactuscode.org/flesh/trunk@265 17b73243-c579-4c4c-a9d2-2d5706c11dac
Diffstat (limited to 'src/util/Misc.c')
-rw-r--r-- | src/util/Misc.c | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/src/util/Misc.c b/src/util/Misc.c index 4aca8fb0..6c394ef2 100644 --- a/src/util/Misc.c +++ b/src/util/Misc.c @@ -12,6 +12,7 @@ #include <string.h> #include <ctype.h> #include <stdarg.h> +#include <assert.h> #include "Misc.h" @@ -117,6 +118,78 @@ int CCTK_Equals(const char *string1, const char *string2) return retval; } +#if defined T3E +#include <fortran.h> +#define ONE_FORTSTRING_ARG\ + _fcd fcdarg +#define TWO_FORTSTRINGS_ARGS\ + _fcd fcd_n, _fcd fcd_w +#define ONE_FORTSTRING_CREATE(argn)\ + int len = _fcdlen(fcdarg); \ + char *argn = CCTK_NullTerminateString(_fcdtocp(fcdarg),len);; +#define TWO_FORTSTRINGS_CREATE(argn,argw)\ + int nl = _fcdlen(fcd_n);\ + int wl = _fcdlen(fcd_w);\ + char *argn = CCTK_NullTerminateString(_fcdtocp(fcd_n),nl);\ + char *argw = CCTK_NullTerminateString(_fcdtocp(fcd_w),wl); +#elif defined WIN32 +#define ONE_FORTSTRING_ARG\ + char *n, unsigned int nl +#define TWO_FORSTRINGS_ARGS\ + char *n, int nl, char *w, int wl +#define ONE_FORTSTRING_CREATE(argn)\ + char *argn = CCTK_NullTerminateString(n,nl); +#define TWO_FORTSTRINGS_CREATE(argn,argw)\ + char *argn = CCTK_NullTerminateString(n,nl);\ + char *argw = CCTK_NullTerminateString(w,wl); +#else +#define ONE_FORTSTRING_ARG\ + char *n, unsigned int nl +#define TWO_FORTSTRINGS_ARGS\ + const char *n, const char *w, int nl, int wl +#define ONE_FORTSTRING_CREATE(argn)\ + char *argn = CCTK_NullTerminateString(n,nl); +#define TWO_FORTSTRINGS_CREATE(argn,argw)\ + char *argn = CCTK_NullTerminateString(n,nl);\ + char *argw = CCTK_NullTerminateString(w,wl); +#endif + +int FORTRAN_NAME(CCTK_Equals)(const char *arg1,ONE_FORTSTRING_ARG) +{ + ONE_FORTSTRING_CREATE(arg2) + int retval; + retval = CCTK_Equals(arg1,arg2); + free(arg2); + return(retval); +} + +/*@@ + @routine CCTK_NullTerminateString + @author Paul Walker + @desc + Null terminates a fortran string. Remember to free + what it returns... + @enddesc + +@@*/ + +char *CCTK_NullTerminateString(const char *instring, unsigned int len) +{ + char *outstring; + unsigned int i; + + outstring = (char *)malloc((len+2)*sizeof(char)); + assert(outstring); + for (i=0;i<len;i++) + { + outstring[i] = instring[i]; + } + outstring[len] = '\0'; + + return(outstring); +} + + /*@@ @routine CCTK_InList @date Wed Jan 20 10:31:25 1999 |