diff options
Diffstat (limited to 'modules/mexlib/includes')
-rwxr-xr-x | modules/mexlib/includes/mex.h | 356 | ||||
-rwxr-xr-x | modules/mexlib/includes/sci_gateway.h | 35 |
2 files changed, 391 insertions, 0 deletions
diff --git a/modules/mexlib/includes/mex.h b/modules/mexlib/includes/mex.h new file mode 100755 index 000000000..d40e4b2f1 --- /dev/null +++ b/modules/mexlib/includes/mex.h @@ -0,0 +1,356 @@ + +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) INRIA + * Copyright (C) ENPC + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt + * + */ + +#ifdef __cplusplus +extern "C" { +#endif + +#ifndef SCI_MEX +#define SCI_MEX + +#ifdef WIN32 +#include <stddef.h> /*for LCC */ +#endif + +#define __MEX_INCLUDE__ +#include "stack-c.h" +#undef __MEX_INCLUDE__ + + typedef int Matrix; + typedef unsigned long int vraiptrst; +#ifndef __DEF_MXARRAY__ +#define __DEF_MXARRAY__ + typedef int mxArray; + typedef int Gatefunc (int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]); +#endif + + typedef int (*GatefuncH) (int nlhs, mxArray *plhs[], int nrhs, mxArray *prhs[]); + + typedef int (*FGatefuncH) (int *nlhs, mxArray *plhs[], int *nrhs, mxArray *prhs[]); + + typedef int (*Myinterfun) (char *, GatefuncH F); + + typedef int (*GT) (); + +#ifndef __DEF_TABLE_STRUCT__ +#define __DEF_TABLE_STRUCT__ + typedef struct table_struct + { + Myinterfun f; /** interface **/ + GT F; /** function **/ + char *name; /** its name **/ + } GenericTable; +#endif + +#define mxLOGICAL int +#define mxLogical int + +#define REAL 0 +#define COMPLEX 1 + +#ifndef NULL +#define NULL 0 +#endif + +#define mxCreateFull mxCreateDoubleMatrix + +#ifndef __cplusplus +#ifndef bool +#define bool int +#endif +#endif + + /* mexGetMatrixPtr - mexGetArrayPtr : NOT IN MATLAB API - V6.4 compatible*/ +#define mexGetMatrixPtr(name) mexGetArrayPtr(name, "caller") + + /* mexGetArray : NOT IN MATLAB API - V6.4 compatible*/ +#define mexGetArrayPtr(name,type) mexGetArray(name,type) + + void mexPrintf(const char *fmt, ...); + void C2F(mexprintf)(char *error_msg, int len); + + /* mexPutFull: NOT IN MATLAB API - V4 compatible */ + /** Put a matrix in Scilab Workspace */ +#define mexPutFull(name,m,n,ptrM,tag) \ + if ( ! C2F(cwritemat)(name,(c_local=m,&c_local),(c1_local=n,&c1_local),ptrM,strlen(name))) { \ + mexErrMsgTxt(_("mexPutFull failed\n"));return; } + + /* prototypes */ + + /* mexInfo: NOT IN MATLAB API - SCILAB SPECIFIC ?*/ + void mexInfo (char *); + + /* mexCheck: NOT IN MATLAB API - SCILAB SPECIFIC ?*/ + int mexCheck (char *, int ); + + mxArray *mxCreateCharMatrixFromStrings (int m, const char **str); + mxArray *mxCreateString (const char *string); + mxArray *C2F(mxcreatestring) (char *string, long int l); + /* mxcreatefull : NOT IN MATLAB API - v4 compatible */ + mxArray *C2F(mxcreatefull) (int *m, int *n, int *it); + mxArray *mxCreateCharArray (int ND, const int *size); + + mxArray *mxCreateCellArray (int ND, const int *size); + mxArray *mxCreateCellMatrix (int m, int n); + + mxArray *mxCreateStructArray (int ndim, const int *dims, int nfields, const char **field_names); + mxArray *mxCreateStructMatrix (int m, int n, int nfields, const char **field_names); + + mxArray *mxGetCell (const mxArray *ptr, int index); + + double mxGetScalar (const mxArray *ptr); + double C2F(mxgetscalar) (mxArray *ptr); + double *mxGetPi (const mxArray *ptr); + double * C2F(mxgetpi) (mxArray *ptr); + double *mxGetPr (const mxArray *ptr); + double * C2F(mxgetpr) (mxArray *ptr); + double mxGetInf (void); + double mxGetNaN (void); + double mxGetEps (void); + bool mxIsNaN (double x); + bool mxIsInf (double x); + bool mxIsFinite (double x); + int *mxGetDimensions (const mxArray *ptr); + int mxCalcSingleSubscript (const mxArray *ptr, int nsubs, const int *subs); + int mxGetNumberOfElements (const mxArray *ptr); + int mxGetNumberOfDimensions(const mxArray *ptr); + int mxGetNumberOfFields(const mxArray *ptr); + void *mxGetData(const mxArray *ptr); + void *mxGetImagData(const mxArray *ptr); + + void clear_mex(int nlhs, mxArray **plhs, int nrhs, mxArray **prhs); + + extern void errjump (); + + int mxGetM (const mxArray *ptr); + int C2F(mxgetm) (mxArray *ptr); + int mxGetN (const mxArray *ptr); + int C2F(mxgetn) (mxArray *ptr); + int mxGetString (const mxArray *ptr, char *str, int strl); + int C2F(mxgetstring) (mxArray *ptr, char *str, int *strl); + bool mxIsComplex (const mxArray *ptr); + int C2F(mxiscomplex) (mxArray *ptr); + /* mxisfull : NOT IN MATLAB API - v4 compatible */ + bool mxIsFull (const mxArray *ptr); + int C2F(mxisfull) (mxArray *ptr); + bool mxIsNumeric (const mxArray *ptr); + int C2F(mxisnumeric) (mxArray *ptr); + bool mxIsSparse (const mxArray *ptr); + int C2F(mxissparse) (mxArray *ptr); + /* mxisstring : NOT IN MATLAB API - v6.0 compatible */ + bool mxIsString (const mxArray *ptr); + int C2F(mxisstring) (mxArray *ptr); + int *mxGetIr (const mxArray *ptr); + int *mxGetJc (const mxArray *ptr); + + /** + * TODO : comment + * @param type + * @param m + * @param n + * @param it + * @param lr + * @param ptr + * @param type_len + * @return + */ + int C2F(createptr) (char *type, int *m, int *n, int *it, int *lr, int *ptr, long int type_len); + + /** + * TODO : comment + * @param m + * @param ptr + * @return + */ + int C2F(createstkptr) (int *m, vraiptrst *ptr); + + + /** + * TODO : comment + * @param nlhs + * @param plhs + * @param nrhs + * @param prhs + * @return + */ + int C2F(endmex) (int *nlhs, mxArray **plhs, int *nrhs, mxArray **prhs); + + + /** + * TODO : comment + * @param nlhs + * @param plhs + * @param nrhs + * @param prhs + * @return + */ + int C2F(initmex) (int *nlhs, mxArray **plhs, int *nrhs, mxArray **prhs); + + int C2F(mexcallscilab) (int *nlhs, mxArray **plhs, int *nrhs, mxArray **prhs, char *name, int namelen); + int C2F(mxcopyptrtoreal8) (mxArray *ptr, double *y, int *n); + int C2F(mxcopyreal8toptr) (double *y, mxArray *ptr, int *n); + int fortran_mex_gateway (char *fname, FGatefuncH F); + int mexAtExit (mxArray *ptr); + int mexCallSCILAB (int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name); + int mexCallMATLAB (int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name); + int mex_gateway (char *fname, GatefuncH F); + int mxGetElementSize (const mxArray *ptr); + int mxGetNzmax (const mxArray *ptr); + char *mxArrayToString (const mxArray *array_ptr); + bool mxIsDouble (const mxArray *ptr); + bool mxIsSingle (const mxArray *ptr); + bool mxIsLogical (const mxArray *ptr); + bool mexIsGlobal(const mxArray *ptr); + /* mxsetlogical: NOT IN MATLAB API - v6.5 compatible */ + void mxSetLogical (mxArray *ptr); + /* mxclearlogical: NOT IN MATLAB API - v6.5 compatible */ + void mxClearLogical (mxArray *ptr); + bool mxIsChar (const mxArray *ptr); + bool mxIsEmpty (const mxArray *ptr); + bool mxIsClass (const mxArray *ptr, const char *name); + bool mxIsCell (const mxArray *ptr); + bool mxIsStruct (const mxArray *ptr); + + bool mxIsInt8(const mxArray *ptr); + bool mxIsInt16(const mxArray *ptr); + bool mxIsInt32(const mxArray *ptr); + bool mxIsUint8(const mxArray *ptr); + bool mxIsUint16(const mxArray *ptr); + bool mxIsUint32(const mxArray *ptr); + /* mxIsUint64 missing */ + + void mxSetM(mxArray *ptr, int m); + void mxSetN(mxArray *ptr, int n); + void mxSetJc(mxArray *array_ptr, int *jc_data); + void mxSetIr(mxArray *array_ptr, int *ir_data); + void mxSetNzmax(mxArray *array_ptr, int nzmax); + void mxSetCell(mxArray *pa, int i, mxArray *value); + + /* mexGetArray: NOT IN MATLAB API - v6.5 compatible */ + mxArray *mexGetArray(char *name, char *workspace); + mxArray *mexGetVariable(const char *workspace, const char *name); + const mxArray *mexGetVariablePtr(const char *workspace, const char *name); + + unsigned long int C2F(mxcalloc)(unsigned int *n, unsigned int *size); + void *mxCalloc(size_t n, size_t size); + void *mxMalloc(size_t nsize); + void mxFree(void *ptr); + void mxDestroyArray(mxArray *ptr); + + /* mxCalloc_m : NOT IN MATLAB API - SCILAB SPECIFIC ?*/ + void *mxCalloc_m(unsigned int n, unsigned int size); + /* mxMalloc_m : NOT IN MATLAB API - SCILAB SPECIFIC ?*/ + void *mxMalloc_m(unsigned int nsize); + /* mxFree_m : NOT IN MATLAB API - SCILAB SPECIFIC ?*/ + void mxFree_m(void *); + /* mxfreematrix: NOT IN MATLAB API - v6.0 compatible */ + void mxFreeMatrix(mxArray *ptr); + void C2F(mxfreematrix)(mxArray *ptr); + + void mexErrMsgTxt(const char *error_msg); + void C2F(mexerrmsgtxt)(char *error_msg, int len); + int mexEvalString(const char *name); + void mexWarnMsgTxt(const char *error_msg); + /* mexprint: NOT IN MATLAB API - SCILAB SPECIFIC ?*/ + void mexprint(char* fmt, ...); + + int mxGetFieldNumber(const mxArray *ptr, const char *string); + mxArray *mxGetField(const mxArray *pa, int i, const char *fieldname); + void mxSetFieldByNumber(mxArray *array_ptr, int index, int field_number, mxArray *value); + void mxSetField (mxArray *pa, int i, const char *fieldname, mxArray *value); + + mxArray *mxGetFieldByNumber(const mxArray *ptr, int index, int field_number); + const char *mxGetFieldNameByNumber(const mxArray *array_ptr, int field_number); + mxLOGICAL *mxGetLogicals (const mxArray *array_ptr); + + /** + * TODO : comment + * @param x + * @return + */ + vraiptrst C2F(locptr)(void *x); + + typedef enum + { + mxCELL_CLASS = 1, + mxSTRUCT_CLASS, + mxOBJECT_CLASS, + mxCHAR_CLASS, + mxSPARSE_CLASS, + mxDOUBLE_CLASS, + mxSINGLE_CLASS, + mxINT8_CLASS, + mxUINT8_CLASS, + mxINT16_CLASS, + mxUINT16_CLASS, + mxINT32_CLASS, + mxUINT32_CLASS, + mxUNKNOWN_CLASS = 0 + } mxClassID; + + typedef enum { mxREAL, mxCOMPLEX } mxComplexity; + + mxClassID mxGetClassID(const mxArray *ptr); + /* mxGetName: NOT IN MATLAB API - v6.4 compatible */ + const char *mxGetName(const mxArray *array_ptr); + /* mxSetName: NOT IN MATLAB API - v6.4 compatible */ + void mxSetName( mxArray *pa, const char *s ); + void mxSetPr(mxArray *array_ptr, double *pr); + void mxSetPi(mxArray *array_ptr, double *pi); + void mxSetData(mxArray *array_ptr, void *pr); + mxArray *mxCreateNumericArray(int ndim, const int *dims, mxClassID classid, mxComplexity flag); + mxArray *mxCreateNumericMatrix(int m, int n, mxClassID classid, int cmplx_flag); + int mxSetDimensions(mxArray *array_ptr, const int *dims, int ndim); + mxArray *mxCreateDoubleMatrix(int m, int n, mxComplexity it); + mxArray *mxCreateDoubleScalar(double value); + mxArray *mxCreateSparse(int m, int n, int nzmax, mxComplexity cmplx); + mxArray *mxDuplicateArray(const mxArray *ptr); + + /* typedef uint16_T mxChar; */ + + /* typedef short int mxChar; */ + typedef unsigned short mxChar; + +#define INT8_T char +#define UINT8_T unsigned char +#define INT16_T short +#define UINT16_T unsigned short +#define INT32_T int +#define UINT32_T unsigned int +#define REAL32_T float + + typedef INT8_T int8_T; + typedef UINT8_T uint8_T; + typedef INT16_T int16_T; + typedef UINT16_T uint16_T; + typedef INT32_T int32_T; + typedef UINT32_T uint32_T; + typedef REAL32_T real32_T; + + typedef int mwSize; + typedef int mwIndex; + typedef mxArray * mwPointer; + +#endif /* SCI_MEX */ + +#ifdef __cplusplus +} +#endif + +/* generic mexfunction name */ +#ifdef __cplusplus +extern "C" { + void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]); +} +#endif diff --git a/modules/mexlib/includes/sci_gateway.h b/modules/mexlib/includes/sci_gateway.h new file mode 100755 index 000000000..73592a7dc --- /dev/null +++ b/modules/mexlib/includes/sci_gateway.h @@ -0,0 +1,35 @@ +/* + * Scilab ( http://www.scilab.org/ ) - This file is part of Scilab + * Copyright (C) DIGITEO - 2009 - Sylvestre LEDRU + * Copyright (C) 2009 - DIGITEO - Allan CORNET + * + * This file must be used under the terms of the CeCILL. + * This source file is licensed as described in the file COPYING, which + * you should have received as part of this distribution. The terms + * are also available at + * http://www.cecill.info/licences/Licence_CeCILL_V2.1-en.txt + * + */ +/*----------------------------------------------------------------------------*/ +typedef int (*GatefuncS) (char *fname, int l); +/*----------------------------------------------------------------------------*/ +/** + * This function manages the call of a native function which has been added + * through addinter with PutLhsVar (Compatibility Scilab 4.x and 5.1) + * + * @param fname name of the function + * @param F + * @param SharedLibraryName name of the library + */ +int sci_gateway(char *fname, GatefuncS F); +/*----------------------------------------------------------------------------*/ +/** +* This function manages the call of a native function which has been added +* through addinter without PutLhsVar in gateway (as for internal scilab functions) +* +* @param fname name of the function +* @param F +* @param SharedLibraryName name of the library +*/ +int sci_gateway_without_putlhsvar(char *fname, GatefuncS F); +/*----------------------------------------------------------------------------*/ |