summaryrefslogtreecommitdiff
path: root/app/ssh-askpass/resources.c
diff options
context:
space:
mode:
authorMatthieu Herrb <matthieu@cvs.openbsd.org>2006-11-26 10:57:01 +0000
committerMatthieu Herrb <matthieu@cvs.openbsd.org>2006-11-26 10:57:01 +0000
commitf35ebe9caf290b8266faae05f7ab8491ad301d7a (patch)
tree39d39e6eac3dd73663d172228b40ec9bc2709301 /app/ssh-askpass/resources.c
parent1cb4778bcef21ea9015cfccdb99abb7a0e035d74 (diff)
Importing from XF4, plus BSD make infrastructure
Diffstat (limited to 'app/ssh-askpass/resources.c')
-rw-r--r--app/ssh-askpass/resources.c180
1 files changed, 180 insertions, 0 deletions
diff --git a/app/ssh-askpass/resources.c b/app/ssh-askpass/resources.c
new file mode 100644
index 000000000..6553267ac
--- /dev/null
+++ b/app/ssh-askpass/resources.c
@@ -0,0 +1,180 @@
+/* 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
+ * the above copyright notice appear in all copies and that both that
+ * copyright notice and this permission notice appear in supporting
+ * documentation. No representations are made about the suitability of this
+ * software for any purpose. It is provided "as is" without express or
+ * implied warranty.
+ */
+
+/* 1999-Nov-21 Modified by Jim Knoble <jmknoble@jmknoble.cx>.
+ * Modifications:
+ *
+ * - Made get_boolean_resource() accept a third parameter, default_value,
+ * which determines the result of get_boolean_resource if either (a)
+ * no such resource exists, or (b) the resource value does not conform
+ * to the syntax of a boolean resource.
+ *
+ * - Same for get_integer_resource(), get_pixel_resource().
+ *
+ * - 1999-Dec-24 Moved header includes from utils.h to here.
+ * Trimmed unused functions.
+ */
+
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <math.h>
+#include <X11/Xlib.h>
+#include <X11/Xos.h>
+#include <X11/Xresource.h>
+#include "resources.h"
+
+
+/* Resource functions. Assumes: */
+
+extern char *progname;
+extern char *progclass;
+extern XrmDatabase db;
+
+#ifndef isupper
+# define isupper(c) ((c) >= 'A' && (c) <= 'Z')
+#endif
+#ifndef _tolower
+# define _tolower(c) ((c) - 'A' + 'a')
+#endif
+
+char *
+get_string_resource (char *res_name, char *res_class)
+{
+ XrmValue value;
+ char *type;
+ char full_name [1024], full_class [1024];
+ strcpy (full_name, progname);
+ strcat (full_name, ".");
+ strcat (full_name, res_name);
+ strcpy (full_class, progclass);
+ strcat (full_class, ".");
+ strcat (full_class, res_class);
+ if (XrmGetResource (db, full_name, full_class, &type, &value))
+ {
+ char *str = (char *) malloc (value.size + 1);
+ strncpy (str, (char *) value.addr, value.size);
+ str [value.size] = 0;
+ return str;
+ }
+ return 0;
+}
+
+Bool
+get_boolean_resource (char *res_name, char *res_class, Bool default_value)
+{
+ char *tmp, buf [100];
+ char *s = get_string_resource (res_name, res_class);
+ char *os = s;
+ if (! s) return default_value;
+ for (tmp = buf; *s; s++)
+ *tmp++ = isupper (*s) ? _tolower (*s) : *s;
+ *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"))
+ return 0;
+ fprintf (stderr, "%s: %s must be boolean, not %s.\n",
+ progname, res_name, buf);
+ return default_value;
+}
+
+int
+get_integer_resource (char *res_name, char *res_class, int default_value)
+{
+ int val;
+ char c, *s = get_string_resource (res_name, res_class);
+ char *ss = s;
+ if (!s) return default_value;
+
+ while (*ss && *ss <= ' ') ss++; /* skip whitespace */
+
+ if (ss[0] == '0' && (ss[1] == 'x' || ss[1] == 'X')) /* 0x: parse as hex */
+ {
+ 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);
+ return default_value;
+}
+
+double
+get_float_resource (char *res_name, char *res_class)
+{
+ double val;
+ char c, *s = get_string_resource (res_name, res_class);
+ if (! s) return 0.0;
+ if (1 == sscanf (s, " %lf %c", &val, &c))
+ {
+ free (s);
+ return val;
+ }
+ fprintf (stderr, "%s: %s must be a float, not %s.\n",
+ progname, res_name, s);
+ free (s);
+ return 0.0;
+}
+
+
+unsigned int
+get_pixel_resource (char *res_name, char *res_class,
+ Display *dpy, Colormap cmap, unsigned int default_value)
+{
+ 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);
+ goto DEFAULT;
+ }
+ if (! XAllocColor (dpy, cmap, &color))
+ {
+ fprintf (stderr, "%s: couldn't allocate color %s\n", progname, s);
+ goto DEFAULT;
+ }
+ free (s);
+ return color.pixel;
+ DEFAULT:
+ if (s) free (s);
+ return default_value;
+}
+