Simple Yes/No question

[Autolink] Menu

 
/* example for a simple yes/no question without loading the dll       */
/* REXXUTIL                                                           */

                        /* example call ...                           */
  thisKey = AskUser( "YN", "Enter Y or N: " )
  say "You entered '" || thisKey || "'."

exit

/* ------------------------------------------------------------------ */
/* AskUser - get input from the user                                  */
/*                                                                    */
/* Usage:    AskUser akeys, prompt                                    */
/*                                                                    */
/* where:                                                             */
/*           akeys - allowed keys (all keys are translated to         */
/*                   uppercase)                                       */
/*           prompt - prompt for the ask                              */
/*                                                                    */
/* Returns:  the pressed key in uppercase                             */
/*                                                                    */
/* note:     This routine uses ESC sequences to position the cursor.  */
/*           This routine only works if you do not use the            */
/*           last line of the screen for the prompt!                  */
/*                                                                    */
AskUser: PROCEDURE
  parse arg aKeys, prompt

  aKeys = translate( akeys )

                         /* set word wrap off                         */
  call CharOut , "1B"x || "[7l"

  if prompt <> "" then
    call charout ,  prompt

  thisKey = " "
  do UNTIL pos( thisKey ,  aKeys ) <> 0
    call charOut ,"1B"x || "[s" || "1B"x || "[K"
    thisKey = translate( charIn() )
    call CharOut , "1B"x || "[u"
                        /* delete the CR/LF sequence from             */
                        /* the keyboard buffer!                       */
    dummy = lineIn()

  end /* do until ... */

                         /* set word wrap on again                    */
  call CharOut , "1B"x || "[7h"

                        /* do a linefeed                              */
  say ""

RETURN thisKey


[Back: Simulate the BASIC INPUT command]
[Next: Choice routine for REXX]