1
0
mirror of https://github.com/cc65/cc65.git synced 2024-12-23 19:29:37 +00:00
cc65/libsrc/apple2/filename.s

98 lines
2.3 KiB
ArmAsm

;
; Oliver Schmidt, 30.12.2004
;
; File name handling for ProDOS 8 file I/O
;
.export pushname, popname
.import subysp, addysp, decsp1
.include "zeropage.inc"
.include "mli.inc"
pushname:
sta ptr1
stx ptr1+1
; Alloc pathname buffer
ldy #64+1 ; Max pathname length + zero
jsr subysp
; Check for full pathname
ldy #$00
lda (ptr1),y
cmp #'/'
beq copy
; Check for system prefix
lda PFIXPTR
bne copy
; Use unit number of most recent accessed device
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
; Get volume name
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
; 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
; Adjust source pointer for copy
sty tmp1
lda ptr1
sec
sbc tmp1
bcs :+
dec ptr1+1
: sta ptr1
; Copy source to allocated pathname buffer
copy: lda (ptr1),y
sta (sp),y
beq setlen
iny
cpy #64+1 ; Max pathname length + zero
bcc copy
; Load oserror code
lda #$40 ; "Invalid pathname"
; Free pathname buffer
addsp65:ldy #64+1
bne addsp ; Branch always
; Alloc and set length byte
setlen: tya
jsr decsp1 ; Preserves A
ldy #$00
sta (sp),y
; Return success
tya
rts
popname:
; Cleanup stack
ldy #1 + 64+1 ; Length byte + max pathname length + zero
addsp: jmp addysp ; Preserves A