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' ASC 'FREE'
DB $FF DB $FF
DW FSCFREE-1 ; FREE (<drv>), LPTR=>params DW FSCFREE-1 ; FREE (<drv>), LPTR=>params
ASC 'TITLE' ASC 'DTITLE'
DB $FF DB $FF
DW FSCTITLE-1 ; TITLE (<drv>) <title>, LPTR=>params DW FSCTITLE-1 ; TITLE (<drv>) <title>, LPTR=>params
* *
@ -846,7 +846,19 @@ DESTROY JSR PARSLPTR ; Copy filename->MOSFILE
* LPTR=>parameters string * LPTR=>parameters string
* Syntax: *TITLE (<drive>) <title> * 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 * Parse filename pointed to by XY

View File

@ -33,7 +33,7 @@ RENFILE >>> ENTMAIN
JSR PREPATH ; Preprocess arg2 JSR PREPATH ; Preprocess arg2
JSR COPYMF12 ; Put it back in MOSFILE2 JSR COPYMF12 ; Put it back in MOSFILE2
JSR TMPtoMF ; Recover arg1->MOSFILE JSR TMPtoMF ; Recover arg1->MOSFILE
LDA #<MOSFILE RENFILE2 LDA #<MOSFILE
STA RENPL+1 STA RENPL+1
LDA #>MOSFILE LDA #>MOSFILE
STA RENPL+2 STA RENPL+2
@ -46,6 +46,27 @@ RENFILE >>> ENTMAIN
DW RENPL DW RENPL
>>> XF2AUX,RENRET >>> 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 * ProDOS file handling for file copying
* Returns with ProDOS error code in A * Returns with ProDOS error code in A
COPYFILE >>> ENTMAIN COPYFILE >>> ENTMAIN
@ -1034,6 +1055,22 @@ INFOFIRST LDA WILDIDX
CATARG DB $00 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 * Set prefix. Used by *CHDIR/*DRIVE to change directory
* Y= $00 - CHDIR, select any directory * Y= $00 - CHDIR, select any directory
* Y<>$00 - DRIVE, must select root * Y<>$00 - DRIVE, must select root
@ -1045,9 +1082,11 @@ SETPFX >>> ENTMAIN
JSR WILDONE ; Handle any wildcards JSR WILDONE ; Handle any wildcards
LDA #$2E LDA #$2E
BCS :EXIT ; Exit with wildcard path BCS :EXIT ; Exit with wildcard path
* TO DO: If DRIVE disallow selecting a directory PLY ; CHDIR/DRIVE flag
* CPY #$00 ; If <> $00 (ie: *DRIVE)
LDA #<MOSFILE BEQ :CHDIR
JSR TRUNCPATH ; Truncate to top level
:CHDIR LDA #<MOSFILE
STA SPFXPL+1 STA SPFXPL+1
LDA #>MOSFILE LDA #>MOSFILE
STA SPFXPL+2 STA SPFXPL+2
@ -1055,8 +1094,7 @@ SETPFX >>> ENTMAIN
DB SPFXCMD DB SPFXCMD
DW SPFXPL DW SPFXPL
:EXIT PLY ; Drop CHDIR/DRIVE flag :EXIT >>> XF2AUX,CHDIRRET
>>> XF2AUX,CHDIRRET
* Obtain info on total/used blocks * Obtain info on total/used blocks
@ -1068,20 +1106,8 @@ DRVINFO >>> ENTMAIN
STA MOSFILE+1 ; Convert "" to "@" STA MOSFILE+1 ; Convert "" to "@"
:DRVINF2 JSR PREPATH :DRVINF2 JSR PREPATH
BCS :EXIT BCS :EXIT
JSR TRUNCPATH ; Truncate to top level
LDX #$01 ; Skip over initial '/' LDA #<MOSFILE
: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
STA GINFOPL+1 STA GINFOPL+1
LDA #>MOSFILE LDA #>MOSFILE
STA GINFOPL+2 STA GINFOPL+2