home *** CD-ROM | disk | FTP | other *** search
/ ftp.barnyard.co.uk / 2015.02.ftp.barnyard.co.uk.tar / ftp.barnyard.co.uk / cpm / walnut-creek-CDROM / ZSYS / SIMTEL20 / ZCPR3 / ERROR4.MAC < prev    next >
Text File  |  2000-06-30  |  4KB  |  179 lines

  1. ;
  2. ; Program: ERROR4
  3. ; Author: Richard Conn
  4. ; Version: 1.0
  5. ; Date: 5 Mar 84
  6. ;
  7. version    equ    10
  8.  
  9. ;
  10. ;    This error handler prints the name of the COM file which was not
  11. ; found and then advances to the next entry (assuming a multiple command
  12. ; line) and resumes with the next command in the line.
  13. ;
  14. ;    This program is transportable from one ZCPR3 system to another
  15. ; provided it is reassembled with the correct address for the ZCPR3
  16. ; Environment Descriptor (Z3ENV) or DDT is used to patch this address
  17. ; (which is the first two bytes after the opening JMP).  If an external
  18. ; ZCPR3 Environment Descriptor is not available, one will have to be
  19. ; provided by setting the Z3ENV equate to 0 and providing SYSENV.LIB in
  20. ; the current directory at assembly time.
  21. ;
  22.  
  23. ;
  24. ; Equates for Key Values
  25. ;
  26. z3env    SET    0f400h    ;address of ZCPR3 environment
  27. cmtch    equ    ';'    ;comment character
  28. cr    equ    0dh
  29. lf    equ    0ah
  30.  
  31. ;
  32. ; External Z3LIB and SYSLIB Routines
  33. ;
  34.     ext    z3init
  35.     ext    print,pstr,codend,moveb
  36.     ext    erradr,puter1,puterc        ;Error Handler Routines
  37.     ext    getefcb,getcl1,qerror        ;Z3 Messages et al
  38.  
  39. ;
  40. ; Environment Definition
  41. ;
  42.     if    z3env ne 0
  43. ;
  44. ; External ZCPR3 Environment Descriptor
  45. ;
  46.     jmp    start
  47.     db    'Z3ENV'    ;This is a ZCPR3 Utility
  48.     db    1    ;External Environment Descriptor
  49. z3eadr:
  50.     dw    z3env
  51. start:
  52.     lhld    z3eadr    ;pt to ZCPR3 environment
  53. ;
  54.     else
  55. ;
  56. ; Internal ZCPR3 Environment Descriptor
  57. ;
  58.     MACLIB    Z3BASE.LIB
  59.     MACLIB    SYSENV.LIB
  60. z3eadr:
  61.     jmp    start
  62.     SYSENV
  63. start:
  64.     lxi    h,z3eadr    ;pt to ZCPR3 environment
  65.     endif
  66.  
  67. ;
  68. ; Start of Program -- Initialize ZCPR3 Environment
  69. ;
  70.     call    z3init    ;initialize the ZCPR3 Environment
  71. ;
  72. ; Determine if Program Invoked as an Error Handler or By the User
  73. ;
  74.     call    qerror    ;error?
  75.     jz    handler    ;handle error
  76. ;
  77. ; Invoked by the User, so Install as an Error Handler
  78. ;
  79.     call    getefcb        ;pt to external FCB
  80.     jz    start1        ;proceed if external FCB not available
  81. ;
  82. ; Make Name Invoked by User the Name of the Error Handler
  83. ;
  84.     inx    h        ;pt to first char
  85.     lxi    d,ername    ;pt to name of error handler message
  86.     mvi    b,8        ;at most 8 bytes
  87.     call    moveb        ;copy into buffer
  88. ;
  89. ; Make Command Line in Buffer the Error Handler
  90. ;
  91. start1:
  92.     lxi    h,ername    ;make name in buffer the error handler
  93.     call    puterc        ;set command
  94.     mvi    a,0ffh        ;set error code
  95.     call    puter1        ;set message
  96.     call    print
  97.     db    'ERROR4, Version '
  98.     db    (version/10)+'0','.',(version mod 10)+'0'
  99.     db    cr,lf,' Error Handler Installed',0
  100.     ret
  101. ;
  102. ; Handle Error
  103. ;
  104. handler:
  105.     call    erradr        ;get address of error line
  106.     xchg            ;HL pts to free area, DE pts to error line
  107.     call    codend        ;get ptr to free area
  108. ;
  109. ; Extract Bad Command and Store It in Memory Starting at CODEND
  110. ;    DE pts to bad command, HL pts to location to store it at
  111. ;
  112. savebad:
  113.     ldax    d        ;get next char
  114.     mov    m,a        ;put it
  115.     ora    a        ;done?
  116.     jz    sbad1
  117.     cpi    cmtch        ;check for comment
  118.     jz    sbad1
  119.     cpi    ' '        ;check for space
  120.     jz    sbad1
  121.     inx    h        ;pt to next
  122.     inx    d
  123.     jmp    savebad
  124. ;
  125. ; Set ending 0 in bad command buffer and print error message and command
  126. ;
  127. sbad1:
  128.     mvi    m,0        ;store ending zero
  129.     call    print
  130.     db    ' File ',0
  131.     call    codend        ;pt to name
  132.     call    pstr
  133.     call    print
  134.     db    '.COM Not Found',0
  135. ;
  136. ; Advance to Next Entry in Error Line
  137. ;
  138.     call    erradr        ;pt to error
  139. sbad2:
  140.     mov    a,m        ;skip to comment or eol
  141.     ora    a        ;eol?
  142.     jz    sbad3
  143.     inx    h        ;pt to next
  144.     cpi    cmtch        ;comment?
  145.     jnz    sbad2
  146. ;
  147. ; Set Up Command Line Pointer
  148. ;
  149. sbad3:
  150.     push    h        ;save ptr to error text
  151.     call    getcl1        ;pt to command line buffer
  152.     lxi    d,4        ;pt to first char position
  153.     xchg
  154.     dad    d
  155.     xchg            ;DE pts to command line
  156.     mov    m,e        ;store address
  157.     inx    h
  158.     mov    m,d
  159.     pop    h        ;HL pts to next command, DE pts to cmd line
  160. ;
  161. ; Set Up Command Line Contents
  162. ;
  163. sbad4:
  164.     mov    a,m        ;copy
  165.     stax    d
  166.     inx    h        ;pt to next
  167.     inx    d
  168.     ora    a        ;done?
  169.     jnz    sbad4
  170.     ret
  171.  
  172. ;
  173. ; Buffers
  174. ;
  175. ername:
  176.     db    'ERROR4  ',0    ;name of error handler
  177.  
  178.     end
  179.