new menu.m improved (menu2.m)
<[email protected]> Thu, 25 Dec 2003 19:48:51 -0600
| Newsgroups | gmane.comp.gnu.octave.sources |
|---|---|
| Message-ID | <[email protected]> |
Hi I rewrote the menu.m again in order to make it compatible with menu.m
(now I think this function can substitute manu.m), and now it can have a
lot of shortcuts for every option.
you can get this combination:
Title
[1] [a] hello
[2] [b] [B] bye
[3] [f] [F] [g] [s] see you
[4] [q] [Q] quit
using:
menu2("Title",["a";"hello"],["b";"B";"bye"];["f";"F";"g";"s";"see
you"];["q";"Q";"quit"])
It is possible I don't explain correctly becouse my poor english, if
somebody think the help must be cahanged, please correct it.
see the code
-----------------------
## Copyright (C) 1996, 1997 John W. Eaton
##
## This file is part of Octave.
##
## Octave 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 2, or (at your option)
## any later version.
##
## Octave 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 Octave; see the file COPYING. If not, write to the Free
## Software Foundation, 59 Temple Place - Suite 330, Boston, MA
## 02111-1307, USA.
## -*- texinfo -*-
## @deftypefn {Function File} {} menu (@var{title}, @var{opt1}, @dots{})
## Print a title string followed by a series of options. Each option will
## be printed along with a number. The return value is the number of the
## option selected by the user. This function is useful for interactive
## programs. There is no limit to the number of options that may be passed
## in, but it may be confusing to present more than will fit easily on one
## screen.
## @end deftypefn
## @seealso{disp, printf, and input}
## Author: pablo busto based on menu.m from jwe
function num = menu2 (t, varargin)
if (nargin < 2)
printf ("usage:");
printf ("menu3 (title, opt1, opt2, ...)\n");
printf ("where opt1 is [\"shorcut1\";\"shortcut2\",text]\n");
printf ("example: menu3 (tittle, [\"Aa..\";\"OptA\"],
[\"Bb..\";\"OptB\"]...)\n\n");
endif
## Force pending output to appear before the menu.
fflush (stdout);
## Don't send the menu through the pager since doing that can cause
## major confusion.
save_page_screen_output = page_screen_output;
unwind_protect
page_screen_output = 0;
if (! isempty (t))
disp (t);
printf ("\n");
endif
nopt = nargin - 1;
while (1)
for i = [1:nopt]
printf (" [%i] ",i);
[m,n]=size(varargin{i});
shortcuts(1,i)=num2str(i);
for i2=[1:(m-1)]
printf ("[%s] ",varargin{i}(i2,1));
shortcuts(i2+1,i)=varargin{i}(i2,1);
endfor
printf(" %s\n",varargin{i}(m,:));
#disp (varargin{i});
endfor
shortcuts;
[m2,n2]=size(shortcuts);
shortcuts=reshape(shortcuts,1,m2*n2);
printf ("\n");
s = input ("choose one : ", "s");
k=findstr(s,shortcuts); #k evals total coincidences
if !(isempty(k))
a=(k(1)); #Ichoose the 1st coincidence
num=floor(((a-1)/m2)+1);
else
num=0;
endif
if num ==0
printf ("\nerror: input invalid or out of range\n\n");
else
break;
endif
endwhile
unwind_protect_cleanup
page_screen_output = save_page_screen_output;
end_unwind_protect
endfunction
------------------
Regards,
Pablo Busto González