-/* xscreensaver, Copyright (c) 1992 Jamie Zawinski <jwz@netscape.com>
+/* xscreensaver, Copyright (c) 1992, 1997, 1998
+ * Jamie Zawinski <jwz@netscape.com>
*
* 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;
-#if __STDC__
-char *get_string_resource (char *res_name, char *res_class);
-int parse_time (char *string, Bool seconds_default_p, Bool silent_p);
static unsigned int get_time_resource (char *res_name, char *res_class,
Bool sec_p);
-#endif
#ifndef isupper
# define isupper(c) ((c) >= 'A' && (c) <= 'Z')
#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;
}
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);
*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"))
}
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);
}
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);
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);
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;
}
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);
}
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);
}