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

152 lines
2.8 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: 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