]> git.sur5r.net Git - cc65/commitdiff
Add support for append mode
authorcuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 19 Nov 2002 14:27:06 +0000 (14:27 +0000)
committercuz <cuz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 19 Nov 2002 14:27:06 +0000 (14:27 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@1542 b7a2c559-68d2-44c3-8de9-860c34a00d81

libsrc/cbm/filename.s
libsrc/cbm/open.s

index 8d00d35beb4f2034eb20f018f85bc9100e29a7a2..594c7da9188f22109be36e59c48e3fda71b38132 100644 (file)
@@ -85,13 +85,13 @@ namecheck:
         bpl     namecheck
         tax
         lda     __ctype,x
-        and     #(CT_LOWER|CT_DIGIT)
+        and     #CT_ALNUM
         beq     invalidname
 
 ; Check the maximum length, store the character
 
 nameok: ldx     fnlen
-        cpx     #14             ; Maximum length reached?
+        cpx     #16             ; Maximum length reached?
         bcs     invalidname
         lda     (ptr1),y        ; Reload char
         sta     fnbuf,x         ; Store into buffer
@@ -158,8 +158,8 @@ fnunit: .res    1
 fnlen:  .res    1
 
 .data
-fncmd:  .byte   's'             ; Use as scratch command
-fnbuf:  .res    20
+fncmd:  .byte   's'     ; Use as scratch command
+fnbuf:  .res    22      ; 0:0123456789012345,t,m
 
 .rodata
 ; Characters that are ok in filenames besides digits and letters
index ad902237a4e13e8bdaa820385fe6fd8550479175..509951b0fe3cdca9661ac4724f88663a5301cbe1 100644 (file)
@@ -50,26 +50,15 @@ parmok: jsr     popax           ; Get flags
         bcs     nofile
         stx     tmp2
 
-; Check the flags. We cannot have:
-;
-;  - both, read and write flags set
-;  - the append flag set
-;
-
-        lda     tmp3
-        and     #O_RDWR
-        beq     invflags        ; Neither read nor write
-        cmp     #O_RDWR
-        beq     invflags        ; Jump if both set
-        cmp     #O_RDONLY
-        beq     doread
-
-; Write bit is set. We cannot open a file for writing without creating it,
-; so check for the O_CREAT bit.
+; Check the flags. We cannot have both, read and write flags set, and we cannot
+; open a file for writing without creating it.
 
         lda     tmp3
-        and     #O_CREAT
-        beq     invflags
+        and     #(O_RDWR | O_CREAT)
+        cmp     #O_RDONLY       ; Open for reading?
+        beq     doread          ; Yes: Branch
+        cmp     #(O_WRONLY | O_CREAT)   ; Open for writing?
+        bne     invflags        ; No: Invalid open mode
 
 ; If O_TRUNC is set, scratch the file, but ignore any errors
 
@@ -78,10 +67,15 @@ parmok: jsr     popax           ; Get flags
         beq     notrunc
         jsr     scratch
 
-; Complete the the file name
+; Complete the the file name. Check for append mode here.
 
 notrunc:
-        lda     #'w'
+        lda     tmp3            ; Get the mode again
+        ldx     #'a'
+        and     #O_APPEND       ; Append mode?
+        bne     append          ; Branch if yes
+        ldx     #'w'
+append: txa
         jsr     fncomplete
 
 ; Setup the real open flags