; ; 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