Commit d650903c authored by Juergen Schmied's avatar Juergen Schmied Committed by Alexandre Julliard

Separated 32 bit functions to shellole.c.

parent 12aae27a
......@@ -3,7 +3,6 @@
*
* 1998 Marcus Meissner
*/
#include <assert.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
......@@ -26,8 +25,8 @@
#include "debugtools.h"
#include "winreg.h"
#include "syslevel.h"
#include "shlwapi.h"
#include "imagelist.h"
#include "tchar.h"
DEFAULT_DEBUG_CHANNEL(shell)
DECLARE_DEBUG_CHANNEL(exec)
......@@ -124,22 +123,6 @@ BOOL WINAPI SHELL_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst,
}
/*************************************************************************
* DragAcceptFiles [SHELL32.54]
*/
void WINAPI DragAcceptFiles(HWND hWnd, BOOL b)
{
LONG exstyle;
if( !IsWindow(hWnd) )
return;
exstyle = GetWindowLongA(hWnd,GWL_EXSTYLE);
if (b)exstyle |= WS_EX_ACCEPTFILES;
else exstyle &= ~WS_EX_ACCEPTFILES;
SetWindowLongA(hWnd,GWL_EXSTYLE,exstyle);
}
/*************************************************************************
* DragAcceptFiles16 [SHELL.9]
*/
void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b)
......@@ -148,129 +131,43 @@ void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b)
}
/*************************************************************************
* SHELL_DragQueryFile [internal]
*
* DragQueryFile16 [SHELL.11]
*/
static UINT SHELL_DragQueryFile(LPSTR lpDrop, LPWSTR lpwDrop, UINT lFile,
LPSTR lpszFile, LPWSTR lpszwFile, UINT lLength)
UINT16 WINAPI DragQueryFile16(
HDROP16 hDrop,
WORD wFile,
LPSTR lpszFile,
WORD wLength)
{
UINT i;
i = 0;
if (lpDrop) {
while (i++ < lFile) {
while (*lpDrop++); /* skip filename */
if (!*lpDrop)
return (lFile == 0xFFFFFFFF) ? i : 0;
}
}
if (lpwDrop) {
while (i++ < lFile) {
while (*lpwDrop++); /* skip filename */
if (!*lpwDrop)
return (lFile == 0xFFFFFFFF) ? i : 0;
}
}
LPSTR lpDrop;
UINT i = 0;
LPDROPFILESTRUCT16 lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop);
TRACE("(%04x, %x, %p, %u)\n", hDrop,wFile,lpszFile,wLength);
if (lpDrop) i = lstrlenA(lpDrop);
if (lpwDrop) i = lstrlenW(lpwDrop);
i++;
if (!lpszFile && !lpszwFile) {
return i; /* needed buffer size */
}
i = (lLength > i) ? i : lLength;
if (lpszFile) {
if (lpDrop) lstrcpynA (lpszFile, lpDrop, i);
else lstrcpynWtoA(lpszFile, lpwDrop, i);
} else {
if (lpDrop) lstrcpynAtoW(lpszwFile, lpDrop, i);
else lstrcpynW (lpszwFile, lpwDrop, i);
}
return i;
}
/*************************************************************************
* DragQueryFileA [SHELL32.81] [shell32.82]
*/
UINT WINAPI DragQueryFileA(HDROP hDrop, UINT lFile, LPSTR lpszFile,
UINT lLength)
{ /* hDrop is a global memory block allocated with GMEM_SHARE
* with DROPFILESTRUCT as a header and filenames following
* it, zero length filename is in the end */
if(!lpDropFileStruct) goto end;
LPDROPFILESTRUCT lpDropFileStruct;
LPSTR lpCurrent;
UINT i;
TRACE("(%08x, %x, %p, %u)\n", hDrop,lFile,lpszFile,lLength);
lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock(hDrop);
if(!lpDropFileStruct)
return 0;
lpCurrent = (LPSTR) lpDropFileStruct + lpDropFileStruct->lSize;
i = SHELL_DragQueryFile(lpCurrent, NULL, lFile, lpszFile, NULL, lLength);
GlobalUnlock(hDrop);
return i;
}
lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->wSize;
wFile = (wFile==0xffff) ? 0xffffffff : wFile;
/*************************************************************************
* DragQueryFileW [shell32.133]
*/
UINT WINAPI DragQueryFileW(HDROP hDrop, UINT lFile, LPWSTR lpszwFile,
UINT lLength)
{
LPDROPFILESTRUCT lpDropFileStruct;
LPWSTR lpwCurrent;
UINT i;
TRACE("(%08x, %x, %p, %u)\n", hDrop,lFile,lpszwFile,lLength);
lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock(hDrop);
if(!lpDropFileStruct)
return 0;
lpwCurrent = (LPWSTR) lpDropFileStruct + lpDropFileStruct->lSize;
i = SHELL_DragQueryFile(NULL, lpwCurrent, lFile, NULL, lpszwFile,lLength);
GlobalUnlock(hDrop);
return i;
}
/*************************************************************************
* DragQueryFile16 [SHELL.11]
*/
UINT16 WINAPI DragQueryFile16(HDROP16 hDrop, WORD wFile, LPSTR lpszFile,
WORD wLength)
{ /* hDrop is a global memory block allocated with GMEM_SHARE
* with DROPFILESTRUCT as a header and filenames following
* it, zero length filename is in the end */
LPDROPFILESTRUCT16 lpDropFileStruct;
LPSTR lpCurrent;
WORD i;
TRACE("(%04x, %x, %p, %u)\n", hDrop,wFile,lpszFile,wLength);
lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop);
if(!lpDropFileStruct)
return 0;
while (i++ < wFile)
{
while (*lpDrop++); /* skip filename */
if (!*lpDrop)
{
i = (wFile == 0xFFFFFFFF) ? i : 0;
goto end;
}
}
lpCurrent = (LPSTR) lpDropFileStruct + lpDropFileStruct->wSize;
i = (WORD)SHELL_DragQueryFile(lpCurrent, NULL, wFile==0xffff?0xffffffff:wFile,
lpszFile, NULL, wLength);
GlobalUnlock16(hDrop);
return i;
}
/*************************************************************************
* DragFinish [SHELL32.80]
*/
void WINAPI DragFinish(HDROP h)
{
TRACE("\n");
GlobalFree((HGLOBAL)h);
i = lstrlenA(lpDrop);
i++;
if (!lpszFile ) goto end; /* needed buffer size */
i = (wLength > i) ? i : wLength;
lstrcpynA (lpszFile, lpDrop, i);
end:
GlobalUnlock16(hDrop);
return i;
}
/*************************************************************************
......@@ -284,23 +181,6 @@ void WINAPI DragFinish16(HDROP16 h)
/*************************************************************************
* DragQueryPoint [SHELL32.135]
*/
BOOL WINAPI DragQueryPoint(HDROP hDrop, POINT *p)
{
LPDROPFILESTRUCT lpDropFileStruct;
BOOL bRet;
TRACE("\n");
lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock(hDrop);
memcpy(p,&lpDropFileStruct->ptMousePos,sizeof(POINT));
bRet = lpDropFileStruct->fInNonClientArea;
GlobalUnlock(hDrop);
return bRet;
}
/*************************************************************************
* DragQueryPoint16 [SHELL.13]
*/
BOOL16 WINAPI DragQueryPoint16(HDROP16 hDrop, POINT16 *p)
......@@ -553,7 +433,7 @@ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
/* Remove File Protocol from lpFile */
/* In the case file://path/file */
if(!_strnicmp(lpFile,"file",iSize))
if(!strncasecmp(lpFile,"file",iSize))
{
lpFile += iSize;
while(*lpFile == ':') lpFile++;
......@@ -603,7 +483,7 @@ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
}
}
/* Check if file specified is in the form www.??????.*** */
else if(!_strnicmp(lpFile,"www",3))
else if(!strncasecmp(lpFile,"www",3))
{
/* if so, append lpFile http:// and call ShellExecute */
char lpstrTmpFile[256] = "http://" ;
......
......@@ -215,7 +215,7 @@ LPCLASSFACTORY IClassFactory_Constructor(REFCLSID rclsid)
lpclf->rclsid = (CLSID*)rclsid;
TRACE("(%p)->()\n",lpclf);
shell32_ObjCount++;
InterlockedIncrement(&shell32_ObjCount);
return (LPCLASSFACTORY)lpclf;
}
/**************************************************************************
......@@ -252,8 +252,8 @@ static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
ICOM_THIS(IClassFactoryImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount++;
return ++(This->ref);
InterlockedIncrement(&shell32_ObjCount);
return InterlockedIncrement(&This->ref);
}
/******************************************************************************
* IClassFactory_Release
......@@ -263,11 +263,12 @@ static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
ICOM_THIS(IClassFactoryImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount--;
if (!--(This->ref))
{ TRACE("-- destroying IClassFactory(%p)\n",This);
HeapFree(GetProcessHeap(),0,This);
return 0;
InterlockedDecrement(&shell32_ObjCount);
if (!InterlockedDecrement(&This->ref))
{
TRACE("-- destroying IClassFactory(%p)\n",This);
HeapFree(GetProcessHeap(),0,This);
return 0;
}
return This->ref;
}
......@@ -355,7 +356,7 @@ typedef struct
CLSID *rclsid;
LPFNCREATEINSTANCE lpfnCI;
const IID * riidInst;
UINT * pcRefDll; /* pointer to refcounter in external dll (ugrrr...) */
ULONG * pcRefDll; /* pointer to refcounter in external dll (ugrrr...) */
} IDefClFImpl;
static ICOM_VTABLE(IClassFactory) dclfvt;
......@@ -364,7 +365,7 @@ static ICOM_VTABLE(IClassFactory) dclfvt;
* IDefClF_fnConstructor
*/
IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, UINT * pcRefDll, REFIID riidInst)
IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
{
IDefClFImpl* lpclf;
......@@ -374,13 +375,11 @@ IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, UINT * pcRefDll
lpclf->lpfnCI = lpfnCI;
lpclf->pcRefDll = pcRefDll;
if (pcRefDll)
(*pcRefDll)++;
if (pcRefDll) InterlockedIncrement(pcRefDll);
lpclf->riidInst = riidInst;
TRACE("(%p)\n\tIID:\t%s\n",lpclf, debugstr_guid(riidInst));
shell32_ObjCount++;
InterlockedIncrement(&shell32_ObjCount);
return (LPCLASSFACTORY)lpclf;
}
/**************************************************************************
......@@ -418,9 +417,8 @@ static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
ICOM_THIS(IDefClFImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount++;
return ++(This->ref);
InterlockedIncrement(&shell32_ObjCount);
return InterlockedIncrement(&This->ref);
}
/******************************************************************************
* IDefClF_fnRelease
......@@ -430,12 +428,11 @@ static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
ICOM_THIS(IDefClFImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount--;
InterlockedDecrement(&shell32_ObjCount);
if (!--(This->ref))
if (!InterlockedDecrement(&This->ref))
{
if (This->pcRefDll)
(*This->pcRefDll)--;
if (This->pcRefDll) InterlockedDecrement(This->pcRefDll);
TRACE("-- destroying IClassFactory(%p)\n",This);
HeapFree(GetProcessHeap(),0,This);
......@@ -495,7 +492,7 @@ HRESULT WINAPI SHCreateDefClassObject(
REFIID riid,
LPVOID* ppv,
LPFNCREATEINSTANCE lpfnCI, /* create instance callback entry */
UINT *pcRefDll, /* ref count of the dll */
PLONG pcRefDll, /* ref count of the dll */
REFIID riidInst) /* optional interface to the instance */
{
TRACE("\n\tIID:\t%s %p %p %p \n\tIIDIns:\t%s\n",
......@@ -514,3 +511,126 @@ HRESULT WINAPI SHCreateDefClassObject(
return E_NOINTERFACE;
}
/*************************************************************************
* DragAcceptFiles [SHELL32.54]
*/
void WINAPI DragAcceptFiles(HWND hWnd, BOOL b)
{
LONG exstyle;
if( !IsWindow(hWnd) ) return;
exstyle = GetWindowLongA(hWnd,GWL_EXSTYLE);
if (b)
exstyle |= WS_EX_ACCEPTFILES;
else
exstyle &= ~WS_EX_ACCEPTFILES;
SetWindowLongA(hWnd,GWL_EXSTYLE,exstyle);
}
/*************************************************************************
* DragFinish [SHELL32.80]
*/
void WINAPI DragFinish(HDROP h)
{
TRACE("\n");
GlobalFree((HGLOBAL)h);
}
/*************************************************************************
* DragQueryPoint [SHELL32.135]
*/
BOOL WINAPI DragQueryPoint(HDROP hDrop, POINT *p)
{
LPDROPFILESTRUCT lpDropFileStruct;
BOOL bRet;
TRACE("\n");
lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock(hDrop);
memcpy(p,&lpDropFileStruct->ptMousePos,sizeof(POINT));
bRet = lpDropFileStruct->fInNonClientArea;
GlobalUnlock(hDrop);
return bRet;
}
/*************************************************************************
* DragQueryFileA [SHELL32.81] [shell32.82]
*/
UINT WINAPI DragQueryFileA(
HDROP hDrop,
UINT lFile,
LPSTR lpszFile,
UINT lLength)
{
LPSTR lpDrop;
UINT i = 0;
LPDROPFILESTRUCT lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock(hDrop);
TRACE("(%08x, %x, %p, %u)\n", hDrop,lFile,lpszFile,lLength);
if(!lpDropFileStruct) goto end;
lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->lSize;
while (i++ < lFile)
{
while (*lpDrop++); /* skip filename */
if (!*lpDrop)
{
i = (lFile == 0xFFFFFFFF) ? i : 0;
goto end;
}
}
i = lstrlenA(lpDrop);
i++;
if (!lpszFile ) goto end; /* needed buffer size */
i = (lLength > i) ? i : lLength;
lstrcpynA (lpszFile, lpDrop, i);
end:
GlobalUnlock(hDrop);
return i;
}
/*************************************************************************
* DragQueryFileW [shell32.133]
*/
UINT WINAPI DragQueryFileW(
HDROP hDrop,
UINT lFile,
LPWSTR lpszwFile,
UINT lLength)
{
LPWSTR lpwDrop;
UINT i = 0;
LPDROPFILESTRUCT lpDropFileStruct = (LPDROPFILESTRUCT) GlobalLock(hDrop);
TRACE("(%08x, %x, %p, %u)\n", hDrop,lFile,lpszwFile,lLength);
if(!lpDropFileStruct) goto end;
lpwDrop = (LPWSTR) lpDropFileStruct + lpDropFileStruct->lSize;
i = 0;
while (i++ < lFile)
{
while (*lpwDrop++); /* skip filename */
if (!*lpwDrop)
{
i = (lFile == 0xFFFFFFFF) ? i : 0;
goto end;
}
}
i = lstrlenW(lpwDrop);
i++;
if ( !lpszwFile) goto end; /* needed buffer size */
i = (lLength > i) ? i : lLength;
lstrcpynW (lpszwFile, lpwDrop, i);
end:
GlobalUnlock(hDrop);
return i;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment