MODULE MATLAB_API ! This module provides interfaces to a number of functions and ! subroutines in the Matlab API. It also provides a new INTEGER KIND ! type, MatlabPtr, so that users of 64 bit machines only have to ! modify their code in one place. ! ! Interfaces written by Jorgen Johansson, 2001 ! Module wrapper & kind added by Matthew C Roberts, 2001 ! !******************************************************************** ! FUNCTIONS TO WRITE AND READ MATLAB MAT FILES ! INTERFACE TO EXTERNAL FUNCTIONS IN LIBMX.LIB AND LIBMAT.LIB !******************************************************************** ! THE FOLLOWING FUNCTIONS ARE INCLUDED IN THE INTERFACE ! matOpen matClose mxGetPr mxCreateDoubleMatrix ! matPutArray matPutArrayAsGlobal mxCreateStructMatrix ! mxAddField mxIsStruct mxCreateCellMatrix ! mxSetCell mxIsCell mxGetCell ! mxGetField matGetArray matGetDir ! mxIsDouble mxGetData mxGetNumberOfElements ! mxGetNumberOfFields mxDuplicateArray ! THE FOLLOWING SUBROUTINES ARE INCLUDED IN THE INTERFACE ! mxSetField mxCopyReal8ToPtr mxCopyPtrToReal8 ! mxCopyPtrToPtrArray mxCopyPtrToCharacter mxDestroyArray integer MatlabPtr = 4 ! 32-bit machines !integer MatlabPtr = 8 ! 64-bit machines INTERFACE ! mxFUNCTIONS: ! FUNCTION THAT GETS REAL DATA FROM POINTER 'PM' ! IDENTICAL TO MXGETDATA, see further down. !----------------------------------------------------------------- integer (kind=MatlabPtr) function mxGetPr(pm) integer(kind=MatlabPtr) ::pm end function mxGetPr ! FUNCTION THAT CREATES AN MXARRAY !----------------------------------------------------------------- integer (kind=MatlabPtr) function mxCreateDoubleMatrix(m, n, ComplexFlag) integer (kind=4) :: m, n, ComplexFlag end function mxCreateDoubleMatrix ! FUNCTION THAT CREATES STRUCTURE VARIABLE !----------------------------------------------------------------- integer function mxCreateStructMatrix(m, n, nfields, fieldnames) integer(kind=4) :: m, n, nfields character (len=*), dimension(nfields) :: fieldnames end function mxCreateStructMatrix ! FUNCTION THAT ADDS A FIELD TO A STRUCTURE VARIABLE !----------------------------------------------------------------- integer (kind=4) function mxAddField(pm, fieldname) integer (kind=4) ::pm character (len=*), dimension(:):: fieldname end function mxAddField ! FUNCTION THAT CHECKS IF 'pm' POINTS TO A STRUCTURE VARIABLE !----------------------------------------------------------------- integer (kind=4) function mxIsStruct(pm) integer (kind=4) :: pm end function mxIsStruct ! SUBROUTINE THAT COPIES DATA FROM FORTRAN TO MATLAB structure field !-------------------------------------------------------------------- subroutine mxSetField(pm, index, fieldname, value) integer (kind=4) :: pm, index, value character (len=*), dimension(:) :: fieldname end subroutine mxSetField ! SUBROUTINE THAT COPIES DATA FROM FORTRAN TO MATLAB structure field !-------------------------------------------------------------------- subroutine mxSetFieldByNumber(pm, index, fieldnumber, value) integer (kind=4) :: pm, index, fieldnumber, value end subroutine mxSetFieldByNumber ! SUBROUTINE THAT COPIES DATA FROM FORTRAN TO MATLAB ARRAY POINTER !-------------------------------------------------------------------- subroutine mxCopyReal8ToPtr(y, px, n) integer (kind=4) :: px, n real (kind=8) :: y(n) end subroutine mxCopyReal8ToPtr ! SUBROUTINE THAT COPIES DATA FROM MATLAB ARRAY POINTER TO FORTRAN ARRAY !-------------------------------------------------------------------- subroutine mxCopyPtrToReal8(px, y, n) integer (kind=4) :: px, n real (kind=8) :: y(n) end subroutine mxCopyPtrToReal8 ! SUBROUTINE THAT COPIES DATA FROM MATLAB ARRAY POINTER TO FORTRAN ARRAY !-------------------------------------------------------------------- subroutine mxCopyPtrToReal4(px, y, n) integer (kind=4) :: px, n real (kind=4) :: y(n) end subroutine mxCopyPtrToReal4 ! FUNCTION THAT CREATES CELL VARIABLE !----------------------------------------------------------------- integer (kind=4) function mxCreateCellMatrix(m, n) integer (kind=4) :: m, n end function mxCreateCellMatrix ! SUBROUTINE THAT COPIES DATA FROM FORTRAN TO MATLAB ARRAY POINTER !-------------------------------------------------------------------- subroutine mxSetCell(pm, index, value) integer (kind=4) :: pm, index, value end subroutine mxSetCell ! FUNCTION THAT CHECKS IF 'pm' POINTS TO A STRUCTURE VARIABLE !----------------------------------------------------------------- integer (kind=4) function mxIsCell(pm) integer (kind=4) :: pm end function mxIsCell ! FUNCTION THAT CREATES CELL VARIABLE !----------------------------------------------------------------- integer (kind=4) function mxGetCell(pm, index) integer (kind=4) ::pm, index end function mxGetCell ! FUNCTION THAT GETS FIELD VARIABLE !----------------------------------------------------------------- integer (kind=4) function mxGetField(pm, index, fieldname) integer (kind=4):: pm, index character(len=*):: fieldname end function mxGetField ! FUNCTION THAT GETS NUMBER OF FIELDS IN STRUCTURE mxARRAY !----------------------------------------------------------------- integer (kind=4) function mxGetNumberOfFields(pm) integer (kind=4):: pm end function mxGetNumberOfFields ! FUNCTION THAT GETS THE NAME OF FIELDS IN STRUCTURE ARRAY !----------------------------------------------------------------- character(LEN=32) function mxGetFieldNameByNumber(pm, fieldnumber) integer (kind=4):: pm, fieldnumber end function mxGetFieldNameByNumber ! SUBROUTINE THAT COPIES POINTER TO ARRAY POINTER !-------------------------------------------------------------------- subroutine mxCopyPtrToPtrArray(px, y, n) integer (kind=4) :: px, n integer (kind=4) :: y(n) end subroutine mxCopyPtrToPtrArray ! SUBROUTINE THAT COPIES POINTER TO CHARACTER !-------------------------------------------------------------------- subroutine mxCopyPtrToCharacter(px, y, n) character (len=*) ::y integer (kind=4) :: px, n end subroutine mxCopyPtrToCharacter ! FUNCTION THAT CHECKS IF MXARRAY IS OF TYPE DOUBLE !-------------------------------------------------------------------- integer (kind=4) function mxIsDouble(pm) integer (kind=4) :: pm end function mxIsDouble ! FUNCTION THAT CHECKS NUMBER OF ELEMENTS IN AN MXARRAY !-------------------------------------------------------------------- integer (kind=4) function mxGetNumberOfElements(pm) integer (kind=4) :: pm end function mxGetNumberOfElements ! FUNCTION THAT GETS THE ADDRESS OF THE FIRST ELEMENT IN AN MXARRAY !-------------------------------------------------------------------- integer (kind=4) function mxGetData(pm) integer (kind=4) ::pm end function mxGetData ! SUBROUTINE THAT COPIES POINTER TO CHARACTER !-------------------------------------------------------------------- subroutine mxDestroyArray(pm) integer (kind=4) ::pm end subroutine mxDestroyArray ! FUNCTION THAT COPIES AN MXARRAY !-------------------------------------------------------------------- integer (kind=4) function mxDuplicateArray(in) integer (kind=4) ::in end function mxDuplicateArray integer (kind=4) function mxCreateScalarDouble(value) real (kind=4) ::value end function mxCreateScalarDouble ! MAT-file functions: ! FUNCTION THAT OPENS A MAT FILE !----------------------------------------------------------------- integer (kind=4) function matOpen(filename, mode) character(len=*) :: filename, mode end function matOpen ! FUNCTION THAT CLOSES A MAT FILE !----------------------------------------------------------------- integer (kind=4) function matClose(mfp) integer (kind=4):: mfp end function matClose ! FUNCTION THAT PUTS A MATLAB WORKSPACE MXARRAY IN A MATLAB MAT FILE !----------------------------------------------------------------- integer (kind=4) function matPutArray(mfp, pm) integer (kind=4) :: mfp integer (kind=MatlabPtr) :: pm end function matPutArray ! FUNCTION THAT PUTS AN MATLAB WORKSPACE MXARRAY IN A MATLAB MAT FILE !----------------------------------------------------------------- integer (kind=4) function matPutArrayAsGlobal(mfp, pm) integer (kind=4) :: mfp integer (kind=MatlabPtr) :: pm end function matPutArrayAsGlobal ! FUNCTION THAT GETS mxARRAY FROM MAT FILE !----------------------------------------------------------------- integer (kind=4) function matGetArray(mfp, name) integer (kind=4) :: mfp character (len=*):: name end function matGetArray ! FUNCTION THAT GETS NAMES OF MXARRAYS CONTAINED IN A MAT FILE !----------------------------------------------------------------- integer (kind=4) function matGetDir(mfp, num) integer (kind=4) :: mfp, num end function matGetDir END INTERFACE !******************************************************************** END MODULE MATLAB_API