00001
00002
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>
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
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
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
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
00296
00297
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
00318
00319 #ifdef __cplusplus
00320 }
00321 #endif
00322
00323
00324 #ifdef __cplusplus
00325 extern "C" {
00326 void mexFunction(int nlhs, mxArray *plhs[], int nrhs, const mxArray *prhs[]);
00327 }
00328 #endif