home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 18 REXX / 18-REXX.zip / rxls01.cmd < prev    next >
OS/2 REXX Batch file  |  1994-10-03  |  8KB  |  110 lines

  1. /*------------------------------------------------------------------------*\
  2. |                                                                          |
  3. |              9411LS01.CMD - Generic Trap Processing Routine              |
  4. |                                                                          |
  5. \*------------------------------------------------------------------------*/
  6. SIGNAL ON ERROR                  /* trap object time errors */    /* 0006 */
  7. SIGNAL ON FAILURE                /* trap object time errors */    /* 0007 */
  8. SIGNAL ON HALT                   /* trap object time errors */    /* 0008 */
  9. SIGNAL ON NOVALUE                /* trap object time errors */    /* 0009 */
  10. SIGNAL ON SYNTAX                 /* trap object time errors */    /* 0010 */
  11.                                                                   /* 0011 */
  12. 'copy a_b_c_d nul'                                                /* 0012 */
  13. exit                                                              /* 0013 */
  14.                                                                   /* 0014 */
  15. /*------------------------------------------------------------------------*\
  16. |                                                                          |
  17. |                              Trap Routines                               |
  18. |                                                                          |
  19. \*------------------------------------------------------------------------*/
  20. ERROR:   call TRAP_PROCESSING SIGL, 'ERROR',   RC                 /* 0020 */
  21. FAILURE: call TRAP_PROCESSING SIGL, 'FAILURE', RC                 /* 0021 */
  22. HALT:    call TRAP_PROCESSING SIGL, 'HALT',    ''                 /* 0022 */
  23. NOVALUE: call TRAP_PROCESSING SIGL, 'NOVALUE', ''                 /* 0023 */
  24. SYNTAX:  call TRAP_PROCESSING SIGL, 'SYNTAX',  RC                 /* 0024 */
  25.                                                                   /* 0025 */
  26. /* Rev. 94/06/14 */                                               /* 0026 */
  27. TRAP_PROCESSING:                                                  /* 0027 */
  28.    parse Source . . TRAP.path_and_program                         /* 0028 */
  29.    if POS( ':', TRAP.path_and_program ) > 0 then                  /* 0029 */
  30.       /* get source line if it is available */                    /* 0030 */
  31.       do                                                          /* 0031 */
  32.          trap_source_line = STRIP( SOURCELINE(ARG(1)) )           /* 0032 */
  33.       end                                                         /* 0033 */
  34.    else                                                           /* 0034 */
  35.       /* program is running in macrospace */                      /* 0035 */
  36.       do                                                          /* 0036 */
  37.          TRAP.path_and_program = VALUE( 'TEMP',, 'OS2ENVIRONMENT' ) ||,
  38.                                  TRAP.path_and_program            /* 0038 */
  39.          trap_source_line = 'Source line is not available.'       /* 0039 */
  40.       end                                                         /* 0040 */
  41.                                                                   /* 0041 */
  42.    parse value FILESPEC( 'N', TRAP.path_and_program ) with,       /* 0042 */
  43.       TRAP.fn '.' TRAP.fe                                         /* 0043 */
  44.    trap_file_name = FILESPEC( 'D', TRAP.path_and_program ) ||,    /* 0044 */
  45.                     FILESPEC( 'P', TRAP.path_and_program ) ||,    /* 0045 */
  46.                     TRAP.fn || '.' || 'DMP'                       /* 0046 */
  47.                                                                   /* 0047 */
  48.    /*------------------------------------------*\                 /* 0048 */
  49.    |  check for reason not to create .DMP file  |                 /* 0049 */
  50.    \*------------------------------------------*/                 /* 0050 */
  51.    if ARG(2) = 'HALT' then                                        /* 0051 */
  52.       do                                                          /* 0052 */
  53.          trap_file_name = ''                                      /* 0053 */
  54.       end                                                         /* 0054 */
  55.    if RxFuncQuery( 'VARDUMP' ) <> 0 then                          /* 0055 */
  56.       do                                                          /* 0056 */
  57.          trap_file_name = ''                                      /* 0057 */
  58.       end                                                         /* 0058 */
  59.    if POS( ':', trap_file_name ) = 0 then                         /* 0059 */
  60.       do                                                          /* 0060 */
  61.          trap_file_name = ''                                      /* 0061 */
  62.       end                                                         /* 0062 */
  63.                                                                   /* 0063 */
  64.    /*------------------------*\                                   /* 0064 */
  65.    |  Build trap message box  |                                   /* 0065 */
  66.    \*------------------------*/                                   /* 0066 */
  67.    dbl.h    = 'CD'x                 /* I double line - horizontal   */
  68.    dbl.v    = 'BA'x                 /* o double line - vertical     */
  69.    dbl.bl   = 'C8'x                 /* E double line - bottom left  */
  70.    dbl.br   = 'BC'x                 /* ? double line - bottom right */
  71.    dbl.tl   = 'C9'x                 /* E double line - top left     */
  72.    dbl.tr   = 'BB'x                 /* " double line - top right    */
  73.    say ' '                                                        /* 0073 */
  74.    trap_error_description =,                                      /* 0074 */
  75.       'Error line = ' || ARG(1) ||,                               /* 0075 */
  76.       '; ' ||,                                                    /* 0076 */
  77.       ARG(2) ||,                                                  /* 0077 */
  78.       ' error.'                                                   /* 0078 */
  79.    if ARG(3) <> '' then                                           /* 0079 */
  80.       trap_error_description = trap_error_description ||,         /* 0080 */
  81.                                '  Return code = ' || ARG(3)       /* 0081 */
  82.    say dbl.tl || COPIES( dbl.h, LENGTH(trap_error_description) + 2 ) || dbl.tr
  83.    say dbl.v  || COPIES( ' ',   LENGTH(trap_error_description) + 2 ) || dbl.v
  84.    say dbl.v CENTER( TRAP.fn || '.CMD', LENGTH(trap_error_description)) dbl.v
  85.    say dbl.v               trap_error_description                       dbl.v
  86.    if trap_file_name <> '' then                                   /* 0086 */
  87.       do                                                          /* 0087 */
  88.    say dbl.v  || COPIES( ' ',   LENGTH(trap_error_description) + 2 ) || dbl.v
  89.    say dbl.v     CENTER( 'See: ' || trap_file_name,,              /* 0089 */
  90.                                       LENGTH(trap_error_description) )  dbl.v
  91.       end                                                         /* 0091 */
  92.    say dbl.v  || COPIES( ' ',   LENGTH(trap_error_description) + 2 ) || dbl.v
  93.    say dbl.bl || COPIES( dbl.h, LENGTH(trap_error_description) + 2 ) || dbl.br
  94.    say ' '                                                        /* 0094 */
  95.    say 'Source line at time of trap:'                             /* 0095 */
  96.    say '   ' || trap_source_line                                  /* 0096 */
  97.    say ' '                                                        /* 0097 */
  98.                                                                   /* 0098 */
  99.    /*---------------------------------*\                          /* 0099 */
  100.    |  Create .DMP file if appropriate  |                          /* 0100 */
  101.    \*---------------------------------*/                          /* 0101 */
  102.    if trap_file_name <> '' then                                   /* 0102 */
  103.       do                                                          /* 0103 */
  104.          call SysFileDelete trap_file_name                        /* 0104 */
  105.          /* remove meaningless labels from dump for clarity */    /* 0105 */
  106.          drop dbl. TRAP. RC RESULT SIGL !tr!                      /* 0106 */
  107.          call VARDUMP trap_file_name  /* write variables to program.DMP file */
  108.       end                                                         /* 0108 */
  109.    exit 254                                                       /* 0109 */
  110.