samer@4: function P=prefs(varargin) samer@4: % prefs - manage name-value map as a structure samer@4: % Values can be retreived with defaults using GETPARAM samer@4: % samer@4: % Arguments can be name value pairs, eg samer@4: % opts=prefs('foo',5,'bar',7) samer@4: % opts.foo=4 samer@4: % opts.bar=7 samer@4: % samer@4: % Or structures samer@4: % opts=prefs(defopts,'foo',5) samer@4: % samer@4: % Later arguments override earlier ones. A typical usage is samer@4: % with variable argument lists and GETPARAM, eg samer@4: % samer@4: % function somefun(a,b,varargin) samer@4: % ... samer@4: % opts=prefs('foo',5,varargin{:}); samer@4: % fooness=opts.foo; samer@4: % barness=getparam(opts,'bar',12); samer@4: % samer@4: % See also: GETPARAM, GETFIELD, ISFIELD samer@4: samer@4: P=struct; samer@4: n=1; samer@4: while n<=length(varargin) samer@4: arg=varargin{n}; samer@4: if isstruct(arg) samer@4: P=cpfields(fieldnames(arg),arg,P); samer@4: elseif iscell(arg) samer@4: pairs=arg; samer@4: for k=1:length(pairs) samer@4: P=setfield(P,pairs{k}{1},pairs{k}{2}); samer@4: end samer@4: else samer@4: P=setfield(P,varargin{n},varargin{n+1}); samer@4: n=n+1; samer@4: end samer@4: n=n+1; samer@4: end samer@4: