1
0
mirror of https://github.com/cc65/cc65.git synced 2024-07-05 06:28:57 +00:00

initial version by Stefan A. Haubenthal

git-svn-id: svn://svn.cc65.org/cc65/trunk@4828 b7a2c559-68d2-44c3-8de9-860c34a00d81
This commit is contained in:
cpg 2010-10-28 20:55:18 +00:00
parent ef5f3970e5
commit 1aeb5651f5

117
libsrc/atari/posixdirent.s Normal file
View File

@ -0,0 +1,117 @@
; Native: Shawn Jefferson, December 2005
; POSIX: Stefan Haubenthal, April 2008
.include "atari.inc"
.export _opendir, _readdir, _closedir
.import findfreeiocb, clriocb
.import __oserror, return0, __do_oserror
.importzp ptr1, tmp1
_opendir: sta ptr1
stx ptr1+1
jsr findfreeiocb
beq @iocbok
bne cioerr
@iocbok: stx diriocb
jsr clriocb
ldx diriocb
lda #<defdev
sta ICBAL,x
lda #>defdev
sta ICBAH,x
ldy #0 ; '.' -> "D:*.*"
lda (ptr1),y
cmp #'.'
beq @default
lda ptr1
sta ICBAL,x
lda ptr1+1
sta ICBAH,x
@default: lda #OPEN
sta ICCOM,x
lda #OPNIN|DIRECT
sta ICAX1,x
jsr CIOV
bmi cioerr
lda #0
sta __oserror
tax
lda diriocb
rts
cioerr: sty __oserror
jmp return0
.proc _readdir
tax
lda #GETREC
sta ICCOM,x
lda #<entry
sta ICBAL,x
sta ptr1
lda #>entry
sta ICBAH,x
sta ptr1+1
lda #DSCTSZ
sta ICBLL,x
lda #0
sta ICBLH,x
jsr CIOV
bmi cioerr
ldy #0 ; FREE SECTORS
lda (ptr1),y
cmp #'0'
bcs cioerr
dey
@next: iny ; remove trailing spaces
iny
iny
lda (ptr1),y
dey
dey
sta (ptr1),y
cpy #9
bcs @break
cmp #' '
bne @next
@break: lda #'.' ; extension dot
sta (ptr1),y
iny ; copy extension
sty tmp1
ldy #10
jsr copychar
ldy #11
jsr copychar
ldy #12
jsr copychar
lda #0 ; end of string
sta (ptr1),y
lda ptr1
ldx ptr1+1
rts
copychar: lda (ptr1),y ; src=y dest=tmp1
cmp #' '
ldy tmp1
beq @break
sta (ptr1),y
iny
sty tmp1
@break: rts
.endproc
.proc _closedir
tax
lda #CLOSE
sta ICCOM,x
jsr CIOV
bmi @cioerr
rts
@cioerr: jmp __do_oserror
.endproc
.rodata
defdev: .asciiz "D:*.*"
.bss
diriocb: .res 1
entry: .res 128