1
0
mirror of https://github.com/cc65/cc65.git synced 2024-10-31 04:04:49 +00:00
cc65/libsrc/common/_file.s

77 lines
1.7 KiB
ArmAsm
Raw Normal View History

;
; 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