cc65/libsrc/apple2/filedes.s

56 lines
1.3 KiB
ArmAsm

;
; Oliver Schmidt, 30.12.2004
;
; File descriptor management for the POSIX I/O routines
;
.include "errno.inc"
.include "fcntl.inc"
.include "filedes.inc"
getfd:
; Check for handle >= 256
cpx #$00
bne error
; Check for handle >= MAX_FDS
cmp #MAX_FDS
bcs error
; Convert handle to fdtab slot
.assert .sizeof(FD) = 4, error
asl
asl
; Check for fdtab slot in use
tay
lda fdtab + FD::REF_NUM,y
beq error
; Return success
clc
rts
; Load errno code and return error
error: lda #EINVAL
sec
rts
.data
fdtab: .assert .sizeof(FD) = 4, error
.byte $80 ; STDIN_FILENO ::REF_NUM
.byte O_RDONLY ; STDIN_FILENO ::FLAGS
.addr $0000 ; STDIN_FILENO ::BUFFER
.byte $80 ; STDOUT_FILENO::REF_NUM
.byte O_WRONLY ; STDOUT_FILENO::FLAGS
.addr $0000 ; STDOUT_FILENO::BUFFER
.byte $80 ; STDERR_FILENO::REF_NUM
.byte O_WRONLY ; STDERR_FILENO::FLAGS
.addr $0000 ; STDERR_FILENO::BUFFER
.res (MAX_FDS - 3) * .sizeof(FD)