diff options
Diffstat (limited to 'devtools/create_supernova/file.cpp')
-rw-r--r-- | devtools/create_supernova/file.cpp | 72 |
1 files changed, 72 insertions, 0 deletions
diff --git a/devtools/create_supernova/file.cpp b/devtools/create_supernova/file.cpp new file mode 100644 index 0000000000..5fb842aff6 --- /dev/null +++ b/devtools/create_supernova/file.cpp @@ -0,0 +1,72 @@ +#include "file.h" + +bool File::open(const char *filename, AccessMode mode) { + f = fopen(filename, (mode == kFileReadMode) ? "rb" : "wb"); + return (f != NULL); +} + +void File::close() { + fclose(f); + f = NULL; +} + +int File::seek(int32 offset, int whence) { + return fseek(f, offset, whence); +} + +long File::read(void *buffer, int len) { + return fread(buffer, 1, len, f); +} +void File::write(const void *buffer, int len) { + fwrite(buffer, 1, len, f); +} + +byte File::readByte() { + byte v; + read(&v, sizeof(byte)); + return v; +} + +uint16 File::readWord() { + uint16 v; + read(&v, sizeof(uint16)); + return FROM_LE_16(v); +} + +uint32 File::readLong() { + uint32 v; + read(&v, sizeof(uint32)); + return FROM_LE_32(v); +} + +void File::readString(char* string, int bufferLength) { + int i = 0; + while (i < bufferLength - 1 && fread(string + i, 1, 1, f) == 1) { + if (string[i] == '\n' || string[i] == 0) + break; + ++ i; + } + string[i] = 0; +} + +void File::writeByte(byte v) { + write(&v, sizeof(byte)); +} + +void File::writeWord(uint16 v) { + uint16 vTemp = TO_LE_16(v); + write(&vTemp, sizeof(uint16)); +} + +void File::writeLong(uint32 v) { + uint32 vTemp = TO_LE_32(v); + write(&vTemp, sizeof(uint32)); +} + +void File::writeString(const char *s) { + write(s, strlen(s) + 1); +} + +uint32 File::pos() { + return ftell(f); +} |