Byeong-Sik Jeon : regedit: Support REG_MULTI_SZ creation and editing.
Alexandre Julliard
julliard at wine.codeweavers.com
Tue Apr 3 06:48:37 CDT 2007
Module: wine
Branch: master
Commit: f225297a5f496ec01e6884d90b83951f55c501d9
URL: http://source.winehq.org/git/wine.git/?a=commit;h=f225297a5f496ec01e6884d90b83951f55c501d9
Author: Byeong-Sik Jeon <wjsqudtlr at gmail.com>
Date: Sat Mar 31 00:14:03 2007 +0900
regedit: Support REG_MULTI_SZ creation and editing.
---
programs/regedit/En.rc | 17 +++++++++++++
programs/regedit/edit.c | 53 +++++++++++++++++++++++++++++++++++++++++++
programs/regedit/framewnd.c | 3 ++
programs/regedit/resource.h | 2 +
4 files changed, 75 insertions(+), 0 deletions(-)
diff --git a/programs/regedit/En.rc b/programs/regedit/En.rc
index 078af00..fad2913 100644
--- a/programs/regedit/En.rc
+++ b/programs/regedit/En.rc
@@ -53,6 +53,7 @@ BEGIN
MENUITEM "&String Value", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binary Value", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&DWORD Value", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&Multi String Value", ID_EDIT_NEW_MULTI_STRINGVALUE
END
MENUITEM SEPARATOR
MENUITEM "&Delete\tDel", ID_EDIT_DELETE
@@ -129,6 +130,7 @@ BEGIN
MENUITEM "&String Value", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binary Value", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&DWORD Value", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&Multi String Value", ID_EDIT_NEW_MULTI_STRINGVALUE
END
MENUITEM SEPARATOR
MENUITEM "&Delete\tDel", ID_EDIT_DELETE
@@ -179,6 +181,7 @@ BEGIN
MENUITEM "&String Value", ID_EDIT_NEW_STRINGVALUE
MENUITEM "&Binary Value", ID_EDIT_NEW_BINARYVALUE
MENUITEM "&DWORD Value", ID_EDIT_NEW_DWORDVALUE
+ MENUITEM "&Multi String Value", ID_EDIT_NEW_MULTI_STRINGVALUE
END
MENUITEM SEPARATOR
MENUITEM "&Delete\tDel", ID_EDIT_DELETE
@@ -286,6 +289,19 @@ BEGIN
PUSHBUTTON "Cancel",IDCANCEL,175,80,30,11,WS_GROUP
END
+IDD_EDIT_MULTI_STRING DIALOG DISCARDABLE 22, 17, 210, 175
+STYLE DS_MODALFRAME | WS_CAPTION | WS_SYSMENU
+CAPTION "Edit Multi String"
+FONT 8, "MS Shell Dlg"
+BEGIN
+ LTEXT "Value name:",IDC_STATIC,5,5,119,8
+ EDITTEXT IDC_VALUE_NAME,5,15,200,12, WS_BORDER | WS_TABSTOP | ES_AUTOHSCROLL| WS_DISABLED
+ LTEXT "Value data:",IDC_STATIC,5,30,119,8
+ EDITTEXT IDC_VALUE_DATA,5,40,200,112, WS_BORDER | WS_TABSTOP | WS_HSCROLL | WS_VSCROLL | ES_MULTILINE | ES_WANTRETURN
+ DEFPUSHBUTTON "OK",IDOK,140,160,30,11,WS_GROUP
+ PUSHBUTTON "Cancel",IDCANCEL,175,160,30,11,WS_GROUP
+END
+
/*
* String Table
*/
@@ -321,6 +337,7 @@ BEGIN
ID_EDIT_NEW_STRINGVALUE "Adds a new string value"
ID_EDIT_NEW_BINARYVALUE "Adds a new binary value"
ID_EDIT_NEW_DWORDVALUE "Adds a new double word value"
+ ID_EDIT_NEW_MULTI_STRINGVALUE "Adds a new multi string value"
ID_REGISTRY_IMPORTREGISTRYFILE "Imports a text file into the registry"
ID_REGISTRY_EXPORTREGISTRYFILE
"Exports all or part of the registry to a text file"
diff --git a/programs/regedit/edit.c b/programs/regedit/edit.c
index a834966..31645a7 100644
--- a/programs/regedit/edit.c
+++ b/programs/regedit/edit.c
@@ -322,6 +322,59 @@ BOOL ModifyValue(HWND hwnd, HKEY hKeyRoot, LPCTSTR keyPath, LPCTSTR valueName)
params.cbData = len;
result = DialogBoxParam(NULL, MAKEINTRESOURCE(IDD_EDIT_BINARY), hwnd,
bin_modify_dlgproc, (LPARAM)¶ms);
+ } else if ( type == REG_MULTI_SZ ) {
+ TCHAR char1 = (TCHAR)'\r', char2 = (TCHAR)'\n';
+ TCHAR *tmpValueData = NULL;
+ INT i, j, count;
+
+ for ( i = 0, count = 0; i < len - 1; i++)
+ if ( !stringValueData[i] && stringValueData[i + 1] )
+ count++;
+ tmpValueData = HeapAlloc( GetProcessHeap(), 0, ( len + count ) * sizeof(TCHAR));
+ if ( !tmpValueData ) goto done;
+
+ for ( i = 0, j = 0; i < len - 1; i++)
+ {
+ if ( !stringValueData[i] && stringValueData[i + 1])
+ {
+ tmpValueData[j++] = char1;
+ tmpValueData[j++] = char2;
+ }
+ else
+ tmpValueData[j++] = stringValueData[i];
+ }
+ tmpValueData[j] = stringValueData[i];
+ HeapFree( GetProcessHeap(), 0, stringValueData);
+ stringValueData = tmpValueData;
+ tmpValueData = NULL;
+
+ if (DialogBox(0, MAKEINTRESOURCE(IDD_EDIT_MULTI_STRING), hwnd, modify_dlgproc) == IDOK)
+ {
+ len = lstrlen( stringValueData );
+ tmpValueData = HeapAlloc( GetProcessHeap(), 0, (len + 2) * sizeof(TCHAR));
+ if ( !tmpValueData ) goto done;
+
+ for ( i = 0, j = 0; i < len - 1; i++)
+ {
+ if ( stringValueData[i] == char1 && stringValueData[i + 1] == char2)
+ {
+ if ( tmpValueData[j - 1] != 0)
+ tmpValueData[j++] = 0;
+ i++;
+ }
+ else
+ tmpValueData[j++] = stringValueData[i];
+ }
+ tmpValueData[j++] = stringValueData[i];
+ tmpValueData[j++] = 0;
+ tmpValueData[j++] = 0;
+ HeapFree( GetProcessHeap(), 0, stringValueData);
+ stringValueData = tmpValueData;
+
+ lRet = RegSetValueEx(hKey, valueName, 0, type, (LPBYTE)stringValueData, j * sizeof(TCHAR));
+ if (lRet == ERROR_SUCCESS) result = TRUE;
+ else error_code_messagebox(hwnd, lRet);
+ }
} else {
error(hwnd, IDS_UNSUPPORTED_TYPE, type);
}
diff --git a/programs/regedit/framewnd.c b/programs/regedit/framewnd.c
index 006e802..1c9dbc7 100644
--- a/programs/regedit/framewnd.c
+++ b/programs/regedit/framewnd.c
@@ -710,6 +710,9 @@ static BOOL _CmdWndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam)
case ID_EDIT_NEW_STRINGVALUE:
valueType = REG_SZ;
goto create_value;
+ case ID_EDIT_NEW_MULTI_STRINGVALUE:
+ valueType = REG_MULTI_SZ;
+ goto create_value;
case ID_EDIT_NEW_BINARYVALUE:
valueType = REG_BINARY;
goto create_value;
diff --git a/programs/regedit/resource.h b/programs/regedit/resource.h
index 8d98d5a..8e703fb 100644
--- a/programs/regedit/resource.h
+++ b/programs/regedit/resource.h
@@ -132,6 +132,7 @@
#define ID_SWITCH_PANELS 32871
#define ID_FAVORITE_FIRST 33000
#define ID_FAVORITE_LAST 33099
+#define ID_EDIT_NEW_MULTI_STRINGVALUE 33100
#define IDD_EDIT_STRING 2000
#define IDC_VALUE_NAME 2001
@@ -142,6 +143,7 @@
#define IDC_FIND_VALUES 2006
#define IDC_FIND_CONTENT 2007
#define IDC_FIND_WHOLE 2008
+#define IDD_EDIT_MULTI_STRING 2009
#define IDC_EXPORT_BASE 100
#define IDC_EXPORT_ALL 101
More information about the wine-cvs
mailing list