Rev 18 | Details | Compare with Previous | Last modification | View Log | RSS feed
| Rev | Author | Line No. | Line |
|---|---|---|---|
| 1 | pmbaty | 1 | #include "drfile.h" |
| 20 | pmbaty | 2 | #include "brender/brender.h" |
| 1 | pmbaty | 3 | #include "harness/trace.h" |
| 4 | #include "loading.h" |
||
| 5 | #include <stdlib.h> |
||
| 6 | |||
| 7 | br_filesystem gFilesystem = { |
||
| 8 | "Carmageddon", |
||
| 9 | NULL, |
||
| 10 | &DRStdioOpenRead, |
||
| 11 | &DRStdioOpenWrite, |
||
| 12 | &DRStdioClose, |
||
| 13 | NULL, |
||
| 14 | NULL, |
||
| 15 | NULL, |
||
| 16 | &DRStdioRead, |
||
| 17 | &DRStdioWrite, |
||
| 18 | NULL, |
||
| 19 | NULL, |
||
| 20 | NULL |
||
| 21 | }; |
||
| 22 | br_filesystem* gOld_file_system; |
||
| 23 | |||
| 24 | // IDA: void* __cdecl DRStdioOpenRead(char *name, br_size_t n_magics, br_mode_test_cbfn *identify, int *mode_result) |
||
| 25 | void* DRStdioOpenRead(char* name, br_size_t n_magics, br_mode_test_cbfn* identify, int* mode_result) { |
||
| 26 | if (mode_result != NULL) { |
||
| 27 | *mode_result = 0; |
||
| 28 | } |
||
| 29 | return DRfopen(name, "rb"); |
||
| 30 | } |
||
| 31 | |||
| 32 | // IDA: void* __cdecl DRStdioOpenWrite(char *name, int mode) |
||
| 33 | void* DRStdioOpenWrite(char* name, int mode) { |
||
| 34 | return gOld_file_system->open_write(name, mode); |
||
| 35 | } |
||
| 36 | |||
| 37 | // IDA: void __cdecl DRStdioClose(void *f) |
||
| 38 | void DRStdioClose(void* f) { |
||
| 39 | gOld_file_system->close(f); |
||
| 40 | } |
||
| 41 | |||
| 42 | // IDA: br_size_t __cdecl DRStdioRead(void *buf, br_size_t size, unsigned int n, void *f) |
||
| 43 | br_size_t DRStdioRead(void* buf, br_size_t size, unsigned int n, void* f) { |
||
| 44 | //br_size_t result; // Pierre-Marie Baty -- unused variable |
||
| 45 | return gOld_file_system->read(buf, size, n, f); |
||
| 46 | } |
||
| 47 | |||
| 48 | // IDA: br_size_t __cdecl DRStdioWrite(void *buf, br_size_t size, unsigned int n, void *f) |
||
| 49 | br_size_t DRStdioWrite(void* buf, br_size_t size, unsigned int n, void* f) { |
||
| 50 | //br_size_t result; // Pierre-Marie Baty -- unused variable |
||
| 51 | return gOld_file_system->write(buf, size, n, f); |
||
| 52 | } |
||
| 53 | |||
| 54 | // IDA: void __cdecl InstallDRFileCalls() |
||
| 55 | void InstallDRFileCalls(void) { |
||
| 56 | br_filesystem* temp_system; |
||
| 57 | LOG_TRACE("()"); |
||
| 58 | temp_system = BrMemAllocate(sizeof(br_filesystem), kMem_temp_fs); |
||
| 59 | gOld_file_system = BrFilesystemSet(temp_system); |
||
| 60 | gFilesystem.attributes = gOld_file_system->attributes; |
||
| 61 | gFilesystem.eof = gOld_file_system->eof; |
||
| 62 | gFilesystem.getchr = gOld_file_system->getchr; |
||
| 63 | gFilesystem.putchr = gOld_file_system->putchr; |
||
| 64 | gFilesystem.getline = gOld_file_system->getline; |
||
| 65 | gFilesystem.putline = gOld_file_system->putline; |
||
| 66 | gFilesystem.advance = gOld_file_system->advance; |
||
| 67 | BrFilesystemSet(&gFilesystem); |
||
| 68 | BrMemFree(temp_system); |
||
| 69 | } |