; tmp3 - amount of bytes used on the stack (needed for cleanup)
; Uses:
; ptr4 - scratch pointer used to remember original AX pointer
-;
+;
;
.include "atari.inc"
-
+
+.ifdef DEFAULT_DEVICE
+ .importzp tmp2
+.endif
.importzp tmp3,ptr4,sp
.import _strupr,subysp
.export ucase_fn
-ucase_fn: .proc
+.proc ucase_fn
; we make sure that the filename doesn't contain lowercase letters
; we copy the filename we got onto the stack, uppercase it and use this
sta ptr4
stx ptr4+1
+.ifdef DEFAULT_DEVICE
+ ldy #1
+ sty tmp2 ; initialize flag: device present in passed string
+ lda #':'
+ cmp (ptr4),y
+ beq hasdev
+ iny
+ cmp (ptr4),y
+ beq hasdev
+ sta tmp2 ; set flag: no device is passed string
+hasdev:
+.endif
+
; now we need the length of the name
ldy #0
loop: lda (ptr4),y
dey
bpl loop2 ; bpl: this way we only support a max. length of 127
+.ifdef DEFAULT_DEVICE
+ lda tmp2
+ cmp #1 ; was device present in passed string?
+ beq hasdev2 ; yes, don't prepend something
+
+ inc tmp3 ; no, prepend "D:"
+ inc tmp3 ; adjust stack size used
+ ldy #2
+ jsr subysp ; adjust stack pointer
+ ldy #1
+ lda #':'
+ sta (sp),y ; insert ':'
+ dey
+ lda #'D'
+ sta (sp),y ; insert 'D'
+hasdev2:
+.endif
; uppercase the temp. filename
ldx sp+1
lda sp
clc ; indicate success
rts
-ucase_fn: .endproc
+.endproc