-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathparse_keyval.m
70 lines (67 loc) · 2.05 KB
/
parse_keyval.m
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
% This file is part of jack_playrec
% Copyright (C) 2018 Hörtech gGmbH
% Copyright (C) 2014 2015 Giso Grimm
%
% This program is free software: you can redistribute it and/or modify
% it under the terms of the GNU General Public License as published by
% the Free Software Foundation, either version 3 of the License, or
% (at your option) any later version.
%
% This program is distributed in the hope that it will be useful,
% but WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
% GNU General Public License for more details.
% You should have received a copy of the GNU General Public License
% along with this program. If not, see <https://www.gnu.org/licenses/>.
function sCfg = parse_keyval( sCfg, sHelp, varargin )
if (numel(varargin) == 1) && strcmp(varargin{1},'help')
sOut = sprintf(' List of valid keys:\n');
fields = fieldnames(sCfg);
for k=1:numel(fields)
field = fields{k};
helps = '';
if isfield(sHelp,field)
helps = sHelp.(field);
end
defval = '?';
if isnumeric(sCfg.(field)) || islogical(sCfg.(field))
defval = mat2str(sCfg.(field));
end
if ischar(sCfg.(field))
defval = sCfg.(field);
end
if iscellstr(sCfg.(field))
defval = '{';
if isempty(sCfg.(field))
defval(end+1) = ' ';
end
for ke=1:numel(sCfg.(field))
defval = sprintf('%s''%s'',',defval,sCfg.(field){ke});
end
defval(end) = '}';
end
sOut = sprintf('%s - %s:\n %s\n (default: %s)\n\n',...
sOut,field, ...
helps,defval);
end
disp(sOut);
sCfg = [];
return
end
if isempty(varargin)
return;
end
if mod(numel(varargin),2) > 0
error('Invalid (odd) number of input arguments.');
end
for k=1:2:numel(varargin)
if ~ischar(varargin{k})
error(sprintf('key %d is not a string.',k));
end
field = lower(varargin{k});
if ~isfield(sCfg,field)
error(sprintf('key %d (''%s'') is not a valid key.',k, ...
field));
end
sCfg.(field) = varargin{k+1};
end