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