Start of winecfg registry loading.

Matthew Davison m.davison at virgin.net
Fri Apr 25 16:17:02 CDT 2003


This patch adds the ability to load some of the string values from the
registry into winecfg

ChangeLog:
	Add some registry-loading code to winecfg.




-- 
Matthew (Jabba The Hutt) Davison <m.davison at virgin.net>
-------------- next part --------------
? diff
? patch.dif
? patch.diff
Index: Makefile.in
===================================================================
RCS file: /home/wine/wine/programs/winecfg/Makefile.in,v
retrieving revision 1.1
diff -u -r1.1 Makefile.in
--- Makefile.in	31 Mar 2003 19:41:55 -0000	1.1
+++ Makefile.in	25 Apr 2003 21:08:56 -0000
@@ -4,7 +4,7 @@
 VPATH     = @srcdir@
 MODULE    = winecfg.exe
 APPMODE   = gui
-IMPORTS   = comctl32 user32
+IMPORTS   = comctl32 user32 advapi32
 
 C_SRCS = \
 	main.c \
Index: winecfg.c
===================================================================
RCS file: /home/wine/wine/programs/winecfg/winecfg.c,v
retrieving revision 1.1
diff -u -r1.1 winecfg.c
--- winecfg.c	31 Mar 2003 19:41:55 -0000	1.1
+++ winecfg.c	25 Apr 2003 21:08:57 -0000
@@ -23,6 +23,10 @@
 #include <stdio.h>
 #include <limits.h>
 #include <windows.h>
+#include <winreg.h>
+#include <wine/debug.h>
+
+WINE_DEFAULT_DEBUG_CHANNEL(winecfg);
 
 #include "winecfg.h"
 
@@ -70,6 +74,68 @@
 }
 
 /*****************************************************************************
+ */
+int GetConfigValueSZ (HKEY hCurrent, LPSTR subkey, LPSTR valueName, LPSTR RetVal, 
+                    int length, LPSTR DefRes)
+{
+    CHAR *buffer=NULL;
+    DWORD dataLength=0;
+    HKEY hSubKey=NULL;
+    DWORD res;
+
+    if( (res=RegOpenKeyEx( hCurrent, subkey, 0, KEY_ALL_ACCESS, &hSubKey ))
+            !=ERROR_SUCCESS )
+    {
+        if( res==ERROR_FILE_NOT_FOUND )
+        {
+            WINE_TRACE("Value not present - using default\n");
+            strncpy( RetVal,DefRes,length);
+            res=TRUE;
+        }
+        else
+        {
+            WINE_ERR("RegOpenKey failed on wine config key (%ld)\n", res);
+            res=FALSE;
+        }
+        goto end;
+    }
+    res = RegQueryValueExA( hSubKey, valueName, NULL, NULL, NULL, &dataLength);
+        if( res==ERROR_FILE_NOT_FOUND )
+    {
+        WINE_TRACE("Value not present - using default\n");
+        strncpy( RetVal,DefRes,length);
+        res=TRUE;
+        goto end;
+    }
+
+    if( res!=ERROR_SUCCESS )
+    {
+        WINE_ERR("Couldn't query value's length (%ld)\n", res );
+        res=FALSE;
+        goto end;
+    }
+
+    buffer=malloc( dataLength );
+    if( buffer==NULL )
+    {
+        WINE_ERR("Couldn't allocate %lu bytes for the value\n", dataLength );
+        res=FALSE;
+        goto end;
+    }
+    
+    RegQueryValueEx( hSubKey, valueName, NULL, NULL, (LPBYTE)buffer, &dataLength);
+    strncpy( RetVal,buffer,length);
+    free(buffer);
+    
+end:
+   if( hSubKey!=NULL )
+        RegCloseKey( hSubKey );
+
+    return res;
+    
+}
+
+/*****************************************************************************
  * Name       : loadConfig
  * Description: Loads and populates a configuration structure
  * Parameters : pCfg
@@ -82,28 +148,37 @@
 int loadConfig (WINECFG_DESC* pCfg)
 {
     const DLL_DESC *pDllDefaults;
+    
+    HKEY hSession=NULL;
+    DWORD res;
 
-    /*
-     * The default versions for all applications
-     */
-    strcpy(pCfg->szDOSVer, "6.22");
-    strcpy(pCfg->szWinVer, "win95");
-    strcpy(pCfg->szWinLook, "win95");
-
-    /*
-     * Default directories
-     */
-    strcpy(pCfg->szWinDir, "c:\\Windows");
-    strcpy(pCfg->szWinSysDir, "c:\\Windows\\System");
-    strcpy(pCfg->szWinTmpDir, "c:\\Windows\\Temp");
-    strcpy(pCfg->szWinProfDir, "c:\\Windows\\Profiles\\Administrator");
-    strcpy(pCfg->szWinPath, "c:\\Windows;c:\\Windows\\System");
-
-    /*
-     * Graphics driver
-     */
-    strcpy(pCfg->szGraphDriver, "x11drv");
+    if( (res=RegOpenKeyEx( HKEY_LOCAL_MACHINE, "Software\\Wine\\Wine\\Config", 0, KEY_ALL_ACCESS, &hSession ))
+            !=ERROR_SUCCESS )
+    {
+        if( res==ERROR_FILE_NOT_FOUND )
+            WINE_ERR("Wine config key does not exist");
+        else
+            WINE_ERR("RegOpenKey failed on wine config key (%ld)\n", res);
+        
+        res=FALSE;
+        return 1;
+    }
+    
+    /* Windows and DOS versions */
+    GetConfigValueSZ(hSession,"Version","Windows",pCfg->szWinVer,MAX_VERSION_LENGTH,"win95");
+    GetConfigValueSZ(hSession,"Version","DOS",pCfg->szDOSVer,MAX_VERSION_LENGTH,"6.22");
+    GetConfigValueSZ(hSession,"Tweak.Layout","WineLook",pCfg->szWinLook,MAX_VERSION_LENGTH,"win95");
+
+    /* System Paths */
+    GetConfigValueSZ(hSession,"Wine","Windows",pCfg->szWinDir,MAX_PATH,"c:\\Windows");
+    GetConfigValueSZ(hSession,"Wine","System",pCfg->szWinSysDir,MAX_PATH,"c:\\Windows\\System");
+    GetConfigValueSZ(hSession,"Wine","Temp",pCfg->szWinTmpDir,MAX_PATH,"c:\\Windows\\Temp");
+    GetConfigValueSZ(hSession,"Wine","Profile",pCfg->szWinProfDir,MAX_PATH,"c:\\Windows\\Profiles\\Administrator");
+    GetConfigValueSZ(hSession,"Wine","Path",pCfg->szWinPath,MAX_PATH,"c:\\Windows;c:\\Windows\\System");
 
+    /* Graphics driver */
+    GetConfigValueSZ(hSession,"Wine","GraphicsDriver",pCfg->szGraphDriver,MAX_NAME_LENGTH,"x11drv");
+    
     /*
      * DLL defaults for all applications is built using
      * the default DLL structure
@@ -142,10 +217,11 @@
     pCfg->sX11Drv.nTextCP = 0;
     pCfg->sX11Drv.nXVideoPort = 43;
     pCfg->sX11Drv.nSynchronous = 1;
+    
+    RegCloseKey( hSession );
 
     return 0;
 }
-
 
 /*****************************************************************************
  * Name: saveConfig


More information about the wine-patches mailing list