Release 960728
Sun Jul 28 17:57:19 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [loader/task.c] [include/task.h]
Implemented SwitchStackTo()/SwitchStackBack().
* [include/wintypes.h] [loader/main.c]
Added __winelib variable to distinguish between emulator and
library at run-time. Later on, this should avoid some
recompilations when building Winelib.
* [windows/property.c]
Implemented Win32 functions for window properties.
Fri Jul 26 18:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [controls/listbox.c]
Implemented LBS_SORT style, WM_COMPAREITEM, and WM_DELETEITEM
messages.
* [controls/menu.c]
Call TranslateMessage() to enable shortcuts (on WM_CHAR).
* [include/cursoricon.h]
Moved #pragma pack(1) back to where it belongs.
* [objects/palette.c]
RealizeDefaultPalette() maps to system colors only.
Do not broadcast palette notifications when in TrueColor.
* [objects/color.c] [include/palette.h]
Miscellaneous optimizations. Had to fix several
"improvements" made to my patch for previous release.
* [objects/dib.c]
Reverse dib bits order for 24-bit SetDIBits().
* [objects/dc.c]
GetDeviceCaps() does not return RC_PALETTE when in TrueColor.
* [windows/scroll.c]
Scroll update region too.
* [windows/message.c]
Include QS_MOUSE into the event mask for nonclient mouse
message filter. Fixes problems with Word 6 freezing when
mouse hits nonclient area.
* [windows/win.c]
Allow top-level windows to be linked as HWND_TOP in CreateWindow().
* [windows/winpos.c] [windows/mdi.c]
Attempt to fix control menu duplication.
Fri Jul 26 09:49:35 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/drive.c]
GetDriveType32A(): return value for CDROM fixed.
* [files/file.c]
SearchPath* added.
* [if1632/gdi32.spec] [objects/brush.c]
SetBrushOrgEx() added.
* [loader/pe_resource.c]
If even loading the default entry fails, we just use the first
entry from the resource directory.
[loader/task.c]
SetSigHandler() stub added, Paradox 4.5 now starts up.
* [misc/comm.c] [include/windows.h] [if1632/kernel32.spec]
COMM functions updated to win32, not complete.
* [misc/lstr.c]
FormatMessageA partially implemented.
* [include/miscemu.h] [memory/selector.c]
[memory/global.c] [miscemu/dosmem.c]
DOS memory handling changed: 1MB preallocated block, real-mode
segment handling possible, SetSelectorBase into lower physical 1MB
possible.
* [miscemu/dpmi.c]
Real-mode segments changed, real-mode int 21,ax=6506 added.
AX=0x0303 added.
* [multimedia/time.c]
Fixed bug in killTimer.
* [objects/bitmap.c]
LoadImageA partially implemented.
Wed Jul 24 18:20:24 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/dde_mem.h][include/dde_proc.h]
[ipc/dde_atom.c][ipc/dde_proc.c][windows/message.c]
[ipc/generic_hash.h][library/miscstubs.c]
Changes for error free compilation using "--with-ipc":
replaced some names with *16-equivalent (e.g. MSG to MSG16),
modified prototype of function DDE_GlobalFree() .
* [objects/palette.c]
Added check for metafile-DC in GDISelectPalette(),
GDIRealizePalette(),RealizeDefaultPalette() and
IsDCCurrentPalette().
Tue Jul 23 22:46:53 1996 Andrew Lewycky <plewycky@oise.utoronto.ca>
* [controls/edit.c]
EDIT_WM_Create: Don't EDIT_EM_ReplaceSel if created with lParam = "",
fixes Winhelp.
* [windows/dialog.c]
DIALOG_CreateIndirect: Initialise dlgProc before creating children.
diff --git a/files/drive.c b/files/drive.c
index fb15297..f85c149 100644
--- a/files/drive.c
+++ b/files/drive.c
@@ -557,7 +557,7 @@
{
case TYPE_FLOPPY: return DRIVE_REMOVABLE;
case TYPE_HD: return DRIVE_FIXED;
- case TYPE_CDROM: return DRIVE_REMOVABLE;
+ case TYPE_CDROM: return DRIVE_CDROM;
case TYPE_NETWORK: return DRIVE_REMOTE;
case TYPE_INVALID:
default: return DRIVE_CANNOTDETERMINE;
diff --git a/files/file.c b/files/file.c
index 7d30397..2ea02e3 100644
--- a/files/file.c
+++ b/files/file.c
@@ -802,6 +802,121 @@
return HFILE_ERROR;
}
+/***********************************************************************
+ * SearchPath32A (KERNEL32.447)
+ * Code borrowed from OpenFile above.
+ */
+DWORD SearchPath32A(
+ LPCSTR path,LPCSTR fn,LPCSTR ext,DWORD buflen,LPSTR buf,LPSTR *lastpart
+) {
+ LPCSTR unixName;
+ INT32 len;
+ char testpath[1000]; /* should be enough for now */
+ char *name,*p;
+ int i;
+
+ if (ext==NULL)
+ ext = "";
+ name=(char*)xmalloc(strlen(fn)+strlen(ext)+1);
+ strcpy(name,fn);
+ strcat(name,ext);
+
+ dprintf_file(stddeb,"SearchPath32A(%s,%s,%s,%ld,%p,%p)\n",
+ path,fn,ext,buflen,buf,lastpart
+ );
+ if (path) {
+ strcpy(testpath,path);
+ strcat(testpath,"\\");
+ strcat(testpath,name);
+ if ((unixName=DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE))!=NULL) {
+ goto found;
+ } else
+ return 0;
+ }
+ if ((len=sizeof(testpath)-strlen(name)-1)<0)
+ return 0;
+
+ /* Try the path of the current executable */
+ if (GetCurrentTask()) {
+ GetModuleFileName(GetCurrentTask(),testpath,len);
+ if ((p=strrchr(testpath,'\\'))) {
+ strcpy(p+1,name);
+ if ((unixName=DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE)))
+ goto found;
+ }
+ }
+
+ /* Try the current directory */
+ lstrcpyn32A(testpath,name,sizeof(testpath) );
+ if ((unixName=DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE))!=NULL)
+ goto found;
+
+ /* Try the Windows directory */
+ GetWindowsDirectory(testpath,len);
+ strcat(testpath,"\\");
+ strcat(testpath,name);
+ if ((unixName = DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE))!=NULL)
+ goto found;
+
+ /* Try the Windows system directory */
+ GetSystemDirectory32A(testpath,len);
+ strcat(testpath,"\\");
+ strcat(testpath,name);
+ if ((unixName=DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE))!=NULL)
+ goto found;
+
+ /* Try all directories in path */
+
+ for (i=0;;i++)
+ {
+ if (!DIR_GetDosPath(i,testpath,len))
+ return 0;
+ strcat(testpath,"\\");
+ strcat(testpath,name);
+ if ((unixName=DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE))!=NULL)
+ break;
+ }
+
+found:
+ strncpy(buf,testpath,buflen);
+ if (NULL!=(p=strrchr(testpath,'\\')))
+ p=p+1;
+ else
+ p=testpath;
+ if (p-testpath<buflen)
+ *lastpart=(p-testpath)+buf;
+ else
+ *lastpart=NULL;
+ dprintf_file(stddeb," -> found %s,last part is %s\n",testpath,p);
+ return strlen(testpath);
+}
+
+/***********************************************************************
+ * SearchPath32W (KERNEL32.448)
+ */
+DWORD SearchPath32W(
+ LPCWSTR path,LPCWSTR fn,LPCWSTR ext,DWORD buflen,LPWSTR buf,
+ LPWSTR *lastpart
+) {
+ LPSTR pathA = path?STRING32_DupUniToAnsi(path):NULL;
+ LPSTR fnA = STRING32_DupUniToAnsi(fn);
+ LPSTR extA = ext?STRING32_DupUniToAnsi(fn):NULL;
+ LPSTR lastpartA;
+ LPSTR bufA = (char*)xmalloc(buflen+1);
+ DWORD ret;
+
+ ret=SearchPath32A(pathA,fnA,extA,buflen,bufA,&lastpartA);
+ lstrcpynAtoW(buf,bufA,buflen);
+ if (lastpartA)
+ *lastpart = buf+(lastpartA-bufA);
+ else
+ *lastpart = NULL;
+ free(bufA);
+ free(fnA);
+ if (pathA) free(pathA);
+ if (extA) free(extA);
+ return ret;
+}
/***********************************************************************
* _lclose (KERNEL.81) (KERNEL32.592)