Problem: Octave doesn't have varargin and varargout. To get the equivalent in octave 2.1.x, you will need to modify your matlab function somewhat, or somewhat more if you are not using octave 2.0.x.

varargin: 2.1.x

Use lists instead of cell array (if only because 2.1.31 doesn't seem to have full cell array support).

You will need a new function prototype. The code

   function [blah] = fn(blah, varargin)
becomes
   function [blah] = fn(blah, ...)
      varargin = list(all_va_args);
The values in varargin{i} can then be referenced as nth(varargin, i). If you want to use more than one of these values in a function, e.g., t(varargin{:}), then you must use the apply function defined as follows:
   function [...] = apply(_name, ...)
      if nargin == 0
         usage("[r1, r2, ...] = apply(fn, v1, v2, ...)");
      endif

      ## build return value list
      if nargout == 0
         _exp = "";
      elseif nargout == 1
         _exp = "_r.r1 =";
      else
         _exp = "[_r.r1";
         for _i = 2:nargout
            _exp = [ _exp, ", _r.r", num2str(_i) ];
         endfor
         _exp = [ _exp, "]=" ];
      endif

      ## add function name
      _exp = [ _exp, _name ];

      ## build input parameter list
      _in = append(list(), va_all_args);
      if (length(_in) == 1)
         _exp = [ _exp, "(nth(_in, 1));" ];
      elseif length(_in) > 1
         _exp = [ _exp, "(nth(_in, 1)" ];
         for _i = 2: length(_in)
             _exp = [ _exp, ", nth(_in, ", num2str(_i), ")" ];
          endfor
         _exp = [ _exp, ");" ];
      endif

      ## evaluate
      eval(_exp);

      ## extract returned values
      for i = 1: nargout
         eval(["vr_val(_r.r", num2str(i), ");"]);
      endfor
   endfunction

varargin: 2.0.x

The situation is similar here, except that there is no support for lists. Instead, use structures to encode the list, define the functions list(), nth() and append() to work on this encoding, and replace length(_in) with rows(struct_elements(_in)).

varargout: 2.1.x

Varargout is actually easier to define, since the list syntax will work directly. First, replace:
   varargout = fn (blah)
with
   [...] = fn (blah)
      varargout = list();
Then, before any return you must punch in the return values to octave using:
   for i = 1:length(varargout)
      vr_val(nth(varargout, i));
   endfor
And that's it.

varargout: 2.0.x

Considerably more complicated. You must replace all those varargout{i} = expr; with eval(["varargout.r", num2str(i), "=expr;"]); in addition to what you do for 2.1.x.