Jason Edmeades : cmd.exe: Support default colours for wineconsole.

Alexandre Julliard julliard at wine.codeweavers.com
Thu Mar 8 07:17:06 CST 2007


Module: wine
Branch: master
Commit: b9265bc3a9e9a19515fda20d111730f8acfb348c
URL:    http://source.winehq.org/git/wine.git/?a=commit;h=b9265bc3a9e9a19515fda20d111730f8acfb348c

Author: Jason Edmeades <us at edmeades.me.uk>
Date:   Thu Mar  8 00:40:54 2007 +0000

cmd.exe: Support default colours for wineconsole.

---

 programs/cmd/wcmdmain.c |   60 ++++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 59 insertions(+), 1 deletions(-)

diff --git a/programs/cmd/wcmdmain.c b/programs/cmd/wcmdmain.c
index 327cfba..c8a7943 100644
--- a/programs/cmd/wcmdmain.c
+++ b/programs/cmd/wcmdmain.c
@@ -262,10 +262,68 @@ int main (int argc, char *argv[])
   /* Note: cmd.exe /c dir does not get a new color, /k dir does */
   if (opt_t) {
       if (!(((opt_t & 0xF0) >> 4) == (opt_t & 0x0F))) {
-          defaultColor = opt_t;
+          defaultColor = opt_t & 0xFF;
           param1[0] = 0x00;
           WCMD_color();
       }
+  } else {
+      /* Check HKCU\Software\Microsoft\Command Processor
+         Then  HKLM\Software\Microsoft\Command Processor
+           for defaultcolour value
+           Note  Can be supplied as DWORD or REG_SZ
+           Note2 When supplied as REG_SZ it's in decimal!!! */
+      HKEY key;
+      DWORD type;
+      DWORD value=0, size=4;
+
+      if (RegOpenKeyEx(HKEY_CURRENT_USER, "Software\\Microsoft\\Command Processor",
+                       0, KEY_READ, &key) == ERROR_SUCCESS) {
+          char  strvalue[4];
+
+          /* See if DWORD or REG_SZ */
+          if (RegQueryValueEx(key, "DefaultColor", NULL, &type,
+                     NULL, NULL) == ERROR_SUCCESS) {
+              if (type == REG_DWORD) {
+                  size = sizeof(DWORD);
+                  RegQueryValueEx(key, "DefaultColor", NULL, NULL,
+                                  (LPBYTE)&value, &size);
+              } else if (type == REG_SZ) {
+                  size = sizeof(strvalue);
+                  RegQueryValueEx(key, "DefaultColor", NULL, NULL,
+                                  (LPBYTE)strvalue, &size);
+                  value = strtoul(strvalue, NULL, 10);
+              }
+          }
+      }
+
+      if (value == 0 && RegOpenKeyEx(HKEY_LOCAL_MACHINE,
+                       "Software\\Microsoft\\Command Processor",
+                       0, KEY_READ, &key) == ERROR_SUCCESS) {
+          char  strvalue[4];
+
+          /* See if DWORD or REG_SZ */
+          if (RegQueryValueEx(key, "DefaultColor", NULL, &type,
+                     NULL, NULL) == ERROR_SUCCESS) {
+              if (type == REG_DWORD) {
+                  size = sizeof(DWORD);
+                  RegQueryValueEx(key, "DefaultColor", NULL, NULL,
+                                  (LPBYTE)&value, &size);
+              } else if (type == REG_SZ) {
+                  size = sizeof(strvalue);
+                  RegQueryValueEx(key, "DefaultColor", NULL, NULL,
+                                  (LPBYTE)strvalue, &size);
+                  value = strtoul(strvalue, NULL, 10);
+              }
+          }
+      }
+
+      /* If one found, set the screen to that colour */
+      if (!(((value & 0xF0) >> 4) == (value & 0x0F))) {
+          defaultColor = value & 0xFF;
+          param1[0] = 0x00;
+          WCMD_color();
+      }
+
   }
 
   if (opt_k) {




More information about the wine-cvs mailing list