mirror of
https://github.com/cc65/cc65.git
synced 2024-08-31 07:29:23 +00:00
77 lines
1.7 KiB
ArmAsm
77 lines
1.7 KiB
ArmAsm
;
|
|
; Ullrich von Bassewitz, 31.05.1998
|
|
;
|
|
; 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
|
|
|
|
.data
|
|
|
|
__filetab:
|
|
.byte 0, _FOPEN ; stdin
|
|
.byte 1, _FOPEN ; stdout
|
|
.byte 2, _FOPEN ; stderr
|
|
.repeat FOPEN_MAX - 3
|
|
.byte 0, _FCLOSED ; free slot
|
|
.endrepeat
|
|
|
|
|
|
; Standard file descriptors
|
|
|
|
_stdin:
|
|
.word __filetab + (STDIN_FILENO * _FILE_size)
|
|
|
|
_stdout:
|
|
.word __filetab + (STDOUT_FILENO * _FILE_size)
|
|
|
|
_stderr:
|
|
.word __filetab + (STDERR_FILENO * _FILE_size)
|
|
|
|
|
|
; Temp storage for closeallstreams
|
|
|
|
.bss
|
|
index: .res 1
|
|
|