From octave-sources-request at bevo dot che dot wisc dot edu Wed Feb 25 07:41:45 2004 Subject: new menu.m improved (menu2.m) this is the last time From: To: octave-sources at bevo dot che dot wisc dot edu Date: Wed, 25 Feb 2004 03:54:06 -0600 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 -*- ## at 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. ## at end deftypefn ## at 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