octave: Calling Other Functions in Mex-Files

 
 A.2.7 Calling Other Functions in Mex-Files
 ------------------------------------------
 
 It is possible to call other Octave functions from within a mex-file
 using ‘mexCallMATLAB’.  An example of the use of ‘mexCallMATLAB’ can be
 see in the example below.
 
      #include "mex.h"
      
      void
      mexFunction (int nlhs, mxArray* plhs[],
                   int nrhs, const mxArray* prhs[])
      {
        char *str;
      
        mexPrintf ("Starting file myfeval.mex\n");
      
        mexPrintf ("I have %d inputs and %d outputs\n", nrhs, nlhs);
      
        if (nrhs < 1 || ! mxIsChar (prhs[0]))
          mexErrMsgTxt ("ARG1 must be a function name");
      
        str = mxArrayToString (prhs[0]);
      
        mexPrintf ("I'm going to call the function %s\n", str);
      
        if (nlhs == 0)
          nlhs = 1;  // Octave's automatic 'ans' variable
      
        /* Cast prhs just to get rid of 'const' qualifier and stop compile warning */
        mexCallMATLAB (nlhs, plhs, nrhs-1, (mxArray**)prhs+1, str);
      
        mxFree (str);
      }
 
    If this code is in the file ‘myfeval.c’, and is compiled to
 ‘myfeval.mex’, then an example of its use is
 
      a = myfeval ("sin", 1)
      ⇒ Starting file myfeval.mex
         I have 2 inputs and 1 outputs
         I'm going to call the interpreter function sin
         a =  0.84147
 
    Note that it is not possible to use function handles or inline
 functions within a mex-file.