Skip to content
Snippets Groups Projects
Commit d650903c authored by Juergen Schmied's avatar Juergen Schmied Committed by Alexandre Julliard
Browse files

Separated 32 bit functions to shellole.c.

parent 12aae27a
No related merge requests found
......@@ -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)
......@@ -123,22 +122,6 @@ BOOL WINAPI SHELL_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst,
return TRUE;
}
/*************************************************************************
* 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]
*/
......@@ -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;
}
/*************************************************************************
......@@ -283,23 +180,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]
*/
......@@ -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;
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment