Retro video games delivered to your door every month!
Click above to get retro games delivered to your door ever month!
X-Hacker.org- FORCE Data Base Compiler - ############################################################################## http://www.X-Hacker.org [<<Previous Entry] [^^Up^^] [Next Entry>>] [Menu] [About The Guide]
##############################################################################
###+----------+###############################################################
#+-| CRITICAL |------------------------------------+##########################
#| +----------+ Assigns a User Defined Function to |##########################
#|              the DOS critical error handler.    |##########################
#+-------------------------------------------------+##########################
##############################################################################
##############################################################################
#+--| Summary |----------------+##############################################
#|     #INCLUDE system.hdr     |##############################################
#+-----------------------------+##############################################
##############################################################################
##############################################################################
#+--| Syntax |-------------------------------+################################
#|     PROCEDURE critical PROTOTYPE          |################################
#|      PARAMETERS UNTYPED function_name     |################################
#+-------------------------------------------+################################
##############################################################################
##############################################################################
####+---| Description |---------------------------------------------------+###
####| This procedure installs function_name as the critical error handler |###
####| for DOS.  Whenever a critical error occurs, such as when a diskette |###
####| drive door opens during a copy, DOS calls function_name to manage   |###
####| the error.  This procedure allows a program to install its own      |###
####| critical error handler.                                             |###
####| ------------------------------------------------------------------- |###
####| function_name must be an INT function.  DOS expects one of these    |###
####| return values from the function function_name().                    |###
####+---------------------------------------------------------------------+###
##############################################################################
##############################################################################
#######+--| Design |--------------------------------------------------+#######
#######| This procedure redirects the DOS interrupt vector 24h to     |#######
#######| function_name.  Terminate a program through the QUIT command |#######
#######| ~vs~ the _QUIT command when using a critical error handler.  |#######
#######| The FORCE runtime initialization code removes the int 24h    |#######
#######| vector when a program is terminated through QUIT.            |#######
#######| ------------------------------------------------------------ |#######
#######| Do not install a critical error handler for subprocesses     |#######
#######| executed through the RUN command.  The RUN command uses      |#######
#######| command.com to execute any subprocess and command.com        |#######
#######| installs its own critical error procedure.                   |#######
#######+--------------------------------------------------------------+#######
##############################################################################
##############################################################################
#########+--| Example 1 |-------------------------------------------+#########
#########| *    Install a critical error routine at the             |#########
#########| *    beginning of a program.                             |#########
#########|                                                          |#########
#########| PROCEDURE force_main                                     |#########
#########|                                                          |#########
#########|     DO critical WITH my_handler                          |#########
#########|     {...}                                                |#########
#########+----------------------------------------------------------+#########
##############################################################################
##############################################################################
#########+--| Example 2 |-------------------------------------------+#########
#########| *    This example prints out the critical error.         |#########
#########| *    First the error function.                           |#########
#########|                                                          |#########
#########| VARDEF                                                   |#########
#########|     CHAR(20)  wd[4] = "Standard input",;                 |#########
#########|                       "Standard output",;                |#########
#########|                       "NULL device",;                    |#########
#########|                       "Clock device"                     |#########
#########|     CHAR(20)  ar[4] = "MS-DOS","FAT","Dir",;             |#########
#########|                       "Data area"                        |#########
#########| ENDDEF                                                   |#########
#########|                                                          |#########
#########| *--- Sample encoding of "error_handler"                  |#########
#########|                                                          |#########
#########| FUNCTION INT error_handler                               |#########
#########|  PARAMETERS VALUE INT error_code,;                       |#########
#########|             VALUE INT which_device,;                     |#########
#########|             VALUE LOGICAL chr_device,;                   |#########
#########|             VALUE LOGICAL ignore,;                       |#########
#########|             VALUE LOGICAL retry,;                        |#########
#########|             VALUE LOGICAL fail,;                         |#########
#########|             VALUE INT disk_area,;                        |#########
#########|             VALUE LOGICAL during_write,;                 |#########
#########|             VALUE INT drive_id,;                         |#########
#########|             VALUE LOGICAL drive                          |#########
#########|                                                          |#########
#########|     VARDEF                                               |#########
#########|         CHAR        ascii_id BASED drive_id              |#########
#########|         INT         k                                    |#########
#########|     ENDDEF                                               |#########
#########|                                                          |#########
#########| *--- See if a block error or not                         |#########
#########|                                                          |#########
#########|     IF chr_device                                        |#########
#########|         ? "Error on " + wd[ which_device ]               |#########
#########|     ELSE                                                 |#########
#########|         ? "Block device error.  Code: ",error_code       |#########
#########|         IF drive                                         |#########
#########|                                                          |#########
#########|             drive_id = drive_id + 'A'        && add bias |#########
#########|                                                          |#########
#########|             ? "Error on drive " + ascii_id + ;           |#########
#########|             ? "in area " + ar[ disk_area ] + ;           |#########
#########|             IF during_write                              |#########
#########|                 ? "during a write operation."            |#########
#########|             ELSE                                         |#########
#########|                 ? "during a read operation."             |#########
#########|             ENDIF                                        |#########
#########|     ENDIF                                                |#########
#########|     REPEAT                                               |#########
#########|        ? "Abort, Retry, Ignore ? "                       |#########
#########|        k = get_key()                                     |#########
#########|     UNTIL lower(chr( k )) $ "ari"                        |#########
#########|                                                          |#########
#########|     RETURN at(lower(chr(k))), "ari" ) - 1                |#########
#########| ENDPRO                                                   |#########
#########|                                                          |#########
#########| *--- Next ... install error_handler                      |#########
#########|                                                          |#########
#########| PROCEDURE force_main                                     |#########
#########|                                                          |#########
#########|     critical( error_handler )                            |#########
#########|                                                          |#########
#########|     *--- trap critical errors during these commands      |#########
#########|                                                          |#########
#########|     USE "name.dbf" ALIAS name                            |#########
#########|     SET PRINTER TO "lpt1"                                |#########
#########|     SET PRINT ON                                         |#########
#########|     LIST ALL                                             |#########
#########|     {...}                                                |#########
#########|                                                          |#########
#########| ENDPRO                                                   |#########
#########+----------------------------------------------------------+#########
##############################################################################

See Also: e_message() i_message() ON ERROR DO

Online resources provided by: http://www.X-Hacker.org --- NG 2 HTML conversion by Dave Pearson