new menu.m improved (menu2.m) this is the last time
<[email protected]> Wed, 25 Feb 2004 03:54:06 -0600
| Newsgroups | gmane.comp.gnu.octave.sources |
|---|---|
| Message-ID | <[email protected]> |
I discovered a very important bug in my previous menu2.m (it resulted an
error if there were more than 10 arguments).
Now it is resolved, finished and without bugs (I hope so).
Of course, ir is compatible with the existent menu.m and the old menu2.m
Sorry the inconvenience if anybody were using it.
It can be seen in sourceforge.net/projects/wave2mid (version 0.2.7).
Here are 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
num=[]; %Condition for while
while ((num==[])||(num==0))
nopt = nargin - 1;
for i1=[1:nopt] %writing menu
printf("[%i]\t",i1);
[m,n]=size(varargin{i1});%m is the interesting
for i2=[1:m-1]
printf(" [%s]\t",deblank(varargin{i1}(i2,:))); %erase
the spaces in the end
endfor
printf(" %s\n",varargin{i1}(m,:));
endfor
s1=input("Choose one : ","s");%take s like a string
%checking if it is a number
s1num=str2num(s1);
if ((s1num>=1)&&(s1num<=nopt))
num=s1num;
endif
if num==[]
%checking if it is a shortcut
for i1=[nopt:-1:1] %looking for
[m,n]=size(varargin{i1});%m is the interesting
for i2=[1:m]
(varargin{i1}(i2,1));
s1=deblank(s1);
s2=deblank(sprintf("%s",varargin{i1}(i2,:)));
if strcmp(s1,s2)
num=i1;
endif
endfor
endfor
endif
%printing error
if ((num==[])||(num==[0]))
printf ("error: input invalid or out of range\n");
endif
endwhile
unwind_protect_cleanup
page_screen_output = save_page_screen_output;
end_unwind_protect
endfunction