Contents - Index


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