REXX Tips & Tricks, Version 2.80


Inf-HTML [About][Toc][Index] 0.9b (c) 1995 Peter Childs


Catching CTRL-C



In REXX programs that don't contain an error handler for CTRL-C, CTRL-C 
and CTRL-BREAK are processed by the REXX interpreter using the default 
error handler for CTRL-C. The default error handler for CTRL-C simply 
prints an error message and ends the program. Here are some ways to make 
the handling of CTRL-C und CTRL-BREAK more useful. 
To install your own error handler you can use either 

 
  signal on halt name myCTRLCHandler

or 

 
  call on halt name myCTRLCHandler


The adavantage of the call statement is that you can use the RETURN 
instruction in your CTRL-C handler to continue the execution of your 
program. Thus, using this method, it is possible, for example, to suppress 
CTRL-C depending on user input, to display specific messages, and so on 
(see the examples below). 
Note: Because of a bug in the CTRL-C handling of the CMD.EXE you should 
always use 

 
  cmd /c os2_command

to execute internal or external OS/2 commands from within a REXX program 
(see CTRL-Break & OS/2 commands, see also Information saved during 
subroutine & function execution). 
Examples: 

 
/* sample for a CTRL-C error handler using SIGNAL ON HALT ...       */

                    /* install the error handler for CTRL-C         */
  signal on halt name MyCtrlCHandler

                    /* this is an endless loop                      */
  do forever
     say 'Press CTRL-C to end this program ...'
  end /* do forever */

exit

/* error handler for CTRL-C                                         */
/*                                                                  */
/* This error handler simply ends the program.                      */
/*                                                                  */
MyCtrlCHandler:

                    /* reinstall the error handler for CTRL-C       */
  signal on halt name MyCtrlCHandler

  say 'CTRL-C pressed!'
exit

  

 
/* sample for a CTRL-C error handler using CALL ON HALT ...         */

                    /* install the error handler for CTRL-C         */
  call on halt name MyCtrlCHandler

  ctrlCPressed = 0

                    /* this is an endless loop                      */
  do until CtrlCPressed = 1
     say 'Press CTRL-C to end this program ...'
  end /* do until CtrlCPressed */

  say 'Program ends now'

                    /* end the program                              */
exit

/* error handler for CTRL-C                                         */
MyCtrlCHandler:

                    /* reinstall the error handler for CTRL-C       */
  signal on halt name MyCtrlCHandler

  say 'CTRL-C pressed (Execution was interrupted in line ' || sigl || ')!'
  say 'Press Y <RETURN> to end the program. Any other key to continue ...'
  if translate( strip( lineIn() ) ) = 'Y' then
  do
                    /* signal "end now" to the main program         */
    ctrlCPressed = 1
  end /* if */
                    /* continue the program at the interupted line  */
return


  

Inf-HTML End Run - Successful