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.
 
 
 
 
 
 

137 lines
3.3 KiB

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