by Richard Russell, May 2006

BBC BASIC for Windows allows you to execute an external program using the *RUN command. The program can be a Windows GUI program, a Windows console program or an MS-DOS program. Both Windows console programs and MS-DOS programs have the ability to return an exit code which may, for example, indicate whether the program completed successfully or not. Listed below are three methods of discovering the exit code:

Method 1


The routine below allows the exit code to be discovered by running the external utility via a batch file:

      F% = OPENOUT "RUN.BAT"
      PRINT #F%, program$ : BPUT #F%,10
      PRINT #F%, "ECHO %ERRORLEVEL% > EXITCODE.TXT" : BPUT#F%,10
      CLOSE #F%
      *RUN RUN.BAT
      F% = OPENIN "EXITCODE.TXT"
      INPUT #F%, exitcode$
      CLOSE #F%
      exitcode% = VAL(exitcode$)
The variable program$ should contain the name of the external program plus any command line parameters it needs. Note that for this routine to execute correctly the current directory must be valid and writeable.

Some standard DOS commands return exit codes which you may wish to test. For example the XCOPY command returns one of the following values:
  • 0: Files were copied without error.
  • 1: No files were found to copy.
  • 2: The user pressed CTRL+C to terminate xcopy.
  • 4: There is not enough memory or disk space, or syntax error.
  • 5: Disk write error occurred.

Method 2


Run the external program using the function FNexecuteandwait which is documented in the article Waiting for an external program to terminate (scroll about two-thirds of the way down). The function returns the exit code.

Method 3

by Jon Ripley, May 2006

Add code similar to the following to the initialisation routine of your program:
      SYS "GetModuleHandle", "MSVCRT.DLL" TO hdll%
      SYS "GetProcAddress", hdll%, "system" TO hsys%
Here hdll% the handle of the C run-time library used by the BBC BASIC interpreter and hsys% is a pointer to the system() function the library provides.

To execute a command anywhere in your program use code similar to the following:
      SYS hsys%, program$ TO exitcode%
The variable program$ should contain the name of the external program plus any command line parameters it needs. When the program returns exitcode% will contain the exit code of the program.