X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=94f683d16430354df5b607e1719dc269076dbea6;hb=0a340d881161f4009a79dc326f3579a70dc35b5b;hp=20962f8b2b9b23f4c8cc41eec9ee003c4bdbd394;hpb=2a26605b06cea4c1d4891ea0723f229f5f86267e;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 20962f8b..94f683d1 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -52,6 +52,12 @@ void printf_line(char *line_string, int line_length) fprintf_line(stdout, line_string, line_length); } +void printf_line_with_prefix(char *prefix, char *line_string, int line_length) +{ + fprintf(stdout, "%s", prefix); + fprintf_line(stdout, line_string, line_length); +} + /* int2str() returns a number converted to a string; the used memory is static, but will be overwritten by later calls, @@ -925,6 +931,25 @@ inline void swap_number_pairs(int *x1, int *y1, int *x2, int *y2) *y2 = help_y; } +/* the "put" variants of the following file access functions check for the file + pointer being != NULL and return the number of bytes they have or would have + written; this allows for chunk writing functions to first determine the size + of the (not yet written) chunk, write the correct chunk size and finally + write the chunk itself */ + +int getFile8BitInteger(FILE *file) +{ + return fgetc(file); +} + +int putFile8BitInteger(FILE *file, int value) +{ + if (file != NULL) + fputc(value, file); + + return 1; +} + int getFile16BitInteger(FILE *file, int byte_order) { if (byte_order == BYTE_ORDER_BIG_ENDIAN) @@ -935,18 +960,23 @@ int getFile16BitInteger(FILE *file, int byte_order) (fgetc(file) << 8)); } -void putFile16BitInteger(FILE *file, int value, int byte_order) +int putFile16BitInteger(FILE *file, int value, int byte_order) { - if (byte_order == BYTE_ORDER_BIG_ENDIAN) - { - fputc((value >> 8) & 0xff, file); - fputc((value >> 0) & 0xff, file); - } - else /* BYTE_ORDER_LITTLE_ENDIAN */ + if (file != NULL) { - fputc((value >> 0) & 0xff, file); - fputc((value >> 8) & 0xff, file); + if (byte_order == BYTE_ORDER_BIG_ENDIAN) + { + fputc((value >> 8) & 0xff, file); + fputc((value >> 0) & 0xff, file); + } + else /* BYTE_ORDER_LITTLE_ENDIAN */ + { + fputc((value >> 0) & 0xff, file); + fputc((value >> 8) & 0xff, file); + } } + + return 2; } int getFile32BitInteger(FILE *file, int byte_order) @@ -963,22 +993,27 @@ int getFile32BitInteger(FILE *file, int byte_order) (fgetc(file) << 24)); } -void putFile32BitInteger(FILE *file, int value, int byte_order) +int putFile32BitInteger(FILE *file, int value, int byte_order) { - if (byte_order == BYTE_ORDER_BIG_ENDIAN) + if (file != NULL) { - fputc((value >> 24) & 0xff, file); - fputc((value >> 16) & 0xff, file); - fputc((value >> 8) & 0xff, file); - fputc((value >> 0) & 0xff, file); - } - else /* BYTE_ORDER_LITTLE_ENDIAN */ - { - fputc((value >> 0) & 0xff, file); - fputc((value >> 8) & 0xff, file); - fputc((value >> 16) & 0xff, file); - fputc((value >> 24) & 0xff, file); + if (byte_order == BYTE_ORDER_BIG_ENDIAN) + { + fputc((value >> 24) & 0xff, file); + fputc((value >> 16) & 0xff, file); + fputc((value >> 8) & 0xff, file); + fputc((value >> 0) & 0xff, file); + } + else /* BYTE_ORDER_LITTLE_ENDIAN */ + { + fputc((value >> 0) & 0xff, file); + fputc((value >> 8) & 0xff, file); + fputc((value >> 16) & 0xff, file); + fputc((value >> 24) & 0xff, file); + } } + + return 4; } boolean getFileChunk(FILE *file, char *chunk_name, int *chunk_size, @@ -1035,6 +1070,22 @@ void putFileVersion(FILE *file, int version) fputc(version_build, file); } +void ReadBytesFromFile(FILE *file, byte *buffer, unsigned long bytes) +{ + int i; + + for(i = 0; i < bytes && !feof(file); i++) + buffer[i] = fgetc(file); +} + +void WriteBytesToFile(FILE *file, byte *buffer, unsigned long bytes) +{ + int i; + + for(i = 0; i < bytes; i++) + fputc(buffer[i], file); +} + void ReadUnusedBytesFromFile(FILE *file, unsigned long bytes) { while (bytes-- && !feof(file)) @@ -1142,16 +1193,16 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) /* more ASCII keys */ { KSYM_bracketleft, "XK_bracketleft", "[" }, - { KSYM_backslash, "XK_backslash", "backslash" }, + { KSYM_backslash, "XK_backslash", "\\" }, { KSYM_bracketright,"XK_bracketright", "]" }, - { KSYM_asciicircum, "XK_asciicircum", "circumflex" }, + { KSYM_asciicircum, "XK_asciicircum", "^" }, { KSYM_underscore, "XK_underscore", "_" }, { KSYM_grave, "XK_grave", "grave" }, { KSYM_quoteleft, "XK_quoteleft", "quote left" }, { KSYM_braceleft, "XK_braceleft", "brace left" }, { KSYM_bar, "XK_bar", "bar" }, { KSYM_braceright, "XK_braceright", "brace right" }, - { KSYM_asciitilde, "XK_asciitilde", "ascii tilde" }, + { KSYM_asciitilde, "XK_asciitilde", "~" }, /* special (non-ASCII) keys */ { KSYM_Adiaeresis, "XK_Adiaeresis", "Ä" }, @@ -1181,8 +1232,13 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) sprintf(name_buffer, "%c", '0' + (char)(key - KSYM_0)); else if (key >= KSYM_KP_0 && key <= KSYM_KP_9) sprintf(name_buffer, "keypad %c", '0' + (char)(key - KSYM_KP_0)); +#if 1 + else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST) + sprintf(name_buffer, "F%d", (int)(key - KSYM_FKEY_FIRST + 1)); +#else else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST) sprintf(name_buffer, "function F%d", (int)(key - KSYM_FKEY_FIRST + 1)); +#endif else if (key == KSYM_UNDEFINED) strcpy(name_buffer, "(undefined)"); else @@ -1703,22 +1759,27 @@ int get_parameter_value(char *value_raw, char *suffix, int type) result = (strcmp(value, "left") == 0 ? MV_LEFT : strcmp(value, "right") == 0 ? MV_RIGHT : strcmp(value, "up") == 0 ? MV_UP : - strcmp(value, "down") == 0 ? MV_DOWN : MV_NO_MOVING); + strcmp(value, "down") == 0 ? MV_DOWN : MV_NONE); } else if (strcmp(suffix, ".anim_mode") == 0) { - result = (string_has_parameter(value, "none") ? ANIM_NONE : - string_has_parameter(value, "loop") ? ANIM_LOOP : - string_has_parameter(value, "linear") ? ANIM_LINEAR : - string_has_parameter(value, "pingpong") ? ANIM_PINGPONG : - string_has_parameter(value, "pingpong2") ? ANIM_PINGPONG2 : - string_has_parameter(value, "random") ? ANIM_RANDOM : - string_has_parameter(value, "horizontal") ? ANIM_HORIZONTAL : - string_has_parameter(value, "vertical") ? ANIM_VERTICAL : + result = (string_has_parameter(value, "none") ? ANIM_NONE : + string_has_parameter(value, "loop") ? ANIM_LOOP : + string_has_parameter(value, "linear") ? ANIM_LINEAR : + string_has_parameter(value, "pingpong") ? ANIM_PINGPONG : + string_has_parameter(value, "pingpong2") ? ANIM_PINGPONG2 : + string_has_parameter(value, "random") ? ANIM_RANDOM : + string_has_parameter(value, "ce_value") ? ANIM_CE_VALUE : + string_has_parameter(value, "ce_score") ? ANIM_CE_SCORE : + string_has_parameter(value, "horizontal") ? ANIM_HORIZONTAL : + string_has_parameter(value, "vertical") ? ANIM_VERTICAL : ANIM_DEFAULT); if (string_has_parameter(value, "reverse")) result |= ANIM_REVERSE; + + if (string_has_parameter(value, "static_panel")) + result |= ANIM_STATIC_PANEL; } else /* generic parameter of type integer or boolean */ {