;
; 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
+ .export __filetab
+ .include "stdio.inc"
.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
.data
__filetab:
- .byte 0, _FOPEN ; stdin
- .byte 1, _FOPEN ; stdout
- .byte 2, _FOPEN ; stderr
+ .byte 0, _FOPEN, 0 ; stdin
+ .byte 1, _FOPEN, 0 ; stdout
+ .byte 2, _FOPEN, 0 ; stderr
.repeat FOPEN_MAX - 3
- .byte 0, _FCLOSED ; free slot
+ .byte 0, _FCLOSED, 0 ; free slot
.endrepeat
; Standard file descriptors
_stdin:
- .word __filetab + (STDIN_FILENO * _FILE_size)
+ .word __filetab + (STDIN_FILENO * .sizeof(_FILE))
_stdout:
- .word __filetab + (STDOUT_FILENO * _FILE_size)
+ .word __filetab + (STDOUT_FILENO * .sizeof(_FILE))
_stderr:
- .word __filetab + (STDERR_FILENO * _FILE_size)
-
-
-; Temp storage for closeallstreams
+ .word __filetab + (STDERR_FILENO * .sizeof(_FILE))
-.bss
-index: .res 1