rnd-20020402-1-src
[rocksndiamonds.git] / src / libgame / misc.c
index 9fc0cf0405cfb3bdc3e6e4308e1ddf43bfd2c092..6fe6949b45e3adc687938977ee4248b491449d5e 100644 (file)
@@ -584,6 +584,23 @@ void GetOptions(char *argv[])
   }
 }
 
+/* used by SetError() and GetError() to store internal error messages */
+static char internal_error[1024];      /* this is bad */
+
+void SetError(char *format, ...)
+{
+  va_list ap;
+
+  va_start(ap, format);
+  vsprintf(internal_error, format, ap);
+  va_end(ap);
+}
+
+char *GetError()
+{
+  return internal_error;
+}
+
 void Error(int mode, char *format, ...)
 {
   char *process_name = "";
@@ -801,7 +818,8 @@ void WriteUnusedBytesToFile(FILE *file, unsigned long bytes)
 
 #define TRANSLATE_KEYSYM_TO_KEYNAME    0
 #define TRANSLATE_KEYSYM_TO_X11KEYNAME 1
-#define TRANSLATE_X11KEYNAME_TO_KEYSYM 2
+#define TRANSLATE_KEYNAME_TO_KEYSYM    2
+#define TRANSLATE_X11KEYNAME_TO_KEYSYM 3
 
 void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
 {
@@ -988,6 +1006,26 @@ void translate_keyname(Key *keysym, char **x11name, char **name, int mode)
 
     *x11name = name_buffer;
   }
+  else if (mode == TRANSLATE_KEYNAME_TO_KEYSYM)
+  {
+    Key key = KSYM_UNDEFINED;
+
+    i = 0;
+    do
+    {
+      if (strcmp(translate_key[i].name, *name) == 0)
+      {
+       key = translate_key[i].key;
+       break;
+      }
+    }
+    while (translate_key[++i].x11name);
+
+    if (key == KSYM_UNDEFINED)
+      Error(ERR_WARN, "getKeyFromKeyName(): not completely implemented");
+
+    *keysym = key;
+  }
   else if (mode == TRANSLATE_X11KEYNAME_TO_KEYSYM)
   {
     Key key = KSYM_UNDEFINED;
@@ -1089,6 +1127,14 @@ char *getX11KeyNameFromKey(Key key)
   return x11name;
 }
 
+Key getKeyFromKeyName(char *name)
+{
+  Key key;
+
+  translate_keyname(&key, NULL, &name, TRANSLATE_KEYNAME_TO_KEYSYM);
+  return key;
+}
+
 Key getKeyFromX11KeyName(char *x11name)
 {
   Key key;
@@ -1113,6 +1159,40 @@ char getCharFromKey(Key key)
 }
 
 
+/* ========================================================================= */
+/* functions for checking filenames                                          */
+/* ========================================================================= */
+
+boolean FileIsGraphic(char *filename)
+{
+  if (strlen(filename) > 4 &&
+      strcmp(&filename[strlen(filename) - 4], ".pcx") == 0)
+    return TRUE;
+
+  return FALSE;
+}
+
+boolean FileIsSound(char *filename)
+{
+  if (strlen(filename) > 4 &&
+      strcmp(&filename[strlen(filename) - 4], ".wav") == 0)
+    return TRUE;
+
+  return FALSE;
+}
+
+boolean FileIsMusic(char *filename)
+{
+  if (strlen(filename) > 4 &&
+      (strcmp(&filename[strlen(filename) - 4], ".mod") == 0 ||
+       strcmp(&filename[strlen(filename) - 4], ".MOD") == 0 ||
+       strncmp(filename, "mod.", 4) == 0 ||
+       strncmp(filename, "MOD.", 4) == 0))
+    return TRUE;
+
+  return FALSE;
+}
+
 /* ========================================================================= */
 /* functions only needed for non-Unix (non-command-line) systems */
 /* ========================================================================= */