## 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,text] = menu2 (t, varargin)


if ((nargin < 2)||(nargout>2))
    printf ("[num,tex]=menu2 (title, opt1, opt2, ...)\n");
    printf ("where opt1 is [\"text1\",\"text2\",\"text3\",...] and\n");
    printf ("opt2,3... is [\"shorcut1\";\"shortcut2\",text]\n");
    printf ("example:  menu2 (tittle, [\"Aa..\";\"OptA\"], [\"Bb..\";\"OptB\"]...)\n\n");
    usage ('');
  endif
  

  ## Force pending output to appear before the menu.

  fflush (stdout);

   save_page_screen_output = page_screen_output;

  unwind_protect

    page_screen_output = 0;

    if (! isempty (t))
        disp (t);
        printf ("\n");
    endif

    
    
	if nargout==2 %if it is ~=0||1
		origin=2;
		%writing the vector of the textouts
		textout=varargin{1};
	else
		origin=1;
	endif
	
	%Number of OPTative arguments
	nopt = nargin-origin;
	

	num=0; %Condition for while
    
    while (num==0)
        for i1=[origin:(nopt+origin-1)]     %writing menu
            printf("[%i]\t",i1-origin+1);
            [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;
	    if (round(num)~=num)	%check if it is integer
		num=0;		%(problems with the shortcut 'e')
	    endif
        endif
	
    
        if num==0
                %checking if it is a shortcut
		%[(nopt+origin-1):-1:origin]
                for i1=[(nopt+origin-1):-1:origin]     %looking for
			[m,n]=size(varargin{i1});%m is the interesting
                        for i2=[1:m]
                                s1=deblank(s1);
                                s2=deblank(sprintf("%s",varargin{i1}(i2,:)));
                                if strcmp(s1,s2)
                                        num=i1+1-origin;
                                endif	
                        endfor
                endfor
        endif
		
	if nargout==2
		text=deblank(textout(num,:));
	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
