27 use iso_c_binding,
only: c_ptr, c_int32_t, c_float, c_double
29 private :: c_ptr, c_int32_t, c_float, c_double
46 include
'included_plplot_configured_types.f90'
74 type,
bind(c) :: PLfGrid
76 integer(kind=private_plint) :: nx, ny, nz
79 type,
bind(c) :: PLcGrid
80 type(c_ptr) :: xg, yg, zg
81 integer(kind=private_plint) :: nx, ny, nz
87 use iso_c_binding,
only: c_ptr, c_char, c_null_char, c_loc, c_size_t, c_f_pointer
88 use iso_fortran_env,
only: error_unit
90 private :: c_ptr, c_char, c_null_char, c_loc, c_size_t, c_f_pointer, error_unit
109 import c_ptr, c_size_t
112 type(c_ptr),
intent(in),
value :: s
124 character(len=*),
dimension(:),
intent(in) :: character_array
125 character(len=1),
dimension(:,:),
allocatable,
target,
intent(out) :: cstring_array
126 type(c_ptr),
dimension(:),
allocatable,
intent(out) :: cstring_address
128 integer :: j_local, length_local, number_local, length_column_local
131 length_local = len(character_array)
133 number_local =
size(character_array)
137 allocate( cstring_array(length_local+1, number_local) )
138 allocate( cstring_address(number_local) )
140 do j_local = 1, number_local
141 length_column_local = len(trim(character_array(j_local))) + 1
143 cstring_array(1:length_column_local, j_local) = &
144 transfer(trim(character_array(j_local))//c_null_char,
" ", length_column_local)
145 cstring_address(j_local) = c_loc(cstring_array(1,j_local))
154 character(len=*),
dimension(:),
intent(out) :: character_array
155 type(c_ptr),
dimension(:),
intent(in) :: cstring_address_array
157 integer :: i_local, j_local, length_local, number_local, length_column_local
159 character(kind=c_char),
pointer :: string_ptr(:)
161 length_local = len(character_array)
162 number_local =
size(cstring_address_array)
163 if(number_local >
size(character_array))
then
164 write(error_unit, *)
"Error in c_to_character_array: size of character_array too small to hold converted result."
167 do j_local = 1, number_local
169 if(length_column_local > length_local)
then
170 write(error_unit, *) &
171 "Error in c_to_character_array: length of character_array too small to hold converted result."
178 call c_f_pointer(cstring_address_array(j_local), string_ptr, [length_column_local])
179 do i_local = 1, length_column_local
180 character_array(j_local)(i_local:i_local) = string_ptr(i_local)
183 character_array(j_local)(length_column_local+1:) =
" "
189 character(len=*),
intent(out) :: fstring
190 character(len=1),
dimension(:),
intent(in) :: cstring
195 do i_local = 1,
min(len(fstring),
size(cstring))
196 if ( cstring(i_local) /= c_null_char )
then
197 fstring(i_local:i_local) = cstring(i_local)
208 type(c_ptr),
dimension(:),
intent(in) :: cstring_address_array
210 integer :: j_local, number_local
211 number_local =
size(cstring_address_array)
214 do j_local = 1, number_local
236 character(len=16) :: string
264 type,
bind(c) :: private_plgraphicsin
265 integer(kind=private_plint) ::
type
266 integer(kind=private_plint) :: state
267 integer(kind=private_plint) :: keysym
268 integer(kind=private_plint) :: button
269 integer(kind=private_plint) :: subwindow
270 character(len=1),
dimension(16) :: string
271 integer(kind=private_plint) :: px, py
272 real(kind=private_plflt) :: dx, dy
273 real(kind=private_plflt) :: wx, wy
274 end type private_plgraphicsin
280 type(private_plgraphicsin) :: gin_out
283 function interface_plgetcursor( gin ) bind(c,name='plGetCursor')
286 integer(kind=private_plint) :: interface_plgetcursor
287 type(private_plgraphicsin),
intent(out) :: gin
288 end function interface_plgetcursor
294 gin%type = int(gin_out%type)
295 gin%state = int(gin_out%state)
296 gin%keysym = int(gin_out%keysym)
297 gin%button = int(gin_out%button)
298 gin%subwindow = int(gin_out%subwindow)
300 gin%pX = int(gin_out%pX)
301 gin%pY = int(gin_out%pY)
312 use iso_c_binding,
only: c_ptr, c_f_pointer
315 private :: c_ptr, private_plflt
318 real(kind=private_plflt),
value,
intent(in) :: x, y
319 real(kind=private_plflt),
intent(out) :: tx, ty
320 type(c_ptr),
value,
intent(in) :: tr_in
322 real(kind=private_plflt),
dimension(:),
pointer :: tr
324 call c_f_pointer( tr_in, tr, [6] )
326 tx = tr(1) * x + tr(2) * y + tr(3)
327 ty = tr(4) * x + tr(5) * y + tr(6)