function theResult = oct_subsasgn(self, theStruct, other)

% ncrec/oct_subsasgn -- Overloaded assignment for ncrec.
%  oct_subsasgn(self, theStruct, other) processes the
%   subscripted assignment for self, an "ncrec" object.
%   The self is returned.  The only allowed syntax
%   is self(theRecindices) = theRecs, for an array
%   of record-structures.

% Also see: ncrec/subsref.
 
% 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 < 3, 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

% N.B. Should be expanded to "self(...).field(...)" syntax.
%  The ncrec/subsref method already complies.

switch theType
case '()'
   theRecindices = theSubs;
   theVars = self.itsVars;
   if isa(other, 'cell'), other = other{1}; end
   theRecs = other;
   theFields = fieldnames(theRecs);
   for k = 1:length(theVars)
      for j = 1:length(theRecindices)
         if theRecindices(j) > 0
            for i = 1:length(theFields)
               if strcmp(name(theVars{k}), theFields{i})
                  a = ['theVars{k}(' int2str(theRecindices(j)) ', :)' ...
                       ' = theRecs(' int2str(j) ').' theFields{i} ';'];
                  eval(a);
               end
            end
         end
      end
   end
   result = self;
otherwise
   warning([' ## Illegal syntax: "' theType '"'])
end

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