27 use iso_c_binding,
only: c_ptr, c_char, c_null_char, c_null_ptr, c_loc, c_funptr, c_null_funptr, c_funloc, c_associated
28 use iso_fortran_env,
only: error_unit
35 private :: c_ptr, c_char, c_null_char, c_null_ptr, c_loc, c_funptr, c_null_funptr, c_funloc
61 import :: c_funptr, c_ptr
62 type(c_funptr),
value,
intent(in) :: proc
63 type(c_ptr),
value,
intent(in) :: data
70 import :: c_funptr, c_ptr
71 type(c_funptr),
value,
intent(in) :: proc
72 type(c_ptr),
value,
intent(in) :: data
117 include
'included_plplot_real_interfaces.f90'
132 function interface_plrandd() bind(c,name='c_plrandd')
133 import :: private_plflt
135 real(kind=private_plflt) :: interface_plrandd
136 end function interface_plrandd
145 procedure(pllabeler_proc_data) :: proc
146 type(c_ptr),
value,
intent(in) :: data
147 pllabeler_data => proc
154 procedure(pllabeler_proc) :: proc
166 procedure(pltransform_proc_data) :: proc
167 type(c_ptr),
value,
intent(in) :: data
168 pltransform_data => proc
175 procedure(pltransform_proc) :: proc
186 subroutine plmapformf2c( n, x, y ) bind(c, name = 'plplot_double_private_plmapformf2c')
187 integer(kind=private_plint),
value,
intent(in) :: n
188 real(kind=private_plflt),
dimension(n),
intent(inout) :: x, y
190 real(kind=
wp),
dimension(:),
allocatable :: x_inout, y_inout
192 allocate(x_inout(n), y_inout(n))
194 x_inout = real(x, kind=
wp)
195 y_inout = real(y, kind=
wp)
197 call plmapform( x_inout, y_inout )
198 x = real(x_inout, kind=private_plflt)
199 y = real(y_inout, kind=private_plflt)
202 subroutine pllabelerf2c( axis, value, label, length, data ) bind(c, name = 'plplot_double_private_pllabelerf2c')
203 integer(kind=private_plint),
value,
intent(in) :: axis, length
204 real(kind=private_plflt),
value,
intent(in) ::
value
205 character(len=1),
dimension(*),
intent(out) :: label
206 type(c_ptr),
value,
intent(in) :: data
208 character(len=:),
allocatable :: label_out
209 integer :: trimmed_length
211 if ( c_associated(data) )
then
212 write(*,*)
'PLPlot: error in pllabelerf2c - data argument should be NULL'
216 allocate(
character(length) :: label_out)
217 call pllabeler( int(axis), real(
value,kind=
wp), label_out )
218 trimmed_length =
min(length,len_trim(label_out) + 1)
219 label(1:trimmed_length) = transfer(trim(label_out(1:length))//c_null_char,
" ", trimmed_length)
220 deallocate(label_out)
223 subroutine pllabelerf2c_data( axis, value, label, length, data ) bind(c, name = 'plplot_double_private_pllabelerf2c_data')
224 integer(kind=private_plint),
value,
intent(in) :: axis, length
225 real(kind=private_plflt),
value,
intent(in) ::
value
226 character(len=1),
dimension(*),
intent(out) :: label
227 type(c_ptr),
value,
intent(in) :: data
229 character(len=:),
allocatable :: label_out
230 integer :: trimmed_length
232 allocate(
character(length) :: label_out)
233 call pllabeler_data( int(axis), real(
value,kind=
wp), label_out,
data )
234 trimmed_length =
min(length,len_trim(label_out) + 1)
235 label(1:trimmed_length) = transfer(trim(label_out(1:length))//c_null_char,
" ", trimmed_length)
236 deallocate(label_out)
239 subroutine pltransformf2c( x, y, tx, ty, data ) bind(c, name = 'plplot_double_private_pltransformf2c')
240 real(kind=private_plflt),
value,
intent(in) :: x, y
241 real(kind=private_plflt),
intent(out) :: tx, ty
242 type(c_ptr),
value,
intent(in) :: data
244 real(kind=
wp) :: tx_out, ty_out
246 if ( c_associated(data) )
then
247 write(*,*)
'PLPlot: error in pltransfrom2c - data argument should be NULL'
251 call pltransform( real(x,kind=
wp), real(y,kind=
wp), tx_out, ty_out )
256 subroutine pltransformf2c_data( x, y, tx, ty, data ) bind(c, name = 'plplot_double_private_pltransformf2c_data')
257 real(kind=private_plflt),
value,
intent(in) :: x, y
258 real(kind=private_plflt),
intent(out) :: tx, ty
259 type(c_ptr),
value,
intent(in) :: data
261 real(kind=
wp) :: tx_out, ty_out
263 call pltransform_data( real(x,kind=
wp), real(y,kind=
wp), tx_out, ty_out,
data )