Release 940420

Wed Apr 20 14:53:35 1994  Bob Amstadt  (bob@pooh)

	* [tools/build.c] [if1632/call.S] [if1632/Imakefile]
	Fixed bug for non-Linux systems.

Apr 18, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)

	* [windows/win.c]
	Bug fixed in CreateWindowEx() : Now use SetMenu() for menubar setup.
	New empty stub for function SetSysModalWindow().

	* [misc/exec.c]
	New empty stub for function ExitWindows().

	* [objects/font.c]
	New empty stub for function EnumFonts().

	* New file [misc/property.c]
	New functions RemoveProp(), GetProp(), SetProp() & EnumProps().

	* New file [misc/shell.c]
	New empty stubs for function RegisterShellProc(), 
			ShellExecute() & ShellProc().

	* New files [loader/task.c] & [include/task.h]
	Move functions GetWindowTask(), GetNumTask(), EnumTaskWindows()
		from 'loader/library.c'.

	* [if1632/user.c] [if1632/kernel.c]
	Put Atoms functions entries.

	* [controls/combo.c]
	New functions DirDlgSelectComboBox() & DirDlgListComboBox().

	* [controls/listbox.c]
	New functions DirDlgSelect() & DirDlgList().

Sun Apr 17 20:57:59 1994  Erik Bos (erik@trashcan.hacktic.nl)

	* [objects/test.c]
	GrayString() added.

	* [if1632/callback.c]
	CallGrayStringProc() added.

	* [if1632/relay.c] [if1632/mmsystem.spec]
	Added.

	* [if1632/kernel.spec] [if1632/user.spec]
	Added forgotten specs for atom functions.

Tue Apr 12 00:05:31 1994  Bob Amstadt  (bob@pooh)

	* misc/spy.c (SpyInit): Added more message types

	* [windows/mdi.c] [include/mdi.h]
	Maximizing and restoring child windows.
	Tiling of child windows.

Mon Apr 11 20:48:28 1994  Alexandre Julliard  (julliard@lamisun.epfl.ch)

	* [windows/winpos.c]
	Revert focus and activation to previous window when hiding a window.

	* [windows/syscolor.c]
	Implemented system color objects (brushes and pens created at
	SetSysColor() time for better performance).

	* [windows/graphics.c] [windows/nonclient.c] [controls/button.c]
	Changed painting code to use system color objects.

	* [windows/message.c]
	New function MSG_InternalGetMessage() for internal messages
	loops (e.g. for dialogs or menus).

	* [windows/hook.c] [include/hook.h]  (New files)
	Beginning of the window hooks implementation.

	* [windows/dialog.c]
	Use new function MSG_InternalGetMessage() in DialogBox().

	* [if1632/callback.c]
	Added function CallHookProc().

Apr 11, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)

	* [windows/event.c]
	Bug fix : WM_CHARs are sent to focused window like WM_KEY???.

	* [misc/exec.c]
	Nothing much more than a stub for LoadModule(), I saw there a lot
		to be done in that corner, I will come back later ...

	* [loader/library.c]
	New functions GetWindowTask(), GetNumTask(), EnumTaskWindows() 
			and associated modules & tasks linked-lists.
	(it's only an 'emerging bud', more to come next weeks).

	* [loader/wine.c]
	Use LoadLibrary() instead of LoadImage() for 'sysres.dll'.

	* [control/menu.c]
	You can now click outside menu region without problem.
	Keyboard navig more smootly, even if a child has the focus.
	Bug fix in InsertItem(), (bad linklist when insert point not found).
	change Realloc for Free & Alloc in ModifyItem().
	MF_STRING now set BLACK_PEN to fix bug of bad color of the underscores 
		done by DrawText(), (maybe it should done in DrawText() itself ?).

Sun Apr 10 14:06:08 1994  Erik Bos (erik@trashcan.hacktic.nl)

	* [misc/profile.c]
	.INI files will now be stored in / loaded from the windows dir
	if no path is supplied.

	* [if1632/kernel.spec]
	Fixed GetDriveType's prototype.

	* [if1632/winsock.spec] [include/winsock.h] [misc/winsocket.c]
	Fixed prototypes: winsock uses a word as socket handle not an int.

	* [misc/winsocket.c]
	Added heap allocation for returned structures.
	Added non-blocking WSAAsyncGetXbyY() functions as blocking ones.

	* [loader/wine.c]
	Added IsDLLLoaded(), used in LoadImage() to prevent loading
	a dll multiple times.
	Directory is added to wine's path when a fullpath is supplied when
	starting wine.
	LoadImage(): DLL filename used instead DLL's own internal name,
	fixes 'Bad DLL name' errors.

Sat Apr  9 08:26:03 1994  David Metcalfe <david@prism.demon.co.uk>

	* [controls/edit.c] [controls/widgets.c]
	First release of edit control.
This commit is contained in:
Alexandre Julliard 1994-04-21 01:20:00 +00:00
parent 8d24ae6d31
commit 5819953c2a
126 changed files with 15468 additions and 4071 deletions

4
BUGS
View File

@ -1,5 +1,5 @@
- EBP and ESP are sometimes corrupted while running 16-bit code. - EBP and ESP are sometimes corrupted while running 16-bit code.
- Dialog Boxes created by WM_CREATE handler aren't visible - Dialog Boxes created by WM_CREATE handler aren't visible
- RegisterClass() with hbrBackground = COLOR_APPWORKSPACE+1 does not work. - RegisterClass() with hbrBackground = COLOR_APPWORKSPACE+1 does not work.
- MDI client area needs to resize when frame does - MDI does not send WM_GETMINMAX message.
- Need to generate WM_CHILDACTIVATE - InitializeLoadedDLLs() can't init LZEXPAND.DLL. (cs:ip => 0:0)

141
ChangeLog
View File

@ -1,3 +1,144 @@
Wed Apr 20 14:53:35 1994 Bob Amstadt (bob@pooh)
* [tools/build.c] [if1632/call.S] [if1632/Imakefile]
Fixed bug for non-Linux systems.
Apr 18, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [windows/win.c]
Bug fixed in CreateWindowEx() : Now use SetMenu() for menubar setup.
New empty stub for function SetSysModalWindow().
* [misc/exec.c]
New empty stub for function ExitWindows().
* [objects/font.c]
New empty stub for function EnumFonts().
* New file [misc/property.c]
New functions RemoveProp(), GetProp(), SetProp() & EnumProps().
* New file [misc/shell.c]
New empty stubs for function RegisterShellProc(),
ShellExecute() & ShellProc().
* New files [loader/task.c] & [include/task.h]
Move functions GetWindowTask(), GetNumTask(), EnumTaskWindows()
from 'loader/library.c'.
* [loader/library.c]
* [if1632/user.c] [if1632/kernel.c]
Put Atoms functions entries.
* [controls/combo.c]
New functions DirDlgSelectComboBox() & DirDlgListComboBox().
* [controls/listbox.c]
New functions DirDlgSelect() & DirDlgList().
Sun Apr 17 20:57:59 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [objects/test.c]
GrayString() added.
* [if1632/callback.c]
CallGrayStringProc() added.
* [if1632/relay.c] [if1632/mmsystem.spec]
Added.
* [if1632/kernel.spec] [if1632/user.spec]
Added forgotten specs for atom functions.
----------------------------------------------------------------------
Tue Apr 12 00:05:31 1994 Bob Amstadt (bob@pooh)
* misc/spy.c (SpyInit): Added more message types
* [windows/mdi.c] [include/mdi.h]
Maximizing and restoring child windows.
Tiling of child windows.
Mon Apr 11 20:48:28 1994 Alexandre Julliard (julliard@lamisun.epfl.ch)
* [windows/winpos.c]
Revert focus and activation to previous window when hiding a window.
* [windows/syscolor.c]
Implemented system color objects (brushes and pens created at
SetSysColor() time for better performance).
* [windows/graphics.c] [windows/nonclient.c] [controls/button.c]
Changed painting code to use system color objects.
* [windows/message.c]
New function MSG_InternalGetMessage() for internal messages
loops (e.g. for dialogs or menus).
* [windows/hook.c] [include/hook.h] (New files)
Beginning of the window hooks implementation.
* [windows/dialog.c]
Use new function MSG_InternalGetMessage() in DialogBox().
* [if1632/callback.c]
Added function CallHookProc().
Apr 11, 94 martin2@trgcorp.solucorp.qc.ca (Martin Ayotte)
* [windows/event.c]
Bug fix : WM_CHARs are sent to focused window like WM_KEY???.
* [misc/exec.c]
Nothing much more than a stub for LoadModule(), I saw there a lot
to be done in that corner, I will come back later ...
* [loader/library.c]
New functions GetWindowTask(), GetNumTask(), EnumTaskWindows()
and associated modules & tasks linked-lists.
(it's only an 'emerging bud', more to come next weeks).
* [loader/wine.c]
Use LoadLibrary() instead of LoadImage() for 'sysres.dll'.
* [control/menu.c]
You can now click outside menu region without problem.
Keyboard navig more smootly, even if a child has the focus.
Bug fix in InsertItem(), (bad linklist when insert point not found).
change Realloc for Free & Alloc in ModifyItem().
MF_STRING now set BLACK_PEN to fix bug of bad color of the underscores
done by DrawText(), (maybe it should done in DrawText() itself ?).
Sun Apr 10 14:06:08 1994 Erik Bos (erik@trashcan.hacktic.nl)
* [misc/profile.c]
.INI files will now be stored in / loaded from the windows dir
if no path is supplied.
* [if1632/kernel.spec]
Fixed GetDriveType's prototype.
* [if1632/winsock.spec] [include/winsock.h] [misc/winsocket.c]
Fixed prototypes: winsock uses a word as socket handle not an int.
* [misc/winsocket.c]
Added heap allocation for returned structures.
Added non-blocking WSAAsyncGetXbyY() functions as blocking ones.
* [loader/wine.c]
Added IsDLLLoaded(), used in LoadImage() to prevent loading
a dll multiple times.
Directory is added to wine's path when a fullpath is supplied when
starting wine.
LoadImage(): DLL filename used instead DLL's own internal name,
fixes 'Bad DLL name' errors.
Sat Apr 9 08:26:03 1994 David Metcalfe <david@prism.demon.co.uk>
* [controls/edit.c] [controls/widgets.c]
First release of edit control.
---------------------------------------------------------------------- ----------------------------------------------------------------------
Tue Apr 5 14:36:59 1994 Bob Amstadt (bob@pooh) Tue Apr 5 14:36:59 1994 Bob Amstadt (bob@pooh)

0
Configure Executable file → Normal file
View File

View File

@ -1,29 +0,0 @@
You may without charge, royalty or other payment, copy and
distribute copies of this work and derivative works of this work
in source or binary form provided that: (1)
you appropriately publish on each copy an appropriate copyright
notice; (2) faithfully reproduce all prior copyright notices
included in the original work (you may also add your own
copyright notice); and (3) agree to indemnify and hold all prior
authors, copyright holders and licensors of the work harmless
from and against all damages arising from use of the work.
You may distribute sources of derivative works of the work
provided that (1) (a) all source files of the original work that
have been modified, (b) all source files of the derivative work
that contain any party of the original work, and (c) all source
files of the derivative work that are necessary to compile, link
and run the derivative work without unresolved external calls and
with the same functionality of the original work ("Necessary
Sources") carry a prominent notice explaining the nature and date
of the modification and/or creation. You are encouraged to make
the Necessary Sources available under this license in order to
further the development and acceptance of the work.
EXCEPT AS OTHERWISE RESTRICTED BY LAW, THIS WORK IS PROVIDED
WITHOUT ANY EXPRESS OR IMPLIED WARRANTIES OF ANY KIND, INCLUDING
BUT NOT LIMITED TO, ANY IMPLIED WARRANTIES OF FITNESS FOR A
PARTICULAR PURPOSE, MERCHANTABILITY OR TITLE. EXCEPT AS
OTHERWISE PROVIDED BY LAW, NO AUTHOR, COPYRIGHT HOLDER OR
LICENSOR SHALL BE LIABLE TO YOU FOR DAMAGES OF ANY KIND, EVEN IF
ADVISED OF THE POSSIBILITY OF SUCH DAMAGES.

17
README
View File

@ -115,6 +115,9 @@ For example: to run Windows' solitaire:
wine /usr/windows/sol.exe (using a unixfilename) wine /usr/windows/sol.exe (using a unixfilename)
note: the path of the file will also be added to the path when
a full name is supplied on the commandline.
Have a nice game of solitaire, but be careful. Emulation isn't perfect. Have a nice game of solitaire, but be careful. Emulation isn't perfect.
So, occassionally it will crash. So, occassionally it will crash.
@ -168,6 +171,20 @@ bob@amscons.com
7. WHAT'S NEW 7. WHAT'S NEW
WHAT'S NEW with Wine-940420: (see ChangeLog for details)
- new property functions
- new listbox and combo box functions
- GrayString() and CallGrayStringProc()
- and many many bug fixes!
WHAT'S NEW with Wine-940412: (see ChangeLog for details)
- menuing improvements
- drawing performance improvements
- beginnings of hooks
- MDI maximizing and tiling
- improvements in winsock implementation
- and many many bug fixes!
WHAT'S NEW with Wine-940405: (see ChangeLog for details) WHAT'S NEW with Wine-940405: (see ChangeLog for details)
- Mouse activation of menus working again - Mouse activation of menus working again
- GetprocAddress() - GetprocAddress()

View File

@ -1,45 +0,0 @@
Status of MS Windows 3.1 Applets
September 13, 1993
I copied the following DLLs from my Windows (3.1) directory to my Wine
directory. Below I show how most of the programs included with
Windows 3.1 died.
commdlg.dll olesvr.dll recorder.dll
olecli.dll pbrush.dll toolhelp.dll
Scott Laird (lair@midway.uchicago.edu)
calc.exe dies no USER.89 (CreateDialog)
calendar.exe dies no KERNEL.60 (FindResource)
cardfile.exe cannot read relocation info
charmap.exe dies no USER.89 (CreateDialog)
clipbrd.exe dies no error
clock.exe dies no KERNEL.60 (FindResource)
control.exe dies no KERNEL.90 (lstrlen)
drwatson.exe dies no KERNEL.36 (GetCurrentTask)
mplayer.exe no MMSYSTEM.dll
notepad.exe dies no error
nwpopup.exe dies no KERNEL.47 (GetModuleHandle)
packager.exe cannot read relocation info
pbrush.exe cannot read relocation info
pifedit.exe dies no KERNEL.60 (FindResource)
printman.exe dies no KERNEL.107 (SetErrorMode)
progman.exe dies no error
recorder.exe cannot read relocation info
regedit.exe dies no KERNEL.90 (lstrlen)
sol.exe ** RUNS **
soundrec.exe no MMSYSTEM.dll
sysedit.exe dies no USER.159 (GetSubMenu)
terminal.exe dies int21 2a
winfile.exe DOS ax=2fdf, dies no KERNEL.107
winhelp.exe dies no KERNEL.60 (FindResource)
winmine.exe dies no USER.256 (GetDesktopWindow)
winpopup.exe no NETAPI
wintutor.exe 'Cannot load WINTUTOR.DAT' (file present)
write.exe cannot read relocation info

Binary file not shown.

View File

@ -1,2 +1,6 @@
/* autoconf.h generated automatically. Run Configure. */ /* autoconf.h generated automatically. Run Configure. */
#error You must run Configure before you can build the makefiles.
#define WINE_INI_GLOBAL "/home/alex/wine/wine.conf"
#define AutoDefines

View File

@ -9,6 +9,7 @@ SRCS = \
menu.c \ menu.c \
scroll.c \ scroll.c \
static.c \ static.c \
edit.o \
desktop.c \ desktop.c \
widgets.c widgets.c

View File

@ -10,12 +10,10 @@ static char Copyright2[] = "Copyright David Metcalfe, 1993";
#include <windows.h> #include <windows.h>
#include "win.h" #include "win.h"
#include "user.h" #include "user.h"
#include "syscolor.h"
LONG ButtonWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam); LONG ButtonWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam);
static COLORREF color_windowtext, color_windowframe, color_btnface,
color_btnshadow, color_btntext, color_btnhighlight;
static BOOL pressed; static BOOL pressed;
#define NOTIFY_PARENT(hWndCntrl, wNotifyCode) \ #define NOTIFY_PARENT(hWndCntrl, wNotifyCode) \
@ -203,14 +201,6 @@ LONG ButtonWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam)
lResult = -1L; lResult = -1L;
else else
{ {
/* initialise colours used for button rendering: */
color_windowtext = GetSysColor(COLOR_WINDOWTEXT);
color_windowframe = GetSysColor(COLOR_WINDOWFRAME);
color_btnface = GetSysColor(COLOR_BTNFACE);
color_btnshadow = GetSysColor(COLOR_BTNSHADOW);
color_btntext = GetSysColor(COLOR_BTNTEXT);
color_btnhighlight = GetSysColor(COLOR_BTNHIGHLIGHT);
(WORD)(*(wndPtr->wExtra)) = 0; (WORD)(*(wndPtr->wExtra)) = 0;
pressed = FALSE; pressed = FALSE;
lResult = 0L; lResult = 0L;
@ -246,12 +236,6 @@ LONG ButtonWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam)
break; break;
case WM_SYSCOLORCHANGE: case WM_SYSCOLORCHANGE:
color_windowtext = GetSysColor(COLOR_WINDOWTEXT);
color_windowframe = GetSysColor(COLOR_WINDOWFRAME);
color_btnface = GetSysColor(COLOR_BTNFACE);
color_btnshadow = GetSysColor(COLOR_BTNSHADOW);
color_btntext = GetSysColor(COLOR_BTNTEXT);
color_btnhighlight = GetSysColor(COLOR_BTNHIGHLIGHT);
InvalidateRect(hWnd, NULL, TRUE); InvalidateRect(hWnd, NULL, TRUE);
break; break;
@ -296,7 +280,7 @@ static LONG PB_Paint(HWND hWnd)
static LONG PB_LButtonDown(HWND hWnd, WORD wParam, LONG lParam) static LONG PB_LButtonDown(HWND hWnd, WORD wParam, LONG lParam)
{ {
/* SetFocus(hWnd); */ SetFocus(hWnd);
SetCapture(hWnd); SetCapture(hWnd);
pressed = TRUE; pressed = TRUE;
InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWnd, NULL, FALSE);
@ -334,8 +318,8 @@ static LONG PB_KillFocus(HWND hWnd)
static void DrawRaisedPushButton(HDC hDC, HWND hButton, RECT rc) static void DrawRaisedPushButton(HDC hDC, HWND hButton, RECT rc)
{ {
HPEN hOldPen, hFramePen; HPEN hOldPen;
HBRUSH hOldBrush, hShadowBrush, hHighlightBrush, hBackgrndBrush; HBRUSH hOldBrush;
HRGN rgn1, rgn2, rgn; HRGN rgn1, rgn2, rgn;
int len; int len;
static char text[50+1]; static char text[50+1];
@ -343,13 +327,9 @@ static void DrawRaisedPushButton(HDC hDC, HWND hButton, RECT rc)
DWORD dwTextSize; DWORD dwTextSize;
int delta; int delta;
TEXTMETRIC tm; TEXTMETRIC tm;
int i;
hFramePen = CreatePen(PS_SOLID, 1, color_windowframe); hOldPen = (HPEN)SelectObject(hDC, sysColorObjects.hpenWindowFrame);
hBackgrndBrush = CreateSolidBrush(color_btnface); hOldBrush = (HBRUSH)SelectObject(hDC, sysColorObjects.hbrushBtnFace);
hOldPen = (HPEN)SelectObject(hDC, (HANDLE)hFramePen);
hOldBrush = (HBRUSH)SelectObject(hDC, (HANDLE)hBackgrndBrush);
SetBkMode(hDC, TRANSPARENT); SetBkMode(hDC, TRANSPARENT);
rgn = CreateRectRgn(0, 0, 0, 0); rgn = CreateRectRgn(0, 0, 0, 0);
@ -380,10 +360,9 @@ static void DrawRaisedPushButton(HDC hDC, HWND hButton, RECT rc)
points[4].y = rc.top+1; points[4].y = rc.top+1;
points[5].x = rc.left+2; points[5].x = rc.left+2;
points[5].y = rc.top+1; points[5].y = rc.top+1;
hHighlightBrush = CreateSolidBrush(color_btnhighlight);
rgn2 = CreatePolygonRgn(points, DIM(points), ALTERNATE); rgn2 = CreatePolygonRgn(points, DIM(points), ALTERNATE);
CombineRgn(rgn, rgn1, rgn2, RGN_AND); CombineRgn(rgn, rgn1, rgn2, RGN_AND);
FillRgn(hDC, rgn2, hHighlightBrush); FillRgn(hDC, rgn2, sysColorObjects.hbrushBtnHighlight);
/* draw button shadow: */ /* draw button shadow: */
points[0].x = rc.left+2; points[0].x = rc.left+2;
@ -398,10 +377,9 @@ static void DrawRaisedPushButton(HDC hDC, HWND hButton, RECT rc)
points[4].y = rc.top; points[4].y = rc.top;
points[5].x = rc.right-1; points[5].x = rc.right-1;
points[5].y = rc.bottom; points[5].y = rc.bottom;
hShadowBrush = CreateSolidBrush(color_btnshadow);
rgn2 = CreatePolygonRgn(points, DIM(points), ALTERNATE); rgn2 = CreatePolygonRgn(points, DIM(points), ALTERNATE);
CombineRgn(rgn, rgn1, rgn2, RGN_AND); CombineRgn(rgn, rgn1, rgn2, RGN_AND);
FillRgn(hDC, rgn2, hShadowBrush); FillRgn(hDC, rgn2, sysColorObjects.hbrushBtnShadow);
/* do we have the focus? */ /* do we have the focus? */
if (len >= 1 && GetFocus() == hButton) { if (len >= 1 && GetFocus() == hButton) {
@ -416,9 +394,6 @@ static void DrawRaisedPushButton(HDC hDC, HWND hButton, RECT rc)
SelectObject(hDC, (HANDLE)hOldPen); SelectObject(hDC, (HANDLE)hOldPen);
SelectObject(hDC, (HANDLE)hOldBrush); SelectObject(hDC, (HANDLE)hOldBrush);
DeleteObject((HANDLE)hFramePen);
DeleteObject((HANDLE)hShadowBrush);
DeleteObject((HANDLE)hBackgrndBrush);
DeleteObject((HANDLE)rgn1); DeleteObject((HANDLE)rgn1);
DeleteObject((HANDLE)rgn2); DeleteObject((HANDLE)rgn2);
DeleteObject((HANDLE)rgn); DeleteObject((HANDLE)rgn);
@ -427,20 +402,16 @@ static void DrawRaisedPushButton(HDC hDC, HWND hButton, RECT rc)
static void DrawPressedPushButton(HDC hDC, HWND hButton, RECT rc) static void DrawPressedPushButton(HDC hDC, HWND hButton, RECT rc)
{ {
HPEN hOldPen, hShadowPen, hFramePen; HPEN hOldPen;
HBRUSH hOldBrush, hBackgrndBrush; HBRUSH hOldBrush;
HRGN rgn1, rgn2, rgn;
int len; int len;
static char text[50+1]; static char text[50+1];
DWORD dwTextSize; DWORD dwTextSize;
int delta; int delta;
TEXTMETRIC tm; TEXTMETRIC tm;
hFramePen = CreatePen(PS_SOLID, 1, color_windowframe); hOldBrush = (HBRUSH)SelectObject(hDC, sysColorObjects.hbrushBtnFace);
hBackgrndBrush = CreateSolidBrush(color_btnface); hOldPen = (HPEN)SelectObject(hDC, sysColorObjects.hpenWindowFrame);
hOldBrush = (HBRUSH)SelectObject(hDC, (HANDLE)hBackgrndBrush);
hOldPen = (HPEN)SelectObject(hDC, (HANDLE)hFramePen);
SetBkMode(hDC, TRANSPARENT); SetBkMode(hDC, TRANSPARENT);
/* give parent a chance to alter parameters: */ /* give parent a chance to alter parameters: */
@ -449,11 +420,9 @@ static void DrawPressedPushButton(HDC hDC, HWND hButton, RECT rc)
Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom); Rectangle(hDC, rc.left, rc.top, rc.right, rc.bottom);
/* draw button shadow: */ /* draw button shadow: */
hShadowPen = CreatePen(PS_SOLID, 1, color_btnshadow); SelectObject(hDC, sysColorObjects.hbrushBtnShadow );
SelectObject(hDC, (HANDLE)hShadowPen); PatBlt(hDC, rc.left+1, rc.top+1, 1, rc.bottom-rc.top-2, PATCOPY );
MoveTo(hDC, rc.left+1, rc.bottom-1); PatBlt(hDC, rc.left+1, rc.top+1, rc.right-rc.left-2, 1, PATCOPY );
LineTo(hDC, rc.left+1, rc.top+1);
LineTo(hDC, rc.right-1, rc.top+1);
/* draw button label, if any: */ /* draw button label, if any: */
len = GetWindowText(hButton, text, sizeof text); len = GetWindowText(hButton, text, sizeof text);
@ -476,9 +445,6 @@ static void DrawPressedPushButton(HDC hDC, HWND hButton, RECT rc)
SelectObject(hDC, (HANDLE)hOldPen); SelectObject(hDC, (HANDLE)hOldPen);
SelectObject(hDC, (HANDLE)hOldBrush); SelectObject(hDC, (HANDLE)hOldBrush);
DeleteObject((HANDLE)hBackgrndBrush);
DeleteObject(SelectObject(hDC, (HANDLE)hFramePen));
DeleteObject(SelectObject(hDC, (HANDLE)hShadowPen));
} }
@ -491,7 +457,7 @@ static LONG CB_Paint(HWND hWnd)
PAINTSTRUCT ps; PAINTSTRUCT ps;
RECT rc, rc3; RECT rc, rc3;
HDC hDC; HDC hDC;
HPEN hPen, hOldPen; HPEN hOldPen;
HBRUSH hBrush, hGrayBrush; HBRUSH hBrush, hGrayBrush;
int textlen, delta; int textlen, delta;
char *text; char *text;
@ -503,8 +469,7 @@ static LONG CB_Paint(HWND hWnd)
hDC = BeginPaint(hWnd, &ps); hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc); GetClientRect(hWnd, &rc);
hPen = CreatePen(PS_SOLID, 1, color_windowtext); hOldPen = (HPEN)SelectObject(hDC, sysColorObjects.hpenWindowText);
hOldPen = (HPEN)SelectObject(hDC, (HANDLE)hPen);
hGrayBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH); hGrayBrush = (HBRUSH)GetStockObject(LTGRAY_BRUSH);
hBrush = SendMessage(GetParent(hWnd), WM_CTLCOLOR, (WORD)hDC, hBrush = SendMessage(GetParent(hWnd), WM_CTLCOLOR, (WORD)hDC,
@ -555,6 +520,7 @@ static LONG CB_Paint(HWND hWnd)
DrawFocusRect(hDC, &rc); DrawFocusRect(hDC, &rc);
} }
SelectObject(hDC, hOldPen);
USER_HEAP_FREE(hText); USER_HEAP_FREE(hText);
GlobalUnlock(hWnd); GlobalUnlock(hWnd);
EndPaint(hWnd, &ps); EndPaint(hWnd, &ps);
@ -577,7 +543,7 @@ static LONG CB_LButtonDown(HWND hWnd, WORD wParam, LONG lParam)
rc.right = tm.tmHeight; rc.right = tm.tmHeight;
if (PtInRect(&rc, MAKEPOINT(lParam))) if (PtInRect(&rc, MAKEPOINT(lParam)))
{ {
/* SetFocus(hWnd); */ SetFocus(hWnd);
SetCapture(hWnd); SetCapture(hWnd);
pressed = TRUE; pressed = TRUE;
InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWnd, NULL, FALSE);
@ -704,7 +670,7 @@ static LONG RB_Paint(HWND hWnd)
PAINTSTRUCT ps; PAINTSTRUCT ps;
RECT rc; RECT rc;
HDC hDC; HDC hDC;
HPEN hPen, hOldPen; HPEN hOldPen;
HBRUSH hBrush, hOldBrush; HBRUSH hBrush, hOldBrush;
int textlen, delta; int textlen, delta;
char *text; char *text;
@ -716,8 +682,7 @@ static LONG RB_Paint(HWND hWnd)
hDC = BeginPaint(hWnd, &ps); hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc); GetClientRect(hWnd, &rc);
hPen = CreatePen(PS_SOLID, 1, color_windowtext); hOldPen = (HPEN)SelectObject(hDC, sysColorObjects.hpenWindowText);
hOldPen = (HPEN)SelectObject(hDC, (HANDLE)hPen);
hBrush = SendMessage(GetParent(hWnd), WM_CTLCOLOR, (WORD)hDC, hBrush = SendMessage(GetParent(hWnd), WM_CTLCOLOR, (WORD)hDC,
MAKELPARAM(hWnd, CTLCOLOR_BTN)); MAKELPARAM(hWnd, CTLCOLOR_BTN));
@ -737,7 +702,7 @@ static LONG RB_Paint(HWND hWnd)
if ((WORD)(*(wndPtr->wExtra)) == 1) if ((WORD)(*(wndPtr->wExtra)) == 1)
{ {
hBrush = CreateSolidBrush(color_windowtext); hBrush = CreateSolidBrush( GetNearestColor(hDC, GetSysColor(COLOR_WINDOWTEXT)));
hOldBrush = (HBRUSH)SelectObject(hDC, (HANDLE)hBrush); hOldBrush = (HBRUSH)SelectObject(hDC, (HANDLE)hBrush);
Ellipse(hDC, 3, rc.top + delta + 3, tm.tmHeight - 3, Ellipse(hDC, 3, rc.top + delta + 3, tm.tmHeight - 3,
tm.tmHeight + delta -3); tm.tmHeight + delta -3);
@ -759,6 +724,7 @@ static LONG RB_Paint(HWND hWnd)
DrawFocusRect(hDC, &rc); DrawFocusRect(hDC, &rc);
} }
SelectObject(hDC, hOldPen );
USER_HEAP_FREE(hText); USER_HEAP_FREE(hText);
GlobalUnlock(hWnd); GlobalUnlock(hWnd);
EndPaint(hWnd, &ps); EndPaint(hWnd, &ps);
@ -781,7 +747,7 @@ static LONG RB_LButtonDown(HWND hWnd, WORD wParam, LONG lParam)
rc.right = tm.tmHeight; rc.right = tm.tmHeight;
if (PtInRect(&rc, MAKEPOINT(lParam))) if (PtInRect(&rc, MAKEPOINT(lParam)))
{ {
/* SetFocus(hWnd); */ SetFocus(hWnd);
SetCapture(hWnd); SetCapture(hWnd);
pressed = TRUE; pressed = TRUE;
InvalidateRect(hWnd, NULL, FALSE); InvalidateRect(hWnd, NULL, FALSE);
@ -880,7 +846,7 @@ static LONG GB_Paint(HWND hWnd)
PAINTSTRUCT ps; PAINTSTRUCT ps;
RECT rc; RECT rc;
HDC hDC; HDC hDC;
HPEN hPen, hOldPen; HPEN hOldPen;
HBRUSH hBrush; HBRUSH hBrush;
int textlen; int textlen;
char *text; char *text;
@ -890,8 +856,7 @@ static LONG GB_Paint(HWND hWnd)
hDC = BeginPaint(hWnd, &ps); hDC = BeginPaint(hWnd, &ps);
GetClientRect(hWnd, &rc); GetClientRect(hWnd, &rc);
hPen = CreatePen(PS_SOLID, 1, color_windowtext); hOldPen = (HPEN)SelectObject(hDC, sysColorObjects.hpenWindowText);
hOldPen = (HPEN)SelectObject(hDC, (HANDLE)hPen);
hBrush = SendMessage(GetParent(hWnd), WM_CTLCOLOR, (WORD)hDC, hBrush = SendMessage(GetParent(hWnd), WM_CTLCOLOR, (WORD)hDC,
MAKELPARAM(hWnd, CTLCOLOR_BTN)); MAKELPARAM(hWnd, CTLCOLOR_BTN));
@ -911,6 +876,7 @@ static LONG GB_Paint(HWND hWnd)
rc.bottom = size.cy; rc.bottom = size.cy;
DrawText(hDC, text, textlen, &rc, DT_SINGLELINE); DrawText(hDC, text, textlen, &rc, DT_SINGLELINE);
SelectObject(hDC, hOldPen );
USER_HEAP_FREE(hText); USER_HEAP_FREE(hText);
EndPaint(hWnd, &ps); EndPaint(hWnd, &ps);
} }
@ -947,7 +913,7 @@ static LONG UB_LButtonDown(HWND hWnd, WORD wParam, LONG lParam)
{ {
RECT rc; RECT rc;
/* SetFocus(hWnd); */ SetFocus(hWnd);
SetCapture(hWnd); SetCapture(hWnd);
GetClientRect(hWnd, &rc); GetClientRect(hWnd, &rc);
if (PtInRect(&rc, MAKEPOINT(lParam))) if (PtInRect(&rc, MAKEPOINT(lParam)))
@ -1013,7 +979,7 @@ static LONG OB_LButtonDown(HWND hWnd, WORD wParam, LONG lParam)
HANDLE hDis; HANDLE hDis;
LPDRAWITEMSTRUCT lpdis; LPDRAWITEMSTRUCT lpdis;
WND *wndPtr = WIN_FindWndPtr(hWnd); WND *wndPtr = WIN_FindWndPtr(hWnd);
/* SetFocus(hWnd); */ SetFocus(hWnd);
SetCapture(hWnd); SetCapture(hWnd);
hDC = GetDC(hWnd); hDC = GetDC(hWnd);
GetClientRect(hWnd, &rc); GetClientRect(hWnd, &rc);

View File

@ -66,8 +66,7 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
lphc = ComboGetStorageHeader(hwnd); lphc = ComboGetStorageHeader(hwnd);
if (lphc == NULL) return 0; if (lphc == NULL) return 0;
if (wndPtr->dwStyle & CBS_SIMPLE) if (wndPtr->dwStyle & CBS_SIMPLE)
/* lphc->hWndEdit = CreateWindow("EDIT", "", */ lphc->hWndEdit = CreateWindow("EDIT", "",
lphc->hWndEdit = CreateWindow("STATIC", "",
WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | SS_LEFT, WS_CHILD | WS_CLIPCHILDREN | WS_VISIBLE | SS_LEFT,
0, 0, width - bm.bmHeight, bm.bmHeight, 0, 0, width - bm.bmHeight, bm.bmHeight,
hwnd, 1, wndPtr->hInstance, 0L); hwnd, 1, wndPtr->hInstance, 0L);
@ -370,3 +369,30 @@ int CreateComboStruct(HWND hwnd)
/************************************************************************
* DlgDirSelectComboBox [USER.194]
*/
BOOL DlgDirSelectComboBox(HWND hDlg, LPSTR lpStr, int nIDLBox)
{
printf("DlgDirSelectComboBox(%04X, '%s', %d) \n", hDlg, lpStr, nIDLBox);
}
/************************************************************************
* DlgDirListComboBox [USER.195]
*/
int DlgDirListComboBox(HWND hDlg, LPSTR lpPathSpec,
int nIDLBox, int nIDStat, WORD wType)
{
HWND hWnd;
LPHEADCOMBO lphc;
printf("DlgDirListComboBox(%04X, '%s', %d, %d, %04X) \n",
hDlg, lpPathSpec, nIDLBox, nIDStat, wType);
hWnd = GetDlgItem(hDlg, nIDLBox);
lphc = ComboGetStorageHeader(hWnd);
SendMessage(lphc->hWndLBox, LB_RESETCONTENT, 0, 0L);
return SendMessage(lphc->hWndLBox, LB_DIR, wType, (DWORD)lpPathSpec);
}

2384
controls/edit.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1260,3 +1260,28 @@ int ListBoxFindNextMatch(HWND hwnd, WORD wChar)
} }
/************************************************************************
* DlgDirSelect [USER.99]
*/
BOOL DlgDirSelect(HWND hDlg, LPSTR lpStr, int nIDLBox)
{
printf("DlgDirSelect(%04X, '%s', %d) \n", hDlg, lpStr, nIDLBox);
}
/************************************************************************
* DlgDirList [USER.100]
*/
int DlgDirList(HWND hDlg, LPSTR lpPathSpec,
int nIDLBox, int nIDStat, WORD wType)
{
HWND hWnd;
printf("DlgDirList(%04X, '%s', %d, %d, %04X) \n",
hDlg, lpPathSpec, nIDLBox, nIDStat, wType);
hWnd = GetDlgItem(hDlg, nIDLBox);
ListBoxResetContent(hWnd);
return ListBoxDirectory(hWnd, wType, lpPathSpec);
}

View File

@ -29,7 +29,8 @@ static BOOL MenuHasFocus = FALSE;
LPPOPUPMENU PopupMenuGetStorageHeader(HWND hwnd); LPPOPUPMENU PopupMenuGetStorageHeader(HWND hwnd);
LPPOPUPMENU PopupMenuGetWindowAndStorage(HWND hwnd, WND **wndPtr); LPPOPUPMENU PopupMenuGetWindowAndStorage(HWND hwnd, WND **wndPtr);
void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop); void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop,
BOOL suppress_draw);
BOOL MenuButtonDown(HWND hWnd, LPPOPUPMENU lppop, int x, int y); BOOL MenuButtonDown(HWND hWnd, LPPOPUPMENU lppop, int x, int y);
void MenuButtonUp(HWND hWnd, LPPOPUPMENU lppop, int x, int y); void MenuButtonUp(HWND hWnd, LPPOPUPMENU lppop, int x, int y);
void MenuMouseMove(HWND hWnd, LPPOPUPMENU lppop, WORD wParam, int x, int y); void MenuMouseMove(HWND hWnd, LPPOPUPMENU lppop, WORD wParam, int x, int y);
@ -39,7 +40,7 @@ BOOL ExecFocusedMenuItem(HWND hWnd, LPPOPUPMENU lppop);
void MenuItemSelect(HWND hWnd, LPPOPUPMENU lppop, WORD wIndex); void MenuItemSelect(HWND hWnd, LPPOPUPMENU lppop, WORD wIndex);
LPMENUITEM MenuFindItem(LPPOPUPMENU lppop, int x, int y, WORD *lpRet); LPMENUITEM MenuFindItem(LPPOPUPMENU lppop, int x, int y, WORD *lpRet);
LPMENUITEM MenuFindItemBySelKey(LPPOPUPMENU lppop, WORD key, WORD *lpRet); LPMENUITEM MenuFindItemBySelKey(LPPOPUPMENU lppop, WORD key, WORD *lpRet);
BOOL ActivateMenuFocus(HWND hWnd); BOOL ActivateMenuBarFocus(HWND hWnd);
BOOL MenuFocusLoop(HWND hWnd, LPPOPUPMENU lpmenu); BOOL MenuFocusLoop(HWND hWnd, LPPOPUPMENU lpmenu);
void PopupMenuCalcSize(HWND hwnd); void PopupMenuCalcSize(HWND hwnd);
void MenuBarCalcSize(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop); void MenuBarCalcSize(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop);
@ -87,6 +88,9 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
hStdCheck = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_CHECK); hStdCheck = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_CHECK);
if (hStdMnArrow == (HBITMAP)NULL) if (hStdMnArrow == (HBITMAP)NULL)
hStdMnArrow = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_MNARROW); hStdMnArrow = LoadBitmap((HANDLE)NULL, (LPSTR)OBM_MNARROW);
#ifdef DEBUG_MENU
printf("PopupMenu End of WM_CREATE !\n");
#endif
return 0; return 0;
case WM_DESTROY: case WM_DESTROY:
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr); lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
@ -137,6 +141,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
#endif #endif
if (lppop->SysFlag) MenuHasFocus = FALSE; if (lppop->SysFlag) MenuHasFocus = FALSE;
SetFocus(lppop->hWndPrev); SetFocus(lppop->hWndPrev);
if (GetCapture() != 0) ReleaseCapture();
break; break;
} }
lppop->FocusedItem = (WORD)-1; lppop->FocusedItem = (WORD)-1;
@ -271,9 +276,11 @@ ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
printf("PopupMenuWndProc hWnd=%04X WM_CHAR wParam=%04X !\n", hwnd, wParam); printf("PopupMenuWndProc hWnd=%04X WM_CHAR wParam=%04X !\n", hwnd, wParam);
#endif #endif
if (lParam < 0L) break; if (lParam < 0L) break;
hwnd = GetFocus();
lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr); lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
if (lppop == NULL) break; if (lppop == NULL) break;
if (wParam == VK_ESCAPE) { switch(wParam) {
case VK_ESCAPE:
if (lppop->BarFlag) { if (lppop->BarFlag) {
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("VK_ESCAPE // Unselect all MenuBar's Items !\n"); printf("VK_ESCAPE // Unselect all MenuBar's Items !\n");
@ -305,15 +312,17 @@ ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
MenuHasFocus = FALSE; MenuHasFocus = FALSE;
} }
break; break;
} default:
if (wParam >= 'a' && wParam <= 'z') wParam -= 'a' - 'A'; if (wParam >= 'a' && wParam <= 'z') wParam -= 'a' - 'A';
lpitem = MenuFindItemBySelKey(lppop, wParam, &wRet); lpitem = MenuFindItemBySelKey(lppop, wParam, &wRet);
if (lpitem != NULL) { if (lpitem != NULL) {
printf("Found wRet=%d !\n", wRet); printf("ShortKey Found wRet=%d !\n", wRet);
MenuItemSelect(hwnd, lppop, wRet); MenuItemSelect(hwnd, lppop, wRet);
lppop->FocusedItem = wRet; lppop->FocusedItem = wRet;
goto ProceedSPACE; goto ProceedSPACE;
} }
printf("ShortKey Not Found wParam=%04X wRet=%d lpitem=%08X !\n",
wParam, wRet, lpitem);
if (lppop->hWndParent != (HWND)NULL) if (lppop->hWndParent != (HWND)NULL)
SendMessage(lppop->hWndParent, WM_MENUCHAR, wParam, SendMessage(lppop->hWndParent, WM_MENUCHAR, wParam,
MAKELONG(0, 0)); MAKELONG(0, 0));
@ -321,6 +330,8 @@ ProceedSPACE: lppop = PopupMenuGetWindowAndStorage(hwnd, &wndPtr);
SendMessage(lppop->ownerWnd, WM_MENUCHAR, wParam, SendMessage(lppop->ownerWnd, WM_MENUCHAR, wParam,
MAKELONG(0, 0)); MAKELONG(0, 0));
break; break;
}
break;
case WM_PAINT: case WM_PAINT:
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("PopupMenuWndProc // WM_PAINT received !\n"); printf("PopupMenuWndProc // WM_PAINT received !\n");
@ -352,7 +363,6 @@ BOOL ExecFocusedMenuItem(HWND hWnd, LPPOPUPMENU lppop)
lppop2 = (LPPOPUPMENU) GlobalLock(hSubMenu); lppop2 = (LPPOPUPMENU) GlobalLock(hSubMenu);
if (lppop2 == NULL) return FALSE; if (lppop2 == NULL) return FALSE;
lppop2->hWndParent = hWnd; lppop2->hWndParent = hWnd;
lppop2->hWndPrev = GetFocus();
GetClientRect(hWnd, &rect); GetClientRect(hWnd, &rect);
if (lppop->BarFlag) { if (lppop->BarFlag) {
GetWindowRect(hWnd, &rect); GetWindowRect(hWnd, &rect);
@ -398,9 +408,11 @@ BOOL MenuButtonDown(HWND hWnd, LPPOPUPMENU lppop, int x, int y)
LPPOPUPMENU lppop2; LPPOPUPMENU lppop2;
if (lppop == NULL) return; if (lppop == NULL) return;
lpitem = MenuFindItem(lppop, x, y, &wRet); lpitem = MenuFindItem(lppop, x, y, &wRet);
printf("MenuButtonDown hWnd=%04X x=%d y=%d // wRet=%d lpitem=%08X !\n",
hWnd, x, y, wRet, lpitem);
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("MenuButtonDown // x=%d y=%d // wRet=%d lpitem=%08X !\n", printf("MenuButtonDown hWnd=%04X x=%d y=%d // wRet=%d lpitem=%08X !\n",
x, y, wRet, lpitem); hWnd, x, y, wRet, lpitem);
#endif #endif
if (lpitem != NULL) { if (lpitem != NULL) {
MenuItemSelect(hWnd, lppop, wRet); MenuItemSelect(hWnd, lppop, wRet);
@ -409,7 +421,6 @@ BOOL MenuButtonDown(HWND hWnd, LPPOPUPMENU lppop, int x, int y)
lppop2 = (LPPOPUPMENU) GlobalLock(hSubMenu); lppop2 = (LPPOPUPMENU) GlobalLock(hSubMenu);
if (lppop2 == NULL) return; if (lppop2 == NULL) return;
lppop2->hWndParent = hWnd; lppop2->hWndParent = hWnd;
lppop2->hWndPrev = GetFocus();
if (lppop->BarFlag) { if (lppop->BarFlag) {
GetWindowRect(hWnd, &rect); GetWindowRect(hWnd, &rect);
y = rect.top + lppop->rect.bottom; y = rect.top + lppop->rect.bottom;
@ -517,7 +528,6 @@ void MenuMouseMove(HWND hWnd, LPPOPUPMENU lppop, WORD wParam, int x, int y)
} }
if (lppop->BarFlag) { if (lppop->BarFlag) {
lppop2->hWndParent = hWnd; lppop2->hWndParent = hWnd;
lppop2->hWndPrev = GetFocus();
GetWindowRect(hWnd, &rect); GetWindowRect(hWnd, &rect);
rect.top += lppop->rect.bottom; rect.top += lppop->rect.bottom;
TrackPopupMenu(hSubMenu, TPM_LEFTBUTTON, TrackPopupMenu(hSubMenu, TPM_LEFTBUTTON,
@ -534,7 +544,6 @@ void MenuMouseMove(HWND hWnd, LPPOPUPMENU lppop, WORD wParam, int x, int y)
void ResetHiliteFlags(LPPOPUPMENU lppop) void ResetHiliteFlags(LPPOPUPMENU lppop)
{ {
HDC hDC;
LPMENUITEM lpitem; LPMENUITEM lpitem;
int i; int i;
if (lppop == NULL) return; if (lppop == NULL) return;
@ -731,6 +740,7 @@ void StdDrawPopupMenu(HWND hwnd)
FillRect(hDC, &rect3, GetStockObject(BLACK_BRUSH)); FillRect(hDC, &rect3, GetStockObject(BLACK_BRUSH));
InflateRect(&rect3, 0, -2); InflateRect(&rect3, 0, -2);
rect3.left += lppop->CheckWidth; rect3.left += lppop->CheckWidth;
hOldPen = SelectObject(hDC, GetStockObject(BLACK_PEN));
if ((x = GetShortCutPos(lpitem->item_text)) != (WORD)-1) { if ((x = GetShortCutPos(lpitem->item_text)) != (WORD)-1) {
DrawText(hDC, lpitem->item_text, x, &rect3, DrawText(hDC, lpitem->item_text, x, &rect3,
DT_LEFT | DT_VCENTER | DT_SINGLELINE); DT_LEFT | DT_VCENTER | DT_SINGLELINE);
@ -740,6 +750,7 @@ void StdDrawPopupMenu(HWND hwnd)
else else
DrawText(hDC, lpitem->item_text, -1, &rect3, DrawText(hDC, lpitem->item_text, -1, &rect3,
DT_LEFT | DT_VCENTER | DT_SINGLELINE); DT_LEFT | DT_VCENTER | DT_SINGLELINE);
SelectObject(hDC, hOldPen);
SetTextColor(hDC, OldTextColor); SetTextColor(hDC, OldTextColor);
SetBkMode(hDC, OldBkMode); SetBkMode(hDC, OldBkMode);
SelectObject(hDC, hOldFont); SelectObject(hDC, hOldFont);
@ -764,7 +775,8 @@ EndOfPaint:
void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop) void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop,
BOOL suppress_draw)
{ {
LPMENUITEM lpitem; LPMENUITEM lpitem;
HBRUSH hBrush; HBRUSH hBrush;
@ -782,7 +794,11 @@ void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop)
printf("StdDrawMenuBar(%04X, %08X, %08X); !\n", hDC, lprect, lppop); printf("StdDrawMenuBar(%04X, %08X, %08X); !\n", hDC, lprect, lppop);
#endif #endif
MenuBarCalcSize(hDC, lprect, lppop); MenuBarCalcSize(hDC, lprect, lppop);
if (suppress_draw)
return;
hOldFont = SelectObject(hDC, GetStockObject(SYSTEM_FONT)); hOldFont = SelectObject(hDC, GetStockObject(SYSTEM_FONT));
hOldPen = SelectObject(hDC, GetStockObject(BLACK_PEN));
hBrush = GetStockObject(WHITE_BRUSH); hBrush = GetStockObject(WHITE_BRUSH);
CopyRect(&rect, lprect); CopyRect(&rect, lprect);
FillRect(hDC, &rect, hBrush); FillRect(hDC, &rect, hBrush);
@ -850,6 +866,7 @@ void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop)
lpitem = (LPMENUITEM)lpitem->next; lpitem = (LPMENUITEM)lpitem->next;
} }
EndOfPaint: EndOfPaint:
SelectObject(hDC, hOldPen);
SelectObject(hDC, hOldFont); SelectObject(hDC, hOldFont);
} }
@ -886,12 +903,13 @@ LPMENUITEM MenuFindItemBySelKey(LPPOPUPMENU lppop, WORD key, WORD *lpRet)
LPMENUITEM lpitem; LPMENUITEM lpitem;
UINT i; UINT i;
if (lppop == NULL) return NULL; if (lppop == NULL) return NULL;
if (lppop->nItems == 0) return NULL; if (lppop->nItems == 0) return NULL;
lpitem = lppop->firstItem; lpitem = lppop->firstItem;
for(i = 0; i < lppop->nItems; i++) { for(i = 0; i < lppop->nItems; i++) {
if (lpitem == NULL) return NULL; if (lpitem == NULL) return NULL;
#ifdef DEBUG_MENUFINDITEM #ifdef DEBUG_MENUFINDITEM
printf("FindItemBySelKey // key=%d lpitem->sel_key=%d\n", printf("FindItemBySelKey // key=%04X lpitem->sel_key=%04X\n",
key, lpitem->sel_key); key, lpitem->sel_key);
#endif #endif
if (key == lpitem->sel_key) { if (key == lpitem->sel_key) {
@ -1289,6 +1307,7 @@ BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewIt
menu = (LPPOPUPMENU) GlobalLock(hMenu); menu = (LPPOPUPMENU) GlobalLock(hMenu);
if (menu == NULL) return FALSE; if (menu == NULL) return FALSE;
lpitem = FindMenuItem(hMenu, nPos, wFlags); lpitem = FindMenuItem(hMenu, nPos, wFlags);
if (lpitem == NULL) lpitem = menu->firstItem;
hNewItem = GlobalAlloc(GMEM_MOVEABLE, sizeof(MENUITEM)); hNewItem = GlobalAlloc(GMEM_MOVEABLE, sizeof(MENUITEM));
if (hNewItem == 0) { if (hNewItem == 0) {
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
@ -1304,20 +1323,30 @@ BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewIt
lpitem2->item_id = wItemID; lpitem2->item_id = wItemID;
if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) { MF_MENUBREAK | MF_SEPARATOR))) {
lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); /* lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
lpitem2->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
if (lpitem2->item_text != NULL)
strcpy(lpitem2->item_text, lpNewItem); strcpy(lpitem2->item_text, lpNewItem);
else {
printf("InsertMenu // Bad Alloc !\n");
return FALSE;
}
lpitem2->sel_key = GetSelectionKey(lpitem2->item_text); lpitem2->sel_key = GetSelectionKey(lpitem2->item_text);
} }
else { else {
lpitem2->item_text = lpNewItem; lpitem2->item_text = lpNewItem;
} }
if (lpitem == NULL) {
lpitem2->prev = lpitem; menu->firstItem = lpitem2;
if (lpitem->next != NULL) lpitem2->prev = NULL;
lpitem2->next = lpitem->next;
else
lpitem2->next = NULL; lpitem2->next = NULL;
}
else {
lpitem2->prev = lpitem;
lpitem2->next = lpitem->next;
if (lpitem2->next != NULL) lpitem2->next->prev = lpitem2;
lpitem->next = lpitem2; lpitem->next = lpitem2;
}
lpitem2->child = NULL; lpitem2->child = NULL;
lpitem2->parent = NULL; lpitem2->parent = NULL;
menu->nItems++; menu->nItems++;
@ -1366,14 +1395,19 @@ BOOL AppendMenu(HMENU hMenu, WORD wFlags, WORD wItemID, LPSTR lpNewItem)
lpitem2->item_id = wItemID; lpitem2->item_id = wItemID;
if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | if (!(wFlags & (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) { MF_MENUBREAK | MF_SEPARATOR))) {
lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); /* lpitem2->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
lpitem2->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
if (lpitem2->item_text != NULL)
strcpy(lpitem2->item_text, lpNewItem); strcpy(lpitem2->item_text, lpNewItem);
else {
printf("AppendMenu // Bad Alloc !\n");
return FALSE;
}
lpitem2->sel_key = GetSelectionKey(lpitem2->item_text); lpitem2->sel_key = GetSelectionKey(lpitem2->item_text);
} }
else { else {
lpitem2->item_text = lpNewItem; lpitem2->item_text = lpNewItem;
} }
if (lpitem == NULL) if (lpitem == NULL)
menu->firstItem = lpitem2; menu->firstItem = lpitem2;
else else
@ -1413,7 +1447,7 @@ BOOL RemoveMenu(HMENU hMenu, WORD nPos, WORD wFlags)
if (!(lpitem->item_flags & if (!(lpitem->item_flags &
(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) { MF_MENUBREAK | MF_SEPARATOR))) {
GlobalFree(lpitem->item_text); GlobalFree((HANDLE)lpitem->item_text);
} }
GlobalFree(lpitem); GlobalFree(lpitem);
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
@ -1440,33 +1474,25 @@ BOOL DeleteMenu(HMENU hMenu, WORD nPos, WORD wFlags)
printf("DeleteMenu (%04X, %04X, %04X) !\n", hMenu, nPos, wFlags); printf("DeleteMenu (%04X, %04X, %04X) !\n", hMenu, nPos, wFlags);
#endif #endif
menu = (LPPOPUPMENU) GlobalLock(hMenu); menu = (LPPOPUPMENU) GlobalLock(hMenu);
if (menu == NULL) if (menu == NULL) {
{
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
return FALSE; return FALSE;
} }
lpitem = FindMenuItem(hMenu, nPos, wFlags); lpitem = FindMenuItem(hMenu, nPos, wFlags);
if (lpitem != NULL) if (lpitem != NULL) {
{
if ((lpitem->item_flags & MF_POPUP) == MF_POPUP) if ((lpitem->item_flags & MF_POPUP) == MF_POPUP)
DestroyMenu((HMENU)lpitem->item_id); DestroyMenu((HMENU)lpitem->item_id);
if (!(lpitem->item_flags & if (!(lpitem->item_flags &
(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) MF_MENUBREAK | MF_SEPARATOR))) {
{ GlobalFree((HANDLE)lpitem->item_text);
GlobalFree(lpitem->item_text);
} }
if (lpitem->prev) if (lpitem->prev) lpitem->prev->next = lpitem->next;
lpitem->prev->next = lpitem->next; if (lpitem->next) lpitem->next->prev = lpitem->prev;
if (lpitem->next)
lpitem->next->prev = lpitem->prev;
GlobalFree(lpitem); GlobalFree(lpitem);
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
return TRUE; return TRUE;
} }
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
return FALSE; return FALSE;
} }
@ -1496,10 +1522,15 @@ BOOL ModifyMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewIt
if (!(lpitem->item_flags & if (!(lpitem->item_flags &
(MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK | (MF_BITMAP | MF_OWNERDRAW | MF_MENUBARBREAK |
MF_MENUBREAK | MF_SEPARATOR))) { MF_MENUBREAK | MF_SEPARATOR))) {
lpitem->item_text = GlobalReAlloc(lpitem->item_text, GlobalFree((HANDLE)lpitem->item_text);
strlen(lpNewItem) + 1, /* lpitem->item_text = GlobalQuickAlloc(strlen(lpNewItem) + 1); */
GLOBAL_FLAGS_MOVEABLE); lpitem->item_text = GlobalLock(GlobalAlloc(GMEM_MOVEABLE, strlen(lpNewItem) + 1));
printf("ModifyMenu %08X %08X '%s') !\n",
lpitem->item_text, lpNewItem, lpNewItem);
if (lpitem->item_text != NULL)
strcpy(lpitem->item_text, lpNewItem); strcpy(lpitem->item_text, lpNewItem);
else
printf("ModifyMenu // Bad Alloc !\n");
} }
else else
lpitem->item_text = lpNewItem; lpitem->item_text = lpNewItem;
@ -1561,13 +1592,25 @@ BOOL TrackPopupMenu(HMENU hMenu, WORD wFlags, short x, short y,
hMenu, wFlags, x, y, nReserved, hWnd, lpRect); hMenu, wFlags, x, y, nReserved, hWnd, lpRect);
#endif #endif
lppop = (LPPOPUPMENU) GlobalLock(hMenu); lppop = (LPPOPUPMENU) GlobalLock(hMenu);
if (lppop == NULL) return FALSE; if (lppop == NULL) {
printf("TrackPopupMenu // Bad menu handle %04X !\n", hMenu);
return FALSE;
}
wndPtr = WIN_FindWndPtr(hWnd); wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) {
printf("TrackPopupMenu // Bad window handle %04X !\n", hWnd);
return FALSE;
}
lppop->ownerWnd = hWnd; lppop->ownerWnd = hWnd;
lppop->hWndPrev = GetFocus();
if (lppop->hWnd == (HWND)NULL) { if (lppop->hWnd == (HWND)NULL) {
lppop->hWnd = CreateWindow("POPUPMENU", "", WS_POPUP | WS_VISIBLE, lppop->hWnd = CreateWindow("POPUPMENU", "", WS_POPUP | WS_VISIBLE,
x, y, lppop->Width, lppop->Height, (HWND)NULL, 0, x, y, lppop->Width, lppop->Height, (HWND)NULL, 0,
wndPtr->hInstance, (LPSTR)lppop); wndPtr->hInstance, (LPSTR)lppop);
if (lppop->hWnd == 0) {
printf("TrackPopupMenu // Can't create PopupMenu window !\n");
return FALSE;
}
} }
else { else {
ShowWindow(lppop->hWnd, SW_SHOW); ShowWindow(lppop->hWnd, SW_SHOW);
@ -1581,12 +1624,12 @@ BOOL TrackPopupMenu(HMENU hMenu, WORD wFlags, short x, short y,
SetWindowPos(lppop->hWnd, 0, x, y, lppop->Width + 2, lppop->Height, SetWindowPos(lppop->hWnd, 0, x, y, lppop->Width + 2, lppop->Height,
SWP_NOZORDER); SWP_NOZORDER);
} }
SetFocus(lppop->hWnd);
if (!MenuHasFocus) { if (!MenuHasFocus) {
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("TrackPopupMenu // before MenuFocusLoop !\n"); printf("TrackPopupMenu // before MenuFocusLoop !\n");
#endif #endif
MenuFocusLoop(hWnd, NULL); MenuFocusLoop(hWnd, NULL);
/* ActivateMenuFocus(hWnd); */
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("TrackPopupMenu // after MenuFocusLoop !\n"); printf("TrackPopupMenu // after MenuFocusLoop !\n");
#endif #endif
@ -1596,7 +1639,7 @@ BOOL TrackPopupMenu(HMENU hMenu, WORD wFlags, short x, short y,
} }
BOOL ActivateMenuFocus(HWND hWnd) BOOL ActivateMenuBarFocus(HWND hWnd)
{ {
WND *wndPtr; WND *wndPtr;
LPPOPUPMENU lpmenu; LPPOPUPMENU lpmenu;
@ -1606,13 +1649,22 @@ BOOL ActivateMenuFocus(HWND hWnd)
wndPtr = WIN_FindWndPtr(hWnd); wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) return FALSE; if (wndPtr == NULL) return FALSE;
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("ActivateMenuFocus (%04X) !\n", hWnd); printf("ActivateMenuBarFocus (%04X) !\n", hWnd);
#endif #endif
while((wndPtr->dwStyle & WS_CHILD) == WS_CHILD) {
hWnd = GetParent(hWnd);
printf("ActivateMenuBarFocus // next Parent=%04X !\n", hWnd);
wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) return FALSE;
}
if ((wndPtr->dwStyle & WS_CHILD) == 0 && wndPtr->wIDmenu != 0) { if ((wndPtr->dwStyle & WS_CHILD) == 0 && wndPtr->wIDmenu != 0) {
lpmenu = (LPPOPUPMENU) GlobalLock(wndPtr->wIDmenu); lpmenu = (LPPOPUPMENU) GlobalLock(wndPtr->wIDmenu);
if (lpmenu == NULL) return FALSE;
lpmenu->hWndPrev = GetFocus();
SetFocus(hWnd);
MenuItemSelect(hWnd, lpmenu, 0); MenuItemSelect(hWnd, lpmenu, 0);
bRet = MenuFocusLoop(hWnd, lpmenu); bRet = MenuFocusLoop(hWnd, lpmenu);
if (lpmenu != NULL) GlobalUnlock(wndPtr->wIDmenu); GlobalUnlock(wndPtr->wIDmenu);
return bRet; return bRet;
} }
return FALSE; return FALSE;
@ -1688,7 +1740,6 @@ void NC_TrackSysMenu(HWND hWnd)
lpsys->hWndParent = hWnd; lpsys->hWndParent = hWnd;
if (!IsWindowVisible(lpsys->hWnd)) { if (!IsWindowVisible(lpsys->hWnd)) {
GetWindowRect(hWnd, &rect); GetWindowRect(hWnd, &rect);
lpsys->hWndPrev = GetFocus();
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("NC_TrackSysMenu lpsys->hWnd=%04X !\n", lpsys->hWnd); printf("NC_TrackSysMenu lpsys->hWnd=%04X !\n", lpsys->hWnd);
#endif #endif
@ -1707,7 +1758,6 @@ void NC_TrackSysMenu(HWND hWnd)
printf("NC_TrackSysMenu // before MenuFocusLoop !\n"); printf("NC_TrackSysMenu // before MenuFocusLoop !\n");
#endif #endif
MenuFocusLoop(hWnd, NULL); MenuFocusLoop(hWnd, NULL);
/* ActivateMenuFocus(hWnd); */
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("NC_TrackSysMenu // after MenuFocusLoop !\n"); printf("NC_TrackSysMenu // after MenuFocusLoop !\n");
#endif #endif
@ -1890,18 +1940,23 @@ HMENU GetMenu(HWND hWnd)
*/ */
BOOL SetMenu(HWND hWnd, HMENU hMenu) BOOL SetMenu(HWND hWnd, HMENU hMenu)
{ {
LPPOPUPMENU lppop; LPPOPUPMENU lpmenu;
WND * wndPtr = WIN_FindWndPtr(hWnd); WND * wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) return FALSE; if (wndPtr == NULL) {
printf("SetMenu(%04X, %04X) // Bad window handle !\n", hWnd, hMenu);
return FALSE;
}
#ifdef DEBUG_MENU #ifdef DEBUG_MENU
printf("SetMenu(%04X, %04X);\n", hWnd, hMenu); printf("SetMenu(%04X, %04X);\n", hWnd, hMenu);
#endif #endif
wndPtr->wIDmenu = hMenu; wndPtr->wIDmenu = hMenu;
if (hMenu == 0) return TRUE; lpmenu = (LPPOPUPMENU) GlobalLock(hMenu);
lppop = (LPPOPUPMENU) GlobalLock(hMenu); if (lpmenu == NULL) {
if (lppop == NULL) return FALSE; printf("SetMenu(%04X, %04X) // Bad menu handle !\n", hWnd, hMenu);
lppop->ownerWnd = hWnd; return FALSE;
ResetHiliteFlags(lppop); }
lpmenu->ownerWnd = hWnd;
ResetHiliteFlags(lpmenu);
GlobalUnlock(hMenu); GlobalUnlock(hMenu);
return TRUE; return TRUE;
} }
@ -1961,7 +2016,7 @@ void DrawMenuBar(HWND hWnd)
if (lppop == NULL) return; if (lppop == NULL) return;
if ((lppop->rect.bottom - lppop->rect.top) != 0) { if ((lppop->rect.bottom - lppop->rect.top) != 0) {
hDC = GetWindowDC(hWnd); hDC = GetWindowDC(hWnd);
StdDrawMenuBar(hDC, &lppop->rect, lppop); StdDrawMenuBar(hDC, &lppop->rect, lppop, FALSE);
ReleaseDC(hWnd, hDC); ReleaseDC(hWnd, hDC);
} }
else else

View File

@ -16,6 +16,7 @@ LONG StaticWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam );
LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam ); LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam );
LONG ListBoxWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam ); LONG ListBoxWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
LONG ComboBoxWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam ); LONG ComboBoxWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
LONG EditWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam );
LONG PopupMenuWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam ); LONG PopupMenuWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
LONG DesktopWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam ); LONG DesktopWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
LONG MDIClientWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam ); LONG MDIClientWndProc ( HWND hwnd, WORD message, WORD wParam, LONG lParam );
@ -33,6 +34,8 @@ static WNDCLASS WIDGETS_BuiltinClasses[] =
0, 0, 0, 0, NULL, "LISTBOX" }, 0, 0, 0, 0, NULL, "LISTBOX" },
{ CS_GLOBALCLASS, (LONG(*)())ComboBoxWndProc, 0, 8, { CS_GLOBALCLASS, (LONG(*)())ComboBoxWndProc, 0, 8,
0, 0, 0, 0, NULL, "COMBOBOX" }, 0, 0, 0, 0, NULL, "COMBOBOX" },
{ CS_GLOBALCLASS, (LONG(*)())EditWndProc, 0, 2,
0, 0, 0, 0, NULL, "EDIT" },
{ CS_GLOBALCLASS, (LONG(*)())PopupMenuWndProc, 0, 8, { CS_GLOBALCLASS, (LONG(*)())PopupMenuWndProc, 0, 8,
0, 0, 0, 0, NULL, "POPUPMENU" }, 0, 0, 0, 0, NULL, "POPUPMENU" },
{ CS_GLOBALCLASS, (LONG(*)())DesktopWndProc, 0, sizeof(DESKTOPINFO), { CS_GLOBALCLASS, (LONG(*)())DesktopWndProc, 0, sizeof(DESKTOPINFO),

File diff suppressed because it is too large Load Diff

83
debugger/break.c Normal file
View File

@ -0,0 +1,83 @@
#include <stdio.h>
#define N_BP 25
struct wine_bp{
unsigned long addr;
char in_use;
char enabled;
unsigned char databyte;
};
static struct wine_bp wbp[N_BP] = {{0,},};
void info_break()
{
int j;
fprintf(stderr,"Breakpoint status\n");
for(j=0; j<N_BP; j++)
if(wbp[j].in_use)
fprintf(stderr,"%d: %c %8.8x\n", j, (wbp[j].enabled ? 'y' : 'n'),
wbp[j].addr);
}
void disable_break(int bpnum)
{
if(bpnum >= N_BP || bpnum < 0)
fprintf(stderr,"Breakpoint number out of range\n");
wbp[bpnum].enabled = 0;
}
void enable_break(int bpnum)
{
if(bpnum >= N_BP || bpnum < 0)
fprintf(stderr,"Breakpoint number out of range\n");
wbp[bpnum].enabled = 1;
}
void add_break(unsigned long addr)
{
int j;
for(j=0; j<N_BP; j++)
if(!wbp[j].in_use)
{
wbp[j].in_use = 1;
wbp[j].enabled = 1;
wbp[j].addr = addr;
return;
}
fprintf(stderr,"No more breakpoints\n");
}
void insert_break(int flag)
{
unsigned char * pnt;
int j;
for(j=0; j<N_BP; j++)
if(wbp[j].enabled)
{
pnt = (unsigned char *) wbp[j].addr;
if(flag) {
wbp[j].databyte = *pnt;
*pnt = 0xcc; /* Change to an int 3 instruction */
} else {
*pnt = wbp[j].databyte;
}
}
}
/* Get the breakpoint number that we broke upon */
int get_bpnum(unsigned int addr)
{
int j;
for(j=0; j<N_BP; j++)
if(wbp[j].enabled)
if(wbp[j].addr == addr) return j;
return -1;
}

View File

@ -1,818 +0,0 @@
/* Basic, host-specific, and target-specific definitions for GDB.
Copyright (C) 1986, 1989, 1991 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#if !defined (DEFS_H)
#define DEFS_H 1
#include <stdio.h>
/* First include ansidecl.h so we can use the various macro definitions
here and in all subsequent file inclusions. */
#include "ansidecl.h"
/* An address in the program being debugged. Host byte order. */
typedef unsigned int CORE_ADDR;
#define min(a, b) ((a) < (b) ? (a) : (b))
#define max(a, b) ((a) > (b) ? (a) : (b))
/* The character C++ uses to build identifiers that must be unique from
the program's identifiers (such as $this and $$vptr). */
#define CPLUS_MARKER '$' /* May be overridden to '.' for SysV */
#include <errno.h> /* System call error return status */
extern int quit_flag;
extern int immediate_quit;
extern void
quit PARAMS ((void));
#define QUIT { if (quit_flag) quit (); }
/* Command classes are top-level categories into which commands are broken
down for "help" purposes.
Notes on classes: class_alias is for alias commands which are not
abbreviations of the original command. class-pseudo is for commands
which are not really commands nor help topics ("stop"). */
enum command_class
{
/* Special args to help_list */
all_classes = -2, all_commands = -1,
/* Classes of commands */
no_class = -1, class_run = 0, class_vars, class_stack,
class_files, class_support, class_info, class_breakpoint,
class_alias, class_obscure, class_user, class_maintenance,
class_pseudo
};
/* the cleanup list records things that have to be undone
if an error happens (descriptors to be closed, memory to be freed, etc.)
Each link in the chain records a function to call and an
argument to give it.
Use make_cleanup to add an element to the cleanup chain.
Use do_cleanups to do all cleanup actions back to a given
point in the chain. Use discard_cleanups to remove cleanups
from the chain back to a given point, not doing them. */
struct cleanup
{
struct cleanup *next;
void (*function) PARAMS ((PTR));
PTR arg;
};
/* From blockframe.c */
extern int
inside_entry_func PARAMS ((CORE_ADDR));
extern int
inside_entry_file PARAMS ((CORE_ADDR addr));
extern int
inside_main_func PARAMS ((CORE_ADDR pc));
/* From cplus-dem.c */
extern char *
cplus_demangle PARAMS ((const char *, int));
extern char *
cplus_mangle_opname PARAMS ((char *, int));
/* From libmmalloc.a (memory mapped malloc library) */
extern PTR
mmalloc_attach PARAMS ((int, PTR));
extern PTR
mmalloc_detach PARAMS ((PTR));
extern PTR
mmalloc PARAMS ((PTR, long));
extern PTR
mrealloc PARAMS ((PTR, PTR, long));
extern void
mfree PARAMS ((PTR, PTR));
extern int
mmalloc_setkey PARAMS ((PTR, int, PTR));
extern PTR
mmalloc_getkey PARAMS ((PTR, int));
/* From utils.c */
extern char *
demangle_and_match PARAMS ((const char *, const char *, int));
extern int
strcmp_iw PARAMS ((const char *, const char *));
extern char *
safe_strerror PARAMS ((int));
extern char *
safe_strsignal PARAMS ((int));
extern void
init_malloc PARAMS ((PTR));
extern void
request_quit PARAMS ((int));
extern void
do_cleanups PARAMS ((struct cleanup *));
extern void
discard_cleanups PARAMS ((struct cleanup *));
/* The bare make_cleanup function is one of those rare beasts that
takes almost any type of function as the first arg and anything that
will fit in a "void *" as the second arg.
Should be, once all calls and called-functions are cleaned up:
extern struct cleanup *
make_cleanup PARAMS ((void (*function) (PTR), PTR));
Until then, lint and/or various type-checking compiler options will
complain about make_cleanup calls. It'd be wrong to just cast things,
since the type actually passed when the function is called would be
wrong. */
extern struct cleanup *
make_cleanup ();
extern struct cleanup *
save_cleanups PARAMS ((void));
extern void
restore_cleanups PARAMS ((struct cleanup *));
extern void
free_current_contents PARAMS ((char **));
extern void
null_cleanup PARAMS ((char **));
extern int
myread PARAMS ((int, char *, int));
extern int
query ();
extern void
wrap_here PARAMS ((char *));
extern void
reinitialize_more_filter PARAMS ((void));
extern int
print_insn PARAMS ((CORE_ADDR, CORE_ADDR, FILE *, int));
extern void
fputs_filtered PARAMS ((const char *, FILE *));
extern void
puts_filtered PARAMS ((char *));
extern void
vfprintf_filtered ();
extern void
fprintf_filtered ();
extern void
fprintfi_filtered ();
extern void
printf_filtered ();
extern void
printfi_filtered ();
extern void
print_spaces PARAMS ((int, FILE *));
extern void
print_spaces_filtered PARAMS ((int, FILE *));
extern char *
n_spaces PARAMS ((int));
extern void
printchar PARAMS ((int, FILE *, int));
extern char *
strdup_demangled PARAMS ((const char *));
extern void
fprint_symbol PARAMS ((FILE *, char *));
extern void
fputs_demangled PARAMS ((char *, FILE *, int));
extern void
perror_with_name PARAMS ((char *));
extern void
print_sys_errmsg PARAMS ((char *, int));
/* From regex.c */
extern char *
re_comp PARAMS ((char *));
/* From symfile.c */
extern void
symbol_file_command PARAMS ((char *, int));
/* From main.c */
extern char *
skip_quoted PARAMS ((char *));
extern char *
gdb_readline PARAMS ((char *));
extern char *
command_line_input PARAMS ((char *, int));
extern void
print_prompt PARAMS ((void));
extern int
batch_mode PARAMS ((void));
extern int
input_from_terminal_p PARAMS ((void));
extern int
catch_errors PARAMS ((int (*) (char *), char *, char *));
/* From printcmd.c */
extern void
set_next_address PARAMS ((CORE_ADDR));
extern void
print_address_symbolic PARAMS ((CORE_ADDR, FILE *, int, char *));
extern void
print_address PARAMS ((CORE_ADDR, FILE *));
/* From source.c */
extern int
openp PARAMS ((char *, int, char *, int, int, char **));
extern void
mod_path PARAMS ((char *, char **));
extern void
directory_command PARAMS ((char *, int));
extern void
init_source_path PARAMS ((void));
/* From findvar.c */
extern int
read_relative_register_raw_bytes PARAMS ((int, char *));
/* From readline (but not in any readline .h files). */
extern char *
tilde_expand PARAMS ((char *));
/* Structure for saved commands lines
(for breakpoints, defined commands, etc). */
struct command_line
{
struct command_line *next;
char *line;
};
extern struct command_line *
read_command_lines PARAMS ((void));
extern void
free_command_lines PARAMS ((struct command_line **));
/* String containing the current directory (what getwd would return). */
extern char *current_directory;
/* Default radixes for input and output. Only some values supported. */
extern unsigned input_radix;
extern unsigned output_radix;
/* Baud rate specified for communication with serial target systems. */
extern char *baud_rate;
/* Languages represented in the symbol table and elsewhere. */
enum language
{
language_unknown, /* Language not known */
language_auto, /* Placeholder for automatic setting */
language_c, /* C */
language_cplus, /* C++ */
language_m2 /* Modula-2 */
};
/* Return a format string for printf that will print a number in the local
(language-specific) hexadecimal format. Result is static and is
overwritten by the next call. local_hex_format_custom takes printf
options like "08" or "l" (to produce e.g. %08x or %lx). */
#define local_hex_format() (current_language->la_hex_format)
extern char *
local_hex_format_custom PARAMS ((char *)); /* language.c */
/* Return a string that contains a number formatted in the local
(language-specific) hexadecimal format. Result is static and is
overwritten by the next call. local_hex_string_custom takes printf
options like "08" or "l". */
extern char *
local_hex_string PARAMS ((int)); /* language.c */
extern char *
local_hex_string_custom PARAMS ((int, char *)); /* language.c */
/* Host machine definition. This will be a symlink to one of the
xm-*.h files, built by the `configure' script. */
#include "xm.h"
/* If the xm.h file did not define the mode string used to open the
files, assume that binary files are opened the same way as text
files */
#ifndef FOPEN_RB
#include "fopen-same.h"
#endif
/*
* Allow things in gdb to be declared "const". If compiling ANSI, it
* just works. If compiling with gcc but non-ansi, redefine to __const__.
* If non-ansi, non-gcc, then eliminate "const" entirely, making those
* objects be read-write rather than read-only.
*/
#ifndef const
#ifndef __STDC__
# ifdef __GNUC__
# define const __const__
# else
# define const /*nothing*/
# endif /* GNUC */
#endif /* STDC */
#endif /* const */
#ifndef volatile
#ifndef __STDC__
# ifdef __GNUC__
# define volatile __volatile__
# else
# define volatile /*nothing*/
# endif /* GNUC */
#endif /* STDC */
#endif /* volatile */
/* Some compilers (many AT&T SVR4 compilers for instance), do not accept
declarations of functions that never return (exit for instance) as
"volatile void". For such compilers "NORETURN" can be defined away
to keep them happy */
#ifndef NORETURN
# ifdef __lucid
# define NORETURN /*nothing*/
# else
# define NORETURN volatile
# endif
#endif
/* Defaults for system-wide constants (if not defined by xm.h, we fake it). */
#if !defined (UINT_MAX)
#define UINT_MAX 0xffffffff
#endif
#if !defined (LONG_MAX)
#define LONG_MAX 0x7fffffff
#endif
#if !defined (INT_MAX)
#define INT_MAX 0x7fffffff
#endif
#if !defined (INT_MIN)
/* Two's complement, 32 bit. */
#define INT_MIN -0x80000000
#endif
/* Number of bits in a char or unsigned char for the target machine.
Just like CHAR_BIT in <limits.h> but describes the target machine. */
#if !defined (TARGET_CHAR_BIT)
#define TARGET_CHAR_BIT 8
#endif
/* Number of bits in a short or unsigned short for the target machine. */
#if !defined (TARGET_SHORT_BIT)
#define TARGET_SHORT_BIT (sizeof (short) * TARGET_CHAR_BIT)
#endif
/* Number of bits in an int or unsigned int for the target machine. */
#if !defined (TARGET_INT_BIT)
#define TARGET_INT_BIT (sizeof (int) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long or unsigned long for the target machine. */
#if !defined (TARGET_LONG_BIT)
#define TARGET_LONG_BIT (sizeof (long) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long long or unsigned long long for the target machine. */
#if !defined (TARGET_LONG_LONG_BIT)
#define TARGET_LONG_LONG_BIT (2 * TARGET_LONG_BIT)
#endif
/* Number of bits in a float for the target machine. */
#if !defined (TARGET_FLOAT_BIT)
#define TARGET_FLOAT_BIT (sizeof (float) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a double for the target machine. */
#if !defined (TARGET_DOUBLE_BIT)
#define TARGET_DOUBLE_BIT (sizeof (double) * TARGET_CHAR_BIT)
#endif
/* Number of bits in a long double for the target machine. */
#if !defined (TARGET_LONG_DOUBLE_BIT)
#define TARGET_LONG_DOUBLE_BIT (2 * TARGET_DOUBLE_BIT)
#endif
/* Number of bits in a "complex" for the target machine. */
#if !defined (TARGET_COMPLEX_BIT)
#define TARGET_COMPLEX_BIT (2 * TARGET_FLOAT_BIT)
#endif
/* Number of bits in a "double complex" for the target machine. */
#if !defined (TARGET_DOUBLE_COMPLEX_BIT)
#define TARGET_DOUBLE_COMPLEX_BIT (2 * TARGET_DOUBLE_BIT)
#endif
/* Number of bits in a pointer for the target machine */
#if !defined (TARGET_PTR_BIT)
#define TARGET_PTR_BIT TARGET_INT_BIT
#endif
/* Convert a LONGEST to an int. This is used in contexts (e.g. number
of arguments to a function, number in a value history, register
number, etc.) where the value must not be larger than can fit
in an int. */
#if !defined (longest_to_int)
#if defined (LONG_LONG)
#define longest_to_int(x) (((x) > INT_MAX || (x) < INT_MIN) \
? (error ("Value out of range."),0) : (int) (x))
#else /* No LONG_LONG. */
/* Assume sizeof (int) == sizeof (long). */
#define longest_to_int(x) ((int) (x))
#endif /* No LONG_LONG. */
#endif /* No longest_to_int. */
/* This should not be a typedef, because "unsigned LONGEST" needs
to work. LONG_LONG is defined if the host has "long long". */
#ifndef LONGEST
# ifdef LONG_LONG
# define LONGEST long long
# else
# define LONGEST long
# endif
#endif
/* Assorted functions we can declare, now that const and volatile are
defined. */
extern char *
savestring PARAMS ((const char *, int));
extern char *
msavestring PARAMS ((void *, const char *, int));
extern char *
strsave PARAMS ((const char *));
extern char *
mstrsave PARAMS ((void *, const char *));
extern char *
concat PARAMS ((char *, ...));
extern PTR
xmalloc PARAMS ((long));
extern PTR
xrealloc PARAMS ((PTR, long));
extern PTR
xmmalloc PARAMS ((PTR, long));
extern PTR
xmrealloc PARAMS ((PTR, PTR, long));
extern PTR
mmalloc PARAMS ((PTR, long));
extern PTR
mrealloc PARAMS ((PTR, PTR, long));
extern void
mfree PARAMS ((PTR, PTR));
extern int
mmcheck PARAMS ((PTR, void (*) (void)));
extern int
mmtrace PARAMS ((void));
extern int
parse_escape PARAMS ((char **));
extern const char * const reg_names[];
extern NORETURN void /* Does not return to the caller. */
error ();
extern NORETURN void /* Does not return to the caller. */
fatal ();
extern NORETURN void /* Not specified as volatile in ... */
exit PARAMS ((int)); /* 4.10.4.3 */
extern NORETURN void /* Does not return to the caller. */
nomem PARAMS ((long));
extern NORETURN void /* Does not return to the caller. */
return_to_top_level PARAMS ((void));
extern void
warning_setup PARAMS ((void));
extern void
warning ();
/* Global functions from other, non-gdb GNU thingies (libiberty for
instance) */
extern char *
basename PARAMS ((char *));
extern char *
getenv PARAMS ((const char *));
extern char **
buildargv PARAMS ((char *));
extern void
freeargv PARAMS ((char **));
extern char *
strerrno PARAMS ((int));
extern char *
strsigno PARAMS ((int));
extern int
errno_max PARAMS ((void));
extern int
signo_max PARAMS ((void));
extern int
strtoerrno PARAMS ((char *));
extern int
strtosigno PARAMS ((char *));
extern char *
strsignal PARAMS ((int));
/* From other system libraries */
#ifndef PSIGNAL_IN_SIGNAL_H
extern void
psignal PARAMS ((unsigned, char *));
#endif
/* For now, we can't include <stdlib.h> because it conflicts with
"../include/getopt.h". (FIXME)
However, if a function is defined in the ANSI C standard and a prototype
for that function is defined and visible in any header file in an ANSI
conforming environment, then that prototype must match the definition in
the ANSI standard. So we can just duplicate them here without conflict,
since they must be the same in all conforming ANSI environments. If
these cause problems, then the environment is not ANSI conformant. */
#ifdef __STDC__
#include <stddef.h>
#endif
extern int
fclose PARAMS ((FILE *stream)); /* 4.9.5.1 */
extern void
perror PARAMS ((const char *)); /* 4.9.10.4 */
extern double
atof PARAMS ((const char *nptr)); /* 4.10.1.1 */
extern int
atoi PARAMS ((const char *)); /* 4.10.1.2 */
#ifndef MALLOC_INCOMPATIBLE
extern PTR
malloc PARAMS ((size_t size)); /* 4.10.3.3 */
extern PTR
realloc PARAMS ((void *ptr, size_t size)); /* 4.10.3.4 */
extern void
free PARAMS ((void *)); /* 4.10.3.2 */
#endif /* MALLOC_INCOMPATIBLE */
extern void
qsort PARAMS ((void *base, size_t nmemb, /* 4.10.5.2 */
size_t size,
int (*comp)(const void *, const void *)));
#ifndef MEM_FNS_DECLARED /* Some non-ANSI use void *, not char *. */
extern PTR
memcpy PARAMS ((void *, const void *, size_t)); /* 4.11.2.1 */
#endif
extern int
memcmp PARAMS ((const void *, const void *, size_t)); /* 4.11.4.1 */
extern char *
strchr PARAMS ((const char *, int)); /* 4.11.5.2 */
extern char *
strrchr PARAMS ((const char *, int)); /* 4.11.5.5 */
extern char *
strstr PARAMS ((const char *, const char *)); /* 4.11.5.7 */
extern char *
strtok PARAMS ((char *, const char *)); /* 4.11.5.8 */
#ifndef MEM_FNS_DECLARED /* Some non-ANSI use void *, not char *. */
extern PTR
memset PARAMS ((void *, int, size_t)); /* 4.11.6.1 */
#endif
extern char *
strerror PARAMS ((int)); /* 4.11.6.2 */
/* Various possibilities for alloca. */
#ifndef alloca
# ifdef __GNUC__
# define alloca __builtin_alloca
# else
# ifdef sparc
# include <alloca.h> /* NOTE: Doesn't declare alloca() */
# endif
# ifdef __STDC__
extern void *alloca (size_t);
# else /* __STDC__ */
extern char *alloca ();
# endif
# endif
#endif
/* TARGET_BYTE_ORDER and HOST_BYTE_ORDER must be defined to one of these. */
#if !defined (BIG_ENDIAN)
#define BIG_ENDIAN 4321
#endif
#if !defined (LITTLE_ENDIAN)
#define LITTLE_ENDIAN 1234
#endif
/* Target-system-dependent parameters for GDB.
The standard thing is to include defs.h. However, files that are
specific to a particular target can define TM_FILE_OVERRIDE before
including defs.h, then can include any particular tm-file they desire. */
/* Target machine definition. This will be a symlink to one of the
tm-*.h files, built by the `configure' script. */
#ifndef TM_FILE_OVERRIDE
#include "tm.h"
#endif
/* The bit byte-order has to do just with numbering of bits in
debugging symbols and such. Conceptually, it's quite separate
from byte/word byte order. */
#if !defined (BITS_BIG_ENDIAN)
#if TARGET_BYTE_ORDER == BIG_ENDIAN
#define BITS_BIG_ENDIAN 1
#endif /* Big endian. */
#if TARGET_BYTE_ORDER == LITTLE_ENDIAN
#define BITS_BIG_ENDIAN 0
#endif /* Little endian. */
#endif /* BITS_BIG_ENDIAN not defined. */
/* Swap LEN bytes at BUFFER between target and host byte-order. */
#if TARGET_BYTE_ORDER == HOST_BYTE_ORDER
#define SWAP_TARGET_AND_HOST(buffer,len)
#else /* Target and host byte order differ. */
#define SWAP_TARGET_AND_HOST(buffer,len) \
{ \
char tmp; \
char *p = (char *)(buffer); \
char *q = ((char *)(buffer)) + len - 1; \
for (; p < q; p++, q--) \
{ \
tmp = *q; \
*q = *p; \
*p = tmp; \
} \
}
#endif /* Target and host byte order differ. */
/* On some machines there are bits in addresses which are not really
part of the address, but are used by the kernel, the hardware, etc.
for special purposes. ADDR_BITS_REMOVE takes out any such bits
so we get a "real" address such as one would find in a symbol
table. ADDR_BITS_SET sets those bits the way the system wants
them. */
#if !defined (ADDR_BITS_REMOVE)
#define ADDR_BITS_REMOVE(addr) (addr)
#define ADDR_BITS_SET(addr) (addr)
#endif /* No ADDR_BITS_REMOVE. */
/* From valops.c */
extern CORE_ADDR
push_bytes PARAMS ((CORE_ADDR, char *, int));
/* In some modules, we don't have a definition of REGISTER_TYPE yet, so we
must avoid prototyping this function for now. FIXME. Should be:
extern CORE_ADDR
push_word PARAMS ((CORE_ADDR, REGISTER_TYPE));
*/
extern CORE_ADDR
push_word ();
/* Some parts of gdb might be considered optional, in the sense that they
are not essential for being able to build a working, usable debugger
for a specific environment. For example, the maintenance commands
are there for the benefit of gdb maintainers. As another example,
some environments really don't need gdb's that are able to read N
different object file formats. In order to make it possible (but
not necessarily recommended) to build "stripped down" versions of
gdb, the following defines control selective compilation of those
parts of gdb which can be safely left out when necessary. Note that
the default is to include everything. */
#ifndef MAINTENANCE_CMDS
#define MAINTENANCE_CMDS 1
#endif
#endif /* !defined (DEFS_H) */

View File

@ -1,27 +0,0 @@
/* Macros for the 'type' part of an fopen, freopen or fdopen.
<Read|Write>[Update]<Binary file|text file>
This version is for "same" systems, where text and binary files are
the same. An example is Unix. Many Unix systems could also add a
"b" to the string, indicating binary files, but some reject this
(and thereby don't conform to ANSI C, but what else is new?).
This file is designed for inclusion by host-dependent .h files. No
user application should include it directly, since that would make
the application unable to be configured for both "same" and "binary"
variant systems. */
#define FOPEN_RB "r"
#define FOPEN_WB "w"
#define FOPEN_AB "a"
#define FOPEN_RUB "r+"
#define FOPEN_WUB "w+"
#define FOPEN_AUB "a+"
#define FOPEN_RT "r"
#define FOPEN_WT "w"
#define FOPEN_AT "a"
#define FOPEN_RUT "r+"
#define FOPEN_WUT "w+"
#define FOPEN_AUT "a+"

View File

@ -1,119 +0,0 @@
/* Machine independent variables that describe the core file under GDB.
Copyright 1986, 1987, 1989, 1990, 1992 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* Interface routines for core, executable, etc. */
#if !defined (GDBCORE_H)
#define GDBCORE_H 1
#include "bfd.h" /* Binary File Description */
/* Return the name of the executable file as a string.
ERR nonzero means get error if there is none specified;
otherwise return 0 in that case. */
extern char *
get_exec_file PARAMS ((int err));
/* Nonzero if there is a core file. */
extern int
have_core_file_p PARAMS ((void));
/* Read "memory data" from whatever target or inferior we have.
Returns zero if successful, errno value if not. EIO is used
for address out of bounds. If breakpoints are inserted, returns
shadow contents, not the breakpoints themselves. From breakpoint.c. */
extern int
read_memory_nobpt PARAMS ((CORE_ADDR memaddr, char *myaddr, unsigned len));
/* Report a memory error with error(). */
extern void
memory_error PARAMS ((int status, CORE_ADDR memaddr));
/* Like target_read_memory, but report an error if can't read. */
extern void
read_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
/* Read an integer from debugged memory, given address and number of bytes. */
extern long
read_memory_integer PARAMS ((CORE_ADDR memaddr, int len));
/* If this is prototyped, need to deal with void* vs. char*. */
extern void
write_memory PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
/* Hook for `exec_file_command' command to call. */
extern void (*exec_file_display_hook) PARAMS ((char *filename));
extern void
specify_exec_file_hook PARAMS ((void (*hook) (char *filename)));
/* Binary File Diddlers for the exec and core files */
extern bfd *core_bfd;
extern bfd *exec_bfd;
/* Whether to open exec and core files read-only or read-write. */
extern int write_files;
extern void
core_file_command PARAMS ((char *filename, int from_tty));
extern void
exec_file_command PARAMS ((char *filename, int from_tty));
extern void
validate_files PARAMS ((void));
extern unsigned int
register_addr PARAMS ((int regno, int blockend));
extern int
xfer_core_file PARAMS ((CORE_ADDR memaddr, char *myaddr, int len));
extern void
fetch_core_registers PARAMS ((char *core_reg_sect, unsigned core_reg_size,
int which, unsigned int reg_addr));
extern void
registers_fetched PARAMS ((void));
#if !defined (KERNEL_U_ADDR)
extern CORE_ADDR kernel_u_addr;
#define KERNEL_U_ADDR kernel_u_addr
#endif
/* The target vector for core files */
extern struct target_ops core_ops;
/* target vector functions called directly from elsewhere */
void
core_open PARAMS ((char *, int));
void
core_detach PARAMS ((char *, int));
#endif /* !defined (GDBCORE_H) */

View File

@ -0,0 +1,29 @@
#include "../../Wine.tmpl"
MODULE = opcodes
#ifdef i386
#define xi386 1
#undef i386
#endif
SRCS = \
dis-buf.c \
i386-dis.c
OBJS = \
dis-buf.o \
i386-dis.o
#ifdef xi386
#define i386 1
#undef xi386
#endif
WineRelocatableTarget($(TOP)/$(MODULE),,$(OBJS))
DependTarget()
CleanTarget()
includes::
install::

View File

@ -1,5 +1,5 @@
/* ANSI and traditional C compatability macros /* ANSI and traditional C compatability macros
Copyright 1991 Free Software Foundation, Inc. Copyright 1991, 1992 Free Software Foundation, Inc.
This file is part of the GNU C Library. This file is part of the GNU C Library.
This program is free software; you can redistribute it and/or modify This program is free software; you can redistribute it and/or modify
@ -24,12 +24,14 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
----- ---- - ---------- ----------- - ---------- ----- ---- - ---------- ----------- - ----------
PTR `void *' `char *' PTR `void *' `char *'
LONG_DOUBLE `long double' `double' LONG_DOUBLE `long double' `double'
CONST `const' `'
VOLATILE `volatile' `' VOLATILE `volatile' `'
SIGNED `signed' `' SIGNED `signed' `'
PTRCONST `void *const' `char *' PTRCONST `void *const' `char *'
ANSI_PROTOTYPES 1 not defined
DEFUN(name, arglist, args) CONST is also defined, but is obsolete. Just use const.
DEFUN (name, arglist, args)
Defines function NAME. Defines function NAME.
@ -41,19 +43,38 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
be separated with `AND'. For functions with a variable number of be separated with `AND'. For functions with a variable number of
arguments, the last thing listed should be `DOTS'. arguments, the last thing listed should be `DOTS'.
DEFUN_VOID(name) DEFUN_VOID (name)
Defines a function NAME, which takes no arguments. Defines a function NAME, which takes no arguments.
EXFUN(name, prototype) obsolete -- EXFUN (name, (prototype)) -- obsolete.
Is used in an external function declaration. Replaced by PARAMS. Do not use; will disappear someday soon.
In ANSI C it is `NAMEPROTOTYPE' (so PROTOTYPE should be enclosed in Was used in external function declarations.
In ANSI C it is `NAME PROTOTYPE' (so PROTOTYPE should be enclosed in
parentheses). In traditional C it is `NAME()'. parentheses). In traditional C it is `NAME()'.
For a function that takes no arguments, PROTOTYPE should be `(NOARGS)'. For a function that takes no arguments, PROTOTYPE should be `(void)'.
PARAMS ((args))
We could use the EXFUN macro to handle prototype declarations, but
the name is misleading and the result is ugly. So we just define a
simple macro to handle the parameter lists, as in:
static int foo PARAMS ((int, char));
This produces: `static int foo();' or `static int foo (int, char);'
EXFUN would have done it like this:
static int EXFUN (foo, (int, char));
but the function is not external...and it's hard to visually parse
the function name out of the mess. EXFUN should be considered
obsolete; new code should be written to use PARAMS.
For example: For example:
extern int EXFUN(printf, (CONST char *format DOTS)); extern int printf PARAMS ((CONST char *format DOTS));
int DEFUN(fprintf, (stream, format), int DEFUN(fprintf, (stream, format),
FILE *stream AND CONST char *format DOTS) { ... } FILE *stream AND CONST char *format DOTS) { ... }
void DEFUN_VOID(abort) { ... } void DEFUN_VOID(abort) { ... }
@ -69,7 +90,10 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* LINTLIBRARY */ /* LINTLIBRARY */
#ifdef __STDC__ #if defined (__STDC__) || defined (_AIX) || (defined (__mips) && defined (_SYSTYPE_SVR4))
/* All known AIX compilers implement these things (but don't always
define __STDC__). The RISC/OS MIPS compiler defines these things
in SVR4 mode, but does not define __STDC__. */
#define PTR void * #define PTR void *
#define PTRCONST void *CONST #define PTRCONST void *CONST
@ -84,24 +108,11 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define EXFUN(name, proto) name proto #define EXFUN(name, proto) name proto
#define DEFUN(name, arglist, args) name(args) #define DEFUN(name, arglist, args) name(args)
#define DEFUN_VOID(name) name(NOARGS) #define DEFUN_VOID(name) name(void)
#define PROTO(type, name, arglist) type name arglist #define PROTO(type, name, arglist) type name arglist
/* We could use the EXFUN macro to handle prototypes, but
the name is misleading and the result is ugly. So just define a
simple macro to handle the parameter lists, as in:
static int foo PARAMS ((int, char));
EXFUN would do it like this:
static int EXFUN (foo, (int, char));
but the function is not external... EXFUN should be considered
obsolete, and new code written to use PARAMS. */
#define PARAMS(paramlist) paramlist #define PARAMS(paramlist) paramlist
#define ANSI_PROTOTYPES 1
#else /* Not ANSI C. */ #else /* Not ANSI C. */
@ -112,6 +123,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define AND ; #define AND ;
#define NOARGS #define NOARGS
#define CONST #define CONST
#ifndef const /* some systems define it in header files for non-ansi mode */
#define const
#endif
#define VOLATILE #define VOLATILE
#define SIGNED #define SIGNED
#define DOTS #define DOTS

2171
debugger/opcodes/bfd.h Normal file

File diff suppressed because it is too large Load Diff

179
debugger/opcodes/dis-asm.h Normal file
View File

@ -0,0 +1,179 @@
/* Interface between the opcode library and its callers.
Written by Cygnus Support, 1993.
The opcode library (libopcodes.a) provides instruction decoders for
a large variety of instruction sets, callable with an identical
interface, for making instruction-processing programs more independent
of the instruction set being processed. */
#include <stdio.h>
#include "bfd.h"
typedef int (*fprintf_ftype) PARAMS((FILE*, const char*, ...));
enum dis_insn_type {
dis_noninsn, /* Not a valid instruction */
dis_nonbranch, /* Not a branch instruction */
dis_branch, /* Unconditional branch */
dis_condbranch, /* Conditional branch */
dis_jsr, /* Jump to subroutine */
dis_condjsr, /* Conditional jump to subroutine */
dis_dref, /* Data reference instruction */
dis_dref2 /* Two data references in instruction */
};
/* This struct is passed into the instruction decoding routine,
and is passed back out into each callback. The various fields are used
for conveying information from your main routine into your callbacks,
for passing information into the instruction decoders (such as the
addresses of the callback functions), or for passing information
back from the instruction decoders to their callers.
It must be initialized before it is first passed; this can be done
by hand, or using one of the initialization macros below. */
typedef struct disassemble_info {
fprintf_ftype fprintf_func;
FILE *stream;
PTR application_data;
/* For use by the disassembler. */
int flags;
PTR private_data;
/* Function used to get bytes to disassemble. MEMADDR is the
address of the stuff to be disassembled, MYADDR is the address to
put the bytes in, and LENGTH is the number of bytes to read.
INFO is a pointer to this struct.
Returns an errno value or 0 for success. */
int (*read_memory_func)
PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, int length,
struct disassemble_info *info));
/* Function which should be called if we get an error that we can't
recover from. STATUS is the errno value from read_memory_func and
MEMADDR is the address that we were trying to read. INFO is a
pointer to this struct. */
void (*memory_error_func)
PARAMS ((int status, bfd_vma memaddr, struct disassemble_info *info));
/* Function called to print ADDR. */
void (*print_address_func)
PARAMS ((bfd_vma addr, struct disassemble_info *info));
/* These are for buffer_read_memory. */
bfd_byte *buffer;
bfd_vma buffer_vma;
int buffer_length;
/* Results from instruction decoders. Not all decoders yet support
this information. This info is set each time an instruction is
decoded, and is only valid for the last such instruction.
To determine whether this decoder supports this information, set
insn_info_valid to 0, decode an instruction, then check it. */
char insn_info_valid; /* Branch info has been set. */
char branch_delay_insns; /* How many sequential insn's will run before
a branch takes effect. (0 = normal) */
char data_size; /* Size of data reference in insn, in bytes */
enum dis_insn_type insn_type; /* Type of instruction */
bfd_vma target; /* Target address of branch or dref, if known;
zero if unknown. */
bfd_vma target2; /* Second target address for dref2 */
} disassemble_info;
/* Standard disassemblers. Disassemble one instruction at the given
target address. Return number of bytes processed. */
typedef int (*disassembler_ftype)
PARAMS((bfd_vma, disassemble_info *));
extern int print_insn_big_mips PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_little_mips PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_i286 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_i386 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_m68k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_z8001 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_z8002 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_h8300 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_h8300h PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_h8500 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_alpha PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_sparc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_big_a29k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_little_a29k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_i960 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_sh PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_hppa PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_m88k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_big_powerpc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_little_powerpc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*));
/* Fetch the disassembler for a given BFD, if that support is available. */
extern disassembler_ftype disassembler PARAMS ((bfd *));
/* This block of definitions is for particular callers who read instructions
into a buffer before calling the instruction decoder. */
/* Here is a function which callers may wish to use for read_memory_func.
It gets bytes from a buffer. */
extern int buffer_read_memory
PARAMS ((bfd_vma, bfd_byte *, int, struct disassemble_info *));
/* This function goes with buffer_read_memory.
It prints a message using info->fprintf_func and info->stream. */
extern void perror_memory PARAMS ((int, bfd_vma, struct disassemble_info *));
/* Just print the address is hex. This is included for completeness even
though both GDB and objdump provide their own (to print symbolic
addresses). */
extern void generic_print_address
PARAMS ((bfd_vma, struct disassemble_info *));
#define INIT_DISASSEMBLE_INFO(INFO, STREAM) \
(INFO).fprintf_func = (fprintf_ftype)fprintf, \
(INFO).stream = (STREAM), \
(INFO).buffer = NULL, \
(INFO).buffer_vma = 0, \
(INFO).buffer_length = 0, \
(INFO).read_memory_func = buffer_read_memory, \
(INFO).memory_error_func = perror_memory, \
(INFO).print_address_func = generic_print_address, \
(INFO).insn_info_valid = 0
/* This block of definitions is for calling the instruction decoders
from GDB. */
/* GDB--Like target_read_memory, but slightly different parameters. */
extern int
dis_asm_read_memory PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, int len,
disassemble_info *info));
/* GDB--Like memory_error with slightly different parameters. */
extern void
dis_asm_memory_error
PARAMS ((int status, bfd_vma memaddr, disassemble_info *info));
/* GDB--Like print_address with slightly different parameters. */
extern void
dis_asm_print_address PARAMS ((bfd_vma addr, disassemble_info *info));
#define GDB_INIT_DISASSEMBLE_INFO(INFO, STREAM) \
(INFO).fprintf_func = (fprintf_ftype)fprintf_filtered, \
(INFO).stream = (STREAM), \
(INFO).read_memory_func = dis_asm_read_memory, \
(INFO).memory_error_func = dis_asm_memory_error, \
(INFO).print_address_func = dis_asm_print_address, \
(INFO).insn_info_valid = 0

View File

@ -0,0 +1,178 @@
/* Interface between the opcode library and its callers.
Written by Cygnus Support, 1993.
The opcode library (libopcodes.a) provides instruction decoders for
a large variety of instruction sets, callable with an identical
interface, for making instruction-processing programs more independent
of the instruction set being processed. */
#include <stdio.h>
#include "bfd.h"
typedef int (*fprintf_ftype) PARAMS((FILE*, const char*, ...));
enum dis_insn_type {
dis_noninsn, /* Not a valid instruction */
dis_nonbranch, /* Not a branch instruction */
dis_branch, /* Unconditional branch */
dis_condbranch, /* Conditional branch */
dis_jsr, /* Jump to subroutine */
dis_condjsr, /* Conditional jump to subroutine */
dis_dref, /* Data reference instruction */
dis_dref2 /* Two data references in instruction */
};
/* This struct is passed into the instruction decoding routine,
and is passed back out into each callback. The various fields are used
for conveying information from your main routine into your callbacks,
for passing information into the instruction decoders (such as the
addresses of the callback functions), or for passing information
back from the instruction decoders to their callers.
It must be initialized before it is first passed; this can be done
by hand, or using one of the initialization macros below. */
typedef struct disassemble_info {
fprintf_ftype fprintf_func;
FILE *stream;
PTR application_data;
/* For use by the disassembler. */
int flags;
PTR private_data;
/* Function used to get bytes to disassemble. MEMADDR is the
address of the stuff to be disassembled, MYADDR is the address to
put the bytes in, and LENGTH is the number of bytes to read.
INFO is a pointer to this struct.
Returns an errno value or 0 for success. */
int (*read_memory_func)
PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, int length,
struct disassemble_info *info));
/* Function which should be called if we get an error that we can't
recover from. STATUS is the errno value from read_memory_func and
MEMADDR is the address that we were trying to read. INFO is a
pointer to this struct. */
void (*memory_error_func)
PARAMS ((int status, bfd_vma memaddr, struct disassemble_info *info));
/* Function called to print ADDR. */
void (*print_address_func)
PARAMS ((bfd_vma addr, struct disassemble_info *info));
/* These are for buffer_read_memory. */
bfd_byte *buffer;
bfd_vma buffer_vma;
int buffer_length;
/* Results from instruction decoders. Not all decoders yet support
this information. This info is set each time an instruction is
decoded, and is only valid for the last such instruction.
To determine whether this decoder supports this information, set
insn_info_valid to 0, decode an instruction, then check it. */
char insn_info_valid; /* Branch info has been set. */
char branch_delay_insns; /* How many sequential insn's will run before
a branch takes effect. (0 = normal) */
char data_size; /* Size of data reference in insn, in bytes */
enum dis_insn_type insn_type; /* Type of instruction */
bfd_vma target; /* Target address of branch or dref, if known;
zero if unknown. */
bfd_vma target2; /* Second target address for dref2 */
} disassemble_info;
/* Standard disassemblers. Disassemble one instruction at the given
target address. Return number of bytes processed. */
typedef int (*disassembler_ftype)
PARAMS((bfd_vma, disassemble_info *));
extern int print_insn_big_mips PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_little_mips PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_i386 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_m68k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_z8001 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_z8002 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_h8300 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_h8300h PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_h8500 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_alpha PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_sparc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_big_a29k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_little_a29k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_i960 PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_sh PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_hppa PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_m88k PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_big_powerpc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_little_powerpc PARAMS ((bfd_vma, disassemble_info*));
extern int print_insn_rs6000 PARAMS ((bfd_vma, disassemble_info*));
/* Fetch the disassembler for a given BFD, if that support is available. */
extern disassembler_ftype disassembler PARAMS ((bfd *));
/* This block of definitions is for particular callers who read instructions
into a buffer before calling the instruction decoder. */
/* Here is a function which callers may wish to use for read_memory_func.
It gets bytes from a buffer. */
extern int buffer_read_memory
PARAMS ((bfd_vma, bfd_byte *, int, struct disassemble_info *));
/* This function goes with buffer_read_memory.
It prints a message using info->fprintf_func and info->stream. */
extern void perror_memory PARAMS ((int, bfd_vma, struct disassemble_info *));
/* Just print the address is hex. This is included for completeness even
though both GDB and objdump provide their own (to print symbolic
addresses). */
extern void generic_print_address
PARAMS ((bfd_vma, struct disassemble_info *));
#define INIT_DISASSEMBLE_INFO(INFO, STREAM) \
(INFO).fprintf_func = (fprintf_ftype)fprintf, \
(INFO).stream = (STREAM), \
(INFO).buffer = NULL, \
(INFO).buffer_vma = 0, \
(INFO).buffer_length = 0, \
(INFO).read_memory_func = buffer_read_memory, \
(INFO).memory_error_func = perror_memory, \
(INFO).print_address_func = generic_print_address, \
(INFO).insn_info_valid = 0
/* This block of definitions is for calling the instruction decoders
from GDB. */
/* GDB--Like target_read_memory, but slightly different parameters. */
extern int
dis_asm_read_memory PARAMS ((bfd_vma memaddr, bfd_byte *myaddr, int len,
disassemble_info *info));
/* GDB--Like memory_error with slightly different parameters. */
extern void
dis_asm_memory_error
PARAMS ((int status, bfd_vma memaddr, disassemble_info *info));
/* GDB--Like print_address with slightly different parameters. */
extern void
dis_asm_print_address PARAMS ((bfd_vma addr, disassemble_info *info));
#define GDB_INIT_DISASSEMBLE_INFO(INFO, STREAM) \
(INFO).fprintf_func = (fprintf_ftype)fprintf_filtered, \
(INFO).stream = (STREAM), \
(INFO).read_memory_func = dis_asm_read_memory, \
(INFO).memory_error_func = dis_asm_memory_error, \
(INFO).print_address_func = dis_asm_print_address, \
(INFO).insn_info_valid = 0

View File

@ -0,0 +1,70 @@
/* Disassemble from a buffer, for GNU.
Copyright (C) 1993, 1994 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "dis-asm.h"
#include "sysdep.h"
#include <errno.h>
/* Get LENGTH bytes from info's buffer, at target address memaddr.
Transfer them to myaddr. */
int
buffer_read_memory (memaddr, myaddr, length, info)
bfd_vma memaddr;
bfd_byte *myaddr;
int length;
struct disassemble_info *info;
{
if (memaddr < info->buffer_vma
|| memaddr + length > info->buffer_vma + info->buffer_length)
/* Out of bounds. Use EIO because GDB uses it. */
return EIO;
memcpy (myaddr, info->buffer + (memaddr - info->buffer_vma), length);
return 0;
}
/* Print an error message. We can assume that this is in response to
an error return from buffer_read_memory. */
void
perror_memory (status, memaddr, info)
int status;
bfd_vma memaddr;
struct disassemble_info *info;
{
if (status != EIO)
/* Can't happen. */
(*info->fprintf_func) (info->stream, "Unknown error %d\n", status);
else
/* Actually, address between memaddr and memaddr + len was
out of bounds. */
(*info->fprintf_func) (info->stream,
"Address 0x%x is out of bounds.\n", memaddr);
}
/* This could be in a separate file, to save miniscule amounts of space
in statically linked executables. */
/* Just print the address is hex. This is included for completeness even
though both GDB and objdump provide their own (to print symbolic
addresses). */
void
generic_print_address (addr, info)
bfd_vma addr;
struct disassemble_info *info;
{
(*info->fprintf_func) (info->stream, "0x%x", addr);
}

2029
debugger/opcodes/i386-dis.c Normal file

File diff suppressed because it is too large Load Diff

View File

@ -1,5 +1,5 @@
/* Print i386 instructions for GDB, the GNU debugger. /* Print i386 instructions for GDB, the GNU debugger.
Copyright (C) 1988, 1989, 1991 Free Software Foundation, Inc. Copyright (C) 1988, 1989, 1991, 1993, 1994 Free Software Foundation, Inc.
This file is part of GDB. This file is part of GDB.
@ -20,6 +20,7 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
/* /*
* 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu) * 80386 instruction printer by Pace Willisson (pace@prep.ai.mit.edu)
* July 1988 * July 1988
* modified by John Hassey (hassey@dg-rtp.dg.com)
*/ */
/* /*
@ -31,12 +32,51 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
* the Intel manual for details. * the Intel manual for details.
*/ */
#include "defs.h" #include "dis-asm.h"
#include "sysdep.h"
#include <ctype.h> #define MAXLEN 20
/* For the GDB interface at the bottom of the file... */ #include <setjmp.h>
#include "gdbcore.h"
struct dis_private
{
/* Points to first byte not fetched. */
bfd_byte *max_fetched;
bfd_byte the_buffer[MAXLEN];
bfd_vma insn_start;
jmp_buf bailout;
};
/* Make sure that bytes from INFO->PRIVATE_DATA->BUFFER (inclusive)
to ADDR (exclusive) are valid. Returns 1 for success, longjmps
on error. */
#define FETCH_DATA(info, addr) \
((addr) <= ((struct dis_private *)(info->private_data))->max_fetched \
? 1 : fetch_data ((info), (addr)))
static int
fetch_data (info, addr)
struct disassemble_info *info;
bfd_byte *addr;
{
int status;
struct dis_private *priv = (struct dis_private *)info->private_data;
bfd_vma start = priv->insn_start + (priv->max_fetched - priv->the_buffer);
status = (*info->read_memory_func) (start,
priv->max_fetched,
addr - priv->max_fetched,
info);
if (status != 0)
{
(*info->memory_error_func) (status, start, info);
longjmp (priv->bailout, 1);
}
else
priv->max_fetched = addr;
return 1;
}
#define Eb OP_E, b_mode #define Eb OP_E, b_mode
#define indirEb OP_indirE, b_mode #define indirEb OP_indirE, b_mode
@ -376,8 +416,8 @@ struct dis386 dis386[] = {
{ "stosS", Yv, eAX }, { "stosS", Yv, eAX },
{ "lodsb", AL, Xb }, { "lodsb", AL, Xb },
{ "lodsS", eAX, Xv }, { "lodsS", eAX, Xv },
{ "scasb", AL, Xb }, { "scasb", AL, Yb },
{ "scasS", eAX, Xv }, { "scasS", eAX, Yv },
/* b0 */ /* b0 */
{ "movb", AL, Ib }, { "movb", AL, Ib },
{ "movb", CL, Ib }, { "movb", CL, Ib },
@ -481,7 +521,9 @@ struct dis386 dis386_twobyte[] = {
{ "clts" }, { "clts" },
{ "(bad)" }, { "(bad)" },
/* 08 */ /* 08 */
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "invd" },
{ "wbinvd" },
{ "(bad)" }, { "(bad)" },
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" },
/* 10 */ /* 10 */
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" },
@ -587,8 +629,8 @@ struct dis386 dis386_twobyte[] = {
{ "(bad)" }, { "(bad)" },
{ "imulS", Gv, Ev }, { "imulS", Gv, Ev },
/* b0 */ /* b0 */
{ "(bad)" }, { "cmpxchgb", Eb, Gb },
{ "(bad)" }, { "cmpxchgS", Ev, Gv },
{ "lssS", Gv, Mp }, /* 386 lists only Mp */ { "lssS", Gv, Mp }, /* 386 lists only Mp */
{ "btrS", Ev, Gv }, { "btrS", Ev, Gv },
{ "lfsS", Gv, Mp }, /* 386 lists only Mp */ { "lfsS", Gv, Mp }, /* 386 lists only Mp */
@ -605,11 +647,19 @@ struct dis386 dis386_twobyte[] = {
{ "movsbS", Gv, Eb }, { "movsbS", Gv, Eb },
{ "movswS", Gv, Ew }, { "movswS", Gv, Ew },
/* c0 */ /* c0 */
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "xaddb", Eb, Gb },
{ "xaddS", Ev, Gv },
{ "(bad)" }, { "(bad)" },
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" },
/* c8 */ /* c8 */
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "bswap", eAX },
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "bswap", eCX },
{ "bswap", eDX },
{ "bswap", eBX },
{ "bswap", eSP },
{ "bswap", eBP },
{ "bswap", eSI },
{ "bswap", eDI },
/* d0 */ /* d0 */
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" },
{ "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" }, { "(bad)" },
@ -635,6 +685,7 @@ static char *obufp;
static char scratchbuf[100]; static char scratchbuf[100];
static unsigned char *start_codep; static unsigned char *start_codep;
static unsigned char *codep; static unsigned char *codep;
static disassemble_info *the_info;
static int mod; static int mod;
static int rm; static int rm;
static int reg; static int reg;
@ -817,7 +868,7 @@ struct dis386 grps[][8] = {
{ "smsw", Ew }, { "smsw", Ew },
{ "(bad)" }, { "(bad)" },
{ "lmsw", Ew }, { "lmsw", Ew },
{ "(bad)" }, { "invlpg", Ew },
}, },
/* GRP8 */ /* GRP8 */
{ {
@ -853,6 +904,7 @@ ckprefix ()
prefixes = 0; prefixes = 0;
while (1) while (1)
{ {
FETCH_DATA (the_info, codep + 1);
switch (*codep) switch (*codep)
{ {
case 0xf3: case 0xf3:
@ -904,27 +956,21 @@ static int aflag;
static char op1out[100], op2out[100], op3out[100]; static char op1out[100], op2out[100], op3out[100];
static int op_address[3], op_ad, op_index[3]; static int op_address[3], op_ad, op_index[3];
static int start_pc; static int start_pc;
extern void fputs_filtered ();
/* /*
* disassemble the first instruction in 'inbuf'. You have to make
* sure all of the bytes of the instruction are filled in.
* On the 386's of 1988, the maximum length of an instruction is 15 bytes. * On the 386's of 1988, the maximum length of an instruction is 15 bytes.
* (see topic "Redundant prefixes" in the "Differences from 8086" * (see topic "Redundant prefixes" in the "Differences from 8086"
* section of the "Virtual 8086 Mode" chapter.) * section of the "Virtual 8086 Mode" chapter.)
* 'pc' should be the address of this instruction, it will * 'pc' should be the address of this instruction, it will
* be used to print the target address if this is a relative jump or call * be used to print the target address if this is a relative jump or call
* 'outbuf' gets filled in with the disassembled instruction. it should
* be long enough to hold the longest disassembled instruction.
* 100 bytes is certainly enough, unless symbol printing is added later
* The function returns the length of this instruction in bytes. * The function returns the length of this instruction in bytes.
*/ */
int int
i386dis (pc, inbuf, stream) print_insn_i386 (pc, info)
int pc; bfd_vma pc;
unsigned char *inbuf; disassemble_info *info;
FILE *stream;
{ {
struct dis386 *dp; struct dis386 *dp;
int i; int i;
@ -932,6 +978,16 @@ i386dis (pc, inbuf, stream)
char *first, *second, *third; char *first, *second, *third;
int needcomma; int needcomma;
struct dis_private priv;
bfd_byte *inbuf = priv.the_buffer;
info->private_data = (PTR) &priv;
priv.max_fetched = priv.the_buffer;
priv.insn_start = pc;
if (setjmp (priv.bailout) != 0)
/* Error return. */
return -1;
obuf[0] = 0; obuf[0] = 0;
op1out[0] = 0; op1out[0] = 0;
op2out[0] = 0; op2out[0] = 0;
@ -939,12 +995,14 @@ i386dis (pc, inbuf, stream)
op_index[0] = op_index[1] = op_index[2] = -1; op_index[0] = op_index[1] = op_index[2] = -1;
the_info = info;
start_pc = pc; start_pc = pc;
start_codep = inbuf; start_codep = inbuf;
codep = inbuf; codep = inbuf;
ckprefix (); ckprefix ();
FETCH_DATA (info, codep + 1);
if (*codep == 0xc8) if (*codep == 0xc8)
enter_instruction = 1; enter_instruction = 1;
else else
@ -963,11 +1021,13 @@ i386dis (pc, inbuf, stream)
&& ((*codep < 0xd8) || (*codep > 0xdf))) && ((*codep < 0xd8) || (*codep > 0xdf)))
{ {
/* fwait not followed by floating point instruction */ /* fwait not followed by floating point instruction */
fputs_filtered ("fwait", stream); (*info->fprintf_func) (info->stream, "fwait");
return (1); return (1);
} }
/* these would be initialized to 0 if disassembling for 8086 or 286 */ /* these would be initialized to 0 if disassembling for 8086 or 286 */
dflag = 1;
aflag = 1;
if (prefixes & PREFIX_DATA) if (prefixes & PREFIX_DATA)
dflag ^= 1; dflag ^= 1;
@ -979,10 +1039,20 @@ i386dis (pc, inbuf, stream)
} }
if (*codep == 0x0f) if (*codep == 0x0f)
{
FETCH_DATA (info, codep + 2);
dp = &dis386_twobyte[*++codep]; dp = &dis386_twobyte[*++codep];
}
else else
dp = &dis386[*codep]; dp = &dis386[*codep];
codep++; codep++;
/* Fetch the mod/reg/rm byte. FIXME: We should be only fetching
this if we need it. As it is, this code loses if there is a
one-byte instruction (without a mod/reg/rm byte) at the end of
the address space. */
FETCH_DATA (info, codep + 1);
mod = (*codep >> 6) & 3; mod = (*codep >> 6) & 3;
reg = (*codep >> 3) & 7; reg = (*codep >> 3) & 7;
rm = *codep & 7; rm = *codep & 7;
@ -1018,7 +1088,7 @@ i386dis (pc, inbuf, stream)
for (i = strlen (obuf); i < 6; i++) for (i = strlen (obuf); i < 6; i++)
oappend (" "); oappend (" ");
oappend (" "); oappend (" ");
fputs_filtered (obuf, stream); (*info->fprintf_func) (info->stream, "%s", obuf);
/* enter instruction is printed with operands in the /* enter instruction is printed with operands in the
* same order as the intel book; everything else * same order as the intel book; everything else
@ -1043,29 +1113,29 @@ i386dis (pc, inbuf, stream)
if (*first) if (*first)
{ {
if (op_index[0] != -1) if (op_index[0] != -1)
print_address (op_address[op_index[0]], stream); (*info->print_address_func) (op_address[op_index[0]], info);
else else
fputs_filtered (first, stream); (*info->fprintf_func) (info->stream, "%s", first);
needcomma = 1; needcomma = 1;
} }
if (*second) if (*second)
{ {
if (needcomma) if (needcomma)
fputs_filtered (",", stream); (*info->fprintf_func) (info->stream, ",");
if (op_index[1] != -1) if (op_index[1] != -1)
print_address (op_address[op_index[1]], stream); (*info->print_address_func) (op_address[op_index[1]], info);
else else
fputs_filtered (second, stream); (*info->fprintf_func) (info->stream, "%s", second);
needcomma = 1; needcomma = 1;
} }
if (*third) if (*third)
{ {
if (needcomma) if (needcomma)
fputs_filtered (",", stream); (*info->fprintf_func) (info->stream, ",");
if (op_index[2] != -1) if (op_index[2] != -1)
print_address (op_address[op_index[2]], stream); (*info->print_address_func) (op_address[op_index[2]], info);
else else
fputs_filtered (third, stream); (*info->fprintf_func) (info->stream, "%s", third);
} }
return (codep - inbuf); return (codep - inbuf);
} }
@ -1321,7 +1391,9 @@ dofloat ()
{ {
putop (fgrps[dp->bytemode1][rm]); putop (fgrps[dp->bytemode1][rm]);
/* instruction fnstsw is only one with strange arg */ /* instruction fnstsw is only one with strange arg */
if (floatop == 0xdf && *codep == 0xe0) if (floatop == 0xdf
&& FETCH_DATA (the_info, codep + 1)
&& *codep == 0xe0)
strcpy (op1out, "%eax"); strcpy (op1out, "%eax");
} }
else else
@ -1467,61 +1539,11 @@ OP_E (bytemode)
} }
append_prefix (); append_prefix ();
if (bytemode == w_mode || (bytemode == v_mode && !dflag))
{
if (mod == 0 && rm == 6)
{
sprintf(scratchbuf, "%04.4x", get16());
oappend(scratchbuf);
return 0;
}
disp = 0;
if (mod == 1)
disp = *(char *)codep++;
else if (mod == 2)
disp = get16();
if (disp != 0)
{
sprintf(scratchbuf, "0x%x", disp);
oappend(scratchbuf);
}
switch (rm)
{
case 0:
oappend("(%bx,%si)");
break;
case 1:
oappend("(%bx,%di)");
break;
case 2:
oappend("(%bp,%si)");
break;
case 3:
oappend("(%bp,%di)");
break;
case 4:
oappend("(%si)");
break;
case 5:
oappend("(%di)");
break;
case 6:
oappend("(%bp)");
break;
case 7:
oappend("(%bx)");
break;
}
return 0;
}
if (rm == 4) if (rm == 4)
{ {
havesib = 1; havesib = 1;
havebase = 1; havebase = 1;
FETCH_DATA (the_info, codep + 1);
scale = (*codep >> 6) & 3; scale = (*codep >> 6) & 3;
index = (*codep >> 3) & 7; index = (*codep >> 3) & 7;
base = *codep & 7; base = *codep & 7;
@ -1550,6 +1572,7 @@ OP_E (bytemode)
} }
break; break;
case 1: case 1:
FETCH_DATA (the_info, codep + 1);
disp = *(char *)codep++; disp = *(char *)codep++;
if (rm != 4) if (rm != 4)
{ {
@ -1626,6 +1649,7 @@ get32 ()
{ {
int x = 0; int x = 0;
FETCH_DATA (the_info, codep + 4);
x = *codep++ & 0xff; x = *codep++ & 0xff;
x |= (*codep++ & 0xff) << 8; x |= (*codep++ & 0xff) << 8;
x |= (*codep++ & 0xff) << 16; x |= (*codep++ & 0xff) << 16;
@ -1638,6 +1662,7 @@ get16 ()
{ {
int x = 0; int x = 0;
FETCH_DATA (the_info, codep + 2);
x = *codep++ & 0xff; x = *codep++ & 0xff;
x |= (*codep++ & 0xff) << 8; x |= (*codep++ & 0xff) << 8;
return (x); return (x);
@ -1696,6 +1721,7 @@ OP_I (bytemode)
switch (bytemode) switch (bytemode)
{ {
case b_mode: case b_mode:
FETCH_DATA (the_info, codep + 1);
op = *codep++ & 0xff; op = *codep++ & 0xff;
break; break;
case v_mode: case v_mode:
@ -1725,6 +1751,7 @@ OP_sI (bytemode)
switch (bytemode) switch (bytemode)
{ {
case b_mode: case b_mode:
FETCH_DATA (the_info, codep + 1);
op = *(char *)codep++; op = *(char *)codep++;
break; break;
case v_mode: case v_mode:
@ -1755,6 +1782,7 @@ OP_J (bytemode)
switch (bytemode) switch (bytemode)
{ {
case b_mode: case b_mode:
FETCH_DATA (the_info, codep + 1);
disp = *(char *)codep++; disp = *(char *)codep++;
break; break;
case v_mode: case v_mode:
@ -1929,28 +1957,3 @@ OP_rm (bytemode)
} }
return (0); return (0);
} }
#define MAXLEN 20
int
print_insn (realmemaddr, memaddr, stream, addrlen)
CORE_ADDR memaddr, realmemaddr;
FILE *stream;
int addrlen;
{
unsigned char buffer[MAXLEN];
if(addrlen == 32){
dflag = 1;
aflag = 1;
} else {
dflag = 0;
aflag = 0;
};
read_memory (memaddr, (char *) buffer, MAXLEN);
return (i386dis ((int)realmemaddr, buffer, stream));
}

View File

@ -1,17 +1,17 @@
/* obstack.h - object stack macros /* obstack.h - object stack macros
Copyright (C) 1988 Free Software Foundation, Inc. Copyright (C) 1988, 89, 90, 91, 92, 93, 94 Free Software Foundation, Inc.
This program is free software; you can redistribute it and/or modify it This program is free software; you can redistribute it and/or modify it
under the terms of the GNU General Public License as published by the under the terms of the GNU Library General Public License as published by the
Free Software Foundation; either version 2, or (at your option) any Free Software Foundation; either version 2, or (at your option) any
later version. later version.
This program is distributed in the hope that it will be useful, This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details. GNU Library General Public License for more details.
You should have received a copy of the GNU General Public License You should have received a copy of the GNU Library General Public License
along with this program; if not, write to the Free Software along with this program; if not, write to the Free Software
Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */ Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
@ -41,7 +41,7 @@ as the first argument.
One motivation for this package is the problem of growing char strings One motivation for this package is the problem of growing char strings
in symbol tables. Unless you are "fascist pig with a read-only mind" in symbol tables. Unless you are "fascist pig with a read-only mind"
[Gosper's immortal quote from HAKMEM item 154, out of context] you --Gosper's immortal quote from HAKMEM item 154, out of context--you
would not like to put any arbitrary upper limit on the length of your would not like to put any arbitrary upper limit on the length of your
symbols. symbols.
@ -92,7 +92,7 @@ Summary:
Exactly one object is growing in an obstack at any one time. Exactly one object is growing in an obstack at any one time.
You can run one obstack per control block. You can run one obstack per control block.
You may have as many control blocks as you dare. You may have as many control blocks as you dare.
Because of the way we do it, you can `unwind' a obstack Because of the way we do it, you can `unwind' an obstack
back to a previous state. (You may remove objects much back to a previous state. (You may remove objects much
as you would with a stack.) as you would with a stack.)
*/ */
@ -100,8 +100,8 @@ Summary:
/* Don't do the contents of this file more than once. */ /* Don't do the contents of this file more than once. */
#ifndef __OBSTACKS__ #ifndef __OBSTACK_H__
#define __OBSTACKS__ #define __OBSTACK_H__
/* We use subtraction of (char *)0 instead of casting to int /* We use subtraction of (char *)0 instead of casting to int
because on word-addressable machines a simple cast to int because on word-addressable machines a simple cast to int
@ -115,6 +115,29 @@ Summary:
#define __INT_TO_PTR(P) ((P) + (char *)0) #define __INT_TO_PTR(P) ((P) + (char *)0)
#endif #endif
/* We need the type of the resulting object. In ANSI C it is ptrdiff_t
but in traditional C it is usually long. If we are in ANSI C and
don't already have ptrdiff_t get it. */
#if defined (__STDC__) && ! defined (offsetof)
#if defined (__GNUC__) && defined (IN_GCC)
/* On Next machine, the system's stddef.h screws up if included
after we have defined just ptrdiff_t, so include all of stddef.h.
Otherwise, define just ptrdiff_t, which is all we need. */
#ifndef __NeXT__
#define __need_ptrdiff_t
#endif
#endif
#include <stddef.h>
#endif
#ifdef __STDC__
#define PTR_INT_TYPE ptrdiff_t
#else
#define PTR_INT_TYPE long
#endif
struct _obstack_chunk /* Lives at front of each chunk. */ struct _obstack_chunk /* Lives at front of each chunk. */
{ {
char *limit; /* 1 past end of this chunk */ char *limit; /* 1 past end of this chunk */
@ -129,39 +152,33 @@ struct obstack /* control current object in current chunk */
char *object_base; /* address of object we are building */ char *object_base; /* address of object we are building */
char *next_free; /* where to add next char to current object */ char *next_free; /* where to add next char to current object */
char *chunk_limit; /* address of char after current chunk */ char *chunk_limit; /* address of char after current chunk */
int temp; /* Temporary for some macros. */ PTR_INT_TYPE temp; /* Temporary for some macros. */
int alignment_mask; /* Mask of alignment for each object. */ int alignment_mask; /* Mask of alignment for each object. */
struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */ struct _obstack_chunk *(*chunkfun) (); /* User's fcn to allocate a chunk. */
void (*freefun) (); /* User's function to free a chunk. */ void (*freefun) (); /* User's function to free a chunk. */
void *area_id; /* Select which region to alloc/free in */ char *extra_arg; /* first arg for chunk alloc/dealloc funcs */
int flags; /* Miscellaneous special purpose flags */ unsigned use_extra_arg:1; /* chunk alloc/dealloc funcs take extra arg */
unsigned maybe_empty_object:1;/* There is a possibility that the current
chunk contains a zero-length object. This
prevents freeing the chunk if we allocate
a bigger chunk to replace it. */
unsigned alloc_failed:1; /* chunk alloc func returned 0 */
}; };
/* Declare bits for flags word. */
/* Means there is a possibility the current chunk contains a zero-length
object. This prevents freeing the chunk if we allocate a bigger chunk
to replace it. */
#define OBSTACK_MAYBE_EMPTY_OBJECT (1 << 0)
/* Means that the allocation and deallocation functions take two arguments,
ala the mmalloc package. The first argument is a generic pointer that
is saved in the area_id member of the obstack struct. */
#define OBSTACK_MMALLOC_LIKE (1 << 1)
/* Declare the external functions we use; they are in obstack.c. */ /* Declare the external functions we use; they are in obstack.c. */
#ifdef __STDC__ #ifdef __STDC__
extern void _obstack_newchunk (struct obstack *, int); extern void _obstack_newchunk (struct obstack *, int);
extern void _obstack_free (struct obstack *, void *); extern void _obstack_free (struct obstack *, void *);
extern void _obstack_begin (struct obstack *, int, int, extern int _obstack_begin (struct obstack *, int, int,
void *(*) (int), void (*) (int), void *, int); void *(*) (), void (*) ());
extern int _obstack_begin_1 (struct obstack *, int, int,
void *(*) (), void (*) (), void *);
#else #else
extern void _obstack_newchunk (); extern void _obstack_newchunk ();
extern void _obstack_free (); extern void _obstack_free ();
extern void _obstack_begin (); extern int _obstack_begin ();
extern int _obstack_begin_1 ();
#endif #endif
#ifdef __STDC__ #ifdef __STDC__
@ -211,7 +228,7 @@ int obstack_chunk_size (struct obstack *obstack);
Note that this might not be the final address of the object Note that this might not be the final address of the object
because a new chunk might be needed to hold the final size. */ because a new chunk might be needed to hold the final size. */
#define obstack_base(h) ((h)->object_base) #define obstack_base(h) ((h)->alloc_failed ? 0 : (h)->object_base)
/* Size for allocating ordinary chunks. */ /* Size for allocating ordinary chunks. */
@ -219,7 +236,7 @@ int obstack_chunk_size (struct obstack *obstack);
/* Pointer to next byte not yet allocated in current chunk. */ /* Pointer to next byte not yet allocated in current chunk. */
#define obstack_next_free(h) ((h)->next_free) #define obstack_next_free(h) ((h)->alloc_failed ? 0 : (h)->next_free)
/* Mask specifying low bits that should be clear in address of an object. */ /* Mask specifying low bits that should be clear in address of an object. */
@ -227,16 +244,19 @@ int obstack_chunk_size (struct obstack *obstack);
#define obstack_init(h) \ #define obstack_init(h) \
_obstack_begin ((h), 0, 0, \ _obstack_begin ((h), 0, 0, \
(void *(*) ()) obstack_chunk_alloc, (void (*) ())obstack_chunk_free, (void *) 0, 0) (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
#define obstack_begin(h, size) \ #define obstack_begin(h, size) \
_obstack_begin ((h), (size), 0, \ _obstack_begin ((h), (size), 0, \
(void *(*) ()) obstack_chunk_alloc, (void (*) ())obstack_chunk_free, (void *) 0, 0) (void *(*) ()) obstack_chunk_alloc, (void (*) ()) obstack_chunk_free)
#define obstack_full_begin(h,size,alignment,chunkfun,freefun,area_id,flags) \ #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \
_obstack_begin ((h), (size), (alignment), \ _obstack_begin ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), (void (*) ()) (freefun), \ (void *(*) ()) (chunkfun), (void (*) ()) (freefun))
(area_id), (flags))
#define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \
_obstack_begin_1 ((h), (size), (alignment), \
(void *(*) ()) (chunkfun), (void (*) ()) (freefun), (arg))
#define obstack_chunkfun(h, newchunkfun) \ #define obstack_chunkfun(h, newchunkfun) \
((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun)) ((h) -> chunkfun = (struct _obstack_chunk *(*)()) (newchunkfun))
@ -261,6 +281,7 @@ int obstack_chunk_size (struct obstack *obstack);
#define obstack_object_size(OBSTACK) \ #define obstack_object_size(OBSTACK) \
__extension__ \ __extension__ \
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
__o->alloc_failed ? 0 : \
(unsigned) (__o->next_free - __o->object_base); }) (unsigned) (__o->next_free - __o->object_base); })
#define obstack_room(OBSTACK) \ #define obstack_room(OBSTACK) \
@ -268,37 +289,39 @@ int obstack_chunk_size (struct obstack *obstack);
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
(unsigned) (__o->chunk_limit - __o->next_free); }) (unsigned) (__o->chunk_limit - __o->next_free); })
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
so that we can avoid having void expressions
in the arms of the conditional expression.
Casting the third operand to void was tried before,
but some compilers won't accept it. */
#define obstack_grow(OBSTACK,where,length) \ #define obstack_grow(OBSTACK,where,length) \
__extension__ \ __extension__ \
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
int __len = (length); \ int __len = (length); \
((__o->next_free + __len > __o->chunk_limit) \ if (__o->next_free + __len > __o->chunk_limit) \
? (_obstack_newchunk (__o, __len), 0) : 0); \ _obstack_newchunk (__o, __len); \
if (!__o->alloc_failed) \
{ \
bcopy (where, __o->next_free, __len); \ bcopy (where, __o->next_free, __len); \
__o->next_free += __len; \ __o->next_free += __len; \
} \
(void) 0; }) (void) 0; })
#define obstack_grow0(OBSTACK,where,length) \ #define obstack_grow0(OBSTACK,where,length) \
__extension__ \ __extension__ \
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
int __len = (length); \ int __len = (length); \
((__o->next_free + __len + 1 > __o->chunk_limit) \ if (__o->next_free + __len + 1 > __o->chunk_limit) \
? (_obstack_newchunk (__o, __len + 1), 0) : 0), \ _obstack_newchunk (__o, __len + 1); \
bcopy (where, __o->next_free, __len), \ if (!__o->alloc_failed) \
__o->next_free += __len, \ { \
bcopy (where, __o->next_free, __len); \
__o->next_free += __len; \
*(__o->next_free)++ = 0; \ *(__o->next_free)++ = 0; \
} \
(void) 0; }) (void) 0; })
#define obstack_1grow(OBSTACK,datum) \ #define obstack_1grow(OBSTACK,datum) \
__extension__ \ __extension__ \
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
((__o->next_free + 1 > __o->chunk_limit) \ if (__o->next_free + 1 > __o->chunk_limit) \
? (_obstack_newchunk (__o, 1), 0) : 0), \ _obstack_newchunk (__o, 1); \
if (!__o->alloc_failed) \
*(__o->next_free)++ = (datum); \ *(__o->next_free)++ = (datum); \
(void) 0; }) (void) 0; })
@ -309,28 +332,31 @@ __extension__ \
#define obstack_ptr_grow(OBSTACK,datum) \ #define obstack_ptr_grow(OBSTACK,datum) \
__extension__ \ __extension__ \
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
((__o->next_free + sizeof (void *) > __o->chunk_limit) \ if (__o->next_free + sizeof (void *) > __o->chunk_limit) \
? (_obstack_newchunk (__o, sizeof (void *)), 0) : 0), \ _obstack_newchunk (__o, sizeof (void *)); \
*(*(void ***)&__o->next_free)++ = ((void *)datum); \ if (!__o->alloc_failed) \
*((void **)__o->next_free)++ = ((void *)datum); \
(void) 0; }) (void) 0; })
#define obstack_int_grow(OBSTACK,datum) \ #define obstack_int_grow(OBSTACK,datum) \
__extension__ \ __extension__ \
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
((__o->next_free + sizeof (int) > __o->chunk_limit) \ if (__o->next_free + sizeof (int) > __o->chunk_limit) \
? (_obstack_newchunk (__o, sizeof (int)), 0) : 0), \ _obstack_newchunk (__o, sizeof (int)); \
*(*(int **)&__o->next_free)++ = ((int)datum); \ if (!__o->alloc_failed) \
*((int *)__o->next_free)++ = ((int)datum); \
(void) 0; }) (void) 0; })
#define obstack_ptr_grow_fast(h,aptr) (*(*(void ***)&(h)->next_free)++ = (void *)aptr) #define obstack_ptr_grow_fast(h,aptr) (*((void **)(h)->next_free)++ = (void *)aptr)
#define obstack_int_grow_fast(h,aint) (*(*(int **)&(h)->next_free)++ = (int)aint) #define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)
#define obstack_blank(OBSTACK,length) \ #define obstack_blank(OBSTACK,length) \
__extension__ \ __extension__ \
({ struct obstack *__o = (OBSTACK); \ ({ struct obstack *__o = (OBSTACK); \
int __len = (length); \ int __len = (length); \
((__o->chunk_limit - __o->next_free < __len) \ if (__o->chunk_limit - __o->next_free < __len) \
? (_obstack_newchunk (__o, __len), 0) : 0); \ _obstack_newchunk (__o, __len); \
if (!__o->alloc_failed) \
__o->next_free += __len; \ __o->next_free += __len; \
(void) 0; }) (void) 0; })
@ -357,16 +383,22 @@ __extension__ \
#define obstack_finish(OBSTACK) \ #define obstack_finish(OBSTACK) \
__extension__ \ __extension__ \
({ struct obstack *__o1 = (OBSTACK); \ ({ struct obstack *__o1 = (OBSTACK); \
void *value = (void *) __o1->object_base; \ void *value; \
if (__o1->alloc_failed) \
value = 0; \
else \
{ \
value = (void *) __o1->object_base; \
if (__o1->next_free == value) \ if (__o1->next_free == value) \
__o1->flags |= OBSTACK_MAYBE_EMPTY_OBJECT; \ __o1->maybe_empty_object = 1; \
__o1->next_free \ __o1->next_free \
= __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\ = __INT_TO_PTR ((__PTR_TO_INT (__o1->next_free)+__o1->alignment_mask)\
& ~ (__o1->alignment_mask)); \ & ~ (__o1->alignment_mask)); \
((__o1->next_free - (char *)__o1->chunk \ if (__o1->next_free - (char *)__o1->chunk \
> __o1->chunk_limit - (char *)__o1->chunk) \ > __o1->chunk_limit - (char *)__o1->chunk) \
? (__o1->next_free = __o1->chunk_limit) : 0); \ __o1->next_free = __o1->chunk_limit; \
__o1->object_base = __o1->next_free; \ __o1->object_base = __o1->next_free; \
} \
value; }) value; })
#define obstack_free(OBSTACK, OBJ) \ #define obstack_free(OBSTACK, OBJ) \
@ -380,48 +412,61 @@ __extension__ \
#else /* not __GNUC__ or not __STDC__ */ #else /* not __GNUC__ or not __STDC__ */
#define obstack_object_size(h) \ #define obstack_object_size(h) \
(unsigned) ((h)->next_free - (h)->object_base) (unsigned) ((h)->alloc_failed ? 0 : (h)->next_free - (h)->object_base)
#define obstack_room(h) \ #define obstack_room(h) \
(unsigned) ((h)->chunk_limit - (h)->next_free) (unsigned) ((h)->chunk_limit - (h)->next_free)
/* Note that the call to _obstack_newchunk is enclosed in (..., 0)
so that we can avoid having void expressions
in the arms of the conditional expression.
Casting the third operand to void was tried before,
but some compilers won't accept it. */
#define obstack_grow(h,where,length) \ #define obstack_grow(h,where,length) \
( (h)->temp = (length), \ ( (h)->temp = (length), \
(((h)->next_free + (h)->temp > (h)->chunk_limit) \ (((h)->next_free + (h)->temp > (h)->chunk_limit) \
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
bcopy (where, (h)->next_free, (h)->temp), \ ((h)->alloc_failed ? 0 : \
(h)->next_free += (h)->temp) (bcopy (where, (h)->next_free, (h)->temp), \
(h)->next_free += (h)->temp)))
#define obstack_grow0(h,where,length) \ #define obstack_grow0(h,where,length) \
( (h)->temp = (length), \ ( (h)->temp = (length), \
(((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \ (((h)->next_free + (h)->temp + 1 > (h)->chunk_limit) \
? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \ ? (_obstack_newchunk ((h), (h)->temp + 1), 0) : 0), \
bcopy (where, (h)->next_free, (h)->temp), \ ((h)->alloc_failed ? 0 : \
(bcopy (where, (h)->next_free, (h)->temp), \
(h)->next_free += (h)->temp, \ (h)->next_free += (h)->temp, \
*((h)->next_free)++ = 0) *((h)->next_free)++ = 0)))
#define obstack_1grow(h,datum) \ #define obstack_1grow(h,datum) \
( (((h)->next_free + 1 > (h)->chunk_limit) \ ( (((h)->next_free + 1 > (h)->chunk_limit) \
? (_obstack_newchunk ((h), 1), 0) : 0), \ ? (_obstack_newchunk ((h), 1), 0) : 0), \
*((h)->next_free)++ = (datum)) ((h)->alloc_failed ? 0 : \
(*((h)->next_free)++ = (datum))))
#define obstack_ptr_grow(h,datum) \ #define obstack_ptr_grow(h,datum) \
( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \ ( (((h)->next_free + sizeof (char *) > (h)->chunk_limit) \
? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \
*(*(char ***)&(h)->next_free)++ = ((char *)datum)) ((h)->alloc_failed ? 0 : \
(*((char **)(((h)->next_free+=sizeof(char *))-sizeof(char *))) = ((char *)datum))))
#define obstack_int_grow(h,datum) \ #define obstack_int_grow(h,datum) \
( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \ ( (((h)->next_free + sizeof (int) > (h)->chunk_limit) \
? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \
*(*(int **)&(h)->next_free)++ = ((int)datum)) ((h)->alloc_failed ? 0 : \
(*((int *)(((h)->next_free+=sizeof(int))-sizeof(int))) = ((int)datum))))
#define obstack_ptr_grow_fast(h,aptr) (*((char **)(h)->next_free)++ = (char *)aptr)
#define obstack_int_grow_fast(h,aint) (*((int *)(h)->next_free)++ = (int)aint)
#define obstack_ptr_grow_fast(h,aptr) (*(*(char ***)&(h)->next_free)++ = (char *)aptr)
#define obstack_int_grow_fast(h,aint) (*(*(int **)&(h)->next_free)++ = (int)aint)
#define obstack_blank(h,length) \ #define obstack_blank(h,length) \
( (h)->temp = (length), \ ( (h)->temp = (length), \
(((h)->chunk_limit - (h)->next_free < (h)->temp) \ (((h)->chunk_limit - (h)->next_free < (h)->temp) \
? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \ ? (_obstack_newchunk ((h), (h)->temp), 0) : 0), \
(h)->next_free += (h)->temp) ((h)->alloc_failed ? 0 : \
((h)->next_free += (h)->temp)))
#define obstack_alloc(h,length) \ #define obstack_alloc(h,length) \
(obstack_blank ((h), (length)), obstack_finish ((h))) (obstack_blank ((h), (length)), obstack_finish ((h)))
@ -433,8 +478,9 @@ __extension__ \
(obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) (obstack_grow0 ((h), (where), (length)), obstack_finish ((h)))
#define obstack_finish(h) \ #define obstack_finish(h) \
( ((h)->next_free == (h)->object_base \ ( (h)->alloc_failed ? 0 : \
? (((h)->flags |= OBSTACK_MAYBE_EMPTY_OBJECT), 0) \ (((h)->next_free == (h)->object_base \
? (((h)->maybe_empty_object = 1), 0) \
: 0), \ : 0), \
(h)->temp = __PTR_TO_INT ((h)->object_base), \ (h)->temp = __PTR_TO_INT ((h)->object_base), \
(h)->next_free \ (h)->next_free \
@ -444,7 +490,7 @@ __extension__ \
> (h)->chunk_limit - (char *)(h)->chunk) \ > (h)->chunk_limit - (char *)(h)->chunk) \
? ((h)->next_free = (h)->chunk_limit) : 0), \ ? ((h)->next_free = (h)->chunk_limit) : 0), \
(h)->object_base = (h)->next_free, \ (h)->object_base = (h)->next_free, \
__INT_TO_PTR ((h)->temp)) __INT_TO_PTR ((h)->temp)))
#ifdef __STDC__ #ifdef __STDC__
#define obstack_free(h,obj) \ #define obstack_free(h,obj) \
@ -464,4 +510,4 @@ __extension__ \
#endif /* not __GNUC__ or not __STDC__ */ #endif /* not __GNUC__ or not __STDC__ */
#endif /* not __OBSTACKS__ */ #endif /* not __OBSTACK_H__ */

View File

@ -1,324 +0,0 @@
/* Macro definitions for i386, Unix System V.
Copyright 1986, 1987, 1989, 1991, 1992 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#if !defined (TM_I386V_H)
#define TM_I386V_H 1
/*
* Changes for 80386 by Pace Willisson (pace@prep.ai.mit.edu)
* July 1988
*/
#define TARGET_BYTE_ORDER LITTLE_ENDIAN
/* define this if you don't have the extension to coff that allows
* file names to appear in the string table
* (aux.x_file.x_foff)
*/
#define COFF_NO_LONG_FILE_NAMES
/* turn this on when rest of gdb is ready */
#define IEEE_FLOAT
/* Define this if the C compiler puts an underscore at the front
of external names before giving them to the linker. */
/* #define NAMES_HAVE_UNDERSCORE */
/* number of traps that happen between exec'ing the shell
* to run an inferior, and when we finally get to
* the inferior code. This is 2 on most implementations.
*/
#ifndef START_INFERIOR_TRAPS_EXPECTED
#define START_INFERIOR_TRAPS_EXPECTED 4
#endif
/* Offset from address of function to start of its code.
Zero on most machines. */
#define FUNCTION_START_OFFSET 0
/* Advance PC across any function entry prologue instructions
to reach some "real" code. */
#define SKIP_PROLOGUE(frompc) {(frompc) = i386_skip_prologue((frompc));}
extern int
i386_skip_prologue PARAMS ((int));
/* Immediately after a function call, return the saved pc.
Can't always go through the frames for this because on some machines
the new frame is not set up until the new function executes
some instructions. */
#define SAVED_PC_AFTER_CALL(frame) \
(read_memory_integer (read_register (SP_REGNUM), 4))
/* Address of end of stack space. */
#define STACK_END_ADDR 0x80000000
/* Stack grows downward. */
#define INNER_THAN <
/* Sequence of bytes for breakpoint instruction. */
#define BREAKPOINT {0xcc}
/* Amount PC must be decremented by after a breakpoint.
This is often the number of bytes in BREAKPOINT
but not always. */
#ifndef DECR_PC_AFTER_BREAK
#define DECR_PC_AFTER_BREAK 1
#endif
/* Nonzero if instruction at PC is a return instruction. */
#define ABOUT_TO_RETURN(pc) (read_memory_integer (pc, 1) == 0xc3)
/* Return 1 if P points to an invalid floating point value.
LEN is the length in bytes -- not relevant on the 386. */
#define INVALID_FLOAT(p, len) (0)
/* Say how long (ordinary) registers are. */
#define REGISTER_TYPE long
/* Number of machine registers */
#define NUM_REGS 16
/* Initializer for an array of names of registers.
There should be NUM_REGS strings in this initializer. */
/* the order of the first 8 registers must match the compiler's
* numbering scheme (which is the same as the 386 scheme)
* also, this table must match regmap in i386-pinsn.c.
*/
#define REGISTER_NAMES { "eax", "ecx", "edx", "ebx", \
"esp", "ebp", "esi", "edi", \
"eip", "ps", "cs", "ss", \
"ds", "es", "fs", "gs", \
}
/* Register numbers of various important registers.
Note that some of these values are "real" register numbers,
and correspond to the general registers of the machine,
and some are "phony" register numbers which are too large
to be actual register numbers as far as the user is concerned
but do serve to get the desired values when passed to read_register. */
#define FP_REGNUM 5 /* Contains address of executing stack frame */
#define SP_REGNUM 4 /* Contains address of top of stack */
#define PC_REGNUM 8
#define PS_REGNUM 9
/* Total amount of space needed to store our copies of the machine's
register state, the array `registers'. */
#define REGISTER_BYTES (NUM_REGS * 4)
/* Index within `registers' of the first byte of the space for
register N. */
#define REGISTER_BYTE(N) ((N)*4)
/* Number of bytes of storage in the actual machine representation
for register N. */
#define REGISTER_RAW_SIZE(N) (4)
/* Number of bytes of storage in the program's representation
for register N. */
#define REGISTER_VIRTUAL_SIZE(N) (4)
/* Largest value REGISTER_RAW_SIZE can have. */
#define MAX_REGISTER_RAW_SIZE 4
/* Largest value REGISTER_VIRTUAL_SIZE can have. */
#define MAX_REGISTER_VIRTUAL_SIZE 4
/* Nonzero if register N requires conversion
from raw format to virtual format. */
#define REGISTER_CONVERTIBLE(N) (0)
/* Convert data from raw format for register REGNUM
to virtual format for register REGNUM. */
#define REGISTER_CONVERT_TO_VIRTUAL(REGNUM,FROM,TO) \
{memcpy ((TO), (FROM), 4);}
/* Convert data from virtual format for register REGNUM
to raw format for register REGNUM. */
#define REGISTER_CONVERT_TO_RAW(REGNUM,FROM,TO) \
{memcpy ((TO), (FROM), 4);}
/* Return the GDB type object for the "standard" data type
of data in register N. */
/* Perhaps si and di should go here, but potentially they could be
used for things other than address. */
#define REGISTER_VIRTUAL_TYPE(N) \
((N) == PC_REGNUM || (N) == FP_REGNUM || (N) == SP_REGNUM ? \
lookup_pointer_type (builtin_type_void) : builtin_type_int)
/* Store the address of the place in which to copy the structure the
subroutine will return. This is called from call_function. */
#define STORE_STRUCT_RETURN(ADDR, SP) \
{ (SP) -= sizeof (ADDR); \
write_memory ((SP), (char *) &(ADDR), sizeof (ADDR)); }
/* Extract from an array REGBUF containing the (raw) register state
a function return value of type TYPE, and copy that, in virtual format,
into VALBUF. */
#define EXTRACT_RETURN_VALUE(TYPE,REGBUF,VALBUF) \
memcpy ((VALBUF), (REGBUF), TYPE_LENGTH (TYPE))
/* Write into appropriate registers a function return value
of type TYPE, given in virtual format. */
#define STORE_RETURN_VALUE(TYPE,VALBUF) \
write_register_bytes (0, VALBUF, TYPE_LENGTH (TYPE))
/* Extract from an array REGBUF containing the (raw) register state
the address in which a function should return its structure value,
as a CORE_ADDR (or an expression that can be used as one). */
#define EXTRACT_STRUCT_VALUE_ADDRESS(REGBUF) (*(int *)(REGBUF))
/* Describe the pointer in each stack frame to the previous stack frame
(its caller). */
/* FRAME_CHAIN takes a frame's nominal address
and produces the frame's chain-pointer. */
#define FRAME_CHAIN(thisframe) \
(!inside_entry_file ((thisframe)->pc) ? \
read_memory_integer ((thisframe)->frame, 4) :\
0)
/* Define other aspects of the stack frame. */
/* A macro that tells us whether the function invocation represented
by FI does not have a frame on the stack associated with it. If it
does not, FRAMELESS is set to 1, else 0. */
#define FRAMELESS_FUNCTION_INVOCATION(FI, FRAMELESS) \
(FRAMELESS) = frameless_look_for_prologue(FI)
#define FRAME_SAVED_PC(FRAME) (read_memory_integer ((FRAME)->frame + 4, 4))
#define FRAME_ARGS_ADDRESS(fi) ((fi)->frame)
#define FRAME_LOCALS_ADDRESS(fi) ((fi)->frame)
/* Return number of args passed to a frame.
Can return -1, meaning no way to tell. */
#define FRAME_NUM_ARGS(numargs, fi) (numargs) = i386_frame_num_args(fi)
#ifdef __STDC__ /* Forward decl's for prototypes */
struct frame_info;
struct frame_saved_regs;
#endif
extern int
i386_frame_num_args PARAMS ((struct frame_info *));
/* Return number of bytes at start of arglist that are not really args. */
#define FRAME_ARGS_SKIP 8
/* Put here the code to store, into a struct frame_saved_regs,
the addresses of the saved registers of frame described by FRAME_INFO.
This includes special registers such as pc and fp saved in special
ways in the stack frame. sp is even more special:
the address we return for it IS the sp for the next frame. */
#define FRAME_FIND_SAVED_REGS(frame_info, frame_saved_regs) \
{ i386_frame_find_saved_regs ((frame_info), &(frame_saved_regs)); }
extern void
i386_frame_find_saved_regs PARAMS ((struct frame_info *,
struct frame_saved_regs *));
/* Things needed for making the inferior call functions. */
/* Push an empty stack frame, to record the current PC, etc. */
#define PUSH_DUMMY_FRAME { i386_push_dummy_frame (); }
extern void
i386_push_dummy_frame PARAMS ((void));
/* Discard from the stack the innermost frame, restoring all registers. */
#define POP_FRAME { i386_pop_frame (); }
extern void
i386_pop_frame PARAMS ((void));
/* this is
* call 11223344 (32 bit relative)
* int3
*/
#define CALL_DUMMY { 0x223344e8, 0xcc11 }
#define CALL_DUMMY_LENGTH 8
#define CALL_DUMMY_START_OFFSET 0 /* Start execution at beginning of dummy */
/* Insert the specified number of args and function address
into a call sequence of the above form stored at DUMMYNAME. */
#define FIX_CALL_DUMMY(dummyname, pc, fun, nargs, args, type, gcc_p) \
{ \
int from, to, delta, loc; \
loc = (int)(read_register (SP_REGNUM) - CALL_DUMMY_LENGTH); \
from = loc + 5; \
to = (int)(fun); \
delta = to - from; \
*((char *)(dummyname) + 1) = (delta & 0xff); \
*((char *)(dummyname) + 2) = ((delta >> 8) & 0xff); \
*((char *)(dummyname) + 3) = ((delta >> 16) & 0xff); \
*((char *)(dummyname) + 4) = ((delta >> 24) & 0xff); \
}
extern void
print_387_control_word PARAMS ((unsigned int));
extern void
print_387_status_word PARAMS ((unsigned int));
/* Offset from SP to first arg on stack at first instruction of a function */
#define SP_ARG0 (1 * 4)
#endif /* !defined (TM_I386V_H) */

View File

@ -1,27 +0,0 @@
/* Macro definitions for linux.
Copyright (C) 1992 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#if !defined (TM_LINUX_H)
#define TM_LINUX_H 1
/* number of traps that happen between exec'ing the shell
* to run an inferior, and when we finally get to
* the inferior code. This is 2 on most implementations.
*/
#define START_INFERIOR_TRAPS_EXPECTED 2
#include "tm-i386v.h"
/* Define this if the C compiler puts an underscore at the front
of external names before giving them to the linker. */
#define NAMES_HAVE_UNDERSCORE
#endif /* !defined (TM_LINUX_H) */

View File

@ -1,45 +0,0 @@
/* Host support for i386.
Copyright 1986, 1987, 1989, 1992 Free Software Foundation, Inc.
Changes for 80386 by Pace Willisson (pace@prep.ai.mit.edu), July 1988.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#define HOST_BYTE_ORDER LITTLE_ENDIAN
/* I'm running gdb 3.4 under 386/ix 2.0.2, which is a derivative of AT&T's
Sys V/386 3.2.
On some machines, gdb crashes when it's starting up while calling the
vendor's termio tgetent() routine. It always works when run under
itself (actually, under 3.2, it's not an infinitely recursive bug.)
After some poking around, it appears that depending on the environment
size, or whether you're running YP, or the phase of the moon or something,
the stack is not always long-aligned when main() is called, and tgetent()
takes strong offense at that. On some machines this bug never appears, but
on those where it does, it occurs quite reliably. */
#define ALIGN_STACK_ON_STARTUP
/* define USG if you are using sys5 /usr/include's */
#define USG
#define HAVE_TERMIO
/* This is the amount to subtract from u.u_ar0
to get the offset in the core file of the register values. */
#define KERNEL_U_ADDR 0xe0000000

View File

@ -1,26 +0,0 @@
/* Native support for linux, for GDB, the GNU debugger.
Copyright (C) 1986, 1987, 1989, 1992 Free Software Foundation, Inc.
This file is part of GDB.
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program 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 General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. */
#include "xm-i386v.h"
/* This is the amount to subtract from u.u_ar0
to get the offset in the core file of the register values. */
#undef KERNEL_U_ADDR
#define KERNEL_U_ADDR 0x0
#define PSIGNAL_IN_SIGNAL_H

26
etc/commdlg-ordinals Normal file
View File

@ -0,0 +1,26 @@
1 2 0c17 GETOPENFILENAME exported, shared data
2 2 0c48 GETSAVEFILENAME exported, shared data
5 1 0ea1 CHOOSECOLOR exported, shared data
6 2 42a3 FILEOPENDLGPROC exported, shared data
7 2 446a FILESAVEDLGPROC exported, shared data
8 1 0197 COLORDLGPROC exported, shared data
9 6 0000 LOADALTERBITMAP exported, shared data
11 5 0000 FINDTEXT exported, shared data
12 5 019c REPLACETEXT exported, shared data
13 5 036d FINDTEXTDLGPROC exported, shared data
14 5 0582 REPLACETEXTDLGPROC exported, shared data
15 4 0000 CHOOSEFONT exported, shared data
16 4 02b0 FORMATCHARDLGPROC exported, shared data
18 4 184e FONTSTYLEENUMPROC exported, shared data
19 4 1096 FONTFAMILYENUMPROC exported, shared data
20 3 0c94 PRINTDLG exported, shared data
21 3 371f PRINTDLGPROC exported, shared data
22 3 307a PRINTSETUPDLGPROC exported, shared data
23 3 0000 EDITINTEGERONLY exported, shared data
25 1 1b46 WANTARROWS exported, shared data
26 6 01e7 COMMDLGEXTENDEDERROR exported, shared data
27 2 0c79 GETFILETITLE exported, shared data
28 6 01ad WEP exported, shared data
29 2 10a5 DWLBSUBCLASS exported, shared data
30 3 0056 DWUPARROWHACK exported, shared data
31 2 100f DWOKSUBCLASS exported, shared data

38
etc/ddeml-ordinals Normal file
View File

@ -0,0 +1,38 @@
1 2 002c WEP exported, shared data
2 1 0010 DDEINITIALIZE exported, shared data
3 1 03ae DDEUNINITIALIZE exported, shared data
4 1 068a DDECONNECTLIST exported, shared data
5 1 0948 DDEQUERYNEXTSERVER exported, shared data
6 1 0a46 DDEDISCONNECTLIST exported, shared data
7 1 0aac DDECONNECT exported, shared data
8 1 0b4a DDEDISCONNECT exported, shared data
9 1 0dac DDEQUERYCONVINFO exported, shared data
10 1 1020 DDESETUSERHANDLE exported, shared data
11 1 1204 DDECLIENTTRANSACTION exported, shared data
12 1 1bf0 DDEABANDONTRANSACTION exported, shared data
13 1 1118 DDEPOSTADVISE exported, shared data
14 1 14e8 DDECREATEDATAHANDLE exported, shared data
15 1 1598 DDEADDDATA exported, shared data
16 1 17a8 DDEGETDATA exported, shared data
17 1 188a DDEACCESSDATA exported, shared data
18 1 1916 DDEUNACCESSDATA exported, shared data
19 1 1946 DDEFREEDATAHANDLE exported, shared data
20 1 14a8 DDEGETLASTERROR exported, shared data
21 1 19a4 DDECREATESTRINGHANDLE exported, shared data
22 1 1a40 DDEFREESTRINGHANDLE exported, shared data
23 1 1b14 DDEQUERYSTRING exported, shared data
24 1 1aac DDEKEEPSTRINGHANDLE exported, shared data
26 1 1d98 DDEENABLECALLBACK exported, shared data
27 1 1ed4 DDENAMESERVICE exported, shared data
28 1 4614 CLIENTWNDPROC exported, shared data
29 1 523a SERVERWNDPROC exported, shared data
30 1 5480 SUBFRAMEWNDPROC exported, shared data
31 1 5558 DMGWNDPROC exported, shared data
32 1 5758 CONVLISTWNDPROC exported, shared data
33 1 35f2 MONITORWNDPROC exported, shared data
34 1 2fb0 DDESENDHOOKPROC exported, shared data
35 1 309e DDEPOSTHOOKPROC exported, shared data
36 1 1bb0 DDECMPSTRINGHANDLES exported, shared data
37 1 0be0 DDERECONNECT exported, shared data
38 1 6b8a INITENUM exported, shared data
39 1 036a TERMDLGPROC exported, shared data

12
etc/lzexpand-ordinals Normal file
View File

@ -0,0 +1,12 @@
1 4 015c LZCOPY exported, shared data
2 2 0262 LZOPENFILE exported, shared data
3 2 0000 LZINIT exported, shared data
4 2 02ee LZSEEK exported, shared data
5 2 03d6 LZREAD exported, shared data
6 2 06f0 LZCLOSE exported, shared data
7 4 0000 LZSTART exported, shared data
8 4 013a COPYLZFILE exported, shared data
9 4 00a6 LZDONE exported, shared data
10 2 01bc GETEXPANDEDNAME exported, shared data
11 3 0000 WEP exported, shared data
12 11 035e ___EXPORTEDSTUB exported, shared data

136
etc/mmsystem-ordinals Normal file
View File

@ -0,0 +1,136 @@
1 2 0014 WEP exported, shared data
2 4 0000 SNDPLAYSOUND exported, shared data
5 2 02b0 MMSYSTEMGETVERSION exported, shared data
6 4 0028 DRIVERPROC exported, shared data
30 1 030a OUTPUTDEBUGSTR exported, shared data
31 1 03ab DRIVERCALLBACK exported, shared data
32 1 0312 STACKENTER exported, shared data
33 1 0370 STACKLEAVE exported, shared data
34 2 0484 MMDRVINSTALL exported, shared data
101 8 005d JOYGETNUMDEVS exported, shared data
102 8 001a JOYGETDEVCAPS exported, shared data
103 8 0073 JOYGETPOS exported, shared data
104 8 00b5 JOYGETTHRESHOLD exported, shared data
105 8 00ec JOYRELEASECAPTURE exported, shared data
106 8 013e JOYSETCAPTURE exported, shared data
107 8 021d JOYSETTHRESHOLD exported, shared data
109 8 0251 JOYSETCALIBRATION exported, shared data
1100 4 057e DRVOPEN exported, shared data
1101 4 0583 DRVCLOSE exported, shared data
1102 4 058d DRVSENDMESSAGE exported, shared data
1103 4 0588 DRVGETMODULEHANDLE exported, shared data
1104 4 0592 DRVDEFDRIVERPROC exported, shared data
1210 7 02a5 MMIOOPEN exported, shared data
1211 7 0457 MMIOCLOSE exported, shared data
1212 7 04b4 MMIOREAD exported, shared data
1213 7 062b MMIOWRITE exported, shared data
1214 7 07e9 MMIOSEEK exported, shared data
1215 7 0929 MMIOGETINFO exported, shared data
1216 7 0996 MMIOSETINFO exported, shared data
1217 7 0a68 MMIOSETBUFFER exported, shared data
1218 7 0cd8 MMIOFLUSH exported, shared data
1219 7 0da7 MMIOADVANCE exported, shared data
1220 7 0ed3 MMIOSTRINGTOFOURCC exported, shared data
1221 7 0f6e MMIOINSTALLIOPROC exported, shared data
1222 7 1073 MMIOSENDMESSAGE exported, shared data
1223 7 1360 MMIODESCEND exported, shared data
1224 7 1562 MMIOASCEND exported, shared data
1225 7 16a5 MMIOCREATECHUNK exported, shared data
1226 7 01d2 MMIORENAME exported, shared data
201 6 015f MIDIOUTGETNUMDEVS exported, shared data
202 6 016a MIDIOUTGETDEVCAPS exported, shared data
203 6 0266 MIDIOUTGETERRORTEXT exported, shared data
204 6 02a7 MIDIOUTOPEN exported, shared data
205 6 03c4 MIDIOUTCLOSE exported, shared data
206 6 0410 MIDIOUTPREPAREHEADER exported, shared data
207 6 0485 MIDIOUTUNPREPAREHEADER exported, shared data
208 1 0121 MIDIOUTSHORTMSG exported, shared data
209 1 0156 MIDIOUTLONGMSG exported, shared data
210 1 01b4 MIDIOUTRESET exported, shared data
211 6 01b6 MIDIOUTGETVOLUME exported, shared data
212 6 01f7 MIDIOUTSETVOLUME exported, shared data
213 6 04ff MIDIOUTCACHEPATCHES exported, shared data
214 6 0571 MIDIOUTCACHEDRUMPATCHES exported, shared data
215 6 0a5c MIDIOUTGETID exported, shared data
216 1 00eb MIDIOUTMESSAGE exported, shared data
301 6 05e3 MIDIINGETNUMDEVS exported, shared data
302 6 0625 MIDIINGETDEVCAPS exported, shared data
303 6 0671 MIDIINGETERRORTEXT exported, shared data
304 6 06b2 MIDIINOPEN exported, shared data
305 6 07cf MIDIINCLOSE exported, shared data
306 6 081b MIDIINPREPAREHEADER exported, shared data
307 6 0890 MIDIINUNPREPAREHEADER exported, shared data
308 6 090a MIDIINADDBUFFER exported, shared data
309 6 0976 MIDIINSTART exported, shared data
310 6 09aa MIDIINSTOP exported, shared data
311 6 09de MIDIINRESET exported, shared data
312 6 0a12 MIDIINGETID exported, shared data
313 6 05ee MIDIINMESSAGE exported, shared data
350 8 0531 AUXGETNUMDEVS exported, shared data
351 8 053c AUXGETDEVCAPS exported, shared data
352 8 0582 AUXGETVOLUME exported, shared data
353 8 05bd AUXSETVOLUME exported, shared data
354 8 04df AUXOUTMESSAGE exported, shared data
401 3 0866 WAVEOUTGETNUMDEVS exported, shared data
402 3 08a6 WAVEOUTGETDEVCAPS exported, shared data
403 3 09a2 WAVEOUTGETERRORTEXT exported, shared data
404 3 09e3 WAVEOUTOPEN exported, shared data
405 3 0b81 WAVEOUTCLOSE exported, shared data
406 3 0bc8 WAVEOUTPREPAREHEADER exported, shared data
407 3 0c54 WAVEOUTUNPREPAREHEADER exported, shared data
408 3 0cdd WAVEOUTWRITE exported, shared data
409 3 0d4a WAVEOUTPAUSE exported, shared data
410 3 0d7c WAVEOUTRESTART exported, shared data
411 3 0dae WAVEOUTRESET exported, shared data
412 3 0e12 WAVEOUTGETPOSITION exported, shared data
413 3 0e62 WAVEOUTGETPITCH exported, shared data
414 3 0eb0 WAVEOUTSETPITCH exported, shared data
415 3 08f2 WAVEOUTGETVOLUME exported, shared data
416 3 0933 WAVEOUTSETVOLUME exported, shared data
417 3 0ee4 WAVEOUTGETPLAYBACKRATE exported, shared data
418 3 0f32 WAVEOUTSETPLAYBACKRATE exported, shared data
419 3 0de0 WAVEOUTBREAKLOOP exported, shared data
420 3 14bf WAVEOUTGETID exported, shared data
421 3 0871 WAVEOUTMESSAGE exported, shared data
501 3 0f66 WAVEINGETNUMDEVS exported, shared data
502 3 0fa6 WAVEINGETDEVCAPS exported, shared data
503 3 0ff2 WAVEINGETERRORTEXT exported, shared data
504 3 1033 WAVEINOPEN exported, shared data
505 3 11d1 WAVEINCLOSE exported, shared data
506 3 1218 WAVEINPREPAREHEADER exported, shared data
507 3 129c WAVEINUNPREPAREHEADER exported, shared data
508 3 1325 WAVEINADDBUFFER exported, shared data
509 3 138f WAVEINSTART exported, shared data
510 3 13c1 WAVEINSTOP exported, shared data
511 3 13f3 WAVEINRESET exported, shared data
512 3 1425 WAVEINGETPOSITION exported, shared data
513 3 1475 WAVEINGETID exported, shared data
514 3 0f71 WAVEINMESSAGE exported, shared data
601 1 0000 TIMEGETSYSTEMTIME exported, shared data
602 1 0029 TIMESETEVENT exported, shared data
603 1 0292 TIMEKILLEVENT exported, shared data
604 8 0000 TIMEGETDEVCAPS exported, shared data
605 1 0288 TIMEBEGINPERIOD exported, shared data
606 1 028d TIMEENDPERIOD exported, shared data
607 1 029a TIMEGETTIME exported, shared data
701 5 04af MCISENDCOMMAND exported, shared data
702 5 1258 MCISENDSTRING exported, shared data
703 5 1588 MCIGETDEVICEID exported, shared data
704 5 3994 MCIPARSECOMMAND exported, shared data
705 5 2d4c MCILOADCOMMANDRESOURCE exported, shared data
706 5 136f MCIGETERRORSTRING exported, shared data
707 5 2a1d MCISETDRIVERDATA exported, shared data
708 5 29d3 MCIGETDRIVERDATA exported, shared data
710 5 2a6f MCIDRIVERYIELD exported, shared data
711 1 0275 MCIDRIVERNOTIFY exported, shared data
712 5 1293 MCIEXECUTE exported, shared data
713 5 2fb9 MCIFREECOMMANDRESOURCE exported, shared data
714 5 2acd MCISETYIELDPROC exported, shared data
715 5 1454 MCIGETDEVICEIDFROMELEMENTID exported, shared data
716 5 2b3c MCIGETYIELDPROC exported, shared data
717 5 15a5 MCIGETCREATORTASK exported, shared data
900 4 05fa MMTASKCREATE exported, shared data
902 4 05be MMTASKBLOCK exported, shared data
903 1 0264 MMTASKSIGNAL exported, shared data
904 4 05b9 MMGETCURRENTTASK exported, shared data
905 4 0598 MMTASKYIELD exported, shared data

146
etc/netapi20-ordinals Normal file
View File

@ -0,0 +1,146 @@
1 3 0000 NETACCESSADD exported, shared data
2 3 0128 NETACCESSDEL exported, shared data
3 3 01ea NETACCESSENUM exported, shared data
4 3 0318 NETACCESSGETINFO exported, shared data
5 3 042a NETACCESSSETINFO exported, shared data
6 4 0030 NETALERTRAISE exported, shared data
7 4 0000 NETALERTSTART exported, shared data
8 4 0018 NETALERTSTOP exported, shared data
9 10 00f4 NETAUDITCLEAR exported, shared data
10 10 024a NETAUDITOPEN exported, shared data
11 10 0000 NETAUDITWRITE exported, shared data
12 3 0110 NETACCESSCHECK exported, shared data
13 12 0000 NETBIOSCLOSE exported, shared data
14 12 0018 NETBIOSENUM exported, shared data
15 12 0030 NETBIOSGETINFO exported, shared data
16 12 0048 NETBIOSOPEN exported, shared data
17 12 0060 NETBIOSSUBMIT exported, shared data
18 7 0000 NETCHARDEVCONTROL exported, shared data
19 7 0056 NETCHARDEVENUM exported, shared data
20 7 00f2 NETCHARDEVGETINFO exported, shared data
21 7 016e NETCHARDEVQENUM exported, shared data
22 7 043c NETCHARDEVQGETINFO exported, shared data
23 7 04b2 NETCHARDEVQPURGE exported, shared data
24 7 0562 NETCHARDEVQSETINFO exported, shared data
25 6 0330 NETCONFIGGET exported, shared data
26 6 0150 NETCONFIGGETALL exported, shared data
27 18 0000 NETCONNECTIONENUM exported, shared data
28 1 00a8 WEP exported, shared data
29 10 0030 NETERRORLOGCLEAR exported, shared data
30 10 01c0 NETERRORLOGOPEN exported, shared data
31 10 0018 NETERRORLOGWRITE exported, shared data
32 18 0256 NETFILECLOSE exported, shared data
33 18 044a NETFILEENUM exported, shared data
34 18 0516 NETFILEGETINFO exported, shared data
35 3 05f8 NETGROUPADD exported, shared data
36 3 067e NETGROUPADDUSER exported, shared data
37 3 06dc NETGROUPDEL exported, shared data
38 3 073a NETGROUPDELUSER exported, shared data
39 3 0798 NETGROUPENUM exported, shared data
40 3 0894 NETGROUPGETUSERS exported, shared data
43 11 01cc NETMESSAGELOGFILEGET exported, shared data
44 11 0338 NETMESSAGELOGFILESET exported, shared data
45 11 0718 NETMESSAGENAMEADD exported, shared data
46 11 0844 NETMESSAGENAMEDEL exported, shared data
47 11 096c NETMESSAGENAMEENUM exported, shared data
48 11 0d2a NETMESSAGENAMEFWD exported, shared data
49 11 0b00 NETMESSAGENAMEGETINFO exported, shared data
50 11 0d7a NETMESSAGENAMEUNFWD exported, shared data
51 13 0000 NETPROFILELOAD exported, shared data
52 13 037e NETPROFILESAVE exported, shared data
53 18 0b98 NETSERVERADMINCOMMAND exported, shared data
54 18 00b8 NETSERVERDISKENUM exported, shared data
55 18 0c62 NETSERVERGETINFO exported, shared data
56 18 0cf2 NETSERVERSETINFO exported, shared data
57 19 0134 NETSERVICECONTROL exported, shared data
58 19 02f0 NETSERVICEENUM exported, shared data
59 19 044a NETSERVICEINSTALL exported, shared data
60 19 011c NETSERVICESTATUS exported, shared data
61 18 0676 NETSESSIONDEL exported, shared data
62 18 05c4 NETSESSIONENUM exported, shared data
63 18 06dc NETSESSIONGETINFO exported, shared data
64 18 0798 NETSHAREADD exported, shared data
65 18 0968 NETSHARECHECK exported, shared data
66 18 082a NETSHAREDEL exported, shared data
67 18 09d6 NETSHAREENUM exported, shared data
68 18 0ab6 NETSHAREGETINFO exported, shared data
69 18 08a2 NETSHARESETINFO exported, shared data
70 18 0d88 NETSTATISTICSCLEAR exported, shared data
71 18 0de0 NETSTATISTICSGET exported, shared data
72 16 06f2 NETREMOTETOD exported, shared data
73 21 0000 NETUSEADD exported, shared data
74 21 032a NETUSEDEL exported, shared data
75 21 0502 NETUSEENUM exported, shared data
76 21 0664 NETUSEGETINFO exported, shared data
77 3 0ab8 NETUSERADD exported, shared data
78 3 0c26 NETUSERDEL exported, shared data
79 3 0c84 NETUSERENUM exported, shared data
80 3 0f9a NETUSERGETGROUPS exported, shared data
81 3 0ef4 NETUSERGETINFO exported, shared data
82 3 1132 NETUSERPASSWORDSET exported, shared data
83 3 0d2c NETUSERSETINFO exported, shared data
84 9 0858 NETWKSTAGETINFO exported, shared data
85 9 0a22 NETWKSTASETINFO exported, shared data
86 9 0000 NETWKSTASETUID exported, shared data
91 16 0380 NETREMOTEMOVE exported, shared data
92 16 0000 NETREMOTECOPY exported, shared data
93 16 0368 NETREMOTEEXEC exported, shared data
105 3 1570 NETUSERVALIDATE exported, shared data
116 19 0000 NETSERVICEGETINFO exported, shared data
117 7 050a NETCHARDEVQPURGESELF exported, shared data
172 3 0506 NETACCESSGETUSERPERMS exported, shared data
174 7 0226 NETHANDLEGETINFO exported, shared data
175 7 0326 NETHANDLESETINFO exported, shared data
176 3 0974 NETGROUPSETUSERS exported, shared data
177 3 0816 NETGROUPGETINFO exported, shared data
178 3 08fe NETGROUPSETINFO exported, shared data
179 3 1404 NETUSERSETGROUPS exported, shared data
182 3 1588 NETUSERVALIDATE2 exported, shared data
184 3 1004 NETUSERMODALSGET exported, shared data
185 3 10a2 NETUSERMODALSSET exported, shared data
186 3 0d14 NETUSERINIT exported, shared data
189 26 0000 NETGETDCNAME exported, shared data
196 6 01e0 NETCONFIGGET2 exported, shared data
197 6 0000 NETCONFIGGETALL2 exported, shared data
198 18 0e5e NETSTATISTICSGET2 exported, shared data
199 10 02f4 NETERRORLOGREAD exported, shared data
200 10 04b2 NETAUDITREAD exported, shared data
201 18 02ae NETFILEENUM2 exported, shared data
259 17 0000 NETUSERRESTRICT exported, shared data
266 26 06dc NETLOGONENUM exported, shared data
277 9 027c NETWKSTASETUID2 exported, shared data
280 18 0f9e NETFILEGETINFO2 exported, shared data
282 18 0f40 NETFILECLOSE2 exported, shared data
299 25 0b34 I_NETPATHTYPE exported, shared data
300 25 0000 I_NETPATHCANONICALIZE exported, shared data
301 25 0932 I_NETPATHCOMPARE exported, shared data
302 25 1afe I_NETNAMEVALIDATE exported, shared data
303 25 173e I_NETNAMECANONICALIZE exported, shared data
304 25 196e I_NETNAMECOMPARE exported, shared data
305 25 1cee I_NETLISTCANONICALIZE exported, shared data
306 25 22c2 I_NETLISTTRAVERSE exported, shared data
501 8 0000 DOSDELETEMAILSLOT exported, shared data
502 8 0072 DOSMAILSLOTINFO exported, shared data
503 8 00ec DOSMAKEMAILSLOT exported, shared data
504 8 0320 DOSPEEKMAILSLOT exported, shared data
523 8 0454 DOSREADMAILSLOT exported, shared data
524 8 058a DOSWRITEMAILSLOT exported, shared data
525 11 0000 NETMESSAGEBUFFERSEND exported, shared data
526 11 0e1e NETMESSAGEFILESEND exported, shared data
527 5 0000 NETSERVERENUM exported, shared data
528 5 013a NETSERVERENUM2 exported, shared data
529 20 0000 NETSPECIALSMB exported, shared data
530 2 0010 DOSMAKENMPIPE exported, shared data
531 2 004c DOSCONNECTNMPIPE exported, shared data
532 2 002e DOSDISCONNECTNMPIPE exported, shared data
533 2 006a DOSSETNMPHANDSTATE exported, shared data
534 2 010a DOSWAITNMPIPE exported, shared data
535 2 01d2 DOSTRANSACTNMPIPE exported, shared data
536 2 02e5 DOSQNMPHANDSTATE exported, shared data
537 2 0388 DOSQNMPIPEINFO exported, shared data
538 2 044d DOSPEEKNMPIPE exported, shared data
539 2 057d DOSCALLNMPIPE exported, shared data
540 2 06cf DOSRAWREADNMPIPE exported, shared data
541 2 07b6 DOSRAWWRITENMPIPE exported, shared data
542 2 0b4f DOSREADASYNCNMPIPE exported, shared data
543 2 0d73 DOSWRITEASYNCNMPIPE exported, shared data

178
etc/olecli-ordinals Normal file
View File

@ -0,0 +1,178 @@
1 1 0000 WEP exported, shared data
2 3 004e OLEDELETE exported, shared data
3 3 00c6 OLESAVETOSTREAM exported, shared data
4 3 0122 OLELOADFROMSTREAM exported, shared data
6 3 0400 OLECLONE exported, shared data
7 3 04ec OLECOPYFROMLINK exported, shared data
8 3 0606 OLEEQUAL exported, shared data
9 3 0674 OLEQUERYLINKFROMCLIP exported, shared data
10 3 06a0 OLEQUERYCREATEFROMCLIP exported, shared data
11 3 06cc OLECREATELINKFROMCLIP exported, shared data
12 3 08a2 OLECREATEFROMCLIP exported, shared data
13 3 0b52 OLECOPYTOCLIPBOARD exported, shared data
14 3 1d48 OLEQUERYTYPE exported, shared data
15 3 0b8e OLESETHOSTNAMES exported, shared data
16 3 0c04 OLESETTARGETDEVICE exported, shared data
17 3 0c84 OLESETBOUNDS exported, shared data
18 3 0ce0 OLEQUERYBOUNDS exported, shared data
19 3 0da0 OLEDRAW exported, shared data
20 3 0e24 OLEQUERYOPEN exported, shared data
21 3 0e60 OLEACTIVATE exported, shared data
22 3 0eea OLEUPDATE exported, shared data
23 3 0f26 OLERECONNECT exported, shared data
24 3 0f62 OLEGETLINKUPDATEOPTIONS exported, shared data
25 3 0fbe OLESETLINKUPDATEOPTIONS exported, shared data
26 3 0ffc OLEENUMFORMATS exported, shared data
27 3 0eae OLECLOSE exported, shared data
28 3 107e OLEGETDATA exported, shared data
29 3 10dc OLESETDATA exported, shared data
30 3 0010 OLEQUERYPROTOCOL exported, shared data
31 3 111e OLEQUERYOUTOFDATE exported, shared data
32 3 115a OLEOBJECTCONVERT exported, shared data
33 3 121a OLECREATEFROMTEMPLATE exported, shared data
34 3 13b4 OLECREATE exported, shared data
35 3 1ba6 OLEQUERYRELEASESTATUS exported, shared data
36 3 1c04 OLEQUERYRELEASEERROR exported, shared data
37 3 1c40 OLEQUERYRELEASEMETHOD exported, shared data
38 3 16fa OLECREATEFROMFILE exported, shared data
39 3 190a OLECREATELINKFROMFILE exported, shared data
40 3 008a OLERELEASE exported, shared data
41 2 093e OLEREGISTERCLIENTDOC exported, shared data
42 2 0a9e OLEREVOKECLIENTDOC exported, shared data
43 2 0bb6 OLERENAMECLIENTDOC exported, shared data
44 2 0c8e OLEREVERTCLIENTDOC exported, shared data
45 2 0cc8 OLESAVEDCLIENTDOC exported, shared data
46 3 1c7c OLERENAME exported, shared data
47 2 0cf6 OLEENUMOBJECTS exported, shared data
48 3 1d00 OLEQUERYNAME exported, shared data
49 3 0c42 OLESETCOLORSCHEME exported, shared data
50 3 1034 OLEREQUESTDATA exported, shared data
54 4 0000 OLELOCKSERVER exported, shared data
55 4 025a OLEUNLOCKSERVER exported, shared data
56 3 0d3c OLEQUERYSIZE exported, shared data
57 3 1cbe OLEEXECUTE exported, shared data
58 3 152e OLECREATEINVISIBLE exported, shared data
59 3 1da4 OLEQUERYCLIENTVERSION exported, shared data
60 3 46d4 OLEISDCMETA exported, shared data
100 4 0c28 DOCWNDPROC exported, shared data
101 4 0d2c SRVRWNDPROC exported, shared data
102 14 0838 MFCALLBACKFUNC exported, shared data
110 5 0000 DEFLOADFROMSTREAM exported, shared data
111 5 00fe DEFCREATEFROMCLIP exported, shared data
112 5 0180 DEFCREATELINKFROMCLIP exported, shared data
113 5 01be DEFCREATEFROMTEMPLATE exported, shared data
114 5 01fe DEFCREATE exported, shared data
115 5 023e DEFCREATEFROMFILE exported, shared data
116 5 028e DEFCREATELINKFROMFILE exported, shared data
117 5 02e0 DEFCREATEINVISIBLE exported, shared data
200 4 04e0 LERELEASE exported, shared data
201 4 1e52 LESHOW exported, shared data
202 3 2508 LEGETDATA exported, shared data
203 4 3a54 LESETDATA exported, shared data
204 4 37ee LESETHOSTNAMES exported, shared data
205 4 386e LESETTARGETDEVICE exported, shared data
206 4 3922 LESETBOUNDS exported, shared data
207 3 27be LESAVETOSTREAM exported, shared data
208 3 1fde LECLONE exported, shared data
209 4 052a LECOPYFROMLINK exported, shared data
210 6 0134 LEEQUAL exported, shared data
211 3 227a LECOPY exported, shared data
212 3 2e00 LEQUERYTYPE exported, shared data
213 3 2370 LEQUERYBOUNDS exported, shared data
214 3 23fc LEDRAW exported, shared data
215 4 2108 LEQUERYOPEN exported, shared data
216 4 219a LEACTIVATE exported, shared data
218 4 2200 LEUPDATE exported, shared data
219 4 2cb4 LERECONNECT exported, shared data
220 3 2454 LEENUMFORMAT exported, shared data
221 6 00c8 LEQUERYPROTOCOL exported, shared data
222 3 2638 LEQUERYOUTOFDATE exported, shared data
223 6 01c2 LEOBJECTCONVERT exported, shared data
224 4 07fa LECHANGEDATA exported, shared data
225 4 2c16 LECLOSE exported, shared data
226 3 2e72 LEGETUPDATEOPTIONS exported, shared data
227 4 337a LESETUPDATEOPTIONS exported, shared data
228 4 4a44 LEEXECUTE exported, shared data
229 6 0000 LEOBJECTLONG exported, shared data
230 4 322c LECREATEINVISIBLE exported, shared data
300 9 0000 MFRELEASE exported, shared data
301 9 0258 MFGETDATA exported, shared data
302 3 42f2 MFSAVETOSTREAM exported, shared data
303 9 0082 MFCLONE exported, shared data
304 9 0174 MFEQUAL exported, shared data
305 9 01f0 MFCOPY exported, shared data
307 3 446a MFQUERYBOUNDS exported, shared data
308 14 05cc MFDRAW exported, shared data
309 9 0234 MFENUMFORMAT exported, shared data
310 9 0302 MFCHANGEDATA exported, shared data
400 11 0000 BMRELEASE exported, shared data
401 11 0254 BMGETDATA exported, shared data
402 3 4b92 BMSAVETOSTREAM exported, shared data
403 11 006e BMCLONE exported, shared data
404 11 00e4 BMEQUAL exported, shared data
405 3 4c8c BMCOPY exported, shared data
407 3 4ce0 BMQUERYBOUNDS exported, shared data
408 14 0000 BMDRAW exported, shared data
409 11 0230 BMENUMFORMAT exported, shared data
410 3 5004 BMCHANGEDATA exported, shared data
500 12 0000 DIBRELEASE exported, shared data
501 12 01ea DIBGETDATA exported, shared data
502 3 536c DIBSAVETOSTREAM exported, shared data
503 12 006e DIBCLONE exported, shared data
504 12 00e4 DIBEQUAL exported, shared data
505 12 011c DIBCOPY exported, shared data
507 12 016c DIBQUERYBOUNDS exported, shared data
508 14 02f2 DIBDRAW exported, shared data
509 12 01c6 DIBENUMFORMAT exported, shared data
510 12 028a DIBCHANGEDATA exported, shared data
600 10 0000 GENRELEASE exported, shared data
601 10 049e GENGETDATA exported, shared data
602 10 0438 GENSETDATA exported, shared data
603 3 4750 GENSAVETOSTREAM exported, shared data
604 10 0082 GENCLONE exported, shared data
605 10 012e GENEQUAL exported, shared data
606 10 0164 GENCOPY exported, shared data
608 3 4b60 GENQUERYBOUNDS exported, shared data
609 14 05b2 GENDRAW exported, shared data
610 10 04e0 GENENUMFORMAT exported, shared data
611 10 0222 GENCHANGEDATA exported, shared data
701 13 0034 ERRSHOW exported, shared data
702 13 0186 ERRSETDATA exported, shared data
703 13 0082 ERRSETHOSTNAMES exported, shared data
704 13 009c ERRSETTARGETDEVICE exported, shared data
705 13 00d0 ERRSETBOUNDS exported, shared data
706 13 0068 ERRCOPYFROMLINK exported, shared data
707 13 00ea ERRQUERYOPEN exported, shared data
708 13 0104 ERRACTIVATE exported, shared data
709 13 0138 ERRCLOSE exported, shared data
710 13 0152 ERRUPDATE exported, shared data
711 13 016c ERRRECONNECT exported, shared data
712 13 0222 ERRQUERYPROTOCOL exported, shared data
713 13 01ba ERRQUERYOUTOFDATE exported, shared data
714 13 01d4 ERROBJECTCONVERT exported, shared data
715 13 01ee ERRGETUPDATEOPTIONS exported, shared data
716 13 0208 ERRSETUPDATEOPTIONS exported, shared data
717 13 0256 ERREXECUTE exported, shared data
718 13 0270 ERROBJECTLONG exported, shared data
800 7 0000 PBLOADFROMSTREAM exported, shared data
801 7 00ac PBCREATEFROMCLIP exported, shared data
802 7 017a PBCREATELINKFROMCLIP exported, shared data
803 7 0212 PBCREATEFROMTEMPLATE exported, shared data
804 7 02a8 PBCREATE exported, shared data
805 7 06f4 PBDRAW exported, shared data
806 7 0626 PBQUERYBOUNDS exported, shared data
807 7 0818 PBCOPYTOCLIPBOARD exported, shared data
808 7 033e PBCREATEFROMFILE exported, shared data
809 7 03e0 PBCREATELINKFROMFILE exported, shared data
810 7 0768 PBENUMFORMATS exported, shared data
811 7 07a8 PBGETDATA exported, shared data
812 7 0492 PBCREATEINVISIBLE exported, shared data
910 3 3e50 OBJQUERYNAME exported, shared data
911 3 3f06 OBJRENAME exported, shared data
912 3 410e OBJQUERYTYPE exported, shared data
913 3 4154 OBJQUERYSIZE exported, shared data
950 8 0456 CONNECTDLGPROC exported, shared data
951 8 0000 SETNETNAME exported, shared data
952 8 011a CHECKNETDRIVE exported, shared data
953 8 025c SETNEXTNETDRIVE exported, shared data
954 8 0696 GETTASKVISIBLEWINDOW exported, shared data

23
etc/olesvr-ordinals Normal file
View File

@ -0,0 +1,23 @@
1 1 0000 WEP exported, shared data
2 3 036e OLEREGISTERSERVER exported, shared data
3 3 05f0 OLEREVOKESERVER exported, shared data
4 3 3d46 OLEBLOCKSERVER exported, shared data
5 3 3d92 OLEUNBLOCKSERVER exported, shared data
6 3 1108 OLEREGISTERSERVERDOC exported, shared data
7 3 12dc OLEREVOKESERVERDOC exported, shared data
8 3 13a2 OLERENAMESERVERDOC exported, shared data
9 3 1528 OLEREVERTSERVERDOC exported, shared data
10 3 14ba OLESAVEDSERVERDOC exported, shared data
11 3 2140 OLEREVOKEOBJECT exported, shared data
12 3 0354 OLEQUERYSERVERVERSION exported, shared data
21 3 07a2 SRVRWNDPROC exported, shared data
22 3 1728 DOCWNDPROC exported, shared data
23 3 23b2 ITEMWNDPROC exported, shared data
24 3 2d3c SENDDATAMSG exported, shared data
25 3 22ac FINDITEMWND exported, shared data
26 3 2a5c ITEMCALLBACK exported, shared data
27 3 0752 TERMINATECLIENTS exported, shared data
28 3 1554 TERMINATEDOCCLIENTS exported, shared data
29 3 222e DELETECLIENTINFO exported, shared data
30 3 2cbc SENDRENAMEMSG exported, shared data
31 3 2c5e ENUMFORTERMINATE exported, shared data

26
etc/shell-ordinals Normal file
View File

@ -0,0 +1,26 @@
1 2 15cc REGOPENKEY exported, shared data
2 2 15fa REGCREATEKEY exported, shared data
3 2 1670 REGCLOSEKEY exported, shared data
4 2 1628 REGDELETEKEY exported, shared data
5 2 16f4 REGSETVALUE exported, shared data
6 2 168e REGQUERYVALUE exported, shared data
7 2 14dc REGENUMKEY exported, shared data
8 7 0000 WEP exported, shared data
9 6 0052 DRAGACCEPTFILES exported, shared data
11 6 0094 DRAGQUERYFILE exported, shared data
12 6 0142 DRAGFINISH exported, shared data
13 6 0000 DRAGQUERYPOINT exported, shared data
20 4 110a SHELLEXECUTE exported, shared data
21 4 1154 FINDEXECUTABLE exported, shared data
22 9 0000 SHELLABOUT exported, shared data
32 9 0829 WCI exported, shared data
33 9 0136 ABOUTDLGPROC exported, shared data
34 10 021a EXTRACTICON exported, shared data
36 10 08dc EXTRACTASSOCIATEDICON exported, shared data
37 5 00ae DOENVIRONMENTSUBST exported, shared data
38 5 0000 FINDENVIRONMENTSTRING exported, shared data
39 10 026e INTERNALEXTRACTICON exported, shared data
100 4 0550 HERETHARBETYGARS exported, shared data
101 8 010e FINDEXEDLGPROC exported, shared data
102 4 128c REGISTERSHELLHOOK exported, shared data
103 4 11ca SHELLHOOKPROC exported, shared data

35
etc/toolhelp-ordinals Normal file
View File

@ -0,0 +1,35 @@
1 1 018a WEP exported, shared data
50 1 057b GLOBALHANDLETOSEL exported, shared data
51 1 0318 GLOBALFIRST exported, shared data
52 1 0399 GLOBALNEXT exported, shared data
53 1 02a2 GLOBALINFO exported, shared data
54 1 0417 GLOBALENTRYHANDLE exported, shared data
55 1 04a9 GLOBALENTRYMODULE exported, shared data
56 1 090e LOCALINFO exported, shared data
57 1 095e LOCALFIRST exported, shared data
58 1 09e9 LOCALNEXT exported, shared data
59 1 0a90 MODULEFIRST exported, shared data
60 1 0ad9 MODULENEXT exported, shared data
61 1 0b15 MODULEFINDNAME exported, shared data
62 1 0b8c MODULEFINDHANDLE exported, shared data
63 1 0caa TASKFIRST exported, shared data
64 1 0ced TASKNEXT exported, shared data
65 1 0d2e TASKFINDHANDLE exported, shared data
66 1 0f1c STACKTRACEFIRST exported, shared data
67 1 0f67 STACKTRACECSIPFIRST exported, shared data
68 1 0fca STACKTRACENEXT exported, shared data
69 1 28b0 CLASSFIRST exported, shared data
70 1 2925 CLASSNEXT exported, shared data
71 1 11ce SYSTEMHEAPINFO exported, shared data
72 1 13f4 MEMMANINFO exported, shared data
73 1 1b72 NOTIFYREGISTER exported, shared data
74 1 1c29 NOTIFYUNREGISTER exported, shared data
75 1 2060 INTERRUPTREGISTER exported, shared data
76 1 2111 INTERRUPTUNREGISTER exported, shared data
77 1 26ea TERMINATEAPP exported, shared data
78 1 29c4 MEMORYREAD exported, shared data
79 1 2b6c MEMORYWRITE exported, shared data
80 1 2dae TIMERCOUNT exported, shared data
81 1 0d68 TASKSETCSIP exported, shared data
82 1 0d97 TASKGETCSIP exported, shared data
83 1 0dc0 TASKSWITCH exported, shared data

5
etc/win87em-ordinals Normal file
View File

@ -0,0 +1,5 @@
1 1 002a __FPMATH exported
2 1 0089 WEP exported
3 1 01ab __WIN87EMINFO exported
4 1 0220 __WIN87EMRESTORE exported
5 1 01e3 __WIN87EMSAVE exported

View File

@ -46,9 +46,13 @@ WineRelocatableTarget($(TOP)/$(MODULE),,$(OBJS))
DependTarget() DependTarget()
CleanTarget() CleanTarget()
pop.h: $(TOP)/tools/build
$(TOP)/tools/build -p
includes:: includes::
install:: install::
clean:: clean::
$(RM) dll* dtb* $(RM) dll* dtb* pop.h
touch pop.h

View File

@ -361,18 +361,7 @@ _ReturnFromRegisterFunc:
* address again. * address again.
*/ */
add $6,%esp /* argument count, return address */ add $6,%esp /* argument count, return address */
popw %gs #include "pop.h" /* restore context */
add $2,%esp
popw %fs
add $2,%esp
popw %es
add $2,%esp
popw %ds
add $2,%esp
popal
add $16,%esp /* trapno, err, eip, cs */
popfl
add $20,%esp /* esp, ss, i387, oldmask, cr2 */
/* /*
* Return to original caller. * Return to original caller.

View File

@ -142,6 +142,8 @@ void FreeProcInstance(FARPROC func)
LONG CallWindowProc( FARPROC func, HWND hwnd, WORD message, LONG CallWindowProc( FARPROC func, HWND hwnd, WORD message,
WORD wParam, LONG lParam ) WORD wParam, LONG lParam )
{ {
SpyMessage(hwnd, message, wParam, lParam);
if (Is16bitAddress(func)) if (Is16bitAddress(func))
{ {
PushOn16( CALLBACK_SIZE_WORD, hwnd ); PushOn16( CALLBACK_SIZE_WORD, hwnd );
@ -176,6 +178,44 @@ void CallLineDDAProc(FARPROC func, short xPos, short yPos, long lParam)
} }
} }
/**********************************************************************
* CallHookProc
*/
DWORD CallHookProc( HOOKPROC func, short code, WPARAM wParam, LPARAM lParam )
{
if (Is16bitAddress(func))
{
PushOn16( CALLBACK_SIZE_WORD, code );
PushOn16( CALLBACK_SIZE_WORD, wParam );
PushOn16( CALLBACK_SIZE_LONG, lParam );
return CallTo16((unsigned int) func,
FindDataSegmentForCode((unsigned long) func));
}
else
{
return (*func)( code, wParam, lParam );
}
}
/**********************************************************************
* CallGrayStringProc
*/
BOOL CallGrayStringProc(FARPROC func, HDC hdc, LPARAM lParam, INT cch )
{
if (Is16bitAddress(func))
{
PushOn16( CALLBACK_SIZE_WORD, hdc );
PushOn16( CALLBACK_SIZE_LONG, lParam );
PushOn16( CALLBACK_SIZE_WORD, cch );
return CallTo16((unsigned int) func,
FindDataSegmentForCode((unsigned long) func));
}
else
{
return (*func)( hdc, lParam, cch );
}
}
/* ------------------------------------------------------------------------ */ /* ------------------------------------------------------------------------ */
/* /*
* The following functions realize the Catch/Throw functionality. * The following functions realize the Catch/Throw functionality.

0
if1632/findfunc Executable file → Normal file
View File

View File

@ -80,6 +80,7 @@ length 490
67 pascal DPtoLP(word ptr s_word) DPtoLP(1 2 3) 67 pascal DPtoLP(word ptr s_word) DPtoLP(1 2 3)
68 pascal DeleteDC(word) DeleteDC(1) 68 pascal DeleteDC(word) DeleteDC(1)
69 pascal DeleteObject(word) DeleteObject(1) 69 pascal DeleteObject(word) DeleteObject(1)
70 pascal EnumFonts(word ptr ptr ptr) EnumFonts(1 2 3 4)
72 pascal EqualRgn(word word) EqualRgn(1 2) 72 pascal EqualRgn(word word) EqualRgn(1 2)
73 pascal ExcludeVisRect(word s_word s_word s_word s_word) 73 pascal ExcludeVisRect(word s_word s_word s_word s_word)
ExcludeVisRect(1 2 3 4 5) ExcludeVisRect(1 2 3 4 5)

View File

@ -5,7 +5,6 @@ id 1
length 415 length 415
3 pascal GetVersion() GetVersion() 3 pascal GetVersion() GetVersion()
#return GetVersion 0 0x301
4 pascal LocalInit(word word word) WIN16_LocalInit(1 2 3) 4 pascal LocalInit(word word word) WIN16_LocalInit(1 2 3)
5 pascal LocalAlloc(word word) WIN16_LocalAlloc(1 2) 5 pascal LocalAlloc(word word) WIN16_LocalAlloc(1 2)
6 pascal LocalReAlloc(word word word) WIN16_LocalReAlloc(1 2 3) 6 pascal LocalReAlloc(word word word) WIN16_LocalReAlloc(1 2 3)
@ -28,10 +27,12 @@ length 415
23 pascal LockSegment(s_word) KERNEL_LockSegment(1) 23 pascal LockSegment(s_word) KERNEL_LockSegment(1)
24 pascal UnlockSegment(s_word) KERNEL_UnlockSegment(1) 24 pascal UnlockSegment(s_word) KERNEL_UnlockSegment(1)
25 pascal GlobalCompact(long) GlobalCompact(1) 25 pascal GlobalCompact(long) GlobalCompact(1)
#29 pascal Yield() Yield()
30 pascal WaitEvent(word) KERNEL_WaitEvent(1) 30 pascal WaitEvent(word) KERNEL_WaitEvent(1)
34 pascal SetTaskQueue(word word) SetTaskQueue(1 2) 34 pascal SetTaskQueue(word word) SetTaskQueue(1 2)
35 pascal GetTaskQueue(word) GetTaskQueue(1) 35 pascal GetTaskQueue(word) GetTaskQueue(1)
36 pascal GetCurrentTask() GetCurrentTask() 36 pascal GetCurrentTask() GetCurrentTask()
45 pascal LoadModule(ptr ptr) LoadModule(1 2)
47 pascal GetModuleHandle(ptr) GetModuleHandle(1) 47 pascal GetModuleHandle(ptr) GetModuleHandle(1)
48 pascal GetModuleUsage(word) GetModuleUsage(1) 48 pascal GetModuleUsage(word) GetModuleUsage(1)
49 pascal GetModuleFileName(word ptr s_word) GetModuleFileName(1 2 3) 49 pascal GetModuleFileName(word ptr s_word) GetModuleFileName(1 2 3)
@ -46,6 +47,12 @@ length 415
62 pascal LockResource(word) LockResource(1) 62 pascal LockResource(word) LockResource(1)
63 pascal FreeResource(word) FreeResource(1) 63 pascal FreeResource(word) FreeResource(1)
64 pascal AccessResource(word word) AccessResource(1 2) 64 pascal AccessResource(word word) AccessResource(1 2)
68 pascal InitAtomTable(word) InitAtomTable(1)
69 pascal FindAtom(ptr) FindAtom(1)
70 pascal AddAtom(ptr) AddAtom(1)
71 pascal DeleteAtom(word) DeleteAtom(1)
72 pascal GetAtomName(word ptr word) GetAtomName(1 2 3)
73 pascal GetAtomHandle(word) GetAtomHandle(1)
74 pascal OpenFile(ptr ptr word) OpenFile(1 2 3) 74 pascal OpenFile(ptr ptr word) OpenFile(1 2 3)
81 pascal _lclose(word) _lclose(1) 81 pascal _lclose(word) _lclose(1)
82 pascal _lread(word ptr word) _lread(1 2 3) 82 pascal _lread(word ptr word) _lread(1 2 3)
@ -82,9 +89,9 @@ length 415
#132 return GetWinFlags 0 0x413 #132 return GetWinFlags 0 0x413
134 pascal GetWindowsDirectory(ptr word) GetWindowsDirectory(1 2) 134 pascal GetWindowsDirectory(ptr word) GetWindowsDirectory(1 2)
135 pascal GetSystemDirectory(ptr word) GetSystemDirectory(1 2) 135 pascal GetSystemDirectory(ptr word) GetSystemDirectory(1 2)
136 pascal GetDriveType(byte) GetWindowsDirectory(1) 136 pascal GetDriveType(byte) GetDriveType(1)
137 pascal FatalAppExit(word ptr) FatalAppExit(1 2) 137 pascal FatalAppExit(word ptr) FatalAppExit(1 2)
152 return GetNumTasks 0 1 152 pascal GetNumTasks() GetNumTasks()
154 return GlobalNotify 4 0 154 return GlobalNotify 4 0
163 pascal GlobalLRUOldest(word) ReturnArg(1) 163 pascal GlobalLRUOldest(word) ReturnArg(1)
164 pascal GlobalLRUNewest(word) ReturnArg(1) 164 pascal GlobalLRUNewest(word) ReturnArg(1)
@ -105,4 +112,11 @@ length 415
57 pascal GetProfileInt(ptr ptr word) GetProfileInt(1 2 3) 57 pascal GetProfileInt(ptr ptr word) GetProfileInt(1 2 3)
58 pascal GetProfileString(ptr ptr ptr ptr word) GetProfileString(1 2 3 4 5) 58 pascal GetProfileString(ptr ptr ptr ptr word) GetProfileString(1 2 3 4 5)
199 pascal SetHandleCount(word) SetHandleCount(1) 199 pascal SetHandleCount(word) SetHandleCount(1)
68 pascal InitAtomTable(word) InitAtomTable(1)
69 pascal FindAtom(ptr) FindAtom(1)
70 pascal AddAtom(ptr) AddAtom(1)
71 pascal DeleteAtom(word) DeleteAtom(1)
72 pascal GetAtomName(word ptr s_word) GetAtomName(1 2 3)
73 pascal GetAtomHandle(word) GetAtomHandle(1)
353 pascal lstrcpyn(ptr ptr word) lstrcpyn(1 2 3) 353 pascal lstrcpyn(ptr ptr word) lstrcpyn(1 2 3)

74
if1632/mmsystem.spec Normal file
View File

@ -0,0 +1,74 @@
# $Id: mmsystem.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
#
name mmsystem
id 11
length 706
1 pascal LIBMAIN(word word word ptr) MCI_LibMain(1 2 3 4)
2 pascal SNDPLAYSOUND(ptr word) sndPlaySound(1 2)
5 pascal MMSYSTEMGETVERSION() mmsystemGetVersion()
30 pascal OUTPUTDEBUGSTR(ptr) OutputDebugStr(1)
201 pascal MIDIOUTGETNUMDEVS() midiOutGetNumDevs()
202 pascal MIDIOUTGETDEVCAPS(word ptr word) midiOutGetDevCaps(1 2 3)
203 pascal MIDIOUTGETERRORTEXT(word ptr word) midiOutGetErrorText(1 2 3)
204 pascal MIDIOUTOPEN(ptr word ptr long long long) midiOutOpen(1 2 3 4 5 6)
205 pascal MIDIOUTCLOSE(word) midiOutClose(1)
206 pascal MIDIOUTPREPAREHEADER(word ptr word) midiOutPrepareHeader(1 2 3)
207 pascal MIDIOUTUNPREPAREHEADER(word ptr word) midiOutUnprepareHeader(1 2 3)
208 pascal MIDIOUTSHORTMSG(word long) midiOutShortMsg(1 2)
209 pascal MIDIOUTLONGMSG(word ptr word) midiOutLongMsg(1 2 3)
210 pascal MIDIOUTRESET(word) midiOutReset(1)
211 pascal MIDIOUTGETVOLUME(word ptr) midiOutGetVolume(1 2)
212 pascal MIDIOUTSETVOLUME(word long) midiOutSetVolume(1 2)
215 pascal MIDIOUTGETID(word ptr) midiOutGetID(1 2)
301 pascal MIDIINGETNUMDEVS() midiInGetNumDevs()
302 pascal MIDIINGETDEVCAPS(word ptr word) midiInGetDevCaps(1 2 3)
303 pascal MIDIINGETERRORTEXT(word ptr word) midiInGetErrorText(1 2 3)
304 pascal MIDIINOPEN(ptr word ptr long long long) midiInOpen(1 2 3 4 5 6)
305 pascal MIDIINCLOSE(word) midiInClose(1)
306 pascal MIDIINPREPAREHEADER(word ptr word) midiInPrepareHeader(1 2 3)
307 pascal MIDIINUNPREPAREHEADER(word ptr word) midiInUnprepareHeader(1 2 3)
309 pascal MIDIINSTART(word) midiInStart(1)
310 pascal MIDIINSTOP(word) midiInStop(1)
311 pascal MIDIINRESET(word) midiInReset(1)
312 pascal MIDIINGETID(word ptr) midiInGetID(1 2)
350 pascal AUXGETNUMDEVS() auxGetNumDevs()
351 pascal AUXGETDEVCAPS(word ptr word) auxGetDevCaps(1 2 3)
352 pascal AUXGETVOLUME(word ptr) auxGetVolume(1 2)
353 pascal AUXSETVOLUME(word long) auxSetVolume(1 2)
401 pascal WAVEOUTGETNUMDEVS() waveOutGetNumDevs()
402 pascal WAVEOUTGETDEVCAPS(word ptr word) waveOutGetDevCaps(1 2 3)
403 pascal WAVEOUTGETERRORTEXT(word ptr word) waveOutGetErrorText(1 2 3)
404 pascal WAVEOUTOPEN(ptr word ptr long long long) waveOutOpen(1 2 3 4 5 6)
405 pascal WAVEOUTCLOSE(word) waveOutClose(1)
406 pascal WAVEOUTPREPAREHEADER(word ptr word) waveOutPrepareHeader(1 2 3)
407 pascal WAVEOUTUNPREPAREHEADER(word ptr word) waveOutUnprepareHeader(1 2 3)
408 pascal WAVEOUTWRITE(word ptr word) waveOutWrite(1 2 3)
409 pascal WAVEOUTPAUSE(word) waveOutPause(1)
410 pascal WAVEOUTRESTART(word) waveOutRestart(1)
411 pascal WAVEOUTRESET(word) waveOutReset(1)
412 pascal WAVEOUTGETPOSITION(word ptr word) waveOutGetPosition(1 2 3)
413 pascal WAVEOUTGETPITCH(word ptr) waveOutGetPitch(1 2)
414 pascal WAVEOUTSETPITCH(word long) waveOutSetPitch(1 2)
415 pascal WAVEOUTGETVOLUME(word ptr) waveOutGetVolume(1 2)
416 pascal WAVEOUTSETVOLUME(word long) waveOutSetVolume(1 2)
417 pascal WAVEOUTGETPLAYBACKRATE(word ptr) waveOutGetPlaybackRate(1 2)
418 pascal WAVEOUTSETPLAYBACKRATE(word long) waveOutSetPlaybackRate(1 2)
419 pascal WAVEOUTBREAKLOOP(word) waveOutBreakLoop(1)
420 pascal WAVEOUTGETID(word ptr) waveOutGetID(1 2)
501 pascal WAVEINGETNUMDEVS() waveInGetNumDevs()
502 pascal WAVEINGETDEVCAPS(word ptr word) waveInGetDevCaps(1 2 3)
503 pascal WAVEINGETERRORTEXT(word ptr word) waveInGetErrorText(1 2 3)
504 pascal WAVEINOPEN(ptr word ptr long long long) waveInOpen(1 2 3 4 5 6)
505 pascal WAVEINCLOSE(word) waveInClose(1)
506 pascal WAVEINPREPAREHEADER(word ptr word) waveInPrepareHeader(1 2 3)
507 pascal WAVEINUNPREPAREHEADER(word ptr word) waveInUnprepareHeader(1 2 3)
508 pascal WAVEINADDBUFFER(word ptr word) waveInAddBuffer(1 2 3)
509 pascal WAVEINSTART(word) waveInStart(1)
510 pascal WAVEINSTOP(word) waveInStop(1)
511 pascal WAVEINRESET(word) waveInReset(1)
513 pascal WAVEINGETID(word ptr) waveInGetID(1 2)
701 pascal MCISENDCOMMAND(word word long long) mciSendCommand(1 2 3 4)
702 pascal MCISENDSTRING(ptr ptr word word) mciSendString(1 2 3 4)
703 pascal MCIGETDEVICEID(ptr) mciSendCommand(1)
706 pascal MCIGETERRORSTRING(long ptr word) mciGetErrorString(1 2 3)

16
if1632/pop.h Normal file
View File

@ -0,0 +1,16 @@
add $8,%esp
popw %es
add $2,%esp
popw %ds
add $2,%esp
popl %edi
popl %esi
popl %ebp
add $4,%esp
popl %ebx
popl %edx
popl %ecx
popl %eax
add $16,%esp
popfl
add $20,%esp

View File

@ -3,3 +3,39 @@
name shell name shell
id 6 id 6
length 256 length 256
#
# WARNING ! These functions are not documented, so I didn't look for
# proper parameters. It's just to have stub for PROGMAN.EXE ...
#
1 pascal RegOpenKey() RegOpenKey()
2 pascal RegCreateKey() RegCreateKey()
3 pascal RegCloseKey() RegCloseKey()
4 pascal RegDeleteKey() RegDeleteKey()
20 pascal ShellExecute(ptr) ShellExecute(1)
102 pascal RegisterShellHook(ptr) RegisterShellHook(1)
103 pascal ShellHookProc() ShellHookProc()
# 8 7 0000 WEP exported, shared data
# 33 9 0136 ABOUTDLGPROC exported, shared data
# 34 10 021a EXTRACTICON exported, shared data
# 21 4 1154 FINDEXECUTABLE exported, shared data
# 9 6 0052 DRAGACCEPTFILES exported, shared data
#100 4 0550 HERETHARBETYGARS exported, shared data
# 38 5 0000 FINDENVIRONMENTSTRING exported, shared data
# 7 2 14dc REGENUMKEY exported, shared data
# 37 5 00ae DOENVIRONMENTSUBST exported, shared data
# 20 4 110a SHELLEXECUTE exported, shared data
#101 8 010e FINDEXEDLGPROC exported, shared data
# 11 6 0094 DRAGQUERYFILE exported, shared data
# 13 6 0000 DRAGQUERYPOINT exported, shared data
# 5 2 16f4 REGSETVALUE exported, shared data
# 39 10 026e INTERNALEXTRACTICON exported, shared data
# 22 9 0000 SHELLABOUT exported, shared data
# 6 2 168e REGQUERYVALUE exported, shared data
# 32 9 0829 WCI exported, shared data
# 36 10 08dc EXTRACTASSOCIATEDICON exported, shared data
# 12 6 0142 DRAGFINISH exported, shared data

3
if1632/system.spec Normal file
View File

@ -0,0 +1,3 @@
name system
id 12
length 20

3
if1632/toolhelp.spec Normal file
View File

@ -0,0 +1,3 @@
name toolhelp
id 13
length 83

View File

@ -7,6 +7,7 @@ length 540
1 pascal MessageBox(word ptr ptr word) MessageBox(1 2 3 4) 1 pascal MessageBox(word ptr ptr word) MessageBox(1 2 3 4)
5 pascal InitApp(word) USER_InitApp(1) 5 pascal InitApp(word) USER_InitApp(1)
6 pascal PostQuitMessage(word) PostQuitMessage(1) 6 pascal PostQuitMessage(word) PostQuitMessage(1)
7 pascal ExitWindows(long word) ExitWindows(1 2)
10 pascal SetTimer(word word word ptr) SetTimer(1 2 3 4) 10 pascal SetTimer(word word word ptr) SetTimer(1 2 3 4)
11 pascal SetSystemTimer(word word word ptr) SetSystemTimer(1 2 3 4) 11 pascal SetSystemTimer(word word word ptr) SetSystemTimer(1 2 3 4)
12 pascal KillTimer(word word) KillTimer(1 2) 12 pascal KillTimer(word word) KillTimer(1 2)
@ -21,6 +22,10 @@ length 540
21 pascal GetDoubleClickTime() GetDoubleClickTime() 21 pascal GetDoubleClickTime() GetDoubleClickTime()
22 pascal SetFocus(word) SetFocus(1) 22 pascal SetFocus(word) SetFocus(1)
23 pascal GetFocus() GetFocus() 23 pascal GetFocus() GetFocus()
24 pascal RemoveProp(word ptr) RemoveProp(1 2)
25 pascal GetProp(word ptr) GetProp(1 2)
26 pascal SetProp(word ptr word) SetProp(1 2 3)
27 pascal EnumProps(word ptr) EnumProps(1 2)
28 pascal ClientToScreen(word ptr) ClientToScreen(1 2) 28 pascal ClientToScreen(word ptr) ClientToScreen(1 2)
29 pascal ScreenToClient(word ptr) ScreenToClient(1 2) 29 pascal ScreenToClient(word ptr) ScreenToClient(1 2)
30 pascal WindowFromPoint(long) WindowFromPoint(1) 30 pascal WindowFromPoint(long) WindowFromPoint(1)
@ -91,6 +96,8 @@ length 540
96 pascal CheckRadioButton(word word word word) CheckRadioButton(1 2 3 4) 96 pascal CheckRadioButton(word word word word) CheckRadioButton(1 2 3 4)
97 pascal CheckDlgButton(word word word) CheckDlgButton(1 2 3) 97 pascal CheckDlgButton(word word word) CheckDlgButton(1 2 3)
98 pascal IsDlgButtonChecked(word word) IsDlgButtonChecked(1 2) 98 pascal IsDlgButtonChecked(word word) IsDlgButtonChecked(1 2)
99 pascal DlgDirSelect(word ptr word) DlgDirSelect(1 2 3)
100 pascal DlgDirList(word ptr word word word) DlgDirList(1 2 3 4 5)
101 pascal SendDlgItemMessage(word word word word long) 101 pascal SendDlgItemMessage(word word word word long)
SendDlgItemMessage(1 2 3 4 5) SendDlgItemMessage(1 2 3 4 5)
102 pascal AdjustWindowRect(ptr long word) AdjustWindowRect(1 2 3) 102 pascal AdjustWindowRect(ptr long word) AdjustWindowRect(1 2 3)
@ -107,7 +114,9 @@ length 540
118 pascal RegisterWindowMessage(ptr) RegisterWindowMessage(1) 118 pascal RegisterWindowMessage(ptr) RegisterWindowMessage(1)
119 pascal GetMessagePos() GetMessagePos() 119 pascal GetMessagePos() GetMessagePos()
120 pascal GetMessageTime() GetMessageTime() 120 pascal GetMessageTime() GetMessageTime()
121 pascal SetWindowsHook(s_word ptr) SetWindowsHook(1 2)
122 pascal CallWindowProc(ptr word word word long) CallWindowProc(1 2 3 4 5) 122 pascal CallWindowProc(ptr word word word long) CallWindowProc(1 2 3 4 5)
123 pascal CallMsgFilter(ptr s_word) CallMsgFilter(1 2)
124 pascal UpdateWindow(word) UpdateWindow(1) 124 pascal UpdateWindow(word) UpdateWindow(1)
125 pascal InvalidateRect(word ptr word) InvalidateRect(1 2 3) 125 pascal InvalidateRect(word ptr word) InvalidateRect(1 2 3)
126 pascal InvalidateRgn(word word word) InvalidateRgn(1 2 3) 126 pascal InvalidateRgn(word word word) InvalidateRgn(1 2 3)
@ -164,9 +173,14 @@ length 540
181 pascal SetSysColors(word ptr ptr) SetSysColors(1 2 3) 181 pascal SetSysColors(word ptr ptr) SetSysColors(1 2 3)
182 pascal KillSystemTimer(word word) KillSystemTimer(1 2) 182 pascal KillSystemTimer(word word) KillSystemTimer(1 2)
183 pascal GetCaretPos(ptr) GetCaretPos(1) 183 pascal GetCaretPos(ptr) GetCaretPos(1)
185 pascal GrayString(word word ptr ptr word word word word word)
GrayString(1 2 3 4 5 6 7 8 9)
188 pascal SetSysModalWindow(word) SetSysModalWindow(1)
190 pascal GetUpdateRect(word ptr word) GetUpdateRect(1 2 3) 190 pascal GetUpdateRect(word ptr word) GetUpdateRect(1 2 3)
191 pascal ChildWindowFromPoint(word long) ChildWindowFromPoint(1 2) 191 pascal ChildWindowFromPoint(word long) ChildWindowFromPoint(1 2)
193 pascal IsClipboardFormatAvailable(word) IsClipboardFormatAvailable(1) 193 pascal IsClipboardFormatAvailable(word) IsClipboardFormatAvailable(1)
194 pascal DlgDirSelectComboBox(word ptr word) DlgDirSelectComboBox(1 2 3)
195 pascal DlgDirListComboBox(word ptr word word word) DlgDirListComboBox(1 2 3 4 5)
200 pascal OpenComm(ptr word word) OpenComm(1 2 3) 200 pascal OpenComm(ptr word word) OpenComm(1 2 3)
201 pascal SetCommState(ptr) SetCommState(1) 201 pascal SetCommState(ptr) SetCommState(1)
202 pascal GetCommState(word ptr) GetCommState(1 2) 202 pascal GetCommState(word ptr) GetCommState(1 2)
@ -189,12 +203,16 @@ length 540
220 pascal LoadMenuIndirect(ptr) LoadMenuIndirect(1) 220 pascal LoadMenuIndirect(ptr) LoadMenuIndirect(1)
221 pascal ScrollDC(word s_word s_word ptr ptr word ptr) 221 pascal ScrollDC(word s_word s_word ptr ptr word ptr)
ScrollDC(1 2 3 4 5 6 7) ScrollDC(1 2 3 4 5 6 7)
224 pascal GetWindowTask(word) GetWindowTask(1)
225 pascal EnumTaskWindows(word ptr long) EnumTaskWindows(1 2 3)
227 pascal GetNextDlgGroupItem(word word word) GetNextDlgGroupItem(1 2 3) 227 pascal GetNextDlgGroupItem(word word word) GetNextDlgGroupItem(1 2 3)
228 pascal GetNextDlgTabItem(word word word) GetNextDlgTabItem(1 2 3) 228 pascal GetNextDlgTabItem(word word word) GetNextDlgTabItem(1 2 3)
229 pascal GetTopWindow(word) GetTopWindow(1) 229 pascal GetTopWindow(word) GetTopWindow(1)
230 pascal GetNextWindow(word word) GetNextWindow(1 2) 230 pascal GetNextWindow(word word) GetNextWindow(1 2)
232 pascal SetWindowPos(word word word word word word word) 232 pascal SetWindowPos(word word word word word word word)
SetWindowPos(1 2 3 4 5 6 7) SetWindowPos(1 2 3 4 5 6 7)
234 pascal UnhookWindowsHook(s_word ptr) UnhookWindowsHook(1 2)
235 pascal DefHookProc(s_word word long ptr) DefHookProc(1 2 3 4)
236 pascal GetCapture() GetCapture() 236 pascal GetCapture() GetCapture()
237 pascal GetUpdateRgn(word word word) GetUpdateRgn(1 2 3) 237 pascal GetUpdateRgn(word word word) GetUpdateRgn(1 2 3)
238 pascal ExcludeUpdateRgn(word word) ExcludeUpdateRgn(1 2) 238 pascal ExcludeUpdateRgn(word word) ExcludeUpdateRgn(1 2)
@ -205,12 +223,17 @@ length 540
CreateDialogParam(1 2 3 4 5) CreateDialogParam(1 2 3 4 5)
242 pascal CreateDialogIndirectParam(word ptr word ptr long) 242 pascal CreateDialogIndirectParam(word ptr word ptr long)
CreateDialogIndirectParam(1 2 3 4 5) CreateDialogIndirectParam(1 2 3 4 5)
243 pascal GetDialogBaseUnits() GetDialogBaseUnits()
244 pascal EqualRect(ptr ptr) EqualRect(1 2) 244 pascal EqualRect(ptr ptr) EqualRect(1 2)
248 pascal GetOpenClipboardWindow() GetOpenClipboardWindow() 248 pascal GetOpenClipboardWindow() GetOpenClipboardWindow()
258 pascal MapWindowPoints(word word ptr word) MapWindowPoints(1 2 3 4) 258 pascal MapWindowPoints(word word ptr word) MapWindowPoints(1 2 3 4)
262 pascal GetWindow(word word) GetWindow(1 2) 262 pascal GetWindow(word word) GetWindow(1 2)
266 pascal SetMessageQueue(word) SetMessageQueue(1) 266 pascal SetMessageQueue(word) SetMessageQueue(1)
267 pascal ShowScrollBar(word word word) ShowScrollBar(1 2 3) 267 pascal ShowScrollBar(word word word) ShowScrollBar(1 2 3)
268 pascal GlobalAddAtom(ptr) GlobalAddAtom(1)
269 pascal GlobalDeleteAtom(word) GlobalDeleteAtom(1)
270 pascal GlobalFindAtom(ptr) GlobalFindAtom(1)
271 pascal GlobalGetAtomName(word ptr s_word) GlobalGetAtomName(1 2 3)
272 pascal IsZoomed(word) IsZoomed(1) 272 pascal IsZoomed(word) IsZoomed(1)
277 pascal GetDlgCtrlID(word) GetDlgCtrlID(1) 277 pascal GetDlgCtrlID(word) GetDlgCtrlID(1)
282 pascal SelectPalette(word word word) SelectPalette(1 2 3) 282 pascal SelectPalette(word word word) SelectPalette(1 2 3)
@ -219,6 +242,9 @@ length 540
286 pascal GetDesktopWindow() GetDesktopWindow() 286 pascal GetDesktopWindow() GetDesktopWindow()
288 pascal GetMessageExtraInfo() GetMessageExtraInfo() 288 pascal GetMessageExtraInfo() GetMessageExtraInfo()
290 pascal RedrawWindow(word ptr word word) RedrawWindow(1 2 3 4) 290 pascal RedrawWindow(word ptr word word) RedrawWindow(1 2 3 4)
291 pascal SetWindowsHookEx(s_word ptr word word) SetWindowsHookEx(1 2 3 4)
292 pascal UnhookWindowsHookEx(ptr) UnhookWindowsHookEx(1)
293 pascal CallNextHookEx(ptr s_word word long) CallNextHookEx(1 2 3 4)
308 pascal DefDlgProc(word word word long) DefDlgProc(1 2 3 4) 308 pascal DefDlgProc(word word word long) DefDlgProc(1 2 3 4)
319 pascal ScrollWindowEx(word s_word s_word ptr ptr word ptr word) 319 pascal ScrollWindowEx(word s_word s_word ptr ptr word ptr word)
ScrollWindowEx(1 2 3 4 5 6 7 8) ScrollWindowEx(1 2 3 4 5 6 7 8)

View File

@ -7,44 +7,44 @@ name winsock
id 9 id 9
length 155 length 155
1 pascal accept(long ptr ptr) Winsock_accept(1 2 3) 1 pascal accept(word ptr ptr) Winsock_accept(1 2 3)
2 pascal bind(long ptr word) Winsock_bind(1 2 3) 2 pascal bind(word ptr word) Winsock_bind(1 2 3)
3 pascal closesocket(long) Winsock_closesocket(1) 3 pascal closesocket(word) Winsock_closesocket(1)
4 pascal connect(long ptr word) Winsock_connect(1 2 3) 4 pascal connect(word ptr word) Winsock_connect(1 2 3)
5 pascal getpeername(long ptr ptr) Winsock_getpeername(1 2 3) 5 pascal getpeername(word ptr ptr) Winsock_getpeername(1 2 3)
6 pascal getsockname(long ptr ptr) Winsock_getsockname(1 2 3) 6 pascal getsockname(word ptr ptr) Winsock_getsockname(1 2 3)
7 pascal getsockopt(long word word ptr ptr) 7 pascal getsockopt(word word word ptr ptr)
Winsock_getsockopt(1 2 3 4 5) Winsock_getsockopt(1 2 3 4 5)
8 pascal htonl(long) Winsock_htonl(1) 8 pascal htonl(long) Winsock_htonl(1)
9 pascal htons(word) Winsock_htons(1) 9 pascal htons(word) Winsock_htons(1)
10 pascal inet_addr(ptr) Winsock_inet_addr(1) 10 pascal inet_addr(long) Winsock_inet_addr(1)
11 pascal inet_ntoa(long) Winsock_inet_ntoa(1) 11 pascal inet_ntoa(long) Winsock_inet_ntoa(1)
12 pascal ioctlsocket(long long ptr) Winsock_ioctlsocket(1 2 3) 12 pascal ioctlsocket(word long ptr) Winsock_ioctlsocket(1 2 3)
13 pascal listen(long word) Winsock_listen(1 2) 13 pascal listen(word word) Winsock_listen(1 2)
14 pascal ntohl(long) Winsock_ntohl(1) 14 pascal ntohl(long) Winsock_ntohl(1)
15 pascal ntohs(word) Winsock_ntohs(1) 15 pascal ntohs(word) Winsock_ntohs(1)
16 pascal recv(long ptr word word) Winsock_recv(1 2 3 4) 16 pascal recv(word ptr word word) Winsock_recv(1 2 3 4)
17 pascal recvfrom(long ptr word word ptr ptr) 17 pascal recvfrom(word ptr word word ptr ptr)
Winsock_recvfrom(1 2 3 4 5 6) Winsock_recvfrom(1 2 3 4 5 6)
18 pascal select(word ptr ptr ptr ptr word) 18 pascal select(word ptr ptr ptr ptr word)
Winsock_select(1 2 3 4 5 6) Winsock_select(1 2 3 4 5 6)
19 pascal send(long ptr word word) Winsock_send(1 2 3 4) 19 pascal send(word ptr word word) Winsock_send(1 2 3 4)
20 pascal sendto(long ptr word word ptr ptr) 20 pascal sendto(word ptr word word ptr ptr)
Winsock_sendto(1 2 3 4 5 6) Winsock_sendto(1 2 3 4 5 6)
21 pascal setsockopt(long word word ptr word) 21 pascal setsockopt(word word word ptr word)
Winsock_setsockopt(1 2 3 4 5) Winsock_setsockopt(1 2 3 4 5)
22 pascal shutdown(long word) Winsock_shutdown(1 2) 22 pascal shutdown(word word) Winsock_shutdown(1 2)
23 pascal socket(word word word) Winsock_socket(1 2 3) 23 pascal socket(word word word) Winsock_socket(1 2 3)
51 pascal gethostbyaddr(ptr word word) Winsock_gethostbyaddr(1 2 3) 51 pascal gethostbyaddr(ptr word word) Winsock_gethostbyaddr(1 2 3)
52 pascal gethostbyname(ptr) Winsock_gethostbyname(1) 52 pascal gethostbyname(ptr) Winsock_gethostbyname(1)
53 pascal getprotobyname(ptr) Winsock_getprotobyname(1) 53 pascal getprotobyname(ptr) Winsock_getprotobyname(1)
54 pascal getprotobynumber(word) Winsock_getprotobynumber(1) 54 pascal getprotobynumber(word) Winsock_getprotobynumber(1)
55 pascal getservbyname(ptr) Winsock_getservbyname(1) 55 pascal getservbyname(ptr ptr) Winsock_getservbyname(1 2)
56 pascal getservbyport(word ptr) Winsock_getservbyport(1 2) 56 pascal getservbyport(word ptr) Winsock_getservbyport(1 2)
57 pascal gethostname(ptr word) Winsock_gethostname(1 2) 57 pascal gethostname(ptr word) Winsock_gethostname(1 2)
101 pascal WSAAsyncSelect(long word word long) 101 pascal WSAAsyncSelect(word word word long)
WSAAsyncSelect(1 2 3 4) WSAAsyncSelect(1 2 3 4)
102 pascal WSAAsyncGetHostByAddr(word word ptr word word ptr word) 102 pascal WSAAsyncGetHostByAddr(word word ptr word word ptr word)
WSAAsyncGetHostByAddr(1 2 3 4 5 6 7) WSAAsyncGetHostByAddr(1 2 3 4 5 6 7)
@ -68,4 +68,4 @@ length 155
115 pascal WSAStartup(word ptr) WSAStartup(1 2) 115 pascal WSAStartup(word ptr) WSAStartup(1 2)
116 pascal WSACleanup() WSACleanup() 116 pascal WSACleanup() WSACleanup()
151 pascal __WSAFDIsSet(long ptr) WSAFDIsSet(1 2) 151 pascal __WSAFDIsSet(word ptr) WSAFDIsSet(1 2)

70
include/driver.h Normal file
View File

@ -0,0 +1,70 @@
/*
* Drivers definitions
*/
#define DRV_LOAD 0x0001
#define DRV_ENABLE 0x0002
#define DRV_OPEN 0x0003
#define DRV_CLOSE 0x0004
#define DRV_DISABLE 0x0005
#define DRV_FREE 0x0006
#define DRV_CONFIGURE 0x0007
#define DRV_QUERYCONFIGURE 0x0008
#define DRV_INSTALL 0x0009
#define DRV_REMOVE 0x000A
#define DRV_EXITSESSION 0x000B
#define DRV_EXITAPPLICATION 0x000C
#define DRV_POWER 0x000F
#define DRV_RESERVED 0x0800
#define DRV_USER 0x4000
#define DRVCNF_CANCEL 0x0000
#define DRVCNF_OK 0x0001
#define DRVCNF_RESTART 0x0002
#define DRVEA_NORMALEXIT 0x0001
#define DRVEA_ABNORMALEXIT 0x0002
#define GND_FIRSTINSTANCEONLY 0x00000001
#define GND_FORWARD 0x00000000
#define GND_REVERSE 0x00000002
typedef struct {
DWORD dwDCISize;
LPCSTR lpszDCISectionName;
LPCSTR lpszDCIAliasName;
} DRVCONFIGINFO;
typedef DRVCONFIGINFO FAR* LPDRVCONFIGINFO;
typedef struct {
UINT length;
HDRVR hDriver;
HINSTANCE hModule;
char szAliasName[128];
} DRIVERINFOSTRUCT;
typedef DRIVERINFOSTRUCT FAR* LPDRIVERINFOSTRUCT;
typedef LRESULT (CALLBACK* DRIVERPROC)(DWORD, HDRVR, UINT, LPARAM, LPARAM);
typedef struct {
DRIVERINFOSTRUCT dis;
WORD count;
void *lpPrevItem;
void *lpNextItem;
DRIVERPROC lpDrvProc;
} DRIVERITEM;
typedef DRIVERITEM FAR* LPDRIVERITEM;
LRESULT DefDriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
DWORD dwParam1, DWORD dwParam2);
HDRVR WINAPI OpenDriver(LPSTR szDriverName, LPSTR szSectionName, LPARAM lParam2);
LRESULT WINAPI CloseDriver(HDRVR hDriver, LPARAM lParam1, LPARAM lParam2);
LRESULT WINAPI SendDriverMessage(HDRVR hDriver, WORD message, LPARAM lParam1, LPARAM lParam2);
HINSTANCE WINAPI GetDriverModuleHandle(HDRVR hDriver);
HDRVR WINAPI GetNextDriver(HDRVR, DWORD);
BOOL WINAPI GetDriverInfo(HDRVR, DRIVERINFOSTRUCT FAR*);

View File

@ -290,8 +290,9 @@ typedef struct tagDC
extern MDESC *GDI_Heap; extern MDESC *GDI_Heap;
#define GDI_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&GDI_Heap,f,size) & 0xffff) #define GDI_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&GDI_Heap,f,size) & 0xffff)
#define GDI_HEAP_ADDR(handle) ((void *)((handle)|((int)GDI_Heap & 0xffff0000)))
#define GDI_HEAP_FREE(handle) (HEAP_Free(&GDI_Heap,GDI_HEAP_ADDR(handle))) #define GDI_HEAP_FREE(handle) (HEAP_Free(&GDI_Heap,GDI_HEAP_ADDR(handle)))
#define GDI_HEAP_ADDR(handle) \
((void *)((handle) ? ((handle) | ((int)GDI_Heap & 0xffff0000)) : 0))
#endif #endif

42
include/hook.h Normal file
View File

@ -0,0 +1,42 @@
/*
* Windows hook definitions
*
* Copyright 1994 Alexandre Julliard
*/
#ifndef HOOK_H
#define HOOK_H
#include "windows.h"
#include "user.h"
/* Hook data (pointed to by a HHOOK) */
typedef struct
{
HHOOK next; /* Next hook in chain */
HOOKPROC proc; /* Hook procedure */
short id; /* Hook id (WH_???) */
HTASK htask; /* Task owning this hook */
} HOOKDATA;
#define FIRST_HOOK WH_MSGFILTER
#define LAST_HOOK WH_SHELL
#define SYSTEM_HOOK(id) (systemHooks[(id)-FIRST_HOOK])
#define TASK_HOOK(id) (taskHooks[(id)-FIRST_HOOK])
#define INTERNAL_CALL_HOOK(hhook,code,wparam,lparam) \
((hhook) ? CallHookProc(((HOOKDATA*)(hhook))->proc,code,wparam,lparam) : 0)
#define CALL_SYSTEM_HOOK(id,code,wparam,lparam) \
INTERNAL_CALL_HOOK(SYSTEM_HOOK(id),code,wparam,lparam)
#define CALL_TASK_HOOK(id,code,wparam,lparam) \
INTERNAL_CALL_HOOK(TASK_HOOK(id),code,wparam,lparam)
extern DWORD CallHookProc( HOOKPROC func, short code,
WPARAM wParam, LPARAM lParam ); /* callback.c */
extern HHOOK systemHooks[];
extern HHOOK taskHooks[];
#endif /* HOOK_H */

View File

@ -28,6 +28,8 @@ typedef struct
HWND hwndHitTest; HWND hwndHitTest;
BOOL flagMenuAltered; BOOL flagMenuAltered;
BOOL flagChildMaximized; BOOL flagChildMaximized;
RECT rectMaximize;
RECT rectRestore;
} MDICLIENTINFO; } MDICLIENTINFO;
#endif /* MDI_H */ #endif /* MDI_H */

View File

@ -65,7 +65,8 @@ typedef struct
char item_text[1]; /* Text for menu item */ char item_text[1]; /* Text for menu item */
} MENUITEMTEMPLATE; } MENUITEMTEMPLATE;
void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop); void StdDrawMenuBar(HDC hDC, LPRECT lprect, LPPOPUPMENU lppop,
BOOL suppress_draw);
BOOL MenuButtonDown(HWND hWnd, LPPOPUPMENU lppop, int x, int y); BOOL MenuButtonDown(HWND hWnd, LPPOPUPMENU lppop, int x, int y);
void MenuButtonUp(HWND hWnd, LPPOPUPMENU lppop, int x, int y); void MenuButtonUp(HWND hWnd, LPPOPUPMENU lppop, int x, int y);
void MenuMouseMove(HWND hWnd, LPPOPUPMENU lppop, WORD wParam, int x, int y); void MenuMouseMove(HWND hWnd, LPPOPUPMENU lppop, WORD wParam, int x, int y);

View File

@ -53,5 +53,7 @@ extern BOOL MSG_CreateSysMsgQueue( int size );
extern void hardware_event( WORD message, WORD wParam, LONG lParam, extern void hardware_event( WORD message, WORD wParam, LONG lParam,
int xPos, int yPos, DWORD time, DWORD extraInfo ); int xPos, int yPos, DWORD time, DWORD extraInfo );
extern BOOL MSG_GetHardwareMessage( LPMSG msg ); extern BOOL MSG_GetHardwareMessage( LPMSG msg );
extern BOOL MSG_InternalGetMessage( LPMSG msg, HWND hwnd,
short code, BOOL sendIdle );
#endif /* MESSAGE_H */ #endif /* MESSAGE_H */

45
include/metafile.h Normal file
View File

@ -0,0 +1,45 @@
/*
* Metafile definitions
*
* Copyright David W. Metcalfe, 1994
*/
#ifndef METAFILE_H
#define METAFILE_H
#include "windows.h"
#define MFHEADERSIZE (sizeof(METAHEADER))
#define MFVERSION 0x300
#define META_EOF 0x0000
typedef struct tagMETAFILE
{
WORD wMagic; /* `PO' */
char Filename[80]; /* metafile name, if disk based */
int hFile; /* MSDOS file handle for metafile */
HANDLE hMetaHdr; /* handle of metafile header */
int MetaOffset; /* offset of current record in metafile */
HANDLE hBuffer; /* handle of buffer for disk based metafiles */
} METAFILE;
typedef METAFILE *LPMETAFILE;
BOOL MF_WriteRecord(HMETAFILE hmf, METARECORD *mr, WORD rlen);
BOOL MF_MetaParam1(DC *dc, short func, short param1);
BOOL MF_MetaParam2(DC *dc, short func, short param1, short param2);
BOOL MF_MetaParam4(DC *dc, short func, short param1, short param2,
short param3, short param4);
BOOL MF_MetaParam6(DC *dc, short func, short param1, short param2,
short param3, short param4, short param5, short param6);
BOOL MF_MetaParam8(DC *dc, short func, short param1, short param2,
short param3, short param4, short param5,
short param6, short param7, short param8);
BOOL MF_CreateBrushIndirect(DC *dc, LOGBRUSH *logbrush);
BOOL MF_CreatePatternBrush(DC *dc, LOGBRUSH *logbrush);
BOOL MF_CreatePenIndirect(DC *dc, LOGPEN *logpen);
BOOL MF_TextOut(DC *dc, short x, short y, LPSTR str, short count);
BOOL MF_MetaPoly(DC *dc, short func, LPPOINT pt, short count);
#endif /* METAFILE_H */

1390
include/mmsystem.h Normal file

File diff suppressed because it is too large Load Diff

View File

@ -15,6 +15,7 @@ struct dosdirent {
}; };
#define DOSVERSION 0x0330; #define DOSVERSION 0x0330;
#define MAX_DOS_DRIVES 26
#define EAX context->sc_eax #define EAX context->sc_eax
#define EBX context->sc_ebx #define EBX context->sc_ebx

View File

@ -4,19 +4,21 @@
#ifndef REGFUNC_H #ifndef REGFUNC_H
#define REGFUNC_H #define REGFUNC_H
#include "wine.h"
extern unsigned short *Stack16Frame; extern unsigned short *Stack16Frame;
#define _CONTEXT &Stack16Frame[12] #define _CONTEXT ((struct sigcontext_struct *) &Stack16Frame[12])
#define _AX Stack16Frame[34] #define _AX (_CONTEXT->sc_eax)
#define _BX Stack16Frame[28] #define _BX (_CONTEXT->sc_ebx)
#define _CX Stack16Frame[32] #define _CX (_CONTEXT->sc_ecx)
#define _DX Stack16Frame[30] #define _DX (_CONTEXT->sc_edx)
#define _SP Stack16Frame[26] #define _SP (_CONTEXT->sc_esp)
#define _BP Stack16Frame[24] #define _BP (_CONTEXT->sc_ebp)
#define _SI Stack16Frame[22] #define _SI (_CONTEXT->sc_esi)
#define _DI Stack16Frame[20] #define _DI (_CONTEXT->sc_edi)
#define _DS Stack16Frame[18] #define _DS (_CONTEXT->sc_ds)
#define _ES Stack16Frame[16] #define _ES (_CONTEXT->sc_es)
extern void ReturnFromRegisterFunc(void); extern void ReturnFromRegisterFunc(void);

40
include/shell.h Normal file
View File

@ -0,0 +1,40 @@
/*
* Shell Library definitions
*/
#define ERROR_SUCCESS 0L
#define ERROR_BADDB 1L
#define ERROR_BADKEY 2L
#define ERROR_CANTOPEN 3L
#define ERROR_CANTREAD 4L
#define ERROR_CANTWRITE 5L
#define ERROR_OUTOFMEMORY 6L
#define ERROR_INVALID_PARAMETER 7L
#define ERROR_ACCESS_DENIED 8L
#define REG_SZ 1 /* string type */
#define HKEY_CLASSES_ROOT 1
typedef DWORD HKEY;
typedef HKEY FAR* LPHKEY;
typedef struct tagKEYSTRUCT {
HKEY hKey;
LPSTR lpSubKey;
DWORD dwType;
LPSTR lpValue;
struct tagKEYSTRUCT *lpPrevKey;
struct tagKEYSTRUCT *lpNextKey;
struct tagKEYSTRUCT *lpSubLvl;
} KEYSTRUCT;
typedef KEYSTRUCT *LPKEYSTRUCT;
#define SE_ERR_SHARE 26
#define SE_ERR_ASSOCINCOMPLETE 27
#define SE_ERR_DDETIMEOUT 28
#define SE_ERR_DDEFAIL 29
#define SE_ERR_DDEBUSY 30
#define SE_ERR_NOASSOC 31

39
include/syscolor.h Normal file
View File

@ -0,0 +1,39 @@
/*
* System color objects
*
* Copyright Alexandre Julliard, 1994
*/
#ifndef SYSCOLOR_H
#define SYSCOLOR_H
#include "gdi.h"
struct SysColorObjects
{
HBRUSH hbrushScrollbar; /* COLOR_SCROLLBAR */
/* COLOR_BACKGROUND */
HBRUSH hbrushActiveCaption; /* COLOR_ACTIVECAPTION */
HBRUSH hbrushInactiveCaption; /* COLOR_INACTIVECAPTION */
/* COLOR_MENU */
HBRUSH hbrushWindow; /* COLOR_WINDOW */
HPEN hpenWindowFrame; /* COLOR_WINDOWFRAME */
/* COLOR_MENUTEXT */
HPEN hpenWindowText; /* COLOR_WINDOWTEXT */
/* COLOR_CAPTIONTEXT */
HBRUSH hbrushActiveBorder; /* COLOR_ACTIVEBORDER */
HBRUSH hbrushInactiveBorder; /* COLOR_INACTIVEBORDER */
/* COLOR_APPWORKSPACE */
/* COLOR_HIGHLIGHT */
/* COLOR_HIGHLIGHTTEXT */
HBRUSH hbrushBtnFace; /* COLOR_BTNFACE */
HBRUSH hbrushBtnShadow; /* COLOR_BTNSHADOW */
/* COLOR_GRAYTEXT */
/* COLOR_BTNTEXT */
/* COLOR_INACTIVECAPTIONTEXT */
HBRUSH hbrushBtnHighlight; /* COLOR_BTNHIGHLIGHT */
};
extern struct SysColorObjects sysColorObjects;
#endif /* SYSCOLOR_H */

27
include/task.h Normal file
View File

@ -0,0 +1,27 @@
/*
* Task definitions
*/
#ifndef TASK_H
#define TASK_H
typedef struct {
HANDLE hTask;
HANDLE hModule;
HINSTANCE hInst;
int unix_pid;
HICON hIcon;
HWND *lpWndList;
void *lpPrevTask;
void *lpNextTask;
} TASKENTRY;
typedef TASKENTRY *LPTASKENTRY;
#define MAXWIN_PER_TASK 256
HANDLE CreateNewTask(HINSTANCE hInst);
BOOL RemoveWindowFromTask(HTASK hTask, HWND hWnd);
BOOL AddWindowToTask(HTASK hTask, HWND hWnd);
#endif /* TASK_H */

View File

@ -25,8 +25,9 @@ extern MDESC *USER_Heap;
#define USER_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&USER_Heap,f,size) & 0xffff) #define USER_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&USER_Heap,f,size) & 0xffff)
#define USER_HEAP_REALLOC(handle,size,f) ((int)HEAP_ReAlloc(&USER_Heap, \ #define USER_HEAP_REALLOC(handle,size,f) ((int)HEAP_ReAlloc(&USER_Heap, \
USER_HEAP_ADDR(handle),size,f) & 0xffff) USER_HEAP_ADDR(handle),size,f) & 0xffff)
#define USER_HEAP_ADDR(handle) ((void *)((handle)|((int)USER_Heap&0xffff0000)))
#define USER_HEAP_FREE(handle) (HEAP_Free(&USER_Heap,USER_HEAP_ADDR(handle))) #define USER_HEAP_FREE(handle) (HEAP_Free(&USER_Heap,USER_HEAP_ADDR(handle)))
#define USER_HEAP_ADDR(handle) \
((void *)((handle) ? ((handle) | ((int)USER_Heap & 0xffff0000)) : 0))
#endif /* WINELIB */ #endif /* WINELIB */

View File

@ -36,12 +36,12 @@ typedef struct tagWND
POINT ptMaxPos; /* Maximized window position */ POINT ptMaxPos; /* Maximized window position */
HANDLE hmemTaskQ; /* Task queue global memory handle */ HANDLE hmemTaskQ; /* Task queue global memory handle */
HRGN hrgnUpdate; /* Update region */ HRGN hrgnUpdate; /* Update region */
HWND hwndPrevActive; /* Previous active top-level window */
HWND hwndLastActive; /* Last active popup hwnd */ HWND hwndLastActive; /* Last active popup hwnd */
FARPROC lpfnWndProc; /* Window procedure */ FARPROC lpfnWndProc; /* Window procedure */
DWORD dwStyle; /* Window style (from CreateWindow) */ DWORD dwStyle; /* Window style (from CreateWindow) */
DWORD dwExStyle; /* Extended style (from CreateWindowEx) */ DWORD dwExStyle; /* Extended style (from CreateWindowEx) */
HANDLE hdce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */ HANDLE hdce; /* Window DCE (if CS_OWNDC or CS_CLASSDC) */
HMENU hmenuSystem; /* System menu */
void *VScroll; /* Vertical ScrollBar Struct Pointer */ void *VScroll; /* Vertical ScrollBar Struct Pointer */
void *HScroll; /* Horizontal ScrollBar Struct Pointer */ void *HScroll; /* Horizontal ScrollBar Struct Pointer */
WORD wIDmenu; /* ID or hmenu (from CreateWindow) */ WORD wIDmenu; /* ID or hmenu (from CreateWindow) */
@ -49,6 +49,8 @@ typedef struct tagWND
WORD flags; /* Misc. flags (see below) */ WORD flags; /* Misc. flags (see below) */
Window window; /* X window */ Window window; /* X window */
HMENU hSysMenu; /* window's copy of System Menu */ HMENU hSysMenu; /* window's copy of System Menu */
HANDLE hProp; /* Handle of Properties List */
HTASK hTask; /* Task Handle of the owner */
WORD wExtra[1]; /* Window extra bytes */ WORD wExtra[1]; /* Window extra bytes */
} WND; } WND;

View File

@ -9,15 +9,24 @@ typedef short INT;
typedef unsigned short UINT; typedef unsigned short UINT;
typedef unsigned short WORD; typedef unsigned short WORD;
typedef unsigned long DWORD; typedef unsigned long DWORD;
#ifndef _WINMAIN
typedef unsigned short BOOL; typedef unsigned short BOOL;
typedef unsigned char BYTE; typedef unsigned char BYTE;
#endif typedef char *LPSTR;
typedef const char *LPCSTR;
typedef char *NPSTR;
typedef INT *LPINT;
typedef void *LPVOID;
typedef long (*FARPROC)();
typedef FARPROC DLGPROC;
typedef int CATCHBUF[9];
typedef int *LPCATCHBUF;
typedef FARPROC HOOKPROC;
typedef long LONG; typedef long LONG;
typedef UINT WPARAM; typedef UINT WPARAM;
typedef LONG LPARAM; typedef LONG LPARAM;
typedef LONG LRESULT; typedef LONG LRESULT;
typedef WORD HANDLE; typedef WORD HANDLE;
typedef DWORD HHOOK;
#define DECLARE_HANDLE(a) typedef HANDLE a; #define DECLARE_HANDLE(a) typedef HANDLE a;
DECLARE_HANDLE(HTASK); DECLARE_HANDLE(HTASK);
@ -37,19 +46,10 @@ DECLARE_HANDLE(HBITMAP);
DECLARE_HANDLE(HBRUSH); DECLARE_HANDLE(HBRUSH);
DECLARE_HANDLE(LOCALHANDLE); DECLARE_HANDLE(LOCALHANDLE);
typedef char *LPSTR;
typedef const char *LPCSTR;
typedef char *NPSTR;
typedef short *LPINT;
typedef void *LPVOID;
typedef long (*FARPROC)();
typedef FARPROC DLGPROC;
typedef int CATCHBUF[9];
typedef int *LPCATCHBUF;
#define TRUE 1 #define TRUE 1
#define FALSE 0 #define FALSE 0
#define CW_USEDEFAULT ((short)0x8000) #define CW_USEDEFAULT ((INT)0x8000)
#define FAR #define FAR
#define NEAR #define NEAR
#define PASCAL #define PASCAL
@ -113,15 +113,15 @@ typedef int *LPCATCHBUF;
#endif #endif
*/ */
typedef struct { short x, y; } POINT; typedef struct { INT x, y; } POINT;
typedef POINT *PPOINT; typedef POINT *PPOINT;
typedef POINT *NPPOINT; typedef POINT *NPPOINT;
typedef POINT *LPPOINT; typedef POINT *LPPOINT;
typedef struct typedef struct
{ {
short cx; INT cx;
short cy; INT cy;
} SIZE, *LPSIZE; } SIZE, *LPSIZE;
#define MAKEPOINT(l) (*((POINT *)&(l))) #define MAKEPOINT(l) (*((POINT *)&(l)))
@ -129,7 +129,7 @@ typedef struct
#define MAKELPARAM(low, high) ((LONG)(((WORD)(low)) | \ #define MAKELPARAM(low, high) ((LONG)(((WORD)(low)) | \
(((DWORD)((WORD)(high))) << 16))) (((DWORD)((WORD)(high))) << 16)))
typedef struct { short left, top, right, bottom; } RECT; typedef struct { INT left, top, right, bottom; } RECT;
typedef RECT *LPRECT; typedef RECT *LPRECT;
typedef RECT *NPRECT; typedef RECT *NPRECT;
typedef RECT *PRECT; typedef RECT *PRECT;
@ -167,7 +167,7 @@ typedef struct {
#else #else
LONG (*lpfnWndProc)() WINE_PACKED; LONG (*lpfnWndProc)() WINE_PACKED;
#endif #endif
short cbClsExtra, cbWndExtra; INT cbClsExtra, cbWndExtra;
HANDLE hInstance; HANDLE hInstance;
HICON hIcon; HICON hIcon;
HCURSOR hCursor; HCURSOR hCursor;
@ -209,10 +209,10 @@ typedef struct {
HINSTANCE hInstance; HINSTANCE hInstance;
HMENU hMenu; HMENU hMenu;
HWND hwndParent; HWND hwndParent;
short cy; INT cy;
short cx; INT cx;
short y; INT y;
short x; INT x;
LONG style WINE_PACKED; LONG style WINE_PACKED;
char * lpszName WINE_PACKED; char * lpszName WINE_PACKED;
char * lpszClass WINE_PACKED; char * lpszClass WINE_PACKED;
@ -230,10 +230,10 @@ typedef struct
LPSTR szClass; LPSTR szClass;
LPSTR szTitle; LPSTR szTitle;
HANDLE hOwner; HANDLE hOwner;
short x; INT x;
short y; INT y;
short cx; INT cx;
short cy; INT cy;
LONG style WINE_PACKED; LONG style WINE_PACKED;
LONG lParam WINE_PACKED; LONG lParam WINE_PACKED;
} MDICREATESTRUCT, *LPMDICREATESTRUCT; } MDICREATESTRUCT, *LPMDICREATESTRUCT;
@ -380,7 +380,118 @@ typedef struct
#define SC_SCREENSAVE 0xf140 #define SC_SCREENSAVE 0xf140
#define SC_HOTKEY 0xf150 #define SC_HOTKEY 0xf150
/* Dialogs */ /***** Window hooks *****/
/* Hook values */
#define WH_JOURNALRECORD 0
#define WH_JOURNALPLAYBACK 1
#define WH_KEYBOARD 2
#define WH_GETMESSAGE 3
#define WH_CALLWNDPROC 4
#define WH_CBT 5
#define WH_SYSMSGFILTER 6
#define WH_MOUSE 7
#define WH_HARDWARE 8
#define WH_DEBUG 9
#define WH_SHELL 10
#define WH_MSGFILTER (-1)
/* Hook action codes */
#define HC_ACTION 0
#define HC_GETNEXT 1
#define HC_SKIP 2
#define HC_NOREMOVE 3
#define HC_NOREM HC_NOREMOVE
#define HC_SYSMODALON 4
#define HC_SYSMODALOFF 5
/* CallMsgFilter() values */
#define MSGF_DIALOGBOX 0
#define MSGF_MENU 2
#define MSGF_MOVE 3
#define MSGF_SIZE 4
#define MSGF_SCROLLBAR 5
#define MSGF_NEXTWINDOW 6
#define MSGF_MAINLOOP 8
#define MSGF_USER 4096
/* Journalling hook values */
#define HC_GETNEXT 1
#define HC_SKIP 2
#define HC_NOREMOVE 3
#define HC_NOREM HC_NOREMOVE
#define HC_SYSMODALON 4
#define HC_SYSMODALOFF 5
/* Journalling hook structure */
typedef struct tagEVENTMSG
{
UINT message;
UINT paramL;
UINT paramH;
DWORD time WINE_PACKED;
} EVENTMSG, *LPEVENTMSG;
/* Mouse hook structure */
typedef struct tagMOUSEHOOKSTRUCT
{
POINT pt;
HWND hwnd;
WORD wHitTestCode;
DWORD dwExtraInfo;
} MOUSEHOOKSTRUCT, *LPMOUSEHOOKSTRUCT;
/* Hardware hook structure */
typedef struct tagHARDWAREHOOKSTRUCT
{
HWND hWnd;
UINT wMessage;
WPARAM wParam;
LPARAM lParam WINE_PACKED;
} HARDWAREHOOKSTRUCT;
/* CBT hook values */
#define HCBT_MOVESIZE 0
#define HCBT_MINMAX 1
#define HCBT_QS 2
#define HCBT_CREATEWND 3
#define HCBT_DESTROYWND 4
#define HCBT_ACTIVATE 5
#define HCBT_CLICKSKIPPED 6
#define HCBT_KEYSKIPPED 7
#define HCBT_SYSCOMMAND 8
#define HCBT_SETFOCUS 9
/* CBT hook structures */
typedef struct tagCBT_CREATEWND
{
CREATESTRUCT *lpcs;
HWND hwndInsertAfter;
} CBT_CREATEWND, *LPCBT_CREATEWND;
typedef struct tagCBTACTIVATESTRUCT
{
BOOL fMouse;
HWND hWndActive;
} CBTACTIVATESTRUCT;
/* Shell hook values */
#define HSHELL_WINDOWCREATED 1
#define HSHELL_WINDOWDESTROYED 2
#define HSHELL_ACTIVATESHELLWINDOW 3
/* Debug hook structure */
typedef struct tagDEBUGHOOKINFO
{
HANDLE hModuleHook;
LPARAM reserved WINE_PACKED;
LPARAM lParam WINE_PACKED;
WPARAM wParam;
short code;
} DEBUGHOOKINFO, *LPDEBUGHOOKINFO;
/***** Dialogs *****/
/* cbWndExtra bytes for dialog class */ /* cbWndExtra bytes for dialog class */
#define DLGWINDOWEXTRA 30 #define DLGWINDOWEXTRA 30
@ -529,10 +640,10 @@ typedef DWORD COLORREF;
typedef struct tagBITMAP typedef struct tagBITMAP
{ {
short bmType; INT bmType;
short bmWidth; INT bmWidth;
short bmHeight; INT bmHeight;
short bmWidthBytes; INT bmWidthBytes;
BYTE bmPlanes; BYTE bmPlanes;
BYTE bmBitsPixel; BYTE bmBitsPixel;
void * bmBits WINE_PACKED; void * bmBits WINE_PACKED;
@ -548,7 +659,7 @@ typedef struct tagLOGBRUSH
{ {
WORD lbStyle; WORD lbStyle;
COLORREF lbColor WINE_PACKED; COLORREF lbColor WINE_PACKED;
short lbHatch; INT lbHatch;
} LOGBRUSH, *PLOGBRUSH, *NPLOGBRUSH, *LPLOGBRUSH; } LOGBRUSH, *PLOGBRUSH, *NPLOGBRUSH, *LPLOGBRUSH;
/* Brush styles */ /* Brush styles */
@ -573,7 +684,7 @@ typedef struct tagLOGBRUSH
#define LF_FACESIZE 32 #define LF_FACESIZE 32
typedef struct tagLOGFONT typedef struct tagLOGFONT
{ {
short lfHeight, lfWidth, lfEscapement, lfOrientation, lfWeight; INT lfHeight, lfWidth, lfEscapement, lfOrientation, lfWeight;
BYTE lfItalic, lfUnderline, lfStrikeOut, lfCharSet; BYTE lfItalic, lfUnderline, lfStrikeOut, lfCharSet;
BYTE lfOutPrecision, lfClipPrecision, lfQuality, lfPitchAndFamily; BYTE lfOutPrecision, lfClipPrecision, lfQuality, lfPitchAndFamily;
BYTE lfFaceName[LF_FACESIZE] WINE_PACKED; BYTE lfFaceName[LF_FACESIZE] WINE_PACKED;
@ -640,14 +751,14 @@ typedef struct tagLOGFONT
typedef struct tagTEXTMETRIC typedef struct tagTEXTMETRIC
{ {
short tmHeight; INT tmHeight;
short tmAscent; INT tmAscent;
short tmDescent; INT tmDescent;
short tmInternalLeading; INT tmInternalLeading;
short tmExternalLeading; INT tmExternalLeading;
short tmAveCharWidth; INT tmAveCharWidth;
short tmMaxCharWidth; INT tmMaxCharWidth;
short tmWeight; INT tmWeight;
BYTE tmItalic; BYTE tmItalic;
BYTE tmUnderlined; BYTE tmUnderlined;
BYTE tmStruckOut; BYTE tmStruckOut;
@ -657,9 +768,9 @@ typedef struct tagTEXTMETRIC
BYTE tmBreakChar; BYTE tmBreakChar;
BYTE tmPitchAndFamily; BYTE tmPitchAndFamily;
BYTE tmCharSet; BYTE tmCharSet;
short tmOverhang; INT tmOverhang;
short tmDigitizedAspectX; INT tmDigitizedAspectX;
short tmDigitizedAspectY; INT tmDigitizedAspectY;
} TEXTMETRIC, *PTEXTMETRIC, *NPTEXTMETRIC, *LPTEXTMETRIC; } TEXTMETRIC, *PTEXTMETRIC, *NPTEXTMETRIC, *LPTEXTMETRIC;
/* tmPitchAndFamily values */ /* tmPitchAndFamily values */
@ -966,10 +1077,10 @@ typedef BITMAPINFO *PBITMAPINFO;
typedef struct tagBITMAPCOREHEADER typedef struct tagBITMAPCOREHEADER
{ {
unsigned long bcSize; unsigned long bcSize;
unsigned short bcWidth; UINT bcWidth;
unsigned short bcHeight; UINT bcHeight;
unsigned short bcPlanes; UINT bcPlanes;
unsigned short bcBitCount; UINT bcBitCount;
} BITMAPCOREHEADER; } BITMAPCOREHEADER;
#define DIB_RGB_COLORS 0 #define DIB_RGB_COLORS 0
@ -2214,9 +2325,9 @@ Fa(ATOM,RegisterClass,LPWNDCLASS,a)
Fa(BOOL,TranslateMessage,LPMSG,a) Fa(BOOL,TranslateMessage,LPMSG,a)
Fa(void,PostQuitMessage,int,a) Fa(void,PostQuitMessage,int,a)
Fa(BOOL,SetMessageQueue,int,a) Fa(BOOL,SetMessageQueue,int,a)
Fa(int,_lclose,int,a) Fa(INT,_lclose,INT,a)
Fb(int,_lopen,LPSTR,a,int,b) Fb(INT,_lopen,LPSTR,a,INT,b)
Fa(int,lstrlen,LPCSTR,a) Fa(INT,lstrlen,LPCSTR,a)
Fa(LONG,DispatchMessage,LPMSG,msg) Fa(LONG,DispatchMessage,LPMSG,msg)
Fa(void,UpdateWindow,HWND,a) Fa(void,UpdateWindow,HWND,a)
Fa(ATOM,AddAtom,LPCSTR,a) Fa(ATOM,AddAtom,LPCSTR,a)
@ -2257,6 +2368,7 @@ Fa(BOOL,RemoveFontResource,LPSTR,a)
Fa(BOOL,SetDeskWallPaper,LPSTR,a) Fa(BOOL,SetDeskWallPaper,LPSTR,a)
Fa(BOOL,SetErrorMode,WORD,a) Fa(BOOL,SetErrorMode,WORD,a)
Fa(BOOL,SwapMouseButton,BOOL,a) Fa(BOOL,SwapMouseButton,BOOL,a)
Fa(BOOL,UnhookWindowsHookEx,HHOOK,a)
Fa(BOOL,UnrealizeObject,HBRUSH,a) Fa(BOOL,UnrealizeObject,HBRUSH,a)
Fa(BYTE,GetTempDrive,BYTE,a) Fa(BYTE,GetTempDrive,BYTE,a)
Fa(DWORD,GetAspectRatioFilter,HDC,a) Fa(DWORD,GetAspectRatioFilter,HDC,a)
@ -2351,7 +2463,7 @@ Fa(WORD,AllocSelector,WORD,a)
Fa(WORD,ArrangeIconicWindows,HWND,a) Fa(WORD,ArrangeIconicWindows,HWND,a)
Fa(WORD,EnumClipboardFormats,WORD,a) Fa(WORD,EnumClipboardFormats,WORD,a)
Fa(WORD,FreeSelector,WORD,a) Fa(WORD,FreeSelector,WORD,a)
Fa(WORD,GetDriveType,int,a) Fa(WORD,GetDriveType,INT,a)
Fa(WORD,GetMenuItemCount,HMENU,a) Fa(WORD,GetMenuItemCount,HMENU,a)
Fa(WORD,GetTaskQueue,HANDLE,a) Fa(WORD,GetTaskQueue,HANDLE,a)
Fa(WORD,GetTextAlign,HDC,a) Fa(WORD,GetTextAlign,HDC,a)
@ -2423,14 +2535,14 @@ Fb(BOOL,ShowWindow,HWND,a,int,b)
Fb(HDC,BeginPaint,HWND,a,LPPAINTSTRUCT,b) Fb(HDC,BeginPaint,HWND,a,LPPAINTSTRUCT,b)
Fb(LPSTR,lstrcat,LPSTR,a,LPCSTR,b ) Fb(LPSTR,lstrcat,LPSTR,a,LPCSTR,b )
Fb(LPSTR,lstrcpy,LPSTR,a,LPCSTR,b ) Fb(LPSTR,lstrcpy,LPSTR,a,LPCSTR,b )
Fb(int,_lcreat,LPSTR,a,int,b) Fb(INT,_lcreat,LPSTR,a,INT,b)
Fb(int,lstrcmp,LPCSTR,a,LPCSTR,b ) Fb(INT,lstrcmp,LPCSTR,a,LPCSTR,b )
Fb(int,lstrcmpi,LPCSTR,a,LPCSTR,b ) Fb(INT,lstrcmpi,LPCSTR,a,LPCSTR,b )
Fb(void,EndPaint,HWND,a,LPPAINTSTRUCT,b) Fb(void,EndPaint,HWND,a,LPPAINTSTRUCT,b)
Fb(void,GetClientRect,HWND,a,LPRECT,b) Fb(void,GetClientRect,HWND,a,LPRECT,b)
Fb(void,SetDCState,HDC,a,HDC,b) Fb(void,SetDCState,HDC,a,HDC,b)
Fb(BOOL,UnregisterClass,LPSTR,a,HANDLE,b) Fb(BOOL,UnregisterClass,LPSTR,a,HANDLE,b)
Fb(BOOL,CallMsgFilter,LPMSG,a,int,b) Fb(BOOL,CallMsgFilter,LPMSG,a,short,b)
Fb(BOOL,ChangeClipboardChain,HWND,a,HWND,b) Fb(BOOL,ChangeClipboardChain,HWND,a,HWND,b)
Fb(BOOL,EnableWindow,HWND,a,BOOL,b) Fb(BOOL,EnableWindow,HWND,a,BOOL,b)
Fb(BOOL,EnumWindows,FARPROC,a,LONG,b) Fb(BOOL,EnumWindows,FARPROC,a,LONG,b)
@ -2454,14 +2566,14 @@ Fb(BOOL,RestoreDC,HDC,a,short,b)
Fb(BOOL,SetConvertParams,int,a,int,b) Fb(BOOL,SetConvertParams,int,a,int,b)
Fb(BOOL,SetMenu,HWND,a,HMENU,b) Fb(BOOL,SetMenu,HWND,a,HMENU,b)
Fb(BOOL,TranslateMDISysAccel,HWND,a,LPMSG,b) Fb(BOOL,TranslateMDISysAccel,HWND,a,LPMSG,b)
Fb(BOOL,UnhookWindowsHook,int,a,FARPROC,b) Fb(BOOL,UnhookWindowsHook,short,a,HHOOK,b)
Fb(DWORD,GetNearestColor,HDC,a,DWORD,b) Fb(DWORD,GetNearestColor,HDC,a,DWORD,b)
Fb(DWORD,SetBkColor,HDC,a,COLORREF,b) Fb(DWORD,SetBkColor,HDC,a,COLORREF,b)
Fb(DWORD,SetMapperFlags,HDC,a,DWORD,b) Fb(DWORD,SetMapperFlags,HDC,a,DWORD,b)
Fb(DWORD,SetTextColor,HDC,a,DWORD,b) Fb(DWORD,SetTextColor,HDC,a,DWORD,b)
Fb(FARPROC,GetProcAddress,HANDLE,a,LPSTR,b) Fb(FARPROC,GetProcAddress,HANDLE,a,LPSTR,b)
Fb(FARPROC,MakeProcInstance,FARPROC,a,HANDLE,b) Fb(FARPROC,MakeProcInstance,FARPROC,a,HANDLE,b)
Fb(FARPROC,SetWindowsHook,int,a,FARPROC,b) Fb(HHOOK,SetWindowsHook,short,a,HOOKPROC,b)
Fb(HANDLE,CopyMetaFile,HANDLE,a,LPSTR,b) Fb(HANDLE,CopyMetaFile,HANDLE,a,LPSTR,b)
Fb(HANDLE,GetProp,HWND,a,LPSTR,b) Fb(HANDLE,GetProp,HWND,a,LPSTR,b)
#ifndef GLOBAL_SOURCE #ifndef GLOBAL_SOURCE
@ -2524,7 +2636,7 @@ Fb(WORD,SetTextAlign,HDC,a,WORD,b)
Fb(WORD,SizeofResource,HANDLE,a,HANDLE,b) Fb(WORD,SizeofResource,HANDLE,a,HANDLE,b)
Fb(WORD,WinExec,LPSTR,a,WORD,b) Fb(WORD,WinExec,LPSTR,a,WORD,b)
Fb(int,AccessResource,HANDLE,a,HANDLE,b) Fb(int,AccessResource,HANDLE,a,HANDLE,b)
Fb(int,AnsiToOem,LPSTR,a,LPSTR,b) Fb(INT,AnsiToOem,LPSTR,a,LPSTR,b)
Fb(int,BuildCommDCB,LPSTR,a,DCB*,b) Fb(int,BuildCommDCB,LPSTR,a,DCB*,b)
Fb(int,ConvertRequest,HWND,a,LPKANJISTRUCT,b) Fb(int,ConvertRequest,HWND,a,LPKANJISTRUCT,b)
Fb(void,CopyRect,LPRECT,a,LPRECT,b) Fb(void,CopyRect,LPRECT,a,LPRECT,b)
@ -2567,9 +2679,9 @@ Fb(void,ValidateRect,HWND,a,LPRECT,b)
Fb(void,ValidateRgn,HWND,a,HRGN,b) Fb(void,ValidateRgn,HWND,a,HRGN,b)
Fc(BOOL,LineTo,HDC,a,short,b,short,c) Fc(BOOL,LineTo,HDC,a,short,b,short,c)
Fc(WORD,GetInternalWindowPos,HWND,a,LPRECT,b,LPPOINT,c) Fc(WORD,GetInternalWindowPos,HWND,a,LPRECT,b,LPPOINT,c)
Fc(LONG,_llseek,int,a,long,b,int,c) Fc(LONG,_llseek,INT,a,LONG,b,INT,c)
Fc(WORD,_lread,int,a,LPSTR,b,int,c) Fc(WORD,_lread,INT,a,LPSTR,b,INT,c)
Fc(WORD,_lwrite,int,a,LPSTR,b,int,c) Fc(WORD,_lwrite,INT,a,LPSTR,b,INT,c)
Fc(int,FillRect,HDC,a,LPRECT,b,HBRUSH,c) Fc(int,FillRect,HDC,a,LPRECT,b,HBRUSH,c)
Fc(DWORD,MoveTo,HDC,a,short,b,short,c) Fc(DWORD,MoveTo,HDC,a,short,b,short,c)
Fc(BOOL,CheckMenuItem,HMENU,a,WORD,b,WORD,c) Fc(BOOL,CheckMenuItem,HMENU,a,WORD,b,WORD,c)
@ -2645,7 +2757,7 @@ Fc(int,MulDiv,int,a,int,b,int,c)
Fc(int,OffsetClipRgn,HDC,a,short,b,short,c) Fc(int,OffsetClipRgn,HDC,a,short,b,short,c)
Fc(int,OffsetRgn,HRGN,a,short,b,short,c) Fc(int,OffsetRgn,HRGN,a,short,b,short,c)
Fc(int,OpenComm,LPSTR,a,WORD,b,WORD,c) Fc(int,OpenComm,LPSTR,a,WORD,b,WORD,c)
Fc(int,OpenFile,LPSTR,a,LPOFSTRUCT,b,WORD,c) Fc(INT,OpenFile,LPSTR,a,LPOFSTRUCT,b,WORD,c)
Fc(int,ReadComm,int,a,LPSTR,b,int,c) Fc(int,ReadComm,int,a,LPSTR,b,int,c)
Fc(int,SetEnvironment,LPSTR,a,LPSTR,b,WORD,c) Fc(int,SetEnvironment,LPSTR,a,LPSTR,b,WORD,c)
Fc(int,SetVoiceEnvelope,int,a,int,b,int,c) Fc(int,SetVoiceEnvelope,int,a,int,b,int,c)
@ -2655,12 +2767,12 @@ Fc(int,WriteComm,int,a,LPSTR,b,int,c)
Fc(int,wvsprintf,LPSTR,a,LPSTR,b,LPSTR,c) Fc(int,wvsprintf,LPSTR,a,LPSTR,b,LPSTR,c)
Fc(short,SetTextJustification,HDC,a,short,b,short,c) Fc(short,SetTextJustification,HDC,a,short,b,short,c)
Fc(void,AdjustWindowRect,LPRECT,a,DWORD,b,BOOL,c) Fc(void,AdjustWindowRect,LPRECT,a,DWORD,b,BOOL,c)
Fc(void,AnsiToOemBuff,LPSTR,a,LPSTR,b,int,c) Fc(void,AnsiToOemBuff,LPSTR,a,LPSTR,b,INT,c)
Fc(void,CheckDlgButton,HWND,a,WORD,b,WORD,c) Fc(void,CheckDlgButton,HWND,a,WORD,b,WORD,c)
Fc(void,InflateRect,LPRECT,a,short,b,short,c) Fc(void,InflateRect,LPRECT,a,short,b,short,c)
Fc(void,InvalidateRect,HWND,a,LPRECT,b,BOOL,c) Fc(void,InvalidateRect,HWND,a,LPRECT,b,BOOL,c)
Fc(void,InvalidateRgn,HWND,a,HRGN,b,BOOL,c) Fc(void,InvalidateRgn,HWND,a,HRGN,b,BOOL,c)
Fc(void,OemToAnsiBuff,LPSTR,a,LPSTR,b,int,c) Fc(void,OemToAnsiBuff,LPSTR,a,LPSTR,b,INT,c)
Fc(void,OffsetRect,LPRECT,a,short,b,short,c) Fc(void,OffsetRect,LPRECT,a,short,b,short,c)
Fc(void,SetDlgItemText,HWND,a,WORD,b,LPSTR,c) Fc(void,SetDlgItemText,HWND,a,WORD,b,LPSTR,c)
Fc(void,SetSysColors,int,a,LPINT,b,COLORREF*,c) Fc(void,SetSysColors,int,a,LPINT,b,COLORREF*,c)
@ -2683,10 +2795,12 @@ Fd(BOOL,RedrawWindow,HWND,a,LPRECT,b,HRGN,c,UINT,d)
Fd(BOOL,SetBitmapDimensionEx,HBITMAP,a,short,b,short,c,LPSIZE,d) Fd(BOOL,SetBitmapDimensionEx,HBITMAP,a,short,b,short,c,LPSIZE,d)
Fd(BOOL,WinHelp,HWND,hwndMain,LPSTR,lpszHelp,WORD,usCommand,DWORD,ulData) Fd(BOOL,WinHelp,HWND,hwndMain,LPSTR,lpszHelp,WORD,usCommand,DWORD,ulData)
Fd(BOOL,WritePrivateProfileString,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d) Fd(BOOL,WritePrivateProfileString,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d)
Fd(DWORD,DefHookProc,int,a,WORD,b,DWORD,c,FARPROC FAR*,d) Fd(DWORD,DefHookProc,short,a,WORD,b,DWORD,c,HHOOK FAR*,d)
Fd(DWORD,CallNextHookEx,HHOOK,a,short,b,WPARAM,c,LPARAM,d)
Fd(COLORREF,SetPixel,HDC,a,short,b,short,c,COLORREF,d) Fd(COLORREF,SetPixel,HDC,a,short,b,short,c,COLORREF,d)
Fd(HDC,CreateDC,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d) Fd(HDC,CreateDC,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d)
Fd(HDC,CreateIC,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d) Fd(HDC,CreateIC,LPSTR,a,LPSTR,b,LPSTR,c,LPSTR,d)
Fd(HHOOK,SetWindowsHookEx,short,a,HOOKPROC,b,HINSTANCE,c,HTASK,d)
Fd(HRGN,CreateEllipticRgn,short,a,short,b,short,c,short,d) Fd(HRGN,CreateEllipticRgn,short,a,short,b,short,c,short,d)
Fd(HRGN,CreatePolyPolygonRgn,LPPOINT,a,LPINT,b,short,c,short,d) Fd(HRGN,CreatePolyPolygonRgn,LPPOINT,a,LPINT,b,short,c,short,d)
Fd(HRGN,CreateRectRgn,short,a,short,b,short,c,short,d) Fd(HRGN,CreateRectRgn,short,a,short,b,short,c,short,d)
@ -2713,7 +2827,7 @@ Fd(int,DialogBoxIndirect,HANDLE,a,HANDLE,b,HWND,c,FARPROC,d)
Fd(int,EnumFonts,HDC,a,LPSTR,b,FARPROC,c,LPSTR,d) Fd(int,EnumFonts,HDC,a,LPSTR,b,FARPROC,c,LPSTR,d)
Fd(int,EnumObjects,HDC,a,int,b,FARPROC,c,LPSTR,d) Fd(int,EnumObjects,HDC,a,int,b,FARPROC,c,LPSTR,d)
Fd(int,GetDlgItemText,HWND,a,WORD,b,LPSTR,c,WORD,d) Fd(int,GetDlgItemText,HWND,a,WORD,b,LPSTR,c,WORD,d)
Fd(int,GetTempFileName,BYTE,a,LPCSTR,b,UINT,c,LPSTR,d) Fd(INT,GetTempFileName,BYTE,a,LPCSTR,b,UINT,c,LPSTR,d)
Fd(int,LoadString,HANDLE,a,WORD,b,LPSTR,c,int,d) Fd(int,LoadString,HANDLE,a,WORD,b,LPSTR,c,int,d)
Fd(int,MessageBox,HWND,a,LPSTR,b,LPSTR,c,WORD,d) Fd(int,MessageBox,HWND,a,LPSTR,b,LPSTR,c,WORD,d)
Fd(int,SetScrollPos,HWND,a,int,b,int,c,BOOL,d) Fd(int,SetScrollPos,HWND,a,int,b,int,c,BOOL,d)
@ -2789,7 +2903,7 @@ Fh(int,ScrollWindowEx,HWND,a,short,b,short,c,LPRECT,d,LPRECT,e,HRGN,f,LPRECT,g,W
Fi(BOOL,Arc,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd) Fi(BOOL,Arc,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd)
Fi(BOOL,Chord,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd) Fi(BOOL,Chord,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd)
Fi(BOOL,BitBlt,HDC,a,short,b,short,c,short,d,short,e,HDC,f,short,g,short,h,DWORD,i) Fi(BOOL,BitBlt,HDC,a,short,b,short,c,short,d,short,e,HDC,f,short,g,short,h,DWORD,i)
Fi(BOOL,GrayString,HDC,a,HBRUSH,b,FARPROC,c,DWORD,d,int,e,int,f,int,g,int,h,int,i) Fi(BOOL,GrayString,HDC,a,HBRUSH,b,FARPROC,gsprc,LPARAM,lParam,INT,cch,INT,x,INT,y,INT,cx,INT,cy)
Fi(BOOL,Pie,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd) Fi(BOOL,Pie,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,yStart,int,xEnd,int,yEnd)
Fk(HWND,CreateWindow,LPSTR,szAppName,LPSTR,Label,DWORD,ol,short,x,short,y,short,w,short,h,HWND,d,HMENU,e,,HANDLE i,LPSTR,g) Fk(HWND,CreateWindow,LPSTR,szAppName,LPSTR,Label,DWORD,ol,short,x,short,y,short,w,short,h,HWND,d,HMENU,e,,HANDLE i,LPSTR,g)
Fk(BOOL,StretchBlt,HDC,a,short,b,short,c,short,d,short,e,HDC,f,short,g,short,h,short,i,short,j,DWORD,k) Fk(BOOL,StretchBlt,HDC,a,short,b,short,c,short,d,short,e,HDC,f,short,g,short,h,short,i,short,j,DWORD,k)

View File

@ -32,7 +32,8 @@ struct w_files
extern struct w_files * wine_files; extern struct w_files * wine_files;
#define MAX_DOS_DRIVES 26 extern char *WineIniFileName(void);
extern char *WinIniFileName(void);
#define WINE_INI WineIniFileName() #define WINE_INI WineIniFileName()
#define WIN_INI WinIniFileName() #define WIN_INI WinIniFileName()

View File

@ -79,7 +79,9 @@ struct sockproto {
* Maximum queue length specifiable by listen. * Maximum queue length specifiable by listen.
*/ */
#define SOMAXCONN 5 #define SOMAXCONN 5
#define MSG_DONTROUTE 0x4 /* send without using routing tables */ #define MSG_DONTROUTE 0x4 /* send without using routing tables */
#define MSG_MAXIOVLEN 16 #define MSG_MAXIOVLEN 16
/* /*
@ -188,51 +190,6 @@ struct sockproto {
/* no address, look for MX record */ /* no address, look for MX record */
#define WSANO_ADDRESS WSANO_DATA #define WSANO_ADDRESS WSANO_DATA
/*
* Windows Sockets errors redefined as regular Berkeley error constants
* AAARGH! *
#define EWOULDBLOCK WSAEWOULDBLOCK
#define EINPROGRESS WSAEINPROGRESS
#define EALREADY WSAEALREADY
#define ENOTSOCK WSAENOTSOCK
#define EDESTADDRREQ WSAEDESTADDRREQ
#define EMSGSIZE WSAEMSGSIZE
#define EPROTOTYPE WSAEPROTOTYPE
#define ENOPROTOOPT WSAENOPROTOOPT
#define EPROTONOSUPPORT WSAEPROTONOSUPPORT
#define ESOCKTNOSUPPORT WSAESOCKTNOSUPPORT
#define EOPNOTSUPP WSAEOPNOTSUPP
#define EPFNOSUPPORT WSAEPFNOSUPPORT
#define EAFNOSUPPORT WSAEAFNOSUPPORT
#define EADDRINUSE WSAEADDRINUSE
#define EADDRNOTAVAIL WSAEADDRNOTAVAIL
#define ENETDOWN WSAENETDOWN
#define ENETUNREACH WSAENETUNREACH
#define ENETRESET WSAENETRESET
#define ECONNABORTED WSAECONNABORTED
#define ECONNRESET WSAECONNRESET
#define ENOBUFS WSAENOBUFS
#define EISCONN WSAEISCONN
#define ENOTCONN WSAENOTCONN
#define ESHUTDOWN WSAESHUTDOWN
#define ETOOMANYREFS WSAETOOMANYREFS
#define ETIMEDOUT WSAETIMEDOUT
#define ECONNREFUSED WSAECONNREFUSED
#define ELOOP WSAELOOP
#define ENAMETOOLONG WSAENAMETOOLONG
#define EHOSTDOWN WSAEHOSTDOWN
#define EHOSTUNREACH WSAEHOSTUNREACH
#define ENOTEMPTY WSAENOTEMPTY
#define EPROCLIM WSAEPROCLIM
#define EUSERS WSAEUSERS
#define EDQUOT WSAEDQUOT
#define ESTALE WSAESTALE
#define EREMOTE WSAEREMOTE
*/
/* Socket function prototypes */ /* Socket function prototypes */
#ifdef __cplusplus #ifdef __cplusplus
@ -241,51 +198,50 @@ extern "C" {
/* Microsoft Windows Extension function prototypes */ /* Microsoft Windows Extension function prototypes */
int PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData); INT PASCAL FAR WSAStartup(WORD wVersionRequired, LPWSADATA lpWSAData);
int PASCAL FAR WSACleanup(void); INT PASCAL FAR WSACleanup(void);
void PASCAL FAR WSASetLastError(int iError); void PASCAL FAR WSASetLastError(INT iError);
int PASCAL FAR WSAGetLastError(void); INT PASCAL FAR WSAGetLastError(void);
BOOL PASCAL FAR WSAIsBlocking(void); BOOL PASCAL FAR WSAIsBlocking(void);
int PASCAL FAR WSAUnhookBlockingHook(void); INT PASCAL FAR WSAUnhookBlockingHook(void);
FARPROC PASCAL FAR WSASetBlockingHook(FARPROC lpBlockFunc); FARPROC PASCAL FAR WSASetBlockingHook(FARPROC lpBlockFunc);
int PASCAL FAR WSACancelBlockingCall(void); INT PASCAL FAR WSACancelBlockingCall(void);
HANDLE PASCAL FAR WSAAsyncGetServByName(HWND hWnd, u_int wMsg, HANDLE PASCAL FAR WSAAsyncGetServByName(HWND hWnd, u_int wMsg,
const char FAR * name, const char FAR *name,
const char FAR * proto, const char FAR *proto,
char FAR * buf, int buflen); char FAR *buf, INT buflen);
HANDLE PASCAL FAR WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, int port, HANDLE PASCAL FAR WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, INT port,
const char FAR * proto, char FAR * buf, const char FAR *proto, char FAR *buf,
int buflen); INT buflen);
HANDLE PASCAL FAR WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg, HANDLE PASCAL FAR WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg,
const char FAR * name, char FAR * buf, const char FAR *name, char FAR *buf,
int buflen); INT buflen);
HANDLE PASCAL FAR WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg, HANDLE PASCAL FAR WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg,
int number, char FAR * buf, INT number, char FAR *buf,
int buflen); INT buflen);
HANDLE PASCAL FAR WSAAsyncGetHostByName(HWND hWnd, u_int wMsg, HANDLE PASCAL FAR WSAAsyncGetHostByName(HWND hWnd, u_int wMsg,
const char FAR * name, char FAR * buf, const char FAR *name, char FAR *buf,
int buflen); INT buflen);
HANDLE PASCAL FAR WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, HANDLE PASCAL FAR WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg,
const char FAR * addr, int len, int type, const char FAR *addr, INT len, INT type,
const char FAR * buf, int buflen); char FAR *buf, INT buflen);
int PASCAL FAR WSACancelAsyncRequest(HANDLE hAsyncTaskHandle); INT PASCAL FAR WSACancelAsyncRequest(HANDLE hAsyncTaskHandle);
int PASCAL FAR WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg, INT PASCAL FAR WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg, long lEvent);
long lEvent);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -10,6 +10,7 @@ SRCS = \
signal.c \ signal.c \
library.c \ library.c \
resource.c \ resource.c \
task.c \
wine.c wine.c
OBJS = $(SRCS:.c=.o) OBJS = $(SRCS:.c=.o)

View File

@ -1,3 +1,8 @@
/*
* Modules & Libraries functions
*/
static char Copyright[] = "Copyright Martin Ayotte, 1994";
#ifndef WINELIB #ifndef WINELIB
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -10,30 +15,25 @@
#include "windows.h" #include "windows.h"
#include "wine.h" #include "wine.h"
#include "dlls.h" #include "dlls.h"
#include "task.h"
typedef struct module_table_entry typedef struct {
{ LPSTR ModuleName;
LPSTR FileName;
WORD Count;
HANDLE hModule;
HINSTANCE hInst; HINSTANCE hInst;
LPSTR name; void *lpPrevModule;
WORD count; void *lpNextModule;
} MODULEENTRY; } MODULEENTRY;
typedef MODULEENTRY *LPMODULEENTRY;
static LPMODULEENTRY lpModList = NULL;
extern struct w_files * wine_files; extern struct w_files * wine_files;
#define N_BUILTINS 10 #define N_BUILTINS 10
extern struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS]; extern struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS];
/**********************************************************************
* GetCurrentTask [KERNEL.36]
*/
HTASK GetCurrentTask()
{
int pid = getpid();
printf("GetCurrentTask() returned %d !\n", pid);
return pid;
}
/********************************************************************** /**********************************************************************
* GetModuleHandle [KERNEL.47] * GetModuleHandle [KERNEL.47]
@ -100,10 +100,44 @@ int GetModuleFileName(HANDLE hModule, LPSTR lpFileName, short nSize)
HANDLE LoadLibrary(LPSTR libname) HANDLE LoadLibrary(LPSTR libname)
{ {
HANDLE hModule; HANDLE hModule;
LPMODULEENTRY lpMod = lpModList;
LPMODULEENTRY lpNewMod;
printf("LoadLibrary '%s'\n", libname); printf("LoadLibrary '%s'\n", libname);
hModule = LoadImage(libname, DLL); if (lpMod != NULL) {
printf("LoadLibrary returned hModule=%04X\n", hModule); while (TRUE) {
return hModule; if (strcmp(libname, lpMod->FileName) == 0) {
lpMod->Count++;
printf("LoadLibrary // already loaded hInst=%04X\n", lpMod->hInst);
return lpMod->hInst;
}
if (lpMod->lpNextModule == NULL) break;
lpMod = lpMod->lpNextModule;
}
}
hModule = GlobalAlloc(GMEM_MOVEABLE, sizeof(MODULEENTRY));
lpNewMod = (LPMODULEENTRY) GlobalLock(hModule);
#ifdef DEBUG_LIBRARY
printf("LoadLibrary // creating new module entry %08X\n", lpNewMod);
#endif
if (lpNewMod == NULL) return 0;
if (lpModList == NULL) {
lpModList = lpNewMod;
lpNewMod->lpPrevModule = NULL;
}
else {
lpMod->lpNextModule = lpNewMod;
lpNewMod->lpPrevModule = lpMod;
}
lpNewMod->lpNextModule = NULL;
lpNewMod->hModule = hModule;
lpNewMod->ModuleName = NULL;
lpNewMod->FileName = (LPSTR) malloc(strlen(libname));
if (lpNewMod->FileName != NULL) strcpy(lpNewMod->FileName, libname);
lpNewMod->hInst = LoadImage(libname, DLL);
lpNewMod->Count = 1;
printf("LoadLibrary returned Library hInst=%04X\n", lpNewMod->hInst);
GlobalUnlock(hModule);
return lpNewMod->hInst;
} }
@ -112,8 +146,24 @@ HANDLE LoadLibrary(LPSTR libname)
*/ */
void FreeLibrary(HANDLE hLib) void FreeLibrary(HANDLE hLib)
{ {
LPMODULEENTRY lpMod = lpModList;
printf("FreeLibrary(%04X);\n", hLib); printf("FreeLibrary(%04X);\n", hLib);
while (lpMod != NULL) {
if (lpMod->hInst == hLib) {
if (lpMod->Count == 1) {
if (hLib != (HANDLE)NULL) GlobalFree(hLib); if (hLib != (HANDLE)NULL) GlobalFree(hLib);
if (lpMod->ModuleName != NULL) free(lpMod->ModuleName);
if (lpMod->FileName != NULL) free(lpMod->FileName);
GlobalFree(lpMod->hModule);
printf("FreeLibrary // freed !\n");
return;
}
lpMod->Count--;
printf("FreeLibrary // Count decremented !\n");
return;
}
lpMod = lpMod->lpNextModule;
}
} }
@ -128,26 +178,39 @@ FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
int ordinal, len; int ordinal, len;
char * cpnt; char * cpnt;
char C[128]; char C[128];
if (hModule == 0) { HTASK hTask;
printf("GetProcAddress: Bad Module handle=%#04X\n", hModule); LPTASKENTRY lpTask;
return NULL;
}
if (hModule >= 0xF000) { if (hModule >= 0xF000) {
if ((int) proc_name & 0xffff0000) { if ((int) proc_name & 0xffff0000) {
printf("GetProcAddress: builtin %#04x, '%s'\n", hModule, proc_name); printf("GetProcAddress: builtin %#04X, '%s'\n",
hModule, proc_name);
/* wOrdin = FindOrdinalFromName(struct dll_table_entry_s *dll_table, proc_name); */ /* wOrdin = FindOrdinalFromName(struct dll_table_entry_s *dll_table, proc_name); */
} }
else { else {
printf("GetProcAddress: builtin %#04x, %d\n", hModule, (int) proc_name); printf("GetProcAddress: builtin %#04X, %d\n",
hModule, (int)proc_name);
} }
return NULL; return NULL;
} }
if (hModule == 0) {
hTask = GetCurrentTask();
printf("GetProcAddress // GetCurrentTask()=%04X\n", hTask);
lpTask = (LPTASKENTRY) GlobalLock(hTask);
if (lpTask == NULL) {
printf("GetProcAddress: can't find current module handle !\n");
return NULL;
}
hModule = lpTask->hInst;
printf("GetProcAddress: current module=%04X instance=%04X!\n",
lpTask->hModule, lpTask->hInst);
GlobalUnlock(hTask);
}
while (w && w->hinstance != hModule) w = w->next; while (w && w->hinstance != hModule) w = w->next;
printf("GetProcAddress // Module Found ! w->filename='%s'\n", w->filename);
if (w == NULL) return NULL; if (w == NULL) return NULL;
if ((int) proc_name & 0xffff0000) { printf("GetProcAddress // Module Found ! w->filename='%s'\n", w->filename);
if ((int)proc_name & 0xFFFF0000) {
AnsiUpper(proc_name); AnsiUpper(proc_name);
printf("GetProcAddress: %#04x, '%s'\n", hModule, proc_name); printf("GetProcAddress: %04X, '%s'\n", hModule, proc_name);
cpnt = w->nrname_table; cpnt = w->nrname_table;
while(TRUE) { while(TRUE) {
if (((int) cpnt) - ((int)w->nrname_table) > if (((int) cpnt) - ((int)w->nrname_table) >
@ -155,11 +218,19 @@ FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
len = *cpnt++; len = *cpnt++;
strncpy(C, cpnt, len); strncpy(C, cpnt, len);
C[len] = '\0'; C[len] = '\0';
#ifdef DEBUG_MODULE
printf("pointing Function '%s' !\n", C); printf("pointing Function '%s' !\n", C);
if (strncmp(cpnt, proc_name, len) == 0) break; #endif
if (strncmp(cpnt, proc_name, len) == 0) {
ordinal = *((unsigned short *) (cpnt + len));
break;
}
cpnt += len + 2; cpnt += len + 2;
}; };
ordinal = *((unsigned short *) (cpnt + len)); if (ordinal == 0) {
printf("GetProcAddress // function '%s' not found !\n", proc_name);
return NULL;
}
} }
else { else {
printf("GetProcAddress: %#04x, %d\n", hModule, (int) proc_name); printf("GetProcAddress: %#04x, %d\n", hModule, (int) proc_name);
@ -167,13 +238,13 @@ FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
} }
ret = GetEntryPointFromOrdinal(w, ordinal); ret = GetEntryPointFromOrdinal(w, ordinal);
if (ret == -1) { if (ret == -1) {
printf("GetProcAddress // Function not found !\n"); printf("GetProcAddress // Function #%d not found !\n", ordinal);
return NULL; return NULL;
} }
addr = ret & 0xffff; addr = ret & 0xffff;
sel = (ret >> 16); sel = (ret >> 16);
printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n", ret, sel, addr); printf("GetProcAddress // ret=%08X sel=%04X addr=%04X\n", ret, sel, addr);
return ret; return (FARPROC) ret;
} }
#endif /* ifndef WINELIB */ #endif /* ifndef WINELIB */

159
loader/task.c Normal file
View File

@ -0,0 +1,159 @@
/*
* Tasks functions
*/
static char Copyright[] = "Copyright Martin Ayotte, 1994";
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "windows.h"
#include "wine.h"
#include "task.h"
static LPTASKENTRY lpTaskList = NULL;
static int nTaskCount = 0;
/**********************************************************************
* GetCurrentTask [KERNEL.36]
*/
HTASK GetCurrentTask()
{
LPTASKENTRY lpTask = lpTaskList;
int pid = getpid();
printf("GetCurrentTask() // unix_pid=%08X !\n", pid);
if (lpTask == NULL) return 0;
while (TRUE) {
printf("GetCurrentTask() // searching lpTask->unix_pid=%08 !\n", lpTask->unix_pid);
if (lpTask->unix_pid == pid) break;
if (lpTask->lpNextTask == NULL) return 0;
lpTask = lpTask->lpNextTask;
}
printf("GetCurrentTask() returned hTask=%04X !\n", lpTask->hTask);
return lpTask->hTask;
}
/**********************************************************************
* GetNumTasks [KERNEL.152]
*/
WORD GetNumTasks()
{
printf("GetNumTasks() returned %d !\n", nTaskCount);
return nTaskCount;
}
/**********************************************************************
* GetWindowTask [USER.224]
*/
HTASK GetWindowTask(HWND hWnd)
{
printf("GetWindowTask(%04X) !\n", hWnd);
return 0;
}
/**********************************************************************
* EnumTaskWindows [USER.225]
*/
BOOL EnumTaskWindows(HANDLE hTask, FARPROC lpEnumFunc, LONG lParam)
{
printf("EnumTaskWindows(%04X, %08X, %08X) !\n", hTask, lpEnumFunc, lParam);
return FALSE;
}
/**********************************************************************
* CreateNewTask [internal]
*/
HANDLE CreateNewTask(HINSTANCE hInst)
{
HANDLE hTask;
LPTASKENTRY lpTask = lpTaskList;
LPTASKENTRY lpNewTask;
if (lpTask != NULL) {
while (TRUE) {
if (lpTask->lpNextTask == NULL) break;
lpTask = lpTask->lpNextTask;
}
}
hTask = GlobalAlloc(GMEM_MOVEABLE, sizeof(TASKENTRY));
lpNewTask = (LPTASKENTRY) GlobalLock(hTask);
#ifdef DEBUG_TASK
printf("CreateNewTask entry allocated %08X\n", lpNewTask);
#endif
if (lpNewTask == NULL) return 0;
if (lpTaskList == NULL) {
lpTaskList = lpNewTask;
lpNewTask->lpPrevTask = NULL;
}
else {
lpTask->lpNextTask = lpNewTask;
lpNewTask->lpPrevTask = lpTask;
}
lpNewTask->lpNextTask = NULL;
lpNewTask->hIcon = 0;
lpNewTask->hModule = 0;
lpNewTask->hTask = hTask;
lpNewTask->lpWndList = (HWND *) malloc(MAXWIN_PER_TASK * sizeof(HWND));
if (lpNewTask->lpWndList != NULL)
memset((LPSTR)lpNewTask->lpWndList, 0, MAXWIN_PER_TASK * sizeof(HWND));
lpNewTask->hInst = hInst;
lpNewTask->unix_pid = getpid();
printf("CreateNewTask // unix_pid=%08X return hTask=%04X\n",
lpNewTask->unix_pid, hTask);
GlobalUnlock(hTask);
return hTask;
}
/**********************************************************************
* AddWindowToTask [internal]
*/
BOOL AddWindowToTask(HTASK hTask, HWND hWnd)
{
HWND *wptr;
int count = 0;
LPTASKENTRY lpTask = lpTaskList;
printf("AddWindowToTask(%04X, %04X); !\n", hTask, hWnd);
while (TRUE) {
if (lpTask->hTask == hTask) break;
if (lpTask == NULL) return FALSE;
lpTask = lpTask->lpNextTask;
}
wptr = lpTask->lpWndList;
if (wptr == NULL) return FALSE;
while (*(wptr++) != 0) {
if (++count >= MAXWIN_PER_TASK) return FALSE;
}
*wptr = hWnd;
return TRUE;
}
/**********************************************************************
* RemoveWindowFromTask [internal]
*/
BOOL RemoveWindowFromTask(HTASK hTask, HWND hWnd)
{
HWND *wptr;
int count = 0;
LPTASKENTRY lpTask = lpTaskList;
printf("AddWindowToTask(%04X, %04X); !\n", hTask, hWnd);
while (TRUE) {
if (lpTask->hTask == hTask) break;
if (lpTask == NULL) return FALSE;
lpTask = lpTask->lpNextTask;
}
wptr = lpTask->lpWndList;
if (wptr == NULL) return FALSE;
while (*(wptr++) != hWnd) {
if (++count >= MAXWIN_PER_TASK) return FALSE;
}
*wptr = 0;
return TRUE;
}

View File

@ -49,6 +49,7 @@ HINSTANCE hSysRes;
static char *DLL_Extensions[] = { "dll", "exe", NULL }; static char *DLL_Extensions[] = { "dll", "exe", NULL };
static char *EXE_Extensions[] = { "exe", NULL }; static char *EXE_Extensions[] = { "exe", NULL };
static char *WinePath = NULL;
FILE *SpyFp = NULL; FILE *SpyFp = NULL;
@ -154,7 +155,6 @@ HINSTANCE LoadImage(char *modulename, int filetype)
wpnt1->next = wpnt; wpnt1->next = wpnt;
}; };
wpnt->next = NULL; wpnt->next = NULL;
wpnt->resnamtab = (RESNAMTAB *) -1;
/* /*
* Open file for reading. * Open file for reading.
@ -248,6 +248,8 @@ HINSTANCE LoadImage(char *modulename, int filetype)
*/ */
for(i=0; i<wpnt->ne_header->n_mod_ref_tab; i++){ for(i=0; i<wpnt->ne_header->n_mod_ref_tab; i++){
char buff[14]; char buff[14];
char buff2[256];
int fd, j;
GetModuleName(wpnt, i + 1, buff); GetModuleName(wpnt, i + 1, buff);
#ifndef WINELIB #ifndef WINELIB
@ -263,27 +265,38 @@ return(wpnt->hinstance);
} }
#ifndef WINELIB
/********************************************************************** /**********************************************************************
* main * main
*/ */
int _WinMain(int argc, char **argv) _WinMain(int argc, char **argv)
{ {
int segment; int segment;
char *p; char *p;
char *sysresname; char *sysresname;
char filename[100]; char filename[100];
char syspath[256];
char exe_path[256];
#ifdef WINESTAT #ifdef WINESTAT
char * cp; char * cp;
#endif #endif
struct w_files * wpnt; struct w_files * wpnt;
int cs_reg, ds_reg, ss_reg, ip_reg, sp_reg; int cs_reg, ds_reg, ss_reg, ip_reg, sp_reg;
int i;
int rv; int rv;
Argc = argc - 1; Argc = argc - 1;
Argv = argv + 1; Argv = argv + 1;
if (LoadImage(Argv[0], EXE) == (HINSTANCE) NULL ) { WinePath = malloc(1024);
getcwd(WinePath, 512);
if ((p = getenv("WINEPATH")) != NULL) {
strcat(WinePath, ";");
strcat(WinePath, p);
}
if ((hInstMain = LoadImage(Argv[0], EXE)) == (HINSTANCE) NULL ) {
fprintf(stderr, "wine: can't find %s!.\n", Argv[0]); fprintf(stderr, "wine: can't find %s!.\n", Argv[0]);
exit(1); exit(1);
} }
@ -380,7 +393,6 @@ void InitializeLoadedDLLs()
} }
} }
} }
#endif
/********************************************************************** /**********************************************************************
@ -390,8 +402,10 @@ char *
GetImportedName(int fd, struct mz_header_s *mz_header, GetImportedName(int fd, struct mz_header_s *mz_header,
struct ne_header_s *ne_header, int name_offset, char *buffer) struct ne_header_s *ne_header, int name_offset, char *buffer)
{ {
char *p;
int length; int length;
int status; int status;
int i;
status = lseek(fd, mz_header->ne_offset + ne_header->iname_tab_offset + status = lseek(fd, mz_header->ne_offset + ne_header->iname_tab_offset +
name_offset, SEEK_SET); name_offset, SEEK_SET);
@ -412,6 +426,7 @@ GetModuleName(struct w_files * wpnt, int index, char *buffer)
int fd = wpnt->fd; int fd = wpnt->fd;
struct mz_header_s *mz_header = wpnt->mz_header; struct mz_header_s *mz_header = wpnt->mz_header;
struct ne_header_s *ne_header = wpnt->ne_header; struct ne_header_s *ne_header = wpnt->ne_header;
char *p;
int length; int length;
WORD name_offset, status; WORD name_offset, status;
int i; int i;
@ -699,4 +714,16 @@ FixupSegment(struct w_files * wpnt, int segment_num)
return 0; return 0;
} }
/**********************************************************************
* GetProcAddress
*/
FARPROC GetProcAddress(HINSTANCE hinstance, char *proc_name)
{
if ((int) proc_name & 0xffff0000)
printf("GetProcAddress: %#04x, '%s'\n", hinstance, proc_name);
else
printf("GetProcAddress: %#04x, %d\n", hinstance, (int) proc_name);
return NULL;
}
#endif #endif

View File

@ -15,7 +15,9 @@ SRCS = \
main.c \ main.c \
message.c \ message.c \
profile.c \ profile.c \
property.c \
rect.c \ rect.c \
shell.c \
sound.c \ sound.c \
spy.c \ spy.c \
stress.c \ stress.c \

97
misc/audio.c Normal file
View File

@ -0,0 +1,97 @@
/*
* Sample Wine Driver for Linux
*
* Copyright 1994 Martin Ayotte
*/
static char Copyright[] = "Copyright Martin Ayotte, 1994";
#include "stdio.h"
#include "windows.h"
#include "win.h"
#include "user.h"
#include "driver.h"
#include "mmsystem.h"
/**************************************************************************
* DriverProc [sample driver]
*/
LRESULT DriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
DWORD dwParam1, DWORD dwParam2)
{
switch(wMsg) {
case DRV_LOAD:
return (LRESULT)1L;
case DRV_FREE:
return (LRESULT)1L;
case DRV_OPEN:
return (LRESULT)1L;
case DRV_CLOSE:
return (LRESULT)1L;
case DRV_ENABLE:
return (LRESULT)1L;
case DRV_DISABLE:
return (LRESULT)1L;
case DRV_QUERYCONFIGURE:
return (LRESULT)1L;
case DRV_CONFIGURE:
MessageBox((HWND)NULL, "Sample MultiMedia Linux Driver !",
"MMLinux Driver", MB_OK);
return (LRESULT)1L;
case DRV_INSTALL:
return (LRESULT)DRVCNF_RESTART;
case DRV_REMOVE:
return (LRESULT)DRVCNF_RESTART;
default:
return DefDriverProc(dwDevID, hDriv, wMsg, dwParam1, dwParam2);
}
}
/**************************************************************************
* wodMessage [sample driver]
*/
DWORD wodMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
{
}
/**************************************************************************
* widMessage [sample driver]
*/
DWORD widMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
{
}
/**************************************************************************
* auxMessage [sample driver]
*/
DWORD auxMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
{
}
/**************************************************************************
* midMessage [sample driver]
*/
DWORD midMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
{
}
/**************************************************************************
* modMessage [sample driver]
*/
DWORD modMessage(WORD wDevID, WORD wMsg, DWORD dwUser,
DWORD dwParam1, DWORD dwParam2)
{
}
/*
BOOL DriverCallback(DWORD dwCallBack, UINT uFlags, HANDLE hDev,
WORD wMsg, DWORD dwUser, DWORD dwParam1, DWORD dwParam2);
*/

View File

@ -572,8 +572,6 @@ fprintf(stderr,"FindFile: looking for %s\n", filename);
strncat(buffer, "/", buflen - strlen(buffer)); strncat(buffer, "/", buflen - strlen(buffer));
strncat(buffer, f->d_name, buflen - strlen(buffer)); strncat(buffer, f->d_name, buflen - strlen(buffer));
fprintf(stderr,"$$%s$$\n", buffer);
stat(buffer, &filestat); stat(buffer, &filestat);
if (S_ISREG(filestat.st_mode)) { if (S_ISREG(filestat.st_mode)) {
closedir(d); closedir(d);

181
misc/driver.c Normal file
View File

@ -0,0 +1,181 @@
/*
* Wine Drivers functions
*
* Copyright 1994 Martin Ayotte
*/
static char Copyright[] = "Copyright Martin Ayotte, 1994";
#include "stdio.h"
#include "windows.h"
#include "win.h"
#include "user.h"
#include "driver.h"
LPDRIVERITEM lpDrvItemList = NULL;
/**************************************************************************
* SendDriverMessage [USER.251]
*/
LRESULT WINAPI SendDriverMessage(HDRVR hDriver, WORD msg, LPARAM lParam1, LPARAM lParam2)
{
printf("SendDriverMessage(%04X, %04X, %08X, %08X);\n",
hDriver, msg, lParam1, lParam2);
}
/**************************************************************************
* OpenDriver [USER.252]
*/
HDRVR OpenDriver(LPSTR lpDriverName, LPSTR lpSectionName, LPARAM lParam)
{
HDRVR hDrvr;
LPDRIVERITEM lpnewdrv;
LPDRIVERITEM lpdrv = lpDrvItemList;
char DrvName[128];
printf("OpenDriver('%s', '%s', %08X);\n",
lpDriverName, lpSectionName, lParam);
if (lpSectionName == NULL) lpSectionName = "drivers";
GetPrivateProfileString(lpSectionName, lpDriverName,
"", DrvName, sizeof(DrvName), "SYSTEM.INI");
printf("OpenDriver // DrvName='%s'\n", DrvName);
if (strlen(DrvName) < 1) return 0;
while (lpdrv != NULL) {
if (lpdrv->lpNextItem == NULL) break;
lpdrv = lpdrv->lpNextItem;
}
hDrvr = GlobalAlloc(GMEM_MOVEABLE, sizeof(DRIVERITEM));
lpnewdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
if (lpnewdrv == NULL) return 0;
lpnewdrv->dis.length = sizeof(DRIVERINFOSTRUCT);
lpnewdrv->dis.hModule = LoadImage("DrvName", DLL);
if (lpnewdrv->dis.hModule == 0) {
GlobalUnlock(hDrvr);
GlobalFree(hDrvr);
return 0;
}
lpnewdrv->dis.hDriver = hDrvr;
strcpy(lpnewdrv->dis.szAliasName, lpDriverName);
lpnewdrv->count = 0;
lpnewdrv->lpNextItem = NULL;
if (lpDrvItemList == NULL || lpdrv == NULL) {
lpDrvItemList = lpnewdrv;
lpnewdrv->lpPrevItem = NULL;
}
else {
lpdrv->lpNextItem = lpnewdrv;
lpnewdrv->lpPrevItem = lpdrv;
}
lpnewdrv->lpDrvProc = NULL;
printf("OpenDriver // hDrvr=%04X loaded !\n", hDrvr);
return hDrvr;
}
/**************************************************************************
* CloseDriver [USER.253]
*/
LRESULT CloseDriver(HDRVR hDrvr, LPARAM lParam1, LPARAM lParam2)
{
LPDRIVERITEM lpdrv;
printf("CloseDriver(%04X, %08X, %08X);\n", hDrvr, lParam1, lParam2);
lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
if (lpdrv != NULL && lpdrv->dis.hDriver == hDrvr) {
if (lpdrv->lpPrevItem)
((LPDRIVERITEM)lpdrv->lpPrevItem)->lpNextItem = lpdrv->lpNextItem;
if (lpdrv->lpNextItem)
((LPDRIVERITEM)lpdrv->lpNextItem)->lpPrevItem = lpdrv->lpPrevItem;
GlobalUnlock(hDrvr);
GlobalFree(hDrvr);
printf("CloseDriver // hDrvr=%04X closed !\n", hDrvr);
return TRUE;
}
return FALSE;
}
/**************************************************************************
* GetDriverModuleHandle [USER.254]
*/
HANDLE GetDriverModuleHandle(HDRVR hDrvr)
{
LPDRIVERITEM lpdrv;
HANDLE hModule = 0;
printf("GetDriverModuleHandle(%04X);\n", hDrvr);
lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
if (lpdrv != NULL) {
hModule = lpdrv->dis.hModule;
GlobalUnlock(hDrvr);
}
return hModule;
}
/**************************************************************************
* DefDriverProc [USER.255]
*/
LRESULT DefDriverProc(DWORD dwDevID, HDRVR hDriv, WORD wMsg,
DWORD dwParam1, DWORD dwParam2)
{
switch(wMsg) {
case DRV_LOAD:
return (LRESULT)0L;
case DRV_FREE:
return (LRESULT)0L;
case DRV_OPEN:
return (LRESULT)0L;
case DRV_CLOSE:
return (LRESULT)0L;
case DRV_ENABLE:
return (LRESULT)0L;
case DRV_DISABLE:
return (LRESULT)0L;
case DRV_QUERYCONFIGURE:
return (LRESULT)0L;
case DRV_CONFIGURE:
MessageBox((HWND)NULL, "Driver isn't configurable !",
"Wine Driver", MB_OK);
return (LRESULT)0L;
case DRV_INSTALL:
return (LRESULT)DRVCNF_RESTART;
case DRV_REMOVE:
return (LRESULT)DRVCNF_RESTART;
default:
return (LRESULT)0L;
}
}
/**************************************************************************
* GetDriverInfo [USER.256]
*/
BOOL GetDriverInfo(HDRVR hDrvr, LPDRIVERINFOSTRUCT lpDrvInfo)
{
LPDRIVERITEM lpdrv;
printf("GetDriverInfo(%04X, %08X);\n", hDrvr, lpDrvInfo);
if (lpDrvInfo == NULL) return FALSE;
lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
if (lpdrv == NULL) return FALSE;
memcpy(lpDrvInfo, &lpdrv->dis, sizeof(DRIVERINFOSTRUCT));
GlobalUnlock(hDrvr);
return TRUE;
}
/**************************************************************************
* GetNextDriver [USER.257]
*/
HDRVR GetNextDriver(HDRVR hDrvr, DWORD dwFlags)
{
LPDRIVERITEM lpdrv;
HDRVR hRetDrv = 0;
printf("GetNextDriver(%04X, %08X);\n", hDrvr, dwFlags);
lpdrv = (LPDRIVERITEM) GlobalLock(hDrvr);
if (lpdrv != NULL) {
if (dwFlags & GND_REVERSE)
if (lpdrv->lpPrevItem)
hRetDrv = ((LPDRIVERITEM)lpdrv->lpPrevItem)->dis.hDriver;
if (dwFlags & GND_FORWARD)
if (lpdrv->lpNextItem)
hRetDrv = ((LPDRIVERITEM)lpdrv->lpNextItem)->dis.hDriver;
GlobalUnlock(hDrvr);
}
return hRetDrv;
}

View File

@ -24,11 +24,37 @@
#define HELP_MULTIKEY 0x0201 #define HELP_MULTIKEY 0x0201
#define HELP_SETWINPOS 0x0203 #define HELP_SETWINPOS 0x0203
typedef struct {
WORD wEnvSeg;
LPSTR lpCmdLine;
LPVOID lpCmdShow;
DWORD dwReserved;
} PARAMBLOCK;
HANDLE CreateNewTask(HINSTANCE hInst);
/**********************************************************************
* LoadModule [KERNEL.45]
*/
HANDLE LoadModule(LPSTR modulefile, LPVOID lpParamBlk)
{
PARAMBLOCK *pblk = lpParamBlk;
WORD *lpCmdShow;
printf("LoadModule '%s' %08X\n", modulefile, lpParamBlk);
if (lpParamBlk == NULL) return 0;
lpCmdShow = (WORD *)pblk->lpCmdShow;
return WinExec(pblk->lpCmdLine, lpCmdShow[1]);
}
/**********************************************************************
* WinExec [KERNEL.166]
*/
WORD WinExec(LPSTR lpCmdLine, WORD nCmdShow) WORD WinExec(LPSTR lpCmdLine, WORD nCmdShow)
{ {
int X, X2, C; int X, X2, C;
char *ArgV[20]; char *ArgV[20];
HANDLE hTask = 0;
printf("WinExec('%s', %04X)\n", lpCmdLine, nCmdShow); printf("WinExec('%s', %04X)\n", lpCmdLine, nCmdShow);
ArgV[0] = "wine"; ArgV[0] = "wine";
C = 1; C = 1;
@ -50,23 +76,35 @@ WORD WinExec(LPSTR lpCmdLine, WORD nCmdShow)
printf("Can't 'fork' process !\n"); printf("Can't 'fork' process !\n");
break; break;
case 0: case 0:
printf("New process started !\n"); hTask = CreateNewTask(0);
printf("WinExec // New Task hTask=%04X !\n", hTask);
execvp(ArgV[0], ArgV); execvp(ArgV[0], ArgV);
printf("Child process died !\n"); printf("Child process died !\n");
exit(1); exit(1);
break;
default: default:
printf("Main process stay alive !\n"); printf("WinExec (Main process stay alive) hTask=%04X !\n", hTask);
break; break;
} }
for (C = 0; ; C++) { for (C = 0; ; C++) {
if (ArgV[C] == NULL) break; if (ArgV[C] == NULL) break;
free(ArgV[C]); free(ArgV[C]);
} }
return(TRUE); return hTask;
} }
/**********************************************************************
* ExitWindows [USER.7]
*/
BOOL ExitWindows(DWORD dwReserved, WORD wRetCode)
{
printf("EMPTY STUB !!! ExitWindows(%08X, %04X) !\n", dwReserved, wRetCode);
}
/**********************************************************************
* WinHelp [USER.171]
*/
BOOL WinHelp(HWND hWnd, LPSTR lpHelpFile, WORD wCommand, DWORD dwData) BOOL WinHelp(HWND hWnd, LPSTR lpHelpFile, WORD wCommand, DWORD dwData)
{ {
char str[256]; char str[256];

View File

@ -17,7 +17,7 @@
* *
************************************************************************/ ************************************************************************/
#define DEBUG_FILE /* #define DEBUG_FILE */
#include <stdio.h> #include <stdio.h>
#include <fcntl.h> #include <fcntl.h>
@ -34,7 +34,7 @@ char WindowsDirectory[256], SystemDirectory[256], TempDirectory[256];
Emulate the _lopen windows call Emulate the _lopen windows call
***************************************************************************/ ***************************************************************************/
int _lopen (LPSTR lpPathName, int iReadWrite) INT _lopen (LPSTR lpPathName, INT iReadWrite)
{ {
int handle; int handle;
char *UnixFileName; char *UnixFileName;
@ -61,7 +61,7 @@ int _lopen (LPSTR lpPathName, int iReadWrite)
/*************************************************************************** /***************************************************************************
_lread _lread
***************************************************************************/ ***************************************************************************/
WORD _lread (int hFile, LPSTR lpBuffer, int wBytes) WORD _lread (INT hFile, LPSTR lpBuffer, INT wBytes)
{ {
int result; int result;
@ -81,7 +81,7 @@ WORD _lread (int hFile, LPSTR lpBuffer, int wBytes)
/**************************************************************************** /****************************************************************************
_lwrite _lwrite
****************************************************************************/ ****************************************************************************/
WORD _lwrite (int hFile, LPSTR lpBuffer, int wBytes) WORD _lwrite (INT hFile, LPSTR lpBuffer, INT wBytes)
{ {
int result; int result;
@ -100,7 +100,7 @@ WORD _lwrite (int hFile, LPSTR lpBuffer, int wBytes)
/*************************************************************************** /***************************************************************************
_lclose _lclose
***************************************************************************/ ***************************************************************************/
int _lclose (int hFile) INT _lclose (INT hFile)
{ {
#ifdef DEBUG_FILE #ifdef DEBUG_FILE
fprintf(stderr, "_lclose: handle %d\n", hFile); fprintf(stderr, "_lclose: handle %d\n", hFile);
@ -117,7 +117,7 @@ int _lclose (int hFile)
Warning: This is nearly totally untested. It compiles, that's it... Warning: This is nearly totally untested. It compiles, that's it...
-SL 9/13/93 -SL 9/13/93
**************************************************************************/ **************************************************************************/
int OpenFile (LPSTR lpFileName, LPOFSTRUCT ofs, WORD wStyle) INT OpenFile (LPSTR lpFileName, LPOFSTRUCT ofs, WORD wStyle)
{ {
int base,flags; int base,flags;
@ -168,7 +168,7 @@ WORD SetHandleCount (WORD wNumber)
/*************************************************************************** /***************************************************************************
_llseek _llseek
***************************************************************************/ ***************************************************************************/
LONG _llseek (int hFile, LONG lOffset, int nOrigin) LONG _llseek (INT hFile, LONG lOffset, INT nOrigin)
{ {
int origin; int origin;
@ -191,7 +191,7 @@ LONG _llseek (int hFile, LONG lOffset, int nOrigin)
/*************************************************************************** /***************************************************************************
_lcreate _lcreate
***************************************************************************/ ***************************************************************************/
LONG _lcreate (LPSTR lpszFilename, int fnAttribute) INT _lcreate (LPSTR lpszFilename, INT fnAttribute)
{ {
int handle; int handle;
char *UnixFileName; char *UnixFileName;
@ -215,7 +215,7 @@ LONG _lcreate (LPSTR lpszFilename, int fnAttribute)
/*************************************************************************** /***************************************************************************
GetDriveType GetDriveType
***************************************************************************/ ***************************************************************************/
UINT GetDriveType(int drive) UINT GetDriveType(INT drive)
{ {
#ifdef DEBUG_FILE #ifdef DEBUG_FILE
@ -228,7 +228,7 @@ UINT GetDriveType(int drive)
if (drive == 0 || drive == 1) if (drive == 0 || drive == 1)
return DRIVE_REMOVABLE; return DRIVE_REMOVABLE;
return DRIVE_REMOVABLE; return DRIVE_FIXED;
} }
/*************************************************************************** /***************************************************************************
@ -279,7 +279,7 @@ UINT GetSystemDirectory(LPSTR lpszSysPath, UINT cbSysPath)
/*************************************************************************** /***************************************************************************
GetTempFileName GetTempFileName
***************************************************************************/ ***************************************************************************/
int GetTempFileName(BYTE bDriveLetter, LPCSTR lpszPrefixString, UINT uUnique, LPSTR lpszTempFileName) INT GetTempFileName(BYTE bDriveLetter, LPCSTR lpszPrefixString, UINT uUnique, LPSTR lpszTempFileName)
{ {
int unique; int unique;
char tempname[256]; char tempname[256];
@ -292,7 +292,7 @@ int GetTempFileName(BYTE bDriveLetter, LPCSTR lpszPrefixString, UINT uUnique, LP
strcpy(tempname,lpszPrefixString); strcpy(tempname,lpszPrefixString);
tempname[3]='\0'; tempname[3]='\0';
sprintf(lpszTempFileName,"%s\\%s%d.tmp",WindowsDirectory, tempname, sprintf(lpszTempFileName,"%s\\%s%d.tmp", TempDirectory, tempname,
unique); unique);
ToDos(lpszTempFileName); ToDos(lpszTempFileName);
@ -318,46 +318,12 @@ WORD SetErrorMode(WORD x)
***************************************************************************/ ***************************************************************************/
long _hread(int hf, void FAR *hpvBuffer, long cbBuffer) long _hread(int hf, void FAR *hpvBuffer, long cbBuffer)
{ {
long dataread = 0; return read(hf, hpvBuffer, cbBuffer);
size_t status, size;
while (cbBuffer)
{
size = cbBuffer < 30000 ? cbBuffer : 30000;
status = read(hf, hpvBuffer, size);
if (status == -1)
return HFILE_ERROR;
if (status == 0)
return dataread;
dataread += status;
hpvBuffer += status;
cbBuffer -= status;
}
return dataread;
} }
/*************************************************************************** /***************************************************************************
_hwrite _hwrite
***************************************************************************/ ***************************************************************************/
long _hwrite(int hf, const void FAR *hpvBuffer, long cbBuffer) long _hwrite(int hf, const void FAR *hpvBuffer, long cbBuffer)
{ {
long datawritten = 0; return write(hf, hpvBuffer, cbBuffer);
size_t status, size;
while (cbBuffer)
{
size = cbBuffer < 30000 ? cbBuffer : 30000;
status = write(hf, hpvBuffer, size);
if (status == -1)
return HFILE_ERROR;
if (status == 0)
return datawritten;
datawritten += status;
hpvBuffer += status;
cbBuffer -= status;
}
return datawritten;
} }

View File

@ -23,13 +23,13 @@ LPSTR lstrcat(LPSTR target,LPCSTR source)
} }
/* USER.430 */ /* USER.430 */
int lstrcmp(LPCSTR str1,LPCSTR str2) INT lstrcmp(LPCSTR str1,LPCSTR str2)
{ {
return strcmp(str1,str2); return strcmp(str1,str2);
} }
/* USER.471 */ /* USER.471 */
int lstrcmpi(LPCSTR str1,LPCSTR str2) INT lstrcmpi(LPCSTR str1,LPCSTR str2)
{ {
int i; int i;
i=0; i=0;
@ -51,7 +51,7 @@ LPSTR lstrcpyn(LPSTR target,LPCSTR source,int n)
} }
/* KERNEL.90 */ /* KERNEL.90 */
int lstrlen(LPCSTR str) INT lstrlen(LPCSTR str)
{ {
return strlen(str); return strlen(str);
} }
@ -148,7 +148,7 @@ BOOL IsCharLower(char ch)
static char Oem2Ansi[256]; static char Oem2Ansi[256];
static char Ansi2Oem[256]; static char Ansi2Oem[256];
void InitOemAnsiTranslations() void InitOemAnsiTranslations(void)
{ {
static int inited=0; /* should called called in some init function*/ static int inited=0; /* should called called in some init function*/
int transfile,i; int transfile,i;
@ -173,7 +173,7 @@ void InitOemAnsiTranslations()
} }
/* AnsiToOem Keyboard.5 */ /* AnsiToOem Keyboard.5 */
int AnsiToOem(LPSTR lpAnsiStr, LPSTR lpOemStr) /* why is this int ??? */ INT AnsiToOem(LPSTR lpAnsiStr, LPSTR lpOemStr) /* why is this int ??? */
{ {
InitOemAnsiTranslations(); /* should called called in some init function*/ InitOemAnsiTranslations(); /* should called called in some init function*/
while(*lpAnsiStr){ while(*lpAnsiStr){
@ -193,7 +193,7 @@ BOOL OemToAnsi(LPSTR lpOemStr, LPSTR lpAnsiStr) /* why is this BOOL ???? */
} }
/* AnsiToOemBuff Keyboard.134 */ /* AnsiToOemBuff Keyboard.134 */
void AnsiToOemBuff(LPSTR lpAnsiStr, LPSTR lpOemStr, int nLength) void AnsiToOemBuff(LPSTR lpAnsiStr, LPSTR lpOemStr, INT nLength)
{ {
int i; int i;
InitOemAnsiTranslations(); /* should called called in some init function*/ InitOemAnsiTranslations(); /* should called called in some init function*/
@ -202,7 +202,7 @@ void AnsiToOemBuff(LPSTR lpAnsiStr, LPSTR lpOemStr, int nLength)
} }
/* OemToAnsi Keyboard.135 */ /* OemToAnsi Keyboard.135 */
void OemToAnsiBuff(LPSTR lpOemStr, LPSTR lpAnsiStr, int nLength) void OemToAnsiBuff(LPSTR lpOemStr, LPSTR lpAnsiStr, INT nLength)
{ {
int i; int i;
InitOemAnsiTranslations(); /* should called called in some init function*/ InitOemAnsiTranslations(); /* should called called in some init function*/

View File

@ -494,17 +494,7 @@ BOOL SystemParametersInfo (UINT uAction, UINT uParam, void FAR *lpvParam, UINT f
*/ */
void hmemcpy(void FAR *hpvDest, const void FAR *hpvSource, long cbCopy) void hmemcpy(void FAR *hpvDest, const void FAR *hpvSource, long cbCopy)
{ {
size_t copysize; memcpy(hpvDest, hpvSource, cbCopy);
while (cbCopy)
{
copysize = cbCopy < 30000 ? cbCopy : 30000;
memcpy(hpvDest, hpvSource, copysize);
hpvDest += copysize;
hpvSource += copysize;
cbCopy -= copysize;
}
} }
/*********************************************************************** /***********************************************************************

View File

@ -54,13 +54,18 @@ int MessageBox(HWND hWnd, LPSTR str, LPSTR title, WORD type)
DWORD dwStyle; DWORD dwStyle;
HINSTANCE hInst; HINSTANCE hInst;
wndPtr = WIN_FindWndPtr(hWnd); wndPtr = WIN_FindWndPtr(hWnd);
#ifdef DEBUG_MSGBOX if (wndPtr == NULL) {
printf( "MessageBox: '%s'\n", str );
#endif
if (wndPtr == NULL)
hInst = hSysRes; hInst = hSysRes;
else #ifdef DEBUG_MSGBOX
printf("MessageBox(NULL, '%s', '%s', %04X)\n", str, title, type);
#endif
}
else {
hInst = wndPtr->hInstance; hInst = wndPtr->hInstance;
#ifdef DEBUG_MSGBOX
printf("MessageBox(%04X, '%s', '%s', %04X)\n", hWnd, str, title, type);
#endif
}
wndClass.style = CS_HREDRAW | CS_VREDRAW ; wndClass.style = CS_HREDRAW | CS_VREDRAW ;
wndClass.lpfnWndProc = (WNDPROC)SystemMessageBoxProc; wndClass.lpfnWndProc = (WNDPROC)SystemMessageBoxProc;
wndClass.cbClsExtra = 0; wndClass.cbClsExtra = 0;
@ -71,7 +76,10 @@ int MessageBox(HWND hWnd, LPSTR str, LPSTR title, WORD type)
wndClass.hbrBackground = GetStockObject(WHITE_BRUSH); wndClass.hbrBackground = GetStockObject(WHITE_BRUSH);
wndClass.lpszMenuName = NULL; wndClass.lpszMenuName = NULL;
wndClass.lpszClassName = "MESSAGEBOX"; wndClass.lpszClassName = "MESSAGEBOX";
if (!RegisterClass(&wndClass)) return 0; if (!RegisterClass(&wndClass)) {
printf("Unable to Register class 'MESSAGEBOX' !\n");
return 0;
}
memset(&mb, 0, sizeof(MSGBOX)); memset(&mb, 0, sizeof(MSGBOX));
mb.Title = title; mb.Title = title;
mb.Str = str; mb.Str = str;
@ -82,11 +90,28 @@ int MessageBox(HWND hWnd, LPSTR str, LPSTR title, WORD type)
hWndOld = GetFocus(); hWndOld = GetFocus();
hDlg = CreateWindow("MESSAGEBOX", title, dwStyle, 100, 150, 400, 120, hDlg = CreateWindow("MESSAGEBOX", title, dwStyle, 100, 150, 400, 120,
(HWND)NULL, (HMENU)NULL, hInst, (LPSTR)&mb); (HWND)NULL, (HMENU)NULL, hInst, (LPSTR)&mb);
if (hDlg == 0) return 0; if (hDlg == 0) {
printf("Unable to create 'MESSAGEBOX' window !\n");
return 0;
}
#ifdef DEBUG_MSGBOX
printf( "MessageBox // before Msg Loop !\n");
#endif
while(TRUE) { while(TRUE) {
if (!mb.ActiveFlg) break; if (!mb.ActiveFlg) break;
if (!GetMessage(&msg, (HWND)NULL, 0, 0)) break; if (!GetMessage(&msg, (HWND)NULL, 0, 0)) break;
TranslateMessage(&msg); TranslateMessage(&msg);
if ((type & (MB_SYSTEMMODAL | MB_TASKMODAL)) != 0 &&
msg.hwnd != hDlg) {
switch(msg.message) {
case WM_KEYDOWN:
case WM_LBUTTONDOWN:
case WM_MBUTTONDOWN:
case WM_RBUTTONDOWN:
MessageBeep(0);
break;
}
}
DispatchMessage(&msg); DispatchMessage(&msg);
} }
SetFocus(hWndOld); SetFocus(hWndOld);
@ -97,6 +122,7 @@ int MessageBox(HWND hWnd, LPSTR str, LPSTR title, WORD type)
return(mb.wRetVal); return(mb.wRetVal);
} }
LPMSGBOX MsgBoxGetStorageHeader(HWND hwnd) LPMSGBOX MsgBoxGetStorageHeader(HWND hwnd)
{ {
WND *wndPtr; WND *wndPtr;
@ -119,6 +145,7 @@ LONG SystemMessageBoxProc(HWND hWnd, WORD message, WORD wParam, LONG lParam)
CREATESTRUCT *createStruct; CREATESTRUCT *createStruct;
PAINTSTRUCT ps; PAINTSTRUCT ps;
HDC hDC; HDC hDC;
DWORD OldTextColor;
RECT rect; RECT rect;
LPMSGBOX lpmb; LPMSGBOX lpmb;
LPMSGBOX lpmbInit; LPMSGBOX lpmbInit;
@ -230,6 +257,7 @@ LONG SystemMessageBoxProc(HWND hWnd, WORD message, WORD wParam, LONG lParam)
lpmb = MsgBoxGetStorageHeader(hWnd); lpmb = MsgBoxGetStorageHeader(hWnd);
CopyRect(&rect, &lpmb->rectStr); CopyRect(&rect, &lpmb->rectStr);
hDC = BeginPaint(hWnd, &ps); hDC = BeginPaint(hWnd, &ps);
OldTextColor = SetTextColor(hDC, 0x00000000);
if (lpmb->hIcon) if (lpmb->hIcon)
DrawIcon(hDC, lpmb->rectIcon.left, DrawIcon(hDC, lpmb->rectIcon.left,
lpmb->rectIcon.top, lpmb->hIcon); lpmb->rectIcon.top, lpmb->hIcon);
@ -238,7 +266,11 @@ LONG SystemMessageBoxProc(HWND hWnd, WORD message, WORD wParam, LONG lParam)
rect.top = lpmb->rectStr.bottom / 2 - rect.bottom / 2; rect.top = lpmb->rectStr.bottom / 2 - rect.bottom / 2;
rect.bottom = lpmb->rectStr.bottom / 2 + rect.bottom / 2; rect.bottom = lpmb->rectStr.bottom / 2 + rect.bottom / 2;
DrawText(hDC, lpmb->Str, -1, &rect, DT_CENTER | DT_WORDBREAK); DrawText(hDC, lpmb->Str, -1, &rect, DT_CENTER | DT_WORDBREAK);
SetTextColor(hDC, OldTextColor);
EndPaint(hWnd, &ps); EndPaint(hWnd, &ps);
#ifdef DEBUG_MSGBOX
printf("MessageBox End of WM_PAINT !\n");
#endif
break; break;
case WM_DESTROY: case WM_DESTROY:
#ifdef DEBUG_MSGBOX #ifdef DEBUG_MSGBOX

1031
misc/mmsystem.c Normal file

File diff suppressed because it is too large Load Diff

119
misc/network.c Normal file
View File

@ -0,0 +1,119 @@
/*
* Network functions
*/
#include "stdio.h"
#include "windows.h"
#include "win.h"
#include "user.h"
#define WN_SUCCESS 0x0000
#define WN_NOT_SUPPORTED 0x0001
#define WN_NET_ERROR 0x0002
#define WN_MORE_DATA 0x0003
#define WN_BAD_POINTER 0x0004
#define WN_BAD_VALUE 0x0005
#define WN_BAD_PASSWORD 0x0006
#define WN_ACCESS_DENIED 0x0007
#define WN_FUNCTION_BUSY 0x0008
#define WN_WINDOWS_ERROR 0x0009
#define WN_BAD_USER 0x000A
#define WN_OUT_OF_MEMORY 0x000B
#define WN_CANCEL 0x000C
#define WN_CONTINUE 0x000D
#define WN_NOT_CONNECTED 0x0030
#define WN_OPEN_FILES 0x0031
#define WN_BAD_NETNAME 0x0032
#define WN_BAD_LOCALNAME 0x0033
#define WN_ALREADY_CONNECTED 0x0034
#define WN_DEVICE_ERROR 0x0035
#define WN_CONNECTION_CLOSED 0x0036
typedef LPSTR LPNETRESOURCE;
/**************************************************************************
* WNetGetConnection [USER.512]
*/
int WNetGetConnection(LPSTR lpLocalName,
LPSTR lpRemoteName, UINT FAR *cbRemoteName)
{
printf("EMPTY STUB !!! WNetGetConnection('%s', %08X, %08X);\n",
lpLocalName, lpRemoteName, cbRemoteName);
return WN_NET_ERROR;
}
/**************************************************************************
* WNetGetUser [USER.516]
*/
UINT WNetGetUser(LPSTR lpLocalName, LPSTR lpUserName, DWORD *lpSize)
{
printf("EMPTY STUB !!! WNetGetUser('%s', %08X, %08X);\n",
lpLocalName, lpUserName, lpSize);
return WN_NET_ERROR;
}
/**************************************************************************
* WNetAddConnection [USER.517]
*/
UINT WNetAddConnection(LPSTR lpNetPath, LPSTR lpPassWord, LPSTR lpLocalName)
{
printf("EMPTY STUB !!! WNetAddConnection('%s', %08X, '%s');\n",
lpNetPath, lpPassWord, lpLocalName);
return WN_NET_ERROR;
}
/**************************************************************************
* WNetCancelConnection [USER.518]
*/
UINT WNetCancelConnection(LPSTR lpName, BOOL bForce)
{
printf("EMPTY STUB !!! WNetCancelConnection('%s', %04X);\n",
lpName, bForce);
return WN_NET_ERROR;
}
/**************************************************************************
* WNetAddConnection2 [USER.???]
*/
UINT WNetAddConnection2(LPSTR lpNetPath, LPSTR lpPassWord,
LPSTR lpLocalName, LPSTR lpUserName)
{
printf("EMPTY STUB !!! WNetAddConnection2('%s', %08X, '%s', '%s');\n",
lpNetPath, lpPassWord, lpLocalName, lpUserName);
return WN_NET_ERROR;
}
/**************************************************************************
* WNetCloseEnum [USER.???]
*/
UINT WNetCloseEnum(HANDLE hEnum)
{
printf("EMPTY STUB !!! WNetCloseEnum(%04X);\n", hEnum);
return WN_NET_ERROR;
}
/**************************************************************************
* WNetEnumResource [USER.???]
*/
UINT WNetEnumResource(HANDLE hEnum, DWORD cRequ,
DWORD *lpCount, LPVOID lpBuf)
{
printf("EMPTY STUB !!! WNetEnumResource(%04X, %08X, %08X, %08X);\n",
hEnum, cRequ, lpCount, lpBuf);
return WN_NET_ERROR;
}
/**************************************************************************
* WNetOpenEnum [USER.???]
*/
UINT WNetOpenEnum(DWORD dwScope, DWORD dwType,
LPNETRESOURCE lpNet, HANDLE FAR *lphEnum)
{
printf("EMPTY STUB !!! WNetOpenEnum(%08X, %08X, %08X, %08X);\n",
dwScope, dwType, lpNet, lphEnum);
return WN_NET_ERROR;
}

View File

@ -64,15 +64,34 @@ static TSecHeader *is_loaded (char *FileName)
return 0; return 0;
} }
static TSecHeader *load (char *file) static char *GetIniFileName(char *name)
{
char temp[256];
if (strchr(name, '/'))
return name;
if (strchr(name, '\\'))
return GetUnixFileName(name);
GetWindowsDirectory(temp, sizeof(temp) );
strcat(temp, "\\");
strcat(temp, name);
return GetUnixFileName(name);
}
static TSecHeader *load (char *filename)
{ {
FILE *f; FILE *f;
int state; int state;
TSecHeader *SecHeader = 0; TSecHeader *SecHeader = 0;
char CharBuffer [STRSIZE]; char CharBuffer [STRSIZE];
char *next; char *next, *file;
char c; char c;
file = GetIniFileName(filename);
#ifdef DEBUG #ifdef DEBUG
printf("Load %s\n", file); printf("Load %s\n", file);
#endif #endif
@ -82,6 +101,8 @@ static TSecHeader *load (char *file)
#ifdef DEBUG #ifdef DEBUG
printf("Loading %s\n", file); printf("Loading %s\n", file);
#endif #endif
state = FirstBrace; state = FirstBrace;
while ((c = getc (f)) != EOF){ while ((c = getc (f)) != EOF){
if (c == '\r') /* Ignore Carriage Return */ if (c == '\r') /* Ignore Carriage Return */
@ -337,13 +358,13 @@ static void dump_profile (TProfile *p)
if (!p) if (!p)
return; return;
dump_profile (p->link); dump_profile (p->link);
if ((profile = fopen (p->FileName, "w")) != NULL){ if ((profile = fopen (GetIniFileName(p->FileName), "w")) != NULL){
dump_sections (profile, p->Section); dump_sections (profile, p->Section);
fclose (profile); fclose (profile);
} }
} }
void sync_profiles () void sync_profiles (void)
{ {
dump_profile (Base); dump_profile (Base);
} }

197
misc/property.c Normal file
View File

@ -0,0 +1,197 @@
/*
* Windows Properties Functions
*/
static char Copyright[] = "Copyright Martin Ayotte, 1994";
#define DEBUG_PROP
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "windows.h"
#include "heap.h"
#include "win.h"
typedef struct {
LPSTR PropName;
WORD Atom;
HANDLE hData;
void *lpPrevProp;
void *lpNextProp;
} PROPENTRY;
typedef PROPENTRY *LPPROPENTRY;
/*************************************************************************
* RemoveProp [USER.24]
*/
HANDLE RemoveProp(HWND hWnd, LPSTR lpStr)
{
WND *wndPtr;
LPPROPENTRY lpProp;
HANDLE hOldData;
#ifdef DEBUG_PROP
if (((DWORD)lpStr & 0xFFFF0000) == 0L)
printf("RemoveProp(%04X, Atom %04X)\n", hWnd, LOWORD((DWORD)lpStr));
else
printf("RemoveProp(%04X, '%s')\n", hWnd, lpStr);
#endif
wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) {
printf("RemoveProp // Bad Window handle !\n");
return FALSE;
}
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
if (lpProp == NULL) return 0;
while (TRUE) {
if (strcmp(lpProp->PropName, lpStr) == 0) {
printf("RemoveProp // Property found ! hData=%04X\n", lpProp->hData);
hOldData = lpProp->hData;
if (lpProp->lpPrevProp != NULL)
((LPPROPENTRY)lpProp->lpPrevProp)->lpNextProp =
lpProp->lpNextProp;
if (lpProp->lpNextProp != NULL)
((LPPROPENTRY)lpProp->lpNextProp)->lpPrevProp =
lpProp->lpPrevProp;
free(lpProp->PropName);
free(lpProp);
GlobalUnlock(wndPtr->hProp);
return hOldData;
}
if (lpProp->lpNextProp == NULL) break;
lpProp = lpProp->lpNextProp;
}
GlobalUnlock(wndPtr->hProp);
printf("RemoveProp // Property not found !\n");
return 0;
}
/*************************************************************************
* GetProp [USER.25]
*/
HANDLE GetProp(HWND hWnd, LPSTR lpStr)
{
WND *wndPtr;
LPPROPENTRY lpProp;
#ifdef DEBUG_PROP
if (((DWORD)lpStr & 0xFFFF0000) == 0L)
printf("GetProp(%04X, Atom %04X)\n", hWnd, LOWORD((DWORD)lpStr));
else
printf("GetProp(%04X, '%s')\n", hWnd, lpStr);
#endif
wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) {
printf("GetProp // Bad Window handle !\n");
return FALSE;
}
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
if (lpProp == NULL) return 0;
while (TRUE) {
if ((((DWORD)lpStr & 0xFFFF0000) == 0L &&
lpProp->Atom == LOWORD((DWORD)lpStr)) ||
(((DWORD)lpStr & 0xFFFF0000) != 0L &&
strcmp(lpProp->PropName, lpStr) == 0)) {
printf("GetProp // Property found ! hData=%04X\n", lpProp->hData);
GlobalUnlock(wndPtr->hProp);
return lpProp->hData;
}
if (lpProp->lpNextProp == NULL) break;
lpProp = lpProp->lpNextProp;
}
printf("GetProp // Property not found !\n");
GlobalUnlock(wndPtr->hProp);
return 0;
}
/*************************************************************************
* SetProp [USER.26]
*/
BOOL SetProp(HWND hWnd, LPSTR lpStr, HANDLE hData)
{
WND *wndPtr;
HANDLE hNewProp;
LPPROPENTRY lpNewProp;
LPPROPENTRY lpProp;
#ifdef DEBUG_PROP
if (((DWORD)lpStr & 0xFFFF0000) == 0L)
printf("SetProp(%04X, Atom %04X, %04X)\n",
hWnd, LOWORD((DWORD)lpStr), hData);
else
printf("SetProp(%04X, '%s', %04X)\n", hWnd, lpStr, hData);
#endif
wndPtr = WIN_FindWndPtr(hWnd);
if (wndPtr == NULL) {
printf("SetProp // Bad Window handle !\n");
return FALSE;
}
lpProp = (LPPROPENTRY) GlobalLock(wndPtr->hProp);
if (lpProp != NULL) {
while (TRUE) {
if (strcmp(lpProp->PropName, lpStr) == 0) {
#ifdef DEBUG_PROP
printf("SetProp // change already exinsting property !\n");
#endif
lpProp->hData = hData;
GlobalUnlock(wndPtr->hProp);
return TRUE;
}
if (lpProp->lpNextProp == NULL) break;
lpProp = lpProp->lpNextProp;
}
}
hNewProp = GlobalAlloc(GMEM_MOVEABLE, sizeof(PROPENTRY));
lpNewProp = (LPPROPENTRY) GlobalLock(hNewProp);
if (lpNewProp == NULL) {
printf("SetProp // Can't allocate Property entry !\n");
GlobalUnlock(wndPtr->hProp);
return FALSE;
}
#ifdef DEBUG_PROP
printf("SetProp // entry allocated %08X\n", lpNewProp);
#endif
if (lpProp == NULL) {
wndPtr->hProp = hNewProp;
lpNewProp->lpPrevProp = NULL;
#ifdef DEBUG_PROP
printf("SetProp // first entry \n");
#endif
}
else {
lpProp->lpNextProp = lpNewProp;
lpNewProp->lpPrevProp = lpProp;
}
lpNewProp->lpNextProp = NULL;
lpNewProp->hData = hData;
if (((DWORD)lpStr & 0xFFFF0000) == 0L) {
lpNewProp->PropName = NULL;
lpNewProp->Atom = LOWORD((DWORD)lpStr);
}
else {
lpNewProp->Atom = 0;
lpNewProp->PropName = malloc(strlen(lpStr));
if (lpNewProp->PropName == NULL) {
printf("SetProp // Can't allocate memory for Property Name !\n");
GlobalUnlock(wndPtr->hProp);
return FALSE;
}
strcpy(lpNewProp->PropName, lpStr);
}
GlobalUnlock(hNewProp);
GlobalUnlock(wndPtr->hProp);
return TRUE;
}
/*************************************************************************
* EnumProps [USER.27]
*/
int EnumProps(HWND hWnd, FARPROC lpEnumFunc)
{
printf("EMPTY STUB !!! EnumProps(%04X, %08X)\n", hWnd, lpEnumFunc);
return -1;
}

71
misc/shell.c Normal file
View File

@ -0,0 +1,71 @@
/*
* Shell Library Functions
*/
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <unistd.h>
#include "windows.h"
/*************************************************************************
* RegOpenKey [SHELL.1]
*/
int RegOpenKey(void)
{
printf("RegOpenKey : Empty Stub !!!\n");
}
/*************************************************************************
* RegCreateKey [SHELL.2]
*/
int RegCreateKey(void)
{
printf("RegCreateKey : Empty Stub !!!\n");
}
/*************************************************************************
* RegCloseKey [SHELL.3]
*/
int RegCloseKey(void)
{
printf("RegCloseKey : Empty Stub !!!\n");
}
/*************************************************************************
* RegDeleteKey [SHELL.4]
*/
int RegDeleteKey(void)
{
printf("RegDeleteKey : Empty Stub !!!\n");
}
/*************************************************************************
* ShellExecute [SHELL.20]
*/
int ShellExecute(LPSTR ptr)
{
printf("ShellExecute : Empty Stub !!!\n");
}
/*************************************************************************
* RegisterShellHook [SHELL.102]
*/
int RegisterShellHook(void *ptr)
{
printf("RegisterShellHook : Empty Stub !!!\n");
}
/*************************************************************************
* ShellHookProc [SHELL.103]
*/
int ShellHookProc(void)
{
printf("ShellHookProc : Empty Stub !!!\n");
}

View File

@ -104,8 +104,17 @@ const char *MessageTypeNames[SPY_MAX_MSGNUM + 1] =
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x00A0 */ /* 0x00A0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "WM_NCMOUSEMOVE", /* 0x00A0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, "WM_NCLBUTTONDOWN", /* 0x00A1 */
"WM_NCLBUTTONUP", /* 0x00A2 */
"WM_NCLBUTTONDBLCLK", /* 0x00A3 */
"WM_NCRBUTTONDOWN", /* 0x00A4 */
"WM_NCRBUTTONUP", /* 0x00A5 */
"WM_NCRBUTTONDBLCLK", /* 0x00A6 */
"WM_NCMBUTTONDOWN", /* 0x00A7 */
"WM_NCMBUTTONUP", /* 0x00A8 */
"WM_NCMBUTTONDBLCLK", /* 0x00A9 */
NULL, NULL, NULL, NULL, NULL, NULL,
/* 0x00B0 */ /* 0x00B0 */
NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
@ -248,7 +257,7 @@ void SpyMessage(HWND hwnd, WORD msg, WORD wParam, LONG lParam)
return; return;
if (msg > SPY_MAX_MSGNUM || MessageTypeNames[msg] == NULL) if (msg > SPY_MAX_MSGNUM || MessageTypeNames[msg] == NULL)
msg_name[0] = '\0'; sprintf(msg_name, "%04x", msg);
else else
strcpy(msg_name, MessageTypeNames[msg]); strcpy(msg_name, MessageTypeNames[msg]);

View File

@ -11,112 +11,206 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <netinet/in.h> #include <netinet/in.h>
#include <arpa/inet.h> #include <arpa/inet.h>
#include <fcntl.h>
#include <errno.h> #include <errno.h>
#include <netdb.h> #include <netdb.h>
#include <unistd.h> #include <unistd.h>
#include "heap.h"
#include "winsock.h" #include "winsock.h"
#define DEBUG_WINSOCK #define DEBUG_WINSOCK
/* XXX per task */ static WORD wsa_errno;
WORD wsa_errno; static int wsa_initted;
int wsa_initted;
WORD errno_to_wsaerrno(int errno) #define dump_sockaddr(a) \
fprintf(stderr, "sockaddr_in: family %d, address %s, port %d\n", \
((struct sockaddr_in *)a)->sin_family, \
inet_ntoa(((struct sockaddr_in *)a)->sin_addr), \
ntohs(((struct sockaddr_in *)a)->sin_port))
struct WinSockHeap {
char ntoa_buffer[32];
struct hostent hostent_addr;
struct hostent hostent_name;
struct protoent protoent_name;
struct protoent protoent_number;
struct servent servent_name;
struct servent servent_port;
struct hostent WSAhostent_addr;
struct hostent WSAhostent_name;
struct protoent WSAprotoent_name;
struct protoent WSAprotoent_number;
struct servent WSAservent_name;
struct servent WSAservent_port;
};
static struct WinSockHeap *heap;
static WORD wsaerrno(void)
{ {
switch(errno) { #ifdef DEBUG_WINSOCK
case ENETDOWN:
return WSAENETDOWN;
case EAFNOSUPPORT:
return WSAEAFNOSUPPORT;
case EMFILE:
return WSAEMFILE;
case ENOBUFS:
return WSAENOBUFS;
case EPROTONOSUPPORT:
return EPROTONOSUPPORT;
case EPROTOTYPE:
return WSAEPROTOTYPE;
case EBADF:
case ENOTSOCK:
return WSAENOTSOCK;
default:
#ifndef sun #ifndef sun
#if defined(__FreeBSD__) #if defined(__FreeBSD__)
fprintf(stderr, "winsock: errno_to_wsaerrno translation failure.\n\t: %s (%d)\n", fprintf(stderr, "winsock: errno %d, (%s).\n",
sys_errlist[errno], errno); errno, sys_errlist[errno]);
#else #else
fprintf(stderr, "winsock: errno_to_wsaerrno translation failure.\n\t: %s (%d)\n", fprintf(stderr, "winsock: errno %d, (%s).\n",
strerror[errno], errno); errno, strerror(errno));
#endif #endif
#else #else
fprintf (stderr, "winsock: errno_to_wsaerrno translation failure.\n"); fprintf(stderr, "winsock: errno %d\n", errno);
#endif #endif
return WSAENETDOWN; #endif
switch(errno)
{
case EINTR: return WSAEINTR;
case EACCES: return WSAEACCES;
case EFAULT: return WSAEFAULT;
case EINVAL: return WSAEINVAL;
case EMFILE: return WSAEMFILE;
case EWOULDBLOCK: return WSAEWOULDBLOCK;
case EINPROGRESS: return WSAEINPROGRESS;
case EALREADY: return WSAEALREADY;
case EBADF:
case ENOTSOCK: return WSAENOTSOCK;
case EDESTADDRREQ: return WSAEDESTADDRREQ;
case EMSGSIZE: return WSAEMSGSIZE;
case EPROTOTYPE: return WSAEPROTOTYPE;
case ENOPROTOOPT: return WSAENOPROTOOPT;
case EPROTONOSUPPORT: return WSAEPROTONOSUPPORT;
case ESOCKTNOSUPPORT: return WSAESOCKTNOSUPPORT;
case EOPNOTSUPP: return WSAEOPNOTSUPP;
case EPFNOSUPPORT: return WSAEPFNOSUPPORT;
case EAFNOSUPPORT: return WSAEAFNOSUPPORT;
case EADDRINUSE: return WSAEADDRINUSE;
case EADDRNOTAVAIL: return WSAEADDRNOTAVAIL;
case ENETDOWN: return WSAENETDOWN;
case ENETUNREACH: return WSAENETUNREACH;
case ENETRESET: return WSAENETRESET;
case ECONNABORTED: return WSAECONNABORTED;
case ECONNRESET: return WSAECONNRESET;
case ENOBUFS: return WSAENOBUFS;
case EISCONN: return WSAEISCONN;
case ENOTCONN: return WSAENOTCONN;
case ESHUTDOWN: return WSAESHUTDOWN;
case ETOOMANYREFS: return WSAETOOMANYREFS;
case ETIMEDOUT: return WSAETIMEDOUT;
case ECONNREFUSED: return WSAECONNREFUSED;
case ELOOP: return WSAELOOP;
case ENAMETOOLONG: return WSAENAMETOOLONG;
case EHOSTDOWN: return WSAEHOSTDOWN;
case EHOSTUNREACH: return WSAEHOSTUNREACH;
case ENOTEMPTY: return WSAENOTEMPTY;
/* case EPROCLIM: return WSAEPROCLIM; */
case EUSERS: return WSAEUSERS;
case EDQUOT: return WSAEDQUOT;
case ESTALE: return WSAESTALE;
case EREMOTE: return WSAEREMOTE;
default:
fprintf(stderr, "winsock: unknown error!\n");
return WSAEOPNOTSUPP;
} }
} }
SOCKET Winsock_accept(SOCKET s, struct sockaddr FAR *addr, int FAR *addrlen) static WORD errno_to_wsaerrno(void)
{
wsa_errno = wsaerrno();
}
SOCKET Winsock_accept(SOCKET s, struct sockaddr FAR *addr, INT FAR *addrlen)
{ {
int sock; int sock;
if ((sock = accept(s, addr, addrlen)) < 0) { #ifdef DEBUG_WINSOCK
wsa_errno = errno_to_wsaerrno(errno); fprintf(stderr, "WSA_accept: socket %d, ptr %8x, length %d\n", s, (int) addr, addrlen);
#endif
if ((sock = accept(s, addr, (int *) addrlen)) < 0) {
errno_to_wsaerrno();
return INVALID_SOCKET; return INVALID_SOCKET;
} }
return sock; return sock;
} }
int Winsock_bind(SOCKET s, struct sockaddr FAR *name, int namelen) INT Winsock_bind(SOCKET s, struct sockaddr FAR *name, INT namelen)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_bind: socket %d, ptr %8x, length %d\n", s, (int) name, namelen);
dump_sockaddr(name);
#endif
if (bind(s, name, namelen) < 0) { if (bind(s, name, namelen) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
int Winsock_closesocket(SOCKET s) INT Winsock_closesocket(SOCKET s)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_closesocket: socket %d\n", s);
#endif
if (close(s) < 0) { if (close(s) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
int Winsock_connect(SOCKET s, struct sockaddr FAR *name, int namelen) INT Winsock_connect(SOCKET s, struct sockaddr FAR *name, INT namelen)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_connect: socket %d, ptr %8x, length %d\n", s, (int) name, namelen);
dump_sockaddr(name);
#endif
if (connect(s, name, namelen) < 0) { if (connect(s, name, namelen) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
int Winsock_getpeername(SOCKET s, struct sockaddr FAR *name, int FAR *namelen) INT Winsock_getpeername(SOCKET s, struct sockaddr FAR *name, INT FAR *namelen)
{ {
if (getpeername(s, name, namelen) < 0) { #ifdef DEBUG_WINSOCK
wsa_errno = errno_to_wsaerrno(errno); fprintf(stderr, "WSA_getpeername: socket: %d, ptr %8x, ptr %8x\n", s, (int) name, *namelen);
dump_sockaddr(name);
#endif
if (getpeername(s, name, (int *) namelen) < 0) {
errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
int Winsock_getsockname(SOCKET s, struct sockaddr FAR *name, int FAR *namelen) INT Winsock_getsockname(SOCKET s, struct sockaddr FAR *name, INT FAR *namelen)
{ {
if (getsockname(s, name, namelen) < 0) { #ifdef DEBUG_WINSOCK
wsa_errno = errno_to_wsaerrno(errno); fprintf(stderr, "WSA_getsockname: socket: %d, ptr %8x, ptr %8x\n", s, (int) name, (int) *namelen);
#endif
if (getsockname(s, name, (int *) namelen) < 0) {
errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
int Winsock_getsockopt(SOCKET s, int loptname, char FAR *optval, int FAR *optlen) INT Winsock_getsockopt(SOCKET s, INT loptname, char FAR *optval, INT FAR *optlen)
{ {
if (getsockopt(s, 0, loptname, optval, optlen) < 0) { #ifdef DEBUG_WINSOCK
wsa_errno = errno_to_wsaerrno(errno); fprintf(stderr, "WSA_getsockopt: socket: %d, opt %d, ptr %8x, ptr %8x\n", s, loptname, (int) optval, (int) *optlen);
#endif
if (getsockopt(s, 0, (int) loptname, optval, (int *) optlen) < 0) {
errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
@ -141,26 +235,41 @@ char *Winsock_inet_ntoa(struct in_addr in)
{ {
char *s; char *s;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_inet_ntoa: %8x\n", in);
#endif
if ((s = inet_ntoa(in)) == NULL) { if ((s = inet_ntoa(in)) == NULL) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return NULL; return NULL;
} }
return s;
strncpy(heap->ntoa_buffer, s, sizeof(heap->ntoa_buffer) );
return (char *) &heap->ntoa_buffer;
} }
int Winsock_ioctlsocket(SOCKET s, long cmd, u_long FAR *argp) INT Winsock_ioctlsocket(SOCKET s, long cmd, u_long FAR *argp)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_ioctl: socket %d, cmd %d, ptr %8x\n", s, cmd, (int) argp);
#endif
if (ioctl(s, cmd, argp) < 0) { if (ioctl(s, cmd, argp) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
int Winsock_listen(SOCKET s, int backlog) INT Winsock_listen(SOCKET s, INT backlog)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_listen: socket %d, backlog %d\n", s, backlog);
#endif
if (listen(s, backlog) < 0) { if (listen(s, backlog) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
@ -176,125 +285,174 @@ u_short Winsock_ntohs(u_short netshort)
return( ntohs(netshort) ); return( ntohs(netshort) );
} }
int Winsock_recv(SOCKET s, char FAR *buf, int len, int flags) INT Winsock_recv(SOCKET s, char FAR *buf, INT len, INT flags)
{ {
int length; int length;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_recv: socket %d, ptr %8x, length %d, flags %d\n", s, (int) buf, len, flags);
#endif
if ((length = recv(s, buf, len, flags)) < 0) { if ((length = recv(s, buf, len, flags)) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return length; return length;
} }
int Winsock_recvfrom(SOCKET s, char FAR *buf, int len, int flags, INT Winsock_recvfrom(SOCKET s, char FAR *buf, INT len, INT flags,
struct sockaddr FAR *from, int FAR *fromlen) struct sockaddr FAR *from, int FAR *fromlen)
{ {
int length; int length;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_recvfrom: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
#endif
if ((length = recvfrom(s, buf, len, flags, from, fromlen)) < 0) { if ((length = recvfrom(s, buf, len, flags, from, fromlen)) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return length; return length;
} }
int Winsock_select(int nfds, fd_set FAR *readfds, fd_set FAR *writefds, INT Winsock_select(INT nfds, fd_set FAR *readfds, fd_set FAR *writefds,
fd_set FAR *exceptfds, struct timeval FAR *timeout) fd_set FAR *exceptfds, struct timeval FAR *timeout)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_select: fd # %d, ptr %8x, ptr %8x, ptr %*X\n", nfds, readfds, writefds, exceptfds);
#endif
return(select(nfds, readfds, writefds, exceptfds, timeout)); return(select(nfds, readfds, writefds, exceptfds, timeout));
} }
int Winsock_send(SOCKET s, char FAR *buf, int len, int flags) INT Winsock_send(SOCKET s, char FAR *buf, INT len, INT flags)
{ {
int length; int length;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_send: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
#endif
if ((length = send(s, buf, len, flags)) < 0) { if ((length = send(s, buf, len, flags)) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return length; return length;
} }
int Winsock_sendto(SOCKET s, char FAR *buf, int len, int flags, INT Winsock_sendto(SOCKET s, char FAR *buf, INT len, INT flags,
struct sockaddr FAR *to, int tolen) struct sockaddr FAR *to, INT tolen)
{ {
int length; int length;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_sendto: socket %d, ptr %8x, length %d, flags %d\n", s, buf, len, flags);
#endif
if ((length = sendto(s, buf, len, flags, to, tolen)) < 0) { if ((length = sendto(s, buf, len, flags, to, tolen)) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return length; return length;
} }
int Winsock_setsockopt(SOCKET s, int level, int optname, const char FAR *optval, INT Winsock_setsockopt(SOCKET s, INT level, INT optname, const char FAR *optval,
int optlen) INT optlen)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_setsockopt: socket %d, level %d, opt %d, ptr %8x, len %d\n", s, level, optname, (int) optval, optlen);
#endif
if (setsockopt(s, level, optname, optval, optlen) < 0) { if (setsockopt(s, level, optname, optval, optlen) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
int Winsock_shutdown(SOCKET s, int how) INT Winsock_shutdown(SOCKET s, INT how)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_shutdown: socket s %d, how %d\n", s, how);
#endif
if (shutdown(s, how) < 0) { if (shutdown(s, how) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
} }
SOCKET Winsock_socket(WORD af, WORD type, WORD protocol) SOCKET Winsock_socket(INT af, INT type, INT protocol)
{ {
int sock; int sock;
#ifdef DEBUG_WINSOCK #ifdef DEBUG_WINSOCK
printf("Winsock_socket: af=%d type=%d protocol=%d\n", af, type, protocol); fprintf(stderr, "WSA_socket: af=%d type=%d protocol=%d\n", af, type, protocol);
#endif #endif
/* let the kernel do the dirty work..
if (!wsa_initted) {
wsa_errno = WSANOTINITIALISED;
return INVALID_SOCKET;
}
*/
if ((sock = socket(af, type, protocol)) < 0) { if ((sock = socket(af, type, protocol)) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_socket: failed !\n");
#endif
return INVALID_SOCKET; return INVALID_SOCKET;
} }
if (sock > 0xffff) {
wsa_errno = WSAEMFILE;
return INVALID_SOCKET;
}
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_socket: fd %d\n", sock);
#endif
return sock; return sock;
} }
struct hostent *Winsock_gethostbyaddr(const char FAR *addr, int len, int type) struct hostent *Winsock_gethostbyaddr(const char FAR *addr, INT len, INT type)
{ {
struct hostent *host; struct hostent *host;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_gethostbyaddr: ptr %8x, len %d, type %d\n", (int) addr, len, type);
#endif
if ((host = gethostbyaddr(addr, len, type)) == NULL) { if ((host = gethostbyaddr(addr, len, type)) == NULL) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return NULL; return NULL;
} }
return host; memcpy(&heap->hostent_addr, host, sizeof(struct hostent));
return (struct hostent *) &heap->hostent_addr;
} }
struct hostent *Winsock_gethostbyname(const char FAR *name) struct hostent *Winsock_gethostbyname(const char FAR *name)
{ {
struct hostent *host; struct hostent *host;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_gethostbyname: name %s\n", name);
#endif
if ((host = gethostbyname(name)) == NULL) { if ((host = gethostbyname(name)) == NULL) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return NULL; return NULL;
} }
return host; memcpy(&heap->hostent_name, host, sizeof(struct hostent));
return (struct hostent *) &heap->hostent_name;
} }
int Winsock_gethostname(char FAR *name, int namelen) int Winsock_gethostname(char FAR *name, INT namelen)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_gethostname: name %d, len %d\n", name, namelen);
#endif
if (gethostname(name, namelen) < 0) { if (gethostname(name, namelen) < 0) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return SOCKET_ERROR; return SOCKET_ERROR;
} }
return 0; return 0;
@ -304,125 +462,238 @@ struct protoent *Winsock_getprotobyname(char FAR *name)
{ {
struct protoent *proto; struct protoent *proto;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_getprotobyname: name %s\n", name);
#endif
if ((proto = getprotobyname(name)) == NULL) { if ((proto = getprotobyname(name)) == NULL) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return NULL; return NULL;
} }
return proto; memcpy(&heap->protoent_name, proto, sizeof(struct protoent));
return (struct protoent *) &heap->protoent_name;
} }
struct protoent *Winsock_getprotobynumber(int number) struct protoent *Winsock_getprotobynumber(INT number)
{ {
struct protoent *proto; struct protoent *proto;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_getprotobynumber: num %d\n", number);
#endif
if ((proto = getprotobynumber(number)) == NULL) { if ((proto = getprotobynumber(number)) == NULL) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return NULL; return NULL;
} }
return proto; memcpy(&heap->protoent_number, proto, sizeof(struct protoent));
return (struct protoent *) &heap->protoent_number;
} }
struct servent *Winsock_getservbyname(const char FAR *name, const char FAR *proto) struct servent *Winsock_getservbyname(const char FAR *name, const char FAR *proto)
{ {
struct servent *service; struct servent *service;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_getservbyname: name %s, proto %s\n", name, proto);
#endif
if ((service = getservbyname(name, proto)) == NULL) { if ((service = getservbyname(name, proto)) == NULL) {
wsa_errno = errno_to_wsaerrno(errno); errno_to_wsaerrno();
return NULL; return NULL;
} }
return service; memcpy(&heap->servent_name, service, sizeof(struct servent));
return (struct servent *) &heap->servent_name;
} }
struct servent *Winsock_getservbyport(int port, const char FAR *proto) struct servent *Winsock_getservbyport(INT port, const char FAR *proto)
{
struct servent *service;
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_getservbyport: port %d, name %s\n", port, proto);
#endif
if ((service = getservbyport(port, proto)) == NULL) {
errno_to_wsaerrno();
return NULL;
}
memcpy(&heap->servent_port, service, sizeof(struct servent));
return (struct servent *) &heap->servent_port;
}
/******************** winsock specific functions ************************/
HANDLE WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, const char FAR *addr,
INT len, INT type, char FAR *buf, INT buflen)
{
struct hostent *host;
if ((host = gethostbyaddr(addr, len, type)) == NULL) {
PostMessage(hWnd, wMsg, 1, wsaerrno() << 8);
return 1;
}
memcpy(buf, host, buflen);
PostMessage(hWnd, wMsg, 1, 0);
return 1;
}
HANDLE WSAAsyncGetHostByName(HWND hWnd, u_int wMsg, const char FAR *name,
char FAR *buf, INT buflen)
{
struct hostent *host;
if ((host = gethostbyname(name)) == NULL) {
PostMessage(hWnd, wMsg, 2, wsaerrno() << 8);
return 2;
}
memcpy(buf, host, buflen);
PostMessage(hWnd, wMsg, 2, 0);
return 2;
}
HANDLE WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg, const char FAR *name,
char FAR *buf, INT buflen)
{
struct protoent *proto;
if ((proto = getprotobyname(name)) == NULL) {
PostMessage(hWnd, wMsg, 3, wsaerrno() << 8);
return 3;
}
memcpy(buf, proto, buflen);
PostMessage(hWnd, wMsg, 3, 0);
return 3;
}
HANDLE WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg, INT number,
char FAR *buf, INT buflen)
{
struct protoent *proto;
if ((proto = getprotobynumber(number)) == NULL) {
PostMessage(hWnd, wMsg, 4, wsaerrno() << 8);
return 4;
}
memcpy(buf, proto, buflen);
PostMessage(hWnd, wMsg, 4, 0);
return 4;
}
HANDLE WSAAsyncGetServByName(HWND hWnd, u_int wMsg, const char FAR *name,
const char FAR *proto, char FAR *buf, INT buflen)
{
struct servent *service;
if ((service = getservbyname(name, proto)) == NULL) {
PostMessage(hWnd, wMsg, 5, wsaerrno() << 8);
return 5;
}
memcpy(buf, service, buflen);
PostMessage(hWnd, wMsg, 5, 0);
return 5;
}
HANDLE WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, INT port, const char FAR
*proto, char FAR *buf, INT buflen)
{ {
struct servent *service; struct servent *service;
if ((service = getservbyport(port, proto)) == NULL) { if ((service = getservbyport(port, proto)) == NULL) {
wsa_errno = errno_to_wsaerrno(errno); PostMessage(hWnd, wMsg, 6, wsaerrno() << 8);
return NULL;
return 6;
} }
return service; memcpy(buf, service, buflen);
PostMessage(hWnd, wMsg, 6, 0);
return 6;
} }
HANDLE WSAAsyncGetHostByAddr(HWND hWnd, u_int wMsg, const char FAR *addr, INT WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg, long lEvent)
int len, int type, const char FAR *buf, int buflen)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_AsyncSelect: socket %d, HWND %d, wMsg %d, event %d\n", s, hWnd, wMsg, lEvent);
#endif
fcntl(s, F_SETFL, O_NONBLOCK);
return 0;
} }
HANDLE WSAAsyncGetHostByName(HWND hWnd, u_int wMsg, const char FAR *name, INT WSAFDIsSet(INT fd, fd_set *set)
char FAR *buf, int buflen)
{
}
HANDLE WSAAsyncGetProtoByName(HWND hWnd, u_int wMsg, const char FAR *name,
char FAR *buf, int buflen)
{
}
HANDLE WSAAsyncGetProtoByNumber(HWND hWnd, u_int wMsg, int number,
char FAR *buf, int buflen)
{
}
HANDLE WSAAsyncGetServByName(HWND hWnd, u_int wMsg, const char FAR *name,
const char FAR *proto, char FAR *buf, int buflen)
{
}
HANDLE WSAAsyncGetServByPort(HWND hWnd, u_int wMsg, int port, const char FAR
*proto, char FAR *buf, int buflen)
{
}
int WSAAsyncSelect(SOCKET s, HWND hWnd, u_int wMsg, long lEvent)
{
}
int WSAFDIsSet(int fd, fd_set *set)
{ {
return( FD_ISSET(fd, set) ); return( FD_ISSET(fd, set) );
} }
WSACancelAsyncRequest(HANDLE hAsyncTaskHandle) INT WSACancelAsyncRequest(HANDLE hAsyncTaskHandle)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_AsyncRequest: handle %d\n", hAsyncTaskHandle);
#endif
return 0;
} }
WSACancelBlockingCall ( void ) INT WSACancelBlockingCall(void)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_CancelBlockCall\n");
#endif
return 0;
} }
int WSAGetLastError(void) INT WSAGetLastError(void)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_GetLastError\n");
#endif
return wsa_errno; return wsa_errno;
} }
void WSASetLastError(int iError) void WSASetLastError(INT iError)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_SetLastErorr %d\n", iError);
#endif
wsa_errno = iError; wsa_errno = iError;
} }
BOOL WSAIsBlocking (void) BOOL WSAIsBlocking(void)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_IsBlocking\n");
#endif
} }
FARPROC WSASetBlockingHook(FARPROC lpBlockFunc) FARPROC WSASetBlockingHook(FARPROC lpBlockFunc)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_SetBlockHook\n %8x", lpBlockFunc);
#endif
} }
int WSAUnhookBlockingHook(void) INT WSAUnhookBlockingHook(void)
{ {
#ifdef DEBUG_WINSOCK
fprintf(stderr, "WSA_UnhookBlockingHook\n");
#endif
} }
WSADATA Winsock_data = { WSADATA Winsock_data = {
@ -443,8 +714,11 @@ WSADATA Winsock_data = {
NULL NULL
}; };
int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData) INT WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)
{ {
int HeapHandle;
MDESC *MyHeap;
#ifdef DEBUG_WINSOCK #ifdef DEBUG_WINSOCK
fprintf(stderr, "WSAStartup: verReq=%x\n", wVersionRequested); fprintf(stderr, "WSAStartup: verReq=%x\n", wVersionRequested);
#endif #endif
@ -457,6 +731,12 @@ int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)
if (!lpWSAData) if (!lpWSAData)
return WSAEINVAL; return WSAEINVAL;
if ((HeapHandle = GlobalAlloc(GMEM_FIXED,sizeof(struct WinSockHeap))) == 0)
return WSASYSNOTREADY;
heap = (struct WinSockHeap *) GlobalLock(HeapHandle);
HEAP_Init(&MyHeap, heap, sizeof(struct WinSockHeap));
bcopy(&Winsock_data, lpWSAData, sizeof(Winsock_data)); bcopy(&Winsock_data, lpWSAData, sizeof(Winsock_data));
wsa_initted = 1; wsa_initted = 1;
@ -464,7 +744,7 @@ int WSAStartup(WORD wVersionRequested, LPWSADATA lpWSAData)
return(0); return(0);
} }
int WSACleanup(void) INT WSACleanup(void)
{ {
wsa_initted = 0; wsa_initted = 0;
return 0; return 0;

View File

@ -1,4 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include "msdos.h" #include "msdos.h"
#include "wine.h" #include "wine.h"

View File

@ -1,5 +1,6 @@
#include <time.h> #include <time.h>
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include "msdos.h" #include "msdos.h"
#include "wine.h" #include "wine.h"

View File

@ -1246,7 +1246,9 @@ int do_int21(struct sigcontext_struct * context)
EBX = DOSVERSION; EBX = DOSVERSION;
EDX = 0x00; EDX = 0x00;
break; break;
default: default:
Barf(context);
break; break;
} }
break; break;
@ -1505,6 +1507,10 @@ int do_int21(struct sigcontext_struct * context)
} }
break; break;
case 0x67: /* SET HANDLE COUNT */
ResetCflag;
break;
case 0x68: /* "FFLUSH" - COMMIT FILE */ case 0x68: /* "FFLUSH" - COMMIT FILE */
ResetCflag; ResetCflag;
break; break;
@ -1525,9 +1531,6 @@ int do_int21(struct sigcontext_struct * context)
ResetCflag; ResetCflag;
break; break;
case 0x67: /* SET HANDLE COUNT */
ResetCflag;
break;
default: default:
Barf(context); Barf(context);

View File

@ -1,4 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include "msdos.h" #include "msdos.h"
#include "wine.h" #include "wine.h"
@ -15,15 +16,12 @@ int do_int25(struct sigcontext_struct *context)
dataptr = (BYTE *) getdword(&dataptr[6]); dataptr = (BYTE *) getdword(&dataptr[6]);
fprintf(stderr, "int25: abs diskread, drive %d, sector %d, " } else {
"count %d, buffer %d\n", EAX & 0xff, begin, length, (int) dataptr);
}
begin = EDX & 0xffff; begin = EDX & 0xffff;
length = ECX & 0xffff; length = ECX & 0xffff;
}
fprintf(stderr,"int25: abs diskread-2, drive %d, sector %d, count %d," fprintf(stderr, "int25: abs diskread, drive %d, sector %d, "
" buffer %d\n", EAX & 0xff, begin, length, (int) dataptr); "count %d, buffer %d\n", EAX & 0xff, begin, length, (int) dataptr);
ResetCflag; ResetCflag;
return 1; return 1;

View File

@ -1,4 +1,5 @@
#include <stdio.h> #include <stdio.h>
#include <stdlib.h>
#include "msdos.h" #include "msdos.h"
#include "wine.h" #include "wine.h"
@ -13,14 +14,12 @@ int do_int26(struct sigcontext_struct *context)
length = getword(&dataptr[4]); length = getword(&dataptr[4]);
dataptr = (BYTE *) getdword(&dataptr[6]); dataptr = (BYTE *) getdword(&dataptr[6]);
fprintf(stderr, "int26: abs diskread, drive %d, sector %d, " } else {
"count %d, buffer %d\n", EAX & 0xff, begin, length, (int) dataptr);
}
begin = EDX & 0xffff; begin = EDX & 0xffff;
length = ECX & 0xffff; length = ECX & 0xffff;
}
fprintf(stderr,"int26: abs diskread-2, drive %d, sector %d, count %d," fprintf(stderr,"int26: abs diskwrite, drive %d, sector %d, count %d,"
" buffer %d\n", EAX & 0xff, begin, length, (int) dataptr); " buffer %d\n", EAX & 0xff, begin, length, (int) dataptr);
ResetCflag; ResetCflag;

26
miscemu/int2f.c Normal file
View File

@ -0,0 +1,26 @@
#include <stdio.h>
#include <stdlib.h>
#include "msdos.h"
#include "wine.h"
static void Barf(struct sigcontext_struct *context)
{
fprintf(stderr, "int2f: unknown/not implemented parameters:\n");
fprintf(stderr, "int2f: AX %04x, BX %04x, CX %04x, DX %04x, "
"SI %04x, DI %04x, DS %04x, ES %04x\n",
AX, BX, CX, DX, SI, DI, DS, ES);
}
int do_int2f(struct sigcontext_struct *context)
{
switch(context->sc_eax & 0xffff)
{
case 0x1600: /* windows enhanced mode install check */
/* don't return anything as we're running in standard mode */
break;
default:
Barf(context);
};
return 1;
}

Some files were not shown because too many files have changed in this diff Show More