cave-story-solaris/src/File.cpp
Clownacy 5ea356a3bd Weed out a lot of the Windows dependency
Storytime: Cucky's original SDL2 port work involved using SDL2's
threading API to emulate the original WinAPI threading.

I can't be assed with that stuff, so I used the same trick Cucky did
for the Wii port, and hooked Organya up to the SDL2 audio callback.
This actually opens up the possibility for perfectly-synchronised
Organya playback. By that I mean, instead of needing a super
low-latency audio callback, I can have the callback synchronise its
audio mixing with Organya itself. I haven't done it yet, I plan to
soon.
2019-09-04 00:28:23 +01:00

96 lines
1.7 KiB
C++

#include "File.h"
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
long LoadFileToMemory(const char *file_path, unsigned char **file_buffer)
{
long returned_size = -1;
FILE *file = fopen(file_path, "rb");
if (file != NULL)
{
if (!fseek(file, 0, SEEK_END))
{
const long file_size = ftell(file);
if (file_size >= 0)
{
rewind(file);
*file_buffer = (unsigned char*)malloc(file_size);
if (*file_buffer != NULL)
{
if (fread(*file_buffer, file_size, 1, file) == 1)
returned_size = file_size;
}
}
}
fclose(file);
}
return returned_size;
}
unsigned short File_ReadBE16(FILE *stream)
{
unsigned char bytes[2];
fread(bytes, 2, 1, stream);
return (bytes[0] << 8) | bytes[1];
}
unsigned long File_ReadBE32(FILE *stream)
{
unsigned char bytes[4];
fread(bytes, 4, 1, stream);
return (bytes[0] << 24) | (bytes[1] << 16) | (bytes[2] << 8) | bytes[3];
}
unsigned short File_ReadLE16(FILE *stream)
{
unsigned char bytes[2];
fread(bytes, 2, 1, stream);
return (bytes[1] << 8) | bytes[0];
}
unsigned long File_ReadLE32(FILE *stream)
{
unsigned char bytes[4];
fread(bytes, 4, 1, stream);
return (bytes[3] << 24) | (bytes[2] << 16) | (bytes[1] << 8) | bytes[0];
}
void File_WriteBE16(unsigned short value, FILE *stream)
{
for (unsigned int i = 2; i-- != 0;)
fputc(value >> (8 * i), stream);
}
void File_WriteBE32(unsigned long value, FILE *stream)
{
for (unsigned int i = 4; i-- != 0;)
fputc(value >> (8 * i), stream);
}
void File_WriteLE16(unsigned short value, FILE *stream)
{
for (unsigned int i = 0; i < 2; ++i)
fputc(value >> (8 * i), stream);
}
void File_WriteLE32(unsigned long value, FILE *stream)
{
for (unsigned int i = 0; i < 4; ++i)
fputc(value >> (8 * i), stream);
}