X-Git-Url: https://git.sur5r.net/?a=blobdiff_plain;f=libsrc%2Fatari%2Fopen.s;h=8aeff9ed4d24ba4fabe3def1ddc9d151c9686225;hb=619b215260ccb2db384df6a6c4a6ccaace2a77cb;hp=e45f7813fc83a89ac0b0228f3ac03c5d7430b28f;hpb=70bc1777140d9ad7a81f60521b1c981aea195165;p=cc65 diff --git a/libsrc/atari/open.s b/libsrc/atari/open.s index e45f7813f..8aeff9ed4 100644 --- a/libsrc/atari/open.s +++ b/libsrc/atari/open.s @@ -1,151 +1,169 @@ ; -; Christian Groessler, May-2002 +; Christian Groessler, Jan-2003 ; ; int open(const char *name,int flags,...); ; - .include "atari.inc" - .include "fcntl.inc" - .include "errno.inc" - .export _open - .import clriocb - .import fddecusage,newfd - .import findfreeiocb - .import __do_oserror,__seterrno,incsp4 - .import ldaxysp,addysp - .import __oserror - .importzp tmp4,tmp2 -.ifdef UCASE_FILENAME - .importzp tmp3 - .import ucase_fn + .include "atari.inc" + .include "fcntl.inc" + .include "errno.inc" + .include "fd.inc" + + .export _open + .destructor closeallfiles, 5 + + .import _close + .import clriocb + .import fddecusage,newfd + .import findfreeiocb + .import incsp4 + .import ldaxysp,addysp + .import __oserror + .importzp tmp4,tmp2 +.ifdef UCASE_FILENAME + .importzp tmp3 + .import ucase_fn .endif -.proc _open - - cpy #4 ; correct # of arguments (bytes)? - 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 - tax - rts ; return -1 - - ; process the mode argument - -iocbok: stx tmp4 - jsr clriocb ; init with zero - ldy #1 - jsr ldaxysp ; get mode - ;brk - ldx tmp4 - pha - and #O_APPEND - beq no_app - pla - and #15 - cmp #O_RDONLY ; DOS supports append with write-only only - beq invret - cmp #O_RDWR - beq invret - lda #OPNOT|APPEND - bne set - -.ifndef UCASE_FILENAME -invret: lda #EINVAL - jmp seterr +.proc _open + + 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 + jsr addysp ; fix stack, throw away unused parameters + +parmok: jsr findfreeiocb + beq iocbok ; we found one + + lda #EINVAL - jmp seterr + jsr ucase_fn + bcc ucok1 +invret: lda #