]> git.sur5r.net Git - cc65/blob - libsrc/apple2/filedes.s
POSIX file I/O by Oliver Schmidt
[cc65] / libsrc / apple2 / filedes.s
1 ;
2 ; Oliver Schmidt, 30.12.2004
3 ;
4 ; File descriptor management for the POSIX I/O routines
5 ;
6
7         .include        "errno.inc"
8         .include        "fcntl.inc"
9         .include        "filedes.inc"
10
11 getfd:
12         ; Check for handle >= 256
13         cpx     #$00
14         bne     error
15
16         ; Check for handle >= MAX_FDS
17         cmp     #MAX_FDS
18         bcs     error
19
20         .if     .sizeof(FD) = 4
21
22         ; Convert handle to fdtab slot
23         asl
24         asl
25
26         .else
27         .error  "Assertion failed"
28         .endif
29
30         ; Check for fdtab slot in use
31         tay
32         lda     fdtab + FD::REF_NUM,y
33         beq     error
34
35         ; Return success
36         clc
37         rts
38
39         ; Load errno code and return error
40 error:  lda     #EINVAL
41         sec
42         rts
43
44         .data
45
46 fdtab:  .if     .sizeof(FD) = 4
47
48         .byte   $80             ; STDIN_FILENO ::REF_NUM
49         .byte   O_RDONLY        ; STDIN_FILENO ::FLAGS
50         .addr   $0000           ; STDIN_FILENO ::BUFFER
51
52         .byte   $80             ; STDOUT_FILENO::REF_NUM
53         .byte   O_WRONLY        ; STDOUT_FILENO::FLAGS
54         .addr   $0000           ; STDOUT_FILENO::BUFFER
55
56         .byte   $80             ; STDERR_FILENO::REF_NUM
57         .byte   O_WRONLY        ; STDERR_FILENO::FLAGS
58         .addr   $0000           ; STDERR_FILENO::BUFFER
59
60         .else
61         .error  "Assertion failed"
62         .endif
63
64         .res    (MAX_FDS - 3) * .sizeof(FD)