; File name handling for ProDOS 8 file I/O
;
- .export pushname, popname
- .import subysp, addysp, decsp1
+ .export pushname, popname
+ .import subysp, addysp, decsp1
- .include "zeropage.inc"
- .include "mli.inc"
+ .include "zeropage.inc"
+ .include "mli.inc"
pushname:
- sta ptr1
- stx ptr1+1
+ sta ptr1
+ stx ptr1+1
; Alloc pathname buffer
- ldy #64+1 ; Max pathname length + zero
- jsr subysp
+ ldy #64+1 ; Max pathname length + zero
+ jsr subysp
; Check for full pathname
- ldy #$00
- lda (ptr1),y
- cmp #'/'
- beq copy
+ ldy #$00
+ lda (ptr1),y
+ cmp #'/'
+ beq copy
; Check for system prefix
- lda PFIXPTR
- bne copy
+ lda PFIXPTR
+ bne copy
; Use unit number of most recent accessed device
- lda DEVNUM
- sta mliparam + MLI::ON_LINE::UNIT_NUM
+ lda DEVNUM
+ sta mliparam + MLI::ON_LINE::UNIT_NUM
; Use allocated pathname buffer
- lda sp
- ldx sp+1
- sta mliparam + MLI::ON_LINE::DATA_BUFFER
- stx mliparam + MLI::ON_LINE::DATA_BUFFER+1
+ lda sp
+ ldx sp+1
+ sta mliparam + MLI::ON_LINE::DATA_BUFFER
+ stx mliparam + MLI::ON_LINE::DATA_BUFFER+1
; Get volume name
- lda #ON_LINE_CALL
- ldx #ON_LINE_COUNT
- jsr callmli
- bcs addsp65
+ lda #ON_LINE_CALL
+ ldx #ON_LINE_COUNT
+ jsr callmli
+ bcs addsp65
; Get volume name length
- lda (sp),y
- and #15 ; Max volume name length
+ lda (sp),y
+ and #15 ; Max volume name length
; Bracket volume name with slashes to form prefix
- sta tmp1
- lda #'/'
- sta (sp),y
- ldy tmp1
- iny ; Leading slash
- sta (sp),y
- iny ; Trailing slash
+ sta tmp1
+ lda #'/'
+ sta (sp),y
+ ldy tmp1
+ iny ; Leading slash
+ sta (sp),y
+ iny ; Trailing slash
; Adjust source pointer for copy
- sty tmp1
- lda ptr1
+ sty tmp1
+ lda ptr1
sec
- sbc tmp1
- bcs :+
- dec ptr1+1
-: sta ptr1
+ sbc tmp1
+ bcs :+
+ dec ptr1+1
+: sta ptr1
; Copy source to allocated pathname buffer
-copy: lda (ptr1),y
- sta (sp),y
- beq setlen
+copy: lda (ptr1),y
+ sta (sp),y
+ beq setlen
iny
- cpy #64+1 ; Max pathname length + zero
- bcc copy
+ cpy #64+1 ; Max pathname length + zero
+ bcc copy
; Load oserror code
- lda #$40 ; "Invalid pathname"
+ lda #$40 ; "Invalid pathname"
; Free pathname buffer
addsp65:ldy #64+1
- bne addsp ; Branch always
+ bne addsp ; Branch always
; Alloc and set length byte
setlen: tya
- jsr decsp1 ; Preserves A
- ldy #$00
- sta (sp),y
+ jsr decsp1 ; Preserves A
+ ldy #$00
+ sta (sp),y
; Return success
tya
popname:
; Cleanup stack
- ldy #1 + 64+1 ; Length byte + max pathname length + zero
-addsp: jmp addysp ; Preserves A
+ ldy #1 + 64+1 ; Length byte + max pathname length + zero
+addsp: jmp addysp ; Preserves A