OpenCMISS-Iron Internal API Documentation
cmiss_fortran_c.f90
Go to the documentation of this file.
1 
43 
45 
46 #include "dllexport.h"
47 
49 
50  USE iso_c_binding
51 
52  IMPLICIT NONE
53 
54  PRIVATE
55 
56  !Module parameters
57 
58  !Module types
59 
60  !Module variables
61 
62  !Interfaces
63 
64  PUBLIC cmissc2fstring
65 
66  PUBLIC cmissf2cstring
67 
68  PUBLIC cmissc2fstrings
69 
70 CONTAINS
71 
72  !
73  !================================================================================================================================
74  !
75 
77  SUBROUTINE cmissc2fstring(Cstring,Fstring)
78  !DLLEXPORT(CMISSC2FString)
79  !Argument variables
80  CHARACTER(LEN=1,KIND=C_CHAR), INTENT(IN) :: Cstring(:)
81  CHARACTER(LEN=*), INTENT(OUT) :: Fstring
82  !Local variables
83  INTEGER(C_INT) :: i,LENGTH
84 
85  IF(len(fstring)>=SIZE(cstring,1)-1) THEN
86  length=SIZE(cstring,1)-1
87  ELSE
88  length=len(fstring)
89  ENDIF
90  fstring=""
91  DO i=1,length
92  IF(cstring(i)==c_null_char) THEN
93  EXIT
94  ELSE
95  fstring(i:i)=cstring(i)
96  ENDIF
97  ENDDO !i
98 
99  RETURN
100 
101  END SUBROUTINE cmissc2fstring
102 
103  !
104  !================================================================================================================================
105  !
106 
108  SUBROUTINE cmissf2cstring(Fstring,Cstring)
109  !DLLEXPORT(CMISSF2CString)
110  !Argument variables
111  CHARACTER(LEN=*), INTENT(IN) :: Fstring
112  CHARACTER(LEN=1,KIND=C_CHAR), INTENT(OUT) :: Cstring(:)
113  !Local variables
114  INTEGER(C_INT) :: i,LENGTH
115 
116  IF(SIZE(cstring,1)>len_trim(fstring)) THEN
117  length=len_trim(fstring)
118  ELSE
119  length=SIZE(cstring,1)-1
120  ENDIF
121  DO i=1,length
122  cstring(i)=fstring(i:i)
123  ENDDO !i
124  !Null terminate the string
125  cstring(length+1)=c_null_char
126 
127  RETURN
128 
129  END SUBROUTINE cmissf2cstring
130 
131  !
132  !================================================================================================================================
133  !
134 
136  SUBROUTINE cmissc2fstrings(Cstrings,Fstrings)
137  !DLLEXPORT(CMISSC2FStrings)
138  !Argument variables
139  CHARACTER(LEN=1,KIND=C_CHAR), INTENT(IN) :: Cstrings(:,:)
140  CHARACTER(LEN=*), INTENT(INOUT) :: Fstrings(:)
141  !Local variables
142  INTEGER(C_INT) :: string_idx,i
143  INTEGER(C_INT) :: LENGTH=0
144 
145  !Cstrings array index order is opposite to C
146  IF(len(fstrings(1))>=SIZE(cstrings,1)-1) THEN
147  length=SIZE(cstrings,1)-1
148  ELSE
149  length=len(fstrings(1))
150  ENDIF
151  DO string_idx=1,SIZE(fstrings,1)
152  fstrings(string_idx)=" "
153  DO i=1,length
154  IF(cstrings(i,string_idx)==c_null_char) THEN
155  EXIT
156  ELSE
157  fstrings(string_idx)(i:i)=cstrings(i,string_idx)
158  ENDIF
159  ENDDO !i
160  ENDDO
161 
162  RETURN
163 
164  END SUBROUTINE cmissc2fstrings
165 
166  !
167  !=================================================================================================================================
168  !
169 
170 END MODULE cmiss_fortran_c
This module contains all Fortran and C data conversion routines.
subroutine, public cmissc2fstring(Cstring, Fstring)
Copys/converts a C string (array of characters) to a Fortran String (length of characters) ...
subroutine, public cmissc2fstrings(Cstrings, Fstrings)
Copys/converts a list of C strings (2D array of characters) to an array of Fortran Strings...
subroutine, public cmissf2cstring(Fstring, Cstring)
Copys/converts a Fortran String (length of characters) to a C string (array of characters) ...