]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/_fdesc.s
The spans do now contain the size of a span, no longer the end offset.
[cc65] / libsrc / common / _fdesc.s
index 2ffadd5e8cc535d4485b26601fbb96e203100c65..682bcb78eaa924f2d85e2b446a2b39f65c15dc06 100644 (file)
@@ -6,34 +6,38 @@
 
 
                .export         __fdesc
-       .import         return0, __filetab
-       .importzp       tmp1
-
-__fdesc:
-       ldy     #0
-L1:    lda     __filetab+1,y   ; load flags
-       beq     L2              ; jump if empty (== CLOSED)
-       iny
-       iny
-       cpy     #16             ; Done?
-       bne     L1
+       .import         return0
+
+        .include        "stdio.inc"
+        .include        "_file.inc"
+
+.proc   __fdesc
+
+               ldy     #0
+        lda     #_FOPEN
+Loop:          and     __filetab + _FILE::f_flags,y    ; load flags
+               beq     Found                           ; jump if closed
+.repeat .sizeof(_FILE)
+       iny
+.endrepeat
+               cpy     #(FOPEN_MAX * .sizeof(_FILE))   ; Done?
+       bne     Loop
 
 ; File table is full
 
-       jmp     return0
-
-; Free slot found
-
-L2:            sty     tmp1            ; Offset
-       lda     #<__filetab
-       ldx     #>__filetab
-       clc
-       adc     tmp1
-       tay
-       txa
-       adc     #0
-       tax
-       tya
-       rts
+       jmp     return0
+
+; Free slot found, get address
+
+Found:  tya                     ; Offset
+        clc
+        adc     #<__filetab
+        ldx     #>__filetab     ; High byte
+        bcc     @L1             ; Jump if no overflow
+        inx                     ; Bump high byte
+@L1:    rts
+
+.endproc
+