86 lines
No EOL
1.8 KiB
C
86 lines
No EOL
1.8 KiB
C
#include "libhost.h"
|
|
#include "stdio.h"
|
|
|
|
|
|
os_u32 libhost_readRoutine(os_u32 amount, void* buffer, void* user_data) {
|
|
if (user_data == 0) {
|
|
return 0;
|
|
}
|
|
FILE* f = (FILE*)user_data;
|
|
|
|
os_u32 read_bytes = fread(buffer, 1, amount, f);
|
|
return read_bytes;
|
|
}
|
|
|
|
os_u32 libhost_writeRoutine(os_u32 amount, void* buffer, void* user_data) {
|
|
if (user_data == 0) {
|
|
return 0;
|
|
}
|
|
|
|
FILE* f = (FILE*)user_data;
|
|
|
|
os_u32 written_bytes = fwrite(buffer, 1, amount, f);
|
|
return written_bytes;
|
|
}
|
|
|
|
os_bool libhost_seekRoutine(os_u32 offset, os_u32 direction, void* user_data) {
|
|
if (user_data == 0) {
|
|
return OS_FALSE;
|
|
}
|
|
|
|
FILE* f = (FILE*)user_data;
|
|
int seek_dir = SEEK_SET;
|
|
switch(direction) {
|
|
case LIBFAT_SEEK_ORIGIN:
|
|
seek_dir = SEEK_SET;
|
|
break;
|
|
case LIBFAT_SEEK_CURRENT:
|
|
seek_dir = SEEK_CUR;
|
|
break;
|
|
case LIBFAT_SEEK_END:
|
|
seek_dir = SEEK_END;
|
|
break;
|
|
}
|
|
|
|
int result = fseek(f, offset, seek_dir);
|
|
return result == 0 ? OS_TRUE : OS_FALSE;
|
|
}
|
|
|
|
os_u32 libhost_tellRoutine(void* user_data) {
|
|
if (user_data == 0) {
|
|
return 0;
|
|
}
|
|
|
|
FILE* f = (FILE*)user_data;
|
|
|
|
os_u32 result = ftell(f);
|
|
return result;
|
|
}
|
|
|
|
void libhost_printRoutine(os_s8* data, os_u16 size) {
|
|
if (size == 0) {
|
|
printf("%s\n", data);
|
|
return;
|
|
}
|
|
|
|
for(os_u16 s = 0; s < size; s++) {
|
|
printf("%c", *data);
|
|
data++;
|
|
}
|
|
printf("\n");
|
|
}
|
|
|
|
void libhost_printNumber(os_u32 number) {
|
|
printf("%#x\n", number);
|
|
}
|
|
|
|
extern LFFileHandle libhost_create_handle(FILE* f) {
|
|
LFFileHandle h;
|
|
h.read = libhost_readRoutine;
|
|
h.write = libhost_writeRoutine;
|
|
h.seek = libhost_seekRoutine;
|
|
h.tell = libhost_tellRoutine;
|
|
h.user_data = (void*)f;
|
|
|
|
return h;
|
|
} |