/*------------------------------------------------------------------------*\ | | | 9411LS01.CMD - Generic Trap Processing Routine | | | \*------------------------------------------------------------------------*/ SIGNAL ON ERROR /* trap object time errors */ /* 0006 */ SIGNAL ON FAILURE /* trap object time errors */ /* 0007 */ SIGNAL ON HALT /* trap object time errors */ /* 0008 */ SIGNAL ON NOVALUE /* trap object time errors */ /* 0009 */ SIGNAL ON SYNTAX /* trap object time errors */ /* 0010 */ /* 0011 */ 'copy a_b_c_d nul' /* 0012 */ exit /* 0013 */ /* 0014 */ /*------------------------------------------------------------------------*\ | | | Trap Routines | | | \*------------------------------------------------------------------------*/ ERROR: call TRAP_PROCESSING SIGL, 'ERROR', RC /* 0020 */ FAILURE: call TRAP_PROCESSING SIGL, 'FAILURE', RC /* 0021 */ HALT: call TRAP_PROCESSING SIGL, 'HALT', '' /* 0022 */ NOVALUE: call TRAP_PROCESSING SIGL, 'NOVALUE', '' /* 0023 */ SYNTAX: call TRAP_PROCESSING SIGL, 'SYNTAX', RC /* 0024 */ /* 0025 */ /* Rev. 94/06/14 */ /* 0026 */ TRAP_PROCESSING: /* 0027 */ parse Source . . TRAP.path_and_program /* 0028 */ if POS( ':', TRAP.path_and_program ) > 0 then /* 0029 */ /* get source line if it is available */ /* 0030 */ do /* 0031 */ trap_source_line = STRIP( SOURCELINE(ARG(1)) ) /* 0032 */ end /* 0033 */ else /* 0034 */ /* program is running in macrospace */ /* 0035 */ do /* 0036 */ TRAP.path_and_program = VALUE( 'TEMP',, 'OS2ENVIRONMENT' ) ||, TRAP.path_and_program /* 0038 */ trap_source_line = 'Source line is not available.' /* 0039 */ end /* 0040 */ /* 0041 */ parse value FILESPEC( 'N', TRAP.path_and_program ) with, /* 0042 */ TRAP.fn '.' TRAP.fe /* 0043 */ trap_file_name = FILESPEC( 'D', TRAP.path_and_program ) ||, /* 0044 */ FILESPEC( 'P', TRAP.path_and_program ) ||, /* 0045 */ TRAP.fn || '.' || 'DMP' /* 0046 */ /* 0047 */ /*------------------------------------------*\ /* 0048 */ | check for reason not to create .DMP file | /* 0049 */ \*------------------------------------------*/ /* 0050 */ if ARG(2) = 'HALT' then /* 0051 */ do /* 0052 */ trap_file_name = '' /* 0053 */ end /* 0054 */ if RxFuncQuery( 'VARDUMP' ) <> 0 then /* 0055 */ do /* 0056 */ trap_file_name = '' /* 0057 */ end /* 0058 */ if POS( ':', trap_file_name ) = 0 then /* 0059 */ do /* 0060 */ trap_file_name = '' /* 0061 */ end /* 0062 */ /* 0063 */ /*------------------------*\ /* 0064 */ | Build trap message box | /* 0065 */ \*------------------------*/ /* 0066 */ dbl.h = 'CD'x /* I double line - horizontal */ dbl.v = 'BA'x /* o double line - vertical */ dbl.bl = 'C8'x /* E double line - bottom left */ dbl.br = 'BC'x /* ? double line - bottom right */ dbl.tl = 'C9'x /* E double line - top left */ dbl.tr = 'BB'x /* " double line - top right */ say ' ' /* 0073 */ trap_error_description =, /* 0074 */ 'Error line = ' || ARG(1) ||, /* 0075 */ '; ' ||, /* 0076 */ ARG(2) ||, /* 0077 */ ' error.' /* 0078 */ if ARG(3) <> '' then /* 0079 */ trap_error_description = trap_error_description ||, /* 0080 */ ' Return code = ' || ARG(3) /* 0081 */ say dbl.tl || COPIES( dbl.h, LENGTH(trap_error_description) + 2 ) || dbl.tr say dbl.v || COPIES( ' ', LENGTH(trap_error_description) + 2 ) || dbl.v say dbl.v CENTER( TRAP.fn || '.CMD', LENGTH(trap_error_description)) dbl.v say dbl.v trap_error_description dbl.v if trap_file_name <> '' then /* 0086 */ do /* 0087 */ say dbl.v || COPIES( ' ', LENGTH(trap_error_description) + 2 ) || dbl.v say dbl.v CENTER( 'See: ' || trap_file_name,, /* 0089 */ LENGTH(trap_error_description) ) dbl.v end /* 0091 */ say dbl.v || COPIES( ' ', LENGTH(trap_error_description) + 2 ) || dbl.v say dbl.bl || COPIES( dbl.h, LENGTH(trap_error_description) + 2 ) || dbl.br say ' ' /* 0094 */ say 'Source line at time of trap:' /* 0095 */ say ' ' || trap_source_line /* 0096 */ say ' ' /* 0097 */ /* 0098 */ /*---------------------------------*\ /* 0099 */ | Create .DMP file if appropriate | /* 0100 */ \*---------------------------------*/ /* 0101 */ if trap_file_name <> '' then /* 0102 */ do /* 0103 */ call SysFileDelete trap_file_name /* 0104 */ /* remove meaningless labels from dump for clarity */ /* 0105 */ drop dbl. TRAP. RC RESULT SIGL !tr! /* 0106 */ call VARDUMP trap_file_name /* write variables to program.DMP file */ end /* 0108 */ exit 254 /* 0109 */