Files
RomWBW/Source/Images/d_bp/u15/ERROR3.MAC
2020-01-03 20:42:06 -08:00

154 lines
3.4 KiB
Plaintext
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
;
; Program: ERROR3
; Author: Richard Conn
; Version: 1.0
; Date: 5 Mar 84
;
version equ 10
;
; This error handler displays the name of the COM file which was
; not found and then flushes the command line, returning control to the
; user.
;
; This program is transportable from one ZCPR3 system to another
; provided it is reassembled with the correct address for the ZCPR3
; Environment Descriptor (Z3ENV) or DDT is used to patch this address
; (which is the first two bytes after the opening JMP). If an external
; ZCPR3 Environment Descriptor is not available, one will have to be
; provided by setting the Z3ENV equate to 0 and providing SYSENV.LIB in
; the current directory at assembly time.
;
;
; Equates for Key Values
;
z3env SET 0f400h ;address of ZCPR3 environment
cmtch equ ';' ;comment character
cr equ 0dh
lf equ 0ah
;
; External Z3LIB and SYSLIB Routines
;
ext z3init
ext print,pstr,codend,moveb
ext erradr,puter1,puterc ;Error Handler Routines
ext getefcb,getcl1,qerror ;Z3 Messages et al
;
; Environment Definition
;
if z3env ne 0
;
; External ZCPR3 Environment Descriptor
;
jmp start
db 'Z3ENV' ;This is a ZCPR3 Utility
db 1 ;External Environment Descriptor
z3eadr:
dw z3env
start:
lhld z3eadr ;pt to ZCPR3 environment
;
else
;
; Internal ZCPR3 Environment Descriptor
;
MACLIB Z3BASE.LIB
MACLIB SYSENV.LIB
z3eadr:
jmp start
SYSENV
start:
lxi h,z3eadr ;pt to ZCPR3 environment
endif
;
; Start of Program -- Initialize ZCPR3 Environment
;
call z3init ;initialize the ZCPR3 Environment
;
; Determine if Program Invoked as an Error Handler or By the User
;
call qerror ;error?
jz handler ;handle error
;
; Invoked by the User, so Install as an Error Handler
;
call getefcb ;pt to external FCB
jz start1 ;proceed if external FCB not available
;
; Make Name Invoked by User the Name of the Error Handler
;
inx h ;pt to first char
lxi d,ername ;pt to name of error handler message
mvi b,8 ;at most 8 bytes
call moveb ;copy into buffer
;
; Make Command Line in Buffer the Error Handler
;
start1:
lxi h,ername ;make name in buffer the error handler
call puterc ;set command
mvi a,0ffh ;set error code
call puter1 ;set message
call print
db 'ERROR3, Version '
db (version/10)+'0','.',(version mod 10)+'0'
db cr,lf,' Error Handler Installed',0
ret
;
; Handle Error
;
handler:
call erradr ;get address of error line
xchg ;HL pts to free area, DE pts to error line
call codend ;get ptr to free area
;
; Extract Bad Command and Store It in Memory Starting at CODEND
; DE pts to bad command, HL pts to location to store it at
;
savebad:
ldax d ;get next char
mov m,a ;put it
ora a ;done?
jz sbad1
cpi cmtch ;check for comment
jz sbad1
cpi ' ' ;check for space
jz sbad1
inx h ;pt to next
inx d
jmp savebad
;
; Set ending 0 in bad command buffer and print error message and command
;
sbad1:
mvi m,0 ;store ending zero
call print
db ' File ',0
call codend ;pt to name
call pstr
call print
db '.COM Not Found',0
call getcl1 ;pt to command line buffer
lxi d,4 ;pt to first char position
push h ;save current ptr
dad d
mvi m,0 ;zero command line
xchg ;DE pts to command line
pop h
mov m,e ;store address
inx h
mov m,d
ret
;
; Buffers
;
ername:
db 'ERROR3 ',0 ;name of error handler
end