2002-11-24 19:13:38 +00:00
|
|
|
;
|
|
|
|
; Ullrich von Bassewitz, 22.11.2002
|
|
|
|
;
|
|
|
|
; int __fastcall__ fclose (FILE* f);
|
|
|
|
; /* Close a file */
|
|
|
|
;
|
|
|
|
|
|
|
|
.export _fclose
|
|
|
|
|
|
|
|
.import _close
|
2003-12-03 10:15:33 +00:00
|
|
|
.importzp ptr1
|
2002-11-24 19:13:38 +00:00
|
|
|
|
|
|
|
.include "errno.inc"
|
|
|
|
.include "_file.inc"
|
|
|
|
|
|
|
|
; ------------------------------------------------------------------------
|
|
|
|
; Code
|
|
|
|
|
|
|
|
.proc _fclose
|
|
|
|
|
|
|
|
sta ptr1
|
|
|
|
stx ptr1+1 ; Store f
|
|
|
|
|
|
|
|
; Check if the file is really open
|
|
|
|
|
2003-12-03 10:15:33 +00:00
|
|
|
ldy #_FILE::f_flags
|
2002-11-24 19:13:38 +00:00
|
|
|
lda (ptr1),y
|
|
|
|
and #_FOPEN
|
|
|
|
bne @L1
|
|
|
|
|
|
|
|
; File is not open
|
|
|
|
|
|
|
|
lda #EINVAL
|
2004-05-13 21:09:08 +00:00
|
|
|
jsr __seterrno
|
|
|
|
lda #$FF ; Return -1
|
|
|
|
tax
|
2002-11-24 19:13:38 +00:00
|
|
|
rts
|
|
|
|
|
|
|
|
; File is open. Reset the flags and close the file.
|
|
|
|
|
|
|
|
@L1: lda #_FCLOSED
|
|
|
|
sta (ptr1),y
|
|
|
|
|
2003-12-03 10:15:33 +00:00
|
|
|
ldy #_FILE::f_fd
|
2002-11-24 19:13:38 +00:00
|
|
|
lda (ptr1),y
|
|
|
|
ldx #0
|
|
|
|
jmp _close ; Will set errno and return an error flag
|
|
|
|
|
|
|
|
.endproc
|
|
|
|
|