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

207 lines
3.6 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: SHSET
; VERSION: 1.0
; DATE: 19 July 84
; AUTHOR: Richard Conn
; PREVIOUS VERSIONS: None
;
z3env equ 0f400h
VERS EQU 10 ;version number
; SHSET is copyright (c) 1984 by Richard Conn
; All Rights Reserved
; SHSET may be used freely by the ZCPR3 Community
;
; SHSET is used to establish a command line as a shell. It pushes
; the command line (including semicolons) which follow the verb SHSET onto
; the shell stack if it fits.
;
; Syntax:
; SHSET cmd1;cmd2;...
;
; The sequence of commands "cmd1;cmd2;..." becomes the shell.
;
;
; SYSLIB, Z3LIB, and VLIB References
;
ext z3init
ext shpush,getcl1,getcl2,putshm,getsh,getsh2
ext eprint,phlfdc
ext codend
;
; Basic Definitions
;
TRUE EQU 0FFH ;define true and..
FALSE EQU 0 ;..false.
;
; System Addresses
;
OS$BASE EQU 000H ;system base..
BDOS EQU OS$BASE+05H
FCB EQU OS$BASE+5CH
FCB2 EQU OS$BASE+6CH
TBUFF EQU OS$BASE+80H
TPA EQU OS$BASE+100H
;
; ASCII Chars
;
LF EQU 0AH ;..linefeed..
CR EQU 0DH ;..carriage return..
;
; 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
;
; Mainline
;
call z3init ;initialize the ZCPR3 Env
;
; Print Prompt
;
call eprint
db 'SHSET, Version '
db (VERS/10)+'0','.',(VERS MOD 10)+'0'
db 0
lda fcb+1 ;check for help request
cpi '/' ;help?
jz help
cpi ' '
jnz shinit
;
; Print Help Message
;
help:
call eprint
db cr,lf,' Syntax: SHSET cmd1;cmd2;...'
db cr,lf,' SHSET defines the command sequence to be a shell'
db 0
ret
;
; Initialize Shell
;
shinit:
call shtest1 ;there must be a shell stack
call shtest2 ;there must be a command line buffer
;
; HL now points to the command line buffer
;
call codend ;pt to free area
xchg ;... in DE
lxi h,tbuff+1 ;pt to option input
mov a,m ;check for no input
ora a ;none if zero
jz checkcl
inx h ;pt to first good char
call copystr ;copy string
checkcl:
call getcl2 ;get address of command line
jz setsh ;set shell command
call copystr ;copy string
setsh:
call codend ;pt to string
call shpush ;push onto shell stack
jnz sherr ;error?
;
; Set Shell Messages
;
mvi a,0 ;Zero Message 0
mvi b,0
call putshm
;
mvi a,0 ;Zero Message 1
mvi b,1
call putshm
;
call eprint
db ' Shell Installed',0
;
exit:
call getcl2 ;terminate following command
mvi m,0 ;set ending 0
ret
;
; Error in Shell Stack Installation
;
sherr:
cpi 2 ;shell stack full
jnz sherr1
call eprint
db ' Shell Stack Full',0
jmp exit
sherr1:
call eprint
db ' Shell Entry too Large -- Limit is ',0
call getsh2 ;get limit in DE
xchg
call phlfdc ;print as floating decimal
call eprint
db ' Characters',0
jmp exit
;
; Check for Presence of Shell Stack
;
shtest1:
call getsh ;get shell stack data
rnz
pop psw ;clear stack
call eprint
db ' No Shell Stack',0
ret
;
; Check for Command Line
;
shtest2:
call getcl1 ;get command line data
rnz
pop psw ;clear stack
call eprint
db ' No Command Line',0
ret
;
; Copy string from HL to DE
; Store ending 0 and leave pointer in DE to it
;
copystr:
mov a,m ;get char
stax d ;store it
ora a ;done?
rz
inx h ;pt to next
inx d
jmp copystr
end