X-Git-Url: https://git.artsoft.org/?a=blobdiff_plain;f=src%2Flibgame%2Fmisc.c;h=8fe3200d3c4a28b22675eeccd81a9fc00f7450da;hb=2d603d06ca862f3ca0721b66f62da188faf866c4;hp=9fa1153550d80a6df83737e2a80a3e4f71c1591c;hpb=9c6293f12f9dea224bff9050050253e9f52e3819;p=rocksndiamonds.git diff --git a/src/libgame/misc.c b/src/libgame/misc.c index 9fa11535..8fe3200d 100644 --- a/src/libgame/misc.c +++ b/src/libgame/misc.c @@ -111,10 +111,12 @@ static void sleep_milliseconds(unsigned long milliseconds_delay) { boolean do_busy_waiting = (milliseconds_delay < 5 ? TRUE : FALSE); +#if 0 #if defined(PLATFORM_MSDOS) - /* don't use select() to perform waiting operations under DOS/Windows + /* don't use select() to perform waiting operations under DOS environment; always use a busy loop for waiting instead */ do_busy_waiting = TRUE; +#endif #endif if (do_busy_waiting) @@ -134,6 +136,8 @@ static void sleep_milliseconds(unsigned long milliseconds_delay) { #if defined(TARGET_SDL) SDL_Delay(milliseconds_delay); +#elif defined(TARGET_ALLEGRO) + rest(milliseconds_delay); #else struct timeval delay; @@ -817,6 +821,30 @@ void putFileChunk(FILE *file, char *chunk_name, int chunk_size, } } +int getFileVersion(FILE *file) +{ + int version_major, version_minor, version_patch; + + version_major = fgetc(file); + version_minor = fgetc(file); + version_patch = fgetc(file); + fgetc(file); /* not used */ + + return VERSION_IDENT(version_major, version_minor, version_patch); +} + +void putFileVersion(FILE *file, int version) +{ + int version_major = VERSION_MAJOR(version); + int version_minor = VERSION_MINOR(version); + int version_patch = VERSION_PATCH(version); + + fputc(version_major, file); + fputc(version_minor, file); + fputc(version_patch, file); + fputc(0, file); /* not used */ +} + void ReadUnusedBytesFromFile(FILE *file, unsigned long bytes) { while (bytes-- && !feof(file)) @@ -829,6 +857,11 @@ void WriteUnusedBytesToFile(FILE *file, unsigned long bytes) fputc(0, file); } + +/* ------------------------------------------------------------------------- */ +/* functions to translate key identifiers between different format */ +/* ------------------------------------------------------------------------- */ + #define TRANSLATE_KEYSYM_TO_KEYNAME 0 #define TRANSLATE_KEYSYM_TO_X11KEYNAME 1 #define TRANSLATE_KEYNAME_TO_KEYSYM 2 @@ -958,8 +991,8 @@ 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)); - else if (key >= KSYM_F1 && key <= KSYM_F24) - sprintf(name_buffer, "function F%d", (int)(key - KSYM_F1 + 1)); + else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST) + sprintf(name_buffer, "function F%d", (int)(key - KSYM_FKEY_FIRST + 1)); else if (key == KSYM_UNDEFINED) strcpy(name_buffer, "(undefined)"); else @@ -995,8 +1028,8 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) sprintf(name_buffer, "XK_%c", '0' + (char)(key - KSYM_0)); else if (key >= KSYM_KP_0 && key <= KSYM_KP_9) sprintf(name_buffer, "XK_KP_%c", '0' + (char)(key - KSYM_KP_0)); - else if (key >= KSYM_F1 && key <= KSYM_F24) - sprintf(name_buffer, "XK_F%d", (int)(key - KSYM_F1 + 1)); + else if (key >= KSYM_FKEY_FIRST && key <= KSYM_FKEY_LAST) + sprintf(name_buffer, "XK_F%d", (int)(key - KSYM_FKEY_FIRST + 1)); else if (key == KSYM_UNDEFINED) strcpy(name_buffer, "[undefined]"); else @@ -1072,7 +1105,7 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode) ((c2 >= '0' && c1 <= '9') || c2 == '\0')) d = atoi(&name_ptr[4]); - if (d >=1 && d <= 24) + if (d >= 1 && d <= KSYM_NUM_FKEYS) key = KSYM_F1 + (Key)(d - 1); } else if (strncmp(name_ptr, "XK_", 3) == 0) @@ -1196,16 +1229,34 @@ boolean FileIsSound(char *basename) boolean FileIsMusic(char *basename) { + /* "music" can be a WAV (loop) file or (if compiled with SDL) a MOD file */ + + if (FileIsSound(basename)) + return TRUE; + +#if defined(TARGET_SDL) if (strlen(basename) > 4 && (strcmp(&basename[strlen(basename) - 4], ".mod") == 0 || strcmp(&basename[strlen(basename) - 4], ".MOD") == 0 || strncmp(basename, "mod.", 4) == 0 || strncmp(basename, "MOD.", 4) == 0)) return TRUE; +#endif return FALSE; } +boolean FileIsArtworkType(char *basename, int type) +{ + if ((type == TREE_TYPE_GRAPHICS_DIR && FileIsGraphic(basename)) || + (type == TREE_TYPE_SOUNDS_DIR && FileIsSound(basename)) || + (type == TREE_TYPE_MUSIC_DIR && FileIsMusic(basename))) + return TRUE; + + return FALSE; +} + + /* ========================================================================= */ /* functions only needed for non-Unix (non-command-line) systems */ /* ========================================================================= */