]> git.sur5r.net Git - cc65/blobdiff - libsrc/common/fmisc.s
Renamed to '--no-crt-lib'
[cc65] / libsrc / common / fmisc.s
index c9125939e64f022c309145d0753c3b774ae1a776..156a80dbcde58e02cb0b73580e52768e60eabc07 100644 (file)
@@ -4,79 +4,90 @@
 ; Several small file stream functions
 ;
 
-       .export         _clearerr, _feof, _ferror, _fileno, _fflush
-       .import         return0
-       .importzp       ptr1
+        .export         _clearerr, _feof, _ferror, _fileno, _fflush
+        .import         return0
+        .importzp       ptr1
 
         .include        "_file.inc"
+        .include        "errno.inc"
 
 ;
-; Get the FILE* parameter, check if the file is open
-;
-
-getf:  sta     ptr1
-       stx     ptr1+1
-       ldy     #_FILE::f_flags
-       lda     (ptr1),y        ; get f->f_flags
-       and     #_FOPEN         ; file open?
-       beq     @L1             ; jump if no
-       clc                     ; ok
-       rts
-@L1:   sec
-       rts
+; Get the FILE* parameter, check if the file is open. Returns zero in A
+; and zero flag set in case of an error.
+
+.proc   getf
+        sta     ptr1
+        stx     ptr1+1
+        ldy     #_FILE::f_flags
+        lda     (ptr1),y        ; get f->f_flags
+        and     #_FOPEN         ; file open?
+        rts
+.endproc
 
 ;
 ; void clearerr (FILE* f);
 ;
 
-_clearerr:
-               jsr     getf
-               bcs     err
-               lda     (ptr1),y
-               and     #<~(_FEOF | _FERROR)
-               sta     (ptr1),y
-err:   rts
+.proc   _clearerr
+        jsr     getf
+        beq     err
+        lda     (ptr1),y
+        and     #<~(_FEOF | _FERROR)
+        sta     (ptr1),y
+err:    rts
+.endproc
 
 ;
 ; int feof (FILE* f);
 ;
 
-_feof:
-       jsr     getf
-;      bcs     err
-       lda     (ptr1),y
-       and     #_FEOF
-       ldx     #0
-       rts
+.proc   _feof
+        jsr     getf
+        beq     @L1             ; Return 0 on error
+        lda     (ptr1),y
+        and     #_FEOF
+@L1:    ldx     #0
+        rts
+.endproc
 
 ;
 ; int ferror (FILE* f);
 ;
 
-_ferror:
-       jsr     getf
-;      bcs     err
-       lda     (ptr1),y
-       and     #_FERROR
-       ldx     #0
-       rts
+.proc   _ferror
+        jsr     getf
+        beq     @L1             ; Return 0 on error
+        lda     (ptr1),y
+        and     #_FERROR
+@L1:    ldx     #0
+        rts
+.endproc
 
 ;
 ; int fileno (FILE* f);
 ;
 
-_fileno:
-       jsr     getf
-;      bcs     err
-       dey
-       lda     (ptr1),y
-       ldx     #0
-       rts
+.proc   _fileno
+        jsr     getf
+        beq     error
+        ldy     #_FILE::f_fd
+        lda     (ptr1),y
+        ldx     #0
+        rts
+
+; If the file is not valid, fileno must set errno and return -1
+
+error:  lda     #<EBADF
+        jsr     __seterrno
+        lda     #$FF
+        tax
+        rts
+.endproc
 
 ;
 ; int __fastcall__ fflush (FILE* f);
 ;
 
-_fflush        = return0
+_fflush = return0