]> git.sur5r.net Git - cc65/commitdiff
support append mode
authorcpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 16 May 2002 15:28:07 +0000 (15:28 +0000)
committercpg <cpg@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Thu, 16 May 2002 15:28:07 +0000 (15:28 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1272 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/atari/open.s

index f28f8a0324198632d901e478f12588defe3d3c89..2d7957a93db753f7ce9deae93830b15fe48f1402 100644 (file)
@@ -1,5 +1,5 @@
 ;
-; Christian Groessler, May-2000
+; Christian Groessler, May-2002
 ;
 ; int open(const char *name,int flags,...);
 ;
@@ -42,13 +42,33 @@ seterr:     jsr     __seterrno
        rts                     ; return -1
 
        ; process the mode argument
-       ; @@@TODO: append not handled yet!
 
 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        ; file name is too long
+       ldx     #>EINVAL
+       jmp     seterr
+.endif
+       
+no_app:        pla
+       and     #15
        cmp     #O_RDONLY
        bne     l1
        lda     #OPNIN
@@ -73,7 +93,7 @@ cont: ldy     #3
 
        jsr     ucase_fn
        bcc     ucok1
-       lda     #<EINVAL        ; file name is too long
+invret:        lda     #<EINVAL        ; file name is too long
        ldx     #>EINVAL
        jmp     seterr
 ucok1: