]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/open.s
DIO functions always set _oserror.
[cc65] / libsrc / atari / open.s
index 2d7957a93db753f7ce9deae93830b15fe48f1402..927c1953c24cac1da8a55c20dbf0f74f5fa79e2e 100644 (file)
@@ -1,17 +1,22 @@
 ;
-; Christian Groessler, May-2002
+; Christian Groessler, Jan-2003
 ;
 ; int open(const char *name,int flags,...);
 ;
 
        .include "atari.inc"
-       .include "fmode.inc"
+       .include "fcntl.inc"
        .include "errno.inc"
+       .include "fd.inc"
+
        .export _open
+        .destructor     closeallfiles, 17
+
+       .import _close
        .import clriocb
        .import fddecusage,newfd
        .import findfreeiocb
-       .import __do_oserror,__seterrno,incsp4
+       .import __do_oserror,incsp4
        .import ldaxysp,addysp
        .import __oserror
        .importzp tmp4,tmp2
 
 .proc  _open
 
-       cpy     #4              ; correct # of arguments (bytes)?
+       dey                     ; parm count < 4 shouldn't be needed to be checked
+       dey                     ;       (it generates a c compiler warning)
+       dey
+       dey
        beq     parmok          ; parameter count ok
-       tya                     ; parm count < 4 shouldn't be needed to be checked
-       sec                     ;       (it generates a c compiler warning)
-       sbc     #4
-       tay
        jsr     addysp          ; fix stack, throw away unused parameters
 
 parmok:        jsr     findfreeiocb
        beq     iocbok          ; we found one
 
        lda     #<EMFILE        ; "too many open files"
-       ldx     #>EMFILE
 seterr:        jsr     __seterrno
        jsr     incsp4          ; clean up stack
        lda     #$FF
@@ -47,7 +50,6 @@ iocbok:       stx     tmp4
        jsr     clriocb         ; init with zero
        ldy     #1
        jsr     ldaxysp         ; get mode
-       ;brk
        ldx     tmp4
        pha
        and     #O_APPEND
@@ -66,7 +68,7 @@ invret:       lda     #<EINVAL        ; file name is too long
        ldx     #>EINVAL
        jmp     seterr
 .endif
-       
+
 no_app:        pla
        and     #15
        cmp     #O_RDONLY
@@ -149,3 +151,20 @@ ok:        lda     tmp2            ; get fd
        rts
 
 .endproc
+
+
+; closeallfiles: Close all files opened by the program.
+
+.proc   closeallfiles
+
+       lda     #MAX_FD_INDEX-1
+loop:  ldx     #0
+       pha
+       jsr     _close
+       pla
+       clc
+       sbc     #0
+       bpl     loop
+       rts
+
+.endproc