1994-12-10 14:02:28 +01:00
|
|
|
/*
|
Release 950522
Sun May 21 12:30:30 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [debugger/hash.c] [debugger/info.c]
Added support for symbolic segmented addresses. Add symbols for all
built-in API entry points.
* [if1632/relay.c] [include/dlls.h]
Removed dll_table structure, as we now use the built-in module
structures.
* [if1632/relay.c] [loader/main.c]
Removed winestat option, as it was no longer very meaningful.
* [include/stackframe.h]
New macro MAKE_SEGPTR that creates a segmented pointer to a local
variable on the 32-bit stack.
* [loader/module.c]
Added support for multiple instances of an application.
Implemented LoadModule() and FreeModule().
* [loader/ne_image.c] [loader/task.c]
Moved initialisation of built-in DLLs to InitTask().
* [memory/global.c]
Implemented discardable blocks.
* [misc/file.c]
Search path of current executable in OpenFile().
Fixed bug with searching in Windows path.
* [misc/lstr.c]
Hard-coded translation tables for Ansi<->Oem.
* [misc/user.c]
Moved some global initializations to InitApp(), because they need
a task context to be performed.
* [objects/dc.c]
Handle R2_BLACK and R2_WHITE specially so that they work correctly
with palette displays.
* [tools/build.c]
Suppressed generation of the C file for DLL specs, because it's no
longer needed. Output all the assembly code directly to stdout.
Some changes to integrate Win32 support from Martin von Loewis.
* [windows/msgbox.c]
Moved message box code from misc/ to windows/.
Mon May 15 23:40:04 1995 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c] [misc/mcicda.c] [misc/mcianim.c] [misc/midi.c]
[misc/mmaux.c] [misc/mmsystem.c]
Modify code & use pointers conversion macros.
Make cdaudio & wave devices work again (only using some applets).
* [misc/profile.c]
Change getc() to fgetc() where needed.
Mon May 15 22:10:56 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/Imakefile]
added entries for the new files gdi32.spec, kernel32.spec,
user32.spec, shell32.spec and winprocs32.spec.
* [if1632/commdlg.spec][if1632/kernel.spec][if1632/shell.spec]
[if1632/storage.spec][if1632/system.spec][if1632/user.spec]
ChooseFont, RESERVED5, InternalExtractIcon: Marked as stubs
ExtractAssociatedIcon, DoEnvironmentSubst, DumpIcon:
stub implementations provided
marked storage.dll,storege.sys functions as stubs
* [include/pe_image.h]
Added structures WIN32_builtin and WIN32_function
* [include/peexe.h]
PE_Import_Directory: renamed reserved fields to
TimeDate, Forwarder, Thunk_List
* [include/winerror.h]
New file.
* [loader/main.c]
called RELAY32_Init
* [loader/pe_image.c]
xmmap: map BSS anonymous
dump_imports: renamed to fixup_imports, do the fixup of imported
symbols
PE_LoadImage: pass raw data size to xmmap
* [loader/resource.c]
DumpIcon: new function
* [misc/kernel32.c]
New file.
* [misc/main.c]
make stdout and stderr unbuffered
* [misc/shell.c]
DoEnvironmentSubst: new function
* [objects/font.c]
FONT_MatchFont: try oblique if there is no italic
* [rc/Imakefile][rc/parser.l]
yywrap: new function
Don't link with libfl.a on Linux
* [tools/build.c]
Added keywords stdcall, subsystem, base
GenerateForWin32: new function
BuildSpecFiles: call GenerateForWin32 if subsystem is win32
Mon May 15 10:38:14 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c] [controls/combo.c] [windows/defwnd.c]
Minor fixes.
* [misc/message.c] [misc/main.c] [rc/sysres*.rc] [include/texts.h]
Rewrote message box handling.
* [windows/dialog.c]
Dialogs should be invisible until after WM_INITDIALOG is seent.
Don't switch to invisible dialog items on a TAB keypress.
* [windows/mdi.c]
Send WM_NCPAINT message in MDIRestoreChild().
* [windows/painting.c]
Fixed typo (&& -> &).
* [windows/message.c] [if1632/user.spec]
Implemented PostAppMessage().
* [windows/event.c]
SetCapture(0) should act like ReleaseCapture().
Tue May 9 11:55:52 1995 Eddie C. Dost (ecd@dressler.de)
* [Imakefile]
Changed CDEBUGFLAGS for systems running __ELF__ (temporarily)
Added ASFLAGS to exported variables.
* [debugger/readline/Imakefile]
Moved defines for libreadline from DEFINES to EXTRA_DEFINES
* [memory/local.c] [miscemu/int21.c]
Added some more debugging outputs.
Mon May 8 00:55:27 MET DST 1995 Dag Asheim (dash@ifi.uio.no)
* [misc/message.c]
Fixed a "FIXME" concerning norwegian translation.
Sun May 7 23:25:23 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [*/*]
Removed warnings in a couple of files and deleted some obsolete code.
* [controls/listbox.c]
Cleanup, speed improvements & lots of bug fixes.
* [controls/combo.c]
Mostly rewritten. This is still very buggy, but not quite as bad as
before.
* [include/commdlg.h] [misc/commdlg.c]
Removed the need for sysres.dll. Small bug fixes.
* [objects/oembitmap.c] [include/bitmaps/<many>] [include/windows.h]
[loader/library.c] [loader/main.c] [rc/sysres*.rc]
Removed sysres.dll and replaced the remaining bitmaps/icons with
XPM equivalents.
* [misc/message.c] [windows/nonclient.c] [misc/main.c]
[if1632/winprocs.spec]
"About Wine..." now brings up a standard ShellAbout() window with
the Wine icon and the list of contributors.
* [misc/shell.c]
Fixed ShellAbout()/AboutDialogProc() to show the right icon.
* [windows/event.c]
Small hack for non-alphanumeric keys: Dont't send the ascii value in
the WM_KEYDOWN message, but some unused code instead. Should be done
properly by sending different codes for each key. The edit control
used to get a VK_DELETE message each time the user typed '.'.
* [windows/class.c]
Removed a check for CS_GLOBALCLASS in CLASS_FindClassByName().
This used to be no problem, but breaks Resource Workshop in 950403.
* [objects/dib.c]
New diagnostic for a bug I've been encountering. If it shows up,
please report it.
Sun May 7 23:11:18 EDT 1995 William Magro (wmagro@tc.cornell.edu)
* [objects/color.c]
Handle situation when 'dc' exists, but palette mapping
does not. (Fixes kidpix2 demo.)
Sun May 7 03:32:00 1995 Charles M. Hannum (mycroft@mit.edu)
* [loader/ldt.c]
LDT_Print: Only show the number of entries that the kernel
returned. Make this work for NetBSD.
Fri May 5 02:53:26 1995 Charles M. Hannum (mycroft@mit.edu)
* [debugger/dbg.y] [include/wine.h] [loader/signal.c]
Modify cs and ds selector values for NetBSD-current.
* [debugger/debug.l]
$sp, $esp: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [debugger/regpos.h]
Modify sigcontext format for NetBSD-current.
SC_ESP: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [include/ldt.h]
SELECTOR_TO_ENTRY: Explicitly clear the top half of the selector
value, since only 16 bits of it may have been saved.
* [misc/winsocket.c]
Set structure packing with `#pragma pack' to accomodate
other/older compilers.
Tue May 2 18:15:01 1995 Paal Beyer (beyer@idt.unit.no)
* [misc/commdlg.c]
Fixed path-names so when changing directory the listboxes
changes too.
* [debugger/dbg.y debugger/debug.l wine.ini]
Added SymbolTableFile to wine.ini so symbols can be read
without standing in the directory containing wine.sym.
Added the possibility to specify full name of wine.sym from
the debugger prompt.
1995-05-22 20:23:01 +02:00
|
|
|
* Copyright 1993 Robert J. Amstadt
|
|
|
|
* Copyright 1995 Alexandre Julliard
|
2010-01-05 14:26:05 +01:00
|
|
|
* Copyright 2002 Jukka Heinonen
|
2002-03-10 00:29:33 +01:00
|
|
|
*
|
|
|
|
* This library is free software; you can redistribute it and/or
|
|
|
|
* modify it under the terms of the GNU Lesser General Public
|
|
|
|
* License as published by the Free Software Foundation; either
|
|
|
|
* version 2.1 of the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* This library is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
|
|
|
* Lesser General Public License for more details.
|
|
|
|
*
|
|
|
|
* You should have received a copy of the GNU Lesser General Public
|
|
|
|
* License along with this library; if not, write to the Free Software
|
2006-05-18 14:49:52 +02:00
|
|
|
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301, USA
|
Release 950522
Sun May 21 12:30:30 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [debugger/hash.c] [debugger/info.c]
Added support for symbolic segmented addresses. Add symbols for all
built-in API entry points.
* [if1632/relay.c] [include/dlls.h]
Removed dll_table structure, as we now use the built-in module
structures.
* [if1632/relay.c] [loader/main.c]
Removed winestat option, as it was no longer very meaningful.
* [include/stackframe.h]
New macro MAKE_SEGPTR that creates a segmented pointer to a local
variable on the 32-bit stack.
* [loader/module.c]
Added support for multiple instances of an application.
Implemented LoadModule() and FreeModule().
* [loader/ne_image.c] [loader/task.c]
Moved initialisation of built-in DLLs to InitTask().
* [memory/global.c]
Implemented discardable blocks.
* [misc/file.c]
Search path of current executable in OpenFile().
Fixed bug with searching in Windows path.
* [misc/lstr.c]
Hard-coded translation tables for Ansi<->Oem.
* [misc/user.c]
Moved some global initializations to InitApp(), because they need
a task context to be performed.
* [objects/dc.c]
Handle R2_BLACK and R2_WHITE specially so that they work correctly
with palette displays.
* [tools/build.c]
Suppressed generation of the C file for DLL specs, because it's no
longer needed. Output all the assembly code directly to stdout.
Some changes to integrate Win32 support from Martin von Loewis.
* [windows/msgbox.c]
Moved message box code from misc/ to windows/.
Mon May 15 23:40:04 1995 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c] [misc/mcicda.c] [misc/mcianim.c] [misc/midi.c]
[misc/mmaux.c] [misc/mmsystem.c]
Modify code & use pointers conversion macros.
Make cdaudio & wave devices work again (only using some applets).
* [misc/profile.c]
Change getc() to fgetc() where needed.
Mon May 15 22:10:56 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/Imakefile]
added entries for the new files gdi32.spec, kernel32.spec,
user32.spec, shell32.spec and winprocs32.spec.
* [if1632/commdlg.spec][if1632/kernel.spec][if1632/shell.spec]
[if1632/storage.spec][if1632/system.spec][if1632/user.spec]
ChooseFont, RESERVED5, InternalExtractIcon: Marked as stubs
ExtractAssociatedIcon, DoEnvironmentSubst, DumpIcon:
stub implementations provided
marked storage.dll,storege.sys functions as stubs
* [include/pe_image.h]
Added structures WIN32_builtin and WIN32_function
* [include/peexe.h]
PE_Import_Directory: renamed reserved fields to
TimeDate, Forwarder, Thunk_List
* [include/winerror.h]
New file.
* [loader/main.c]
called RELAY32_Init
* [loader/pe_image.c]
xmmap: map BSS anonymous
dump_imports: renamed to fixup_imports, do the fixup of imported
symbols
PE_LoadImage: pass raw data size to xmmap
* [loader/resource.c]
DumpIcon: new function
* [misc/kernel32.c]
New file.
* [misc/main.c]
make stdout and stderr unbuffered
* [misc/shell.c]
DoEnvironmentSubst: new function
* [objects/font.c]
FONT_MatchFont: try oblique if there is no italic
* [rc/Imakefile][rc/parser.l]
yywrap: new function
Don't link with libfl.a on Linux
* [tools/build.c]
Added keywords stdcall, subsystem, base
GenerateForWin32: new function
BuildSpecFiles: call GenerateForWin32 if subsystem is win32
Mon May 15 10:38:14 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c] [controls/combo.c] [windows/defwnd.c]
Minor fixes.
* [misc/message.c] [misc/main.c] [rc/sysres*.rc] [include/texts.h]
Rewrote message box handling.
* [windows/dialog.c]
Dialogs should be invisible until after WM_INITDIALOG is seent.
Don't switch to invisible dialog items on a TAB keypress.
* [windows/mdi.c]
Send WM_NCPAINT message in MDIRestoreChild().
* [windows/painting.c]
Fixed typo (&& -> &).
* [windows/message.c] [if1632/user.spec]
Implemented PostAppMessage().
* [windows/event.c]
SetCapture(0) should act like ReleaseCapture().
Tue May 9 11:55:52 1995 Eddie C. Dost (ecd@dressler.de)
* [Imakefile]
Changed CDEBUGFLAGS for systems running __ELF__ (temporarily)
Added ASFLAGS to exported variables.
* [debugger/readline/Imakefile]
Moved defines for libreadline from DEFINES to EXTRA_DEFINES
* [memory/local.c] [miscemu/int21.c]
Added some more debugging outputs.
Mon May 8 00:55:27 MET DST 1995 Dag Asheim (dash@ifi.uio.no)
* [misc/message.c]
Fixed a "FIXME" concerning norwegian translation.
Sun May 7 23:25:23 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [*/*]
Removed warnings in a couple of files and deleted some obsolete code.
* [controls/listbox.c]
Cleanup, speed improvements & lots of bug fixes.
* [controls/combo.c]
Mostly rewritten. This is still very buggy, but not quite as bad as
before.
* [include/commdlg.h] [misc/commdlg.c]
Removed the need for sysres.dll. Small bug fixes.
* [objects/oembitmap.c] [include/bitmaps/<many>] [include/windows.h]
[loader/library.c] [loader/main.c] [rc/sysres*.rc]
Removed sysres.dll and replaced the remaining bitmaps/icons with
XPM equivalents.
* [misc/message.c] [windows/nonclient.c] [misc/main.c]
[if1632/winprocs.spec]
"About Wine..." now brings up a standard ShellAbout() window with
the Wine icon and the list of contributors.
* [misc/shell.c]
Fixed ShellAbout()/AboutDialogProc() to show the right icon.
* [windows/event.c]
Small hack for non-alphanumeric keys: Dont't send the ascii value in
the WM_KEYDOWN message, but some unused code instead. Should be done
properly by sending different codes for each key. The edit control
used to get a VK_DELETE message each time the user typed '.'.
* [windows/class.c]
Removed a check for CS_GLOBALCLASS in CLASS_FindClassByName().
This used to be no problem, but breaks Resource Workshop in 950403.
* [objects/dib.c]
New diagnostic for a bug I've been encountering. If it shows up,
please report it.
Sun May 7 23:11:18 EDT 1995 William Magro (wmagro@tc.cornell.edu)
* [objects/color.c]
Handle situation when 'dc' exists, but palette mapping
does not. (Fixes kidpix2 demo.)
Sun May 7 03:32:00 1995 Charles M. Hannum (mycroft@mit.edu)
* [loader/ldt.c]
LDT_Print: Only show the number of entries that the kernel
returned. Make this work for NetBSD.
Fri May 5 02:53:26 1995 Charles M. Hannum (mycroft@mit.edu)
* [debugger/dbg.y] [include/wine.h] [loader/signal.c]
Modify cs and ds selector values for NetBSD-current.
* [debugger/debug.l]
$sp, $esp: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [debugger/regpos.h]
Modify sigcontext format for NetBSD-current.
SC_ESP: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [include/ldt.h]
SELECTOR_TO_ENTRY: Explicitly clear the top half of the selector
value, since only 16 bits of it may have been saved.
* [misc/winsocket.c]
Set structure packing with `#pragma pack' to accomodate
other/older compilers.
Tue May 2 18:15:01 1995 Paal Beyer (beyer@idt.unit.no)
* [misc/commdlg.c]
Fixed path-names so when changing directory the listboxes
changes too.
* [debugger/dbg.y debugger/debug.l wine.ini]
Added SymbolTableFile to wine.ini so symbols can be read
without standing in the directory containing wine.sym.
Added the possibility to specify full name of wine.sym from
the debugger prompt.
1995-05-22 20:23:01 +02:00
|
|
|
*/
|
1993-06-29 18:33:12 +02:00
|
|
|
|
2002-08-29 01:42:34 +02:00
|
|
|
#include "config.h"
|
|
|
|
#include "wine/port.h"
|
|
|
|
|
1997-10-12 18:30:17 +02:00
|
|
|
#include <assert.h>
|
1997-07-20 18:23:21 +02:00
|
|
|
#include <stdlib.h>
|
1999-02-19 11:37:02 +01:00
|
|
|
#include <string.h>
|
2003-09-06 01:08:26 +02:00
|
|
|
#include <stdarg.h>
|
2001-12-15 00:14:22 +01:00
|
|
|
#include <stdio.h>
|
|
|
|
|
2002-12-10 23:56:43 +01:00
|
|
|
#include "windef.h"
|
2003-09-06 01:08:26 +02:00
|
|
|
#include "winbase.h"
|
1999-02-19 11:37:02 +01:00
|
|
|
#include "wine/winbase16.h"
|
2005-06-06 22:00:14 +02:00
|
|
|
#include "winternl.h"
|
2005-05-16 21:44:54 +02:00
|
|
|
#include "kernel16_private.h"
|
2010-01-05 14:26:05 +01:00
|
|
|
#include "dosexe.h"
|
2003-09-29 22:42:24 +02:00
|
|
|
#include "wine/unicode.h"
|
2002-05-16 22:32:16 +02:00
|
|
|
#include "wine/library.h"
|
2002-03-10 00:29:33 +01:00
|
|
|
#include "wine/debug.h"
|
1994-12-10 14:02:28 +01:00
|
|
|
|
2002-03-10 00:29:33 +01:00
|
|
|
WINE_DEFAULT_DEBUG_CHANNEL(relay);
|
1999-04-19 16:56:29 +02:00
|
|
|
|
2010-01-05 14:26:05 +01:00
|
|
|
/*
|
|
|
|
* Magic DWORD used to check stack integrity.
|
|
|
|
*/
|
|
|
|
#define RELAY_MAGIC 0xabcdef00
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Memory block for temporary 16-bit stacks used with relay calls.
|
|
|
|
*/
|
|
|
|
typedef struct {
|
|
|
|
DWORD inuse; /* non-zero if stack block is in use */
|
|
|
|
DWORD eip; /* saved ip */
|
|
|
|
DWORD seg_cs; /* saved cs */
|
|
|
|
DWORD esp; /* saved sp */
|
|
|
|
DWORD seg_ss; /* saved ss */
|
|
|
|
DWORD stack_bottom; /* guard dword */
|
|
|
|
BYTE stack[256-7*4]; /* 16-bit stack */
|
|
|
|
DWORD stack_top; /* guard dword */
|
|
|
|
} RELAY_Stack16;
|
|
|
|
|
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
static const WCHAR **debug_relay_excludelist;
|
|
|
|
static const WCHAR **debug_relay_includelist;
|
|
|
|
static const WCHAR **debug_snoop_excludelist;
|
|
|
|
static const WCHAR **debug_snoop_includelist;
|
|
|
|
|
2003-10-16 02:24:49 +02:00
|
|
|
/* compare an ASCII and a Unicode string without depending on the current codepage */
|
2007-03-17 11:22:45 +01:00
|
|
|
static inline int strcmpiAW( const char *strA, const WCHAR *strW )
|
2003-10-16 02:24:49 +02:00
|
|
|
{
|
|
|
|
while (*strA && (toupperW((unsigned char)*strA) == toupperW(*strW))) { strA++; strW++; }
|
|
|
|
return toupperW((unsigned char)*strA) - toupperW(*strW);
|
|
|
|
}
|
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
/* compare an ASCII and a Unicode string without depending on the current codepage */
|
2007-03-17 11:22:45 +01:00
|
|
|
static inline int strncmpiAW( const char *strA, const WCHAR *strW, int n )
|
2000-11-25 04:09:30 +01:00
|
|
|
{
|
2003-10-09 00:41:12 +02:00
|
|
|
int ret = 0;
|
|
|
|
for ( ; n > 0; n--, strA++, strW++)
|
|
|
|
if ((ret = toupperW((unsigned char)*strA) - toupperW(*strW)) || !*strA) break;
|
|
|
|
return ret;
|
2000-11-25 04:09:30 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
/***********************************************************************
|
2003-10-09 00:41:12 +02:00
|
|
|
* build_list
|
|
|
|
*
|
|
|
|
* Build a function list from a ';'-separated string.
|
2000-11-25 04:09:30 +01:00
|
|
|
*/
|
2003-10-09 00:41:12 +02:00
|
|
|
static const WCHAR **build_list( const WCHAR *buffer )
|
2000-11-25 04:09:30 +01:00
|
|
|
{
|
2003-10-09 00:41:12 +02:00
|
|
|
int count = 1;
|
|
|
|
const WCHAR *p = buffer;
|
|
|
|
const WCHAR **ret;
|
|
|
|
|
|
|
|
while ((p = strchrW( p, ';' )))
|
|
|
|
{
|
|
|
|
count++;
|
|
|
|
p++;
|
|
|
|
}
|
|
|
|
/* allocate count+1 pointers, plus the space for a copy of the string */
|
|
|
|
if ((ret = RtlAllocateHeap( GetProcessHeap(), 0,
|
|
|
|
(count+1) * sizeof(WCHAR*) + (strlenW(buffer)+1) * sizeof(WCHAR) )))
|
|
|
|
{
|
|
|
|
WCHAR *str = (WCHAR *)(ret + count + 1);
|
|
|
|
WCHAR *p = str;
|
|
|
|
|
|
|
|
strcpyW( str, buffer );
|
|
|
|
count = 0;
|
|
|
|
for (;;)
|
|
|
|
{
|
|
|
|
ret[count++] = p;
|
|
|
|
if (!(p = strchrW( p, ';' ))) break;
|
|
|
|
*p++ = 0;
|
|
|
|
}
|
|
|
|
ret[count++] = NULL;
|
|
|
|
}
|
|
|
|
return ret;
|
2000-11-25 04:09:30 +01:00
|
|
|
}
|
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
|
2000-11-25 04:09:30 +01:00
|
|
|
/***********************************************************************
|
2003-10-09 00:41:12 +02:00
|
|
|
* RELAY16_InitDebugLists
|
|
|
|
*
|
|
|
|
* Build the relay include/exclude function lists.
|
2000-11-25 04:09:30 +01:00
|
|
|
*/
|
2003-10-09 00:41:12 +02:00
|
|
|
void RELAY16_InitDebugLists(void)
|
2000-11-25 04:09:30 +01:00
|
|
|
{
|
2003-10-09 00:41:12 +02:00
|
|
|
OBJECT_ATTRIBUTES attr;
|
|
|
|
UNICODE_STRING name;
|
|
|
|
char buffer[1024];
|
2005-06-17 15:58:33 +02:00
|
|
|
HANDLE root, hkey;
|
2003-10-09 00:41:12 +02:00
|
|
|
DWORD count;
|
|
|
|
WCHAR *str;
|
2005-06-14 21:23:00 +02:00
|
|
|
static const WCHAR configW[] = {'S','o','f','t','w','a','r','e','\\',
|
2003-10-09 00:41:12 +02:00
|
|
|
'W','i','n','e','\\',
|
|
|
|
'D','e','b','u','g',0};
|
|
|
|
static const WCHAR RelayIncludeW[] = {'R','e','l','a','y','I','n','c','l','u','d','e',0};
|
|
|
|
static const WCHAR RelayExcludeW[] = {'R','e','l','a','y','E','x','c','l','u','d','e',0};
|
|
|
|
static const WCHAR SnoopIncludeW[] = {'S','n','o','o','p','I','n','c','l','u','d','e',0};
|
|
|
|
static const WCHAR SnoopExcludeW[] = {'S','n','o','o','p','E','x','c','l','u','d','e',0};
|
|
|
|
|
2009-11-30 13:57:16 +01:00
|
|
|
RtlOpenCurrentUser( KEY_READ, &root );
|
2003-10-09 00:41:12 +02:00
|
|
|
attr.Length = sizeof(attr);
|
2005-06-14 21:23:00 +02:00
|
|
|
attr.RootDirectory = root;
|
2003-10-09 00:41:12 +02:00
|
|
|
attr.ObjectName = &name;
|
|
|
|
attr.Attributes = 0;
|
|
|
|
attr.SecurityDescriptor = NULL;
|
|
|
|
attr.SecurityQualityOfService = NULL;
|
|
|
|
RtlInitUnicodeString( &name, configW );
|
|
|
|
|
2005-06-14 21:23:00 +02:00
|
|
|
/* @@ Wine registry key: HKCU\Software\Wine\Debug */
|
2009-11-30 13:57:16 +01:00
|
|
|
if (NtOpenKey( &hkey, KEY_READ, &attr )) hkey = 0;
|
2005-06-14 21:23:00 +02:00
|
|
|
NtClose( root );
|
|
|
|
if (!hkey) return;
|
2003-10-09 00:41:12 +02:00
|
|
|
|
|
|
|
str = (WCHAR *)((KEY_VALUE_PARTIAL_INFORMATION *)buffer)->Data;
|
|
|
|
RtlInitUnicodeString( &name, RelayIncludeW );
|
|
|
|
if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))
|
|
|
|
{
|
|
|
|
debug_relay_includelist = build_list( str );
|
|
|
|
}
|
1999-11-14 20:45:05 +01:00
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
RtlInitUnicodeString( &name, RelayExcludeW );
|
|
|
|
if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))
|
|
|
|
{
|
|
|
|
debug_relay_excludelist = build_list( str );
|
|
|
|
}
|
1999-11-14 20:45:05 +01:00
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
RtlInitUnicodeString( &name, SnoopIncludeW );
|
|
|
|
if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))
|
|
|
|
{
|
|
|
|
debug_snoop_includelist = build_list( str );
|
|
|
|
}
|
1995-03-19 18:39:39 +01:00
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
RtlInitUnicodeString( &name, SnoopExcludeW );
|
|
|
|
if (!NtQueryValueKey( hkey, &name, KeyValuePartialInformation, buffer, sizeof(buffer), &count ))
|
|
|
|
{
|
|
|
|
debug_snoop_excludelist = build_list( str );
|
|
|
|
}
|
|
|
|
NtClose( hkey );
|
2003-09-29 22:42:24 +02:00
|
|
|
}
|
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
|
2003-10-16 02:24:49 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* check_list
|
|
|
|
*
|
|
|
|
* Check if a given module and function is in the list.
|
|
|
|
*/
|
|
|
|
static BOOL check_list( const char *module, int ordinal, const char *func, const WCHAR **list )
|
|
|
|
{
|
|
|
|
char ord_str[10];
|
|
|
|
|
|
|
|
sprintf( ord_str, "%d", ordinal );
|
|
|
|
for(; *list; list++)
|
|
|
|
{
|
|
|
|
const WCHAR *p = strrchrW( *list, '.' );
|
|
|
|
if (p && p > *list) /* check module and function */
|
|
|
|
{
|
|
|
|
int len = p - *list;
|
|
|
|
if (strncmpiAW( module, *list, len-1 ) || module[len]) continue;
|
|
|
|
if (p[1] == '*' && !p[2]) return TRUE;
|
|
|
|
if (!strcmpiAW( ord_str, p + 1 )) return TRUE;
|
|
|
|
if (func && !strcmpiAW( func, p + 1 )) return TRUE;
|
|
|
|
}
|
|
|
|
else /* function only */
|
|
|
|
{
|
|
|
|
if (func && !strcmpiAW( func, *list )) return TRUE;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2002-06-04 19:48:41 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* RELAY_ShowDebugmsgRelay
|
|
|
|
*
|
|
|
|
* Simple function to decide if a particular debugging message is
|
|
|
|
* wanted.
|
|
|
|
*/
|
2003-10-16 02:24:49 +02:00
|
|
|
static BOOL RELAY_ShowDebugmsgRelay(const char *module, int ordinal, const char *func)
|
2002-06-04 19:48:41 +02:00
|
|
|
{
|
2003-10-16 02:24:49 +02:00
|
|
|
if (debug_relay_excludelist && check_list( module, ordinal, func, debug_relay_excludelist ))
|
|
|
|
return FALSE;
|
|
|
|
if (debug_relay_includelist && !check_list( module, ordinal, func, debug_relay_includelist ))
|
|
|
|
return FALSE;
|
|
|
|
return TRUE;
|
2002-06-04 19:48:41 +02:00
|
|
|
}
|
1998-02-15 20:40:49 +01:00
|
|
|
|
2001-12-15 00:14:22 +01:00
|
|
|
|
2003-10-09 00:41:12 +02:00
|
|
|
/***********************************************************************
|
|
|
|
* SNOOP16_ShowDebugmsgSnoop
|
|
|
|
*
|
|
|
|
* Simple function to decide if a particular debugging message is
|
|
|
|
* wanted.
|
|
|
|
*/
|
2013-12-11 11:38:50 +01:00
|
|
|
BOOL SNOOP16_ShowDebugmsgSnoop(const char *module, int ordinal, const char *func)
|
2003-10-09 00:41:12 +02:00
|
|
|
{
|
2003-10-16 02:24:49 +02:00
|
|
|
if (debug_snoop_excludelist && check_list( module, ordinal, func, debug_snoop_excludelist ))
|
|
|
|
return FALSE;
|
|
|
|
if (debug_snoop_includelist && !check_list( module, ordinal, func, debug_snoop_includelist ))
|
|
|
|
return FALSE;
|
|
|
|
return TRUE;
|
2003-10-09 00:41:12 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2001-12-15 00:14:22 +01:00
|
|
|
/***********************************************************************
|
|
|
|
* get_entry_point
|
|
|
|
*
|
|
|
|
* Return the ordinal, name, and type info corresponding to a CS:IP address.
|
|
|
|
*/
|
2003-10-16 02:24:49 +02:00
|
|
|
static const CALLFROM16 *get_entry_point( STACK16FRAME *frame, LPSTR module, LPSTR func, WORD *pOrd )
|
2001-12-15 00:14:22 +01:00
|
|
|
{
|
|
|
|
WORD i, max_offset;
|
|
|
|
register BYTE *p;
|
|
|
|
NE_MODULE *pModule;
|
|
|
|
ET_BUNDLE *bundle;
|
|
|
|
ET_ENTRY *entry;
|
|
|
|
|
2005-08-17 12:28:35 +02:00
|
|
|
*pOrd = 0;
|
2001-12-15 00:14:22 +01:00
|
|
|
if (!(pModule = NE_GetPtr( FarGetOwner16( GlobalHandle16( frame->module_cs ) ))))
|
|
|
|
return NULL;
|
|
|
|
|
|
|
|
max_offset = 0;
|
2005-05-17 16:36:09 +02:00
|
|
|
bundle = (ET_BUNDLE *)((BYTE *)pModule + pModule->ne_enttab);
|
2002-06-01 01:06:46 +02:00
|
|
|
do
|
2001-12-15 00:14:22 +01:00
|
|
|
{
|
|
|
|
entry = (ET_ENTRY *)((BYTE *)bundle+6);
|
|
|
|
for (i = bundle->first + 1; i <= bundle->last; i++)
|
|
|
|
{
|
|
|
|
if ((entry->offs < frame->entry_ip)
|
|
|
|
&& (entry->segnum == 1) /* code segment ? */
|
|
|
|
&& (entry->offs >= max_offset))
|
|
|
|
{
|
|
|
|
max_offset = entry->offs;
|
|
|
|
*pOrd = i;
|
|
|
|
}
|
|
|
|
entry++;
|
|
|
|
}
|
|
|
|
} while ( (bundle->next)
|
|
|
|
&& (bundle = (ET_BUNDLE *)((BYTE *)pModule+bundle->next)));
|
|
|
|
|
|
|
|
/* Search for the name in the resident names table */
|
|
|
|
/* (built-in modules have no non-resident table) */
|
2002-06-01 01:06:46 +02:00
|
|
|
|
2005-05-17 16:36:09 +02:00
|
|
|
p = (BYTE *)pModule + pModule->ne_restab;
|
2003-10-16 02:24:49 +02:00
|
|
|
memcpy( module, p + 1, *p );
|
|
|
|
module[*p] = 0;
|
|
|
|
|
2001-12-15 00:14:22 +01:00
|
|
|
while (*p)
|
|
|
|
{
|
|
|
|
p += *p + 1 + sizeof(WORD);
|
|
|
|
if (*(WORD *)(p + *p + 1) == *pOrd) break;
|
|
|
|
}
|
2003-10-16 02:24:49 +02:00
|
|
|
memcpy( func, p + 1, *p );
|
|
|
|
func[*p] = 0;
|
2001-12-15 00:14:22 +01:00
|
|
|
|
|
|
|
/* Retrieve entry point call structure */
|
|
|
|
p = MapSL( MAKESEGPTR( frame->module_cs, frame->callfrom_ip ) );
|
|
|
|
/* p now points to lret, get the start of CALLFROM16 structure */
|
2008-07-11 11:41:30 +02:00
|
|
|
return (CALLFROM16 *)(p - FIELD_OFFSET( CALLFROM16, ret ));
|
2001-12-15 00:14:22 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-07-22 21:50:13 +02:00
|
|
|
extern int call_entry_point( void *func, int nb_args, const int *args );
|
|
|
|
__ASM_GLOBAL_FUNC( call_entry_point,
|
2009-06-25 12:02:59 +02:00
|
|
|
"pushl %ebp\n\t"
|
|
|
|
__ASM_CFI(".cfi_adjust_cfa_offset 4\n\t")
|
|
|
|
__ASM_CFI(".cfi_rel_offset %ebp,0\n\t")
|
|
|
|
"movl %esp,%ebp\n\t"
|
|
|
|
__ASM_CFI(".cfi_def_cfa_register %ebp\n\t")
|
|
|
|
"pushl %esi\n\t"
|
|
|
|
__ASM_CFI(".cfi_rel_offset %esi,-4\n\t")
|
|
|
|
"pushl %edi\n\t"
|
|
|
|
__ASM_CFI(".cfi_rel_offset %edi,-8\n\t")
|
|
|
|
"movl 12(%ebp),%edx\n\t"
|
|
|
|
"shll $2,%edx\n\t"
|
|
|
|
"jz 1f\n\t"
|
|
|
|
"subl %edx,%esp\n\t"
|
|
|
|
"andl $~15,%esp\n\t"
|
|
|
|
"movl 12(%ebp),%ecx\n\t"
|
|
|
|
"movl 16(%ebp),%esi\n\t"
|
|
|
|
"movl %esp,%edi\n\t"
|
|
|
|
"cld\n\t"
|
|
|
|
"rep; movsl\n"
|
|
|
|
"1:\tcall *8(%ebp)\n\t"
|
|
|
|
"leal -8(%ebp),%esp\n\t"
|
|
|
|
"popl %edi\n\t"
|
|
|
|
__ASM_CFI(".cfi_same_value %edi\n\t")
|
|
|
|
"popl %esi\n\t"
|
|
|
|
__ASM_CFI(".cfi_same_value %esi\n\t")
|
|
|
|
"popl %ebp\n\t"
|
|
|
|
__ASM_CFI(".cfi_def_cfa %esp,4\n\t")
|
|
|
|
__ASM_CFI(".cfi_same_value %ebp\n\t")
|
|
|
|
"ret" )
|
2005-07-05 14:52:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
/***********************************************************************
|
|
|
|
* relay_call_from_16_no_debug
|
|
|
|
*
|
|
|
|
* Same as relay_call_from_16 but doesn't print any debug information.
|
|
|
|
*/
|
2010-10-20 15:48:31 +02:00
|
|
|
static int relay_call_from_16_no_debug( void *entry_point, unsigned char *args16, CONTEXT *context,
|
2005-07-05 14:52:07 +02:00
|
|
|
const CALLFROM16 *call )
|
|
|
|
{
|
2005-09-18 14:25:22 +02:00
|
|
|
unsigned int i, j, nb_args = 0;
|
|
|
|
int args32[20];
|
2005-07-05 14:52:07 +02:00
|
|
|
|
2005-09-18 14:25:22 +02:00
|
|
|
/* look for the ret instruction */
|
|
|
|
for (j = 0; j < sizeof(call->ret)/sizeof(call->ret[0]); j++)
|
|
|
|
if (call->ret[j] == 0xca66 || call->ret[j] == 0xcb66) break;
|
|
|
|
|
|
|
|
if (call->ret[j] == 0xcb66) /* cdecl */
|
2005-07-05 14:52:07 +02:00
|
|
|
{
|
|
|
|
for (i = 0; i < 20; i++, nb_args++)
|
|
|
|
{
|
|
|
|
int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;
|
|
|
|
|
|
|
|
if (type == ARG_NONE) break;
|
|
|
|
switch(type)
|
|
|
|
{
|
|
|
|
case ARG_WORD:
|
|
|
|
args32[nb_args] = *(WORD *)args16;
|
|
|
|
args16 += sizeof(WORD);
|
|
|
|
break;
|
|
|
|
case ARG_SWORD:
|
|
|
|
args32[nb_args] = *(short *)args16;
|
|
|
|
args16 += sizeof(WORD);
|
|
|
|
break;
|
|
|
|
case ARG_LONG:
|
|
|
|
case ARG_SEGSTR:
|
|
|
|
args32[nb_args] = *(int *)args16;
|
|
|
|
args16 += sizeof(int);
|
|
|
|
break;
|
|
|
|
case ARG_PTR:
|
|
|
|
case ARG_STR:
|
|
|
|
args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );
|
|
|
|
args16 += sizeof(SEGPTR);
|
|
|
|
break;
|
|
|
|
case ARG_VARARG:
|
|
|
|
args32[nb_args] = (int)args16;
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else /* not cdecl */
|
|
|
|
{
|
|
|
|
/* Start with the last arg */
|
2005-09-18 14:25:22 +02:00
|
|
|
args16 += call->ret[j + 1];
|
2005-07-05 14:52:07 +02:00
|
|
|
for (i = 0; i < 20; i++, nb_args++)
|
|
|
|
{
|
|
|
|
int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;
|
|
|
|
|
|
|
|
if (type == ARG_NONE) break;
|
|
|
|
switch(type)
|
|
|
|
{
|
|
|
|
case ARG_WORD:
|
|
|
|
args16 -= sizeof(WORD);
|
|
|
|
args32[nb_args] = *(WORD *)args16;
|
|
|
|
break;
|
|
|
|
case ARG_SWORD:
|
|
|
|
args16 -= sizeof(WORD);
|
|
|
|
args32[nb_args] = *(short *)args16;
|
|
|
|
break;
|
|
|
|
case ARG_LONG:
|
|
|
|
case ARG_SEGSTR:
|
|
|
|
args16 -= sizeof(int);
|
|
|
|
args32[nb_args] = *(int *)args16;
|
|
|
|
break;
|
|
|
|
case ARG_PTR:
|
|
|
|
case ARG_STR:
|
|
|
|
args16 -= sizeof(SEGPTR);
|
|
|
|
args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );
|
|
|
|
break;
|
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2005-09-18 14:25:22 +02:00
|
|
|
if (!j) /* register function */
|
|
|
|
args32[nb_args++] = (int)context;
|
2005-07-05 14:52:07 +02:00
|
|
|
|
|
|
|
SYSLEVEL_CheckNotLevel( 2 );
|
|
|
|
|
2005-07-22 21:50:13 +02:00
|
|
|
return call_entry_point( entry_point, nb_args, args32 );
|
2005-07-05 14:52:07 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
Release 950522
Sun May 21 12:30:30 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [debugger/hash.c] [debugger/info.c]
Added support for symbolic segmented addresses. Add symbols for all
built-in API entry points.
* [if1632/relay.c] [include/dlls.h]
Removed dll_table structure, as we now use the built-in module
structures.
* [if1632/relay.c] [loader/main.c]
Removed winestat option, as it was no longer very meaningful.
* [include/stackframe.h]
New macro MAKE_SEGPTR that creates a segmented pointer to a local
variable on the 32-bit stack.
* [loader/module.c]
Added support for multiple instances of an application.
Implemented LoadModule() and FreeModule().
* [loader/ne_image.c] [loader/task.c]
Moved initialisation of built-in DLLs to InitTask().
* [memory/global.c]
Implemented discardable blocks.
* [misc/file.c]
Search path of current executable in OpenFile().
Fixed bug with searching in Windows path.
* [misc/lstr.c]
Hard-coded translation tables for Ansi<->Oem.
* [misc/user.c]
Moved some global initializations to InitApp(), because they need
a task context to be performed.
* [objects/dc.c]
Handle R2_BLACK and R2_WHITE specially so that they work correctly
with palette displays.
* [tools/build.c]
Suppressed generation of the C file for DLL specs, because it's no
longer needed. Output all the assembly code directly to stdout.
Some changes to integrate Win32 support from Martin von Loewis.
* [windows/msgbox.c]
Moved message box code from misc/ to windows/.
Mon May 15 23:40:04 1995 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c] [misc/mcicda.c] [misc/mcianim.c] [misc/midi.c]
[misc/mmaux.c] [misc/mmsystem.c]
Modify code & use pointers conversion macros.
Make cdaudio & wave devices work again (only using some applets).
* [misc/profile.c]
Change getc() to fgetc() where needed.
Mon May 15 22:10:56 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/Imakefile]
added entries for the new files gdi32.spec, kernel32.spec,
user32.spec, shell32.spec and winprocs32.spec.
* [if1632/commdlg.spec][if1632/kernel.spec][if1632/shell.spec]
[if1632/storage.spec][if1632/system.spec][if1632/user.spec]
ChooseFont, RESERVED5, InternalExtractIcon: Marked as stubs
ExtractAssociatedIcon, DoEnvironmentSubst, DumpIcon:
stub implementations provided
marked storage.dll,storege.sys functions as stubs
* [include/pe_image.h]
Added structures WIN32_builtin and WIN32_function
* [include/peexe.h]
PE_Import_Directory: renamed reserved fields to
TimeDate, Forwarder, Thunk_List
* [include/winerror.h]
New file.
* [loader/main.c]
called RELAY32_Init
* [loader/pe_image.c]
xmmap: map BSS anonymous
dump_imports: renamed to fixup_imports, do the fixup of imported
symbols
PE_LoadImage: pass raw data size to xmmap
* [loader/resource.c]
DumpIcon: new function
* [misc/kernel32.c]
New file.
* [misc/main.c]
make stdout and stderr unbuffered
* [misc/shell.c]
DoEnvironmentSubst: new function
* [objects/font.c]
FONT_MatchFont: try oblique if there is no italic
* [rc/Imakefile][rc/parser.l]
yywrap: new function
Don't link with libfl.a on Linux
* [tools/build.c]
Added keywords stdcall, subsystem, base
GenerateForWin32: new function
BuildSpecFiles: call GenerateForWin32 if subsystem is win32
Mon May 15 10:38:14 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c] [controls/combo.c] [windows/defwnd.c]
Minor fixes.
* [misc/message.c] [misc/main.c] [rc/sysres*.rc] [include/texts.h]
Rewrote message box handling.
* [windows/dialog.c]
Dialogs should be invisible until after WM_INITDIALOG is seent.
Don't switch to invisible dialog items on a TAB keypress.
* [windows/mdi.c]
Send WM_NCPAINT message in MDIRestoreChild().
* [windows/painting.c]
Fixed typo (&& -> &).
* [windows/message.c] [if1632/user.spec]
Implemented PostAppMessage().
* [windows/event.c]
SetCapture(0) should act like ReleaseCapture().
Tue May 9 11:55:52 1995 Eddie C. Dost (ecd@dressler.de)
* [Imakefile]
Changed CDEBUGFLAGS for systems running __ELF__ (temporarily)
Added ASFLAGS to exported variables.
* [debugger/readline/Imakefile]
Moved defines for libreadline from DEFINES to EXTRA_DEFINES
* [memory/local.c] [miscemu/int21.c]
Added some more debugging outputs.
Mon May 8 00:55:27 MET DST 1995 Dag Asheim (dash@ifi.uio.no)
* [misc/message.c]
Fixed a "FIXME" concerning norwegian translation.
Sun May 7 23:25:23 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [*/*]
Removed warnings in a couple of files and deleted some obsolete code.
* [controls/listbox.c]
Cleanup, speed improvements & lots of bug fixes.
* [controls/combo.c]
Mostly rewritten. This is still very buggy, but not quite as bad as
before.
* [include/commdlg.h] [misc/commdlg.c]
Removed the need for sysres.dll. Small bug fixes.
* [objects/oembitmap.c] [include/bitmaps/<many>] [include/windows.h]
[loader/library.c] [loader/main.c] [rc/sysres*.rc]
Removed sysres.dll and replaced the remaining bitmaps/icons with
XPM equivalents.
* [misc/message.c] [windows/nonclient.c] [misc/main.c]
[if1632/winprocs.spec]
"About Wine..." now brings up a standard ShellAbout() window with
the Wine icon and the list of contributors.
* [misc/shell.c]
Fixed ShellAbout()/AboutDialogProc() to show the right icon.
* [windows/event.c]
Small hack for non-alphanumeric keys: Dont't send the ascii value in
the WM_KEYDOWN message, but some unused code instead. Should be done
properly by sending different codes for each key. The edit control
used to get a VK_DELETE message each time the user typed '.'.
* [windows/class.c]
Removed a check for CS_GLOBALCLASS in CLASS_FindClassByName().
This used to be no problem, but breaks Resource Workshop in 950403.
* [objects/dib.c]
New diagnostic for a bug I've been encountering. If it shows up,
please report it.
Sun May 7 23:11:18 EDT 1995 William Magro (wmagro@tc.cornell.edu)
* [objects/color.c]
Handle situation when 'dc' exists, but palette mapping
does not. (Fixes kidpix2 demo.)
Sun May 7 03:32:00 1995 Charles M. Hannum (mycroft@mit.edu)
* [loader/ldt.c]
LDT_Print: Only show the number of entries that the kernel
returned. Make this work for NetBSD.
Fri May 5 02:53:26 1995 Charles M. Hannum (mycroft@mit.edu)
* [debugger/dbg.y] [include/wine.h] [loader/signal.c]
Modify cs and ds selector values for NetBSD-current.
* [debugger/debug.l]
$sp, $esp: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [debugger/regpos.h]
Modify sigcontext format for NetBSD-current.
SC_ESP: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [include/ldt.h]
SELECTOR_TO_ENTRY: Explicitly clear the top half of the selector
value, since only 16 bits of it may have been saved.
* [misc/winsocket.c]
Set structure packing with `#pragma pack' to accomodate
other/older compilers.
Tue May 2 18:15:01 1995 Paal Beyer (beyer@idt.unit.no)
* [misc/commdlg.c]
Fixed path-names so when changing directory the listboxes
changes too.
* [debugger/dbg.y debugger/debug.l wine.ini]
Added SymbolTableFile to wine.ini so symbols can be read
without standing in the directory containing wine.sym.
Added the possibility to specify full name of wine.sym from
the debugger prompt.
1995-05-22 20:23:01 +02:00
|
|
|
/***********************************************************************
|
2005-07-05 14:52:07 +02:00
|
|
|
* relay_call_from_16
|
|
|
|
*
|
|
|
|
* Replacement for the 16-bit relay functions when relay debugging is on.
|
Release 950522
Sun May 21 12:30:30 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [debugger/hash.c] [debugger/info.c]
Added support for symbolic segmented addresses. Add symbols for all
built-in API entry points.
* [if1632/relay.c] [include/dlls.h]
Removed dll_table structure, as we now use the built-in module
structures.
* [if1632/relay.c] [loader/main.c]
Removed winestat option, as it was no longer very meaningful.
* [include/stackframe.h]
New macro MAKE_SEGPTR that creates a segmented pointer to a local
variable on the 32-bit stack.
* [loader/module.c]
Added support for multiple instances of an application.
Implemented LoadModule() and FreeModule().
* [loader/ne_image.c] [loader/task.c]
Moved initialisation of built-in DLLs to InitTask().
* [memory/global.c]
Implemented discardable blocks.
* [misc/file.c]
Search path of current executable in OpenFile().
Fixed bug with searching in Windows path.
* [misc/lstr.c]
Hard-coded translation tables for Ansi<->Oem.
* [misc/user.c]
Moved some global initializations to InitApp(), because they need
a task context to be performed.
* [objects/dc.c]
Handle R2_BLACK and R2_WHITE specially so that they work correctly
with palette displays.
* [tools/build.c]
Suppressed generation of the C file for DLL specs, because it's no
longer needed. Output all the assembly code directly to stdout.
Some changes to integrate Win32 support from Martin von Loewis.
* [windows/msgbox.c]
Moved message box code from misc/ to windows/.
Mon May 15 23:40:04 1995 Martin Ayotte (wine@trgcorp.mksinfo.qc.ca)
* [misc/audio.c] [misc/mcicda.c] [misc/mcianim.c] [misc/midi.c]
[misc/mmaux.c] [misc/mmsystem.c]
Modify code & use pointers conversion macros.
Make cdaudio & wave devices work again (only using some applets).
* [misc/profile.c]
Change getc() to fgetc() where needed.
Mon May 15 22:10:56 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/Imakefile]
added entries for the new files gdi32.spec, kernel32.spec,
user32.spec, shell32.spec and winprocs32.spec.
* [if1632/commdlg.spec][if1632/kernel.spec][if1632/shell.spec]
[if1632/storage.spec][if1632/system.spec][if1632/user.spec]
ChooseFont, RESERVED5, InternalExtractIcon: Marked as stubs
ExtractAssociatedIcon, DoEnvironmentSubst, DumpIcon:
stub implementations provided
marked storage.dll,storege.sys functions as stubs
* [include/pe_image.h]
Added structures WIN32_builtin and WIN32_function
* [include/peexe.h]
PE_Import_Directory: renamed reserved fields to
TimeDate, Forwarder, Thunk_List
* [include/winerror.h]
New file.
* [loader/main.c]
called RELAY32_Init
* [loader/pe_image.c]
xmmap: map BSS anonymous
dump_imports: renamed to fixup_imports, do the fixup of imported
symbols
PE_LoadImage: pass raw data size to xmmap
* [loader/resource.c]
DumpIcon: new function
* [misc/kernel32.c]
New file.
* [misc/main.c]
make stdout and stderr unbuffered
* [misc/shell.c]
DoEnvironmentSubst: new function
* [objects/font.c]
FONT_MatchFont: try oblique if there is no italic
* [rc/Imakefile][rc/parser.l]
yywrap: new function
Don't link with libfl.a on Linux
* [tools/build.c]
Added keywords stdcall, subsystem, base
GenerateForWin32: new function
BuildSpecFiles: call GenerateForWin32 if subsystem is win32
Mon May 15 10:38:14 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c] [controls/combo.c] [windows/defwnd.c]
Minor fixes.
* [misc/message.c] [misc/main.c] [rc/sysres*.rc] [include/texts.h]
Rewrote message box handling.
* [windows/dialog.c]
Dialogs should be invisible until after WM_INITDIALOG is seent.
Don't switch to invisible dialog items on a TAB keypress.
* [windows/mdi.c]
Send WM_NCPAINT message in MDIRestoreChild().
* [windows/painting.c]
Fixed typo (&& -> &).
* [windows/message.c] [if1632/user.spec]
Implemented PostAppMessage().
* [windows/event.c]
SetCapture(0) should act like ReleaseCapture().
Tue May 9 11:55:52 1995 Eddie C. Dost (ecd@dressler.de)
* [Imakefile]
Changed CDEBUGFLAGS for systems running __ELF__ (temporarily)
Added ASFLAGS to exported variables.
* [debugger/readline/Imakefile]
Moved defines for libreadline from DEFINES to EXTRA_DEFINES
* [memory/local.c] [miscemu/int21.c]
Added some more debugging outputs.
Mon May 8 00:55:27 MET DST 1995 Dag Asheim (dash@ifi.uio.no)
* [misc/message.c]
Fixed a "FIXME" concerning norwegian translation.
Sun May 7 23:25:23 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [*/*]
Removed warnings in a couple of files and deleted some obsolete code.
* [controls/listbox.c]
Cleanup, speed improvements & lots of bug fixes.
* [controls/combo.c]
Mostly rewritten. This is still very buggy, but not quite as bad as
before.
* [include/commdlg.h] [misc/commdlg.c]
Removed the need for sysres.dll. Small bug fixes.
* [objects/oembitmap.c] [include/bitmaps/<many>] [include/windows.h]
[loader/library.c] [loader/main.c] [rc/sysres*.rc]
Removed sysres.dll and replaced the remaining bitmaps/icons with
XPM equivalents.
* [misc/message.c] [windows/nonclient.c] [misc/main.c]
[if1632/winprocs.spec]
"About Wine..." now brings up a standard ShellAbout() window with
the Wine icon and the list of contributors.
* [misc/shell.c]
Fixed ShellAbout()/AboutDialogProc() to show the right icon.
* [windows/event.c]
Small hack for non-alphanumeric keys: Dont't send the ascii value in
the WM_KEYDOWN message, but some unused code instead. Should be done
properly by sending different codes for each key. The edit control
used to get a VK_DELETE message each time the user typed '.'.
* [windows/class.c]
Removed a check for CS_GLOBALCLASS in CLASS_FindClassByName().
This used to be no problem, but breaks Resource Workshop in 950403.
* [objects/dib.c]
New diagnostic for a bug I've been encountering. If it shows up,
please report it.
Sun May 7 23:11:18 EDT 1995 William Magro (wmagro@tc.cornell.edu)
* [objects/color.c]
Handle situation when 'dc' exists, but palette mapping
does not. (Fixes kidpix2 demo.)
Sun May 7 03:32:00 1995 Charles M. Hannum (mycroft@mit.edu)
* [loader/ldt.c]
LDT_Print: Only show the number of entries that the kernel
returned. Make this work for NetBSD.
Fri May 5 02:53:26 1995 Charles M. Hannum (mycroft@mit.edu)
* [debugger/dbg.y] [include/wine.h] [loader/signal.c]
Modify cs and ds selector values for NetBSD-current.
* [debugger/debug.l]
$sp, $esp: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [debugger/regpos.h]
Modify sigcontext format for NetBSD-current.
SC_ESP: Use RN_ESP_AT_SIGNAL rather than RN_ESP.
* [include/ldt.h]
SELECTOR_TO_ENTRY: Explicitly clear the top half of the selector
value, since only 16 bits of it may have been saved.
* [misc/winsocket.c]
Set structure packing with `#pragma pack' to accomodate
other/older compilers.
Tue May 2 18:15:01 1995 Paal Beyer (beyer@idt.unit.no)
* [misc/commdlg.c]
Fixed path-names so when changing directory the listboxes
changes too.
* [debugger/dbg.y debugger/debug.l wine.ini]
Added SymbolTableFile to wine.ini so symbols can be read
without standing in the directory containing wine.sym.
Added the possibility to specify full name of wine.sym from
the debugger prompt.
1995-05-22 20:23:01 +02:00
|
|
|
*/
|
2010-10-20 15:48:31 +02:00
|
|
|
int relay_call_from_16( void *entry_point, unsigned char *args16, CONTEXT *context )
|
1993-06-29 18:33:12 +02:00
|
|
|
{
|
Release 950403
Sun Apr 2 18:31:12 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [Configure] [if1632/Imakefile]
Removed new build and short names options.
* [if1632/*.c] [tools/build.c]
Implemented compiled call-back functions for better performance;
all the relay code is now done in assembly code generated by the
build program.
Relay code is no longer dependent on being loaded below 64K.
* [loader/resource.c]
Fixed memory leak in LoadString(). A fix will also be needed for
other resources.
* [memory/global.c]
Implemented global heap arenas, so we can store informations about
global blocks, like lock counts or owner handle.
Implemented FarGetOwner() and FarSetOwner().
Implemented global heap TOOLHELP functions.
* [memory/selector.c]
Bug fix: it was not possible to re-use a free selector.
Sun Apr 2 01:34:52 1995 Constantine Sapuntzakis (csapuntz@mit.edu)
* [controls/listbox.c]
Major work on listbox code
- Many bugs fixed (still many bugs)
- More messages supported
- Code simplified
Fri Mar 31 03:27:16 EST 1995 William Magro (wmagro@tc.cornell.edu)
* [controls/edit.c]
Lots of bug fixes related to diappearing text, lost carets,
highlighting, segmentation faults, occurance of random
characters, insertion of characters over selection, misplaced
caret location, display corruption, end of line behavior, etc.
* [controls/widgets.c]
EDIT class doesn't want to use CS_PARENTDC flag.
Thu Mar 30 20:58:25 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/selector.c]
FixupFunctionPrologs() should also handle multiple data modules.
(this bug only became visible because MakeProcInstance() was fixed
in 950319)
* [misc/dosfs.c]
Simplified DOS_SimplifyPath.
Small fix to DOS_opendir to reuse an entry if an open directory
is opened again, to prevent "too many open directories" messages.
Thu Mar 30 12:05:05 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/compobj.spec][include/compobj.h][misc/compobj.c]
CoDisconnectObject: new stub function
* [include/msdos.h]
fix DOSVERSION
* [loader/ne_image.c]
NE_FixupSegment: Be more generous on additive fixups
* [if1632/user.spec][misc/network.c]
Add more WNet* stubs
Wed Mar 29 11:47:22 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
DlgDirList(): send segptr instead of linear pointer
in message to static control
* [controls/menu.c]
Tried to implement ownerdrawn menuitems. Doesn't work.
* [if1632/gdi.spec] [include/windows.h] [objects/font.c]
Provide a stub for GetRasterizerCaps()
* [loader/selector.c]
Pass end address instead of length to LocalInit() in
CreateSelectors()
* [memory/local.c]
LocalInit(): If there's already a local heap in the segment, do
nothing and return TRUE
* [objects/linedda.c]
Replaced buggy LineDDA() with a Bresenham algorithm. Should work
now.
* [windows/cursor.c]
LoadCursor()/CreateCursor(): Cleaned up the mess. Needs some
more work still.
Tue Mar 21 17:54:43 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [if1632/relay.c] [if1632/callback.c] [include/dlls.h]
[if1632/winprocs.spec] [if1632/winprocs.c] [include/winprocs.h]
[controls/widgets.c] [misc/shell.c] [misc/commdlg.c]
[windows/nonclient.c] [misc/message.c]
Added a new builtin DLL that provides 16 bit entry points for all
the Def*Procs (DefDlgProc, ButtonProc etc.). OWL programs work
again.
* [misc/shell.c]
RegOpenKey()/RegCreateKey() bugs fixed.
* [loader/ne_image.c]
Skipping the initialization of a DLL when CS == 0 was broken.
1995-04-03 18:55:37 +02:00
|
|
|
STACK16FRAME *frame;
|
Release 960428
Sun Apr 28 14:32:43 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
* [Makefile.in]
Subdir memory is now also compiled for Winelib, in order to get
the Win32 heap functions.
* [if1632/Makefile.in]
Renamed winprocs and winprocs32 to wprocs and wprocs32 to avoid
DLL names > 8 characters.
* [loader/builtin.c] (New file)
Grouped all built-in DLLs code in a single file.
* [memory/global.c]
Use the Win32 heap code instead of malloc() to allocate linear
memory. This will help test the heap code.
* [memory/local.c]
Fixed FreeSelector() to clear DS and ES correctly for huge blocks.
* [tools/build.c] [if1632/relay.c]
Removed 'id' directive in spec files. For relay debugging, the DLL
entry point is now computed from the CS:IP entry point address.
Added 'heap' directive to specifiy a local heap for the DLL. USER
and GDI heap are now created this way.
* [windows/class.c] [include/class.h]
Changed the class structure to use pointers instead of handles.
Changed Get/SetClassWord/Long to use a switch statement; this
allows changing the layout of the CLASS structure.
* [windows/win.c] [include/win.h]
Use a CLASS * instead of a handle for the window class.
Sat Apr 27 18:10:11 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/kernel32.spec] [memory/global.c]
[win32/memory.c] [win32/process.c]
GetProcessAffinityMask,GlobalLock,IsBadReadPtr,IsBadWritePtr,
LocalLock,SetThreadAffinityMask: new relays.
* [win32/cursoricon32.c]
Return same handle if a cursor is loaded multiple times.
Sat Apr 27 15:13:37 1996 Bang Jun Young <bangjy@nownuri.nowcom.co.kr>
* [resources/sysres_Ko.rc]
Added support for Korean [Ko] language.
Fri Apr 26 00:49:05 1996 Huw D. M. Davies <h.davies1@physics.oxford.ac.uk>
* [objects/dc.c] [objects/font.c]
Fixed problem with SaveDC()/RestoreDC() and font cache 'used' count.
* [objects/metafile.c] [objects/dcvalues.c]
Fixed broken SetTextAlign() on metafiles.
* [objects/metafile.c]
Delete objects in handle table at end of PlayMetaFile().
Wed Apr 24 19:21:01 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
* [if1632/ver.spec] [misc/ver.c] [include/ver.h] (New files)
VER.DLL (partially) implemented (VerFindFile,VerInstallFile)
[If it doesn't work for you, use -dll -ver and report it to me]
* [if1632/user32.spec] [if1632/kernel32.spec] [if1632/shell.spec]
[if1632/shell32.spec] [misc/ole2nls.c] [windows/message.c]
[windows/graphics.c]
Simple win32 functions, where we can just use the win16 counterpart.
Misc. stubs.
* [misc/lstr.c]
Someone reported a _lstrlen(NULL). NULL is a valid argument. Fixed.
* [misc/registry.c]
Some alloclens were off by 1, one double fclose() fixed.
Requesting value 0 of a key with no values returns an error
(should we always return a made up value NULL? what does win3.1?)
Tue Apr 23 17:00:00 1996 Alex Korobka <alex@phm30.pharm.sunysb.edu>
* [misc/shell.c]
Implemented FindEnvironmentString(), DoEnvironmentSubst(),
ExtractIcon(), InternalExtractIcon() and ExtractAssociatedIcon().
* [misc/user.c]
Do extensive cleanup on application exit.
* [windows/hook.c] [windows/win.c] [windows/class.c]
Added miscellaneous cleanup routines.
* [controls/menu.c]
More efficient popup menu window handling.
Mon Apr 22 21:35:22 1996 Albrecht Kleine <kleine@ak.sax.de>
* [include/windows.h][objects/oembitmap.c][include/bitmaps/obm_trtype]
Added "TT-bitmap" for later usage in a ChooseFont() ownerdraw combobox.
1996-04-28 17:09:19 +02:00
|
|
|
WORD ordinal;
|
2005-09-18 14:25:22 +02:00
|
|
|
unsigned int i, j, nb_args = 0;
|
|
|
|
int ret_val, args32[20];
|
2005-07-05 14:52:07 +02:00
|
|
|
char module[10], func[64];
|
2001-12-15 00:14:22 +01:00
|
|
|
const CALLFROM16 *call;
|
Release 950403
Sun Apr 2 18:31:12 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [Configure] [if1632/Imakefile]
Removed new build and short names options.
* [if1632/*.c] [tools/build.c]
Implemented compiled call-back functions for better performance;
all the relay code is now done in assembly code generated by the
build program.
Relay code is no longer dependent on being loaded below 64K.
* [loader/resource.c]
Fixed memory leak in LoadString(). A fix will also be needed for
other resources.
* [memory/global.c]
Implemented global heap arenas, so we can store informations about
global blocks, like lock counts or owner handle.
Implemented FarGetOwner() and FarSetOwner().
Implemented global heap TOOLHELP functions.
* [memory/selector.c]
Bug fix: it was not possible to re-use a free selector.
Sun Apr 2 01:34:52 1995 Constantine Sapuntzakis (csapuntz@mit.edu)
* [controls/listbox.c]
Major work on listbox code
- Many bugs fixed (still many bugs)
- More messages supported
- Code simplified
Fri Mar 31 03:27:16 EST 1995 William Magro (wmagro@tc.cornell.edu)
* [controls/edit.c]
Lots of bug fixes related to diappearing text, lost carets,
highlighting, segmentation faults, occurance of random
characters, insertion of characters over selection, misplaced
caret location, display corruption, end of line behavior, etc.
* [controls/widgets.c]
EDIT class doesn't want to use CS_PARENTDC flag.
Thu Mar 30 20:58:25 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/selector.c]
FixupFunctionPrologs() should also handle multiple data modules.
(this bug only became visible because MakeProcInstance() was fixed
in 950319)
* [misc/dosfs.c]
Simplified DOS_SimplifyPath.
Small fix to DOS_opendir to reuse an entry if an open directory
is opened again, to prevent "too many open directories" messages.
Thu Mar 30 12:05:05 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/compobj.spec][include/compobj.h][misc/compobj.c]
CoDisconnectObject: new stub function
* [include/msdos.h]
fix DOSVERSION
* [loader/ne_image.c]
NE_FixupSegment: Be more generous on additive fixups
* [if1632/user.spec][misc/network.c]
Add more WNet* stubs
Wed Mar 29 11:47:22 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
DlgDirList(): send segptr instead of linear pointer
in message to static control
* [controls/menu.c]
Tried to implement ownerdrawn menuitems. Doesn't work.
* [if1632/gdi.spec] [include/windows.h] [objects/font.c]
Provide a stub for GetRasterizerCaps()
* [loader/selector.c]
Pass end address instead of length to LocalInit() in
CreateSelectors()
* [memory/local.c]
LocalInit(): If there's already a local heap in the segment, do
nothing and return TRUE
* [objects/linedda.c]
Replaced buggy LineDDA() with a Bresenham algorithm. Should work
now.
* [windows/cursor.c]
LoadCursor()/CreateCursor(): Cleaned up the mess. Needs some
more work still.
Tue Mar 21 17:54:43 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [if1632/relay.c] [if1632/callback.c] [include/dlls.h]
[if1632/winprocs.spec] [if1632/winprocs.c] [include/winprocs.h]
[controls/widgets.c] [misc/shell.c] [misc/commdlg.c]
[windows/nonclient.c] [misc/message.c]
Added a new builtin DLL that provides 16 bit entry points for all
the Def*Procs (DefDlgProc, ButtonProc etc.). OWL programs work
again.
* [misc/shell.c]
RegOpenKey()/RegCreateKey() bugs fixed.
* [loader/ne_image.c]
Skipping the initialization of a DLL when CS == 0 was broken.
1995-04-03 18:55:37 +02:00
|
|
|
|
|
|
|
frame = CURRENT_STACK16;
|
2003-10-16 02:24:49 +02:00
|
|
|
call = get_entry_point( frame, module, func, &ordinal );
|
2005-07-05 14:52:07 +02:00
|
|
|
if (!TRACE_ON(relay) || !RELAY_ShowDebugmsgRelay( module, ordinal, func ))
|
|
|
|
return relay_call_from_16_no_debug( entry_point, args16, context, call );
|
|
|
|
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "\1Call %s.%d: %s(", module, ordinal, func );
|
1998-02-15 20:40:49 +01:00
|
|
|
|
2005-09-18 14:25:22 +02:00
|
|
|
/* look for the ret instruction */
|
|
|
|
for (j = 0; j < sizeof(call->ret)/sizeof(call->ret[0]); j++)
|
|
|
|
if (call->ret[j] == 0xca66 || call->ret[j] == 0xcb66) break;
|
|
|
|
|
|
|
|
if (call->ret[j] == 0xcb66) /* cdecl */
|
1995-03-19 18:39:39 +01:00
|
|
|
{
|
2005-07-05 14:52:07 +02:00
|
|
|
for (i = 0; i < 20; i++, nb_args++)
|
1994-12-10 14:02:28 +01:00
|
|
|
{
|
2001-12-15 00:14:22 +01:00
|
|
|
int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;
|
|
|
|
|
|
|
|
if (type == ARG_NONE) break;
|
2017-11-25 11:47:17 +01:00
|
|
|
if (i) TRACE( "," );
|
2001-12-15 00:14:22 +01:00
|
|
|
switch(type)
|
1998-02-15 20:40:49 +01:00
|
|
|
{
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_WORD:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x", *(WORD *)args16 );
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = *(WORD *)args16;
|
|
|
|
args16 += sizeof(WORD);
|
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_SWORD:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x", *(WORD *)args16 );
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = *(short *)args16;
|
2001-12-15 00:14:22 +01:00
|
|
|
args16 += sizeof(WORD);
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_LONG:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%08x", *(int *)args16 );
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = *(int *)args16;
|
2001-12-15 00:14:22 +01:00
|
|
|
args16 += sizeof(int);
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_PTR:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x:%04x", *(WORD *)(args16+2), *(WORD *)args16 );
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );
|
2001-12-15 00:14:22 +01:00
|
|
|
args16 += sizeof(SEGPTR);
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_STR:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%08x %s", *(int *)args16, debugstr_a( MapSL(*(SEGPTR *)args16 )));
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );
|
2001-12-15 00:14:22 +01:00
|
|
|
args16 += sizeof(int);
|
|
|
|
break;
|
|
|
|
case ARG_SEGSTR:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x:%04x %s", *(WORD *)(args16+2), *(WORD *)args16,
|
|
|
|
debugstr_a( MapSL(*(SEGPTR *)args16 )) );
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = *(SEGPTR *)args16;
|
2001-12-15 00:14:22 +01:00
|
|
|
args16 += sizeof(SEGPTR);
|
|
|
|
break;
|
2005-07-05 13:50:40 +02:00
|
|
|
case ARG_VARARG:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "..." );
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = (int)args16;
|
2005-07-05 13:50:40 +02:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
default:
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
|
|
|
}
|
1995-03-19 18:39:39 +01:00
|
|
|
}
|
|
|
|
}
|
1998-02-15 20:40:49 +01:00
|
|
|
else /* not cdecl */
|
1993-06-29 18:33:12 +02:00
|
|
|
{
|
1998-02-15 20:40:49 +01:00
|
|
|
/* Start with the last arg */
|
2005-09-18 14:25:22 +02:00
|
|
|
args16 += call->ret[j + 1];
|
2005-07-05 14:52:07 +02:00
|
|
|
for (i = 0; i < 20; i++, nb_args++)
|
Release 950403
Sun Apr 2 18:31:12 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [Configure] [if1632/Imakefile]
Removed new build and short names options.
* [if1632/*.c] [tools/build.c]
Implemented compiled call-back functions for better performance;
all the relay code is now done in assembly code generated by the
build program.
Relay code is no longer dependent on being loaded below 64K.
* [loader/resource.c]
Fixed memory leak in LoadString(). A fix will also be needed for
other resources.
* [memory/global.c]
Implemented global heap arenas, so we can store informations about
global blocks, like lock counts or owner handle.
Implemented FarGetOwner() and FarSetOwner().
Implemented global heap TOOLHELP functions.
* [memory/selector.c]
Bug fix: it was not possible to re-use a free selector.
Sun Apr 2 01:34:52 1995 Constantine Sapuntzakis (csapuntz@mit.edu)
* [controls/listbox.c]
Major work on listbox code
- Many bugs fixed (still many bugs)
- More messages supported
- Code simplified
Fri Mar 31 03:27:16 EST 1995 William Magro (wmagro@tc.cornell.edu)
* [controls/edit.c]
Lots of bug fixes related to diappearing text, lost carets,
highlighting, segmentation faults, occurance of random
characters, insertion of characters over selection, misplaced
caret location, display corruption, end of line behavior, etc.
* [controls/widgets.c]
EDIT class doesn't want to use CS_PARENTDC flag.
Thu Mar 30 20:58:25 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/selector.c]
FixupFunctionPrologs() should also handle multiple data modules.
(this bug only became visible because MakeProcInstance() was fixed
in 950319)
* [misc/dosfs.c]
Simplified DOS_SimplifyPath.
Small fix to DOS_opendir to reuse an entry if an open directory
is opened again, to prevent "too many open directories" messages.
Thu Mar 30 12:05:05 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/compobj.spec][include/compobj.h][misc/compobj.c]
CoDisconnectObject: new stub function
* [include/msdos.h]
fix DOSVERSION
* [loader/ne_image.c]
NE_FixupSegment: Be more generous on additive fixups
* [if1632/user.spec][misc/network.c]
Add more WNet* stubs
Wed Mar 29 11:47:22 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
DlgDirList(): send segptr instead of linear pointer
in message to static control
* [controls/menu.c]
Tried to implement ownerdrawn menuitems. Doesn't work.
* [if1632/gdi.spec] [include/windows.h] [objects/font.c]
Provide a stub for GetRasterizerCaps()
* [loader/selector.c]
Pass end address instead of length to LocalInit() in
CreateSelectors()
* [memory/local.c]
LocalInit(): If there's already a local heap in the segment, do
nothing and return TRUE
* [objects/linedda.c]
Replaced buggy LineDDA() with a Bresenham algorithm. Should work
now.
* [windows/cursor.c]
LoadCursor()/CreateCursor(): Cleaned up the mess. Needs some
more work still.
Tue Mar 21 17:54:43 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [if1632/relay.c] [if1632/callback.c] [include/dlls.h]
[if1632/winprocs.spec] [if1632/winprocs.c] [include/winprocs.h]
[controls/widgets.c] [misc/shell.c] [misc/commdlg.c]
[windows/nonclient.c] [misc/message.c]
Added a new builtin DLL that provides 16 bit entry points for all
the Def*Procs (DefDlgProc, ButtonProc etc.). OWL programs work
again.
* [misc/shell.c]
RegOpenKey()/RegCreateKey() bugs fixed.
* [loader/ne_image.c]
Skipping the initialization of a DLL when CS == 0 was broken.
1995-04-03 18:55:37 +02:00
|
|
|
{
|
2001-12-15 00:14:22 +01:00
|
|
|
int type = (call->arg_types[i / 10] >> (3 * (i % 10))) & 7;
|
1998-02-15 20:40:49 +01:00
|
|
|
|
2001-12-15 00:14:22 +01:00
|
|
|
if (type == ARG_NONE) break;
|
2017-11-25 11:47:17 +01:00
|
|
|
if (i) TRACE( "," );
|
2001-12-15 00:14:22 +01:00
|
|
|
switch(type)
|
1998-02-15 20:40:49 +01:00
|
|
|
{
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_WORD:
|
2005-07-05 14:52:07 +02:00
|
|
|
args16 -= sizeof(WORD);
|
|
|
|
args32[nb_args] = *(WORD *)args16;
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x", *(WORD *)args16 );
|
2005-07-05 14:52:07 +02:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_SWORD:
|
|
|
|
args16 -= sizeof(WORD);
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = *(short *)args16;
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x", *(WORD *)args16 );
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_LONG:
|
|
|
|
args16 -= sizeof(int);
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = *(int *)args16;
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%08x", *(int *)args16 );
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_PTR:
|
|
|
|
args16 -= sizeof(SEGPTR);
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x:%04x", *(WORD *)(args16+2), *(WORD *)args16 );
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_STR:
|
|
|
|
args16 -= sizeof(int);
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = (int)MapSL( *(SEGPTR *)args16 );
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%08x %s", *(int *)args16, debugstr_a( MapSL(*(SEGPTR *)args16 )));
|
1998-02-15 20:40:49 +01:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
case ARG_SEGSTR:
|
|
|
|
args16 -= sizeof(SEGPTR);
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = *(SEGPTR *)args16;
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "%04x:%04x %s", *(WORD *)(args16+2), *(WORD *)args16,
|
|
|
|
debugstr_a( MapSL(*(SEGPTR *)args16 )) );
|
2001-12-15 00:14:22 +01:00
|
|
|
break;
|
2005-07-05 13:50:40 +02:00
|
|
|
case ARG_VARARG:
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "..." );
|
2005-07-05 14:52:07 +02:00
|
|
|
args32[nb_args] = (int)args16;
|
2005-07-05 13:50:40 +02:00
|
|
|
break;
|
2001-12-15 00:14:22 +01:00
|
|
|
default:
|
|
|
|
break;
|
1998-02-15 20:40:49 +01:00
|
|
|
}
|
Release 950403
Sun Apr 2 18:31:12 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [Configure] [if1632/Imakefile]
Removed new build and short names options.
* [if1632/*.c] [tools/build.c]
Implemented compiled call-back functions for better performance;
all the relay code is now done in assembly code generated by the
build program.
Relay code is no longer dependent on being loaded below 64K.
* [loader/resource.c]
Fixed memory leak in LoadString(). A fix will also be needed for
other resources.
* [memory/global.c]
Implemented global heap arenas, so we can store informations about
global blocks, like lock counts or owner handle.
Implemented FarGetOwner() and FarSetOwner().
Implemented global heap TOOLHELP functions.
* [memory/selector.c]
Bug fix: it was not possible to re-use a free selector.
Sun Apr 2 01:34:52 1995 Constantine Sapuntzakis (csapuntz@mit.edu)
* [controls/listbox.c]
Major work on listbox code
- Many bugs fixed (still many bugs)
- More messages supported
- Code simplified
Fri Mar 31 03:27:16 EST 1995 William Magro (wmagro@tc.cornell.edu)
* [controls/edit.c]
Lots of bug fixes related to diappearing text, lost carets,
highlighting, segmentation faults, occurance of random
characters, insertion of characters over selection, misplaced
caret location, display corruption, end of line behavior, etc.
* [controls/widgets.c]
EDIT class doesn't want to use CS_PARENTDC flag.
Thu Mar 30 20:58:25 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/selector.c]
FixupFunctionPrologs() should also handle multiple data modules.
(this bug only became visible because MakeProcInstance() was fixed
in 950319)
* [misc/dosfs.c]
Simplified DOS_SimplifyPath.
Small fix to DOS_opendir to reuse an entry if an open directory
is opened again, to prevent "too many open directories" messages.
Thu Mar 30 12:05:05 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/compobj.spec][include/compobj.h][misc/compobj.c]
CoDisconnectObject: new stub function
* [include/msdos.h]
fix DOSVERSION
* [loader/ne_image.c]
NE_FixupSegment: Be more generous on additive fixups
* [if1632/user.spec][misc/network.c]
Add more WNet* stubs
Wed Mar 29 11:47:22 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
DlgDirList(): send segptr instead of linear pointer
in message to static control
* [controls/menu.c]
Tried to implement ownerdrawn menuitems. Doesn't work.
* [if1632/gdi.spec] [include/windows.h] [objects/font.c]
Provide a stub for GetRasterizerCaps()
* [loader/selector.c]
Pass end address instead of length to LocalInit() in
CreateSelectors()
* [memory/local.c]
LocalInit(): If there's already a local heap in the segment, do
nothing and return TRUE
* [objects/linedda.c]
Replaced buggy LineDDA() with a Bresenham algorithm. Should work
now.
* [windows/cursor.c]
LoadCursor()/CreateCursor(): Cleaned up the mess. Needs some
more work still.
Tue Mar 21 17:54:43 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [if1632/relay.c] [if1632/callback.c] [include/dlls.h]
[if1632/winprocs.spec] [if1632/winprocs.c] [include/winprocs.h]
[controls/widgets.c] [misc/shell.c] [misc/commdlg.c]
[windows/nonclient.c] [misc/message.c]
Added a new builtin DLL that provides 16 bit entry points for all
the Def*Procs (DefDlgProc, ButtonProc etc.). OWL programs work
again.
* [misc/shell.c]
RegOpenKey()/RegCreateKey() bugs fixed.
* [loader/ne_image.c]
Skipping the initialization of a DLL when CS == 0 was broken.
1995-04-03 18:55:37 +02:00
|
|
|
}
|
Release 940405
Tue Apr 5 14:36:59 1994 Bob Amstadt (bob@pooh)
* [include/mdi.h] [windows/mdi.c]
Use WM_PARENTNOTIFY messages to activate children.
Generate WM_CHILDACTIVATE messages.
Beginnings handler for maxmized child window.
Clean up when children are destroyed.
* [windows/message.c] [windows/nonclient.c] [windows/winpos.c]
Removed code add 94/03/26.
Apr 4, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [control/menu.c]
Make mouse menu navigation working again. :-))
(be carefull, clicking outside menus (ie.: clientrect)
not resolved yet)
* [windows/nonclient.c] [controls/scroll.c]
Bugs fix in NCTrackScrollBars().
* [misc/dos_fs.c]
Bug fix in 'ToDos()' in conversion for '/',
(example: '/window/' was translated to 'WINDOWs').
* [miscemu/int21.c]
Function ChangeDir() extract possible drive before DOS_ChangeDir().
* [loader/library.c] [loader/wine.c]
Playing around moving function GetProcAddress() and put some code in.
Mon Apr 4 21:39:07 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [misc/main.c]
Better explanation of command-line options.
* [objects/dib.c]
Implemented SetDIBitsToDevice().
* [windows/dc.c]
Bug fix in SetDCState().
* [windows/event.c]
Removed WS_DISABLED handling (now done in message.c).
* [windows/message.c]
Added sending a WM_PARENTNOTIFY message in MSG_TranslateMouseMsg().
Use WindowFromPoint() to find the window for mouse events, taking
into account disabled windows.
* [windows/painting.c]
Bug fix in BeginPaint() to allow calling it at other times than
on WM_PAINT (Solitaire needs it...)
* [windows/win.c]
Implemented FindWindow().
Rewritten EnableWindow() to behave more like Windows.
* [windows/winpos.c]
Rewritten WindowFromPoint() to also search child windows.
Mon Apr 4 17:36:32 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [include/int21.h] -> [msdos.h]
renamed.
* [miscemu/int10.h] [miscemu/int25.h] [miscemu/int26.h]
new, added for int 10, 25 and 26.
* [miscemu/ioports.c]
new, added to allow win apps to use ioports.
* [loader/signal.c]
Added support for in, inb, out, outb instructions.
Sun Mar 27 13:40:25 1994 Bob Amstadt (bob@pooh)
* controls/menu.c (InsertMenu): Changed to use FindMenuItem().
Sat Mar 26 21:23:55 1994 Bob Amstadt (bob@pooh)
* [windows/mdi.c]
Window list properly updated.
* [windows/message.c]
Call WINPOS_ChildActivate() when mouse pressed.
* [windows/nonclient.c]
Use WINPOS_IsAnActiveWindow() instead of GetActiveWindow() in
NC_HandleNCPaint().
* [windows/winpos.c]
Created functions WINPOS_IsAnActiveWindow() and WINPOS_ActivateChild()
Thu Mar 24 14:49:17 1994 Bob Amstadt (bob@pooh)
* controls/menu.c (DeleteMenu): Changed to use FindMenuItem
(DeleteMenu): Many bug fixes.
* [controls/menu.c]
Created function FindMenuItem().
Thu Mar 24 14:17:24 1994 Bob Amstadt (bob@pooh)
* [windows/win.c]
Removed incorrect MDI handling code from CreateWindowEx().
* [controls/menu.c]
MF_STRING items needed to allocate a private copy of string.
* [controls/menu.c]
Fixed buggy calls to GlobalFree().
* [memory/global.c]
Eliminated some redundant code with function call.
Wed Mar 23 1994 Pentti Moilanen (pentti.moilanen@ntc.nokia.com)
* [windows/timer.c]
timer list pointers looped in InsertTimer
Tue Mar 29 13:32:08 MET DST 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [misc/cursor.c]
A few changes for desktop window support.
* [misc/main.c]
Added -depth option.
* [misc/rect.c]
Yet another bug fix in SubtractRect().
* [objects/bitmap.c]
Changes to use only one depth (specified with -depth)
for color bitmaps.
* [objects/brush.c]
Added support for dithered solid brushes.
* [objects/color.c]
Use the same 20 system colors as in Windows.
System palette initialisation now done in COLOR_InitPalette().
Added support for a color mapping table to map logical color
indexes to X colormap entries.
Implemented GetNearestColor() and RealizeDefaultPalette().
* [objects/dib.c]
Added support for color mapping table.
* [objects/dither.c] (New file)
Implemented solid color dithering.
* [objects/palette.c]
Implemented GetSystemPaletteEntries() and SelectPalette().
* [windows/class.c]
Make a copy of the menu name in RegisterClass().
* [windows/dc.c]
Fixed device caps when using a desktop window.
Added support for the color mapping table in DCs.
* [windows/event.c]
Added ConfigureNotify handler on desktop window.
* [windows/message.c]
Removed call to XTranslateCoordinates() on every mouse motion
New function MSG_Synchronize() to synchronize with the X server.
* [windows/syscolor.c]
Rewritten SYSCOLOR_Init() to read the system colors from WIN.INI.
* [windows/winpos.c]
Added synchronization on window mapping. Solves the double redraw
problem when starting Solitaire.
Mar 27, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [control/menu.c] * [windows/defwnd.c]
Make keyboard navigation working with menubar,
but temporarely inserted a bug in menubar mouse handling ... :-((
(it will be fix next week !)
* [windows/defwnd.c]
Connect VK_MENU to menubar navigation.
* [loader/library.c]
GetModuleHandle() return 'fictive 0xF000+ handles' for built-in DLLs.
Sun Mar 20 22:32:13 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [misc/main.c]
Added Copy(). Added a check for `-h' to show usage.
* [misc/dos_fs.c]
Fixed bug in FindFile(), to load directories as dlls.
* [misc/dos_fs.c]
Fixed ToUnix() and ToDos() again, as my previous patch
didn't make it.
* [misc/dos_fs.c] [miscemu/int21.c]
Bug fixes, should be able to handle all winfile and progman int21
requests now except for a few small things.
Tue Mar 29 06:25:54 1994 crw@harris.mlb.semi.harris.com (Carl Williams)
* [memory/heap.c]
Implemented GetFreeSystemResources().
Mon Mar 21 17:32:25 1994 Bob Amstadt (bob@pooh)
* controls/menu.c (GetSubMenu): Function did not return correct value
* [windows/mdi.c]
Beginnings of menu handling.
Thu Mar 10 11:32:06 1994 Stefan (SAM) Muenzel (muenzel@tat.physik.uni-tuebingen.de)
* [objects/font.c]
if font.width equals zero use asterix instead.
Mon Mar 21 17:23:37 MET 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [objects/bitmap.c]
Rewritten bitmap code to use exclusively X pixmaps; *much* faster.
* [objects/brush.c]
Some changes with pattern brushes because of the new bitmap code.
* [objects/color.c]
Added function COLOR_ToPhysical for better color mapping.
* [objects/dib.c]
Heavily optimized SetDIBits().
* [windows/dc.c]
Opimized SetDCState() and DC_SetupGC*() functions.
Added stub for CreateIC().
Mar 20, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [misc/message.c]
Call SetFocus() after closing box to give back focus to previous owner.
* [misc/files.c]
Small bug fix in GetTempFilename() : replace a '\' to '\\'.
* [control/scroll.c]
Calls to BitBlt() replace by StretchBlt().
* [control/menu.c]
Call SetFocus() to previous owner after closing Popups.
Fill stub DeleteMenu().
* [control/listbox.c]
* [control/combo.c]
Use SetFocus() in WM_LBUTTONDOWN.
Close ComboBox List upon WM_KILLFOCUS.
Early development of WM_MEASUREITEM mecanism.
* [windows/defwnd.c]
Early development of WM_MEASUREITEM mecanism.
Tue Mar 22 10:44:57 1994 Miguel de Icaza (miguel@xochitl)
* [misc/atom.c]
Fixed sintaxis problem when building the library.
Tue Mar 15 13:11:56 1994 Bob Amstadt (bob@pooh)
* [include/windows.h]
Added message types and structures for MDI
* [include/mdi.h]
Created internal structures for handling MDI
* [windows/mdi.c]
Began creating MDI support
Thu Mar 10 16:51:46 1994 Bob Amstadt (bob@pooh)
* [loader/wine.c] [include/wine.h]
Added new field to "struct w_files" to hold the "name table"
resource for Windows 3.0 programs
* [loader/resource.c]
Added code to handle programs with a "name table" resource.
LoadResourceByName() modified to check for the existence of
this resource.
Mon Mar 14 22:31:42 MET 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [objects/color.c]
Added installing the private colormap on the desktop window.
* [windows/event.c]
Cleaned up focus event handling (see focus.c).
Use GetFocus() to direct key events to the correct window.
* [windows/focus.c]
Rewritten SetFocus() to:
- only set X focus on top-level windows
- send WM_SETFOCUS and WM_KILLFOCUS messages (was done in event.c)
- prevent setting focus to disabled windows
- install private colormap so -privatemap option works again
* [windows/message.c] [windows/timer.c]
Changed timer management to no longer use PostMessage(), but
to generate timer messages on the fly. Also fixed a related bug
in GetMessage() which could cause busy-waiting.
* [windows/win.c]
Only select focus events on top-level windows.
* [windows/winpos.c]
Added some sanity checks for desktop window.
Fri Mar 4 20:42:01 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [misc/dos_fs.c]
bug fixes in ToUnix(), WinIniFileName(), GetUnixFileName().
Support for tilde symbol added for rootdirectories in [drives]
section of wine's configfile.
* [misc/file.c]
hread(), hwrite() added.
* [misc/main.c]
hmemcpy() added.
* [if1632/stress.spec] [include/stress.h] [misc/stress.c]
Added STRESS.DLL, an useless dll used to stress a windows system.
* [*/*]
Added missing #includes, fixed prototypes for prototype checking.
* [include/prototypes.h]
Added prototypes for loader/*c, if1632/*c.
Tue Mar 8 09:54:34 1994 Bob Amstadt (bob@pooh)
* [Configure]
Added reminder to set WINEPATH, if it is not set.
* [Imakefile]
Removed #elif's
* [controls/button.c]
Added BN_CLICKED notification for owner-draw buttons.
* [if1632/kernel.spec] [memory/heap.c]
Changed Local* functions to WIN16_Local* to prevent unconcious use
of these functions.
* [if1632/relay.c]
Push old Stack16Frame on stack before setting.
* [include/atom.h] [misc/atom.c] [include/heap.h] [memory/local.c]
Added multiple local heap handling in Atom* functions.
* [include/regfunc.h] [miscemu/int21.c]
Rewrote DOS3Call() use context frame that is already on the stack.
* [misc/profile.c]
Fixed to allow leading ";" to mark comments.
* [misc/spy.c]
Fixed bugs and added support for "include" and "exclude" filters.
* [misc/user.c]
Rearranged calls in InitApp().
* [misc/font.c]
Fixed font handling to create system fonts, if they are used.
* [windows/dc.c]
If text drawn on window with no font specified, then default the
font to the system font.
Mon Mar 7 20:32:09 MET 1994 julliard@di.epfl.ch (Alexandre Julliard)
* [controls/desktop.c]
Added handling of WM_NCCREATE and WM_ERASEBKGND functions.
Implemented SetDeskPattern().
* [misc/main.c]
Added -desktop option to get a large desktop window with
everything inside it.
Added -name option.
* [misc/rect.c]
Bug fix in SubtractRect().
* [objects/*.c]
Replaced the DefaultRootWindow() macro by the rootWindow variable.
* [windows/event.c] [windows/message.c]
[windows/nonclient.c] [windows/win.c]
A few changes to accomodate the new desktop window.
Tue Mar 8 11:13:03 1994 Miguel de Icaza (miguel@xochitl.nuclecu.unam.mx)
* [toolkit/arch.c] --New file--
Routines for converting little endian data structures to
big-endian data structures, currently only BITMAP structures are
converted.
* [misc/atom.c]
When used as part of the WineLib, the code is much simpler.
Doesn't depend on alignement.
* [loader/wine.c]
Ifdefed Emulator dependent code if compiling WineLib.
* [loader/resource.c]
Moved misc/resource.c to loader/resource.c.
* [loader/dump.c,ldt.c,ldtlib.c,library,c,selector.c,signal.c]
Ifdefed whole code if compiling WINELIB.
* [include/winsock.h]
Added compilation define to allow compilation on SunOS.
* [include/wine.h]
Removed load_typeinfo and load_nameinfo prototypes, they belong
to neexe.h
* [include/neexe.h]
Added load_typeinfo and load_nameinfo prototypes.
* [include/arch.h]
Fixed some bugs in the conversion routines.
Added macros for Bitmap loading.
Tue Mar 8 12:52:05 1994 crw@maniac.mlb.semi.harris.com (Carl Williams)
* [if1632/kernel.spec] [memory/global.c]
Implemented GetFreeSpace()
* [if1632/user.spec] [loader/resource.c]
Implemented CreateIcon()
1994-04-05 23:42:43 +02:00
|
|
|
}
|
1998-02-15 20:40:49 +01:00
|
|
|
|
2005-09-18 14:25:22 +02:00
|
|
|
if (!j) /* register function */
|
2005-07-05 14:52:07 +02:00
|
|
|
{
|
|
|
|
args32[nb_args++] = (int)context;
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( ") ret=%04x:%04x ax=%04x bx=%04x cx=%04x dx=%04x si=%04x di=%04x ds=%04x es=%04x efl=%08x\n",
|
|
|
|
frame->cs, frame->ip, (WORD)context->Eax, (WORD)context->Ebx, (WORD)context->Ecx,
|
|
|
|
(WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi, (WORD)context->SegDs,
|
|
|
|
(WORD)context->SegEs, context->EFlags );
|
2005-07-05 14:52:07 +02:00
|
|
|
}
|
2017-11-25 11:47:17 +01:00
|
|
|
else TRACE( ") ret=%04x:%04x ds=%04x\n", frame->cs, frame->ip, frame->ds );
|
1999-05-22 18:29:39 +02:00
|
|
|
|
|
|
|
SYSLEVEL_CheckNotLevel( 2 );
|
Release 0.4.10
Mon Nov 22 13:58:56 1993 David Metcalfe <david@prism.demon.co.uk>
* [windows/scroll.c]
Preliminary implementations of ScrollWindow, ScrollDC and
ScrollWindowEx.
Nov 21, 93 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/listbox.c]
Optimization of redraw during 'Add' or 'Insert'.
* [controls/scroll.c]
Optimization of WM_PAINT during 'thumbtracking'.
* [controls/button.c]
Add of beta implement of 'BS_OWNERDRAW'
* [controls/static.c]
Style 'SS_ICON' new supported.
* [misc/message.c]
Begin of implemantation of MB_XXX styles.
* [loader/resource.c]
Function LoadIcon() : now prepare transparency Bitmap mask.
Function LoadCursor() : now prepare a 'X pixmapcursor'.
New function SetCursor() : not finished.
New function ShowCursor() : not finished.
New function AccessResource() : stub.
* [obj/dib.c]
Function DrawIcon(): deugging phase of icon transparency mask.
* [loader/library.c]
new file for news functions LoadLibrary() & FreeLibrary().
* [sysres.dll]
Resources only 16bits DLL for System Resources, icons, etc...
Sun Nov 14 14:39:06 1993 julliard@di.epfl.ch (Alexandre Julliard)
* [include/dialog.h] [windows/dialog.c]
Simplified dialog template parsing.
Implemented DialogBoxIndirect().
* [windows/win.c]
Fixed bug in CreateWindow() when aborting window creation.
Modified UpdateWindow() to only update visible windows.
Implemented IsWindow().
Nov 14, 93 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/listbox.c]
Listbox control window : new messages.
* [controls/combo.c]
Combo box control window : new messages.
* [misc/message.c]
Moved stub MessageBox() to this new file.
Implemented of a callback, now MessageBox show a window.
* [loader/resource.c]
New function DestroyIcon()
New function DestroyCursor()
Filled stub LoadIcon()
Filled stub LoadCursor()
Bug fixed in FindResourceByName() : missing lseek().
* [obj/dib.c]
New function DrawIcon()
* [windows/win.c]
New function CloseWindow()
New function OpenIcon()
New function IsIconic()
New Function FindWindow()
Sun Nov 14 08:27:19 1993 Karl Guenter Wuensch (hz225wu@unidui.uni-duisburg.de)
* [loader/selector.c]
Wrote AllocCStoDSAlias() and AllocDStoCSAlias()
Sun Nov 14 08:27:19 1993 Bob Amstadt (bob at amscons)
* [loader/selector.c]
Wrote AllocSelector() and PrestoChangoSelector(). YUK!
Sat Nov 13 13:56:42 1993 Bob Amstadt (bob at amscons)
* [loader/resource.c]
Wrote FindResource(), LoadResource(), LockResource(),
and FreeResource()
* [include/segmem.h] [loader/selector.c] [loader/signal.h]
Changed selector allocation method.
Sun Nov 10 08:27:19 1993 Karl Guenter Wuensch (hz225wu@unidui.uni-duisburg.de)
* [if1632/callback.c if1632/call.S if1632/user.spec]
added Catch (KERNEL.55) and Throw (KERNEL.56)
Nov 7, 93 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [controls/scroll.c]
Scroll bar control window
Bug resolved : Painting message before scroll visible.
* [controls/listbox.c]
Listbox control window
Destroy cleanup.
* [controls/combo.c]
Combo box control window
Destroy cleanup.
* [controls/button.c]
GetCheck Message now return is state.
* [windows/win.c]
New function IsWindowVisible()
1993-11-24 18:08:56 +01:00
|
|
|
|
2005-07-22 21:50:13 +02:00
|
|
|
ret_val = call_entry_point( entry_point, nb_args, args32 );
|
1993-06-29 18:33:12 +02:00
|
|
|
|
2005-07-05 14:52:07 +02:00
|
|
|
SYSLEVEL_CheckNotLevel( 2 );
|
1999-07-11 15:58:31 +02:00
|
|
|
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "\1Ret %s.%d: %s() ", module, ordinal, func );
|
2005-09-18 14:25:22 +02:00
|
|
|
if (!j) /* register function */
|
1999-07-11 15:58:31 +02:00
|
|
|
{
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "retval=none ret=%04x:%04x ax=%04x bx=%04x cx=%04x dx=%04x si=%04x di=%04x ds=%04x es=%04x efl=%08x\n",
|
|
|
|
(WORD)context->SegCs, LOWORD(context->Eip), (WORD)context->Eax, (WORD)context->Ebx,
|
|
|
|
(WORD)context->Ecx, (WORD)context->Edx, (WORD)context->Esi, (WORD)context->Edi,
|
|
|
|
(WORD)context->SegDs, (WORD)context->SegEs, context->EFlags );
|
Release 950620
Mon Jun 19 20:29:50 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [debugger/*.c]
Modified debugger to use segmented pointers everywhere.
* [if1632/shell.spec] [if1632/sound.spec] [if1632/user.spec]
Declared all functions that return only 16-bit as 'pascal16'.
* [include/ldt.h] [memory/ldt.c]
Export LDT_EntryToBytes (new) and LDT_BytesToEntry for DPMI.
Maintain a copy of the selector flags, removing the need to make a
system call to retrieve an LDT entry.
* [loader/module.c]
Fixed bug with module file handle cache.
* [loader/ne_resource.c]
Fixed file name bug in NE_AccessResource().
* [loader/resource.c]
Fixed bug in LoadIcon() that caused wrong colors to be used for
the icon mask.
* [loader/signal.c]
Moved instruction emulation to miscemu/instr.c.
* [misc/dos_fs.c] [miscemu/int21.c]
Lots of small fixes, thanks to Morten Welinder.
* [miscemu/dpmi.c]
More complete DPMI emulation.
* [miscemu/instr.c]
Added support for prefixes in instructions to emulate.
* [miscemu/int2f.c]
Use register macros instead of destroying the high part of 32-bit
registers.
* [objects/dc.c]
Fixed bug in GetDCState() that failed to clear the new DC.
* [rc/sysres.rc]
Removed dialogs 11 and 12 that were never used.
* [tools/build.c]
'pascal16' generated functions did not save %dx.
Removed use of %fs to access the stack.
%ds is no longer initialized before calling a 16-bit routine.
* [windows/defwnd.c]
Accept a NULL pointer as window title.
* [windows/mdi.c]
MDICascade: skip iconic windows.
Implemented CalcChildScroll().
* [windows/utility.c]
Fixed MulDiv() for illegal values.
* [windows/win.c]
Fixed X error in CreateWindowEx() when WM_NCCALCSIZE returned
a zero width or height.
Sun Jun 18 22:22:30 MET DST 1995 Fons Botman (botman@inter.nl.net)
* [controls/edit.c]
Fixed "uninitalized" message which -Wall couldnt see to be ok
in EDIT_WriteText.
* [include/debug.h]
Added define for extra checks in API definitions during debugging.
* [loader/ne_image.c]
Added newline in NE_FixupPrologs to avoid long lines.
* [misc/dos_fs.c]
Added extra safety check in DOS_ValidDrive.
* [misc/exec.c]
Fixed definition of ExitWindows.
Sun Jun 18 21:16:08 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/edit.c]
Some fixes, mostly for memory management, but also for text selection
and tab postitions. General cleanup. Notepad.exe now works.
* [controls/combo.c]
Fix: the hwnd field of the DRAWITEMSTRUCT should always be that of
the combo box, not the ComboLBox that belongs to it.
* [controls/listbox.c]
Handle itemID field correctly throughout.
* [memory/local.c]
Implemented flag LMEM_ZEROINIT.
LocalReAlloc() could trash the heap. Fixed.
* [objects/font.c]
FONT_MatchFont(): don't get confused by negative widths.
Fixed a segfault in EnumFonts().
* [objects/text.c]
DrawText(): DT_CALCRECT implies DT_NOCLIP.
* [objects/dcvalues.c]
MAKELONG was used with bad parameters in DC_GET_X_Y.
* [windows/dialog.c]
Don't show the dialog if WS_VISIBLE isn't set in the template.
* [windows/utility.c]
UTILITY_convertArgs(): Never pass an expression containing ++ into a
macro...
* [windows/win.c]
SetParent() should unlink the window before changing the parent.
* [windows/message.c]
Don't call timer functions via CallWindowProc(), since it checks
whether hwnd==0 and does not call the function in that case.
* [miscemu/instr.c]
Ignore interrupt 0x3D, for VBRUN300.DLL.
* [misc/commdlg.c]
Don't rely on the itemData field of the DRAWITEMSTRUCT to contain a
pointer to the item text.
* [if1632/relay.c]
Disable OLE and DDEML DLLs by default, since they contain nothing but
stubs anyway. SHELL, COMMDLG and WIN87EM are left enabled, although
some programs may work better without them.
* [multimedia/*.c] [include/multimedia.h] [include/driver.h]
Begun cleaning things up a little. Replaced printfs with dprintf_
macros, made functions static where possible, and some other minor
changes.
Sun Jun 11 23:19:10 1995 Martin von Loewis <martin@informatik.hu-berlin.de>
* [debugger/dbg.y][debugger/dbg.l]
Removed special handling for FILE_IDENTIFER, because it caused
problems with x/<format> statements.
* [debugger/info.c]
Use SC_ESP instead of SC_EIP for stack dump.
* [misc/compobj.c][if1632/compobj.spec]
CoBuildVersion, CoInitialize, CoUninitialize: new functions
* [misc/ole2.c][if1632/ole2.spec][misc/Imakefile][include/ole2.h]
New files ole2.c, ole2.h
OleBuildVersion, OleInitialize, OleUninitialize: new functions
* [if1632/ole2disp.spec]
Added missing ordinals above 109
* [misc/ole2nls.c][if1632/ole2nls.spec][include/winnls.h]
New file winnls.h
GetLocaleInfoA: new function
* [if1632/shell.spec]
Added FindEnvironmentString as stub
* [misc/olecli.c][if1632/olecli.spec]
OleIsDcMeta: New function
* [objects/font][misc/gdi.spec]
GetKerningPairs: new function
* [misc/shell.c]
ShellExecute: Implemented support for starting programs
* [if1632/user.spec]
Inserted missing relay to GetClipCursor
Sun Jun 11 20:34:47 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/edit.c]
Fix a problem with the local heap.
* [include/wintypes.h]
Fixed wrong declarations of CATCHBUF and LPCATCHBUF.
* [include/mdi.h] [windows/mdi.c]
This code still assumed segmented address==linear address. Fixed.
* [include/msdos.h] [misc/dos_fs.c]
The filemask field of the dosdirent structure could be overrun. Fixed.
If you had a file called foobar and a file called foo, trying to
FindFile(foo) could accidentally find file foobar instead. Fixed.
* [misc/file.c]
OpenFile(): Always return the full pathname in ofs->szPathName. This
also fixes GetModuleFilename().
Prevent _lclose() from closing stderr or stdout.
* [misc/profile.c]
Search for .ini files in the path of the current module as well.
(Needed by Lotus Organizer.)
* [loader/task.c] [loader/ne_image.c] [loader/module.c]
[memory/local.c]
Local heaps are now initialized by InitTask() for executables. DLLs
have to call LocalInit() themselves, LocalInit() has to put the
heap at the end of the segment when called with start==0. We no longer
allocate the DGROUP with 64k on startup, but grow the local heap
in LOCAL_GetBlock() when necessary.
* [loader/module.c]
LoadLibrary() should call LoadModule() in all cases, even if the
DLL is already loaded, to ensure that the reference count is correct.
* [loader/ne_image.c]
Some changes to function prolog fixup. Does anyone know exactly how
this is supposed to work? I am only guessing here.
In NE_InitializeDLLs(), initialize the DLLs a module refers to before
the module itself.
* [loader/task.c]
Initialize instance data at the beginning of the DGROUP in InitTask().
* [memory/local.c]
Some fixes for moveable blocks.
* [memory/selector.c]
All the IsBad*Pointer() functions returned exactly the wrong boolean
value in all cases!
* [objects/bitblt.c]
Fixed another null pointer dereference in debugging output.
* [objects/font.c]
Some more recovery possibilities for FONT_MatchFont() if a specified
font does not exist.
* [windows/win.c]
The dialog code may call CreateWindowEx with an integer in windowName.
This happens for static icon controls that expect a resource ID as
the window name. CreateWindowEx() used to crash. Fixed.
* [windows/class.c] [windows/win.c]
Window classes are owned by modules, not instances. Changed
RegisterClass(), UnregisterClass(), GetClassInfo() and CreateWindowEx()
accordingly.
Sat Jun 10 16:10:53 1995 Olaf Flebbe <o.flebbe@science-computing.uni-tuebingen.de>
* [miscemu/int21.c]
clock.exe was displaying incorrect year.
Fri Jun 9 20:36:56 1995 Victor Schneider <tailor@crl.com>
* [include/cursor.h] [windows/cursor.c]
Implemented CreateCursorIconIndirect().
1995-06-20 21:08:12 +02:00
|
|
|
}
|
2001-12-15 00:14:22 +01:00
|
|
|
else
|
|
|
|
{
|
2005-07-05 14:52:07 +02:00
|
|
|
frame = CURRENT_STACK16; /* might have be changed by the entry point */
|
2005-09-18 14:25:22 +02:00
|
|
|
if (j == 1) /* 16-bit return sequence */
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "retval=%04x ret=%04x:%04x ds=%04x\n",
|
2005-07-05 14:52:07 +02:00
|
|
|
ret_val & 0xffff, frame->cs, frame->ip, frame->ds );
|
|
|
|
else
|
2017-11-25 11:47:17 +01:00
|
|
|
TRACE( "retval=%08x ret=%04x:%04x ds=%04x\n",
|
2005-07-05 14:52:07 +02:00
|
|
|
ret_val, frame->cs, frame->ip, frame->ds );
|
2001-12-15 00:14:22 +01:00
|
|
|
}
|
2005-07-05 14:52:07 +02:00
|
|
|
return ret_val;
|
Release 950403
Sun Apr 2 18:31:12 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
* [Configure] [if1632/Imakefile]
Removed new build and short names options.
* [if1632/*.c] [tools/build.c]
Implemented compiled call-back functions for better performance;
all the relay code is now done in assembly code generated by the
build program.
Relay code is no longer dependent on being loaded below 64K.
* [loader/resource.c]
Fixed memory leak in LoadString(). A fix will also be needed for
other resources.
* [memory/global.c]
Implemented global heap arenas, so we can store informations about
global blocks, like lock counts or owner handle.
Implemented FarGetOwner() and FarSetOwner().
Implemented global heap TOOLHELP functions.
* [memory/selector.c]
Bug fix: it was not possible to re-use a free selector.
Sun Apr 2 01:34:52 1995 Constantine Sapuntzakis (csapuntz@mit.edu)
* [controls/listbox.c]
Major work on listbox code
- Many bugs fixed (still many bugs)
- More messages supported
- Code simplified
Fri Mar 31 03:27:16 EST 1995 William Magro (wmagro@tc.cornell.edu)
* [controls/edit.c]
Lots of bug fixes related to diappearing text, lost carets,
highlighting, segmentation faults, occurance of random
characters, insertion of characters over selection, misplaced
caret location, display corruption, end of line behavior, etc.
* [controls/widgets.c]
EDIT class doesn't want to use CS_PARENTDC flag.
Thu Mar 30 20:58:25 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [loader/selector.c]
FixupFunctionPrologs() should also handle multiple data modules.
(this bug only became visible because MakeProcInstance() was fixed
in 950319)
* [misc/dosfs.c]
Simplified DOS_SimplifyPath.
Small fix to DOS_opendir to reuse an entry if an open directory
is opened again, to prevent "too many open directories" messages.
Thu Mar 30 12:05:05 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [if1632/compobj.spec][include/compobj.h][misc/compobj.c]
CoDisconnectObject: new stub function
* [include/msdos.h]
fix DOSVERSION
* [loader/ne_image.c]
NE_FixupSegment: Be more generous on additive fixups
* [if1632/user.spec][misc/network.c]
Add more WNet* stubs
Wed Mar 29 11:47:22 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
DlgDirList(): send segptr instead of linear pointer
in message to static control
* [controls/menu.c]
Tried to implement ownerdrawn menuitems. Doesn't work.
* [if1632/gdi.spec] [include/windows.h] [objects/font.c]
Provide a stub for GetRasterizerCaps()
* [loader/selector.c]
Pass end address instead of length to LocalInit() in
CreateSelectors()
* [memory/local.c]
LocalInit(): If there's already a local heap in the segment, do
nothing and return TRUE
* [objects/linedda.c]
Replaced buggy LineDDA() with a Bresenham algorithm. Should work
now.
* [windows/cursor.c]
LoadCursor()/CreateCursor(): Cleaned up the mess. Needs some
more work still.
Tue Mar 21 17:54:43 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [if1632/relay.c] [if1632/callback.c] [include/dlls.h]
[if1632/winprocs.spec] [if1632/winprocs.c] [include/winprocs.h]
[controls/widgets.c] [misc/shell.c] [misc/commdlg.c]
[windows/nonclient.c] [misc/message.c]
Added a new builtin DLL that provides 16 bit entry points for all
the Def*Procs (DefDlgProc, ButtonProc etc.). OWL programs work
again.
* [misc/shell.c]
RegOpenKey()/RegCreateKey() bugs fixed.
* [loader/ne_image.c]
Skipping the initialization of a DLL when CS == 0 was broken.
1995-04-03 18:55:37 +02:00
|
|
|
}
|
2003-10-09 00:41:12 +02:00
|
|
|
|
2010-01-05 14:26:05 +01:00
|
|
|
/**********************************************************************
|
|
|
|
* RELAY_GetPointer
|
|
|
|
*
|
|
|
|
* Get pointer to stack block when given esp pointing to 16-bit stack
|
|
|
|
* inside relay data segment.
|
|
|
|
*/
|
|
|
|
static RELAY_Stack16 *RELAY_GetPointer( DWORD offset )
|
|
|
|
{
|
|
|
|
offset = offset / sizeof(RELAY_Stack16) * sizeof(RELAY_Stack16);
|
|
|
|
return MapSL(MAKESEGPTR(DOSVM_dpmi_segments->relay_data_sel, offset));
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* RELAY_MakeShortContext
|
|
|
|
*
|
|
|
|
* Allocate separate 16-bit stack, make stack pointer point to this
|
|
|
|
* stack and make code pointer point to stub that restores everything.
|
|
|
|
* So, after this routine, SS and CS are guaranteed to be 16-bit.
|
|
|
|
*
|
|
|
|
* Note: This might be called from signal handler, so the stack
|
|
|
|
* allocation algorithm must be signal safe.
|
|
|
|
*/
|
2010-10-20 15:48:31 +02:00
|
|
|
static void RELAY_MakeShortContext( CONTEXT *context )
|
2010-01-05 14:26:05 +01:00
|
|
|
{
|
|
|
|
DWORD offset = offsetof(RELAY_Stack16, stack_top);
|
|
|
|
RELAY_Stack16 *stack = RELAY_GetPointer( 0 );
|
|
|
|
|
|
|
|
while (stack->inuse && offset < DOSVM_RELAY_DATA_SIZE) {
|
|
|
|
stack++;
|
|
|
|
offset += sizeof(RELAY_Stack16);
|
|
|
|
}
|
|
|
|
|
|
|
|
if (offset >= DOSVM_RELAY_DATA_SIZE)
|
|
|
|
ERR( "Too many nested interrupts!\n" );
|
|
|
|
|
|
|
|
stack->inuse = 1;
|
|
|
|
stack->eip = context->Eip;
|
|
|
|
stack->seg_cs = context->SegCs;
|
|
|
|
stack->esp = context->Esp;
|
|
|
|
stack->seg_ss = context->SegSs;
|
|
|
|
|
|
|
|
stack->stack_bottom = RELAY_MAGIC;
|
|
|
|
stack->stack_top = RELAY_MAGIC;
|
|
|
|
|
|
|
|
context->SegSs = DOSVM_dpmi_segments->relay_data_sel;
|
|
|
|
context->Esp = offset;
|
|
|
|
context->SegCs = DOSVM_dpmi_segments->relay_code_sel;
|
|
|
|
context->Eip = 3;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* RELAY_RelayStub
|
|
|
|
*
|
|
|
|
* This stub is called by __wine_call_from_16_regs in order to marshall
|
|
|
|
* relay parameters.
|
|
|
|
*/
|
2010-10-20 15:48:31 +02:00
|
|
|
static void __stdcall RELAY_RelayStub( DOSRELAY proc, unsigned char *args, CONTEXT *context )
|
2010-01-05 14:26:05 +01:00
|
|
|
{
|
|
|
|
if (proc)
|
|
|
|
{
|
|
|
|
RELAY_Stack16 *stack = RELAY_GetPointer( context->Esp );
|
|
|
|
|
|
|
|
DWORD old_seg_cs = context->SegCs;
|
|
|
|
DWORD old_eip = context->Eip;
|
|
|
|
DWORD old_seg_ss = context->SegSs;
|
|
|
|
DWORD old_esp = context->Esp;
|
|
|
|
|
|
|
|
context->SegCs = stack->seg_cs;
|
|
|
|
context->Eip = stack->eip;
|
|
|
|
context->SegSs = stack->seg_ss;
|
|
|
|
context->Esp = stack->esp;
|
|
|
|
|
|
|
|
proc( context, *(LPVOID *)args );
|
|
|
|
|
|
|
|
stack->seg_cs = context->SegCs;
|
|
|
|
stack->eip = context->Eip;
|
|
|
|
stack->seg_ss = context->SegSs;
|
|
|
|
stack->esp = context->Esp;
|
|
|
|
|
|
|
|
context->SegCs = old_seg_cs;
|
|
|
|
context->Eip = old_eip;
|
|
|
|
context->SegSs = old_seg_ss;
|
|
|
|
context->Esp = old_esp;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* DOSVM_RelayHandler
|
|
|
|
*
|
|
|
|
* Restore saved code and stack pointers and release stack block.
|
|
|
|
*/
|
2010-10-20 15:48:31 +02:00
|
|
|
void DOSVM_RelayHandler( CONTEXT *context )
|
2010-01-05 14:26:05 +01:00
|
|
|
{
|
|
|
|
RELAY_Stack16 *stack = RELAY_GetPointer( context->Esp );
|
|
|
|
|
|
|
|
context->SegSs = stack->seg_ss;
|
|
|
|
context->Esp = stack->esp;
|
|
|
|
context->SegCs = stack->seg_cs;
|
|
|
|
context->Eip = stack->eip;
|
|
|
|
|
|
|
|
if (!stack->inuse ||
|
|
|
|
stack->stack_bottom != RELAY_MAGIC ||
|
|
|
|
stack->stack_top != RELAY_MAGIC)
|
|
|
|
ERR( "Stack corrupted!\n" );
|
|
|
|
|
|
|
|
stack->inuse = 0;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
/**********************************************************************
|
|
|
|
* DOSVM_BuildCallFrame
|
|
|
|
*
|
|
|
|
* Modifies the context so that return to context calls DOSRELAY and
|
|
|
|
* only after return from DOSRELAY the original context will be returned to.
|
|
|
|
*/
|
2010-10-20 15:48:31 +02:00
|
|
|
void DOSVM_BuildCallFrame( CONTEXT *context, DOSRELAY relay, LPVOID data )
|
2010-01-05 14:26:05 +01:00
|
|
|
{
|
|
|
|
WORD code_sel = DOSVM_dpmi_segments->relay_code_sel;
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Allocate separate stack for relay call.
|
|
|
|
*/
|
|
|
|
RELAY_MakeShortContext( context );
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Build call frame.
|
|
|
|
*/
|
|
|
|
PUSH_WORD16( context, HIWORD(data) ); /* argument.hiword */
|
|
|
|
PUSH_WORD16( context, LOWORD(data) ); /* argument.loword */
|
|
|
|
PUSH_WORD16( context, context->SegCs ); /* STACK16FRAME.cs */
|
|
|
|
PUSH_WORD16( context, LOWORD(context->Eip) ); /* STACK16FRAME.ip */
|
|
|
|
PUSH_WORD16( context, LOWORD(context->Ebp) ); /* STACK16FRAME.bp */
|
|
|
|
PUSH_WORD16( context, HIWORD(relay) ); /* STACK16FRAME.entry_point.hiword */
|
|
|
|
PUSH_WORD16( context, LOWORD(relay) ); /* STACK16FRAME.entry_point.loword */
|
|
|
|
PUSH_WORD16( context, 0 ); /* STACK16FRAME.entry_ip */
|
|
|
|
PUSH_WORD16( context, HIWORD(RELAY_RelayStub) ); /* STACK16FRAME.relay.hiword */
|
|
|
|
PUSH_WORD16( context, LOWORD(RELAY_RelayStub) ); /* STACK16FRAME.relay.loword */
|
|
|
|
PUSH_WORD16( context, 0 ); /* STACK16FRAME.module_cs.hiword */
|
|
|
|
PUSH_WORD16( context, code_sel ); /* STACK16FRAME.module_cs.loword */
|
|
|
|
PUSH_WORD16( context, 0 ); /* STACK16FRAME.callfrom_ip.hiword */
|
|
|
|
PUSH_WORD16( context, 0 ); /* STACK16FRAME.callfrom_ip.loword */
|
|
|
|
|
|
|
|
/*
|
|
|
|
* Adjust code pointer.
|
|
|
|
*/
|
|
|
|
context->SegCs = wine_get_cs();
|
|
|
|
context->Eip = (DWORD)__wine_call_from_16_regs;
|
|
|
|
}
|