Error functions
The following group of functions defines the behavior of the library when errors occur during the execution.
Usage
The following examples, that can be found in the directory examples of the library sources, show the typical usage of this group of functions.
The example in Fortran 2003 language is f2003error.f
.
The following example shows how to stop the execution on the error.
program f2003error
USE, INTRINSIC :: ISO_C_BINDING
use calceph
implicit none
integer res
real(8) jd0
real(8) dt
real(8) PV(6)
! set the error handler to stop on error
call calceph_seterrorhandler(2, C_NULL_FUNPTR)
! open the ephemeris file
res = calceph_sopen("example1.dat"//C_NULL_CHAR)
...
stop
end
The following example shows how to define a custom error handler function.
!/*-----------------------------------------------------------------*/
!/* custom error handler */
!/*-----------------------------------------------------------------*/
subroutine myhandler(msg, msglen) BIND(C)
USE, INTRINSIC :: ISO_C_BINDING
implicit none
character(kind=C_CHAR), dimension(msglen), intent(in) :: msg
integer(C_INT), VALUE, intent(in) :: msglen
write (*,*) "The calceph calls the function myhandler"
write (*,*) "The message contains ",msglen," characters"
write(*,*) "The error message is :"
write(*,*) "----------------------"
write(*,*) msg
write(*,*) "----------------------"
write(*,*) "The error handler returns"
end
!/*-----------------------------------------------------------------*/
!/* main program */
!/*-----------------------------------------------------------------*/
program f2003error
USE, INTRINSIC :: ISO_C_BINDING
use calceph
implicit none
integer res
real(8) jd0
real(8) dt
real(8) PV(6)
interface
subroutine myhandler(msg, msglen) BIND(C)
USE, INTRINSIC :: ISO_C_BINDING
implicit none
character(kind=C_CHAR), dimension(msglen), intent(in) &
& :: msg
integer(C_INT), VALUE, intent(in) :: msglen
end subroutine
end interface
! set the error handler to use my own callback
call calceph_seterrorhandler(3, c_funloc(myhandler))
! open the ephemeris file
res = calceph_sopen("example1.dat"//C_NULL_CHAR)
! ...
stop
end