Separated 32 bit functions to shellole.c.

This commit is contained in:
Juergen Schmied 2000-04-28 20:19:03 +00:00 committed by Alexandre Julliard
parent 12aae27ae6
commit d650903cec
2 changed files with 179 additions and 179 deletions

View File

@ -3,7 +3,6 @@
* *
* 1998 Marcus Meissner * 1998 Marcus Meissner
*/ */
#include <assert.h>
#include <stdlib.h> #include <stdlib.h>
#include <string.h> #include <string.h>
#include <unistd.h> #include <unistd.h>
@ -26,8 +25,8 @@
#include "debugtools.h" #include "debugtools.h"
#include "winreg.h" #include "winreg.h"
#include "syslevel.h" #include "syslevel.h"
#include "shlwapi.h"
#include "imagelist.h" #include "imagelist.h"
#include "tchar.h"
DEFAULT_DEBUG_CHANNEL(shell) DEFAULT_DEBUG_CHANNEL(shell)
DECLARE_DEBUG_CHANNEL(exec) DECLARE_DEBUG_CHANNEL(exec)
@ -123,22 +122,6 @@ BOOL WINAPI SHELL_DllEntryPoint(DWORD Reason, HINSTANCE16 hInst,
return TRUE; 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] * DragAcceptFiles16 [SHELL.9]
*/ */
@ -147,130 +130,44 @@ void WINAPI DragAcceptFiles16(HWND16 hWnd, BOOL16 b)
DragAcceptFiles(hWnd, b); DragAcceptFiles(hWnd, b);
} }
/*************************************************************************
* SHELL_DragQueryFile [internal]
*
*/
static UINT SHELL_DragQueryFile(LPSTR lpDrop, LPWSTR lpwDrop, UINT lFile,
LPSTR lpszFile, LPWSTR lpszwFile, UINT lLength)
{
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;
}
}
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 */
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;
}
/*************************************************************************
* 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] * DragQueryFile16 [SHELL.11]
*/ */
UINT16 WINAPI DragQueryFile16(HDROP16 hDrop, WORD wFile, LPSTR lpszFile, UINT16 WINAPI DragQueryFile16(
HDROP16 hDrop,
WORD wFile,
LPSTR lpszFile,
WORD wLength) WORD wLength)
{ /* hDrop is a global memory block allocated with GMEM_SHARE {
* with DROPFILESTRUCT as a header and filenames following LPSTR lpDrop;
* it, zero length filename is in the end */ UINT i = 0;
LPDROPFILESTRUCT16 lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop);
LPDROPFILESTRUCT16 lpDropFileStruct;
LPSTR lpCurrent;
WORD i;
TRACE("(%04x, %x, %p, %u)\n", hDrop,wFile,lpszFile,wLength); TRACE("(%04x, %x, %p, %u)\n", hDrop,wFile,lpszFile,wLength);
lpDropFileStruct = (LPDROPFILESTRUCT16) GlobalLock16(hDrop); if(!lpDropFileStruct) goto end;
if(!lpDropFileStruct)
return 0;
lpCurrent = (LPSTR) lpDropFileStruct + lpDropFileStruct->wSize; lpDrop = (LPSTR) lpDropFileStruct + lpDropFileStruct->wSize;
wFile = (wFile==0xffff) ? 0xffffffff : wFile;
i = (WORD)SHELL_DragQueryFile(lpCurrent, NULL, wFile==0xffff?0xffffffff:wFile, while (i++ < wFile)
lpszFile, NULL, wLength); {
GlobalUnlock16(hDrop); while (*lpDrop++); /* skip filename */
return i; if (!*lpDrop)
{
i = (wFile == 0xFFFFFFFF) ? i : 0;
goto end;
}
} }
i = lstrlenA(lpDrop);
i++;
/************************************************************************* if (!lpszFile ) goto end; /* needed buffer size */
* DragFinish [SHELL32.80] i = (wLength > i) ? i : wLength;
*/ lstrcpynA (lpszFile, lpDrop, i);
void WINAPI DragFinish(HDROP h) end:
{ GlobalUnlock16(hDrop);
TRACE("\n"); return i;
GlobalFree((HGLOBAL)h);
} }
/************************************************************************* /*************************************************************************
@ -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] * DragQueryPoint16 [SHELL.13]
*/ */
@ -553,7 +433,7 @@ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
/* Remove File Protocol from lpFile */ /* Remove File Protocol from lpFile */
/* In the case file://path/file */ /* In the case file://path/file */
if(!_strnicmp(lpFile,"file",iSize)) if(!strncasecmp(lpFile,"file",iSize))
{ {
lpFile += iSize; lpFile += iSize;
while(*lpFile == ':') lpFile++; while(*lpFile == ':') lpFile++;
@ -603,7 +483,7 @@ HINSTANCE16 WINAPI ShellExecute16( HWND16 hWnd, LPCSTR lpOperation,
} }
} }
/* Check if file specified is in the form www.??????.*** */ /* 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 */ /* if so, append lpFile http:// and call ShellExecute */
char lpstrTmpFile[256] = "http://" ; char lpstrTmpFile[256] = "http://" ;

View File

@ -215,7 +215,7 @@ LPCLASSFACTORY IClassFactory_Constructor(REFCLSID rclsid)
lpclf->rclsid = (CLSID*)rclsid; lpclf->rclsid = (CLSID*)rclsid;
TRACE("(%p)->()\n",lpclf); TRACE("(%p)->()\n",lpclf);
shell32_ObjCount++; InterlockedIncrement(&shell32_ObjCount);
return (LPCLASSFACTORY)lpclf; return (LPCLASSFACTORY)lpclf;
} }
/************************************************************************** /**************************************************************************
@ -252,8 +252,8 @@ static ULONG WINAPI IClassFactory_fnAddRef(LPCLASSFACTORY iface)
ICOM_THIS(IClassFactoryImpl,iface); ICOM_THIS(IClassFactoryImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref); TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount++; InterlockedIncrement(&shell32_ObjCount);
return ++(This->ref); return InterlockedIncrement(&This->ref);
} }
/****************************************************************************** /******************************************************************************
* IClassFactory_Release * IClassFactory_Release
@ -263,9 +263,10 @@ static ULONG WINAPI IClassFactory_fnRelease(LPCLASSFACTORY iface)
ICOM_THIS(IClassFactoryImpl,iface); ICOM_THIS(IClassFactoryImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref); TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount--; InterlockedDecrement(&shell32_ObjCount);
if (!--(This->ref)) if (!InterlockedDecrement(&This->ref))
{ TRACE("-- destroying IClassFactory(%p)\n",This); {
TRACE("-- destroying IClassFactory(%p)\n",This);
HeapFree(GetProcessHeap(),0,This); HeapFree(GetProcessHeap(),0,This);
return 0; return 0;
} }
@ -355,7 +356,7 @@ typedef struct
CLSID *rclsid; CLSID *rclsid;
LPFNCREATEINSTANCE lpfnCI; LPFNCREATEINSTANCE lpfnCI;
const IID * riidInst; const IID * riidInst;
UINT * pcRefDll; /* pointer to refcounter in external dll (ugrrr...) */ ULONG * pcRefDll; /* pointer to refcounter in external dll (ugrrr...) */
} IDefClFImpl; } IDefClFImpl;
static ICOM_VTABLE(IClassFactory) dclfvt; static ICOM_VTABLE(IClassFactory) dclfvt;
@ -364,7 +365,7 @@ static ICOM_VTABLE(IClassFactory) dclfvt;
* IDefClF_fnConstructor * IDefClF_fnConstructor
*/ */
IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, UINT * pcRefDll, REFIID riidInst) IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, PLONG pcRefDll, REFIID riidInst)
{ {
IDefClFImpl* lpclf; IDefClFImpl* lpclf;
@ -374,13 +375,11 @@ IClassFactory * IDefClF_fnConstructor(LPFNCREATEINSTANCE lpfnCI, UINT * pcRefDll
lpclf->lpfnCI = lpfnCI; lpclf->lpfnCI = lpfnCI;
lpclf->pcRefDll = pcRefDll; lpclf->pcRefDll = pcRefDll;
if (pcRefDll) if (pcRefDll) InterlockedIncrement(pcRefDll);
(*pcRefDll)++;
lpclf->riidInst = riidInst; lpclf->riidInst = riidInst;
TRACE("(%p)\n\tIID:\t%s\n",lpclf, debugstr_guid(riidInst)); TRACE("(%p)\n\tIID:\t%s\n",lpclf, debugstr_guid(riidInst));
shell32_ObjCount++; InterlockedIncrement(&shell32_ObjCount);
return (LPCLASSFACTORY)lpclf; return (LPCLASSFACTORY)lpclf;
} }
/************************************************************************** /**************************************************************************
@ -418,9 +417,8 @@ static ULONG WINAPI IDefClF_fnAddRef(LPCLASSFACTORY iface)
ICOM_THIS(IDefClFImpl,iface); ICOM_THIS(IDefClFImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref); TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount++; InterlockedIncrement(&shell32_ObjCount);
return InterlockedIncrement(&This->ref);
return ++(This->ref);
} }
/****************************************************************************** /******************************************************************************
* IDefClF_fnRelease * IDefClF_fnRelease
@ -430,12 +428,11 @@ static ULONG WINAPI IDefClF_fnRelease(LPCLASSFACTORY iface)
ICOM_THIS(IDefClFImpl,iface); ICOM_THIS(IDefClFImpl,iface);
TRACE("(%p)->(count=%lu)\n",This,This->ref); TRACE("(%p)->(count=%lu)\n",This,This->ref);
shell32_ObjCount--; InterlockedDecrement(&shell32_ObjCount);
if (!--(This->ref)) if (!InterlockedDecrement(&This->ref))
{ {
if (This->pcRefDll) if (This->pcRefDll) InterlockedDecrement(This->pcRefDll);
(*This->pcRefDll)--;
TRACE("-- destroying IClassFactory(%p)\n",This); TRACE("-- destroying IClassFactory(%p)\n",This);
HeapFree(GetProcessHeap(),0,This); HeapFree(GetProcessHeap(),0,This);
@ -495,7 +492,7 @@ HRESULT WINAPI SHCreateDefClassObject(
REFIID riid, REFIID riid,
LPVOID* ppv, LPVOID* ppv,
LPFNCREATEINSTANCE lpfnCI, /* create instance callback entry */ 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 */ REFIID riidInst) /* optional interface to the instance */
{ {
TRACE("\n\tIID:\t%s %p %p %p \n\tIIDIns:\t%s\n", TRACE("\n\tIID:\t%s %p %p %p \n\tIIDIns:\t%s\n",
@ -514,3 +511,126 @@ HRESULT WINAPI SHCreateDefClassObject(
return E_NOINTERFACE; 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;
}