renamed code_C3B20.c to file.c

This commit is contained in:
mariob92
2024-09-09 19:06:52 +02:00
parent 98d6423dfb
commit 44ecd35d89
3 changed files with 2 additions and 2 deletions

275
src/core2/file.c Normal file
View File

@@ -0,0 +1,275 @@
#include <ultra64.h>
#include "functions.h"
#include "variables.h"
#define FILE_DEFAULT_SIZE 0x20
void file_read(File *file, void *arg1, s32 arg2);
void file_close(File *file) {
if (file->mode == FILE_MODE_2_FROM_ASSET){
assetcache_release(file->asset_base_ptr);
}
free(file);
}
File *file_open(enum asset_e asset_id) {
File * this;
this = (File *) malloc(sizeof(File));
if (this == NULL) {
return NULL;
}
this->mode = FILE_MODE_2_FROM_ASSET;
this->last_expected = -1;
this->unk80 = -1;
this->asset_base_ptr = assetcache_get(asset_id);
this->asset_current_ptr = this->asset_base_ptr;
if (this->asset_current_ptr != NULL) {
return this;
}
free(this);
return NULL;
}
File *file_openMap(enum map_e map_id) {
return file_open(map_id + 0x71C);
}
File *file_openWithBaseIndex(s32 indx, enum asset_e base_indx) {
indx += base_indx;
return file_open(indx);
}
File *file_openFromMem(void *ptr, s32 size) {
File * this;
this = (File *) malloc(sizeof(File));
this->mode = FILE_MODE_3_FROM_MEMORY;
this->last_expected = -1;
this->unk80 = -1;
this->base_ptr = ptr;
this->current_ptr = this->base_ptr;
this->end_ptr = (u8 *) this->base_ptr + size;
return this;
}
File *file_allocNew() {
File *this;
this = (File *) malloc(sizeof(File));
this->mode = FILE_MODE_4_ALLOCATED;
this->last_expected = -1;
this->unk80 = -1;
this->base_ptr = malloc(FILE_DEFAULT_SIZE);
this->current_ptr = this->base_ptr;
this->end_ptr = (u8 *) this->base_ptr + FILE_DEFAULT_SIZE;
return this;
}
void file_realloc(File *file, void **arg1, s32 *size) {
*size = ((u32)file->current_ptr - (u32)file->base_ptr);
*arg1 = realloc(file->base_ptr, *size);
file->base_ptr = NULL;
file_close(file);
}
void file_getByte(File *file, u8 *dst) {
file_read(file, dst, sizeof(u8));
}
void file_getNBytes(File *file, u8 *dst, s32 cnt) {
while (cnt > 0) {
file_getByte(file, dst);
cnt--;
dst++;
}
}
void file_getFloat(File *file, f32 *dst) {
file_read(file, dst, sizeof(f32));
}
void file_getNFloat(File *file, f32 *dst, s32 cnt) {
while (cnt > 0) {
file_getFloat(file, dst);
cnt--;
dst++;
}
}
void file_getWord(File *file, s32 *dst) {
file_read(file, dst, sizeof(s32));
}
void file_getNWords(File *file, s32 *dst, s32 cnt) {
while (cnt > 0) {
file_getWord(file, dst);
cnt--;
dst++;
}
}
void file_read(File *file, void *dst, s32 len) {
u32 curr_offset;
u32 capacity;
void *new_base_ptr;
if (file->mode == FILE_MODE_2_FROM_ASSET) {
memcpy(dst, file->asset_current_ptr, len);
file->asset_current_ptr = (void *) ((u32)file->asset_current_ptr + len);
}
else if (file->mode == FILE_MODE_3_FROM_MEMORY) {
memcpy(dst, file->current_ptr, len);
file->current_ptr = (void *) ((u32)file->current_ptr + len);
}
else if (file->mode == FILE_MODE_4_ALLOCATED) { // why does it write in read function?
if ((u8 *) file->end_ptr < (u8 *) file->current_ptr + len) {
curr_offset = (u8 *) file->current_ptr - (u8 *) file->base_ptr;
capacity = ((u8 *) file->end_ptr - (u8 *) file->base_ptr) * 2;
while (((u8 *) file->base_ptr + capacity) < ((u8*) file->current_ptr + len)) {
capacity *= 2;
}
new_base_ptr = realloc(file->base_ptr, capacity);
file->base_ptr = new_base_ptr;
file->current_ptr = (u8 *) new_base_ptr + curr_offset;
file->end_ptr = (u8 *) new_base_ptr + capacity;
}
memcpy(file->current_ptr, dst, len);
file->current_ptr = (u8 *) file->current_ptr + len;
}
}
void file_getShort(File *file, s16 *dst) {
file_read(file, dst, sizeof(s16));
}
void file_getNShorts(File *file, s16 *dst, s32 cnt) {
while (cnt > 0) {
file_getShort(file, dst);
cnt--;
dst++;
}
}
bool file_isNextByteExpected(File *file, s32 expected) {
u8 saved_expected;
saved_expected = expected;
if ((file->mode == FILE_MODE_1_UNKNOWN) || (file->mode == FILE_MODE_4_ALLOCATED)) {
file_getByte(file, &saved_expected);
return TRUE;
}
if (file->last_expected == -1) {
file_getByte(file, &saved_expected);
if (expected == saved_expected) {
return TRUE;
}
file->last_expected = saved_expected;
return FALSE;
}
if (expected == file->last_expected) {
file->last_expected = -1;
return TRUE;
}
return FALSE;
}
bool file_getByte_ifExpected(File *file, s32 expected, u8 *dst) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getByte(file, dst);
return TRUE;
}
}
bool file_getNBytes_ifExpected(File *file, s32 expected, u8 *dst, s32 cnt) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getNBytes(file, dst, cnt);
return TRUE;
}
}
bool file_getFloat_ifExpected(File *file, s32 expected, f32 *dst) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getFloat(file, dst);
return TRUE;
}
}
bool file_getNFloats_ifExpected(File *file, s32 expected, f32 *dst, s32 cnt) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getNFloat(file, dst, cnt);
return TRUE;
}
}
bool file_getWord_ifExpected(File *file, s32 expected, s32 *dst) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getWord(file, dst);
return TRUE;
}
}
bool file_getNWords_ifExpected(File *file, s32 expected, s32 *dst, s32 cnt) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getNWords(file, dst, cnt);
return TRUE;
}
}
bool file_get_ifExpected(File *file, s32 expected, void *dst, s32 len) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else{
file_read(file, dst, len);
return TRUE;
}
}
bool file_getShort_ifExpected(File *file, s32 expected, s16 *dst) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getShort(file, dst);
return TRUE;
}
}
bool file_getNShorts_ifExpected(File *file, s32 expected, s16 *dst, s32 cnt) {
if (!file_isNextByteExpected(file, expected)) {
return FALSE;
} else {
file_getNShorts(file, dst, cnt);
return TRUE;
}
}