#include "file.h"
#include "CORE/FW/fwsetup.h"
#include "CORE/FW/resource.h"
#include "CORE/FW/scratch.h"
#include "CORE/STD/brstdlib.h"
#include "harness/trace.h"
#include <stdarg.h>
#include <stddef.h>
#ifdef BRENDER_FIX_BUGS
#include <ctype.h>
#include <string.h>
#endif
// IDA: void __cdecl _BrFileFree(void *res, br_uint_8 res_class, br_size_t size)
void _BrFileFree(void* res, br_uint_8 res_class, br_size_t size) {
br_file* file;
file = (br_file*)res;
fw.fsys->close(file->raw_file);
}
// IDA: br_uint_32 __cdecl BrFileAttributes()
br_uint_32 BrFileAttributes(void) {
LOG_TRACE("()");
return fw.fsys->attributes();
}
// IDA: void* __cdecl BrFileOpenRead(char *name, br_size_t n_magics, br_mode_test_cbfn *mode_test, int *mode_result)
void* BrFileOpenRead(char* name, br_size_t n_magics, br_mode_test_cbfn* mode_test, int* mode_result) {
void* raw_file;
br_file* file;
int bin_mode;
#ifdef BRENDER_FIX_BUGS
char *s;
#endif
LOG_TRACE("(\"%s\", %d, %p, %p)", name, n_magics, mode_test, mode_result);
bin_mode = 0;
if (mode_result != NULL) {
raw_file = fw.fsys->open_read(name, n_magics, mode_test, mode_result);
} else {
raw_file = fw.fsys->open_read(name, n_magics, mode_test, &bin_mode);
}
if (raw_file == NULL) {
return NULL;
}
file = BrResAllocate(fw.res, sizeof(br_file) + BrStrLen(name) + 1, BR_MEMORY_FILE);
file->writing = 0;
if (mode_result != 0) {
file->mode = *mode_result;
} else {
file->mode = 0;
}
file->raw_file = raw_file;
BrStrCpy(file->name, name);
return file;
}
// IDA: void* __cdecl BrFileOpenWrite(char *name, int mode)
void* BrFileOpenWrite(char* name, int mode) {
void* raw_file;
br_file* file;
raw_file = fw.fsys->open_write(name, mode);
if (raw_file == NULL) {
return NULL;
}
file = BrResAllocate(fw.res, sizeof(br_file) + BrStrLen(name) + 1, BR_MEMORY_FILE);
file->writing = 1;
file->mode = mode;
file->raw_file = raw_file;
BrStrCpy(file->name, name);
return file;
}
// IDA: void __cdecl BrFileClose(void *f)
void BrFileClose(void* f) {
LOG_TRACE("(%p)", f);
BrResFree(f);
}
// IDA: int __cdecl BrFileEof(void *f)
int BrFileEof(void* f) {
return fw.fsys->eof(((br_file*)f)->raw_file);
}
// IDA: int __cdecl BrFileGetChar(void *f)
int BrFileGetChar(void* f) {
return fw.fsys->getchr(((br_file*)f)->raw_file);
}
// IDA: void __cdecl BrFilePutChar(int c, void *f)
void BrFilePutChar(int c, void* f) {
fw.fsys->putchr(c, ((br_file*)f)->raw_file);
}
// IDA: int __cdecl BrFileRead(void *buf, int size, int n, void *f)
int BrFileRead(void* buf, int size, int n, void* f) {
return fw.fsys->read(buf, size, n, ((br_file*)f)->raw_file);
}
// IDA: int __cdecl BrFileWrite(void *buf, int size, int n, void *f)
int BrFileWrite(void* buf, int size, int n, void* f) {
return fw.fsys->write(buf, size, n, ((br_file*)f)->raw_file);
}
// IDA: int __cdecl BrFileGetLine(char *buf, br_size_t buf_len, void *f)
int BrFileGetLine(char* buf, br_size_t buf_len, void* f) {
return fw.fsys->getline(buf, buf_len, ((br_file*)f)->raw_file);
}
// IDA: void __cdecl BrFilePutLine(char *buf, void *f)
void BrFilePutLine(char* buf, void* f) {
fw.fsys->putline(buf, ((br_file*)f)->raw_file);
}
// IDA: void __cdecl BrFileAdvance(long count, void *f)
void BrFileAdvance(long count, void* f) {
fw.fsys->advance(count, ((br_file*)f)->raw_file);
}
// IDA: int __cdecl BrFilePrintf(void *f, char *fmt, ...)
int BrFilePrintf(void* f, char* fmt, ...) {
int n;
va_list args;
LOG_TRACE9("(%p, \"%s\")", f, fmt);
n = BrVSprintf(BrScratchString(), fmt, args);
BrFileWrite(BrScratchString(), 1, n, f);
return n;
}