mirror of https://github.com/wwarthen/RomWBW.git
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
148 lines
2.6 KiB
148 lines
2.6 KiB
;
|
|
; Program: SHCTRL
|
|
; Author: Richard Conn
|
|
; Version: 1.0
|
|
; Date: 29 Mar 84
|
|
;
|
|
version equ 10
|
|
z3env SET 0f400h
|
|
|
|
;
|
|
; SHCTRL is used to provide simple control of the ZCPR3 shell
|
|
; stack from the command line. This program accepts one of two parameters:
|
|
;
|
|
; SHCTRL CLR or SHCTRL C <-- Clear the Shell Stack
|
|
; SHCTRL DIS or SHCTRL D <-- Display Shell Stack
|
|
; SHCTRL POP or SHCTRL P <-- Pop the Shell Stack
|
|
;
|
|
|
|
;
|
|
; Equates
|
|
;
|
|
fcb equ 5ch
|
|
cr equ 0dh
|
|
lf equ 0ah
|
|
|
|
;
|
|
; SYSLIB and Z3LIB Routines
|
|
;
|
|
ext z3init,shpop,getsh2,qprint,print,pafdc,pstr
|
|
|
|
;
|
|
; 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 Env and the VLIB Env
|
|
|
|
;
|
|
; Print Banner
|
|
;
|
|
call qprint
|
|
db 'SHCTRL Version '
|
|
db (version/10)+'0','.',(version mod 10)+'0',0
|
|
|
|
;
|
|
; Check for Command
|
|
;
|
|
lda fcb+1 ;get first char
|
|
cpi 'C' ;clear?
|
|
jz shclear
|
|
cpi 'D' ;display?
|
|
jz shdisplay
|
|
cpi 'P' ;pop?
|
|
jz shspop
|
|
|
|
;
|
|
; Print help
|
|
;
|
|
call print
|
|
db cr,lf,'SHCTRL - Control Shell Stack'
|
|
db cr,lf,'Syntax:'
|
|
db cr,lf,' SHCTRL C or SHCTRL CLR - Clear Shell Stack'
|
|
db cr,lf,' SHCTRL D or SHCTRL DIS - Display Shell Stack'
|
|
db cr,lf,' SHCTRL P or SHCTRL POP - Pop Shell Stack'
|
|
db 0
|
|
ret
|
|
|
|
;
|
|
; Clear Shell Stack
|
|
;
|
|
shclear:
|
|
call getsh2 ;get address of shell stack
|
|
mvi m,0 ;clear it
|
|
call qprint
|
|
db ' - Shell Stack Clear',0
|
|
ret
|
|
|
|
;
|
|
; Pop Shell Stack
|
|
;
|
|
shspop:
|
|
call shpop ;pop stack
|
|
call qprint
|
|
db ' - Shell Stack Popped',0
|
|
ret
|
|
|
|
;
|
|
; Display Shell Stack
|
|
;
|
|
shdisplay:
|
|
call getsh2 ;get address of shell stack (HL), size of
|
|
; shell stack entry (DE), and count (A,B)
|
|
call print ;print message
|
|
db ' - Shell Stack Data'
|
|
db cr,lf,' Size of Shell Stack: ',0
|
|
mov a,b ;get size
|
|
call pafdc ;print
|
|
call print
|
|
db ' Elements'
|
|
db cr,lf,' Shell Stack Elements:',0
|
|
mov a,m ;check for empty
|
|
ora a
|
|
jnz shdisp1
|
|
call print
|
|
db cr,lf,' Shell Stack Empty',0
|
|
ret
|
|
shdisp1:
|
|
mov a,m ;check for done
|
|
ora a
|
|
rz
|
|
call print
|
|
db cr,lf,' --> ',0
|
|
push h ;save ptr
|
|
call pstr ;print element
|
|
pop h ;get ptr
|
|
dad d ;count down
|
|
dcr b ;count down
|
|
jnz shdisp1
|
|
ret
|
|
|
|
end
|
|
|