summaryrefslogtreecommitdiff
path: root/src/w32reg.c
diff options
context:
space:
mode:
authorGeoff Voelker <voelker@cs.washington.edu>1995-11-07 07:52:28 +0000
committerGeoff Voelker <voelker@cs.washington.edu>1995-11-07 07:52:28 +0000
commite424b4505a6a25a4ac1facf5da56988a69ed3054 (patch)
treea473da6398dafcd8e6139aae7d5082dc3049680f /src/w32reg.c
parent599175a821b5043c79e3cd1ab7ef12803561d984 (diff)
downloademacs-e424b4505a6a25a4ac1facf5da56988a69ed3054.tar.gz
Initial revision
Diffstat (limited to 'src/w32reg.c')
-rw-r--r--src/w32reg.c94
1 files changed, 94 insertions, 0 deletions
diff --git a/src/w32reg.c b/src/w32reg.c
new file mode 100644
index 00000000000..2b6fbb8acc3
--- /dev/null
+++ b/src/w32reg.c
@@ -0,0 +1,94 @@
+/* Emulate the X Resource Manager through the registry.
+ Copyright (C) 1990, 1993, 1994 Free Software Foundation.
+
+This program is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; see the file COPYING. If not, write to
+the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
+
+/* Written by Kevin Gallo */
+
+#include <config.h>
+#include "lisp.h"
+#include "w32term.h"
+#include "blockinput.h"
+
+#include <stdio.h>
+#include <string.h>
+
+#define REG_ROOT "SOFTWARE\\GNU\\Emacs\\"
+
+LPBYTE
+win32_get_string_resource (name, class, dwexptype)
+ char *name, *class;
+ DWORD dwexptype;
+{
+ LPBYTE lpvalue = NULL;
+ HKEY hrootkey = NULL;
+ DWORD dwType;
+ DWORD cbData;
+ BOOL ok = FALSE;
+
+ BLOCK_INPUT;
+
+ /* Check both the current user and the local machine to see if we have any resources */
+
+ if (RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS
+ || RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS)
+ {
+ char *keyname;
+
+ if (RegQueryValueEx (hrootkey, name, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS
+ && dwType == dwexptype)
+ {
+ keyname = name;
+ }
+ else if (RegQueryValueEx (hrootkey, class, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS
+ && dwType == dwexptype)
+ {
+ keyname = class;
+ }
+ else
+ {
+ keyname = NULL;
+ }
+
+ ok = (keyname
+ && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL
+ && RegQueryValueEx (hrootkey, keyname, NULL, NULL, lpvalue, &cbData) == ERROR_SUCCESS);
+
+ RegCloseKey (hrootkey);
+ }
+
+ UNBLOCK_INPUT;
+
+ if (!ok)
+ {
+ if (lpvalue) xfree (lpvalue);
+ return (NULL);
+ }
+ else
+ {
+ return (lpvalue);
+ }
+}
+
+/* Retrieve the string resource specified by NAME with CLASS from
+ database RDB. */
+
+char *
+x_get_string_resource (rdb, name, class)
+ int rdb;
+ char *name, *class;
+{
+ return (win32_get_string_resource (name, class, REG_SZ));
+}