prime/src/Runtime/ansi_files.c

120 lines
2.1 KiB
C

#include "ansi_files.h"
static unsigned char stdin_buff[0x100];
static unsigned char stdout_buff[0x100];
static unsigned char stderr_buff[0x100];
extern int fclose(FILE*);
extern int __read_console(__file_handle file, unsigned char* buff, size_t* count,
__idle_proc idle_proc);
extern int __write_console(__file_handle file, unsigned char* buff, size_t* count,
__idle_proc idle_proc);
extern int __close_console(__file_handle file);
FILE __files[4] = {
{0,
{0, 1, 1, 2, 0},
{0, 0, 0, 0},
0,
0,
0,
{0, 0},
{0, 0},
0,
stdin_buff,
sizeof(stdin_buff),
stdin_buff,
0,
0,
0,
0,
NULL,
&__read_console,
&__write_console,
&__close_console,
0,
&__files[1]},
{1,
{0, 2, 1, 2, 0},
{0, 0, 0, 0},
0,
0,
0,
{0, 0},
{0, 0},
0,
stdout_buff,
sizeof(stdout_buff),
stdout_buff,
0,
0,
0,
0,
NULL,
&__read_console,
&__write_console,
&__close_console,
0,
&__files[2]},
{2,
{0, 2, 0, 2, 0},
{0, 0, 0, 0},
0,
0,
0,
{0, 0},
{0, 0},
0,
stderr_buff,
sizeof(stderr_buff),
stderr_buff,
0,
0,
0,
0,
NULL,
&__read_console,
&__write_console,
&__close_console,
0,
&__files[3]},
};
void __close_all() {
FILE* p = &__files[0];
FILE* plast;
// __begin_critical_region(2);
while (p != NULL) {
if (p->mode.file_kind != __closed_file) {
fclose(p);
}
plast = p;
p = p->next_file_struct;
if (plast->is_dynamically_allocated)
free(plast);
else {
plast->mode.file_kind = __unavailable_file;
if ((p != NULL) && p->is_dynamically_allocated)
plast->next_file_struct = NULL;
}
}
// __end_critical_region(2);
}
int __flush_all() {
int retval = 0;
FILE* __stream;
__stream = &__files[0];
while (__stream) {
if ((__stream->mode.file_kind) && (fflush(__stream))) {
retval = -1;
}
__stream = __stream->next_file_struct;
};
return retval;
}