Release 960811
Sun Aug 11 13:00:20 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [configure.in] [include/acconfig.h] [tools/build.c]
Added check for underscore on external symbols.
* [memory/selector.c] [memory/global.c]
Fixed FreeSelector() to free only one selector.
Added SELECTOR_FreeBlock() to free an array of selectors.
* [objects/color.c]
Fixed a bug in COLOR_ToLogical() that caused GetPixel() to fail on
hi-color displays.
* [tools/build.c] [if1632/crtdll.spec]
Added 'extern' type, used for external variables or functions.
* [windows/winpos.c]
Allow de-activating a window in WINPOS_ChangeActiveWindow().
* [windows/winproc.c]
Added 32-to-16 translation for button messages.
Fixed WINPROC_GetPtr() to avoid crashes on 32-bit procedures that
happen to be valid SEGPTRs.
Sat Aug 10 18:22:25 1996 Albrecht Kleine <kleine@ak.sax.de>
* [windows/message.c]
Removed a FIXME in MSG_PeekHardwareMsg(): produces correct
data for the JOURNALRECORD-hook (using EVENTMSG16 structure).
* [if1632/gdi.spec] [include/windows.h] [objects/metafile.c]
Introduced undocumented API function IsValidMetaFile(), plus a
minor fix in last patch of CopyMetaFile().
* [objects/gdiobj.c]
Removed a FIXME in IsGDIObject(): added magic word check.
Sun Aug 10 18:10:10 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
* [controls/statuswin.c]
First pass at implementing the StatusWindow class.
* [include/commctrl.h]
Header file for common controls.
* [controls/widgets.c]
Added InitCommonControls().
* [if1632/comctl32.spec]
Add DrawStatusTextA, CreateStatusWindowA, InitCommonControls.
* [win32/findfile.c] [if1632/kernel32.spec]
Add FindNextFile32A, FindClose.
Modified FindFirstFile32A so it works with FindNextFile32A.
* [include/winbase.h]
Fixed WIN32_FIND_DATA structure member names.
Sat Aug 10 09:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [windows/scroll.c]
Changed scrolling routines to benefit from DCE code update.
Thu Aug 8 18:05:09 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/file.c]
SearchPath* could get NULL for lastpart argument.
* [if1632/build-spec.txt] [documentation/debugging]
Varargs documentation added, debugging hints updated.
* [if1632/crtdll.spec][misc/crtdll.c][misc/Makefile.in]
Started to implement CRTDLL.
* [if1632/wsock32.spec]
Some thunks to standard libc functions (structures have the same
elements, but perhaps wrong offset due to packing).
* [include/kernel32.h][include/windows.h][win32/*.c][loader/main.c]
Merged kernel32.h into windows.h.
* [misc/lstr.c]
Enhanced FormatMessage().
* [misc/main.c] [if1632/kernel.spec] [include/windows.h]
GetVersion() updated to new naming standard.
Changed language handling to support language ids.
* [misc/shell.c]
Enhanced FindExecutable, so it finds files in the search path too.
* [win32/environment.c]
GetCommandLine* updated.
* [loader/resource.c] [loader/pe_resource.c]
FindResourceEx32* added.
Loading of messagetables added.
Language handling now uses Wine default language id.
diff --git a/misc/shell.c b/misc/shell.c
index e9dbbcb..0f146e1 100644
--- a/misc/shell.c
+++ b/misc/shell.c
@@ -124,6 +124,7 @@
HINSTANCE retval=31; /* default - 'No association was found' */
char *tok; /* token pointer */
int i; /* random counter */
+ char xlpFile[256]; /* result of SearchPath */
dprintf_exec(stddeb, "SHELL_FindExecutable: File %s, Dir %s\n",
(lpFile != NULL?lpFile:"-"),
@@ -132,18 +133,19 @@
lpResult[0]='\0'; /* Start off with an empty return string */
/* trap NULL parameters on entry */
- if (( lpFile == NULL ) || ( lpDirectory == NULL ) ||
- ( lpResult == NULL ) || ( lpOperation == NULL ))
+ if (( lpFile == NULL ) || ( lpResult == NULL ) || ( lpOperation == NULL ))
{
/* FIXME - should throw a warning, perhaps! */
return 2; /* File not found. Close enough, I guess. */
}
+ if (SearchPath32A(lpDirectory,lpFile,NULL,sizeof(xlpFile),xlpFile,NULL))
+ lpFile = xlpFile;
/* First thing we need is the file's extension */
- extension = strrchr( lpFile, '.' ); /* Assume last "." is the one; */
+ extension = strrchr( xlpFile, '.' ); /* Assume last "." is the one; */
/* File->Run in progman uses */
/* .\FILE.EXE :( */
- if ((extension == NULL) || (extension == &lpFile[strlen(lpFile)]))
+ if ((extension == NULL) || (extension == &xlpFile[strlen(xlpFile)]))
{
return 31; /* no association */
}
@@ -176,7 +178,7 @@
{
if (strcmp(tok, &tmpext[1])==0) /* have to skip the leading "." */
{
- strcpy(lpResult, lpFile); /* Need to perhaps check that */
+ strcpy(lpResult, xlpFile); /* Need to perhaps check that */
/* the file has a path attached */
dprintf_exec(stddeb, "SHELL_FindExecutable: found %s\n",
lpResult);
@@ -212,7 +214,7 @@
if (tok != NULL)
{
tok[0]='\0'; /* truncate string at the percent */
- strcat( lpResult, lpFile ); /* what if no dir in lpFile? */
+ strcat( lpResult, xlpFile ); /* what if no dir in xlpFile? */
tok=strstr( command, "%1" );
if ((tok!=NULL) && (strlen(tok)>2))
{
@@ -235,7 +237,7 @@
if (tok != NULL)
{
tok[0]='\0';
- strcat( lpResult, lpFile ); /* what if no dir in lpFile? */
+ strcat( lpResult, xlpFile ); /* what if no dir in xlpFile? */
tok=strstr( command, "^" ); /* see above */
if ((tok != NULL) && (strlen(tok)>5))
{
@@ -300,8 +302,7 @@
lpResult[0]='\0'; /* Start off with an empty return string */
/* trap NULL parameters on entry */
- if (( lpFile == NULL ) || ( lpDirectory == NULL ) ||
- ( lpResult == NULL ))
+ if (( lpFile == NULL ) || ( lpResult == NULL ))
{
/* FIXME - should throw a warning, perhaps! */
return 2; /* File not found. Close enough, I guess. */
@@ -346,7 +347,7 @@
/*************************************************************************
* ShellAbout [SHELL.22]
*/
-INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon)
+INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON16 hIcon)
{
HANDLE handle;
BOOL bRet;
@@ -435,10 +436,10 @@
*
* This abortion is called directly by Progman
*/
-HICON InternalExtractIcon(HINSTANCE hInstance, LPCSTR lpszExeFileName, UINT nIconIndex, WORD n )
+HICON16 InternalExtractIcon(HINSTANCE hInstance, LPCSTR lpszExeFileName, UINT nIconIndex, WORD n )
{
HANDLE hRet = 0;
- HICON* RetPtr = NULL;
+ HICON16* RetPtr = NULL;
BYTE* pData;
OFSTRUCT ofs;
HFILE hFile = OpenFile( lpszExeFileName, &ofs, OF_READ );
@@ -448,8 +449,8 @@
if( hFile == HFILE_ERROR || !n ) return 0;
- hRet = GlobalAlloc16( GMEM_FIXED, sizeof(HICON)*n);
- RetPtr = (HICON*)GlobalLock16(hRet);
+ hRet = GlobalAlloc16( GMEM_FIXED, sizeof(HICON16)*n);
+ RetPtr = (HICON16*)GlobalLock16(hRet);
*RetPtr = (n == 0xFFFF)? 0: 1; /* error return values */
@@ -495,7 +496,7 @@
if( nIconIndex == (UINT)-1 ) RetPtr[0] = iconDirCount;
else if( nIconIndex < iconDirCount )
{
- HANDLE hIcon;
+ HICON16 hIcon;
UINT i, icon;
if( n > iconDirCount - nIconIndex ) n = iconDirCount - nIconIndex;
@@ -531,14 +532,14 @@
/*************************************************************************
* ExtractIcon [SHELL.34]
*/
-HICON ExtractIcon(HINSTANCE hInstance, LPCSTR lpszExeFileName, WORD nIconIndex)
+HICON16 ExtractIcon(HINSTANCE hInstance, LPCSTR lpszExeFileName, WORD nIconIndex)
{
HANDLE handle = InternalExtractIcon(hInstance,lpszExeFileName,nIconIndex, 1);
if( handle )
{
- HICON* ptr = (HICON*)GlobalLock16(handle);
- HICON hIcon = *ptr;
+ HICON16* ptr = (HICON16*)GlobalLock16(handle);
+ HICON16 hIcon = *ptr;
GlobalFree16(handle);
return hIcon;