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 >
Wrap
Text File
|
2000-06-30
|
4KB
|
179 lines
;
; Program: ERROR4
; Author: Richard Conn
; Version: 1.0
; Date: 5 Mar 84
;
version equ 10
;
; This error handler prints the name of the COM file which was not
; found and then advances to the next entry (assuming a multiple command
; line) and resumes with the next command in the line.
;
; 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 'ERROR4, 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
;
; Advance to Next Entry in Error Line
;
call erradr ;pt to error
sbad2:
mov a,m ;skip to comment or eol
ora a ;eol?
jz sbad3
inx h ;pt to next
cpi cmtch ;comment?
jnz sbad2
;
; Set Up Command Line Pointer
;
sbad3:
push h ;save ptr to error text
call getcl1 ;pt to command line buffer
lxi d,4 ;pt to first char position
xchg
dad d
xchg ;DE pts to command line
mov m,e ;store address
inx h
mov m,d
pop h ;HL pts to next command, DE pts to cmd line
;
; Set Up Command Line Contents
;
sbad4:
mov a,m ;copy
stax d
inx h ;pt to next
inx d
ora a ;done?
jnz sbad4
ret
;
; Buffers
;
ername:
db 'ERROR4 ',0 ;name of error handler
end