home *** CD-ROM | disk | FTP | other *** search
/ OS/2 Shareware BBS: 5 Edit / 05-Edit.zip / e20313sr.zip / emacs / 20.3.1 / src / w32reg.c < prev    next >
C/C++ Source or Header  |  1999-07-31  |  3KB  |  98 lines

  1. /* Emulate the X Resource Manager through the registry.
  2.    Copyright (C) 1990, 1993, 1994 Free Software Foundation.
  3.  
  4. This file is part of GNU Emacs.
  5.  
  6. GNU Emacs is free software; you can redistribute it and/or modify
  7. it under the terms of the GNU General Public License as published by
  8. the Free Software Foundation; either version 2, or (at your option)
  9. any later version.
  10.  
  11. GNU Emacs is distributed in the hope that it will be useful,
  12. but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  14. GNU General Public License for more details.
  15.  
  16. You should have received a copy of the GNU General Public License
  17. along with GNU Emacs; see the file COPYING.  If not, write to
  18. the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
  19. Boston, MA 02111-1307, USA.  */
  20.  
  21. /* Written by Kevin Gallo */
  22.  
  23. #include <config.h>
  24. #include "lisp.h"
  25. #include "w32term.h"
  26. #include "blockinput.h"
  27.  
  28. #include <stdio.h>
  29. #include <string.h>
  30.  
  31. #define REG_ROOT "SOFTWARE\\GNU\\Emacs"
  32.  
  33. LPBYTE 
  34. w32_get_string_resource (name, class, dwexptype)
  35.      char *name, *class;
  36.      DWORD dwexptype;
  37. {
  38.   LPBYTE lpvalue = NULL;
  39.   HKEY hrootkey = NULL;
  40.   DWORD dwType;
  41.   DWORD cbData;
  42.   BOOL ok = FALSE;
  43.   
  44.   BLOCK_INPUT;
  45.   
  46.   /* Check both the current user and the local machine to see if we have any resources */
  47.   
  48.   if (RegOpenKeyEx (HKEY_CURRENT_USER, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS
  49.       || RegOpenKeyEx (HKEY_LOCAL_MACHINE, REG_ROOT, 0, KEY_READ, &hrootkey) == ERROR_SUCCESS)
  50.     {
  51.       char *keyname;
  52.       
  53.       if (RegQueryValueEx (hrootkey, name, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS
  54.       && dwType == dwexptype)
  55.     {
  56.       keyname = name;
  57.     } 
  58.       else if (RegQueryValueEx (hrootkey, class, NULL, &dwType, NULL, &cbData) == ERROR_SUCCESS
  59.            && dwType == dwexptype)
  60.     {
  61.       keyname = class;
  62.     }
  63.       else
  64.     {
  65.       keyname = NULL;
  66.     }
  67.       
  68.       ok = (keyname
  69.         && (lpvalue = (LPBYTE) xmalloc (cbData)) != NULL
  70.         && RegQueryValueEx (hrootkey, keyname, NULL, NULL, lpvalue, &cbData) == ERROR_SUCCESS);
  71.       
  72.       RegCloseKey (hrootkey);
  73.     }
  74.   
  75.   UNBLOCK_INPUT;
  76.   
  77.   if (!ok) 
  78.     {
  79.       if (lpvalue) xfree (lpvalue);
  80.       return (NULL);
  81.     } 
  82.   else 
  83.     {
  84.       return (lpvalue);
  85.     }
  86. }
  87.  
  88. /* Retrieve the string resource specified by NAME with CLASS from
  89.    database RDB. */
  90.  
  91. char *
  92. x_get_string_resource (rdb, name, class)
  93.      int rdb;
  94.      char *name, *class;
  95. {
  96.   return (w32_get_string_resource (name, class, REG_SZ));
  97. }
  98.