Posted to tcl by arjen at Fri Jun 05 09:14:39 GMT 2026view pretty

! bessel --
!     Wrapper for the Fortran J0 Bessel function
!
! Arguments:
!     clientdata       Any data registered for the command
!     interp           Tcl interpreter that is running the command
!     nobj             Number of arguments
!     objv             Array of argument objects
!
!
integer function tcl_bessel_j0( clientdata, interp, nobj, objv ) bind(c)
    type(c_ptr), value          :: clientdata
    type(tcl_interp), value     :: interp
    integer(c_int), value       :: nobj
    type(tcl_obj), dimension(*) :: objv

    real(c_double)              :: arg1, result
    integer(c_int)              :: rc

    tcl_bessel_j0 = tcl_error

    !
    ! The name of the command is the first argument, so correct for that
    !
    if ( nobj-1 /= 1 ) then
        call tcl_setresult( interp, "Wrong number of arguments" // c_null_char, c_null_funptr )
        return
    endif

    call ftcl_getdoublefromobj( interp, objv(2), arg1, rc )
    if ( rc /= tcl_ok ) then
        return
    endif

    tcl_bessel_j0 = tcl_ok

    result = bessel_j0( arg1 )

    call ftcl_setresult( interp, result )
end function tcl_bessel_j0