]> git.sur5r.net Git - cc65/commitdiff
Add provisions to open a disk directory using open().
authoruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 29 May 2012 20:52:18 +0000 (20:52 +0000)
committeruz <uz@b7a2c559-68d2-44c3-8de9-860c34a00d81>
Tue, 29 May 2012 20:52:18 +0000 (20:52 +0000)
git-svn-id: svn://svn.cc65.org/cc65/trunk@5663 b7a2c559-68d2-44c3-8de9-860c34a00d81

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

index 284ea736d95bdc72a928cab607a46a99c7fe6f16..0674db07e769116d6e0317b03cf2d9a4b651bafe 100644 (file)
@@ -6,7 +6,7 @@
 
         .export         fnparse, fnparsename, fnset
         .export         fnadd, fnaddmode, fncomplete, fndefunit
-        .export         fnunit, fnlen, fncmd, fnbuf
+        .export         fnunit, fnlen, fnisfile, fncmd, fnbuf
 
         .import         SETNAM
         .import         __curunit, __filetype
@@ -106,10 +106,30 @@ drivedone:
         lda     #2              ; Length of drive spec
         sta     fnlen
 
-; Copy the name into the file name buffer. The subroutine returns an error
-; code in A and zero flag set if the were no errors.
+; Assume this is a standard file on disk
 
-        jmp     fnparsename
+        sta     fnisfile
+
+; Special treatment for directory. If the file name is "$", things are
+; actually different: $ is directory for unit 0, $0 dito, $1 is directory
+; for unit 1. For simplicity, we won't check anything else if the first
+; character of the file name is '$'.
+
+        lda     (ptr1),y        ; Get first character
+        cmp     #'$'            ;
+        bne     fnparsename
+
+; Juggle stuff
+
+        ldx     fnbuf+0         ; unit
+        stx     fnbuf+1
+        sta     fnbuf+0
+
+; No need to check the name. Length is already 2
+
+        lda     #0              ; ok flag
+        sta     fnisfile        ; This is not a real file
+        rts
 
 .endproc
 
@@ -163,10 +183,11 @@ fnadd:  ldx     fnlen
 
 .bss
 
-fnunit: .res    1
-fnlen:  .res    1
+fnunit:         .res    1
+fnlen:          .res    1
+fnisfile:       .res    1       ; Flags standard file (as opposed to "$")
 
 .data
-fncmd:  .byte   's'     ; Use as scratch command
-fnbuf:  .res    35      ; Either 0:0123456789012345,t,m
-                        ; Or     0:0123456789012345=0123456789012345
+fncmd:          .byte   's'     ; Use as scratch command
+fnbuf:          .res    35      ; Either 0:0123456789012345,t,m
+                                ; Or     0:0123456789012345=0123456789012345
index df66345931981c7ac62fc2baba573961c5fb79c2..f217068d2f4fa4ba0a150a9adeea3a5d20bf969e 100644 (file)
@@ -15,7 +15,7 @@
         .import         addysp, popax
         .import         scratch, fnparse, fnaddmode, fncomplete, fnset
         .import         opencmdchannel, closecmdchannel, readdiskerror
-        .import         fnunit
+        .import         fnunit, fnisfile
         .import         _close
         .importzp       sp, tmp2, tmp3
 
@@ -158,7 +158,10 @@ common: sta     tmp3
         clc
         adc     #LFN_OFFS
         ldx     fnunit
-        tay                     ; Use the LFN also as SA
+        ldy     fnisfile        ; Is this a standard file on disk?
+        beq     nofile          ; Branch if not
+        tay                     ; Use the LFN also as SA for files
+nofile:                         ; ... else use SA=0 (read)
         jsr     SETLFS          ; Set the file params
 
         jsr     OPEN