Aborting a program in an external routine

[Autolink] Menu

Normally you can't abort a REXX program in an external routine using the REXX statement exit. You have to use the OS/2 command exit to abort the main program. But this will also close the current OS/2 session ...

To avoid this misbehaviour, you either must call your REXX program with

 
  cmd /c main

or you use the following code at the start of your main REXX program:

 
/* ------------------------------------------------------------------ */
/* main.cmd                                                           */

  parse arg thisArgs 'FF'x pass

                    /* check the parameter to detect the current pass */
  if pass <> '$$PASS2$$' then
  do
                    /* cmd was called via "main"                      */
                    /* -> call it again using "cmd /c main"           */
    '@cmd /c %0 ' || thisArgs || 'FF'x  || '$$PASS2$$'
    exit
  end /* if */
                    /* cmd was called via "cmd /c main"               */

                    /* here goes the code of main .. */
  say 'Now MAIN really starts ...'
  say 'Arguments are "' || thisArgs || '"'

  say 'Now calling TEST2.CMD ...'
  call Test2.cmd

  say 'MAIN is still running ...'
exit 0
/* ------------------------------------------------------------------ */

/* ------------------------------------------------------------------ */
/* test2.cmd - sample external REXX routine to show how it works      */

  say "TEST2.CMD starts .."
  say "TEST2.CMD now aborts the MAIN program ..."
  '@exit'
/* ------------------------------------------------------------------ */


[Back: Turn on NOVALUE]
[Next: Programming techniques]