From d1314173d368db0a16e52c9def484b195a5203c9 Mon Sep 17 00:00:00 2001 From: Bobbi Webber-Manners Date: Fri, 1 Nov 2019 18:57:00 -0400 Subject: [PATCH] Implemented '*' wildcard character in NAME2FCB --- SOFTCARD80.ASM#040000 | 51 +++++++++++++++++++++++++++++++++++++----- SOFTCARD80.BIN#041000 | Bin 43011 -> 43011 bytes zapple2.po | Bin 819200 -> 819200 bytes 3 files changed, 45 insertions(+), 6 deletions(-) diff --git a/SOFTCARD80.ASM#040000 b/SOFTCARD80.ASM#040000 index 50dc24b..73543e4 100644 --- a/SOFTCARD80.ASM#040000 +++ b/SOFTCARD80.ASM#040000 @@ -1628,6 +1628,7 @@ CFL2 LD (HL),C ; ... ; beginning of the ProDOS dirent and converts it to FCB format (8.3 with ; spaces for any unused characters.) ; Any '8' character in extension is converted back to '$' (see FCB2PATH) +; Handles '*' wildcard character ; HL points to the file entry in the ProDOS directory ; B contains the drive number (1 for A:, 2 for B: etc) ; The FCB is written to the buffer pointed to by DMAADDR @@ -1643,17 +1644,19 @@ NAME2FCB EX DE,HL ; Stash HL in DE for call to CLRFCB LD A,B ; Move drive number to A LD (DE),A ; Write drive number LD B,0 ; Use B to count chars written -N2FL3 INC HL ; Advance source pointer +N2FL1 INC HL ; Advance source pointer INC DE ; Advance destination pointer LD A,C ; Get count of chars remaining CP 0 ; If none left ... - JP Z,N2FS3 ; We are done + JP Z,N2FS6 ; We are done LD A,B ; Get count of chars written CP 8+3 ; If 8+3 chars have been written ... - JP Z,N2FS3 ; We are done + JP Z,N2FS6 ; We are done LD A,(HL) ; Read character CP '.' ; See if it is a period JP Z,N2FS2 ; Prepare to copy the extension + CP '*' ; See if it is an asterix + JP Z,N2FS3 ; Handle asterix wildcard LD (DE),A ; Write character CP '8' ; See if character in name is '8' @@ -1666,7 +1669,7 @@ N2FL3 INC HL ; Advance source pointer N2FS0 INC B ; Increment count of chars written N2FS1 DEC C ; Decrement count of chars remaining - JP N2FL3 ; Loop + JP N2FL1 ; Loop ; Initialize DE, B to start processing the extension N2FS2 LD DE,(DMAADDR) ; Destination is start of extension @@ -1681,10 +1684,46 @@ N2FS2 LD DE,(DMAADDR) ; Destination is start of extension LD B,8 ; 8 chars have been written JP N2FS1 ; Jump back into the read-write loop + ; Handle asterix wildcard character +N2FS3 LD A,B ; See how many chars have been written + CP 8 ; >=8? If so we are in the extension + JP C,N2FS4 ; If in main filename (not extension) + + ; Asterix in extension +N2FL2 LD A,'?' ; We will write '?' to rest of extension + LD (DE),A ; Write character + INC DE ; Increment write pointer + INC B ; Increment character count + LD A,B ; See if we are done + CP 8+3 ; Filename+extension + JP Z,N2FS6 ; We are done + JP N2FL2 ; Loop + +N2FS4 ; Asterix in main filename +N2FL3 LD A,'?' ; We will write '?' to rest of filename + LD (DE),A ; Write character + INC DE ; Increment write pointer + INC B ; Increment character count + LD A,B ; See if we are done + CP 8 ; Filename+extension + JP Z,N2FS5 ; We are done - eat chars up until '.' + JP N2FL3 ; Loop + +N2FS5 ; Eat rest of chars up until '.' +N2FL4 LD A,(HL) ; Get character + CP '.' ; See if it is a period + JP Z,N2FS2 ; If so, go process the extension + INC HL ; Increment source pointer + DEC C ; Decrement count of chars remaining + LD A,C ; Get count of chars remaining + CP 0 ; If none left ... + JP Z,N2FS6 ; We are done + JP N2FL4 ; Loop + ; Handle file size info ; TODO This is commented out because it causes problems when called from PARSE ; We need a mode switch to turn this part of the function on and off -N2FS3 ; LD DE,(DMAADDR) ; Pointer to start of FCB +N2FS6 ; LD DE,(DMAADDR) ; Pointer to start of FCB ; LD IX,PATHBUF ; Destination buffer ; CALL FCB2PATH ; Populate PATHLEN and PATH from new FCB ; LD HL,GFIMLI ; Pass address of 6502 JSR instruction @@ -1701,6 +1740,7 @@ N2FS3 ; LD DE,(DMAADDR) ; Pointer to start of FCB ; LD (IX+0CH),B ; Store num extents in EX field of FCB ; LD (IX+0FH),A ; Store num recs in RC field of FCB RET + N2FERR LD DE,(DMAADDR) ; Pointer to start of FCB PUSH DE ; Copy into IX POP IX ; ... @@ -2000,7 +2040,6 @@ PRHEX PUSH AF ; - FILENAME.COM - Load and run FILENAME.COM at 0100H ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -; TODO: Parse * wildcard and generate FCB with ?s ; TODO: For some reason ERA B:????????.??? doesn't work ; TODO: Implement REN, SAVE commands ; TODO: Sanity check / validate number of command args for builtins diff --git a/SOFTCARD80.BIN#041000 b/SOFTCARD80.BIN#041000 index 99cff7394119e589e8e009cc115e4554a8de415c..0f033c009474229146dc158d541e7318fd7dbb25 100644 GIT binary patch delta 2234 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 diff --git a/zapple2.po b/zapple2.po index 26325dc38ae40ffeb9459499263b46a5001da800..8cd1e435a9e7af2d1c63d4e7edc12df62c0df7aa 100644 GIT binary patch delta 2332 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