http://ftp.aanet.ru/pub/Linux/X11/apps/xscreensaver-2.31.tar.gz
[xscreensaver] / utils / resources.c
index 771e20f18663b8e7fa66addb8ba32150f4ba4693..b24a8ea07c7855a3364b5c83b3991e303a8113ad 100644 (file)
@@ -1,4 +1,5 @@
-/* xscreensaver, Copyright (c) 1992 Jamie Zawinski <jwz@lucid.com>
+/* xscreensaver, Copyright (c) 1992, 1997, 1998
+ *  Jamie Zawinski <jwz@jwz.org>
  *
  * Permission to use, copy, modify, distribute, and sell this software and its
  * documentation for any purpose is hereby granted without fee, provided that
  * implied warranty.
  */
 
-#if __STDC__
-#include <stdlib.h>
-#include <string.h>
-#endif
-
-#include <stdio.h>
-#include <X11/Xlib.h>
+#include "utils.h"
+#include "resources.h"
 #include <X11/Xresource.h>
 
+
 /* Resource functions.  Assumes: */
 
 extern char *progname;
 extern char *progclass;
 extern XrmDatabase db;
 
+static unsigned int get_time_resource (char *res_name, char *res_class,
+                                      Bool sec_p);
+
 #ifndef isupper
 # define isupper(c)  ((c) >= 'A' && (c) <= 'Z')
 #endif
@@ -32,8 +32,7 @@ extern XrmDatabase db;
 #endif
 
 char *
-get_string_resource (res_name, res_class)
-     char *res_name, *res_class;
+get_string_resource (char *res_name, char *res_class)
 {
   XrmValue value;
   char *type;
@@ -55,8 +54,7 @@ get_string_resource (res_name, res_class)
 }
 
 Bool 
-get_boolean_resource (res_name, res_class)
-     char *res_name, *res_class;
+get_boolean_resource (char *res_name, char *res_class)
 {
   char *tmp, buf [100];
   char *s = get_string_resource (res_name, res_class);
@@ -67,6 +65,11 @@ get_boolean_resource (res_name, res_class)
   *tmp = 0;
   free (os);
 
+  while (*buf &&
+        (buf[strlen(buf)-1] == ' ' ||
+         buf[strlen(buf)-1] == '\t'))
+    buf[strlen(buf)-1] = 0;
+
   if (!strcmp (buf, "on") || !strcmp (buf, "true") || !strcmp (buf, "yes"))
     return 1;
   if (!strcmp (buf,"off") || !strcmp (buf, "false") || !strcmp (buf,"no"))
@@ -77,17 +80,32 @@ get_boolean_resource (res_name, res_class)
 }
 
 int 
-get_integer_resource (res_name, res_class)
-     char *res_name, *res_class;
+get_integer_resource (char *res_name, char *res_class)
 {
   int val;
   char c, *s = get_string_resource (res_name, res_class);
+  char *ss = s;
   if (!s) return 0;
-  if (1 == sscanf (s, " %d %c", &val, &c))
+
+  while (*ss && *ss <= ' ') ss++;                      /* skip whitespace */
+
+  if (ss[0] == '0' && (ss[1] == 'x' || ss[1] == 'X'))  /* 0x: parse as hex */
     {
-      free (s);
-      return val;
+      if (1 == sscanf (ss+2, "%x %c", &val, &c))
+       {
+         free (s);
+         return val;
+       }
+    }
+  else                                                 /* else parse as dec */
+    {
+      if (1 == sscanf (ss, "%d %c", &val, &c))
+       {
+         free (s);
+         return val;
+       }
     }
+
   fprintf (stderr, "%s: %s must be an integer, not %s.\n",
           progname, res_name, s);
   free (s);
@@ -95,8 +113,7 @@ get_integer_resource (res_name, res_class)
 }
 
 double
-get_float_resource (res_name, res_class)
-     char *res_name, *res_class;
+get_float_resource (char *res_name, char *res_class)
 {
   double val;
   char c, *s = get_string_resource (res_name, res_class);
@@ -114,15 +131,20 @@ get_float_resource (res_name, res_class)
 
 
 unsigned int
-get_pixel_resource (res_name, res_class, dpy, cmap)
-     char *res_name, *res_class;
-     Display *dpy;
-     Colormap cmap;
+get_pixel_resource (char *res_name, char *res_class,
+                   Display *dpy, Colormap cmap)
 {
   XColor color;
   char *s = get_string_resource (res_name, res_class);
+  char *s2;
   if (!s) goto DEFAULT;
 
+  for (s2 = s + strlen(s) - 1; s2 > s; s2--)
+    if (*s2 == ' ' || *s2 == '\t')
+      *s2 = 0;
+    else
+      break;
+
   if (! XParseColor (dpy, cmap, s, &color))
     {
       fprintf (stderr, "%s: can't parse color %s\n", progname, s);
@@ -144,9 +166,7 @@ get_pixel_resource (res_name, res_class, dpy, cmap)
 
 
 int
-parse_time (string, seconds_default_p, silent_p)
-     char *string;
-     Bool seconds_default_p, silent_p;
+parse_time (char *string, Bool seconds_default_p, Bool silent_p)
 {
   unsigned int h, m, s;
   char c;
@@ -187,9 +207,7 @@ parse_time (string, seconds_default_p, silent_p)
 }
 
 static unsigned int 
-get_time_resource (res_name, res_class, sec_p)
-     char *res_name, *res_class;
-     Bool sec_p;
+get_time_resource (char *res_name, char *res_class, Bool sec_p)
 {
   int val;
   char *s = get_string_resource (res_name, res_class);
@@ -200,15 +218,13 @@ get_time_resource (res_name, res_class, sec_p)
 }
 
 unsigned int 
-get_seconds_resource (res_name, res_class)
-     char *res_name, *res_class;
+get_seconds_resource (char *res_name, char *res_class)
 {
   return get_time_resource (res_name, res_class, True);
 }
 
 unsigned int 
-get_minutes_resource (res_name, res_class)
-     char *res_name, *res_class;
+get_minutes_resource (char *res_name, char *res_class)
 {
   return get_time_resource (res_name, res_class, False);
 }