X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;ds=sidebyside;f=src%2Flibgame%2Fmisc.c;h=d2b7b4e7d45a06420265ba20e3dee56d14af77ce;hb=070915c688903880c053bc444cc7f161fdebd91d;hp=eda87185ec74990bc6ac9efbee0b648a93d82436;hpb=7ecf99096c7c23909ada034e05d971464f66552f;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index eda87185..d2b7b4e7 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -1208,11 +1208,22 @@ inline void swap_number_pairs(int *x1, int *y1, int *x2, int *y2) of the (not yet written) chunk, write the correct chunk size and finally write the chunk itself */ +#if 1 + +int getFile8BitInteger(File *file) +{ + return getByteFromFile(file); +} + +#else + int getFile8BitInteger(FILE *file) { return fgetc(file); } +#endif + int putFile8BitInteger(FILE *file, int value) { if (file != NULL) @@ -1221,6 +1232,20 @@ int putFile8BitInteger(FILE *file, int value) return 1; } +#if 1 + +int getFile16BitInteger(File *file, int byte_order) +{ + if (byte_order == BYTE_ORDER_BIG_ENDIAN) + return ((getByteFromFile(file) << 8) | + (getByteFromFile(file) << 0)); + else /* BYTE_ORDER_LITTLE_ENDIAN */ + return ((getByteFromFile(file) << 0) | + (getByteFromFile(file) << 8)); +} + +#else + int getFile16BitInteger(FILE *file, int byte_order) { if (byte_order == BYTE_ORDER_BIG_ENDIAN) @@ -1231,6 +1256,8 @@ int getFile16BitInteger(FILE *file, int byte_order) (fgetc(file) << 8)); } +#endif + int putFile16BitInteger(FILE *file, int value, int byte_order) { if (file != NULL) @@ -1250,6 +1277,24 @@ int putFile16BitInteger(FILE *file, int value, int byte_order) return 2; } +#if 1 + +int getFile32BitInteger(File *file, int byte_order) +{ + if (byte_order == BYTE_ORDER_BIG_ENDIAN) + return ((getByteFromFile(file) << 24) | + (getByteFromFile(file) << 16) | + (getByteFromFile(file) << 8) | + (getByteFromFile(file) << 0)); + else /* BYTE_ORDER_LITTLE_ENDIAN */ + return ((getByteFromFile(file) << 0) | + (getByteFromFile(file) << 8) | + (getByteFromFile(file) << 16) | + (getByteFromFile(file) << 24)); +} + +#else + int getFile32BitInteger(FILE *file, int byte_order) { if (byte_order == BYTE_ORDER_BIG_ENDIAN) @@ -1264,6 +1309,8 @@ int getFile32BitInteger(FILE *file, int byte_order) (fgetc(file) << 24)); } +#endif + int putFile32BitInteger(FILE *file, int value, int byte_order) { if (file != NULL) @@ -1287,6 +1334,28 @@ int putFile32BitInteger(FILE *file, int value, int byte_order) return 4; } +#if 1 + +boolean getFileChunk(File *file, char *chunk_name, int *chunk_size, + int byte_order) +{ + const int chunk_name_length = 4; + + /* read chunk name */ + if (getStringFromFile(file, chunk_name, chunk_name_length + 1) == NULL) + return FALSE; + + if (chunk_size != NULL) + { + /* read chunk size */ + *chunk_size = getFile32BitInteger(file, byte_order); + } + + return (checkEndOfFile(file) ? FALSE : TRUE); +} + +#else + boolean getFileChunk(FILE *file, char *chunk_name, int *chunk_size, int byte_order) { @@ -1305,6 +1374,8 @@ boolean getFileChunk(FILE *file, char *chunk_name, int *chunk_size, return (feof(file) || ferror(file) ? FALSE : TRUE); } +#endif + int putFileChunk(FILE *file, char *chunk_name, int chunk_size, int byte_order) { @@ -1328,6 +1399,21 @@ int putFileChunk(FILE *file, char *chunk_name, int chunk_size, return num_bytes; } +#if 1 + +int getFileVersion(File *file) +{ + int version_major = getByteFromFile(file); + int version_minor = getByteFromFile(file); + int version_patch = getByteFromFile(file); + int version_build = getByteFromFile(file); + + return VERSION_IDENT(version_major, version_minor, version_patch, + version_build); +} + +#else + int getFileVersion(FILE *file) { int version_major = fgetc(file); @@ -1339,6 +1425,8 @@ int getFileVersion(FILE *file) version_build); } +#endif + int putFileVersion(FILE *file, int version) { if (file != NULL) @@ -1357,6 +1445,18 @@ int putFileVersion(FILE *file, int version) return 4; } +#if 1 + +void ReadBytesFromFile(File *file, byte *buffer, unsigned int bytes) +{ + int i; + + for (i = 0; i < bytes && !checkEndOfFile(file); i++) + buffer[i] = getByteFromFile(file); +} + +#else + void ReadBytesFromFile(FILE *file, byte *buffer, unsigned int bytes) { int i; @@ -1365,6 +1465,8 @@ void ReadBytesFromFile(FILE *file, byte *buffer, unsigned int bytes) buffer[i] = fgetc(file); } +#endif + void WriteBytesToFile(FILE *file, byte *buffer, unsigned int bytes) { int i; @@ -1373,12 +1475,24 @@ void WriteBytesToFile(FILE *file, byte *buffer, unsigned int bytes) fputc(buffer[i], file); } +#if 1 + +void ReadUnusedBytesFromFile(File *file, unsigned int bytes) +{ + while (bytes-- && !checkEndOfFile(file)) + getByteFromFile(file); +} + +#else + void ReadUnusedBytesFromFile(FILE *file, unsigned int bytes) { while (bytes-- && !feof(file)) fgetc(file); } +#endif + void WriteUnusedBytesToFile(FILE *file, unsigned int bytes) { while (bytes--) @@ -1454,8 +1568,10 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) { KSYM_Page_Up, "XK_Page_Up", "page up" }, { KSYM_Page_Down, "XK_Page_Down", "page down" }, +#if defined(TARGET_SDL2) { KSYM_Menu, "XK_Menu", "menu" }, /* menu key */ { KSYM_Back, "XK_Back", "back" }, /* back key */ +#endif /* ASCII 0x20 to 0x40 keys (except numbers) */ { KSYM_space, "XK_space", "space" }, @@ -1941,7 +2057,7 @@ int closeFile(File *file) if (file == NULL) return -1; - int result; + int result = 0; #if defined(PLATFORM_ANDROID) if (file->asset_file) @@ -1967,6 +2083,64 @@ int checkEndOfFile(File *file) return feof(file->file); } +size_t readFile(File *file, void *buffer, size_t item_size, size_t num_items) +{ +#if defined(PLATFORM_ANDROID) + if (file->file_is_asset) + { + if (file->end_of_file) + return 0; + + size_t num_items_read = + SDL_RWread(file->asset_file, buffer, item_size, num_items); + + if (num_items_read < num_items) + file->end_of_file = TRUE; + + return num_items_read; + } +#endif + + return fread(buffer, item_size, num_items, file->file); +} + +int seekFile(File *file, long offset, int whence) +{ +#if defined(PLATFORM_ANDROID) + if (file->file_is_asset) + { + int sdl_whence = (whence == SEEK_SET ? RW_SEEK_SET : + whence == SEEK_CUR ? RW_SEEK_CUR : + whence == SEEK_END ? RW_SEEK_END : 0); + + return (SDL_RWseek(file->asset_file, offset, sdl_whence) == -1 ? -1 : 0); + } +#endif + + return fseek(file->file, offset, whence); +} + +int getByteFromFile(File *file) +{ +#if defined(PLATFORM_ANDROID) + if (file->file_is_asset) + { + if (file->end_of_file) + return EOF; + + byte c; + size_t num_bytes_read = SDL_RWread(file->asset_file, &c, 1, 1); + + if (num_bytes_read < 1) + file->end_of_file = TRUE; + + return (file->end_of_file ? EOF : (int)c); + } +#endif + + return fgetc(file->file); +} + char *getStringFromFile(File *file, char *line, int size) { #if defined(PLATFORM_ANDROID) @@ -2043,7 +2217,7 @@ int closeDirectory(Directory *dir) if (dir == NULL) return -1; - int result; + int result = 0; #if defined(PLATFORM_ANDROID) if (dir->asset_toc_file) @@ -3610,6 +3784,8 @@ void debug_print_parent_only(char *format, ...) } } +#endif /* DEBUG */ + void print_timestamp_ext(char *message, char *mode) { #if DEBUG_PRINT_INIT_TIMESTAMPS @@ -3673,5 +3849,3 @@ void print_timestamp_done(char *message) { print_timestamp_ext(message, "DONE"); } - -#endif /* DEBUG */