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.
152 lines
2.8 KiB
152 lines
2.8 KiB
;
|
|
; Program: CD
|
|
; Version: 3.0
|
|
; Author: Richard Conn
|
|
; Date: 12 Apr 84
|
|
; Previous Versions: None
|
|
; Derivation: In Concept from CD 2.4 for ZCPR2
|
|
;
|
|
version equ 30
|
|
z3env set 0f400h
|
|
|
|
;
|
|
; CD is used to log into a new directory by name or DU (DIR or DU forms)
|
|
; and to automatically run ST once there if it is available.
|
|
;
|
|
; Syntax:
|
|
; CD or CD // <-- Print Help
|
|
; CD dir: <-- Log In and Run ST.COM
|
|
;
|
|
|
|
;
|
|
; OS Equates et al
|
|
;
|
|
cpm equ 0
|
|
udbyte equ 4
|
|
bdos equ 5
|
|
fcb equ 5ch
|
|
tbuff equ 80h
|
|
tpa equ 100h
|
|
cr equ 0dh
|
|
lf equ 0ah
|
|
|
|
;
|
|
; SYSLIB and Z3LIB Functions
|
|
;
|
|
ext z3init,z3log
|
|
ext retud,moveb,initfcb,putcl,eprint,pafdc,cout,dutdir
|
|
|
|
;
|
|
; 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
|
|
lda fcb+1 ;check for help
|
|
cpi '/' ;help?
|
|
jnz cd
|
|
call eprint
|
|
db 'CD, Version '
|
|
db (version/10)+'0','.',(version mod 10)+'0'
|
|
db cr,lf,'Syntax:'
|
|
db cr,lf,' CD dir: or CD du: <-- Change Directory'
|
|
db 0
|
|
ret
|
|
;
|
|
; Log into DU converted by ZCPR3
|
|
;
|
|
cd:
|
|
lxi d,fcb ;pt to FCB
|
|
call z3log ;login to DU
|
|
call retud ;set DU in the UD byte
|
|
mov a,c ;set user
|
|
rlc ;rotate right 4 bits
|
|
rlc
|
|
rlc
|
|
rlc
|
|
ani 0f0h ;mask
|
|
mov c,a ;save for now
|
|
mov a,b ;get disk
|
|
ani 0fh ;mask
|
|
ora c ;mask in user
|
|
sta udbyte ;save value in UD byte
|
|
;
|
|
; Print New Directory
|
|
;
|
|
call eprint
|
|
db ' Logging Into ',0
|
|
call retud ;get DU in BC
|
|
mov a,b ;get disk
|
|
adi 'A'
|
|
call cout
|
|
mov a,c ;get user
|
|
call pafdc ;print number
|
|
mvi a,':' ;print colon
|
|
call cout
|
|
call dutdir ;convert to name
|
|
jz runfile ;run file if no name
|
|
mvi b,8 ;8 chars max to name (pted to by HL)
|
|
prtname:
|
|
mov a,m ;get name char
|
|
cpi ' ' ;done?
|
|
jz runfile
|
|
inx h ;pt to next
|
|
call cout
|
|
dcr b ;count down
|
|
jnz prtname
|
|
;
|
|
; Look for File
|
|
;
|
|
runfile:
|
|
lxi h,stfile ;pt to FCB
|
|
lxi d,fcb ;copy into FCB
|
|
mvi b,12 ;12 bytes
|
|
call moveb
|
|
call initfcb ;init FCB
|
|
mvi c,15 ;try to open file
|
|
call bdos ;use BDOS
|
|
cpi 0ffh ;not found?
|
|
jz cpm ;done - no ST.COM
|
|
lxi h,stcl ;pt to default command line
|
|
call putcl ;store it in ZCPR3 CL Buffer
|
|
jnz cpm ;abort to OS if done
|
|
call eprint ;print error message
|
|
db ' Command Line Overflow',0
|
|
jmp cpm
|
|
|
|
;
|
|
; Buffers
|
|
;
|
|
stfile:
|
|
db 0,'ST COM' ;default command
|
|
stcl:
|
|
db 'ST',0 ;default command line
|
|
|
|
end
|
|
|