From octave-sources-request at bevo dot che dot wisc dot edu Thu Dec 25 22:04:58 2003 Subject: new menu.m improved (menu2.m) From: To: octave-sources at bevo dot che dot wisc dot edu Date: Thu, 25 Dec 2003 19:48:51 -0600 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 -*- ## 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 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