X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fatari%2Fopen.s;h=927c1953c24cac1da8a55c20dbf0f74f5fa79e2e;hb=2273b7575c1dfc70ddc41f32c58d37ed537980ad;hp=2d7957a93db753f7ce9deae93830b15fe48f1402;hpb=5c2e2e5a9629d438fb6c82e63efb3c6dfad0d432;p=cc65 diff --git a/libsrc/atari/open.s b/libsrc/atari/open.s index 2d7957a93..927c1953c 100644 --- a/libsrc/atari/open.s +++ b/libsrc/atari/open.s @@ -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 @@ -22,19 +27,17 @@ .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 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 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