Tag Wine-0_9_5, remove old tag Deleted: vendor/wine/dlls/avifil32/Wine-0_9_4/ Added: vendor/wine/dlls/avifil32/Wine-0_9_5/ Deleted: vendor/wine/dlls/cabinet/Wine-0_9_4/ Added: vendor/wine/dlls/cabinet/Wine-0_9_5/ Deleted: vendor/wine/dlls/comctl32/Wine-0_9_4/ Added: vendor/wine/dlls/comctl32/Wine-0_9_5/ Deleted: vendor/wine/dlls/comctl32/Wine-0_9_5/comctl32undoc.c Added: vendor/wine/dlls/comctl32/Wine-0_9_5/comctl32undoc.c Deleted: vendor/wine/dlls/comctl32/Wine-0_9_5/ipaddress.c Added: vendor/wine/dlls/comctl32/Wine-0_9_5/ipaddress.c Deleted: vendor/wine/dlls/comctl32/Wine-0_9_5/listview.c Added: vendor/wine/dlls/comctl32/Wine-0_9_5/listview.c Deleted: vendor/wine/dlls/comctl32/Wine-0_9_5/propsheet.c Added: vendor/wine/dlls/comctl32/Wine-0_9_5/propsheet.c Deleted: vendor/wine/dlls/commdlg/Wine-0_9_4/ Added: vendor/wine/dlls/commdlg/Wine-0_9_5/ Deleted: vendor/wine/dlls/commdlg/Wine-0_9_5/colordlg.c Added: vendor/wine/dlls/commdlg/Wine-0_9_5/colordlg.c Deleted: vendor/wine/dlls/crypt32/Wine-0_9_4/ Added: vendor/wine/dlls/crypt32/Wine-0_9_5/ Deleted: vendor/wine/dlls/dinput/Wine-0_9_4/ Added: vendor/wine/dlls/dinput/Wine-0_9_5/ Deleted: vendor/wine/dlls/dinput8/Wine-0_9_4/ Added: vendor/wine/dlls/dinput8/Wine-0_9_5/ Deleted: vendor/wine/dlls/dplay/Wine-0_9_4/ Added: vendor/wine/dlls/dplay/Wine-0_9_5/ Deleted: vendor/wine/dlls/dplayx/Wine-0_9_4/ Added: vendor/wine/dlls/dplayx/Wine-0_9_5/ Deleted: vendor/wine/dlls/dsound/Wine-0_9_4/ Added: vendor/wine/dlls/dsound/Wine-0_9_5/ Deleted: vendor/wine/dlls/dsound/Wine-0_9_5/buffer.c Added: vendor/wine/dlls/dsound/Wine-0_9_5/buffer.c Deleted: vendor/wine/dlls/dsound/Wine-0_9_5/capture.c Added: vendor/wine/dlls/dsound/Wine-0_9_5/capture.c Deleted: vendor/wine/dlls/dsound/Wine-0_9_5/dsound.c Added: vendor/wine/dlls/dsound/Wine-0_9_5/dsound.c Deleted: vendor/wine/dlls/dsound/Wine-0_9_5/dsound_private.h Added: vendor/wine/dlls/dsound/Wine-0_9_5/dsound_private.h Deleted: vendor/wine/dlls/dsound/Wine-0_9_5/primary.c Added: vendor/wine/dlls/dsound/Wine-0_9_5/primary.c Deleted: vendor/wine/dlls/dsound/Wine-0_9_5/propset.c Added: vendor/wine/dlls/dsound/Wine-0_9_5/propset.c Deleted: vendor/wine/dlls/dsound/Wine-0_9_5/sound3d.c Added: vendor/wine/dlls/dsound/Wine-0_9_5/sound3d.c Deleted: vendor/wine/dlls/dxdiagn/Wine-0_9_4/ Added: vendor/wine/dlls/dxdiagn/Wine-0_9_5/ Deleted: vendor/wine/dlls/icmp/Wine-0_9_4/ Added: vendor/wine/dlls/icmp/Wine-0_9_5/ Deleted: vendor/wine/dlls/imm32/Wine-0_9_4/ Added: vendor/wine/dlls/imm32/Wine-0_9_5/ Deleted: vendor/wine/dlls/midimap/Wine-0_9_4/ Added: vendor/wine/dlls/midimap/Wine-0_9_5/ Deleted: vendor/wine/dlls/mpr/Wine-0_9_4/ Added: vendor/wine/dlls/mpr/Wine-0_9_5/ Deleted: vendor/wine/dlls/msi/Wine-0_9_4/ Added: vendor/wine/dlls/msi/Wine-0_9_5/ Deleted: vendor/wine/dlls/msi/Wine-0_9_5/action.c Added: vendor/wine/dlls/msi/Wine-0_9_5/action.c Deleted: vendor/wine/dlls/msi/Wine-0_9_5/custom.c Added: vendor/wine/dlls/msi/Wine-0_9_5/custom.c Deleted: vendor/wine/dlls/msi/Wine-0_9_5/dialog.c Added: vendor/wine/dlls/msi/Wine-0_9_5/dialog.c Deleted: vendor/wine/dlls/msi/Wine-0_9_5/events.c Added: vendor/wine/dlls/msi/Wine-0_9_5/events.c Deleted: vendor/wine/dlls/msi/Wine-0_9_5/install.c Added: vendor/wine/dlls/msi/Wine-0_9_5/install.c Deleted: vendor/wine/dlls/msi/Wine-0_9_5/msi.c Added: vendor/wine/dlls/msi/Wine-0_9_5/msi.c Deleted: vendor/wine/dlls/msi/Wine-0_9_5/msi.spec Added: vendor/wine/dlls/msi/Wine-0_9_5/msi.spec Deleted: vendor/wine/dlls/msi/Wine-0_9_5/msipriv.h Added: vendor/wine/dlls/msi/Wine-0_9_5/msipriv.h Deleted: vendor/wine/dlls/msi/Wine-0_9_5/msiquery.c Added: vendor/wine/dlls/msi/Wine-0_9_5/msiquery.c Deleted: vendor/wine/dlls/msi/Wine-0_9_5/package.c Added: vendor/wine/dlls/msi/Wine-0_9_5/package.c Deleted: vendor/wine/dlls/msimg32/Wine-0_9_4/ Added: vendor/wine/dlls/msimg32/Wine-0_9_5/ Deleted: vendor/wine/dlls/netapi32/Wine-0_9_4/ Added: vendor/wine/dlls/netapi32/Wine-0_9_5/ Deleted: vendor/wine/dlls/objsel/Wine-0_9_4/ Added: vendor/wine/dlls/objsel/Wine-0_9_5/ Deleted: vendor/wine/dlls/ole32/Wine-0_9_4/ Added: vendor/wine/dlls/ole32/Wine-0_9_5/ Deleted: vendor/wine/dlls/ole32/Wine-0_9_5/hglobalstream.c Added: vendor/wine/dlls/ole32/Wine-0_9_5/hglobalstream.c Deleted: vendor/wine/dlls/ole32/Wine-0_9_5/stg_stream.c Added: vendor/wine/dlls/ole32/Wine-0_9_5/stg_stream.c Deleted: vendor/wine/dlls/oleacc/Wine-0_9_4/ Added: vendor/wine/dlls/oleacc/Wine-0_9_5/ Deleted: vendor/wine/dlls/oleaut32/Wine-0_9_4/ Added: vendor/wine/dlls/oleaut32/Wine-0_9_5/ Deleted: vendor/wine/dlls/oleaut32/Wine-0_9_5/typelib.c Added: vendor/wine/dlls/oleaut32/Wine-0_9_5/typelib.c Deleted: vendor/wine/dlls/oledlg/Wine-0_9_4/ Added: vendor/wine/dlls/oledlg/Wine-0_9_5/ Deleted: vendor/wine/dlls/olepro32/Wine-0_9_4/ Added: vendor/wine/dlls/olepro32/Wine-0_9_5/ Deleted: vendor/wine/dlls/riched20/Wine-0_9_4/ Added: vendor/wine/dlls/riched20/Wine-0_9_5/ [truncated at 100 lines; 88 more skipped] _____
Copied: vendor/wine/dlls/avifil32/Wine-0_9_5 (from rev 20612, vendor/wine/dlls/avifil32/current) _____
Copied: vendor/wine/dlls/cabinet/Wine-0_9_5 (from rev 20612, vendor/wine/dlls/cabinet/current) _____
Copied: vendor/wine/dlls/comctl32/Wine-0_9_5 (from rev 20612, vendor/wine/dlls/comctl32/current) _____
Deleted: vendor/wine/dlls/comctl32/Wine-0_9_5/comctl32undoc.c --- vendor/wine/dlls/comctl32/current/comctl32undoc.c 2006-01-06 15:42:12 UTC (rev 20612) +++ vendor/wine/dlls/comctl32/Wine-0_9_5/comctl32undoc.c 2006-01-06 20:49:27 UTC (rev 20629) @@ -1,1245 +0,0 @@
-/* - * Undocumented functions from COMCTL32.DLL - * - * Copyright 1998 Eric Kohl - * 1998 Juergen Schmied j.schmied@metronet.de - * 2000 Eric Kohl for CodeWeavers - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * NOTES - * All of these functions are UNDOCUMENTED!! And I mean UNDOCUMENTED!!!! - * Do NOT rely on names or contents of undocumented structures and types!!! - * These functions are used by EXPLORER.EXE, IEXPLORE.EXE and - * COMCTL32.DLL (internally). - * - */ -#include "config.h" -#include "wine/port.h" - -#include <stdarg.h> -#include <string.h> -#include <ctype.h> -#include <limits.h> - -#define COBJMACROS -#define NONAMELESSUNION -#define NONAMELESSSTRUCT - -#include "windef.h" -#include "winbase.h" -#include "wingdi.h" -#include "winuser.h" -#include "winnls.h" -#include "winreg.h" -#include "commctrl.h" -#include "objbase.h" -#include "winerror.h" - -#include "wine/unicode.h" -#include "comctl32.h" - -#include "wine/debug.h" - -WINE_DEFAULT_DEBUG_CHANNEL(commctrl); - -static const WCHAR strMRUList[] = { 'M','R','U','L','i','s','t',0 }; - -/********************************************************************** **** - * Alloc [COMCTL32.71] - * - * Allocates memory block from the dll's private heap - * - * PARAMS - * dwSize [I] size of the allocated memory block - * - * RETURNS - * Success: pointer to allocated memory block - * Failure: NULL - */ -LPVOID WINAPI Alloc (DWORD dwSize) -{ - return LocalAlloc( LMEM_ZEROINIT, dwSize ); -} - - -/********************************************************************** **** - * ReAlloc [COMCTL32.72] - * - * Changes the size of an allocated memory block or allocates a memory - * block using the dll's private heap. - * - * PARAMS - * lpSrc [I] pointer to memory block which will be resized - * dwSize [I] new size of the memory block. - * - * RETURNS - * Success: pointer to the resized memory block - * Failure: NULL - * - * NOTES - * If lpSrc is a NULL-pointer, then ReAlloc allocates a memory - * block like Alloc. - */ -LPVOID WINAPI ReAlloc (LPVOID lpSrc, DWORD dwSize) -{ - if (lpSrc) - return LocalReAlloc( lpSrc, dwSize, LMEM_ZEROINIT ); - else - return LocalAlloc( LMEM_ZEROINIT, dwSize); -} - - -/********************************************************************** **** - * Free [COMCTL32.73] - * - * Frees an allocated memory block from the dll's private heap. - * - * PARAMS - * lpMem [I] pointer to memory block which will be freed - * - * RETURNS - * Success: TRUE - * Failure: FALSE - */ -BOOL WINAPI Free (LPVOID lpMem) -{ - return !LocalFree( lpMem ); -} - - -/********************************************************************** **** - * GetSize [COMCTL32.74] - * - * Retrieves the size of the specified memory block from the dll's - * private heap. - * - * PARAMS - * lpMem [I] pointer to an allocated memory block - * - * RETURNS - * Success: size of the specified memory block - * Failure: 0 - */ -DWORD WINAPI GetSize (LPVOID lpMem) -{ - return LocalSize( lpMem ); -} - - -/********************************************************************** **** - * MRU-Functions {COMCTL32} - * - * NOTES - * The MRU-Api is a set of functions to manipulate lists of M.R.U. (Most Recently - * Used) items. It is an undocumented Api that is used (at least) by the shell - * and explorer to implement their recent documents feature. - * - * Since these functions are undocumented, they are unsupported by MS and - * may change at any time. - * - * Internally, the list is implemented as a last in, last out list of items - * persisted into the system registry under a caller chosen key. Each list - * item is given a one character identifier in the Ascii range from 'a' to - * '}'. A list of the identifiers in order from newest to oldest is stored - * under the same key in a value named "MRUList". - * - * Items are re-ordered by changing the order of the values in the MRUList - * value. When a new item is added, it becomes the new value of the oldest - * identifier, and that identifier is moved to the front of the MRUList value. - * - * Wine stores MRU-lists in the same registry format as Windows, so when - * switching between the builtin and native comctl32.dll no problems or - * incompatibilities should occur. - * - * The following undocumented structure is used to create an MRU-list: - *|typedef INT (CALLBACK *MRUStringCmpFn)(LPCTSTR lhs, LPCTSTR rhs); - *|typedef INT (CALLBACK *MRUBinaryCmpFn)(LPCVOID lhs, LPCVOID rhs, DWORD length); - *| - *|typedef struct tagCREATEMRULIST - *|{ - *| DWORD cbSize; - *| DWORD nMaxItems; - *| DWORD dwFlags; - *| HKEY hKey; - *| LPCTSTR lpszSubKey; - *| PROC lpfnCompare; - *|} CREATEMRULIST, *LPCREATEMRULIST; - * - * MEMBERS - * cbSize [I] The size of the CREATEMRULIST structure. This must be set - * to sizeof(CREATEMRULIST) by the caller. - * nMaxItems [I] The maximum number of items allowed in the list. Because - * of the limited number of identifiers, this should be set to - * a value from 1 to 30 by the caller. - * dwFlags [I] If bit 0 is set, the list will be used to store binary - * data, otherwise it is assumed to store strings. If bit 1 - * is set, every change made to the list will be reflected in - * the registry immediately, otherwise changes will only be - * written when the list is closed. - * hKey [I] The registry key that the list should be written under. - * This must be supplied by the caller. - * lpszSubKey [I] A caller supplied name of a subkey under hKey to write - * the list to. This may not be blank. - * lpfnCompare [I] A caller supplied comparison function, which may be either - * an MRUStringCmpFn if dwFlags does not have bit 0 set, or a - * MRUBinaryCmpFn otherwise. - * - * FUNCTIONS - * - Create an MRU-list with CreateMRUList() or CreateMRUListLazy(). - * - Add items to an MRU-list with AddMRUString() or AddMRUData(). - * - Remove items from an MRU-list with DelMRUString(). - * - Find data in an MRU-list with FindMRUString() or FindMRUData(). - * - Iterate through an MRU-list with EnumMRUList(). - * - Free an MRU-list with FreeMRUList(). - */ - -typedef struct tagCREATEMRULISTA -{ - DWORD cbSize; - DWORD nMaxItems; - DWORD dwFlags; - HKEY hKey; - LPCSTR lpszSubKey; - PROC lpfnCompare; -} CREATEMRULISTA, *LPCREATEMRULISTA; - -typedef struct tagCREATEMRULISTW -{ - DWORD cbSize; - DWORD nMaxItems; - DWORD dwFlags; - HKEY hKey; - LPCWSTR lpszSubKey; - PROC lpfnCompare; -} CREATEMRULISTW, *LPCREATEMRULISTW; - -/* dwFlags */ -#define MRUF_STRING_LIST 0 /* list will contain strings */ -#define MRUF_BINARY_LIST 1 /* list will contain binary data */ -#define MRUF_DELAYED_SAVE 2 /* only save list order to reg. is FreeMRUList */ - -/* If list is a string list lpfnCompare has the following prototype - * int CALLBACK MRUCompareString(LPCSTR s1, LPCSTR s2) - * for binary lists the prototype is - * int CALLBACK MRUCompareBinary(LPCVOID data1, LPCVOID data2, DWORD cbData) - * where cbData is the no. of bytes to compare. - * Need to check what return value means identical - 0? - */ - -typedef struct tagWINEMRUITEM -{ - DWORD size; /* size of data stored */ - DWORD itemFlag; /* flags */ - BYTE datastart; -} WINEMRUITEM, *LPWINEMRUITEM; - -/* itemFlag */ -#define WMRUIF_CHANGED 0x0001 /* this dataitem changed */ - -typedef struct tagWINEMRULIST -{ - CREATEMRULISTW extview; /* original create information */ - BOOL isUnicode; /* is compare fn Unicode */ - DWORD wineFlags; /* internal flags */ - DWORD cursize; /* current size of realMRU */ - LPWSTR realMRU; /* pointer to string of index names */ - LPWINEMRUITEM *array; /* array of pointers to data */ - /* in 'a' to 'z' order */ -} WINEMRULIST, *LPWINEMRULIST; - -/* wineFlags */ -#define WMRUF_CHANGED 0x0001 /* MRU list has changed */ - -/********************************************************************** **** - * MRU_SaveChanged (internal) - * - * Local MRU saving code - */ -static void MRU_SaveChanged ( LPWINEMRULIST mp ) -{ - UINT i, err; - HKEY newkey; - WCHAR realname[2]; - LPWINEMRUITEM witem; - - /* or should we do the following instead of RegOpenKeyEx: - */ - - /* open the sub key */ - if ((err = RegOpenKeyExW( mp->extview.hKey, mp->extview.lpszSubKey, - 0, KEY_WRITE, &newkey))) { - /* not present - what to do ??? */ - ERR("Could not open key, error=%d, attempting to create\n", - err); - if ((err = RegCreateKeyExW( mp->extview.hKey, mp->extview.lpszSubKey, - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_READ | KEY_WRITE, - 0, - &newkey, - 0))) { - ERR("failed to create key /%s/, err=%d\n", - debugstr_w(mp->extview.lpszSubKey), err); - return; - } - } - if (mp->wineFlags & WMRUF_CHANGED) { - mp->wineFlags &= ~WMRUF_CHANGED; - err = RegSetValueExW(newkey, strMRUList, 0, REG_SZ, (LPBYTE)mp->realMRU, - (strlenW(mp->realMRU) + 1)*sizeof(WCHAR)); - if (err) { - ERR("error saving MRUList, err=%d\n", err); - } - TRACE("saving MRUList=/%s/\n", debugstr_w(mp->realMRU)); - } - realname[1] = 0; - for(i=0; i<mp->cursize; i++) { - witem = mp->array[i]; - if (witem->itemFlag & WMRUIF_CHANGED) { - witem->itemFlag &= ~WMRUIF_CHANGED; - realname[0] = 'a' + i; - err = RegSetValueExW(newkey, realname, 0, - (mp->extview.dwFlags & MRUF_BINARY_LIST) ? - REG_BINARY : REG_SZ, - &witem->datastart, witem->size); - if (err) { - ERR("error saving /%s/, err=%d\n", debugstr_w(realname), err); - } - TRACE("saving value for name /%s/ size=%ld\n", - debugstr_w(realname), witem->size); - } - } - RegCloseKey( newkey ); -} - -/********************************************************************** **** - * FreeMRUList [COMCTL32.152] - * - * Frees a most-recently-used items list. - * - * PARAMS - * hMRUList [I] Handle to list. - * - * RETURNS - * Nothing. - */ -void WINAPI FreeMRUList (HANDLE hMRUList) -{ - LPWINEMRULIST mp = (LPWINEMRULIST)hMRUList; - UINT i; - - TRACE("(%p)\n", hMRUList); - if (!hMRUList) - return; - - if (mp->wineFlags & WMRUF_CHANGED) { - /* need to open key and then save the info */ - MRU_SaveChanged( mp ); - } - - for(i=0; i<mp->extview.nMaxItems; i++) { - if (mp->array[i]) - Free(mp->array[i]); - } - Free(mp->realMRU); - Free(mp->array); - Free((LPWSTR)mp->extview.lpszSubKey); - Free(mp); -} - - -/********************************************************************** **** - * FindMRUData [COMCTL32.169] - * - * Searches binary list for item that matches lpData of length cbData. - * Returns position in list order 0 -> MRU and if lpRegNum != NULL then value - * corresponding to item's reg. name will be stored in it ('a' -> 0). - * - * PARAMS - * hList [I] list handle - * lpData [I] data to find - * cbData [I] length of data - * lpRegNum [O] position in registry (maybe NULL) - * - * RETURNS - * Position in list 0 -> MRU. -1 if item not found. - */ -INT WINAPI FindMRUData (HANDLE hList, LPCVOID lpData, DWORD cbData, - LPINT lpRegNum) -{ - LPWINEMRULIST mp = (LPWINEMRULIST)hList; - INT ret; - UINT i; - LPSTR dataA = NULL; - - if (!mp->extview.lpfnCompare) { - ERR("MRU list not properly created. No compare procedure.\n"); - return -1; - } - - if(!(mp->extview.dwFlags & MRUF_BINARY_LIST) && !mp->isUnicode) { - DWORD len = WideCharToMultiByte(CP_ACP, 0, lpData, -1, - NULL, 0, NULL, NULL); - dataA = Alloc(len); - WideCharToMultiByte(CP_ACP, 0, lpData, -1, dataA, len, NULL, NULL); - } - - for(i=0; i<mp->cursize; i++) { - if (mp->extview.dwFlags & MRUF_BINARY_LIST) { - if (!mp->extview.lpfnCompare(lpData, &mp->array[i]->datastart, - cbData)) - break; - } - else { - if(mp->isUnicode) { - if (!mp->extview.lpfnCompare(lpData, &mp->array[i]->datastart)) - break; - } else { - DWORD len = WideCharToMultiByte(CP_ACP, 0, - (LPWSTR)&mp->array[i]->datastart, -1, - NULL, 0, NULL, NULL); - LPSTR itemA = Alloc(len); - INT cmp; - WideCharToMultiByte(CP_ACP, 0, (LPWSTR)&mp->array[i]->datastart, -1, - itemA, len, NULL, NULL); - - cmp = mp->extview.lpfnCompare(dataA, itemA); - Free(itemA); - if(!cmp) - break; - } - } - } - if(dataA) - Free(dataA); - if (i < mp->cursize) - ret = i; - else - ret = -1; - if (lpRegNum && (ret != -1)) - *lpRegNum = 'a' + i; - - TRACE("(%p, %p, %ld, %p) returning %d\n", - hList, lpData, cbData, lpRegNum, ret); - - return ret; -} - - -/********************************************************************** **** - * AddMRUData [COMCTL32.167] - * - * Add item to MRU binary list. If item already exists in list then it is - * simply moved up to the top of the list and not added again. If list is - * full then the least recently used item is removed to make room. - * - * PARAMS - * hList [I] Handle to list. - * lpData [I] ptr to data to add. - * cbData [I] no. of bytes of data. - * - * RETURNS - * No. corresponding to registry name where value is stored 'a' -> 0 etc. - * -1 on error. - */ -INT WINAPI AddMRUData (HANDLE hList, LPCVOID lpData, DWORD cbData) -{ - LPWINEMRULIST mp = (LPWINEMRULIST)hList; - LPWINEMRUITEM witem; - INT i, replace; - - if ((replace = FindMRUData (hList, lpData, cbData, NULL)) >= 0) { - /* Item exists, just move it to the front */ - LPWSTR pos = strchrW(mp->realMRU, replace + 'a'); - while (pos > mp->realMRU) - { - pos[0] = pos[-1]; - pos--; - } - } - else { - /* either add a new entry or replace oldest */ - if (mp->cursize < mp->extview.nMaxItems) { - /* Add in a new item */ - replace = mp->cursize; - mp->cursize++; - } - else { - /* get the oldest entry and replace data */ - replace = mp->realMRU[mp->cursize - 1] - 'a'; - Free(mp->array[replace]); - } - - /* Allocate space for new item and move in the data */ - mp->array[replace] = witem = Alloc(cbData + sizeof(WINEMRUITEM)); - witem->itemFlag |= WMRUIF_CHANGED; - witem->size = cbData; - memcpy( &witem->datastart, lpData, cbData); - - /* now rotate MRU list */ - for(i=mp->cursize-1; i>=1; i--) - mp->realMRU[i] = mp->realMRU[i-1]; - } - - /* The new item gets the front spot */ - mp->wineFlags |= WMRUF_CHANGED; - mp->realMRU[0] = replace + 'a'; - - TRACE("(%p, %p, %ld) adding data, /%c/ now most current\n", - hList, lpData, cbData, replace+'a'); - - if (!(mp->extview.dwFlags & MRUF_DELAYED_SAVE)) { - /* save changed stuff right now */ - MRU_SaveChanged( mp ); - } - - return replace; -} - -/********************************************************************** **** - * AddMRUStringW [COMCTL32.401] - * - * Add an item to an MRU string list. - * - * PARAMS - * hList [I] Handle to list. - * lpszString [I] The string to add. - * - * RETURNS - * Success: The number corresponding to the registry name where the string - * has been stored (0 maps to 'a', 1 to 'b' and so on). - * Failure: -1, if hList is NULL or memory allocation fails. If lpszString - * is invalid, the function returns 0, and GetLastError() returns - * ERROR_INVALID_PARAMETER. The last error value is set only in - * this case. - * - * NOTES - * -If lpszString exists in the list already, it is moved to the top of the - * MRU list (it is not duplicated). - * -If the list is full the least recently used list entry is replaced with - * lpszString. - * -If this function returns 0 you should check the last error value to - * ensure the call really succeeded. - */ -INT WINAPI AddMRUStringW(HANDLE hList, LPCWSTR lpszString) -{ - TRACE("(%p,%s)\n", hList, debugstr_w(lpszString)); - - if (!hList) - return -1; - - if (!lpszString || IsBadStringPtrW(lpszString, -1)) - { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - - return AddMRUData(hList, lpszString, - (strlenW(lpszString) + 1) * sizeof(WCHAR)); -} - -/********************************************************************** **** - * AddMRUStringA [COMCTL32.153] - * - * See AddMRUStringW. - */ -INT WINAPI AddMRUStringA(HANDLE hList, LPCSTR lpszString) -{ - DWORD len; - LPWSTR stringW; - INT ret; - - TRACE("(%p,%s)\n", hList, debugstr_a(lpszString)); - - if (!hList) - return -1; - - if (IsBadStringPtrA(lpszString, -1)) - { - SetLastError(ERROR_INVALID_PARAMETER); - return 0; - } - - len = MultiByteToWideChar(CP_ACP, 0, lpszString, -1, NULL, 0) * sizeof(WCHAR); - stringW = Alloc(len); - if (!stringW) - return -1; - - MultiByteToWideChar(CP_ACP, 0, lpszString, -1, stringW, len/sizeof(WCHAR)); - ret = AddMRUData(hList, stringW, len); - Free(stringW); - return ret; -} - -/********************************************************************** **** - * DelMRUString [COMCTL32.156] - * - * Removes item from either string or binary list (despite its name) - * - * PARAMS - * hList [I] list handle - * nItemPos [I] item position to remove 0 -> MRU - * - * RETURNS - * TRUE if successful, FALSE if nItemPos is out of range. - */ -BOOL WINAPI DelMRUString(HANDLE hList, INT nItemPos) -{ - FIXME("(%p, %d): stub\n", hList, nItemPos); - return TRUE; -} - -/********************************************************************** **** - * FindMRUStringW [COMCTL32.402] - * - * See FindMRUStringA. - */ -INT WINAPI FindMRUStringW (HANDLE hList, LPCWSTR lpszString, LPINT lpRegNum) -{ - return FindMRUData(hList, lpszString, - (lstrlenW(lpszString) + 1) * sizeof(WCHAR), lpRegNum); -} - -/********************************************************************** **** - * FindMRUStringA [COMCTL32.155] - * - * Searches string list for item that matches lpszString. - * Returns position in list order 0 -> MRU and if lpRegNum != NULL then value - * corresponding to item's reg. name will be stored in it ('a' -> 0). - * - * PARAMS - * hList [I] list handle - * lpszString [I] string to find - * lpRegNum [O] position in registry (maybe NULL) - * - * RETURNS - * Position in list 0 -> MRU. -1 if item not found. - */ -INT WINAPI FindMRUStringA (HANDLE hList, LPCSTR lpszString, LPINT lpRegNum) -{ - DWORD len = MultiByteToWideChar(CP_ACP, 0, lpszString, -1, NULL, 0); - LPWSTR stringW = Alloc(len * sizeof(WCHAR)); - INT ret; - - MultiByteToWideChar(CP_ACP, 0, lpszString, -1, stringW, len); - ret = FindMRUData(hList, stringW, len * sizeof(WCHAR), lpRegNum); - Free(stringW); - return ret; -} - -/********************************************************************** *** - * CreateMRUListLazy_common (internal) - */ -static HANDLE CreateMRUListLazy_common(LPWINEMRULIST mp) -{ - UINT i, err; - HKEY newkey; - DWORD datasize, dwdisp; - WCHAR realname[2]; - LPWINEMRUITEM witem; - DWORD type; - - /* get space to save indices that will turn into names - * but in order of most to least recently used - */ - mp->realMRU = Alloc((mp->extview.nMaxItems + 2) * sizeof(WCHAR)); - - /* get space to save pointers to actual data in order of - * 'a' to 'z' (0 to n). - */ - mp->array = Alloc(mp->extview.nMaxItems * sizeof(LPVOID)); - - /* open the sub key */ - if ((err = RegCreateKeyExW( mp->extview.hKey, mp->extview.lpszSubKey, - 0, - NULL, - REG_OPTION_NON_VOLATILE, - KEY_READ | KEY_WRITE, - 0, - &newkey, - &dwdisp))) { - /* error - what to do ??? */ - ERR("(%lu %lu %lx %p %s %p): Could not open key, error=%d\n", - mp->extview.cbSize, mp->extview.nMaxItems, mp->extview.dwFlags, - mp->extview.hKey, debugstr_w(mp->extview.lpszSubKey), - mp->extview.lpfnCompare, err); - return 0; - } - - /* get values from key 'MRUList' */ - if (newkey) { - datasize = (mp->extview.nMaxItems + 1) * sizeof(WCHAR); - if((err=RegQueryValueExW( newkey, strMRUList, 0, &type, - (LPBYTE)mp->realMRU, &datasize))) { - /* not present - set size to 1 (will become 0 later) */ - datasize = 1; - *mp->realMRU = 0; - } - else - datasize /= sizeof(WCHAR); - - TRACE("MRU list = %s, datasize = %ld\n", debugstr_w(mp->realMRU), datasize); - - mp->cursize = datasize - 1; - /* datasize now has number of items in the MRUList */ - - /* get actual values for each entry */ - realname[1] = 0; - for(i=0; i<mp->cursize; i++) { - realname[0] = 'a' + i; - if(RegQueryValueExW( newkey, realname, 0, &type, 0, &datasize)) { - /* not present - what to do ??? */ - ERR("Key %s not found 1\n", debugstr_w(realname)); - } - mp->array[i] = witem = Alloc(datasize + sizeof(WINEMRUITEM)); - witem->size = datasize; - if(RegQueryValueExW( newkey, realname, 0, &type, - &witem->datastart, &datasize)) { - /* not present - what to do ??? */ - ERR("Key %s not found 2\n", debugstr_w(realname)); - } - } - RegCloseKey( newkey ); - } - else - mp->cursize = 0; - - TRACE("(%lu %lu %lx %p %s %p): Current Size = %ld\n", - mp->extview.cbSize, mp->extview.nMaxItems, mp->extview.dwFlags, - mp->extview.hKey, debugstr_w(mp->extview.lpszSubKey), - mp->extview.lpfnCompare, mp->cursize); - return (HANDLE)mp; -} - -/********************************************************************** **** - * CreateMRUListLazyW [COMCTL32.404] - * - * See CreateMRUListLazyA. - */ -HANDLE WINAPI CreateMRUListLazyW (LPCREATEMRULISTW lpcml, DWORD dwParam2, - DWORD dwParam3, DWORD dwParam4) -{ - LPWINEMRULIST mp; - - /* Native does not check for a NULL lpcml */ - - if (lpcml->cbSize != sizeof(CREATEMRULISTW) || !lpcml->hKey || - IsBadStringPtrW(lpcml->lpszSubKey, -1)) - return NULL; - - mp = Alloc(sizeof(WINEMRULIST)); - memcpy(&mp->extview, lpcml, sizeof(CREATEMRULISTW)); - mp->extview.lpszSubKey = Alloc((strlenW(lpcml->lpszSubKey) + 1) * sizeof(WCHAR)); - strcpyW((LPWSTR)mp->extview.lpszSubKey, lpcml->lpszSubKey); - mp->isUnicode = TRUE; - - return CreateMRUListLazy_common(mp); -} - -/********************************************************************** **** - * CreateMRUListLazyA [COMCTL32.157] - * - * Creates a most-recently-used list. - * - * PARAMS - * lpcml [I] ptr to CREATEMRULIST structure. - * dwParam2 [I] Unknown - * dwParam3 [I] Unknown - * dwParam4 [I] Unknown - * - * RETURNS - * Handle to MRU list. - */ -HANDLE WINAPI CreateMRUListLazyA (LPCREATEMRULISTA lpcml, DWORD dwParam2, - DWORD dwParam3, DWORD dwParam4) -{ - LPWINEMRULIST mp; - DWORD len; - - /* Native does not check for a NULL lpcml */ - - if (lpcml->cbSize != sizeof(CREATEMRULISTA) || !lpcml->hKey || - IsBadStringPtrA(lpcml->lpszSubKey, -1)) - return 0; - - mp = Alloc(sizeof(WINEMRULIST)); - memcpy(&mp->extview, lpcml, sizeof(CREATEMRULISTW)); - len = MultiByteToWideChar(CP_ACP, 0, lpcml->lpszSubKey, -1, NULL, 0); - mp->extview.lpszSubKey = Alloc(len * sizeof(WCHAR)); - MultiByteToWideChar(CP_ACP, 0, lpcml->lpszSubKey, -1, - (LPWSTR)mp->extview.lpszSubKey, len); - mp->isUnicode = FALSE; - return CreateMRUListLazy_common(mp); -} - -/********************************************************************** **** - * CreateMRUListW [COMCTL32.400] - * - * See CreateMRUListA. - */ -HANDLE WINAPI CreateMRUListW (LPCREATEMRULISTW lpcml) -{ - return CreateMRUListLazyW(lpcml, 0, 0, 0); -} - -/********************************************************************** **** - * CreateMRUListA [COMCTL32.151] - * - * Creates a most-recently-used list. - * - * PARAMS - * lpcml [I] ptr to CREATEMRULIST structure. - * - * RETURNS - * Handle to MRU list. - */ -HANDLE WINAPI CreateMRUListA (LPCREATEMRULISTA lpcml) -{ - return CreateMRUListLazyA (lpcml, 0, 0, 0); -} - - -/********************************************************************** **** - * EnumMRUListW [COMCTL32.403] - * - * Enumerate item in a most-recenty-used list - * - * PARAMS - * hList [I] list handle - * nItemPos [I] item position to enumerate - * lpBuffer [O] buffer to receive item - * nBufferSize [I] size of buffer - * - * RETURNS - * For binary lists specifies how many bytes were copied to buffer, for - * string lists specifies full length of string. Enumerating past the end - * of list returns -1. - * If lpBuffer == NULL or nItemPos is -ve return value is no. of items in - * the list. - */ -INT WINAPI EnumMRUListW (HANDLE hList, INT nItemPos, LPVOID lpBuffer, - DWORD nBufferSize) -{ - LPWINEMRULIST mp = (LPWINEMRULIST) hList; - LPWINEMRUITEM witem; - INT desired, datasize; - - if (nItemPos >= mp->cursize) return -1; - if ((nItemPos < 0) || !lpBuffer) return mp->cursize; - desired = mp->realMRU[nItemPos]; - desired -= 'a'; - TRACE("nItemPos=%d, desired=%d\n", nItemPos, desired); - witem = mp->array[desired]; - datasize = min( witem->size, nBufferSize ); - memcpy( lpBuffer, &witem->datastart, datasize); - TRACE("(%p, %d, %p, %ld): returning len=%d\n", - hList, nItemPos, lpBuffer, nBufferSize, datasize); - return datasize; -} - -/********************************************************************** **** - * EnumMRUListA [COMCTL32.154] - * - * See EnumMRUListW. - */ -INT WINAPI EnumMRUListA (HANDLE hList, INT nItemPos, LPVOID lpBuffer, - DWORD nBufferSize) -{ - LPWINEMRULIST mp = (LPWINEMRULIST) hList; - LPWINEMRUITEM witem; - INT desired, datasize; - DWORD lenA; - - if (nItemPos >= mp->cursize) return -1; - if ((nItemPos < 0) || !lpBuffer) return mp->cursize; - desired = mp->realMRU[nItemPos]; - desired -= 'a'; - TRACE("nItemPos=%d, desired=%d\n", nItemPos, desired); - witem = mp->array[desired]; - if(mp->extview.dwFlags & MRUF_BINARY_LIST) { - datasize = min( witem->size, nBufferSize ); - memcpy( lpBuffer, &witem->datastart, datasize); - } else { - lenA = WideCharToMultiByte(CP_ACP, 0, (LPWSTR)&witem->datastart, -1, - NULL, 0, NULL, NULL); - datasize = min( witem->size, nBufferSize ); - WideCharToMultiByte(CP_ACP, 0, (LPWSTR)&witem->datastart, -1, - lpBuffer, datasize, NULL, NULL); - } - TRACE("(%p, %d, %p, %ld): returning len=%d\n", - hList, nItemPos, lpBuffer, nBufferSize, datasize); - return datasize; -} - - -/********************************************************************** **** - * Str_GetPtrA [COMCTL32.233] - * - * Copies a string into a destination buffer. - * - * PARAMS - * lpSrc [I] Source string - * lpDest [O] Destination buffer - * nMaxLen [I] Size of buffer in characters - * - * RETURNS - * The number of characters copied. - */ -INT WINAPI Str_GetPtrA (LPCSTR lpSrc, LPSTR lpDest, INT nMaxLen) -{ - INT len; - - TRACE("(%p %p %d)\n", lpSrc, lpDest, nMaxLen); - - if (!lpDest && lpSrc) - return strlen (lpSrc); - - if (nMaxLen == 0) - return 0; - - if (lpSrc == NULL) { - lpDest[0] = '\0'; - return 0; - } - - len = strlen (lpSrc); - if (len >= nMaxLen) - len = nMaxLen - 1; - - RtlMoveMemory (lpDest, lpSrc, len); - lpDest[len] = '\0'; - - return len; -} - - -/********************************************************************** **** - * Str_SetPtrA [COMCTL32.234] - * - * Makes a copy of a string, allocating memory if necessary. - * - * PARAMS - * lppDest [O] Pointer to destination string - * lpSrc [I] Source string - * - * RETURNS - * Success: TRUE - * Failure: FALSE - * - * NOTES - * Set lpSrc to NULL to free the memory allocated by a previous call - * to this function. - */ -BOOL WINAPI Str_SetPtrA (LPSTR *lppDest, LPCSTR lpSrc) -{ - TRACE("(%p %p)\n", lppDest, lpSrc); - - if (lpSrc) { - LPSTR ptr = ReAlloc (*lppDest, strlen (lpSrc) + 1); - if (!ptr) - return FALSE; - strcpy (ptr, lpSrc); - *lppDest = ptr; - } - else { - if (*lppDest) { - Free (*lppDest); - *lppDest = NULL; - } - } - - return TRUE; -} - - -/********************************************************************** **** - * Str_GetPtrW [COMCTL32.235] - * - * See Str_GetPtrA. - */ -INT WINAPI Str_GetPtrW (LPCWSTR lpSrc, LPWSTR lpDest, INT nMaxLen) -{ - INT len; - - TRACE("(%p %p %d)\n", lpSrc, lpDest, nMaxLen); - - if (!lpDest && lpSrc) - return strlenW (lpSrc); - - if (nMaxLen == 0) - return 0; - - if (lpSrc == NULL) { - lpDest[0] = L'\0'; - return 0; - } - - len = strlenW (lpSrc); - if (len >= nMaxLen) [truncated at 1000 lines; 72822 more skipped]