IRootLab
An Open-Source MATLAB toolbox for vibrational biospectroscopy
menu.m
Go to the documentation of this file.
1 %>@brief Text-based menu
2 %>@file
3 %>@ingroup string usercomm
4 %
5 %> @param title
6 %> @param options Cell of strings
7 %> @param cancel_label ='Cancel'. Label to show at last "zero" option
8 %> @param flag_allow_empty =0 Whether to allow empty option
9 %> @return option An integer: []; 0-Back/Cancel/etc; 1, 2, ...
10 function option = menu(title, options, cancel_label, flag_allow_empty)
11 
12 if nargin < 3 || isempty(cancel_label)
13  cancel_label = 'Cancel';
14 end;
15 
16 if ~exist('flag_allow_empty', 'var')
17  flag_allow_empty = 0;
18 end;
19 
20 no_options = length(options);
21 
22 flag_ok = 0;
23 ch = 'O';
24 while 1
25  fprintf('\n');
26  fprintf([' ' ch*ones(1, length(title)+8) '\n']);
27  fprintf([' ' ch*ones(1, 3) ' ' title ' ' ch*ones(1, 3) '\n']);
28  fprintf([' ' ch*ones(1, length(title)+8) '\n']);
29  for i = 1:no_options
30  fprintf(' %d - %s\n', i, options{i});
31  end;
32  fprintf(' 0 - << (*%s*)\n', cancel_label);
33  option = input('% ');
34 
35  n_try = 0;
36  while 1
37  if n_try >= 10
38  fprintf('You are messing up');
39  break;
40  end;
41 
42  flag_no = 0;
43  if isempty(option) && flag_allow_empty
44  flag_ok = 1;
45  break;
46  end;
47  for i = 1:length(option)
48  if option(i) < 0 || option(i) > no_options
49  flag_no = 1;
50  break;
51  end;
52  end;
53  if ~flag_no
54  flag_ok = 1;
55  break;
56  end;
57 
58  fprintf('Invalid option, range is [%d, %d].', 0, no_options);
59 
60  n_try = n_try+1;
61  option = input('% ');
62 
63 
64  end;
65 
66  if flag_ok
67  break;
68  end;
69 end;
70 
71