mex.h

Go to the documentation of this file.
00001 /*-----------------------------------------------------------------------------------*/
00002 /* INRIA/ENPC */
00003 /*-----------------------------------------------------------------------------------*/
00004 
00005 #ifdef __cplusplus
00006 extern "C" {
00007 #endif
00008 
00009 #ifndef SCI_MEX 
00010 #define SCI_MEX 
00011 
00012 
00013 #ifdef WIN32
00014         #include <stddef.h> /*for LCC */
00015 #endif
00016 
00017 #include "stack-c.h"
00018 #include "sciprint.h"
00019 
00020 typedef int Matrix;
00021 typedef unsigned long int vraiptrst;
00022 typedef int mxArray;
00023 
00024 typedef int (*GatefuncH) __PARAMS((int nlhs,mxArray *plhs[],int nrhs,
00025                                  mxArray *prhs[]));
00026 
00027 typedef int (*FGatefuncH) __PARAMS((int *nlhs,mxArray *plhs[],int *nrhs,
00028                                  mxArray *prhs[]));
00029 
00030 typedef int Gatefunc __PARAMS((int nlhs,mxArray *plhs[],int nrhs,
00031                                  mxArray *prhs[]));
00032 typedef int (*GatefuncS) __PARAMS((char *fname, int l));
00033 typedef int (*Myinterfun) __PARAMS((char *, GatefuncH F));
00034 
00035 typedef int (*GT) ();
00036 
00037 typedef struct table_struct {
00038   Myinterfun f;    
00039   GT F;     
00040   char *name;      
00041 } GenericTable;
00042 
00043 #define mxLOGICAL int
00044 #define mxLogical int
00045 
00046 #define REAL 0
00047 #define COMPLEX 1
00048 
00049 #ifndef NULL
00050 #define NULL 0
00051 #endif
00052 
00053 #define mxCreateFull mxCreateDoubleMatrix
00054 #define bool int
00055 
00056 #define mexGetMatrixPtr(name) mexGetArrayPtr(name, "caller")
00057 
00058 #define mexGetArrayPtr(name,type) mexGetArray(name,type) 
00059 
00060 
00061 #ifdef __STDC__ 
00062 void mexPrintf __PARAMS((char *fmt,...));
00063 #else 
00064 void  mexPrintf __PARAMS((char *fmt,...)); 
00065 #endif
00066 
00068 #define mexPutFull(name,m,n,ptrM,tag) \
00069   if ( ! C2F(cwritemat)(name,(c_local=m,&c_local),(c1_local=n,&c1_local),ptrM,strlen(name))) {  \
00070       mexErrMsgTxt("mexPutFull failed\r\n");return; }
00071 
00072 /* prototypes */
00073 
00074 void mexInfo __PARAMS((char *)); 
00075 int mexCheck __PARAMS((char *,int )); 
00076 mxArray *mxCreateCharMatrixFromStrings __PARAMS((int m, const char **str));
00077 mxArray *mxCreateString __PARAMS((const char *string));
00078 mxArray *C2F(mxcreatestring)  __PARAMS((char *string, long int l));
00079 mxArray *C2F(mxcreatefull)  __PARAMS((int *m, int *n, int *it));
00080 /* mxArray *mxCreateFull __PARAMS((int m, int n, int it)); */
00081 mxArray *mxCreateCharArray __PARAMS((int ND, const int *size));
00082 
00083 mxArray *mxCreateCellArray __PARAMS((int ND, const int *size));
00084 mxArray *mxCreateCellMatrix __PARAMS((int m, int n));
00085 
00086 mxArray *mxCreateStructArray __PARAMS((int ndim, const int *dims, int nfields, const char **field_names));
00087 mxArray *mxCreateStructMatrix __PARAMS((int m, int n, int nfields, const char **field_names));
00088 
00089 
00090 mxArray *mxGetCell __PARAMS((const mxArray *ptr, int index));
00091 
00092 double C2F(mxgetscalar)  __PARAMS((mxArray *ptr));
00093 double * C2F(mxgetpi)  __PARAMS((mxArray *ptr));
00094 double * C2F(mxgetpr)  __PARAMS((mxArray *ptr));
00095 double *mxGetPi __PARAMS((const mxArray *ptr));
00096 double *mxGetPr __PARAMS((const mxArray *ptr));
00097 double mxGetScalar __PARAMS((const mxArray *ptr));
00098 double mxGetInf __PARAMS((void));
00099 double mxGetNaN __PARAMS((void));
00100 double mxGetEps __PARAMS((void));
00101 bool mxIsNaN __PARAMS((double x));
00102 bool mxIsInf __PARAMS((double x));
00103 bool mxIsFinite __PARAMS((double x));
00104 int *mxGetDimensions __PARAMS((const mxArray *ptr));
00105 int mxCalcSingleSubscript __PARAMS((const mxArray *ptr, int nsubs, const int *subs));
00106 int mxGetNumberOfElements __PARAMS((const mxArray *ptr));
00107 int mxGetNumberOfDimensions __PARAMS((const mxArray *ptr));
00108 int mxGetNumberOfFields __PARAMS((const mxArray *ptr));
00109 void *mxGetData __PARAMS((const mxArray *ptr));
00110 void *mxGetImagData __PARAMS((const mxArray *ptr));
00111 extern void diary_nnl __PARAMS((char *str,int *n));
00112 extern int getdiary __PARAMS(());
00113 
00114 void clear_mex(integer nlhs, mxArray **plhs, integer nrhs, mxArray **prhs);
00115 
00116 extern void errjump __PARAMS((void));
00117 int  C2F(mxgetm)  __PARAMS((mxArray *ptr));
00118 int  C2F(mxgetn)  __PARAMS((mxArray *ptr));
00119 int  C2F(mxgetstring)  __PARAMS((mxArray *ptr, char *str, int *strl));
00120 int  C2F(mxiscomplex)  __PARAMS((mxArray *ptr));
00121 int  C2F(mxisfull)  __PARAMS((mxArray *ptr));
00122 int  C2F(mxisnumeric)  __PARAMS((mxArray *ptr));
00123 int  C2F(mxissparse)  __PARAMS((mxArray *ptr));
00124 int  C2F(mxisstring)  __PARAMS((mxArray *ptr));
00125 int *mxGetIr __PARAMS((const mxArray *ptr));
00126 int *mxGetJc __PARAMS((const mxArray *ptr));
00127 
00139 int C2F(createptr)  __PARAMS((char *type, int *m, int *n, int *it, int *lr, int *ptr, long int type_len));
00140 
00147 int C2F(createstkptr)  __PARAMS((integer *m, vraiptrst *ptr));
00148 
00149 
00158 int C2F(endmex)  __PARAMS((integer *nlhs, mxArray **plhs, integer *nrhs, mxArray **prhs));
00159 
00160 
00169 int C2F(initmex)  __PARAMS((integer *nlhs, mxArray **plhs, integer *nrhs, mxArray **prhs));
00170 
00171 int C2F(mexcallscilab)  __PARAMS((integer *nlhs, mxArray **plhs, integer *nrhs, mxArray **prhs, char *name, int namelen));
00172 int C2F(mxcopyptrtoreal8)  __PARAMS((mxArray *ptr, double *y, integer *n));
00173 int C2F(mxcopyreal8toptr)  __PARAMS((double *y, mxArray *ptr, integer *n));
00174 int fortran_mex_gateway __PARAMS((char *fname, FGatefuncH F));
00175 int mexAtExit __PARAMS((mxArray *ptr));
00176 int mexCallSCILAB __PARAMS((int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name));
00177 int mexCallMATLAB __PARAMS((int nlhs, mxArray **plhs, int nrhs, mxArray **prhs, const char *name));
00178 int mex_gateway __PARAMS((char *fname, GatefuncH F));
00179 int mxGetElementSize __PARAMS((const mxArray *ptr));
00180 int mxGetM __PARAMS((const mxArray *ptr));
00181 int mxGetN __PARAMS((const mxArray *ptr));
00182 int mxGetNzmax __PARAMS((const mxArray *ptr));
00183 int mxGetString __PARAMS((const mxArray *ptr, char *str, int strl));
00184 char *mxArrayToString __PARAMS((const mxArray *array_ptr));
00185 bool mxIsComplex __PARAMS((const mxArray *ptr));
00186 bool mxIsDouble __PARAMS((const mxArray *ptr));
00187 bool mxIsSingle __PARAMS((const mxArray *ptr));
00188 bool mxIsFull __PARAMS((const mxArray *ptr));
00189 bool mxIsNumeric __PARAMS((const mxArray *ptr));
00190 bool mxIsSparse __PARAMS((const mxArray *ptr));
00191 bool mxIsLogical __PARAMS((const mxArray *ptr));
00192 bool mexIsGloball __PARAMS((const mxArray *ptr));
00193 void mxSetLogical __PARAMS((mxArray *ptr));
00194 void mxClearLogical __PARAMS((mxArray *ptr));
00195 bool mxIsString __PARAMS((const mxArray *ptr));
00196 bool mxIsChar __PARAMS((const mxArray *ptr));
00197 bool mxIsEmpty __PARAMS((const mxArray *ptr));
00198 bool mxIsClass __PARAMS((const mxArray *ptr, const char *name));
00199 bool mxIsCell __PARAMS((const mxArray *ptr));
00200 bool mxIsStruct __PARAMS((const mxArray *ptr));
00201 
00202 bool mxIsInt8 __PARAMS((const mxArray *ptr));
00203 bool mxIsInt16 __PARAMS((const mxArray *ptr));
00204 bool mxIsInt32 __PARAMS((const mxArray *ptr));
00205 bool mxIsUint8 __PARAMS((const mxArray *ptr));
00206 bool mxIsUint16 __PARAMS((const mxArray *ptr));
00207 bool mxIsUint32 __PARAMS((const mxArray *ptr));
00208 
00209 void mxSetM __PARAMS((mxArray *ptr, int m));
00210 void mxSetN __PARAMS((mxArray *ptr, int n));
00211 void mxSetJc  __PARAMS((mxArray *array_ptr, int *jc_data));
00212 void mxSetIr  __PARAMS((mxArray *array_ptr, int *ir_data));
00213 void mxSetNzmax  __PARAMS((mxArray *array_ptr, int nzmax));
00214 void mxSetCell __PARAMS((mxArray *pa, int i, mxArray *value));
00215 
00216 int sci_gateway __PARAMS((char *fname, GatefuncS F));
00217 mxArray *mexGetArray __PARAMS((char *name, char *workspace));
00218 
00219 mxArray *mexGetVariable __PARAMS((const char *workspace, const char *name));
00220 const mxArray *mexGetVariablePtr __PARAMS((const char *workspace, const char *name));
00221 
00222 unsigned long int C2F(mxcalloc)  __PARAMS((unsigned int *n, unsigned int *size));
00223 /*void  C2F(mexprintf)   __PARAMS((char *fmt,...) );*/
00224 void  C2F(mexprintf)  __PARAMS((char *error_msg, int len));
00225 
00226 void *mxCalloc __PARAMS((size_t n, size_t size));
00227 void *mxMalloc __PARAMS((size_t nsize));
00228 
00229 void *mxCalloc_m __PARAMS((unsigned int n, unsigned int size));
00230 void *mxMalloc_m __PARAMS((unsigned int nsize));
00231 void  mxFree_m __PARAMS((void *));
00232 
00233 void C2F(mexerrmsgtxt)  __PARAMS((char *error_msg, int len));
00234 void C2F(mxfreematrix)  __PARAMS((mxArray *ptr));
00235 void mexErrMsgTxt __PARAMS((char *error_msg));
00236 int  mexEvalString __PARAMS((char *name));
00237 void mexWarnMsgTxt __PARAMS((char *error_msg));
00238 void mexprint __PARAMS((char* fmt,...));
00239 void mxFree __PARAMS((void *ptr));
00240 void mxFreeMatrix __PARAMS((mxArray *ptr));
00241 void mxDestroyArray __PARAMS((mxArray *ptr));
00242 int mxGetFieldNumber __PARAMS((const mxArray *ptr, const char *string));
00243 mxArray *mxGetField __PARAMS((const mxArray *pa, int i, const char *fieldname));
00244 void  mxSetFieldByNumber __PARAMS((mxArray *array_ptr, int index, int field_number, mxArray *value));
00245 void mxSetField __PARAMS((mxArray *pa, int i, const char *fieldname, mxArray *value));
00246 
00247 
00248 mxArray *mxGetFieldByNumber __PARAMS((const mxArray *ptr, int index, int field_number));
00249 const char *mxGetFieldNameByNumber __PARAMS((const mxArray *array_ptr, int field_number));
00250 mxLOGICAL *mxGetLogicals __PARAMS((mxArray *array_ptr));
00251 
00252 
00258 vraiptrst C2F(locptr) __PARAMS((void *x));
00259 
00260 typedef enum {
00261         mxCELL_CLASS = 1,
00262         mxSTRUCT_CLASS,
00263         mxOBJECT_CLASS,
00264         mxCHAR_CLASS,
00265         mxSPARSE_CLASS,
00266         mxDOUBLE_CLASS,
00267         mxSINGLE_CLASS,
00268         mxINT8_CLASS,
00269         mxUINT8_CLASS,
00270         mxINT16_CLASS,
00271         mxUINT16_CLASS,
00272         mxINT32_CLASS,
00273         mxUINT32_CLASS,
00274         mxUNKNOWN_CLASS = 0
00275 } mxClassID;
00276 
00277 typedef enum { mxREAL, mxCOMPLEX } mxComplexity; 
00278 
00279 
00280 
00281 mxClassID mxGetClassID __PARAMS((const mxArray *ptr));
00282 const char *mxGetName __PARAMS((const mxArray *array_ptr));
00283 void mxSetName __PARAMS(( mxArray    *pa,    const char *s ));
00284 void mxSetPr __PARAMS((mxArray *array_ptr, double *pr));
00285 void mxSetPi __PARAMS((mxArray *array_ptr, double *pi));
00286 void mxSetData __PARAMS((mxArray *array_ptr, void *pr));
00287 mxArray *mxCreateNumericArray __PARAMS((int ndim, const int *dims, mxClassID classid, mxComplexity flag));
00288 mxArray *mxCreateNumericMatrix __PARAMS((int m, int n, mxClassID classid, int cmplx_flag));
00289 int mxSetDimensions __PARAMS((mxArray *array_ptr, const int *dims, int ndim));
00290 mxArray *mxCreateDoubleMatrix __PARAMS((int m, int n, mxComplexity it));
00291 mxArray *mxCreateDoubleScalar __PARAMS((double value));
00292 mxArray *mxCreateSparse __PARAMS((int m, int n, int nzmax, mxComplexity cmplx));
00293 mxArray *mxDuplicateArray __PARAMS((const mxArray *ptr));
00294 
00295 /* typedef uint16_T mxChar; */
00296 
00297 /* typedef short int mxChar; */
00298 typedef unsigned short mxChar;
00299 
00300 #define INT8_T char
00301 #define UINT8_T unsigned char
00302 #define INT16_T short
00303 #define UINT16_T unsigned short
00304 #define INT32_T int
00305 #define UINT32_T unsigned int
00306 #define REAL32_T float
00307 
00308 
00309 typedef INT8_T int8_T;
00310 typedef UINT8_T uint8_T;
00311 typedef INT16_T int16_T;
00312 typedef UINT16_T uint16_T;
00313 typedef INT32_T int32_T;
00314 typedef UINT32_T uint32_T;
00315 typedef REAL32_T real32_T;
00316 
00317 #endif /* SCI_MEX  */
00318 
00319 #ifdef __cplusplus
00320 }
00321 #endif
00322 
00323 /* generic mexfunction name */
00324 #ifdef __cplusplus
00325 extern "C" {
00326   void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]);
00327 }
00328 #endif

Generated on Sun Mar 4 15:03:58 2007 for Scilab [trunk] by  doxygen 1.5.1