.export initcwd
.import __cwd
+ .import subysp, addysp
.include "zeropage.inc"
.include "mli.inc"
- .segment "INIT"
-
+ .segment "INIT"
+
initcwd:
- ; Use imported buffer
- lda #<__cwd
- ldx #>__cwd
+ ; Alloc prefix buffer
+ ldy #1 + 64+1 ; Length byte + max pathname length+trailing slash
+ jsr subysp
+
+ ; Use allocated prefix buffer
+ lda sp
+ ldx sp+1
sta mliparam + MLI::PREFIX::PATHNAME
stx mliparam + MLI::PREFIX::PATHNAME+1
lda #GET_PREFIX_CALL
ldx #PREFIX_COUNT
jsr callmli
+ bcs done
- ; Check length byte
- ldx __cwd
+ ; Check for null prefix
+ ldy #$00
+ lda (sp),y
beq done
- ; Replace trailing slash with zero
- sta __cwd,x ; A = 0
-
- ; Remove length byte
- tax
-: inx
- lda __cwd,x
- sta __cwd-1,x
+ ; Set current working directory
+ ; - omit trailing slash and length byte
+ ; - terminating zero already in place
+ tay
+ dey
+: lda (sp),y
+ sta __cwd-1,y
+ dey
bne :-
-done: rts
+ ; Cleanup stack
+done: ldy #1 + 64+1 ; Length byte + max pathname length+trailing slash
+ jmp addysp
+