;
; Data for the stdio file stream.
;
-; Be sure to keep the value priority of closeallstreams lower than that of
-; closeallfiles (which is the low level POSIX counterpart and must be
-; called after closeallstreams).
.export __filetab, _stdin, _stdout, _stderr
- .destructor closeallstreams, 16
- .import _close
.include "fcntl.inc"
.include "_file.inc"
-;----------------------------------------------------------------------------
-; Close all files on exit
-
-.proc closeallstreams
-
- ldy #((FOPEN_MAX - 1) * _FILE_size)
-loop: sty index ; Save the index
- lda __filetab + _FILE_f_flags,y ; Load file flags
- and #_FOPEN ; Is it open?
- beq next ; jump if closed
-
-; Close this file
-
- lda __filetab + _FILE_f_fd,y
- ldx #0
- jsr _close
-
-; Next file
-
-next: lda index
- sec
- sbc #_FILE_size
- tay
- bcs loop
-
- rts
-
-.endproc
-
;----------------------------------------------------------------------------
; File data
.word __filetab + (STDERR_FILENO * _FILE_size)
-; Temp storage for closeallstreams
-
-.bss
-index: .res 1
-