function theResult = subsref(self, theStruct)

% ncrec/subsref -- Overloaded subscriting for ncrec.
%  subsref(self, theStruct) processes subscript references to self,
%   an "ncrec" object.  The basic syntax is self(theRecindex), which
%   returns the record-data struct corresponding to theRecindex.  If
%   theRecindex == 0, the struct contains all zeros, for use as a
%   template.  The syntax can be extended with a valid field name
%   and indices, as in "self(10).field(1:20, 2:2:30)".

% Also see: ncatt/subsasgn.
 
% Copyright (C) 1997 Dr. Charles R. Denham, ZYDECO.
%  All Rights Reserved.
%   Disclosure without explicit written consent from the
%    copyright owner does not constitute publication.
 
% Version of 07-Aug-1997 16:01:38.

if nargin < 1, help(mfilename), return, end

result = [];

s = theStruct;
theType = s(1).type;
theSubs = s(1).subs;
s(1) = [];

if isa(theSubs, 'cell'), theSubs = theSubs{1}; end

switch theType
case '()'
   theRecindex = theSubs;
   theVars = self.itsVars;
   theVarData = cell(1, length(theVars));
   theVarName = cell(1, length(theVars));
   for i = 1:length(theVars)
      theVarName{i} = name(theVars{i});
      if theRecindex > 0
         theVarData{i} = theVars{i}(theRecindex, :);
      else
         theSize = size(theVars{i});
         if length(theSize) == 1, theSize = [theSize 1]; end
         if length(theSize) == 2, theSize = [theSize 1]; end
         theVarData{i} = zeros(theSize(2:length(theSize)));
      end
   end
   result = cell2struct(theVarData, theVarName, 2);
   for i = 1:length(s)
      if ~iscell(s(i).subs), s(i).subs = {s(i).subs}; end
   end
   switch length(s)
   case 0
   case 1
      result = getfield(result, s(1).subs)
   case 2
      result = getfield(result, {1}, s(1).subs, s(2).subs)
   otherwise
      warning([' ## Illegal syntax: Too many substripts.'])
   end
otherwise
   warning([' ## Illegal syntax: "' theType '"'])
end

if nargout > 0
   theResult = result;
else
   disp(result)
end
