1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81
|
;
; Oliver Schmidt, 2010-05-24
;
; char* __fastcall__ getdevicedir (unsigned char device, char* buf, size_t size);
;
.export _getdevicedir
.import popptr1, popa
.include "zeropage.inc"
.include "errno.inc"
.include "mli.inc"
_getdevicedir:
; Save size
sta ptr2
stx ptr2+1
; Save buf
jsr popptr1
; Set buf
ldx ptr1+1
sta mliparam + MLI::ON_LINE::DATA_BUFFER
stx mliparam + MLI::ON_LINE::DATA_BUFFER+1
; Set device
jsr popa
asl
asl
asl
asl
sta mliparam + MLI::ON_LINE::UNIT_NUM
; Check for valid slot
and #$70
beq erange
; Check for sufficient buf size
lda ptr2+1
bne :++ ; Buf >= 256
lda ptr2
cmp #17
bcs :++ ; Buf >= 17
; Handle errors
erange: lda #<ERANGE
jsr __directerrno
bne :+ ; Branch always
oserr: jsr __mappederrno
: lda #$00 ; Return NULL
tax
rts
; Get volume name
: lda #ON_LINE_CALL
ldx #ON_LINE_COUNT
jsr callmli
bcs oserr
; Get volume name length
ldy #$00
lda (ptr1),y
and #15 ; Max volume name length
sta tmp1
; Add leading slash
lda #'/'
sta (ptr1),y
; Add terminating zero
ldy tmp1
iny
lda #$00
sta (ptr1),y
sta __oserror ; Clear _oserror
; Success, return buf
lda ptr1
ldx ptr1+1
rts
|