]> git.sur5r.net Git - cc65/blobdiff - libsrc/atari/open.s
no TGI_ERR_NO_MEM or TGI_ERR_NO_IOCB anymore: replaced by TGI_ERR_NO_RES
[cc65] / libsrc / atari / open.s
index e45f7813fc83a89ac0b0228f3ac03c5d7430b28f..ea3ae543bb3213d49c4d38bb5fcacc74fac2872a 100644 (file)
@@ -1,5 +1,5 @@
 ;
-; Christian Groessler, May-2002
+; Christian Groessler, Jan-2003
 ;
 ; int open(const char *name,int flags,...);
 ;
@@ -7,11 +7,16 @@
        .include "atari.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
@@ -34,7 +39,6 @@ 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 +51,6 @@ iocbok:       stx     tmp4
        jsr     clriocb         ; init with zero
        ldy     #1
        jsr     ldaxysp         ; get mode
-       ;brk
        ldx     tmp4
        pha
        and     #O_APPEND
@@ -149,3 +152,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