no message
authorNedko Arnaudov <nedko@users.sourceforge.net>
Sat, 13 Jan 2001 23:55:37 +0000 (23:55 +0000)
committerNedko Arnaudov <nedko@users.sourceforge.net>
Sat, 13 Jan 2001 23:55:37 +0000 (23:55 +0000)
svn path=/trunk/; revision=1507

51 files changed:
rosapps/sysutils/regexpl/ArgumentParser.cpp
rosapps/sysutils/regexpl/ArgumentParser.h
rosapps/sysutils/regexpl/Completion.cpp
rosapps/sysutils/regexpl/Completion.h
rosapps/sysutils/regexpl/Console.cpp
rosapps/sysutils/regexpl/Console.h
rosapps/sysutils/regexpl/Pattern.cpp
rosapps/sysutils/regexpl/RegistryExplorer.cpp
rosapps/sysutils/regexpl/RegistryExplorer.h
rosapps/sysutils/regexpl/RegistryKey.cpp
rosapps/sysutils/regexpl/RegistryKey.h
rosapps/sysutils/regexpl/RegistryTree.cpp
rosapps/sysutils/regexpl/SecurityDescriptor.cpp
rosapps/sysutils/regexpl/SecurityDescriptor.h
rosapps/sysutils/regexpl/ShellCommand.cpp
rosapps/sysutils/regexpl/ShellCommand.h
rosapps/sysutils/regexpl/ShellCommandChangeKey.cpp
rosapps/sysutils/regexpl/ShellCommandChangeKey.h
rosapps/sysutils/regexpl/ShellCommandConnect.cpp
rosapps/sysutils/regexpl/ShellCommandConnect.h
rosapps/sysutils/regexpl/ShellCommandDACL.cpp
rosapps/sysutils/regexpl/ShellCommandDACL.h
rosapps/sysutils/regexpl/ShellCommandDOKA.cpp
rosapps/sysutils/regexpl/ShellCommandDOKA.h
rosapps/sysutils/regexpl/ShellCommandDeleteKey.cpp
rosapps/sysutils/regexpl/ShellCommandDeleteKey.h
rosapps/sysutils/regexpl/ShellCommandDeleteValue.cpp
rosapps/sysutils/regexpl/ShellCommandDeleteValue.h
rosapps/sysutils/regexpl/ShellCommandDir.cpp
rosapps/sysutils/regexpl/ShellCommandDir.h
rosapps/sysutils/regexpl/ShellCommandExit.cpp
rosapps/sysutils/regexpl/ShellCommandExit.h
rosapps/sysutils/regexpl/ShellCommandHelp.cpp
rosapps/sysutils/regexpl/ShellCommandHelp.h
rosapps/sysutils/regexpl/ShellCommandNewKey.cpp
rosapps/sysutils/regexpl/ShellCommandNewKey.h
rosapps/sysutils/regexpl/ShellCommandOwner.cpp
rosapps/sysutils/regexpl/ShellCommandOwner.h
rosapps/sysutils/regexpl/ShellCommandSACL.cpp
rosapps/sysutils/regexpl/ShellCommandSACL.h
rosapps/sysutils/regexpl/ShellCommandSetValue.cpp
rosapps/sysutils/regexpl/ShellCommandSetValue.h
rosapps/sysutils/regexpl/ShellCommandValue.cpp
rosapps/sysutils/regexpl/ShellCommandValue.h
rosapps/sysutils/regexpl/ShellCommandVersion.cpp
rosapps/sysutils/regexpl/ShellCommandVersion.h
rosapps/sysutils/regexpl/ShellCommandsLinkedList.cpp
rosapps/sysutils/regexpl/ShellCommandsLinkedList.h
rosapps/sysutils/regexpl/TextHistory.cpp
rosapps/sysutils/regexpl/TextHistory.h
rosapps/sysutils/regexpl/ph.h

index 95a024a..c73bcf9 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ArgumentParser.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ArgumentParser.cpp,v 1.4 2001/01/13 23:53:46 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 4495f2f..00ef2b5 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ArgumentParser.h,v 1.2 2001/01/13 23:53:46 narnaoud Exp $ */
+
 // ArgumentParser.h: interface for the CArgumentParser class.
 //
 //////////////////////////////////////////////////////////////////////
index 2d38961..a41706d 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: Completion.cpp,v 1.1 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: Completion.cpp,v 1.2 2001/01/13 23:54:07 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
@@ -240,10 +240,10 @@ BOOL CCompletionList::Add(const TCHAR *pszText, BOOL blnIsKey)
 const TCHAR * CCompletionList::Get(unsigned __int64 nIndex, BOOL& rblnIsKey)
 {
   ASSERT(nIndex < m_nCount);
-  BOOL blnForward;
+  BOOL blnForward = FALSE;
   CCompletionMatch *pNode = NULL;
 
-  unsigned __int64 nRelativeIndex;
+  unsigned __int64 nRelativeIndex = 0;
 
   if (m_pLastSearched)
   {
index b5a08ba..f530c05 100644 (file)
@@ -1,9 +1,9 @@
-/* $Id: Completion.h,v 1.1 2001/01/10 01:25:29 narnaoud Exp $ */
+/* $Id: Completion.h,v 1.2 2001/01/13 23:54:07 narnaoud Exp $ */
 
 // Completion.h - declaration for completion related functions
 
-#if !defined(PATTERN_H__INCLUDED_)
-#define PATTERN_H__INCLUDED_
+#if !defined(COMLPETION_H__INCLUDED_)
+#define COMPLETION_H__INCLUDED_
 
 typedef const TCHAR * (*ReplaceCompletionCallback)(unsigned __int64& rnIndex, const BOOL *pblnForward,
                                                                                                   const TCHAR *pchContext, const TCHAR *pchBegin);
index 5724ad2..3174444 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: Console.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: Console.cpp,v 1.4 2001/01/13 23:54:07 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 4157cd2..4042fe0 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: Console.h,v 1.4 2001/01/13 23:54:07 narnaoud Exp $ */
 // Console.h: interface for the CConsole class.
 //
 //////////////////////////////////////////////////////////////////////
index 58e79d3..e54849b 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: Pattern.cpp,v 1.1 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: Pattern.cpp,v 1.2 2001/01/13 23:54:40 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
@@ -32,11 +32,15 @@ BOOL PatternMatch(const TCHAR *pszPattern, const TCHAR *pszTry)
   {
     if (((*pszTry) == 0) && ((*pszPattern) == 0))
       return TRUE;
+
+    if (((*pszTry) == 0) || ((*pszPattern) == 0))
+      return FALSE;
+    
     pszTry++;
     pszPattern++;      
   }
    
-  if(*pszPattern == _T('*'))
+  if (*pszPattern == _T('*'))
   {
     pszPattern++;
     while (*pszTry)
index c376592..2df38ea 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: RegistryExplorer.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: RegistryExplorer.cpp,v 1.4 2001/01/13 23:54:40 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index e6c804c..e8671f2 100644 (file)
@@ -1,8 +1,9 @@
+/* $Id: RegistryExplorer.h,v 1.5 2001/01/13 23:53:23 narnaoud Exp $ */
 
 #ifndef _REGISTRY_EXPLORER_H__INCLUDED
 #define _REGISTRY_EXPLORER_H__INCLUDED
 
-#define CURRENT_VERSION                _T("0.20")
+#define CURRENT_VERSION                _T("0.20+")
 #define EMAIL                          _T("registryexplorer@yahoo.com")
 
 //#define __L(x)      L ## x
index 5429022..e96f9f6 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: RegistryKey.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: RegistryKey.cpp,v 1.4 2001/01/13 23:54:40 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 2de780c..59fe271 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: RegistryKey.h,v 1.4 2001/01/13 23:54:41 narnaoud Exp $ */
+
 // RegistryKey.h: interface for the CRegistryKey class.
 //
 //////////////////////////////////////////////////////////////////////
index 4d38cd8..0efd0b7 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: RegistryTree.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: RegistryTree.cpp,v 1.4 2001/01/13 23:54:41 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
@@ -287,21 +287,21 @@ BOOL CRegistryTree::DeleteSubkeys(CRegistryKey& rKey, const TCHAR *pszKeyPattern
   BOOL blnKeyDeleted = FALSE;
   while ((nError = rKey.GetNextSubkeyName()) == ERROR_SUCCESS)
   {
-    if (blnRecursive)
-    { // deltion is recursive, delete subkey subkeys
-      CRegistryKey Subkey;
-      // open subkey
-      nError = rKey.OpenSubkey(DELETE,pszSubkeyName,Subkey);
-      // delete subkey subkeys
-      if (DeleteSubkeys(Subkey, PATTERN_MATCH_ALL, TRUE))
-      {
-        AddErrorDescription(_T("Cannot delete subkey(s) of key %s. Subkey deletion failed.\n"),Subkey.GetKeyName());
-        return FALSE;
-      }
-    }
-
     if (PatternMatch(pszKeyPattern,pszSubkeyName))
     {
+      if (blnRecursive)
+      { // deltion is recursive, delete subkey subkeys
+        CRegistryKey Subkey;
+        // open subkey
+        nError = rKey.OpenSubkey(DELETE,pszSubkeyName,Subkey);
+        // delete subkey subkeys
+        if (DeleteSubkeys(Subkey, PATTERN_MATCH_ALL, TRUE))
+        {
+          AddErrorDescription(_T("Cannot delete subkey(s) of key %s. Subkey deletion failed.\n"),Subkey.GetKeyName());
+          return FALSE;
+        }
+      }
+
       nError = rKey.DeleteSubkey(pszSubkeyName);
       if (nError != ERROR_SUCCESS)
       {
@@ -311,6 +311,7 @@ BOOL CRegistryTree::DeleteSubkeys(CRegistryKey& rKey, const TCHAR *pszKeyPattern
         return FALSE;
       }
       blnKeyDeleted = TRUE;
+      rKey.InitSubkeyEnumeration(pszSubkeyName, dwMaxSubkeyNameLength); // reset iteration
     }
   }
 
index d19289d..90ba0d1 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: SecurityDescriptor.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: SecurityDescriptor.cpp,v 1.4 2001/01/13 23:54:41 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 9cec227..0cef15a 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: SecurityDescriptor.h,v 1.3 2001/01/13 23:54:41 narnaoud Exp $ */
+
 // SecurityDescriptor.h: interface for the CSecurityDescriptor class.
 //
 //////////////////////////////////////////////////////////////////////
index c3702ec..75db373 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommand.cpp,v 1.2 2000/10/24 20:17:41 narnaoud Exp $
+/* $Id: ShellCommand.cpp,v 1.3 2001/01/13 23:55:36 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 6f68b3f..cd8fc8b 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommand.h,v 1.2 2001/01/13 23:55:36 narnaoud Exp $ */
+
 // ShellCommand.h: interface for the CShellCommand class.
 //
 //////////////////////////////////////////////////////////////////////
index 3618196..98bbcd3 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandChangeKey.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandChangeKey.cpp,v 1.4 2001/01/13 23:55:36 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index e5e4cb1..671c72e 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandChangeKey.h,v 1.2 2001/01/13 23:55:36 narnaoud Exp $ */
+
 // ShellCommandChangeKey.h: interface for the CShellCommandChangeKey class.
 //
 //////////////////////////////////////////////////////////////////////
index cde1b7c..5e65755 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandConnect.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandConnect.cpp,v 1.4 2001/01/13 23:55:36 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 3bada8f..66f0ef9 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandConnect.h,v 1.2 2001/01/13 23:55:36 narnaoud Exp $ */
+
 // ShellCommandConnect.h: interface for the CShellCommandConnect class.
 //
 //////////////////////////////////////////////////////////////////////
index 62496a4..6c672fa 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandDACL.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandDACL.cpp,v 1.4 2001/01/13 23:55:36 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 40a0476..b98966e 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandDACL.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandDACL.h: interface for the CShellCommandDACL class.
 //
 //////////////////////////////////////////////////////////////////////
index 6a0aa90..2ba582d 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandDOKA.cpp,v 1.2 2000/10/24 20:17:41 narnaoud Exp $
+/* $Id: ShellCommandDOKA.cpp,v 1.3 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 874dffd..8db95f6 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandDOKA.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandDOKA.h: interface for the CShellCommandDOKA class.
 //
 //////////////////////////////////////////////////////////////////////
index a580489..e7e7a93 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandDeleteKey.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandDeleteKey.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
@@ -116,7 +116,10 @@ int CShellCommandDeleteKey::Execute(CConsole &rConsole, CArgumentParser& rArgume
   ASSERT(pch >= pchKey);
 
   const TCHAR *pszPath;
-  TCHAR *pszPattern = pch+1;
+  TCHAR *pszPattern = pch;
+  if (*pch == _T('\\'))
+    pszPattern++;
+  
   if (pch == pchKey)
   {
     pszPath = _T(".");
index 283450e..2a22509 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandDeleteKey.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandDeleteKey.h: interface for the CShellCommandDeleteKey class.
 //
 //////////////////////////////////////////////////////////////////////
index fdc28ee..7b7ada8 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandDeleteValue.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandDeleteValue.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
@@ -27,6 +27,7 @@
 #include "ph.h"
 #include "ShellCommandDeleteValue.h"
 #include "RegistryExplorer.h"
+#include "Pattern.h"
 
 #define DV_CMD                 _T("DV")
 #define DV_CMD_LENGTH          COMMAND_LENGTH(DV_CMD)
@@ -51,119 +52,134 @@ BOOL CShellCommandDeleteValue::Match(const TCHAR *pszCommand)
 
 int CShellCommandDeleteValue::Execute(CConsole &rConsole, CArgumentParser& rArguments)
 {
-       rArguments.ResetArgumentIteration();
-       TCHAR *pszCommandItself = rArguments.GetNextArgument();
-
-       TCHAR *pszParameter;
-       TCHAR *pszValueFull = NULL;
-       BOOL blnHelp = FALSE;
-//     DWORD dwError;
-
-       if ((_tcsnicmp(pszCommandItself,DV_CMD _T(".."),DV_CMD_LENGTH+2*sizeof(TCHAR)) == 0)||
-               (_tcsnicmp(pszCommandItself,DV_CMD _T("\\"),DV_CMD_LENGTH+1*sizeof(TCHAR)) == 0))
-       {
-               pszValueFull = pszCommandItself + DV_CMD_LENGTH;
-       }
-       else if (_tcsnicmp(pszCommandItself,DV_CMD _T("/"),DV_CMD_LENGTH+1*sizeof(TCHAR)) == 0)
-       {
-               pszParameter = pszCommandItself + DV_CMD_LENGTH;
-               goto CheckValueArgument;
-       }
-
-       while((pszParameter = rArguments.GetNextArgument()) != NULL)
-       {
+  rArguments.ResetArgumentIteration();
+  TCHAR *pszCommandItself = rArguments.GetNextArgument();
+
+  TCHAR *pszParameter;
+  TCHAR *pszValueFull = NULL;
+  BOOL blnHelp = FALSE;
+
+  if ((_tcsnicmp(pszCommandItself,DV_CMD _T(".."),DV_CMD_LENGTH+2*sizeof(TCHAR)) == 0)||
+      (_tcsnicmp(pszCommandItself,DV_CMD _T("\\"),DV_CMD_LENGTH+1*sizeof(TCHAR)) == 0))
+  {
+    pszValueFull = pszCommandItself + DV_CMD_LENGTH;
+  }
+  else if (_tcsnicmp(pszCommandItself,DV_CMD _T("/"),DV_CMD_LENGTH+1*sizeof(TCHAR)) == 0)
+  {
+    pszParameter = pszCommandItself + DV_CMD_LENGTH;
+    goto CheckValueArgument;
+  }
+
+  while((pszParameter = rArguments.GetNextArgument()) != NULL)
+  {
 CheckValueArgument:
-               if ((_tcsicmp(pszParameter,_T("/?")) == 0)
-                       ||(_tcsicmp(pszParameter,_T("-?")) == 0))
-               {
-                       blnHelp = TRUE;
-                       break;
-               }
-               else if (!pszValueFull)
-               {
-                       pszValueFull = pszParameter;
-               }
-               else
-               {
-                       rConsole.Write(_T("Bad parameter: "));
-                       rConsole.Write(pszParameter);
-                       rConsole.Write(_T("\n"));
-               }
-       }
+    if ((_tcsicmp(pszParameter,_T("/?")) == 0)
+        ||(_tcsicmp(pszParameter,_T("-?")) == 0))
+    {
+      blnHelp = TRUE;
+      break;
+    }
+    else if (!pszValueFull)
+    {
+      pszValueFull = pszParameter;
+    }
+    else
+    {
+      rConsole.Write(_T("Bad parameter: "));
+      rConsole.Write(pszParameter);
+      rConsole.Write(_T("\n"));
+    }
+  }
        
-       CRegistryKey Key;
-       TCHAR *pszValueName;
-       const TCHAR *pszPath;
+  CRegistryKey Key;
+  TCHAR *pszValueNamePattern;
+  const TCHAR *pszPath;
        
-       if (blnHelp)
-       {
-               rConsole.Write(GetHelpString());
-               return 0;
-       }
-
-       if (pszValueFull)
-       {
-               if (_tcscmp(pszValueFull,_T("\\")) == 0)
-                       goto CommandNAonRoot;
-
-               TCHAR *pchSep = _tcsrchr(pszValueFull,_T('\\'));
-               pszValueName = pchSep?(pchSep+1):(pszValueFull);
-               pszPath = pchSep?pszValueFull:_T(".");
-                               
-               //if (_tcsrchr(pszValueName,_T('.')))
-               //{
-               //      pszValueName = _T("");
-               //      pszPath = pszValueFull;
-               //}
-               //else
-               if (pchSep)
-                       *pchSep = 0;
-       }
-       else
-       {
-               pszValueName = _T("");
-               pszPath = _T(".");
-       }
+  if (blnHelp)
+  {
+    rConsole.Write(GetHelpString());
+    return 0;
+  }
+
+  if (pszValueFull)
+  {
+    if (_tcscmp(pszValueFull,_T("\\")) == 0)
+      goto CommandNAonRoot;
+
+    TCHAR *pchSep = _tcsrchr(pszValueFull,_T('\\'));
+    pszValueNamePattern = pchSep?(pchSep+1):(pszValueFull);
+    pszPath = pchSep?pszValueFull:_T(".");
+
+    if (pchSep)
+      *pchSep = 0;
+  }
+  else
+  {
+    pszValueNamePattern = _T("");
+    pszPath = _T(".");
+  }
   
   {
-    size_t s = _tcslen(pszValueName);
-    if (s && (pszValueName[0] == _T('\"'))&&(pszValueName[s-1] == _T('\"')))
+    size_t s = _tcslen(pszValueNamePattern);
+    if (s && (pszValueNamePattern[0] == _T('\"'))&&(pszValueNamePattern[s-1] == _T('\"')))
     {
-      pszValueName[s-1] = 0;
-      pszValueName++;
+      pszValueNamePattern[s-1] = 0;
+      pszValueNamePattern++;
     }
   }
 
-  if (!m_rTree.GetKey(pszPath,KEY_SET_VALUE,Key))
+  if (!m_rTree.GetKey(pszPath,KEY_QUERY_VALUE|KEY_SET_VALUE,Key))
   {
     rConsole.Write(m_rTree.GetLastErrorDescription());
-    goto SkipCommand;
+    return 0;
   }
 
-       if (!Key.IsRoot())
-       {       // not root key ???
-               LONG nError = Key.DeleteValue(pszValueName);
-               if (nError != ERROR_SUCCESS)
-               {
-                       char Buffer[254];
-                       _stprintf(Buffer,_T("Cannot delete value. Error is %u\n"),(unsigned int)nError);
-                       rConsole.Write(Buffer);
-               }
-    else
+  if (!Key.IsRoot())
+  {    // not root key ???
+    TCHAR Buffer[254];
+    DWORD dwMaxValueNameLength;
+    LONG nError = Key.GetMaxValueNameLength(dwMaxValueNameLength);
+    if (nError != ERROR_SUCCESS)
     {
-      InvalidateCompletion();
+      _stprintf(Buffer,_T("Cannot query info about %s key. Error is %u\n"),Key.GetKeyName(),(unsigned int)nError);
+      rConsole.Write(Buffer);
+      return 0;
     }
-       } // if (pKey)
-       else
-       {
+
+    TCHAR *pszValueName = new TCHAR[dwMaxValueNameLength];
+    if (!pszValueName)
+    {
+      rConsole.Write("Out of memory.");
+      return 0;
+    }
+
+    Key.InitValueEnumeration(pszValueName,dwMaxValueNameLength,NULL,0,NULL);
+
+    while ((nError = Key.GetNextValue()) == ERROR_SUCCESS)
+    {
+      if (PatternMatch(pszValueNamePattern,pszValueName))
+      {
+        nError = Key.DeleteValue(pszValueName);
+        if (nError != ERROR_SUCCESS)
+        {
+          _stprintf(Buffer,_T("Cannot delete value. Error is %u\n"),(unsigned int)nError);
+          rConsole.Write(Buffer);
+        }
+        else
+        {
+          InvalidateCompletion();
+        }
+        Key.InitValueEnumeration(pszValueName,dwMaxValueNameLength,NULL,0,NULL); // reset iteration
+      }
+    }
+  } // if (pKey)
+  else
+  {
 CommandNAonRoot:
-               rConsole.Write(DV_CMD COMMAND_NA_ON_ROOT);
-       }
+    rConsole.Write(DV_CMD COMMAND_NA_ON_ROOT);
+  }
 
-SkipCommand:
-  //   if (pTree)
-  //           delete pTree;
-       return 0;
+  return 0;
 }
 
 const TCHAR * CShellCommandDeleteValue::GetHelpString()
@@ -171,7 +187,7 @@ const TCHAR * CShellCommandDeleteValue::GetHelpString()
        return DV_CMD_SHORT_DESC
                        _T("Syntax: ") DV_CMD _T(" [<PATH>][<VALUE_NAME>] [/?]\n\n")
                        _T("    <PATH>       - Optional relative path of key which value will be delete.\n")
-                       _T("    <VALUE_NAME> - Name of key's value. Default is key's default value.\n")
+                       _T("    <VALUE_NAME> - Name pattern of key's value. Default is key's default value.\n")
                        _T("    /? - This help.\n\n");
 }
 
index 14d703a..7fb1a18 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandDeleteValue.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandDeleteValue.h: interface for the CShellCommandDeleteValue class.
 //
 //////////////////////////////////////////////////////////////////////
index fa405da..e278781 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandDir.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandDir.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
@@ -29,6 +29,7 @@
 #include "ShellCommandDir.h"
 #include "RegistryTree.h"
 #include "RegistryKey.h"
+#include "Pattern.h"
 
 // *** THIS SHOULD GO IN A MINGW/ROS HEADER (tchar.h ???) - Begin
 #if 1  // #ifndef _ui64tot ???
@@ -74,9 +75,9 @@ int CShellCommandDir::Execute(CConsole &rConsole, CArgumentParser& rArguments)
        rArguments.ResetArgumentIteration();
 
        BOOL blnDo = TRUE,blnBadParameter, blnHelp = FALSE;
-       const TCHAR *pszParameter;
-       const TCHAR *pszCommandItself = rArguments.GetNextArgument();
-  const TCHAR *pszKey = NULL;
+       TCHAR *pszParameter;
+       TCHAR *pszCommandItself = rArguments.GetNextArgument();
+  TCHAR *pszKey = NULL;
 
        if ((_tcsnicmp(pszCommandItself,DIR_CMD _T(".."),DIR_CMD_LENGTH+2*sizeof(TCHAR)) == 0)||
                (_tcsnicmp(pszCommandItself,DIR_CMD _T("\\"),DIR_CMD_LENGTH+1*sizeof(TCHAR)) == 0))
@@ -116,9 +117,50 @@ CheckDirArgument:
                }
        }
        
+  const TCHAR *pszPattern = PATTERN_MATCH_ALL;
+  const TCHAR *pszPath = _T(".");
+
+  if (pszKey)
+  {
+    pszPath = pszKey;
+    
+    TCHAR *pch = pszKey;
+    while(*pch) // search end of string
+      pch++;
+
+    if (pch > pszKey) // last non-null char
+      pch--;
+
+    if (*pch != _T('\\'))
+    {
+      while ((pch > pszKey) && (*pch != _T('\\')))
+        pch--;
+    
+      if (*pch == _T('\\'))
+      {
+        pszPattern = pch+1;
+        
+        if (pch > pszKey)
+        {
+          ASSERT(*pch == _T('\\'));
+          *pch = 0;
+        }
+        else if (*pch == _T('\\'))
+        {
+          pszPath = _T("\\");
+        }
+      }
+      else
+      {
+        pszPattern = pszKey;
+        pszPath = _T(".");
+      }
+    }
+  }
+
        CRegistryKey Key;
 
-  if (!m_rTree.GetKey(pszKey?pszKey:_T("."),KEY_ENUMERATE_SUB_KEYS|KEY_QUERY_VALUE,Key))
+  if (!m_rTree.GetKey(pszPath,KEY_ENUMERATE_SUB_KEYS|KEY_QUERY_VALUE,Key))
   {
     const TCHAR *pszErrorMsg = m_rTree.GetLastErrorDescription();
     rConsole.Write(pszErrorMsg);
@@ -165,10 +207,13 @@ CheckDirArgument:
     Key.InitSubkeyEnumeration(pszSubkeyNameBuffer,dwMaxSubkeyNameLength);
     while ((nError = Key.GetNextSubkeyName()) == ERROR_SUCCESS)
     {
-      rConsole.Write(_T("\t(KEY)\t\t\t\t"));
-      rConsole.Write(pszSubkeyNameBuffer);
-      rConsole.Write(_T("\\\n"));
-      nTotalItems++;
+      if (PatternMatch(pszPattern,pszSubkeyNameBuffer))
+      {
+        rConsole.Write(_T("\t(KEY)\t\t\t\t"));
+        rConsole.Write(pszSubkeyNameBuffer);
+        rConsole.Write(_T("\\\n"));
+        nTotalItems++;
+      }
     }
 
     delete pszSubkeyNameBuffer;
@@ -199,16 +244,19 @@ CheckDirArgument:
     unsigned int nTabs;
     while((nError = Key.GetNextValue(&dwValueNameActualLength)) == ERROR_SUCCESS)
     {
-      rConsole.Write(_T("\t"));
-      pszValueTypeName = CRegistryKey::GetValueTypeName(Type);
-      nTabs = _tcslen(pszValueTypeName)/nTabSize;
-      nTabs = (nTabs < 4)?(4-nTabs):1;
-      rConsole.Write(pszValueTypeName);
-      while(nTabs--)
+      if (PatternMatch(pszPattern,pchValueNameBuffer))
+      {
         rConsole.Write(_T("\t"));
-      rConsole.Write((dwValueNameActualLength == 0)?_T("(Default)"):pchValueNameBuffer);
-      rConsole.Write(_T("\n"));
-      nTotalItems++;
+        pszValueTypeName = CRegistryKey::GetValueTypeName(Type);
+        nTabs = _tcslen(pszValueTypeName)/nTabSize;
+        nTabs = (nTabs < 4)?(4-nTabs):1;
+        rConsole.Write(pszValueTypeName);
+        while(nTabs--)
+          rConsole.Write(_T("\t"));
+        rConsole.Write((dwValueNameActualLength == 0)?_T("(Default)"):pchValueNameBuffer);
+        rConsole.Write(_T("\n"));
+        nTotalItems++;
+      }
     }
     
     delete pchValueNameBuffer;
@@ -236,8 +284,9 @@ CheckDirArgument:
 const TCHAR * CShellCommandDir::GetHelpString()
 {
        return DIR_CMD_SHORT_DESC
-                       _T("Syntax: ") DIR_CMD _T(" [<KEY>] [/?]\n\n")
-                       _T("    <KEY> - Optional relative path to the key on which command will be executed\n")
+                       _T("Syntax: ") DIR_CMD _T(" [<PATH>\\][<PATTERN>] [/?]\n\n")
+                       _T("    <PATH> - Optional relative path to the key on which command will be executed\n")
+      _T("    <PATTERN> - Optional pattern. Default is the all matching pattern.")
                        _T("    /?    - This help.\n\n")
                        _T("Without parameters, command lists keys and values of current key.\n");
 }
index 97e51f2..7ef733f 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandDir.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandDir.h: interface for the CShellCommandDir class.
 //
 //////////////////////////////////////////////////////////////////////
index d49139f..f1a8fcb 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandExit.cpp,v 1.2 2000/10/24 20:17:41 narnaoud Exp $
+/* $Id: ShellCommandExit.cpp,v 1.3 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 7b44625..4bd9dfd 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandExit.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandExit.h: interface for the CShellCommandExit class.
 //
 //////////////////////////////////////////////////////////////////////
index c0b68be..5bde83d 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandHelp.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandHelp.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index ee0390f..0b43ce4 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandHelp.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandHelp.h: interface for the CShellCommandHelp class.
 //
 //////////////////////////////////////////////////////////////////////
index 3ba509f..18c3e28 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandNewKey.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandNewKey.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
@@ -116,7 +116,10 @@ int CShellCommandNewKey::Execute(CConsole &rConsole, CArgumentParser& rArguments
   ASSERT(pch >= pszNewKey);
 
   const TCHAR *pszPath;
-  TCHAR *pszSubkeyName = pch+1;
+  TCHAR *pszSubkeyName = pch;
+  if (*pch == _T('\\'))
+    pszSubkeyName++;
+  
   if (pch == pszNewKey)
   {
     pszPath = _T(".");
index b254ff5..ba9a01c 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandNewKey.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandNewKey.h: interface for the CShellCommandNewKey class.
 //
 //////////////////////////////////////////////////////////////////////
index 11c0d97..28f7862 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandOwner.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandOwner.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 1ac345f..d96c50d 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandOwner.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandOwner.h: interface for the CShellCommandOwner class.
 //
 //////////////////////////////////////////////////////////////////////
index 929be09..7ce4f76 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandSACL.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandSACL.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index ee04f2f..9089215 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandSACL.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandSACL.h: interface for the CShellCommandSACL class.
 //
 //////////////////////////////////////////////////////////////////////
index e5a72af..2d1d161 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandSetValue.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandSetValue.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index d25a7de..47a6353 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandSetValue.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandSetValue.h: interface for the CShellCommandSetValue class.
 //
 //////////////////////////////////////////////////////////////////////
index 05560e3..6c10763 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandValue.cpp,v 1.3 2001/01/10 01:25:29 narnaoud Exp $
+/* $Id: ShellCommandValue.cpp,v 1.4 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index fea43a6..64adbbb 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandValue.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandValue.h: interface for the CShellCommandValue class.
 //
 //////////////////////////////////////////////////////////////////////
index b9fc023..09a26b9 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandVersion.cpp,v 1.2 2000/10/24 20:17:42 narnaoud Exp $
+/* $Id: ShellCommandVersion.cpp,v 1.3 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index 20b87cc..2c1596b 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandVersion.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandVersion.h: interface for the CShellCommandVersion class.
 //
 //////////////////////////////////////////////////////////////////////
index dd6a73d..c26d1a0 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: ShellCommandsLinkedList.cpp,v 1.2 2000/10/24 20:17:42 narnaoud Exp $
+/* $Id: ShellCommandsLinkedList.cpp,v 1.3 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index ef87c9c..4cec3f0 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ShellCommandsLinkedList.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // ShellCommandsLinkedList.h: interface for the CShellCommandsLinkedList class.
 //
 //////////////////////////////////////////////////////////////////////
index 8847489..df27664 100644 (file)
@@ -1,8 +1,8 @@
-/* $Id: TextHistory.cpp,v 1.2 2000/10/24 20:17:42 narnaoud Exp $
+/* $Id: TextHistory.cpp,v 1.3 2001/01/13 23:55:37 narnaoud Exp $
  *
  * regexpl - Console Registry Explorer
  *
- * Copyright (C) 2000 Nedko Arnaoudov <nedkohome@atia.com>
+ * Copyright (C) 2000,2001 Nedko Arnaoudov <nedkohome@atia.com>
  *
  * 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
index ad7ddf4..39a7c23 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: TextHistory.h,v 1.2 2001/01/13 23:55:37 narnaoud Exp $ */
+
 // TextHistory.h: interface for the CTextHistory class.
 //
 //////////////////////////////////////////////////////////////////////
index 9def17c..e044ffb 100644 (file)
@@ -1,3 +1,5 @@
+/* $Id: ph.h,v 1.3 2001/01/13 23:54:40 narnaoud Exp $ */
+
 // ph.h : include file for standard system include files,
 //  or project specific include files that are used frequently, but
 //      are changed infrequently