.export initcwd
.import __cwd
- .import subysp, addysp
.include "zeropage.inc"
.include "mli.inc"
- .segment "INIT"
-
initcwd:
- ; 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
+ ; Set static prefix buffer
+ lda #<__cwd
+ ldx #>__cwd
sta mliparam + MLI::PREFIX::PATHNAME
stx mliparam + MLI::PREFIX::PATHNAME+1
lda #GET_PREFIX_CALL
ldx #PREFIX_COUNT
jsr callmli
- bcs done
; Check for null prefix
- ldy #$00
- lda (sp),y
- beq done
-
- ; 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 :-
-
- ; Cleanup stack
-done: ldy #1 + 64+1 ; Length byte + max pathname length+trailing slash
- jmp addysp
-
+ lda __cwd
+ beq done
+
+ ; Remove length byte and trailing slash
+ sta tmp1
+ ldx #$01
+: lda __cwd,x
+ sta __cwd - 1,x
+ inx
+ cpx tmp1
+ bcc :-
+
+ ; Add terminating zero
+ lda #$00
+ sta __cwd - 1,x
+
+done: rts
.export __syschdir
.import pushname, popname
- .import __cwd
+ .import initcwd
.include "zeropage.inc"
.include "mli.inc"
jsr callmli
bcs cleanup
- ldy #$01
-: lda (sp),y
- sta __cwd-1,y
- beq cleanup
- iny
- bne :- ; Branch always
+ ; Update current working directory
+ jsr initcwd ; Returns with A = 0
; Cleanup name
cleanup:jsr popname ; Preserves A