MDASF FORTRAN .FDL Procedure for GCC Open Source Compiler
! This file contains an example external procedure that can be compiled into an FDL file and called from EES using the GCC Open Source Compiler.
SUBROUTINE MDASF(S,LS,MODE,NINPUTS,INPUTS,NOUTPUTS,OUTPUTS)
USE iso_c_binding, only: c_null_char !necessary to append a null character
IMPLICIT NONE
INTEGER(4) MODE, NINPUTS, NOUTPUTS, LS
REAL(8) INPUTS(50), OUTPUTS(50), X, Y
CHARACTER(255) S
!GCC$ ATTRIBUTES STDCALL :: MDASF ! STDCALL calling convention for FDL
IF (MODE.EQ.-1) THEN ! Provide an example of the call
S='CALL MDASF(X,Y:A,B,C,D)'//C_null_char
RETURN
ENDIF
IF (MODE.EQ.-2) THEN ! Provide units of each input
S='m,m'//C_null_char
RETURN
ENDIF
IF (MODE.EQ.-3) THEN ! Provide units of each output
S='m^2,,m,m'//C_null_char
RETURN
ENDIF
IF (MODE.LT.0) THEN ! Mode should be 0 for normal call
S=''//C_null_char
RETURN
ENDIF
IF (NINPUTS.NE.2) THEN ! Check number of inputs
S='MDASF requires two input.'//C_null_char
RETURN
ENDIF
IF (NOUTPUTS.NE.4) THEN ! Check number of outputs
S='MDASF EXPECTS TO PROVIDE 4 OUTPUTS'//C_null_char
RETURN
ENDIF
MODE=0
X=INPUTS(1)
Y=INPUTS(2)
IF (ABS(Y).LE.1E-9) THEN
S='DIVISION BY ZERO IN MDASF'//C_null_char
RETURN
ENDIF
OUTPUTS(1)=X*Y
OUTPUTS(2)=X/Y
OUTPUTS(3)=X+Y
OUTPUTS(4)=X-Y
S=''//C_null_char
RETURN
END
A listing of the mdasf.def file that provides linker directions needed to generate the .FDL follows:
EXPORTS
mdasf_@32 @ 1
MDASF = mdasf_@32