#include "drfile.h"
 
#include "brender/brender.h"
 
#include "harness/trace.h"
 
#include "loading.h"
 
#include <stdlib.h>
 
 
 
br_filesystem gFilesystem = {
 
    "Carmageddon",
 
    NULL,
 
    &DRStdioOpenRead,
 
    &DRStdioOpenWrite,
 
    &DRStdioClose,
 
    NULL,
 
    NULL,
 
    NULL,
 
    &DRStdioRead,
 
    &DRStdioWrite,
 
    NULL,
 
    NULL,
 
    NULL
 
};
 
br_filesystem* gOld_file_system;
 
 
 
// IDA: void* __cdecl DRStdioOpenRead(char *name, br_size_t n_magics, br_mode_test_cbfn *identify, int *mode_result)
 
void* DRStdioOpenRead(char* name, br_size_t n_magics, br_mode_test_cbfn* identify, int* mode_result) {
 
    if (mode_result != NULL) {
 
        *mode_result = 0;
 
    }
 
    return DRfopen(name, "rb");
 
}
 
 
 
// IDA: void* __cdecl DRStdioOpenWrite(char *name, int mode)
 
void* DRStdioOpenWrite(char* name, int mode) {
 
    return gOld_file_system->open_write(name, mode);
 
}
 
 
 
// IDA: void __cdecl DRStdioClose(void *f)
 
void DRStdioClose(void* f) {
 
    gOld_file_system->close(f);
 
}
 
 
 
// IDA: br_size_t __cdecl DRStdioRead(void *buf, br_size_t size, unsigned int n, void *f)
 
br_size_t DRStdioRead(void* buf, br_size_t size, unsigned int n, void* f) {
 
    //br_size_t result; // Pierre-Marie Baty -- unused variable
 
    return gOld_file_system->read(buf, size, n, f);
 
}
 
 
 
// IDA: br_size_t __cdecl DRStdioWrite(void *buf, br_size_t size, unsigned int n, void *f)
 
br_size_t DRStdioWrite(void* buf, br_size_t size, unsigned int n, void* f) {
 
    //br_size_t result; // Pierre-Marie Baty -- unused variable
 
    return gOld_file_system->write(buf, size, n, f);
 
}
 
 
 
// IDA: void __cdecl InstallDRFileCalls()
 
void InstallDRFileCalls(void) {
 
    br_filesystem* temp_system;
 
    LOG_TRACE("()");
 
    temp_system = BrMemAllocate(sizeof(br_filesystem), kMem_temp_fs);
 
    gOld_file_system = BrFilesystemSet(temp_system);
 
    gFilesystem.attributes = gOld_file_system->attributes;
 
    gFilesystem.eof = gOld_file_system->eof;
 
    gFilesystem.getchr = gOld_file_system->getchr;
 
    gFilesystem.putchr = gOld_file_system->putchr;
 
    gFilesystem.getline = gOld_file_system->getline;
 
    gFilesystem.putline = gOld_file_system->putline;
 
    gFilesystem.advance = gOld_file_system->advance;
 
    BrFilesystemSet(&gFilesystem);
 
    BrMemFree(temp_system);
 
}