Implemented *DTITLE (disk title.) See #213.

This commit is contained in:
Bobbi Webber-Manners 2022-12-14 23:09:17 -05:00
parent c7bc1a7adc
commit 6d418d7b4a
3 changed files with 60 additions and 22 deletions

Binary file not shown.

View File

@ -317,7 +317,7 @@ FSCCOMMAND ASC 'ACCESS'
ASC 'FREE'
DB $FF
DW FSCFREE-1 ; FREE (<drv>), LPTR=>params
ASC 'TITLE'
ASC 'DTITLE'
DB $FF
DW FSCTITLE-1 ; TITLE (<drv>) <title>, LPTR=>params
*
@ -846,7 +846,19 @@ DESTROY JSR PARSLPTR ; Copy filename->MOSFILE
* LPTR=>parameters string
* Syntax: *TITLE (<drive>) <title>
*
FSCTITLE RTS
FSCTITLE JSR PARSLPTR ; Copy arg1->MOSFILE
BEQ :SYNTAX ; No args
JSR PARSLPTR2 ; Copy arg2->MOSFILE2
BNE :S1 ; If two args, skip
>>> WRTMAIN
STZ MOSFILE2 ; One arg, MOSFILE2=""
>>> WRTAUX
:S1 >>> XF2MAIN,DISKTITLE
RTS
:SYNTAX BRK
DB $DC
ASC 'Syntax: TITLE (<drv>) <title>'
BRK
* Parse filename pointed to by XY

View File

@ -33,7 +33,7 @@ RENFILE >>> ENTMAIN
JSR PREPATH ; Preprocess arg2
JSR COPYMF12 ; Put it back in MOSFILE2
JSR TMPtoMF ; Recover arg1->MOSFILE
LDA #<MOSFILE
RENFILE2 LDA #<MOSFILE
STA RENPL+1
LDA #>MOSFILE
STA RENPL+2
@ -46,6 +46,27 @@ RENFILE >>> ENTMAIN
DW RENPL
>>> XF2AUX,RENRET
* Set name of volume dir, for *TITLE
* Special case of renaming
* Case 1: Disk ID in MOSFILE, title in MOSFILE2
* Case 2: Title in MOSFILE, MOSFILE2=""
*
DISKTITLE >>> ENTMAIN
LDA MOSFILE2
BNE :CASE1
JSR COPYMF12 ; Copy title->MOSFILE2
LDA #$01 ; MOSFILE2 = "@"
STA MOSFILE1
LDA #'@'
STA MOSFILE1 + 1
:CASE1 JSR PREPATH ; Preprocess pathname
BCS :EXIT
JSR TRUNCPATH ; Truncate to top level
JMP RENFILE2
:EXIT >>> XF2AUX,RENRET
* ProDOS file handling for file copying
* Returns with ProDOS error code in A
COPYFILE >>> ENTMAIN
@ -1034,6 +1055,22 @@ INFOFIRST LDA WILDIDX
CATARG DB $00
* Helper routine to truncate path in MOSFILE at the top level
* So '/FOO/BAR/BAZ' -> '/FOO'
TRUNCPATH LDX #$01 ; Skip over initial '/'
:L1 CPX MOSFILE ; See if end of string
BCS :EXIT ; If so ... we are done
BEQ :EXIT
LDA MOSFILE+1,X ; Get char from path
CMP #'/' ; See if it is slash
BNE :NOTSLASH
STX MOSFILE ; If so, truncate here
BRA :EXIT
:NOTSLASH INX
BRA :L1
:EXIT RTS
* Set prefix. Used by *CHDIR/*DRIVE to change directory
* Y= $00 - CHDIR, select any directory
* Y<>$00 - DRIVE, must select root
@ -1045,9 +1082,11 @@ SETPFX >>> ENTMAIN
JSR WILDONE ; Handle any wildcards
LDA #$2E
BCS :EXIT ; Exit with wildcard path
* TO DO: If DRIVE disallow selecting a directory
*
LDA #<MOSFILE
PLY ; CHDIR/DRIVE flag
CPY #$00 ; If <> $00 (ie: *DRIVE)
BEQ :CHDIR
JSR TRUNCPATH ; Truncate to top level
:CHDIR LDA #<MOSFILE
STA SPFXPL+1
LDA #>MOSFILE
STA SPFXPL+2
@ -1055,8 +1094,7 @@ SETPFX >>> ENTMAIN
DB SPFXCMD
DW SPFXPL
:EXIT PLY ; Drop CHDIR/DRIVE flag
>>> XF2AUX,CHDIRRET
:EXIT >>> XF2AUX,CHDIRRET
* Obtain info on total/used blocks
@ -1068,20 +1106,8 @@ DRVINFO >>> ENTMAIN
STA MOSFILE+1 ; Convert "" to "@"
:DRVINF2 JSR PREPATH
BCS :EXIT
LDX #$01 ; Skip over initial '/'
:L1 CPX MOSFILE ; See if end of string
BCS :S1 ; If so ... we are done
BEQ :S1
LDA MOSFILE+1,X ; Get char from path
CMP #'/' ; See if it is slash
BNE :S2
STX MOSFILE ; If so, truncate here
BRA :S1
:S2 INX
BRA :L1
:S1 LDA #<MOSFILE
JSR TRUNCPATH ; Truncate to top level
LDA #<MOSFILE
STA GINFOPL+1
LDA #>MOSFILE
STA GINFOPL+2