#include #include "mex.h" #include #include /* #define DEBUG 1 */ #define OBJ prhs[0] #define OPT prhs[1] void mexFunction(nlhs, plhs, nrhs, prhs) int nlhs, nrhs; mxArray *plhs[]; const mxArray *prhs[]; { static char s[1024],s1[1024],*sp; static int k,nrow,nnames; mxArray *outarray; double *yp; FILE *fin; if(nrhs<1)mexErrMsgTxt("Must have object name."); /* get obj name */ if(!mxIsChar(OBJ)) mexErrMsgTxt("Object name must be a string."); mxGetString(OBJ,s,255); fprintf(stderr,"%s\n",s); if(strstr(s,".mat")){ strcpy(s1,"load "); strcat(s1,s); mexEvalString(s1); return; } strcpy(s1,"/data5/globec/src/matlab/buildmat "); strcat(s1,"\""); strcat(s1,s); strcat(s1,"\""); /* get options if present */ if(nrhs==2){ if(!mxIsChar(OPT)) mexErrMsgTxt("Options must be a string."); mxGetString(OPT,s,255); strcat(s1," "); strcat(s1,s); } if(!(fin=popen(s1,"r"))) mexErrMsgTxt("Cannot connect to buildmat."); fread(&nnames,sizeof(int),1,fin); fread(&nrow,sizeof(int),1,fin); if(nnames == 0 || nnames>255) mexErrMsgTxt("Error in opening object."); fprintf(stderr,"nnames= %d, nrows = %d\n",nnames,nrow); outarray=mxCreateDoubleMatrix(nrow,1,mxREAL); for(k=0;k0){ fread(yp,nrow,sizeof(double),fin); mexPutArray(outarray,"caller"); } } pclose(fin); mxDestroyArray(outarray); }