16 shell seperation
Michael Stefaniuc
mstefani at redhat.de
Sat Oct 12 18:23:06 CDT 2002
You forgot to do the right HKEY <--> HKEY16 conversions with HKEY_16() and
HKEY_32(), examples how to do it should be in the code.
bye
michael
On Sat, Oct 12, 2002 at 05:20:31PM -0000, György 'Nog' Jeney wrote:
> Is it possible to move all of the resources in the shell32 directory to a
> sub directory inside shell32 like resources (just like gdi)? Its quite
> confusing the way it is now.
>
> Changelog:
> * dlls/shell32/shell32_main.h
> * dlls/shell32/shell.c
> * dlls/shell32/shellreg.c
> * dlls/shell32/Makefile.in
> * dlls/shell32/shlexec.c
> Seperate out 16-bit funvtions into seperate file.
>
> nog.
>
> Index: dlls/shell32/shell.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/shell32/shell.c,v
> retrieving revision 1.46
> diff -u -r1.46 shell.c
> --- dlls/shell32/shell.c 10 Oct 2002 21:22:11 -0000 1.46
> +++ dlls/shell32/shell.c 12 Oct 2002 17:07:39 -0000
> @@ -2,6 +2,7 @@
> * Shell Library Functions
> *
> * Copyright 1998 Marcus Meissner
> + * Copyright 2000 Juergen Schmied
> * Copyright 2002 Eric Pouech
> *
> * This library is free software; you can redistribute it and/or
> @@ -526,4 +527,115 @@
> break;
> }
> return ret;
> +}
> +
> +
> +/* 0 and 1 are valid rootkeys in win16 shell.dll and are used by
> + * some programs. Do not remove those cases. -MM
> + */
> +static inline void fix_win16_hkey( HKEY *hkey )
> +{
> + if (*hkey == 0 || *hkey == (HKEY)1) *hkey = HKEY_CLASSES_ROOT;
> +}
> +
> +/******************************************************************************
> + * RegOpenKey [SHELL.1]
> + */
> +DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, PHKEY retkey )
> +{
> + fix_win16_hkey( &hkey );
> + return RegOpenKeyA( hkey, name, retkey );
> +}
> +
> +/******************************************************************************
> + * RegCreateKey [SHELL.2]
> + */
> +DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, PHKEY retkey )
> +{
> + fix_win16_hkey( &hkey );
> + return RegCreateKeyA( hkey, name, retkey );
> +}
> +
> +/******************************************************************************
> + * RegCloseKey [SHELL.3]
> + */
> +DWORD WINAPI RegCloseKey16( HKEY hkey )
> +{
> + fix_win16_hkey( &hkey );
> + return RegCloseKey( hkey );
> +}
> +
> +/******************************************************************************
> + * RegDeleteKey [SHELL.4]
> + */
> +DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name )
> +{
> + fix_win16_hkey( &hkey );
> + return RegDeleteKeyA( hkey, name );
> +}
> +
> +/******************************************************************************
> + * RegSetValue [SHELL.5]
> + */
> +DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count )
> +{
> + fix_win16_hkey( &hkey );
> + return RegSetValueA( hkey, name, type, data, count );
> +}
> +
> +/******************************************************************************
> + * RegQueryValue [SHELL.6]
> + *
> + * NOTES
> + * Is this HACK still applicable?
> + *
> + * HACK
> + * The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just
> + * mask out the high 16 bit. This (not so much incidently) hopefully fixes
> + * Aldus FH4)
> + */
> +DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count
> +)
> +{
> + fix_win16_hkey( &hkey );
> + if (count) *count &= 0xffff;
> + return RegQueryValueA( hkey, name, data, count );
> +}
> +
> +/******************************************************************************
> + * RegEnumKey [SHELL.7]
> + */
> +DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len )
> +{
> + fix_win16_hkey( &hkey );
> + return RegEnumKeyA( hkey, index, name, name_len );
> +}
> +
> +
> +/*************************************************************************
> + * ShellExecute [SHELL.20]
> + */
> +HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
> + LPCSTR lpFile, LPCSTR lpParameters,
> + LPCSTR lpDirectory, INT16 iShowCmd )
> +{
> + SHELLEXECUTEINFOA sei;
> + HANDLE hProcess = 0;
> +
> + sei.cbSize = sizeof(sei);
> + sei.fMask = 0;
> + sei.hwnd = HWND_32(hWnd);
> + sei.lpVerb = lpOperation;
> + sei.lpFile = lpFile;
> + sei.lpParameters = lpParameters;
> + sei.lpDirectory = lpDirectory;
> + sei.nShow = iShowCmd;
> + sei.lpIDList = 0;
> + sei.lpClass = 0;
> + sei.hkeyClass = 0;
> + sei.dwHotKey = 0;
> + sei.hProcess = hProcess;
> +
> + ShellExecuteExA32 (&sei, FALSE);
> + return (HINSTANCE16)sei.hInstApp;
> }
> Index: dlls/shell32/Makefile.in
> ===================================================================
> RCS file: /home/wine/wine/dlls/shell32/Makefile.in,v
> retrieving revision 1.53
> diff -u -r1.53 Makefile.in
> --- dlls/shell32/Makefile.in 27 Aug 2002 01:34:34 -0000 1.53
> +++ dlls/shell32/Makefile.in 12 Oct 2002 17:07:42 -0000
> @@ -27,7 +27,6 @@
> iconcache.c \
> memorystream.c \
> pidl.c \
> - shell.c \
> shell32_main.c \
> shelllink.c \
> shellole.c \
> @@ -50,6 +49,7 @@
>
> RC_SRCS= shres.rc
> RC_SRCS16 = version16.rc
> +C_SRCS16 = shell.c
>
> SUBDIRS = tests
>
> Index: dlls/shell32/shell32_main.h
> ===================================================================
> RCS file: /home/wine/wine/dlls/shell32/shell32_main.h,v
> retrieving revision 1.53
> diff -u -r1.53 shell32_main.h
> --- dlls/shell32/shell32_main.h 10 Oct 2002 21:22:11 -0000 1.53
> +++ dlls/shell32/shell32_main.h 12 Oct 2002 17:07:48 -0000
> @@ -202,4 +202,7 @@
> #define HINSTANCE_32(h16) ((HINSTANCE)(ULONG_PTR)(h16))
> #define HWND_32(h16) ((HWND)(ULONG_PTR)(h16))
>
> +/* needed by 16-bit shell code in shell.c */
> +BOOL WINAPI ShellExecuteExA32 (LPSHELLEXECUTEINFOA sei, BOOL is32);
> +
> #endif
> Index: dlls/shell32/shellreg.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/shell32/shellreg.c,v
> retrieving revision 1.14
> diff -u -r1.14 shellreg.c
> --- dlls/shell32/shellreg.c 3 Oct 2002 19:46:27 -0000 1.14
> +++ dlls/shell32/shellreg.c 12 Oct 2002 17:07:52 -0000
> @@ -147,86 +147,3 @@
> TRACE("0x%04x\n",hkey);
> return RegCloseKey( hkey );
> }
> -
> -
> -/* 16-bit functions */
> -
> -/* 0 and 1 are valid rootkeys in win16 shell.dll and are used by
> - * some programs. Do not remove those cases. -MM
> - */
> -static inline void fix_win16_hkey( HKEY *hkey )
> -{
> - if (*hkey == 0 || *hkey == (HKEY)1) *hkey = HKEY_CLASSES_ROOT;
> -}
> -
> -/******************************************************************************
> - * RegOpenKey [SHELL.1]
> - */
> -DWORD WINAPI RegOpenKey16( HKEY hkey, LPCSTR name, PHKEY retkey )
> -{
> - fix_win16_hkey( &hkey );
> - return RegOpenKeyA( hkey, name, retkey );
> -}
> -
> -/******************************************************************************
> - * RegCreateKey [SHELL.2]
> - */
> -DWORD WINAPI RegCreateKey16( HKEY hkey, LPCSTR name, PHKEY retkey )
> -{
> - fix_win16_hkey( &hkey );
> - return RegCreateKeyA( hkey, name, retkey );
> -}
> -
> -/******************************************************************************
> - * RegCloseKey [SHELL.3]
> - */
> -DWORD WINAPI RegCloseKey16( HKEY hkey )
> -{
> - fix_win16_hkey( &hkey );
> - return RegCloseKey( hkey );
> -}
> -
> -/******************************************************************************
> - * RegDeleteKey [SHELL.4]
> - */
> -DWORD WINAPI RegDeleteKey16( HKEY hkey, LPCSTR name )
> -{
> - fix_win16_hkey( &hkey );
> - return RegDeleteKeyA( hkey, name );
> -}
> -
> -/******************************************************************************
> - * RegSetValue [SHELL.5]
> - */
> -DWORD WINAPI RegSetValue16( HKEY hkey, LPCSTR name, DWORD type, LPCSTR data, DWORD count )
> -{
> - fix_win16_hkey( &hkey );
> - return RegSetValueA( hkey, name, type, data, count );
> -}
> -
> -/******************************************************************************
> - * RegQueryValue [SHELL.6]
> - *
> - * NOTES
> - * Is this HACK still applicable?
> - *
> - * HACK
> - * The 16bit RegQueryValue doesn't handle selectorblocks anyway, so we just
> - * mask out the high 16 bit. This (not so much incidently) hopefully fixes
> - * Aldus FH4)
> - */
> -DWORD WINAPI RegQueryValue16( HKEY hkey, LPCSTR name, LPSTR data, LPDWORD count )
> -{
> - fix_win16_hkey( &hkey );
> - if (count) *count &= 0xffff;
> - return RegQueryValueA( hkey, name, data, count );
> -}
> -
> -/******************************************************************************
> - * RegEnumKey [SHELL.7]
> - */
> -DWORD WINAPI RegEnumKey16( HKEY hkey, DWORD index, LPSTR name, DWORD name_len )
> -{
> - fix_win16_hkey( &hkey );
> - return RegEnumKeyA( hkey, index, name, name_len );
> -}
> Index: dlls/shell32/shlexec.c
> ===================================================================
> RCS file: /home/wine/wine/dlls/shell32/shlexec.c,v
> retrieving revision 1.8
> diff -u -r1.8 shlexec.c
> --- dlls/shell32/shlexec.c 16 Sep 2002 19:27:51 -0000 1.8
> +++ dlls/shell32/shlexec.c 12 Oct 2002 17:07:59 -0000
> @@ -673,35 +673,6 @@
> return TRUE;
> }
>
> -
> -/*************************************************************************
> - * ShellExecute [SHELL.20]
> - */
> -HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
> - LPCSTR lpFile, LPCSTR lpParameters,
> - LPCSTR lpDirectory, INT16 iShowCmd )
> -{
> - SHELLEXECUTEINFOA sei;
> - HANDLE hProcess = 0;
> -
> - sei.cbSize = sizeof(sei);
> - sei.fMask = 0;
> - sei.hwnd = HWND_32(hWnd);
> - sei.lpVerb = lpOperation;
> - sei.lpFile = lpFile;
> - sei.lpParameters = lpParameters;
> - sei.lpDirectory = lpDirectory;
> - sei.nShow = iShowCmd;
> - sei.lpIDList = 0;
> - sei.lpClass = 0;
> - sei.hkeyClass = 0;
> - sei.dwHotKey = 0;
> - sei.hProcess = hProcess;
> -
> - ShellExecuteExA32 (&sei, FALSE);
> - return (HINSTANCE16)sei.hInstApp;
> -}
> -
> /*************************************************************************
> * ShellExecuteA [SHELL32.290]
> */
>
--
Michael Stefaniuc Tel.: +49-711-96437-199
System Administration Fax.: +49-711-96437-111
Red Hat GmbH Email: mstefani at redhat.com
Hauptstaetterstr. 58 http://www.redhat.de/
D-70178 Stuttgart
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 232 bytes
Desc: not available
Url : http://www.winehq.org/pipermail/wine-devel/attachments/20021013/15803bde/attachment.pgp
More information about the wine-devel
mailing list