Files
RomWBW/Source/BPBIOS/Z34RCP11/rcpdir.lib
2020-02-14 17:22:56 -08:00

137 lines
3.3 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.
page
; Library: RCPDIR for Z34RCP
; Author: Carson Wilson
; Version: 1.0
; Date: August 6, 1989
; Changes: Now allows "DIR [dir:].aft" as well as "DIR [dir:]*.aft"
; to show all files of a given file extentsion,
; e.g., "d .?80" gives all .Z80 and .180 files.
;
; Version: 1.0
; Date: June 15, 1988
;
; Command: DIR
; Function: Display a directory of the files on disk
; Syntax: DIR [dir:afn] Displays the DIR files
; DIR [dir:afn] S Displays the SYS files
; DIR [dir:afn] A Display both DIR and SYS files
;
; If slashchk is true:
;
; DIR [dir:]/S Equivalent to DIR [dir:]*.* S
; DIR [dir:]/A Equivalent to DIR [dir:]*.* A
dir:
call retsave ; Save return address and set stack
; See if FCB should be made wild (all '?')
ld hl,fcb1+1 ; Point to file name in FCP
ld a,(hl) ; Get first character of filename
if slashchk ; Allow "DIR /S" and "DIR /A" formats
cp '/' ; If name does not start with '/'
jr nz,dir01 ; ..branch and process normally
inc hl ; Point to second character
ld a,(hl) ; Get option character after slash
ld (fcb2+1),a ; ..and put it into second FCB
dec hl ; Back to first character
ld a,' ' ; Simulate empty FCB
endif ;slashchk
dir01:
cp ' ' ; See if no file spec given
jr nz,dir02 ; Spec given
ld b,8 ; Wildcard name
ld a,(fcb1+9)
cp ' ' ; Wildcard type?
jr nz,dir01a ; No
ld b,11 ; Yes. Fill name and type.
dir01a: ld a,'?' ; Get ready to fill with '?'
call fillp ; ..carry out fill
dir02:
if nosys ; Suppress-SYS-file-if-no-wheel option
call getwhl ; Get wheel status
jr z,dirnly ; If wheel off, ignore options
endif
ld a,(fcb2+1) ; Get first char of 2nd file name
ld b,1 ; Set for both dir and sys files
cp allflag ; SYS and DIR flag specifier?
jr z,dirpr ; Got system specifier
dec b ; B=0 for sys files only
cp sysflag ; SYS only?
jr z,dirpr
dirnly: ld b,80h ; Must be dir-only selection
; DIRECTORY PRINT ROUTINE
; On entry, B reg is set as follows:
; 0 for only system files, 80h for only dir files, 1 for both
;
dirpr:
ld a,b ; Get systst flag
call getdir ; Load and sort directory
jp z,prfnf ; Print no file message
if wide
ld e,5
else
ld e,4 ; Count down to 0
endif ; wide
;
; ENTRY PRINT LOOP
; On entry, HL pts to files selected (terminated by 0)
; and E is entry counter
;
dir3:
ld a,(hl) ; Check for done
or a
if dirsp and spaceon
jp z,spaexit ; Show space when done
else
jp z,exit ; Exit if done
endif ; Dirsp and spaceon
ld a,e ; Get entry counter
or a ; Output CRLF if 4 or 5 entries printed in line
jr nz,dir3a ; Continue
call crlf ; New line
if wide
ld e,5
else
ld e,4 ; Reset entry count
endif ; wide
ld a,e ; Get entry count
dir3a:
if wide
cp 5
else
cp 4 ; First entry?
endif ; wide
jr z,dir4
call print
;
if wide
;
db ' ' ; 2 spaces
db ' '+80h ; Then 1 more space
;
else
;
db ' ' ; Space
db fence+80h ; Then fence char
;
endif ; Wide
;
dir4:
call prfn ; Print file name
call break ; Check for abort
dec e ; Decrement entry counter
jr dir3
; End RCPDIR.LIB