Release 960705
Fri Jul 5 16:27:43 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [controls/desktop.c]
Use Windows file I/O routines to load the desktop bitmap.
* [files/file.c]
Implemented RemoveDirectory* and DeleteFile*.
* [include/wine.h]
Added SIGCONTEXT typedef to replace #define sigcontext_struct.
* [loader/task.c]
Fixed initial breakpoint setting for Win32 tasks.
* [misc/wsprintf.c]
Ignore Unicode formats for wsprintf16().
* [objects/font.c]
Implemented Win32 version of GetTextMetrics.
* [windows/winproc.c] [windows/win.c] [windows/class.c]
[windows/dialog.c]
Modified windows procedures to use thunks, to ensure that the
procedure can be called directly from the Windows program.
* [windows/win.c]
Added function WIN_BuildWinArray() to make it easier to enumerate
windows. Implemented Win32 version of EnumWindows() and friends.
Fri Jul 5 11:56:22 1996 Andreas Kirschbaum <ank@rbg.informatik.th-darmstadt.de>
* [controls/button.c] [windows/win.c]
Operator precedence fixes.
* [controls/edit.c]
Implemented ES_PASSWORD, ES_LOWERCASE and ES_UPPERCASE styles.
Fixed word wrap with long words.
* [debugger/debug.l]
New alias "where" for command "backtrace".
* [if1632/gdi.spec]
Corrected parameter of ExtTextOut.
* [loader/module.c]
Corrected printing of table of modules.
* [misc/spy.c]
Removed superfluous \n in message name.
* [windows/message.c]
Declared MSG_SendMessage as static.
Changed parameter of DirectedYield() from queue handle to task handle.
Removed warning mesages for argument of printf.
* [windows/nonclient.c]
Added the flag DT_NOPREFIX when drawing window titles.
* [windows/win.c]
WIN_WalkWindows now prints the invalid window handle.
Added a warning if Get-/SetWindowWord/-Long gets an invalid offset.
* [windows/winproc.c]
Allows creating dialog windows with NULL as dialog function.
Wed Jul 3 09:26:41 1996 Andrew Lewycky <plewycky@oise.utoronto.ca>
* [windows/event.c]
EVENT_key: Fixes to VK_ code generation for space bar and
punctuation.
* [files/file.c]
GetTempFileName: first character in temporary name is "~".
* [memory/heap.c]
HEAP_MakeInUseBlockFree now frees the whole subheap if possible.
* [objects/text.c]
ExtTextOut16(): handle NULL lpRect and ETO_OPAQUE.
* [misc/driver.c]
Removed some bugs and reformatted. Actually loads drivers now.
* [include/callback.h]
Added CallDriverProc() and CallWindowsExitProc().
* [loader/module.c]
MODULE_CallWEP(): new function.
* [misc/lzexpand.c]
LZSeek(): return new pointer, not old one.
* [misc/ver.c]
find_ne_resource(): fixed dependence on LZSeek() bug.
GetFileResource(): initialize reslen before using it.
* [windows/class.c]
SetClassWord(): add missing else.
* [objects/font.c]
lpFontList is now MAX_FONTS+1. It used to overwrite the array.
InitFontList: allocate one huge array of structures.
FONT_MatchFont: uppercase the face name.
Thu Jun 27 12:41:40 1996 Bruce Milner <bruce@genetics.utah.edu>
* [memory/heap.c]
Fixed a typo in HeapReAlloc().
Tue Jun 25 22:22:03 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [files/directory.c] [files/drive.c] [if1632/kernel.spec]
[if1632/kernel32.spec] [if1632/shell.spec] [include/windows.h]
GetTempPath* added
GetDriveType* fixed, updated to NewNameStandard.
GetCurrentDirectory* fixed (needs to prepend X:\).
* [controls/listbox.c]
Missing NULL check added.
* [if1632/winmm.spec] [loader/builtin.c]
winmm.dll (32bit mmsystem equivalent) specs added.
* [memory/string.c] [if1632/kernel32.spec] [include/windows.h]
Rtl{Move,Zero,Fill}Memory added.
* [misc/registry.c]
Some NULL ptr dereference bugs fixed.
* [multimedia/mcicda.c][multimedia/mcistring.c][multimedia/mmsystem.c]
Check for NULL ptr.
Fill mciOpenDrv when mixing mciOpen and mciSendString("open ..").
Aliasing should work for all MCI devices.
* [windows/win.c]
Allow passing invalid window handles to CloseWindow().
Tue Jun 25 20:02:15 1996 Jukka Iivonen <iivonen@cc.helsinki.fi>
* [files/directory.c] [if1632/kernel32.spec]
GetSystemDirectory32A and GetSystemDirectory32W added.
* [misc/main.c] [if1632/kernel32.spec]
Beep and SetEnvironmentVariable32W added.
diff --git a/misc/driver.c b/misc/driver.c
index eb51ba9..6277f8a 100644
--- a/misc/driver.c
+++ b/misc/driver.c
@@ -2,14 +2,14 @@
* Wine Drivers functions
*
* Copyright 1994 Martin Ayotte
-static char Copyright[] = "Copyright Martin Ayotte, 1994";
*/
#include <stdio.h>
#include "windows.h"
#include "win.h"
-#include "user.h"
+#include "callback.h"
#include "driver.h"
+#include "module.h"
#include "stddebug.h"
#include "debug.h"
@@ -17,205 +17,294 @@
void LoadStartupDrivers(void)
{
- HDRVR hDrv;
- char str[256];
- LPSTR ptr = str;
- LPSTR file = "SYSTEM.INI";
- if (GetPrivateProfileString("drivers", NULL,
- "", str, sizeof(str), file) < 2) {
- fprintf(stderr,
- "LoadStartupDrivers // can't find drivers section in '%s'\n",
- file);
- return;
- }
- while(strlen(ptr) != 0) {
- dprintf_driver(stddeb,"LoadStartupDrivers // str='%s'\n", ptr);
- hDrv = OpenDriver(ptr, "drivers", 0L);
- dprintf_driver(stddeb,
- "LoadStartupDrivers // hDrv=%04x\n", hDrv);
- ptr += strlen(ptr) + 1;
- }
- dprintf_driver(stddeb,"LoadStartupDrivers // end of list !\n");
+ HDRVR16 hDrv;
+ char str[256];
+ LPSTR ptr;
+
+ if (GetPrivateProfileString( "drivers", NULL, "", str, sizeof(str),
+ "SYSTEM.INI" ) < 2)
+ {
+ fprintf( stderr,
+ "LoadStartupDrivers // can't find drivers section in system.ini\n" );
+ return;
+ }
+
+ ptr = str;
+ while (lstrlen32A( ptr ) != 0)
+ {
+ dprintf_driver( stddeb, "LoadStartupDrivers // str='%s'\n", ptr );
+ hDrv = OpenDriver( ptr, "drivers", 0L );
+ dprintf_driver( stddeb, "LoadStartupDrivers // hDrv=%04x\n", hDrv );
+ ptr += lstrlen32A(ptr) + 1;
+ }
+ dprintf_driver( stddeb, "LoadStartupDrivers // end of list !\n" );
+
+ return;
}
/**************************************************************************
* SendDriverMessage [USER.251]
*/
-LRESULT SendDriverMessage(HDRVR hDriver, WORD msg, LPARAM lParam1, LPARAM lParam2)
+LRESULT SendDriverMessage(HDRVR16 hDriver, UINT16 msg, LPARAM lParam1,
+ LPARAM lParam2)
{
- dprintf_driver(stdnimp,"SendDriverMessage(%04x, %04X, %08lX, %08lX);\n",
- hDriver, msg, lParam1, lParam2);
- return 0;
+ LPDRIVERITEM lpdrv;
+ LRESULT retval;
+
+ dprintf_driver( stddeb, "SendDriverMessage(%04x, %04X, %08lX, %08lX)\n",
+ hDriver, msg, lParam1, lParam2 );
+
+ lpdrv = (LPDRIVERITEM)GlobalLock16( hDriver );
+ if (lpdrv == NULL || lpdrv->dis.hDriver != hDriver)
+ {
+ GlobalUnlock16( hDriver );
+ return 0;
+ }
+
+ retval = CallDriverProc( lpdrv->lpDrvProc, 0L /* FIXME */, hDriver, msg,
+ lParam1, lParam2 );
+
+ dprintf_driver( stddeb, "SendDriverMessage // retval = %ld\n", retval );
+
+ GlobalUnlock16( hDriver );
+ return retval;
}
/**************************************************************************
* OpenDriver [USER.252]
*/
-HDRVR OpenDriver(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam)
+HDRVR16 OpenDriver(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam)
{
- HDRVR hDrvr;
- LPDRIVERITEM lpnewdrv;
- LPDRIVERITEM lpdrv = lpDrvItemList;
- char DrvName[128];
- dprintf_driver(stddeb,"OpenDriver('%s', '%s', %08lX);\n",
- lpDriverName, lpSectionName, lParam);
- if (lpSectionName == NULL) lpSectionName = "drivers";
- GetPrivateProfileString(lpSectionName, lpDriverName,
- "", DrvName, sizeof(DrvName), "SYSTEM.INI");
- dprintf_driver(stddeb,"OpenDriver // DrvName='%s'\n", DrvName);
- if (strlen(DrvName) < 1) return 0;
- while (lpdrv != NULL) {
- if (lpdrv->lpNextItem == NULL) break;
- lpdrv = lpdrv->lpNextItem;
- }
- hDrvr = GlobalAlloc16(GMEM_MOVEABLE, sizeof(DRIVERITEM));
- lpnewdrv = (LPDRIVERITEM) GlobalLock16(hDrvr);
- if (lpnewdrv == NULL) return 0;
- lpnewdrv->dis.length = sizeof(DRIVERINFOSTRUCT);
- lpnewdrv->dis.hModule = 0;
-/* lpnewdrv->dis.hModule = LoadImage(DrvName, DLL, 0);
- if (lpnewdrv->dis.hModule == 0) {
- GlobalUnlock(hDrvr);
- GlobalFree(hDrvr);
- return 0;
- } */
- lpnewdrv->dis.hDriver = hDrvr;
- strcpy(lpnewdrv->dis.szAliasName, lpDriverName);
- lpnewdrv->count = 0;
- lpnewdrv->lpNextItem = NULL;
- if (lpDrvItemList == NULL || lpdrv == NULL) {
- lpDrvItemList = lpnewdrv;
- lpnewdrv->lpPrevItem = NULL;
- }
- else {
- lpdrv->lpNextItem = lpnewdrv;
- lpnewdrv->lpPrevItem = lpdrv;
- }
- lpnewdrv->lpDrvProc = (DRIVERPROC)NULL;
- dprintf_driver(stddeb,"OpenDriver // hDrvr=%04x loaded !\n", hDrvr);
- return hDrvr;
+ HDRVR16 hDrvr;
+ LPDRIVERITEM lpdrv, lpnewdrv;
+ char DrvName[128];
+ WORD ordinal;
+
+ dprintf_driver( stddeb,"OpenDriver('%s', '%s', %08lX);\n",
+ lpDriverName, lpSectionName, lParam );
+
+ if (lpSectionName == NULL) lpSectionName = "drivers";
+ GetPrivateProfileString( lpSectionName, lpDriverName, "", DrvName,
+ sizeof(DrvName), "SYSTEM.INI" );
+ dprintf_driver( stddeb,"OpenDriver // DrvName='%s'\n", DrvName );
+ if (lstrlen32A(DrvName) < 1) return 0;
+
+ lpdrv = lpDrvItemList;
+ while (lpdrv) /* XXX find it... like this? */
+ {
+ if (!lstrcmpi32A( lpDriverName, lpdrv->dis.szAliasName ))
+ {
+ lpdrv->count++;
+ SendDriverMessage( lpdrv->dis.hDriver, DRV_OPEN, 0L, lParam );
+ return lpdrv->dis.hDriver;
+ }
+ lpdrv = lpdrv->lpNextItem;
+ }
+
+ lpdrv = lpDrvItemList; /* find end of list */
+ if (lpdrv != NULL)
+ while (lpdrv->lpNextItem != NULL)
+ lpdrv = lpdrv->lpNextItem;
+
+ hDrvr = GlobalAlloc16( GMEM_MOVEABLE, sizeof(DRIVERITEM) );
+ lpnewdrv = (LPDRIVERITEM)GlobalLock16( hDrvr );
+ if (lpnewdrv == NULL) return 0;
+ lpnewdrv->dis.length = sizeof( DRIVERINFOSTRUCT16 );
+ lpnewdrv->dis.hModule = LoadModule( DrvName, (LPVOID)-1 );
+ if (!lpnewdrv->dis.hModule)
+ {
+ GlobalUnlock16( hDrvr );
+ GlobalFree16( hDrvr );
+ return 0;
+ }
+ lpnewdrv->dis.hDriver = hDrvr;
+ lstrcpy32A( lpnewdrv->dis.szAliasName, lpDriverName );
+ lpnewdrv->count = 1;
+ ordinal = MODULE_GetOrdinal( lpnewdrv->dis.hModule, "DRIVERPROC" );
+ if (!ordinal ||
+ !(lpnewdrv->lpDrvProc = MODULE_GetEntryPoint( lpnewdrv->dis.hModule,
+ ordinal )))
+ {
+ FreeModule16( lpnewdrv->dis.hModule );
+ GlobalUnlock16( hDrvr );
+ GlobalFree16( hDrvr );
+ return 0;
+ }
+
+ lpnewdrv->lpNextItem = NULL;
+ if (lpDrvItemList == NULL)
+ {
+ lpDrvItemList = lpnewdrv;
+ lpnewdrv->lpPrevItem = NULL;
+ }
+ else
+ {
+ lpdrv->lpNextItem = lpnewdrv;
+ lpnewdrv->lpPrevItem = lpdrv;
+ }
+
+ SendDriverMessage( hDrvr, DRV_LOAD, 0L, lParam );
+ SendDriverMessage( hDrvr, DRV_ENABLE, 0L, lParam );
+ SendDriverMessage( hDrvr, DRV_OPEN, 0L, lParam );
+
+ dprintf_driver( stddeb, "OpenDriver // hDrvr=%04x loaded !\n", hDrvr );
+ return hDrvr;
}
/**************************************************************************
* CloseDriver [USER.253]
*/
-LRESULT CloseDriver(HDRVR hDrvr, LPARAM lParam1, LPARAM lParam2)
+LRESULT CloseDriver(HDRVR16 hDrvr, LPARAM lParam1, LPARAM lParam2)
{
- LPDRIVERITEM lpdrv;
- dprintf_driver(stddeb,
- "CloseDriver(%04x, %08lX, %08lX);\n", hDrvr, lParam1, lParam2);
- lpdrv = (LPDRIVERITEM) GlobalLock16(hDrvr);
- if (lpdrv != NULL && lpdrv->dis.hDriver == hDrvr) {
- if (lpdrv->lpPrevItem)
- ((LPDRIVERITEM)lpdrv->lpPrevItem)->lpNextItem = lpdrv->lpNextItem;
- if (lpdrv->lpNextItem)
- ((LPDRIVERITEM)lpdrv->lpNextItem)->lpPrevItem = lpdrv->lpPrevItem;
- GlobalUnlock16(hDrvr);
- GlobalFree16(hDrvr);
- dprintf_driver(stddeb,"CloseDriver // hDrvr=%04x closed !\n", hDrvr);
- return TRUE;
- }
- return FALSE;
+ LPDRIVERITEM lpdrv;
+
+ dprintf_driver( stddeb, "CloseDriver(%04x, %08lX, %08lX);\n",
+ hDrvr, lParam1, lParam2 );
+
+ lpdrv = (LPDRIVERITEM)GlobalLock16( hDrvr );
+ if (lpdrv != NULL && lpdrv->dis.hDriver == hDrvr)
+ {
+ SendDriverMessage( hDrvr, DRV_CLOSE, lParam1, lParam2 );
+ if (--lpdrv->count == 0)
+ {
+ SendDriverMessage( hDrvr, DRV_DISABLE, lParam1, lParam2 );
+ SendDriverMessage( hDrvr, DRV_FREE, lParam1, lParam2 );
+
+ if (lpdrv->lpPrevItem)
+ lpdrv->lpPrevItem->lpNextItem = lpdrv->lpNextItem;
+ else
+ lpDrvItemList = lpdrv->lpNextItem;
+ if (lpdrv->lpNextItem)
+ lpdrv->lpNextItem->lpPrevItem = lpdrv->lpPrevItem;
+
+ FreeModule16( lpdrv->dis.hModule );
+ GlobalUnlock16( hDrvr );
+ GlobalFree16( hDrvr );
+ }
+
+ dprintf_driver( stddeb, "CloseDriver // hDrvr=%04x closed !\n",
+ hDrvr );
+ return TRUE;
+ }
+ return FALSE;
}
/**************************************************************************
* GetDriverModuleHandle [USER.254]
*/
-HANDLE GetDriverModuleHandle(HDRVR hDrvr)
+HMODULE16 GetDriverModuleHandle(HDRVR16 hDrvr)
{
- LPDRIVERITEM lpdrv;
- HANDLE hModule = 0;
- dprintf_driver(stddeb,"GetDriverModuleHandle(%04x);\n", hDrvr);
- lpdrv = (LPDRIVERITEM) GlobalLock16(hDrvr);
- if (lpdrv != NULL) {
- hModule = lpdrv->dis.hModule;
- GlobalUnlock16(hDrvr);
- }
- return hModule;
+ LPDRIVERITEM lpdrv;
+ HMODULE hModule = 0;
+
+ dprintf_driver( stddeb, "GetDriverModuleHandle(%04x);\n", hDrvr);
+
+ lpdrv = (LPDRIVERITEM)GlobalLock16( hDrvr );
+ if (lpdrv != NULL && lpdrv->dis.hDriver == hDrvr)
+ {
+ hModule = lpdrv->dis.hModule;
+ GlobalUnlock16( hDrvr );
+ }
+ return hModule;
}
/**************************************************************************
* DefDriverProc [USER.255]
*/
-LRESULT DefDriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
- DWORD dwParam1, DWORD dwParam2)
+LRESULT DefDriverProc(DWORD dwDevID, HDRVR hDriv, UINT16 wMsg,
+ LPARAM lParam1, LPARAM lParam2)
{
- switch(wMsg) {
- case DRV_LOAD:
- return (LRESULT)0L;
- case DRV_FREE:
- return (LRESULT)0L;
- case DRV_OPEN:
- return (LRESULT)0L;
- case DRV_CLOSE:
- return (LRESULT)0L;
- case DRV_ENABLE:
- return (LRESULT)0L;
- case DRV_DISABLE:
- return (LRESULT)0L;
- case DRV_QUERYCONFIGURE:
- return (LRESULT)0L;
- case DRV_CONFIGURE:
- MessageBox((HWND)NULL, "Driver isn't configurable !",
- "Wine Driver", MB_OK);
- return (LRESULT)0L;
- case DRV_INSTALL:
- return (LRESULT)DRVCNF_RESTART;
- case DRV_REMOVE:
- return (LRESULT)DRVCNF_RESTART;
- default:
- return (LRESULT)0L;
- }
+ switch(wMsg)
+ {
+ case DRV_LOAD:
+ return (LRESULT)0L;
+ case DRV_FREE:
+ return (LRESULT)0L;
+ case DRV_OPEN:
+ return (LRESULT)0L;
+ case DRV_CLOSE:
+ return (LRESULT)0L;
+ case DRV_ENABLE:
+ return (LRESULT)0L;
+ case DRV_DISABLE:
+ return (LRESULT)0L;
+ case DRV_QUERYCONFIGURE:
+ return (LRESULT)0L;
+
+ case DRV_CONFIGURE:
+ MessageBox( (HWND)NULL, "Driver isn't configurable !",
+ "Wine Driver", MB_OK );
+ return (LRESULT)0L;
+
+ case DRV_INSTALL:
+ return (LRESULT)DRVCNF_RESTART;
+
+ case DRV_REMOVE:
+ return (LRESULT)DRVCNF_RESTART;
+
+ default:
+ return (LRESULT)0L;
+ }
}
/**************************************************************************
* GetDriverInfo [USER.256]
*/
-BOOL GetDriverInfo(HDRVR hDrvr, LPDRIVERINFOSTRUCT lpDrvInfo)
+BOOL16 GetDriverInfo(HDRVR16 hDrvr, LPDRIVERINFOSTRUCT16 lpDrvInfo)
{
- LPDRIVERITEM lpdrv;
- dprintf_driver(stddeb,"GetDriverInfo(%04x, %p);\n", hDrvr, lpDrvInfo);
- if (lpDrvInfo == NULL) return FALSE;
- lpdrv = (LPDRIVERITEM) GlobalLock16(hDrvr);
- if (lpdrv == NULL) return FALSE;
- memcpy(lpDrvInfo, &lpdrv->dis, sizeof(DRIVERINFOSTRUCT));
- GlobalUnlock16(hDrvr);
- return TRUE;
+ LPDRIVERITEM lpdrv;
+
+ dprintf_driver( stddeb, "GetDriverInfo(%04x, %p);\n", hDrvr, lpDrvInfo );
+
+ if (lpDrvInfo == NULL) return FALSE;
+
+ lpdrv = (LPDRIVERITEM)GlobalLock16( hDrvr );
+ if (lpdrv == NULL) return FALSE;
+ memcpy( lpDrvInfo, &lpdrv->dis, sizeof(DRIVERINFOSTRUCT16) );
+ GlobalUnlock16( hDrvr );
+
+ return TRUE;
}
/**************************************************************************
* GetNextDriver [USER.257]
*/
-HDRVR GetNextDriver(HDRVR hDrvr, DWORD dwFlags)
+HDRVR16 GetNextDriver(HDRVR16 hDrvr, DWORD dwFlags)
{
- LPDRIVERITEM lpdrv;
- HDRVR hRetDrv = 0;
- dprintf_driver(stddeb,"GetNextDriver(%04x, %08lX);\n", hDrvr, dwFlags);
- if (hDrvr == 0) {
- if (lpDrvItemList == NULL) {
- dprintf_driver(stddeb,
- "GetNextDriver // drivers list empty !\n");
- LoadStartupDrivers();
- if (lpDrvItemList == NULL) return 0;
- }
- dprintf_driver(stddeb,"GetNextDriver // return first %04x !\n",
- lpDrvItemList->dis.hDriver);
- return lpDrvItemList->dis.hDriver;
- }
- lpdrv = (LPDRIVERITEM) GlobalLock16(hDrvr);
- if (lpdrv != NULL) {
- if (dwFlags & GND_REVERSE) {
- if (lpdrv->lpPrevItem)
- hRetDrv = ((LPDRIVERITEM)lpdrv->lpPrevItem)->dis.hDriver;
- }
- else {
- if (lpdrv->lpNextItem)
- hRetDrv = ((LPDRIVERITEM)lpdrv->lpNextItem)->dis.hDriver;
- }
- GlobalUnlock16(hDrvr);
- }
- dprintf_driver(stddeb,"GetNextDriver // return %04x !\n", hRetDrv);
- return hRetDrv;
+ LPDRIVERITEM lpdrv;
+ HDRVR16 hRetDrv = 0;
+
+ dprintf_driver( stddeb, "GetNextDriver(%04x, %08lX);\n", hDrvr, dwFlags );
+
+ if (hDrvr == 0)
+ {
+ if (lpDrvItemList == NULL)
+ {
+ dprintf_driver(stddeb, "GetNextDriver // drivers list empty !\n");
+ LoadStartupDrivers();
+ if (lpDrvItemList == NULL) return 0;
+ }
+ dprintf_driver( stddeb,"GetNextDriver // return first %04x !\n",
+ lpDrvItemList->dis.hDriver );
+ return lpDrvItemList->dis.hDriver;
+ }
+
+ lpdrv = (LPDRIVERITEM)GlobalLock16( hDrvr );
+ if (lpdrv != NULL)
+ {
+ if (dwFlags & GND_REVERSE)
+ {
+ if (lpdrv->lpPrevItem)
+ hRetDrv = lpdrv->lpPrevItem->dis.hDriver;
+ }
+ else
+ {
+ if (lpdrv->lpNextItem)
+ hRetDrv = lpdrv->lpNextItem->dis.hDriver;
+ }
+ GlobalUnlock16( hDrvr );
+ }
+
+ dprintf_driver( stddeb, "GetNextDriver // return %04x !\n", hRetDrv );
+ return hRetDrv;
}
-
-