1 #include "mex.h"
2 
3 void
mexFunction(int nlhs,mxArray * plhs[],int nrhs,const mxArray * prhs[])4 mexFunction (int nlhs, mxArray *plhs[],
5              int nrhs, const mxArray *prhs[])
6 {
7   int i;
8   mwIndex j;
9   mxArray *v;
10   const char *keys[] = { "this", "that" };
11 
12   if (nrhs != 1 || ! mxIsStruct (prhs[0]))
13     mexErrMsgTxt ("ARG1 must be a struct");
14 
15   for (i = 0; i < mxGetNumberOfFields (prhs[0]); i++)
16     for (j = 0; j < mxGetNumberOfElements (prhs[0]); j++)
17       {
18         mexPrintf ("field %s(%d) = ", mxGetFieldNameByNumber (prhs[0], i), j);
19         v = mxGetFieldByNumber (prhs[0], j, i);
20         mexCallMATLAB (0, NULL, 1, &v, "disp");
21       }
22 
23   v = mxCreateStructMatrix (2, 2, 2, keys);
24 
25   mxSetFieldByNumber (v, 0, 0, mxCreateString ("this1"));
26   mxSetFieldByNumber (v, 0, 1, mxCreateString ("that1"));
27   mxSetFieldByNumber (v, 1, 0, mxCreateString ("this2"));
28   mxSetFieldByNumber (v, 1, 1, mxCreateString ("that2"));
29   mxSetFieldByNumber (v, 2, 0, mxCreateString ("this3"));
30   mxSetFieldByNumber (v, 2, 1, mxCreateString ("that3"));
31   mxSetFieldByNumber (v, 3, 0, mxCreateString ("this4"));
32   mxSetFieldByNumber (v, 3, 1, mxCreateString ("that4"));
33 
34   if (nlhs)
35     plhs[0] = v;
36 }
37