mirror of https://github.com/PrimeDecomp/prime.git
120 lines
2.1 KiB
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;
|
||
|
}
|