Release 950319
Sun Mar 19 16:30:20 1995 Alexandre Julliard (julliard@sunsite.unc.edu) * [*/*] Implemented a new memory mapping scheme. There's no longer a one-to-one mapping between 16-bit and 32-bit pointers. Please see file DEVELOPERS-HINTS for technical details. * [controls/scroll.c] Fixed bug when dragging mouse in horizontal scrollbars. * [tools/build.c] [if1632/*.spec] Removed support for C callback functions and for re-ordering of the 32-bit arguments, as these were never used. This should allow a more efficient callback scheme to be implemented. * [if1632/olecli.spec] Reduced the number of entries to make the 16-bit code fit in 64k. This limitation will soon be removed. * [loader/ldt.c] Rewrote LDT manipulation functions and implemented LDT_GetEntry(). * [memory/global.c] Rewrote Global*() routines to use the new selector allocation mechanism. * [memory/local.c] Rewrote local heap handling to use a Windows-compatible layout (not really finished yet). Implemented TOOLHELP heap-walking routines. * [memory/selector.c] Implemented LDT manipulation API functions. Tue Mar 14 19:50:28 EST 1995 William Magro (wmagro@tc.cornell.edu) * [windows/defdlg.c] Fixed problem where dialogs closed using the System menu ('Close' item or double click on close box) would hang Wine. Sun Mar 12 14:28:13 1995 Michael Patra <micky@marie.physik.TU-Berlin.DE> * [controls/listbox.c] Removed most of the statements for sending a notification message ListBoxDirectory(), DlgDirSelect(), DlgDirList(): Improved the code; Borland's standard file open dialog will work now. * [misc/main.c], [misc/file.c], [miscemu/int21.c] Added support for new command line option "-allowreadonly". If set an attempt to open a read only file in write mode will be converted to opening it read only (many programs try to open all files in read/write mode even if they only intend to read it - this might cause a few under problems under an unix-like environment where most files are read only for a "normal" user) * [loader/selector.c] GetMemoryReference(): Added support for __AHIncr and __AHShift * [misc/dos_fs.c] DOS_SimplifyPath(): This routine simplifies path names ( e.g., it will change "/usr///local/bin/../lib//a" to "/usr/local/lib/a" ) match(): rewritten * [objects/text.c] TEXT_NextLine(): Removed a bug in the handling of LF's * [miscemu/int21.c] GetFileDateTime(): Fixed. SetFileDateTime() is still broken. Sat Mar 11 19:46:19 1995 Martin von Loewis <loewis@informatik.hu-berlin.de> * [controls/menu.c] ChangeMenu: defaults to MF_INSERT InsertMenu: allow insertion even if position is one after last item * [if1632/Imakefile] [if1632/compobj.spec] [if1632/relay.c] [if1632/storage.spec] [include/dlls.h] Added stubs for STORAGE.DLL and COMPOBJ.DLL * [if1632/user.spec] [windows/message.c] InSendMessage: new function * [include/neexe.h][include/ne_image.c] NE_FixupSegment: fixed handling of additive records * [loader/selector.c] GetEntryDLLName: return NULL instead of pointer to DLL.0 if not found * [loader/signal.c] win_fault: Enter debugger on SIGFPE, too Wed Mar 1 21:47:42 1995 Cameron Heide (heide@ee.ualberta.ca) * [miscemu/int*.c] Various minor modifications to the clock tick counter, FindFirst/FindNext funcs, and DPB handling.
This commit is contained in:
parent
6abb89c3b2
commit
e2abbb1bb3
150 changed files with 5746 additions and 6546 deletions
23
ANNOUNCE
23
ANNOUNCE
|
@ -1,14 +1,16 @@
|
||||||
This is release 950302 of Wine the MS Windows emulator. This is still a
|
This is release 950319 of Wine the MS Windows emulator. This is still a
|
||||||
developer's only release. There are many bugs and many unimplemented API
|
developer's only release. There are many bugs and many unimplemented API
|
||||||
features. Most applications still do not work.
|
features. Most applications still do not work.
|
||||||
|
|
||||||
Patches should be submitted to "wine-new@amscons.com". Please don't forget
|
Patches should be submitted to "wine-new@amscons.com". Please don't forget
|
||||||
to include a ChangeLog entry. I'll make a new release every other Sunday.
|
to include a ChangeLog entry. I'll make a new release every other Sunday.
|
||||||
|
|
||||||
WHAT'S NEW with Wine-950302: (see ChangeLog for details)
|
WHAT'S NEW with Wine-950319: (see ChangeLog for details)
|
||||||
- You now need libXpm to be able to compile.
|
- New memory management scheme. This will probably cause many
|
||||||
- OLE stubs and run-time option to disable them.
|
new problems, please report them. I'm particularly interested
|
||||||
- Support for special selectors like __0040H.
|
to hear how it works for the *BSD people.
|
||||||
|
- Many fixes in file and directory handling.
|
||||||
|
- Handling of additive fixup records.
|
||||||
- Lots of bug fixes
|
- Lots of bug fixes
|
||||||
|
|
||||||
See the README file in the distribution for installation instructions.
|
See the README file in the distribution for installation instructions.
|
||||||
|
@ -17,11 +19,12 @@ Because of lags created by using mirror, this message may reach you before
|
||||||
the release is available at the ftp sites. The sources will be available
|
the release is available at the ftp sites. The sources will be available
|
||||||
from the following locations:
|
from the following locations:
|
||||||
|
|
||||||
sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-950302.tar.gz
|
sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-950319.tar.gz
|
||||||
aris.com:/pub/linux/ALPHA/Wine/development/Wine-950302.tar.gz
|
tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-950319.tar.gz
|
||||||
tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-950302.tar.gz
|
ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-950319.tar.gz
|
||||||
ftp.funet.fi:/pub/OS/Linux/ALPHA/Wine/Wine-950302.tar.gz
|
ftp.funet.fi:/pub/OS/Linux/ALPHA/Wine/Wine-950319.tar.gz
|
||||||
ftp.wonderland.org:/Wine/Wine-950302.tar.gz
|
|
||||||
|
It should also be available from any site that mirrors tsx-11 or sunsite.
|
||||||
|
|
||||||
If you submitted a patch, please check to make sure it has been
|
If you submitted a patch, please check to make sure it has been
|
||||||
included in the new release.
|
included in the new release.
|
||||||
|
|
99
ChangeLog
99
ChangeLog
|
@ -1,3 +1,102 @@
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
Sun Mar 19 16:30:20 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
|
||||||
|
|
||||||
|
* [*/*]
|
||||||
|
Implemented a new memory mapping scheme. There's no longer a
|
||||||
|
one-to-one mapping between 16-bit and 32-bit pointers. Please see
|
||||||
|
file DEVELOPERS-HINTS for technical details.
|
||||||
|
|
||||||
|
* [controls/scroll.c]
|
||||||
|
Fixed bug when dragging mouse in horizontal scrollbars.
|
||||||
|
|
||||||
|
* [tools/build.c] [if1632/*.spec]
|
||||||
|
Removed support for C callback functions and for re-ordering
|
||||||
|
of the 32-bit arguments, as these were never used. This should
|
||||||
|
allow a more efficient callback scheme to be implemented.
|
||||||
|
|
||||||
|
* [if1632/olecli.spec]
|
||||||
|
Reduced the number of entries to make the 16-bit code fit in 64k.
|
||||||
|
This limitation will soon be removed.
|
||||||
|
|
||||||
|
* [loader/ldt.c]
|
||||||
|
Rewrote LDT manipulation functions and implemented LDT_GetEntry().
|
||||||
|
|
||||||
|
* [memory/global.c]
|
||||||
|
Rewrote Global*() routines to use the new selector allocation
|
||||||
|
mechanism.
|
||||||
|
|
||||||
|
* [memory/local.c]
|
||||||
|
Rewrote local heap handling to use a Windows-compatible layout
|
||||||
|
(not really finished yet).
|
||||||
|
Implemented TOOLHELP heap-walking routines.
|
||||||
|
|
||||||
|
* [memory/selector.c]
|
||||||
|
Implemented LDT manipulation API functions.
|
||||||
|
|
||||||
|
Tue Mar 14 19:50:28 EST 1995 William Magro (wmagro@tc.cornell.edu)
|
||||||
|
|
||||||
|
* [windows/defdlg.c]
|
||||||
|
Fixed problem where dialogs closed using the System menu
|
||||||
|
('Close' item or double click on close box) would
|
||||||
|
hang Wine.
|
||||||
|
|
||||||
|
Sun Mar 12 14:28:13 1995 Michael Patra <micky@marie.physik.TU-Berlin.DE>
|
||||||
|
|
||||||
|
* [controls/listbox.c]
|
||||||
|
Removed most of the statements for sending a notification message
|
||||||
|
ListBoxDirectory(), DlgDirSelect(), DlgDirList(): Improved the
|
||||||
|
code; Borland's standard file open dialog will work now.
|
||||||
|
|
||||||
|
* [misc/main.c], [misc/file.c], [miscemu/int21.c]
|
||||||
|
Added support for new command line option "-allowreadonly". If set
|
||||||
|
an attempt to open a read only file in write mode will be converted
|
||||||
|
to opening it read only (many programs try to open all files in
|
||||||
|
read/write mode even if they only intend to read it - this might
|
||||||
|
cause a few under problems under an unix-like environment where most
|
||||||
|
files are read only for a "normal" user)
|
||||||
|
|
||||||
|
* [loader/selector.c]
|
||||||
|
GetMemoryReference(): Added support for __AHIncr and __AHShift
|
||||||
|
|
||||||
|
* [misc/dos_fs.c]
|
||||||
|
DOS_SimplifyPath(): This routine simplifies path names ( e.g., it
|
||||||
|
will change "/usr///local/bin/../lib//a" to "/usr/local/lib/a" )
|
||||||
|
match(): rewritten
|
||||||
|
|
||||||
|
* [objects/text.c]
|
||||||
|
TEXT_NextLine(): Removed a bug in the handling of LF's
|
||||||
|
|
||||||
|
* [miscemu/int21.c]
|
||||||
|
GetFileDateTime(): Fixed. SetFileDateTime() is still broken.
|
||||||
|
|
||||||
|
Sat Mar 11 19:46:19 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
|
||||||
|
|
||||||
|
* [controls/menu.c]
|
||||||
|
ChangeMenu: defaults to MF_INSERT
|
||||||
|
InsertMenu: allow insertion even if position is one after last item
|
||||||
|
|
||||||
|
* [if1632/Imakefile] [if1632/compobj.spec] [if1632/relay.c]
|
||||||
|
[if1632/storage.spec] [include/dlls.h]
|
||||||
|
Added stubs for STORAGE.DLL and COMPOBJ.DLL
|
||||||
|
|
||||||
|
* [if1632/user.spec] [windows/message.c]
|
||||||
|
InSendMessage: new function
|
||||||
|
|
||||||
|
* [include/neexe.h][include/ne_image.c]
|
||||||
|
NE_FixupSegment: fixed handling of additive records
|
||||||
|
|
||||||
|
* [loader/selector.c]
|
||||||
|
GetEntryDLLName: return NULL instead of pointer to DLL.0 if not found
|
||||||
|
|
||||||
|
* [loader/signal.c]
|
||||||
|
win_fault: Enter debugger on SIGFPE, too
|
||||||
|
|
||||||
|
Wed Mar 1 21:47:42 1995 Cameron Heide (heide@ee.ualberta.ca)
|
||||||
|
|
||||||
|
* [miscemu/int*.c]
|
||||||
|
Various minor modifications to the clock tick counter,
|
||||||
|
FindFirst/FindNext funcs, and DPB handling.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Thu Mar 2 17:44:32 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
|
Thu Mar 2 17:44:32 1995 Alexandre Julliard (julliard@sunsite.unc.edu)
|
||||||
|
|
||||||
|
|
|
@ -194,11 +194,6 @@ else
|
||||||
fi
|
fi
|
||||||
fi
|
fi
|
||||||
|
|
||||||
if grep -s seg_not_present /usr/include/linux/ldt.h 2> /dev/null
|
|
||||||
then
|
|
||||||
ALLDEFINES="$ALLDEFINES -DNEW_LDT_STRUCT"
|
|
||||||
fi
|
|
||||||
|
|
||||||
cat > autoconf.h << EOF
|
cat > autoconf.h << EOF
|
||||||
/* autoconf.h generated automatically. Run Configure. */
|
/* autoconf.h generated automatically. Run Configure. */
|
||||||
$WINELIB
|
$WINELIB
|
||||||
|
|
|
@ -1,54 +1,45 @@
|
||||||
This is intend to be a document to help new developers get started.
|
This is intended to be a document to help new developers get started.
|
||||||
Existing developers should feel free to add their comments.
|
Existing developers should feel free to add their comments.
|
||||||
|
|
||||||
MEMORY AND SEGMENTS:
|
MEMORY AND SEGMENTS:
|
||||||
|
|
||||||
NE (Win16) executables consist of multiple segments. The Wine loader
|
NE (Win16) executables consist of multiple segments. The Wine loader
|
||||||
loads each segment into a unique location the Wine processes memory
|
loads each segment into a unique location in the Wine processes memory
|
||||||
and assigns a selector to that segment. To make address conversion
|
and assigns a selector to that segment. Because of this, it's not
|
||||||
simpler, Wine loads the segments in such a way that the segmented
|
possible to exchange addresses freely between 16-bit and 32-bit code.
|
||||||
address (16:16) is stored in memory the same way as the 32-bit linear
|
Addresses used by 16-bit code are segmented addresses (16:16), formed
|
||||||
address. For example, the segmented address 1237:89AB can be at the
|
by a 16-bit selector and a 16-bit offset. Those used by the Wine code
|
||||||
address 0x123789AB in the Wine process space.
|
are regular 32-bit linear addresses.
|
||||||
|
|
||||||
This also implies that a Win16 program cannot access any arbitrary
|
There's three ways to obtain a segmented pointer:
|
||||||
memory location. If a pointer needs to be returned to a Win16 program,
|
- Allocate a block of memory from the global heap and use
|
||||||
then the memory block must be allocated using either GlobalAlloc()
|
WIN16_GlobalLock to get its segmented address.
|
||||||
or HEAP_Alloc(). The HEAP_* functions are faster than the Global*
|
- Allocate a block of memory from a local heap, and build the
|
||||||
functions but are only capable of managing a 64k memory block. The
|
segmented address from the local heap selector (see the
|
||||||
HEAP_* functions are used to implement local heaps. Wine should
|
USER_HEAP_* macros for an example of this).
|
||||||
never call Local* functions. These functions are reserved for use
|
- Declare the argument as 'segptr' instead of 'ptr' in the spec file
|
||||||
by Win16 programs only!
|
for a given API function.
|
||||||
|
|
||||||
The following code fragment should be used to establish a new Wine
|
Once you have a segmented pointer, it must be converted to a linear
|
||||||
local heap:
|
pointer before you can use it from 32-bit code. This can be done with
|
||||||
|
the PTR_SEG_TO_LIN() and PTR_SEG_OFF_TO_LIN() macros. The linear
|
||||||
|
pointer can then be used freely with standard Unix functions like
|
||||||
|
memcpy() etc. without worrying about 64k boundaries. Note: there's no
|
||||||
|
easy way to convert back from a linear to a segmented address.
|
||||||
|
|
||||||
#include "heap.h"
|
In most cases, you don't need to worry about segmented address, as the
|
||||||
|
conversion is made automatically by the callback code and the API
|
||||||
|
functions only see linear addresses. However, in some cases it is
|
||||||
|
necessary to manipulate segmented addresses; the most frequent cases
|
||||||
|
are:
|
||||||
|
- API functions that return a pointer
|
||||||
|
- lParam of Windows messages that point to a structure
|
||||||
|
- Pointers contained inside structures accessed by 16-bit code.
|
||||||
|
|
||||||
#define MY_HEAP_SIZE 0x10000 /* Must be <= 64k */
|
It is usually a good practice to used the type 'SEGPTR' for segmented
|
||||||
|
pointers, instead of something like 'LPSTR' or 'char *'. As SEGPTR is
|
||||||
int MyHeapHandle;
|
defined as a DWORD, you'll get a compilation warning if you mistakenly
|
||||||
void *MyHeapBase;
|
use it as a regular 32-bit pointer.
|
||||||
MDESC *MyHeap;
|
|
||||||
|
|
||||||
...
|
|
||||||
|
|
||||||
int InitMyHeap()
|
|
||||||
{
|
|
||||||
MyHeapHandle = GlobalAlloc(GMEM_FIXED, MY_HEAP_SIZE);
|
|
||||||
if (MyHeapHandle == 0)
|
|
||||||
return -1;
|
|
||||||
MyHeapBase = GlobalLock(MyHeapHandle);
|
|
||||||
HEAP_Init(&MyHeap, MyHeapBase, MY_HEAP_SIZE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
Memory blocks greater than 64 kilobytes in length must be allocated
|
|
||||||
using GlobalAlloc(). Because of our special memory mapping, GlobalLock()
|
|
||||||
cannot be used to obtain the address of a linearly accessible memory
|
|
||||||
block that is greater than 64kB in length. Instead GlobalLinearLock()
|
|
||||||
should be used. The inverse function GlobalLinearUnlock() must be
|
|
||||||
called before the block can be freed with GlobalFree().
|
|
||||||
|
|
||||||
API ENTRY POINTS:
|
API ENTRY POINTS:
|
||||||
|
|
||||||
|
@ -69,7 +60,7 @@ documented in the file "tools/build-spec.txt".
|
||||||
REGISTER FUNCTIONS:
|
REGISTER FUNCTIONS:
|
||||||
|
|
||||||
Some functions are defined as type "register" in the DLL specification files.
|
Some functions are defined as type "register" in the DLL specification files.
|
||||||
Inorder to return values in the registers to the WIN16 program, the handler
|
In order to return values in the registers to the WIN16 program, the handler
|
||||||
function must exit by calling ReturnFromRegisterFunc(). Look at the function
|
function must exit by calling ReturnFromRegisterFunc(). Look at the function
|
||||||
DOS3Call() for an example of how this works.
|
DOS3Call() for an example of how this works.
|
||||||
|
|
||||||
|
|
|
@ -5,8 +5,8 @@ If you want to contribute code to Wine, read the DEVELOPER-HINTS. The
|
||||||
primary source of information to developers is the ChangeLog (next to
|
primary source of information to developers is the ChangeLog (next to
|
||||||
the source, of course).
|
the source, of course).
|
||||||
|
|
||||||
1. make: No rule to make target xxx/xxx.o. Stop.
|
1. make: No rule to make target foo/foo.o. Stop.
|
||||||
This frequently happens when a prior attempt to make xxx.o failed.
|
This frequently happens when a prior attempt to make foo.o failed.
|
||||||
In the current setup, make does not terminate then, but continues and
|
In the current setup, make does not terminate then, but continues and
|
||||||
realises the problem later on. 'make' again and watch the output. Be
|
realises the problem later on. 'make' again and watch the output. Be
|
||||||
sure to analyze the problem before you report it to the newsgroup.
|
sure to analyze the problem before you report it to the newsgroup.
|
||||||
|
@ -26,4 +26,8 @@ to a trace file name. If your system supports another way of malloc
|
||||||
debugging, feel free to add it.
|
debugging, feel free to add it.
|
||||||
Config file: Sets the Wine environment. See README for details.
|
Config file: Sets the Wine environment. See README for details.
|
||||||
|
|
||||||
|
3. BAR.EXE used to work, but does not work anymore
|
||||||
|
Look at the ChangeLog to see what files have been changed. Try to undo
|
||||||
|
the particular patch and go partially back to the previous version. If
|
||||||
|
you have any suspicions, report them to the author or to the newsgroup.
|
||||||
|
|
||||||
|
|
|
@ -180,7 +180,7 @@ LONG ButtonWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_SETTEXT:
|
case WM_SETTEXT:
|
||||||
DEFWND_SetText( hWnd, (LPSTR)lParam );
|
DEFWND_SetText( hWnd, (LPSTR)PTR_SEG_TO_LIN(lParam) );
|
||||||
PAINT_BUTTON( hWnd, style, ODA_DRAWENTIRE );
|
PAINT_BUTTON( hWnd, style, ODA_DRAWENTIRE );
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -306,7 +306,7 @@ static void PB_Paint( HWND hButton, HDC hDC, WORD action )
|
||||||
else GRAPH_DrawReliefRect( hDC, &rc, 2, 2, FALSE );
|
else GRAPH_DrawReliefRect( hDC, &rc, 2, 2, FALSE );
|
||||||
|
|
||||||
/* draw button label, if any: */
|
/* draw button label, if any: */
|
||||||
text = USER_HEAP_ADDR( wndPtr->hText );
|
text = USER_HEAP_LIN_ADDR( wndPtr->hText );
|
||||||
if (text[0])
|
if (text[0])
|
||||||
{
|
{
|
||||||
SetTextColor( hDC, (wndPtr->dwStyle & WS_DISABLED) ?
|
SetTextColor( hDC, (wndPtr->dwStyle & WS_DISABLED) ?
|
||||||
|
@ -356,7 +356,7 @@ static void CB_Paint( HWND hWnd, HDC hDC, WORD action )
|
||||||
|
|
||||||
GetTextMetrics(hDC, &tm);
|
GetTextMetrics(hDC, &tm);
|
||||||
delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
|
delta = (rc.bottom - rc.top - tm.tmHeight) >> 1;
|
||||||
text = USER_HEAP_ADDR( wndPtr->hText );
|
text = USER_HEAP_LIN_ADDR( wndPtr->hText );
|
||||||
textlen = strlen( text );
|
textlen = strlen( text );
|
||||||
|
|
||||||
/* Draw the check-box bitmap */
|
/* Draw the check-box bitmap */
|
||||||
|
@ -433,7 +433,7 @@ static void GB_Paint( HWND hWnd, HDC hDC, WORD action )
|
||||||
LineTo( hDC, rc.left, rc.bottom-1 );
|
LineTo( hDC, rc.left, rc.bottom-1 );
|
||||||
LineTo( hDC, rc.left, rc.top+2 );
|
LineTo( hDC, rc.left, rc.top+2 );
|
||||||
|
|
||||||
text = USER_HEAP_ADDR( wndPtr->hText );
|
text = USER_HEAP_LIN_ADDR( wndPtr->hText );
|
||||||
GetTextExtentPoint(hDC, text, strlen(text), &size);
|
GetTextExtentPoint(hDC, text, strlen(text), &size);
|
||||||
rc.left += 10;
|
rc.left += 10;
|
||||||
rc.right = rc.left + size.cx + 1;
|
rc.right = rc.left + size.cx + 1;
|
||||||
|
@ -481,9 +481,8 @@ static void OB_Paint( HWND hWnd, HDC hDC, WORD action )
|
||||||
WND *wndPtr = WIN_FindWndPtr( hWnd );
|
WND *wndPtr = WIN_FindWndPtr( hWnd );
|
||||||
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
BUTTONINFO *infoPtr = (BUTTONINFO *)wndPtr->wExtra;
|
||||||
|
|
||||||
if (!(hDis = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(DRAWITEMSTRUCT))))
|
if (!(hDis = USER_HEAP_ALLOC( sizeof(DRAWITEMSTRUCT) ))) return;
|
||||||
return;
|
lpdis = (LPDRAWITEMSTRUCT)USER_HEAP_LIN_ADDR(hDis);
|
||||||
lpdis = (LPDRAWITEMSTRUCT)USER_HEAP_ADDR(hDis);
|
|
||||||
lpdis->CtlType = ODT_BUTTON;
|
lpdis->CtlType = ODT_BUTTON;
|
||||||
lpdis->CtlID = wndPtr->wIDmenu;
|
lpdis->CtlID = wndPtr->wIDmenu;
|
||||||
lpdis->itemID = 0;
|
lpdis->itemID = 0;
|
||||||
|
@ -495,7 +494,7 @@ static void OB_Paint( HWND hWnd, HDC hDC, WORD action )
|
||||||
lpdis->hDC = hDC;
|
lpdis->hDC = hDC;
|
||||||
GetClientRect( hWnd, &lpdis->rcItem );
|
GetClientRect( hWnd, &lpdis->rcItem );
|
||||||
lpdis->itemData = 0;
|
lpdis->itemData = 0;
|
||||||
SendMessage(GetParent(hWnd), WM_DRAWITEM, 1, (LPARAM)lpdis);
|
SendMessage(GetParent(hWnd), WM_DRAWITEM, 1, USER_HEAP_SEG_ADDR(hDis) );
|
||||||
USER_HEAP_FREE(hDis);
|
USER_HEAP_FREE(hDis);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,7 +14,6 @@ static char Copyright[] = "Copyright Martin Ayotte, 1993";
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "combo.h"
|
#include "combo.h"
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
#include "heap.h"
|
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
/* #define DEBUG_COMBO */
|
/* #define DEBUG_COMBO */
|
||||||
|
@ -40,10 +39,11 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
LPHEADCOMBO lphc;
|
LPHEADCOMBO lphc;
|
||||||
HDC hDC;
|
HDC hDC;
|
||||||
BITMAP bm;
|
BITMAP bm;
|
||||||
char str[128];
|
|
||||||
PAINTSTRUCT paintstruct;
|
PAINTSTRUCT paintstruct;
|
||||||
LPDRAWITEMSTRUCT lpdis;
|
LPDRAWITEMSTRUCT lpdis;
|
||||||
DWORD dwStyle;
|
DWORD dwStyle;
|
||||||
|
HANDLE hStr;
|
||||||
|
|
||||||
switch(message) {
|
switch(message) {
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
wndPtr = WIN_FindWndPtr(hwnd);
|
wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
|
@ -95,7 +95,7 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
lphc->hWndLBox = CreateWindow("LISTBOX", "", dwStyle,
|
lphc->hWndLBox = CreateWindow("LISTBOX", "", dwStyle,
|
||||||
rect.left, rect.top + bm.bmHeight,
|
rect.left, rect.top + bm.bmHeight,
|
||||||
width, height, wndPtr->hwndParent, 0,
|
width, height, wndPtr->hwndParent, 0,
|
||||||
wndPtr->hInstance, (LPSTR)MAKELONG(0, hwnd));
|
wndPtr->hInstance, (SEGPTR)MAKELONG(0, hwnd));
|
||||||
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
||||||
dprintf_combo(stddeb,"Combo Creation LBox=%X!\n", lphc->hWndLBox);
|
dprintf_combo(stddeb,"Combo Creation LBox=%X!\n", lphc->hWndLBox);
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -126,15 +126,16 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
lphc = ComboGetStorageHeader(hwnd);
|
lphc = ComboGetStorageHeader(hwnd);
|
||||||
if (lphc == NULL || wndPtr == NULL) return 0;
|
if (lphc == NULL || wndPtr == NULL) return 0;
|
||||||
if (LOWORD(lParam) == lphc->hWndLBox) {
|
if (LOWORD(lParam) == lphc->hWndLBox) {
|
||||||
|
hStr = USER_HEAP_ALLOC( 256 );
|
||||||
switch(HIWORD(lParam)) {
|
switch(HIWORD(lParam)) {
|
||||||
case LBN_SELCHANGE:
|
case LBN_SELCHANGE:
|
||||||
lphc->dwState = lphc->dwState & (CB_SHOWDROPDOWN ^ 0xFFFFFFFFL);
|
lphc->dwState = lphc->dwState & (CB_SHOWDROPDOWN ^ 0xFFFFFFFFL);
|
||||||
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
||||||
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
||||||
if (y != LB_ERR) {
|
if (y != LB_ERR) {
|
||||||
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
|
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
if (lphc->hWndEdit != 0)
|
if (lphc->hWndEdit != 0)
|
||||||
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
|
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
else {
|
else {
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
|
@ -148,6 +149,7 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
MAKELONG(hwnd, CBN_DBLCLK));
|
MAKELONG(hwnd, CBN_DBLCLK));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
USER_HEAP_FREE( hStr );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
|
@ -174,9 +176,11 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
dprintf_combo(stddeb,"before Combo List GetCurSel !\n");
|
dprintf_combo(stddeb,"before Combo List GetCurSel !\n");
|
||||||
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
||||||
if (y != LB_ERR) {
|
if (y != LB_ERR) {
|
||||||
|
hStr = USER_HEAP_ALLOC( 256 );
|
||||||
dprintf_combo(stddeb,"before Combo List GetText !\n");
|
dprintf_combo(stddeb,"before Combo List GetText !\n");
|
||||||
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
|
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
|
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
|
USER_HEAP_FREE( hStr );
|
||||||
}
|
}
|
||||||
dprintf_combo(stddeb,"End of Combo List Hide !\n");
|
dprintf_combo(stddeb,"End of Combo List Hide !\n");
|
||||||
}
|
}
|
||||||
|
@ -211,9 +215,11 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
||||||
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
||||||
if (y != LB_ERR) {
|
if (y != LB_ERR) {
|
||||||
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
|
hStr = USER_HEAP_ALLOC( 256 );
|
||||||
|
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
if (lphc->hWndEdit != 0)
|
if (lphc->hWndEdit != 0)
|
||||||
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
|
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
|
USER_HEAP_FREE( hStr );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -236,11 +242,13 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
if (y >= count) y = count - 1;
|
if (y >= count) y = count - 1;
|
||||||
lphc->LastSel = y;
|
lphc->LastSel = y;
|
||||||
SendMessage(lphc->hWndLBox, LB_SETCURSEL, y, 0L);
|
SendMessage(lphc->hWndLBox, LB_SETCURSEL, y, 0L);
|
||||||
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
|
hStr = USER_HEAP_ALLOC( 256 );
|
||||||
|
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
if (lphc->hWndEdit != 0)
|
if (lphc->hWndEdit != 0)
|
||||||
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
|
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
SendMessage(GetParent(hwnd), WM_COMMAND, wndPtr->wIDmenu,
|
SendMessage(GetParent(hwnd), WM_COMMAND, wndPtr->wIDmenu,
|
||||||
MAKELONG(hwnd, CBN_SELCHANGE));
|
MAKELONG(hwnd, CBN_SELCHANGE));
|
||||||
|
USER_HEAP_FREE( hStr );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case WM_MEASUREITEM:
|
case WM_MEASUREITEM:
|
||||||
|
@ -258,7 +266,7 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
dprintf_combo(stddeb,"ComboBoxWndProc // WM_DRAWITEM w=%04X l=%08lX\n", wParam, lParam);
|
dprintf_combo(stddeb,"ComboBoxWndProc // WM_DRAWITEM w=%04X l=%08lX\n", wParam, lParam);
|
||||||
wndPtr = WIN_FindWndPtr(hwnd);
|
wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
if (wndPtr == NULL) break;
|
if (wndPtr == NULL) break;
|
||||||
lpdis = (LPDRAWITEMSTRUCT)lParam;
|
lpdis = (LPDRAWITEMSTRUCT)PTR_SEG_TO_LIN(lParam);
|
||||||
if (lpdis == NULL) break;
|
if (lpdis == NULL) break;
|
||||||
lpdis->CtlType = ODT_COMBOBOX;
|
lpdis->CtlType = ODT_COMBOBOX;
|
||||||
lpdis->CtlID = wndPtr->wIDmenu;
|
lpdis->CtlID = wndPtr->wIDmenu;
|
||||||
|
@ -299,13 +307,15 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
ShowWindow(lphc->hWndLBox, SW_HIDE);
|
||||||
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
||||||
if (y != LB_ERR) {
|
if (y != LB_ERR) {
|
||||||
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, (LPARAM)str);
|
hStr = USER_HEAP_ALLOC( 256 );
|
||||||
if (lphc->hWndEdit != 0)
|
SendMessage(lphc->hWndLBox, LB_GETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, (LPARAM)str);
|
if (lphc->hWndEdit != 0)
|
||||||
|
SendMessage(lphc->hWndEdit, WM_SETTEXT, (WORD)y, USER_HEAP_SEG_ADDR(hStr));
|
||||||
|
USER_HEAP_FREE( hStr );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case CB_ADDSTRING:
|
case CB_ADDSTRING:
|
||||||
dprintf_combo(stddeb,"CB_ADDSTRING '%s' !\n", (LPSTR)lParam);
|
dprintf_combo(stddeb,"CB_ADDSTRING '%s' !\n", (LPSTR)PTR_SEG_TO_LIN(lParam));
|
||||||
lphc = ComboGetStorageHeader(hwnd);
|
lphc = ComboGetStorageHeader(hwnd);
|
||||||
if (lphc == NULL) return 0;
|
if (lphc == NULL) return 0;
|
||||||
return(SendMessage(lphc->hWndLBox, LB_ADDSTRING, wParam, lParam));
|
return(SendMessage(lphc->hWndLBox, LB_ADDSTRING, wParam, lParam));
|
||||||
|
@ -320,7 +330,7 @@ LONG ComboBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
if (lphc == NULL) return 0;
|
if (lphc == NULL) return 0;
|
||||||
return(SendMessage(lphc->hWndLBox, LB_GETTEXTLEN, wParam, lParam));
|
return(SendMessage(lphc->hWndLBox, LB_GETTEXTLEN, wParam, lParam));
|
||||||
case CB_INSERTSTRING:
|
case CB_INSERTSTRING:
|
||||||
dprintf_combo(stddeb,"CB_INSERTSTRING '%s' !\n",(LPSTR)lParam);
|
dprintf_combo(stddeb,"CB_INSERTSTRING '%s' !\n",(LPSTR)PTR_SEG_TO_LIN(lParam));
|
||||||
lphc = ComboGetStorageHeader(hwnd);
|
lphc = ComboGetStorageHeader(hwnd);
|
||||||
if (lphc == NULL) return 0;
|
if (lphc == NULL) return 0;
|
||||||
return(SendMessage(lphc->hWndLBox, LB_INSERTSTRING, wParam, lParam));
|
return(SendMessage(lphc->hWndLBox, LB_INSERTSTRING, wParam, lParam));
|
||||||
|
@ -463,7 +473,6 @@ void ComboBoxStaticOwnerDraw(HWND hWnd, LPHEADCOMBO lphc)
|
||||||
HDC hDC;
|
HDC hDC;
|
||||||
HBRUSH hBrush;
|
HBRUSH hBrush;
|
||||||
short y;
|
short y;
|
||||||
char str[64];
|
|
||||||
LPSTR ptr = NULL;
|
LPSTR ptr = NULL;
|
||||||
HANDLE hTemp;
|
HANDLE hTemp;
|
||||||
WND *wndPtr;
|
WND *wndPtr;
|
||||||
|
@ -471,7 +480,6 @@ void ComboBoxStaticOwnerDraw(HWND hWnd, LPHEADCOMBO lphc)
|
||||||
dprintf_combo(stddeb,"ComboBoxStaticOwnerDraw(%04X, %p) !\n", hWnd, lphc);
|
dprintf_combo(stddeb,"ComboBoxStaticOwnerDraw(%04X, %p) !\n", hWnd, lphc);
|
||||||
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
y = SendMessage(lphc->hWndLBox, LB_GETCURSEL, 0, 0L);
|
||||||
if (y != LB_ERR) {
|
if (y != LB_ERR) {
|
||||||
SendMessage(lphc->hWndLBox, LB_GETTEXT, y, (LPARAM)str);
|
|
||||||
ptr = (LPSTR)SendMessage(lphc->hWndLBox, LB_GETITEMDATA, y, 0L);
|
ptr = (LPSTR)SendMessage(lphc->hWndLBox, LB_GETITEMDATA, y, 0L);
|
||||||
}
|
}
|
||||||
hDC = GetDC(hWnd);
|
hDC = GetDC(hWnd);
|
||||||
|
@ -480,8 +488,8 @@ void ComboBoxStaticOwnerDraw(HWND hWnd, LPHEADCOMBO lphc)
|
||||||
if (hBrush == (HBRUSH)NULL) hBrush = GetStockObject(WHITE_BRUSH);
|
if (hBrush == (HBRUSH)NULL) hBrush = GetStockObject(WHITE_BRUSH);
|
||||||
wndPtr = WIN_FindWndPtr(hWnd);
|
wndPtr = WIN_FindWndPtr(hWnd);
|
||||||
if (wndPtr == NULL) return;
|
if (wndPtr == NULL) return;
|
||||||
hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(DRAWITEMSTRUCT));
|
hTemp = USER_HEAP_ALLOC( sizeof(DRAWITEMSTRUCT) );
|
||||||
lpdis = (LPDRAWITEMSTRUCT) USER_HEAP_ADDR(hTemp);
|
lpdis = (LPDRAWITEMSTRUCT) USER_HEAP_LIN_ADDR(hTemp);
|
||||||
if (lpdis == NULL) {
|
if (lpdis == NULL) {
|
||||||
printf("ComboBox Ownerdraw // Error allocating DRAWITEMSTRUCT !\n");
|
printf("ComboBox Ownerdraw // Error allocating DRAWITEMSTRUCT !\n");
|
||||||
ReleaseDC( hWnd, hDC );
|
ReleaseDC( hWnd, hDC );
|
||||||
|
@ -495,7 +503,7 @@ void ComboBoxStaticOwnerDraw(HWND hWnd, LPHEADCOMBO lphc)
|
||||||
lpdis->itemAction = ODA_DRAWENTIRE;
|
lpdis->itemAction = ODA_DRAWENTIRE;
|
||||||
lpdis->CtlType = ODT_COMBOBOX;
|
lpdis->CtlType = ODT_COMBOBOX;
|
||||||
lpdis->CtlID = wndPtr->wIDmenu;
|
lpdis->CtlID = wndPtr->wIDmenu;
|
||||||
SendMessage(GetParent(hWnd), WM_DRAWITEM, y, (LPARAM)lpdis);
|
SendMessage(GetParent(hWnd), WM_DRAWITEM, y,USER_HEAP_SEG_ADDR(hTemp));
|
||||||
USER_HEAP_FREE(hTemp);
|
USER_HEAP_FREE(hTemp);
|
||||||
ReleaseDC(hWnd, hDC);
|
ReleaseDC(hWnd, hDC);
|
||||||
}
|
}
|
||||||
|
@ -515,13 +523,13 @@ BOOL DlgDirSelectComboBox(HWND hDlg, LPSTR lpStr, int nIDLBox)
|
||||||
/************************************************************************
|
/************************************************************************
|
||||||
* DlgDirListComboBox [USER.195]
|
* DlgDirListComboBox [USER.195]
|
||||||
*/
|
*/
|
||||||
int DlgDirListComboBox(HWND hDlg, LPSTR lpPathSpec,
|
int DlgDirListComboBox(HWND hDlg, SEGPTR lpPathSpec,
|
||||||
int nIDLBox, int nIDStat, WORD wType)
|
int nIDLBox, int nIDStat, WORD wType)
|
||||||
{
|
{
|
||||||
HWND hWnd;
|
HWND hWnd;
|
||||||
LPHEADCOMBO lphc;
|
LPHEADCOMBO lphc;
|
||||||
dprintf_combo(stddeb,"DlgDirListComboBox(%04X, '%s', %d, %d, %04X) \n",
|
dprintf_combo(stddeb,"DlgDirListComboBox(%04X, '%s', %d, %d, %04X) \n",
|
||||||
hDlg, lpPathSpec, nIDLBox, nIDStat, wType);
|
hDlg, (char *)PTR_SEG_TO_LIN(lpPathSpec), nIDLBox, nIDStat, wType);
|
||||||
hWnd = GetDlgItem(hDlg, nIDLBox);
|
hWnd = GetDlgItem(hDlg, nIDLBox);
|
||||||
lphc = ComboGetStorageHeader(hWnd);
|
lphc = ComboGetStorageHeader(hWnd);
|
||||||
if (lphc == NULL) return 0;
|
if (lphc == NULL) return 0;
|
||||||
|
|
|
@ -12,7 +12,7 @@ static char Copyright[] = "Copyright David W. Metcalfe, 1994";
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
#include <heap.h>
|
#include "local.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "class.h"
|
#include "class.h"
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
|
@ -231,7 +231,7 @@ LONG EditWndProc(HWND hwnd, WORD uMsg, WORD wParam, LONG lParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETRECT:
|
case EM_GETRECT:
|
||||||
GetWindowRect(hwnd, (LPRECT)lParam);
|
GetWindowRect(hwnd, (LPRECT)PTR_SEG_TO_LIN(lParam));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case EM_GETSEL:
|
case EM_GETSEL:
|
||||||
|
@ -359,7 +359,7 @@ LONG EditWndProc(HWND hwnd, WORD uMsg, WORD wParam, LONG lParam)
|
||||||
textPtr = EDIT_HeapAddr(hwnd, es->hText);
|
textPtr = EDIT_HeapAddr(hwnd, es->hText);
|
||||||
if ((int)wParam > (len = strlen(textPtr)))
|
if ((int)wParam > (len = strlen(textPtr)))
|
||||||
{
|
{
|
||||||
strcpy((char *)lParam, textPtr);
|
strcpy((char *)PTR_SEG_TO_LIN(lParam), textPtr);
|
||||||
lResult = (DWORD)len ;
|
lResult = (DWORD)len ;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -469,7 +469,7 @@ LONG EditWndProc(HWND hwnd, WORD uMsg, WORD wParam, LONG lParam)
|
||||||
|
|
||||||
long EDIT_NCCreateMsg(HWND hwnd, LONG lParam)
|
long EDIT_NCCreateMsg(HWND hwnd, LONG lParam)
|
||||||
{
|
{
|
||||||
CREATESTRUCT *createStruct = (CREATESTRUCT *)lParam;
|
CREATESTRUCT *createStruct = (CREATESTRUCT *)PTR_SEG_TO_LIN(lParam);
|
||||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
EDITSTATE *es;
|
EDITSTATE *es;
|
||||||
unsigned int *textPtrs;
|
unsigned int *textPtrs;
|
||||||
|
@ -477,6 +477,7 @@ long EDIT_NCCreateMsg(HWND hwnd, LONG lParam)
|
||||||
|
|
||||||
/* store pointer to local or global heap in window structure so that */
|
/* store pointer to local or global heap in window structure so that */
|
||||||
/* EDITSTATE structure itself can be stored on local heap */
|
/* EDITSTATE structure itself can be stored on local heap */
|
||||||
|
#if 0
|
||||||
if (HEAP_LocalFindHeap(createStruct->hInstance)!=NULL)
|
if (HEAP_LocalFindHeap(createStruct->hInstance)!=NULL)
|
||||||
(MDESC **)*(LONG *)(wndPtr->wExtra + 2) =
|
(MDESC **)*(LONG *)(wndPtr->wExtra + 2) =
|
||||||
&HEAP_LocalFindHeap(createStruct->hInstance)->free_list;
|
&HEAP_LocalFindHeap(createStruct->hInstance)->free_list;
|
||||||
|
@ -486,6 +487,7 @@ long EDIT_NCCreateMsg(HWND hwnd, LONG lParam)
|
||||||
GlobalLock(createStruct->hInstance);
|
GlobalLock(createStruct->hInstance);
|
||||||
/* GlobalUnlock(createStruct->hInstance); */
|
/* GlobalUnlock(createStruct->hInstance); */
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
/* allocate space for state variable structure */
|
/* allocate space for state variable structure */
|
||||||
(HANDLE)(*(wndPtr->wExtra)) = EDIT_HeapAlloc(hwnd, sizeof(EDITSTATE));
|
(HANDLE)(*(wndPtr->wExtra)) = EDIT_HeapAlloc(hwnd, sizeof(EDITSTATE));
|
||||||
es = (EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
|
es = (EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
|
||||||
|
@ -507,21 +509,21 @@ long EDIT_NCCreateMsg(HWND hwnd, LONG lParam)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (strlen(createStruct->lpszName) < EditBufLen(wndPtr))
|
char *windowName = (char *)PTR_SEG_TO_LIN( createStruct->lpszName );
|
||||||
|
if (strlen(windowName) < EditBufLen(wndPtr))
|
||||||
{
|
{
|
||||||
es->textlen = EditBufLen(wndPtr) + 1;
|
es->textlen = EditBufLen(wndPtr) + 1;
|
||||||
es->hText = EDIT_HeapAlloc(hwnd, EditBufLen(wndPtr) + 2);
|
es->hText = EDIT_HeapAlloc(hwnd, EditBufLen(wndPtr) + 2);
|
||||||
text = EDIT_HeapAddr(hwnd, es->hText);
|
text = EDIT_HeapAddr(hwnd, es->hText);
|
||||||
strcpy(text, createStruct->lpszName);
|
strcpy(text, windowName);
|
||||||
*(text + es->textlen) = '\0';
|
*(text + es->textlen) = '\0';
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
es->hText = EDIT_HeapAlloc(hwnd,
|
es->hText = EDIT_HeapAlloc(hwnd, strlen(windowName) + 2);
|
||||||
strlen(createStruct->lpszName) + 2);
|
|
||||||
text = EDIT_HeapAddr(hwnd, es->hText);
|
text = EDIT_HeapAddr(hwnd, es->hText);
|
||||||
strcpy(text, createStruct->lpszName);
|
strcpy(text, windowName);
|
||||||
es->textlen = strlen(createStruct->lpszName) + 1;
|
es->textlen = strlen(windowName) + 1;
|
||||||
}
|
}
|
||||||
*(text + es->textlen + 1) = '\0';
|
*(text + es->textlen + 1) = '\0';
|
||||||
EDIT_BuildTextPointers(hwnd);
|
EDIT_BuildTextPointers(hwnd);
|
||||||
|
@ -970,10 +972,10 @@ void EDIT_WriteTextLine(HWND hwnd, RECT *rect, int y)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
EDIT_WriteText(hwnd, lp, off, len, y - es->wtop, rc.left, &rc,
|
EDIT_WriteText(hwnd, lp, off, len, y - es->wtop, rc.left, &rc,
|
||||||
TRUE, FALSE);
|
TRUE, FALSE);
|
||||||
|
|
||||||
EDIT_HeapFree(hwnd, hLine);
|
EDIT_HeapFree(hwnd, hLine);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -998,7 +1000,7 @@ void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
HANDLE hStr;
|
HANDLE hStr;
|
||||||
char *str, *cp, *cp1;
|
char *str, *cp, *cp1;
|
||||||
int diff, num_spaces, tabwidth, scol;
|
int diff=0, num_spaces, tabwidth, scol;
|
||||||
HRGN hrgnClip;
|
HRGN hrgnClip;
|
||||||
COLORREF oldTextColor, oldBkgdColor;
|
COLORREF oldTextColor, oldBkgdColor;
|
||||||
HFONT oldfont;
|
HFONT oldfont;
|
||||||
|
@ -1010,6 +1012,12 @@ void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
||||||
|
|
||||||
dprintf_edit(stddeb,"EDIT_WriteText lp=%s, off=%d, len=%d, row=%d, col=%d, reverse=%d\n", lp, off, len, row, col, reverse);
|
dprintf_edit(stddeb,"EDIT_WriteText lp=%s, off=%d, len=%d, row=%d, col=%d, reverse=%d\n", lp, off, len, row, col, reverse);
|
||||||
|
|
||||||
|
if( off < 0 ) {
|
||||||
|
len += off;
|
||||||
|
col -= off;
|
||||||
|
off = 0;
|
||||||
|
}
|
||||||
|
|
||||||
hdc = GetDC(hwnd);
|
hdc = GetDC(hwnd);
|
||||||
hStr = EDIT_GetStr(hwnd, lp, off, len, &diff);
|
hStr = EDIT_GetStr(hwnd, lp, off, len, &diff);
|
||||||
str = (char *)EDIT_HeapAddr(hwnd, hStr);
|
str = (char *)EDIT_HeapAddr(hwnd, hStr);
|
||||||
|
@ -1166,7 +1174,7 @@ void EDIT_CharMsg(HWND hwnd, WORD wParam)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
if (wParam >= 20 && wParam <= 126)
|
if (wParam >= 20 && wParam <= 254 && wParam != 127 )
|
||||||
EDIT_KeyTyped(hwnd, wParam);
|
EDIT_KeyTyped(hwnd, wParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
@ -2232,15 +2240,15 @@ LONG EDIT_SetTextMsg(HWND hwnd, LONG lParam)
|
||||||
EDITSTATE *es =
|
EDITSTATE *es =
|
||||||
(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
|
(EDITSTATE *)EDIT_HeapAddr(hwnd, (HANDLE)(*(wndPtr->wExtra)));
|
||||||
|
|
||||||
if (strlen((char *)lParam) <= es->MaxTextLen)
|
if (strlen((char *)PTR_SEG_TO_LIN(lParam)) <= es->MaxTextLen)
|
||||||
{
|
{
|
||||||
len = ( lParam? strlen((char *)lParam) : 0 );
|
len = ( lParam? strlen((char *)PTR_SEG_TO_LIN(lParam)) : 0 );
|
||||||
EDIT_ClearText(hwnd);
|
EDIT_ClearText(hwnd);
|
||||||
es->textlen = len;
|
es->textlen = len;
|
||||||
es->hText = EDIT_HeapReAlloc(hwnd, es->hText, len + 3);
|
es->hText = EDIT_HeapReAlloc(hwnd, es->hText, len + 3);
|
||||||
text = EDIT_HeapAddr(hwnd, es->hText);
|
text = EDIT_HeapAddr(hwnd, es->hText);
|
||||||
if (lParam)
|
if (lParam)
|
||||||
strcpy(text, (char *)lParam);
|
strcpy(text, (char *)PTR_SEG_TO_LIN(lParam));
|
||||||
text[len] = '\0';
|
text[len] = '\0';
|
||||||
text[len + 1] = '\0';
|
text[len + 1] = '\0';
|
||||||
text[len + 2] = '\0';
|
text[len + 2] = '\0';
|
||||||
|
@ -2392,7 +2400,7 @@ void EDIT_GetLineCol(HWND hwnd, int off, int *line, int *col)
|
||||||
(unsigned int *)EDIT_HeapAddr(hwnd, es->hTextPtrs);
|
(unsigned int *)EDIT_HeapAddr(hwnd, es->hTextPtrs);
|
||||||
|
|
||||||
/* check for (0,0) */
|
/* check for (0,0) */
|
||||||
if (!off)
|
if (!off || !es->wlines)
|
||||||
{
|
{
|
||||||
*line = 0;
|
*line = 0;
|
||||||
*col = 0;
|
*col = 0;
|
||||||
|
@ -2739,7 +2747,8 @@ LONG EDIT_GetSelMsg(HWND hwnd)
|
||||||
void EDIT_ReplaceSel(HWND hwnd, LONG lParam)
|
void EDIT_ReplaceSel(HWND hwnd, LONG lParam)
|
||||||
{
|
{
|
||||||
EDIT_DeleteSel(hwnd);
|
EDIT_DeleteSel(hwnd);
|
||||||
EDIT_InsertText(hwnd, (char *)lParam, strlen((char *)lParam));
|
EDIT_InsertText(hwnd, (char *)PTR_SEG_TO_LIN(lParam),
|
||||||
|
strlen((char *)PTR_SEG_TO_LIN(lParam)));
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
}
|
}
|
||||||
|
@ -3000,9 +3009,8 @@ unsigned int EDIT_HeapAlloc(HWND hwnd, int bytes)
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
unsigned int ret;
|
unsigned int ret;
|
||||||
ret = ((unsigned int)HEAP_Alloc((MDESC **)
|
|
||||||
*(LONG *)(wndPtr->wExtra + 2),
|
ret = LOCAL_Alloc( wndPtr->hInstance, LMEM_FIXED, bytes );
|
||||||
GMEM_MOVEABLE, bytes) & 0xffff);
|
|
||||||
if (ret == 0)
|
if (ret == 0)
|
||||||
printf("EDIT_HeapAlloc: Out of heap-memory\n");
|
printf("EDIT_HeapAlloc: Out of heap-memory\n");
|
||||||
return ret;
|
return ret;
|
||||||
|
@ -3018,10 +3026,7 @@ unsigned int EDIT_HeapAlloc(HWND hwnd, int bytes)
|
||||||
void *EDIT_HeapAddr(HWND hwnd, unsigned int handle)
|
void *EDIT_HeapAddr(HWND hwnd, unsigned int handle)
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
|
return handle ? PTR_SEG_OFF_TO_LIN( wndPtr->hInstance, handle ) : 0;
|
||||||
return ((void *)((handle) ? ((handle) | ((unsigned int)
|
|
||||||
(*(MDESC **)*(LONG *)(wndPtr->wExtra + 2))
|
|
||||||
& 0xffff0000)) : 0));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3035,10 +3040,7 @@ unsigned int EDIT_HeapReAlloc(HWND hwnd, unsigned int handle, int bytes)
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
|
|
||||||
return ((unsigned int)HEAP_ReAlloc((MDESC **)
|
return LOCAL_ReAlloc( wndPtr->hInstance, handle, bytes, LMEM_FIXED );
|
||||||
*(LONG *)(wndPtr->wExtra + 2),
|
|
||||||
EDIT_HeapAddr(hwnd, handle),
|
|
||||||
bytes, GMEM_MOVEABLE) & 0xffff);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3052,8 +3054,7 @@ void EDIT_HeapFree(HWND hwnd, unsigned int handle)
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
|
|
||||||
HEAP_Free((MDESC **)*(LONG *)(wndPtr->wExtra + 2),
|
LOCAL_Free( wndPtr->hInstance, handle );
|
||||||
EDIT_HeapAddr(hwnd, handle));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -3067,7 +3068,10 @@ unsigned int EDIT_HeapSize(HWND hwnd, unsigned int handle)
|
||||||
{
|
{
|
||||||
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
WND *wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
|
|
||||||
|
#if 0
|
||||||
return HEAP_LocalSize((MDESC **)*(LONG *)(wndPtr->wExtra + 2), handle);
|
return HEAP_LocalSize((MDESC **)*(LONG *)(wndPtr->wExtra + 2), handle);
|
||||||
|
#endif
|
||||||
|
return LOCAL_Size( wndPtr->hInstance, handle );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -8,11 +8,12 @@ static char Copyright[] = "Copyright Martin Ayotte, 1993";
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <ctype.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
#include "heap.h"
|
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "msdos.h"
|
#include "msdos.h"
|
||||||
#include "listbox.h"
|
#include "listbox.h"
|
||||||
|
@ -47,16 +48,24 @@ int ListBoxDefaultItem(HWND hwnd, WND *wndPtr,
|
||||||
LPHEADLIST lphl, LPLISTSTRUCT lpls);
|
LPHEADLIST lphl, LPLISTSTRUCT lpls);
|
||||||
int ListBoxFindNextMatch(HWND hwnd, WORD wChar);
|
int ListBoxFindNextMatch(HWND hwnd, WORD wChar);
|
||||||
int ListMaxFirstVisible(LPHEADLIST lphl);
|
int ListMaxFirstVisible(LPHEADLIST lphl);
|
||||||
|
void ListBoxSendNotification(HWND hwnd, WORD code);
|
||||||
|
|
||||||
#define HasStrings(wndPtr) ( \
|
#define HasStrings(wndPtr) ( \
|
||||||
( ((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) != LBS_OWNERDRAWFIXED) && \
|
( ((wndPtr->dwStyle & LBS_OWNERDRAWFIXED) != LBS_OWNERDRAWFIXED) && \
|
||||||
((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) != LBS_OWNERDRAWVARIABLE) ) || \
|
((wndPtr->dwStyle & LBS_OWNERDRAWVARIABLE) != LBS_OWNERDRAWVARIABLE) ) || \
|
||||||
((wndPtr->dwStyle & LBS_HASSTRINGS) == LBS_HASSTRINGS) )
|
((wndPtr->dwStyle & LBS_HASSTRINGS) == LBS_HASSTRINGS) )
|
||||||
|
|
||||||
|
#if 0
|
||||||
#define LIST_HEAP_ALLOC(lphl,f,size) ((int)HEAP_Alloc(&lphl->Heap,f,size) & 0xffff)
|
#define LIST_HEAP_ALLOC(lphl,f,size) ((int)HEAP_Alloc(&lphl->Heap,f,size) & 0xffff)
|
||||||
#define LIST_HEAP_FREE(lphl,handle) (HEAP_Free(&lphl->Heap,LIST_HEAP_ADDR(lphl,handle)))
|
#define LIST_HEAP_FREE(lphl,handle) (HEAP_Free(&lphl->Heap,LIST_HEAP_ADDR(lphl,handle)))
|
||||||
#define LIST_HEAP_ADDR(lphl,handle) \
|
#define LIST_HEAP_ADDR(lphl,handle) \
|
||||||
((void *)((handle) ? ((handle) | ((int)lphl->Heap & 0xffff0000)) : 0))
|
((void *)((handle) ? ((handle) | ((int)lphl->Heap & 0xffff0000)) : 0))
|
||||||
|
#else
|
||||||
|
#define LIST_HEAP_ALLOC(lphl,f,size) USER_HEAP_ALLOC(size)
|
||||||
|
#define LIST_HEAP_FREE(lphl,handle) USER_HEAP_FREE(handle)
|
||||||
|
#define LIST_HEAP_ADDR(lphl,handle) USER_HEAP_LIN_ADDR(handle)
|
||||||
|
#endif
|
||||||
|
|
||||||
#define LIST_HEAP_SIZE 0x10000
|
#define LIST_HEAP_SIZE 0x10000
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -79,7 +88,7 @@ LONG ListBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
|
lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
|
||||||
dprintf_listbox(stddeb,"ListBox WM_CREATE %p !\n", lphl);
|
dprintf_listbox(stddeb,"ListBox WM_CREATE %p !\n", lphl);
|
||||||
if (lphl == NULL) return 0;
|
if (lphl == NULL) return 0;
|
||||||
createStruct = (CREATESTRUCT *)lParam;
|
createStruct = (CREATESTRUCT *)PTR_SEG_TO_LIN(lParam);
|
||||||
if (HIWORD(createStruct->lpCreateParams) != 0)
|
if (HIWORD(createStruct->lpCreateParams) != 0)
|
||||||
lphl->hWndLogicParent = (HWND)HIWORD(createStruct->lpCreateParams);
|
lphl->hWndLogicParent = (HWND)HIWORD(createStruct->lpCreateParams);
|
||||||
else
|
else
|
||||||
|
@ -198,12 +207,10 @@ LONG ListBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
wRet = ListBoxGetSel(hwnd, y);
|
wRet = ListBoxGetSel(hwnd, y);
|
||||||
ListBoxSetSel(hwnd, y, !wRet);
|
ListBoxSetSel(hwnd, y, !wRet);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
ListBoxSetCurSel(hwnd, y);
|
ListBoxSetCurSel(hwnd, y);
|
||||||
if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
|
if ((wndPtr->dwStyle & LBS_MULTIPLESEL) == LBS_MULTIPLESEL)
|
||||||
SendMessage(lphl->hWndLogicParent, WM_COMMAND,
|
ListBoxSendNotification( hwnd, LBN_SELCHANGE );
|
||||||
wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
|
|
||||||
}
|
|
||||||
ListBoxGetItemRect(hwnd, y, &rectsel);
|
ListBoxGetItemRect(hwnd, y, &rectsel);
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
|
@ -213,8 +220,7 @@ LONG ListBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
|
lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
|
||||||
if (lphl == NULL) return 0;
|
if (lphl == NULL) return 0;
|
||||||
if (lphl->PrevFocused != lphl->ItemFocused)
|
if (lphl->PrevFocused != lphl->ItemFocused)
|
||||||
SendMessage(lphl->hWndLogicParent, WM_COMMAND, wndPtr->wIDmenu,
|
ListBoxSendNotification( hwnd, LBN_SELCHANGE );
|
||||||
MAKELONG(hwnd, LBN_SELCHANGE));
|
|
||||||
return 0;
|
return 0;
|
||||||
case WM_RBUTTONUP:
|
case WM_RBUTTONUP:
|
||||||
case WM_LBUTTONDBLCLK:
|
case WM_LBUTTONDBLCLK:
|
||||||
|
@ -252,13 +258,10 @@ LONG ListBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
wRet = ListBoxFindMouse(hwnd, LOWORD(lParam), HIWORD(lParam));
|
wRet = ListBoxFindMouse(hwnd, LOWORD(lParam), HIWORD(lParam));
|
||||||
if ((wndPtr->dwStyle & LBS_MULTIPLESEL) == LBS_MULTIPLESEL) {
|
if ((wndPtr->dwStyle & LBS_MULTIPLESEL) == LBS_MULTIPLESEL) {
|
||||||
lphl->ItemFocused = wRet;
|
lphl->ItemFocused = wRet;
|
||||||
|
ListBoxSendNotification(hwnd, LBN_SELCHANGE);
|
||||||
}
|
}
|
||||||
else {
|
else
|
||||||
ListBoxSetCurSel(hwnd, wRet);
|
ListBoxSetCurSel(hwnd, wRet);
|
||||||
if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
|
|
||||||
SendMessage(lphl->hWndLogicParent, WM_COMMAND,
|
|
||||||
wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
|
|
||||||
}
|
|
||||||
ListBoxGetItemRect(hwnd, wRet, &rectsel);
|
ListBoxGetItemRect(hwnd, wRet, &rectsel);
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
|
@ -325,9 +328,7 @@ LONG ListBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
if (lphl->FirstVisible < 1) lphl->FirstVisible = 1;
|
if (lphl->FirstVisible < 1) lphl->FirstVisible = 1;
|
||||||
if ((wndPtr->dwStyle & LBS_MULTIPLESEL) != LBS_MULTIPLESEL) {
|
if ((wndPtr->dwStyle & LBS_MULTIPLESEL) != LBS_MULTIPLESEL) {
|
||||||
ListBoxSetCurSel(hwnd, lphl->ItemFocused);
|
ListBoxSetCurSel(hwnd, lphl->ItemFocused);
|
||||||
if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
|
ListBoxSendNotification(hwnd, LBN_SELCHANGE);
|
||||||
SendMessage(lphl->hWndLogicParent, WM_COMMAND,
|
|
||||||
wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
|
|
||||||
}
|
}
|
||||||
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
SetScrollPos(hwnd, SB_VERT, lphl->FirstVisible, TRUE);
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
|
@ -376,25 +377,29 @@ LONG ListBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
return 0;
|
return 0;
|
||||||
case LB_DIR:
|
case LB_DIR:
|
||||||
dprintf_listbox(stddeb,"ListBox LB_DIR !\n");
|
dprintf_listbox(stddeb,"ListBox LB_DIR !\n");
|
||||||
wRet = ListBoxDirectory(hwnd, wParam, (LPSTR)lParam);
|
wRet = ListBoxDirectory(hwnd, wParam,
|
||||||
|
(LPSTR)PTR_SEG_TO_LIN(lParam));
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
UpdateWindow(hwnd);
|
UpdateWindow(hwnd);
|
||||||
return wRet;
|
return wRet;
|
||||||
case LB_ADDSTRING:
|
case LB_ADDSTRING:
|
||||||
wRet = ListBoxAddString(hwnd, (LPSTR)lParam);
|
wRet = ListBoxAddString(hwnd, (LPSTR)PTR_SEG_TO_LIN(lParam));
|
||||||
return wRet;
|
return wRet;
|
||||||
case LB_GETTEXT:
|
case LB_GETTEXT:
|
||||||
dprintf_listbox(stddeb, "LB_GETTEXT wParam=%d\n",wParam);
|
dprintf_listbox(stddeb, "LB_GETTEXT wParam=%d\n",wParam);
|
||||||
wRet = ListBoxGetText(hwnd, wParam, (LPSTR)lParam, FALSE);
|
wRet = ListBoxGetText(hwnd, wParam,
|
||||||
|
(LPSTR)PTR_SEG_TO_LIN(lParam), FALSE);
|
||||||
return wRet;
|
return wRet;
|
||||||
case LB_INSERTSTRING:
|
case LB_INSERTSTRING:
|
||||||
wRet = ListBoxInsertString(hwnd, wParam, (LPSTR)lParam);
|
wRet = ListBoxInsertString(hwnd, wParam,
|
||||||
|
(LPSTR)PTR_SEG_TO_LIN(lParam));
|
||||||
return wRet;
|
return wRet;
|
||||||
case LB_DELETESTRING:
|
case LB_DELETESTRING:
|
||||||
wRet = ListBoxDeleteString(hwnd, wParam);
|
wRet = ListBoxDeleteString(hwnd, wParam);
|
||||||
return wRet;
|
return wRet;
|
||||||
case LB_FINDSTRING:
|
case LB_FINDSTRING:
|
||||||
wRet = ListBoxFindString(hwnd, wParam, (LPSTR)lParam);
|
wRet = ListBoxFindString(hwnd, wParam,
|
||||||
|
(LPSTR)PTR_SEG_TO_LIN(lParam));
|
||||||
return wRet;
|
return wRet;
|
||||||
case LB_GETCARETINDEX:
|
case LB_GETCARETINDEX:
|
||||||
return wRet;
|
return wRet;
|
||||||
|
@ -410,13 +415,14 @@ LONG ListBoxWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
return wRet;
|
return wRet;
|
||||||
case LB_GETITEMDATA:
|
case LB_GETITEMDATA:
|
||||||
dprintf_listbox(stddeb, "LB_GETITEMDATA wParam=%x\n", wParam);
|
dprintf_listbox(stddeb, "LB_GETITEMDATA wParam=%x\n", wParam);
|
||||||
lRet = ListBoxGetText(hwnd, wParam, (LPSTR)lParam, TRUE);
|
lRet = ListBoxGetText(hwnd, wParam,
|
||||||
|
(LPSTR)PTR_SEG_TO_LIN(lParam), TRUE);
|
||||||
return lRet;
|
return lRet;
|
||||||
case LB_GETITEMHEIGHT:
|
case LB_GETITEMHEIGHT:
|
||||||
ListBoxGetItemRect(hwnd, wParam, &rect);
|
ListBoxGetItemRect(hwnd, wParam, &rect);
|
||||||
return (rect.bottom - rect.top);
|
return (rect.bottom - rect.top);
|
||||||
case LB_GETITEMRECT:
|
case LB_GETITEMRECT:
|
||||||
ListBoxGetItemRect(hwnd, wParam, (LPRECT)lParam);
|
ListBoxGetItemRect(hwnd,wParam,(LPRECT)PTR_SEG_TO_LIN(lParam));
|
||||||
return 0;
|
return 0;
|
||||||
case LB_GETSEL:
|
case LB_GETSEL:
|
||||||
wRet = ListBoxGetSel(hwnd, wParam);
|
wRet = ListBoxGetSel(hwnd, wParam);
|
||||||
|
@ -601,6 +607,7 @@ void OwnerDrawListBox(HWND hwnd)
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
RECT rect;
|
RECT rect;
|
||||||
int i, h, h2, maxwidth;
|
int i, h, h2, maxwidth;
|
||||||
|
HANDLE hDrawItemStruct;
|
||||||
h = 0;
|
h = 0;
|
||||||
hdc = BeginPaint(hwnd, &ps);
|
hdc = BeginPaint(hwnd, &ps);
|
||||||
if (!IsWindowVisible(hwnd)) {
|
if (!IsWindowVisible(hwnd)) {
|
||||||
|
@ -621,6 +628,7 @@ void OwnerDrawListBox(HWND hwnd)
|
||||||
lpls = lphl->lpFirst;
|
lpls = lphl->lpFirst;
|
||||||
if (lpls == NULL) goto EndOfPaint;
|
if (lpls == NULL) goto EndOfPaint;
|
||||||
lphl->ItemsVisible = 0;
|
lphl->ItemsVisible = 0;
|
||||||
|
hDrawItemStruct = USER_HEAP_ALLOC( sizeof(DRAWITEMSTRUCT) );
|
||||||
for (i = 1; i <= lphl->ItemsCount; i++) {
|
for (i = 1; i <= lphl->ItemsCount; i++) {
|
||||||
if (i >= lphl->FirstVisible) {
|
if (i >= lphl->FirstVisible) {
|
||||||
lpls->dis.hDC = hdc;
|
lpls->dis.hDC = hdc;
|
||||||
|
@ -655,8 +663,10 @@ void OwnerDrawListBox(HWND hwnd)
|
||||||
itemData = lpls->dis.itemData;
|
itemData = lpls->dis.itemData;
|
||||||
lpls->dis.itemData = (DWORD)lpls->itemText;
|
lpls->dis.itemData = (DWORD)lpls->itemText;
|
||||||
}
|
}
|
||||||
|
memcpy( USER_HEAP_LIN_ADDR(hDrawItemStruct), &lpls->dis,
|
||||||
|
sizeof(DRAWITEMSTRUCT) );
|
||||||
SendMessage(lphl->hWndLogicParent, WM_DRAWITEM,
|
SendMessage(lphl->hWndLogicParent, WM_DRAWITEM,
|
||||||
i-1, (LPARAM)&lpls->dis);
|
i-1, (LPARAM)USER_HEAP_SEG_ADDR(hDrawItemStruct));
|
||||||
if (HasStrings(wndPtr))
|
if (HasStrings(wndPtr))
|
||||||
lpls->dis.itemData = itemData;
|
lpls->dis.itemData = itemData;
|
||||||
|
|
||||||
|
@ -667,11 +677,12 @@ void OwnerDrawListBox(HWND hwnd)
|
||||||
lphl->ItemsVisible++;
|
lphl->ItemsVisible++;
|
||||||
/* if (h > rect.bottom) goto EndOfPaint;*/
|
/* if (h > rect.bottom) goto EndOfPaint;*/
|
||||||
}
|
}
|
||||||
if (lpls->lpNext == NULL) goto EndOfPaint;
|
if (lpls->lpNext == NULL) break;
|
||||||
lpls = (LPLISTSTRUCT)lpls->lpNext;
|
lpls = (LPLISTSTRUCT)lpls->lpNext;
|
||||||
}
|
}
|
||||||
|
USER_HEAP_FREE( hDrawItemStruct );
|
||||||
EndOfPaint:
|
EndOfPaint:
|
||||||
EndPaint( hwnd, &ps );
|
EndPaint( hwnd, &ps );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -717,8 +728,6 @@ int CreateListBoxStruct(HWND hwnd)
|
||||||
{
|
{
|
||||||
WND *wndPtr;
|
WND *wndPtr;
|
||||||
LPHEADLIST lphl;
|
LPHEADLIST lphl;
|
||||||
int HeapHandle;
|
|
||||||
void *HeapBase;
|
|
||||||
wndPtr = WIN_FindWndPtr(hwnd);
|
wndPtr = WIN_FindWndPtr(hwnd);
|
||||||
lphl = (LPHEADLIST)malloc(sizeof(HEADLIST));
|
lphl = (LPHEADLIST)malloc(sizeof(HEADLIST));
|
||||||
lphl->lpFirst = NULL;
|
lphl->lpFirst = NULL;
|
||||||
|
@ -734,9 +743,11 @@ int CreateListBoxStruct(HWND hwnd)
|
||||||
lphl->SelCount = 0;
|
lphl->SelCount = 0;
|
||||||
lphl->DrawCtlType = ODT_LISTBOX;
|
lphl->DrawCtlType = ODT_LISTBOX;
|
||||||
lphl->bRedrawFlag = TRUE;
|
lphl->bRedrawFlag = TRUE;
|
||||||
|
#if 0
|
||||||
HeapHandle = GlobalAlloc(GMEM_FIXED, LIST_HEAP_SIZE);
|
HeapHandle = GlobalAlloc(GMEM_FIXED, LIST_HEAP_SIZE);
|
||||||
HeapBase = GlobalLock(HeapHandle);
|
HeapBase = GlobalLock(HeapHandle);
|
||||||
HEAP_Init(&lphl->Heap, HeapBase, LIST_HEAP_SIZE);
|
HEAP_Init(&lphl->Heap, HeapBase, LIST_HEAP_SIZE);
|
||||||
|
#endif
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -744,8 +755,8 @@ int CreateListBoxStruct(HWND hwnd)
|
||||||
void ListBoxAskMeasure(WND *wndPtr, LPHEADLIST lphl, LPLISTSTRUCT lpls)
|
void ListBoxAskMeasure(WND *wndPtr, LPHEADLIST lphl, LPLISTSTRUCT lpls)
|
||||||
{
|
{
|
||||||
MEASUREITEMSTRUCT *lpmeasure;
|
MEASUREITEMSTRUCT *lpmeasure;
|
||||||
HANDLE hTemp = USER_HEAP_ALLOC(GMEM_MOVEABLE, sizeof(MEASUREITEMSTRUCT));
|
HANDLE hTemp = USER_HEAP_ALLOC( sizeof(MEASUREITEMSTRUCT) );
|
||||||
lpmeasure = (MEASUREITEMSTRUCT *) USER_HEAP_ADDR(hTemp);
|
lpmeasure = (MEASUREITEMSTRUCT *) USER_HEAP_LIN_ADDR(hTemp);
|
||||||
if (lpmeasure == NULL) {
|
if (lpmeasure == NULL) {
|
||||||
fprintf(stderr,"ListBoxAskMeasure() // Bad allocation of Measure struct !\n");
|
fprintf(stderr,"ListBoxAskMeasure() // Bad allocation of Measure struct !\n");
|
||||||
return;
|
return;
|
||||||
|
@ -759,7 +770,8 @@ void ListBoxAskMeasure(WND *wndPtr, LPHEADLIST lphl, LPLISTSTRUCT lpls)
|
||||||
lpmeasure->itemData = (DWORD)lpls->itemText;
|
lpmeasure->itemData = (DWORD)lpls->itemText;
|
||||||
else
|
else
|
||||||
lpmeasure->itemData = lpls->dis.itemData;
|
lpmeasure->itemData = lpls->dis.itemData;
|
||||||
SendMessage(lphl->hWndLogicParent, WM_MEASUREITEM, 0, (DWORD)lpmeasure);
|
SendMessage(lphl->hWndLogicParent, WM_MEASUREITEM,
|
||||||
|
0, USER_HEAP_SEG_ADDR(hTemp));
|
||||||
lpls->dis.rcItem.right = lpls->dis.rcItem.left + lpmeasure->itemWidth;
|
lpls->dis.rcItem.right = lpls->dis.rcItem.left + lpmeasure->itemWidth;
|
||||||
lpls->dis.rcItem.bottom = lpls->dis.rcItem.top + lpmeasure->itemHeight;
|
lpls->dis.rcItem.bottom = lpls->dis.rcItem.top + lpmeasure->itemHeight;
|
||||||
USER_HEAP_FREE(hTemp);
|
USER_HEAP_FREE(hTemp);
|
||||||
|
@ -1002,9 +1014,6 @@ int ListBoxResetContent(HWND hwnd)
|
||||||
lphl->ItemsCount = 0;
|
lphl->ItemsCount = 0;
|
||||||
lphl->ItemFocused = -1;
|
lphl->ItemFocused = -1;
|
||||||
lphl->PrevFocused = -1;
|
lphl->PrevFocused = -1;
|
||||||
if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
|
|
||||||
SendMessage(lphl->hWndLogicParent, WM_COMMAND,
|
|
||||||
wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
|
|
||||||
SetScrollRange(hwnd, SB_VERT, 1, ListMaxFirstVisible(lphl), TRUE);
|
SetScrollRange(hwnd, SB_VERT, 1, ListMaxFirstVisible(lphl), TRUE);
|
||||||
if (lphl->ItemsPerColumn != 0)
|
if (lphl->ItemsPerColumn != 0)
|
||||||
SetScrollRange(hwnd, SB_HORZ, 1, lphl->ItemsVisible /
|
SetScrollRange(hwnd, SB_HORZ, 1, lphl->ItemsVisible /
|
||||||
|
@ -1023,6 +1032,8 @@ int ListBoxSetCurSel(HWND hwnd, WORD wIndex)
|
||||||
UINT i;
|
UINT i;
|
||||||
lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
|
lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
|
||||||
if (lphl == NULL) return LB_ERR;
|
if (lphl == NULL) return LB_ERR;
|
||||||
|
if( (wIndex != (WORD)(-1)) && (wIndex > lphl->ItemsCount) )
|
||||||
|
return LB_ERR;
|
||||||
lphl->ItemFocused = LB_ERR;
|
lphl->ItemFocused = LB_ERR;
|
||||||
if (wIndex >= lphl->ItemsCount) return LB_ERR;
|
if (wIndex >= lphl->ItemsCount) return LB_ERR;
|
||||||
lpls = lphl->lpFirst;
|
lpls = lphl->lpFirst;
|
||||||
|
@ -1038,10 +1049,7 @@ int ListBoxSetCurSel(HWND hwnd, WORD wIndex)
|
||||||
if (lpls == NULL) break;
|
if (lpls == NULL) break;
|
||||||
}
|
}
|
||||||
lphl->ItemFocused = wIndex;
|
lphl->ItemFocused = wIndex;
|
||||||
if ((wndPtr->dwStyle && LBS_NOTIFY) != 0)
|
return wIndex;
|
||||||
SendMessage(lphl->hWndLogicParent, WM_COMMAND,
|
|
||||||
wndPtr->wIDmenu, MAKELONG(hwnd, LBN_SELCHANGE));
|
|
||||||
return LB_ERR;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1093,57 +1101,85 @@ int ListBoxGetSel(HWND hwnd, WORD wIndex)
|
||||||
|
|
||||||
int ListBoxDirectory(HWND hwnd, UINT attrib, LPSTR filespec)
|
int ListBoxDirectory(HWND hwnd, UINT attrib, LPSTR filespec)
|
||||||
{
|
{
|
||||||
struct dosdirent *dp;
|
struct dosdirent *dp, *dp_old;
|
||||||
int x, wRet = LB_OKAY;
|
int x, wRet = LB_OKAY;
|
||||||
BOOL OldFlag;
|
BOOL OldFlag;
|
||||||
char temp[256];
|
char temp[256];
|
||||||
LPHEADLIST lphl;
|
LPHEADLIST lphl;
|
||||||
dprintf_listbox(stddeb,"ListBoxDirectory: %s, %4x\n",filespec,attrib);
|
int drive;
|
||||||
lphl = ListBoxGetStorageHeader(hwnd);
|
|
||||||
if (lphl == NULL) return LB_ERR;
|
|
||||||
if ((dp = (struct dosdirent *)DOS_opendir(filespec)) ==NULL) return 0;
|
|
||||||
OldFlag = lphl->bRedrawFlag;
|
|
||||||
lphl->bRedrawFlag = FALSE;
|
|
||||||
while ((dp = (struct dosdirent *)DOS_readdir(dp))) {
|
|
||||||
if (!dp->inuse) break;
|
|
||||||
dprintf_listbox(stddeb,"ListBoxDirectory %p '%s' !\n", dp->filename, dp->filename);
|
|
||||||
if (dp->attribute & FA_DIREC) {
|
|
||||||
if (attrib & DDL_DIRECTORY &&
|
|
||||||
strcmp(dp->filename, ".")) {
|
|
||||||
sprintf(temp, "[%s]", dp->filename);
|
|
||||||
if ( (wRet = ListBoxAddString(hwnd, temp)) == LB_ERR) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (attrib & DDL_EXCLUSIVE) {
|
|
||||||
if (attrib & (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN |
|
|
||||||
DDL_SYSTEM) )
|
|
||||||
if ( (wRet = ListBoxAddString(hwnd, dp->filename))
|
|
||||||
== LB_ERR) break;
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if ( (wRet = ListBoxAddString(hwnd, dp->filename))
|
|
||||||
== LB_ERR) break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
DOS_closedir(dp);
|
|
||||||
|
|
||||||
if (attrib & DDL_DRIVES) {
|
dprintf_listbox(stddeb,"ListBoxDirectory: %s, %4x\n",filespec,attrib);
|
||||||
for (x=0;x!=MAX_DOS_DRIVES;x++) {
|
|
||||||
if (DOS_ValidDrive(x)) {
|
if( strchr( filespec, '\\' ) || strchr( filespec, ':' ) ) {
|
||||||
sprintf(temp, "[-%c-]", 'a'+x);
|
drive = DOS_GetDefaultDrive();
|
||||||
if ( (wRet = ListBoxAddString(hwnd, temp)) == LB_ERR) break;
|
if( filespec[1] == ':' ) {
|
||||||
}
|
drive = toupper(filespec[0]) - 'A';
|
||||||
}
|
filespec += 2;
|
||||||
}
|
}
|
||||||
lphl->bRedrawFlag = OldFlag;
|
if( !strchr( filespec, '\\' ) )
|
||||||
if (OldFlag) {
|
DOS_SetDefaultDrive( drive );
|
||||||
InvalidateRect(hwnd, NULL, TRUE);
|
else {
|
||||||
UpdateWindow(hwnd);
|
int i;
|
||||||
}
|
strcpy( temp, filespec );
|
||||||
dprintf_listbox(stddeb,"End of ListBoxDirectory !\n");
|
for( i=0; i<strlen(temp); i++ )
|
||||||
return wRet;
|
if( temp[i] == '\\' ) {
|
||||||
|
temp[i] = 0;
|
||||||
|
filespec += ( i+1 );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
DOS_ChangeDir( drive, temp );
|
||||||
|
DOS_SetDefaultDrive( drive );
|
||||||
|
}
|
||||||
|
dprintf_listbox(stddeb,"Changing directory to %c:%s, filemask is %s\n",
|
||||||
|
drive+'A', temp, filespec );
|
||||||
|
}
|
||||||
|
lphl = ListBoxGetStorageHeader(hwnd);
|
||||||
|
if (lphl == NULL) return LB_ERR;
|
||||||
|
if ((dp = (struct dosdirent *)DOS_opendir(filespec)) ==NULL) return 0;
|
||||||
|
dp_old = dp;
|
||||||
|
OldFlag = lphl->bRedrawFlag;
|
||||||
|
lphl->bRedrawFlag = FALSE;
|
||||||
|
while ((dp = (struct dosdirent *)DOS_readdir(dp))) {
|
||||||
|
if (!dp->inuse) break;
|
||||||
|
dprintf_listbox( stddeb, "ListBoxDirectory %p '%s' !\n", dp->filename,
|
||||||
|
dp->filename);
|
||||||
|
if (dp->attribute & FA_DIREC) {
|
||||||
|
if (attrib & DDL_DIRECTORY &&
|
||||||
|
strcmp(dp->filename, ".")) {
|
||||||
|
sprintf(temp, "[%s]", dp->filename);
|
||||||
|
if ( (wRet = ListBoxAddString(hwnd, temp)) == LB_ERR) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if (attrib & DDL_EXCLUSIVE) {
|
||||||
|
if (attrib & (DDL_READWRITE | DDL_READONLY | DDL_HIDDEN |
|
||||||
|
DDL_SYSTEM) )
|
||||||
|
if ( (wRet = ListBoxAddString(hwnd, dp->filename))
|
||||||
|
== LB_ERR) break;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
if ( (wRet = ListBoxAddString(hwnd, dp->filename))
|
||||||
|
== LB_ERR) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
DOS_closedir(dp_old);
|
||||||
|
|
||||||
|
if (attrib & DDL_DRIVES) {
|
||||||
|
for (x=0;x!=MAX_DOS_DRIVES;x++) {
|
||||||
|
if (DOS_ValidDrive(x)) {
|
||||||
|
sprintf(temp, "[-%c-]", 'a'+x);
|
||||||
|
if((wRet = ListBoxInsertString(hwnd, (UINT)-1, temp)) == LB_ERR) break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
lphl->bRedrawFlag = OldFlag;
|
||||||
|
if (OldFlag) {
|
||||||
|
InvalidateRect(hwnd, NULL, TRUE);
|
||||||
|
UpdateWindow(hwnd);
|
||||||
|
}
|
||||||
|
dprintf_listbox(stddeb,"End of ListBoxDirectory !\n");
|
||||||
|
return 1; /* FIXME: Should be 0 if "filespec" is invalid */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1290,8 +1326,40 @@ int ListBoxFindNextMatch(HWND hwnd, WORD wChar)
|
||||||
*/
|
*/
|
||||||
BOOL DlgDirSelect(HWND hDlg, LPSTR lpStr, int nIDLBox)
|
BOOL DlgDirSelect(HWND hDlg, LPSTR lpStr, int nIDLBox)
|
||||||
{
|
{
|
||||||
fprintf(stdnimp,"DlgDirSelect(%04X, '%s', %d) \n", hDlg, lpStr, nIDLBox);
|
HWND hwnd;
|
||||||
return FALSE;
|
LPHEADLIST lphl;
|
||||||
|
char s[130];
|
||||||
|
|
||||||
|
dprintf_listbox( stddeb, "DlgDirSelect(%04X, '%s', %d) \n", hDlg, lpStr,
|
||||||
|
nIDLBox );
|
||||||
|
|
||||||
|
hwnd = GetDlgItem(hDlg, nIDLBox);
|
||||||
|
lphl = ListBoxGetStorageHeader(hwnd);
|
||||||
|
if( lphl->ItemFocused == -1 ) {
|
||||||
|
dprintf_listbox( stddeb, "Nothing selected!\n" );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
ListBoxGetText(hwnd, lphl->ItemFocused, (LPSTR)s, FALSE);
|
||||||
|
dprintf_listbox( stddeb, "Selection is %s\n", s );
|
||||||
|
if( s[0] == '[' ) {
|
||||||
|
if( s[1] == '-' ) {
|
||||||
|
strncpy( lpStr, s+2, strlen(s)-4 ); /* device name */
|
||||||
|
lpStr[ strlen(s)-4 ] = 0;
|
||||||
|
strcat( lpStr, ":" );
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
strncpy( lpStr, s+1, strlen(s)-2 ); /* directory name */
|
||||||
|
lpStr[ strlen(s)-2 ] = 0;
|
||||||
|
strcat( lpStr, "\\" );
|
||||||
|
}
|
||||||
|
dprintf_listbox( stddeb, "Returning %s\n", lpStr );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
strcpy( lpStr, s ); /* file name */
|
||||||
|
dprintf_listbox( stddeb, "Returning %s\n", lpStr );
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1318,9 +1386,20 @@ int DlgDirList(HWND hDlg, LPSTR lpPathSpec,
|
||||||
if (nIDStat)
|
if (nIDStat)
|
||||||
{
|
{
|
||||||
int drive;
|
int drive;
|
||||||
|
char temp[255];
|
||||||
drive = DOS_GetDefaultDrive();
|
drive = DOS_GetDefaultDrive();
|
||||||
SendDlgItemMessage(hDlg, nIDStat, WM_SETTEXT, 0,
|
strcpy( temp+3, DOS_GetCurrentDir(drive) );
|
||||||
(LONG) DOS_GetCurrentDir(drive) );
|
if( temp[3] == '\\' ) {
|
||||||
|
temp[1] = 'A'+drive;
|
||||||
|
temp[2] = ':';
|
||||||
|
SendDlgItemMessage(hDlg, nIDStat, WM_SETTEXT, 0, (LONG)(temp+1));
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
temp[0] = 'A'+drive;
|
||||||
|
temp[1] = ':';
|
||||||
|
temp[2] = '\\';
|
||||||
|
SendDlgItemMessage(hDlg, nIDStat, WM_SETTEXT, 0, (LONG) temp );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
@ -1331,3 +1410,16 @@ int ListMaxFirstVisible(LPHEADLIST lphl)
|
||||||
int m = lphl->ItemsCount-lphl->ItemsVisible+1;
|
int m = lphl->ItemsCount-lphl->ItemsVisible+1;
|
||||||
return (m < 1) ? 1 : m;
|
return (m < 1) ? 1 : m;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Send notification "code" as part of a WM_COMMAND-message if hwnd
|
||||||
|
has the LBS_NOTIFY style */
|
||||||
|
void ListBoxSendNotification(HWND hwnd, WORD code)
|
||||||
|
{
|
||||||
|
WND *wndPtr;
|
||||||
|
LPHEADLIST lphl;
|
||||||
|
lphl = ListBoxGetWindowAndStorage(hwnd, &wndPtr);
|
||||||
|
if( wndPtr && ( (wndPtr->dwStyle && LBS_NOTIFY) != 0) )
|
||||||
|
SendMessage(lphl->hWndLogicParent, WM_COMMAND,
|
||||||
|
wndPtr->wIDmenu, MAKELONG(hwnd, code));
|
||||||
|
}
|
||||||
|
|
224
controls/menu.c
224
controls/menu.c
|
@ -141,8 +141,8 @@ static MENUITEM *MENU_FindItem( HMENU *hmenu, WORD *nPos, WORD wFlags )
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if (!(menu = (POPUPMENU *) USER_HEAP_ADDR(*hmenu))) return NULL;
|
if (!(menu = (POPUPMENU *) USER_HEAP_LIN_ADDR(*hmenu))) return NULL;
|
||||||
item = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
item = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
if (wFlags & MF_BYPOSITION)
|
if (wFlags & MF_BYPOSITION)
|
||||||
{
|
{
|
||||||
if (*nPos >= menu->nItems) return NULL;
|
if (*nPos >= menu->nItems) return NULL;
|
||||||
|
@ -187,7 +187,7 @@ static MENUITEM *MENU_FindItemByCoords( POPUPMENU *menu, int x, int y, WORD *pos
|
||||||
if (!(wndPtr = WIN_FindWndPtr( menu->hWnd ))) return NULL;
|
if (!(wndPtr = WIN_FindWndPtr( menu->hWnd ))) return NULL;
|
||||||
x -= wndPtr->rectWindow.left;
|
x -= wndPtr->rectWindow.left;
|
||||||
y -= wndPtr->rectWindow.top;
|
y -= wndPtr->rectWindow.top;
|
||||||
item = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
item = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
for (i = 0; i < menu->nItems; i++, item++)
|
for (i = 0; i < menu->nItems; i++, item++)
|
||||||
{
|
{
|
||||||
if ((x >= item->rect.left) && (x < item->rect.right) &&
|
if ((x >= item->rect.left) && (x < item->rect.right) &&
|
||||||
|
@ -214,8 +214,8 @@ static WORD MENU_FindItemByKey( HWND hwndOwner, HMENU hmenu, WORD key )
|
||||||
int i;
|
int i;
|
||||||
LONG menuchar;
|
LONG menuchar;
|
||||||
|
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
lpitem = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
lpitem = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
key = toupper(key);
|
key = toupper(key);
|
||||||
for (i = 0; i < menu->nItems; i++, lpitem++)
|
for (i = 0; i < menu->nItems; i++, lpitem++)
|
||||||
{
|
{
|
||||||
|
@ -308,7 +308,7 @@ static void MENU_PopupMenuCalcSize( LPPOPUPMENU lppop, HWND hwndOwner )
|
||||||
|
|
||||||
lppop->Width = lppop->Height = 0;
|
lppop->Width = lppop->Height = 0;
|
||||||
if (lppop->nItems == 0) return;
|
if (lppop->nItems == 0) return;
|
||||||
items = (MENUITEM *)USER_HEAP_ADDR( lppop->hItems );
|
items = (MENUITEM *)USER_HEAP_LIN_ADDR( lppop->hItems );
|
||||||
hdc = GetDC( 0 );
|
hdc = GetDC( 0 );
|
||||||
maxX = start = 0;
|
maxX = start = 0;
|
||||||
while (start < lppop->nItems)
|
while (start < lppop->nItems)
|
||||||
|
@ -363,7 +363,7 @@ static void MENU_MenuBarCalcSize( HDC hdc, LPRECT lprect, LPPOPUPMENU lppop,
|
||||||
if (lppop->nItems == 0) return;
|
if (lppop->nItems == 0) return;
|
||||||
dprintf_menucalc(stddeb,"MenuBarCalcSize left=%d top=%d right=%d bottom=%d !\n",
|
dprintf_menucalc(stddeb,"MenuBarCalcSize left=%d top=%d right=%d bottom=%d !\n",
|
||||||
lprect->left, lprect->top, lprect->right, lprect->bottom);
|
lprect->left, lprect->top, lprect->right, lprect->bottom);
|
||||||
items = (MENUITEM *)USER_HEAP_ADDR( lppop->hItems );
|
items = (MENUITEM *)USER_HEAP_LIN_ADDR( lppop->hItems );
|
||||||
lppop->Width = lprect->right - lprect->left;
|
lppop->Width = lprect->right - lprect->left;
|
||||||
lppop->Height = 0;
|
lppop->Height = 0;
|
||||||
maxY = lprect->top;
|
maxY = lprect->top;
|
||||||
|
@ -562,9 +562,9 @@ static void MENU_DrawPopupMenu( HWND hwnd, HDC hdc, HMENU hmenu )
|
||||||
|
|
||||||
GetClientRect( hwnd, &rect );
|
GetClientRect( hwnd, &rect );
|
||||||
FillRect( hdc, &rect, sysColorObjects.hbrushMenu );
|
FillRect( hdc, &rect, sysColorObjects.hbrushMenu );
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (!menu || !menu->nItems) return;
|
if (!menu || !menu->nItems) return;
|
||||||
item = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
item = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
for (i = menu->nItems; i > 0; i--, item++)
|
for (i = menu->nItems; i > 0; i--, item++)
|
||||||
MENU_DrawMenuItem( hdc, item, menu->Height, FALSE );
|
MENU_DrawMenuItem( hdc, item, menu->Height, FALSE );
|
||||||
}
|
}
|
||||||
|
@ -582,7 +582,7 @@ WORD MENU_DrawMenuBar(HDC hDC, LPRECT lprect, HWND hwnd, BOOL suppress_draw)
|
||||||
int i;
|
int i;
|
||||||
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
WND *wndPtr = WIN_FindWndPtr( hwnd );
|
||||||
|
|
||||||
lppop = (LPPOPUPMENU) USER_HEAP_ADDR( wndPtr->wIDmenu );
|
lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( wndPtr->wIDmenu );
|
||||||
if (lppop == NULL || lprect == NULL) return SYSMETRICS_CYMENU;
|
if (lppop == NULL || lprect == NULL) return SYSMETRICS_CYMENU;
|
||||||
dprintf_menu(stddeb,"MENU_DrawMenuBar(%04X, %p, %p); !\n",
|
dprintf_menu(stddeb,"MENU_DrawMenuBar(%04X, %p, %p); !\n",
|
||||||
hDC, lprect, lppop);
|
hDC, lprect, lppop);
|
||||||
|
@ -596,7 +596,7 @@ WORD MENU_DrawMenuBar(HDC hDC, LPRECT lprect, HWND hwnd, BOOL suppress_draw)
|
||||||
LineTo( hDC, lprect->right, lprect->bottom );
|
LineTo( hDC, lprect->right, lprect->bottom );
|
||||||
|
|
||||||
if (lppop->nItems == 0) return SYSMETRICS_CYMENU;
|
if (lppop->nItems == 0) return SYSMETRICS_CYMENU;
|
||||||
lpitem = (MENUITEM *) USER_HEAP_ADDR( lppop->hItems );
|
lpitem = (MENUITEM *) USER_HEAP_LIN_ADDR( lppop->hItems );
|
||||||
for (i = 0; i < lppop->nItems; i++, lpitem++)
|
for (i = 0; i < lppop->nItems; i++, lpitem++)
|
||||||
{
|
{
|
||||||
MENU_DrawMenuItem( hDC, lpitem, lppop->Height, TRUE );
|
MENU_DrawMenuItem( hDC, lpitem, lppop->Height, TRUE );
|
||||||
|
@ -614,10 +614,10 @@ static BOOL MENU_ShowPopup(HWND hwndOwner, HMENU hmenu, WORD id, int x, int y)
|
||||||
{
|
{
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
|
|
||||||
if (!(menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu ))) return FALSE;
|
if (!(menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu ))) return FALSE;
|
||||||
if (menu->FocusedItem != NO_SELECTED_ITEM)
|
if (menu->FocusedItem != NO_SELECTED_ITEM)
|
||||||
{
|
{
|
||||||
MENUITEM *item = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
MENUITEM *item = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
item[menu->FocusedItem].item_flags &= ~(MF_HILITE | MF_MOUSESELECT);
|
item[menu->FocusedItem].item_flags &= ~(MF_HILITE | MF_MOUSESELECT);
|
||||||
menu->FocusedItem = NO_SELECTED_ITEM;
|
menu->FocusedItem = NO_SELECTED_ITEM;
|
||||||
}
|
}
|
||||||
|
@ -632,8 +632,7 @@ static BOOL MENU_ShowPopup(HWND hwndOwner, HMENU hmenu, WORD id, int x, int y)
|
||||||
WS_POPUP | WS_BORDER, x, y,
|
WS_POPUP | WS_BORDER, x, y,
|
||||||
menu->Width + 2*SYSMETRICS_CXBORDER,
|
menu->Width + 2*SYSMETRICS_CXBORDER,
|
||||||
menu->Height + 2*SYSMETRICS_CYBORDER,
|
menu->Height + 2*SYSMETRICS_CYBORDER,
|
||||||
0, 0, wndPtr->hInstance,
|
0, 0, wndPtr->hInstance, (SEGPTR)hmenu );
|
||||||
(LPSTR)(DWORD)hmenu );
|
|
||||||
if (!menu->hWnd) return FALSE;
|
if (!menu->hWnd) return FALSE;
|
||||||
}
|
}
|
||||||
else SetWindowPos( menu->hWnd, 0, x, y,
|
else SetWindowPos( menu->hWnd, 0, x, y,
|
||||||
|
@ -659,9 +658,9 @@ static void MENU_SelectItem( HMENU hmenu, WORD wIndex )
|
||||||
LPPOPUPMENU lppop;
|
LPPOPUPMENU lppop;
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
|
|
||||||
lppop = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
lppop = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (!lppop->nItems) return;
|
if (!lppop->nItems) return;
|
||||||
items = (MENUITEM *) USER_HEAP_ADDR( lppop->hItems );
|
items = (MENUITEM *) USER_HEAP_LIN_ADDR( lppop->hItems );
|
||||||
if ((wIndex != NO_SELECTED_ITEM) &&
|
if ((wIndex != NO_SELECTED_ITEM) &&
|
||||||
(wIndex != SYSMENU_SELECTED) &&
|
(wIndex != SYSMENU_SELECTED) &&
|
||||||
(items[wIndex].item_flags & MF_SEPARATOR))
|
(items[wIndex].item_flags & MF_SEPARATOR))
|
||||||
|
@ -712,9 +711,9 @@ static void MENU_SelectNextItem( HMENU hmenu )
|
||||||
MENUITEM *items;
|
MENUITEM *items;
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
|
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (!menu->nItems) return;
|
if (!menu->nItems) return;
|
||||||
items = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
items = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
if ((menu->FocusedItem != NO_SELECTED_ITEM) &&
|
if ((menu->FocusedItem != NO_SELECTED_ITEM) &&
|
||||||
(menu->FocusedItem != SYSMENU_SELECTED))
|
(menu->FocusedItem != SYSMENU_SELECTED))
|
||||||
{
|
{
|
||||||
|
@ -753,9 +752,9 @@ static void MENU_SelectPrevItem( HMENU hmenu )
|
||||||
MENUITEM *items;
|
MENUITEM *items;
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
|
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (!menu->nItems) return;
|
if (!menu->nItems) return;
|
||||||
items = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
items = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
if ((menu->FocusedItem != NO_SELECTED_ITEM) &&
|
if ((menu->FocusedItem != NO_SELECTED_ITEM) &&
|
||||||
(menu->FocusedItem != SYSMENU_SELECTED))
|
(menu->FocusedItem != SYSMENU_SELECTED))
|
||||||
{
|
{
|
||||||
|
@ -795,12 +794,12 @@ static HMENU MENU_GetSubPopup( HMENU hmenu )
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
|
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (menu->FocusedItem == NO_SELECTED_ITEM) return 0;
|
if (menu->FocusedItem == NO_SELECTED_ITEM) return 0;
|
||||||
else if (menu->FocusedItem == SYSMENU_SELECTED)
|
else if (menu->FocusedItem == SYSMENU_SELECTED)
|
||||||
return GetSystemMenu( menu->hWnd, FALSE );
|
return GetSystemMenu( menu->hWnd, FALSE );
|
||||||
|
|
||||||
item = ((MENUITEM *)USER_HEAP_ADDR( menu->hItems )) + menu->FocusedItem;
|
item = ((MENUITEM *)USER_HEAP_LIN_ADDR(menu->hItems)) + menu->FocusedItem;
|
||||||
if (!(item->item_flags & MF_POPUP) || !(item->item_flags & MF_MOUSESELECT))
|
if (!(item->item_flags & MF_POPUP) || !(item->item_flags & MF_MOUSESELECT))
|
||||||
return 0;
|
return 0;
|
||||||
return item->item_id;
|
return item->item_id;
|
||||||
|
@ -818,7 +817,7 @@ static void MENU_HideSubPopups( HMENU hmenu )
|
||||||
POPUPMENU *menu, *submenu;
|
POPUPMENU *menu, *submenu;
|
||||||
HMENU hsubmenu;
|
HMENU hsubmenu;
|
||||||
|
|
||||||
if (!(menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu ))) return;
|
if (!(menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu ))) return;
|
||||||
if (menu->FocusedItem == NO_SELECTED_ITEM) return;
|
if (menu->FocusedItem == NO_SELECTED_ITEM) return;
|
||||||
if (menu->FocusedItem == SYSMENU_SELECTED)
|
if (menu->FocusedItem == SYSMENU_SELECTED)
|
||||||
{
|
{
|
||||||
|
@ -826,13 +825,13 @@ static void MENU_HideSubPopups( HMENU hmenu )
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
item = ((MENUITEM *)USER_HEAP_ADDR(menu->hItems)) + menu->FocusedItem;
|
item = ((MENUITEM *)USER_HEAP_LIN_ADDR(menu->hItems)) + menu->FocusedItem;
|
||||||
if (!(item->item_flags & MF_POPUP) ||
|
if (!(item->item_flags & MF_POPUP) ||
|
||||||
!(item->item_flags & MF_MOUSESELECT)) return;
|
!(item->item_flags & MF_MOUSESELECT)) return;
|
||||||
item->item_flags &= ~MF_MOUSESELECT;
|
item->item_flags &= ~MF_MOUSESELECT;
|
||||||
hsubmenu = item->item_id;
|
hsubmenu = item->item_id;
|
||||||
}
|
}
|
||||||
submenu = (POPUPMENU *) USER_HEAP_ADDR( hsubmenu );
|
submenu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hsubmenu );
|
||||||
MENU_HideSubPopups( hsubmenu );
|
MENU_HideSubPopups( hsubmenu );
|
||||||
if (submenu->hWnd) ShowWindow( submenu->hWnd, SW_HIDE );
|
if (submenu->hWnd) ShowWindow( submenu->hWnd, SW_HIDE );
|
||||||
MENU_SelectItem( hsubmenu, NO_SELECTED_ITEM );
|
MENU_SelectItem( hsubmenu, NO_SELECTED_ITEM );
|
||||||
|
@ -851,7 +850,7 @@ static HMENU MENU_ShowSubPopup( HWND hwndOwner, HMENU hmenu, BOOL selectFirst )
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
WND *wndPtr;
|
WND *wndPtr;
|
||||||
|
|
||||||
if (!(menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu ))) return hmenu;
|
if (!(menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu ))) return hmenu;
|
||||||
if (!(wndPtr = WIN_FindWndPtr( menu->hWnd ))) return hmenu;
|
if (!(wndPtr = WIN_FindWndPtr( menu->hWnd ))) return hmenu;
|
||||||
if (menu->FocusedItem == NO_SELECTED_ITEM) return hmenu;
|
if (menu->FocusedItem == NO_SELECTED_ITEM) return hmenu;
|
||||||
if (menu->FocusedItem == SYSMENU_SELECTED)
|
if (menu->FocusedItem == SYSMENU_SELECTED)
|
||||||
|
@ -861,7 +860,7 @@ static HMENU MENU_ShowSubPopup( HWND hwndOwner, HMENU hmenu, BOOL selectFirst )
|
||||||
if (selectFirst) MENU_SelectNextItem( wndPtr->hSysMenu );
|
if (selectFirst) MENU_SelectNextItem( wndPtr->hSysMenu );
|
||||||
return wndPtr->hSysMenu;
|
return wndPtr->hSysMenu;
|
||||||
}
|
}
|
||||||
item = ((MENUITEM *)USER_HEAP_ADDR( menu->hItems )) + menu->FocusedItem;
|
item = ((MENUITEM *)USER_HEAP_LIN_ADDR(menu->hItems)) + menu->FocusedItem;
|
||||||
if (!(item->item_flags & MF_POPUP) ||
|
if (!(item->item_flags & MF_POPUP) ||
|
||||||
(item->item_flags & (MF_GRAYED | MF_DISABLED))) return hmenu;
|
(item->item_flags & (MF_GRAYED | MF_DISABLED))) return hmenu;
|
||||||
item->item_flags |= MF_MOUSESELECT;
|
item->item_flags |= MF_MOUSESELECT;
|
||||||
|
@ -895,7 +894,7 @@ static HMENU MENU_FindMenuByCoords( HMENU hmenu, POINT pt )
|
||||||
if (!(hwnd = WindowFromPoint( pt ))) return 0;
|
if (!(hwnd = WindowFromPoint( pt ))) return 0;
|
||||||
while (hmenu)
|
while (hmenu)
|
||||||
{
|
{
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (menu->hWnd == hwnd)
|
if (menu->hWnd == hwnd)
|
||||||
{
|
{
|
||||||
if (!(menu->wFlags & MF_POPUP))
|
if (!(menu->wFlags & MF_POPUP))
|
||||||
|
@ -929,10 +928,10 @@ static BOOL MENU_ExecFocusedItem( HWND hwndOwner, HMENU hmenu,
|
||||||
HMENU *hmenuCurrent )
|
HMENU *hmenuCurrent )
|
||||||
{
|
{
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
if (!menu || !menu->nItems || (menu->FocusedItem == NO_SELECTED_ITEM) ||
|
if (!menu || !menu->nItems || (menu->FocusedItem == NO_SELECTED_ITEM) ||
|
||||||
(menu->FocusedItem == SYSMENU_SELECTED)) return TRUE;
|
(menu->FocusedItem == SYSMENU_SELECTED)) return TRUE;
|
||||||
item = ((MENUITEM *)USER_HEAP_ADDR( menu->hItems )) + menu->FocusedItem;
|
item = ((MENUITEM *)USER_HEAP_LIN_ADDR(menu->hItems)) + menu->FocusedItem;
|
||||||
if (!(item->item_flags & MF_POPUP))
|
if (!(item->item_flags & MF_POPUP))
|
||||||
{
|
{
|
||||||
if (!(item->item_flags & (MF_GRAYED | MF_DISABLED)))
|
if (!(item->item_flags & (MF_GRAYED | MF_DISABLED)))
|
||||||
|
@ -966,7 +965,7 @@ static BOOL MENU_ButtonDown( HWND hwndOwner, HMENU hmenu, HMENU *hmenuCurrent,
|
||||||
WORD id;
|
WORD id;
|
||||||
|
|
||||||
if (!hmenu) return FALSE; /* Outside all menus */
|
if (!hmenu) return FALSE; /* Outside all menus */
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
item = MENU_FindItemByCoords( menu, pt.x, pt.y, &id );
|
item = MENU_FindItemByCoords( menu, pt.x, pt.y, &id );
|
||||||
if (!item) /* Maybe in system menu */
|
if (!item) /* Maybe in system menu */
|
||||||
{
|
{
|
||||||
|
@ -1017,7 +1016,7 @@ static BOOL MENU_ButtonUp( HWND hwndOwner, HMENU hmenu, HMENU *hmenuCurrent,
|
||||||
WORD id;
|
WORD id;
|
||||||
|
|
||||||
if (!hmenu) return FALSE; /* Outside all menus */
|
if (!hmenu) return FALSE; /* Outside all menus */
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
item = MENU_FindItemByCoords( menu, pt.x, pt.y, &id );
|
item = MENU_FindItemByCoords( menu, pt.x, pt.y, &id );
|
||||||
if (!item) /* Maybe in system menu */
|
if (!item) /* Maybe in system menu */
|
||||||
{
|
{
|
||||||
|
@ -1054,7 +1053,7 @@ static BOOL MENU_MouseMove( HWND hwndOwner, HMENU hmenu, HMENU *hmenuCurrent,
|
||||||
POINT pt )
|
POINT pt )
|
||||||
{
|
{
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
WORD id = NO_SELECTED_ITEM;
|
WORD id = NO_SELECTED_ITEM;
|
||||||
|
|
||||||
if (hmenu)
|
if (hmenu)
|
||||||
|
@ -1092,7 +1091,7 @@ static void MENU_KeyLeft( HWND hwndOwner, HMENU hmenu, HMENU *hmenuCurrent )
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
HMENU hmenutmp, hmenuprev;
|
HMENU hmenutmp, hmenuprev;
|
||||||
|
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
hmenuprev = hmenutmp = hmenu;
|
hmenuprev = hmenutmp = hmenu;
|
||||||
while (hmenutmp != *hmenuCurrent)
|
while (hmenutmp != *hmenuCurrent)
|
||||||
{
|
{
|
||||||
|
@ -1126,7 +1125,7 @@ static void MENU_KeyRight( HWND hwndOwner, HMENU hmenu, HMENU *hmenuCurrent )
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
HMENU hmenutmp;
|
HMENU hmenutmp;
|
||||||
|
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
|
|
||||||
if ((menu->wFlags & MF_POPUP) || (*hmenuCurrent != hmenu))
|
if ((menu->wFlags & MF_POPUP) || (*hmenuCurrent != hmenu))
|
||||||
{
|
{
|
||||||
|
@ -1175,32 +1174,36 @@ static void MENU_KeyRight( HWND hwndOwner, HMENU hmenu, HMENU *hmenuCurrent )
|
||||||
static BOOL MENU_TrackMenu( HMENU hmenu, WORD wFlags, int x, int y,
|
static BOOL MENU_TrackMenu( HMENU hmenu, WORD wFlags, int x, int y,
|
||||||
HWND hwnd, LPRECT lprect )
|
HWND hwnd, LPRECT lprect )
|
||||||
{
|
{
|
||||||
MSG msg;
|
MSG *msg;
|
||||||
|
HLOCAL hMsg;
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
HMENU hmenuCurrent = hmenu;
|
HMENU hmenuCurrent = hmenu;
|
||||||
BOOL fClosed = FALSE;
|
BOOL fClosed = FALSE, fRemove;
|
||||||
WORD pos;
|
WORD pos;
|
||||||
|
|
||||||
fEndMenuCalled = FALSE;
|
fEndMenuCalled = FALSE;
|
||||||
if (!(menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu ))) return FALSE;
|
if (!(menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu ))) return FALSE;
|
||||||
if (x && y)
|
if (x && y)
|
||||||
{
|
{
|
||||||
POINT pt = { x, y };
|
POINT pt = { x, y };
|
||||||
MENU_ButtonDown( hwnd, hmenu, &hmenuCurrent, pt );
|
MENU_ButtonDown( hwnd, hmenu, &hmenuCurrent, pt );
|
||||||
}
|
}
|
||||||
SetCapture( hwnd );
|
SetCapture( hwnd );
|
||||||
|
hMsg = USER_HEAP_ALLOC( sizeof(MSG) );
|
||||||
|
msg = (MSG *)USER_HEAP_LIN_ADDR( hMsg );
|
||||||
while (!fClosed)
|
while (!fClosed)
|
||||||
{
|
{
|
||||||
if (!MSG_InternalGetMessage( &msg, 0, hwnd, MSGF_MENU, 0, TRUE ))
|
if (!MSG_InternalGetMessage( USER_HEAP_SEG_ADDR(hMsg), 0,
|
||||||
|
hwnd, MSGF_MENU, 0, TRUE ))
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if ((msg.message >= WM_MOUSEFIRST) && (msg.message <= WM_MOUSELAST))
|
fRemove = FALSE;
|
||||||
|
if ((msg->message >= WM_MOUSEFIRST) && (msg->message <= WM_MOUSELAST))
|
||||||
{
|
{
|
||||||
/* Find the sub-popup for this mouse event (if any) */
|
/* Find the sub-popup for this mouse event (if any) */
|
||||||
HMENU hsubmenu = MENU_FindMenuByCoords( hmenu, msg.pt );
|
HMENU hsubmenu = MENU_FindMenuByCoords( hmenu, msg->pt );
|
||||||
|
|
||||||
switch(msg.message)
|
switch(msg->message)
|
||||||
{
|
{
|
||||||
case WM_RBUTTONDOWN:
|
case WM_RBUTTONDOWN:
|
||||||
case WM_NCRBUTTONDOWN:
|
case WM_NCRBUTTONDOWN:
|
||||||
|
@ -1209,7 +1212,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, WORD wFlags, int x, int y,
|
||||||
case WM_LBUTTONDOWN:
|
case WM_LBUTTONDOWN:
|
||||||
case WM_NCLBUTTONDOWN:
|
case WM_NCLBUTTONDOWN:
|
||||||
fClosed = !MENU_ButtonDown( hwnd, hsubmenu,
|
fClosed = !MENU_ButtonDown( hwnd, hsubmenu,
|
||||||
&hmenuCurrent, msg.pt );
|
&hmenuCurrent, msg->pt );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_RBUTTONUP:
|
case WM_RBUTTONUP:
|
||||||
|
@ -1219,28 +1222,30 @@ static BOOL MENU_TrackMenu( HMENU hmenu, WORD wFlags, int x, int y,
|
||||||
case WM_LBUTTONUP:
|
case WM_LBUTTONUP:
|
||||||
case WM_NCLBUTTONUP:
|
case WM_NCLBUTTONUP:
|
||||||
/* If outside all menus but inside lprect, ignore it */
|
/* If outside all menus but inside lprect, ignore it */
|
||||||
if (!hsubmenu && lprect && PtInRect( lprect, msg.pt )) break;
|
if (!hsubmenu && lprect && PtInRect( lprect, msg->pt )) break;
|
||||||
fClosed = !MENU_ButtonUp( hwnd, hsubmenu,
|
fClosed = !MENU_ButtonUp( hwnd, hsubmenu,
|
||||||
&hmenuCurrent, msg.pt );
|
&hmenuCurrent, msg->pt );
|
||||||
|
fRemove = TRUE; /* Remove event even if outside menu */
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case WM_MOUSEMOVE:
|
case WM_MOUSEMOVE:
|
||||||
case WM_NCMOUSEMOVE:
|
case WM_NCMOUSEMOVE:
|
||||||
if ((msg.wParam & MK_LBUTTON) ||
|
if ((msg->wParam & MK_LBUTTON) ||
|
||||||
((wFlags & TPM_RIGHTBUTTON) && (msg.wParam & MK_RBUTTON)))
|
((wFlags & TPM_RIGHTBUTTON) && (msg->wParam & MK_RBUTTON)))
|
||||||
{
|
{
|
||||||
fClosed = !MENU_MouseMove( hwnd, hsubmenu,
|
fClosed = !MENU_MouseMove( hwnd, hsubmenu,
|
||||||
&hmenuCurrent, msg.pt );
|
&hmenuCurrent, msg->pt );
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if ((msg.message >= WM_KEYFIRST) && (msg.message <= WM_KEYLAST))
|
else if ((msg->message >= WM_KEYFIRST) && (msg->message <= WM_KEYLAST))
|
||||||
{
|
{
|
||||||
switch(msg.message)
|
fRemove = TRUE; /* Keyboard messages are always removed */
|
||||||
|
switch(msg->message)
|
||||||
{
|
{
|
||||||
case WM_KEYDOWN:
|
case WM_KEYDOWN:
|
||||||
switch(msg.wParam)
|
switch(msg->wParam)
|
||||||
{
|
{
|
||||||
case VK_HOME:
|
case VK_HOME:
|
||||||
MENU_SelectItem( hmenuCurrent, NO_SELECTED_ITEM );
|
MENU_SelectItem( hmenuCurrent, NO_SELECTED_ITEM );
|
||||||
|
@ -1288,7 +1293,7 @@ static BOOL MENU_TrackMenu( HMENU hmenu, WORD wFlags, int x, int y,
|
||||||
break; /* WM_KEYDOWN */
|
break; /* WM_KEYDOWN */
|
||||||
|
|
||||||
case WM_SYSKEYDOWN:
|
case WM_SYSKEYDOWN:
|
||||||
switch(msg.wParam)
|
switch(msg->wParam)
|
||||||
{
|
{
|
||||||
case VK_MENU:
|
case VK_MENU:
|
||||||
fClosed = TRUE;
|
fClosed = TRUE;
|
||||||
|
@ -1301,8 +1306,8 @@ static BOOL MENU_TrackMenu( HMENU hmenu, WORD wFlags, int x, int y,
|
||||||
{
|
{
|
||||||
/* Hack to avoid control chars. */
|
/* Hack to avoid control chars. */
|
||||||
/* We will find a better way real soon... */
|
/* We will find a better way real soon... */
|
||||||
if ((msg.wParam <= 32) || (msg.wParam >= 127)) break;
|
if ((msg->wParam <= 32) || (msg->wParam >= 127)) break;
|
||||||
pos = MENU_FindItemByKey( hwnd, hmenuCurrent, msg.wParam );
|
pos = MENU_FindItemByKey( hwnd, hmenuCurrent, msg->wParam );
|
||||||
if (pos == (WORD)-2) fClosed = TRUE;
|
if (pos == (WORD)-2) fClosed = TRUE;
|
||||||
else if (pos == (WORD)-1) MessageBeep(0);
|
else if (pos == (WORD)-1) MessageBeep(0);
|
||||||
else
|
else
|
||||||
|
@ -1314,17 +1319,19 @@ static BOOL MENU_TrackMenu( HMENU hmenu, WORD wFlags, int x, int y,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break; /* WM_CHAR */
|
break; /* WM_CHAR */
|
||||||
} /* switch(msg.message) */
|
} /* switch(msg->message) */
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
DispatchMessage( &msg );
|
DispatchMessage( msg );
|
||||||
}
|
}
|
||||||
if (fEndMenuCalled) fClosed = TRUE;
|
if (fEndMenuCalled) fClosed = TRUE;
|
||||||
|
if (!fClosed) fRemove = TRUE;
|
||||||
|
|
||||||
if (!fClosed) /* Remove the message from the queue */
|
if (fRemove) /* Remove the message from the queue */
|
||||||
PeekMessage( &msg, 0, 0, 0, PM_REMOVE );
|
PeekMessage( msg, 0, msg->message, msg->message, PM_REMOVE );
|
||||||
}
|
}
|
||||||
|
USER_HEAP_FREE( hMsg );
|
||||||
ReleaseCapture();
|
ReleaseCapture();
|
||||||
MENU_HideSubPopups( hmenu );
|
MENU_HideSubPopups( hmenu );
|
||||||
if (menu->wFlags & MF_POPUP) ShowWindow( menu->hWnd, SW_HIDE );
|
if (menu->wFlags & MF_POPUP) ShowWindow( menu->hWnd, SW_HIDE );
|
||||||
|
@ -1388,7 +1395,7 @@ LONG PopupMenuWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
{
|
{
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
{
|
{
|
||||||
CREATESTRUCT *createStruct = (CREATESTRUCT *)lParam;
|
CREATESTRUCT *createStruct = (CREATESTRUCT*)PTR_SEG_TO_LIN(lParam);
|
||||||
HMENU hmenu = (HMENU) ((int)createStruct->lpCreateParams & 0xffff);
|
HMENU hmenu = (HMENU) ((int)createStruct->lpCreateParams & 0xffff);
|
||||||
SetWindowWord( hwnd, 0, hmenu );
|
SetWindowWord( hwnd, 0, hmenu );
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -1427,7 +1434,7 @@ WORD MENU_GetMenuBarHeight( HWND hwnd, WORD menubarWidth, int orgX, int orgY )
|
||||||
LPPOPUPMENU lppop;
|
LPPOPUPMENU lppop;
|
||||||
|
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
|
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return 0;
|
||||||
if (!(lppop = (LPPOPUPMENU)USER_HEAP_ADDR( wndPtr->wIDmenu ))) return 0;
|
if (!(lppop = (LPPOPUPMENU)USER_HEAP_LIN_ADDR(wndPtr->wIDmenu))) return 0;
|
||||||
hdc = GetDC( hwnd );
|
hdc = GetDC( hwnd );
|
||||||
SetRect( &rectBar, orgX, orgY, orgX+menubarWidth, orgY+SYSMETRICS_CYMENU );
|
SetRect( &rectBar, orgX, orgY, orgX+menubarWidth, orgY+SYSMETRICS_CYMENU );
|
||||||
MENU_MenuBarCalcSize( hdc, &rectBar, lppop, hwnd );
|
MENU_MenuBarCalcSize( hdc, &rectBar, lppop, hwnd );
|
||||||
|
@ -1442,17 +1449,18 @@ WORD MENU_GetMenuBarHeight( HWND hwnd, WORD menubarWidth, int orgX, int orgY )
|
||||||
BOOL ChangeMenu(HMENU hMenu, WORD nPos, LPSTR lpNewItem,
|
BOOL ChangeMenu(HMENU hMenu, WORD nPos, LPSTR lpNewItem,
|
||||||
WORD wItemID, WORD wFlags)
|
WORD wItemID, WORD wFlags)
|
||||||
{
|
{
|
||||||
|
dprintf_menu(stddeb,"ChangeMenu(%04X, %X, '%s', %X, %X)\n",
|
||||||
|
hMenu, nPos, lpNewItem, wItemID, wFlags);
|
||||||
if (wFlags & MF_APPEND)
|
if (wFlags & MF_APPEND)
|
||||||
return AppendMenu(hMenu, wFlags, wItemID, lpNewItem);
|
return AppendMenu(hMenu, wFlags, wItemID, lpNewItem);
|
||||||
if (wFlags & MF_DELETE)
|
if (wFlags & MF_DELETE)
|
||||||
return DeleteMenu(hMenu, wItemID, wFlags);
|
return DeleteMenu(hMenu, wItemID, wFlags);
|
||||||
if (wFlags & MF_INSERT)
|
|
||||||
return InsertMenu(hMenu, nPos, wFlags, wItemID, lpNewItem);
|
|
||||||
if (wFlags & MF_CHANGE)
|
if (wFlags & MF_CHANGE)
|
||||||
return ModifyMenu(hMenu, nPos, wFlags, wItemID, lpNewItem);
|
return ModifyMenu(hMenu, nPos, wFlags, wItemID, lpNewItem);
|
||||||
if (wFlags & MF_REMOVE)
|
if (wFlags & MF_REMOVE)
|
||||||
return RemoveMenu(hMenu, wItemID, wFlags);
|
return RemoveMenu(hMenu, wItemID, wFlags);
|
||||||
return FALSE;
|
/* Default: MF_INSERT */
|
||||||
|
return InsertMenu(hMenu, nPos, wFlags, wItemID, lpNewItem);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1534,7 +1542,7 @@ BOOL HiliteMenuItem(HWND hWnd, HMENU hMenu, WORD wItemID, WORD wHilite)
|
||||||
dprintf_menu(stddeb,"HiliteMenuItem(%04X, %04X, %04X, %04X);\n",
|
dprintf_menu(stddeb,"HiliteMenuItem(%04X, %04X, %04X, %04X);\n",
|
||||||
hWnd, hMenu, wItemID, wHilite);
|
hWnd, hMenu, wItemID, wHilite);
|
||||||
if (!(lpitem = MENU_FindItem( &hMenu, &wItemID, wHilite ))) return FALSE;
|
if (!(lpitem = MENU_FindItem( &hMenu, &wItemID, wHilite ))) return FALSE;
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu))) return FALSE;
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return FALSE;
|
||||||
if (menu->FocusedItem == wItemID) return TRUE;
|
if (menu->FocusedItem == wItemID) return TRUE;
|
||||||
MENU_HideSubPopups( hMenu );
|
MENU_HideSubPopups( hMenu );
|
||||||
MENU_SelectItem( hMenu, wItemID );
|
MENU_SelectItem( hMenu, wItemID );
|
||||||
|
@ -1553,7 +1561,7 @@ WORD GetMenuState(HMENU hMenu, WORD wItemID, WORD wFlags)
|
||||||
if (!(lpitem = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return -1;
|
if (!(lpitem = MENU_FindItem( &hMenu, &wItemID, wFlags ))) return -1;
|
||||||
if (lpitem->item_flags & MF_POPUP)
|
if (lpitem->item_flags & MF_POPUP)
|
||||||
{
|
{
|
||||||
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_ADDR( lpitem->item_id );
|
POPUPMENU *menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( lpitem->item_id );
|
||||||
if (!menu) return -1;
|
if (!menu) return -1;
|
||||||
else return (menu->nItems << 8) | (menu->wFlags & 0xff);
|
else return (menu->nItems << 8) | (menu->wFlags & 0xff);
|
||||||
}
|
}
|
||||||
|
@ -1568,7 +1576,7 @@ WORD GetMenuItemCount(HMENU hMenu)
|
||||||
{
|
{
|
||||||
LPPOPUPMENU menu;
|
LPPOPUPMENU menu;
|
||||||
dprintf_menu(stddeb,"GetMenuItemCount(%04X);\n", hMenu);
|
dprintf_menu(stddeb,"GetMenuItemCount(%04X);\n", hMenu);
|
||||||
menu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu);
|
menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
||||||
if (menu == NULL) return (WORD)-1;
|
if (menu == NULL) return (WORD)-1;
|
||||||
dprintf_menu(stddeb,"GetMenuItemCount(%04X) return %d \n",
|
dprintf_menu(stddeb,"GetMenuItemCount(%04X) return %d \n",
|
||||||
hMenu, menu->nItems);
|
hMenu, menu->nItems);
|
||||||
|
@ -1585,9 +1593,9 @@ WORD GetMenuItemID(HMENU hMenu, int nPos)
|
||||||
MENUITEM *item;
|
MENUITEM *item;
|
||||||
|
|
||||||
dprintf_menu(stddeb,"GetMenuItemID(%04X, %d);\n", hMenu, nPos);
|
dprintf_menu(stddeb,"GetMenuItemID(%04X, %d);\n", hMenu, nPos);
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu))) return -1;
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return -1;
|
||||||
if ((nPos < 0) || (nPos >= menu->nItems)) return -1;
|
if ((nPos < 0) || (nPos >= menu->nItems)) return -1;
|
||||||
item = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
item = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
if (item[nPos].item_flags & MF_POPUP) return -1;
|
if (item[nPos].item_flags & MF_POPUP) return -1;
|
||||||
return item[nPos].item_id;
|
return item[nPos].item_id;
|
||||||
}
|
}
|
||||||
|
@ -1613,28 +1621,45 @@ BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewIt
|
||||||
|
|
||||||
/* Find where to insert new item */
|
/* Find where to insert new item */
|
||||||
|
|
||||||
if ((wFlags & MF_BYPOSITION) && (nPos == (WORD)-1))
|
if ((wFlags & MF_BYPOSITION) &&
|
||||||
|
((nPos == (WORD)-1) || (nPos == GetMenuItemCount(hMenu))))
|
||||||
{
|
{
|
||||||
/* Special case: append to menu */
|
/* Special case: append to menu
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu))) return FALSE;
|
Some programs specify the menu length to do that */
|
||||||
nPos = menu->nItems;
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu)))
|
||||||
|
{
|
||||||
|
dprintf_menu(stddeb,"InsertMenu: %04X not a menu handle\n", hMenu);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
nPos = menu->nItems;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (!MENU_FindItem( &hMenu, &nPos, wFlags )) return FALSE;
|
if (!MENU_FindItem( &hMenu, &nPos, wFlags ))
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu))) return FALSE;
|
{
|
||||||
|
dprintf_menu(stddeb,"InsertMenu: Item %X not found\n", nPos);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu)))
|
||||||
|
{
|
||||||
|
dprintf_menu(stddeb,"InsertMenu: %04X not a menu handle\n", hMenu);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create new items array */
|
/* Create new items array */
|
||||||
|
|
||||||
hNewItems = USER_HEAP_ALLOC( GMEM_MOVEABLE,
|
hNewItems = USER_HEAP_ALLOC( sizeof(MENUITEM) * (menu->nItems+1) );
|
||||||
sizeof(MENUITEM) * (menu->nItems+1) );
|
if (!hNewItems)
|
||||||
if (!hNewItems) return FALSE;
|
{
|
||||||
newItems = (MENUITEM *) USER_HEAP_ADDR( hNewItems );
|
dprintf_menu(stddeb,"InsertMenu: allocation failed\n");
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
newItems = (MENUITEM *) USER_HEAP_LIN_ADDR( hNewItems );
|
||||||
if (menu->nItems > 0)
|
if (menu->nItems > 0)
|
||||||
{
|
{
|
||||||
/* Copy the old array into the new */
|
/* Copy the old array into the new */
|
||||||
MENUITEM *oldItems = (MENUITEM *) USER_HEAP_ADDR( menu->hItems );
|
MENUITEM *oldItems = (MENUITEM *) USER_HEAP_LIN_ADDR( menu->hItems );
|
||||||
if (nPos > 0) memcpy( newItems, oldItems, nPos * sizeof(MENUITEM) );
|
if (nPos > 0) memcpy( newItems, oldItems, nPos * sizeof(MENUITEM) );
|
||||||
if (nPos < menu->nItems) memcpy( &newItems[nPos+1], &oldItems[nPos],
|
if (nPos < menu->nItems) memcpy( &newItems[nPos+1], &oldItems[nPos],
|
||||||
(menu->nItems-nPos)*sizeof(MENUITEM) );
|
(menu->nItems-nPos)*sizeof(MENUITEM) );
|
||||||
|
@ -1658,15 +1683,15 @@ BOOL InsertMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewIt
|
||||||
lpitem->item_flags |= MF_HELP;
|
lpitem->item_flags |= MF_HELP;
|
||||||
lpNewItem++;
|
lpNewItem++;
|
||||||
}
|
}
|
||||||
lpitem->hText = USER_HEAP_ALLOC( GMEM_MOVEABLE, strlen(lpNewItem)+1 );
|
lpitem->hText = USER_HEAP_ALLOC( strlen(lpNewItem)+1 );
|
||||||
lpitem->item_text = (char *)USER_HEAP_ADDR( lpitem->hText );
|
lpitem->item_text = (char *)USER_HEAP_LIN_ADDR( lpitem->hText );
|
||||||
strcpy( lpitem->item_text, lpNewItem );
|
strcpy( lpitem->item_text, lpNewItem );
|
||||||
}
|
}
|
||||||
else if (wFlags & MF_BITMAP) lpitem->hText = LOWORD((DWORD)lpNewItem);
|
else if (wFlags & MF_BITMAP) lpitem->hText = LOWORD((DWORD)lpNewItem);
|
||||||
else lpitem->item_text = lpNewItem;
|
else lpitem->item_text = lpNewItem;
|
||||||
|
|
||||||
if (wFlags & MF_POPUP) /* Set the MF_POPUP flag on the popup-menu */
|
if (wFlags & MF_POPUP) /* Set the MF_POPUP flag on the popup-menu */
|
||||||
((POPUPMENU *)USER_HEAP_ADDR(wItemID))->wFlags |= MF_POPUP;
|
((POPUPMENU *)USER_HEAP_LIN_ADDR(wItemID))->wFlags |= MF_POPUP;
|
||||||
|
|
||||||
SetRectEmpty( &lpitem->rect );
|
SetRectEmpty( &lpitem->rect );
|
||||||
lpitem->hCheckBit = hStdCheck;
|
lpitem->hCheckBit = hStdCheck;
|
||||||
|
@ -1694,7 +1719,7 @@ BOOL RemoveMenu(HMENU hMenu, WORD nPos, WORD wFlags)
|
||||||
dprintf_menu(stddeb,"RemoveMenu (%04X, %04X, %04X) !\n",
|
dprintf_menu(stddeb,"RemoveMenu (%04X, %04X, %04X) !\n",
|
||||||
hMenu, nPos, wFlags);
|
hMenu, nPos, wFlags);
|
||||||
if (!(lpitem = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
|
if (!(lpitem = MENU_FindItem( &hMenu, &nPos, wFlags ))) return FALSE;
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu))) return FALSE;
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return FALSE;
|
||||||
|
|
||||||
/* Remove item */
|
/* Remove item */
|
||||||
|
|
||||||
|
@ -1713,8 +1738,7 @@ BOOL RemoveMenu(HMENU hMenu, WORD nPos, WORD wFlags)
|
||||||
nPos++;
|
nPos++;
|
||||||
}
|
}
|
||||||
menu->hItems = USER_HEAP_REALLOC( menu->hItems,
|
menu->hItems = USER_HEAP_REALLOC( menu->hItems,
|
||||||
menu->nItems * sizeof(MENUITEM),
|
menu->nItems * sizeof(MENUITEM) );
|
||||||
GMEM_MOVEABLE );
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -1754,8 +1778,8 @@ BOOL ModifyMenu(HMENU hMenu, WORD nPos, WORD wFlags, WORD wItemID, LPSTR lpNewIt
|
||||||
|
|
||||||
if (IS_STRING_ITEM(wFlags))
|
if (IS_STRING_ITEM(wFlags))
|
||||||
{
|
{
|
||||||
lpitem->hText = USER_HEAP_ALLOC( GMEM_MOVEABLE, strlen(lpNewItem)+1 );
|
lpitem->hText = USER_HEAP_ALLOC( strlen(lpNewItem)+1 );
|
||||||
lpitem->item_text = (char *)USER_HEAP_ADDR( lpitem->hText );
|
lpitem->item_text = (char *)USER_HEAP_LIN_ADDR( lpitem->hText );
|
||||||
strcpy( lpitem->item_text, lpNewItem );
|
strcpy( lpitem->item_text, lpNewItem );
|
||||||
}
|
}
|
||||||
else if (wFlags & MF_BITMAP) lpitem->hText = LOWORD((DWORD)lpNewItem);
|
else if (wFlags & MF_BITMAP) lpitem->hText = LOWORD((DWORD)lpNewItem);
|
||||||
|
@ -1774,7 +1798,7 @@ HMENU CreatePopupMenu()
|
||||||
POPUPMENU *menu;
|
POPUPMENU *menu;
|
||||||
|
|
||||||
if (!(hmenu = CreateMenu())) return 0;
|
if (!(hmenu = CreateMenu())) return 0;
|
||||||
menu = (POPUPMENU *) USER_HEAP_ADDR( hmenu );
|
menu = (POPUPMENU *) USER_HEAP_LIN_ADDR( hmenu );
|
||||||
menu->wFlags |= MF_POPUP;
|
menu->wFlags |= MF_POPUP;
|
||||||
return hmenu;
|
return hmenu;
|
||||||
}
|
}
|
||||||
|
@ -1825,9 +1849,9 @@ HMENU CreateMenu()
|
||||||
HMENU hMenu;
|
HMENU hMenu;
|
||||||
LPPOPUPMENU menu;
|
LPPOPUPMENU menu;
|
||||||
dprintf_menu(stddeb,"CreateMenu !\n");
|
dprintf_menu(stddeb,"CreateMenu !\n");
|
||||||
if (!(hMenu = USER_HEAP_ALLOC( GMEM_MOVEABLE, sizeof(POPUPMENU) )))
|
if (!(hMenu = USER_HEAP_ALLOC( sizeof(POPUPMENU) )))
|
||||||
return 0;
|
return 0;
|
||||||
menu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu);
|
menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
||||||
menu->hNext = 0;
|
menu->hNext = 0;
|
||||||
menu->wFlags = 0;
|
menu->wFlags = 0;
|
||||||
menu->wMagic = MENU_MAGIC;
|
menu->wMagic = MENU_MAGIC;
|
||||||
|
@ -1851,7 +1875,7 @@ BOOL DestroyMenu(HMENU hMenu)
|
||||||
LPPOPUPMENU lppop;
|
LPPOPUPMENU lppop;
|
||||||
dprintf_menu(stddeb,"DestroyMenu (%04X) !\n", hMenu);
|
dprintf_menu(stddeb,"DestroyMenu (%04X) !\n", hMenu);
|
||||||
if (hMenu == 0) return FALSE;
|
if (hMenu == 0) return FALSE;
|
||||||
lppop = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu);
|
lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
||||||
if (lppop == NULL) return FALSE;
|
if (lppop == NULL) return FALSE;
|
||||||
if ((lppop->wFlags & MF_POPUP) && lppop->hWnd)
|
if ((lppop->wFlags & MF_POPUP) && lppop->hWnd)
|
||||||
DestroyWindow( lppop->hWnd );
|
DestroyWindow( lppop->hWnd );
|
||||||
|
@ -1859,7 +1883,7 @@ BOOL DestroyMenu(HMENU hMenu)
|
||||||
if (lppop->hItems)
|
if (lppop->hItems)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
MENUITEM *item = (MENUITEM *) USER_HEAP_ADDR( lppop->hItems );
|
MENUITEM *item = (MENUITEM *) USER_HEAP_LIN_ADDR( lppop->hItems );
|
||||||
for (i = lppop->nItems; i > 0; i--, item++)
|
for (i = lppop->nItems; i > 0; i--, item++)
|
||||||
{
|
{
|
||||||
if (item->item_flags & MF_POPUP)
|
if (item->item_flags & MF_POPUP)
|
||||||
|
@ -1929,7 +1953,7 @@ BOOL SetMenu(HWND hWnd, HMENU hMenu)
|
||||||
wndPtr->wIDmenu = hMenu;
|
wndPtr->wIDmenu = hMenu;
|
||||||
if (hMenu != 0)
|
if (hMenu != 0)
|
||||||
{
|
{
|
||||||
lpmenu = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu);
|
lpmenu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu);
|
||||||
if (lpmenu == NULL) {
|
if (lpmenu == NULL) {
|
||||||
fprintf(stderr,"SetMenu(%04X, %04X) // Bad menu handle !\n",
|
fprintf(stderr,"SetMenu(%04X, %04X) // Bad menu handle !\n",
|
||||||
hWnd, hMenu);
|
hWnd, hMenu);
|
||||||
|
@ -1954,9 +1978,9 @@ HMENU GetSubMenu(HMENU hMenu, short nPos)
|
||||||
LPPOPUPMENU lppop;
|
LPPOPUPMENU lppop;
|
||||||
LPMENUITEM lpitem;
|
LPMENUITEM lpitem;
|
||||||
dprintf_menu(stddeb,"GetSubMenu (%04X, %04X) !\n", hMenu, nPos);
|
dprintf_menu(stddeb,"GetSubMenu (%04X, %04X) !\n", hMenu, nPos);
|
||||||
if (!(lppop = (LPPOPUPMENU) USER_HEAP_ADDR(hMenu))) return 0;
|
if (!(lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(hMenu))) return 0;
|
||||||
if ((WORD)nPos >= lppop->nItems) return 0;
|
if ((WORD)nPos >= lppop->nItems) return 0;
|
||||||
lpitem = (MENUITEM *) USER_HEAP_ADDR( lppop->hItems );
|
lpitem = (MENUITEM *) USER_HEAP_LIN_ADDR( lppop->hItems );
|
||||||
if (!(lpitem[nPos].item_flags & MF_POPUP)) return 0;
|
if (!(lpitem[nPos].item_flags & MF_POPUP)) return 0;
|
||||||
return lpitem[nPos].item_id;
|
return lpitem[nPos].item_id;
|
||||||
}
|
}
|
||||||
|
@ -1975,7 +1999,7 @@ void DrawMenuBar(HWND hWnd)
|
||||||
wndPtr->wIDmenu != 0) {
|
wndPtr->wIDmenu != 0) {
|
||||||
dprintf_menu(stddeb,"DrawMenuBar wIDmenu=%04X \n",
|
dprintf_menu(stddeb,"DrawMenuBar wIDmenu=%04X \n",
|
||||||
wndPtr->wIDmenu);
|
wndPtr->wIDmenu);
|
||||||
lppop = (LPPOPUPMENU) USER_HEAP_ADDR(wndPtr->wIDmenu);
|
lppop = (LPPOPUPMENU) USER_HEAP_LIN_ADDR(wndPtr->wIDmenu);
|
||||||
if (lppop == NULL) return;
|
if (lppop == NULL) return;
|
||||||
|
|
||||||
lppop->Height = 0; /* Make sure we call MENU_MenuBarCalcSize */
|
lppop->Height = 0; /* Make sure we call MENU_MenuBarCalcSize */
|
||||||
|
@ -2035,7 +2059,7 @@ HMENU CopySysMenu()
|
||||||
dprintf_menu(stddeb,"No SYSMENU\n");
|
dprintf_menu(stddeb,"No SYSMENU\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
menu = (POPUPMENU*) USER_HEAP_ADDR(hMenu);
|
menu = (POPUPMENU*) USER_HEAP_LIN_ADDR(hMenu);
|
||||||
menu->wFlags |= MF_SYSMENU|MF_POPUP;
|
menu->wFlags |= MF_SYSMENU|MF_POPUP;
|
||||||
dprintf_menu(stddeb,"CopySysMenu hMenu=%04X !\n", hMenu);
|
dprintf_menu(stddeb,"CopySysMenu hMenu=%04X !\n", hMenu);
|
||||||
return hMenu;
|
return hMenu;
|
||||||
|
@ -2088,6 +2112,6 @@ WORD * ParseMenuResource(WORD *first_item, int level, HMENU hMenu)
|
||||||
BOOL IsMenu( HMENU hmenu )
|
BOOL IsMenu( HMENU hmenu )
|
||||||
{
|
{
|
||||||
LPPOPUPMENU menu;
|
LPPOPUPMENU menu;
|
||||||
if (!(menu = (LPPOPUPMENU) USER_HEAP_ADDR( hmenu ))) return FALSE;
|
if (!(menu = (LPPOPUPMENU) USER_HEAP_LIN_ADDR( hmenu ))) return FALSE;
|
||||||
return (menu->wMagic == MENU_MAGIC);
|
return (menu->wMagic == MENU_MAGIC);
|
||||||
}
|
}
|
||||||
|
|
|
@ -109,9 +109,9 @@ static SCROLLINFO *SCROLL_GetScrollInfo( HWND hwnd, int nBar )
|
||||||
|
|
||||||
if (!handle) /* Create the info structure if needed */
|
if (!handle) /* Create the info structure if needed */
|
||||||
{
|
{
|
||||||
if ((handle = USER_HEAP_ALLOC( GMEM_MOVEABLE, sizeof(SCROLLINFO) )))
|
if ((handle = USER_HEAP_ALLOC( sizeof(SCROLLINFO) )))
|
||||||
{
|
{
|
||||||
SCROLLINFO *infoPtr = (SCROLLINFO *) USER_HEAP_ADDR( handle );
|
SCROLLINFO *infoPtr = (SCROLLINFO *) USER_HEAP_LIN_ADDR( handle );
|
||||||
infoPtr->MinVal = infoPtr->CurVal = 0;
|
infoPtr->MinVal = infoPtr->CurVal = 0;
|
||||||
infoPtr->MaxVal = 100;
|
infoPtr->MaxVal = 100;
|
||||||
infoPtr->flags = ESB_ENABLE_BOTH;
|
infoPtr->flags = ESB_ENABLE_BOTH;
|
||||||
|
@ -120,7 +120,7 @@ static SCROLLINFO *SCROLL_GetScrollInfo( HWND hwnd, int nBar )
|
||||||
}
|
}
|
||||||
if (!hUpArrow) SCROLL_LoadBitmaps();
|
if (!hUpArrow) SCROLL_LoadBitmaps();
|
||||||
}
|
}
|
||||||
return (SCROLLINFO *) USER_HEAP_ADDR( handle );
|
return (SCROLLINFO *) USER_HEAP_LIN_ADDR( handle );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -204,7 +204,7 @@ static BOOL SCROLL_GetScrollBarRect( HWND hwnd, int nBar, RECT *lprect,
|
||||||
* from the top of the scroll-bar.
|
* from the top of the scroll-bar.
|
||||||
*/
|
*/
|
||||||
static UINT SCROLL_GetThumbVal( SCROLLINFO *infoPtr, RECT *rect,
|
static UINT SCROLL_GetThumbVal( SCROLLINFO *infoPtr, RECT *rect,
|
||||||
WORD arrowSize, BOOL vertical, WORD pos )
|
BOOL vertical, WORD pos )
|
||||||
{
|
{
|
||||||
int pixels = vertical ? rect->bottom-rect->top : rect->right-rect->left;
|
int pixels = vertical ? rect->bottom-rect->top : rect->right-rect->left;
|
||||||
if ((pixels -= 3*SYSMETRICS_CXVSCROLL+1) <= 0) return infoPtr->MinVal;
|
if ((pixels -= 3*SYSMETRICS_CXVSCROLL+1) <= 0) return infoPtr->MinVal;
|
||||||
|
@ -631,7 +631,7 @@ void SCROLL_HandleScrollEvent( HWND hwnd, int nBar, WORD msg, POINT pt )
|
||||||
SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize,
|
SCROLL_DrawMovingThumb( hdc, &rect, vertical, arrowSize,
|
||||||
trackThumbPos + pos - lastClickPos );
|
trackThumbPos + pos - lastClickPos );
|
||||||
lastMousePos = pos;
|
lastMousePos = pos;
|
||||||
val = SCROLL_GetThumbVal( infoPtr, &rect, vertical, arrowSize,
|
val = SCROLL_GetThumbVal( infoPtr, &rect, vertical,
|
||||||
trackThumbPos + lastMousePos - lastClickPos );
|
trackThumbPos + lastMousePos - lastClickPos );
|
||||||
SendMessage( hwndOwner, vertical ? WM_VSCROLL : WM_HSCROLL,
|
SendMessage( hwndOwner, vertical ? WM_VSCROLL : WM_HSCROLL,
|
||||||
SB_THUMBTRACK, MAKELONG( val, hwndCtl ));
|
SB_THUMBTRACK, MAKELONG( val, hwndCtl ));
|
||||||
|
@ -673,7 +673,7 @@ void SCROLL_HandleScrollEvent( HWND hwnd, int nBar, WORD msg, POINT pt )
|
||||||
{
|
{
|
||||||
if (trackHitTest == SCROLL_THUMB)
|
if (trackHitTest == SCROLL_THUMB)
|
||||||
{
|
{
|
||||||
UINT val = SCROLL_GetThumbVal( infoPtr, &rect, vertical, arrowSize,
|
UINT val = SCROLL_GetThumbVal( infoPtr, &rect, vertical,
|
||||||
trackThumbPos + lastMousePos - lastClickPos );
|
trackThumbPos + lastMousePos - lastClickPos );
|
||||||
SendMessage( hwndOwner, vertical ? WM_VSCROLL : WM_HSCROLL,
|
SendMessage( hwndOwner, vertical ? WM_VSCROLL : WM_HSCROLL,
|
||||||
SB_THUMBPOSITION, MAKELONG( val, hwndCtl ) );
|
SB_THUMBPOSITION, MAKELONG( val, hwndCtl ) );
|
||||||
|
@ -697,7 +697,7 @@ LONG ScrollBarWndProc( HWND hwnd, WORD message, WORD wParam, LONG lParam )
|
||||||
{
|
{
|
||||||
case WM_CREATE:
|
case WM_CREATE:
|
||||||
{
|
{
|
||||||
CREATESTRUCT *lpCreat = (CREATESTRUCT *)lParam;
|
CREATESTRUCT *lpCreat = (CREATESTRUCT *)PTR_SEG_TO_LIN(lParam);
|
||||||
if (lpCreat->style & SBS_SIZEBOX)
|
if (lpCreat->style & SBS_SIZEBOX)
|
||||||
{
|
{
|
||||||
fprintf( stdnimp, "Unimplemented style SBS_SIZEBOX.\n" );
|
fprintf( stdnimp, "Unimplemented style SBS_SIZEBOX.\n" );
|
||||||
|
|
|
@ -88,10 +88,10 @@ LONG StaticWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam)
|
||||||
case WM_NCCREATE:
|
case WM_NCCREATE:
|
||||||
if (style == SS_ICON)
|
if (style == SS_ICON)
|
||||||
{
|
{
|
||||||
CREATESTRUCT * createStruct = (CREATESTRUCT *)lParam;
|
CREATESTRUCT * createStruct = (CREATESTRUCT *)PTR_SEG_TO_LIN(lParam);
|
||||||
if (createStruct->lpszName)
|
if (createStruct->lpszName)
|
||||||
STATIC_SetIcon( hWnd, LoadIcon( createStruct->hInstance,
|
STATIC_SetIcon( hWnd, LoadIcon( createStruct->hInstance,
|
||||||
createStruct->lpszName ));
|
(SEGPTR)createStruct->lpszName ));
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
return DefWindowProc(hWnd, uMsg, wParam, lParam);
|
||||||
|
@ -136,9 +136,9 @@ LONG StaticWndProc(HWND hWnd, WORD uMsg, WORD wParam, LONG lParam)
|
||||||
case WM_SETTEXT:
|
case WM_SETTEXT:
|
||||||
if (style == SS_ICON)
|
if (style == SS_ICON)
|
||||||
STATIC_SetIcon( hWnd, LoadIcon( wndPtr->hInstance,
|
STATIC_SetIcon( hWnd, LoadIcon( wndPtr->hInstance,
|
||||||
(LPSTR)lParam ) );
|
(SEGPTR)lParam ));
|
||||||
else
|
else
|
||||||
DEFWND_SetText( hWnd, (LPSTR)lParam );
|
DEFWND_SetText( hWnd, (LPSTR)PTR_SEG_TO_LIN(lParam) );
|
||||||
InvalidateRect( hWnd, NULL, FALSE );
|
InvalidateRect( hWnd, NULL, FALSE );
|
||||||
UpdateWindow( hWnd );
|
UpdateWindow( hWnd );
|
||||||
break;
|
break;
|
||||||
|
@ -192,7 +192,7 @@ static void PaintTextfn( HWND hwnd, HDC hdc )
|
||||||
STATICINFO *infoPtr = (STATICINFO *)wndPtr->wExtra;
|
STATICINFO *infoPtr = (STATICINFO *)wndPtr->wExtra;
|
||||||
|
|
||||||
GetClientRect(hwnd, &rc);
|
GetClientRect(hwnd, &rc);
|
||||||
text = USER_HEAP_ADDR( wndPtr->hText );
|
text = USER_HEAP_LIN_ADDR( wndPtr->hText );
|
||||||
|
|
||||||
switch (style & 0x0000000F)
|
switch (style & 0x0000000F)
|
||||||
{
|
{
|
||||||
|
|
|
@ -13,6 +13,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993";
|
||||||
#include "desktop.h"
|
#include "desktop.h"
|
||||||
#include "mdi.h"
|
#include "mdi.h"
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
|
#include "user.h"
|
||||||
|
|
||||||
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 );
|
||||||
|
@ -34,7 +35,7 @@ static WNDCLASS WIDGETS_BuiltinClasses[] =
|
||||||
0, 0, 0, 0, NULL, "LISTBOX" },
|
0, 0, 0, 0, NULL, "LISTBOX" },
|
||||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS, ComboBoxWndProc, 0, 8,
|
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS, ComboBoxWndProc, 0, 8,
|
||||||
0, 0, 0, 0, NULL, "COMBOBOX" },
|
0, 0, 0, 0, NULL, "COMBOBOX" },
|
||||||
{ CS_GLOBALCLASS | CS_PARENTDC, EditWndProc, 0, 4,
|
{ CS_GLOBALCLASS | CS_PARENTDC, EditWndProc, 0, sizeof(WORD),
|
||||||
0, 0, 0, 0, NULL, "EDIT" },
|
0, 0, 0, 0, NULL, "EDIT" },
|
||||||
{ CS_GLOBALCLASS | CS_SAVEBITS, PopupMenuWndProc, 0, 8,
|
{ CS_GLOBALCLASS | CS_SAVEBITS, PopupMenuWndProc, 0, 8,
|
||||||
0, 0, 0, 0, NULL, POPUPMENU_CLASS_NAME },
|
0, 0, 0, 0, NULL, POPUPMENU_CLASS_NAME },
|
||||||
|
@ -58,12 +59,19 @@ static WNDCLASS WIDGETS_BuiltinClasses[] =
|
||||||
BOOL WIDGETS_Init(void)
|
BOOL WIDGETS_Init(void)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
HANDLE hName;
|
||||||
|
char *name;
|
||||||
WNDCLASS *class = WIDGETS_BuiltinClasses;
|
WNDCLASS *class = WIDGETS_BuiltinClasses;
|
||||||
|
|
||||||
|
if (!(hName = USER_HEAP_ALLOC( 20 ))) return FALSE;
|
||||||
|
name = USER_HEAP_LIN_ADDR( hName );
|
||||||
for (i = 0; i < NB_BUILTIN_CLASSES; i++, class++)
|
for (i = 0; i < NB_BUILTIN_CLASSES; i++, class++)
|
||||||
{
|
{
|
||||||
|
strcpy( name, class->lpszClassName );
|
||||||
|
class->lpszClassName = (LPSTR)USER_HEAP_SEG_ADDR( hName );
|
||||||
class->hCursor = LoadCursor( 0, IDC_ARROW );
|
class->hCursor = LoadCursor( 0, IDC_ARROW );
|
||||||
if (!RegisterClass( class )) return FALSE;
|
if (!RegisterClass( class )) return FALSE;
|
||||||
}
|
}
|
||||||
|
USER_HEAP_FREE( hName );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -6,6 +6,7 @@
|
||||||
#include <sys/utsname.h>
|
#include <sys/utsname.h>
|
||||||
#endif
|
#endif
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include "db_disasm.h"
|
||||||
|
|
||||||
#define N_BP 25
|
#define N_BP 25
|
||||||
|
|
||||||
|
@ -140,7 +141,7 @@ void toggle_next(int num)
|
||||||
unsigned int addr;
|
unsigned int addr;
|
||||||
addr=wbp[num].addr;
|
addr=wbp[num].addr;
|
||||||
if(wbp[num].next_addr == 0)
|
if(wbp[num].next_addr == 0)
|
||||||
wbp[num].next_addr=addr+print_insn(addr,addr,stderr,dbg_mode);
|
wbp[num].next_addr = db_disasm( addr, 0, (dbg_mode == 16) );
|
||||||
wbp[num].addr=wbp[num].next_addr;
|
wbp[num].addr=wbp[num].next_addr;
|
||||||
wbp[num].next_addr=addr;
|
wbp[num].next_addr=addr;
|
||||||
}
|
}
|
||||||
|
|
|
@ -72,6 +72,7 @@
|
||||||
#endif
|
#endif
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include "db_disasm.h"
|
#include "db_disasm.h"
|
||||||
|
#include "ldt.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Switch to disassemble 16-bit code.
|
* Switch to disassemble 16-bit code.
|
||||||
|
@ -888,9 +889,10 @@ static int db_lengths[] = {
|
||||||
10, /* EXTR */
|
10, /* EXTR */
|
||||||
};
|
};
|
||||||
|
|
||||||
unsigned int db_get_task_value(unsigned int loc, int size, int is_signed)
|
static unsigned int db_get_task_value(unsigned int loc, int size, int is_signed)
|
||||||
{
|
{
|
||||||
unsigned int result;
|
unsigned int result;
|
||||||
|
if (db_disasm_16) loc = (unsigned int)PTR_SEG_TO_LIN(loc);
|
||||||
switch(size)
|
switch(size)
|
||||||
{
|
{
|
||||||
case 4:
|
case 4:
|
||||||
|
@ -921,7 +923,8 @@ unsigned int db_get_task_value(unsigned int loc, int size, int is_signed)
|
||||||
|
|
||||||
#define get_value_inc(result, loc, size, is_signed) \
|
#define get_value_inc(result, loc, size, is_signed) \
|
||||||
result = db_get_task_value((loc), (size), (is_signed)); \
|
result = db_get_task_value((loc), (size), (is_signed)); \
|
||||||
(loc) += (size);
|
if (!db_disasm_16) (loc) += (size); \
|
||||||
|
else (loc) = ((loc) & 0xffff0000) | (((loc) + (size)) & 0xffff);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Read address at location and return updated location.
|
* Read address at location and return updated location.
|
||||||
|
@ -1011,6 +1014,23 @@ db_read_address(loc, short_addr, regmodrm, addrp)
|
||||||
return (loc);
|
return (loc);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void db_task_printsym(unsigned int addr, int size)
|
||||||
|
{
|
||||||
|
extern void print_address(unsigned int addr, FILE * outfile, int addrlen);
|
||||||
|
switch(size)
|
||||||
|
{
|
||||||
|
case BYTE:
|
||||||
|
fprintf(stderr, "0x%2.2x", addr & 0xff );
|
||||||
|
break;
|
||||||
|
case WORD:
|
||||||
|
fprintf(stderr, "0x%4.4x", addr & 0xffff );
|
||||||
|
break;
|
||||||
|
case LONG:
|
||||||
|
print_address(addr, stderr, db_disasm_16 ? 16 : 32);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
db_print_address(seg, size, addrp)
|
db_print_address(seg, size, addrp)
|
||||||
char * seg;
|
char * seg;
|
||||||
|
@ -1035,7 +1055,7 @@ db_print_address(seg, size, addrp)
|
||||||
fprintf(stderr,",%s,%d", addrp->index, 1<<addrp->ss);
|
fprintf(stderr,",%s,%d", addrp->index, 1<<addrp->ss);
|
||||||
fprintf(stderr,")");
|
fprintf(stderr,")");
|
||||||
} else
|
} else
|
||||||
db_task_printsym((db_addr_t)addrp->disp);
|
db_task_printsym((db_addr_t)addrp->disp, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1418,7 +1438,8 @@ db_disasm(loc, altfmt, flag16)
|
||||||
if (seg)
|
if (seg)
|
||||||
fprintf(stderr,"%s:%d",seg, displ);
|
fprintf(stderr,"%s:%d",seg, displ);
|
||||||
else
|
else
|
||||||
db_task_printsym((db_addr_t)displ);
|
db_task_printsym((db_addr_t)displ,
|
||||||
|
short_addr ? WORD : LONG);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Db:
|
case Db:
|
||||||
|
@ -1430,7 +1451,8 @@ db_disasm(loc, altfmt, flag16)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
displ = displ + loc;
|
displ = displ + loc;
|
||||||
db_task_printsym((db_addr_t)displ);
|
db_task_printsym((db_addr_t)displ,
|
||||||
|
short_addr ? WORD : LONG);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Dl:
|
case Dl:
|
||||||
|
@ -1444,7 +1466,8 @@ db_disasm(loc, altfmt, flag16)
|
||||||
get_value_inc(displ, loc, 4, TRUE);
|
get_value_inc(displ, loc, 4, TRUE);
|
||||||
displ = displ + loc;
|
displ = displ + loc;
|
||||||
}
|
}
|
||||||
db_task_printsym((db_addr_t)displ);
|
db_task_printsym((db_addr_t)displ,
|
||||||
|
short_addr ? WORD : LONG);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case o1:
|
case o1:
|
||||||
|
|
|
@ -10,6 +10,7 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <signal.h>
|
#include <signal.h>
|
||||||
|
#include "ldt.h"
|
||||||
|
|
||||||
#define YYSTYPE int
|
#define YYSTYPE int
|
||||||
|
|
||||||
|
@ -116,8 +117,8 @@ print:
|
||||||
|
|
||||||
infocmd: INFO REGS { info_reg(); }
|
infocmd: INFO REGS { info_reg(); }
|
||||||
| INFO STACK { info_stack(); }
|
| INFO STACK { info_stack(); }
|
||||||
|
| INFO SEGMENTS { LDT_Print(); }
|
||||||
| INFO BREAK { info_break(); }
|
| INFO BREAK { info_break(); }
|
||||||
| INFO SEGMENTS { print_ldt(); }
|
|
||||||
|
|
||||||
|
|
||||||
%%
|
%%
|
||||||
|
@ -197,7 +198,7 @@ wine_debug(int signal, int * regs)
|
||||||
int bpnum;
|
int bpnum;
|
||||||
addr = SC_EIP(dbg_mask);
|
addr = SC_EIP(dbg_mask);
|
||||||
if((addr & 0xffff0000) == 0 && dbg_mode == 16)
|
if((addr & 0xffff0000) == 0 && dbg_mode == 16)
|
||||||
addr |= SC_CS << 16;
|
addr = PTR_SEG_OFF_TO_LIN( SC_CS, addr );
|
||||||
if(should_continue(bpnum=get_bpnum(addr))){
|
if(should_continue(bpnum=get_bpnum(addr))){
|
||||||
insert_break(1);
|
insert_break(1);
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -10,7 +10,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
#include <neexe.h>
|
#include <neexe.h>
|
||||||
#include <segmem.h>
|
|
||||||
#include "selectors.h"
|
#include "selectors.h"
|
||||||
#include <wine.h>
|
#include <wine.h>
|
||||||
#include <dlls.h>
|
#include <dlls.h>
|
||||||
|
@ -168,7 +167,7 @@ load_entrypoints(){
|
||||||
j = GetEntryPointFromOrdinal(wpnt, ordinal);
|
j = GetEntryPointFromOrdinal(wpnt, ordinal);
|
||||||
address = j & 0xffff;
|
address = j & 0xffff;
|
||||||
j = j >> 16;
|
j = j >> 16;
|
||||||
address |= (wpnt->ne->selector_table[j].selector) << 16;
|
address |= wpnt->ne->selector_table[j] << 16;
|
||||||
fprintf(stderr,"%s -> %x\n", buffer, address);
|
fprintf(stderr,"%s -> %x\n", buffer, address);
|
||||||
add_hash(buffer, (unsigned int *) address);
|
add_hash(buffer, (unsigned int *) address);
|
||||||
cpnt += len + 2;
|
cpnt += len + 2;
|
||||||
|
|
124
debugger/info.c
124
debugger/info.c
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include "ldt.h"
|
||||||
#include "db_disasm.h"
|
#include "db_disasm.h"
|
||||||
#include "regpos.h"
|
#include "regpos.h"
|
||||||
|
|
||||||
|
@ -18,60 +19,24 @@ void application_not_running()
|
||||||
fprintf(stderr,"Application not running\n");
|
fprintf(stderr,"Application not running\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
void print_address(unsigned int addr, FILE * outfile){
|
void print_address(unsigned int addr, FILE * outfile, int addrlen)
|
||||||
char * name;
|
{
|
||||||
extern char * find_nearest_symbol(unsigned int *);
|
if (addrlen == 16)
|
||||||
|
{
|
||||||
|
fprintf( outfile, "%4.4x:%4.4x", addr >> 16, addr & 0xffff );
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
extern char * find_nearest_symbol(unsigned int *);
|
||||||
|
|
||||||
name = find_nearest_symbol((unsigned int *) addr);
|
char * name = find_nearest_symbol((unsigned int *) addr);
|
||||||
if(name)
|
if(name)
|
||||||
fprintf(outfile,"0x%8.8x(%s)", addr, name);
|
fprintf(outfile,"0x%8.8x(%s)", addr, name);
|
||||||
else
|
else
|
||||||
fprintf(outfile,"0x%8.8x", addr);
|
fprintf(outfile,"0x%8.8x", addr);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef GNU_DISASM
|
|
||||||
void print_address_info(bfd_vma addr, disassemble_info * info){
|
|
||||||
print_address((unsigned int) addr, info->stream);
|
|
||||||
}
|
|
||||||
|
|
||||||
int print_insn(char *realmemaddr, char *memaddr, FILE *stream, int addrlen){
|
|
||||||
static disassemble_info info;
|
|
||||||
static int initialized = 0;
|
|
||||||
|
|
||||||
if (!initialized) {
|
|
||||||
INIT_DISASSEMBLE_INFO(info, stderr);
|
|
||||||
info.print_address_func = print_address_info;
|
|
||||||
initialized = 1;
|
|
||||||
}
|
|
||||||
info.stream = stream;
|
|
||||||
info.buffer = memaddr;
|
|
||||||
info.buffer_vma = (bfd_vma) realmemaddr;
|
|
||||||
info.buffer_length = 1024;
|
|
||||||
if (addrlen == 16)
|
|
||||||
return print_insn_i286((bfd_vma) realmemaddr, &info);
|
|
||||||
if (addrlen == 32)
|
|
||||||
return print_insn_i386((bfd_vma) realmemaddr, &info);
|
|
||||||
fprintf(stderr, "invalid address length %d.\n", addrlen);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#else
|
|
||||||
void db_task_printsym(unsigned int addr){
|
|
||||||
print_address(addr, stderr);
|
|
||||||
}
|
|
||||||
|
|
||||||
int print_insn(char *realmemaddr, char *memaddr, FILE *stream, int addrlen)
|
|
||||||
{
|
|
||||||
if (addrlen == 16)
|
|
||||||
return db_disasm((unsigned int) realmemaddr, 0, 1) -
|
|
||||||
((unsigned int) realmemaddr);
|
|
||||||
if (addrlen == 32)
|
|
||||||
return db_disasm((unsigned int) realmemaddr, 0, 0) -
|
|
||||||
((unsigned int) realmemaddr);
|
|
||||||
fprintf(stderr, "invalid address length %d.\n", addrlen);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
void info_reg(){
|
void info_reg(){
|
||||||
|
|
||||||
|
@ -128,18 +93,17 @@ void examine_memory(int addr, int count, char format){
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
if((addr & 0xffff0000) == 0 && dbg_mode == 16)
|
if((addr & 0xffff0000) == 0 && dbg_mode == 16)
|
||||||
addr |= (format == 'i' ? SC_CS : SC_DS) << 16;
|
addr |= (format == 'i' ? SC_CS : SC_DS) << 16;
|
||||||
|
|
||||||
|
|
||||||
if(format != 'i' && count > 1) {
|
if(format != 'i' && count > 1) {
|
||||||
print_address(addr, stderr);
|
print_address(addr, stderr, dbg_mode);
|
||||||
fprintf(stderr,": ");
|
fprintf(stderr,": ");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
switch(format){
|
switch(format){
|
||||||
case 's':
|
case 's':
|
||||||
pnt = (char *) addr;
|
pnt = dbg_mode == 16 ? (char *)PTR_SEG_TO_LIN(addr)
|
||||||
|
: (char *)addr;
|
||||||
if (count == 1) count = 256;
|
if (count == 1) count = 256;
|
||||||
while(*pnt && count) {
|
while(*pnt && count) {
|
||||||
fputc( *pnt++, stderr);
|
fputc( *pnt++, stderr);
|
||||||
|
@ -150,20 +114,22 @@ void examine_memory(int addr, int count, char format){
|
||||||
|
|
||||||
case 'i':
|
case 'i':
|
||||||
for(i=0; i<count; i++) {
|
for(i=0; i<count; i++) {
|
||||||
print_address(addr, stderr);
|
print_address(addr, stderr, dbg_mode);
|
||||||
fprintf(stderr,": ");
|
fprintf(stderr,": ");
|
||||||
addr += print_insn((char *) addr, (char *) addr, stderr, dbg_mode);
|
addr = db_disasm( addr, 0, (dbg_mode == 16) );
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
};
|
};
|
||||||
return;
|
return;
|
||||||
case 'x':
|
case 'x':
|
||||||
dump = (unsigned int *) addr;
|
dump = dbg_mode == 16 ? (unsigned int *)PTR_SEG_TO_LIN(addr)
|
||||||
|
: (unsigned int *)addr;
|
||||||
for(i=0; i<count; i++)
|
for(i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
fprintf(stderr," %8.8x", *dump++);
|
fprintf(stderr," %8.8x", *dump++);
|
||||||
|
addr += 4;
|
||||||
if ((i % 8) == 7) {
|
if ((i % 8) == 7) {
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
print_address((unsigned int) dump, stderr);
|
print_address(addr, stderr, dbg_mode);
|
||||||
fprintf(stderr,": ");
|
fprintf(stderr,": ");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -171,13 +137,15 @@ void examine_memory(int addr, int count, char format){
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'd':
|
case 'd':
|
||||||
dump = (unsigned int *) addr;
|
dump = dbg_mode == 16 ? (unsigned int *)PTR_SEG_TO_LIN(addr)
|
||||||
|
: (unsigned int *)addr;
|
||||||
for(i=0; i<count; i++)
|
for(i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
fprintf(stderr," %d", *dump++);
|
fprintf(stderr," %d", *dump++);
|
||||||
|
addr += 4;
|
||||||
if ((i % 8) == 7) {
|
if ((i % 8) == 7) {
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
print_address((unsigned int) dump, stderr);
|
print_address(addr, stderr, dbg_mode);
|
||||||
fprintf(stderr,": ");
|
fprintf(stderr,": ");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -185,13 +153,15 @@ void examine_memory(int addr, int count, char format){
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'w':
|
case 'w':
|
||||||
wdump = (unsigned short int *) addr;
|
wdump = dbg_mode == 16 ? (unsigned short *)PTR_SEG_TO_LIN(addr)
|
||||||
|
: (unsigned short *)addr;
|
||||||
for(i=0; i<count; i++)
|
for(i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
fprintf(stderr," %x", *wdump++);
|
fprintf(stderr," %x", *wdump++);
|
||||||
|
addr += 2;
|
||||||
if ((i % 10) == 7) {
|
if ((i % 10) == 7) {
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
print_address((unsigned int) wdump, stderr);
|
print_address(addr, stderr, dbg_mode);
|
||||||
fprintf(stderr,": ");
|
fprintf(stderr,": ");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -199,7 +169,8 @@ void examine_memory(int addr, int count, char format){
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'c':
|
case 'c':
|
||||||
pnt = (char *) addr;
|
pnt = dbg_mode == 16 ? (char *)PTR_SEG_TO_LIN(addr)
|
||||||
|
: (char *)addr;
|
||||||
for(i=0; i<count; i++)
|
for(i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
if(*pnt < 0x20) {
|
if(*pnt < 0x20) {
|
||||||
|
@ -207,9 +178,10 @@ void examine_memory(int addr, int count, char format){
|
||||||
pnt++;
|
pnt++;
|
||||||
} else
|
} else
|
||||||
fprintf(stderr," %c", *pnt++);
|
fprintf(stderr," %c", *pnt++);
|
||||||
|
addr++;
|
||||||
if ((i % 32) == 7) {
|
if ((i % 32) == 7) {
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
print_address((unsigned int) pnt, stderr);
|
print_address(addr, stderr, dbg_mode);
|
||||||
fprintf(stderr,": ");
|
fprintf(stderr,": ");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -217,13 +189,15 @@ void examine_memory(int addr, int count, char format){
|
||||||
return;
|
return;
|
||||||
|
|
||||||
case 'b':
|
case 'b':
|
||||||
pnt = (char *) addr;
|
pnt = dbg_mode == 16 ? (char *)PTR_SEG_TO_LIN(addr)
|
||||||
|
: (char *)addr;
|
||||||
for(i=0; i<count; i++)
|
for(i=0; i<count; i++)
|
||||||
{
|
{
|
||||||
fprintf(stderr," %02x", (*pnt++) & 0xff);
|
fprintf(stderr," %02x", (*pnt++) & 0xff);
|
||||||
|
addr++;
|
||||||
if ((i % 32) == 7) {
|
if ((i % 32) == 7) {
|
||||||
fprintf(stderr,"\n");
|
fprintf(stderr,"\n");
|
||||||
print_address((unsigned int) pnt, stderr);
|
print_address(addr, stderr, dbg_mode);
|
||||||
fprintf(stderr,": ");
|
fprintf(stderr,": ");
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
@ -293,26 +267,32 @@ void dbg_bt(){
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
frame = (struct frame *) ((SC_EBP(dbg_mask) & ~1) | (SC_SS << 16));
|
if (dbg_mode == 16)
|
||||||
|
frame = (struct frame *)PTR_SEG_OFF_TO_LIN( SC_SS, SC_BP & ~1 );
|
||||||
|
else
|
||||||
|
frame = (struct frame *)SC_EBP(dbg_mask);
|
||||||
|
|
||||||
fprintf(stderr,"Backtrace:\n");
|
fprintf(stderr,"Backtrace:\n");
|
||||||
fprintf(stderr,"%d ",frameno);
|
|
||||||
print_address(frame->u.win32.saved_ip,stderr);
|
|
||||||
cs = SC_CS;
|
cs = SC_CS;
|
||||||
while((cs & 3) == 3) {
|
while((cs & 3) == 3) {
|
||||||
/* See if in 32 bit mode or not. Assume GDT means 32 bit. */
|
/* See if in 32 bit mode or not. Assume GDT means 32 bit. */
|
||||||
if ((cs & 7) != 7) {
|
if ((cs & 7) != 7) {
|
||||||
void CallTo32();
|
void CallTo32();
|
||||||
fprintf(stderr,"\n%d ",frameno++);
|
fprintf(stderr,"%d ",frameno++);
|
||||||
print_address(frame->u.win32.saved_ip,stderr);
|
print_address(frame->u.win32.saved_ip,stderr,32);
|
||||||
|
fprintf( stderr, "\n" );
|
||||||
if(frame->u.win32.saved_ip<((unsigned long)CallTo32+1000))break;
|
if(frame->u.win32.saved_ip<((unsigned long)CallTo32+1000))break;
|
||||||
frame = (struct frame *) frame->u.win32.saved_bp;
|
frame = (struct frame *) frame->u.win32.saved_bp;
|
||||||
} else {
|
} else {
|
||||||
cs = frame->u.win16.saved_cs;
|
if (frame->u.win16.saved_bp & 1) cs = frame->u.win16.saved_cs;
|
||||||
fprintf(stderr,"%d %4.4x:%4.4x\n", frameno++, cs,
|
fprintf(stderr,"%d %4.4x:%4.4x\n", frameno++, cs,
|
||||||
frame->u.win16.saved_ip);
|
frame->u.win16.saved_ip);
|
||||||
frame = (struct frame *) ((frame->u.win16.saved_bp & ~1) |
|
frame = (struct frame *) PTR_SEG_OFF_TO_LIN( SC_SS, frame->u.win16.saved_bp & ~1);
|
||||||
(SC_SS << 16));
|
if ((cs & 7) != 7) /* switching to 32-bit mode */
|
||||||
|
{
|
||||||
|
extern int IF1632_Saved32_ebp;
|
||||||
|
frame = (struct frame *)IF1632_Saved32_ebp;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
putchar('\n');
|
putchar('\n');
|
||||||
|
|
|
@ -64,6 +64,14 @@
|
||||||
#define SC_EDX(dbg_mask) (regval[RN_EDX] & dbg_mask)
|
#define SC_EDX(dbg_mask) (regval[RN_EDX] & dbg_mask)
|
||||||
#define SC_ECX(dbg_mask) (regval[RN_ECX] & dbg_mask)
|
#define SC_ECX(dbg_mask) (regval[RN_ECX] & dbg_mask)
|
||||||
#define SC_EAX(dbg_mask) (regval[RN_EAX] & dbg_mask)
|
#define SC_EAX(dbg_mask) (regval[RN_EAX] & dbg_mask)
|
||||||
|
#define SC_DI (regval[RN_EDI] & 0xffff)
|
||||||
|
#define SC_SI (regval[RN_ESI] & 0xffff)
|
||||||
|
#define SC_BP (regval[RN_EBP] & 0xffff)
|
||||||
|
#define SC_SP (regval[RN_ESP] & 0xffff)
|
||||||
|
#define SC_BX (regval[RN_EBX] & 0xffff)
|
||||||
|
#define SC_DX (regval[RN_EDX] & 0xffff)
|
||||||
|
#define SC_CX (regval[RN_ECX] & 0xffff)
|
||||||
|
#define SC_AX (regval[RN_EAX] & 0xffff)
|
||||||
#define SC_TRAPNO regval[RN_TRAPNO]
|
#define SC_TRAPNO regval[RN_TRAPNO]
|
||||||
#define SC_ERR regval[RN_ERR]
|
#define SC_ERR regval[RN_ERR]
|
||||||
#define SC_EIP(dbg_mask) (regval[RN_EIP] & dbg_mask)
|
#define SC_EIP(dbg_mask) (regval[RN_EIP] & dbg_mask)
|
||||||
|
|
|
@ -14,6 +14,7 @@ DLLOBJS =
|
||||||
CALLOBJS = call.o
|
CALLOBJS = call.o
|
||||||
DLLOBJS = \
|
DLLOBJS = \
|
||||||
dll_commdlg.o \
|
dll_commdlg.o \
|
||||||
|
dll_compobj.o \
|
||||||
dll_gdi.o \
|
dll_gdi.o \
|
||||||
dll_kernel.o \
|
dll_kernel.o \
|
||||||
dll_keyboard.o \
|
dll_keyboard.o \
|
||||||
|
@ -28,10 +29,10 @@ DLLOBJS = \
|
||||||
dll_olesvr.o \
|
dll_olesvr.o \
|
||||||
dll_shell.o \
|
dll_shell.o \
|
||||||
dll_sound.o \
|
dll_sound.o \
|
||||||
|
dll_storage.o \
|
||||||
dll_stress.o \
|
dll_stress.o \
|
||||||
dll_system.o \
|
dll_system.o \
|
||||||
dll_toolhelp.o \
|
dll_toolhelp.o \
|
||||||
dll_unixlib.o \
|
|
||||||
dll_user.o \
|
dll_user.o \
|
||||||
dll_win87em.o \
|
dll_win87em.o \
|
||||||
dll_winsock.o
|
dll_winsock.o
|
||||||
|
@ -47,6 +48,7 @@ OBJS = $(CALLOBJS) $(DLLOBJS) $(SRCS:.c=.o) $(DLLOBJS:.o=_tab.o) $(DLLOBJS:dll_.
|
||||||
* If you add a new spec file, copy one of these lines
|
* If you add a new spec file, copy one of these lines
|
||||||
*/
|
*/
|
||||||
MakeDllFromSpec(commdlg)
|
MakeDllFromSpec(commdlg)
|
||||||
|
MakeDllFromSpec(compobj)
|
||||||
MakeDllFromSpec(gdi)
|
MakeDllFromSpec(gdi)
|
||||||
MakeDllFromSpec(kernel)
|
MakeDllFromSpec(kernel)
|
||||||
MakeDllFromSpec(keyboard)
|
MakeDllFromSpec(keyboard)
|
||||||
|
@ -61,10 +63,10 @@ MakeDllFromSpec(ole2prox)
|
||||||
MakeDllFromSpec(olecli)
|
MakeDllFromSpec(olecli)
|
||||||
MakeDllFromSpec(olesvr)
|
MakeDllFromSpec(olesvr)
|
||||||
MakeDllFromSpec(sound)
|
MakeDllFromSpec(sound)
|
||||||
|
MakeDllFromSpec(storage)
|
||||||
MakeDllFromSpec(stress)
|
MakeDllFromSpec(stress)
|
||||||
MakeDllFromSpec(system)
|
MakeDllFromSpec(system)
|
||||||
MakeDllFromSpec(toolhelp)
|
MakeDllFromSpec(toolhelp)
|
||||||
MakeDllFromSpec(unixlib)
|
|
||||||
MakeDllFromSpec(user)
|
MakeDllFromSpec(user)
|
||||||
MakeDllFromSpec(win87em)
|
MakeDllFromSpec(win87em)
|
||||||
MakeDllFromSpec(winsock)
|
MakeDllFromSpec(winsock)
|
||||||
|
|
|
@ -321,7 +321,6 @@ A(CallTo32:)
|
||||||
* Save registers. 286 mode does not have fs or gs.
|
* Save registers. 286 mode does not have fs or gs.
|
||||||
*/
|
*/
|
||||||
pushw %ds
|
pushw %ds
|
||||||
pushw %es
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restore segment registers.
|
* Restore segment registers.
|
||||||
|
@ -372,7 +371,6 @@ A(CallTo32:)
|
||||||
popw A(IF1632_Saved16_bp)
|
popw A(IF1632_Saved16_bp)
|
||||||
popw A(IF1632_Saved16_sp)
|
popw A(IF1632_Saved16_sp)
|
||||||
|
|
||||||
popw %es
|
|
||||||
popw %ds
|
popw %ds
|
||||||
popw %bp
|
popw %bp
|
||||||
|
|
||||||
|
@ -423,7 +421,6 @@ A(CallTo32_16:)
|
||||||
* Save registers. 286 mode does not have fs or gs.
|
* Save registers. 286 mode does not have fs or gs.
|
||||||
*/
|
*/
|
||||||
pushw %ds
|
pushw %ds
|
||||||
pushw %es
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Restore segment registers.
|
* Restore segment registers.
|
||||||
|
@ -474,7 +471,6 @@ A(CallTo32_16:)
|
||||||
popw A(IF1632_Saved16_bp)
|
popw A(IF1632_Saved16_bp)
|
||||||
popw A(IF1632_Saved16_sp)
|
popw A(IF1632_Saved16_sp)
|
||||||
|
|
||||||
popw %es
|
|
||||||
popw %ds
|
popw %ds
|
||||||
popw %bp
|
popw %bp
|
||||||
|
|
||||||
|
@ -515,7 +511,6 @@ A(ReturnFromRegisterFunc:)
|
||||||
popw A(IF1632_Saved16_bp)
|
popw A(IF1632_Saved16_bp)
|
||||||
popw A(IF1632_Saved16_sp)
|
popw A(IF1632_Saved16_sp)
|
||||||
|
|
||||||
popw %es
|
|
||||||
popw %ds
|
popw %ds
|
||||||
popw %bp
|
popw %bp
|
||||||
|
|
||||||
|
|
|
@ -6,32 +6,39 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <strings.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
#include "wine.h"
|
#include "wine.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include <setjmp.h>
|
#include <setjmp.h>
|
||||||
|
#include "ldt.h"
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "if1632.h"
|
#include "if1632.h"
|
||||||
|
|
||||||
extern unsigned short IF1632_Saved16_ss;
|
|
||||||
extern unsigned short IF1632_Saved16_bp;
|
|
||||||
extern unsigned short IF1632_Saved16_sp;
|
|
||||||
extern unsigned short IF1632_Saved32_ss;
|
extern unsigned short IF1632_Saved32_ss;
|
||||||
extern unsigned long IF1632_Saved32_ebp;
|
extern unsigned long IF1632_Saved32_ebp;
|
||||||
extern unsigned long IF1632_Saved32_esp;
|
extern unsigned long IF1632_Saved32_esp;
|
||||||
|
|
||||||
extern struct segment_descriptor_s *MakeProcThunks;
|
static WORD ThunkSelector = 0;
|
||||||
|
|
||||||
struct thunk_s
|
struct thunk_s
|
||||||
{
|
{
|
||||||
int used;
|
int used;
|
||||||
unsigned char thunk[10];
|
unsigned char thunk[8];
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#ifdef __ELF__
|
||||||
|
#define FIRST_SELECTOR 2
|
||||||
|
#define IS_16_BIT_ADDRESS(addr) \
|
||||||
|
(((unsigned int)(addr) < 0x8000000) || ((unsigned int)(addr) >= 0x8400000))
|
||||||
|
#else
|
||||||
|
#define FIRST_SELECTOR 8
|
||||||
|
#define IS_16_BIT_ADDRESS(addr) \
|
||||||
|
((unsigned int)(addr) >= (((FIRST_SELECTOR << __AHSHIFT) | 7) << 16))
|
||||||
|
#endif
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* PushOn16
|
* PushOn16
|
||||||
|
@ -39,8 +46,7 @@ struct thunk_s
|
||||||
static void
|
static void
|
||||||
PushOn16(int size, unsigned int value)
|
PushOn16(int size, unsigned int value)
|
||||||
{
|
{
|
||||||
char *p = (char *) (((unsigned int)IF1632_Saved16_ss << 16) +
|
char *p = PTR_SEG_OFF_TO_LIN( IF1632_Saved16_ss, IF1632_Saved16_sp );
|
||||||
IF1632_Saved16_sp);
|
|
||||||
if (size)
|
if (size)
|
||||||
{
|
{
|
||||||
unsigned long *lp = (unsigned long *) p - 1;
|
unsigned long *lp = (unsigned long *) p - 1;
|
||||||
|
@ -67,7 +73,8 @@ CallBack16(void *func, int n_args, ...)
|
||||||
va_list ap;
|
va_list ap;
|
||||||
int i;
|
int i;
|
||||||
int arg_type, arg_value;
|
int arg_type, arg_value;
|
||||||
|
WORD ds = CURRENT_DS;
|
||||||
|
|
||||||
va_start(ap, n_args);
|
va_start(ap, n_args);
|
||||||
|
|
||||||
for (i = 0; i < n_args; i++)
|
for (i = 0; i < n_args; i++)
|
||||||
|
@ -79,36 +86,50 @@ CallBack16(void *func, int n_args, ...)
|
||||||
|
|
||||||
va_end(ap);
|
va_end(ap);
|
||||||
|
|
||||||
return CallTo16((unsigned int) func, pStack16Frame->ds );
|
return CallTo16((unsigned int) func, ds );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* CALLBACK_MakeProcInstance
|
* MakeProcInstance
|
||||||
*/
|
*/
|
||||||
void *
|
FARPROC MakeProcInstance( FARPROC func, WORD instance )
|
||||||
CALLBACK_MakeProcInstance(void *func, int instance)
|
|
||||||
{
|
{
|
||||||
|
char *thunks;
|
||||||
struct thunk_s *tp;
|
struct thunk_s *tp;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
tp = (struct thunk_s *) MakeProcThunks->base_addr;
|
if (!ThunkSelector)
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
/* Allocate a segment for thunks */
|
||||||
|
ThunkSelector = AllocSelector( 0 );
|
||||||
|
entry.base = (unsigned long) malloc( 0x10000 );
|
||||||
|
entry.limit = 0xffff;
|
||||||
|
entry.seg_32bit = 0;
|
||||||
|
entry.limit_in_pages = 0;
|
||||||
|
entry.type = SEGMENT_CODE;
|
||||||
|
entry.read_only = 0;
|
||||||
|
memset( (char *)entry.base, 0, 0x10000 );
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(ThunkSelector), &entry );
|
||||||
|
}
|
||||||
|
|
||||||
|
thunks = (char *)PTR_SEG_OFF_TO_LIN( ThunkSelector, 0 );
|
||||||
|
tp = (struct thunk_s *) thunks;
|
||||||
for (i = 0; i < 0x10000 / sizeof(*tp); i++, tp++)
|
for (i = 0; i < 0x10000 / sizeof(*tp); i++, tp++)
|
||||||
if (!tp->used)
|
if (!tp->used)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
if (tp->used)
|
if (tp->used) return (FARPROC)0;
|
||||||
return (void *) 0;
|
|
||||||
|
|
||||||
tp->thunk[0] = 0xb8;
|
tp->thunk[0] = 0xb8; /* movw instance, %ax */
|
||||||
tp->thunk[1] = (unsigned char) instance;
|
tp->thunk[1] = (unsigned char) instance;
|
||||||
tp->thunk[2] = (unsigned char) (instance >> 8);
|
tp->thunk[2] = (unsigned char) (instance >> 8);
|
||||||
tp->thunk[3] = 0x8e;
|
tp->thunk[3] = 0xea; /* ljmp func */
|
||||||
tp->thunk[4] = 0xd8;
|
*(LONG *)&tp->thunk[4] = (LONG)func;
|
||||||
tp->thunk[5] = 0xea;
|
|
||||||
memcpy(&tp->thunk[6], &func, 4);
|
|
||||||
tp->used = 1;
|
tp->used = 1;
|
||||||
|
|
||||||
return tp->thunk;
|
return (FARPROC)MAKELONG( (char *)tp->thunk - thunks, ThunkSelector );
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
@ -119,7 +140,7 @@ void FreeProcInstance(FARPROC func)
|
||||||
struct thunk_s *tp;
|
struct thunk_s *tp;
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
tp = (struct thunk_s *) MakeProcThunks->base_addr;
|
tp = (struct thunk_s *) PTR_SEG_OFF_TO_LIN( ThunkSelector, 0 );
|
||||||
for (i = 0; i < 0x10000 / sizeof(*tp); i++, tp++)
|
for (i = 0; i < 0x10000 / sizeof(*tp); i++, tp++)
|
||||||
{
|
{
|
||||||
if ((void *) tp->thunk == (void *) func)
|
if ((void *) tp->thunk == (void *) func)
|
||||||
|
@ -183,13 +204,14 @@ LONG CallWindowProc( WNDPROC func, HWND hwnd, WORD message,
|
||||||
}
|
}
|
||||||
else if (IS_16_BIT_ADDRESS(func))
|
else if (IS_16_BIT_ADDRESS(func))
|
||||||
{
|
{
|
||||||
|
WORD ds = CURRENT_DS;
|
||||||
dprintf_callback(stddeb, "CallWindowProc // 16bit func=%08x ds=%04x!\n",
|
dprintf_callback(stddeb, "CallWindowProc // 16bit func=%08x ds=%04x!\n",
|
||||||
(unsigned int) func, pStack16Frame->ds );
|
(unsigned int) func, ds );
|
||||||
PushOn16( CALLBACK_SIZE_WORD, hwnd );
|
PushOn16( CALLBACK_SIZE_WORD, hwnd );
|
||||||
PushOn16( CALLBACK_SIZE_WORD, message );
|
PushOn16( CALLBACK_SIZE_WORD, message );
|
||||||
PushOn16( CALLBACK_SIZE_WORD, wParam );
|
PushOn16( CALLBACK_SIZE_WORD, wParam );
|
||||||
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
||||||
return CallTo16((unsigned int) func, pStack16Frame->ds );
|
return CallTo16((unsigned int) func, ds );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -204,12 +226,13 @@ LONG CallWindowProc( WNDPROC func, HWND hwnd, WORD message,
|
||||||
*/
|
*/
|
||||||
void CallLineDDAProc(FARPROC func, short xPos, short yPos, long lParam)
|
void CallLineDDAProc(FARPROC func, short xPos, short yPos, long lParam)
|
||||||
{
|
{
|
||||||
|
WORD ds = CURRENT_DS;
|
||||||
if (IS_16_BIT_ADDRESS(func))
|
if (IS_16_BIT_ADDRESS(func))
|
||||||
{
|
{
|
||||||
PushOn16( CALLBACK_SIZE_WORD, xPos );
|
PushOn16( CALLBACK_SIZE_WORD, xPos );
|
||||||
PushOn16( CALLBACK_SIZE_WORD, yPos );
|
PushOn16( CALLBACK_SIZE_WORD, yPos );
|
||||||
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
||||||
CallTo16((unsigned int) func, pStack16Frame->ds );
|
CallTo16((unsigned int) func, ds );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -222,12 +245,13 @@ void CallLineDDAProc(FARPROC func, short xPos, short yPos, long lParam)
|
||||||
*/
|
*/
|
||||||
DWORD CallHookProc( HOOKPROC func, short code, WPARAM wParam, LPARAM lParam )
|
DWORD CallHookProc( HOOKPROC func, short code, WPARAM wParam, LPARAM lParam )
|
||||||
{
|
{
|
||||||
|
WORD ds = CURRENT_DS;
|
||||||
if (IS_16_BIT_ADDRESS(func))
|
if (IS_16_BIT_ADDRESS(func))
|
||||||
{
|
{
|
||||||
PushOn16( CALLBACK_SIZE_WORD, code );
|
PushOn16( CALLBACK_SIZE_WORD, code );
|
||||||
PushOn16( CALLBACK_SIZE_WORD, wParam );
|
PushOn16( CALLBACK_SIZE_WORD, wParam );
|
||||||
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
||||||
return CallTo16((unsigned int) func, pStack16Frame->ds );
|
return CallTo16((unsigned int) func, ds );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -240,12 +264,13 @@ DWORD CallHookProc( HOOKPROC func, short code, WPARAM wParam, LPARAM lParam )
|
||||||
*/
|
*/
|
||||||
BOOL CallGrayStringProc(FARPROC func, HDC hdc, LPARAM lParam, INT cch )
|
BOOL CallGrayStringProc(FARPROC func, HDC hdc, LPARAM lParam, INT cch )
|
||||||
{
|
{
|
||||||
|
WORD ds = CURRENT_DS;
|
||||||
if (IS_16_BIT_ADDRESS(func))
|
if (IS_16_BIT_ADDRESS(func))
|
||||||
{
|
{
|
||||||
PushOn16( CALLBACK_SIZE_WORD, hdc );
|
PushOn16( CALLBACK_SIZE_WORD, hdc );
|
||||||
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
PushOn16( CALLBACK_SIZE_LONG, lParam );
|
||||||
PushOn16( CALLBACK_SIZE_WORD, cch );
|
PushOn16( CALLBACK_SIZE_WORD, cch );
|
||||||
return CallTo16((unsigned int) func, pStack16Frame->ds );
|
return CallTo16((unsigned int) func, ds );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -1,31 +1,31 @@
|
||||||
# $Id: commdlg.spec,v 1.3 1994/20/08 04:04:21 root Exp root $
|
# $Id: commdlg.spec,v 1.3 1994/20/08 04:04:21 root Exp root $
|
||||||
#
|
#
|
||||||
name commdlg
|
name commdlg
|
||||||
id 15
|
id 14
|
||||||
length 31
|
length 31
|
||||||
|
|
||||||
1 pascal GETOPENFILENAME(ptr) GetOpenFileName(1)
|
1 pascal GETOPENFILENAME(ptr) GetOpenFileName
|
||||||
2 pascal GETSAVEFILENAME(ptr) GetSaveFileName(1)
|
2 pascal GETSAVEFILENAME(ptr) GetSaveFileName
|
||||||
5 pascal CHOOSECOLOR(ptr) ChooseColor(1)
|
5 pascal CHOOSECOLOR(ptr) ChooseColor
|
||||||
6 pascal FILEOPENDLGPROC(word word word long) FileOpenDlgProc(1 2 3 4)
|
6 pascal FILEOPENDLGPROC(word word word long) FileOpenDlgProc
|
||||||
7 pascal FILESAVEDLGPROC(word word word long) FileSaveDlgProc(1 2 3 4)
|
7 pascal FILESAVEDLGPROC(word word word long) FileSaveDlgProc
|
||||||
8 pascal COLORDLGPROC(word word word long) ColorDlgProc(1 2 3 4)
|
8 pascal COLORDLGPROC(word word word long) ColorDlgProc
|
||||||
# 9 pascal LOADALTERBITMAP exported, shared data
|
# 9 pascal LOADALTERBITMAP exported, shared data
|
||||||
11 pascal FINDTEXT(ptr) FindText(1)
|
11 pascal FINDTEXT(ptr) FindText
|
||||||
12 pascal REPLACETEXT(ptr) ReplaceText(1)
|
12 pascal REPLACETEXT(ptr) ReplaceText
|
||||||
13 pascal FINDTEXTDLGPROC(word word word long) FindTextDlgProc(1 2 3 4)
|
13 pascal FINDTEXTDLGPROC(word word word long) FindTextDlgProc
|
||||||
14 pascal REPLACETEXTDLGPROC(word word word long) ReplaceTextDlgProc(1 2 3 4)
|
14 pascal REPLACETEXTDLGPROC(word word word long) ReplaceTextDlgProc
|
||||||
# 15 pascal CHOOSEFONT exported, shared data
|
# 15 pascal CHOOSEFONT exported, shared data
|
||||||
# 16 pascal FORMATCHARDLGPROC exported, shared data
|
# 16 pascal FORMATCHARDLGPROC exported, shared data
|
||||||
# 18 pascal FONTSTYLEENUMPROC exported, shared data
|
# 18 pascal FONTSTYLEENUMPROC exported, shared data
|
||||||
# 19 pascal FONTFAMILYENUMPROC exported, shared data
|
# 19 pascal FONTFAMILYENUMPROC exported, shared data
|
||||||
20 pascal PRINTDLG(ptr) PrintDlg(1)
|
20 pascal PRINTDLG(ptr) PrintDlg
|
||||||
21 pascal PRINTDLGPROC(word word word long) PrintDlgProc(1 2 3 4)
|
21 pascal PRINTDLGPROC(word word word long) PrintDlgProc
|
||||||
22 pascal PRINTSETUPDLGPROC(word word word long) PrintSetupDlgProc(1 2 3 4)
|
22 pascal PRINTSETUPDLGPROC(word word word long) PrintSetupDlgProc
|
||||||
# 23 pascal EDITINTEGERONLY exported, shared data
|
# 23 pascal EDITINTEGERONLY exported, shared data
|
||||||
# 25 pascal WANTARROWS exported, shared data
|
# 25 pascal WANTARROWS exported, shared data
|
||||||
26 pascal COMMDLGEXTENDEDERROR() CommDlgExtendError()
|
26 pascal COMMDLGEXTENDEDERROR() CommDlgExtendError
|
||||||
27 pascal GETFILETITLE(ptr ptr word) GetFileTitle(1 2 3)
|
27 pascal GETFILETITLE(ptr ptr word) GetFileTitle
|
||||||
# 28 pascal WEP exported, shared data
|
# 28 pascal WEP exported, shared data
|
||||||
# 29 pascal DWLBSUBCLASS exported, shared data
|
# 29 pascal DWLBSUBCLASS exported, shared data
|
||||||
# 30 pascal DWUPARROWHACK exported, shared data
|
# 30 pascal DWUPARROWHACK exported, shared data
|
||||||
|
|
146
if1632/compobj.spec
Normal file
146
if1632/compobj.spec
Normal file
|
@ -0,0 +1,146 @@
|
||||||
|
name compobj
|
||||||
|
id 22
|
||||||
|
length 163
|
||||||
|
|
||||||
|
#1 COBUILDVERSION
|
||||||
|
#2 COINITIALIZE
|
||||||
|
#3 COUNINITIALIZE
|
||||||
|
#4 COGETMALLOC
|
||||||
|
#5 COREGISTERCLASSOBJECT
|
||||||
|
#6 COREVOKECLASSOBJECT
|
||||||
|
#7 COGETCLASSOBJECT
|
||||||
|
#8 COMARSHALINTERFACE
|
||||||
|
#9 COUNMARSHALINTERFACE
|
||||||
|
#10 COLOADLIBRARY
|
||||||
|
#11 COFREELIBRARY
|
||||||
|
#12 COFREEALLLIBRARIES
|
||||||
|
#13 COCREATEINSTANCE
|
||||||
|
#14 STRINGFROMIID
|
||||||
|
#15 CODISCONNECTOBJECT
|
||||||
|
#16 CORELEASEMARSHALDATA
|
||||||
|
#17 COFREEUNUSEDLIBRARIES
|
||||||
|
#18 ISEQUALGUID
|
||||||
|
#19 STRINGFROMCLSID
|
||||||
|
#20 CLSIDFROMSTRING
|
||||||
|
#21 ISVALIDPTRIN
|
||||||
|
#22 ISVALIDPTROUT
|
||||||
|
#23 ISVALIDINTERFACE
|
||||||
|
#24 ISVALIDIID
|
||||||
|
#25 RESULTFROMSCODE
|
||||||
|
#26 GETSCODE
|
||||||
|
#27 COREGISTERMESSAGEFILTER
|
||||||
|
#28 COISHANDLERCONNECTED
|
||||||
|
#29 WEP
|
||||||
|
#30 COFILETIMETODOSDATETIME
|
||||||
|
#31 CODOSDATETIMETOFILETIME
|
||||||
|
#32 COMARSHALHRESULT
|
||||||
|
#33 COUNMARSHALHRESULT
|
||||||
|
#34 COGETCURRENTPROCESS
|
||||||
|
#35 ___EXPORTEDSTUB
|
||||||
|
#36 COISOLE1CLASS
|
||||||
|
#37 _GUID_NULL
|
||||||
|
#38 _IID_IUNKNOWN
|
||||||
|
#39 _IID_ICLASSFACTORY
|
||||||
|
#40 _IID_IMALLOC
|
||||||
|
#41 _IID_IMARSHAL
|
||||||
|
#42 _IID_IRPCCHANNEL
|
||||||
|
#43 _IID_IRPCSTUB
|
||||||
|
#44 _IID_ISTUBMANAGER
|
||||||
|
#45 _IID_IRPCPROXY
|
||||||
|
#46 _IID_IPROXYMANAGER
|
||||||
|
#47 _IID_IPSFACTORY
|
||||||
|
#48 _IID_ILOCKBYTES
|
||||||
|
#49 _IID_ISTORAGE
|
||||||
|
#50 _IID_ISTREAM
|
||||||
|
#51 _IID_IENUMSTATSTG
|
||||||
|
#52 _IID_IBINDCTX
|
||||||
|
#53 _IID_IMONIKER
|
||||||
|
#54 _IID_IRUNNINGOBJECTTABLE
|
||||||
|
#55 _IID_IINTERNALMONIKER
|
||||||
|
#56 _IID_IROOTSTORAGE
|
||||||
|
#57 _IID_IDFRESERVED1
|
||||||
|
#58 _IID_IDFRESERVED2
|
||||||
|
#59 _IID_IDFRESERVED3
|
||||||
|
#60 _IID_IMESSAGEFILTER
|
||||||
|
#61 CLSIDFROMPROGID
|
||||||
|
#62 PROGIDFROMCLSID
|
||||||
|
#63 COLOCKOBJECTEXTERNAL
|
||||||
|
#64 _CLSID_STDMARSHAL
|
||||||
|
#65 COGETTREATASCLASS
|
||||||
|
#66 COTREATASCLASS
|
||||||
|
#67 COGETSTANDARDMARSHAL
|
||||||
|
#68 PROPAGATERESULT
|
||||||
|
#69 IIDFROMSTRING
|
||||||
|
#70 _IID_ISTDMARSHALINFO
|
||||||
|
#71 COCREATESTANDARDMALLOC
|
||||||
|
#72 _IID_IEXTERNALCONNECTION
|
||||||
|
#73 COCREATEGUID
|
||||||
|
#75 FNASSERT
|
||||||
|
#76 STRINGFROMGUID2
|
||||||
|
#77 COGETCLASSEXT
|
||||||
|
#78 OLE1CLASSFROMCLSID2
|
||||||
|
#79 CLSIDFROMOLE1CLASS
|
||||||
|
#80 COOPENCLASSKEY
|
||||||
|
#81 GUIDFROMSTRING
|
||||||
|
#82 COFILETIMENOW
|
||||||
|
#83 REMALLOCOID
|
||||||
|
#84 REMFREEOID
|
||||||
|
#85 REMCREATEREMOTEHANDLER
|
||||||
|
#86 REMCONNECTTOOBJECT
|
||||||
|
#87 REMGETINFOFORCID
|
||||||
|
#88 LRPCCALL
|
||||||
|
#89 LRPCDISPATCH
|
||||||
|
#90 LRPCREGISTERMONITOR
|
||||||
|
#91 LRPCREVOKEMONITOR
|
||||||
|
#92 LRPCGETTHREADWINDOW
|
||||||
|
#93 TIMERCALLBACKPROC
|
||||||
|
#94 LOOKUPETASK
|
||||||
|
#95 SETETASK
|
||||||
|
#96 LRPCFREEMONITORDATA
|
||||||
|
#97 REMLOOKUPSHUNK
|
||||||
|
#100 ??0CARRAYFVALUE@@REC@KI@Z
|
||||||
|
#101 ??1CARRAYFVALUE@@REC@XZ
|
||||||
|
#102 ?ASSERTVALID@CARRAYFVALUE@@RFCXXZ
|
||||||
|
#103 ?FREEEXTRA@CARRAYFVALUE@@RECXXZ
|
||||||
|
#104 ?_GETAT@CARRAYFVALUE@@RFCPEXH@Z
|
||||||
|
#105 ?GETSIZE@CARRAYFVALUE@@RFCHXZ
|
||||||
|
#108 ?INDEXOF@CARRAYFVALUE@@RECHPEXII@Z
|
||||||
|
#109 ?INSERTAT@CARRAYFVALUE@@RECHHPEXH@Z
|
||||||
|
#111 ?REMOVEAT@CARRAYFVALUE@@RECXHH@Z
|
||||||
|
#112 ?SETAT@CARRAYFVALUE@@RECXHPEX@Z
|
||||||
|
#113 ?SETATGROW@CARRAYFVALUE@@RECHHPEX@Z
|
||||||
|
#114 ?SETSIZE@CARRAYFVALUE@@RECHHH@Z
|
||||||
|
#120 ?GETASSOCAT@CMAPKEYTOVALUE@@BFCPEUCASSOC@1@PEXIAEI@Z
|
||||||
|
#121 ?SETASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z
|
||||||
|
#122 ??1CMAPKEYTOVALUE@@REC@XZ
|
||||||
|
#123 ?GETASSOCKEYPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEXPEI@Z
|
||||||
|
#124 ?NEWASSOC@CMAPKEYTOVALUE@@BECPEUCASSOC@1@IPEXI0@Z
|
||||||
|
#125 ?SIZEASSOC@CMAPKEYTOVALUE@@BFCIXZ
|
||||||
|
#126 ?FREEASSOC@CMAPKEYTOVALUE@@BECXPEUCASSOC@1@@Z
|
||||||
|
#127 ?GETSTARTPOSITION@CMAPKEYTOVALUE@@RFCPEXXZ
|
||||||
|
#128 ?GETNEXTASSOC@CMAPKEYTOVALUE@@RFCXPEPEXPEXPEI1@Z
|
||||||
|
#129 ?COMPAREASSOCKEY@CMAPKEYTOVALUE@@BFCHPEUCASSOC@1@PEXI@Z
|
||||||
|
#130 ?REMOVEHKEY@CMAPKEYTOVALUE@@RECHK@Z
|
||||||
|
#131 ?GETHKEY@CMAPKEYTOVALUE@@RFCKPEXI@Z
|
||||||
|
#132 ?GETCOUNT@CMAPKEYTOVALUE@@RFCHXZ
|
||||||
|
#133 ?LOOKUP@CMAPKEYTOVALUE@@RFCHPEXI0@Z
|
||||||
|
#134 ?GETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z
|
||||||
|
#135 ?REMOVEKEY@CMAPKEYTOVALUE@@RECHPEXI@Z
|
||||||
|
#136 ?REMOVEALL@CMAPKEYTOVALUE@@RECXXZ
|
||||||
|
#138 ?FREEASSOCKEY@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@@Z
|
||||||
|
#139 ?SETAT@CMAPKEYTOVALUE@@RECHPEXI0@Z
|
||||||
|
#140 ?LOOKUPHKEY@CMAPKEYTOVALUE@@RFCHKPEX@Z
|
||||||
|
#141 ?ASSERTVALID@CMAPKEYTOVALUE@@RFCXXZ
|
||||||
|
#142 ?SETASSOCVALUE@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEX@Z
|
||||||
|
#143 ?SETATHKEY@CMAPKEYTOVALUE@@RECHKPEX@Z
|
||||||
|
#144 ??0CMAPKEYTOVALUE@@REC@KIIHP7CIPEXI@ZI@Z
|
||||||
|
#145 ?INITHASHTABLE@CMAPKEYTOVALUE@@BECHXZ
|
||||||
|
#146 ?GETASSOCVALUEPTR@CMAPKEYTOVALUE@@BFCXPEUCASSOC@1@PEPEX@Z
|
||||||
|
#147 ?LOOKUPADD@CMAPKEYTOVALUE@@RFCHPEXI0@Z
|
||||||
|
#148 MKVDEFAULTHASHKEY
|
||||||
|
#150 COMEMCTXOF
|
||||||
|
#151 COMEMALLOC
|
||||||
|
#152 COMEMFREE
|
||||||
|
#160 CORUNMODALLOOP
|
||||||
|
#161 COHANDLEINCOMINGCALL
|
||||||
|
#162 COSETACKSTATE
|
383
if1632/gdi.spec
383
if1632/gdi.spec
|
@ -4,167 +4,159 @@ name gdi
|
||||||
id 3
|
id 3
|
||||||
length 490
|
length 490
|
||||||
|
|
||||||
1 pascal SetBkColor(word long) SetBkColor(1 2)
|
1 pascal SetBkColor(word long) SetBkColor
|
||||||
2 pascal16 SetBkMode(word word) SetBkMode(1 2)
|
2 pascal16 SetBkMode(word word) SetBkMode
|
||||||
3 pascal16 SetMapMode(word word) SetMapMode(1 2)
|
3 pascal16 SetMapMode(word word) SetMapMode
|
||||||
4 pascal16 SetROP2(word word) SetROP2(1 2)
|
4 pascal16 SetROP2(word word) SetROP2
|
||||||
5 pascal16 SetRelAbs(word word) SetRelAbs(1 2)
|
5 pascal16 SetRelAbs(word word) SetRelAbs
|
||||||
6 pascal16 SetPolyFillMode(word word) SetPolyFillMode(1 2)
|
6 pascal16 SetPolyFillMode(word word) SetPolyFillMode
|
||||||
7 pascal16 SetStretchBltMode(word word) SetStretchBltMode(1 2)
|
7 pascal16 SetStretchBltMode(word word) SetStretchBltMode
|
||||||
8 pascal16 SetTextCharacterExtra(word s_word) SetTextCharacterExtra(1 2)
|
8 pascal16 SetTextCharacterExtra(word s_word) SetTextCharacterExtra
|
||||||
9 pascal SetTextColor(word long) SetTextColor(1 2)
|
9 pascal SetTextColor(word long) SetTextColor
|
||||||
10 pascal16 SetTextJustification(word s_word s_word) SetTextJustification(1 2 3)
|
10 pascal16 SetTextJustification(word s_word s_word) SetTextJustification
|
||||||
11 pascal SetWindowOrg(word s_word s_word) SetWindowOrg(1 2 3)
|
11 pascal SetWindowOrg(word s_word s_word) SetWindowOrg
|
||||||
12 pascal SetWindowExt(word s_word s_word) SetWindowExt(1 2 3)
|
12 pascal SetWindowExt(word s_word s_word) SetWindowExt
|
||||||
13 pascal SetViewportOrg(word s_word s_word) SetViewportOrg(1 2 3)
|
13 pascal SetViewportOrg(word s_word s_word) SetViewportOrg
|
||||||
14 pascal SetViewportExt(word s_word s_word) SetViewportExt(1 2 3)
|
14 pascal SetViewportExt(word s_word s_word) SetViewportExt
|
||||||
15 pascal OffsetWindowOrg(word s_word s_word) OffsetWindowOrg(1 2 3)
|
15 pascal OffsetWindowOrg(word s_word s_word) OffsetWindowOrg
|
||||||
16 pascal ScaleWindowExt(word s_word s_word s_word s_word)
|
16 pascal ScaleWindowExt(word s_word s_word s_word s_word) ScaleWindowExt
|
||||||
ScaleWindowExt(1 2 3 4 5)
|
17 pascal OffsetViewportOrg(word s_word s_word) OffsetViewportOrg
|
||||||
17 pascal OffsetViewportOrg(word s_word s_word) OffsetViewportOrg(1 2 3)
|
18 pascal ScaleViewportExt(word s_word s_word s_word s_word) ScaleViewportExt
|
||||||
18 pascal ScaleViewportExt(word s_word s_word s_word s_word)
|
19 pascal16 LineTo(word s_word s_word) LineTo
|
||||||
ScaleViewportExt(1 2 3 4 5)
|
20 pascal MoveTo(word s_word s_word) MoveTo
|
||||||
19 pascal16 LineTo(word s_word s_word) LineTo(1 2 3)
|
21 pascal16 ExcludeClipRect(word s_word s_word s_word s_word) ExcludeClipRect
|
||||||
20 pascal MoveTo(word s_word s_word) MoveTo(1 2 3)
|
|
||||||
21 pascal16 ExcludeClipRect(word s_word s_word s_word s_word)
|
|
||||||
ExcludeClipRect(1 2 3 4 5)
|
|
||||||
22 pascal16 IntersectClipRect(word s_word s_word s_word s_word)
|
22 pascal16 IntersectClipRect(word s_word s_word s_word s_word)
|
||||||
IntersectClipRect(1 2 3 4 5)
|
IntersectClipRect
|
||||||
23 pascal16 Arc(word s_word s_word s_word s_word s_word s_word s_word s_word)
|
23 pascal16 Arc(word s_word s_word s_word s_word s_word s_word s_word s_word)
|
||||||
Arc(1 2 3 4 5 6 7 8 9)
|
Arc
|
||||||
24 pascal16 Ellipse(word s_word s_word s_word s_word) Ellipse(1 2 3 4 5)
|
24 pascal16 Ellipse(word s_word s_word s_word s_word) Ellipse
|
||||||
25 pascal16 FloodFill(word s_word s_word long) FloodFill(1 2 3 4)
|
25 pascal16 FloodFill(word s_word s_word long) FloodFill
|
||||||
26 pascal16 Pie(word s_word s_word s_word s_word s_word s_word s_word s_word)
|
26 pascal16 Pie(word s_word s_word s_word s_word s_word s_word s_word s_word)
|
||||||
Pie(1 2 3 4 5 6 7 8 9)
|
Pie
|
||||||
27 pascal16 Rectangle(word s_word s_word s_word s_word) Rectangle(1 2 3 4 5)
|
27 pascal16 Rectangle(word s_word s_word s_word s_word) Rectangle
|
||||||
28 pascal16 RoundRect(word s_word s_word s_word s_word s_word s_word)
|
28 pascal16 RoundRect(word s_word s_word s_word s_word s_word s_word)
|
||||||
RoundRect(1 2 3 4 5 6 7)
|
RoundRect
|
||||||
29 pascal16 PatBlt(word s_word s_word s_word s_word long) PatBlt(1 2 3 4 5 6)
|
29 pascal16 PatBlt(word s_word s_word s_word s_word long) PatBlt
|
||||||
30 pascal16 SaveDC(word) SaveDC(1)
|
30 pascal16 SaveDC(word) SaveDC
|
||||||
31 pascal SetPixel(word s_word s_word long) SetPixel(1 2 3 4)
|
31 pascal SetPixel(word s_word s_word long) SetPixel
|
||||||
32 pascal16 OffsetClipRgn(word s_word s_word) OffsetClipRgn(1 2 3)
|
32 pascal16 OffsetClipRgn(word s_word s_word) OffsetClipRgn
|
||||||
33 pascal16 TextOut(word s_word s_word ptr word) TextOut(1 2 3 4 5)
|
33 pascal16 TextOut(word s_word s_word ptr word) TextOut
|
||||||
34 pascal16 BitBlt( word s_word s_word s_word s_word word s_word s_word long)
|
34 pascal16 BitBlt( word s_word s_word s_word s_word word s_word s_word long)
|
||||||
BitBlt(1 2 3 4 5 6 7 8 9)
|
BitBlt
|
||||||
35 pascal16 StretchBlt( word s_word s_word s_word s_word word s_word s_word s_word s_word long)
|
35 pascal16 StretchBlt(word s_word s_word s_word s_word word s_word s_word
|
||||||
StretchBlt(1 2 3 4 5 6 7 8 9 10 11)
|
s_word s_word long) StretchBlt
|
||||||
36 pascal16 Polygon (word ptr word) Polygon (1 2 3)
|
36 pascal16 Polygon (word ptr word) Polygon
|
||||||
37 pascal16 Polyline (word ptr word) Polyline (1 2 3)
|
37 pascal16 Polyline (word ptr word) Polyline
|
||||||
38 pascal Escape(word word word ptr ptr) Escape(1 2 3 4 5)
|
38 pascal Escape(word word word ptr ptr) Escape
|
||||||
39 pascal16 RestoreDC(word s_word) RestoreDC(1 2)
|
39 pascal16 RestoreDC(word s_word) RestoreDC
|
||||||
40 pascal16 FillRgn(word word word) FillRgn(1 2 3)
|
40 pascal16 FillRgn(word word word) FillRgn
|
||||||
#41 pascal FrameRgn
|
#41 pascal FrameRgn
|
||||||
42 pascal16 InvertRgn(word word) InvertRgn(1 2)
|
42 pascal16 InvertRgn(word word) InvertRgn
|
||||||
43 pascal16 PaintRgn(word word) PaintRgn(1 2)
|
43 pascal16 PaintRgn(word word) PaintRgn
|
||||||
44 pascal16 SelectClipRgn(word word) SelectClipRgn(1 2)
|
44 pascal16 SelectClipRgn(word word) SelectClipRgn
|
||||||
45 pascal16 SelectObject(word word) SelectObject(1 2)
|
45 pascal16 SelectObject(word word) SelectObject
|
||||||
#46 pascal __GP?
|
#46 pascal __GP?
|
||||||
47 pascal16 CombineRgn(word word word word) CombineRgn(1 2 3 4)
|
47 pascal16 CombineRgn(word word word word) CombineRgn
|
||||||
48 pascal16 CreateBitmap(word word word word ptr) CreateBitmap(1 2 3 4 5)
|
48 pascal16 CreateBitmap(word word word word ptr) CreateBitmap
|
||||||
49 pascal16 CreateBitmapIndirect(ptr) CreateBitmapIndirect(1)
|
49 pascal16 CreateBitmapIndirect(ptr) CreateBitmapIndirect
|
||||||
50 pascal16 CreateBrushIndirect(ptr) CreateBrushIndirect(1)
|
50 pascal16 CreateBrushIndirect(ptr) CreateBrushIndirect
|
||||||
51 pascal16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap(1 2 3)
|
51 pascal16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap
|
||||||
52 pascal16 CreateCompatibleDC(word) CreateCompatibleDC(1)
|
52 pascal16 CreateCompatibleDC(word) CreateCompatibleDC
|
||||||
53 pascal16 CreateDC(ptr ptr ptr ptr) CreateDC(1 2 3 4)
|
53 pascal16 CreateDC(ptr ptr ptr ptr) CreateDC
|
||||||
54 pascal16 CreateEllipticRgn(s_word s_word s_word s_word)
|
54 pascal16 CreateEllipticRgn(s_word s_word s_word s_word) CreateEllipticRgn
|
||||||
CreateEllipticRgn(1 2 3 4)
|
55 pascal16 CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect
|
||||||
55 pascal16 CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect(1)
|
56 pascal16 CreateFont(s_word s_word s_word s_word s_word word word word
|
||||||
56 pascal16 CreateFont(s_word s_word s_word s_word s_word word word word
|
word word word word word ptr) CreateFont
|
||||||
word word word word word ptr)
|
57 pascal16 CreateFontIndirect(ptr) CreateFontIndirect
|
||||||
CreateFont(1 2 3 4 5 6 7 8 9 10 11 12 13 14)
|
58 pascal16 CreateHatchBrush(word long) CreateHatchBrush
|
||||||
57 pascal16 CreateFontIndirect(ptr) CreateFontIndirect(1)
|
60 pascal16 CreatePatternBrush(word) CreatePatternBrush
|
||||||
58 pascal16 CreateHatchBrush(word long) CreateHatchBrush(1 2)
|
61 pascal16 CreatePen(s_word s_word long) CreatePen
|
||||||
60 pascal16 CreatePatternBrush(word) CreatePatternBrush(1)
|
62 pascal16 CreatePenIndirect(ptr) CreatePenIndirect
|
||||||
61 pascal16 CreatePen(s_word s_word long) CreatePen(1 2 3)
|
63 pascal16 CreatePolygonRgn(ptr word word) CreatePolygonRgn
|
||||||
62 pascal16 CreatePenIndirect(ptr) CreatePenIndirect(1)
|
64 pascal16 CreateRectRgn(s_word s_word s_word s_word) CreateRectRgn
|
||||||
63 pascal16 CreatePolygonRgn(ptr word word) CreatePolygonRgn(1 2 3)
|
65 pascal16 CreateRectRgnIndirect(ptr) CreateRectRgnIndirect
|
||||||
64 pascal16 CreateRectRgn(s_word s_word s_word s_word) CreateRectRgn(1 2 3 4)
|
66 pascal16 CreateSolidBrush(long) CreateSolidBrush
|
||||||
65 pascal16 CreateRectRgnIndirect(ptr) CreateRectRgnIndirect(1)
|
67 pascal16 DPtoLP(word ptr s_word) DPtoLP
|
||||||
66 pascal16 CreateSolidBrush(long) CreateSolidBrush(1)
|
68 pascal16 DeleteDC(word) DeleteDC
|
||||||
67 pascal16 DPtoLP(word ptr s_word) DPtoLP(1 2 3)
|
69 pascal16 DeleteObject(word) DeleteObject
|
||||||
68 pascal16 DeleteDC(word) DeleteDC(1)
|
70 pascal16 EnumFonts(word ptr segptr long) EnumFonts
|
||||||
69 pascal16 DeleteObject(word) DeleteObject(1)
|
71 pascal16 EnumObjects(word word ptr long) EnumObjects
|
||||||
70 pascal16 EnumFonts(word ptr ptr ptr) EnumFonts(1 2 3 4)
|
72 pascal16 EqualRgn(word word) EqualRgn
|
||||||
71 pascal16 EnumObjects(word word ptr ptr) EnumObjects(1 2 3 4)
|
73 pascal16 ExcludeVisRect(word s_word s_word s_word s_word) ExcludeVisRect
|
||||||
72 pascal16 EqualRgn(word word) EqualRgn(1 2)
|
74 pascal GetBitmapBits(word long ptr) GetBitmapBits
|
||||||
73 pascal16 ExcludeVisRect(word s_word s_word s_word s_word)
|
75 pascal GetBkColor(word) GetBkColor
|
||||||
ExcludeVisRect(1 2 3 4 5)
|
76 pascal16 GetBkMode(word) GetBkMode
|
||||||
74 pascal GetBitmapBits(word long ptr) GetBitmapBits(1 2 3)
|
77 pascal16 GetClipBox(word ptr) GetClipBox
|
||||||
75 pascal GetBkColor(word) GetBkColor(1)
|
78 pascal GetCurrentPosition(word) GetCurrentPosition
|
||||||
76 pascal16 GetBkMode(word) GetBkMode(1)
|
79 pascal GetDCOrg(word) GetDCOrg
|
||||||
77 pascal16 GetClipBox(word ptr) GetClipBox(1 2)
|
80 pascal16 GetDeviceCaps(word s_word) GetDeviceCaps
|
||||||
78 pascal GetCurrentPosition(word) GetCurrentPosition(1)
|
81 pascal16 GetMapMode(word) GetMapMode
|
||||||
79 pascal GetDCOrg(word) GetDCOrg(1)
|
82 pascal16 GetObject(word word ptr) GetObject
|
||||||
80 pascal16 GetDeviceCaps(word s_word) GetDeviceCaps(1 2)
|
83 pascal GetPixel(word s_word s_word) GetPixel
|
||||||
81 pascal16 GetMapMode(word) GetMapMode(1)
|
84 pascal16 GetPolyFillMode(word) GetPolyFillMode
|
||||||
82 pascal16 GetObject(word word ptr) GetObject(1 2 3)
|
85 pascal16 GetROP2(word) GetROP2
|
||||||
83 pascal GetPixel(word s_word s_word) GetPixel(1 2 3)
|
86 pascal16 GetRelAbs(word) GetRelAbs
|
||||||
84 pascal16 GetPolyFillMode(word) GetPolyFillMode(1)
|
87 pascal16 GetStockObject(word) GetStockObject
|
||||||
85 pascal16 GetROP2(word) GetROP2(1)
|
88 pascal16 GetStretchBltMode(word) GetStretchBltMode
|
||||||
86 pascal16 GetRelAbs(word) GetRelAbs(1)
|
89 pascal16 GetTextCharacterExtra(word) GetTextCharacterExtra
|
||||||
87 pascal16 GetStockObject(word) GetStockObject(1)
|
90 pascal GetTextColor(word) GetTextColor
|
||||||
88 pascal16 GetStretchBltMode(word) GetStretchBltMode(1)
|
91 pascal GetTextExtent(word ptr s_word) GetTextExtent
|
||||||
89 pascal16 GetTextCharacterExtra(word) GetTextCharacterExtra(1)
|
92 pascal16 GetTextFace(word s_word ptr) GetTextFace
|
||||||
90 pascal GetTextColor(word) GetTextColor(1)
|
93 pascal16 GetTextMetrics(word ptr) GetTextMetrics
|
||||||
91 pascal GetTextExtent(word ptr s_word) GetTextExtent(1 2 3)
|
94 pascal GetViewportExt(word) GetViewportExt
|
||||||
92 pascal16 GetTextFace(word s_word ptr) GetTextFace(1 2 3)
|
95 pascal GetViewportOrg(word) GetViewportOrg
|
||||||
93 pascal16 GetTextMetrics(word ptr) GetTextMetrics(1 2)
|
96 pascal GetWindowExt(word) GetWindowExt
|
||||||
94 pascal GetViewportExt(word) GetViewportExt(1)
|
97 pascal GetWindowOrg(word) GetWindowOrg
|
||||||
95 pascal GetViewportOrg(word) GetViewportOrg(1)
|
|
||||||
96 pascal GetWindowExt(word) GetWindowExt(1)
|
|
||||||
97 pascal GetWindowOrg(word) GetWindowOrg(1)
|
|
||||||
98 pascal16 IntersectVisRect(word s_word s_word s_word s_word)
|
98 pascal16 IntersectVisRect(word s_word s_word s_word s_word)
|
||||||
IntersectVisRect(1 2 3 4 5)
|
IntersectVisRect
|
||||||
99 pascal16 LPtoDP(word ptr s_word) LPtoDP(1 2 3)
|
99 pascal16 LPtoDP(word ptr s_word) LPtoDP
|
||||||
100 pascal16 LineDDA(s_word s_word s_word s_word ptr long)
|
100 pascal16 LineDDA(s_word s_word s_word s_word segptr long) LineDDA
|
||||||
LineDDA(1 2 3 4 5 6)
|
101 pascal16 OffsetRgn(word s_word s_word) OffsetRgn
|
||||||
101 pascal16 OffsetRgn(word s_word s_word) OffsetRgn(1 2 3)
|
102 pascal16 OffsetVisRgn(word s_word s_word) OffsetVisRgn
|
||||||
102 pascal16 OffsetVisRgn(word s_word s_word) OffsetVisRgn(1 2 3)
|
103 pascal16 PtVisible(word s_word s_word) PtVisible
|
||||||
103 pascal16 PtVisible(word s_word s_word) PtVisible(1 2 3)
|
104 pascal16 RectVisibleOld(word ptr) RectVisible
|
||||||
104 pascal16 RectVisibleOld(word ptr) RectVisible(1 2)
|
105 pascal16 SelectVisRgn(word word) SelectVisRgn
|
||||||
105 pascal16 SelectVisRgn(word word) SelectVisRgn(1 2)
|
106 pascal SetBitmapBits(word long ptr) SetBitmapBits
|
||||||
106 pascal SetBitmapBits(word long ptr) SetBitmapBits(1 2 3)
|
117 pascal SetDCOrg(word s_word s_word) SetDCOrg
|
||||||
117 pascal SetDCOrg(word s_word s_word) SetDCOrg(1 2 3)
|
119 pascal16 AddFontResource(ptr) AddFontResource
|
||||||
119 pascal16 AddFontResource(ptr) AddFontResource(1)
|
|
||||||
#121 pascal Death
|
#121 pascal Death
|
||||||
#122 pascal ReSurRection
|
#122 pascal ReSurRection
|
||||||
123 pascal16 PlayMetaFile(word word) PlayMetaFile(1 2)
|
123 pascal16 PlayMetaFile(word word) PlayMetaFile
|
||||||
124 pascal16 GetMetaFile(ptr) GetMetaFile(1)
|
124 pascal16 GetMetaFile(ptr) GetMetaFile
|
||||||
125 pascal16 CreateMetaFile(ptr) CreateMetaFile(1)
|
125 pascal16 CreateMetaFile(ptr) CreateMetaFile
|
||||||
126 pascal16 CloseMetaFile(word) CloseMetaFile(1)
|
126 pascal16 CloseMetaFile(word) CloseMetaFile
|
||||||
127 pascal16 DeleteMetaFile(word) DeleteMetaFile(1)
|
127 pascal16 DeleteMetaFile(word) DeleteMetaFile
|
||||||
128 pascal MulDiv(s_word s_word s_word) MulDiv(1 2 3)
|
128 pascal MulDiv(s_word s_word s_word) MulDiv
|
||||||
129 pascal16 SaveVisRgn(word) SaveVisRgn(1)
|
129 pascal16 SaveVisRgn(word) SaveVisRgn
|
||||||
130 pascal16 RestoreVisRgn(word) RestoreVisRgn(1)
|
130 pascal16 RestoreVisRgn(word) RestoreVisRgn
|
||||||
131 pascal16 InquireVisRgn(word) InquireVisRgn(1)
|
131 pascal16 InquireVisRgn(word) InquireVisRgn
|
||||||
132 pascal16 SetEnvironment(ptr ptr word) SetEnvironment(1 2 3)
|
132 pascal16 SetEnvironment(ptr ptr word) SetEnvironment
|
||||||
133 pascal16 GetEnvironment(ptr ptr word) GetEnvironment(1 2 3)
|
133 pascal16 GetEnvironment(ptr ptr word) GetEnvironment
|
||||||
134 pascal16 GetRgnBox(word ptr) GetRgnBox(1 2)
|
134 pascal16 GetRgnBox(word ptr) GetRgnBox
|
||||||
#135 pascal ScanLr
|
#135 pascal ScanLr
|
||||||
136 pascal16 RemoveFontResource(ptr) RemoveFontResource(1)
|
136 pascal16 RemoveFontResource(ptr) RemoveFontResource
|
||||||
148 pascal SetBrushOrg(word s_word s_word) SetBrushOrg(1 2 3)
|
148 pascal SetBrushOrg(word s_word s_word) SetBrushOrg
|
||||||
149 pascal GetBrushOrg(word) GetBrushOrg(1)
|
149 pascal GetBrushOrg(word) GetBrushOrg
|
||||||
150 pascal16 UnrealizeObject(word) UnrealizeObject(1)
|
150 pascal16 UnrealizeObject(word) UnrealizeObject
|
||||||
#151 pascal CopyMetaFile
|
#151 pascal CopyMetaFile
|
||||||
153 pascal16 CreateIC(ptr ptr ptr ptr) CreateIC(1 2 3 4)
|
153 pascal16 CreateIC(ptr ptr ptr ptr) CreateIC
|
||||||
154 pascal GetNearestColor(word long) GetNearestColor(1 2)
|
154 pascal GetNearestColor(word long) GetNearestColor
|
||||||
#155 pascal QueryAbort
|
#155 pascal QueryAbort
|
||||||
156 pascal16 CreateDiscardableBitmap(word word word)
|
156 pascal16 CreateDiscardableBitmap(word word word) CreateDiscardableBitmap
|
||||||
CreateDiscardableBitmap(1 2 3)
|
|
||||||
#159 pascal GetMetaFileBits
|
#159 pascal GetMetaFileBits
|
||||||
#160 pascal SetMetaFileBits
|
#160 pascal SetMetaFileBits
|
||||||
161 pascal16 PtInRegion(word s_word s_word) PtInRegion(1 2 3)
|
161 pascal16 PtInRegion(word s_word s_word) PtInRegion
|
||||||
162 pascal GetBitmapDimension(word) GetBitmapDimension(1)
|
162 pascal GetBitmapDimension(word) GetBitmapDimension
|
||||||
163 pascal SetBitmapDimension(word s_word s_word) SetBitmapDimension(1 2 3)
|
163 pascal SetBitmapDimension(word s_word s_word) SetBitmapDimension
|
||||||
#169 pascal IsDCDirty
|
#169 pascal IsDCDirty
|
||||||
#170 pascal SetDCStatus
|
#170 pascal SetDCStatus
|
||||||
172 pascal16 SetRectRgn(word s_word s_word s_word s_word) SetRectRgn(1 2 3 4 5)
|
172 pascal16 SetRectRgn(word s_word s_word s_word s_word) SetRectRgn
|
||||||
173 pascal16 GetClipRgn(word) GetClipRgn(1)
|
173 pascal16 GetClipRgn(word) GetClipRgn
|
||||||
#175 pascal EnumMetaFile
|
#175 pascal EnumMetaFile
|
||||||
176 pascal16 PlayMetaFileRecord(word ptr ptr word) PlayMetaFileRecord(1 2 3 4)
|
176 pascal16 PlayMetaFileRecord(word ptr ptr word) PlayMetaFileRecord
|
||||||
179 pascal16 GetDCState(word) GetDCState(1)
|
179 pascal16 GetDCState(word) GetDCState
|
||||||
180 pascal16 SetDCState(word word) SetDCState(1 2)
|
180 pascal16 SetDCState(word word) SetDCState
|
||||||
181 pascal16 RectInRegionOld(word ptr) RectInRegion(1 2)
|
181 pascal16 RectInRegionOld(word ptr) RectInRegion
|
||||||
#190 pascal SetDCHook
|
#190 pascal SetDCHook
|
||||||
#191 pascal GetDCHook
|
#191 pascal GetDCHook
|
||||||
#192 pascal SetHookFlags
|
#192 pascal SetHookFlags
|
||||||
|
@ -204,7 +196,7 @@ length 490
|
||||||
#246 pascal STARTSPOOLPAGE
|
#246 pascal STARTSPOOLPAGE
|
||||||
#247 pascal ENDSPOOLPAGE
|
#247 pascal ENDSPOOLPAGE
|
||||||
#248 pascal QUERYJOB
|
#248 pascal QUERYJOB
|
||||||
250 pascal16 Copy(ptr ptr word) Copy(1 2 3)
|
250 pascal16 Copy(ptr ptr word) Copy
|
||||||
#253 pascal DeleteSpoolPage
|
#253 pascal DeleteSpoolPage
|
||||||
#254 pascal SpoolFile
|
#254 pascal SpoolFile
|
||||||
#300 pascal ENGINEENUMERATEFONT
|
#300 pascal ENGINEENUMERATEFONT
|
||||||
|
@ -222,32 +214,31 @@ length 490
|
||||||
#312 pascal CONVERTOUTLINEFONTFILE
|
#312 pascal CONVERTOUTLINEFONTFILE
|
||||||
#313 pascal GETRASTERIZERCAPS
|
#313 pascal GETRASTERIZERCAPS
|
||||||
#314 pascal ENGINEEXTTEXTOUT
|
#314 pascal ENGINEEXTTEXTOUT
|
||||||
330 pascal16 EnumFontFamilies(word ptr ptr ptr) EnumFontFamilies(1 2 3 4)
|
330 pascal16 EnumFontFamilies(word ptr segptr long) EnumFontFamilies
|
||||||
#332 pascal GETKERNINGPAIRS
|
#332 pascal GETKERNINGPAIRS
|
||||||
345 pascal16 GetTextAlign(word) GetTextAlign(1)
|
345 pascal16 GetTextAlign(word) GetTextAlign
|
||||||
346 pascal16 SetTextAlign(word word) SetTextAlign(1 2)
|
346 pascal16 SetTextAlign(word word) SetTextAlign
|
||||||
348 pascal16 Chord(word s_word s_word s_word s_word s_word s_word s_word s_word)
|
348 pascal16 Chord(word s_word s_word s_word s_word s_word s_word
|
||||||
Chord(1 2 3 4 5 6 7 8 9)
|
s_word s_word) Chord
|
||||||
349 pascal SetMapperFlags(word word) SetMapperFlags(1 2)
|
349 pascal SetMapperFlags(word word) SetMapperFlags
|
||||||
350 pascal16 GetCharWidth(word word word ptr) GetCharWidth(1 2 3 4)
|
350 pascal16 GetCharWidth(word word word ptr) GetCharWidth
|
||||||
351 pascal16 ExtTextOut(word s_word s_word word ptr ptr s_word ptr)
|
351 pascal16 ExtTextOut(word s_word s_word word ptr ptr s_word ptr) ExtTextOut
|
||||||
ExtTextOut(1 2 3 4 5 6 7 8)
|
|
||||||
#352 pascal GETPHYSICALFONTHANDLE
|
#352 pascal GETPHYSICALFONTHANDLE
|
||||||
#353 pascal GETASPECTRATIOFILTER
|
#353 pascal GETASPECTRATIOFILTER
|
||||||
#354 pascal SHRINKGDIHEAP
|
#354 pascal SHRINKGDIHEAP
|
||||||
360 pascal16 CreatePalette(ptr) CreatePalette(1)
|
360 pascal16 CreatePalette(ptr) CreatePalette
|
||||||
361 pascal16 GDISelectPalette(word word) GDISelectPalette(1 2)
|
361 pascal16 GDISelectPalette(word word) GDISelectPalette
|
||||||
362 pascal16 GDIRealizePalette(word) GDIRealizePalette(1)
|
362 pascal16 GDIRealizePalette(word) GDIRealizePalette
|
||||||
363 pascal16 GetPaletteEntries(word word word ptr) GetPaletteEntries(1 2 3 4)
|
363 pascal16 GetPaletteEntries(word word word ptr) GetPaletteEntries
|
||||||
364 pascal16 SetPaletteEntries(word word word ptr) SetPaletteEntries(1 2 3 4)
|
364 pascal16 SetPaletteEntries(word word word ptr) SetPaletteEntries
|
||||||
365 pascal16 RealizeDefaultPalette(word) RealizeDefaultPalette(1)
|
365 pascal16 RealizeDefaultPalette(word) RealizeDefaultPalette
|
||||||
#366 pascal UPDATECOLORS
|
#366 pascal UPDATECOLORS
|
||||||
#367 pascal ANIMATEPALETTE
|
#367 pascal ANIMATEPALETTE
|
||||||
#368 pascal RESIZEPALETTE
|
#368 pascal RESIZEPALETTE
|
||||||
370 pascal16 GetNearestPaletteIndex(word long) GetNearestPaletteIndex(1 2)
|
370 pascal16 GetNearestPaletteIndex(word long) GetNearestPaletteIndex
|
||||||
372 pascal16 ExtFloodFill(word s_word s_word long word) ExtFloodFill(1 2 3 4)
|
372 pascal16 ExtFloodFill(word s_word s_word long word) ExtFloodFill
|
||||||
375 pascal16 GetSystemPaletteEntries(word word word ptr)
|
375 pascal16 GetSystemPaletteEntries(word word word ptr)
|
||||||
GetSystemPaletteEntries(1 2 3 4)
|
GetSystemPaletteEntries
|
||||||
#376 pascal RESETDC
|
#376 pascal RESETDC
|
||||||
#377 pascal STARTDOC
|
#377 pascal STARTDOC
|
||||||
#378 pascal ENDDOC
|
#378 pascal ENDDOC
|
||||||
|
@ -262,53 +253,47 @@ length 490
|
||||||
#407 pascal CREATEUSERBITMAP
|
#407 pascal CREATEUSERBITMAP
|
||||||
#409 pascal CREATEUSERDISCARDABLEBITMAP
|
#409 pascal CREATEUSERDISCARDABLEBITMAP
|
||||||
#410 pascal ISVALIDMETAFILE
|
#410 pascal ISVALIDMETAFILE
|
||||||
411 pascal16 GetCurLogFont(word) GetCurLogFont(1)
|
411 pascal16 GetCurLogFont(word) GetCurLogFont
|
||||||
#412 pascal ISDCCURRENTPALETTE
|
#412 pascal ISDCCURRENTPALETTE
|
||||||
#439 pascal STRETCHDIBITS
|
#439 pascal STRETCHDIBITS
|
||||||
440 pascal16 SetDIBits(word word word word ptr ptr word) SetDIBits(1 2 3 4 5 6 7)
|
440 pascal16 SetDIBits(word word word word ptr ptr word) SetDIBits
|
||||||
441 pascal16 GetDIBits(word word word word ptr ptr word) GetDIBits(1 2 3 4 5 6 7)
|
441 pascal16 GetDIBits(word word word word ptr ptr word) GetDIBits
|
||||||
442 pascal16 CreateDIBitmap(word ptr long ptr ptr word)
|
442 pascal16 CreateDIBitmap(word ptr long ptr ptr word) CreateDIBitmap
|
||||||
CreateDIBitmap(1 2 3 4 5 6)
|
443 pascal16 SetDIBitsToDevice(word s_word s_word word word word word
|
||||||
443 pascal16 SetDIBitsToDevice(word s_word s_word word word word word word
|
word word ptr ptr word) SetDIBitsToDevice
|
||||||
word ptr ptr word)
|
|
||||||
SetDIBitsToDevice(1 2 3 4 5 6 7 8 9 10 11 12)
|
|
||||||
444 pascal16 CreateRoundRectRgn(s_word s_word s_word s_word s_word s_word)
|
444 pascal16 CreateRoundRectRgn(s_word s_word s_word s_word s_word s_word)
|
||||||
CreateRoundRectRgn(1 2 3 4 5 6)
|
CreateRoundRectRgn
|
||||||
445 pascal16 CreateDIBPatternBrush(word word) CreateDIBPatternBrush(1 2)
|
445 pascal16 CreateDIBPatternBrush(word word) CreateDIBPatternBrush
|
||||||
#449 pascal DEVICECOLORMATCH
|
#449 pascal DEVICECOLORMATCH
|
||||||
450 pascal16 PolyPolygon(word ptr ptr word) PolyPolygon(1 2 3 4)
|
450 pascal16 PolyPolygon(word ptr ptr word) PolyPolygon
|
||||||
451 pascal16 CreatePolyPolygonRgn(ptr ptr word word)
|
451 pascal16 CreatePolyPolygonRgn(ptr ptr word word) CreatePolyPolygonRgn
|
||||||
CreatePolyPolygonRgn(1 2 3 4)
|
|
||||||
#452 pascal GDISEEGDIDO
|
#452 pascal GDISEEGDIDO
|
||||||
#460 pascal GDITASKTERMINATION
|
#460 pascal GDITASKTERMINATION
|
||||||
461 return SetObjectOwner 4 0
|
461 return SetObjectOwner 4 0
|
||||||
462 pascal16 IsGDIObject(word) IsGDIObject(1)
|
462 pascal16 IsGDIObject(word) IsGDIObject
|
||||||
#463 pascal MAKEOBJECTPRIVATE
|
#463 pascal MAKEOBJECTPRIVATE
|
||||||
#464 pascal FIXUPBOGUSPUBLISHERMETAFILE
|
#464 pascal FIXUPBOGUSPUBLISHERMETAFILE
|
||||||
465 pascal16 RectVisible(word ptr) RectVisible(1 2)
|
465 pascal16 RectVisible(word ptr) RectVisible
|
||||||
466 pascal16 RectInRegion(word ptr) RectInRegion(1 2)
|
466 pascal16 RectInRegion(word ptr) RectInRegion
|
||||||
#467 pascal UNICODETOANSI
|
#467 pascal UNICODETOANSI
|
||||||
468 pascal16 GetBitmapDimensionEx(word ptr) GetBitmapDimensionEx(1 2)
|
468 pascal16 GetBitmapDimensionEx(word ptr) GetBitmapDimensionEx
|
||||||
469 pascal16 GetBrushOrgEx(word ptr) GetBrushOrgEx(1 2)
|
469 pascal16 GetBrushOrgEx(word ptr) GetBrushOrgEx
|
||||||
470 pascal16 GetCurrentPositionEx(word ptr) GetCurrentPositionEx(1 2)
|
470 pascal16 GetCurrentPositionEx(word ptr) GetCurrentPositionEx
|
||||||
471 pascal16 GetTextExtentPoint(word ptr s_word ptr) GetTextExtentPoint(1 2 3 4)
|
471 pascal16 GetTextExtentPoint(word ptr s_word ptr) GetTextExtentPoint
|
||||||
472 pascal16 GetViewportExtEx(word ptr) GetViewportExtEx(1 2)
|
472 pascal16 GetViewportExtEx(word ptr) GetViewportExtEx
|
||||||
473 pascal16 GetViewportOrgEx(word ptr) GetViewportOrgEx(1 2)
|
473 pascal16 GetViewportOrgEx(word ptr) GetViewportOrgEx
|
||||||
474 pascal16 GetWindowExtEx(word ptr) GetWindowExtEx(1 2)
|
474 pascal16 GetWindowExtEx(word ptr) GetWindowExtEx
|
||||||
475 pascal16 GetWindowOrgEx(word ptr) GetWindowOrgEx(1 2)
|
475 pascal16 GetWindowOrgEx(word ptr) GetWindowOrgEx
|
||||||
476 pascal16 OffsetViewportOrgEx(word s_word s_word ptr)
|
476 pascal16 OffsetViewportOrgEx(word s_word s_word ptr) OffsetViewportOrgEx
|
||||||
OffsetViewportOrgEx(1 2 3 4)
|
477 pascal16 OffsetWindowOrgEx(word s_word s_word ptr) OffsetWindowOrgEx
|
||||||
477 pascal16 OffsetWindowOrgEx(word s_word s_word ptr)
|
478 pascal16 SetBitmapDimensionEx(word s_word s_word ptr) SetBitmapDimensionEx
|
||||||
OffsetWindowOrgEx(1 2 3 4)
|
479 pascal16 SetViewportExtEx(word s_word s_word ptr) SetViewportExtEx
|
||||||
478 pascal16 SetBitmapDimensionEx(word s_word s_word ptr)
|
480 pascal16 SetViewportOrgEx(word s_word s_word ptr) SetViewportOrgEx
|
||||||
SetBitmapDimensionEx(1 2 3 4)
|
481 pascal16 SetWindowExtEx(word s_word s_word ptr) SetWindowExtEx
|
||||||
479 pascal16 SetViewportExtEx(word s_word s_word ptr) SetViewportExtEx(1 2 3 4)
|
482 pascal16 SetWindowOrgEx(word s_word s_word ptr) SetWindowOrgEx
|
||||||
480 pascal16 SetViewportOrgEx(word s_word s_word ptr) SetViewportOrgEx(1 2 3 4)
|
483 pascal16 MoveToEx(word s_word s_word ptr) MoveToEx
|
||||||
481 pascal16 SetWindowExtEx(word s_word s_word ptr) SetWindowExtEx(1 2 3 4)
|
|
||||||
482 pascal16 SetWindowOrgEx(word s_word s_word ptr) SetWindowOrgEx(1 2 3 4)
|
|
||||||
483 pascal16 MoveToEx(word s_word s_word ptr) MoveToEx(1 2 3 4)
|
|
||||||
484 pascal16 ScaleViewportExtEx(word s_word s_word s_word s_word ptr)
|
484 pascal16 ScaleViewportExtEx(word s_word s_word s_word s_word ptr)
|
||||||
ScaleViewportExtEx(1 2 3 4 5 6)
|
ScaleViewportExtEx
|
||||||
485 pascal16 ScaleWindowExtEx(word s_word s_word s_word s_word ptr)
|
485 pascal16 ScaleWindowExtEx(word s_word s_word s_word s_word ptr)
|
||||||
ScaleWindowExtEx(1 2 3 4 5 6)
|
ScaleWindowExtEx
|
||||||
#486 pascal GETASPECTRATIOFILEREX
|
#486 pascal GETASPECTRATIOFILEREX
|
||||||
|
|
|
@ -6,151 +6,145 @@ length 415
|
||||||
|
|
||||||
#1 FATALEXIT
|
#1 FATALEXIT
|
||||||
#2 EXITKERNEL
|
#2 EXITKERNEL
|
||||||
3 pascal GetVersion() GetVersion()
|
3 pascal GetVersion() GetVersion
|
||||||
4 pascal16 LocalInit(word word word) WIN16_LocalInit(1 2 3)
|
4 pascal16 LocalInit(word word word) LocalInit
|
||||||
5 pascal16 LocalAlloc(word word) WIN16_LocalAlloc(1 2)
|
5 pascal16 LocalAlloc(word word) LocalAlloc
|
||||||
6 pascal16 LocalReAlloc(word word word) WIN16_LocalReAlloc(1 2 3)
|
6 pascal16 LocalReAlloc(word word word) LocalReAlloc
|
||||||
7 pascal16 LocalFree(word) WIN16_LocalFree(1)
|
7 pascal16 LocalFree(word) LocalFree
|
||||||
8 pascal LocalLock(word) WIN16_LocalLock(1)
|
8 pascal16 LocalLock(word) LocalLock
|
||||||
9 pascal16 LocalUnlock(word) WIN16_LocalUnlock(1)
|
9 pascal16 LocalUnlock(word) LocalUnlock
|
||||||
10 pascal LocalSize(word) WIN16_LocalSize(1)
|
10 pascal16 LocalSize(word) LocalSize
|
||||||
11 pascal16 LocalHandle(word) ReturnArg(1)
|
11 pascal16 LocalHandle(word) LocalHandle
|
||||||
12 pascal16 LocalFlags(word) WIN16_LocalFlags(1)
|
12 pascal16 LocalFlags(word) LocalFlags
|
||||||
13 pascal16 LocalCompact(word) WIN16_LocalCompact(1)
|
13 pascal16 LocalCompact(word) LocalCompact
|
||||||
14 return LocalNotify 4 0
|
14 pascal16 LocalNotify(long) LocalNotify
|
||||||
15 pascal16 GlobalAlloc(word long) WIN16_GlobalAlloc(1 2)
|
15 pascal16 GlobalAlloc(word long) GlobalAlloc
|
||||||
16 pascal16 GlobalReAlloc(word long word) GlobalReAlloc(1 2 3)
|
16 pascal16 GlobalReAlloc(word long word) GlobalReAlloc
|
||||||
17 pascal16 GlobalFree(word) GlobalFree(1)
|
17 pascal16 GlobalFree(word) GlobalFree
|
||||||
18 pascal GlobalLock(word) GlobalLock(1)
|
18 pascal GlobalLock(word) WIN16_GlobalLock
|
||||||
19 pascal16 GlobalUnlock(word) GlobalUnlock(1)
|
19 pascal16 GlobalUnlock(word) GlobalUnlock
|
||||||
20 pascal GlobalSize(word) GlobalSize(1)
|
20 pascal GlobalSize(word) GlobalSize
|
||||||
21 pascal GlobalHandle(word) GlobalHandle(1)
|
21 pascal GlobalHandle(word) GlobalHandle
|
||||||
22 pascal16 GlobalFlags(word) GlobalFlags(1)
|
22 pascal16 GlobalFlags(word) GlobalFlags
|
||||||
23 pascal16 LockSegment(s_word) KERNEL_LockSegment(1)
|
23 pascal16 LockSegment(word) LockSegment
|
||||||
24 pascal UnlockSegment(s_word) KERNEL_UnlockSegment(1)
|
24 pascal16 UnlockSegment(word) UnlockSegment
|
||||||
25 pascal GlobalCompact(long) GlobalCompact(1)
|
25 pascal GlobalCompact(long) GlobalCompact
|
||||||
#26 GLOBALFREEALL
|
#26 GLOBALFREEALL
|
||||||
#28 GLOBALMASTERHANDLE
|
#28 GLOBALMASTERHANDLE
|
||||||
29 return Yield 0 0
|
29 return Yield 0 0
|
||||||
30 pascal WaitEvent(word) KERNEL_WaitEvent(1)
|
30 pascal WaitEvent(word) KERNEL_WaitEvent
|
||||||
#31 POSTEVENT
|
#31 POSTEVENT
|
||||||
#32 SETPRIORITY
|
#32 SETPRIORITY
|
||||||
#33 LOCKCURRENTTASK
|
#33 LOCKCURRENTTASK
|
||||||
34 pascal SetTaskQueue(word word) SetTaskQueue(1 2)
|
34 pascal SetTaskQueue(word word) SetTaskQueue
|
||||||
35 pascal GetTaskQueue(word) GetTaskQueue(1)
|
35 pascal GetTaskQueue(word) GetTaskQueue
|
||||||
36 pascal16 GetCurrentTask() GetCurrentTask()
|
36 pascal16 GetCurrentTask() GetCurrentTask
|
||||||
37 pascal16 GetCurrentPDB() GetCurrentPDB()
|
37 pascal16 GetCurrentPDB() GetCurrentPDB
|
||||||
#38 SETTASKSIGNALPROC
|
#38 SETTASKSIGNALPROC
|
||||||
#41 ENABLEDOS
|
41 return EnableDos 0 0
|
||||||
#42 DISABLEDOS
|
42 return DisableDos 0 0
|
||||||
45 pascal16 LoadModule(ptr ptr) LoadModule(1 2)
|
45 pascal16 LoadModule(ptr ptr) LoadModule
|
||||||
46 pascal16 FreeModule(word) FreeLibrary(1)
|
46 pascal16 FreeModule(word) FreeLibrary
|
||||||
47 pascal16 GetModuleHandle(ptr) GetModuleHandle(1)
|
47 pascal16 GetModuleHandle(ptr) GetModuleHandle
|
||||||
48 pascal16 GetModuleUsage(word) GetModuleUsage(1)
|
48 pascal16 GetModuleUsage(word) GetModuleUsage
|
||||||
49 pascal16 GetModuleFileName(word ptr s_word) GetModuleFileName(1 2 3)
|
49 pascal16 GetModuleFileName(word ptr s_word) GetModuleFileName
|
||||||
50 pascal GetProcAddress(word ptr) GetProcAddress(1 2)
|
50 pascal GetProcAddress(word ptr) GetProcAddress
|
||||||
51 pascal MakeProcInstance(ptr word) CALLBACK_MakeProcInstance(1 2)
|
51 pascal MakeProcInstance(segptr word) MakeProcInstance
|
||||||
52 pascal FreeProcInstance(ptr) FreeProcInstance(1)
|
52 pascal FreeProcInstance(segptr) FreeProcInstance
|
||||||
#53 CALLPROCINSTANCE
|
#53 CALLPROCINSTANCE
|
||||||
#54 pascal16 GETINSTANCEDATA
|
#54 pascal16 GETINSTANCEDATA
|
||||||
55 pascal16 Catch(ptr) Catch (1)
|
55 pascal16 Catch(ptr) Catch
|
||||||
56 pascal Throw(ptr word) Throw(1 2)
|
56 pascal Throw(ptr word) Throw
|
||||||
57 pascal16 GetProfileInt(ptr ptr word) GetProfileInt(1 2 3)
|
57 pascal16 GetProfileInt(ptr ptr word) GetProfileInt
|
||||||
58 pascal16 GetProfileString(ptr ptr ptr ptr word) GetProfileString(1 2 3 4 5)
|
58 pascal16 GetProfileString(ptr ptr ptr ptr word) GetProfileString
|
||||||
59 pascal16 WriteProfileString(ptr ptr ptr) WriteProfileString(1 2 3)
|
59 pascal16 WriteProfileString(ptr ptr ptr) WriteProfileString
|
||||||
60 pascal16 FindResource(word ptr ptr) FindResource(1 2 3)
|
60 pascal16 FindResource(word segptr segptr) FindResource
|
||||||
61 pascal16 LoadResource(word word) LoadResource(1 2)
|
61 pascal16 LoadResource(word word) LoadResource
|
||||||
62 pascal LockResource(word) LockResource(1)
|
62 pascal LockResource(word) WIN16_LockResource
|
||||||
63 pascal16 FreeResource(word) FreeResource(1)
|
63 pascal16 FreeResource(word) FreeResource
|
||||||
64 pascal16 AccessResource(word word) AccessResource(1 2)
|
64 pascal16 AccessResource(word word) AccessResource
|
||||||
65 pascal SizeofResource(word word) SizeofResource(1 2)
|
65 pascal SizeofResource(word word) SizeofResource
|
||||||
66 pascal16 AllocResource(word word long) AllocResource(1 2 3)
|
66 pascal16 AllocResource(word word long) AllocResource
|
||||||
#67 SETRESOURCEHANDLER
|
#67 SETRESOURCEHANDLER
|
||||||
68 pascal16 InitAtomTable(word) InitAtomTable(1)
|
68 pascal16 InitAtomTable(word) InitAtomTable
|
||||||
69 pascal16 FindAtom(ptr) FindAtom(1)
|
69 pascal16 FindAtom(ptr) FindAtom
|
||||||
70 pascal16 AddAtom(ptr) AddAtom(1)
|
70 pascal16 AddAtom(ptr) AddAtom
|
||||||
71 pascal16 DeleteAtom(word) DeleteAtom(1)
|
71 pascal16 DeleteAtom(word) DeleteAtom
|
||||||
72 pascal16 GetAtomName(word ptr word) GetAtomName(1 2 3)
|
72 pascal16 GetAtomName(word ptr word) GetAtomName
|
||||||
73 pascal16 GetAtomHandle(word) GetAtomHandle(1)
|
73 pascal16 GetAtomHandle(word) GetAtomHandle
|
||||||
74 pascal16 OpenFile(ptr ptr word) OpenFile(1 2 3)
|
74 pascal16 OpenFile(ptr ptr word) OpenFile
|
||||||
#75 OPENPATHNAME
|
#75 OPENPATHNAME
|
||||||
#76 DELETEPATHNAME
|
#76 DELETEPATHNAME
|
||||||
#77 RESERVED1
|
#77 RESERVED1
|
||||||
#78 RESERVED2
|
#78 RESERVED2
|
||||||
#79 RESERVED3
|
#79 RESERVED3
|
||||||
#80 RESERVED4
|
#80 RESERVED4
|
||||||
81 pascal16 _lclose(word) _lclose(1)
|
81 pascal16 _lclose(word) _lclose
|
||||||
82 pascal16 _lread(word ptr word) _lread(1 2 3)
|
82 pascal16 _lread(word ptr word) _lread
|
||||||
83 pascal16 _lcreat(ptr word) _lcreat(1 2)
|
83 pascal16 _lcreat(ptr word) _lcreat
|
||||||
84 pascal _llseek(word long word) _llseek(1 2 3)
|
84 pascal _llseek(word long word) _llseek
|
||||||
85 pascal16 _lopen(ptr word) _lopen(1 2)
|
85 pascal16 _lopen(ptr word) _lopen
|
||||||
86 pascal16 _lwrite(word ptr word) _lwrite(1 2 3)
|
86 pascal16 _lwrite(word ptr word) _lwrite
|
||||||
#87 RESERVED5
|
#87 RESERVED5
|
||||||
88 pascal lstrcpy(ptr ptr) lstrcpy(1 2)
|
88 pascal lstrcpy(segptr segptr) lstrcpy
|
||||||
89 pascal lstrcat(ptr ptr) lstrcat(1 2)
|
89 pascal lstrcat(segptr segptr) lstrcat
|
||||||
90 pascal16 lstrlen(ptr) lstrlen(1)
|
90 pascal16 lstrlen(ptr) lstrlen
|
||||||
91 register InitTask(word word word word word
|
91 register InitTask() KERNEL_InitTask
|
||||||
word word word word word)
|
92 pascal16 GetTempDrive(byte) GetTempDrive
|
||||||
KERNEL_InitTask()
|
93 pascal16 GetCodeHandle(ptr) GetCodeHandle
|
||||||
92 pascal16 GetTempDrive(byte) GetTempDrive(1)
|
|
||||||
93 pascal16 GetCodeHandle(ptr) GetCodeHandle(1)
|
|
||||||
#94 DEFINEHANDLETABLE
|
#94 DEFINEHANDLETABLE
|
||||||
95 pascal16 LoadLibrary(ptr) LoadLibrary(1)
|
95 pascal16 LoadLibrary(ptr) LoadLibrary
|
||||||
96 pascal16 FreeLibrary(word) FreeLibrary(1)
|
96 pascal16 FreeLibrary(word) FreeLibrary
|
||||||
97 pascal16 GetTempFileName(byte ptr word ptr) GetTempFileName(1 2 3 4)
|
97 pascal16 GetTempFileName(byte ptr word ptr) GetTempFileName
|
||||||
#98 GETLASTDISKCHANGE
|
#98 GETLASTDISKCHANGE
|
||||||
#99 GETLPERRMODE
|
#99 GETLPERRMODE
|
||||||
#100 VALIDATECODESEGMENTS
|
#100 VALIDATECODESEGMENTS
|
||||||
#101 NOHOOKDOSCALL
|
#101 NOHOOKDOSCALL
|
||||||
102 register DOS3Call(word word word word word
|
102 register DOS3Call() DOS3Call
|
||||||
word word word word word)
|
|
||||||
DOS3Call()
|
|
||||||
#103 NETBIOSCALL
|
#103 NETBIOSCALL
|
||||||
#104 GETCODEINFO
|
#104 GETCODEINFO
|
||||||
#105 GETEXEVERSION
|
#105 GETEXEVERSION
|
||||||
106 pascal SetSwapAreaSize(word) SetSwapAreaSize(1)
|
106 pascal SetSwapAreaSize(word) SetSwapAreaSize
|
||||||
107 pascal SetErrorMode(word) SetErrorMode(1)
|
107 pascal SetErrorMode(word) SetErrorMode
|
||||||
#108 SWITCHSTACKTO
|
#108 SWITCHSTACKTO
|
||||||
#109 SWITCHSTACKBACK
|
#109 SWITCHSTACKBACK
|
||||||
#110 PATCHCODEHANDLE
|
#110 PATCHCODEHANDLE
|
||||||
111 pascal GlobalWire(word) GlobalLock(1)
|
111 pascal GlobalWire(word) GlobalWire
|
||||||
112 pascal16 GlobalUnWire(word) GlobalUnlock(1)
|
112 pascal16 GlobalUnWire(word) GlobalUnWire
|
||||||
113 equate __AHSHIFT 3
|
113 equate __AHSHIFT 3
|
||||||
114 equate __AHINCR 8
|
114 equate __AHINCR 8
|
||||||
115 pascal OutputDebugString(ptr) OutputDebugString(1)
|
115 pascal OutputDebugString(ptr) OutputDebugString
|
||||||
#116 INITLIB
|
#116 INITLIB
|
||||||
117 return OldYield 0 0
|
117 return OldYield 0 0
|
||||||
#118 GETTASKQUEUEDS
|
#118 GETTASKQUEUEDS
|
||||||
#119 GETTASKQUEUEES
|
#119 GETTASKQUEUEES
|
||||||
#120 UNDEFDYNLINK
|
#120 UNDEFDYNLINK
|
||||||
121 return LocalShrink 4 0
|
121 pascal16 LocalShrink(word word) LocalShrink
|
||||||
#122 ISTASKLOCKED
|
#122 ISTASKLOCKED
|
||||||
#123 KBDRST
|
#123 KBDRST
|
||||||
#124 ENABLEKERNEL
|
124 return EnableKernel 0 0
|
||||||
#125 DISABLEKERNEL
|
125 return DisableKernel 0 0
|
||||||
#126 MEMORYFREED
|
#126 MEMORYFREED
|
||||||
127 pascal16 GetPrivateProfileInt(ptr ptr s_word ptr)
|
127 pascal16 GetPrivateProfileInt(ptr ptr s_word ptr) GetPrivateProfileInt
|
||||||
GetPrivateProfileInt(1 2 3 4)
|
|
||||||
128 pascal16 GetPrivateProfileString(ptr ptr ptr ptr s_word ptr)
|
128 pascal16 GetPrivateProfileString(ptr ptr ptr ptr s_word ptr)
|
||||||
GetPrivateProfileString(1 2 3 4 5 6)
|
GetPrivateProfileString
|
||||||
129 pascal16 WritePrivateProfileString(ptr ptr ptr ptr)
|
129 pascal16 WritePrivateProfileString(ptr ptr ptr ptr)
|
||||||
WritePrivateProfileString(1 2 3 4)
|
WritePrivateProfileString
|
||||||
130 pascal FileCDR(ptr) FileCDR(1)
|
130 pascal FileCDR(ptr) FileCDR
|
||||||
131 pascal GetDOSEnvironment() GetDOSEnvironment()
|
131 pascal GetDOSEnvironment() GetDOSEnvironment
|
||||||
132 pascal GetWinFlags() GetWinFlags()
|
132 pascal GetWinFlags() GetWinFlags
|
||||||
#133 GETEXEPTR
|
#133 GETEXEPTR
|
||||||
134 pascal16 GetWindowsDirectory(ptr word) GetWindowsDirectory(1 2)
|
134 pascal16 GetWindowsDirectory(ptr word) GetWindowsDirectory
|
||||||
135 pascal16 GetSystemDirectory(ptr word) GetSystemDirectory(1 2)
|
135 pascal16 GetSystemDirectory(ptr word) GetSystemDirectory
|
||||||
136 pascal16 GetDriveType(byte) GetDriveType(1)
|
136 pascal16 GetDriveType(byte) GetDriveType
|
||||||
137 pascal FatalAppExit(word ptr) FatalAppExit(1 2)
|
137 pascal FatalAppExit(word ptr) FatalAppExit
|
||||||
#138 GETHEAPSPACES - This is not correct but may fake out most apps
|
138 pascal GetHeapSpaces(word) GetHeapSpaces
|
||||||
138 return GetHeapSpaces 2 0x80004000
|
|
||||||
#139 DOSIGNAL
|
#139 DOSIGNAL
|
||||||
#140 SETSIGHANDLER
|
#140 SETSIGHANDLER
|
||||||
#141 INITTASK1
|
#141 INITTASK1
|
||||||
150 return DirectedYield 2 0
|
150 return DirectedYield 2 0
|
||||||
#151 WINOLDAPCALL
|
#151 WINOLDAPCALL
|
||||||
152 pascal16 GetNumTasks() GetNumTasks()
|
152 pascal16 GetNumTasks() GetNumTasks
|
||||||
154 return GlobalNotify 4 0
|
154 return GlobalNotify 4 0
|
||||||
#155 GETTASKDS
|
#155 GETTASKDS
|
||||||
#156 LIMITEMSPAGES
|
#156 LIMITEMSPAGES
|
||||||
|
@ -158,62 +152,62 @@ length 415
|
||||||
#158 ISWINOLDAPTASK
|
#158 ISWINOLDAPTASK
|
||||||
#159 GLOBALHANDLENORIP
|
#159 GLOBALHANDLENORIP
|
||||||
#160 EMSCOPY
|
#160 EMSCOPY
|
||||||
#161 LOCALCOUNTFREE
|
161 pascal16 LocalCountFree() LocalCountFree
|
||||||
#162 LOCALHEAPSIZE
|
162 pascal16 LocalHeapSize() LocalHeapSize
|
||||||
163 pascal16 GlobalLRUOldest(word) ReturnArg(1)
|
163 pascal16 GlobalLRUOldest(word) GlobalLRUOldest
|
||||||
164 pascal16 GlobalLRUNewest(word) ReturnArg(1)
|
164 pascal16 GlobalLRUNewest(word) GlobalLRUNewest
|
||||||
#165 A20PROC
|
#165 A20PROC
|
||||||
166 pascal16 WinExec(ptr word) WinExec(1 2)
|
166 pascal16 WinExec(ptr word) WinExec
|
||||||
#167 GETEXPWINVER
|
#167 GETEXPWINVER
|
||||||
#168 DIRECTRESALLOC
|
#168 DIRECTRESALLOC
|
||||||
169 pascal GetFreeSpace(word) GetFreeSpace(1)
|
169 pascal GetFreeSpace(word) GetFreeSpace
|
||||||
170 pascal AllocCStoDSAlias(word) AllocDStoCSAlias(1)
|
170 pascal16 AllocCStoDSAlias(word) AllocCStoDSAlias
|
||||||
171 pascal AllocDStoCSAlias(word) AllocDStoCSAlias(1)
|
171 pascal16 AllocDStoCSAlias(word) AllocDStoCSAlias
|
||||||
#172 ALLOCALIAS
|
172 pascal16 AllocAlias(word) AllocCStoDSAlias
|
||||||
#173 __ROMBIOS
|
#173 __ROMBIOS
|
||||||
#174 __A000H
|
#174 __A000H
|
||||||
175 pascal16 AllocSelector(word) AllocSelector(1)
|
175 pascal16 AllocSelector(word) AllocSelector
|
||||||
176 pascal16 FreeSelector(word) FreeSelector(1)
|
176 pascal16 FreeSelector(word) FreeSelector
|
||||||
177 pascal16 PrestoChangoSelector(word word) PrestoChangoSelector(1 2)
|
177 pascal16 PrestoChangoSelector(word word) PrestoChangoSelector
|
||||||
178 equate __WINFLAGS 0x413
|
178 equate __WINFLAGS 0x413
|
||||||
#179 __D000H
|
#179 __D000H
|
||||||
#180 LONGPTRADD
|
180 pascal16 LongPtrAdd(long long) LongPtrAdd
|
||||||
#181 __B000H
|
#181 __B000H
|
||||||
#182 __B800H
|
#182 __B800H
|
||||||
#183 __0000H
|
#183 __0000H
|
||||||
184 return GlobalDOSAlloc 4 0
|
184 pascal GlobalDOSAlloc(long) GlobalDOSAlloc
|
||||||
185 return GlobalDOSFree 2 0
|
185 pascal16 GlobalDOSFree(word) GlobalDOSFree
|
||||||
186 pascal16 GetSelectorBase(word) GetSelectorBase(1)
|
186 pascal GetSelectorBase(word) GetSelectorBase
|
||||||
187 pascal16 SetSelectorBase(word long) SetSelectorBase(1 2)
|
187 pascal16 SetSelectorBase(word long) SetSelectorBase
|
||||||
188 pascal GetSelectorLimit(word) GetSelectorLimit(1)
|
188 pascal GetSelectorLimit(word) GetSelectorLimit
|
||||||
189 pascal16 SetSelectorLimit(word long) SetSelectorLimit(1 2)
|
189 pascal16 SetSelectorLimit(word long) SetSelectorLimit
|
||||||
#190 __E000H
|
#190 __E000H
|
||||||
191 pascal GlobalPageLock(word) GlobalLock(1)
|
191 pascal16 GlobalPageLock(word) GlobalPageLock
|
||||||
192 pascal GlobalPageUnlock(word) GlobalUnlock(1)
|
192 pascal16 GlobalPageUnlock(word) GlobalPageUnlock
|
||||||
#193 __0040H
|
#193 __0040H
|
||||||
#194 __F000H
|
#194 __F000H
|
||||||
#195 __C000H
|
#195 __C000H
|
||||||
#196 SELECTORACCESSRIGHTS
|
196 pascal16 SelectorAccessRights(word word word) SelectorAccessRights
|
||||||
197 pascal GlobalFix(word) GlobalLock(1)
|
197 pascal16 GlobalFix(word) GlobalFix
|
||||||
198 pascal GlobalUnfix(word) GlobalUnlock(1)
|
198 pascal16 GlobalUnfix(word) GlobalUnfix
|
||||||
199 pascal16 SetHandleCount(word) SetHandleCount(1)
|
199 pascal16 SetHandleCount(word) SetHandleCount
|
||||||
#200 VALIDATEFREESPACES
|
#200 VALIDATEFREESPACES
|
||||||
#201 REPLACEINST
|
#201 REPLACEINST
|
||||||
#202 REGISTERPTRACE
|
#202 REGISTERPTRACE
|
||||||
#203 DEBUGBREAK
|
#203 DEBUGBREAK
|
||||||
#204 SWAPRECORDING
|
#204 SWAPRECORDING
|
||||||
#205 CVWBREAK
|
#205 CVWBREAK
|
||||||
#206 ALLOCSELECTORARRAY
|
206 pascal16 AllocSelectorArray(word) AllocSelectorArray
|
||||||
207 return IsDBCSLeadByte 2 0
|
207 return IsDBCSLeadByte 2 0
|
||||||
310 pascal LocalHandleDelta(word) WIN16_LocalHandleDelta(1)
|
310 pascal16 LocalHandleDelta(word) LocalHandleDelta
|
||||||
#311 GETSETKERNELDOSPROC
|
#311 GETSETKERNELDOSPROC
|
||||||
#314 DEBUGDEFINESEGMENT
|
#314 DEBUGDEFINESEGMENT
|
||||||
315 pascal WriteOutProfiles() sync_profiles()
|
315 pascal WriteOutProfiles() sync_profiles
|
||||||
#316 GETFREEMEMINFO
|
#316 GETFREEMEMINFO
|
||||||
#318 FATALEXITHOOK
|
#318 FATALEXITHOOK
|
||||||
#319 FLUSHCACHEDFILEHANDLE
|
#319 FLUSHCACHEDFILEHANDLE
|
||||||
#320 ISTASK
|
#320 ISTASK
|
||||||
323 pascal IsRomModule() IsRomModule()
|
323 pascal IsRomModule() IsRomModule
|
||||||
#324 LOGERROR
|
#324 LOGERROR
|
||||||
#325 LOGPARAMERROR
|
#325 LOGPARAMERROR
|
||||||
#326 ISROMFILE
|
#326 ISROMFILE
|
||||||
|
@ -221,10 +215,10 @@ length 415
|
||||||
#328 _DEBUGOUTPUT
|
#328 _DEBUGOUTPUT
|
||||||
#329 K329
|
#329 K329
|
||||||
#332 THHOOK
|
#332 THHOOK
|
||||||
334 pascal IsBadReadPtr(ptr word) IsBadReadPtr(1 2)
|
334 pascal16 IsBadReadPtr(segptr word) IsBadReadPtr
|
||||||
335 pascal IsBadWritePtr(ptr word) IsBadWritePtr(1 2)
|
335 pascal16 IsBadWritePtr(segptr word) IsBadWritePtr
|
||||||
336 pascal IsBadCodePtr(ptr) IsBadCodePtr(1)
|
336 pascal16 IsBadCodePtr(segptr) IsBadCodePtr
|
||||||
337 pascal IsBadStringPtr(ptr word) IsBadStringPtr(1 2)
|
337 pascal16 IsBadStringPtr(segptr word) IsBadStringPtr
|
||||||
#338 HASGPHANDLER
|
#338 HASGPHANDLER
|
||||||
#339 DIAGQUERY
|
#339 DIAGQUERY
|
||||||
#340 DIAGOUTPUT
|
#340 DIAGOUTPUT
|
||||||
|
@ -233,13 +227,13 @@ length 415
|
||||||
#343 REGISTERWINOLDAPHOOK
|
#343 REGISTERWINOLDAPHOOK
|
||||||
#344 GETWINOLDAPHOOKS
|
#344 GETWINOLDAPHOOKS
|
||||||
#345 ISSHAREDSELECTOR
|
#345 ISSHAREDSELECTOR
|
||||||
346 pascal IsBadHugeReadPtr(ptr long) IsBadHugeReadPtr(1 2)
|
346 pascal16 IsBadHugeReadPtr(segptr long) IsBadHugeReadPtr
|
||||||
347 pascal IsBadHugeWritePtr(ptr long) IsBadHugeWritePtr(1 2)
|
347 pascal16 IsBadHugeWritePtr(segptr long) IsBadHugeWritePtr
|
||||||
348 pascal hmemcpy(ptr ptr long) hmemcpy(1 2 3)
|
348 pascal hmemcpy(ptr ptr long) hmemcpy
|
||||||
349 pascal16 _hread(word ptr long) _hread(1 2 3)
|
349 pascal16 _hread(word ptr long) _hread
|
||||||
350 pascal16 _hwrite(word ptr long) _hwrite(1 2 3)
|
350 pascal16 _hwrite(word ptr long) _hwrite
|
||||||
#351 BUNNY_351
|
#351 BUNNY_351
|
||||||
353 pascal lstrcpyn(ptr ptr word) lstrcpyn(1 2 3)
|
353 pascal lstrcpyn(segptr segptr word) lstrcpyn
|
||||||
#354 GETAPPCOMPATFLAGS
|
#354 GETAPPCOMPATFLAGS
|
||||||
#355 GETWINDEBUGINFO
|
#355 GETWINDEBUGINFO
|
||||||
#356 SETWINDEBUGINFO
|
#356 SETWINDEBUGINFO
|
||||||
|
|
|
@ -1,27 +1,27 @@
|
||||||
# $Id: keyboard.spec,v 1.1 1993/09/10 05:32:12 scott Exp $
|
# $Id: keyboard.spec,v 1.1 1993/09/10 05:32:12 scott Exp $
|
||||||
#
|
#
|
||||||
name keyboard
|
name keyboard
|
||||||
id 8
|
id 7
|
||||||
length 137
|
length 137
|
||||||
|
|
||||||
#1 pascal Inquire
|
#1 pascal Inquire
|
||||||
#2 pascal Enable
|
#2 pascal Enable
|
||||||
#3 pascal Disable
|
#3 pascal Disable
|
||||||
4 pascal ToAscii(word word ptr ptr word) ToAscii(1 2 3 4 5)
|
4 pascal ToAscii(word word ptr ptr word) ToAscii
|
||||||
5 pascal AnsiToOem(ptr ptr) AnsiToOem(1 2)
|
5 pascal AnsiToOem(ptr ptr) AnsiToOem
|
||||||
6 pascal OemToAnsi(ptr ptr) OemToAnsi(1 2)
|
6 pascal OemToAnsi(ptr ptr) OemToAnsi
|
||||||
#7 pascal SetSpeed
|
#7 pascal SetSpeed
|
||||||
#100 pascal ScreenSwitchEnable
|
#100 pascal ScreenSwitchEnable
|
||||||
#126 pascal GetTableSeg
|
#126 pascal GetTableSeg
|
||||||
#127 pascal NewTable
|
#127 pascal NewTable
|
||||||
128 pascal OemKeyScan(word) OemKeyScan(1)
|
128 pascal OemKeyScan(word) OemKeyScan
|
||||||
129 pascal VkKeyScan(byte) VkKeyScan(1)
|
129 pascal VkKeyScan(byte) VkKeyScan
|
||||||
130 pascal GetKeyboardType(byte) GetKeyboardType(1)
|
130 pascal GetKeyboardType(byte) GetKeyboardType
|
||||||
131 pascal MapVirtualKey(word word) MapVirtualKey(1 2)
|
131 pascal MapVirtualKey(word word) MapVirtualKey
|
||||||
132 pascal GetKbCodePage() GetKbCodePage()
|
132 pascal GetKbCodePage() GetKbCodePage
|
||||||
133 pascal GetKeyNameText(long ptr word) GetKeyNameText(1 2 3)
|
133 pascal GetKeyNameText(long ptr word) GetKeyNameText
|
||||||
134 pascal AnsiToOemBuff(ptr ptr word) AnsiToOemBuff(1 2 3)
|
134 pascal AnsiToOemBuff(ptr ptr word) AnsiToOemBuff
|
||||||
135 pascal OemToAnsiBuff(ptr ptr word) OemToAnsiBuff(1 2 3)
|
135 pascal OemToAnsiBuff(ptr ptr word) OemToAnsiBuff
|
||||||
#136 pascal EnableKbSysReq
|
#136 pascal EnableKbSysReq
|
||||||
#137 pascal GetBiosKeyProc
|
#137 pascal GetBiosKeyProc
|
||||||
|
|
||||||
|
|
|
@ -1,129 +1,130 @@
|
||||||
# $Id: mmsystem.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
# $Id: mmsystem.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
||||||
#
|
#
|
||||||
name mmsystem
|
name mmsystem
|
||||||
id 11
|
id 10
|
||||||
length 1226
|
length 1226
|
||||||
|
|
||||||
1 pascal MMSYSTEM_WEP(word word word ptr) MMSYSTEM_WEP(1 2 3 4)
|
1 pascal MMSYSTEM_WEP(word word word ptr) MMSYSTEM_WEP
|
||||||
2 pascal SNDPLAYSOUND(ptr word) sndPlaySound(1 2)
|
2 pascal SNDPLAYSOUND(ptr word) sndPlaySound
|
||||||
5 pascal MMSYSTEMGETVERSION() mmsystemGetVersion()
|
5 pascal MMSYSTEMGETVERSION() mmsystemGetVersion
|
||||||
6 pascal DriverProc(long word word long long) DriverProc(1 2 3 4 5)
|
6 pascal DriverProc(long word word long long) DriverProc
|
||||||
30 pascal OUTPUTDEBUGSTR(ptr) OutputDebugStr(1)
|
30 pascal OUTPUTDEBUGSTR(ptr) OutputDebugStr
|
||||||
31 pascal DriverCallback(long word word word long long long) DriverCallback(1 2 3 4 5 6 7)
|
31 pascal DriverCallback(long word word word long long long)
|
||||||
#32 pascal STACKENTER()
|
DriverCallback
|
||||||
#33 pascal STACKLEAVE()
|
#32 pascal STACKENTER
|
||||||
#34 pascal MMDRVINSTALL()
|
#33 pascal STACKLEAVE
|
||||||
101 pascal JOYGETNUMDEVS() JoyGetNumDevs()
|
#34 pascal MMDRVINSTALL
|
||||||
102 pascal JOYGETDEVCAPS(word ptr word) JoyGetDevCaps(1 2 3)
|
101 pascal JOYGETNUMDEVS() JoyGetNumDevs
|
||||||
103 pascal JOYGETPOS(word ptr) JoyGetPos(1 2)
|
102 pascal JOYGETDEVCAPS(word ptr word) JoyGetDevCaps
|
||||||
104 pascal JOYGETTHRESHOLD(word ptr) JoyGetThreshold(1 2)
|
103 pascal JOYGETPOS(word ptr) JoyGetPos
|
||||||
105 pascal JOYRELEASECAPTURE(word) JoyReleaseCapture(1)
|
104 pascal JOYGETTHRESHOLD(word ptr) JoyGetThreshold
|
||||||
106 pascal JOYSETCAPTURE(word word word word) JoySetCapture(1 2 3 4)
|
105 pascal JOYRELEASECAPTURE(word) JoyReleaseCapture
|
||||||
107 pascal JOYSETTHRESHOLD(word word) JoySetThreshold(1 2)
|
106 pascal JOYSETCAPTURE(word word word word) JoySetCapture
|
||||||
109 pascal JOYSETCALIBRATION(word) JoySetCalibration(1)
|
107 pascal JOYSETTHRESHOLD(word word) JoySetThreshold
|
||||||
201 pascal MIDIOUTGETNUMDEVS() midiOutGetNumDevs()
|
109 pascal JOYSETCALIBRATION(word) JoySetCalibration
|
||||||
202 pascal MIDIOUTGETDEVCAPS(word ptr word) midiOutGetDevCaps(1 2 3)
|
201 pascal MIDIOUTGETNUMDEVS() midiOutGetNumDevs
|
||||||
203 pascal MIDIOUTGETERRORTEXT(word ptr word) midiOutGetErrorText(1 2 3)
|
202 pascal MIDIOUTGETDEVCAPS(word ptr word) midiOutGetDevCaps
|
||||||
204 pascal MIDIOUTOPEN(ptr word ptr long long long) midiOutOpen(1 2 3 4 5 6)
|
203 pascal MIDIOUTGETERRORTEXT(word ptr word) midiOutGetErrorText
|
||||||
205 pascal MIDIOUTCLOSE(word) midiOutClose(1)
|
204 pascal MIDIOUTOPEN(ptr word ptr long long long) midiOutOpen
|
||||||
206 pascal MIDIOUTPREPAREHEADER(word ptr word) midiOutPrepareHeader(1 2 3)
|
205 pascal MIDIOUTCLOSE(word) midiOutClose
|
||||||
207 pascal MIDIOUTUNPREPAREHEADER(word ptr word) midiOutUnprepareHeader(1 2 3)
|
206 pascal MIDIOUTPREPAREHEADER(word ptr word) midiOutPrepareHeader
|
||||||
208 pascal MIDIOUTSHORTMSG(word long) midiOutShortMsg(1 2)
|
207 pascal MIDIOUTUNPREPAREHEADER(word ptr word) midiOutUnprepareHeader
|
||||||
209 pascal MIDIOUTLONGMSG(word ptr word) midiOutLongMsg(1 2 3)
|
208 pascal MIDIOUTSHORTMSG(word long) midiOutShortMsg
|
||||||
210 pascal MIDIOUTRESET(word) midiOutReset(1)
|
209 pascal MIDIOUTLONGMSG(word ptr word) midiOutLongMsg
|
||||||
211 pascal MIDIOUTGETVOLUME(word ptr) midiOutGetVolume(1 2)
|
210 pascal MIDIOUTRESET(word) midiOutReset
|
||||||
212 pascal MIDIOUTSETVOLUME(word long) midiOutSetVolume(1 2)
|
211 pascal MIDIOUTGETVOLUME(word ptr) midiOutGetVolume
|
||||||
215 pascal MIDIOUTGETID(word ptr) midiOutGetID(1 2)
|
212 pascal MIDIOUTSETVOLUME(word long) midiOutSetVolume
|
||||||
216 pascal MIDIOUTMESSAGE(word word long long) midiOutMessage(1 2 3 4)
|
215 pascal MIDIOUTGETID(word ptr) midiOutGetID
|
||||||
301 pascal MIDIINGETNUMDEVS() midiInGetNumDevs()
|
216 pascal MIDIOUTMESSAGE(word word long long) midiOutMessage
|
||||||
302 pascal MIDIINGETDEVCAPS(word ptr word) midiInGetDevCaps(1 2 3)
|
301 pascal MIDIINGETNUMDEVS() midiInGetNumDevs
|
||||||
303 pascal MIDIINGETERRORTEXT(word ptr word) midiInGetErrorText(1 2 3)
|
302 pascal MIDIINGETDEVCAPS(word ptr word) midiInGetDevCaps
|
||||||
304 pascal MIDIINOPEN(ptr word ptr long long long) midiInOpen(1 2 3 4 5 6)
|
303 pascal MIDIINGETERRORTEXT(word ptr word) midiInGetErrorText
|
||||||
305 pascal MIDIINCLOSE(word) midiInClose(1)
|
304 pascal MIDIINOPEN(ptr word ptr long long long) midiInOpen
|
||||||
306 pascal MIDIINPREPAREHEADER(word ptr word) midiInPrepareHeader(1 2 3)
|
305 pascal MIDIINCLOSE(word) midiInClose
|
||||||
307 pascal MIDIINUNPREPAREHEADER(word ptr word) midiInUnprepareHeader(1 2 3)
|
306 pascal MIDIINPREPAREHEADER(word ptr word) midiInPrepareHeader
|
||||||
309 pascal MIDIINSTART(word) midiInStart(1)
|
307 pascal MIDIINUNPREPAREHEADER(word ptr word) midiInUnprepareHeader
|
||||||
310 pascal MIDIINSTOP(word) midiInStop(1)
|
309 pascal MIDIINSTART(word) midiInStart
|
||||||
311 pascal MIDIINRESET(word) midiInReset(1)
|
310 pascal MIDIINSTOP(word) midiInStop
|
||||||
312 pascal MIDIINGETID(word ptr) midiInGetID(1 2)
|
311 pascal MIDIINRESET(word) midiInReset
|
||||||
313 pascal MIDIINMESSAGE(word word long long) midiInMessage(1 2 3 4)
|
312 pascal MIDIINGETID(word ptr) midiInGetID
|
||||||
350 pascal AUXGETNUMDEVS() auxGetNumDevs()
|
313 pascal MIDIINMESSAGE(word word long long) midiInMessage
|
||||||
351 pascal AUXGETDEVCAPS(word ptr word) auxGetDevCaps(1 2 3)
|
350 pascal AUXGETNUMDEVS() auxGetNumDevs
|
||||||
352 pascal AUXGETVOLUME(word ptr) auxGetVolume(1 2)
|
351 pascal AUXGETDEVCAPS(word ptr word) auxGetDevCaps
|
||||||
353 pascal AUXSETVOLUME(word long) auxSetVolume(1 2)
|
352 pascal AUXGETVOLUME(word ptr) auxGetVolume
|
||||||
354 pascal AUXOUTMESSAGE(word word long long) auxOutMessage(1 2 3 4)
|
353 pascal AUXSETVOLUME(word long) auxSetVolume
|
||||||
401 pascal WAVEOUTGETNUMDEVS() waveOutGetNumDevs()
|
354 pascal AUXOUTMESSAGE(word word long long) auxOutMessage
|
||||||
402 pascal WAVEOUTGETDEVCAPS(word ptr word) waveOutGetDevCaps(1 2 3)
|
401 pascal WAVEOUTGETNUMDEVS() waveOutGetNumDevs
|
||||||
403 pascal WAVEOUTGETERRORTEXT(word ptr word) waveOutGetErrorText(1 2 3)
|
402 pascal WAVEOUTGETDEVCAPS(word ptr word) waveOutGetDevCaps
|
||||||
404 pascal WAVEOUTOPEN(ptr word ptr long long long) waveOutOpen(1 2 3 4 5 6)
|
403 pascal WAVEOUTGETERRORTEXT(word ptr word) waveOutGetErrorText
|
||||||
405 pascal WAVEOUTCLOSE(word) waveOutClose(1)
|
404 pascal WAVEOUTOPEN(ptr word ptr long long long) waveOutOpen
|
||||||
406 pascal WAVEOUTPREPAREHEADER(word ptr word) waveOutPrepareHeader(1 2 3)
|
405 pascal WAVEOUTCLOSE(word) waveOutClose
|
||||||
407 pascal WAVEOUTUNPREPAREHEADER(word ptr word) waveOutUnprepareHeader(1 2 3)
|
406 pascal WAVEOUTPREPAREHEADER(word ptr word) waveOutPrepareHeader
|
||||||
408 pascal WAVEOUTWRITE(word ptr word) waveOutWrite(1 2 3)
|
407 pascal WAVEOUTUNPREPAREHEADER(word ptr word) waveOutUnprepareHeader
|
||||||
409 pascal WAVEOUTPAUSE(word) waveOutPause(1)
|
408 pascal WAVEOUTWRITE(word ptr word) waveOutWrite
|
||||||
410 pascal WAVEOUTRESTART(word) waveOutRestart(1)
|
409 pascal WAVEOUTPAUSE(word) waveOutPause
|
||||||
411 pascal WAVEOUTRESET(word) waveOutReset(1)
|
410 pascal WAVEOUTRESTART(word) waveOutRestart
|
||||||
412 pascal WAVEOUTGETPOSITION(word ptr word) waveOutGetPosition(1 2 3)
|
411 pascal WAVEOUTRESET(word) waveOutReset
|
||||||
413 pascal WAVEOUTGETPITCH(word ptr) waveOutGetPitch(1 2)
|
412 pascal WAVEOUTGETPOSITION(word ptr word) waveOutGetPosition
|
||||||
414 pascal WAVEOUTSETPITCH(word long) waveOutSetPitch(1 2)
|
413 pascal WAVEOUTGETPITCH(word ptr) waveOutGetPitch
|
||||||
415 pascal WAVEOUTGETVOLUME(word ptr) waveOutGetVolume(1 2)
|
414 pascal WAVEOUTSETPITCH(word long) waveOutSetPitch
|
||||||
416 pascal WAVEOUTSETVOLUME(word long) waveOutSetVolume(1 2)
|
415 pascal WAVEOUTGETVOLUME(word ptr) waveOutGetVolume
|
||||||
417 pascal WAVEOUTGETPLAYBACKRATE(word ptr) waveOutGetPlaybackRate(1 2)
|
416 pascal WAVEOUTSETVOLUME(word long) waveOutSetVolume
|
||||||
418 pascal WAVEOUTSETPLAYBACKRATE(word long) waveOutSetPlaybackRate(1 2)
|
417 pascal WAVEOUTGETPLAYBACKRATE(word ptr) waveOutGetPlaybackRate
|
||||||
419 pascal WAVEOUTBREAKLOOP(word) waveOutBreakLoop(1)
|
418 pascal WAVEOUTSETPLAYBACKRATE(word long) waveOutSetPlaybackRate
|
||||||
420 pascal WAVEOUTGETID(word ptr) waveOutGetID(1 2)
|
419 pascal WAVEOUTBREAKLOOP(word) waveOutBreakLoop
|
||||||
421 pascal WAVEOUTMESSAGE(word word long long) waveOutMessage(1 2 3 4)
|
420 pascal WAVEOUTGETID(word ptr) waveOutGetID
|
||||||
501 pascal WAVEINGETNUMDEVS() waveInGetNumDevs()
|
421 pascal WAVEOUTMESSAGE(word word long long) waveOutMessage
|
||||||
502 pascal WAVEINGETDEVCAPS(word ptr word) waveInGetDevCaps(1 2 3)
|
501 pascal WAVEINGETNUMDEVS() waveInGetNumDevs
|
||||||
503 pascal WAVEINGETERRORTEXT(word ptr word) waveInGetErrorText(1 2 3)
|
502 pascal WAVEINGETDEVCAPS(word ptr word) waveInGetDevCaps
|
||||||
504 pascal WAVEINOPEN(ptr word ptr long long long) waveInOpen(1 2 3 4 5 6)
|
503 pascal WAVEINGETERRORTEXT(word ptr word) waveInGetErrorText
|
||||||
505 pascal WAVEINCLOSE(word) waveInClose(1)
|
504 pascal WAVEINOPEN(ptr word ptr long long long) waveInOpen
|
||||||
506 pascal WAVEINPREPAREHEADER(word ptr word) waveInPrepareHeader(1 2 3)
|
505 pascal WAVEINCLOSE(word) waveInClose
|
||||||
507 pascal WAVEINUNPREPAREHEADER(word ptr word) waveInUnprepareHeader(1 2 3)
|
506 pascal WAVEINPREPAREHEADER(word ptr word) waveInPrepareHeader
|
||||||
508 pascal WAVEINADDBUFFER(word ptr word) waveInAddBuffer(1 2 3)
|
507 pascal WAVEINUNPREPAREHEADER(word ptr word) waveInUnprepareHeader
|
||||||
509 pascal WAVEINSTART(word) waveInStart(1)
|
508 pascal WAVEINADDBUFFER(word ptr word) waveInAddBuffer
|
||||||
510 pascal WAVEINSTOP(word) waveInStop(1)
|
509 pascal WAVEINSTART(word) waveInStart
|
||||||
511 pascal WAVEINRESET(word) waveInReset(1)
|
510 pascal WAVEINSTOP(word) waveInStop
|
||||||
512 pascal WAVEINGETPOSITION(word ptr word) waveInGetPosition(1 2 3)
|
511 pascal WAVEINRESET(word) waveInReset
|
||||||
513 pascal WAVEINGETID(word ptr) waveInGetID(1 2)
|
512 pascal WAVEINGETPOSITION(word ptr word) waveInGetPosition
|
||||||
514 pascal WAVEINMESSAGE(word word long long) waveInMessage(1 2 3 4)
|
513 pascal WAVEINGETID(word ptr) waveInGetID
|
||||||
601 pascal timeGetSystemTime(ptr word) timeGetSystemTime(1 2)
|
514 pascal WAVEINMESSAGE(word word long long) waveInMessage
|
||||||
602 pascal timeSetEvent(word word ptr long word) timeSetEvent(1 2 3 4 5)
|
601 pascal timeGetSystemTime(ptr word) timeGetSystemTime
|
||||||
603 pascal timeKillEvent(word) timeKillEvent(1)
|
602 pascal timeSetEvent(word word ptr long word) timeSetEvent
|
||||||
604 pascal timeGetDevCaps(ptr word) timeGetDevCaps(1 2)
|
603 pascal timeKillEvent(word) timeKillEvent
|
||||||
605 pascal timeBeginPeriod(word) timeBeginPeriod(1)
|
604 pascal timeGetDevCaps(ptr word) timeGetDevCaps
|
||||||
606 pascal timeEndPeriod(word) timeEndPeriod(1)
|
605 pascal timeBeginPeriod(word) timeBeginPeriod
|
||||||
607 pascal timeGetTime() timeGetTime()
|
606 pascal timeEndPeriod(word) timeEndPeriod
|
||||||
701 pascal MCISENDCOMMAND(word word long long) mciSendCommand(1 2 3 4)
|
607 pascal timeGetTime() timeGetTime
|
||||||
702 pascal MCISENDSTRING(ptr ptr word word) mciSendString(1 2 3 4)
|
701 pascal MCISENDCOMMAND(word word long long) mciSendCommand
|
||||||
703 pascal MCIGETDEVICEID(ptr) mciSendCommand(1)
|
702 pascal MCISENDSTRING(ptr ptr word word) mciSendString
|
||||||
706 pascal MCIGETERRORSTRING(long ptr word) mciGetErrorString(1 2 3)
|
703 pascal MCIGETDEVICEID(ptr) mciSendCommand
|
||||||
#900 pascal MMTASKCREATE()
|
706 pascal MCIGETERRORSTRING(long ptr word) mciGetErrorString
|
||||||
#902 pascal MMTASKBLOCK()
|
#900 pascal MMTASKCREATE
|
||||||
#903 pascal MMTASKSIGNAL()
|
#902 pascal MMTASKBLOCK
|
||||||
#904 pascal MMGETCURRENTTASK()
|
#903 pascal MMTASKSIGNAL
|
||||||
#905 pascal MMTASKYIELD()
|
#904 pascal MMGETCURRENTTASK
|
||||||
1100 pascal DRVOPEN(ptr ptr long) DrvOpen(1 2 3)
|
#905 pascal MMTASKYIELD
|
||||||
1101 pascal DRVCLOSE(word long long) DrvClose(1 2 3)
|
1100 pascal DRVOPEN(ptr ptr long) DrvOpen
|
||||||
1102 pascal DRVSENDMESSAGE(word word long long) DrvSendMessage(1 2 3 4)
|
1101 pascal DRVCLOSE(word long long) DrvClose
|
||||||
1103 pascal DRVGETMODULEHANDLE(word) DrvGetModuleHandle(1)
|
1102 pascal DRVSENDMESSAGE(word word long long) DrvSendMessage
|
||||||
1104 pascal DRVDEFDRIVERPROC(long word word long long) DrvDefDriverProc(1 2 3 4 5)
|
1103 pascal DRVGETMODULEHANDLE(word) DrvGetModuleHandle
|
||||||
1210 pascal MMIOOPEN(ptr ptr long) mmioOpen(1 2 3)
|
1104 pascal DRVDEFDRIVERPROC(long word word long long) DrvDefDriverProc
|
||||||
1211 pascal MMIOCLOSE(word word) mmioClose(1 2)
|
1210 pascal MMIOOPEN(ptr ptr long) mmioOpen
|
||||||
1212 pascal MMIOREAD(word ptr long) mmioRead(1 2 3)
|
1211 pascal MMIOCLOSE(word word) mmioClose
|
||||||
1213 pascal MMIOWRITE(word ptr long) mmioWrite(1 2 3)
|
1212 pascal MMIOREAD(word ptr long) mmioRead
|
||||||
1214 pascal MMIOSEEK(word long word) mmioSeek(1 2 3)
|
1213 pascal MMIOWRITE(word ptr long) mmioWrite
|
||||||
1215 pascal MMIOGETINFO(word ptr word) mmioGetInfo(1 2 3)
|
1214 pascal MMIOSEEK(word long word) mmioSeek
|
||||||
1216 pascal MMIOSETINFO(word ptr word) mmioSetInfo(1 2 3)
|
1215 pascal MMIOGETINFO(word ptr word) mmioGetInfo
|
||||||
1217 pascal MMIOSETBUFFER(word ptr long word) mmioSetBuffer(1 2 3 4)
|
1216 pascal MMIOSETINFO(word ptr word) mmioSetInfo
|
||||||
1218 pascal MMIOFLUSH(word word) mmioFlush(1 2)
|
1217 pascal MMIOSETBUFFER(word ptr long word) mmioSetBuffer
|
||||||
1219 pascal MMIOADVANCE(word ptr word) mmioAdvance(1 2 3)
|
1218 pascal MMIOFLUSH(word word) mmioFlush
|
||||||
1220 pascal MMIOSTRINGTOFOURCC(ptr word) mmioStringToFOURCC(1 2)
|
1219 pascal MMIOADVANCE(word ptr word) mmioAdvance
|
||||||
1221 pascal MMIOINSTALLIOPROC(long ptr long) mmioInstallIOProc(1 2 3)
|
1220 pascal MMIOSTRINGTOFOURCC(ptr word) mmioStringToFOURCC
|
||||||
1222 pascal MMIOSENDMESSAGE(word word long long) mmioSendMessage(1 2 3 4)
|
1221 pascal MMIOINSTALLIOPROC(long ptr long) mmioInstallIOProc
|
||||||
1223 pascal MMIODESCEND(word ptr ptr word) mmioDescend(1 2 3 4)
|
1222 pascal MMIOSENDMESSAGE(word word long long) mmioSendMessage
|
||||||
1224 pascal MMIOASCEND(word ptr word) mmioAscend(1 2 3)
|
1223 pascal MMIODESCEND(word ptr ptr word) mmioDescend
|
||||||
1225 pascal MMIOCREATECHUNK(word ptr word) mmioCreateChunk(1 2 3)
|
1224 pascal MMIOASCEND(word ptr word) mmioAscend
|
||||||
1226 pascal MMIORENAME(ptr ptr ptr long) mmioRename(1 2 3 4)
|
1225 pascal MMIOCREATECHUNK(word ptr word) mmioCreateChunk
|
||||||
|
1226 pascal MMIORENAME(ptr ptr ptr long) mmioRename
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name mouse
|
name mouse
|
||||||
id 14
|
id 13
|
||||||
length 8
|
length 8
|
||||||
|
|
||||||
#1 pascal INQUIRE
|
#1 pascal INQUIRE
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name OLE2
|
name OLE2
|
||||||
id 16
|
id 15
|
||||||
length 161
|
length 161
|
||||||
|
|
||||||
#1 OLEBUILDVERSION
|
#1 OLEBUILDVERSION
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name ole2conv
|
name ole2conv
|
||||||
id 17
|
id 16
|
||||||
length 10
|
length 10
|
||||||
#1 GETFILTERINFO
|
#1 GETFILTERINFO
|
||||||
#2 IMPORTGR
|
#2 IMPORTGR
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name ole2disp
|
name ole2disp
|
||||||
id 18
|
id 17
|
||||||
length 110
|
length 110
|
||||||
#1 DLLGETCLASSOBJECT
|
#1 DLLGETCLASSOBJECT
|
||||||
#2 SYSALLOCSTRING
|
#2 SYSALLOCSTRING
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name ole2nls
|
name ole2nls
|
||||||
id 19
|
id 18
|
||||||
length 11
|
length 11
|
||||||
#1 GETUSERDEFAULTLCID
|
#1 GETUSERDEFAULTLCID
|
||||||
#2 GETSYSTEMDEFAULTLCID
|
#2 GETSYSTEMDEFAULTLCID
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name ole2prox
|
name ole2prox
|
||||||
id 20
|
id 19
|
||||||
length 3
|
length 3
|
||||||
#1 DLLGETCLASSOBJECT
|
#1 DLLGETCLASSOBJECT
|
||||||
#2 WEP
|
#2 WEP
|
||||||
|
|
|
@ -1,6 +1,9 @@
|
||||||
name olecli
|
name olecli
|
||||||
id 21
|
id 20
|
||||||
length 954
|
length 43
|
||||||
|
## 954 is too large for now
|
||||||
|
##length 954
|
||||||
|
|
||||||
#1 WEP
|
#1 WEP
|
||||||
#2 OLEDELETE
|
#2 OLEDELETE
|
||||||
#3 OLESAVETOSTREAM
|
#3 OLESAVETOSTREAM
|
||||||
|
@ -40,9 +43,9 @@ length 954
|
||||||
#38 OLECREATEFROMFILE
|
#38 OLECREATEFROMFILE
|
||||||
#39 OLECREATELINKFROMFILE
|
#39 OLECREATELINKFROMFILE
|
||||||
#40 OLERELEASE
|
#40 OLERELEASE
|
||||||
41 pascal OleRegisterClientDoc(ptr ptr long ptr) OleRegisterClientDoc(1 2 3 4)
|
41 pascal OleRegisterClientDoc(ptr ptr long ptr) OleRegisterClientDoc
|
||||||
42 pascal OleRevokeClientDoc(long) OleRevokeClientDoc(1)
|
42 pascal OleRevokeClientDoc(long) OleRevokeClientDoc
|
||||||
43 pascal OleRenameClientDoc(long ptr) OleRenameClientDoc(1 2)
|
43 pascal OleRenameClientDoc(long ptr) OleRenameClientDoc
|
||||||
#44 OLEREVERTCLIENTDOC
|
#44 OLEREVERTCLIENTDOC
|
||||||
#45 OLESAVEDCLIENTDOC
|
#45 OLESAVEDCLIENTDOC
|
||||||
#46 OLERENAME
|
#46 OLERENAME
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
name olesvr
|
name olesvr
|
||||||
id 22
|
id 21
|
||||||
length 31
|
length 31
|
||||||
#1 WEP
|
#1 WEP
|
||||||
2 pascal OleRegisterServer(ptr ptr ptr word word) OleRegisterServer(1 2 3 4 5)
|
2 pascal OleRegisterServer(ptr ptr ptr word word) OleRegisterServer
|
||||||
3 pascal OleRevokeServer(long) OleRevokeServer(1)
|
3 pascal OleRevokeServer(long) OleRevokeServer
|
||||||
4 pascal OleBlockServer(long) OleBlockServer(1)
|
4 pascal OleBlockServer(long) OleBlockServer
|
||||||
5 pascal OleUnblockServer(long ptr) OleUnblockServer(1 2)
|
5 pascal OleUnblockServer(long ptr) OleUnblockServer
|
||||||
6 pascal OleRegisterServerDoc(long ptr ptr ptr) OleRegisterServerDoc(1 2 3 4)
|
6 pascal OleRegisterServerDoc(long ptr ptr ptr) OleRegisterServerDoc
|
||||||
7 pascal OleRevokeServerDoc(long) OleRevokeServerDoc(1)
|
7 pascal OleRevokeServerDoc(long) OleRevokeServerDoc
|
||||||
#8 OLERENAMESERVERDOC
|
#8 OLERENAMESERVERDOC
|
||||||
#9 OLEREVERTSERVERDOC
|
#9 OLEREVERTSERVERDOC
|
||||||
#10 OLESAVEDSERVERDOC
|
#10 OLESAVEDSERVERDOC
|
||||||
|
|
170
if1632/relay.c
170
if1632/relay.c
|
@ -17,8 +17,9 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
||||||
#include <linux/ldt.h>
|
#include <linux/ldt.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#include "ldt.h"
|
||||||
|
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "prototypes.h"
|
#include "prototypes.h"
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
@ -45,25 +46,26 @@ struct dll_name_table_entry_s dll_builtin_table[N_BUILTINS] =
|
||||||
{ "KERNEL", WineLibSkip(KERNEL_table), 410, 1, 1 },
|
{ "KERNEL", WineLibSkip(KERNEL_table), 410, 1, 1 },
|
||||||
{ "USER", WineLibSkip(USER_table), 540, 2, 1 },
|
{ "USER", WineLibSkip(USER_table), 540, 2, 1 },
|
||||||
{ "GDI", WineLibSkip(GDI_table), 490, 3, 1 },
|
{ "GDI", WineLibSkip(GDI_table), 490, 3, 1 },
|
||||||
{ "UNIXLIB", WineLibSkip(UNIXLIB_table), 10, 4, 1 },
|
{ "WIN87EM", WineLibSkip(WIN87EM_table), 10, 4, 1 },
|
||||||
{ "WIN87EM", WineLibSkip(WIN87EM_table), 10, 5, 1 },
|
{ "SHELL", WineLibSkip(SHELL_table), 103, 5, 1 },
|
||||||
{ "SHELL", WineLibSkip(SHELL_table), 103, 6, 1 },
|
{ "SOUND", WineLibSkip(SOUND_table), 20, 6, 1 },
|
||||||
{ "SOUND", WineLibSkip(SOUND_table), 20, 7, 1 },
|
{ "KEYBOARD",WineLibSkip(KEYBOARD_table),137, 7, 1 },
|
||||||
{ "KEYBOARD",WineLibSkip(KEYBOARD_table),137, 8, 1 },
|
{ "WINSOCK", WineLibSkip(WINSOCK_table), 155, 8, 1 },
|
||||||
{ "WINSOCK", WineLibSkip(WINSOCK_table), 155, 9, 1 },
|
{ "STRESS", WineLibSkip(STRESS_table), 15, 9, 1},
|
||||||
{ "STRESS", WineLibSkip(STRESS_table), 15, 10, 1},
|
{ "MMSYSTEM",WineLibSkip(MMSYSTEM_table),1226,10, 1},
|
||||||
{ "MMSYSTEM",WineLibSkip(MMSYSTEM_table),1226,11, 1},
|
{ "SYSTEM", WineLibSkip(SYSTEM_table), 20 ,11, 1},
|
||||||
{ "SYSTEM", WineLibSkip(SYSTEM_table), 20 ,12, 1},
|
{ "TOOLHELP",WineLibSkip(TOOLHELP_table), 83, 12, 1},
|
||||||
{ "TOOLHELP",WineLibSkip(TOOLHELP_table), 83, 13, 1},
|
{ "MOUSE", WineLibSkip(MOUSE_table), 8, 13, 1},
|
||||||
{ "MOUSE", WineLibSkip(MOUSE_table), 8, 14, 1},
|
{ "COMMDLG", WineLibSkip(COMMDLG_table), 31, 14, 1},
|
||||||
{ "COMMDLG", WineLibSkip(COMMDLG_table), 31, 15, 1},
|
{ "OLE2", WineLibSkip(OLE2_table), 31, 15, 1},
|
||||||
{ "OLE2", WineLibSkip(OLE2_table), 31, 16, 1},
|
{ "OLE2CONV",WineLibSkip(OLE2CONV_table), 31, 16, 1},
|
||||||
{ "OLE2CONV",WineLibSkip(OLE2CONV_table), 31, 17, 1},
|
{ "OLE2DISP",WineLibSkip(OLE2DISP_table), 31, 17, 1},
|
||||||
{ "OLE2DISP",WineLibSkip(OLE2DISP_table), 31, 18, 1},
|
{ "OLE2NLS", WineLibSkip(OLE2NLS_table), 31, 18, 1},
|
||||||
{ "OLE2NLS", WineLibSkip(OLE2NLS_table), 31, 19, 1},
|
{ "OLE2PROX",WineLibSkip(OLE2PROX_table), 31, 19, 1},
|
||||||
{ "OLE2PROX",WineLibSkip(OLE2PROX_table), 31, 20, 1},
|
{ "OLECLI", WineLibSkip(OLECLI_table), 31, 20, 1},
|
||||||
{ "OLECLI", WineLibSkip(OLECLI_table), 31, 21, 1},
|
{ "OLESVR", WineLibSkip(OLESVR_table), 31, 21, 1},
|
||||||
{ "OLESVR", WineLibSkip(OLESVR_table), 31, 22, 1},
|
{ "COMPOBJ", WineLibSkip(COMPOBJ_table), 31, 22, 1},
|
||||||
|
{ "STORAGE", WineLibSkip(STORAGE_table), 31, 23, 1}
|
||||||
};
|
};
|
||||||
/* don't forget to increase N_BUILTINS in dll.h if you add a dll */
|
/* don't forget to increase N_BUILTINS in dll.h if you add a dll */
|
||||||
|
|
||||||
|
@ -72,38 +74,53 @@ struct dll_conversions {
|
||||||
unsigned short *dst_args; /* Offsets to arguments on stack */
|
unsigned short *dst_args; /* Offsets to arguments on stack */
|
||||||
unsigned char *src_types; /* Argument types */
|
unsigned char *src_types; /* Argument types */
|
||||||
} dll_conversion_table[N_BUILTINS]= {
|
} dll_conversion_table[N_BUILTINS]= {
|
||||||
KERNEL_offsets, KERNEL_types, /* KERNEL */
|
{ KERNEL_offsets, KERNEL_types }, /* KERNEL */
|
||||||
USER_offsets, USER_types, /* USER */
|
{ USER_offsets, USER_types }, /* USER */
|
||||||
GDI_offsets, GDI_types, /* GDI */
|
{ GDI_offsets, GDI_types }, /* GDI */
|
||||||
UNIXLIB_offsets, UNIXLIB_types, /* UNIXLIB */
|
{ WIN87EM_offsets, WIN87EM_types }, /* WIN87EM */
|
||||||
WIN87EM_offsets, WIN87EM_types, /* WIN87EM */
|
{ SHELL_offsets, SHELL_types }, /* SHELL */
|
||||||
SHELL_offsets, SHELL_types, /* SHELL */
|
{ SOUND_offsets, SOUND_types }, /* SOUND */
|
||||||
SOUND_offsets, SOUND_types, /* SOUND */
|
{ KEYBOARD_offsets, KEYBOARD_types }, /* KEYBOARD */
|
||||||
KEYBOARD_offsets, KEYBOARD_types, /* KEYBOARD */
|
{ WINSOCK_offsets, WINSOCK_types }, /* WINSOCK */
|
||||||
WINSOCK_offsets, WINSOCK_types, /* WINSOCK */
|
{ STRESS_offsets, STRESS_types }, /* STRESS, */
|
||||||
STRESS_offsets, STRESS_types, /* STRESS, */
|
{ MMSYSTEM_offsets, MMSYSTEM_types }, /* MMSYSTEM */
|
||||||
MMSYSTEM_offsets, MMSYSTEM_types, /* MMSYSTEM */
|
{ SYSTEM_offsets, SYSTEM_types }, /* SYSTEM */
|
||||||
SYSTEM_offsets, SYSTEM_types, /* SYSTEM */
|
{ TOOLHELP_offsets, TOOLHELP_types }, /* TOOLHELP */
|
||||||
TOOLHELP_offsets, TOOLHELP_types, /* TOOLHELP */
|
{ MOUSE_offsets, MOUSE_types }, /* MOUSE */
|
||||||
MOUSE_offsets, MOUSE_types, /* MOUSE */
|
{ COMMDLG_offsets, COMMDLG_types }, /* EMUCOMMDLG */
|
||||||
COMMDLG_offsets, COMMDLG_types, /* EMUCOMMDLG */
|
{ OLE2_offsets, OLE2_types }, /* OLE2 */
|
||||||
OLE2_offsets, OLE2_types, /* OLE2 */
|
{ OLE2CONV_offsets, OLE2CONV_types }, /* OLE2CONV */
|
||||||
OLE2CONV_offsets, OLE2CONV_types, /* OLE2CONV */
|
{ OLE2DISP_offsets, OLE2DISP_types }, /* OLE2DISP */
|
||||||
OLE2DISP_offsets, OLE2DISP_types, /* OLE2DISP */
|
{ OLE2NLS_offsets, OLE2NLS_types }, /* OLE2NLS */
|
||||||
OLE2NLS_offsets, OLE2NLS_types, /* OLE2NLS */
|
{ OLE2DISP_offsets, OLE2DISP_types }, /* OLE2PROX */
|
||||||
OLE2DISP_offsets, OLE2DISP_types, /* OLE2PROX */
|
{ OLECLI_offsets, OLECLI_types }, /* OLE2CLI */
|
||||||
OLECLI_offsets, OLECLI_types, /* OLE2CLI */
|
{ OLESVR_offsets, OLESVR_types }, /* OLE2CLI */
|
||||||
OLESVR_offsets, OLESVR_types /* OLE2CLI */
|
{ COMPOBJ_offsets, COMPOBJ_types }, /* COMPOBJ */
|
||||||
|
{ STORAGE_offsets, STORAGE_types } /* STORAGE */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
#ifndef WINELIB
|
#ifndef WINELIB
|
||||||
STACK16FRAME *pStack16Frame;
|
|
||||||
|
|
||||||
extern unsigned short IF1632_Saved16_sp;
|
extern unsigned short IF1632_Saved16_sp;
|
||||||
extern unsigned short IF1632_Saved16_bp;
|
extern unsigned short IF1632_Saved16_bp;
|
||||||
extern unsigned short IF1632_Saved16_ss;
|
extern unsigned short IF1632_Saved16_ss;
|
||||||
|
|
||||||
|
void RelayDebug( unsigned int func_num )
|
||||||
|
{
|
||||||
|
unsigned int dll_id, ordinal;
|
||||||
|
|
||||||
|
if (debugging_relay)
|
||||||
|
{
|
||||||
|
dll_id = ((func_num >> 16) & 0xffff) - 1;
|
||||||
|
ordinal = func_num & 0xffff;
|
||||||
|
printf( "Calling %s.%d\n",
|
||||||
|
dll_builtin_table[dll_id].dll_table[ordinal].export_name,
|
||||||
|
ordinal );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* DLLRelay
|
* DLLRelay
|
||||||
*
|
*
|
||||||
|
@ -126,7 +143,7 @@ int
|
||||||
DLLRelay(unsigned int func_num, unsigned int seg_off)
|
DLLRelay(unsigned int func_num, unsigned int seg_off)
|
||||||
{
|
{
|
||||||
struct dll_table_entry_s *dll_p;
|
struct dll_table_entry_s *dll_p;
|
||||||
STACK16FRAME *pOldStack16Frame;
|
STACK16FRAME *pStack16Frame;
|
||||||
unsigned int offset;
|
unsigned int offset;
|
||||||
unsigned int dll_id;
|
unsigned int dll_id;
|
||||||
unsigned int ordinal;
|
unsigned int ordinal;
|
||||||
|
@ -138,12 +155,12 @@ DLLRelay(unsigned int func_num, unsigned int seg_off)
|
||||||
int conv_ref;
|
int conv_ref;
|
||||||
unsigned char *type_conv;
|
unsigned char *type_conv;
|
||||||
unsigned short *offset_conv;
|
unsigned short *offset_conv;
|
||||||
|
STACK16FRAME stackFrameCopy;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Determine address of arguments.
|
* Determine address of arguments.
|
||||||
*/
|
*/
|
||||||
pOldStack16Frame = pStack16Frame;
|
pStack16Frame = (STACK16FRAME *) PTR_SEG_TO_LIN(seg_off);
|
||||||
pStack16Frame = (STACK16FRAME *) seg_off;
|
|
||||||
arg_ptr = (void *)pStack16Frame->args;
|
arg_ptr = (void *)pStack16Frame->args;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -153,31 +170,27 @@ DLLRelay(unsigned int func_num, unsigned int seg_off)
|
||||||
ordinal = func_num & 0xffff;
|
ordinal = func_num & 0xffff;
|
||||||
dll_p = &dll_builtin_table[dll_id].dll_table[ordinal];
|
dll_p = &dll_builtin_table[dll_id].dll_table[ordinal];
|
||||||
|
|
||||||
if (debugging_relay)
|
dprintf_relay( stddeb, "Call %s (%s.%d), stack=%04x:%04x ret=%04x:%04x ds=%04x bp=%04x args=%d\n",
|
||||||
{
|
dll_p->export_name,
|
||||||
printf( "Call %s (%s.%d), stack=%04x:%04x, ret=%04x:%04x",
|
dll_builtin_table[dll_id].dll_name, ordinal,
|
||||||
dll_p->export_name,
|
seg_off >> 16, seg_off & 0xffff,
|
||||||
dll_builtin_table[dll_id].dll_name, ordinal,
|
pStack16Frame->cs, pStack16Frame->ip,
|
||||||
seg_off >> 16, seg_off & 0xffff,
|
pStack16Frame->ds, pStack16Frame->bp,
|
||||||
pStack16Frame->cs, pStack16Frame->ip );
|
pStack16Frame->arg_length );
|
||||||
printf(" bp=%04x ds=%04x args=%d\n",
|
|
||||||
pStack16Frame->bp, pStack16Frame->ds,
|
|
||||||
pStack16Frame->arg_length );
|
|
||||||
|
|
||||||
if(debugging_stack)
|
if(debugging_stack)
|
||||||
|
{
|
||||||
|
unsigned short *stack_p = (unsigned short *) pStack16Frame;
|
||||||
|
/* FIXME: Is there an end-of-stack-pointer somewhere ? */
|
||||||
|
int n = min(24, (0x10000 - (seg_off & 0xffff)) / sizeof(*stack_p));
|
||||||
|
for (i = 0; i < n; i++, stack_p++)
|
||||||
{
|
{
|
||||||
unsigned short *stack_p = (unsigned short *) seg_off;
|
printf("%04x ", *stack_p);
|
||||||
/* FIXME: Is there an end-of-stack-pointer somewhere ? */
|
if ((i & 7) == 7)
|
||||||
int n = min(24, (0x10000 - (seg_off & 0xffff)) / sizeof(*stack_p));
|
printf("\n");
|
||||||
for (i = 0; i < n; i++, stack_p++)
|
}
|
||||||
{
|
printf("\n");
|
||||||
printf("%04x ", *stack_p);
|
}
|
||||||
if ((i & 7) == 7)
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
printf("\n");
|
|
||||||
}
|
|
||||||
} /* DEBUG_RELAY */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Make sure we have a handler defined for this call.
|
* Make sure we have a handler defined for this call.
|
||||||
|
@ -202,7 +215,10 @@ DLLRelay(unsigned int func_num, unsigned int seg_off)
|
||||||
if (dll_p->n_args == 0)
|
if (dll_p->n_args == 0)
|
||||||
{
|
{
|
||||||
ret_val = (*func_ptr)(arg_ptr);
|
ret_val = (*func_ptr)(arg_ptr);
|
||||||
pStack16Frame = pOldStack16Frame;
|
dprintf_relay( stddeb, "Returning %08x from %s (%s.%d) ds=%04x\n",
|
||||||
|
ret_val, dll_p->export_name,
|
||||||
|
dll_builtin_table[dll_id].dll_name, ordinal,
|
||||||
|
pStack16Frame->ds );
|
||||||
return ret_val;
|
return ret_val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -238,14 +254,14 @@ DLLRelay(unsigned int func_num, unsigned int seg_off)
|
||||||
|
|
||||||
case DLL_ARGTYPE_FARPTR:
|
case DLL_ARGTYPE_FARPTR:
|
||||||
ip = (int *) ((char *) arg_ptr + offset);
|
ip = (int *) ((char *) arg_ptr + offset);
|
||||||
if (*ip & 0xffff0000)
|
arg_table[i] = (unsigned int) PTR_SEG_TO_LIN( *ip );
|
||||||
arg_table[i] = FIXPTR(*ip);
|
|
||||||
else
|
|
||||||
arg_table[i] = *ip;
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (debugging_relay)
|
||||||
|
memcpy( &stackFrameCopy, pStack16Frame, sizeof(stackFrameCopy) );
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Call the handler
|
* Call the handler
|
||||||
*/
|
*/
|
||||||
|
@ -256,10 +272,12 @@ DLLRelay(unsigned int func_num, unsigned int seg_off)
|
||||||
arg_table[12], arg_table[13], arg_table[14],
|
arg_table[12], arg_table[13], arg_table[14],
|
||||||
arg_table[15]);
|
arg_table[15]);
|
||||||
|
|
||||||
pStack16Frame = pOldStack16Frame;
|
|
||||||
|
|
||||||
if (debugging_relay)
|
if (debugging_relay)
|
||||||
{
|
{
|
||||||
|
if (memcmp( &stackFrameCopy, pStack16Frame, sizeof(stackFrameCopy) ))
|
||||||
|
{
|
||||||
|
printf( "**** 16-bit stack corrupted!\n" );
|
||||||
|
}
|
||||||
printf("Returning %08x from %s (%s.%d) ds=%04x\n",
|
printf("Returning %08x from %s (%s.%d) ds=%04x\n",
|
||||||
ret_val,
|
ret_val,
|
||||||
dll_p->export_name,
|
dll_p->export_name,
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
# $Id: shell.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
# $Id: shell.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
||||||
#
|
#
|
||||||
name shell
|
name shell
|
||||||
id 6
|
id 5
|
||||||
length 103
|
length 103
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -9,24 +9,24 @@ length 103
|
||||||
# proper parameters. It's just to have stub for PROGMAN.EXE ...
|
# proper parameters. It's just to have stub for PROGMAN.EXE ...
|
||||||
#
|
#
|
||||||
|
|
||||||
1 pascal RegOpenKey(word ptr ptr) RegOpenKey(1 2 3)
|
1 pascal RegOpenKey(word ptr ptr) RegOpenKey
|
||||||
2 pascal RegCreateKey(word ptr ptr) RegCreateKey(1 2 3)
|
2 pascal RegCreateKey(word ptr ptr) RegCreateKey
|
||||||
3 pascal RegCloseKey(word) RegCloseKey(1)
|
3 pascal RegCloseKey(word) RegCloseKey
|
||||||
4 pascal RegDeleteKey(word ptr) RegDeleteKey(1 2)
|
4 pascal RegDeleteKey(word ptr) RegDeleteKey
|
||||||
5 pascal RegSetValue(word ptr long ptr long) RegSetValue(1 2 3 4 5)
|
5 pascal RegSetValue(word ptr long ptr long) RegSetValue
|
||||||
6 pascal RegQueryValue(word ptr ptr ptr) RegQueryValue(1 2 3 4)
|
6 pascal RegQueryValue(word ptr ptr ptr) RegQueryValue
|
||||||
7 pascal RegEnumKey(word long ptr long) RegEnumKey(1 2 3 4)
|
7 pascal RegEnumKey(word long ptr long) RegEnumKey
|
||||||
9 pascal DragAcceptFiles(word word) DragAcceptFiles(1 2)
|
9 pascal DragAcceptFiles(word word) DragAcceptFiles
|
||||||
11 pascal DragQueryFile(word s_word ptr s_word) DragQueryFile(1 2 3 4)
|
11 pascal DragQueryFile(word s_word ptr s_word) DragQueryFile
|
||||||
12 pascal DragFinish(word) DragFinish(1)
|
12 pascal DragFinish(word) DragFinish
|
||||||
13 pascal DragQueryPoint(word ptr) DragQueryPoint(1 2)
|
13 pascal DragQueryPoint(word ptr) DragQueryPoint
|
||||||
20 pascal ShellExecute(word ptr ptr ptr ptr s_word) ShellExecute(1 2 3 4 5 6)
|
20 pascal ShellExecute(word ptr ptr ptr ptr s_word) ShellExecute
|
||||||
21 pascal FindExecutable(ptr ptr ptr) FindExecutable(1 2 3)
|
21 pascal FindExecutable(ptr ptr ptr) FindExecutable
|
||||||
22 pascal ShellAbout(word ptr ptr word) ShellAbout(1 2 3 4)
|
22 pascal ShellAbout(word ptr ptr word) ShellAbout
|
||||||
33 pascal AboutDlgProc(word word word long) AboutDlgProc(1 2 3 4)
|
33 pascal AboutDlgProc(word word word long) AboutDlgProc
|
||||||
34 pascal ExtractIcon(word ptr s_word) ExtractIcon(1 2 3)
|
34 pascal ExtractIcon(word ptr s_word) ExtractIcon
|
||||||
102 pascal RegisterShellHook(ptr) RegisterShellHook(1)
|
102 pascal RegisterShellHook(ptr) RegisterShellHook
|
||||||
103 pascal ShellHookProc() ShellHookProc()
|
103 pascal ShellHookProc() ShellHookProc
|
||||||
|
|
||||||
# 8 7 0000 WEP exported, shared data
|
# 8 7 0000 WEP exported, shared data
|
||||||
#100 4 0550 HERETHARBETYGARS exported, shared data
|
#100 4 0550 HERETHARBETYGARS exported, shared data
|
||||||
|
|
|
@ -1,24 +1,24 @@
|
||||||
# $Id: sound.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
# $Id: sound.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
||||||
#
|
#
|
||||||
name sound
|
name sound
|
||||||
id 7
|
id 6
|
||||||
length 20
|
length 20
|
||||||
|
|
||||||
1 pascal OPENSOUND() OpenSound()
|
1 pascal OPENSOUND() OpenSound
|
||||||
2 pascal CLOSESOUND() CloseSound()
|
2 pascal CLOSESOUND() CloseSound
|
||||||
3 pascal SETVOICEQUEUESIZE(word word) SetVoiceQueueSize(1 2)
|
3 pascal SETVOICEQUEUESIZE(word word) SetVoiceQueueSize
|
||||||
4 pascal SETVOICENOTE(word word word word) SetVoiceNote(1 2 3 4)
|
4 pascal SETVOICENOTE(word word word word) SetVoiceNote
|
||||||
5 pascal SETVOICEACCENT(word word word word word)
|
5 pascal SETVOICEACCENT(word word word word word)
|
||||||
SetVoiceAccent(1 2 3 4 5)
|
SetVoiceAccent
|
||||||
6 pascal SETVOICEENVELOPE(word word word) SetVoiceEnvelope(1 2 3)
|
6 pascal SETVOICEENVELOPE(word word word) SetVoiceEnvelope
|
||||||
7 pascal SETSOUNDNOISE(word word) SetSoundNoise(1 2)
|
7 pascal SETSOUNDNOISE(word word) SetSoundNoise
|
||||||
8 pascal SETVOICESOUND(word long word) SetVoiceSound(1 2 3)
|
8 pascal SETVOICESOUND(word long word) SetVoiceSound
|
||||||
9 pascal STARTSOUND() StartSound()
|
9 pascal STARTSOUND() StartSound
|
||||||
10 pascal STOPSOUND() StopSound()
|
10 pascal STOPSOUND() StopSound
|
||||||
11 pascal WAITSOUNDSTATE(word) WaitSoundState(1)
|
11 pascal WAITSOUNDSTATE(word) WaitSoundState
|
||||||
12 pascal SYNCALLVOICES() SyncAllVoices()
|
12 pascal SYNCALLVOICES() SyncAllVoices
|
||||||
13 pascal COUNTVOICENOTES(word) CountVoiceNotes(1)
|
13 pascal COUNTVOICENOTES(word) CountVoiceNotes
|
||||||
14 pascal GETTHRESHOLDEVENT() GetThresholdEvent()
|
14 pascal GETTHRESHOLDEVENT() GetThresholdEvent
|
||||||
15 pascal GETTHRESHOLDSTATUS() GetThresholdStatus()
|
15 pascal GETTHRESHOLDSTATUS() GetThresholdStatus
|
||||||
16 pascal SETVOICETHRESHOLD(word word) SetVoiceThreshold(1 2)
|
16 pascal SETVOICETHRESHOLD(word word) SetVoiceThreshold
|
||||||
17 pascal DOBEEP() DoBeep()
|
17 pascal DOBEEP() DoBeep
|
||||||
|
|
14
if1632/storage.spec
Normal file
14
if1632/storage.spec
Normal file
|
@ -0,0 +1,14 @@
|
||||||
|
name storage
|
||||||
|
id 23
|
||||||
|
length 104
|
||||||
|
|
||||||
|
#1 STGCREATEDOCFILE
|
||||||
|
#2 STGCREATEDOCFILEONILOCKBYTES
|
||||||
|
#3 STGOPENSTORAGE
|
||||||
|
#4 STGOPENSTORAGEONILOCKBYTES
|
||||||
|
#5 STGISSTORAGEFILE
|
||||||
|
#6 STGISSTORAGEILOCKBYTES
|
||||||
|
#7 STGSETTIMES
|
||||||
|
#8 WEP
|
||||||
|
#9 ___EXPORTEDSTUB
|
||||||
|
#103 DLLGETCLASSOBJECT
|
|
@ -1,18 +1,18 @@
|
||||||
# summary: resource modification dll
|
# summary: resource modification dll
|
||||||
#
|
#
|
||||||
name stress
|
name stress
|
||||||
id 10
|
id 9
|
||||||
length 15
|
length 15
|
||||||
|
|
||||||
2 pascal allocmem(long) AllocMem(1)
|
2 pascal allocmem(long) AllocMem
|
||||||
3 pascal freeallmem() FreeAllMem()
|
3 pascal freeallmem() FreeAllMem
|
||||||
6 pascal allocfilehandles(word) AllocFileHandles(1)
|
6 pascal allocfilehandles(word) AllocFileHandles
|
||||||
7 pascal unallocfilehandles() UnAllocFileHandles()
|
7 pascal unallocfilehandles() UnAllocFileHandles
|
||||||
8 pascal getfreefilehandles() GetFreeFileHandles()
|
8 pascal getfreefilehandles() GetFreeFileHandles
|
||||||
10 pascal allocdiskspace(long word) AllocDiskSpace(1 2)
|
10 pascal allocdiskspace(long word) AllocDiskSpace
|
||||||
11 pascal unallocdiskspace(word) UnAllocDiskSpace(1)
|
11 pascal unallocdiskspace(word) UnAllocDiskSpace
|
||||||
12 pascal allocusermem(word) AllocUserMem(1)
|
12 pascal allocusermem(word) AllocUserMem
|
||||||
13 pascal freeallusermem() FreeAllUserMem()
|
13 pascal freeallusermem() FreeAllUserMem
|
||||||
14 pascal allocgdimem(word) AllocGDIMem(1)
|
14 pascal allocgdimem(word) AllocGDIMem
|
||||||
15 pascal freeallgdimem() FreeAllGDIMem()
|
15 pascal freeallgdimem() FreeAllGDIMem
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
name system
|
name system
|
||||||
id 12
|
id 11
|
||||||
length 20
|
length 20
|
||||||
|
|
||||||
6 pascal GetSystemmsecCount() GetTickCount()
|
6 pascal GetSystemmsecCount() GetTickCount
|
||||||
|
|
|
@ -1,37 +1,37 @@
|
||||||
name toolhelp
|
name toolhelp
|
||||||
id 13
|
id 12
|
||||||
length 83
|
length 83
|
||||||
|
|
||||||
# 50 1 057b GLOBALHANDLETOSEL exported, shared data
|
50 pascal16 GlobalHandleToSel(word) GlobalHandleToSel
|
||||||
# 51 1 0318 GLOBALFIRST exported, shared data
|
# 51 1 0318 GLOBALFIRST exported, shared data
|
||||||
# 52 1 0399 GLOBALNEXT exported, shared data
|
# 52 1 0399 GLOBALNEXT exported, shared data
|
||||||
# 53 1 02a2 GLOBALINFO exported, shared data
|
# 53 1 02a2 GLOBALINFO exported, shared data
|
||||||
# 54 1 0417 GLOBALENTRYHANDLE exported, shared data
|
# 54 1 0417 GLOBALENTRYHANDLE exported, shared data
|
||||||
# 55 1 04a9 GLOBALENTRYMODULE exported, shared data
|
# 55 1 04a9 GLOBALENTRYMODULE exported, shared data
|
||||||
# 56 1 090e LOCALINFO exported, shared data
|
56 pascal16 LocalInfo(ptr word) LocalInfo
|
||||||
# 57 1 095e LOCALFIRST exported, shared data
|
57 pascal16 LocalFirst(ptr word) LocalFirst
|
||||||
# 58 1 09e9 LOCALNEXT exported, shared data
|
58 pascal16 LocalNext(ptr) LocalNext
|
||||||
59 pascal ModuleFirst(ptr) ModuleFirst(1)
|
59 pascal16 ModuleFirst(ptr) ModuleFirst
|
||||||
60 pascal ModuleNext(ptr) ModuleNext(1)
|
60 pascal16 ModuleNext(ptr) ModuleNext
|
||||||
61 pascal ModuleFindName(ptr ptr) ModuleFindName(1 2)
|
61 pascal16 ModuleFindName(ptr ptr) ModuleFindName
|
||||||
62 pascal ModuleFindHandle(ptr word) ModuleFindHandle(1 2)
|
62 pascal16 ModuleFindHandle(ptr word) ModuleFindHandle
|
||||||
63 pascal16 TaskFirst(ptr) TaskFirst(1)
|
63 pascal16 TaskFirst(ptr) TaskFirst
|
||||||
64 pascal16 TaskNext(ptr) TaskNext(1)
|
64 pascal16 TaskNext(ptr) TaskNext
|
||||||
65 pascal16 TaskFindHandle(ptr word) TaskFindHandle(1 2)
|
65 pascal16 TaskFindHandle(ptr word) TaskFindHandle
|
||||||
# 66 1 0f1c STACKTRACEFIRST exported, shared data
|
# 66 1 0f1c STACKTRACEFIRST exported, shared data
|
||||||
# 67 1 0f67 STACKTRACECSIPFIRST exported, shared data
|
# 67 1 0f67 STACKTRACECSIPFIRST exported, shared data
|
||||||
# 68 1 0fca STACKTRACENEXT exported, shared data
|
# 68 1 0fca STACKTRACENEXT exported, shared data
|
||||||
# 69 1 28b0 CLASSFIRST exported, shared data
|
69 pascal16 ClassFirst(ptr) ClassFirst
|
||||||
# 70 1 2925 CLASSNEXT exported, shared data
|
70 pascal16 ClassNext(ptr) ClassNext
|
||||||
# 71 1 11ce SYSTEMHEAPINFO exported, shared data
|
71 pascal16 SystemHeapInfo(ptr) SystemHeapInfo
|
||||||
72 pascal16 MemManInfo(ptr) MemManInfo(1)
|
#72 pascal16 MemManInfo(ptr) MemManInfo
|
||||||
# 73 1 1b72 NOTIFYREGISTER exported, shared data
|
# 73 1 1b72 NOTIFYREGISTER exported, shared data
|
||||||
# 74 1 1c29 NOTIFYUNREGISTER exported, shared data
|
# 74 1 1c29 NOTIFYUNREGISTER exported, shared data
|
||||||
# 75 1 2060 INTERRUPTREGISTER exported, shared data
|
# 75 1 2060 INTERRUPTREGISTER exported, shared data
|
||||||
# 76 1 2111 INTERRUPTUNREGISTER exported, shared data
|
# 76 1 2111 INTERRUPTUNREGISTER exported, shared data
|
||||||
# 77 1 26ea TERMINATEAPP exported, shared data
|
# 77 1 26ea TERMINATEAPP exported, shared data
|
||||||
# 78 1 29c4 MEMORYREAD exported, shared data
|
78 pascal MemoryRead(word long ptr long) MemoryRead
|
||||||
# 79 1 2b6c MEMORYWRITE exported, shared data
|
79 pascal MemoryWrite(word long ptr long) MemoryWrite
|
||||||
# 80 1 2dae TIMERCOUNT exported, shared data
|
# 80 1 2dae TIMERCOUNT exported, shared data
|
||||||
# 81 1 0d68 TASKSETCSIP exported, shared data
|
# 81 1 0d68 TASKSETCSIP exported, shared data
|
||||||
# 82 1 0d97 TASKGETCSIP exported, shared data
|
# 82 1 0d97 TASKGETCSIP exported, shared data
|
||||||
|
|
|
@ -1,7 +0,0 @@
|
||||||
# $Id: unixlib.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
|
||||||
#
|
|
||||||
name unixlib
|
|
||||||
id 4
|
|
||||||
length 10
|
|
||||||
|
|
||||||
1 c _DebugPrintString(ptr) DebugPrintString(1)
|
|
673
if1632/user.spec
673
if1632/user.spec
|
@ -4,406 +4,393 @@ name user
|
||||||
id 2
|
id 2
|
||||||
length 540
|
length 540
|
||||||
|
|
||||||
1 pascal MessageBox(word ptr ptr word) MessageBox(1 2 3 4)
|
1 pascal MessageBox(word ptr ptr word) MessageBox
|
||||||
#2 OLDEXITWINDOWS
|
#2 OLDEXITWINDOWS
|
||||||
#3 ENABLEOEMLAYER
|
#3 ENABLEOEMLAYER
|
||||||
#4 DISABLEOEMLAYER
|
#4 DISABLEOEMLAYER
|
||||||
5 pascal InitApp(word) USER_InitApp(1)
|
5 pascal InitApp(word) USER_InitApp
|
||||||
6 pascal PostQuitMessage(word) PostQuitMessage(1)
|
6 pascal PostQuitMessage(word) PostQuitMessage
|
||||||
7 pascal ExitWindows(long word) ExitWindows(1 2)
|
7 pascal ExitWindows(long word) ExitWindows
|
||||||
10 pascal SetTimer(word word word ptr) SetTimer(1 2 3 4)
|
10 pascal SetTimer(word word word segptr) SetTimer
|
||||||
11 pascal SetSystemTimer(word word word ptr) SetSystemTimer(1 2 3 4)
|
11 pascal SetSystemTimer(word word word segptr) SetSystemTimer
|
||||||
12 pascal KillTimer(word word) KillTimer(1 2)
|
12 pascal KillTimer(word word) KillTimer
|
||||||
13 pascal GetTickCount() GetTickCount()
|
13 pascal GetTickCount() GetTickCount
|
||||||
14 pascal GetTimerResolution() GetTimerResolution()
|
14 pascal GetTimerResolution() GetTimerResolution
|
||||||
15 pascal GetCurrentTime() GetTickCount()
|
15 pascal GetCurrentTime() GetTickCount
|
||||||
16 pascal ClipCursor(ptr) ClipCursor(1)
|
16 pascal ClipCursor(ptr) ClipCursor
|
||||||
17 pascal GetCursorPos(ptr) GetCursorPos(1)
|
17 pascal GetCursorPos(ptr) GetCursorPos
|
||||||
18 pascal SetCapture(word) SetCapture(1)
|
18 pascal SetCapture(word) SetCapture
|
||||||
19 pascal ReleaseCapture() ReleaseCapture()
|
19 pascal ReleaseCapture() ReleaseCapture
|
||||||
20 pascal SetDoubleClickTime(word) SetDoubleClickTime(1)
|
20 pascal SetDoubleClickTime(word) SetDoubleClickTime
|
||||||
21 pascal GetDoubleClickTime() GetDoubleClickTime()
|
21 pascal GetDoubleClickTime() GetDoubleClickTime
|
||||||
22 pascal SetFocus(word) SetFocus(1)
|
22 pascal SetFocus(word) SetFocus
|
||||||
23 pascal GetFocus() GetFocus()
|
23 pascal GetFocus() GetFocus
|
||||||
24 pascal RemoveProp(word ptr) RemoveProp(1 2)
|
24 pascal RemoveProp(word ptr) RemoveProp
|
||||||
25 pascal GetProp(word ptr) GetProp(1 2)
|
25 pascal GetProp(word ptr) GetProp
|
||||||
26 pascal SetProp(word ptr word) SetProp(1 2 3)
|
26 pascal SetProp(word ptr word) SetProp
|
||||||
27 pascal EnumProps(word ptr) EnumProps(1 2)
|
27 pascal EnumProps(word ptr) EnumProps
|
||||||
28 pascal ClientToScreen(word ptr) ClientToScreen(1 2)
|
28 pascal ClientToScreen(word ptr) ClientToScreen
|
||||||
29 pascal ScreenToClient(word ptr) ScreenToClient(1 2)
|
29 pascal ScreenToClient(word ptr) ScreenToClient
|
||||||
30 pascal WindowFromPoint(long) WindowFromPoint(1)
|
30 pascal WindowFromPoint(long) WindowFromPoint
|
||||||
31 pascal IsIconic(word) IsIconic(1)
|
31 pascal IsIconic(word) IsIconic
|
||||||
32 pascal GetWindowRect(word ptr) GetWindowRect(1 2)
|
32 pascal GetWindowRect(word ptr) GetWindowRect
|
||||||
33 pascal GetClientRect(word ptr) GetClientRect(1 2)
|
33 pascal GetClientRect(word ptr) GetClientRect
|
||||||
34 pascal EnableWindow(word word) EnableWindow(1 2)
|
34 pascal EnableWindow(word word) EnableWindow
|
||||||
35 pascal IsWindowEnabled(word) IsWindowEnabled(1)
|
35 pascal IsWindowEnabled(word) IsWindowEnabled
|
||||||
36 pascal GetWindowText(word ptr word) GetWindowText(1 2 3)
|
36 pascal GetWindowText(word segptr word) WIN16_GetWindowText
|
||||||
37 pascal SetWindowText(word ptr) SetWindowText(1 2)
|
37 pascal SetWindowText(word segptr) WIN16_SetWindowText
|
||||||
38 pascal GetWindowTextLength(word) GetWindowTextLength(1)
|
38 pascal GetWindowTextLength(word) GetWindowTextLength
|
||||||
39 pascal BeginPaint(word ptr) BeginPaint(1 2)
|
39 pascal BeginPaint(word ptr) BeginPaint
|
||||||
40 pascal EndPaint(word ptr) EndPaint(1 2)
|
40 pascal EndPaint(word ptr) EndPaint
|
||||||
41 pascal CreateWindow(ptr ptr long s_word s_word s_word s_word word word word ptr)
|
41 pascal CreateWindow(ptr ptr long s_word s_word s_word s_word
|
||||||
CreateWindow(1 2 3 4 5 6 7 8 9 10 11)
|
word word word segptr) CreateWindow
|
||||||
42 pascal ShowWindow(word word) ShowWindow(1 2)
|
42 pascal ShowWindow(word word) ShowWindow
|
||||||
43 pascal CloseWindow(word) CloseWindow(1)
|
43 pascal CloseWindow(word) CloseWindow
|
||||||
44 pascal OpenIcon(word) OpenIcon(1)
|
44 pascal OpenIcon(word) OpenIcon
|
||||||
45 pascal BringWindowToTop(word) BringWindowToTop(1)
|
45 pascal BringWindowToTop(word) BringWindowToTop
|
||||||
46 pascal GetParent(word) GetParent(1)
|
46 pascal GetParent(word) GetParent
|
||||||
47 pascal IsWindow(word) IsWindow(1)
|
47 pascal IsWindow(word) IsWindow
|
||||||
48 pascal IsChild(word word) IsChild(1 2)
|
48 pascal IsChild(word word) IsChild
|
||||||
49 pascal IsWindowVisible(word) IsWindowVisible(1)
|
49 pascal IsWindowVisible(word) IsWindowVisible
|
||||||
50 pascal FindWindow(ptr ptr) FindWindow(1 2)
|
50 pascal FindWindow(ptr ptr) FindWindow
|
||||||
#51 BEAR51
|
#51 BEAR51
|
||||||
52 pascal AnyPopup() AnyPopup()
|
52 pascal AnyPopup() AnyPopup
|
||||||
53 pascal DestroyWindow(word) DestroyWindow(1)
|
53 pascal DestroyWindow(word) DestroyWindow
|
||||||
54 pascal EnumWindows(ptr long) EnumWindows(1 2)
|
54 pascal EnumWindows(ptr long) EnumWindows
|
||||||
55 pascal EnumChildWindows(word ptr long) EnumChildWindows(1 2 3)
|
55 pascal EnumChildWindows(word ptr long) EnumChildWindows
|
||||||
56 pascal MoveWindow(word word word word word word)
|
56 pascal MoveWindow(word word word word word word) MoveWindow
|
||||||
MoveWindow(1 2 3 4 5 6)
|
57 pascal RegisterClass(ptr) RegisterClass
|
||||||
57 pascal RegisterClass(ptr) RegisterClass(1)
|
58 pascal GetClassName(word ptr word) GetClassName
|
||||||
58 pascal GetClassName(word ptr word) GetClassName(1 2 3)
|
59 pascal SetActiveWindow(word) SetActiveWindow
|
||||||
59 pascal SetActiveWindow(word) SetActiveWindow(1)
|
60 pascal GetActiveWindow() GetActiveWindow
|
||||||
60 pascal GetActiveWindow() GetActiveWindow()
|
61 pascal ScrollWindow(word s_word s_word ptr ptr) ScrollWindow
|
||||||
61 pascal ScrollWindow(word s_word s_word ptr ptr) ScrollWindow(1 2 3 4 5)
|
62 pascal SetScrollPos(word word s_word word) SetScrollPos
|
||||||
62 pascal SetScrollPos(word word s_word word) SetScrollPos(1 2 3 4)
|
63 pascal GetScrollPos(word word) GetScrollPos
|
||||||
63 pascal GetScrollPos(word word) GetScrollPos(1 2)
|
64 pascal SetScrollRange(word word s_word s_word word) SetScrollRange
|
||||||
64 pascal SetScrollRange(word word s_word s_word word) SetScrollRange(1 2 3 4 5)
|
65 pascal GetScrollRange(word word ptr ptr) GetScrollRange
|
||||||
65 pascal GetScrollRange(word word ptr ptr) GetScrollRange(1 2 3 4)
|
66 pascal GetDC(word) GetDC
|
||||||
66 pascal GetDC(word) GetDC(1)
|
67 pascal GetWindowDC(word) GetWindowDC
|
||||||
67 pascal GetWindowDC(word) GetWindowDC(1)
|
68 pascal ReleaseDC(word word) ReleaseDC
|
||||||
68 pascal ReleaseDC(word word) ReleaseDC(1 2)
|
69 pascal SetCursor(word) SetCursor
|
||||||
69 pascal SetCursor(word) SetCursor(1)
|
70 pascal SetCursorPos(word word) SetCursorPos
|
||||||
70 pascal SetCursorPos(word word) SetCursorPos(1 2)
|
71 pascal ShowCursor(word) ShowCursor
|
||||||
71 pascal ShowCursor(word) ShowCursor(1)
|
72 pascal SetRect(ptr s_word s_word s_word s_word) SetRect
|
||||||
72 pascal SetRect(ptr s_word s_word s_word s_word) SetRect(1 2 3 4 5)
|
73 pascal SetRectEmpty(ptr) SetRectEmpty
|
||||||
73 pascal SetRectEmpty(ptr) SetRectEmpty(1)
|
74 pascal CopyRect(ptr ptr) CopyRect
|
||||||
74 pascal CopyRect(ptr ptr) CopyRect(1 2)
|
75 pascal IsRectEmpty(ptr) IsRectEmpty
|
||||||
75 pascal IsRectEmpty(ptr) IsRectEmpty(1)
|
76 pascal PtInRect(ptr long) PtInRect
|
||||||
76 pascal PtInRect(ptr long) PtInRect(1 2)
|
77 pascal OffsetRect(ptr s_word s_word) OffsetRect
|
||||||
77 pascal OffsetRect(ptr s_word s_word) OffsetRect(1 2 3)
|
78 pascal InflateRect(ptr s_word s_word) InflateRect
|
||||||
78 pascal InflateRect(ptr s_word s_word) InflateRect(1 2 3)
|
79 pascal IntersectRect(ptr ptr ptr) IntersectRect
|
||||||
79 pascal IntersectRect(ptr ptr ptr) IntersectRect(1 2 3)
|
80 pascal UnionRect(ptr ptr ptr) UnionRect
|
||||||
80 pascal UnionRect(ptr ptr ptr) UnionRect(1 2 3)
|
81 pascal FillRect(word ptr word) FillRect
|
||||||
81 pascal FillRect(word ptr word) FillRect(1 2 3)
|
82 pascal InvertRect(word ptr) InvertRect
|
||||||
82 pascal InvertRect(word ptr) InvertRect(1 2)
|
83 pascal FrameRect(word ptr word) FrameRect
|
||||||
83 pascal FrameRect(word ptr word) FrameRect(1 2 3)
|
84 pascal DrawIcon(word s_word s_word word) DrawIcon
|
||||||
84 pascal DrawIcon(word s_word s_word word) DrawIcon(1 2 3 4)
|
85 pascal DrawText(word ptr s_word ptr word) DrawText
|
||||||
85 pascal DrawText(word ptr s_word ptr word) DrawText(1 2 3 4 5)
|
87 pascal16 DialogBox(word segptr word segptr) DialogBox
|
||||||
87 pascal DialogBox(word ptr word ptr) DialogBox(1 2 3 4)
|
88 pascal EndDialog(word s_word) EndDialog
|
||||||
88 pascal EndDialog(word s_word) EndDialog(1 2)
|
89 pascal16 CreateDialog(word segptr word segptr) CreateDialog
|
||||||
89 pascal CreateDialog(word ptr word ptr) CreateDialog(1 2 3 4)
|
90 pascal IsDialogMessage(word ptr) IsDialogMessage
|
||||||
90 pascal IsDialogMessage(word ptr) IsDialogMessage(1 2)
|
91 pascal GetDlgItem(word word) GetDlgItem
|
||||||
91 pascal GetDlgItem(word word) GetDlgItem(1 2)
|
92 pascal SetDlgItemText(word word segptr) SetDlgItemText
|
||||||
92 pascal SetDlgItemText(word word ptr) SetDlgItemText(1 2 3)
|
93 pascal GetDlgItemText(word word segptr word) GetDlgItemText
|
||||||
93 pascal GetDlgItemText(word word ptr word) GetDlgItemText(1 2 3 4)
|
94 pascal SetDlgItemInt(word word word word) SetDlgItemInt
|
||||||
94 pascal SetDlgItemInt(word word word word) SetDlgItemInt(1 2 3 4)
|
95 pascal GetDlgItemInt(word word ptr word) GetDlgItemInt
|
||||||
95 pascal GetDlgItemInt(word word ptr word) GetDlgItemInt(1 2 3 4)
|
96 pascal CheckRadioButton(word word word word) CheckRadioButton
|
||||||
96 pascal CheckRadioButton(word word word word) CheckRadioButton(1 2 3 4)
|
97 pascal CheckDlgButton(word word word) CheckDlgButton
|
||||||
97 pascal CheckDlgButton(word word word) CheckDlgButton(1 2 3)
|
98 pascal IsDlgButtonChecked(word word) IsDlgButtonChecked
|
||||||
98 pascal IsDlgButtonChecked(word word) IsDlgButtonChecked(1 2)
|
99 pascal DlgDirSelect(word ptr word) DlgDirSelect
|
||||||
99 pascal DlgDirSelect(word ptr word) DlgDirSelect(1 2 3)
|
100 pascal DlgDirList(word ptr word word word) DlgDirList
|
||||||
100 pascal DlgDirList(word ptr word word word) DlgDirList(1 2 3 4 5)
|
101 pascal SendDlgItemMessage(word word word word long) SendDlgItemMessage
|
||||||
101 pascal SendDlgItemMessage(word word word word long)
|
102 pascal AdjustWindowRect(ptr long word) AdjustWindowRect
|
||||||
SendDlgItemMessage(1 2 3 4 5)
|
103 pascal MapDialogRect(word ptr) MapDialogRect
|
||||||
102 pascal AdjustWindowRect(ptr long word) AdjustWindowRect(1 2 3)
|
104 pascal MessageBeep(word) MessageBeep
|
||||||
103 pascal MapDialogRect(word ptr) MapDialogRect(1 2)
|
105 pascal FlashWindow(word word) FlashWindow
|
||||||
104 pascal MessageBeep(word) MessageBeep(1)
|
106 pascal GetKeyState(word) GetKeyState
|
||||||
105 pascal FlashWindow(word word) FlashWindow(1 2)
|
107 pascal DefWindowProc(word word word long) DefWindowProc
|
||||||
106 pascal GetKeyState(word) GetKeyState(1)
|
108 pascal GetMessage(segptr word word word) GetMessage
|
||||||
107 pascal DefWindowProc(word word word long) DefWindowProc(1 2 3 4)
|
109 pascal PeekMessage(ptr word word word word) PeekMessage
|
||||||
108 pascal GetMessage(ptr word word word) GetMessage(1 2 3 4)
|
110 pascal PostMessage(word word word long) PostMessage
|
||||||
109 pascal PeekMessage(ptr word word word word) PeekMessage(1 2 3 4 5)
|
111 pascal SendMessage(word word word long) SendMessage
|
||||||
110 pascal PostMessage(word word word long) PostMessage(1 2 3 4)
|
112 pascal WaitMessage() WaitMessage
|
||||||
111 pascal SendMessage(word word word long) SendMessage(1 2 3 4)
|
113 pascal TranslateMessage(ptr) TranslateMessage
|
||||||
112 pascal WaitMessage() WaitMessage()
|
114 pascal DispatchMessage(ptr) DispatchMessage
|
||||||
113 pascal TranslateMessage(ptr) TranslateMessage(1)
|
|
||||||
114 pascal DispatchMessage(ptr) DispatchMessage(1)
|
|
||||||
#115 REPLYMESSAGE
|
#115 REPLYMESSAGE
|
||||||
#116 POSTAPPMESSAGE
|
#116 POSTAPPMESSAGE
|
||||||
118 pascal RegisterWindowMessage(ptr) RegisterWindowMessage(1)
|
118 pascal RegisterWindowMessage(ptr) RegisterWindowMessage
|
||||||
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)
|
121 pascal SetWindowsHook(s_word segptr) SetWindowsHook
|
||||||
122 pascal CallWindowProc(ptr word word word long) CallWindowProc(1 2 3 4 5)
|
122 pascal CallWindowProc(segptr word word word long) CallWindowProc
|
||||||
123 pascal CallMsgFilter(ptr s_word) CallMsgFilter(1 2)
|
123 pascal CallMsgFilter(segptr s_word) CallMsgFilter
|
||||||
124 pascal UpdateWindow(word) UpdateWindow(1)
|
124 pascal UpdateWindow(word) UpdateWindow
|
||||||
125 pascal InvalidateRect(word ptr word) InvalidateRect(1 2 3)
|
125 pascal InvalidateRect(word ptr word) InvalidateRect
|
||||||
126 pascal InvalidateRgn(word word word) InvalidateRgn(1 2 3)
|
126 pascal InvalidateRgn(word word word) InvalidateRgn
|
||||||
127 pascal ValidateRect(word ptr) ValidateRect(1 2)
|
127 pascal ValidateRect(word ptr) ValidateRect
|
||||||
128 pascal ValidateRgn(word word) ValidateRgn(1 2)
|
128 pascal ValidateRgn(word word) ValidateRgn
|
||||||
129 pascal GetClassWord(word s_word) GetClassWord(1 2)
|
129 pascal GetClassWord(word s_word) GetClassWord
|
||||||
130 pascal SetClassWord(word s_word word) SetClassWord(1 2 3)
|
130 pascal SetClassWord(word s_word word) SetClassWord
|
||||||
131 pascal GetClassLong(word s_word) GetClassLong(1 2)
|
131 pascal GetClassLong(word s_word) GetClassLong
|
||||||
132 pascal SetClassLong(word s_word long) SetClassLong(1 2 3)
|
132 pascal SetClassLong(word s_word long) SetClassLong
|
||||||
133 pascal GetWindowWord(word s_word) GetWindowWord(1 2)
|
133 pascal GetWindowWord(word s_word) GetWindowWord
|
||||||
134 pascal SetWindowWord(word s_word word) SetWindowWord(1 2 3)
|
134 pascal SetWindowWord(word s_word word) SetWindowWord
|
||||||
135 pascal GetWindowLong(word s_word) GetWindowLong(1 2)
|
135 pascal GetWindowLong(word s_word) GetWindowLong
|
||||||
136 pascal SetWindowLong(word s_word long) SetWindowLong(1 2 3)
|
136 pascal SetWindowLong(word s_word long) SetWindowLong
|
||||||
137 pascal OpenClipboard(word) OpenClipboard(1)
|
137 pascal OpenClipboard(word) OpenClipboard
|
||||||
138 pascal CloseClipboard() CloseClipboard()
|
138 pascal CloseClipboard() CloseClipboard
|
||||||
139 pascal EmptyClipboard() EmptyClipboard()
|
139 pascal EmptyClipboard() EmptyClipboard
|
||||||
140 pascal GetClipboardOwner() GetClipboardOwner()
|
140 pascal GetClipboardOwner() GetClipboardOwner
|
||||||
141 pascal SetClipboardData(word word) SetClipboardData(1 2)
|
141 pascal SetClipboardData(word word) SetClipboardData
|
||||||
142 pascal GetClipboardData(word) GetClipboardData(1)
|
142 pascal GetClipboardData(word) GetClipboardData
|
||||||
143 pascal CountClipboardFormats() CountClipboardFormats()
|
143 pascal CountClipboardFormats() CountClipboardFormats
|
||||||
144 pascal EnumClipboardFormats(word) EnumClipboardFormats(1)
|
144 pascal EnumClipboardFormats(word) EnumClipboardFormats
|
||||||
145 pascal RegisterClipboardFormat(ptr) RegisterClipboardFormat(1)
|
145 pascal RegisterClipboardFormat(ptr) RegisterClipboardFormat
|
||||||
146 pascal GetClipboardFormatName(word ptr s_word) GetClipboardFormatName(1 2 3)
|
146 pascal GetClipboardFormatName(word ptr s_word) GetClipboardFormatName
|
||||||
147 pascal SetClipboardViewer(word) SetClipboardViewer(1)
|
147 pascal SetClipboardViewer(word) SetClipboardViewer
|
||||||
148 pascal GetClipboardViewer() GetClipboardViewer()
|
148 pascal GetClipboardViewer() GetClipboardViewer
|
||||||
149 pascal ChangeClipboardChain(word ptr) ChangeClipboardChain(1 2)
|
149 pascal ChangeClipboardChain(word ptr) ChangeClipboardChain
|
||||||
150 pascal LoadMenu(word ptr) LoadMenu(1 2)
|
150 pascal LoadMenu(word segptr) LoadMenu
|
||||||
151 pascal CreateMenu() CreateMenu()
|
151 pascal CreateMenu() CreateMenu
|
||||||
152 pascal DestroyMenu(word) DestroyMenu(1)
|
152 pascal DestroyMenu(word) DestroyMenu
|
||||||
153 pascal ChangeMenu(word word ptr word word) ChangeMenu(1 2 3 4 5)
|
153 pascal ChangeMenu(word word ptr word word) ChangeMenu
|
||||||
154 pascal CheckMenuItem(word word word) CheckMenuItem(1 2 3)
|
154 pascal CheckMenuItem(word word word) CheckMenuItem
|
||||||
155 pascal EnableMenuItem(word word word) EnableMenuItem(1 2 3)
|
155 pascal EnableMenuItem(word word word) EnableMenuItem
|
||||||
156 pascal GetSystemMenu(word word) GetSystemMenu(1 2)
|
156 pascal GetSystemMenu(word word) GetSystemMenu
|
||||||
157 pascal GetMenu(word) GetMenu(1)
|
157 pascal GetMenu(word) GetMenu
|
||||||
158 pascal SetMenu(word word) SetMenu(1 2)
|
158 pascal SetMenu(word word) SetMenu
|
||||||
159 pascal GetSubMenu(word word) GetSubMenu(1 2)
|
159 pascal GetSubMenu(word word) GetSubMenu
|
||||||
160 pascal DrawMenuBar(word) DrawMenuBar(1)
|
160 pascal DrawMenuBar(word) DrawMenuBar
|
||||||
161 pascal GetMenuString(word word ptr s_word word) GetMenuString(1 2 3 4 5)
|
161 pascal GetMenuString(word word ptr s_word word) GetMenuString
|
||||||
162 pascal HiliteMenuItem(word word word word) HiliteMenuItem(1 2 3 4)
|
162 pascal HiliteMenuItem(word word word word) HiliteMenuItem
|
||||||
163 pascal CreateCaret(word word word word) CreateCaret(1 2 3 4)
|
163 pascal CreateCaret(word word word word) CreateCaret
|
||||||
164 pascal DestroyCaret() DestroyCaret()
|
164 pascal DestroyCaret() DestroyCaret
|
||||||
165 pascal SetCaretPos(word word) SetCaretPos(1 2)
|
165 pascal SetCaretPos(word word) SetCaretPos
|
||||||
166 pascal HideCaret(word) HideCaret(1)
|
166 pascal HideCaret(word) HideCaret
|
||||||
167 pascal ShowCaret(word) ShowCaret(1)
|
167 pascal ShowCaret(word) ShowCaret
|
||||||
168 pascal SetCaretBlinkTime(word) SetCaretBlinkTime(1)
|
168 pascal SetCaretBlinkTime(word) SetCaretBlinkTime
|
||||||
169 pascal GetCaretBlinkTime() GetCaretBlinkTime()
|
169 pascal GetCaretBlinkTime() GetCaretBlinkTime
|
||||||
170 pascal ArrangeIconicWindows(word) ArrangeIconicWindows(1)
|
170 pascal ArrangeIconicWindows(word) ArrangeIconicWindows
|
||||||
171 pascal WinHelp(word ptr word long) WinHelp(1 2 3 4)
|
171 pascal WinHelp(word ptr word long) WinHelp
|
||||||
#172 SWITCHTOTHISWINDOW
|
#172 SWITCHTOTHISWINDOW
|
||||||
173 pascal LoadCursor(word ptr) LoadCursor(1 2)
|
173 pascal16 LoadCursor(word segptr) LoadCursor
|
||||||
174 pascal LoadIcon(word ptr) LoadIcon(1 2)
|
174 pascal16 LoadIcon(word segptr) LoadIcon
|
||||||
175 pascal LoadBitmap(word ptr) LoadBitmap(1 2)
|
175 pascal16 LoadBitmap(word segptr) LoadBitmap
|
||||||
176 pascal16 LoadString(word word ptr s_word) LoadString(1 2 3 4)
|
176 pascal16 LoadString(word word ptr s_word) LoadString
|
||||||
177 pascal LoadAccelerators(word ptr) LoadAccelerators(1 2)
|
177 pascal16 LoadAccelerators(word segptr) LoadAccelerators
|
||||||
178 pascal TranslateAccelerator(word word ptr) TranslateAccelerator(1 2 3)
|
178 pascal TranslateAccelerator(word word ptr) TranslateAccelerator
|
||||||
179 pascal GetSystemMetrics(word) GetSystemMetrics(1)
|
179 pascal GetSystemMetrics(word) GetSystemMetrics
|
||||||
180 pascal GetSysColor(word) GetSysColor(1)
|
180 pascal GetSysColor(word) GetSysColor
|
||||||
181 pascal SetSysColors(word ptr ptr) SetSysColors(1 2 3)
|
181 pascal SetSysColors(word ptr ptr) SetSysColors
|
||||||
182 pascal KillSystemTimer(word word) KillSystemTimer(1 2)
|
182 pascal KillSystemTimer(word word) KillSystemTimer
|
||||||
183 pascal GetCaretPos(ptr) GetCaretPos(1)
|
183 pascal GetCaretPos(ptr) GetCaretPos
|
||||||
#184 QUERYSENDMESSAGE
|
#184 QUERYSENDMESSAGE
|
||||||
185 pascal GrayString(word word ptr ptr word word word word word)
|
185 pascal GrayString(word word ptr ptr word word word word word) GrayString
|
||||||
GrayString(1 2 3 4 5 6 7 8 9)
|
186 pascal SwapMouseButton(word) SwapMouseButton
|
||||||
186 pascal SwapMouseButton(word) SwapMouseButton(1)
|
187 pascal EndMenu() EndMenu
|
||||||
187 pascal EndMenu() EndMenu()
|
188 pascal SetSysModalWindow(word) SetSysModalWindow
|
||||||
188 pascal SetSysModalWindow(word) SetSysModalWindow(1)
|
189 pascal GetSysModalWindow() GetSysModalWindow
|
||||||
189 pascal GetSysModalWindow() GetSysModalWindow()
|
190 pascal GetUpdateRect(word ptr word) GetUpdateRect
|
||||||
190 pascal GetUpdateRect(word ptr word) GetUpdateRect(1 2 3)
|
191 pascal ChildWindowFromPoint(word long) ChildWindowFromPoint
|
||||||
191 pascal ChildWindowFromPoint(word long) ChildWindowFromPoint(1 2)
|
192 pascal16 InSendMessage() InSendMessage
|
||||||
#192 INSENDMESSAGE
|
193 pascal IsClipboardFormatAvailable(word) IsClipboardFormatAvailable
|
||||||
193 pascal IsClipboardFormatAvailable(word) IsClipboardFormatAvailable(1)
|
194 pascal DlgDirSelectComboBox(word ptr word) DlgDirSelectComboBox
|
||||||
194 pascal DlgDirSelectComboBox(word ptr word) DlgDirSelectComboBox(1 2 3)
|
195 pascal DlgDirListComboBox(word segptr word word word) DlgDirListComboBox
|
||||||
195 pascal DlgDirListComboBox(word ptr word word word) DlgDirListComboBox(1 2 3 4 5)
|
|
||||||
196 pascal TabbedTextOut(word s_word s_word ptr s_word s_word ptr s_word)
|
196 pascal TabbedTextOut(word s_word s_word ptr s_word s_word ptr s_word)
|
||||||
TabbedTextOut(1 2 3 4 5 6 7 8)
|
TabbedTextOut
|
||||||
197 pascal GETTABBEDTEXTEXTENT(word ptr word word ptr)
|
197 pascal GetTabbedTextExtent(word ptr word word ptr) GetTabbedTextExtent
|
||||||
GetTabbedTextExtent(1 2 3 4 5)
|
198 pascal CascadeChildWindows(word word) CascadeChildWindows
|
||||||
198 pascal CascadeChildWindows(word word) CascadeChildWindows(1 2)
|
199 pascal TileChildWindows(word word) TileChildWindows
|
||||||
199 pascal TileChildWindows(word word) TileChildWindows(1 2)
|
200 pascal OpenComm(ptr word word) OpenComm
|
||||||
200 pascal OpenComm(ptr word word) OpenComm(1 2 3)
|
201 pascal SetCommState(ptr) SetCommState
|
||||||
201 pascal SetCommState(ptr) SetCommState(1)
|
202 pascal GetCommState(word ptr) GetCommState
|
||||||
202 pascal GetCommState(word ptr) GetCommState(1 2)
|
203 pascal GetCommError(word ptr) GetCommError
|
||||||
203 pascal GetCommError(word ptr) GetCommError(1 2)
|
204 pascal ReadComm(word ptr word) ReadComm
|
||||||
204 pascal ReadComm(word ptr word) ReadComm(1 2 3)
|
205 pascal WriteComm(word ptr word) WriteComm
|
||||||
205 pascal WriteComm(word ptr word) WriteComm(1 2 3)
|
206 pascal TransmitCommChar(word byte) TransmitCommChar
|
||||||
206 pascal TransmitCommChar(word byte) TransmitCommChar (1 2)
|
207 pascal CloseComm(word) CloseComm
|
||||||
207 pascal CloseComm(word) CloseComm(1)
|
208 pascal SetCommEventMask(word word) SetCommEventMask
|
||||||
208 pascal SetCommEventMask(word word) SetCommEventMask(1 2)
|
209 pascal GetCommEventMask(word word) GetCommEventMask
|
||||||
209 pascal GetCommEventMask(word word) GetCommEventMask(1 2)
|
210 pascal SetCommBreak(word) SetCommBreak
|
||||||
210 pascal SetCommBreak(word) SetCommBreak(1)
|
211 pascal ClearCommBreak(word) ClearCommBreak
|
||||||
211 pascal ClearCommBreak(word) ClearCommBreak(1)
|
212 pascal UngetCommChar(word byte) UngetCommChar
|
||||||
212 pascal UngetCommChar(word byte) UngetCommChar(1 2)
|
213 pascal BuildCommDCB(ptr ptr) BuildCommDCB
|
||||||
213 pascal BuildCommDCB(ptr ptr) BuildCommDCB(1 2)
|
214 pascal EscapeCommFunction(word word) EscapeCommFunction
|
||||||
214 pascal EscapeCommFunction(word word) EscapeCommFunction(1 2)
|
215 pascal FlushComm(word word) FlushComm
|
||||||
215 pascal FlushComm(word word) FlushComm(1 2)
|
|
||||||
#216 USERSEEUSERDO
|
#216 USERSEEUSERDO
|
||||||
217 pascal LookupMenuHandle(word s_word) LookupMenuHandle(1 2)
|
217 pascal LookupMenuHandle(word s_word) LookupMenuHandle
|
||||||
218 pascal DialogBoxIndirect(word word word ptr) DialogBoxIndirect(1 2 3 4)
|
218 pascal16 DialogBoxIndirect(word word word segptr) DialogBoxIndirect
|
||||||
219 pascal CreateDialogIndirect(word ptr word ptr)
|
219 pascal16 CreateDialogIndirect(word ptr word segptr) CreateDialogIndirect
|
||||||
CreateDialogIndirect(1 2 3 4)
|
220 pascal LoadMenuIndirect(ptr) LoadMenuIndirect
|
||||||
220 pascal LoadMenuIndirect(ptr) LoadMenuIndirect(1)
|
221 pascal ScrollDC(word s_word s_word ptr ptr word ptr) ScrollDC
|
||||||
221 pascal ScrollDC(word s_word s_word ptr ptr word ptr)
|
222 pascal16 GetKeyboardState(ptr) GetKeyboardState
|
||||||
ScrollDC(1 2 3 4 5 6 7)
|
|
||||||
222 pascal16 GetKeyboardState(ptr) GetKeyboardState(1)
|
|
||||||
#223 SETKEYBOARDSTATE
|
#223 SETKEYBOARDSTATE
|
||||||
224 pascal16 GetWindowTask(word) GetWindowTask(1)
|
224 pascal16 GetWindowTask(word) GetWindowTask
|
||||||
225 pascal EnumTaskWindows(word ptr long) EnumTaskWindows(1 2 3)
|
225 pascal EnumTaskWindows(word segptr long) EnumTaskWindows
|
||||||
#226 LOCKINPUT
|
#226 LOCKINPUT
|
||||||
227 pascal GetNextDlgGroupItem(word word word) GetNextDlgGroupItem(1 2 3)
|
227 pascal GetNextDlgGroupItem(word word word) GetNextDlgGroupItem
|
||||||
228 pascal GetNextDlgTabItem(word word word) GetNextDlgTabItem(1 2 3)
|
228 pascal GetNextDlgTabItem(word word word) GetNextDlgTabItem
|
||||||
229 pascal GetTopWindow(word) GetTopWindow(1)
|
229 pascal GetTopWindow(word) GetTopWindow
|
||||||
230 pascal GetNextWindow(word word) GetNextWindow(1 2)
|
230 pascal GetNextWindow(word word) GetNextWindow
|
||||||
#231 GETSYSTEMDEBUGSTATE
|
#231 GETSYSTEMDEBUGSTATE
|
||||||
232 pascal SetWindowPos(word word word word word word word)
|
232 pascal SetWindowPos(word word word word word word word) SetWindowPos
|
||||||
SetWindowPos(1 2 3 4 5 6 7)
|
233 pascal SetParent(word word) SetParent
|
||||||
233 pascal SetParent(word word) SetParent(1 2)
|
234 pascal UnhookWindowsHook(s_word segptr) UnhookWindowsHook
|
||||||
234 pascal UnhookWindowsHook(s_word ptr) UnhookWindowsHook(1 2)
|
235 pascal DefHookProc(s_word word long ptr) DefHookProc
|
||||||
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
|
||||||
237 pascal GetUpdateRgn(word word word) GetUpdateRgn(1 2 3)
|
238 pascal ExcludeUpdateRgn(word word) ExcludeUpdateRgn
|
||||||
238 pascal ExcludeUpdateRgn(word word) ExcludeUpdateRgn(1 2)
|
239 pascal16 DialogBoxParam(word segptr word segptr long) DialogBoxParam
|
||||||
239 pascal DialogBoxParam(word ptr word ptr long) DialogBoxParam(1 2 3 4 5)
|
240 pascal16 DialogBoxIndirectParam(word word word segptr long)
|
||||||
240 pascal DialogBoxIndirectParam(word word word ptr long)
|
DialogBoxIndirectParam
|
||||||
DialogBoxIndirectParam(1 2 3 4 5)
|
241 pascal16 CreateDialogParam(word segptr word segptr long) CreateDialogParam
|
||||||
241 pascal CreateDialogParam(word ptr word ptr long)
|
242 pascal16 CreateDialogIndirectParam(word ptr word segptr long)
|
||||||
CreateDialogParam(1 2 3 4 5)
|
CreateDialogIndirectParam
|
||||||
242 pascal CreateDialogIndirectParam(word ptr word ptr long)
|
243 pascal GetDialogBaseUnits() GetDialogBaseUnits
|
||||||
CreateDialogIndirectParam(1 2 3 4 5)
|
244 pascal EqualRect(ptr ptr) EqualRect
|
||||||
243 pascal GetDialogBaseUnits() GetDialogBaseUnits()
|
|
||||||
244 pascal EqualRect(ptr ptr) EqualRect(1 2)
|
|
||||||
#245 ENABLECOMMNOTIFICATION
|
#245 ENABLECOMMNOTIFICATION
|
||||||
#246 EXITWINDOWSEXEC
|
#246 EXITWINDOWSEXEC
|
||||||
247 pascal GetCursor() GetCursor()
|
247 pascal GetCursor() GetCursor
|
||||||
248 pascal GetOpenClipboardWindow() GetOpenClipboardWindow()
|
248 pascal GetOpenClipboardWindow() GetOpenClipboardWindow
|
||||||
249 pascal GetAsyncKeyState(word) GetAsyncKeyState(1)
|
249 pascal GetAsyncKeyState(word) GetAsyncKeyState
|
||||||
250 pascal GetMenuState(word word word) GetMenuState(1 2 3)
|
250 pascal GetMenuState(word word word) GetMenuState
|
||||||
251 pascal SendDriverMessage(word word long long) SendDriverMessage(1 2 3 4)
|
251 pascal SendDriverMessage(word word long long) SendDriverMessage
|
||||||
252 pascal OpenDriver(ptr ptr long) OpenDriver(1 2 3)
|
252 pascal OpenDriver(ptr ptr long) OpenDriver
|
||||||
253 pascal CloseDriver(word word long) CloseDriver(1 2 3)
|
253 pascal CloseDriver(word word long) CloseDriver
|
||||||
254 pascal GetDriverModuleHandle(word) GetDriverModuleHandle(1)
|
254 pascal GetDriverModuleHandle(word) GetDriverModuleHandle
|
||||||
255 pascal DefDriverProc(long word word long long) DefDriverProc(1 2 3 4 5)
|
255 pascal DefDriverProc(long word word long long) DefDriverProc
|
||||||
256 pascal GetDriverInfo(word ptr) GetDriverInfo(1 2)
|
256 pascal GetDriverInfo(word ptr) GetDriverInfo
|
||||||
257 pascal GetNextDriver(word long) GetNextDriver(1 2)
|
257 pascal GetNextDriver(word long) GetNextDriver
|
||||||
258 pascal MapWindowPoints(word word ptr word) MapWindowPoints(1 2 3 4)
|
258 pascal MapWindowPoints(word word ptr word) MapWindowPoints
|
||||||
259 pascal16 BeginDeferWindowPos(s_word) BeginDeferWindowPos(1)
|
259 pascal16 BeginDeferWindowPos(s_word) BeginDeferWindowPos
|
||||||
260 pascal16 DeferWindowPos(word word word s_word s_word s_word s_word word)
|
260 pascal16 DeferWindowPos(word word word s_word s_word s_word s_word word)
|
||||||
DeferWindowPos(1 2 3 4 5 6 7 8)
|
DeferWindowPos
|
||||||
261 pascal16 EndDeferWindowPos(word) EndDeferWindowPos(1)
|
261 pascal16 EndDeferWindowPos(word) EndDeferWindowPos
|
||||||
262 pascal GetWindow(word word) GetWindow(1 2)
|
262 pascal GetWindow(word word) GetWindow
|
||||||
263 pascal GetMenuItemCount(word) GetMenuItemCount(1)
|
263 pascal GetMenuItemCount(word) GetMenuItemCount
|
||||||
264 pascal GetMenuItemID(word word) GetMenuItemID(1 2)
|
264 pascal GetMenuItemID(word word) GetMenuItemID
|
||||||
#265 SHOWOWNEDPOPUPS
|
#265 SHOWOWNEDPOPUPS
|
||||||
266 pascal SetMessageQueue(word) SetMessageQueue(1)
|
266 pascal SetMessageQueue(word) SetMessageQueue
|
||||||
267 pascal ShowScrollBar(word word word) ShowScrollBar(1 2 3)
|
267 pascal ShowScrollBar(word word word) ShowScrollBar
|
||||||
268 pascal GlobalAddAtom(ptr) GlobalAddAtom(1)
|
268 pascal GlobalAddAtom(ptr) GlobalAddAtom
|
||||||
269 pascal GlobalDeleteAtom(word) GlobalDeleteAtom(1)
|
269 pascal GlobalDeleteAtom(word) GlobalDeleteAtom
|
||||||
270 pascal GlobalFindAtom(ptr) GlobalFindAtom(1)
|
270 pascal GlobalFindAtom(ptr) GlobalFindAtom
|
||||||
271 pascal GlobalGetAtomName(word ptr s_word) GlobalGetAtomName(1 2 3)
|
271 pascal GlobalGetAtomName(word ptr s_word) GlobalGetAtomName
|
||||||
272 pascal IsZoomed(word) IsZoomed(1)
|
272 pascal IsZoomed(word) IsZoomed
|
||||||
#273 CONTROLPANELINFO
|
#273 CONTROLPANELINFO
|
||||||
#274 GETNEXTQUEUEWINDOW
|
#274 GETNEXTQUEUEWINDOW
|
||||||
#275 REPAINTSCREEN
|
#275 REPAINTSCREEN
|
||||||
#276 LOCKMYTASK
|
#276 LOCKMYTASK
|
||||||
277 pascal GetDlgCtrlID(word) GetDlgCtrlID(1)
|
277 pascal GetDlgCtrlID(word) GetDlgCtrlID
|
||||||
278 pascal GetDeskTopHwnd() GetDesktopWindow()
|
278 pascal GetDeskTopHwnd() GetDesktopWindow
|
||||||
#279 OLDSETDESKPATTERN
|
#279 OLDSETDESKPATTERN
|
||||||
#280 SETSYSTEMMENU
|
#280 SETSYSTEMMENU
|
||||||
281 pascal GetSysColorBrush(word) GetSysColorBrush(1)
|
281 pascal GetSysColorBrush(word) GetSysColorBrush
|
||||||
282 pascal SelectPalette(word word word) SelectPalette(1 2 3)
|
282 pascal SelectPalette(word word word) SelectPalette
|
||||||
283 pascal RealizePalette(word) RealizePalette(1)
|
283 pascal RealizePalette(word) RealizePalette
|
||||||
284 pascal16 GetFreeSystemResources(word) GetFreeSystemResources(1)
|
284 pascal16 GetFreeSystemResources(word) GetFreeSystemResources
|
||||||
#285 BEAR285
|
#285 BEAR285
|
||||||
286 pascal GetDesktopWindow() GetDesktopWindow()
|
286 pascal GetDesktopWindow() GetDesktopWindow
|
||||||
287 pascal GetLastActivePopup(word) GetLastActivePopup(1)
|
287 pascal GetLastActivePopup(word) GetLastActivePopup
|
||||||
288 pascal GetMessageExtraInfo() GetMessageExtraInfo()
|
288 pascal GetMessageExtraInfo() GetMessageExtraInfo
|
||||||
#289 KEYB_EVENT
|
#289 KEYB_EVENT
|
||||||
290 pascal RedrawWindow(word ptr word word) RedrawWindow(1 2 3 4)
|
290 pascal RedrawWindow(word ptr word word) RedrawWindow
|
||||||
291 pascal SetWindowsHookEx(s_word ptr word word) SetWindowsHookEx(1 2 3 4)
|
291 pascal SetWindowsHookEx(s_word segptr word word) SetWindowsHookEx
|
||||||
292 pascal UnhookWindowsHookEx(ptr) UnhookWindowsHookEx(1)
|
292 pascal UnhookWindowsHookEx(segptr) UnhookWindowsHookEx
|
||||||
293 pascal CallNextHookEx(ptr s_word word long) CallNextHookEx(1 2 3 4)
|
293 pascal CallNextHookEx(segptr s_word word long) CallNextHookEx
|
||||||
#294 LOCKWINDOWUPDATE
|
#294 LOCKWINDOWUPDATE
|
||||||
#299 MOUSE_EVENT
|
#299 MOUSE_EVENT
|
||||||
#301 BOZOSLIVEHERE :-))
|
#301 BOZOSLIVEHERE :-))
|
||||||
#306 BEAR306
|
#306 BEAR306
|
||||||
308 pascal DefDlgProc(word word word long) DefDlgProc(1 2 3 4)
|
308 pascal DefDlgProc(word word word long) DefDlgProc
|
||||||
#314 SIGNALPROC
|
#314 SIGNALPROC
|
||||||
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
|
||||||
#320 SYSERRORBOX
|
#320 SYSERRORBOX
|
||||||
#321 SETEVENTHOOK
|
#321 SETEVENTHOOK
|
||||||
#322 WINOLDAPPHACKOMATIC
|
#322 WINOLDAPPHACKOMATIC
|
||||||
#323 GETMESSAGE2
|
#323 GETMESSAGE2
|
||||||
324 pascal FillWindow(word word word word) FillWindow(1 2 3 4)
|
324 pascal FillWindow(word word word word) FillWindow
|
||||||
325 pascal PaintRect(word word word word ptr) PaintRect(1 2 3 4 5)
|
325 pascal PaintRect(word word word word ptr) PaintRect
|
||||||
326 pascal16 GetControlBrush(word word word) GetControlBrush(1 2 3)
|
326 pascal16 GetControlBrush(word word word) GetControlBrush
|
||||||
331 pascal EnableHardwareInput(word) EnableHardwareInput(1)
|
331 pascal EnableHardwareInput(word) EnableHardwareInput
|
||||||
332 return UserYield 0 0
|
332 return UserYield 0 0
|
||||||
#333 ISUSERIDLE
|
#333 ISUSERIDLE
|
||||||
334 pascal GetQueueStatus(word) GetQueueStatus(1)
|
334 pascal GetQueueStatus(word) GetQueueStatus
|
||||||
335 pascal GetInputState() GetInputState()
|
335 pascal GetInputState() GetInputState
|
||||||
#336 LOADCURSORICONHANDLER
|
#336 LOADCURSORICONHANDLER
|
||||||
#337 GETMOUSEEVENTPROC
|
#337 GETMOUSEEVENTPROC
|
||||||
#341 _FFFE_FARFRAME
|
#341 _FFFE_FARFRAME
|
||||||
#343 GETFILEPORTNAME
|
#343 GETFILEPORTNAME
|
||||||
#356 LOADDIBCURSORHANDLER
|
#356 LOADDIBCURSORHANDLER
|
||||||
#357 LOADDIBICONHANDLER
|
#357 LOADDIBICONHANDLER
|
||||||
358 pascal IsMenu(word) IsMenu(1)
|
358 pascal IsMenu(word) IsMenu
|
||||||
359 pascal GetDCEx(word word long) GetDCEx(1 2 3)
|
359 pascal GetDCEx(word word long) GetDCEx
|
||||||
#362 DCHOOK
|
#362 DCHOOK
|
||||||
#368 COPYICON
|
#368 COPYICON
|
||||||
#369 COPYCURSOR
|
#369 COPYCURSOR
|
||||||
370 pascal GetWindowPlacement(word ptr) GetWindowPlacement(1 2)
|
370 pascal GetWindowPlacement(word ptr) GetWindowPlacement
|
||||||
371 pascal SetWindowPlacement(word ptr) SetWindowPlacement(1 2)
|
371 pascal SetWindowPlacement(word ptr) SetWindowPlacement
|
||||||
#372 GETINTERNALICONHEADER
|
#372 GETINTERNALICONHEADER
|
||||||
373 pascal SubtractRect(ptr ptr ptr) SubtractRect(1 2 3)
|
373 pascal SubtractRect(ptr ptr ptr) SubtractRect
|
||||||
#400 FINALUSERINIT
|
#400 FINALUSERINIT
|
||||||
402 pascal GetPriorityClipboardFormat(word ptr s_word)
|
402 pascal GetPriorityClipboardFormat(word ptr s_word)
|
||||||
GetPriorityClipboardFormat(1 2 3)
|
GetPriorityClipboardFormat
|
||||||
403 pascal UnregisterClass(ptr word) UnregisterClass(1 2)
|
403 pascal UnregisterClass(ptr word) UnregisterClass
|
||||||
404 pascal GetClassInfo(word ptr ptr) GetClassInfo(1 2 3)
|
404 pascal GetClassInfo(word ptr ptr) GetClassInfo
|
||||||
406 pascal CreateCursor(word word word word word ptr ptr)
|
406 pascal CreateCursor(word word word word word ptr ptr) CreateCursor
|
||||||
CreateCursor(1 2 3 4 5 6 7)
|
407 pascal CreateIcon(word word word byte byte ptr ptr) CreateIcon
|
||||||
407 pascal CreateIcon(word word word byte byte ptr ptr)
|
|
||||||
CreateIcon(1 2 3 4 5 6 7)
|
|
||||||
#408 CREATECURSORICONINDIRECT
|
#408 CREATECURSORICONINDIRECT
|
||||||
410 pascal InsertMenu(word word word word ptr) InsertMenu(1 2 3 4 5)
|
410 pascal InsertMenu(word word word word ptr) InsertMenu
|
||||||
411 pascal AppendMenu(word word word ptr) AppendMenu(1 2 3 4)
|
411 pascal AppendMenu(word word word ptr) AppendMenu
|
||||||
412 pascal RemoveMenu(word word word) RemoveMenu(1 2 3)
|
412 pascal RemoveMenu(word word word) RemoveMenu
|
||||||
413 pascal DeleteMenu(word word word) DeleteMenu(1 2 3)
|
413 pascal DeleteMenu(word word word) DeleteMenu
|
||||||
414 pascal ModifyMenu(word word word word ptr) ModifyMenu(1 2 3 4 5)
|
414 pascal ModifyMenu(word word word word ptr) ModifyMenu
|
||||||
415 pascal CreatePopupMenu() CreatePopupMenu()
|
415 pascal CreatePopupMenu() CreatePopupMenu
|
||||||
416 pascal TrackPopupMenu(word word word word word word ptr)
|
416 pascal TrackPopupMenu(word word word word word word ptr) TrackPopupMenu
|
||||||
TrackPopupMenu(1 2 3 4 5 6 7)
|
417 pascal GetMenuCheckMarkDimensions() GetMenuCheckMarkDimensions
|
||||||
417 pascal GetMenuCheckMarkDimensions() GetMenuCheckMarkDimensions()
|
418 pascal SetMenuItemBitmaps(word word word word word) SetMenuItemBitmaps
|
||||||
418 pascal SetMenuItemBitmaps(word word word word word)
|
420 pascal wsprintf() windows_wsprintf
|
||||||
SetMenuItemBitmaps(1 2 3 4 5)
|
|
||||||
420 pascal wsprintf() windows_wsprintf()
|
|
||||||
# windows_wsprintf() handles arguments itself, as libc can't handle an
|
# windows_wsprintf() handles arguments itself, as libc can't handle an
|
||||||
# 16-bit stack. DLLRelay() will pass 16-bit stack pointer as 1st arg.
|
# 16-bit stack. DLLRelay() will pass 16-bit stack pointer as 1st arg.
|
||||||
421 pascal wvsprintf(ptr ptr ptr) wvsprintf(1 2 3)
|
421 pascal wvsprintf(ptr ptr ptr) wvsprintf
|
||||||
#422 DLGDIRSELECTEX
|
#422 DLGDIRSELECTEX
|
||||||
#423 DLGDIRSELECTCOMBOBOXEX
|
#423 DLGDIRSELECTCOMBOBOXEX
|
||||||
430 pascal16 lstrcmp(ptr ptr) lstrcmp(1 2)
|
430 pascal16 lstrcmp(ptr ptr) lstrcmp
|
||||||
431 pascal AnsiUpper(ptr) AnsiUpper(1)
|
431 pascal AnsiUpper(segptr) WIN16_AnsiUpper
|
||||||
432 pascal AnsiLower(ptr) AnsiLower(1)
|
432 pascal AnsiLower(segptr) WIN16_AnsiLower
|
||||||
433 pascal16 IsCharAlpha(byte) IsCharAlpha(1)
|
433 pascal16 IsCharAlpha(byte) IsCharAlpha
|
||||||
434 pascal16 IsCharAlphanumeric(byte) IsCharAlphanumeric(1)
|
434 pascal16 IsCharAlphanumeric(byte) IsCharAlphanumeric
|
||||||
435 pascal16 IsCharUpper(byte) IsCharUpper(1)
|
435 pascal16 IsCharUpper(byte) IsCharUpper
|
||||||
436 pascal16 IsCharLower(byte) IsCharLower(1)
|
436 pascal16 IsCharLower(byte) IsCharLower
|
||||||
437 pascal16 AnsiUpperBuff(ptr word) AnsiUpperBuff(1 2)
|
437 pascal16 AnsiUpperBuff(ptr word) AnsiUpperBuff
|
||||||
438 pascal16 AnsiLowerBuff(ptr word) AnsiLowerBuff(1 2)
|
438 pascal16 AnsiLowerBuff(ptr word) AnsiLowerBuff
|
||||||
445 pascal DefFrameProc(word word word word long) DefFrameProc(1 2 3 4 5)
|
445 pascal DefFrameProc(word word word word long) DefFrameProc
|
||||||
447 pascal DefMDIChildProc(word word word long) DefMDIChildProc(1 2 3 4)
|
447 pascal DefMDIChildProc(word word word long) DefMDIChildProc
|
||||||
451 pascal TranslateMDISysAccel(word ptr) TranslateMDISysAccel(1 2)
|
451 pascal TranslateMDISysAccel(word ptr) TranslateMDISysAccel
|
||||||
452 pascal CreateWindowEx(long ptr ptr long s_word s_word s_word s_word
|
452 pascal CreateWindowEx(long ptr ptr long s_word s_word s_word s_word
|
||||||
word word word ptr)
|
word word word segptr) CreateWindowEx
|
||||||
CreateWindowEx(1 2 3 4 5 6 7 8 9 10 11 12)
|
454 pascal AdjustWindowRectEx(ptr long word long) AdjustWindowRectEx
|
||||||
454 pascal AdjustWindowRectEx(ptr long word long) AdjustWindowRectEx(1 2 3 4)
|
|
||||||
#455 GETICONID
|
#455 GETICONID
|
||||||
#456 LOADICONHANDLER
|
#456 LOADICONHANDLER
|
||||||
457 pascal DestroyIcon(word) DestroyIcon(1)
|
457 pascal DestroyIcon(word) DestroyIcon
|
||||||
458 pascal DestroyCursor(word) DestroyCursor(1)
|
458 pascal DestroyCursor(word) DestroyCursor
|
||||||
#459 DUMPICON
|
#459 DUMPICON
|
||||||
460 pascal GetInternalWindowPos(word ptr ptr) GetInternalWindowPos(1 2 3)
|
460 pascal GetInternalWindowPos(word ptr ptr) GetInternalWindowPos
|
||||||
461 pascal SetInternalWindowPos(word word ptr ptr) SetInternalWindowPos(1 2 3 4)
|
461 pascal SetInternalWindowPos(word word ptr ptr) SetInternalWindowPos
|
||||||
#462 CALCCHILDSCROLL
|
#462 CALCCHILDSCROLL
|
||||||
#463 SCROLLCHILDREN
|
#463 SCROLLCHILDREN
|
||||||
#464 DRAGOBJECT
|
#464 DRAGOBJECT
|
||||||
#465 DRAGDETECT
|
#465 DRAGDETECT
|
||||||
466 pascal DrawFocusRect(word ptr) DrawFocusRect(1 2)
|
466 pascal DrawFocusRect(word ptr) DrawFocusRect
|
||||||
#470 STRINGFUNC
|
#470 STRINGFUNC
|
||||||
471 pascal16 lstrcmpi(ptr ptr) lstrcmpi(1 2)
|
471 pascal16 lstrcmpi(ptr ptr) lstrcmpi
|
||||||
472 pascal AnsiNext(ptr) AnsiNext(1 )
|
472 pascal AnsiNext(segptr) AnsiNext
|
||||||
473 pascal AnsiPrev(ptr ptr) AnsiPrev(1 2)
|
473 pascal AnsiPrev(segptr segptr) AnsiPrev
|
||||||
#480 GETUSERLOCALOBJTYPE
|
#480 GETUSERLOCALOBJTYPE
|
||||||
#481 HARDWARE_EVENT
|
#481 HARDWARE_EVENT
|
||||||
482 pascal16 EnableScrollBar(word word word) EnableScrollBar(1 2 3)
|
482 pascal16 EnableScrollBar(word word word) EnableScrollBar
|
||||||
483 pascal SystemParametersInfo(word word ptr word) SystemParametersInfo(1 2 3 4)
|
483 pascal SystemParametersInfo(word word ptr word) SystemParametersInfo
|
||||||
#484 __GP
|
#484 __GP
|
||||||
#499 WNETERRORTEXT
|
#499 WNETERRORTEXT
|
||||||
#501 WNETOPENJOB
|
#501 WNETOPENJOB
|
||||||
|
@ -417,13 +404,13 @@ length 540
|
||||||
#509 WNETUNWATCHQUEUE
|
#509 WNETUNWATCHQUEUE
|
||||||
#510 WNETLOCKQUEUEDATA
|
#510 WNETLOCKQUEUEDATA
|
||||||
#511 WNETUNLOCKQUEUEDATA
|
#511 WNETUNLOCKQUEUEDATA
|
||||||
512 pascal16 WNetGetConnection(ptr ptr ptr) WNetGetConnection(1 2 3)
|
512 pascal16 WNetGetConnection(ptr ptr ptr) WNetGetConnection
|
||||||
513 pascal WNetGetCaps(word) WNetGetCaps(1)
|
513 pascal WNetGetCaps(word) WNetGetCaps
|
||||||
#514 WNETDEVICEMODE
|
#514 WNETDEVICEMODE
|
||||||
#515 WNETBROWSEDIALOG
|
#515 WNETBROWSEDIALOG
|
||||||
516 pascal WNetGetUser(ptr ptr ptr) WNetGetUser(1 2 3)
|
516 pascal WNetGetUser(ptr ptr ptr) WNetGetUser
|
||||||
517 pascal16 WNetAddConnection(ptr ptr ptr) WNetAddConnection(1 2 3)
|
517 pascal16 WNetAddConnection(ptr ptr ptr) WNetAddConnection
|
||||||
518 pascal16 WNetCancelConnection(ptr word) WNetCancelConnection(1 2)
|
518 pascal16 WNetCancelConnection(ptr word) WNetCancelConnection
|
||||||
#519 WNETGETERROR
|
#519 WNETGETERROR
|
||||||
#520 WNETGETERRORTEXT
|
#520 WNETGETERRORTEXT
|
||||||
#521 WNETENABLE
|
#521 WNETENABLE
|
||||||
|
|
|
@ -1,11 +1,8 @@
|
||||||
# $Id: win87em.spec,v 1.3 1993/07/04 04:04:21 root Exp root $
|
|
||||||
#
|
|
||||||
name win87em
|
name win87em
|
||||||
id 5
|
id 4
|
||||||
length 10
|
length 10
|
||||||
|
|
||||||
1 register _fpMath(word word word word
|
1 register _fpMath() WIN87_fpmath
|
||||||
word word word word) WIN87_fpmath()
|
3 pascal __WinEm87Info(ptr word) WIN87_WinEm87Info
|
||||||
3 pascal __WinEm87Info(ptr word) WIN87_WinEm87Info(1 2)
|
4 pascal __WinEm87Restore(ptr word) WIN87_WinEm87Restore
|
||||||
4 pascal __WinEm87Restore(ptr word) WIN87_WinEm87Restore(1 2)
|
5 pascal __WinEm87Save(ptr word) WIN87_WinEm87Save
|
||||||
5 pascal __WinEm87Save(ptr word) WIN87_WinEm87Save(1 2)
|
|
||||||
|
|
|
@ -4,64 +4,59 @@
|
||||||
# Summary: Module definition file for Windows Sockets DLL.
|
# Summary: Module definition file for Windows Sockets DLL.
|
||||||
#
|
#
|
||||||
name winsock
|
name winsock
|
||||||
id 9
|
id 8
|
||||||
length 155
|
length 155
|
||||||
|
|
||||||
1 pascal16 accept(word ptr ptr) WINSOCK_accept(1 2 3)
|
1 pascal16 accept(word ptr ptr) WINSOCK_accept
|
||||||
2 pascal16 bind(word ptr word) WINSOCK_bind(1 2 3)
|
2 pascal16 bind(word ptr word) WINSOCK_bind
|
||||||
3 pascal16 closesocket(word) WINSOCK_closesocket(1)
|
3 pascal16 closesocket(word) WINSOCK_closesocket
|
||||||
4 pascal16 connect(word ptr word) WINSOCK_connect(1 2 3)
|
4 pascal16 connect(word ptr word) WINSOCK_connect
|
||||||
5 pascal16 getpeername(word ptr ptr) WINSOCK_getpeername(1 2 3)
|
5 pascal16 getpeername(word ptr ptr) WINSOCK_getpeername
|
||||||
6 pascal16 getsockname(word ptr ptr) WINSOCK_getsockname(1 2 3)
|
6 pascal16 getsockname(word ptr ptr) WINSOCK_getsockname
|
||||||
7 pascal16 getsockopt(word word word ptr ptr) WINSOCK_getsockopt(1 2 3 4 5)
|
7 pascal16 getsockopt(word word word ptr ptr) WINSOCK_getsockopt
|
||||||
8 pascal htonl(long) WINSOCK_htonl(1)
|
8 pascal htonl(long) WINSOCK_htonl
|
||||||
9 pascal16 htons(word) WINSOCK_htons(1)
|
9 pascal16 htons(word) WINSOCK_htons
|
||||||
10 pascal inet_addr(long) WINSOCK_inet_addr(1)
|
10 pascal inet_addr(long) WINSOCK_inet_addr
|
||||||
11 pascal inet_ntoa(long) WINSOCK_inet_ntoa(1)
|
11 pascal inet_ntoa(long) WINSOCK_inet_ntoa
|
||||||
12 pascal16 ioctlsocket(word long ptr) WINSOCK_ioctlsocket(1 2 3)
|
12 pascal16 ioctlsocket(word long ptr) WINSOCK_ioctlsocket
|
||||||
13 pascal16 listen(word word) WINSOCK_listen(1 2)
|
13 pascal16 listen(word word) WINSOCK_listen
|
||||||
14 pascal ntohl(long) WINSOCK_ntohl(1)
|
14 pascal ntohl(long) WINSOCK_ntohl
|
||||||
15 pascal16 ntohs(word) WINSOCK_ntohs(1)
|
15 pascal16 ntohs(word) WINSOCK_ntohs
|
||||||
16 pascal16 recv(word ptr word word) WINSOCK_recv(1 2 3 4)
|
16 pascal16 recv(word ptr word word) WINSOCK_recv
|
||||||
17 pascal16 recvfrom(word ptr word word ptr ptr)
|
17 pascal16 recvfrom(word ptr word word ptr ptr) WINSOCK_recvfrom
|
||||||
WINSOCK_recvfrom(1 2 3 4 5 6)
|
18 pascal16 select(word ptr ptr ptr ptr word) WINSOCK_select
|
||||||
18 pascal16 select(word ptr ptr ptr ptr word)
|
19 pascal16 send(word ptr word word) WINSOCK_send
|
||||||
WINSOCK_select(1 2 3 4 5 6)
|
20 pascal16 sendto(word ptr word word ptr ptr) WINSOCK_sendto
|
||||||
19 pascal16 send(word ptr word word) WINSOCK_send(1 2 3 4)
|
21 pascal16 setsockopt(word word word ptr word) WINSOCK_setsockopt
|
||||||
20 pascal16 sendto(word ptr word word ptr ptr)
|
22 pascal16 shutdown(word word) WINSOCK_shutdown
|
||||||
WINSOCK_sendto(1 2 3 4 5 6)
|
23 pascal16 socket(word word word) WINSOCK_socket
|
||||||
21 pascal16 setsockopt(word word word ptr word)
|
51 pascal gethostbyaddr(ptr word word) WINSOCK_gethostbyaddr
|
||||||
WINSOCK_setsockopt(1 2 3 4 5)
|
52 pascal gethostbyname(ptr) WINSOCK_gethostbyname
|
||||||
22 pascal16 shutdown(word word) WINSOCK_shutdown(1 2)
|
53 pascal getprotobyname(ptr) WINSOCK_getprotobyname
|
||||||
23 pascal16 socket(word word word) WINSOCK_socket(1 2 3)
|
54 pascal getprotobynumber(word) WINSOCK_getprotobynumber
|
||||||
51 pascal gethostbyaddr(ptr word word) WINSOCK_gethostbyaddr(1 2 3)
|
55 pascal getservbyname(ptr ptr) WINSOCK_getservbyname
|
||||||
52 pascal gethostbyname(ptr) WINSOCK_gethostbyname(1)
|
56 pascal getservbyport(word ptr) WINSOCK_getservbyport
|
||||||
53 pascal getprotobyname(ptr) WINSOCK_getprotobyname(1)
|
57 pascal gethostname(ptr word) WINSOCK_gethostname
|
||||||
54 pascal getprotobynumber(word) WINSOCK_getprotobynumber(1)
|
101 pascal16 WSAAsyncSelect(word word word long) WSAAsyncSelect
|
||||||
55 pascal getservbyname(ptr ptr) WINSOCK_getservbyname(1 2)
|
|
||||||
56 pascal getservbyport(word ptr) WINSOCK_getservbyport(1 2)
|
|
||||||
57 pascal gethostname(ptr word) WINSOCK_gethostname(1 2)
|
|
||||||
101 pascal16 WSAAsyncSelect(word word word long)
|
|
||||||
WSAAsyncSelect(1 2 3 4)
|
|
||||||
102 pascal16 WSAAsyncGetHostByAddr(word word ptr word word ptr word)
|
102 pascal16 WSAAsyncGetHostByAddr(word word ptr word word ptr word)
|
||||||
WSAAsyncGetHostByAddr(1 2 3 4 5 6 7)
|
WSAAsyncGetHostByAddr
|
||||||
103 pascal16 WSAAsyncGetHostByName(word word ptr ptr word)
|
103 pascal16 WSAAsyncGetHostByName(word word ptr ptr word)
|
||||||
WSAAsyncGetHostByName(1 2 3 4 5)
|
WSAAsyncGetHostByName
|
||||||
104 pascal16 WSAAsyncGetProtoByNumber(word word word ptr word)
|
104 pascal16 WSAAsyncGetProtoByNumber(word word word ptr word)
|
||||||
WSAAsyncGetProtoByNumber(1 2 3 4 5)
|
WSAAsyncGetProtoByNumber
|
||||||
105 pascal16 WSAAsyncGetProtoByName(word word ptr ptr word)
|
105 pascal16 WSAAsyncGetProtoByName(word word ptr ptr word)
|
||||||
WSAAsyncGetProtoByName(1 2 3 4 5)
|
WSAAsyncGetProtoByName
|
||||||
106 pascal16 WSAAsyncGetServByPort(word word word ptr ptr word)
|
106 pascal16 WSAAsyncGetServByPort(word word word ptr ptr word)
|
||||||
WSAAsyncGetServByPort(1 2 3 4 5 6)
|
WSAAsyncGetServByPort
|
||||||
107 pascal16 WSAAsyncGetServByName(word word ptr ptr ptr word)
|
107 pascal16 WSAAsyncGetServByName(word word ptr ptr ptr word)
|
||||||
WSAAsyncGetServByName(1 2 3 4 5 6)
|
WSAAsyncGetServByName
|
||||||
108 pascal16 WSACancelAsyncRequest(word) WSACancelAsyncRequest(1)
|
108 pascal16 WSACancelAsyncRequest(word) WSACancelAsyncRequest
|
||||||
109 pascal16 WSASetBlockingHook() WSASetBlockingHook()
|
109 pascal16 WSASetBlockingHook() WSASetBlockingHook
|
||||||
110 pascal16 WSAUnhookBlockingHook() WSAUnhookBlockingHook()
|
110 pascal16 WSAUnhookBlockingHook() WSAUnhookBlockingHook
|
||||||
111 pascal16 WSAGetLastError() WSAGetLastError()
|
111 pascal16 WSAGetLastError() WSAGetLastError
|
||||||
112 pascal WSASetLastError(word) WSASetLastError(1)
|
112 pascal WSASetLastError(word) WSASetLastError
|
||||||
113 pascal16 WSACancelBlockingCall() WSACancelBlockingCall()
|
113 pascal16 WSACancelBlockingCall() WSACancelBlockingCall
|
||||||
114 pascal16 WSAIsBlocking() WSAIsBlocking()
|
114 pascal16 WSAIsBlocking() WSAIsBlocking
|
||||||
115 pascal WSAStartup(word ptr) WSAStartup(1 2)
|
115 pascal WSAStartup(word ptr) WSAStartup
|
||||||
116 pascal WSACleanup() WSACleanup()
|
116 pascal WSACleanup() WSACleanup
|
||||||
151 pascal16 __WSAFDIsSet(word ptr) WSAFDIsSet(1 2)
|
151 pascal16 __WSAFDIsSet(word ptr) WSAFDIsSet
|
||||||
|
|
|
@ -28,10 +28,7 @@ typedef struct
|
||||||
#ifdef WINELIB
|
#ifdef WINELIB
|
||||||
#define LocalAlign(flags,bytes) LocalAlloc (flags|LMEM_WINE_ALIGN,bytes)
|
#define LocalAlign(flags,bytes) LocalAlloc (flags|LMEM_WINE_ALIGN,bytes)
|
||||||
#else
|
#else
|
||||||
#define LocalAlign(flags,bytes) WIN16_LocalAlloc((flags),(bytes))
|
#define LocalAlign(flags,bytes) LocalAlloc((flags),(bytes))
|
||||||
#define LocalAlloc WIN16_LocalAlloc
|
|
||||||
#define LocalLock WIN16_LocalLock
|
|
||||||
#define LocalFree WIN16_LocalFree
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#endif /* ATOM_H */
|
#endif /* ATOM_H */
|
||||||
|
|
|
@ -29,6 +29,7 @@ typedef struct tagDCE
|
||||||
} DCE;
|
} DCE;
|
||||||
|
|
||||||
|
|
||||||
|
extern void DCE_Init(void);
|
||||||
extern HANDLE DCE_AllocDCE( DCE_TYPE type );
|
extern HANDLE DCE_AllocDCE( DCE_TYPE type );
|
||||||
extern void DCE_FreeDCE( HANDLE hdce );
|
extern void DCE_FreeDCE( HANDLE hdce );
|
||||||
|
|
||||||
|
|
256
include/debug.h
256
include/debug.h
|
@ -32,6 +32,7 @@
|
||||||
#undef DEBUG_FIXUP
|
#undef DEBUG_FIXUP
|
||||||
#undef DEBUG_FONT
|
#undef DEBUG_FONT
|
||||||
#undef DEBUG_GDI
|
#undef DEBUG_GDI
|
||||||
|
#undef DEBUG_GLOBAL
|
||||||
#undef DEBUG_GRAPHICS
|
#undef DEBUG_GRAPHICS
|
||||||
#undef DEBUG_HEAP
|
#undef DEBUG_HEAP
|
||||||
#undef DEBUG_ICON
|
#undef DEBUG_ICON
|
||||||
|
@ -40,6 +41,7 @@
|
||||||
#undef DEBUG_KEYBOARD
|
#undef DEBUG_KEYBOARD
|
||||||
#undef DEBUG_LDT
|
#undef DEBUG_LDT
|
||||||
#undef DEBUG_LISTBOX
|
#undef DEBUG_LISTBOX
|
||||||
|
#undef DEBUG_LOCAL
|
||||||
#undef DEBUG_MALLOC
|
#undef DEBUG_MALLOC
|
||||||
#undef DEBUG_MCI
|
#undef DEBUG_MCI
|
||||||
#undef DEBUG_MCIANIM
|
#undef DEBUG_MCIANIM
|
||||||
|
@ -65,6 +67,7 @@
|
||||||
#undef DEBUG_RELAY
|
#undef DEBUG_RELAY
|
||||||
#undef DEBUG_RESOURCE
|
#undef DEBUG_RESOURCE
|
||||||
#undef DEBUG_SCROLL
|
#undef DEBUG_SCROLL
|
||||||
|
#undef DEBUG_SELECTOR
|
||||||
#undef DEBUG_SELECTORS
|
#undef DEBUG_SELECTORS
|
||||||
#undef DEBUG_STACK
|
#undef DEBUG_STACK
|
||||||
#undef DEBUG_STRESS
|
#undef DEBUG_STRESS
|
||||||
|
@ -72,6 +75,7 @@
|
||||||
#undef DEBUG_TASK
|
#undef DEBUG_TASK
|
||||||
#undef DEBUG_TEXT
|
#undef DEBUG_TEXT
|
||||||
#undef DEBUG_TIMER
|
#undef DEBUG_TIMER
|
||||||
|
#undef DEBUG_TOOLHELP
|
||||||
#undef DEBUG_UTILITY
|
#undef DEBUG_UTILITY
|
||||||
#undef DEBUG_WIN
|
#undef DEBUG_WIN
|
||||||
#undef DEBUG_WINSOCK
|
#undef DEBUG_WINSOCK
|
||||||
|
@ -104,6 +108,7 @@
|
||||||
#define DEBUG_FIXUP
|
#define DEBUG_FIXUP
|
||||||
#define DEBUG_FONT
|
#define DEBUG_FONT
|
||||||
#define DEBUG_GDI
|
#define DEBUG_GDI
|
||||||
|
#define DEBUG_GLOBAL
|
||||||
#define DEBUG_GRAPHICS
|
#define DEBUG_GRAPHICS
|
||||||
#define DEBUG_HEAP
|
#define DEBUG_HEAP
|
||||||
#define DEBUG_ICON
|
#define DEBUG_ICON
|
||||||
|
@ -112,6 +117,7 @@
|
||||||
#define DEBUG_KEYBOARD
|
#define DEBUG_KEYBOARD
|
||||||
#define DEBUG_LDT
|
#define DEBUG_LDT
|
||||||
#define DEBUG_LISTBOX
|
#define DEBUG_LISTBOX
|
||||||
|
#define DEBUG_LOCAL
|
||||||
#define DEBUG_MALLOC
|
#define DEBUG_MALLOC
|
||||||
#define DEBUG_MCI
|
#define DEBUG_MCI
|
||||||
#define DEBUG_MCIANIM
|
#define DEBUG_MCIANIM
|
||||||
|
@ -137,6 +143,7 @@
|
||||||
#define DEBUG_RELAY
|
#define DEBUG_RELAY
|
||||||
#define DEBUG_RESOURCE
|
#define DEBUG_RESOURCE
|
||||||
#define DEBUG_SCROLL
|
#define DEBUG_SCROLL
|
||||||
|
#define DEBUG_SELECTOR
|
||||||
#define DEBUG_SELECTORS
|
#define DEBUG_SELECTORS
|
||||||
#define DEBUG_STACK
|
#define DEBUG_STACK
|
||||||
#define DEBUG_STRESS
|
#define DEBUG_STRESS
|
||||||
|
@ -144,6 +151,7 @@
|
||||||
#define DEBUG_TASK
|
#define DEBUG_TASK
|
||||||
#define DEBUG_TEXT
|
#define DEBUG_TEXT
|
||||||
#define DEBUG_TIMER
|
#define DEBUG_TIMER
|
||||||
|
#define DEBUG_TOOLHELP
|
||||||
#define DEBUG_UTILITY
|
#define DEBUG_UTILITY
|
||||||
#define DEBUG_WIN
|
#define DEBUG_WIN
|
||||||
#define DEBUG_WINSOCK
|
#define DEBUG_WINSOCK
|
||||||
|
@ -282,6 +290,11 @@ short debug_msg_enabled[]={
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DEBUG_GLOBAL
|
||||||
|
1,
|
||||||
|
#else
|
||||||
|
0,
|
||||||
|
#endif
|
||||||
#ifdef DEBUG_GRAPHICS
|
#ifdef DEBUG_GRAPHICS
|
||||||
1,
|
1,
|
||||||
#else
|
#else
|
||||||
|
@ -322,6 +335,11 @@ short debug_msg_enabled[]={
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DEBUG_LOCAL
|
||||||
|
1,
|
||||||
|
#else
|
||||||
|
0,
|
||||||
|
#endif
|
||||||
#ifdef DEBUG_MALLOC
|
#ifdef DEBUG_MALLOC
|
||||||
1,
|
1,
|
||||||
#else
|
#else
|
||||||
|
@ -447,6 +465,11 @@ short debug_msg_enabled[]={
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DEBUG_SELECTOR
|
||||||
|
1,
|
||||||
|
#else
|
||||||
|
0,
|
||||||
|
#endif
|
||||||
#ifdef DEBUG_SELECTORS
|
#ifdef DEBUG_SELECTORS
|
||||||
1,
|
1,
|
||||||
#else
|
#else
|
||||||
|
@ -482,6 +505,11 @@ short debug_msg_enabled[]={
|
||||||
#else
|
#else
|
||||||
0,
|
0,
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef DEBUG_TOOLHELP
|
||||||
|
1,
|
||||||
|
#else
|
||||||
|
0,
|
||||||
|
#endif
|
||||||
#ifdef DEBUG_UTILITY
|
#ifdef DEBUG_UTILITY
|
||||||
1,
|
1,
|
||||||
#else
|
#else
|
||||||
|
@ -843,8 +871,21 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_graphics if(!debug_msg_enabled[26]) ; else fprintf
|
#define dprintf_global if(!debug_msg_enabled[26]) ; else fprintf
|
||||||
#define debugging_graphics debug_msg_enabled[26]
|
#define debugging_global debug_msg_enabled[26]
|
||||||
|
#else
|
||||||
|
#ifdef DEBUG_GLOBAL
|
||||||
|
#define dprintf_global fprintf
|
||||||
|
#define debugging_global 1
|
||||||
|
#else
|
||||||
|
#define dprintf_global while(0) fprintf
|
||||||
|
#define debugging_global 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_RUNTIME
|
||||||
|
#define dprintf_graphics if(!debug_msg_enabled[27]) ; else fprintf
|
||||||
|
#define debugging_graphics debug_msg_enabled[27]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_GRAPHICS
|
#ifdef DEBUG_GRAPHICS
|
||||||
#define dprintf_graphics fprintf
|
#define dprintf_graphics fprintf
|
||||||
|
@ -856,8 +897,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_heap if(!debug_msg_enabled[27]) ; else fprintf
|
#define dprintf_heap if(!debug_msg_enabled[28]) ; else fprintf
|
||||||
#define debugging_heap debug_msg_enabled[27]
|
#define debugging_heap debug_msg_enabled[28]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_HEAP
|
#ifdef DEBUG_HEAP
|
||||||
#define dprintf_heap fprintf
|
#define dprintf_heap fprintf
|
||||||
|
@ -869,8 +910,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_icon if(!debug_msg_enabled[28]) ; else fprintf
|
#define dprintf_icon if(!debug_msg_enabled[29]) ; else fprintf
|
||||||
#define debugging_icon debug_msg_enabled[28]
|
#define debugging_icon debug_msg_enabled[29]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_ICON
|
#ifdef DEBUG_ICON
|
||||||
#define dprintf_icon fprintf
|
#define dprintf_icon fprintf
|
||||||
|
@ -882,8 +923,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_int if(!debug_msg_enabled[29]) ; else fprintf
|
#define dprintf_int if(!debug_msg_enabled[30]) ; else fprintf
|
||||||
#define debugging_int debug_msg_enabled[29]
|
#define debugging_int debug_msg_enabled[30]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_INT
|
#ifdef DEBUG_INT
|
||||||
#define dprintf_int fprintf
|
#define dprintf_int fprintf
|
||||||
|
@ -895,8 +936,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_key if(!debug_msg_enabled[30]) ; else fprintf
|
#define dprintf_key if(!debug_msg_enabled[31]) ; else fprintf
|
||||||
#define debugging_key debug_msg_enabled[30]
|
#define debugging_key debug_msg_enabled[31]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_KEY
|
#ifdef DEBUG_KEY
|
||||||
#define dprintf_key fprintf
|
#define dprintf_key fprintf
|
||||||
|
@ -908,8 +949,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_keyboard if(!debug_msg_enabled[31]) ; else fprintf
|
#define dprintf_keyboard if(!debug_msg_enabled[32]) ; else fprintf
|
||||||
#define debugging_keyboard debug_msg_enabled[31]
|
#define debugging_keyboard debug_msg_enabled[32]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_KEYBOARD
|
#ifdef DEBUG_KEYBOARD
|
||||||
#define dprintf_keyboard fprintf
|
#define dprintf_keyboard fprintf
|
||||||
|
@ -921,8 +962,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_ldt if(!debug_msg_enabled[32]) ; else fprintf
|
#define dprintf_ldt if(!debug_msg_enabled[33]) ; else fprintf
|
||||||
#define debugging_ldt debug_msg_enabled[32]
|
#define debugging_ldt debug_msg_enabled[33]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_LDT
|
#ifdef DEBUG_LDT
|
||||||
#define dprintf_ldt fprintf
|
#define dprintf_ldt fprintf
|
||||||
|
@ -934,8 +975,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_listbox if(!debug_msg_enabled[33]) ; else fprintf
|
#define dprintf_listbox if(!debug_msg_enabled[34]) ; else fprintf
|
||||||
#define debugging_listbox debug_msg_enabled[33]
|
#define debugging_listbox debug_msg_enabled[34]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_LISTBOX
|
#ifdef DEBUG_LISTBOX
|
||||||
#define dprintf_listbox fprintf
|
#define dprintf_listbox fprintf
|
||||||
|
@ -947,8 +988,21 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_malloc if(!debug_msg_enabled[34]) ; else fprintf
|
#define dprintf_local if(!debug_msg_enabled[35]) ; else fprintf
|
||||||
#define debugging_malloc debug_msg_enabled[34]
|
#define debugging_local debug_msg_enabled[35]
|
||||||
|
#else
|
||||||
|
#ifdef DEBUG_LOCAL
|
||||||
|
#define dprintf_local fprintf
|
||||||
|
#define debugging_local 1
|
||||||
|
#else
|
||||||
|
#define dprintf_local while(0) fprintf
|
||||||
|
#define debugging_local 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_RUNTIME
|
||||||
|
#define dprintf_malloc if(!debug_msg_enabled[36]) ; else fprintf
|
||||||
|
#define debugging_malloc debug_msg_enabled[36]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MALLOC
|
#ifdef DEBUG_MALLOC
|
||||||
#define dprintf_malloc fprintf
|
#define dprintf_malloc fprintf
|
||||||
|
@ -960,8 +1014,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_mci if(!debug_msg_enabled[35]) ; else fprintf
|
#define dprintf_mci if(!debug_msg_enabled[37]) ; else fprintf
|
||||||
#define debugging_mci debug_msg_enabled[35]
|
#define debugging_mci debug_msg_enabled[37]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MCI
|
#ifdef DEBUG_MCI
|
||||||
#define dprintf_mci fprintf
|
#define dprintf_mci fprintf
|
||||||
|
@ -973,8 +1027,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_mcianim if(!debug_msg_enabled[36]) ; else fprintf
|
#define dprintf_mcianim if(!debug_msg_enabled[38]) ; else fprintf
|
||||||
#define debugging_mcianim debug_msg_enabled[36]
|
#define debugging_mcianim debug_msg_enabled[38]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MCIANIM
|
#ifdef DEBUG_MCIANIM
|
||||||
#define dprintf_mcianim fprintf
|
#define dprintf_mcianim fprintf
|
||||||
|
@ -986,8 +1040,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_mciwave if(!debug_msg_enabled[37]) ; else fprintf
|
#define dprintf_mciwave if(!debug_msg_enabled[39]) ; else fprintf
|
||||||
#define debugging_mciwave debug_msg_enabled[37]
|
#define debugging_mciwave debug_msg_enabled[39]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MCIWAVE
|
#ifdef DEBUG_MCIWAVE
|
||||||
#define dprintf_mciwave fprintf
|
#define dprintf_mciwave fprintf
|
||||||
|
@ -999,8 +1053,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_mdi if(!debug_msg_enabled[38]) ; else fprintf
|
#define dprintf_mdi if(!debug_msg_enabled[40]) ; else fprintf
|
||||||
#define debugging_mdi debug_msg_enabled[38]
|
#define debugging_mdi debug_msg_enabled[40]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MDI
|
#ifdef DEBUG_MDI
|
||||||
#define dprintf_mdi fprintf
|
#define dprintf_mdi fprintf
|
||||||
|
@ -1012,8 +1066,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_menu if(!debug_msg_enabled[39]) ; else fprintf
|
#define dprintf_menu if(!debug_msg_enabled[41]) ; else fprintf
|
||||||
#define debugging_menu debug_msg_enabled[39]
|
#define debugging_menu debug_msg_enabled[41]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MENU
|
#ifdef DEBUG_MENU
|
||||||
#define dprintf_menu fprintf
|
#define dprintf_menu fprintf
|
||||||
|
@ -1025,8 +1079,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_menucalc if(!debug_msg_enabled[40]) ; else fprintf
|
#define dprintf_menucalc if(!debug_msg_enabled[42]) ; else fprintf
|
||||||
#define debugging_menucalc debug_msg_enabled[40]
|
#define debugging_menucalc debug_msg_enabled[42]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MENUCALC
|
#ifdef DEBUG_MENUCALC
|
||||||
#define dprintf_menucalc fprintf
|
#define dprintf_menucalc fprintf
|
||||||
|
@ -1038,8 +1092,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_message if(!debug_msg_enabled[41]) ; else fprintf
|
#define dprintf_message if(!debug_msg_enabled[43]) ; else fprintf
|
||||||
#define debugging_message debug_msg_enabled[41]
|
#define debugging_message debug_msg_enabled[43]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MESSAGE
|
#ifdef DEBUG_MESSAGE
|
||||||
#define dprintf_message fprintf
|
#define dprintf_message fprintf
|
||||||
|
@ -1051,8 +1105,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_metafile if(!debug_msg_enabled[42]) ; else fprintf
|
#define dprintf_metafile if(!debug_msg_enabled[44]) ; else fprintf
|
||||||
#define debugging_metafile debug_msg_enabled[42]
|
#define debugging_metafile debug_msg_enabled[44]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_METAFILE
|
#ifdef DEBUG_METAFILE
|
||||||
#define dprintf_metafile fprintf
|
#define dprintf_metafile fprintf
|
||||||
|
@ -1064,8 +1118,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_midi if(!debug_msg_enabled[43]) ; else fprintf
|
#define dprintf_midi if(!debug_msg_enabled[45]) ; else fprintf
|
||||||
#define debugging_midi debug_msg_enabled[43]
|
#define debugging_midi debug_msg_enabled[45]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MIDI
|
#ifdef DEBUG_MIDI
|
||||||
#define dprintf_midi fprintf
|
#define dprintf_midi fprintf
|
||||||
|
@ -1077,8 +1131,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_mmio if(!debug_msg_enabled[44]) ; else fprintf
|
#define dprintf_mmio if(!debug_msg_enabled[46]) ; else fprintf
|
||||||
#define debugging_mmio debug_msg_enabled[44]
|
#define debugging_mmio debug_msg_enabled[46]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MMIO
|
#ifdef DEBUG_MMIO
|
||||||
#define dprintf_mmio fprintf
|
#define dprintf_mmio fprintf
|
||||||
|
@ -1090,8 +1144,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_mmtime if(!debug_msg_enabled[45]) ; else fprintf
|
#define dprintf_mmtime if(!debug_msg_enabled[47]) ; else fprintf
|
||||||
#define debugging_mmtime debug_msg_enabled[45]
|
#define debugging_mmtime debug_msg_enabled[47]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MMTIME
|
#ifdef DEBUG_MMTIME
|
||||||
#define dprintf_mmtime fprintf
|
#define dprintf_mmtime fprintf
|
||||||
|
@ -1103,8 +1157,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_module if(!debug_msg_enabled[46]) ; else fprintf
|
#define dprintf_module if(!debug_msg_enabled[48]) ; else fprintf
|
||||||
#define debugging_module debug_msg_enabled[46]
|
#define debugging_module debug_msg_enabled[48]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MODULE
|
#ifdef DEBUG_MODULE
|
||||||
#define dprintf_module fprintf
|
#define dprintf_module fprintf
|
||||||
|
@ -1116,8 +1170,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_msg if(!debug_msg_enabled[47]) ; else fprintf
|
#define dprintf_msg if(!debug_msg_enabled[49]) ; else fprintf
|
||||||
#define debugging_msg debug_msg_enabled[47]
|
#define debugging_msg debug_msg_enabled[49]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MSG
|
#ifdef DEBUG_MSG
|
||||||
#define dprintf_msg fprintf
|
#define dprintf_msg fprintf
|
||||||
|
@ -1129,8 +1183,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_msgbox if(!debug_msg_enabled[48]) ; else fprintf
|
#define dprintf_msgbox if(!debug_msg_enabled[50]) ; else fprintf
|
||||||
#define debugging_msgbox debug_msg_enabled[48]
|
#define debugging_msgbox debug_msg_enabled[50]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_MSGBOX
|
#ifdef DEBUG_MSGBOX
|
||||||
#define dprintf_msgbox fprintf
|
#define dprintf_msgbox fprintf
|
||||||
|
@ -1142,8 +1196,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_nonclient if(!debug_msg_enabled[49]) ; else fprintf
|
#define dprintf_nonclient if(!debug_msg_enabled[51]) ; else fprintf
|
||||||
#define debugging_nonclient debug_msg_enabled[49]
|
#define debugging_nonclient debug_msg_enabled[51]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_NONCLIENT
|
#ifdef DEBUG_NONCLIENT
|
||||||
#define dprintf_nonclient fprintf
|
#define dprintf_nonclient fprintf
|
||||||
|
@ -1155,8 +1209,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_ole if(!debug_msg_enabled[50]) ; else fprintf
|
#define dprintf_ole if(!debug_msg_enabled[52]) ; else fprintf
|
||||||
#define debugging_ole debug_msg_enabled[50]
|
#define debugging_ole debug_msg_enabled[52]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_OLE
|
#ifdef DEBUG_OLE
|
||||||
#define dprintf_ole fprintf
|
#define dprintf_ole fprintf
|
||||||
|
@ -1168,8 +1222,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_palette if(!debug_msg_enabled[51]) ; else fprintf
|
#define dprintf_palette if(!debug_msg_enabled[53]) ; else fprintf
|
||||||
#define debugging_palette debug_msg_enabled[51]
|
#define debugging_palette debug_msg_enabled[53]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_PALETTE
|
#ifdef DEBUG_PALETTE
|
||||||
#define dprintf_palette fprintf
|
#define dprintf_palette fprintf
|
||||||
|
@ -1181,8 +1235,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_profile if(!debug_msg_enabled[52]) ; else fprintf
|
#define dprintf_profile if(!debug_msg_enabled[54]) ; else fprintf
|
||||||
#define debugging_profile debug_msg_enabled[52]
|
#define debugging_profile debug_msg_enabled[54]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_PROFILE
|
#ifdef DEBUG_PROFILE
|
||||||
#define dprintf_profile fprintf
|
#define dprintf_profile fprintf
|
||||||
|
@ -1194,8 +1248,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_prop if(!debug_msg_enabled[53]) ; else fprintf
|
#define dprintf_prop if(!debug_msg_enabled[55]) ; else fprintf
|
||||||
#define debugging_prop debug_msg_enabled[53]
|
#define debugging_prop debug_msg_enabled[55]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_PROP
|
#ifdef DEBUG_PROP
|
||||||
#define dprintf_prop fprintf
|
#define dprintf_prop fprintf
|
||||||
|
@ -1207,8 +1261,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_reg if(!debug_msg_enabled[54]) ; else fprintf
|
#define dprintf_reg if(!debug_msg_enabled[56]) ; else fprintf
|
||||||
#define debugging_reg debug_msg_enabled[54]
|
#define debugging_reg debug_msg_enabled[56]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_REG
|
#ifdef DEBUG_REG
|
||||||
#define dprintf_reg fprintf
|
#define dprintf_reg fprintf
|
||||||
|
@ -1220,8 +1274,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_region if(!debug_msg_enabled[55]) ; else fprintf
|
#define dprintf_region if(!debug_msg_enabled[57]) ; else fprintf
|
||||||
#define debugging_region debug_msg_enabled[55]
|
#define debugging_region debug_msg_enabled[57]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_REGION
|
#ifdef DEBUG_REGION
|
||||||
#define dprintf_region fprintf
|
#define dprintf_region fprintf
|
||||||
|
@ -1233,8 +1287,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_relay if(!debug_msg_enabled[56]) ; else fprintf
|
#define dprintf_relay if(!debug_msg_enabled[58]) ; else fprintf
|
||||||
#define debugging_relay debug_msg_enabled[56]
|
#define debugging_relay debug_msg_enabled[58]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_RELAY
|
#ifdef DEBUG_RELAY
|
||||||
#define dprintf_relay fprintf
|
#define dprintf_relay fprintf
|
||||||
|
@ -1246,8 +1300,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_resource if(!debug_msg_enabled[57]) ; else fprintf
|
#define dprintf_resource if(!debug_msg_enabled[59]) ; else fprintf
|
||||||
#define debugging_resource debug_msg_enabled[57]
|
#define debugging_resource debug_msg_enabled[59]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_RESOURCE
|
#ifdef DEBUG_RESOURCE
|
||||||
#define dprintf_resource fprintf
|
#define dprintf_resource fprintf
|
||||||
|
@ -1259,8 +1313,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_scroll if(!debug_msg_enabled[58]) ; else fprintf
|
#define dprintf_scroll if(!debug_msg_enabled[60]) ; else fprintf
|
||||||
#define debugging_scroll debug_msg_enabled[58]
|
#define debugging_scroll debug_msg_enabled[60]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_SCROLL
|
#ifdef DEBUG_SCROLL
|
||||||
#define dprintf_scroll fprintf
|
#define dprintf_scroll fprintf
|
||||||
|
@ -1272,8 +1326,21 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_selectors if(!debug_msg_enabled[59]) ; else fprintf
|
#define dprintf_selector if(!debug_msg_enabled[61]) ; else fprintf
|
||||||
#define debugging_selectors debug_msg_enabled[59]
|
#define debugging_selector debug_msg_enabled[61]
|
||||||
|
#else
|
||||||
|
#ifdef DEBUG_SELECTOR
|
||||||
|
#define dprintf_selector fprintf
|
||||||
|
#define debugging_selector 1
|
||||||
|
#else
|
||||||
|
#define dprintf_selector while(0) fprintf
|
||||||
|
#define debugging_selector 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_RUNTIME
|
||||||
|
#define dprintf_selectors if(!debug_msg_enabled[62]) ; else fprintf
|
||||||
|
#define debugging_selectors debug_msg_enabled[62]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_SELECTORS
|
#ifdef DEBUG_SELECTORS
|
||||||
#define dprintf_selectors fprintf
|
#define dprintf_selectors fprintf
|
||||||
|
@ -1285,8 +1352,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_stack if(!debug_msg_enabled[60]) ; else fprintf
|
#define dprintf_stack if(!debug_msg_enabled[63]) ; else fprintf
|
||||||
#define debugging_stack debug_msg_enabled[60]
|
#define debugging_stack debug_msg_enabled[63]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_STACK
|
#ifdef DEBUG_STACK
|
||||||
#define dprintf_stack fprintf
|
#define dprintf_stack fprintf
|
||||||
|
@ -1298,8 +1365,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_stress if(!debug_msg_enabled[61]) ; else fprintf
|
#define dprintf_stress if(!debug_msg_enabled[64]) ; else fprintf
|
||||||
#define debugging_stress debug_msg_enabled[61]
|
#define debugging_stress debug_msg_enabled[64]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_STRESS
|
#ifdef DEBUG_STRESS
|
||||||
#define dprintf_stress fprintf
|
#define dprintf_stress fprintf
|
||||||
|
@ -1311,8 +1378,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_syscolor if(!debug_msg_enabled[62]) ; else fprintf
|
#define dprintf_syscolor if(!debug_msg_enabled[65]) ; else fprintf
|
||||||
#define debugging_syscolor debug_msg_enabled[62]
|
#define debugging_syscolor debug_msg_enabled[65]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_SYSCOLOR
|
#ifdef DEBUG_SYSCOLOR
|
||||||
#define dprintf_syscolor fprintf
|
#define dprintf_syscolor fprintf
|
||||||
|
@ -1324,8 +1391,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_task if(!debug_msg_enabled[63]) ; else fprintf
|
#define dprintf_task if(!debug_msg_enabled[66]) ; else fprintf
|
||||||
#define debugging_task debug_msg_enabled[63]
|
#define debugging_task debug_msg_enabled[66]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_TASK
|
#ifdef DEBUG_TASK
|
||||||
#define dprintf_task fprintf
|
#define dprintf_task fprintf
|
||||||
|
@ -1337,8 +1404,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_text if(!debug_msg_enabled[64]) ; else fprintf
|
#define dprintf_text if(!debug_msg_enabled[67]) ; else fprintf
|
||||||
#define debugging_text debug_msg_enabled[64]
|
#define debugging_text debug_msg_enabled[67]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_TEXT
|
#ifdef DEBUG_TEXT
|
||||||
#define dprintf_text fprintf
|
#define dprintf_text fprintf
|
||||||
|
@ -1350,8 +1417,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_timer if(!debug_msg_enabled[65]) ; else fprintf
|
#define dprintf_timer if(!debug_msg_enabled[68]) ; else fprintf
|
||||||
#define debugging_timer debug_msg_enabled[65]
|
#define debugging_timer debug_msg_enabled[68]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_TIMER
|
#ifdef DEBUG_TIMER
|
||||||
#define dprintf_timer fprintf
|
#define dprintf_timer fprintf
|
||||||
|
@ -1363,8 +1430,21 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_utility if(!debug_msg_enabled[66]) ; else fprintf
|
#define dprintf_toolhelp if(!debug_msg_enabled[69]) ; else fprintf
|
||||||
#define debugging_utility debug_msg_enabled[66]
|
#define debugging_toolhelp debug_msg_enabled[69]
|
||||||
|
#else
|
||||||
|
#ifdef DEBUG_TOOLHELP
|
||||||
|
#define dprintf_toolhelp fprintf
|
||||||
|
#define debugging_toolhelp 1
|
||||||
|
#else
|
||||||
|
#define dprintf_toolhelp while(0) fprintf
|
||||||
|
#define debugging_toolhelp 0
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef DEBUG_RUNTIME
|
||||||
|
#define dprintf_utility if(!debug_msg_enabled[70]) ; else fprintf
|
||||||
|
#define debugging_utility debug_msg_enabled[70]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_UTILITY
|
#ifdef DEBUG_UTILITY
|
||||||
#define dprintf_utility fprintf
|
#define dprintf_utility fprintf
|
||||||
|
@ -1376,8 +1456,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_win if(!debug_msg_enabled[67]) ; else fprintf
|
#define dprintf_win if(!debug_msg_enabled[71]) ; else fprintf
|
||||||
#define debugging_win debug_msg_enabled[67]
|
#define debugging_win debug_msg_enabled[71]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_WIN
|
#ifdef DEBUG_WIN
|
||||||
#define dprintf_win fprintf
|
#define dprintf_win fprintf
|
||||||
|
@ -1389,8 +1469,8 @@ extern short debug_msg_enabled[];
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef DEBUG_RUNTIME
|
#ifdef DEBUG_RUNTIME
|
||||||
#define dprintf_winsock if(!debug_msg_enabled[68]) ; else fprintf
|
#define dprintf_winsock if(!debug_msg_enabled[72]) ; else fprintf
|
||||||
#define debugging_winsock debug_msg_enabled[68]
|
#define debugging_winsock debug_msg_enabled[72]
|
||||||
#else
|
#else
|
||||||
#ifdef DEBUG_WINSOCK
|
#ifdef DEBUG_WINSOCK
|
||||||
#define dprintf_winsock fprintf
|
#define dprintf_winsock fprintf
|
||||||
|
@ -1431,6 +1511,7 @@ static char *debug_msg_name[] = {
|
||||||
"fixup",
|
"fixup",
|
||||||
"font",
|
"font",
|
||||||
"gdi",
|
"gdi",
|
||||||
|
"global",
|
||||||
"graphics",
|
"graphics",
|
||||||
"heap",
|
"heap",
|
||||||
"icon",
|
"icon",
|
||||||
|
@ -1439,6 +1520,7 @@ static char *debug_msg_name[] = {
|
||||||
"keyboard",
|
"keyboard",
|
||||||
"ldt",
|
"ldt",
|
||||||
"listbox",
|
"listbox",
|
||||||
|
"local",
|
||||||
"malloc",
|
"malloc",
|
||||||
"mci",
|
"mci",
|
||||||
"mcianim",
|
"mcianim",
|
||||||
|
@ -1464,6 +1546,7 @@ static char *debug_msg_name[] = {
|
||||||
"relay",
|
"relay",
|
||||||
"resource",
|
"resource",
|
||||||
"scroll",
|
"scroll",
|
||||||
|
"selector",
|
||||||
"selectors",
|
"selectors",
|
||||||
"stack",
|
"stack",
|
||||||
"stress",
|
"stress",
|
||||||
|
@ -1471,6 +1554,7 @@ static char *debug_msg_name[] = {
|
||||||
"task",
|
"task",
|
||||||
"text",
|
"text",
|
||||||
"timer",
|
"timer",
|
||||||
|
"toolhelp",
|
||||||
"utility",
|
"utility",
|
||||||
"win",
|
"win",
|
||||||
"winsock",
|
"winsock",
|
||||||
|
|
|
@ -20,7 +20,7 @@ typedef struct resource_name_table
|
||||||
struct ne_data {
|
struct ne_data {
|
||||||
struct ne_header_s *ne_header;
|
struct ne_header_s *ne_header;
|
||||||
struct ne_segment_table_entry_s *seg_table;
|
struct ne_segment_table_entry_s *seg_table;
|
||||||
struct segment_descriptor_s *selector_table;
|
unsigned short *selector_table;
|
||||||
char *lookup_table;
|
char *lookup_table;
|
||||||
char *nrname_table;
|
char *nrname_table;
|
||||||
char *rname_table;
|
char *rname_table;
|
||||||
|
@ -61,7 +61,6 @@ extern struct w_files *wine_files;
|
||||||
#define DLL_MAX_ARGS 16
|
#define DLL_MAX_ARGS 16
|
||||||
|
|
||||||
#define DLL_HANDLERTYPE_PASCAL 16
|
#define DLL_HANDLERTYPE_PASCAL 16
|
||||||
#define DLL_HANDLERTYPE_C 17
|
|
||||||
|
|
||||||
struct dll_table_entry_s
|
struct dll_table_entry_s
|
||||||
{
|
{
|
||||||
|
@ -76,7 +75,6 @@ struct dll_table_entry_s
|
||||||
*/
|
*/
|
||||||
char *export_name;
|
char *export_name;
|
||||||
void *handler; /* Address of function to process request */
|
void *handler; /* Address of function to process request */
|
||||||
char handler_type; /* C or PASCAL calling convention */
|
|
||||||
char n_args; /* Number of arguments passed to function */
|
char n_args; /* Number of arguments passed to function */
|
||||||
short conv_reference ; /* reference to Argument conversion data */
|
short conv_reference ; /* reference to Argument conversion data */
|
||||||
#ifdef WINESTAT
|
#ifdef WINESTAT
|
||||||
|
@ -97,7 +95,6 @@ struct dll_name_table_entry_s
|
||||||
extern struct dll_table_entry_s KERNEL_table[];
|
extern struct dll_table_entry_s KERNEL_table[];
|
||||||
extern struct dll_table_entry_s USER_table[];
|
extern struct dll_table_entry_s USER_table[];
|
||||||
extern struct dll_table_entry_s GDI_table[];
|
extern struct dll_table_entry_s GDI_table[];
|
||||||
extern struct dll_table_entry_s UNIXLIB_table[];
|
|
||||||
extern struct dll_table_entry_s WIN87EM_table[];
|
extern struct dll_table_entry_s WIN87EM_table[];
|
||||||
extern struct dll_table_entry_s MMSYSTEM_table[];
|
extern struct dll_table_entry_s MMSYSTEM_table[];
|
||||||
extern struct dll_table_entry_s SHELL_table[];
|
extern struct dll_table_entry_s SHELL_table[];
|
||||||
|
@ -116,12 +113,13 @@ extern struct dll_table_entry_s OLE2NLS_table[];
|
||||||
extern struct dll_table_entry_s OLE2PROX_table[];
|
extern struct dll_table_entry_s OLE2PROX_table[];
|
||||||
extern struct dll_table_entry_s OLECLI_table[];
|
extern struct dll_table_entry_s OLECLI_table[];
|
||||||
extern struct dll_table_entry_s OLESVR_table[];
|
extern struct dll_table_entry_s OLESVR_table[];
|
||||||
|
extern struct dll_table_entry_s COMPOBJ_table[];
|
||||||
|
extern struct dll_table_entry_s STORAGE_table[];
|
||||||
|
|
||||||
|
|
||||||
extern unsigned short KERNEL_offsets[];
|
extern unsigned short KERNEL_offsets[];
|
||||||
extern unsigned short USER_offsets[];
|
extern unsigned short USER_offsets[];
|
||||||
extern unsigned short GDI_offsets[];
|
extern unsigned short GDI_offsets[];
|
||||||
extern unsigned short UNIXLIB_offsets[];
|
|
||||||
extern unsigned short WIN87EM_offsets[];
|
extern unsigned short WIN87EM_offsets[];
|
||||||
extern unsigned short MMSYSTEM_offsets[];
|
extern unsigned short MMSYSTEM_offsets[];
|
||||||
extern unsigned short SHELL_offsets[];
|
extern unsigned short SHELL_offsets[];
|
||||||
|
@ -140,12 +138,13 @@ extern unsigned short OLE2NLS_offsets[];
|
||||||
extern unsigned short OLE2PROX_offsets[];
|
extern unsigned short OLE2PROX_offsets[];
|
||||||
extern unsigned short OLECLI_offsets[];
|
extern unsigned short OLECLI_offsets[];
|
||||||
extern unsigned short OLESVR_offsets[];
|
extern unsigned short OLESVR_offsets[];
|
||||||
|
extern unsigned short COMPOBJ_offsets[];
|
||||||
|
extern unsigned short STORAGE_offsets[];
|
||||||
|
|
||||||
|
|
||||||
extern unsigned char KERNEL_types[];
|
extern unsigned char KERNEL_types[];
|
||||||
extern unsigned char USER_types[];
|
extern unsigned char USER_types[];
|
||||||
extern unsigned char GDI_types[];
|
extern unsigned char GDI_types[];
|
||||||
extern unsigned char UNIXLIB_types[];
|
|
||||||
extern unsigned char WIN87EM_types[];
|
extern unsigned char WIN87EM_types[];
|
||||||
extern unsigned char MMSYSTEM_types[];
|
extern unsigned char MMSYSTEM_types[];
|
||||||
extern unsigned char SHELL_types[];
|
extern unsigned char SHELL_types[];
|
||||||
|
@ -164,8 +163,10 @@ extern unsigned char OLE2NLS_types[];
|
||||||
extern unsigned char OLE2PROX_types[];
|
extern unsigned char OLE2PROX_types[];
|
||||||
extern unsigned char OLECLI_types[];
|
extern unsigned char OLECLI_types[];
|
||||||
extern unsigned char OLESVR_types[];
|
extern unsigned char OLESVR_types[];
|
||||||
|
extern unsigned char COMPOBJ_types[];
|
||||||
|
extern unsigned char STORAGE_types[];
|
||||||
|
|
||||||
#define N_BUILTINS 22
|
#define N_BUILTINS 23
|
||||||
|
|
||||||
#endif /* DLLS_H */
|
#endif /* DLLS_H */
|
||||||
|
|
||||||
|
|
|
@ -11,8 +11,8 @@
|
||||||
#include <X11/Xutil.h>
|
#include <X11/Xutil.h>
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "segmem.h"
|
#include "ldt.h"
|
||||||
#include "heap.h"
|
#include "local.h"
|
||||||
|
|
||||||
/* GDI objects magic numbers */
|
/* GDI objects magic numbers */
|
||||||
#define PEN_MAGIC 0x4f47
|
#define PEN_MAGIC 0x4f47
|
||||||
|
@ -245,18 +245,26 @@ typedef struct tagDC
|
||||||
|
|
||||||
#ifdef WINELIB
|
#ifdef WINELIB
|
||||||
|
|
||||||
#define GDI_HEAP_ALLOC(f,size) LocalAlloc (f,size)
|
#define GDI_HEAP_ALLOC(f,size) LocalAlloc (f,size)
|
||||||
#define GDI_HEAP_ADDR(handle) LocalLock (handle)
|
#define GDI_HEAP_LIN_ADDR(handle) LocalLock (handle)
|
||||||
#define GDI_HEAP_FREE(handle) LocalFree (handle)
|
#define GDI_HEAP_SEG_ADDR(handle) LocalLock (handle)
|
||||||
|
#define GDI_HEAP_FREE(handle) LocalFree (handle)
|
||||||
|
|
||||||
#else
|
#else
|
||||||
|
|
||||||
extern MDESC *GDI_Heap;
|
extern LPSTR GDI_Heap;
|
||||||
|
extern WORD GDI_HeapSel;
|
||||||
|
|
||||||
#define GDI_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&GDI_Heap,f,size) & 0xffff)
|
#define GDI_HEAP_ALLOC(size) \
|
||||||
#define GDI_HEAP_FREE(handle) (HEAP_Free(&GDI_Heap,GDI_HEAP_ADDR(handle)))
|
LOCAL_Alloc( GDI_HeapSel, LMEM_FIXED, (size) )
|
||||||
#define GDI_HEAP_ADDR(handle) \
|
#define GDI_HEAP_REALLOC(handle,size) \
|
||||||
((void *)((handle) ? ((handle) | ((int)GDI_Heap & 0xffff0000)) : 0))
|
LOCAL_ReAlloc( GDI_HeapSel, (handle), (size), LMEM_FIXED )
|
||||||
|
#define GDI_HEAP_FREE(handle) \
|
||||||
|
LOCAL_Free( GDI_HeapSel, (handle) )
|
||||||
|
#define GDI_HEAP_LIN_ADDR(handle) \
|
||||||
|
((handle) ? PTR_SEG_OFF_TO_LIN(GDI_HeapSel, (handle)) : NULL)
|
||||||
|
#define GDI_HEAP_SEG_ADDR(handle) \
|
||||||
|
((handle) ? MAKELONG((handle), GDI_HeapSel) : 0)
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -1,98 +0,0 @@
|
||||||
/* $Id: heap.h,v 1.2 1993/07/04 04:04:21 root Exp root $
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Copyright Robert J. Amstadt, 1993
|
|
||||||
*/
|
|
||||||
#ifndef HEAP_H
|
|
||||||
#define HEAP_H
|
|
||||||
|
|
||||||
#include "segmem.h"
|
|
||||||
#include "atom.h"
|
|
||||||
#include "stackframe.h"
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* LOCAL HEAP STRUCTURES AND FUNCTIONS
|
|
||||||
*/
|
|
||||||
typedef struct heap_mem_desc_s
|
|
||||||
{
|
|
||||||
struct heap_mem_desc_s *prev, *next;
|
|
||||||
unsigned short length;
|
|
||||||
unsigned char lock;
|
|
||||||
unsigned char flags;
|
|
||||||
} MDESC;
|
|
||||||
|
|
||||||
typedef struct heap_local_heap_s
|
|
||||||
{
|
|
||||||
struct heap_local_heap_s *next;
|
|
||||||
MDESC *free_list;
|
|
||||||
ATOMTABLE *local_table;
|
|
||||||
unsigned short selector;
|
|
||||||
unsigned short delta; /* Number saved for Windows compat. */
|
|
||||||
} LHEAP;
|
|
||||||
|
|
||||||
extern void HEAP_Init(MDESC **free_list, void *start, int length);
|
|
||||||
extern void *HEAP_Alloc(MDESC **free_list, int flags, int bytes);
|
|
||||||
extern int HEAP_Free(MDESC **free_list, void *block);
|
|
||||||
extern void *HEAP_ReAlloc(MDESC **free_list, void *old_block,
|
|
||||||
int new_size, unsigned int flags);
|
|
||||||
|
|
||||||
extern LHEAP *HEAP_LocalFindHeap(unsigned short owner);
|
|
||||||
extern unsigned int HEAP_LocalSize(MDESC **free_list, unsigned int handle);
|
|
||||||
extern void HEAP_LocalInit(unsigned short owner, void *start, int length);
|
|
||||||
|
|
||||||
extern void *WIN16_LocalAlloc(int flags, int bytes);
|
|
||||||
extern int WIN16_LocalCompact(int min_free);
|
|
||||||
extern unsigned int WIN16_LocalFlags(unsigned int handle);
|
|
||||||
extern unsigned int WIN16_LocalFree(unsigned int handle);
|
|
||||||
extern void *WIN16_LocalLock(unsigned int handle);
|
|
||||||
extern void *WIN16_LocalReAlloc(unsigned int handle, int flags, int bytes);
|
|
||||||
extern unsigned int WIN16_LocalUnlock(unsigned int handle);
|
|
||||||
|
|
||||||
/* Use ds instead of owner of cs */
|
|
||||||
#define HEAP_OWNER (pStack16Frame->ds)
|
|
||||||
#define LOCALHEAP() (&HEAP_LocalFindHeap(HEAP_OWNER)->free_list)
|
|
||||||
#define LOCALATOMTABLE() (&HEAP_LocalFindHeap(HEAP_OWNER)->local_table)
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* GLOBAL HEAP STRUCTURES AND FUNCTIONS:
|
|
||||||
*
|
|
||||||
* Global memory pool descriptor. Segments MUST be maintained in segment
|
|
||||||
* ascending order. If not the reallocation routine will die a horrible
|
|
||||||
* death.
|
|
||||||
*
|
|
||||||
* handle = 0, this descriptor contains the address of a free pool.
|
|
||||||
* != 0, this describes an allocated block.
|
|
||||||
*
|
|
||||||
* sequence = 0, this is not a huge block
|
|
||||||
* > 0, this is a portion of a huge block
|
|
||||||
* =-1, this is a free segment
|
|
||||||
*
|
|
||||||
* addr - address of this memory block.
|
|
||||||
*
|
|
||||||
* length - used to maintain huge blocks.
|
|
||||||
*/
|
|
||||||
typedef struct global_mem_desc_s
|
|
||||||
{
|
|
||||||
struct global_mem_desc_s *next; /* Next GDESC in list */
|
|
||||||
struct global_mem_desc_s *prev; /* Previous GDESC in list */
|
|
||||||
unsigned short handle; /* Handle of this block. */
|
|
||||||
short sequence; /* Block sequence # in huge block */
|
|
||||||
void *addr; /* Address allocated with mmap() */
|
|
||||||
int length; /* Length of block */
|
|
||||||
int lock_count; /* Block lock count */
|
|
||||||
unsigned short alias; /* Offset-zero alias selector */
|
|
||||||
unsigned int alias_key; /* Offset-zero alias sh. mem. key */
|
|
||||||
void *linear_addr; /* Linear address of huge block */
|
|
||||||
int linear_key; /* Linear shared memory key */
|
|
||||||
int linear_count; /* Linear lock count */
|
|
||||||
} GDESC;
|
|
||||||
|
|
||||||
extern GDESC *GlobalList;
|
|
||||||
|
|
||||||
extern void *GlobalQuickAlloc(int size);
|
|
||||||
extern unsigned int GlobalHandleFromPointer(void *block);
|
|
||||||
extern GDESC *GlobalGetGDesc(unsigned int block);
|
|
||||||
extern void *GlobalLinearLock(unsigned int block);
|
|
||||||
extern unsigned int GlobalLinearUnlock(unsigned int block);
|
|
||||||
|
|
||||||
#endif /* HEAP_H */
|
|
|
@ -8,7 +8,7 @@
|
||||||
#define HOOK_H
|
#define HOOK_H
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "user.h"
|
#include "ldt.h"
|
||||||
|
|
||||||
/* Hook data (pointed to by a HHOOK) */
|
/* Hook data (pointed to by a HHOOK) */
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -26,7 +26,8 @@ typedef struct
|
||||||
#define SYSTEM_HOOK(id) (systemHooks[(id)-FIRST_HOOK])
|
#define SYSTEM_HOOK(id) (systemHooks[(id)-FIRST_HOOK])
|
||||||
#define TASK_HOOK(id) (taskHooks[(id)-FIRST_HOOK])
|
#define TASK_HOOK(id) (taskHooks[(id)-FIRST_HOOK])
|
||||||
#define INTERNAL_CALL_HOOK(hhook,code,wparam,lparam) \
|
#define INTERNAL_CALL_HOOK(hhook,code,wparam,lparam) \
|
||||||
((hhook) ? CallHookProc(((HOOKDATA*)(hhook))->proc,code,wparam,lparam) : 0)
|
((hhook) ? CallHookProc(((HOOKDATA*)PTR_SEG_TO_LIN(hhook))->proc,\
|
||||||
|
code, wparam, lparam) : 0)
|
||||||
|
|
||||||
#define CALL_SYSTEM_HOOK(id,code,wparam,lparam) \
|
#define CALL_SYSTEM_HOOK(id,code,wparam,lparam) \
|
||||||
INTERNAL_CALL_HOOK(SYSTEM_HOOK(id),code,wparam,lparam)
|
INTERNAL_CALL_HOOK(SYSTEM_HOOK(id),code,wparam,lparam)
|
||||||
|
|
|
@ -8,7 +8,6 @@ extern int CallToInit16(unsigned long csip, unsigned long sssp,
|
||||||
extern int CallTo16cx(unsigned long csip, unsigned long dscx);
|
extern int CallTo16cx(unsigned long csip, unsigned long dscx);
|
||||||
extern int CallToDllEntry(unsigned long csip, unsigned long dscx, unsigned short di);
|
extern int CallToDllEntry(unsigned long csip, unsigned long dscx, unsigned short di);
|
||||||
extern int CallBack16(void *func, int n_args, ...);
|
extern int CallBack16(void *func, int n_args, ...);
|
||||||
extern void *CALLBACK_MakeProcInstance(void *func, int instance);
|
|
||||||
extern void CallLineDDAProc(FARPROC func, short xPos, short yPos, long lParam);
|
extern void CallLineDDAProc(FARPROC func, short xPos, short yPos, long lParam);
|
||||||
extern void winestat(void);
|
extern void winestat(void);
|
||||||
extern int DLLRelay(unsigned int func_num, unsigned int seg_off);
|
extern int DLLRelay(unsigned int func_num, unsigned int seg_off);
|
||||||
|
|
26
include/instance.h
Normal file
26
include/instance.h
Normal file
|
@ -0,0 +1,26 @@
|
||||||
|
/*
|
||||||
|
* Instance data declaration
|
||||||
|
*
|
||||||
|
* Copyright 1995 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WINE_INSTANCE_H
|
||||||
|
#define __WINE_INSTANCE_H
|
||||||
|
|
||||||
|
#include "wintypes.h"
|
||||||
|
|
||||||
|
/* This structure is always located at offset 0 of the DGROUP segment */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
WORD null; /* Always 0 */
|
||||||
|
WORD old_sp; /* Stack pointer; used by SwitchTaskTo() */
|
||||||
|
WORD old_ss; /* Stack segment; used by SwitchTaskTo() */
|
||||||
|
WORD heap; /* Pointer to the local heap information (if any) */
|
||||||
|
WORD atomtable; /* Pointer to the local atom table (if any) */
|
||||||
|
WORD stacktop; /* Top of the stack */
|
||||||
|
WORD stackmin; /* Lowest stack address used so far */
|
||||||
|
WORD stackbottom; /* Bottom of the stack */
|
||||||
|
} INSTANCEDATA;
|
||||||
|
|
||||||
|
#endif /* __WINE_INSTANCE_H */
|
62
include/ldt.h
Normal file
62
include/ldt.h
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/*
|
||||||
|
* LDT copy
|
||||||
|
*
|
||||||
|
* Copyright 1995 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef _WINE_LDT_H
|
||||||
|
#define _WINE_LDT_H
|
||||||
|
|
||||||
|
enum seg_type
|
||||||
|
{
|
||||||
|
SEGMENT_DATA = 0,
|
||||||
|
SEGMENT_STACK = 1,
|
||||||
|
SEGMENT_CODE = 2
|
||||||
|
};
|
||||||
|
|
||||||
|
/* This structure represents a real LDT entry. */
|
||||||
|
/* It is used by get_ldt_entry() and set_ldt_entry(). */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned long base; /* base address */
|
||||||
|
unsigned long limit; /* segment limit */
|
||||||
|
int seg_32bit; /* is segment 32-bit? */
|
||||||
|
int read_only; /* is segment read-only? */
|
||||||
|
int limit_in_pages; /* is the limit in pages or bytes? */
|
||||||
|
enum seg_type type; /* segment type */
|
||||||
|
} ldt_entry;
|
||||||
|
|
||||||
|
extern int LDT_GetEntry( int entry, ldt_entry *content );
|
||||||
|
extern int LDT_SetEntry( int entry, ldt_entry *content );
|
||||||
|
extern void LDT_Print();
|
||||||
|
|
||||||
|
|
||||||
|
/* This structure is used to build the local copy of the LDT. */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
unsigned long base; /* base address or 0 if entry is free */
|
||||||
|
unsigned long limit; /* limit in bytes or 0 if entry is free */
|
||||||
|
} ldt_copy_entry;
|
||||||
|
|
||||||
|
#define LDT_SIZE 8192
|
||||||
|
|
||||||
|
extern ldt_copy_entry ldt_copy[LDT_SIZE];
|
||||||
|
|
||||||
|
#define __AHSHIFT 3
|
||||||
|
#define __AHINCR (1 << __AHSHIFT)
|
||||||
|
|
||||||
|
#define SELECTOR_TO_ENTRY(sel) ((int)(sel) >> __AHSHIFT)
|
||||||
|
#define ENTRY_TO_SELECTOR(i) ((i) ? (((int)(i) << __AHSHIFT) | 7) : 0)
|
||||||
|
#define IS_LDT_ENTRY_FREE(i) (!(ldt_copy[(i)].base || ldt_copy[(i)].limit))
|
||||||
|
#define IS_SELECTOR_FREE(sel) (IS_LDT_ENTRY_FREE(SELECTOR_TO_ENTRY(sel)))
|
||||||
|
#define GET_SEL_BASE(sel) (ldt_copy[SELECTOR_TO_ENTRY(sel)].base)
|
||||||
|
#define GET_SEL_LIMIT(sel) (ldt_copy[SELECTOR_TO_ENTRY(sel)].limit)
|
||||||
|
|
||||||
|
/* Convert a segmented ptr (16:16) to a linear (32) pointer */
|
||||||
|
#define PTR_SEG_TO_LIN(ptr) \
|
||||||
|
((void*)(GET_SEL_BASE((int)(ptr) >> 16) + ((int)(ptr) & 0xffff)))
|
||||||
|
|
||||||
|
#define PTR_SEG_OFF_TO_LIN(seg,off) \
|
||||||
|
((void*)(GET_SEL_BASE(seg) + ((int)(off) & 0xffff)))
|
||||||
|
|
||||||
|
#endif /* _WINE_LDT_H */
|
|
@ -30,7 +30,7 @@ typedef struct tagHEADLIST {
|
||||||
HWND hWndLogicParent;
|
HWND hWndLogicParent;
|
||||||
HFONT hFont;
|
HFONT hFont;
|
||||||
BOOL bRedrawFlag;
|
BOOL bRedrawFlag;
|
||||||
MDESC *Heap;
|
/* MDESC *Heap; */
|
||||||
} HEADLIST;
|
} HEADLIST;
|
||||||
typedef HEADLIST FAR* LPHEADLIST;
|
typedef HEADLIST FAR* LPHEADLIST;
|
||||||
|
|
||||||
|
|
24
include/local.h
Normal file
24
include/local.h
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
/*
|
||||||
|
* Local heap declarations
|
||||||
|
*
|
||||||
|
* Copyright 1995 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef __WINE_HEAP_H
|
||||||
|
#define __WINE_HEAP_H
|
||||||
|
|
||||||
|
#include "wintypes.h"
|
||||||
|
|
||||||
|
/* These function are equivalent to the Local* API functions, */
|
||||||
|
/* excepted that they need DS as the first parameter. This */
|
||||||
|
/* allows managing several heaps from the emulation library. */
|
||||||
|
|
||||||
|
extern HLOCAL LOCAL_Alloc( WORD ds, WORD flags, WORD size );
|
||||||
|
extern HLOCAL LOCAL_ReAlloc( WORD ds, HLOCAL handle, WORD size, WORD flags );
|
||||||
|
extern HLOCAL LOCAL_Free( WORD ds, HLOCAL handle );
|
||||||
|
extern HLOCAL LOCAL_Handle( WORD ds, WORD addr );
|
||||||
|
extern WORD LOCAL_Size( WORD ds, HLOCAL handle );
|
||||||
|
extern WORD LOCAL_Flags( WORD ds, HLOCAL handle );
|
||||||
|
extern WORD LOCAL_HeapSize( WORD ds );
|
||||||
|
|
||||||
|
#endif /* __WINE_HEAP_H */
|
|
@ -54,7 +54,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, HWND hwndOwner,
|
extern BOOL MSG_InternalGetMessage( SEGPTR msg, HWND hwnd, HWND hwndOwner,
|
||||||
short code, WORD flags, BOOL sendIdle );
|
short code, WORD flags, BOOL sendIdle );
|
||||||
|
|
||||||
#endif /* MESSAGE_H */
|
#endif /* MESSAGE_H */
|
||||||
|
|
|
@ -15,6 +15,7 @@ struct dosdirent {
|
||||||
char search_attribute;
|
char search_attribute;
|
||||||
long filesize;
|
long filesize;
|
||||||
long filetime;
|
long filetime;
|
||||||
|
short entnum; /* Directory entry number */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct fcb {
|
struct fcb {
|
||||||
|
@ -29,16 +30,13 @@ struct fcb {
|
||||||
BYTE dummy2[9];
|
BYTE dummy2[9];
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DOSVERSION 0x0330;
|
#define DOSVERSION 0x0500; /* Might as well pretend we're DOS 5.0 */
|
||||||
#define MAX_DOS_DRIVES 26
|
#define MAX_DOS_DRIVES 26
|
||||||
|
|
||||||
extern WORD ExtendedError;
|
extern WORD ExtendedError;
|
||||||
extern struct DosDeviceStruct COM[MAX_PORTS];
|
extern struct DosDeviceStruct COM[MAX_PORTS];
|
||||||
extern struct DosDeviceStruct LPT[MAX_PORTS];
|
extern struct DosDeviceStruct LPT[MAX_PORTS];
|
||||||
|
|
||||||
#define segment(a) ((DWORD)(a) >> 16)
|
|
||||||
#define offset(a) ((DWORD)(a) & 0xffff)
|
|
||||||
|
|
||||||
#define setword(a,b) *(BYTE*)(a) = (b) & 0xff; \
|
#define setword(a,b) *(BYTE*)(a) = (b) & 0xff; \
|
||||||
*((BYTE*)((a)+1)) = ((b)>>8) & 0xff;
|
*((BYTE*)((a)+1)) = ((b)>>8) & 0xff;
|
||||||
|
|
||||||
|
|
|
@ -133,11 +133,7 @@ struct relocation_entry_s
|
||||||
#define NE_RELTYPE_ORDINAL 1
|
#define NE_RELTYPE_ORDINAL 1
|
||||||
#define NE_RELTYPE_NAME 2
|
#define NE_RELTYPE_NAME 2
|
||||||
#define NE_RELTYPE_OSFIXUP 3
|
#define NE_RELTYPE_OSFIXUP 3
|
||||||
/* Used by Windows 3.0 programs, like when getting selector to be
|
#define NE_RELFLAG_ADDITIVE 4
|
||||||
given to makeprocinst */
|
|
||||||
#define NE_RELTYPE_INT1 4
|
|
||||||
#define NE_RELTYPE_ORDINALADD 5
|
|
||||||
#define NE_RELTYPE_NAMEADD 6
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* DOS PSP
|
* DOS PSP
|
||||||
|
|
|
@ -17,6 +17,8 @@ struct options
|
||||||
int backingstore; /* Use backing store */
|
int backingstore; /* Use backing store */
|
||||||
short cmdShow;
|
short cmdShow;
|
||||||
int debug;
|
int debug;
|
||||||
|
int allowReadOnly; /* Opening a read only file will succeed even
|
||||||
|
if write access is requested */
|
||||||
};
|
};
|
||||||
|
|
||||||
extern struct options Options;
|
extern struct options Options;
|
||||||
|
|
|
@ -9,22 +9,11 @@
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "heap.h"
|
|
||||||
#include "msdos.h"
|
#include "msdos.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
#ifndef WINELIB
|
#ifndef WINELIB
|
||||||
|
|
||||||
/* loader/ldtlib.c */
|
|
||||||
|
|
||||||
struct segment_descriptor *
|
|
||||||
make_sd(unsigned base, unsigned limit, int contents, int read_exec_only, int seg32, int inpgs);
|
|
||||||
int get_ldt(void *buffer);
|
|
||||||
int set_ldt_entry(int entry, unsigned long base, unsigned int limit,
|
|
||||||
int seg_32bit_flag, int contents, int read_only_flag,
|
|
||||||
int limit_in_pages_flag);
|
|
||||||
|
|
||||||
/* loader/resource.c */
|
/* loader/resource.c */
|
||||||
|
|
||||||
extern HBITMAP ConvertCoreBitmap( HDC hdc, BITMAPCOREHEADER * image );
|
extern HBITMAP ConvertCoreBitmap( HDC hdc, BITMAPCOREHEADER * image );
|
||||||
|
@ -44,11 +33,6 @@ extern HINSTANCE LoadImage(char *modulename, int filetype, int change_dir);
|
||||||
extern int _WinMain(int argc, char **argv);
|
extern int _WinMain(int argc, char **argv);
|
||||||
extern void InitializeLoadedDLLs();
|
extern void InitializeLoadedDLLs();
|
||||||
|
|
||||||
extern int KERNEL_LockSegment(int segment);
|
|
||||||
extern int KERNEL_UnlockSegment(int segment);
|
|
||||||
extern void KERNEL_InitTask(void);
|
|
||||||
extern int KERNEL_WaitEvent(int task);
|
|
||||||
|
|
||||||
/* misc/spy.c */
|
/* misc/spy.c */
|
||||||
|
|
||||||
extern void SpyInit(void);
|
extern void SpyInit(void);
|
||||||
|
@ -57,9 +41,5 @@ extern void SpyInit(void);
|
||||||
|
|
||||||
extern BOOL WIDGETS_Init(void);
|
extern BOOL WIDGETS_Init(void);
|
||||||
|
|
||||||
/* windows/dce.c */
|
|
||||||
|
|
||||||
extern void DCE_Init(void);
|
|
||||||
|
|
||||||
#endif /* WINELIB */
|
#endif /* WINELIB */
|
||||||
#endif /* _WINE_PROTOTYPES_H */
|
#endif /* _WINE_PROTOTYPES_H */
|
||||||
|
|
|
@ -7,13 +7,11 @@
|
||||||
#include "wine.h"
|
#include "wine.h"
|
||||||
#include "stackframe.h"
|
#include "stackframe.h"
|
||||||
|
|
||||||
#define _CONTEXT ((struct sigcontext_struct *) pStack16Frame->args)
|
#define _CONTEXT ((struct sigcontext_struct *) CURRENT_STACK16->args)
|
||||||
#define _AX (_CONTEXT->sc_eax)
|
#define _AX (_CONTEXT->sc_eax)
|
||||||
#define _BX (_CONTEXT->sc_ebx)
|
#define _BX (_CONTEXT->sc_ebx)
|
||||||
#define _CX (_CONTEXT->sc_ecx)
|
#define _CX (_CONTEXT->sc_ecx)
|
||||||
#define _DX (_CONTEXT->sc_edx)
|
#define _DX (_CONTEXT->sc_edx)
|
||||||
#define _SP (_CONTEXT->sc_esp)
|
|
||||||
#define _BP (_CONTEXT->sc_ebp)
|
|
||||||
#define _SI (_CONTEXT->sc_esi)
|
#define _SI (_CONTEXT->sc_esi)
|
||||||
#define _DI (_CONTEXT->sc_edi)
|
#define _DI (_CONTEXT->sc_edi)
|
||||||
#define _DS (_CONTEXT->sc_ds)
|
#define _DS (_CONTEXT->sc_ds)
|
||||||
|
|
|
@ -1,97 +0,0 @@
|
||||||
/* $Id: segmem.h,v 1.3 1993/07/04 04:04:21 root Exp root $
|
|
||||||
*/
|
|
||||||
/*
|
|
||||||
* Copyright Robert J. Amstadt, 1993
|
|
||||||
*/
|
|
||||||
#ifndef SEGMEM_H
|
|
||||||
#define SEGMEM_H
|
|
||||||
|
|
||||||
#include "wine.h"
|
|
||||||
|
|
||||||
#ifdef __linux__
|
|
||||||
#define HAVE_IPC
|
|
||||||
#include <sys/ipc.h>
|
|
||||||
#include <sys/shm.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
|
||||||
#define HAVE_IPC
|
|
||||||
#include <sys/types.h>
|
|
||||||
#include <sys/ipc.h>
|
|
||||||
#include <sys/shm.h>
|
|
||||||
#define SHMSEG 32 /* XXX SEMMNI /usr/src/sys/conf/param.h */
|
|
||||||
#define SHM_RANGE_START 0x40000000
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Array to track selector allocation.
|
|
||||||
*/
|
|
||||||
#define SELECTOR_ISFREE 0x8000
|
|
||||||
#define SELECTOR_IS32BIT 0x4000
|
|
||||||
#define SELECTOR_INDEXMASK 0x0fff
|
|
||||||
|
|
||||||
#define __AHSHIFT 3
|
|
||||||
#define __AHINCR (1 << __AHSHIFT)
|
|
||||||
|
|
||||||
extern unsigned short* SelectorMap;
|
|
||||||
|
|
||||||
#ifdef HAVE_IPC
|
|
||||||
#define SAFEMAKEPTR(s, o) ((void *)(((int) (s) << 16) | ((o) & 0xffff)))
|
|
||||||
#define FIXPTR(p) (p)
|
|
||||||
#else
|
|
||||||
#define SAFEMAKEPTR(s, o) \
|
|
||||||
((void*)(((int)SelectorMap[SelectorMap[(s)>>__AHSHIFT] & SELECTOR_INDEXMASK]\
|
|
||||||
<< (16 + __AHSHIFT)) | 0x70000 | ((o) & 0xffff)))
|
|
||||||
#define FIXPTR(p) SAFEMAKEPTR((unsigned long) (p) >> 16, (p))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define MAKESELECTOR(fp) ((unsigned short) (fp >> (16 + __AHSHIFT)))
|
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Structure to hold info about each selector we create.
|
|
||||||
*/
|
|
||||||
|
|
||||||
typedef struct segment_descriptor_s
|
|
||||||
{
|
|
||||||
void *base_addr; /* Pointer to segment in flat memory */
|
|
||||||
unsigned int length; /* Length of segment */
|
|
||||||
unsigned int flags; /* Segment flags (see neexe.h and below)*/
|
|
||||||
unsigned short selector; /* Selector used to access this segment */
|
|
||||||
unsigned short owner; /* Handle of owner program */
|
|
||||||
unsigned char type; /* DATA or CODE */
|
|
||||||
#ifdef HAVE_IPC
|
|
||||||
key_t shm_key; /* Shared memory key or -1 */
|
|
||||||
#endif
|
|
||||||
} SEGDESC;
|
|
||||||
|
|
||||||
extern int IPCCopySelector(int i_old, unsigned long new, int swap_type);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Additional flags
|
|
||||||
*/
|
|
||||||
#define NE_SEGFLAGS_MALLOCED 0x00010000 /* Memory allocated with malloc() */
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Global memory flags
|
|
||||||
*/
|
|
||||||
#define GLOBAL_FLAGS_MOVEABLE 0x0002
|
|
||||||
#define GLOBAL_FLAGS_ZEROINIT 0x0040
|
|
||||||
#define GLOBAL_FLAGS_CODE 0x00010000
|
|
||||||
#define GLOBAL_FLAGS_EXECUTEONLY 0x00020000
|
|
||||||
#define GLOBAL_FLAGS_READONLY 0x00020000
|
|
||||||
|
|
||||||
#ifdef __ELF__
|
|
||||||
#define FIRST_SELECTOR 2
|
|
||||||
#define IS_16_BIT_ADDRESS(addr) \
|
|
||||||
(!(SelectorMap[(unsigned int)(addr) >> (16+__AHSHIFT)]& SELECTOR_IS32BIT))
|
|
||||||
#else
|
|
||||||
#define FIRST_SELECTOR 8
|
|
||||||
#define IS_16_BIT_ADDRESS(addr) \
|
|
||||||
((unsigned int)(addr) >= (((FIRST_SELECTOR << __AHSHIFT) | 7) << 16))
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
extern SEGDESC* Segments;
|
|
||||||
|
|
||||||
#endif /* SEGMEM_H */
|
|
|
@ -1,25 +1,28 @@
|
||||||
|
/*
|
||||||
|
* Selector definitions
|
||||||
|
*
|
||||||
|
* Copyright 1995 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
#ifndef __WINE_SELECTORS_H
|
#ifndef __WINE_SELECTORS_H
|
||||||
#define __WINE_SELECTORS_H
|
#define __WINE_SELECTORS_H
|
||||||
|
|
||||||
#include "dlls.h"
|
|
||||||
#include "segmem.h"
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
#include "ldt.h"
|
||||||
|
|
||||||
extern int FindUnusedSelectors(int n_selectors);
|
extern WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type,
|
||||||
extern int IPCCopySelector(int i_old, unsigned long new, int swap_type);
|
BOOL is32bit, BOOL readonly );
|
||||||
extern WORD AllocSelector(WORD old_selector);
|
extern WORD SELECTOR_ReallocBlock( WORD sel, void *base, DWORD size,
|
||||||
extern unsigned int PrestoChangoSelector(unsigned src_selector, unsigned dst_selector);
|
enum seg_type type, BOOL is32bit,
|
||||||
extern WORD AllocDStoCSAlias(WORD ds_selector);
|
BOOL readonly );
|
||||||
extern SEGDESC *CreateSelectors(struct w_files * wpnt);
|
|
||||||
extern WORD FreeSelector(WORD sel);
|
|
||||||
|
|
||||||
extern SEGDESC *CreateNewSegments(int code_flag, int read_only, int length,
|
#include "dlls.h"
|
||||||
int n_segments);
|
|
||||||
extern SEGDESC *GetNextSegment(unsigned int flags, unsigned int limit);
|
|
||||||
|
|
||||||
extern unsigned int GetEntryDLLName(char *dll_name, char *function, int *sel,
|
extern WORD *CreateSelectors( struct w_files * wpnt );
|
||||||
|
|
||||||
|
extern unsigned int GetEntryDLLName(char *dll_name, char *function, WORD *sel,
|
||||||
int *addr);
|
int *addr);
|
||||||
extern unsigned int GetEntryDLLOrdinal(char *dll_name, int ordinal, int *sel,
|
extern unsigned int GetEntryDLLOrdinal(char *dll_name, int ordinal, WORD *sel,
|
||||||
int *addr);
|
int *addr);
|
||||||
extern unsigned int GetEntryPointFromOrdinal(struct w_files * wpnt,
|
extern unsigned int GetEntryPointFromOrdinal(struct w_files * wpnt,
|
||||||
int ordinal);
|
int ordinal);
|
||||||
|
|
|
@ -8,13 +8,13 @@
|
||||||
#define WINE_STACKFRAME_H
|
#define WINE_STACKFRAME_H
|
||||||
|
|
||||||
#include <windows.h>
|
#include <windows.h>
|
||||||
|
#include "ldt.h"
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
WORD saved_ss;
|
WORD saved_ss;
|
||||||
WORD saved_bp;
|
WORD saved_bp;
|
||||||
WORD saved_sp;
|
WORD saved_sp;
|
||||||
WORD es;
|
|
||||||
WORD ds;
|
WORD ds;
|
||||||
WORD bp;
|
WORD bp;
|
||||||
WORD arg_length;
|
WORD arg_length;
|
||||||
|
@ -23,7 +23,13 @@ typedef struct
|
||||||
WORD args[1];
|
WORD args[1];
|
||||||
} STACK16FRAME;
|
} STACK16FRAME;
|
||||||
|
|
||||||
|
extern WORD IF1632_Saved16_ss;
|
||||||
|
extern WORD IF1632_Saved16_sp;
|
||||||
|
extern WORD IF1632_Saved16_bp;
|
||||||
|
|
||||||
extern STACK16FRAME *pStack16Frame;
|
#define CURRENT_STACK16 \
|
||||||
|
((STACK16FRAME *)PTR_SEG_OFF_TO_LIN(IF1632_Saved16_ss,IF1632_Saved16_sp))
|
||||||
|
|
||||||
|
#define CURRENT_DS (CURRENT_STACK16->ds)
|
||||||
|
|
||||||
#endif /* WINE_STACKFRAME_H */
|
#endif /* WINE_STACKFRAME_H */
|
||||||
|
|
|
@ -102,6 +102,7 @@
|
||||||
#undef DEBUG_FIXUP
|
#undef DEBUG_FIXUP
|
||||||
#undef DEBUG_FONT
|
#undef DEBUG_FONT
|
||||||
#undef DEBUG_GDI
|
#undef DEBUG_GDI
|
||||||
|
#undef DEBUG_GLOBAL
|
||||||
#undef DEBUG_GRAPHICS
|
#undef DEBUG_GRAPHICS
|
||||||
#undef DEBUG_HEAP
|
#undef DEBUG_HEAP
|
||||||
#undef DEBUG_ICON
|
#undef DEBUG_ICON
|
||||||
|
@ -110,6 +111,7 @@
|
||||||
#undef DEBUG_KEYBOARD
|
#undef DEBUG_KEYBOARD
|
||||||
#undef DEBUG_LDT
|
#undef DEBUG_LDT
|
||||||
#undef DEBUG_LISTBOX
|
#undef DEBUG_LISTBOX
|
||||||
|
#undef DEBUG_LOCAL
|
||||||
#undef DEBUG_MALLOC
|
#undef DEBUG_MALLOC
|
||||||
#undef DEBUG_MCI
|
#undef DEBUG_MCI
|
||||||
#undef DEBUG_MCIANIM
|
#undef DEBUG_MCIANIM
|
||||||
|
@ -135,6 +137,7 @@
|
||||||
#undef DEBUG_RELAY
|
#undef DEBUG_RELAY
|
||||||
#undef DEBUG_RESOURCE
|
#undef DEBUG_RESOURCE
|
||||||
#undef DEBUG_SCROLL
|
#undef DEBUG_SCROLL
|
||||||
|
#undef DEBUG_SELECTOR
|
||||||
#undef DEBUG_SELECTORS
|
#undef DEBUG_SELECTORS
|
||||||
#undef DEBUG_STACK
|
#undef DEBUG_STACK
|
||||||
#undef DEBUG_STRESS
|
#undef DEBUG_STRESS
|
||||||
|
@ -142,6 +145,7 @@
|
||||||
#undef DEBUG_TASK
|
#undef DEBUG_TASK
|
||||||
#undef DEBUG_TEXT
|
#undef DEBUG_TEXT
|
||||||
#undef DEBUG_TIMER
|
#undef DEBUG_TIMER
|
||||||
|
#undef DEBUG_TOOLHELP
|
||||||
#undef DEBUG_UTILITY
|
#undef DEBUG_UTILITY
|
||||||
#undef DEBUG_WIN
|
#undef DEBUG_WIN
|
||||||
#undef DEBUG_WINSOCK
|
#undef DEBUG_WINSOCK
|
||||||
|
@ -174,6 +178,7 @@
|
||||||
#define DEBUG_FIXUP
|
#define DEBUG_FIXUP
|
||||||
#define DEBUG_FONT
|
#define DEBUG_FONT
|
||||||
#define DEBUG_GDI
|
#define DEBUG_GDI
|
||||||
|
#define DEBUG_GLOBAL
|
||||||
#define DEBUG_GRAPHICS
|
#define DEBUG_GRAPHICS
|
||||||
#define DEBUG_HEAP
|
#define DEBUG_HEAP
|
||||||
#define DEBUG_ICON
|
#define DEBUG_ICON
|
||||||
|
@ -182,6 +187,7 @@
|
||||||
#define DEBUG_KEYBOARD
|
#define DEBUG_KEYBOARD
|
||||||
#define DEBUG_LDT
|
#define DEBUG_LDT
|
||||||
#define DEBUG_LISTBOX
|
#define DEBUG_LISTBOX
|
||||||
|
#define DEBUG_LOCAL
|
||||||
#define DEBUG_MALLOC
|
#define DEBUG_MALLOC
|
||||||
#define DEBUG_MCI
|
#define DEBUG_MCI
|
||||||
#define DEBUG_MCIANIM
|
#define DEBUG_MCIANIM
|
||||||
|
@ -207,6 +213,7 @@
|
||||||
#define DEBUG_RELAY
|
#define DEBUG_RELAY
|
||||||
#define DEBUG_RESOURCE
|
#define DEBUG_RESOURCE
|
||||||
#define DEBUG_SCROLL
|
#define DEBUG_SCROLL
|
||||||
|
#define DEBUG_SELECTOR
|
||||||
#define DEBUG_SELECTORS
|
#define DEBUG_SELECTORS
|
||||||
#define DEBUG_STACK
|
#define DEBUG_STACK
|
||||||
#define DEBUG_STRESS
|
#define DEBUG_STRESS
|
||||||
|
@ -214,6 +221,7 @@
|
||||||
#define DEBUG_TASK
|
#define DEBUG_TASK
|
||||||
#define DEBUG_TEXT
|
#define DEBUG_TEXT
|
||||||
#define DEBUG_TIMER
|
#define DEBUG_TIMER
|
||||||
|
#define DEBUG_TOOLHELP
|
||||||
#define DEBUG_UTILITY
|
#define DEBUG_UTILITY
|
||||||
#define DEBUG_WIN
|
#define DEBUG_WIN
|
||||||
#define DEBUG_WINSOCK
|
#define DEBUG_WINSOCK
|
||||||
|
|
|
@ -3,14 +3,93 @@
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
DECLARE_HANDLE(HMODULE);
|
|
||||||
DECLARE_HANDLE(HGLOBAL);
|
|
||||||
|
|
||||||
#define MAX_DATA 11
|
#define MAX_DATA 11
|
||||||
#define MAX_MODULE_NAME 9
|
#define MAX_MODULE_NAME 9
|
||||||
#define MAX_PATH 255
|
#define MAX_PATH 255
|
||||||
#define MAX_CLASSNAME 255
|
#define MAX_CLASSNAME 255
|
||||||
|
|
||||||
|
/* Global heap */
|
||||||
|
|
||||||
|
WORD GlobalHandleToSel( HANDLE handle );
|
||||||
|
|
||||||
|
|
||||||
|
/* Local heap */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
DWORD dwSize;
|
||||||
|
WORD wcItems;
|
||||||
|
} LOCALINFO;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
DWORD dwSize;
|
||||||
|
HLOCAL hHandle;
|
||||||
|
WORD wAddress;
|
||||||
|
WORD wSize;
|
||||||
|
WORD wFlags;
|
||||||
|
WORD wcLock;
|
||||||
|
WORD wType;
|
||||||
|
WORD hHeap;
|
||||||
|
WORD wHeapType;
|
||||||
|
WORD wNext;
|
||||||
|
} LOCALENTRY;
|
||||||
|
|
||||||
|
/* wHeapType values */
|
||||||
|
#define NORMAL_HEAP 0
|
||||||
|
#define USER_HEAP 1
|
||||||
|
#define GDI_HEAP 2
|
||||||
|
|
||||||
|
/* wFlags values */
|
||||||
|
#define LF_FIXED 1
|
||||||
|
#define LF_FREE 2
|
||||||
|
#define LF_MOVEABLE 4
|
||||||
|
|
||||||
|
/* wType values */
|
||||||
|
#define LT_NORMAL 0
|
||||||
|
#define LT_FREE 0xff
|
||||||
|
#define LT_GDI_PEN 1 /* LT_GDI_* is for GDI's heap */
|
||||||
|
#define LT_GDI_BRUSH 2
|
||||||
|
#define LT_GDI_FONT 3
|
||||||
|
#define LT_GDI_PALETTE 4
|
||||||
|
#define LT_GDI_BITMAP 5
|
||||||
|
#define LT_GDI_RGN 6
|
||||||
|
#define LT_GDI_DC 7
|
||||||
|
#define LT_GDI_DISABLED_DC 8
|
||||||
|
#define LT_GDI_METADC 9
|
||||||
|
#define LT_GDI_METAFILE 10
|
||||||
|
#define LT_GDI_MAX LT_GDI_METAFILE
|
||||||
|
#define LT_USER_CLASS 1 /* LT_USER_* is for USER's heap */
|
||||||
|
#define LT_USER_WND 2
|
||||||
|
#define LT_USER_STRING 3
|
||||||
|
#define LT_USER_MENU 4
|
||||||
|
#define LT_USER_CLIP 5
|
||||||
|
#define LT_USER_CBOX 6
|
||||||
|
#define LT_USER_PALETTE 7
|
||||||
|
#define LT_USER_ED 8
|
||||||
|
#define LT_USER_BWL 9
|
||||||
|
#define LT_USER_OWNERDRAW 10
|
||||||
|
#define LT_USER_SPB 11
|
||||||
|
#define LT_USER_CHECKPOINT 12
|
||||||
|
#define LT_USER_DCE 13
|
||||||
|
#define LT_USER_MWP 14
|
||||||
|
#define LT_USER_PROP 15
|
||||||
|
#define LT_USER_LBIV 16
|
||||||
|
#define LT_USER_MISC 17
|
||||||
|
#define LT_USER_ATOMS 18
|
||||||
|
#define LT_USER_LOCKINPUTSTATE 19
|
||||||
|
#define LT_USER_HOOKLIST 20
|
||||||
|
#define LT_USER_USERSEEUSERDOALLOC 21
|
||||||
|
#define LT_USER_HOTKEYLIST 22
|
||||||
|
#define LT_USER_POPUPMENU 23
|
||||||
|
#define LT_USER_HANDLETABLE 32
|
||||||
|
#define LT_USER_MAX LT_USER_HANDLETABLE
|
||||||
|
|
||||||
|
BOOL LocalInfo( LOCALINFO *pLocalInfo, HGLOBAL handle );
|
||||||
|
BOOL LocalFirst( LOCALENTRY *pLocalEntry, HGLOBAL handle );
|
||||||
|
BOOL LocalNext( LOCALENTRY *pLocalEntry );
|
||||||
|
|
||||||
|
|
||||||
/* modules */
|
/* modules */
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
|
@ -73,16 +152,37 @@ typedef struct tagMEMMANINFO {
|
||||||
} MEMMANINFO;
|
} MEMMANINFO;
|
||||||
typedef MEMMANINFO *LPMEMMANINFO;
|
typedef MEMMANINFO *LPMEMMANINFO;
|
||||||
|
|
||||||
typedef struct tagSYSHEAPINFO {
|
typedef struct
|
||||||
DWORD dwSize;
|
{
|
||||||
WORD wUserFreePercent;
|
DWORD dwSize;
|
||||||
WORD wGDIFreePercent;
|
WORD wUserFreePercent;
|
||||||
HGLOBAL hUserSegment;
|
WORD wGDIFreePercent;
|
||||||
HGLOBAL hGDISegment;
|
HGLOBAL hUserSegment;
|
||||||
|
HGLOBAL hGDISegment;
|
||||||
} SYSHEAPINFO;
|
} SYSHEAPINFO;
|
||||||
typedef SYSHEAPINFO *LPSYSHEAPINFO;
|
|
||||||
|
|
||||||
BOOL MemManInfo(LPMEMMANINFO lpEnhMode);
|
BOOL MemManInfo(LPMEMMANINFO lpEnhMode);
|
||||||
BOOL SystemHeapInfo(LPSYSHEAPINFO lpSysHeap);
|
BOOL SystemHeapInfo( SYSHEAPINFO *pHeapInfo );
|
||||||
|
|
||||||
|
|
||||||
|
/* Window classes */
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
DWORD dwSize;
|
||||||
|
HMODULE hInst; /* This is really an hModule */
|
||||||
|
char szClassName[MAX_CLASSNAME + 1];
|
||||||
|
WORD wNext;
|
||||||
|
} CLASSENTRY;
|
||||||
|
|
||||||
|
BOOL ClassFirst( CLASSENTRY *pClassEntry );
|
||||||
|
BOOL ClassNext( CLASSENTRY *pClassEntry );
|
||||||
|
|
||||||
|
|
||||||
|
/* Memory read/write */
|
||||||
|
|
||||||
|
DWORD MemoryRead( WORD sel, DWORD offset, void *buffer, DWORD count );
|
||||||
|
DWORD MemoryWrite( WORD sel, DWORD offset, void *buffer, DWORD count );
|
||||||
|
|
||||||
|
|
||||||
#endif /* __TOOLHELP_H */
|
#endif /* __TOOLHELP_H */
|
||||||
|
|
|
@ -7,8 +7,8 @@
|
||||||
#ifndef USER_H
|
#ifndef USER_H
|
||||||
#define USER_H
|
#define USER_H
|
||||||
|
|
||||||
#include "segmem.h"
|
#include "ldt.h"
|
||||||
#include "heap.h"
|
#include "local.h"
|
||||||
|
|
||||||
/* USER local heap */
|
/* USER local heap */
|
||||||
|
|
||||||
|
@ -16,18 +16,24 @@
|
||||||
|
|
||||||
#define USER_HEAP_ALLOC(f,size) LocalAlloc (f, size)
|
#define USER_HEAP_ALLOC(f,size) LocalAlloc (f, size)
|
||||||
#define USER_HEAP_REALLOC(handle,size,f) LocalReAlloc (handle,size,f)
|
#define USER_HEAP_REALLOC(handle,size,f) LocalReAlloc (handle,size,f)
|
||||||
#define USER_HEAP_ADDR(handle) LocalLock (handle)
|
#define USER_HEAP_LIN_ADDR(handle) LocalLock (handle)
|
||||||
|
#define USER_HEAP_SEG_ADDR(handle) LocalLock (handle)
|
||||||
#define USER_HEAP_FREE(handle) LocalFree (handle)
|
#define USER_HEAP_FREE(handle) LocalFree (handle)
|
||||||
#else
|
#else
|
||||||
|
|
||||||
extern MDESC *USER_Heap;
|
extern LPSTR USER_Heap;
|
||||||
|
extern WORD USER_HeapSel;
|
||||||
|
|
||||||
#define USER_HEAP_ALLOC(f,size) ((int)HEAP_Alloc(&USER_Heap,f,size) & 0xffff)
|
#define USER_HEAP_ALLOC(size) \
|
||||||
#define USER_HEAP_REALLOC(handle,size,f) ((int)HEAP_ReAlloc(&USER_Heap, \
|
LOCAL_Alloc( USER_HeapSel, LMEM_FIXED, (size) )
|
||||||
USER_HEAP_ADDR(handle),size,f) & 0xffff)
|
#define USER_HEAP_REALLOC(handle,size) \
|
||||||
#define USER_HEAP_FREE(handle) (HEAP_Free(&USER_Heap,USER_HEAP_ADDR(handle)))
|
LOCAL_ReAlloc( USER_HeapSel, (handle), (size), LMEM_FIXED )
|
||||||
#define USER_HEAP_ADDR(handle) \
|
#define USER_HEAP_FREE(handle) \
|
||||||
((void *)((handle) ? ((handle) | ((int)USER_Heap & 0xffff0000)) : 0))
|
LOCAL_Free( USER_HeapSel, (handle) )
|
||||||
|
#define USER_HEAP_LIN_ADDR(handle) \
|
||||||
|
((handle) ? PTR_SEG_OFF_TO_LIN(USER_HeapSel, (handle)) : NULL)
|
||||||
|
#define USER_HEAP_SEG_ADDR(handle) \
|
||||||
|
((handle) ? MAKELONG((handle), USER_HeapSel) : 0)
|
||||||
|
|
||||||
#endif /* WINELIB */
|
#endif /* WINELIB */
|
||||||
|
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
|
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
|
||||||
|
#include "ldt.h"
|
||||||
#include "class.h"
|
#include "class.h"
|
||||||
|
|
||||||
#define WND_MAGIC 0x444e4957 /* 'WIND' */
|
#define WND_MAGIC 0x444e4957 /* 'WIND' */
|
||||||
|
|
|
@ -1211,6 +1211,12 @@ typedef struct tagCOMSTAT
|
||||||
#define SPIF_UPDATEINIFILE 1
|
#define SPIF_UPDATEINIFILE 1
|
||||||
#define SPIF_SENDWININICHANGE 2
|
#define SPIF_SENDWININICHANGE 2
|
||||||
|
|
||||||
|
/* GetFreeSystemResources() parameters */
|
||||||
|
|
||||||
|
#define GFSR_SYSTEMRESOURCES 0x0000
|
||||||
|
#define GFSR_GDIRESOURCES 0x0001
|
||||||
|
#define GFSR_USERRESOURCES 0x0002
|
||||||
|
|
||||||
/* GetWinFlags */
|
/* GetWinFlags */
|
||||||
|
|
||||||
#define WF_PMODE 0x0001
|
#define WF_PMODE 0x0001
|
||||||
|
@ -1229,25 +1235,25 @@ typedef struct tagCOMSTAT
|
||||||
#define WF_PAGING 0x0800
|
#define WF_PAGING 0x0800
|
||||||
#define WF_WLO 0x8000
|
#define WF_WLO 0x8000
|
||||||
|
|
||||||
#define MAKEINTRESOURCE(i) (LPSTR)((DWORD)((WORD)(i)))
|
#define MAKEINTRESOURCE(i) (SEGPTR)((DWORD)((WORD)(i)))
|
||||||
|
|
||||||
#define IDI_APPLICATION MAKEINTRESOURCE(32512)
|
#define IDI_APPLICATION MAKEINTRESOURCE(32512)
|
||||||
#define IDI_HAND MAKEINTRESOURCE(32513)
|
#define IDI_HAND MAKEINTRESOURCE(32513)
|
||||||
#define IDI_QUESTION MAKEINTRESOURCE(32514)
|
#define IDI_QUESTION MAKEINTRESOURCE(32514)
|
||||||
#define IDI_EXCLAMATION MAKEINTRESOURCE(32515)
|
#define IDI_EXCLAMATION MAKEINTRESOURCE(32515)
|
||||||
#define IDI_ASTERISK MAKEINTRESOURCE(32516)
|
#define IDI_ASTERISK MAKEINTRESOURCE(32516)
|
||||||
|
|
||||||
#define IDC_ARROW MAKEINTRESOURCE(32512)
|
#define IDC_ARROW MAKEINTRESOURCE(32512)
|
||||||
#define IDC_IBEAM MAKEINTRESOURCE(32513)
|
#define IDC_IBEAM MAKEINTRESOURCE(32513)
|
||||||
#define IDC_WAIT MAKEINTRESOURCE(32514)
|
#define IDC_WAIT MAKEINTRESOURCE(32514)
|
||||||
#define IDC_CROSS MAKEINTRESOURCE(32515)
|
#define IDC_CROSS MAKEINTRESOURCE(32515)
|
||||||
#define IDC_UPARROW MAKEINTRESOURCE(32516)
|
#define IDC_UPARROW MAKEINTRESOURCE(32516)
|
||||||
#define IDC_SIZE MAKEINTRESOURCE(32540)
|
#define IDC_SIZE MAKEINTRESOURCE(32540)
|
||||||
#define IDC_ICON MAKEINTRESOURCE(32541)
|
#define IDC_ICON MAKEINTRESOURCE(32541)
|
||||||
#define IDC_SIZENWSE MAKEINTRESOURCE(32542)
|
#define IDC_SIZENWSE MAKEINTRESOURCE(32542)
|
||||||
#define IDC_SIZENESW MAKEINTRESOURCE(32543)
|
#define IDC_SIZENESW MAKEINTRESOURCE(32543)
|
||||||
#define IDC_SIZEWE MAKEINTRESOURCE(32544)
|
#define IDC_SIZEWE MAKEINTRESOURCE(32544)
|
||||||
#define IDC_SIZENS MAKEINTRESOURCE(32545)
|
#define IDC_SIZENS MAKEINTRESOURCE(32545)
|
||||||
|
|
||||||
/* OEM Resource Ordinal Numbers */
|
/* OEM Resource Ordinal Numbers */
|
||||||
#define OBM_CLOSE 32754
|
#define OBM_CLOSE 32754
|
||||||
|
@ -2315,8 +2321,8 @@ F(LONG,GetMessageTime)
|
||||||
F(LONG,GetVersion)
|
F(LONG,GetVersion)
|
||||||
F(LONG,GetWinFlags)
|
F(LONG,GetWinFlags)
|
||||||
F(LPINT,GetThresholdEvent)
|
F(LPINT,GetThresholdEvent)
|
||||||
F(LPSTR,GetDOSEnvironment)
|
|
||||||
F(LPSTR,ValidateFreeSpaces)
|
F(LPSTR,ValidateFreeSpaces)
|
||||||
|
F(SEGPTR,GetDOSEnvironment)
|
||||||
F(WORD,GetCaretBlinkTime)
|
F(WORD,GetCaretBlinkTime)
|
||||||
F(WORD,GetCurrentPDB)
|
F(WORD,GetCurrentPDB)
|
||||||
F(WORD,GetDoubleClickTime)
|
F(WORD,GetDoubleClickTime)
|
||||||
|
@ -2361,7 +2367,9 @@ Fa(BOOL,EnableHardwareInput,BOOL,a)
|
||||||
Fa(BOOL,EndDeferWindowPos,HDWP,hWinPosInfo)
|
Fa(BOOL,EndDeferWindowPos,HDWP,hWinPosInfo)
|
||||||
Fa(BOOL,FreeModule,HANDLE,a)
|
Fa(BOOL,FreeModule,HANDLE,a)
|
||||||
Fa(BOOL,FreeResource,HANDLE,a)
|
Fa(BOOL,FreeResource,HANDLE,a)
|
||||||
Fa(BOOL,InitAtomTable,WORD,a)
|
Fa(BOOL,GlobalUnWire,HGLOBAL,a)
|
||||||
|
Fa(BOOL,GlobalUnlock,HGLOBAL,a)
|
||||||
|
Fa(BOOL,IsBadCodePtr,SEGPTR,a)
|
||||||
Fa(BOOL,IsCharAlpha,char,ch)
|
Fa(BOOL,IsCharAlpha,char,ch)
|
||||||
Fa(BOOL,IsCharAlphaNumeric,char,ch)
|
Fa(BOOL,IsCharAlphaNumeric,char,ch)
|
||||||
Fa(BOOL,IsCharLower,char,ch)
|
Fa(BOOL,IsCharLower,char,ch)
|
||||||
|
@ -2395,10 +2403,15 @@ Fa(DWORD,GetBrushOrg,HDC,a)
|
||||||
Fa(DWORD,GetCurrentPosition,HDC,a)
|
Fa(DWORD,GetCurrentPosition,HDC,a)
|
||||||
Fa(DWORD,GetDCOrg,HDC,a)
|
Fa(DWORD,GetDCOrg,HDC,a)
|
||||||
Fa(DWORD,GetFreeSpace,WORD,a)
|
Fa(DWORD,GetFreeSpace,WORD,a)
|
||||||
|
Fa(DWORD,GetHeapSpaces,HMODULE,a)
|
||||||
Fa(DWORD,GetViewportExt,HDC,a)
|
Fa(DWORD,GetViewportExt,HDC,a)
|
||||||
Fa(DWORD,GetViewportOrg,HDC,a)
|
Fa(DWORD,GetViewportOrg,HDC,a)
|
||||||
Fa(DWORD,GetWindowExt,HDC,a)
|
Fa(DWORD,GetWindowExt,HDC,a)
|
||||||
Fa(DWORD,GetWindowOrg,HDC,a)
|
Fa(DWORD,GetWindowOrg,HDC,a)
|
||||||
|
Fa(DWORD,GlobalCompact,DWORD,a)
|
||||||
|
Fa(DWORD,GlobalDOSAlloc,DWORD,a)
|
||||||
|
Fa(DWORD,GlobalHandle,WORD,a)
|
||||||
|
Fa(DWORD,GlobalSize,HGLOBAL,a)
|
||||||
Fa(DWORD,OemKeyScan,WORD,a)
|
Fa(DWORD,OemKeyScan,WORD,a)
|
||||||
Fa(FARPROC,LocalNotify,FARPROC,a)
|
Fa(FARPROC,LocalNotify,FARPROC,a)
|
||||||
Fa(HANDLE,CreateMetaFile,LPSTR,a)
|
Fa(HANDLE,CreateMetaFile,LPSTR,a)
|
||||||
|
@ -2413,9 +2426,7 @@ Fa(HANDLE,GetWindowTask,HWND,a)
|
||||||
Fa(HANDLE,LoadLibrary,LPSTR,a)
|
Fa(HANDLE,LoadLibrary,LPSTR,a)
|
||||||
Fa(HANDLE,LocalFree,HANDLE,a)
|
Fa(HANDLE,LocalFree,HANDLE,a)
|
||||||
Fa(HANDLE,LocalHandle,WORD,a)
|
Fa(HANDLE,LocalHandle,WORD,a)
|
||||||
Fa(HANDLE,LockSegment,WORD,a)
|
|
||||||
Fa(HANDLE,SetMetaFileBits,HANDLE,a)
|
Fa(HANDLE,SetMetaFileBits,HANDLE,a)
|
||||||
Fa(HANDLE,UnlockSegment,WORD,a)
|
|
||||||
Fa(HBITMAP,CreateBitmapIndirect,BITMAP FAR*,a)
|
Fa(HBITMAP,CreateBitmapIndirect,BITMAP FAR*,a)
|
||||||
Fa(HBRUSH,CreateBrushIndirect,LOGBRUSH FAR*,a)
|
Fa(HBRUSH,CreateBrushIndirect,LOGBRUSH FAR*,a)
|
||||||
Fa(HBRUSH,CreatePatternBrush,HBITMAP,a)
|
Fa(HBRUSH,CreatePatternBrush,HBITMAP,a)
|
||||||
|
@ -2427,6 +2438,10 @@ Fa(HDC,GetDCState,HDC,a)
|
||||||
Fa(HDC,GetWindowDC,HWND,a)
|
Fa(HDC,GetWindowDC,HWND,a)
|
||||||
Fa(HDWP,BeginDeferWindowPos,INT,nNumWindows)
|
Fa(HDWP,BeginDeferWindowPos,INT,nNumWindows)
|
||||||
Fa(HFONT,CreateFontIndirect,LOGFONT FAR*,a)
|
Fa(HFONT,CreateFontIndirect,LOGFONT FAR*,a)
|
||||||
|
Fa(HGLOBAL,GlobalFree,HGLOBAL,a)
|
||||||
|
Fa(HGLOBAL,GlobalLRUNewest,HGLOBAL,a)
|
||||||
|
Fa(HGLOBAL,GlobalLRUOldest,HGLOBAL,a)
|
||||||
|
Fa(HGLOBAL,LockSegment,HGLOBAL,a)
|
||||||
Fa(HMENU,GetMenu,HWND,a)
|
Fa(HMENU,GetMenu,HWND,a)
|
||||||
Fa(HMENU,LoadMenuIndirect,LPSTR,a)
|
Fa(HMENU,LoadMenuIndirect,LPSTR,a)
|
||||||
Fa(HMETAFILE,CloseMetaFile,HANDLE,a)
|
Fa(HMETAFILE,CloseMetaFile,HANDLE,a)
|
||||||
|
@ -2451,13 +2466,17 @@ Fa(INT,lstrlen,LPCSTR,a)
|
||||||
Fa(LONG,DispatchMessage,LPMSG,msg)
|
Fa(LONG,DispatchMessage,LPMSG,msg)
|
||||||
Fa(LONG,SetSwapAreaSize,WORD,a)
|
Fa(LONG,SetSwapAreaSize,WORD,a)
|
||||||
Fa(LPSTR,AnsiLower,LPSTR,a)
|
Fa(LPSTR,AnsiLower,LPSTR,a)
|
||||||
Fa(LPSTR,AnsiNext,LPSTR,a)
|
Fa(SEGPTR,AnsiNext,SEGPTR,a)
|
||||||
Fa(LPSTR,AnsiUpper,LPSTR,a)
|
Fa(LPSTR,AnsiUpper,LPSTR,a)
|
||||||
|
Fa(LPSTR,GlobalLock,HGLOBAL,a)
|
||||||
|
Fa(LPSTR,GlobalWire,HGLOBAL,a)
|
||||||
Fa(LPSTR,LockResource,HANDLE,a)
|
Fa(LPSTR,LockResource,HANDLE,a)
|
||||||
|
Fa(SEGPTR,WIN16_GlobalLock,HGLOBAL,a)
|
||||||
Fa(UINT,GDIRealizePalette,HDC,a)
|
Fa(UINT,GDIRealizePalette,HDC,a)
|
||||||
Fa(UINT,RealizePalette,HDC,a)
|
Fa(UINT,RealizePalette,HDC,a)
|
||||||
Fa(WORD,AllocDStoCSAlias,WORD,a)
|
Fa(WORD,AllocDStoCSAlias,WORD,a)
|
||||||
Fa(WORD,AllocSelector,WORD,a)
|
Fa(WORD,AllocSelector,WORD,a)
|
||||||
|
Fa(WORD,AllocSelectorArray,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)
|
||||||
|
@ -2471,15 +2490,20 @@ Fa(WORD,GetRelAbs,HDC,a)
|
||||||
Fa(WORD,GetStretchBltMode,HDC,a)
|
Fa(WORD,GetStretchBltMode,HDC,a)
|
||||||
Fa(WORD,GetTaskQueue,HANDLE,a)
|
Fa(WORD,GetTaskQueue,HANDLE,a)
|
||||||
Fa(WORD,GetTextAlign,HDC,a)
|
Fa(WORD,GetTextAlign,HDC,a)
|
||||||
|
Fa(WORD,GlobalDOSFree,WORD,a)
|
||||||
|
Fa(WORD,GlobalFlags,HGLOBAL,a)
|
||||||
|
Fa(WORD,GlobalPageLock,HGLOBAL,a)
|
||||||
|
Fa(WORD,GlobalPageUnlock,HGLOBAL,a)
|
||||||
|
Fa(WORD,InitAtomTable,WORD,a)
|
||||||
Fa(WORD,LocalCompact,WORD,a)
|
Fa(WORD,LocalCompact,WORD,a)
|
||||||
Fa(WORD,LocalFlags,HANDLE,a)
|
Fa(WORD,LocalFlags,HLOCAL,a)
|
||||||
Fa(WORD,LocalSize,HANDLE,a)
|
Fa(WORD,LocalLock,HLOCAL,a)
|
||||||
|
Fa(WORD,LocalSize,HLOCAL,a)
|
||||||
Fa(WORD,RealizeDefaultPalette,HDC,a)
|
Fa(WORD,RealizeDefaultPalette,HDC,a)
|
||||||
Fa(WORD,RegisterClipboardFormat,LPCSTR,a)
|
Fa(WORD,RegisterClipboardFormat,LPCSTR,a)
|
||||||
Fa(WORD,RegisterWindowMessage,LPCSTR,a)
|
Fa(WORD,RegisterWindowMessage,LPCSTR,a)
|
||||||
Fa(WORD,SetHandleCount,WORD,a)
|
Fa(WORD,SetHandleCount,WORD,a)
|
||||||
Fa(WORD,VkKeyScan,WORD,a)
|
Fa(WORD,VkKeyScan,WORD,a)
|
||||||
Fa(char NEAR*,LocalLock,HANDLE,a)
|
|
||||||
Fa(int,AddFontResource,LPSTR,a)
|
Fa(int,AddFontResource,LPSTR,a)
|
||||||
Fa(int,Catch,LPCATCHBUF,a)
|
Fa(int,Catch,LPCATCHBUF,a)
|
||||||
Fa(int,ClearCommBreak,int,a)
|
Fa(int,ClearCommBreak,int,a)
|
||||||
|
@ -2509,6 +2533,9 @@ Fa(void,FreeProcInstance,FARPROC,a)
|
||||||
Fa(void,GetCaretPos,LPPOINT,a)
|
Fa(void,GetCaretPos,LPPOINT,a)
|
||||||
Fa(void,GetCursorPos,LPPOINT,a)
|
Fa(void,GetCursorPos,LPPOINT,a)
|
||||||
Fa(void,GetKeyboardState,BYTE FAR*,a)
|
Fa(void,GetKeyboardState,BYTE FAR*,a)
|
||||||
|
Fa(void,GlobalFix,HGLOBAL,a)
|
||||||
|
Fa(void,GlobalNotify,FARPROC,a)
|
||||||
|
Fa(void,GlobalUnfix,HGLOBAL,a)
|
||||||
Fa(void,HideCaret,HWND,a)
|
Fa(void,HideCaret,HWND,a)
|
||||||
Fa(void,LimitEmsPages,DWORD,a)
|
Fa(void,LimitEmsPages,DWORD,a)
|
||||||
Fa(void,MessageBeep,WORD,a)
|
Fa(void,MessageBeep,WORD,a)
|
||||||
|
@ -2522,8 +2549,9 @@ Fa(void,SetKeyboardState,BYTE FAR*,a)
|
||||||
Fa(void,SetRectEmpty,LPRECT,a)
|
Fa(void,SetRectEmpty,LPRECT,a)
|
||||||
Fa(void,ShowCaret,HWND,a)
|
Fa(void,ShowCaret,HWND,a)
|
||||||
Fa(void,SwapRecording,WORD,a)
|
Fa(void,SwapRecording,WORD,a)
|
||||||
|
Fa(void,UnlockSegment,HGLOBAL,a)
|
||||||
Fa(void,UpdateWindow,HWND,a)
|
Fa(void,UpdateWindow,HWND,a)
|
||||||
Fb(BOOL,CallMsgFilter,LPMSG,a,short,b)
|
Fb(BOOL,CallMsgFilter,SEGPTR,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)
|
||||||
|
@ -2541,6 +2569,11 @@ Fb(BOOL,GetWindowExtEx,HDC,a,LPPOINT,b)
|
||||||
Fb(BOOL,GetWindowOrgEx,HDC,a,LPPOINT,b)
|
Fb(BOOL,GetWindowOrgEx,HDC,a,LPPOINT,b)
|
||||||
Fb(BOOL,GetWindowPlacement,HWND,a,LPWINDOWPLACEMENT,b)
|
Fb(BOOL,GetWindowPlacement,HWND,a,LPWINDOWPLACEMENT,b)
|
||||||
Fb(BOOL,InvertRgn,HDC,a,HRGN,b)
|
Fb(BOOL,InvertRgn,HDC,a,HRGN,b)
|
||||||
|
Fb(BOOL,IsBadHugeReadPtr,SEGPTR,a,DWORD,b)
|
||||||
|
Fb(BOOL,IsBadHugeWritePtr,SEGPTR,a,DWORD,b)
|
||||||
|
Fb(BOOL,IsBadReadPtr,SEGPTR,a,WORD,b)
|
||||||
|
Fb(BOOL,IsBadStringPtr,SEGPTR,a,WORD,b)
|
||||||
|
Fb(BOOL,IsBadWritePtr,SEGPTR,a,WORD,b)
|
||||||
Fb(BOOL,IsChild,HWND,a,HWND,b)
|
Fb(BOOL,IsChild,HWND,a,HWND,b)
|
||||||
Fb(BOOL,IsDialogMessage,HWND,a,LPMSG,b)
|
Fb(BOOL,IsDialogMessage,HWND,a,LPMSG,b)
|
||||||
Fb(BOOL,KillSystemTimer,HWND,a,WORD,b)
|
Fb(BOOL,KillSystemTimer,HWND,a,WORD,b)
|
||||||
|
@ -2568,23 +2601,24 @@ Fb(FARPROC,GetProcAddress,HANDLE,a,LPSTR,b)
|
||||||
Fb(FARPROC,MakeProcInstance,FARPROC,a,HANDLE,b)
|
Fb(FARPROC,MakeProcInstance,FARPROC,a,HANDLE,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)
|
||||||
Fb(HANDLE,LoadAccelerators,HANDLE,a,LPSTR,b)
|
Fb(HANDLE,LoadAccelerators,HANDLE,a,SEGPTR,b)
|
||||||
Fb(HANDLE,LoadModule,LPSTR,a,LPVOID,b)
|
Fb(HANDLE,LoadModule,LPSTR,a,LPVOID,b)
|
||||||
Fb(HANDLE,LoadResource,HANDLE,a,HANDLE,b)
|
Fb(HANDLE,LoadResource,HANDLE,a,HANDLE,b)
|
||||||
Fb(HANDLE,LocalAlloc,WORD,a,WORD,b)
|
Fb(HANDLE,LocalAlloc,WORD,a,WORD,b)
|
||||||
Fb(HANDLE,RemoveProp,HWND,a,LPSTR,b)
|
Fb(HANDLE,RemoveProp,HWND,a,LPSTR,b)
|
||||||
Fb(HANDLE,SelectObject,HDC,a,HANDLE,b)
|
Fb(HANDLE,SelectObject,HDC,a,HANDLE,b)
|
||||||
Fb(HANDLE,SetClipboardData,WORD,a,HANDLE,b)
|
Fb(HANDLE,SetClipboardData,WORD,a,HANDLE,b)
|
||||||
Fb(HBITMAP,LoadBitmap,HANDLE,a,LPSTR,b)
|
Fb(HBITMAP,LoadBitmap,HANDLE,a,SEGPTR,b)
|
||||||
Fb(HBRUSH,CreateDIBPatternBrush,HANDLE,a,WORD,b)
|
Fb(HBRUSH,CreateDIBPatternBrush,HANDLE,a,WORD,b)
|
||||||
Fb(HBRUSH,CreateHatchBrush,short,a,COLORREF,b)
|
Fb(HBRUSH,CreateHatchBrush,short,a,COLORREF,b)
|
||||||
Fb(HCURSOR,LoadCursor,HANDLE,a,LPSTR,b)
|
Fb(HCURSOR,LoadCursor,HANDLE,a,SEGPTR,b)
|
||||||
Fb(HDC,BeginPaint,HWND,a,LPPAINTSTRUCT,b)
|
Fb(HDC,BeginPaint,HWND,a,LPPAINTSTRUCT,b)
|
||||||
|
Fb(HGLOBAL,GlobalAlloc,WORD,a,DWORD,b)
|
||||||
Fb(HHOOK,SetWindowsHook,short,a,HOOKPROC,b)
|
Fb(HHOOK,SetWindowsHook,short,a,HOOKPROC,b)
|
||||||
Fb(HICON,LoadIcon,HANDLE,a,LPSTR,b)
|
Fb(HICON,LoadIcon,HANDLE,a,SEGPTR,b)
|
||||||
Fb(HMENU,GetSubMenu,HMENU,a,short,b)
|
Fb(HMENU,GetSubMenu,HMENU,a,short,b)
|
||||||
Fb(HMENU,GetSystemMenu,HWND,a,BOOL,b)
|
Fb(HMENU,GetSystemMenu,HWND,a,BOOL,b)
|
||||||
Fb(HMENU,LoadMenu,HANDLE,a,LPSTR,b)
|
Fb(HMENU,LoadMenu,HANDLE,a,SEGPTR,b)
|
||||||
Fb(HMENU,LookupMenuHandle,HMENU,a,INT,b)
|
Fb(HMENU,LookupMenuHandle,HMENU,a,INT,b)
|
||||||
Fb(HPALETTE,GDISelectPalette,HDC,a,HPALETTE,b)
|
Fb(HPALETTE,GDISelectPalette,HDC,a,HPALETTE,b)
|
||||||
Fb(HWND,ChildWindowFromPoint,HWND,a,POINT,b)
|
Fb(HWND,ChildWindowFromPoint,HWND,a,POINT,b)
|
||||||
|
@ -2601,9 +2635,9 @@ Fb(INT,lstrcmpi,LPCSTR,a,LPCSTR,b )
|
||||||
Fb(LONG,EscapeCommFunction,int,a,int,b)
|
Fb(LONG,EscapeCommFunction,int,a,int,b)
|
||||||
Fb(LONG,GetClassLong,HWND,a,short,b)
|
Fb(LONG,GetClassLong,HWND,a,short,b)
|
||||||
Fb(LONG,GetWindowLong,HWND,a,short,b)
|
Fb(LONG,GetWindowLong,HWND,a,short,b)
|
||||||
Fb(LPSTR,AnsiPrev,LPSTR,a,LPSTR,b)
|
Fb(SEGPTR,AnsiPrev,SEGPTR,a,SEGPTR,b)
|
||||||
Fb(LPSTR,lstrcat,LPSTR,a,LPCSTR,b )
|
Fb(SEGPTR,lstrcat,SEGPTR,a,SEGPTR,b)
|
||||||
Fb(LPSTR,lstrcpy,LPSTR,a,LPCSTR,b )
|
Fb(SEGPTR,lstrcpy,SEGPTR,a,SEGPTR,b)
|
||||||
Fb(WORD FAR*,SetCommEventMask,int,a,WORD,b)
|
Fb(WORD FAR*,SetCommEventMask,int,a,WORD,b)
|
||||||
Fb(WORD,AnsiLowerBuff,LPSTR,a,WORD,b)
|
Fb(WORD,AnsiLowerBuff,LPSTR,a,WORD,b)
|
||||||
Fb(WORD,AnsiUpperBuff,LPSTR,a,WORD,b)
|
Fb(WORD,AnsiUpperBuff,LPSTR,a,WORD,b)
|
||||||
|
@ -2619,6 +2653,7 @@ Fb(WORD,GetWindowsDirectory,LPSTR,a,WORD,b)
|
||||||
Fb(WORD,IsDlgButtonChecked,HWND,a,WORD,b)
|
Fb(WORD,IsDlgButtonChecked,HWND,a,WORD,b)
|
||||||
Fb(WORD,LocalShrink,HANDLE,a,WORD,b)
|
Fb(WORD,LocalShrink,HANDLE,a,WORD,b)
|
||||||
Fb(WORD,MapVirtualKey,WORD,a,WORD,b)
|
Fb(WORD,MapVirtualKey,WORD,a,WORD,b)
|
||||||
|
Fb(WORD,PrestoChangoSelector,WORD,a,WORD,b)
|
||||||
Fb(WORD,SetBkMode,HDC,a,WORD,b)
|
Fb(WORD,SetBkMode,HDC,a,WORD,b)
|
||||||
Fb(WORD,SetMapMode,HDC,a,WORD,b)
|
Fb(WORD,SetMapMode,HDC,a,WORD,b)
|
||||||
Fb(WORD,SetPolyFillMode,HDC,a,WORD,b)
|
Fb(WORD,SetPolyFillMode,HDC,a,WORD,b)
|
||||||
|
@ -2711,12 +2746,13 @@ Fc(DWORD,SetWindowExt,HDC,a,short,b,short,c)
|
||||||
Fc(DWORD,SetWindowOrg,HDC,a,short,b,short,c)
|
Fc(DWORD,SetWindowOrg,HDC,a,short,b,short,c)
|
||||||
Fc(FARPROC,SetResourceHandler,HANDLE,a,LPSTR,b,FARPROC,c)
|
Fc(FARPROC,SetResourceHandler,HANDLE,a,LPSTR,b,FARPROC,c)
|
||||||
Fc(HANDLE,AllocResource,HANDLE,a,HANDLE,b,DWORD,c)
|
Fc(HANDLE,AllocResource,HANDLE,a,HANDLE,b,DWORD,c)
|
||||||
Fc(HANDLE,FindResource,HANDLE,a,LPSTR,b,LPSTR,c)
|
Fc(HANDLE,FindResource,HANDLE,a,SEGPTR,b,SEGPTR,c)
|
||||||
Fc(HANDLE,LocalReAlloc,HANDLE,a,WORD,b,WORD,c)
|
Fc(HANDLE,LocalReAlloc,HANDLE,a,WORD,b,WORD,c)
|
||||||
Fc(HBITMAP,CreateCompatibleBitmap,HDC,a,short,b,short,c)
|
Fc(HBITMAP,CreateCompatibleBitmap,HDC,a,short,b,short,c)
|
||||||
Fc(HBITMAP,CreateDiscardableBitmap,HDC,a,short,b,short,c)
|
Fc(HBITMAP,CreateDiscardableBitmap,HDC,a,short,b,short,c)
|
||||||
Fc(HBRUSH,GetControlBrush,HWND,a,HDC,b,WORD,c)
|
Fc(HBRUSH,GetControlBrush,HWND,a,HDC,b,WORD,c)
|
||||||
Fc(HDC,GetDCEx,HWND,a,HRGN,b,DWORD,c)
|
Fc(HDC,GetDCEx,HWND,a,HRGN,b,DWORD,c)
|
||||||
|
Fc(HGLOBAL,GlobalReAlloc,HGLOBAL,a,DWORD,b,WORD,c)
|
||||||
Fc(HPALETTE,SelectPalette,HDC,a,HPALETTE,b,BOOL,c)
|
Fc(HPALETTE,SelectPalette,HDC,a,HPALETTE,b,BOOL,c)
|
||||||
Fc(HPEN,CreatePen,short,a,short,b,COLORREF,c)
|
Fc(HPEN,CreatePen,short,a,short,b,COLORREF,c)
|
||||||
Fc(HRGN,CreatePolygonRgn,LPPOINT,a,short,b,short,c)
|
Fc(HRGN,CreatePolygonRgn,LPPOINT,a,short,b,short,c)
|
||||||
|
@ -2731,6 +2767,7 @@ Fc(LONG,SetBitmapBits,HBITMAP,a,LONG,b,LPSTR,c)
|
||||||
Fc(LONG,SetClassLong,HWND,a,short,b,LONG,c)
|
Fc(LONG,SetClassLong,HWND,a,short,b,LONG,c)
|
||||||
Fc(LONG,SetWindowLong,HWND,a,short,b,LONG,c)
|
Fc(LONG,SetWindowLong,HWND,a,short,b,LONG,c)
|
||||||
Fc(LONG,_llseek,INT,a,LONG,b,INT,c)
|
Fc(LONG,_llseek,INT,a,LONG,b,INT,c)
|
||||||
|
Fc(SEGPTR,lstrcpyn,SEGPTR,a,SEGPTR,b,WORD,c)
|
||||||
Fc(WORD,GetAtomName,ATOM,a,LPSTR,b,short,c)
|
Fc(WORD,GetAtomName,ATOM,a,LPSTR,b,short,c)
|
||||||
Fc(WORD,GetInternalWindowPos,HWND,a,LPRECT,b,LPPOINT,c)
|
Fc(WORD,GetInternalWindowPos,HWND,a,LPRECT,b,LPPOINT,c)
|
||||||
Fc(WORD,GetMenuState,HMENU,a,WORD,b,WORD,c)
|
Fc(WORD,GetMenuState,HMENU,a,WORD,b,WORD,c)
|
||||||
|
@ -2769,7 +2806,7 @@ 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,SEGPTR,c)
|
||||||
Fc(void,SetSysColors,int,a,LPINT,b,COLORREF*,c)
|
Fc(void,SetSysColors,int,a,LPINT,b,COLORREF*,c)
|
||||||
Fc(void,ShowScrollBar,HWND,a,WORD,b,BOOL,c)
|
Fc(void,ShowScrollBar,HWND,a,WORD,b,BOOL,c)
|
||||||
Fc(void,SwitchStackTo,WORD,a,WORD,b,WORD,c)
|
Fc(void,SwitchStackTo,WORD,a,WORD,b,WORD,c)
|
||||||
|
@ -2778,7 +2815,7 @@ Fd(BOOL,DrawIcon,HDC,a,short,b,short,c,HICON,d)
|
||||||
Fd(BOOL,EnumMetaFile,HDC,a,LOCALHANDLE,b,FARPROC,c,BYTE FAR*,d)
|
Fd(BOOL,EnumMetaFile,HDC,a,LOCALHANDLE,b,FARPROC,c,BYTE FAR*,d)
|
||||||
Fd(BOOL,FloodFill,HDC,a,INT,b,INT,c,COLORREF,d)
|
Fd(BOOL,FloodFill,HDC,a,INT,b,INT,c,COLORREF,d)
|
||||||
Fd(BOOL,GetCharWidth,HDC,a,WORD,b,WORD,c,LPINT,d)
|
Fd(BOOL,GetCharWidth,HDC,a,WORD,b,WORD,c,LPINT,d)
|
||||||
Fd(BOOL,GetMessage,LPMSG,msg,HWND,b,WORD,c,WORD,d)
|
Fd(BOOL,GetMessage,SEGPTR,msg,HWND,b,WORD,c,WORD,d)
|
||||||
Fd(BOOL,GetTextExtentPoint,HDC,a,LPSTR,b,short,c,LPSIZE,d)
|
Fd(BOOL,GetTextExtentPoint,HDC,a,LPSTR,b,short,c,LPSIZE,d)
|
||||||
Fd(BOOL,HiliteMenuItem,HWND,a,HMENU,b,WORD,c,WORD,d)
|
Fd(BOOL,HiliteMenuItem,HWND,a,HMENU,b,WORD,c,WORD,d)
|
||||||
Fd(BOOL,MoveToEx,HDC,a,short,b,short,c,LPPOINT,d)
|
Fd(BOOL,MoveToEx,HDC,a,short,b,short,c,LPPOINT,d)
|
||||||
|
@ -2804,7 +2841,7 @@ 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)
|
||||||
Fd(HWND,CreateDialog,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d)
|
Fd(HWND,CreateDialog,HANDLE,a,SEGPTR,b,HWND,c,WNDPROC,d)
|
||||||
Fd(HWND,CreateDialogIndirect,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d)
|
Fd(HWND,CreateDialogIndirect,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d)
|
||||||
Fd(INT,GetTempFileName,BYTE,a,LPCSTR,b,UINT,c,LPSTR,d)
|
Fd(INT,GetTempFileName,BYTE,a,LPCSTR,b,UINT,c,LPSTR,d)
|
||||||
Fd(LONG,DefDlgProc,HWND,a,WORD,b,WORD,c,LONG,d)
|
Fd(LONG,DefDlgProc,HWND,a,WORD,b,WORD,c,LONG,d)
|
||||||
|
@ -2819,11 +2856,11 @@ Fd(WORD,SetPaletteEntries,HPALETTE,a,WORD,b,WORD,c,LPPALETTEENTRY,d)
|
||||||
Fd(WORD,SetSystemTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
|
Fd(WORD,SetSystemTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
|
||||||
Fd(WORD,SetTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
|
Fd(WORD,SetTimer,HWND,a,WORD,d,WORD,b,FARPROC,c)
|
||||||
Fd(int,CombineRgn,HRGN,a,HRGN,b,HRGN,c,short,d)
|
Fd(int,CombineRgn,HRGN,a,HRGN,b,HRGN,c,short,d)
|
||||||
Fd(int,DialogBox,HINSTANCE,a,LPCSTR,b,HWND,c,WNDPROC,d)
|
Fd(int,DialogBox,HINSTANCE,a,SEGPTR,b,HWND,c,WNDPROC,d)
|
||||||
Fd(int,DialogBoxIndirect,HANDLE,a,HANDLE,b,HWND,c,WNDPROC,d)
|
Fd(int,DialogBoxIndirect,HANDLE,a,HANDLE,b,HWND,c,WNDPROC,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,SEGPTR,c,WORD,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)
|
||||||
|
@ -2853,14 +2890,14 @@ Fe(DWORD,ScaleViewportExt,HDC,a,short,b,short,c,short,d,short,e)
|
||||||
Fe(DWORD,ScaleWindowExt,HDC,a,short,b,short,c,short,d,short,e)
|
Fe(DWORD,ScaleWindowExt,HDC,a,short,b,short,c,short,d,short,e)
|
||||||
Fe(HBITMAP,CreateBitmap,short,a,short,b,BYTE,c,BYTE,d,LPSTR,e)
|
Fe(HBITMAP,CreateBitmap,short,a,short,b,BYTE,c,BYTE,d,LPSTR,e)
|
||||||
Fe(HWND,CreateDialogIndirectParam,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d,LPARAM,e)
|
Fe(HWND,CreateDialogIndirectParam,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d,LPARAM,e)
|
||||||
Fe(HWND,CreateDialogParam,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d,LPARAM,e)
|
Fe(HWND,CreateDialogParam,HANDLE,a,SEGPTR,b,HWND,c,WNDPROC,d,LPARAM,e)
|
||||||
Fe(LONG,CallWindowProc,WNDPROC,a,HWND,b,WORD,c,WORD,d,LONG,e)
|
Fe(LONG,CallWindowProc,WNDPROC,a,HWND,b,WORD,c,WORD,d,LONG,e)
|
||||||
Fe(LONG,DefFrameProc,HWND,a,HWND,b,WORD,c,WORD,d,LONG,e)
|
Fe(LONG,DefFrameProc,HWND,a,HWND,b,WORD,c,WORD,d,LONG,e)
|
||||||
Fe(LONG,SendDlgItemMessage,HWND,a,WORD,b,WORD,c,WORD,d,LONG,e)
|
Fe(LONG,SendDlgItemMessage,HWND,a,WORD,b,WORD,c,WORD,d,LONG,e)
|
||||||
Fe(int,DialogBoxIndirectParam,HANDLE,a,HANDLE,b,HWND,c,WNDPROC,d,LONG,e)
|
Fe(int,DialogBoxIndirectParam,HANDLE,a,HANDLE,b,HWND,c,WNDPROC,d,LONG,e)
|
||||||
Fe(int,DialogBoxParam,HANDLE,a,LPCSTR,b,HWND,c,WNDPROC,d,LONG,e)
|
Fe(int,DialogBoxParam,HANDLE,a,SEGPTR,b,HWND,c,WNDPROC,d,LONG,e)
|
||||||
Fe(int,DlgDirList,HWND,a,LPSTR,b,int,c,int,d,WORD,e)
|
Fe(int,DlgDirList,HWND,a,LPSTR,b,int,c,int,d,WORD,e)
|
||||||
Fe(int,DlgDirListComboBox,HWND,a,LPSTR,b,int,c,int,d,WORD,e)
|
Fe(int,DlgDirListComboBox,HWND,a,SEGPTR,b,int,c,int,d,WORD,e)
|
||||||
Fe(int,DrawText,HDC,a,LPSTR,str,int,c,LPRECT,d,WORD,flag)
|
Fe(int,DrawText,HDC,a,LPSTR,str,int,c,LPRECT,d,WORD,flag)
|
||||||
Fe(int,Escape,HDC,a,int,b,int,c,LPSTR,d,LPSTR,e)
|
Fe(int,Escape,HDC,a,int,b,int,c,LPSTR,d,LPSTR,e)
|
||||||
Fe(int,ExcludeClipRect,HDC,a,short,b,short,c,short,d,short,e)
|
Fe(int,ExcludeClipRect,HDC,a,short,b,short,c,short,d,short,e)
|
||||||
|
@ -2902,33 +2939,12 @@ Fi(BOOL,Chord,HDC,a,int,xLeft,int,yTop,int,xRight,int,yBottom,int,xStart,int,ySt
|
||||||
Fi(BOOL,GrayString,HDC,a,HBRUSH,b,FARPROC,gsprc,LPARAM,lParam,INT,cch,INT,x,INT,y,INT,cx,INT,cy)
|
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(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)
|
||||||
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,SEGPTR,g)
|
||||||
Fl(HWND,CreateWindowEx,DWORD,a,LPSTR,b,LPSTR,c,DWORD,d,short,e,short,f,short,g,short,h,HWND,i,HMENU,j,HANDLE,k,LPSTR,l)
|
Fl(HWND,CreateWindowEx,DWORD,a,LPSTR,b,LPSTR,c,DWORD,d,short,e,short,f,short,g,short,h,HWND,i,HMENU,j,HANDLE,k,SEGPTR,l)
|
||||||
Fl(int,SetDIBitsToDevice,HDC,a,short,b,short,c,WORD,d,WORD,e,WORD,f,WORD,g,WORD,h,WORD,i,LPSTR,j,LPBITMAPINFO,k,WORD,l)
|
Fl(int,SetDIBitsToDevice,HDC,a,short,b,short,c,WORD,d,WORD,e,WORD,f,WORD,g,WORD,h,WORD,i,LPSTR,j,LPBITMAPINFO,k,WORD,l)
|
||||||
Fm(int,StretchDIBits,HDC,a,WORD,b,WORD,c,WORD,d,WORD,e,WORD,f,WORD,g,WORD,h,WORD,i,LPSTR,j,LPBITMAPINFO,k,WORD,l,DWORD,m)
|
Fm(int,StretchDIBits,HDC,a,WORD,b,WORD,c,WORD,d,WORD,e,WORD,f,WORD,g,WORD,h,WORD,i,LPSTR,j,LPBITMAPINFO,k,WORD,l,DWORD,m)
|
||||||
Fn(HFONT,CreateFont,int,a,int,b,int,c,int,d,int,e,BYTE,f,BYTE,g,BYTE,h,BYTE,i,BYTE,j,BYTE,k,BYTE,l,BYTE,m,LPSTR,n)
|
Fn(HFONT,CreateFont,int,a,int,b,int,c,int,d,int,e,BYTE,f,BYTE,g,BYTE,h,BYTE,i,BYTE,j,BYTE,k,BYTE,l,BYTE,m,LPSTR,n)
|
||||||
|
|
||||||
#ifndef GLOBAL_SOURCE
|
|
||||||
Fa(BOOL,GlobalUnWire,HANDLE,a)
|
|
||||||
Fa(BOOL,GlobalUnfix,HANDLE,a)
|
|
||||||
Fa(BOOL,GlobalUnlock,HANDLE,a)
|
|
||||||
Fa(DWORD,GlobalCompact,DWORD,a)
|
|
||||||
Fa(DWORD,GlobalHandle,WORD,a)
|
|
||||||
Fa(DWORD,GlobalSize,HANDLE,a)
|
|
||||||
Fa(HANDLE,GlobalFree,HANDLE,a)
|
|
||||||
Fa(HANDLE,GlobalLRUNewest,HANDLE,a)
|
|
||||||
Fa(HANDLE,GlobalLRUOldest,HANDLE,a)
|
|
||||||
Fa(LPSTR,GlobalLock,HANDLE,a)
|
|
||||||
Fa(LPSTR,GlobalWire,HANDLE,a)
|
|
||||||
Fa(WORD,GlobalFlags,HANDLE,a)
|
|
||||||
Fa(WORD,GlobalPageLock,HANDLE,a)
|
|
||||||
Fa(WORD,GlobalPageUnlock,HANDLE,a)
|
|
||||||
Fa(void,GlobalFix,HANDLE,a)
|
|
||||||
Fa(void,GlobalNotify,FARPROC,a)
|
|
||||||
Fb(HANDLE,GlobalAlloc,WORD,a,DWORD,b)
|
|
||||||
Fc(HANDLE,GlobalReAlloc,HANDLE,a,DWORD,b,WORD,c)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WINELIB
|
#ifdef WINELIB
|
||||||
#define WINELIB_UNIMP(x) fprintf (stderr, "WineLib: Unimplemented %s\n", x)
|
#define WINELIB_UNIMP(x) fprintf (stderr, "WineLib: Unimplemented %s\n", x)
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -13,6 +13,7 @@ typedef LONG LPARAM;
|
||||||
typedef LONG LRESULT;
|
typedef LONG LRESULT;
|
||||||
typedef WORD HANDLE;
|
typedef WORD HANDLE;
|
||||||
typedef DWORD HHOOK;
|
typedef DWORD HHOOK;
|
||||||
|
typedef DWORD SEGPTR;
|
||||||
typedef char *LPSTR;
|
typedef char *LPSTR;
|
||||||
typedef const char *LPCSTR;
|
typedef const char *LPCSTR;
|
||||||
typedef char *NPSTR;
|
typedef char *NPSTR;
|
||||||
|
@ -30,25 +31,28 @@ typedef FARPROC HOOKPROC;
|
||||||
|
|
||||||
#define DECLARE_HANDLE(a) typedef HANDLE a;
|
#define DECLARE_HANDLE(a) typedef HANDLE a;
|
||||||
|
|
||||||
DECLARE_HANDLE(HTASK);
|
|
||||||
DECLARE_HANDLE(HDRVR);
|
|
||||||
DECLARE_HANDLE(HWND);
|
|
||||||
DECLARE_HANDLE(HDC);
|
|
||||||
DECLARE_HANDLE(HCLASS);
|
|
||||||
DECLARE_HANDLE(HCURSOR);
|
|
||||||
DECLARE_HANDLE(HFONT);
|
|
||||||
DECLARE_HANDLE(HPEN);
|
|
||||||
DECLARE_HANDLE(HRGN);
|
|
||||||
DECLARE_HANDLE(HPALETTE);
|
|
||||||
DECLARE_HANDLE(HICON);
|
|
||||||
DECLARE_HANDLE(HINSTANCE);
|
|
||||||
DECLARE_HANDLE(HMENU);
|
|
||||||
DECLARE_HANDLE(HBITMAP);
|
DECLARE_HANDLE(HBITMAP);
|
||||||
DECLARE_HANDLE(HBRUSH);
|
DECLARE_HANDLE(HBRUSH);
|
||||||
DECLARE_HANDLE(LOCALHANDLE);
|
DECLARE_HANDLE(HCLASS);
|
||||||
DECLARE_HANDLE(HMETAFILE);
|
DECLARE_HANDLE(HCURSOR);
|
||||||
DECLARE_HANDLE(HDWP);
|
DECLARE_HANDLE(HDC);
|
||||||
DECLARE_HANDLE(HDROP);
|
DECLARE_HANDLE(HDROP);
|
||||||
|
DECLARE_HANDLE(HDRVR);
|
||||||
|
DECLARE_HANDLE(HDWP);
|
||||||
|
DECLARE_HANDLE(HFONT);
|
||||||
|
DECLARE_HANDLE(HGLOBAL);
|
||||||
|
DECLARE_HANDLE(HICON);
|
||||||
|
DECLARE_HANDLE(HINSTANCE);
|
||||||
|
DECLARE_HANDLE(HLOCAL);
|
||||||
|
DECLARE_HANDLE(HMENU);
|
||||||
|
DECLARE_HANDLE(HMETAFILE);
|
||||||
|
DECLARE_HANDLE(HMODULE);
|
||||||
|
DECLARE_HANDLE(HPALETTE);
|
||||||
|
DECLARE_HANDLE(HPEN);
|
||||||
|
DECLARE_HANDLE(HRGN);
|
||||||
|
DECLARE_HANDLE(HTASK);
|
||||||
|
DECLARE_HANDLE(HWND);
|
||||||
|
DECLARE_HANDLE(LOCALHANDLE);
|
||||||
|
|
||||||
#define TRUE 1
|
#define TRUE 1
|
||||||
#define FALSE 0
|
#define FALSE 0
|
||||||
|
@ -70,15 +74,18 @@ DECLARE_HANDLE(HDROP);
|
||||||
#define WINE_PACKED __attribute__ ((packed))
|
#define WINE_PACKED __attribute__ ((packed))
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define LOBYTE(w) ((BYTE)(w))
|
#define LOBYTE(w) ((BYTE)(UINT)(w))
|
||||||
#define HIBYTE(w) ((BYTE)((UINT)(w) >> 8))
|
#define HIBYTE(w) ((BYTE)((UINT)(w) >> 8))
|
||||||
|
|
||||||
#define LOWORD(l) ((WORD)(l))
|
#define LOWORD(l) ((WORD)(DWORD)(l))
|
||||||
#define HIWORD(l) ((WORD)((DWORD)(l) >> 16))
|
#define HIWORD(l) ((WORD)((DWORD)(l) >> 16))
|
||||||
|
|
||||||
#define MAKELONG(low, high) ((LONG)(((WORD)(low)) | \
|
#define MAKELONG(low, high) ((LONG)(((WORD)(low)) | \
|
||||||
(((DWORD)((WORD)(high))) << 16)))
|
(((DWORD)((WORD)(high))) << 16)))
|
||||||
|
|
||||||
|
#define SELECTOROF(ptr) (HIWORD(ptr))
|
||||||
|
#define OFFSETOF(ptr) (LOWORD(ptr))
|
||||||
|
|
||||||
#ifndef max
|
#ifndef max
|
||||||
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
#define max(a,b) (((a) > (b)) ? (a) : (b))
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -5,7 +5,6 @@ MODULE = loader
|
||||||
SRCS = \
|
SRCS = \
|
||||||
dump.c \
|
dump.c \
|
||||||
ldt.c \
|
ldt.c \
|
||||||
ldtlib.c \
|
|
||||||
main.c \
|
main.c \
|
||||||
ne_image.c \
|
ne_image.c \
|
||||||
ne_resource.c \
|
ne_resource.c \
|
||||||
|
|
|
@ -16,7 +16,6 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
||||||
#endif
|
#endif
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "prototypes.h"
|
#include "prototypes.h"
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
|
|
286
loader/ldt.c
286
loader/ldt.c
|
@ -1,91 +1,221 @@
|
||||||
#ifndef WINELIB
|
|
||||||
/*
|
/*
|
||||||
static char RCSId[] = "$Id: ldt.c,v 1.2 1993/07/04 04:04:21 root Exp root $";
|
* LDT manipulation functions
|
||||||
static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
*
|
||||||
*/
|
* Copyright 1993 Robert J. Amstadt
|
||||||
|
* Copyright 1995 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
|
#include <strings.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "prototypes.h"
|
#include "ldt.h"
|
||||||
|
#include "stddebug.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
#ifndef WINELIB
|
||||||
|
|
||||||
|
#ifdef linux
|
||||||
|
#include <linux/unistd.h>
|
||||||
|
#include <linux/head.h>
|
||||||
|
#include <linux/ldt.h>
|
||||||
|
|
||||||
|
_syscall3(int, modify_ldt, int, func, void *, ptr, unsigned long, bytecount)
|
||||||
|
#endif /* linux */
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||||
#include <machine/segments.h>
|
#include <machine/segments.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
/**********************************************************************
|
extern int i386_get_ldt(int, union descriptor *, int);
|
||||||
* print_ldt
|
extern int i386_set_ldt(int, union descriptor *, int);
|
||||||
|
#endif /* __NetBSD__ || __FreeBSD__ */
|
||||||
|
|
||||||
|
#endif /* ifndef WINELIB */
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LDT_BytesToEntry
|
||||||
|
*
|
||||||
|
* Convert the raw bytes of the descriptor to an ldt_entry structure.
|
||||||
*/
|
*/
|
||||||
/* XXX These are *real* 386 descriptors !! */
|
static void LDT_BytesToEntry( unsigned long *buffer, ldt_entry *content )
|
||||||
void
|
|
||||||
print_ldt()
|
|
||||||
{
|
{
|
||||||
char buffer[0x10000];
|
content->base = (*buffer >> 16) & 0x0000ffff;
|
||||||
unsigned long *lp;
|
content->limit = *buffer & 0x0000ffff;
|
||||||
unsigned long base_addr, limit;
|
buffer++;
|
||||||
int type, dpl, i;
|
content->base |= (*buffer & 0xff000000) | ((*buffer << 16) & 0x00ff0000);
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
content->limit |= (*buffer & 0x000f0000);
|
||||||
struct segment_descriptor *sd;
|
content->type = (*buffer >> 10) & 3;
|
||||||
#endif
|
content->seg_32bit = (*buffer & 0x00400000) != 0;
|
||||||
|
content->read_only = (*buffer & 0x00000200) == 0;
|
||||||
if (get_ldt(buffer) < 0)
|
content->limit_in_pages = (*buffer & 0x00800000) != 0;
|
||||||
exit(1);
|
|
||||||
|
|
||||||
lp = (unsigned long *) buffer;
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
|
||||||
sd = (struct segment_descriptor *) buffer;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
for (i = 0; i < 32; i++, lp++)
|
|
||||||
{
|
|
||||||
/* First 32 bits of descriptor */
|
|
||||||
base_addr = (*lp >> 16) & 0x0000FFFF;
|
|
||||||
limit = *lp & 0x0000FFFF;
|
|
||||||
lp++;
|
|
||||||
|
|
||||||
/* First 32 bits of descriptor */
|
|
||||||
base_addr |= (*lp & 0xFF000000) | ((*lp << 16) & 0x00FF0000);
|
|
||||||
limit |= (*lp & 0x000F0000);
|
|
||||||
#ifdef linux
|
|
||||||
type = (*lp >> 10) & 5;
|
|
||||||
dpl = (*lp >> 13) & 3;
|
|
||||||
#endif
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
|
||||||
type = sd->sd_type;
|
|
||||||
dpl = sd->sd_dpl;
|
|
||||||
sd++;
|
|
||||||
#endif
|
|
||||||
if (*lp & 1000)
|
|
||||||
{
|
|
||||||
printf("Entry %2d: Base %08lx, Limit %05lx, DPL %d, Type %d\n",
|
|
||||||
i, base_addr, limit, dpl, type);
|
|
||||||
printf(" ");
|
|
||||||
if (*lp & 0x100)
|
|
||||||
printf("Accessed, ");
|
|
||||||
if (*lp & 8000)
|
|
||||||
printf("Present, ");
|
|
||||||
if (*lp & 0x100000)
|
|
||||||
printf("User, ");
|
|
||||||
if (*lp & 0x200000)
|
|
||||||
printf("X, ");
|
|
||||||
if (*lp & 0x400000)
|
|
||||||
printf("32, ");
|
|
||||||
else
|
|
||||||
printf("16, ");
|
|
||||||
if (*lp & 0x800000)
|
|
||||||
printf("page limit, ");
|
|
||||||
else
|
|
||||||
printf("byte limit, ");
|
|
||||||
printf("\n");
|
|
||||||
printf(" %08lx %08lx\n", *(lp), *(lp-1));
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
printf("Entry %2d: Base %08lx, Limit %05lx, DPL %d, Type %d\n",
|
|
||||||
i, base_addr, limit, dpl, type);
|
|
||||||
printf(" SYSTEM: %08lx %08lx\n", *lp, *(lp-1));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif /* ifndef WINELIB */
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LDT_GetEntry
|
||||||
|
*
|
||||||
|
* Retrieve an LDT entry.
|
||||||
|
*/
|
||||||
|
int LDT_GetEntry( int entry, ldt_entry *content )
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
#ifdef WINELIB
|
||||||
|
content->base = ldt_copy[entry].base;
|
||||||
|
content->limit = ldt_copy[entry].limit;
|
||||||
|
content->type = SEGMENT_DATA;
|
||||||
|
content->seg_32bit = 0;
|
||||||
|
content->read_only = 0;
|
||||||
|
content->limit_in_pages = 0;
|
||||||
|
#else /* WINELIB */
|
||||||
|
|
||||||
|
#ifdef linux
|
||||||
|
int size = (entry + 1) * 2 * sizeof(long);
|
||||||
|
long *buffer = (long *) malloc( size );
|
||||||
|
ret = modify_ldt( 0, buffer, size );
|
||||||
|
LDT_BytesToEntry( &buffer[entry*2], content );
|
||||||
|
free( buffer );
|
||||||
|
#endif /* linux */
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||||
|
long buffer[2];
|
||||||
|
ret = i386_get_ldt( entry, (union descriptor *)buffer, 1 );
|
||||||
|
LDT_BytesToEntry( buffer, content );
|
||||||
|
#endif /* __NetBSD__ || __FreeBSD__ */
|
||||||
|
|
||||||
|
#endif /* WINELIB */
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LDT_SetEntry
|
||||||
|
*
|
||||||
|
* Set an LDT entry.
|
||||||
|
*/
|
||||||
|
int LDT_SetEntry( int entry, ldt_entry *content )
|
||||||
|
{
|
||||||
|
int ret = 0;
|
||||||
|
|
||||||
|
dprintf_ldt(stddeb,
|
||||||
|
"LDT_SetEntry: entry=%04x base=%08lx limit=%05lx %s %d-bit flags=%c%c%c\n",
|
||||||
|
entry, content->base, content->limit,
|
||||||
|
content->limit_in_pages ? "pages" : "bytes",
|
||||||
|
content->seg_32bit ? 32 : 16,
|
||||||
|
content->read_only && (content->type & SEGMENT_CODE) ? '-' : 'r',
|
||||||
|
content->read_only || (content->type & SEGMENT_CODE) ? '-' : 'w',
|
||||||
|
(content->type & SEGMENT_CODE) ? 'x' : '-' );
|
||||||
|
|
||||||
|
#ifndef WINELIB
|
||||||
|
#ifdef linux
|
||||||
|
{
|
||||||
|
struct modify_ldt_ldt_s ldt_info;
|
||||||
|
|
||||||
|
memset( &ldt_info, 0, sizeof(ldt_info) );
|
||||||
|
ldt_info.entry_number = entry;
|
||||||
|
ldt_info.base_addr = content->base;
|
||||||
|
ldt_info.limit = content->limit;
|
||||||
|
ldt_info.seg_32bit = content->seg_32bit != 0;
|
||||||
|
ldt_info.contents = content->type;
|
||||||
|
ldt_info.read_exec_only = content->read_only != 0;
|
||||||
|
ldt_info.limit_in_pages = content->limit_in_pages != 0;
|
||||||
|
ret = modify_ldt(1, &ldt_info, sizeof(ldt_info));
|
||||||
|
}
|
||||||
|
#endif /* linux */
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||||
|
{
|
||||||
|
long d[2];
|
||||||
|
|
||||||
|
d[0] = ((content->base & 0x0000ffff) << 16) |
|
||||||
|
(content->limit & 0x0ffff);
|
||||||
|
d[1] = (content->base & 0xff000000) |
|
||||||
|
((content->base & 0x00ff0000)>>16) |
|
||||||
|
(content->limit & 0xf0000) |
|
||||||
|
(content->type << 10) |
|
||||||
|
((content->read_only == 0) << 9) |
|
||||||
|
((content->seg_32bit != 0) << 22) |
|
||||||
|
((content->limit_in_pages != 0) << 23) |
|
||||||
|
0xf000;
|
||||||
|
ret = i386_set_ldt(entry, (union descriptor *)d, 1);
|
||||||
|
if (ret < 0)
|
||||||
|
{
|
||||||
|
perror("i386_set_ldt");
|
||||||
|
fprintf(stderr,
|
||||||
|
"Did you reconfigure the kernel with \"options USER_LDT\"?\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* __NetBSD__ || __FreeBSD__ */
|
||||||
|
#endif /* ifndef WINELIB */
|
||||||
|
|
||||||
|
if (ret < 0) return ret;
|
||||||
|
ldt_copy[entry].base = content->base;
|
||||||
|
if (!content->limit_in_pages) ldt_copy[entry].limit = content->limit;
|
||||||
|
else ldt_copy[entry].limit = (content->limit << 12) | 0x0fff;
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LDT_Print
|
||||||
|
*
|
||||||
|
* Print the content of the LDT on stdout.
|
||||||
|
*/
|
||||||
|
void LDT_Print()
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
#ifdef WINELIB
|
||||||
|
for (i = 0; i < LDT_SIZE; i++)
|
||||||
|
{
|
||||||
|
if (ldt_copy[i].base || ldt_copy[i].limit)
|
||||||
|
{
|
||||||
|
fprintf( stderr, "%04x: sel=%04x base=%08x limit=%05x\n",
|
||||||
|
i, ENTRY_TO_SELECTOR(i),
|
||||||
|
ldt_copy[i].base, ldt_copy[i].limit );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#else /* WINELIB */
|
||||||
|
|
||||||
|
#ifdef linux
|
||||||
|
long buffer[2*LDT_SIZE];
|
||||||
|
ldt_entry content;
|
||||||
|
|
||||||
|
modify_ldt( 0, buffer, sizeof(buffer) );
|
||||||
|
for (i = 0; i < LDT_SIZE; i++)
|
||||||
|
{
|
||||||
|
LDT_BytesToEntry( &buffer[2*i], &content );
|
||||||
|
if (content.base || content.limit)
|
||||||
|
{
|
||||||
|
fprintf( stderr, "%04x: sel=%04x base=%08lx limit=%05lx %s type=%d\n",
|
||||||
|
i, ENTRY_TO_SELECTOR(i),
|
||||||
|
content.base, content.limit,
|
||||||
|
content.limit_in_pages ? "(pages)" : "(bytes)",
|
||||||
|
content.type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* linux */
|
||||||
|
|
||||||
|
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
||||||
|
long buffer[2*LDT_SIZE];
|
||||||
|
ldt_entry content;
|
||||||
|
|
||||||
|
i386_get_ldt( 0, (union descriptor *)buffer, LDT_SIZE );
|
||||||
|
for (i = 0; i < LDT_SIZE; i++)
|
||||||
|
{
|
||||||
|
LDT_BytesToEntry( buffer[2*i], &content );
|
||||||
|
if (content.base || content.limit)
|
||||||
|
{
|
||||||
|
fprintf( stderr, "%04x: sel=%04x base=%08lx limit=%05lx %s type=%d\n",
|
||||||
|
i, ENTRY_TO_SELECTOR(i),
|
||||||
|
content.base, content.limit,
|
||||||
|
content.limit_in_pages ? "(pages)" : "(bytes)",
|
||||||
|
content.type );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif /* __NetBSD__ || __FreeBSD__ */
|
||||||
|
#endif /* WINELIB */
|
||||||
|
}
|
||||||
|
|
101
loader/ldtlib.c
101
loader/ldtlib.c
|
@ -1,101 +0,0 @@
|
||||||
#ifndef WINELIB
|
|
||||||
/*
|
|
||||||
static char RCSId[] = "$Id: ldtlib.c,v 1.2 1993/07/04 04:04:21 root Exp root $";
|
|
||||||
static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <errno.h>
|
|
||||||
#include "stddebug.h"
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
#ifdef linux
|
|
||||||
#include <linux/unistd.h>
|
|
||||||
#include <linux/head.h>
|
|
||||||
#include <linux/ldt.h>
|
|
||||||
|
|
||||||
_syscall3(int, modify_ldt, int, func, void *, ptr, unsigned long, bytecount)
|
|
||||||
#endif
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
|
||||||
#include <machine/segments.h>
|
|
||||||
|
|
||||||
extern int i386_get_ldt(int, union descriptor *, int);
|
|
||||||
extern int i386_set_ldt(int, union descriptor *, int);
|
|
||||||
|
|
||||||
struct segment_descriptor *
|
|
||||||
make_sd(unsigned base, unsigned limit, int contents, int read_exec_only, int seg32, int inpgs)
|
|
||||||
{
|
|
||||||
static long d[2];
|
|
||||||
|
|
||||||
d[0] = ((base & 0x0000ffff) << 16) |
|
|
||||||
(limit & 0x0ffff);
|
|
||||||
d[1] = (base & 0xff000000) |
|
|
||||||
((base & 0x00ff0000)>>16) |
|
|
||||||
(limit & 0xf0000) |
|
|
||||||
(contents << 10) |
|
|
||||||
((read_exec_only ^ 1) << 9) |
|
|
||||||
(seg32 << 22) |
|
|
||||||
(inpgs << 23) |
|
|
||||||
0xf000;
|
|
||||||
|
|
||||||
return ((struct segment_descriptor *)d);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
|
|
||||||
int
|
|
||||||
get_ldt(void *buffer)
|
|
||||||
{
|
|
||||||
#ifdef linux
|
|
||||||
return modify_ldt(0, buffer, 32 * sizeof(struct modify_ldt_ldt_s));
|
|
||||||
#endif
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
|
||||||
return i386_get_ldt(0, (union descriptor *)buffer, 32);
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
set_ldt_entry(int entry, unsigned long base, unsigned int limit,
|
|
||||||
int seg_32bit_flag, int contents, int read_only_flag,
|
|
||||||
int limit_in_pages_flag)
|
|
||||||
{
|
|
||||||
#ifdef linux
|
|
||||||
struct modify_ldt_ldt_s ldt_info;
|
|
||||||
|
|
||||||
ldt_info.entry_number = entry;
|
|
||||||
ldt_info.base_addr = base;
|
|
||||||
ldt_info.limit = limit;
|
|
||||||
ldt_info.seg_32bit = seg_32bit_flag;
|
|
||||||
ldt_info.contents = contents;
|
|
||||||
ldt_info.read_exec_only = read_only_flag;
|
|
||||||
ldt_info.limit_in_pages = limit_in_pages_flag;
|
|
||||||
#ifdef NEW_LDT_STRUCT
|
|
||||||
ldt_info.seg_not_present = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
return modify_ldt(1, &ldt_info, sizeof(ldt_info));
|
|
||||||
#endif
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__)
|
|
||||||
struct segment_descriptor *sd;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
dprintf_ldt(stddeb,
|
|
||||||
"set_ldt_entry: entry=%x base=%x limit=%x%s %s-bit contents=%d %s\n",
|
|
||||||
entry, base, limit, limit_in_pages_flag?"-pages":"",
|
|
||||||
seg_32bit_flag?"32":"16",
|
|
||||||
contents, read_only_flag?"read-only":"");
|
|
||||||
|
|
||||||
sd = make_sd(base, limit, contents, read_only_flag, seg_32bit_flag, limit_in_pages_flag);
|
|
||||||
ret = i386_set_ldt(entry, (union descriptor *)sd, 1);
|
|
||||||
if (ret < 0) {
|
|
||||||
perror("i386_set_ldt");
|
|
||||||
fprintf(stderr,
|
|
||||||
"Did you reconfigure the kernel with \"options USER_LDT\"?\n");
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif /* ifndef WINELIB */
|
|
|
@ -11,7 +11,6 @@ static char Copyright[] = "Copyright 1993, 1994 Martin Ayotte, Robert J. Amstadt
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
#include "if1632.h"
|
#include "if1632.h"
|
||||||
#include "wineopts.h"
|
#include "wineopts.h"
|
||||||
|
@ -436,7 +435,8 @@ FARPROC GetProcAddress(HANDLE hModule, char *proc_name)
|
||||||
#ifdef WINELIB
|
#ifdef WINELIB
|
||||||
WINELIB_UNIMP ("GetProcAddress");
|
WINELIB_UNIMP ("GetProcAddress");
|
||||||
#else
|
#else
|
||||||
int sel, addr, ret;
|
int addr, ret;
|
||||||
|
WORD sel;
|
||||||
register struct w_files *w = wine_files;
|
register struct w_files *w = wine_files;
|
||||||
int ordinal, len;
|
int ordinal, len;
|
||||||
char * cpnt;
|
char * cpnt;
|
||||||
|
|
|
@ -11,12 +11,12 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "dos_fs.h"
|
#include "dos_fs.h"
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
#include "library.h"
|
#include "library.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "wineopts.h"
|
#include "wineopts.h"
|
||||||
|
#include "wine.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "prototypes.h"
|
#include "prototypes.h"
|
||||||
#include "options.h"
|
#include "options.h"
|
||||||
|
|
|
@ -12,7 +12,6 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <errno.h>
|
#include <errno.h>
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "arch.h"
|
#include "arch.h"
|
||||||
|
@ -82,20 +81,20 @@ static char *NE_GetModuleName(struct w_files *wpnt, int index, char *buffer)
|
||||||
*/
|
*/
|
||||||
int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
||||||
{
|
{
|
||||||
struct segment_descriptor_s *selector_table = wpnt->ne->selector_table;
|
WORD *selector_table = wpnt->ne->selector_table;
|
||||||
|
WORD selector, sel, offset;
|
||||||
struct relocation_entry_s *rep, *rep1;
|
struct relocation_entry_s *rep, *rep1;
|
||||||
struct ne_segment_table_entry_s *seg;
|
struct ne_segment_table_entry_s *seg;
|
||||||
struct segment_descriptor_s *sel;
|
|
||||||
int status, ordinal, i, n_entries, additive;
|
int status, ordinal, i, n_entries, additive;
|
||||||
unsigned short *sp;
|
unsigned short *sp;
|
||||||
unsigned int selector, address, next_addr;
|
unsigned int address;
|
||||||
unsigned char dll_name[257], func_name[257];
|
unsigned char dll_name[257], func_name[257];
|
||||||
|
|
||||||
seg = &wpnt->ne->seg_table[segment_num];
|
seg = &wpnt->ne->seg_table[segment_num];
|
||||||
sel = &selector_table[segment_num];
|
sel = selector_table[segment_num];
|
||||||
|
|
||||||
dprintf_fixup(stddeb, "Segment fixups for %s, segment %d, selector %x\n",
|
dprintf_fixup(stddeb, "Segment fixups for %s, segment %d, selector %04x\n",
|
||||||
wpnt->name, segment_num, (int) sel->base_addr >> 16);
|
wpnt->name, segment_num, sel );
|
||||||
|
|
||||||
if ((seg->seg_data_offset == 0) ||
|
if ((seg->seg_data_offset == 0) ||
|
||||||
!(seg->seg_flags & NE_SEGFLAGS_RELOC_DATA))
|
!(seg->seg_flags & NE_SEGFLAGS_RELOC_DATA))
|
||||||
|
@ -128,13 +127,14 @@ int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
||||||
/*
|
/*
|
||||||
* Get the target address corresponding to this entry.
|
* Get the target address corresponding to this entry.
|
||||||
*/
|
*/
|
||||||
additive = 0;
|
|
||||||
|
/* If additive, there is no target chain list. Instead, add source
|
||||||
|
and target */
|
||||||
|
additive = rep->relocation_type & NE_RELFLAG_ADDITIVE;
|
||||||
|
rep->relocation_type &= 0x3;
|
||||||
|
|
||||||
switch (rep->relocation_type)
|
switch (rep->relocation_type)
|
||||||
{
|
{
|
||||||
case NE_RELTYPE_ORDINALADD:
|
|
||||||
additive = 1;
|
|
||||||
|
|
||||||
case NE_RELTYPE_ORDINAL:
|
case NE_RELTYPE_ORDINAL:
|
||||||
if (NE_GetModuleName(wpnt, rep->target1,
|
if (NE_GetModuleName(wpnt, rep->target1,
|
||||||
dll_name) == NULL)
|
dll_name) == NULL)
|
||||||
|
@ -160,9 +160,6 @@ int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
||||||
dll_name, ordinal, selector, address);
|
dll_name, ordinal, selector, address);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NE_RELTYPE_NAMEADD:
|
|
||||||
additive = 1;
|
|
||||||
|
|
||||||
case NE_RELTYPE_NAME:
|
case NE_RELTYPE_NAME:
|
||||||
if (NE_GetModuleName(wpnt, rep->target1, dll_name) == NULL) {
|
if (NE_GetModuleName(wpnt, rep->target1, dll_name) == NULL) {
|
||||||
fprintf(stderr,"NE_RELTYPE_NAME failed");
|
fprintf(stderr,"NE_RELTYPE_NAME failed");
|
||||||
|
@ -189,7 +186,6 @@ int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NE_RELTYPE_INTERNAL:
|
case NE_RELTYPE_INTERNAL:
|
||||||
case NE_RELTYPE_INT1:
|
|
||||||
if (rep->target1 == 0x00ff)
|
if (rep->target1 == 0x00ff)
|
||||||
{
|
{
|
||||||
address = GetEntryPointFromOrdinal(wpnt, rep->target2);
|
address = GetEntryPointFromOrdinal(wpnt, rep->target2);
|
||||||
|
@ -198,7 +194,7 @@ int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
selector = selector_table[rep->target1-1].selector;
|
selector = selector_table[rep->target1-1];
|
||||||
address = rep->target2;
|
address = rep->target2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -206,7 +202,7 @@ int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
||||||
i + 1, selector, address);
|
i + 1, selector, address);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 7:
|
case NE_RELTYPE_OSFIXUP:
|
||||||
/* Relocation type 7:
|
/* Relocation type 7:
|
||||||
*
|
*
|
||||||
* These appear to be used as fixups for the Windows
|
* These appear to be used as fixups for the Windows
|
||||||
|
@ -234,69 +230,70 @@ int NE_FixupSegment(struct w_files *wpnt, int segment_num)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/* I'm not sure why a DLL entry point fixup could be additive.
|
||||||
* Stuff the right size result in.
|
Old code used to ignore additive if the target is a built-in
|
||||||
*/
|
DLL. This doesn't seem to work for __AHSHIFT */
|
||||||
sp = (unsigned short *) ((char *) sel->base_addr + rep->offset);
|
if (additive && FindDLLTable(dll_name) != NULL)
|
||||||
if (additive)
|
dprintf_fixup(stddeb,"Additive for builtin???\n"
|
||||||
{
|
"%d: ADDR TYPE %d, TYPE %d, OFFSET %04x, "
|
||||||
if (FindDLLTable(dll_name) == NULL)
|
"TARGET %04x %04x\n",
|
||||||
additive = 2;
|
i+1, rep->address_type, rep->relocation_type,
|
||||||
dprintf_fixup(stddeb,
|
rep->offset, rep->target1, rep->target2);
|
||||||
"%d: ADDR TYPE %d, TYPE %d, OFFSET %04x, ",
|
|
||||||
i + 1, rep->address_type, rep->relocation_type,
|
offset = rep->offset;
|
||||||
rep->offset);
|
|
||||||
dprintf_fixup(stddeb,"TARGET %04x %04x\n",
|
|
||||||
rep->target1, rep->target2);
|
|
||||||
dprintf_fixup(stddeb, " Additive = %d\n", additive);
|
|
||||||
}
|
|
||||||
|
|
||||||
switch (rep->address_type)
|
switch (rep->address_type)
|
||||||
{
|
{
|
||||||
case NE_RADDR_LOWBYTE:
|
case NE_RADDR_LOWBYTE:
|
||||||
dprintf_fixup(stddeb,"Unhandled address type NE_RADDR_LOWBYTE\n");
|
do {
|
||||||
return -1;
|
sp = PTR_SEG_OFF_TO_LIN( sel, offset );
|
||||||
|
dprintf_fixup(stddeb," %04x:%04x:%04x BYTE%s\n",
|
||||||
|
sel, offset, *sp, additive ? " additive":"");
|
||||||
|
offset = *sp;
|
||||||
|
if(additive)
|
||||||
|
*(unsigned char*)sp = (unsigned char)(address & 0xFF);
|
||||||
|
else
|
||||||
|
*(unsigned char*)sp = (unsigned char)((address+offset) & 0xFF);
|
||||||
|
}
|
||||||
|
while (offset != 0xffff && !additive);
|
||||||
|
break;
|
||||||
|
|
||||||
case NE_RADDR_OFFSET16:
|
case NE_RADDR_OFFSET16:
|
||||||
do {
|
do {
|
||||||
dprintf_fixup(stddeb," %04x:%04x:%04x OFFSET16\n",
|
sp = PTR_SEG_OFF_TO_LIN( sel, offset );
|
||||||
(unsigned int) sp >> 16, (int) sp & 0xFFFF, *sp);
|
dprintf_fixup(stddeb," %04x:%04x:%04x OFFSET16%s\n",
|
||||||
next_addr = *sp;
|
sel, offset, *sp, additive ? " additive" : "" );
|
||||||
|
offset = *sp;
|
||||||
*sp = (unsigned short) address;
|
*sp = (unsigned short) address;
|
||||||
if (additive == 2)
|
if (additive) *sp += offset;
|
||||||
*sp += next_addr;
|
|
||||||
sp = (unsigned short *) ((char *) sel->base_addr + next_addr);
|
|
||||||
}
|
}
|
||||||
while (next_addr != 0xffff && !additive);
|
while (offset != 0xffff && !additive);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NE_RADDR_POINTER32:
|
case NE_RADDR_POINTER32:
|
||||||
do {
|
do {
|
||||||
dprintf_fixup(stddeb," %04x:%04x:%04x POINTER32\n",
|
sp = PTR_SEG_OFF_TO_LIN( sel, offset );
|
||||||
(unsigned int) sp >> 16, (int) sp & 0xFFFF, *sp);
|
dprintf_fixup(stddeb," %04x:%04x:%04x POINTER32%s\n",
|
||||||
next_addr = *sp;
|
sel, offset, *sp, additive ? " additive" : "" );
|
||||||
*sp = (unsigned short) address;
|
offset = *sp;
|
||||||
if (additive == 2)
|
*sp = (unsigned short) address;
|
||||||
*sp += next_addr;
|
if (additive) *sp += offset;
|
||||||
*(sp+1) = (unsigned short) selector;
|
*(sp+1) = selector;
|
||||||
sp = (unsigned short *) ((char *) sel->base_addr + next_addr);
|
|
||||||
}
|
}
|
||||||
while (next_addr != 0xffff && !additive);
|
while (offset != 0xffff && !additive);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case NE_RADDR_SELECTOR:
|
case NE_RADDR_SELECTOR:
|
||||||
do {
|
do {
|
||||||
dprintf_fixup(stddeb," %04x:%04x:%04x SELECTOR\n",
|
sp = PTR_SEG_OFF_TO_LIN( sel, offset );
|
||||||
(unsigned int) sp >> 16, (int) sp & 0xFFFF, *sp);
|
dprintf_fixup(stddeb," %04x:%04x:%04x SELECTOR%s\n",
|
||||||
next_addr = *sp;
|
sel, offset, *sp, additive ? " additive" : "" );
|
||||||
*sp = (unsigned short) selector;
|
offset = *sp;
|
||||||
sp = (unsigned short *) ((char *) sel->base_addr + next_addr);
|
*sp = (unsigned short) selector;
|
||||||
if (rep->relocation_type == NE_RELTYPE_INT1)
|
if(additive)
|
||||||
break;
|
fprintf(stderr,"Additive selector, please report\n");
|
||||||
}
|
}
|
||||||
while (next_addr != 0xffff && !additive);
|
while (offset != 0xffff && !additive);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
@ -331,10 +328,10 @@ int NE_StartProgram(struct w_files *wpnt)
|
||||||
WIN_StackSize = wpnt->ne->ne_header->stack_length;
|
WIN_StackSize = wpnt->ne->ne_header->stack_length;
|
||||||
WIN_HeapSize = wpnt->ne->ne_header->local_heap_length;
|
WIN_HeapSize = wpnt->ne->ne_header->local_heap_length;
|
||||||
|
|
||||||
ds_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->auto_data_seg-1].selector;
|
ds_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->auto_data_seg-1];
|
||||||
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1].selector;
|
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1];
|
||||||
ip_reg = wpnt->ne->ne_header->ip;
|
ip_reg = wpnt->ne->ne_header->ip;
|
||||||
ss_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->ss-1].selector;
|
ss_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->ss-1];
|
||||||
sp_reg = wpnt->ne->ne_header->sp;
|
sp_reg = wpnt->ne->ne_header->sp;
|
||||||
|
|
||||||
return CallToInit16(cs_reg << 16 | ip_reg, ss_reg << 16 | sp_reg, ds_reg);
|
return CallToInit16(cs_reg << 16 | ip_reg, ss_reg << 16 | sp_reg, ds_reg);
|
||||||
|
@ -358,15 +355,15 @@ void NE_InitDLL(struct w_files *wpnt)
|
||||||
exit(1);
|
exit(1);
|
||||||
} else { /* DATA NONE DLL */
|
} else { /* DATA NONE DLL */
|
||||||
ds_reg = current_exe->ne->selector_table[
|
ds_reg = current_exe->ne->selector_table[
|
||||||
current_exe->ne->ne_header->auto_data_seg-1].selector;
|
current_exe->ne->ne_header->auto_data_seg-1];
|
||||||
cx_reg = 0;
|
cx_reg = 0;
|
||||||
} else { /* DATA SINGLE DLL */
|
} else { /* DATA SINGLE DLL */
|
||||||
ds_reg = wpnt->ne->selector_table[wpnt->ne->
|
ds_reg = wpnt->ne->selector_table[wpnt->ne->
|
||||||
ne_header->auto_data_seg-1].selector;
|
ne_header->auto_data_seg-1];
|
||||||
cx_reg = wpnt->ne->ne_header->local_heap_length;
|
cx_reg = wpnt->ne->ne_header->local_heap_length;
|
||||||
}
|
}
|
||||||
|
|
||||||
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1].selector;
|
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1];
|
||||||
ip_reg = wpnt->ne->ne_header->ip;
|
ip_reg = wpnt->ne->ne_header->ip;
|
||||||
|
|
||||||
di_reg = wpnt->hinstance;
|
di_reg = wpnt->hinstance;
|
||||||
|
@ -423,8 +420,7 @@ HINSTANCE NE_LoadImage(struct w_files *wpnt)
|
||||||
wpnt->hinstance=current_nodata++;
|
wpnt->hinstance=current_nodata++;
|
||||||
} else
|
} else
|
||||||
wpnt->hinstance = (wpnt->ne->
|
wpnt->hinstance = (wpnt->ne->
|
||||||
selector_table[wpnt->ne->ne_header->auto_data_seg-1].
|
selector_table[wpnt->ne->ne_header->auto_data_seg-1]);
|
||||||
selector);
|
|
||||||
if (wpnt->hinstance == 0)
|
if (wpnt->hinstance == 0)
|
||||||
wpnt->hinstance = 0xf000;
|
wpnt->hinstance = 0xf000;
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -10,12 +10,12 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
#include "ldt.h"
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "peexe.h"
|
#include "peexe.h"
|
||||||
#include "arch.h"
|
#include "arch.h"
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
#include "library.h"
|
#include "library.h"
|
||||||
#include "heap.h"
|
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
@ -75,7 +75,7 @@ static void NE_LoadNameTable(struct w_files *wpnt)
|
||||||
read(wpnt->fd, &len, sizeof(len));
|
read(wpnt->fd, &len, sizeof(len));
|
||||||
while (len)
|
while (len)
|
||||||
{
|
{
|
||||||
new = (RESNAMTAB *) GlobalQuickAlloc(sizeof(*new));
|
new = (RESNAMTAB *) GlobalLock(GlobalAlloc(GMEM_MOVEABLE,sizeof(*new)));
|
||||||
new->next = top;
|
new->next = top;
|
||||||
top = new;
|
top = new;
|
||||||
|
|
||||||
|
@ -337,12 +337,13 @@ int GetRsrcCount(HINSTANCE hInst, int type_id)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* NE_FindResource [KERNEL.60]
|
* NE_FindResource [KERNEL.60]
|
||||||
*/
|
*/
|
||||||
int NE_FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name,
|
int NE_FindResource(HANDLE instance, SEGPTR resource_name, SEGPTR type_name,
|
||||||
RESOURCE *r)
|
RESOURCE *r)
|
||||||
{
|
{
|
||||||
int type, x;
|
int type, x;
|
||||||
|
char *type_name_ptr, *resource_name_ptr;
|
||||||
|
|
||||||
dprintf_resource(stddeb, "NE_FindResource hInst=%04X typename=%p resname=%p\n",
|
dprintf_resource(stddeb, "NE_FindResource hInst=%04X typename=%08lx resname=%08lx\n",
|
||||||
instance, type_name, resource_name);
|
instance, type_name, resource_name);
|
||||||
|
|
||||||
r->size = r->offset = 0;
|
r->size = r->offset = 0;
|
||||||
|
@ -351,30 +352,32 @@ int NE_FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name,
|
||||||
if (r->wpnt->ne->resnamtab == NULL)
|
if (r->wpnt->ne->resnamtab == NULL)
|
||||||
NE_LoadNameTable(r->wpnt);
|
NE_LoadNameTable(r->wpnt);
|
||||||
|
|
||||||
if (((int) type_name & 0xffff0000) == 0)
|
if (HIWORD(type_name) == 0)
|
||||||
type = (int) type_name;
|
type = (int) type_name;
|
||||||
else {
|
else {
|
||||||
if (type_name[0] == '\0')
|
type_name_ptr = PTR_SEG_TO_LIN( type_name );
|
||||||
|
if (type_name_ptr[0] == '\0')
|
||||||
type = -1;
|
type = -1;
|
||||||
if (type_name[0] == '#')
|
if (type_name_ptr[0] == '#')
|
||||||
type = atoi(type_name + 1);
|
type = atoi(type_name_ptr + 1);
|
||||||
else
|
else
|
||||||
type = (int) type_name;
|
type = (int) type_name_ptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (((int) resource_name & 0xffff0000) == 0)
|
if (HIWORD(resource_name) == 0)
|
||||||
x = FindResourceByNumber(r, type, (int) resource_name | 0x8000);
|
x = FindResourceByNumber(r, type, LOWORD(resource_name) | 0x8000);
|
||||||
else {
|
else {
|
||||||
if (resource_name[0] == '\0')
|
resource_name_ptr = PTR_SEG_TO_LIN( resource_name );
|
||||||
|
if (resource_name_ptr[0] == '\0')
|
||||||
x = FindResourceByNumber(r, type, -1);
|
x = FindResourceByNumber(r, type, -1);
|
||||||
if (resource_name[0] == '#')
|
if (resource_name_ptr[0] == '#')
|
||||||
x = FindResourceByNumber(r, type, atoi(resource_name + 1));
|
x = FindResourceByNumber(r, type, atoi(resource_name_ptr + 1));
|
||||||
else
|
else
|
||||||
x = FindResourceByName(r, type, resource_name);
|
x = FindResourceByName(r, type, resource_name_ptr);
|
||||||
}
|
}
|
||||||
if (x == -1) {
|
if (x == -1) {
|
||||||
printf("NE_FindResource hInst=%04X typename=%08X resname=%08X not found!\n",
|
printf("NE_FindResource hInst=%04x typename=%p resname=%p not found!\n",
|
||||||
instance, (int) type_name, (int) resource_name);
|
instance, type_name_ptr, resource_name_ptr);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
#include "ldt.h"
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "peexe.h"
|
#include "peexe.h"
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
|
@ -124,18 +125,26 @@ find_type(struct PE_Resource_Directory *resource, LPSTR resource_name,
|
||||||
* PE_FindResource [KERNEL.60]
|
* PE_FindResource [KERNEL.60]
|
||||||
*/
|
*/
|
||||||
int
|
int
|
||||||
PE_FindResource(HANDLE instance, LPSTR resource_name, LPSTR type_name,
|
PE_FindResource(HANDLE instance, SEGPTR resource_name, SEGPTR type_name,
|
||||||
RESOURCE *r)
|
RESOURCE *r)
|
||||||
{
|
{
|
||||||
dprintf_resource(stddeb, "PE_FindResource hInst=%04X typename=%08X resname=%08X\n",
|
dprintf_resource(stddeb, "PE_FindResource hInst=%04X typename=%08X resname=%08X\n",
|
||||||
instance, (int) type_name, (int) resource_name);
|
instance, (int) type_name, (int) resource_name);
|
||||||
if (HIWORD((DWORD)resource_name))
|
if (HIWORD(resource_name))
|
||||||
if (resource_name[0] == '#')
|
{
|
||||||
resource_name = (LPSTR) atoi(resource_name + 1);
|
char *resource_name_ptr = PTR_SEG_TO_LIN( resource_name );
|
||||||
|
if (resource_name_ptr[0] == '#')
|
||||||
if (HIWORD((DWORD)type_name))
|
resource_name = (SEGPTR) atoi(resource_name_ptr + 1);
|
||||||
if (type_name[0] == '#')
|
else
|
||||||
type_name = (LPSTR) atoi(type_name + 1);
|
resource_name = (SEGPTR)resource_name_ptr;
|
||||||
|
}
|
||||||
|
if (HIWORD(type_name))
|
||||||
|
{
|
||||||
|
char *type_name_ptr = PTR_SEG_TO_LIN( type_name );
|
||||||
|
if (type_name_ptr[0] == '#')
|
||||||
|
type_name = (SEGPTR) atoi(type_name_ptr + 1);
|
||||||
|
else
|
||||||
|
type_name = (SEGPTR) type_name_ptr;
|
||||||
|
}
|
||||||
return find_type(r->wpnt->pe->pe_resource, resource_name, type_name,r);
|
return find_type(r->wpnt->pe->pe_resource, resource_name, type_name,r);
|
||||||
}
|
}
|
||||||
|
|
|
@ -27,19 +27,19 @@ static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
||||||
|
|
||||||
RESOURCE *Top = NULL;
|
RESOURCE *Top = NULL;
|
||||||
|
|
||||||
extern int NE_FindResource(HANDLE, LPSTR, LPSTR, RESOURCE *);
|
extern int NE_FindResource(HANDLE, SEGPTR, SEGPTR, RESOURCE *);
|
||||||
extern int PE_FindResource(HANDLE, LPSTR, LPSTR, RESOURCE *);
|
extern int PE_FindResource(HANDLE, SEGPTR, SEGPTR, RESOURCE *);
|
||||||
|
|
||||||
#define PrintId(name) \
|
#define PrintId(name) \
|
||||||
if (HIWORD((DWORD)name)) \
|
if (HIWORD((DWORD)name)) \
|
||||||
printf(", %s", name); \
|
printf(", '%s'", (char *)PTR_SEG_TO_LIN(name)); \
|
||||||
else \
|
else \
|
||||||
printf(", #%d", (int) name);
|
printf(", #%d", LOWORD(name));
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* FindResource [KERNEL.60]
|
* FindResource [KERNEL.60]
|
||||||
*/
|
*/
|
||||||
HANDLE FindResource(HANDLE instance, LPSTR name, LPSTR type)
|
HANDLE FindResource(HANDLE instance, SEGPTR name, SEGPTR type)
|
||||||
{
|
{
|
||||||
int status;
|
int status;
|
||||||
RESOURCE *r;
|
RESOURCE *r;
|
||||||
|
@ -64,14 +64,14 @@ HANDLE FindResource(HANDLE instance, LPSTR name, LPSTR type)
|
||||||
r->rsc_mem = 0;
|
r->rsc_mem = 0;
|
||||||
r->count = 0;
|
r->count = 0;
|
||||||
if (HIWORD((DWORD)name))
|
if (HIWORD((DWORD)name))
|
||||||
r->name = strdup(name);
|
r->name = strdup(PTR_SEG_TO_LIN(name));
|
||||||
else
|
else
|
||||||
r->name = name;
|
r->name = (LPSTR)name;
|
||||||
|
|
||||||
if (HIWORD((DWORD)type))
|
if (HIWORD((DWORD)type))
|
||||||
r->type = strdup(type);
|
r->type = strdup(PTR_SEG_TO_LIN(type));
|
||||||
else
|
else
|
||||||
r->type = type;
|
r->type = (LPSTR)type;
|
||||||
|
|
||||||
r->wpnt = GetFileInfo(instance);
|
r->wpnt = GetFileInfo(instance);
|
||||||
r->fd = dup(r->wpnt->fd);
|
r->fd = dup(r->wpnt->fd);
|
||||||
|
@ -178,7 +178,7 @@ HANDLE LoadResource(HANDLE instance, HANDLE hResInfo)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
h = r->rsc_mem = AllocResource(instance, hResInfo, 0);
|
h = r->rsc_mem = AllocResource(instance, hResInfo, 0);
|
||||||
image = GlobalLinearLock(h);
|
image = GlobalLock(h);
|
||||||
image_size = r->size;
|
image_size = r->size;
|
||||||
fd = AccessResource(instance, hResInfo);
|
fd = AccessResource(instance, hResInfo);
|
||||||
|
|
||||||
|
@ -189,7 +189,7 @@ HANDLE LoadResource(HANDLE instance, HANDLE hResInfo)
|
||||||
}
|
}
|
||||||
r->count++;
|
r->count++;
|
||||||
close(fd);
|
close(fd);
|
||||||
GlobalLinearUnlock(h);
|
GlobalUnlock(h);
|
||||||
GlobalUnlock(hResInfo);
|
GlobalUnlock(hResInfo);
|
||||||
return h;
|
return h;
|
||||||
}
|
}
|
||||||
|
@ -197,6 +197,14 @@ HANDLE LoadResource(HANDLE instance, HANDLE hResInfo)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LockResource [KERNEL.62]
|
* LockResource [KERNEL.62]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/* 16-bit version */
|
||||||
|
SEGPTR WIN16_LockResource(HANDLE hResData)
|
||||||
|
{
|
||||||
|
return WIN16_GlobalLock(hResData);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 32-bit version */
|
||||||
LPSTR LockResource(HANDLE hResData)
|
LPSTR LockResource(HANDLE hResData)
|
||||||
{
|
{
|
||||||
return GlobalLock(hResData);
|
return GlobalLock(hResData);
|
||||||
|
@ -302,15 +310,15 @@ HBITMAP ConvertInfoBitmap( HDC hdc, BITMAPINFO * image )
|
||||||
* RSC_LoadResource
|
* RSC_LoadResource
|
||||||
*/
|
*/
|
||||||
HANDLE
|
HANDLE
|
||||||
RSC_LoadResource(int instance, LPSTR rsc_name, LPSTR type, int *image_size_ret)
|
RSC_LoadResource(int instance, SEGPTR rsc_name, SEGPTR type, int *image_size_ret)
|
||||||
{
|
{
|
||||||
HANDLE hResInfo;
|
HANDLE hResInfo;
|
||||||
RESOURCE *r;
|
RESOURCE *r;
|
||||||
|
|
||||||
dprintf_resource(stddeb, "RSC_LoadResource: instance = %04x, name = %08x, type = %08x\n",
|
dprintf_resource(stddeb, "RSC_LoadResource: instance = %04x, name = %08lx, type = %08lx\n",
|
||||||
instance, (int) rsc_name, (int) type);
|
instance, rsc_name, type);
|
||||||
|
|
||||||
if ((hResInfo = FindResource(instance, rsc_name, (LPSTR) type)) == (HANDLE) NULL) {
|
if ((hResInfo = FindResource(instance, rsc_name, type)) == (HANDLE) NULL) {
|
||||||
return (HANDLE)NULL;
|
return (HANDLE)NULL;
|
||||||
}
|
}
|
||||||
r = (RESOURCE *)GlobalLock(hResInfo);
|
r = (RESOURCE *)GlobalLock(hResInfo);
|
||||||
|
@ -324,7 +332,7 @@ RSC_LoadResource(int instance, LPSTR rsc_name, LPSTR type, int *image_size_ret)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LoadIcon [USER.174]
|
* LoadIcon [USER.174]
|
||||||
*/
|
*/
|
||||||
HICON LoadIcon(HANDLE instance, LPSTR icon_name)
|
HICON LoadIcon( HANDLE instance, SEGPTR icon_name )
|
||||||
{
|
{
|
||||||
HICON hIcon;
|
HICON hIcon;
|
||||||
HANDLE rsc_mem;
|
HANDLE rsc_mem;
|
||||||
|
@ -338,11 +346,12 @@ HICON LoadIcon(HANDLE instance, LPSTR icon_name)
|
||||||
HDC hdc;
|
HDC hdc;
|
||||||
int image_size;
|
int image_size;
|
||||||
|
|
||||||
if(debugging_resource){
|
if (HIWORD(icon_name))
|
||||||
printf("LoadIcon(%04X", instance);
|
dprintf_resource( stddeb, "LoadIcon: %04x '%s'\n",
|
||||||
PrintId(icon_name);
|
instance, (char *)PTR_SEG_TO_LIN( icon_name ) );
|
||||||
printf(")\n");
|
else
|
||||||
}
|
dprintf_resource( stddeb, "LoadIcon: %04x %04x\n",
|
||||||
|
instance, LOWORD(icon_name) );
|
||||||
|
|
||||||
if (!instance)
|
if (!instance)
|
||||||
{
|
{
|
||||||
|
@ -351,10 +360,10 @@ HICON LoadIcon(HANDLE instance, LPSTR icon_name)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(hdc = GetDC(GetDesktopWindow()))) return 0;
|
if (!(hdc = GetDC(GetDesktopWindow()))) return 0;
|
||||||
rsc_mem = RSC_LoadResource(instance, icon_name, (LPSTR) NE_RSCTYPE_GROUP_ICON,
|
rsc_mem = RSC_LoadResource(instance, icon_name,
|
||||||
&image_size);
|
(SEGPTR) NE_RSCTYPE_GROUP_ICON, &image_size);
|
||||||
if (rsc_mem == (HANDLE)NULL) {
|
if (rsc_mem == (HANDLE)NULL) {
|
||||||
printf("LoadIcon / Icon %04X not Found !\n", (int) icon_name);
|
printf("LoadIcon / Icon %08x not Found !\n", (int) icon_name);
|
||||||
ReleaseDC(GetDesktopWindow(), hdc);
|
ReleaseDC(GetDesktopWindow(), hdc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -377,11 +386,11 @@ HICON LoadIcon(HANDLE instance, LPSTR icon_name)
|
||||||
height = lpicodesc->Height;
|
height = lpicodesc->Height;
|
||||||
GlobalUnlock(rsc_mem);
|
GlobalUnlock(rsc_mem);
|
||||||
GlobalFree(rsc_mem);
|
GlobalFree(rsc_mem);
|
||||||
rsc_mem = RSC_LoadResource(instance,
|
rsc_mem = RSC_LoadResource( instance,
|
||||||
MAKEINTRESOURCE(lpicodesc->icoDIBOffset),
|
MAKEINTRESOURCE(lpicodesc->icoDIBOffset),
|
||||||
(LPSTR) NE_RSCTYPE_ICON, &image_size);
|
(SEGPTR) NE_RSCTYPE_ICON, &image_size );
|
||||||
if (rsc_mem == (HANDLE)NULL) {
|
if (rsc_mem == (HANDLE)NULL) {
|
||||||
printf("LoadIcon / Icon %04X Bitmaps not Found !\n", (int) icon_name);
|
printf("LoadIcon / Icon %08lx Bitmaps not Found !\n", icon_name );
|
||||||
ReleaseDC(GetDesktopWindow(), hdc);
|
ReleaseDC(GetDesktopWindow(), hdc);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -503,7 +512,7 @@ BOOL DestroyIcon(HICON hIcon)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LoadAccelerators [USER.177]
|
* LoadAccelerators [USER.177]
|
||||||
*/
|
*/
|
||||||
HANDLE LoadAccelerators(HANDLE instance, LPSTR lpTableName)
|
HANDLE LoadAccelerators(HANDLE instance, SEGPTR lpTableName)
|
||||||
{
|
{
|
||||||
HANDLE hAccel;
|
HANDLE hAccel;
|
||||||
HANDLE rsc_mem;
|
HANDLE rsc_mem;
|
||||||
|
@ -511,18 +520,17 @@ HANDLE LoadAccelerators(HANDLE instance, LPSTR lpTableName)
|
||||||
ACCELHEADER *lpAccelTbl;
|
ACCELHEADER *lpAccelTbl;
|
||||||
int i, image_size, n;
|
int i, image_size, n;
|
||||||
|
|
||||||
if(debugging_accel){
|
if (HIWORD(lpTableName))
|
||||||
printf("LoadAccelerators(%04X", instance);
|
dprintf_accel( stddeb, "LoadAccelerators: %04x '%s'\n",
|
||||||
PrintId(lpTableName);
|
instance, (char *)PTR_SEG_TO_LIN( lpTableName ) );
|
||||||
printf(")\n");
|
else
|
||||||
}
|
dprintf_accel( stddeb, "LoadAccelerators: %04x %04x\n",
|
||||||
|
instance, LOWORD(lpTableName) );
|
||||||
|
|
||||||
rsc_mem = RSC_LoadResource(instance, lpTableName, (LPSTR) NE_RSCTYPE_ACCELERATOR,
|
rsc_mem = RSC_LoadResource( instance, lpTableName,
|
||||||
&image_size);
|
(SEGPTR) NE_RSCTYPE_ACCELERATOR, &image_size );
|
||||||
if (rsc_mem == (HANDLE)NULL) {
|
if (rsc_mem == (HANDLE)NULL) {
|
||||||
printf("LoadAccelerators(%04X", instance);
|
printf("LoadAccelerators(%08lx) not found!\n", lpTableName );
|
||||||
PrintId(lpTableName);
|
|
||||||
printf(") not found !\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
lp = (BYTE *)GlobalLock(rsc_mem);
|
lp = (BYTE *)GlobalLock(rsc_mem);
|
||||||
|
@ -624,8 +632,8 @@ LoadString(HANDLE instance, WORD resource_id, LPSTR buffer, int buflen)
|
||||||
dprintf_resource(stddeb, "LoadString: instance = %04x, id = %d, buffer = %08x, "
|
dprintf_resource(stddeb, "LoadString: instance = %04x, id = %d, buffer = %08x, "
|
||||||
"length = %d\n", instance, resource_id, (int) buffer, buflen);
|
"length = %d\n", instance, resource_id, (int) buffer, buflen);
|
||||||
|
|
||||||
hmem = RSC_LoadResource(instance, (char *) ((resource_id >> 4) + 1),
|
hmem = RSC_LoadResource(instance, (SEGPTR)((resource_id >> 4) + 1),
|
||||||
(LPSTR) NE_RSCTYPE_STRING, &rsc_size);
|
(SEGPTR) NE_RSCTYPE_STRING, &rsc_size );
|
||||||
if (hmem == 0)
|
if (hmem == 0)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
@ -656,33 +664,34 @@ LoadString(HANDLE instance, WORD resource_id, LPSTR buffer, int buflen)
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LoadMenu [USER.150]
|
* LoadMenu [USER.150]
|
||||||
*/
|
*/
|
||||||
HMENU LoadMenu(HINSTANCE instance, char *menu_name)
|
HMENU LoadMenu( HINSTANCE instance, SEGPTR menu_name )
|
||||||
{
|
{
|
||||||
HMENU hMenu;
|
HMENU hMenu;
|
||||||
HANDLE hMenu_desc;
|
HANDLE hMenu_desc;
|
||||||
MENU_HEADER *menu_desc;
|
MENU_HEADER *menu_desc;
|
||||||
|
|
||||||
if(debugging_menu){
|
if (HIWORD(menu_name))
|
||||||
printf("LoadMenu(%04X", instance);
|
dprintf_resource( stddeb, "LoadMenu(%04x,'%s')\n",
|
||||||
PrintId(menu_name);
|
instance, (char *)PTR_SEG_TO_LIN( menu_name ) );
|
||||||
printf(")\n");
|
else
|
||||||
}
|
dprintf_resource( stddeb, "LoadMenu(%04x,%04x)\n",
|
||||||
if (menu_name == NULL)
|
instance, LOWORD(menu_name) );
|
||||||
return 0;
|
|
||||||
|
|
||||||
if ((hMenu_desc = RSC_LoadResource(instance, menu_name, (LPSTR) NE_RSCTYPE_MENU, NULL)) == (HANDLE) NULL)
|
if (!menu_name) return 0;
|
||||||
return 0;
|
|
||||||
|
if (!(hMenu_desc = RSC_LoadResource( instance, menu_name,
|
||||||
|
(SEGPTR) NE_RSCTYPE_MENU, NULL )))
|
||||||
|
return 0;
|
||||||
|
|
||||||
menu_desc = (MENU_HEADER *) GlobalLock(hMenu_desc);
|
menu_desc = (MENU_HEADER *) GlobalLock(hMenu_desc);
|
||||||
hMenu = LoadMenuIndirect((LPSTR)menu_desc);
|
hMenu = LoadMenuIndirect((LPSTR)menu_desc);
|
||||||
return hMenu;
|
return hMenu;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LoadBitmap
|
* LoadBitmap
|
||||||
*/
|
*/
|
||||||
HBITMAP
|
HBITMAP LoadBitmap( HANDLE instance, SEGPTR bmp_name )
|
||||||
LoadBitmap(HANDLE instance, LPSTR bmp_name)
|
|
||||||
{
|
{
|
||||||
HBITMAP hbitmap;
|
HBITMAP hbitmap;
|
||||||
HANDLE rsc_mem;
|
HANDLE rsc_mem;
|
||||||
|
@ -691,11 +700,12 @@ LoadBitmap(HANDLE instance, LPSTR bmp_name)
|
||||||
int image_size;
|
int image_size;
|
||||||
int size;
|
int size;
|
||||||
|
|
||||||
if(debugging_resource){
|
if (HIWORD(bmp_name))
|
||||||
printf("LoadBitmap(%04X", instance);
|
dprintf_resource( stddeb, "LoadBitmap(%04x,'%s')\n",
|
||||||
PrintId(bmp_name);
|
instance, (char *)PTR_SEG_TO_LIN( bmp_name ) );
|
||||||
printf(")\n");
|
else
|
||||||
}
|
dprintf_resource( stddeb, "LoadBitmap(%04x,%04x)\n",
|
||||||
|
instance, LOWORD( bmp_name ) );
|
||||||
|
|
||||||
if (!instance)
|
if (!instance)
|
||||||
{
|
{
|
||||||
|
@ -703,20 +713,19 @@ LoadBitmap(HANDLE instance, LPSTR bmp_name)
|
||||||
return OBM_LoadBitmap( LOWORD((int)bmp_name) );
|
return OBM_LoadBitmap( LOWORD((int)bmp_name) );
|
||||||
}
|
}
|
||||||
|
|
||||||
rsc_mem = RSC_LoadResource(instance, bmp_name, (LPSTR) NE_RSCTYPE_BITMAP,
|
rsc_mem = RSC_LoadResource(instance, bmp_name, (SEGPTR) NE_RSCTYPE_BITMAP,
|
||||||
&image_size);
|
&image_size);
|
||||||
if (rsc_mem == (HANDLE)NULL) {
|
if (rsc_mem == (HANDLE)NULL) {
|
||||||
printf("LoadBitmap(%04X", instance);
|
printf("LoadBitmap(%04x,%08lx)\n", instance, bmp_name);
|
||||||
PrintId(bmp_name);
|
|
||||||
printf(") NOT found!\n");
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
lp = (long *) GlobalLinearLock(rsc_mem);
|
lp = (long *) GlobalLock(rsc_mem);
|
||||||
if (lp == NULL)
|
if (lp == NULL)
|
||||||
{
|
{
|
||||||
GlobalFree(rsc_mem);
|
GlobalFree(rsc_mem);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!(hdc = GetDC(0))) lp = NULL;
|
if (!(hdc = GetDC(0))) lp = NULL;
|
||||||
size = CONV_LONG (*lp);
|
size = CONV_LONG (*lp);
|
||||||
if (size == sizeof(BITMAPCOREHEADER)){
|
if (size == sizeof(BITMAPCOREHEADER)){
|
||||||
|
|
File diff suppressed because it is too large
Load diff
|
@ -16,7 +16,6 @@
|
||||||
|
|
||||||
#include "wine.h"
|
#include "wine.h"
|
||||||
#include "dos_fs.h"
|
#include "dos_fs.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "prototypes.h"
|
#include "prototypes.h"
|
||||||
#include "miscemu.h"
|
#include "miscemu.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
|
@ -72,11 +71,15 @@ int do_int(int intnum, struct sigcontext_struct *scp)
|
||||||
scp->sc_edx = 0xdef0;
|
scp->sc_edx = 0xdef0;
|
||||||
return 1;
|
return 1;
|
||||||
|
|
||||||
case 0x25: return do_int25(scp);
|
case 0x25: return do_int25(scp);
|
||||||
case 0x26: return do_int26(scp);
|
case 0x26: return do_int26(scp);
|
||||||
case 0x2a: return do_int2a(scp);
|
case 0x2a: return do_int2a(scp);
|
||||||
case 0x2f: return do_int2f(scp);
|
case 0x2f: return do_int2f(scp);
|
||||||
case 0x31: return do_int31(scp);
|
case 0x31: return do_int31(scp);
|
||||||
|
|
||||||
|
default:
|
||||||
|
printf("int%02x: Unimplemented!\n", intnum);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -98,6 +101,7 @@ static void win_fault(int signal, int code, struct sigcontext *scp)
|
||||||
#ifdef linux
|
#ifdef linux
|
||||||
if(signal != SIGSEGV
|
if(signal != SIGSEGV
|
||||||
&& signal != SIGILL
|
&& signal != SIGILL
|
||||||
|
&& signal != SIGFPE
|
||||||
#ifdef SIGBUS
|
#ifdef SIGBUS
|
||||||
&& signal != SIGBUS
|
&& signal != SIGBUS
|
||||||
#endif
|
#endif
|
||||||
|
@ -131,7 +135,7 @@ static void win_fault(int signal, int code, struct sigcontext *scp)
|
||||||
|
|
||||||
/* Now take a look at the actual instruction where the program
|
/* Now take a look at the actual instruction where the program
|
||||||
bombed */
|
bombed */
|
||||||
instr = (unsigned char *) SAFEMAKEPTR(scp->sc_cs, scp->sc_eip);
|
instr = (unsigned char *) PTR_SEG_OFF_TO_LIN(scp->sc_cs, scp->sc_eip);
|
||||||
|
|
||||||
switch(*instr)
|
switch(*instr)
|
||||||
{
|
{
|
||||||
|
@ -233,6 +237,7 @@ void init_wine_signals(void)
|
||||||
(void (*)()) (((unsigned int)(cstack) + sizeof(cstack) - 4) & ~3);
|
(void (*)()) (((unsigned int)(cstack) + sizeof(cstack) - 4) & ~3);
|
||||||
wine_sigaction(SIGSEGV, &segv_act, NULL);
|
wine_sigaction(SIGSEGV, &segv_act, NULL);
|
||||||
wine_sigaction(SIGILL, &segv_act, NULL);
|
wine_sigaction(SIGILL, &segv_act, NULL);
|
||||||
|
wine_sigaction(SIGFPE, &segv_act, NULL);
|
||||||
#ifdef SIGBUS
|
#ifdef SIGBUS
|
||||||
wine_sigaction(SIGBUS, &segv_act, NULL);
|
wine_sigaction(SIGBUS, &segv_act, NULL);
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -3,9 +3,9 @@
|
||||||
MODULE = memory
|
MODULE = memory
|
||||||
|
|
||||||
SRCS = \
|
SRCS = \
|
||||||
|
selector.c \
|
||||||
global.c \
|
global.c \
|
||||||
heap.c \
|
local.c
|
||||||
linear.c
|
|
||||||
|
|
||||||
OBJS = $(SRCS:.c=.o)
|
OBJS = $(SRCS:.c=.o)
|
||||||
|
|
||||||
|
|
1089
memory/global.c
1089
memory/global.c
File diff suppressed because it is too large
Load diff
661
memory/heap.c
661
memory/heap.c
|
@ -1,661 +0,0 @@
|
||||||
/*
|
|
||||||
static char RCSId[] = "$Id: heap.c,v 1.3 1993/07/04 04:04:21 root Exp root $";
|
|
||||||
static char Copyright[] = "Copyright Robert J. Amstadt, 1993";
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "segmem.h"
|
|
||||||
#include "heap.h"
|
|
||||||
#include "regfunc.h"
|
|
||||||
#include "dlls.h"
|
|
||||||
#include "stddebug.h"
|
|
||||||
/* #define DEBUG_HEAP */
|
|
||||||
#include "debug.h"
|
|
||||||
|
|
||||||
|
|
||||||
LHEAP *LocalHeaps = NULL;
|
|
||||||
|
|
||||||
void
|
|
||||||
HEAP_CheckHeap(MDESC **free_list)
|
|
||||||
{
|
|
||||||
MDESC *m;
|
|
||||||
|
|
||||||
for (m = *free_list; m != NULL; m = m->next)
|
|
||||||
{
|
|
||||||
if (((int) m & 0xffff0000) != ((int) *free_list & 0xffff0000))
|
|
||||||
{ dprintf_heap(stddeb,"Invalid block %p\n",m);
|
|
||||||
*(char *)0 = 0;
|
|
||||||
}
|
|
||||||
if (m->prev && (((int) m->prev & 0xffff0000) != ((int) *free_list & 0xffff0000)))
|
|
||||||
{ dprintf_heap(stddeb,"Invalid prev %p from %p\n", m->prev, m);
|
|
||||||
*(char *)0 = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_Init
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
HEAP_Init(MDESC **free_list, void *start, int length)
|
|
||||||
{
|
|
||||||
if (length < 2 * sizeof(MDESC))
|
|
||||||
return;
|
|
||||||
|
|
||||||
*free_list = (MDESC *) start;
|
|
||||||
(*free_list)->prev = NULL;
|
|
||||||
(*free_list)->next = NULL;
|
|
||||||
(*free_list)->length = length - sizeof(MDESC);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_Alloc
|
|
||||||
*/
|
|
||||||
void *
|
|
||||||
HEAP_Alloc(MDESC **free_list, int flags, int bytes)
|
|
||||||
{
|
|
||||||
MDESC *m, *m_new;
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HeapAlloc: free_list %08x(%08x), flags %x, bytes %d\n",
|
|
||||||
(unsigned int) free_list, (unsigned int) *free_list, flags, bytes);
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Find free block big enough.
|
|
||||||
*/
|
|
||||||
for (m = *free_list; m != NULL; m = m->next)
|
|
||||||
{
|
|
||||||
if (m->length >= bytes && m->length < bytes + 4 * sizeof(MDESC))
|
|
||||||
{
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
else if (m->length > bytes)
|
|
||||||
{
|
|
||||||
m_new = m + (bytes / sizeof(MDESC)) + 2;
|
|
||||||
if (m->prev == NULL)
|
|
||||||
*free_list = m_new;
|
|
||||||
else
|
|
||||||
m->prev->next = m_new;
|
|
||||||
|
|
||||||
if (m->next != NULL)
|
|
||||||
m->next->prev = m_new;
|
|
||||||
|
|
||||||
m_new->next = m->next;
|
|
||||||
m_new->prev = m->prev;
|
|
||||||
m_new->length = m->length - ((int) m_new - (int) m);
|
|
||||||
m->length -= (m_new->length + sizeof(MDESC));
|
|
||||||
|
|
||||||
m->prev = m;
|
|
||||||
m->next = m;
|
|
||||||
m->lock = 0;
|
|
||||||
m->flags = 0;
|
|
||||||
if (flags & GLOBAL_FLAGS_ZEROINIT)
|
|
||||||
memset(m + 1, 0, bytes);
|
|
||||||
dprintf_heap(stddeb,"HeapAlloc: returning %08x\n",
|
|
||||||
(unsigned int) (m + 1));
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
return (void *) (m + 1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m != NULL)
|
|
||||||
{
|
|
||||||
if (m->prev == NULL)
|
|
||||||
*free_list = m->next;
|
|
||||||
else
|
|
||||||
m->prev->next = m->next;
|
|
||||||
|
|
||||||
if (m->next != NULL)
|
|
||||||
m->next->prev = m->prev;
|
|
||||||
|
|
||||||
m->prev = m;
|
|
||||||
m->next = m;
|
|
||||||
m->lock = 0;
|
|
||||||
m->flags = 0;
|
|
||||||
if (flags & GLOBAL_FLAGS_ZEROINIT)
|
|
||||||
memset(m + 1, 0, bytes);
|
|
||||||
dprintf_heap(stddeb,"HeapAlloc: returning %08x\n",
|
|
||||||
(unsigned int) (m + 1));
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
return (void *) (m + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HeapAlloc: returning %08x\n", 0);
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_ReAlloc
|
|
||||||
*/
|
|
||||||
void *
|
|
||||||
HEAP_ReAlloc(MDESC **free_list, void *old_block,
|
|
||||||
int new_size, unsigned int flags)
|
|
||||||
{
|
|
||||||
MDESC *m_free;
|
|
||||||
MDESC *m;
|
|
||||||
|
|
||||||
|
|
||||||
if (!old_block)
|
|
||||||
return HEAP_Alloc(free_list, flags, new_size);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check validity of block
|
|
||||||
*/
|
|
||||||
m = (MDESC *) old_block - 1;
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc new_size=%d !\n",
|
|
||||||
(unsigned int) new_size);
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc old_block=%08X !\n",
|
|
||||||
(unsigned int) old_block);
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc m=%08X free_list=%08X !\n",
|
|
||||||
(unsigned int) m, (unsigned int) free_list);
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc m->prev=%08X !\n",
|
|
||||||
(unsigned int) m->prev);
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc m->next=%08X !\n",
|
|
||||||
(unsigned int) m->next);
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc *free_list=%08X !\n",
|
|
||||||
(unsigned int) *free_list);
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
|
|
||||||
if (m->prev != m || m->next != m ||
|
|
||||||
((int) m & 0xffff0000) != ((int) *free_list & 0xffff0000))
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Attempt to resize bad pointer, m = %p, *free_list = %p\n",
|
|
||||||
m, free_list);
|
|
||||||
HEAP_CheckHeap(free_list);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check for grow block
|
|
||||||
*/
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc Check for grow block !\n");
|
|
||||||
if (new_size > m->length)
|
|
||||||
{
|
|
||||||
m_free = m + 1 + m->length / sizeof(MDESC);
|
|
||||||
if (m_free->next == m_free ||
|
|
||||||
m_free->prev == m_free ||
|
|
||||||
m_free->length + 2*sizeof(MDESC) < new_size - m->length)
|
|
||||||
{
|
|
||||||
void *new_p = HEAP_Alloc(free_list, flags, new_size);
|
|
||||||
if (new_p ==NULL)
|
|
||||||
return NULL;
|
|
||||||
memcpy(new_p, old_block, m->length);
|
|
||||||
HEAP_Free(free_list, old_block);
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
return new_p;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m_free->prev == NULL)
|
|
||||||
*free_list = m_free->next;
|
|
||||||
else
|
|
||||||
m_free->prev->next = m_free->next;
|
|
||||||
|
|
||||||
if (m_free->next != NULL)
|
|
||||||
m_free->next->prev = m_free->prev;
|
|
||||||
|
|
||||||
m->length += sizeof(MDESC) + m_free->length;
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc before GLOBAL_FLAGS_ZEROINIT !\n");
|
|
||||||
if (flags & GLOBAL_FLAGS_ZEROINIT)
|
|
||||||
memset(m_free, '\0', sizeof(MDESC) + m_free->length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Check for shrink block.
|
|
||||||
*/
|
|
||||||
dprintf_heap(stddeb,"HEAP_ReAlloc Check for shrink block !\n");
|
|
||||||
if (new_size + 4*sizeof(MDESC) < m->length)
|
|
||||||
{
|
|
||||||
m_free = m + new_size / sizeof(MDESC) + 2;
|
|
||||||
m_free->next = m_free;
|
|
||||||
m_free->prev = m_free;
|
|
||||||
m_free->length = m->length - ((int) m_free - (int) m);
|
|
||||||
m->length = (int) m_free - (int) (m + 1);
|
|
||||||
HEAP_Free(free_list, m_free + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
return old_block;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_Free
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
HEAP_Free(MDESC **free_list, void *block)
|
|
||||||
{
|
|
||||||
MDESC *m_free;
|
|
||||||
MDESC *m;
|
|
||||||
MDESC *m_prev;
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HeapFree: free_list %p, block %p\n",
|
|
||||||
free_list, block);
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Validate pointer.
|
|
||||||
*/
|
|
||||||
m_free = (MDESC *) block - 1;
|
|
||||||
if (m_free->prev != m_free || m_free->next != m_free)
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Attempt to free bad pointer,"
|
|
||||||
"m_free = %p, *free_list = %p\n",
|
|
||||||
m_free, free_list);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (*free_list == NULL)
|
|
||||||
{
|
|
||||||
*free_list = m_free;
|
|
||||||
(*free_list)->next = NULL;
|
|
||||||
(*free_list)->prev = NULL;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
else if (((int) m_free & 0xffff0000) != ((int) *free_list & 0xffff0000))
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Attempt to free bad pointer,"
|
|
||||||
"m_free = %p, *free_list = %p\n",
|
|
||||||
m_free, free_list);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Find location in free list.
|
|
||||||
*/
|
|
||||||
m_prev = NULL;
|
|
||||||
for (m = *free_list; m != NULL && m < m_free; m = m->next)
|
|
||||||
m_prev = m;
|
|
||||||
|
|
||||||
if (m_prev != NULL && (int) m_prev + m_prev->length > (int) m_free)
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Attempt to free bad pointer,"
|
|
||||||
"m_free = %p, m_prev = %p (length %x)\n",
|
|
||||||
m_free, m_prev, m_prev->length);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
if ((m != NULL && (int) m_free + m_free->length > (int) m) ||
|
|
||||||
(int) m_free + m_free->length > ((int) m_free | 0xffff))
|
|
||||||
{
|
|
||||||
fprintf(stderr,"Attempt to free bad pointer,"
|
|
||||||
"m_free = %p (length %x), m = %p\n",
|
|
||||||
m_free, m_free->length, m);
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Put block back in free list.
|
|
||||||
* Does it merge with the previos block?
|
|
||||||
*/
|
|
||||||
if (m_prev != NULL)
|
|
||||||
{
|
|
||||||
if ((int) m_prev + m_prev->length == (int) m_free)
|
|
||||||
{
|
|
||||||
m_prev->length += sizeof(MDESC) + m_free->length;
|
|
||||||
m_free = m_prev;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_prev->next = m_free;
|
|
||||||
m_free->prev = m_prev;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
*free_list = m_free;
|
|
||||||
m_free->prev = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
|
||||||
* Does it merge with the next block?
|
|
||||||
*/
|
|
||||||
if (m != NULL)
|
|
||||||
{
|
|
||||||
if ((int) m_free + m_free->length == (int) m)
|
|
||||||
{
|
|
||||||
m_free->length += sizeof(MDESC) + m->length;
|
|
||||||
m_free->next = m->next;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m->prev = m_free;
|
|
||||||
m_free->next = m;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
m_free->next = NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(debugging_heap)HEAP_CheckHeap(free_list);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_CheckLocalHeaps
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
HEAP_CheckLocalHeaps(char *file,int line)
|
|
||||||
{
|
|
||||||
LHEAP *lh;
|
|
||||||
dprintf_heap(stddeb,"CheckLocalHeaps called from %s %d\n",file,line);
|
|
||||||
for(lh=LocalHeaps; lh!=NULL; lh = lh->next)
|
|
||||||
{ dprintf_heap(stddeb,"Checking heap %p, free_list %p\n",
|
|
||||||
lh,lh->free_list);
|
|
||||||
HEAP_CheckHeap(&lh->free_list);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_LocalFindHeap
|
|
||||||
*/
|
|
||||||
LHEAP *
|
|
||||||
HEAP_LocalFindHeap(unsigned short owner)
|
|
||||||
{
|
|
||||||
LHEAP *lh;
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HEAP_LocalFindHeap: owner %04x\n", owner);
|
|
||||||
|
|
||||||
for (lh = LocalHeaps; lh != NULL; lh = lh->next)
|
|
||||||
{
|
|
||||||
if (lh->selector == owner)
|
|
||||||
return lh;
|
|
||||||
}
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"Warning: Local heap not found\n");
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_LocalInit
|
|
||||||
*/
|
|
||||||
void
|
|
||||||
HEAP_LocalInit(unsigned short owner, void *start, int length)
|
|
||||||
{
|
|
||||||
LHEAP *lh;
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"HEAP_LocalInit: owner %04x, start %p, length %04x\n"
|
|
||||||
,owner, start, length);
|
|
||||||
|
|
||||||
if (length < 2 * sizeof(MDESC))
|
|
||||||
return;
|
|
||||||
|
|
||||||
lh = (LHEAP *) malloc(sizeof(*lh));
|
|
||||||
if (lh == NULL)
|
|
||||||
return;
|
|
||||||
|
|
||||||
lh->next = LocalHeaps;
|
|
||||||
lh->selector = owner;
|
|
||||||
lh->local_table = NULL;
|
|
||||||
lh->delta = 0x20;
|
|
||||||
HEAP_Init(&lh->free_list, start, length);
|
|
||||||
dprintf_heap(stddeb,"HEAP_LocalInit: free_list %p, length %04x, prev %p, next %p\n",&lh->free_list,lh->free_list->length, lh->free_list->prev,lh->free_list->next);
|
|
||||||
LocalHeaps = lh;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* HEAP_LocalSize
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
HEAP_LocalSize(MDESC **free_list, unsigned int handle)
|
|
||||||
{
|
|
||||||
MDESC *m;
|
|
||||||
|
|
||||||
m = (MDESC *) (((int) *free_list & 0xffff0000) |
|
|
||||||
(handle & 0xffff)) - 1;
|
|
||||||
if (m->next != m || m->prev != m)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return m->length;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalAlloc
|
|
||||||
*/
|
|
||||||
void *
|
|
||||||
WIN16_LocalAlloc(int flags, int bytes)
|
|
||||||
{
|
|
||||||
void *m;
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"WIN16_LocalAlloc: flags %x, bytes %d\n", flags,bytes);
|
|
||||||
dprintf_heap(stddeb," called from segment %04x, ds=%04x\n", pStack16Frame->cs,pStack16Frame->ds);
|
|
||||||
|
|
||||||
m = HEAP_Alloc(LOCALHEAP(), flags, bytes);
|
|
||||||
|
|
||||||
dprintf_heap(stddeb,"WIN16_LocalAlloc: returning %x\n", (int) m);
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalCompact
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
WIN16_LocalCompact(int min_free)
|
|
||||||
{
|
|
||||||
MDESC *m;
|
|
||||||
int max_block;
|
|
||||||
|
|
||||||
max_block = 0;
|
|
||||||
for (m = *LOCALHEAP(); m != NULL; m = m->next)
|
|
||||||
if (m->length > max_block)
|
|
||||||
max_block = m->length;
|
|
||||||
|
|
||||||
return max_block;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalFlags
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
WIN16_LocalFlags(unsigned int handle)
|
|
||||||
{
|
|
||||||
MDESC *m;
|
|
||||||
|
|
||||||
m = (MDESC *) (((int) *LOCALHEAP() & 0xffff0000) |
|
|
||||||
(handle & 0xffff)) - 1;
|
|
||||||
if (m->next != m || m->prev != m)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return m->lock;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalFree
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
WIN16_LocalFree(unsigned int handle)
|
|
||||||
{
|
|
||||||
unsigned int addr;
|
|
||||||
|
|
||||||
addr = ((int) *LOCALHEAP() & 0xffff0000) | (handle & 0xffff);
|
|
||||||
if (HEAP_Free(LOCALHEAP(), (void *) addr) < 0)
|
|
||||||
return handle;
|
|
||||||
else
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalInit
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
WIN16_LocalInit(unsigned int segment, unsigned int start, unsigned int end)
|
|
||||||
{
|
|
||||||
unsigned short owner = HEAP_OWNER;
|
|
||||||
LHEAP *lh = HEAP_LocalFindHeap(owner);
|
|
||||||
|
|
||||||
if (segment == 0)
|
|
||||||
{
|
|
||||||
/* Get current DS */
|
|
||||||
segment = pStack16Frame->ds;
|
|
||||||
}
|
|
||||||
|
|
||||||
dprintf_heap(stddeb, "WIN16_LocalInit segment=%04x start=%04x end=%04x\n", segment, start, end);
|
|
||||||
|
|
||||||
/* start=0 doesn't mean the first byte of the segment if the segment
|
|
||||||
is an auto data segment. Instead it should start after the actual
|
|
||||||
data (and the stack if there is one). As we don't know the length
|
|
||||||
of the data and stack right now, we simply put the local heap at the
|
|
||||||
end of the segment */
|
|
||||||
if ((start==0)&&(Segments[segment>>__AHSHIFT].owner==segment))
|
|
||||||
{
|
|
||||||
return;
|
|
||||||
start = Segments[segment>>__AHSHIFT].length-end-2;
|
|
||||||
end = Segments[segment>>__AHSHIFT].length-1;
|
|
||||||
dprintf_heap(stddeb, "Changed to start=%04x end=%04x\n",start,end);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (lh == NULL)
|
|
||||||
{
|
|
||||||
HEAP_LocalInit(owner,
|
|
||||||
(void *) ((segment << 16) | start), end - start + 1);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
HEAP_Init(&lh->free_list,
|
|
||||||
(void *) ((segment << 16) | start), end - start + 1);
|
|
||||||
}
|
|
||||||
dprintf_heap(stddeb,"WIN16_LocalInit // return segment=%04X !\n", segment);
|
|
||||||
return segment;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalLock
|
|
||||||
*/
|
|
||||||
void *
|
|
||||||
WIN16_LocalLock(unsigned int handle)
|
|
||||||
{
|
|
||||||
MDESC *m;
|
|
||||||
|
|
||||||
m = (MDESC *) (((int) *LOCALHEAP() & 0xffff0000) |
|
|
||||||
(handle & 0xffff)) - 1;
|
|
||||||
if (m->next != m || m->prev != m)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
m->lock++;
|
|
||||||
return (void *) (m + 1);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalReAlloc
|
|
||||||
*/
|
|
||||||
void *
|
|
||||||
WIN16_LocalReAlloc(unsigned int handle, int bytes, int flags)
|
|
||||||
{
|
|
||||||
void *m;
|
|
||||||
dprintf_heap(stddeb,"WIN16_LocalReAlloc(%04X, %d, %04X); !\n",
|
|
||||||
handle, bytes, flags);
|
|
||||||
dprintf_heap(stddeb,"WIN16_LocalReAlloc // LOCALHEAP()=%p !\n",
|
|
||||||
LOCALHEAP());
|
|
||||||
dprintf_heap(stddeb,"WIN16_LocalReAlloc // *LOCALHEAP()=%p !\n",
|
|
||||||
*LOCALHEAP());
|
|
||||||
m = HEAP_ReAlloc(LOCALHEAP(), (void *)
|
|
||||||
(((int) *LOCALHEAP() & 0xffff0000) | (handle & 0xffff)),
|
|
||||||
bytes, flags);
|
|
||||||
|
|
||||||
return m;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalSize
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
WIN16_LocalSize(unsigned int handle)
|
|
||||||
{
|
|
||||||
MDESC *m;
|
|
||||||
|
|
||||||
m = (MDESC *) (((int) *LOCALHEAP() & 0xffff0000) |
|
|
||||||
(handle & 0xffff)) - 1;
|
|
||||||
if (m->next != m || m->prev != m)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return m->length;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalUnlock
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
WIN16_LocalUnlock(unsigned int handle)
|
|
||||||
{
|
|
||||||
MDESC *m;
|
|
||||||
|
|
||||||
m = (MDESC *) (((int) *LOCALHEAP() & 0xffff0000) |
|
|
||||||
(handle & 0xffff)) - 1;
|
|
||||||
if (m->next != m || m->prev != m)
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
if (m->lock > 0)
|
|
||||||
m->lock--;
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* WIN16_LocalHandleDelta
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
WIN16_LocalHandleDelta(unsigned int new_delta)
|
|
||||||
{
|
|
||||||
LHEAP *lh;
|
|
||||||
|
|
||||||
lh = HEAP_LocalFindHeap(HEAP_OWNER);
|
|
||||||
if (lh == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
if (new_delta)
|
|
||||||
lh->delta = new_delta;
|
|
||||||
|
|
||||||
return lh->delta;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* GetFreeSystemResources (user.284)
|
|
||||||
|
|
||||||
*/
|
|
||||||
#define USERRESOURCES 2
|
|
||||||
#define GDIRESOURCES 1
|
|
||||||
#define SYSTEMRESOURCES 0
|
|
||||||
#include <user.h>
|
|
||||||
#include <gdi.h>
|
|
||||||
|
|
||||||
WORD GetFreeSystemResources(WORD SystemResourceType)
|
|
||||||
{
|
|
||||||
unsigned int GdiFree=0,GdiResult=0;
|
|
||||||
unsigned int UserFree=0,UserResult=0;
|
|
||||||
unsigned int result=0;
|
|
||||||
MDESC *m;
|
|
||||||
dprintf_heap(stddeb,"GetFreeSystemResources(%u)\n",SystemResourceType);
|
|
||||||
switch(SystemResourceType) {
|
|
||||||
case(USERRESOURCES):
|
|
||||||
for (m = USER_Heap; m != NULL; m = m->next) /* add up free area in heap */
|
|
||||||
UserFree += m->length;
|
|
||||||
result=(UserFree*100)/65516; /* 65516 == 64K */
|
|
||||||
break;
|
|
||||||
case(GDIRESOURCES):
|
|
||||||
for (m = GDI_Heap; m != NULL; m = m->next)
|
|
||||||
GdiFree += m->length;
|
|
||||||
result=(GdiFree*100)/65516;
|
|
||||||
break;
|
|
||||||
case(SYSTEMRESOURCES):
|
|
||||||
for (m = USER_Heap; m != NULL; m = m->next)
|
|
||||||
UserFree += m->length;
|
|
||||||
UserResult=(UserFree*100)/65516;
|
|
||||||
for (m = GDI_Heap; m != NULL; m = m->next)
|
|
||||||
GdiFree += m->length;
|
|
||||||
GdiResult=(GdiFree*100)/65516;
|
|
||||||
result=(UserResult < GdiResult) ? UserResult:GdiResult;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
result=0;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
return(result);
|
|
||||||
}
|
|
196
memory/linear.c
196
memory/linear.c
|
@ -1,196 +0,0 @@
|
||||||
/*
|
|
||||||
static char RCSId[] = "$Id$";
|
|
||||||
static char Copyright[] = "Copyright Robert J. Amstadt, 1994";
|
|
||||||
*/
|
|
||||||
#include <stdio.h>
|
|
||||||
#include <stdlib.h>
|
|
||||||
#include <string.h>
|
|
||||||
#include "prototypes.h"
|
|
||||||
#include "heap.h"
|
|
||||||
#include "segmem.h"
|
|
||||||
|
|
||||||
#ifdef HAVE_IPC
|
|
||||||
static key_t MemoryKeys[SHMSEG]; /* Keep track of keys were using */
|
|
||||||
static int LinearInitialized = 0;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#ifdef HAVE_IPC
|
|
||||||
/**********************************************************************
|
|
||||||
* LinearFindSpace
|
|
||||||
*/
|
|
||||||
int
|
|
||||||
LinearFindSpace(int n_segments)
|
|
||||||
{
|
|
||||||
int i, n;
|
|
||||||
|
|
||||||
if (!LinearInitialized)
|
|
||||||
{
|
|
||||||
memset(MemoryKeys, -1, sizeof(MemoryKeys));
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 0, n = 0; i < SHMSEG, n != n_segments; i++)
|
|
||||||
{
|
|
||||||
if (MemoryKeys[i] < 0)
|
|
||||||
n++;
|
|
||||||
else
|
|
||||||
n = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (n != n_segments)
|
|
||||||
return -1;
|
|
||||||
else
|
|
||||||
return i - n;
|
|
||||||
}
|
|
||||||
#endif /* HAVE_IPC */
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* GlobalLinearLock
|
|
||||||
*
|
|
||||||
* OK, this is an evil beast. We will do one of two things:
|
|
||||||
*
|
|
||||||
* 1. If the data item <= 64k, then just call GlobalLock().
|
|
||||||
* 2. If the data item > 64k, then map memory.
|
|
||||||
*/
|
|
||||||
void *
|
|
||||||
GlobalLinearLock(unsigned int block)
|
|
||||||
{
|
|
||||||
GDESC *g, *g_first;
|
|
||||||
int loc_idx;
|
|
||||||
unsigned long addr;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* Get GDESC for this block.
|
|
||||||
*/
|
|
||||||
g_first = GlobalGetGDesc(block);
|
|
||||||
if (g_first == NULL)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* Is block less then 64k in length?
|
|
||||||
*/
|
|
||||||
if (g_first->sequence != 1 || g_first->length == 1)
|
|
||||||
{
|
|
||||||
return (void *) GlobalLock(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* If there is already a linear lock on this memory, then
|
|
||||||
* just return a pointer to it.
|
|
||||||
*/
|
|
||||||
if (g_first->linear_count)
|
|
||||||
{
|
|
||||||
g_first->linear_count++;
|
|
||||||
return g_first->linear_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* No luck. We need to do the linear mapping right now.
|
|
||||||
*/
|
|
||||||
#ifdef HAVE_IPC
|
|
||||||
loc_idx = LinearFindSpace(g_first->length);
|
|
||||||
if (loc_idx < 0)
|
|
||||||
return NULL;
|
|
||||||
|
|
||||||
addr = (unsigned long) SHM_RANGE_START + (0x10000 * loc_idx);
|
|
||||||
g = g_first;
|
|
||||||
for (i = loc_idx;
|
|
||||||
i < loc_idx + g_first->length;
|
|
||||||
i++, addr += 0x10000, g = g->next)
|
|
||||||
{
|
|
||||||
if ((MemoryKeys[i] = IPCCopySelector(g->handle >> __AHSHIFT,
|
|
||||||
addr, 0)) < 0)
|
|
||||||
return NULL;
|
|
||||||
g->linear_addr = (void *) addr;
|
|
||||||
g->linear_count = 1;
|
|
||||||
}
|
|
||||||
#endif /* HAVE_IPC */
|
|
||||||
|
|
||||||
return g_first->linear_addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* GlobalLinearUnlock
|
|
||||||
*
|
|
||||||
*/
|
|
||||||
unsigned int
|
|
||||||
GlobalLinearUnlock(unsigned int block)
|
|
||||||
{
|
|
||||||
GDESC *g, *g_first;
|
|
||||||
int loc_idx;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* Get GDESC for this block.
|
|
||||||
*/
|
|
||||||
g_first = GlobalGetGDesc(block);
|
|
||||||
if (g_first == NULL)
|
|
||||||
return block;
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* Is block less then 64k in length?
|
|
||||||
*/
|
|
||||||
if (g_first->sequence != 1 || g_first->length == 1)
|
|
||||||
{
|
|
||||||
return GlobalUnlock(block);
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************************************************************
|
|
||||||
* Make sure we have a lock on this block.
|
|
||||||
*/
|
|
||||||
#ifdef HAVE_IPC
|
|
||||||
if (g_first->linear_count > 1)
|
|
||||||
{
|
|
||||||
g_first->linear_count--;
|
|
||||||
}
|
|
||||||
else if (g_first->linear_count == 1)
|
|
||||||
{
|
|
||||||
g = g_first;
|
|
||||||
loc_idx = (((unsigned int) g_first - (unsigned int) SHM_RANGE_START)
|
|
||||||
/ 0x10000);
|
|
||||||
for (i = 0; i < g_first->length; i++, g = g->next)
|
|
||||||
{
|
|
||||||
shmdt(g->linear_addr);
|
|
||||||
g->linear_addr = NULL;
|
|
||||||
MemoryKeys[i] = -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
g_first->linear_count = 0;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
#endif /* HAVE_IPC */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
/**********************************************************************/
|
|
||||||
|
|
||||||
void LinearTest()
|
|
||||||
{
|
|
||||||
#if 0
|
|
||||||
unsigned int handle;
|
|
||||||
int *seg_ptr;
|
|
||||||
int *lin_ptr;
|
|
||||||
int seg, i;
|
|
||||||
int *p;
|
|
||||||
|
|
||||||
handle = GlobalAlloc(0, 0x40000);
|
|
||||||
seg_ptr = GlobalLock(handle);
|
|
||||||
lin_ptr = GlobalLinearLock(handle);
|
|
||||||
|
|
||||||
for (seg = 0; seg < 4; seg++)
|
|
||||||
{
|
|
||||||
p = (int *) ((char *) seg_ptr + (0x80000 * seg));
|
|
||||||
for (i = 0; i < (0x10000 / sizeof(int)); i++, p++)
|
|
||||||
*p = (seg * (0x10000 / sizeof(int))) + i;
|
|
||||||
}
|
|
||||||
|
|
||||||
p = lin_ptr;
|
|
||||||
for (i = 0; i < (0x40000 / sizeof(int)); i++, p++)
|
|
||||||
{
|
|
||||||
if (*p != i)
|
|
||||||
printf("lin_ptr[%x] = %x\n", i, *p);
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
}
|
|
725
memory/local.c
Normal file
725
memory/local.c
Normal file
|
@ -0,0 +1,725 @@
|
||||||
|
/*
|
||||||
|
* Local heap functions
|
||||||
|
*
|
||||||
|
* Copyright 1995 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Note:
|
||||||
|
* All local heap functions need the current DS as first parameter
|
||||||
|
* when called from the emulation library, so they take one more
|
||||||
|
* parameter than usual.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include "windows.h"
|
||||||
|
#include "ldt.h"
|
||||||
|
#include "instance.h"
|
||||||
|
#include "local.h"
|
||||||
|
#include "stackframe.h"
|
||||||
|
#include "toolhelp.h"
|
||||||
|
#include "stddebug.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
#ifndef WINELIB
|
||||||
|
#pragma pack(1)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
/* Arena header */
|
||||||
|
WORD prev; /* Previous arena | arena type */
|
||||||
|
WORD next; /* Next arena */
|
||||||
|
/* Start of the memory block or free-list info */
|
||||||
|
WORD size; /* Size of the free block */
|
||||||
|
WORD free_prev; /* Previous free block */
|
||||||
|
WORD free_next; /* Next free block */
|
||||||
|
} LOCALARENA;
|
||||||
|
|
||||||
|
#define ARENA_HEADER_SIZE 4
|
||||||
|
|
||||||
|
/* Arena types (stored in 'prev' field of the arena) */
|
||||||
|
#define LOCAL_ARENA_FREE 0
|
||||||
|
#define LOCAL_ARENA_FIXED 1
|
||||||
|
#define LOCAL_ARENA_MOVEABLE 3
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
WORD addr; /* Address of the MOVEABLE block */
|
||||||
|
BYTE flags; /* Flags for this block */
|
||||||
|
BYTE lock; /* Lock count */
|
||||||
|
} LOCALHANDLEENTRY;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
WORD check; /* Heap checking flag */
|
||||||
|
WORD freeze; /* Heap frozen flag */
|
||||||
|
WORD items; /* Count of items on the heap */
|
||||||
|
WORD first; /* First item of the heap */
|
||||||
|
WORD pad1; /* Always 0 */
|
||||||
|
WORD last; /* Last item of the heap */
|
||||||
|
WORD pad2; /* Always 0 */
|
||||||
|
BYTE ncompact; /* Compactions counter */
|
||||||
|
BYTE dislevel; /* Discard level */
|
||||||
|
DWORD distotal; /* Total bytes discarded */
|
||||||
|
WORD htable; /* Pointer to handle table */
|
||||||
|
WORD hfree; /* Pointer to free handle table */
|
||||||
|
WORD hdelta; /* Delta to expand the handle table */
|
||||||
|
WORD expand; /* Pointer to expand function (unused) */
|
||||||
|
WORD pstat; /* Pointer to status structure (unused) */
|
||||||
|
DWORD notify WINE_PACKED; /* Pointer to LocalNotify() function */
|
||||||
|
WORD lock; /* Lock count for the heap */
|
||||||
|
WORD extra; /* Extra bytes to allocate when expanding */
|
||||||
|
WORD minsize; /* Minimum size of the heap */
|
||||||
|
WORD magic; /* Magic number */
|
||||||
|
} LOCALHEAPINFO;
|
||||||
|
|
||||||
|
#ifndef WINELIB
|
||||||
|
#pragma pack(4)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#define LOCAL_HEAP_MAGIC 0x484c /* 'LH' */
|
||||||
|
|
||||||
|
|
||||||
|
/* All local heap allocations are aligned on 4-byte boundaries */
|
||||||
|
#define LALIGN(word) (((word) + 3) & ~3)
|
||||||
|
|
||||||
|
#define ARENA_PTR(ptr,arena) ((LOCALARENA *)((char*)(ptr)+(arena)))
|
||||||
|
#define ARENA_PREV(ptr,arena) (ARENA_PTR(ptr,arena)->prev & ~3)
|
||||||
|
#define ARENA_NEXT(ptr,arena) (ARENA_PTR(ptr,arena)->next)
|
||||||
|
#define ARENA_FLAGS(ptr,arena) (ARENA_PTR(ptr,arena)->prev & 3)
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_GetHeap
|
||||||
|
*
|
||||||
|
* Return a pointer to the local heap, making sure it exists.
|
||||||
|
*/
|
||||||
|
static LOCALHEAPINFO *LOCAL_GetHeap( WORD ds )
|
||||||
|
{
|
||||||
|
LOCALHEAPINFO *pInfo;
|
||||||
|
INSTANCEDATA *ptr = (INSTANCEDATA *)PTR_SEG_OFF_TO_LIN( ds, 0 );
|
||||||
|
if (!ptr->heap) return 0;
|
||||||
|
pInfo = (LOCALHEAPINFO*)((char*)ptr + ptr->heap);
|
||||||
|
if (pInfo->magic != LOCAL_HEAP_MAGIC) return NULL;
|
||||||
|
return pInfo;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_AddFreeBlock
|
||||||
|
*
|
||||||
|
* Make a block free, inserting it in the free-list.
|
||||||
|
* 'block' is the handle of the block arena; 'baseptr' points to
|
||||||
|
* the beginning of the data segment containing the heap.
|
||||||
|
*/
|
||||||
|
static void LOCAL_AddFreeBlock( char *baseptr, WORD block )
|
||||||
|
{
|
||||||
|
LOCALARENA *pArena, *pNext;
|
||||||
|
WORD next;
|
||||||
|
|
||||||
|
/* Mark the block as free */
|
||||||
|
|
||||||
|
pArena = ARENA_PTR( baseptr, block );
|
||||||
|
pArena->prev = (pArena->prev & ~3) | LOCAL_ARENA_FREE;
|
||||||
|
pArena->size = pArena->next - block;
|
||||||
|
|
||||||
|
/* Find the next free block (last block is always free) */
|
||||||
|
|
||||||
|
next = pArena->next;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
pNext = ARENA_PTR( baseptr, next );
|
||||||
|
if ((pNext->prev & 3) == LOCAL_ARENA_FREE) break;
|
||||||
|
next = pNext->next;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Insert the free block in the free-list */
|
||||||
|
|
||||||
|
pArena->free_prev = pNext->free_prev;
|
||||||
|
pArena->free_next = next;
|
||||||
|
ARENA_PTR(baseptr,pNext->free_prev)->free_next = block;
|
||||||
|
pNext->free_prev = block;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_RemoveFreeBlock
|
||||||
|
*
|
||||||
|
* Remove a block from the free-list.
|
||||||
|
* 'block' is the handle of the block arena; 'baseptr' points to
|
||||||
|
* the beginning of the data segment containing the heap.
|
||||||
|
*/
|
||||||
|
static void LOCAL_RemoveFreeBlock( char *baseptr, WORD block )
|
||||||
|
{
|
||||||
|
/* Mark the block as fixed */
|
||||||
|
|
||||||
|
LOCALARENA *pArena = ARENA_PTR( baseptr, block );
|
||||||
|
pArena->prev = (pArena->prev & ~3) | LOCAL_ARENA_FIXED;
|
||||||
|
|
||||||
|
/* Remove it from the list */
|
||||||
|
|
||||||
|
ARENA_PTR(baseptr,pArena->free_prev)->free_next = pArena->free_next;
|
||||||
|
ARENA_PTR(baseptr,pArena->free_next)->free_prev = pArena->free_prev;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_AddBlock
|
||||||
|
*
|
||||||
|
* Insert a new block in the heap.
|
||||||
|
* 'new' is the handle of the new block arena; 'baseptr' points to
|
||||||
|
* the beginning of the data segment containing the heap; 'prev' is
|
||||||
|
* the block before the new one.
|
||||||
|
*/
|
||||||
|
static void LOCAL_AddBlock( char *baseptr, WORD prev, WORD new )
|
||||||
|
{
|
||||||
|
LOCALARENA *pPrev = ARENA_PTR( baseptr, prev );
|
||||||
|
LOCALARENA *pNew = ARENA_PTR( baseptr, new );
|
||||||
|
|
||||||
|
pNew->prev = prev | LOCAL_ARENA_FIXED;
|
||||||
|
pNew->next = pPrev->next;
|
||||||
|
ARENA_PTR(baseptr,pPrev->next)->prev &= 3;
|
||||||
|
ARENA_PTR(baseptr,pPrev->next)->prev |= new;
|
||||||
|
pPrev->next = new;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_RemoveBlock
|
||||||
|
*
|
||||||
|
* Remove a block from the heap.
|
||||||
|
* 'block' is the handle of the block arena; 'baseptr' points to
|
||||||
|
* the beginning of the data segment containing the heap.
|
||||||
|
*/
|
||||||
|
static void LOCAL_RemoveBlock( char *baseptr, WORD block )
|
||||||
|
{
|
||||||
|
LOCALARENA *pArena, *pTmp;
|
||||||
|
|
||||||
|
/* Remove the block from the free-list */
|
||||||
|
|
||||||
|
pArena = ARENA_PTR( baseptr, block );
|
||||||
|
if ((pArena->prev & 3) == LOCAL_ARENA_FREE)
|
||||||
|
LOCAL_RemoveFreeBlock( baseptr, block );
|
||||||
|
|
||||||
|
/* If the previous block is free, expand its size */
|
||||||
|
|
||||||
|
pTmp = ARENA_PTR( baseptr, pArena->prev & ~3 );
|
||||||
|
if ((pTmp->prev & 3) == LOCAL_ARENA_FREE)
|
||||||
|
pTmp->size += pArena->next - block;
|
||||||
|
|
||||||
|
/* Remove the block from the linked list */
|
||||||
|
|
||||||
|
pTmp->next = pArena->next;
|
||||||
|
pTmp = ARENA_PTR( baseptr, pArena->next );
|
||||||
|
pTmp->prev = (pTmp->prev & 3) | (pArena->prev & ~3);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_PrintHeap
|
||||||
|
*/
|
||||||
|
static void LOCAL_PrintHeap( WORD ds )
|
||||||
|
{
|
||||||
|
char *ptr = PTR_SEG_OFF_TO_LIN( ds, 0 );
|
||||||
|
LOCALHEAPINFO *pInfo = LOCAL_GetHeap( ds );
|
||||||
|
WORD arena;
|
||||||
|
|
||||||
|
if (!pInfo)
|
||||||
|
{
|
||||||
|
printf( "Local Heap corrupted! ds=%04x\n", ds );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
printf( "Local Heap ds=%04x first=%04x last=%04x items=%d\n",
|
||||||
|
ds, pInfo->first, pInfo->last, pInfo->items );
|
||||||
|
|
||||||
|
arena = pInfo->first;
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
LOCALARENA *pArena = ARENA_PTR(ptr,arena);
|
||||||
|
printf( " %04x: prev=%04x next=%04x type=%d\n", arena,
|
||||||
|
pArena->prev & ~3, pArena->next, pArena->prev & 3 );
|
||||||
|
if ((pArena->prev & 3) == LOCAL_ARENA_FREE)
|
||||||
|
{
|
||||||
|
printf( " size=%d free_prev=%04x free_next=%04x\n",
|
||||||
|
pArena->size, pArena->free_prev, pArena->free_next );
|
||||||
|
if (pArena->next == arena) break; /* last one */
|
||||||
|
if (ARENA_PTR(ptr,pArena->free_next)->free_prev != arena)
|
||||||
|
{
|
||||||
|
printf( "*** arena->free_next->free_prev != arena\n" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (pArena->next == arena)
|
||||||
|
{
|
||||||
|
printf( "*** last block is not marked free\n" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if ((ARENA_PTR(ptr,pArena->next)->prev & ~3) != arena)
|
||||||
|
{
|
||||||
|
printf( "*** arena->next->prev != arena\n" );
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
arena = pArena->next;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalInit (KERNEL.4)
|
||||||
|
*/
|
||||||
|
HLOCAL LocalInit( WORD selector, WORD start, WORD end )
|
||||||
|
{
|
||||||
|
char *ptr;
|
||||||
|
WORD heapInfoArena, freeArena, lastArena;
|
||||||
|
LOCALHEAPINFO *pHeapInfo;
|
||||||
|
LOCALARENA *pArena, *pFirstArena, *pLastArena;
|
||||||
|
|
||||||
|
/* The initial layout of the heap is: */
|
||||||
|
/* - first arena (FIXED) */
|
||||||
|
/* - heap info structure (FIXED) */
|
||||||
|
/* - large free block (FREE) */
|
||||||
|
/* - last arena (FREE) */
|
||||||
|
|
||||||
|
/* FIXME: What should be done if there's already */
|
||||||
|
/* a local heap in this segment? */
|
||||||
|
dprintf_local(stddeb, "LocalInit: %04x %04x-%04x\n", selector, start, end);
|
||||||
|
if (!selector) selector = CURRENT_DS;
|
||||||
|
ptr = PTR_SEG_OFF_TO_LIN( selector, 0 );
|
||||||
|
start = LALIGN( max( start, sizeof(INSTANCEDATA) ) );
|
||||||
|
heapInfoArena = LALIGN(start + sizeof(LOCALARENA) );
|
||||||
|
freeArena = LALIGN( heapInfoArena + ARENA_HEADER_SIZE
|
||||||
|
+ sizeof(LOCALHEAPINFO) );
|
||||||
|
lastArena = (end - sizeof(LOCALARENA)) & ~3;
|
||||||
|
|
||||||
|
/* Make sure there's enough space. */
|
||||||
|
|
||||||
|
if (freeArena + sizeof(LOCALARENA) >= lastArena) return FALSE;
|
||||||
|
|
||||||
|
/* Initialise the first arena */
|
||||||
|
|
||||||
|
pFirstArena = ARENA_PTR( ptr, start );
|
||||||
|
pFirstArena->prev = start | LOCAL_ARENA_FIXED;
|
||||||
|
pFirstArena->next = heapInfoArena;
|
||||||
|
pFirstArena->size = LALIGN(sizeof(LOCALARENA));
|
||||||
|
pFirstArena->free_prev = start; /* this one */
|
||||||
|
pFirstArena->free_next = freeArena;
|
||||||
|
|
||||||
|
/* Initialise the arena of the heap info structure */
|
||||||
|
|
||||||
|
pArena = ARENA_PTR( ptr, heapInfoArena );
|
||||||
|
pArena->prev = start | LOCAL_ARENA_FIXED;
|
||||||
|
pArena->next = freeArena;
|
||||||
|
|
||||||
|
/* Initialise the heap info structure */
|
||||||
|
|
||||||
|
pHeapInfo = (LOCALHEAPINFO *) (ptr + heapInfoArena + ARENA_HEADER_SIZE );
|
||||||
|
memset( pHeapInfo, 0, sizeof(LOCALHEAPINFO) );
|
||||||
|
pHeapInfo->items = 4;
|
||||||
|
pHeapInfo->first = start;
|
||||||
|
pHeapInfo->last = lastArena;
|
||||||
|
pHeapInfo->hdelta = 0x20;
|
||||||
|
pHeapInfo->extra = 0x200;
|
||||||
|
pHeapInfo->minsize = lastArena - freeArena;
|
||||||
|
pHeapInfo->magic = LOCAL_HEAP_MAGIC;
|
||||||
|
|
||||||
|
/* Initialise the large free block */
|
||||||
|
|
||||||
|
pArena = ARENA_PTR( ptr, freeArena );
|
||||||
|
pArena->prev = heapInfoArena | LOCAL_ARENA_FREE;
|
||||||
|
pArena->next = lastArena;
|
||||||
|
pArena->size = lastArena - freeArena;
|
||||||
|
pArena->free_prev = start;
|
||||||
|
pArena->free_next = lastArena;
|
||||||
|
|
||||||
|
/* Initialise the last block */
|
||||||
|
|
||||||
|
pLastArena = ARENA_PTR( ptr, lastArena );
|
||||||
|
pLastArena->prev = heapInfoArena | LOCAL_ARENA_FREE;
|
||||||
|
pLastArena->next = lastArena; /* this one */
|
||||||
|
pLastArena->size = LALIGN(sizeof(LOCALARENA));
|
||||||
|
pLastArena->free_prev = freeArena;
|
||||||
|
pLastArena->free_next = lastArena; /* this one */
|
||||||
|
|
||||||
|
/* Store the local heap address in the instance data */
|
||||||
|
|
||||||
|
((INSTANCEDATA *)ptr)->heap = heapInfoArena + ARENA_HEADER_SIZE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_Alloc
|
||||||
|
*
|
||||||
|
* Implementation of LocalAlloc().
|
||||||
|
*/
|
||||||
|
HLOCAL LOCAL_Alloc( WORD ds, WORD flags, WORD size )
|
||||||
|
{
|
||||||
|
char *ptr = PTR_SEG_OFF_TO_LIN( ds, 0 );
|
||||||
|
LOCALHEAPINFO *pInfo;
|
||||||
|
LOCALARENA *pArena;
|
||||||
|
WORD arena;
|
||||||
|
|
||||||
|
dprintf_local( stddeb, "LocalAlloc: %04x %d ds=%04x\n", flags, size, ds );
|
||||||
|
|
||||||
|
/* Find a suitable free block */
|
||||||
|
|
||||||
|
if (!(pInfo = LOCAL_GetHeap( ds ))) return 0;
|
||||||
|
size += ARENA_HEADER_SIZE;
|
||||||
|
size = LALIGN( max( size, sizeof(LOCALARENA) ) );
|
||||||
|
arena = pInfo->first;
|
||||||
|
pArena = ARENA_PTR( ptr, arena );
|
||||||
|
for (;;)
|
||||||
|
{
|
||||||
|
if (arena == pArena->free_next) return 0; /* not found */
|
||||||
|
arena = pArena->free_next;
|
||||||
|
pArena = ARENA_PTR( ptr, arena );
|
||||||
|
if (pArena->size >= size) break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Make a block out of the free arena */
|
||||||
|
|
||||||
|
if (pArena->size > size + LALIGN(sizeof(LOCALARENA)))
|
||||||
|
{
|
||||||
|
LOCAL_AddBlock( ptr, arena, arena+size );
|
||||||
|
LOCAL_AddFreeBlock( ptr, arena+size );
|
||||||
|
pInfo->items++;
|
||||||
|
}
|
||||||
|
LOCAL_RemoveFreeBlock( ptr, arena );
|
||||||
|
|
||||||
|
dprintf_local( stddeb, "LocalAlloc: returning %04x\n",
|
||||||
|
arena + ARENA_HEADER_SIZE );
|
||||||
|
return arena + ARENA_HEADER_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_ReAlloc
|
||||||
|
*
|
||||||
|
* Implementation of LocalReAlloc().
|
||||||
|
*/
|
||||||
|
HLOCAL LOCAL_ReAlloc( WORD ds, HLOCAL handle, WORD size, WORD flags )
|
||||||
|
{
|
||||||
|
char *ptr = PTR_SEG_OFF_TO_LIN( ds, 0 );
|
||||||
|
LOCALHEAPINFO *pInfo;
|
||||||
|
LOCALARENA *pArena, *pNext;
|
||||||
|
WORD arena, newhandle;
|
||||||
|
|
||||||
|
dprintf_local( stddeb, "LocalReAlloc: %04x %d %04x ds=%04x\n",
|
||||||
|
handle, size, flags, ds );
|
||||||
|
if (!(pInfo = LOCAL_GetHeap( ds ))) return 0;
|
||||||
|
arena = handle - ARENA_HEADER_SIZE;
|
||||||
|
pArena = ARENA_PTR( ptr, arena );
|
||||||
|
if (!size) size = 1;
|
||||||
|
size = LALIGN( size );
|
||||||
|
|
||||||
|
/* Check for size reduction */
|
||||||
|
|
||||||
|
if (size < pArena->next - handle)
|
||||||
|
{
|
||||||
|
if (handle + size < pArena->next - LALIGN(sizeof(LOCALARENA)))
|
||||||
|
{
|
||||||
|
/* It is worth making a new free block */
|
||||||
|
LOCAL_AddBlock( ptr, arena, handle + size );
|
||||||
|
LOCAL_AddFreeBlock( ptr, handle + size );
|
||||||
|
pInfo->items++;
|
||||||
|
}
|
||||||
|
dprintf_local( stddeb, "LocalReAlloc: returning %04x\n", handle );
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if the next block is free */
|
||||||
|
|
||||||
|
pNext = ARENA_PTR( ptr, pArena->next );
|
||||||
|
if (((pNext->prev & 3) == LOCAL_ARENA_FREE) &&
|
||||||
|
(size <= pNext->next - handle))
|
||||||
|
{
|
||||||
|
LOCAL_RemoveBlock( ptr, pArena->next );
|
||||||
|
if (handle + size < pArena->next - LALIGN(sizeof(LOCALARENA)))
|
||||||
|
{
|
||||||
|
/* It is worth making a new free block */
|
||||||
|
LOCAL_AddBlock( ptr, arena, handle + size );
|
||||||
|
LOCAL_AddFreeBlock( ptr, handle + size );
|
||||||
|
pInfo->items++;
|
||||||
|
}
|
||||||
|
dprintf_local( stddeb, "LocalReAlloc: returning %04x\n", handle );
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Now we have to allocate a new block */
|
||||||
|
|
||||||
|
newhandle = LOCAL_Alloc( ds, flags, size );
|
||||||
|
if (!newhandle) return 0;
|
||||||
|
memcpy( ptr + newhandle, ptr + handle, pArena->next - handle );
|
||||||
|
LOCAL_Free( ds, handle );
|
||||||
|
dprintf_local( stddeb, "LocalReAlloc: returning %04x\n", newhandle );
|
||||||
|
return newhandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_Free
|
||||||
|
*
|
||||||
|
* Implementation of LocalFree().
|
||||||
|
*/
|
||||||
|
HLOCAL LOCAL_Free( WORD ds, HLOCAL handle )
|
||||||
|
{
|
||||||
|
char *ptr = PTR_SEG_OFF_TO_LIN( ds, 0 );
|
||||||
|
LOCALHEAPINFO *pInfo;
|
||||||
|
LOCALARENA *pArena, *pPrev, *pNext;
|
||||||
|
WORD arena;
|
||||||
|
|
||||||
|
dprintf_local( stddeb, "LocalFree: %04x ds=%04x\n", handle, ds );
|
||||||
|
if (!(pInfo = LOCAL_GetHeap( ds ))) return handle;
|
||||||
|
arena = handle - ARENA_HEADER_SIZE;
|
||||||
|
pArena = ARENA_PTR( ptr, arena );
|
||||||
|
if ((pArena->prev & 3) == LOCAL_ARENA_FREE) return handle;
|
||||||
|
|
||||||
|
/* Check if we can merge with the previous block */
|
||||||
|
|
||||||
|
pPrev = ARENA_PTR( ptr, pArena->prev & ~3 );
|
||||||
|
pNext = ARENA_PTR( ptr, pArena->next );
|
||||||
|
if ((pPrev->prev & 3) == LOCAL_ARENA_FREE)
|
||||||
|
{
|
||||||
|
arena = pArena->prev & ~3;
|
||||||
|
pArena = pPrev;
|
||||||
|
LOCAL_RemoveBlock( ptr, pPrev->next );
|
||||||
|
pInfo->items--;
|
||||||
|
}
|
||||||
|
else /* Make a new free block */
|
||||||
|
{
|
||||||
|
LOCAL_AddFreeBlock( ptr, arena );
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Check if we can merge with the next block */
|
||||||
|
|
||||||
|
if ((pArena->next == pArena->free_next) &&
|
||||||
|
(pArena->next != pInfo->last))
|
||||||
|
{
|
||||||
|
LOCAL_RemoveBlock( ptr, pArena->next );
|
||||||
|
pInfo->items--;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_Size
|
||||||
|
*
|
||||||
|
* Implementation of LocalSize().
|
||||||
|
*/
|
||||||
|
WORD LOCAL_Size( WORD ds, HLOCAL handle )
|
||||||
|
{
|
||||||
|
LOCALARENA *pArena = PTR_SEG_OFF_TO_LIN( ds, handle - ARENA_HEADER_SIZE );
|
||||||
|
return pArena->next - handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LOCAL_HeapSize
|
||||||
|
*
|
||||||
|
* Implementation of LocalHeapSize().
|
||||||
|
*/
|
||||||
|
WORD LOCAL_HeapSize( WORD ds )
|
||||||
|
{
|
||||||
|
LOCALHEAPINFO *pInfo = LOCAL_GetHeap( ds );
|
||||||
|
if (!pInfo) return 0;
|
||||||
|
return pInfo->last - pInfo->first;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalAlloc (KERNEL.5)
|
||||||
|
*/
|
||||||
|
HLOCAL LocalAlloc( WORD flags, WORD size )
|
||||||
|
{
|
||||||
|
return LOCAL_Alloc( CURRENT_DS, flags, size );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalReAlloc (KERNEL.6)
|
||||||
|
*/
|
||||||
|
HLOCAL LocalReAlloc( HLOCAL handle, WORD flags, WORD size )
|
||||||
|
{
|
||||||
|
return LOCAL_ReAlloc( CURRENT_DS, handle, flags, size );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalFree (KERNEL.7)
|
||||||
|
*/
|
||||||
|
HLOCAL LocalFree( HLOCAL handle )
|
||||||
|
{
|
||||||
|
return LOCAL_Free( CURRENT_DS, handle );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalLock (KERNEL.8)
|
||||||
|
*/
|
||||||
|
WORD LocalLock( HLOCAL handle )
|
||||||
|
{
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalUnlock (KERNEL.9)
|
||||||
|
*/
|
||||||
|
BOOL LocalUnlock( HLOCAL handle )
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalSize (KERNEL.10)
|
||||||
|
*/
|
||||||
|
WORD LocalSize( HLOCAL handle )
|
||||||
|
{
|
||||||
|
return LOCAL_Size( CURRENT_DS, handle );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalHandle (KERNEL.11)
|
||||||
|
*/
|
||||||
|
HLOCAL LocalHandle( WORD addr )
|
||||||
|
{
|
||||||
|
dprintf_local( stddeb, "LocalHandle: %04x\n", addr );
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalFlags (KERNEL.12)
|
||||||
|
*/
|
||||||
|
WORD LocalFlags( HLOCAL handle )
|
||||||
|
{
|
||||||
|
dprintf_local( stddeb, "LocalFlags: %04x\n", handle );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalCompact (KERNEL.13)
|
||||||
|
*/
|
||||||
|
WORD LocalCompact( WORD minfree )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalNotify (KERNEL.14)
|
||||||
|
*/
|
||||||
|
FARPROC LocalNotify( FARPROC func )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalShrink (KERNEL.121)
|
||||||
|
*/
|
||||||
|
WORD LocalShrink( HLOCAL handle, WORD newsize )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetHeapSpaces (KERNEL.138)
|
||||||
|
*/
|
||||||
|
DWORD GetHeapSpaces( HMODULE module )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalCountFree (KERNEL.161)
|
||||||
|
*/
|
||||||
|
void LocalCountFree()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalHeapSize (KERNEL.162)
|
||||||
|
*/
|
||||||
|
WORD LocalHeapSize()
|
||||||
|
{
|
||||||
|
return LOCAL_HeapSize( CURRENT_DS );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalHandleDelta (KERNEL.310)
|
||||||
|
*/
|
||||||
|
WORD LocalHandleDelta( WORD delta )
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalInfo (TOOLHELP.56)
|
||||||
|
*/
|
||||||
|
BOOL LocalInfo( LOCALINFO *pLocalInfo, HGLOBAL handle )
|
||||||
|
{
|
||||||
|
LOCALHEAPINFO *pInfo = LOCAL_GetHeap(SELECTOROF(WIN16_GlobalLock(handle)));
|
||||||
|
if (!pInfo) return FALSE;
|
||||||
|
pLocalInfo->wcItems = pInfo->items;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalFirst (TOOLHELP.57)
|
||||||
|
*/
|
||||||
|
BOOL LocalFirst( LOCALENTRY *pLocalEntry, HGLOBAL handle )
|
||||||
|
{
|
||||||
|
WORD ds = SELECTOROF( WIN16_GlobalLock( handle ) );
|
||||||
|
char *ptr = PTR_SEG_OFF_TO_LIN( ds, 0 );
|
||||||
|
LOCALHEAPINFO *pInfo = LOCAL_GetHeap( ds );
|
||||||
|
if (!pInfo) return FALSE;
|
||||||
|
|
||||||
|
pLocalEntry->hHandle = pInfo->first + ARENA_HEADER_SIZE;
|
||||||
|
pLocalEntry->wAddress = pLocalEntry->hHandle;
|
||||||
|
pLocalEntry->wFlags = LF_FIXED;
|
||||||
|
pLocalEntry->wcLock = 0;
|
||||||
|
pLocalEntry->wType = LT_NORMAL;
|
||||||
|
pLocalEntry->hHeap = handle;
|
||||||
|
pLocalEntry->wHeapType = NORMAL_HEAP;
|
||||||
|
pLocalEntry->wNext = ARENA_PTR(ptr,pInfo->first)->next;
|
||||||
|
pLocalEntry->wSize = pLocalEntry->wNext - pLocalEntry->hHandle;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LocalNext (TOOLHELP.58)
|
||||||
|
*/
|
||||||
|
BOOL LocalNext( LOCALENTRY *pLocalEntry )
|
||||||
|
{
|
||||||
|
WORD ds = SELECTOROF( pLocalEntry->hHeap );
|
||||||
|
char *ptr = PTR_SEG_OFF_TO_LIN( ds, 0 );
|
||||||
|
LOCALARENA *pArena;
|
||||||
|
|
||||||
|
if (!LOCAL_GetHeap( ds )) return FALSE;
|
||||||
|
if (!pLocalEntry->wNext) return FALSE;
|
||||||
|
pArena = ARENA_PTR( ptr, pLocalEntry->wNext );
|
||||||
|
|
||||||
|
pLocalEntry->hHandle = pLocalEntry->wNext + ARENA_HEADER_SIZE;
|
||||||
|
pLocalEntry->wAddress = pLocalEntry->hHandle;
|
||||||
|
pLocalEntry->wFlags = (pArena->prev & 3) + 1;
|
||||||
|
pLocalEntry->wcLock = 0;
|
||||||
|
pLocalEntry->wType = LT_NORMAL;
|
||||||
|
if (pArena->next != pLocalEntry->wNext) /* last one? */
|
||||||
|
pLocalEntry->wNext = pArena->next;
|
||||||
|
else
|
||||||
|
pLocalEntry->wNext = 0;
|
||||||
|
pLocalEntry->wSize = pLocalEntry->wNext - pLocalEntry->hHandle;
|
||||||
|
return TRUE;
|
||||||
|
}
|
438
memory/selector.c
Normal file
438
memory/selector.c
Normal file
|
@ -0,0 +1,438 @@
|
||||||
|
/*
|
||||||
|
* Selector manipulation functions
|
||||||
|
*
|
||||||
|
* Copyright 1995 Alexandre Julliard
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include "windows.h"
|
||||||
|
#include "ldt.h"
|
||||||
|
#include "stddebug.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
ldt_copy_entry ldt_copy[LDT_SIZE] = { {0,0}, };
|
||||||
|
|
||||||
|
#define FIRST_LDT_ENTRY_TO_ALLOC 10
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SELECTOR_Init
|
||||||
|
*/
|
||||||
|
void SELECTOR_Init()
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* AllocSelectorArray (KERNEL.206)
|
||||||
|
*/
|
||||||
|
WORD AllocSelectorArray( WORD count )
|
||||||
|
{
|
||||||
|
WORD i, size = 0;
|
||||||
|
|
||||||
|
if (!count) return 0;
|
||||||
|
for (i = FIRST_LDT_ENTRY_TO_ALLOC; i < LDT_SIZE; i++)
|
||||||
|
{
|
||||||
|
if (!IS_LDT_ENTRY_FREE(i)) size = 0;
|
||||||
|
else if (++size >= count) break;
|
||||||
|
}
|
||||||
|
if (i == LDT_SIZE) return 0;
|
||||||
|
return ENTRY_TO_SELECTOR( i - size + 1 );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* AllocSelector (KERNEL.175)
|
||||||
|
*/
|
||||||
|
WORD AllocSelector( WORD sel )
|
||||||
|
{
|
||||||
|
WORD newsel, count, i;
|
||||||
|
|
||||||
|
count = sel ? ((GET_SEL_LIMIT(sel) >> 16) + 1) : 1;
|
||||||
|
newsel = AllocSelectorArray( count );
|
||||||
|
dprintf_selector( stddeb, "AllocSelector(%04x): returning %04x\n",
|
||||||
|
sel, newsel );
|
||||||
|
if (!newsel) return 0;
|
||||||
|
if (!sel) return newsel; /* nothing to copy */
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel) + i, &entry );
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(newsel) + i, &entry );
|
||||||
|
}
|
||||||
|
return newsel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* FreeSelector (KERNEL.176)
|
||||||
|
*/
|
||||||
|
WORD FreeSelector( WORD sel )
|
||||||
|
{
|
||||||
|
WORD i, count;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
dprintf_selector( stddeb, "FreeSelector(%04x)\n", sel );
|
||||||
|
if (IS_SELECTOR_FREE(sel)) return sel; /* error */
|
||||||
|
count = (GET_SEL_LIMIT(sel) >> 16) + 1;
|
||||||
|
entry.base = entry.limit = 0; /* clear the LDT entries */
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(sel) + i, &entry );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SELECTOR_SetEntries
|
||||||
|
*
|
||||||
|
* Set the LDT entries for an array of selectors.
|
||||||
|
*/
|
||||||
|
static void SELECTOR_SetEntries( WORD sel, void *base, DWORD size,
|
||||||
|
enum seg_type type, BOOL is32bit,
|
||||||
|
BOOL readonly )
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
WORD i, count;
|
||||||
|
|
||||||
|
/* The limit for the first selector is the whole */
|
||||||
|
/* block. The next selectors get a 64k limit. */
|
||||||
|
entry.base = (unsigned long)base;
|
||||||
|
entry.type = type;
|
||||||
|
entry.seg_32bit = is32bit;
|
||||||
|
entry.read_only = readonly;
|
||||||
|
entry.limit_in_pages = (size > 0x100000);
|
||||||
|
if (entry.limit_in_pages) entry.limit = ((size + 0xfff) >> 12) - 1;
|
||||||
|
else entry.limit = size - 1;
|
||||||
|
count = (size + 0xffff) / 0x10000;
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(sel) + i, &entry );
|
||||||
|
entry.base += 0x10000;
|
||||||
|
size -= 0x10000;
|
||||||
|
entry.limit = (size > 0x10000) ? 0xffff : size-1;
|
||||||
|
entry.limit_in_pages = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SELECTOR_ReallocArray
|
||||||
|
*
|
||||||
|
* Change the size of an allocated selector array.
|
||||||
|
*/
|
||||||
|
static WORD SELECTOR_ReallocArray( WORD sel, WORD newcount )
|
||||||
|
{
|
||||||
|
WORD i, oldcount;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
oldcount = (GET_SEL_LIMIT(sel) >> 16) + 1;
|
||||||
|
if (oldcount < newcount) /* We need to add selectors */
|
||||||
|
{
|
||||||
|
/* Check if the next selectors are free */
|
||||||
|
for (i = oldcount; i < newcount; i++)
|
||||||
|
if (!IS_SELECTOR_FREE(sel)) break;
|
||||||
|
if (i < newcount)
|
||||||
|
{
|
||||||
|
FreeSelector( sel );
|
||||||
|
sel = AllocSelectorArray( newcount );
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if (oldcount > newcount) /* We need to remove selectors */
|
||||||
|
{
|
||||||
|
entry.base = entry.limit = 0; /* clear the LDT entries */
|
||||||
|
for (i = oldcount; i < newcount; i++)
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(sel) + i, &entry );
|
||||||
|
}
|
||||||
|
return sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SELECTOR_AllocBlock
|
||||||
|
*
|
||||||
|
* Allocate selectors for a block of linear memory.
|
||||||
|
*/
|
||||||
|
WORD SELECTOR_AllocBlock( void *base, DWORD size, enum seg_type type,
|
||||||
|
BOOL is32bit, BOOL readonly )
|
||||||
|
{
|
||||||
|
WORD sel, count;
|
||||||
|
|
||||||
|
if (!size) return 0;
|
||||||
|
count = (size + 0xffff) / 0x10000;
|
||||||
|
sel = AllocSelectorArray( count );
|
||||||
|
if (sel) SELECTOR_SetEntries( sel, base, size, type, is32bit, readonly );
|
||||||
|
return sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SELECTOR_ReallocBlock
|
||||||
|
*
|
||||||
|
* Change the size of a block of selectors.
|
||||||
|
*/
|
||||||
|
WORD SELECTOR_ReallocBlock( WORD sel, void *base, DWORD size,
|
||||||
|
enum seg_type type, BOOL is32bit, BOOL readonly )
|
||||||
|
{
|
||||||
|
WORD count;
|
||||||
|
|
||||||
|
if (!size)
|
||||||
|
{
|
||||||
|
FreeSelector( sel );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
count = (size + 0xffff) / 0x10000;
|
||||||
|
sel = SELECTOR_ReallocArray( sel, count );
|
||||||
|
if (sel) SELECTOR_SetEntries( sel, base, size, type, is32bit, readonly );
|
||||||
|
return sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* PrestoChangoSelector (KERNEL.177)
|
||||||
|
*/
|
||||||
|
WORD PrestoChangoSelector( WORD selSrc, WORD selDst )
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY( selSrc ), &entry );
|
||||||
|
entry.type ^= SEGMENT_CODE; /* toggle the executable bit */
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY( selDst ), &entry );
|
||||||
|
return selDst;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* AllocCStoDSAlias (KERNEL.170)
|
||||||
|
*/
|
||||||
|
WORD AllocCStoDSAlias( WORD sel )
|
||||||
|
{
|
||||||
|
WORD newsel;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
newsel = AllocSelectorArray( 1 );
|
||||||
|
dprintf_selector( stddeb, "AllocCStoDSAlias(%04x): returning %04x\n",
|
||||||
|
sel, newsel );
|
||||||
|
if (!newsel) return 0;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
entry.type = SEGMENT_DATA;
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(newsel), &entry );
|
||||||
|
return newsel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* AllocDStoCSAlias (KERNEL.171)
|
||||||
|
*/
|
||||||
|
WORD AllocDStoCSAlias( WORD sel )
|
||||||
|
{
|
||||||
|
WORD newsel;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
newsel = AllocSelectorArray( 1 );
|
||||||
|
dprintf_selector( stddeb, "AllocDStoCSAlias(%04x): returning %04x\n",
|
||||||
|
sel, newsel );
|
||||||
|
if (!newsel) return 0;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
entry.type = SEGMENT_CODE;
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(newsel), &entry );
|
||||||
|
return newsel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LongPtrAdd (KERNEL.180)
|
||||||
|
*/
|
||||||
|
void LongPtrAdd( DWORD ptr, DWORD add )
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(SELECTOROF(ptr)), &entry );
|
||||||
|
entry.base += add;
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(SELECTOROF(ptr)), &entry );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetSelectorBase (KERNEL.186)
|
||||||
|
*/
|
||||||
|
DWORD GetSelectorBase( WORD sel )
|
||||||
|
{
|
||||||
|
return GET_SEL_BASE(sel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetSelectorBase (KERNEL.187)
|
||||||
|
*/
|
||||||
|
WORD SetSelectorBase( WORD sel, DWORD base )
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
entry.base = base;
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
return sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetSelectorLimit (KERNEL.188)
|
||||||
|
*/
|
||||||
|
DWORD GetSelectorLimit( WORD sel )
|
||||||
|
{
|
||||||
|
return GET_SEL_LIMIT(sel);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetSelectorLimit (KERNEL.189)
|
||||||
|
*/
|
||||||
|
WORD SetSelectorLimit( WORD sel, DWORD limit )
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
entry.limit = limit;
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
return sel;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SelectorAccessRights (KERNEL.196)
|
||||||
|
*/
|
||||||
|
WORD SelectorAccessRights( WORD sel, WORD op, WORD val )
|
||||||
|
{
|
||||||
|
ldt_entry entry;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
if (op == 0) /* get */
|
||||||
|
{
|
||||||
|
return 1 /* accessed */ |
|
||||||
|
(entry.read_only << 1) |
|
||||||
|
(entry.type << 2) |
|
||||||
|
(entry.seg_32bit << 14) |
|
||||||
|
(entry.limit_in_pages << 15);
|
||||||
|
}
|
||||||
|
else /* set */
|
||||||
|
{
|
||||||
|
entry.read_only = val & 2;
|
||||||
|
entry.type = (val >> 2) & 3;
|
||||||
|
entry.seg_32bit = val & 0x4000;
|
||||||
|
entry.limit_in_pages = val & 0x8000;
|
||||||
|
LDT_SetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* IsBadCodePtr (KERNEL.336)
|
||||||
|
*/
|
||||||
|
BOOL IsBadCodePtr( SEGPTR lpfn )
|
||||||
|
{
|
||||||
|
WORD sel;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
sel = SELECTOROF(lpfn);
|
||||||
|
if (!sel) return FALSE;
|
||||||
|
if (IS_SELECTOR_FREE(sel)) return FALSE;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
if (entry.type != SEGMENT_CODE) return FALSE;
|
||||||
|
if (OFFSETOF(lpfn) > entry.limit) return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* IsBadStringPtr (KERNEL.337)
|
||||||
|
*/
|
||||||
|
BOOL IsBadStringPtr( SEGPTR ptr, WORD size )
|
||||||
|
{
|
||||||
|
WORD sel;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
sel = SELECTOROF(ptr);
|
||||||
|
if (!sel) return FALSE;
|
||||||
|
if (IS_SELECTOR_FREE(sel)) return FALSE;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
if ((entry.type == SEGMENT_CODE) && entry.read_only) return FALSE;
|
||||||
|
if (strlen(PTR_SEG_TO_LIN(ptr)) < size) size = strlen(PTR_SEG_TO_LIN(ptr));
|
||||||
|
if (OFFSETOF(ptr) + size > entry.limit) return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* IsBadHugeReadPtr (KERNEL.346)
|
||||||
|
*/
|
||||||
|
BOOL IsBadHugeReadPtr( SEGPTR ptr, DWORD size )
|
||||||
|
{
|
||||||
|
WORD sel;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
sel = SELECTOROF(ptr);
|
||||||
|
if (!sel) return FALSE;
|
||||||
|
if (IS_SELECTOR_FREE(sel)) return FALSE;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
if ((entry.type == SEGMENT_CODE) && entry.read_only) return FALSE;
|
||||||
|
if (OFFSETOF(ptr) + size > entry.limit) return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* IsBadHugeWritePtr (KERNEL.347)
|
||||||
|
*/
|
||||||
|
BOOL IsBadHugeWritePtr( SEGPTR ptr, DWORD size )
|
||||||
|
{
|
||||||
|
WORD sel;
|
||||||
|
ldt_entry entry;
|
||||||
|
|
||||||
|
sel = SELECTOROF(ptr);
|
||||||
|
if (!sel) return FALSE;
|
||||||
|
if (IS_SELECTOR_FREE(sel)) return FALSE;
|
||||||
|
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||||
|
if ((entry.type == SEGMENT_CODE) || entry.read_only) return FALSE;
|
||||||
|
if (OFFSETOF(ptr) + size > entry.limit) return FALSE;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* IsBadReadPtr (KERNEL.334)
|
||||||
|
*/
|
||||||
|
BOOL IsBadReadPtr( SEGPTR ptr, WORD size )
|
||||||
|
{
|
||||||
|
return IsBadHugeReadPtr( ptr, size );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* IsBadWritePtr (KERNEL.335)
|
||||||
|
*/
|
||||||
|
BOOL IsBadWritePtr( SEGPTR ptr, WORD size )
|
||||||
|
{
|
||||||
|
return IsBadHugeWritePtr( ptr, size );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* MemoryRead (TOOLHELP.78)
|
||||||
|
*/
|
||||||
|
DWORD MemoryRead( WORD sel, DWORD offset, void *buffer, DWORD count )
|
||||||
|
{
|
||||||
|
if (IS_SELECTOR_FREE(sel)) return 0;
|
||||||
|
if (offset > GET_SEL_LIMIT(sel)) return 0;
|
||||||
|
if (offset + count > GET_SEL_LIMIT(sel) + 1)
|
||||||
|
count = GET_SEL_LIMIT(sel) + 1 - offset;
|
||||||
|
memcpy( buffer, ((char *)GET_SEL_BASE(sel)) + offset, count );
|
||||||
|
return count;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* MemoryWrite (TOOLHELP.79)
|
||||||
|
*/
|
||||||
|
DWORD MemoryWrite( WORD sel, DWORD offset, void *buffer, DWORD count )
|
||||||
|
{
|
||||||
|
if (IS_SELECTOR_FREE(sel)) return 0;
|
||||||
|
if (offset > GET_SEL_LIMIT(sel)) return 0;
|
||||||
|
if (offset + count > GET_SEL_LIMIT(sel) + 1)
|
||||||
|
count = GET_SEL_LIMIT(sel) + 1 - offset;
|
||||||
|
memcpy( ((char *)GET_SEL_BASE(sel)) + offset, buffer, count );
|
||||||
|
return count;
|
||||||
|
}
|
170
misc/atom.c
170
misc/atom.c
|
@ -1,7 +1,7 @@
|
||||||
/*
|
/*
|
||||||
* Atom table functions
|
* Atom table functions
|
||||||
*
|
*
|
||||||
* Copyright 1993 Alexandre Julliard
|
* Copyright 1993, 1994, 1995 Alexandre Julliard
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -28,73 +28,76 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
|
|
||||||
#include "user.h"
|
|
||||||
#include "atom.h"
|
#include "atom.h"
|
||||||
#include "prototypes.h"
|
#include "instance.h"
|
||||||
#ifndef WINELIB
|
#include "ldt.h"
|
||||||
#include "heap.h"
|
#include "stackframe.h"
|
||||||
#endif
|
#include "user.h"
|
||||||
|
|
||||||
#define DEFAULT_ATOMTABLE_SIZE 37
|
#define DEFAULT_ATOMTABLE_SIZE 37
|
||||||
#define MIN_STR_ATOM 0xc000
|
#define MIN_STR_ATOM 0xc000
|
||||||
|
|
||||||
#ifdef WINELIB
|
|
||||||
#define ATOMTOHANDLE
|
|
||||||
#define HANDLETOATOM
|
|
||||||
#else
|
|
||||||
#define ATOMTOHANDLE(atom) ((HANDLE)(atom) << 2)
|
#define ATOMTOHANDLE(atom) ((HANDLE)(atom) << 2)
|
||||||
#define HANDLETOATOM(handle) ((ATOM)(0xc000 | ((handle) >> 2)))
|
#define HANDLETOATOM(handle) ((ATOM)(0xc000 | ((handle) >> 2)))
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WINELIB
|
#define HAS_ATOM_TABLE(sel) \
|
||||||
static ATOMTABLE * localTable = NULL;
|
((INSTANCEDATA*)PTR_SEG_OFF_TO_LIN(sel,0))->atomtable != 0)
|
||||||
#undef LOCALATOMTABLE
|
|
||||||
#define LOCALATOMTABLE() &localTable
|
|
||||||
#endif
|
|
||||||
|
|
||||||
static ATOMTABLE * globalTable = NULL;
|
#define GET_ATOM_TABLE(sel) ((ATOMTABLE*)PTR_SEG_OFF_TO_LIN(sel, \
|
||||||
|
((INSTANCEDATA*)PTR_SEG_OFF_TO_LIN(sel,0))->atomtable))
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ATOM_InitTable
|
* ATOM_InitTable
|
||||||
*/
|
*/
|
||||||
static BOOL ATOM_InitTable( ATOMTABLE ** table, WORD entries )
|
static WORD ATOM_InitTable( WORD selector, WORD entries )
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
HANDLE handle;
|
HANDLE handle;
|
||||||
|
ATOMTABLE *table;
|
||||||
|
|
||||||
if (table == &globalTable)
|
/* Allocate the table */
|
||||||
{
|
|
||||||
handle = USER_HEAP_ALLOC(LMEM_MOVEABLE, sizeof(ATOMTABLE) +
|
handle = LOCAL_Alloc( selector, LMEM_FIXED,
|
||||||
(entries-1) * sizeof(HANDLE) );
|
sizeof(ATOMTABLE) + (entries-1) * sizeof(HANDLE) );
|
||||||
if (!handle)
|
if (!handle) return 0;
|
||||||
return FALSE;
|
table = (ATOMTABLE *)PTR_SEG_OFF_TO_LIN( selector, handle );
|
||||||
*table = (ATOMTABLE *) USER_HEAP_ADDR( handle );
|
table->size = entries;
|
||||||
}
|
for (i = 0; i < entries; i++) table->entries[i] = 0;
|
||||||
else
|
|
||||||
{
|
/* Store a pointer to the table in the instance data */
|
||||||
handle = (HANDLE) LocalAlign ( LMEM_MOVEABLE, sizeof(ATOMTABLE) +
|
|
||||||
(entries-1) * sizeof(HANDLE) );
|
((INSTANCEDATA *)PTR_SEG_OFF_TO_LIN( selector, 0 ))->atomtable = handle;
|
||||||
if (!handle)
|
return handle;
|
||||||
return FALSE;
|
|
||||||
*table = (ATOMTABLE *) LocalLock( handle );
|
|
||||||
}
|
|
||||||
|
|
||||||
(*table)->size = entries;
|
|
||||||
for (i = 0; i < entries; i++)
|
|
||||||
(*table)->entries[i] = 0;
|
|
||||||
return TRUE;
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ATOM_Init
|
* ATOM_Init
|
||||||
*
|
*
|
||||||
* Global table initialisation.
|
* Global table initialisation.
|
||||||
*/
|
*/
|
||||||
BOOL ATOM_Init()
|
WORD ATOM_Init()
|
||||||
{
|
{
|
||||||
return ATOM_InitTable( &globalTable, DEFAULT_ATOMTABLE_SIZE );
|
return ATOM_InitTable( USER_HeapSel, DEFAULT_ATOMTABLE_SIZE );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* ATOM_GetTable
|
||||||
|
*
|
||||||
|
* Return a pointer to the atom table of a given segment, creating
|
||||||
|
* it if necessary.
|
||||||
|
*/
|
||||||
|
static ATOMTABLE * ATOM_GetTable( WORD selector, BOOL create )
|
||||||
|
{
|
||||||
|
INSTANCEDATA *ptr = (INSTANCEDATA *)PTR_SEG_OFF_TO_LIN( selector, 0 );
|
||||||
|
if (!ptr->atomtable)
|
||||||
|
{
|
||||||
|
if (!create) return NULL;
|
||||||
|
if (!ATOM_InitTable( selector, DEFAULT_ATOMTABLE_SIZE )) return NULL;
|
||||||
|
}
|
||||||
|
return (ATOMTABLE *)((char *)ptr + ptr->atomtable);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -102,15 +105,10 @@ BOOL ATOM_Init()
|
||||||
* ATOM_MakePtr
|
* ATOM_MakePtr
|
||||||
*
|
*
|
||||||
* Make an ATOMENTRY pointer from a handle (obtained from GetAtomHandle()).
|
* Make an ATOMENTRY pointer from a handle (obtained from GetAtomHandle()).
|
||||||
* Is is assumed that the atom is in the same segment as the table.
|
|
||||||
*/
|
*/
|
||||||
static ATOMENTRY * ATOM_MakePtr( ATOMTABLE * table, HANDLE handle )
|
static ATOMENTRY * ATOM_MakePtr( WORD selector, HANDLE handle )
|
||||||
{
|
{
|
||||||
#ifdef WINELIB
|
return (ATOMENTRY *)PTR_SEG_OFF_TO_LIN( selector, handle );
|
||||||
return (ATOMENTRY *) LocalLock (handle);
|
|
||||||
#else
|
|
||||||
return (ATOMENTRY *) (((int)table & 0xffff0000) | (int)handle);
|
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -129,11 +127,12 @@ static WORD ATOM_Hash( WORD entries, LPCSTR str, WORD len )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ATOM_AddAtom
|
* ATOM_AddAtom
|
||||||
*/
|
*/
|
||||||
static ATOM ATOM_AddAtom( ATOMTABLE * table, LPCSTR str )
|
static ATOM ATOM_AddAtom( WORD selector, LPCSTR str )
|
||||||
{
|
{
|
||||||
WORD hash;
|
WORD hash;
|
||||||
HANDLE entry;
|
HANDLE entry;
|
||||||
ATOMENTRY * entryPtr;
|
ATOMENTRY * entryPtr;
|
||||||
|
ATOMTABLE * table;
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
if ((len = strlen( str )) > 255) len = 255;
|
if ((len = strlen( str )) > 255) len = 255;
|
||||||
|
@ -142,11 +141,12 @@ static ATOM ATOM_AddAtom( ATOMTABLE * table, LPCSTR str )
|
||||||
/* if (!((int)str & 0xffff0000)) return (ATOM)((int)str & 0xffff); */
|
/* if (!((int)str & 0xffff0000)) return (ATOM)((int)str & 0xffff); */
|
||||||
if (str[0] == '#') return atoi( &str[1] );
|
if (str[0] == '#') return atoi( &str[1] );
|
||||||
|
|
||||||
|
if (!(table = ATOM_GetTable( selector, TRUE ))) return 0;
|
||||||
hash = ATOM_Hash( table->size, str, len );
|
hash = ATOM_Hash( table->size, str, len );
|
||||||
entry = table->entries[hash];
|
entry = table->entries[hash];
|
||||||
while (entry)
|
while (entry)
|
||||||
{
|
{
|
||||||
entryPtr = ATOM_MakePtr( table, entry );
|
entryPtr = ATOM_MakePtr( selector, entry );
|
||||||
if ((entryPtr->length == len) &&
|
if ((entryPtr->length == len) &&
|
||||||
(!strncasecmp( entryPtr->str, str, len )))
|
(!strncasecmp( entryPtr->str, str, len )))
|
||||||
{
|
{
|
||||||
|
@ -156,19 +156,9 @@ static ATOM ATOM_AddAtom( ATOMTABLE * table, LPCSTR str )
|
||||||
entry = entryPtr->next;
|
entry = entryPtr->next;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (table == globalTable)
|
entry = LOCAL_Alloc( selector, LMEM_FIXED, sizeof(ATOMENTRY)+len-1 );
|
||||||
{
|
|
||||||
entry = (int) USER_HEAP_ALLOC(LMEM_MOVEABLE,
|
|
||||||
sizeof(ATOMENTRY)+len-1 ) & 0xffff;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
entry = (int) LocalAlign(LMEM_MOVEABLE,
|
|
||||||
sizeof(ATOMENTRY)+len-1 ) & 0xffff;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!entry) return 0;
|
if (!entry) return 0;
|
||||||
entryPtr = ATOM_MakePtr( table, entry );
|
entryPtr = ATOM_MakePtr( selector, entry );
|
||||||
entryPtr->next = table->entries[hash];
|
entryPtr->next = table->entries[hash];
|
||||||
entryPtr->refCount = 1;
|
entryPtr->refCount = 1;
|
||||||
entryPtr->length = len;
|
entryPtr->length = len;
|
||||||
|
@ -181,23 +171,25 @@ static ATOM ATOM_AddAtom( ATOMTABLE * table, LPCSTR str )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ATOM_DeleteAtom
|
* ATOM_DeleteAtom
|
||||||
*/
|
*/
|
||||||
static ATOM ATOM_DeleteAtom( ATOMTABLE * table, ATOM atom )
|
static ATOM ATOM_DeleteAtom( WORD selector, ATOM atom )
|
||||||
{
|
{
|
||||||
ATOMENTRY * entryPtr;
|
ATOMENTRY * entryPtr;
|
||||||
|
ATOMTABLE * table;
|
||||||
HANDLE entry, *prevEntry;
|
HANDLE entry, *prevEntry;
|
||||||
WORD hash;
|
WORD hash;
|
||||||
|
|
||||||
if (atom < MIN_STR_ATOM) return 0; /* Integer atom */
|
if (atom < MIN_STR_ATOM) return 0; /* Integer atom */
|
||||||
|
|
||||||
|
if (!(table = ATOM_GetTable( selector, FALSE ))) return 0;
|
||||||
entry = ATOMTOHANDLE( atom );
|
entry = ATOMTOHANDLE( atom );
|
||||||
entryPtr = ATOM_MakePtr( table, entry );
|
entryPtr = ATOM_MakePtr( selector, entry );
|
||||||
|
|
||||||
/* Find previous atom */
|
/* Find previous atom */
|
||||||
hash = ATOM_Hash( table->size, entryPtr->str, entryPtr->length );
|
hash = ATOM_Hash( table->size, entryPtr->str, entryPtr->length );
|
||||||
prevEntry = &table->entries[hash];
|
prevEntry = &table->entries[hash];
|
||||||
while (*prevEntry && *prevEntry != entry)
|
while (*prevEntry && *prevEntry != entry)
|
||||||
{
|
{
|
||||||
ATOMENTRY * prevEntryPtr = ATOM_MakePtr( table, *prevEntry );
|
ATOMENTRY * prevEntryPtr = ATOM_MakePtr( selector, *prevEntry );
|
||||||
prevEntry = &prevEntryPtr->next;
|
prevEntry = &prevEntryPtr->next;
|
||||||
}
|
}
|
||||||
if (!*prevEntry) return atom;
|
if (!*prevEntry) return atom;
|
||||||
|
@ -205,11 +197,8 @@ static ATOM ATOM_DeleteAtom( ATOMTABLE * table, ATOM atom )
|
||||||
/* Delete atom */
|
/* Delete atom */
|
||||||
if (--entryPtr->refCount == 0)
|
if (--entryPtr->refCount == 0)
|
||||||
{
|
{
|
||||||
*prevEntry = entryPtr->next;
|
*prevEntry = entryPtr->next;
|
||||||
if (table == globalTable)
|
LOCAL_Free( selector, entry );
|
||||||
USER_HEAP_FREE(entry);
|
|
||||||
else
|
|
||||||
LocalFree( entry );
|
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -218,8 +207,9 @@ static ATOM ATOM_DeleteAtom( ATOMTABLE * table, ATOM atom )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ATOM_FindAtom
|
* ATOM_FindAtom
|
||||||
*/
|
*/
|
||||||
static ATOM ATOM_FindAtom( ATOMTABLE * table, LPCSTR str )
|
static ATOM ATOM_FindAtom( WORD selector, LPCSTR str )
|
||||||
{
|
{
|
||||||
|
ATOMTABLE * table;
|
||||||
WORD hash;
|
WORD hash;
|
||||||
HANDLE entry;
|
HANDLE entry;
|
||||||
int len;
|
int len;
|
||||||
|
@ -230,11 +220,12 @@ static ATOM ATOM_FindAtom( ATOMTABLE * table, LPCSTR str )
|
||||||
/* if (!((int)str & 0xffff0000)) return (ATOM)((int)str & 0xffff); */
|
/* if (!((int)str & 0xffff0000)) return (ATOM)((int)str & 0xffff); */
|
||||||
if (str[0] == '#') return atoi( &str[1] );
|
if (str[0] == '#') return atoi( &str[1] );
|
||||||
|
|
||||||
|
if (!(table = ATOM_GetTable( selector, FALSE ))) return 0;
|
||||||
hash = ATOM_Hash( table->size, str, len );
|
hash = ATOM_Hash( table->size, str, len );
|
||||||
entry = table->entries[hash];
|
entry = table->entries[hash];
|
||||||
while (entry)
|
while (entry)
|
||||||
{
|
{
|
||||||
ATOMENTRY * entryPtr = ATOM_MakePtr( table, entry );
|
ATOMENTRY * entryPtr = ATOM_MakePtr( selector, entry );
|
||||||
if ((entryPtr->length == len) &&
|
if ((entryPtr->length == len) &&
|
||||||
(!strncasecmp( entryPtr->str, str, len )))
|
(!strncasecmp( entryPtr->str, str, len )))
|
||||||
return HANDLETOATOM( entry );
|
return HANDLETOATOM( entry );
|
||||||
|
@ -247,9 +238,10 @@ static ATOM ATOM_FindAtom( ATOMTABLE * table, LPCSTR str )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* ATOM_GetAtomName
|
* ATOM_GetAtomName
|
||||||
*/
|
*/
|
||||||
static WORD ATOM_GetAtomName( ATOMTABLE * table, ATOM atom,
|
static WORD ATOM_GetAtomName( WORD selector, ATOM atom,
|
||||||
LPSTR buffer, short count )
|
LPSTR buffer, short count )
|
||||||
{
|
{
|
||||||
|
ATOMTABLE * table;
|
||||||
ATOMENTRY * entryPtr;
|
ATOMENTRY * entryPtr;
|
||||||
HANDLE entry;
|
HANDLE entry;
|
||||||
char * strPtr;
|
char * strPtr;
|
||||||
|
@ -265,8 +257,9 @@ static WORD ATOM_GetAtomName( ATOMTABLE * table, ATOM atom,
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
if (!(table = ATOM_GetTable( selector, FALSE ))) return 0;
|
||||||
entry = ATOMTOHANDLE( atom );
|
entry = ATOMTOHANDLE( atom );
|
||||||
entryPtr = ATOM_MakePtr( table, entry );
|
entryPtr = ATOM_MakePtr( selector, entry );
|
||||||
len = entryPtr->length;
|
len = entryPtr->length;
|
||||||
strPtr = entryPtr->str;
|
strPtr = entryPtr->str;
|
||||||
}
|
}
|
||||||
|
@ -280,9 +273,9 @@ static WORD ATOM_GetAtomName( ATOMTABLE * table, ATOM atom,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* InitAtomTable (KERNEL.68)
|
* InitAtomTable (KERNEL.68)
|
||||||
*/
|
*/
|
||||||
BOOL InitAtomTable( WORD entries )
|
WORD InitAtomTable( WORD entries )
|
||||||
{
|
{
|
||||||
return ATOM_InitTable( LOCALATOMTABLE(), entries );
|
return ATOM_InitTable( CURRENT_DS, entries );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -301,8 +294,7 @@ HANDLE GetAtomHandle( ATOM atom )
|
||||||
*/
|
*/
|
||||||
ATOM AddAtom( LPCSTR str )
|
ATOM AddAtom( LPCSTR str )
|
||||||
{
|
{
|
||||||
if (!*LOCALATOMTABLE()) InitAtomTable( DEFAULT_ATOMTABLE_SIZE );
|
return ATOM_AddAtom( CURRENT_DS, str );
|
||||||
return ATOM_AddAtom( *LOCALATOMTABLE(), str );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -311,8 +303,7 @@ ATOM AddAtom( LPCSTR str )
|
||||||
*/
|
*/
|
||||||
ATOM DeleteAtom( ATOM atom )
|
ATOM DeleteAtom( ATOM atom )
|
||||||
{
|
{
|
||||||
if (!*LOCALATOMTABLE()) InitAtomTable( DEFAULT_ATOMTABLE_SIZE );
|
return ATOM_DeleteAtom( CURRENT_DS, atom );
|
||||||
return ATOM_DeleteAtom( *LOCALATOMTABLE(), atom );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -321,9 +312,7 @@ ATOM DeleteAtom( ATOM atom )
|
||||||
*/
|
*/
|
||||||
ATOM FindAtom( LPCSTR str )
|
ATOM FindAtom( LPCSTR str )
|
||||||
{
|
{
|
||||||
if (!*LOCALATOMTABLE()) return 0;
|
return ATOM_FindAtom( CURRENT_DS, str );
|
||||||
/* if (!*LOCALATOMTABLE()) InitAtomTable( DEFAULT_ATOMTABLE_SIZE );*/
|
|
||||||
return ATOM_FindAtom( *LOCALATOMTABLE(), str );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -332,8 +321,7 @@ ATOM FindAtom( LPCSTR str )
|
||||||
*/
|
*/
|
||||||
WORD GetAtomName( ATOM atom, LPSTR buffer, short count )
|
WORD GetAtomName( ATOM atom, LPSTR buffer, short count )
|
||||||
{
|
{
|
||||||
if (!*LOCALATOMTABLE()) InitAtomTable( DEFAULT_ATOMTABLE_SIZE );
|
return ATOM_GetAtomName( CURRENT_DS, atom, buffer, count );
|
||||||
return ATOM_GetAtomName( *LOCALATOMTABLE(), atom, buffer, count );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -342,7 +330,7 @@ WORD GetAtomName( ATOM atom, LPSTR buffer, short count )
|
||||||
*/
|
*/
|
||||||
ATOM GlobalAddAtom( LPCSTR str )
|
ATOM GlobalAddAtom( LPCSTR str )
|
||||||
{
|
{
|
||||||
return ATOM_AddAtom( globalTable, str );
|
return ATOM_AddAtom( USER_HeapSel, str );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -351,7 +339,7 @@ ATOM GlobalAddAtom( LPCSTR str )
|
||||||
*/
|
*/
|
||||||
ATOM GlobalDeleteAtom( ATOM atom )
|
ATOM GlobalDeleteAtom( ATOM atom )
|
||||||
{
|
{
|
||||||
return ATOM_DeleteAtom( globalTable, atom );
|
return ATOM_DeleteAtom( USER_HeapSel, atom );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -360,7 +348,7 @@ ATOM GlobalDeleteAtom( ATOM atom )
|
||||||
*/
|
*/
|
||||||
ATOM GlobalFindAtom( LPCSTR str )
|
ATOM GlobalFindAtom( LPCSTR str )
|
||||||
{
|
{
|
||||||
return ATOM_FindAtom( globalTable, str );
|
return ATOM_FindAtom( USER_HeapSel, str );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -369,5 +357,5 @@ ATOM GlobalFindAtom( LPCSTR str )
|
||||||
*/
|
*/
|
||||||
WORD GlobalGetAtomName( ATOM atom, LPSTR buffer, short count )
|
WORD GlobalGetAtomName( ATOM atom, LPSTR buffer, short count )
|
||||||
{
|
{
|
||||||
return ATOM_GetAtomName( globalTable, atom, buffer, count );
|
return ATOM_GetAtomName( USER_HeapSel, atom, buffer, count );
|
||||||
}
|
}
|
||||||
|
|
|
@ -14,7 +14,6 @@ static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
#include <X11/Xatom.h>
|
#include <X11/Xatom.h>
|
||||||
#include "heap.h"
|
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "clipboard.h"
|
#include "clipboard.h"
|
||||||
|
|
|
@ -2,8 +2,7 @@
|
||||||
* COMMDLG functions
|
* COMMDLG functions
|
||||||
*
|
*
|
||||||
* Copyright 1994 Martin Ayotte
|
* Copyright 1994 Martin Ayotte
|
||||||
static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
*/
|
||||||
*/
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
#define DEBUG_OPENDLG
|
#define DEBUG_OPENDLG
|
||||||
|
@ -18,7 +17,6 @@ static char Copyright[] = "Copyright Martin Ayotte, 1994";
|
||||||
#include "user.h"
|
#include "user.h"
|
||||||
#include "message.h"
|
#include "message.h"
|
||||||
#include "library.h"
|
#include "library.h"
|
||||||
#include "heap.h"
|
|
||||||
#include "commdlg.h"
|
#include "commdlg.h"
|
||||||
#include "dlgs.h"
|
#include "dlgs.h"
|
||||||
|
|
||||||
|
@ -65,8 +63,8 @@ BOOL GetOpenFileName(LPOPENFILENAME lpofn)
|
||||||
if (lpofn == NULL) return FALSE;
|
if (lpofn == NULL) return FALSE;
|
||||||
printf("GetOpenFileName // Flags=%08lX !\n", lpofn->Flags);
|
printf("GetOpenFileName // Flags=%08lX !\n", lpofn->Flags);
|
||||||
printf("GetOpenFileName // nMaxFile=%ld lpstrFile='%s' !\n",
|
printf("GetOpenFileName // nMaxFile=%ld lpstrFile='%s' !\n",
|
||||||
lpofn->nMaxFile, lpofn->lpstrFile);
|
lpofn->nMaxFile, PTR_SEG_TO_LIN(lpofn->lpstrFile));
|
||||||
printf("GetOpenFileName // lpstrInitialDir='%s' !\n", lpofn->lpstrInitialDir);
|
printf("GetOpenFileName // lpstrInitialDir='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrInitialDir));
|
||||||
printf("GetOpenFileName // lpstrFilter=%p !\n", lpofn->lpstrFilter);
|
printf("GetOpenFileName // lpstrFilter=%p !\n", lpofn->lpstrFilter);
|
||||||
printf("GetOpenFileName // nFilterIndex=%ld !\n", lpofn->nFilterIndex);
|
printf("GetOpenFileName // nFilterIndex=%ld !\n", lpofn->nFilterIndex);
|
||||||
if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
|
if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
|
||||||
|
@ -75,7 +73,7 @@ BOOL GetOpenFileName(LPOPENFILENAME lpofn)
|
||||||
else {
|
else {
|
||||||
if (lpofn->Flags & OFN_ENABLETEMPLATE) {
|
if (lpofn->Flags & OFN_ENABLETEMPLATE) {
|
||||||
printf("GetOpenFileName // avant FindResource hInstance=%04X lpTemplateName='%s' !\n",
|
printf("GetOpenFileName // avant FindResource hInstance=%04X lpTemplateName='%s' !\n",
|
||||||
lpofn->hInstance, lpofn->lpTemplateName);
|
lpofn->hInstance, PTR_SEG_TO_LIN(lpofn->lpTemplateName));
|
||||||
hInst = lpofn->hInstance;
|
hInst = lpofn->hInstance;
|
||||||
hResInfo = FindResource(hInst,
|
hResInfo = FindResource(hInst,
|
||||||
(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
|
(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
|
||||||
|
@ -108,7 +106,7 @@ BOOL GetOpenFileName(LPOPENFILENAME lpofn)
|
||||||
lpofn->nFileExtension = strlen(lpofn->lpstrFile) - 3;
|
lpofn->nFileExtension = strlen(lpofn->lpstrFile) - 3;
|
||||||
bRet = TRUE;
|
bRet = TRUE;
|
||||||
*/
|
*/
|
||||||
printf("GetOpenFileName // return lpstrFile='%s' !\n", lpofn->lpstrFile);
|
printf("GetOpenFileName // return lpstrFile='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrFile));
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -127,8 +125,8 @@ BOOL GetSaveFileName(LPOPENFILENAME lpofn)
|
||||||
if (lpofn == NULL) return FALSE;
|
if (lpofn == NULL) return FALSE;
|
||||||
printf("GetSaveFileName // Flags=%08lX !\n", lpofn->Flags);
|
printf("GetSaveFileName // Flags=%08lX !\n", lpofn->Flags);
|
||||||
printf("GetSaveFileName // nMaxFile=%ld lpstrFile='%s' !\n",
|
printf("GetSaveFileName // nMaxFile=%ld lpstrFile='%s' !\n",
|
||||||
lpofn->nMaxFile, lpofn->lpstrFile);
|
lpofn->nMaxFile, PTR_SEG_TO_LIN(lpofn->lpstrFile));
|
||||||
printf("GetSaveFileName // lpstrInitialDir='%s' !\n", lpofn->lpstrInitialDir);
|
printf("GetSaveFileName // lpstrInitialDir='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrInitialDir));
|
||||||
printf("GetSaveFileName // lpstrFilter=%p !\n", lpofn->lpstrFilter);
|
printf("GetSaveFileName // lpstrFilter=%p !\n", lpofn->lpstrFilter);
|
||||||
if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
|
if (lpofn->Flags & OFN_ENABLETEMPLATEHANDLE) {
|
||||||
hDlgTmpl = lpofn->hInstance;
|
hDlgTmpl = lpofn->hInstance;
|
||||||
|
@ -136,7 +134,7 @@ BOOL GetSaveFileName(LPOPENFILENAME lpofn)
|
||||||
else {
|
else {
|
||||||
if (lpofn->Flags & OFN_ENABLETEMPLATE) {
|
if (lpofn->Flags & OFN_ENABLETEMPLATE) {
|
||||||
printf("GetSaveFileName // avant FindResource lpTemplateName='%s' !\n",
|
printf("GetSaveFileName // avant FindResource lpTemplateName='%s' !\n",
|
||||||
lpofn->lpTemplateName);
|
PTR_SEG_TO_LIN(lpofn->lpTemplateName));
|
||||||
hInst = lpofn->hInstance;
|
hInst = lpofn->hInstance;
|
||||||
hResInfo = FindResource(hInst,
|
hResInfo = FindResource(hInst,
|
||||||
(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
|
(LPSTR)lpofn->lpTemplateName, RT_DIALOG);
|
||||||
|
@ -159,7 +157,7 @@ BOOL GetSaveFileName(LPOPENFILENAME lpofn)
|
||||||
wndPtr = WIN_FindWndPtr(lpofn->hwndOwner);
|
wndPtr = WIN_FindWndPtr(lpofn->hwndOwner);
|
||||||
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
|
bRet = DialogBoxIndirectParam(wndPtr->hInstance, hDlgTmpl,
|
||||||
lpofn->hwndOwner, (WNDPROC)FileSaveDlgProc, (DWORD)lpofn);
|
lpofn->hwndOwner, (WNDPROC)FileSaveDlgProc, (DWORD)lpofn);
|
||||||
printf("GetSaveFileName // return lpstrFile='%s' !\n", lpofn->lpstrFile);
|
printf("GetSaveFileName // return lpstrFile='%s' !\n", PTR_SEG_TO_LIN(lpofn->lpstrFile));
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -212,8 +210,8 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
if (!FileDlg_Init(hWnd, lParam)) return TRUE;
|
if (!FileDlg_Init(hWnd, lParam)) return TRUE;
|
||||||
SendDlgItemMessage(hWnd, cmb1, CB_RESETCONTENT, 0, 0L);
|
SendDlgItemMessage(hWnd, cmb1, CB_RESETCONTENT, 0, 0L);
|
||||||
lpofn = (LPOPENFILENAME)lParam;
|
lpofn = (LPOPENFILENAME)lParam;
|
||||||
ptr = (LPSTR)lpofn->lpstrFilter;
|
ptr = (LPSTR)PTR_SEG_TO_LIN(lpofn->lpstrFilter);
|
||||||
strcpy(CurPath, lpofn->lpstrInitialDir);
|
strcpy(CurPath, PTR_SEG_TO_LIN(lpofn->lpstrInitialDir));
|
||||||
#ifdef DEBUG_OPENDLG
|
#ifdef DEBUG_OPENDLG
|
||||||
printf("FileOpenDlgProc // lpstrInitialDir='%s' !\n", CurPath);
|
printf("FileOpenDlgProc // lpstrInitialDir='%s' !\n", CurPath);
|
||||||
#endif
|
#endif
|
||||||
|
@ -236,7 +234,7 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
nDrive = 2; /* Drive 'C:' */
|
nDrive = 2; /* Drive 'C:' */
|
||||||
SendDlgItemMessage(hWnd, cmb2, CB_SETCURSEL, nDrive, 0L);
|
SendDlgItemMessage(hWnd, cmb2, CB_SETCURSEL, nDrive, 0L);
|
||||||
sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
|
sprintf(str, "%c:\\%s", nDrive + 'A', DOS_GetCurrentDir(nDrive));
|
||||||
fspec = OpenDlg_GetFileType(lpofn->lpstrFilter,
|
fspec = OpenDlg_GetFileType(PTR_SEG_TO_LIN(lpofn->lpstrFilter),
|
||||||
lpofn->nFilterIndex);
|
lpofn->nFilterIndex);
|
||||||
#ifdef DEBUG_OPENDLG
|
#ifdef DEBUG_OPENDLG
|
||||||
printf("FileOpenDlgProc // WM_INITDIALOG fspec #%d = '%s' !\n",
|
printf("FileOpenDlgProc // WM_INITDIALOG fspec #%d = '%s' !\n",
|
||||||
|
@ -263,7 +261,7 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
|
|
||||||
case WM_MEASUREITEM:
|
case WM_MEASUREITEM:
|
||||||
GetObject(hFolder2, sizeof(BITMAP), (LPSTR)&bm);
|
GetObject(hFolder2, sizeof(BITMAP), (LPSTR)&bm);
|
||||||
lpmeasure = (LPMEASUREITEMSTRUCT)lParam;
|
lpmeasure = (LPMEASUREITEMSTRUCT)PTR_SEG_TO_LIN(lParam);
|
||||||
lpmeasure->itemHeight = bm.bmHeight;
|
lpmeasure->itemHeight = bm.bmHeight;
|
||||||
#ifdef DEBUG_OPENDLG_DRAW
|
#ifdef DEBUG_OPENDLG_DRAW
|
||||||
printf("FileOpenDlgProc WM_MEASUREITEM Height=%d !\n", bm.bmHeight);
|
printf("FileOpenDlgProc WM_MEASUREITEM Height=%d !\n", bm.bmHeight);
|
||||||
|
@ -275,7 +273,7 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
printf("FileOpenDlgProc // WM_DRAWITEM w=%04X l=%08X\n", wParam, lParam);
|
printf("FileOpenDlgProc // WM_DRAWITEM w=%04X l=%08X\n", wParam, lParam);
|
||||||
#endif
|
#endif
|
||||||
if (lParam == 0L) break;
|
if (lParam == 0L) break;
|
||||||
lpdis = (LPDRAWITEMSTRUCT)lParam;
|
lpdis = (LPDRAWITEMSTRUCT)PTR_SEG_TO_LIN(lParam);
|
||||||
#ifdef DEBUG_OPENDLG_DRAW
|
#ifdef DEBUG_OPENDLG_DRAW
|
||||||
printf("FileOpenDlgProc // WM_DRAWITEM CtlType=%04X CtlID=%04X \n",
|
printf("FileOpenDlgProc // WM_DRAWITEM CtlType=%04X CtlID=%04X \n",
|
||||||
lpdis->CtlType, lpdis->CtlID);
|
lpdis->CtlType, lpdis->CtlID);
|
||||||
|
@ -284,7 +282,7 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
|
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
|
||||||
SelectObject(lpdis->hDC, hBrush);
|
SelectObject(lpdis->hDC, hBrush);
|
||||||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||||
ptr = (LPSTR) lpdis->itemData;
|
ptr = (LPSTR) PTR_SEG_TO_LIN(lpdis->itemData);
|
||||||
if (ptr == NULL) break;
|
if (ptr == NULL) break;
|
||||||
TextOut(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
|
TextOut(lpdis->hDC, lpdis->rcItem.left, lpdis->rcItem.top,
|
||||||
ptr, strlen(ptr));
|
ptr, strlen(ptr));
|
||||||
|
@ -293,7 +291,7 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
|
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
|
||||||
SelectObject(lpdis->hDC, hBrush);
|
SelectObject(lpdis->hDC, hBrush);
|
||||||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||||
ptr = (LPSTR) lpdis->itemData;
|
ptr = (LPSTR) PTR_SEG_TO_LIN(lpdis->itemData);
|
||||||
if (ptr == NULL) break;
|
if (ptr == NULL) break;
|
||||||
if (strcmp(ptr, "[.]") == 0) {
|
if (strcmp(ptr, "[.]") == 0) {
|
||||||
hBitmap = hFolder2;
|
hBitmap = hFolder2;
|
||||||
|
@ -315,7 +313,7 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
|
hBrush = SelectObject(lpdis->hDC, GetStockObject(LTGRAY_BRUSH));
|
||||||
SelectObject(lpdis->hDC, hBrush);
|
SelectObject(lpdis->hDC, hBrush);
|
||||||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||||
ptr = (LPSTR) lpdis->itemData;
|
ptr = (LPSTR) PTR_SEG_TO_LIN(lpdis->itemData);
|
||||||
if (ptr == NULL) break;
|
if (ptr == NULL) break;
|
||||||
switch(ptr[2]) {
|
switch(ptr[2]) {
|
||||||
case 'a':
|
case 'a':
|
||||||
|
@ -434,13 +432,13 @@ BOOL FileOpenDlgProc(HWND hWnd, WORD wMsg, WORD wParam, LONG lParam)
|
||||||
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
|
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
|
||||||
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
|
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
|
||||||
printf("FileOpenDlgProc // IDOK str='%s'\n", str);
|
printf("FileOpenDlgProc // IDOK str='%s'\n", str);
|
||||||
strcpy(lpofn->lpstrFile, str);
|
strcpy(PTR_SEG_TO_LIN(lpofn->lpstrFile), str);
|
||||||
lpofn->nFileOffset = 0;
|
lpofn->nFileOffset = 0;
|
||||||
lpofn->nFileExtension = strlen(lpofn->lpstrFile) - 3;
|
lpofn->nFileExtension = strlen(PTR_SEG_TO_LIN(lpofn->lpstrFile)) - 3;
|
||||||
if (lpofn->lpstrFileTitle != NULL) {
|
if (lpofn->lpstrFileTitle != NULL) {
|
||||||
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
|
wRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0L);
|
||||||
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
|
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, wRet, (DWORD)str);
|
||||||
strcpy(lpofn->lpstrFileTitle, str);
|
strcpy(PTR_SEG_TO_LIN(lpofn->lpstrFileTitle), str);
|
||||||
}
|
}
|
||||||
EndDialog(hWnd, TRUE);
|
EndDialog(hWnd, TRUE);
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
|
|
161
misc/dos_fs.c
161
misc/dos_fs.c
|
@ -189,6 +189,11 @@ void DOS_InitFS(void)
|
||||||
* /windows/word) Also set the default drive to whatever drive
|
* /windows/word) Also set the default drive to whatever drive
|
||||||
* corresponds to the directory we started in.
|
* corresponds to the directory we started in.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
for (x=0; x!=MAX_DOS_DRIVES; x++)
|
||||||
|
if (DosDrives[x].rootdir != NULL)
|
||||||
|
strcpy( DosDrives[x].cwd, "\\" );
|
||||||
|
|
||||||
getcwd(temp, 254);
|
getcwd(temp, 254);
|
||||||
strcat(temp, "/"); /* For DOS_GetDosFileName */
|
strcat(temp, "/"); /* For DOS_GetDosFileName */
|
||||||
strcpy(temp, DOS_GetDosFileName(temp));
|
strcpy(temp, DOS_GetDosFileName(temp));
|
||||||
|
@ -292,15 +297,19 @@ WORD DOS_GetEquipment(void)
|
||||||
|
|
||||||
int DOS_ValidDrive(int drive)
|
int DOS_ValidDrive(int drive)
|
||||||
{
|
{
|
||||||
dprintf_dosfs(stddeb,"ValidDrive %c (%d)\n",'A'+drive,drive);
|
int valid = 1;
|
||||||
if (drive >= MAX_DOS_DRIVES)
|
|
||||||
return 0;
|
|
||||||
if (DosDrives[drive].rootdir == NULL)
|
|
||||||
return 0;
|
|
||||||
if (DosDrives[drive].disabled)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
return 1;
|
dprintf_dosfs(stddeb,"ValidDrive %c (%d) -- ",'A'+drive,drive);
|
||||||
|
|
||||||
|
if (drive >= MAX_DOS_DRIVES)
|
||||||
|
valid = 0;
|
||||||
|
if (DosDrives[drive].rootdir == NULL)
|
||||||
|
valid = 0;
|
||||||
|
if (DosDrives[drive].disabled)
|
||||||
|
valid = 0;
|
||||||
|
|
||||||
|
dprintf_dosfs(stddeb, "%s\n", valid ? "Valid" : "Invalid");
|
||||||
|
return valid;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -321,6 +330,45 @@ int DOS_ValidDirectory(char *name)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/* Simplify the path in "name" by removing "//"'s and
|
||||||
|
".."'s in names like "/usr/bin/../lib/test" */
|
||||||
|
void DOS_SimplifyPath(char *name)
|
||||||
|
{
|
||||||
|
char *p = name, *q = name, *l = NULL;
|
||||||
|
BOOL changed;
|
||||||
|
|
||||||
|
start:
|
||||||
|
p = name;
|
||||||
|
q = name;
|
||||||
|
while( *p ) {
|
||||||
|
*q++ = *p++;
|
||||||
|
if( ( *p == '/' ) && ( *(p-1) == '/' ) )
|
||||||
|
p++;
|
||||||
|
}
|
||||||
|
*q = 0;
|
||||||
|
|
||||||
|
p = name;
|
||||||
|
q = name;
|
||||||
|
changed = FALSE;
|
||||||
|
while( *p ) {
|
||||||
|
if( (!changed) &&( *p == '/' ) && ( *(p+1) == '.' ) && ( *(p+2) == '.' ) ) {
|
||||||
|
if( l ) {
|
||||||
|
q = l;
|
||||||
|
p += 3;
|
||||||
|
changed = TRUE;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if( *p == '/' )
|
||||||
|
l = q;
|
||||||
|
*q++ = *p++;
|
||||||
|
}
|
||||||
|
*q = 0;
|
||||||
|
if( changed)
|
||||||
|
goto start;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
int DOS_GetDefaultDrive(void)
|
int DOS_GetDefaultDrive(void)
|
||||||
{
|
{
|
||||||
dprintf_dosfs(stddeb,"GetDefaultDrive (%c)\n",'A'+CurrentDrive);
|
dprintf_dosfs(stddeb,"GetDefaultDrive (%c)\n",'A'+CurrentDrive);
|
||||||
|
@ -475,18 +523,17 @@ char *DOS_GetDosFileName(char *unixfilename)
|
||||||
|
|
||||||
char *DOS_GetCurrentDir(int drive)
|
char *DOS_GetCurrentDir(int drive)
|
||||||
{
|
{
|
||||||
/* should return 'WINDOWS\SYSTEM' */
|
|
||||||
|
|
||||||
static char temp[256];
|
static char temp[256];
|
||||||
|
|
||||||
if (!DOS_ValidDrive(drive))
|
if (!DOS_ValidDrive(drive))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
strcpy(temp, DosDrives[drive].cwd);
|
strcpy(temp, DosDrives[drive].cwd);
|
||||||
|
DOS_SimplifyPath( temp );
|
||||||
ToDos(temp);
|
ToDos(temp);
|
||||||
ChopOffSlash(temp);
|
ChopOffSlash(temp);
|
||||||
|
|
||||||
dprintf_dosfs(stddeb,"DOS_GetCWD: %c: %s\n",'A'+drive, temp + 1);
|
dprintf_dosfs(stddeb,"DOS_GetCWD: %c:%s\n", 'A'+drive, temp);
|
||||||
return (temp + 1);
|
return (temp + 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -512,6 +559,7 @@ int DOS_ChangeDir(int drive, char *dirname)
|
||||||
strcpy(DosDrives[drive].cwd, old);
|
strcpy(DosDrives[drive].cwd, old);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
DOS_SimplifyPath(DosDrives[drive].cwd);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -570,7 +618,7 @@ void DOS_ExpandToFullUnixPath(char *filename)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
getcwd(temp, 255);
|
getcwd(temp, 255);
|
||||||
if(strncmp(filename, "./", 2))
|
if(!strncmp(filename, "./", 2))
|
||||||
strcat(temp, filename + 1);
|
strcat(temp, filename + 1);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -770,33 +818,66 @@ char *WinIniFileName(void)
|
||||||
|
|
||||||
static int match(char *filename, char *filemask)
|
static int match(char *filename, char *filemask)
|
||||||
{
|
{
|
||||||
int x, masklength = strlen(filemask);
|
char name[12], mask[12];
|
||||||
|
int i;
|
||||||
|
|
||||||
dprintf_dosfs(stddeb, "match: %s, %s\n", filename, filemask);
|
dprintf_dosfs(stddeb, "match: %s, %s\n", filename, filemask);
|
||||||
for (x = 0; x != masklength ; x++) {
|
|
||||||
/* printf("(%c%c) ", *filename, filemask[x]);
|
for( i=0; i<11; i++ ) {
|
||||||
*/
|
name[i] = ' ';
|
||||||
if (!*filename)
|
mask[i] = ' ';
|
||||||
/* stop if EOFname */
|
|
||||||
return 1;
|
|
||||||
|
|
||||||
if (filemask[x] == '?') {
|
|
||||||
/* skip the next char */
|
|
||||||
filename++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (filemask[x] == '*') {
|
|
||||||
/* skip each char until '.' or EOFname */
|
|
||||||
while (*filename && *filename !='.')
|
|
||||||
filename++;
|
|
||||||
continue;
|
|
||||||
}
|
|
||||||
if (filemask[x] != *filename)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
filename++;
|
|
||||||
}
|
}
|
||||||
|
name[11] = 0;
|
||||||
|
mask[11] = 0;
|
||||||
|
|
||||||
|
for( i=0; i<8; i++ )
|
||||||
|
if( !(*filename) || *filename == '.' )
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
name[i] = toupper( *filename++ );
|
||||||
|
while( *filename && *filename != '.' )
|
||||||
|
filename++;
|
||||||
|
if( *filename )
|
||||||
|
filename++;
|
||||||
|
for( i=8; i<11; i++ )
|
||||||
|
if( !(*filename) )
|
||||||
|
break;
|
||||||
|
else
|
||||||
|
name[i] = toupper( *filename++ );
|
||||||
|
|
||||||
|
for( i=0; i<8; i++ )
|
||||||
|
if( !(*filemask) || *filemask == '.' )
|
||||||
|
break;
|
||||||
|
else if( *filemask == '*' ) {
|
||||||
|
int j;
|
||||||
|
for( j=i; j<8; j++ )
|
||||||
|
mask[j] = '?';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mask[i] = toupper( *filemask++ );
|
||||||
|
while( *filemask && *filemask != '.' )
|
||||||
|
filemask++;
|
||||||
|
if( *filemask )
|
||||||
|
filemask++;
|
||||||
|
for( i=8; i<11; i++ )
|
||||||
|
if( !(*filemask) )
|
||||||
|
break;
|
||||||
|
else if (*filemask == '*' ) {
|
||||||
|
int j;
|
||||||
|
for( j=i; j<11; j++ )
|
||||||
|
mask[j] = '?';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mask[i] = toupper( *filemask++ );
|
||||||
|
|
||||||
|
dprintf_dosfs(stddeb, "changed to: %s, %s\n", name, mask);
|
||||||
|
|
||||||
|
for( i=0; i<11; i++ )
|
||||||
|
if( ( name[i] != mask[i] ) && ( mask[i] != '?' ) )
|
||||||
|
return 0;
|
||||||
|
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -809,8 +890,10 @@ struct dosdirent *DOS_opendir(char *dosdirname)
|
||||||
for (x=0; x != MAX_OPEN_DIRS && DosDirs[x].inuse; x++)
|
for (x=0; x != MAX_OPEN_DIRS && DosDirs[x].inuse; x++)
|
||||||
;
|
;
|
||||||
|
|
||||||
if (x == MAX_OPEN_DIRS)
|
if (x == MAX_OPEN_DIRS) {
|
||||||
|
fprintf( stderr, "DOS_opendir(): Too many open directories\n");
|
||||||
return NULL;
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if ((unixdirname = DOS_GetUnixFileName(dosdirname)) == NULL)
|
if ((unixdirname = DOS_GetUnixFileName(dosdirname)) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -832,6 +915,7 @@ struct dosdirent *DOS_opendir(char *dosdirname)
|
||||||
|
|
||||||
DosDirs[x].inuse = 1;
|
DosDirs[x].inuse = 1;
|
||||||
strcpy(DosDirs[x].unixpath, temp);
|
strcpy(DosDirs[x].unixpath, temp);
|
||||||
|
DosDirs[x].entnum = 0;
|
||||||
|
|
||||||
if ((DosDirs[x].ds = opendir(temp)) == NULL)
|
if ((DosDirs[x].ds = opendir(temp)) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
@ -853,6 +937,7 @@ struct dosdirent *DOS_readdir(struct dosdirent *de)
|
||||||
if ((d = readdir(de->ds)) == NULL)
|
if ((d = readdir(de->ds)) == NULL)
|
||||||
return NULL;
|
return NULL;
|
||||||
|
|
||||||
|
de->entnum++; /* Increment the directory entry number */
|
||||||
strcpy(de->filename, d->d_name);
|
strcpy(de->filename, d->d_name);
|
||||||
if (d->d_reclen > 12)
|
if (d->d_reclen > 12)
|
||||||
de->filename[12] = '\0';
|
de->filename[12] = '\0';
|
||||||
|
|
11
misc/exec.c
11
misc/exec.c
|
@ -8,7 +8,6 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include "neexe.h"
|
#include "neexe.h"
|
||||||
#include "segmem.h"
|
|
||||||
#include "prototypes.h"
|
#include "prototypes.h"
|
||||||
#include "dlls.h"
|
#include "dlls.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
@ -79,8 +78,8 @@ void InitializeLoadedNewDLLs(HINSTANCE hInst)
|
||||||
}
|
}
|
||||||
|
|
||||||
ds_reg = wpnt->ne->selector_table[wpnt->ne->
|
ds_reg = wpnt->ne->selector_table[wpnt->ne->
|
||||||
ne_header->auto_data_seg-1].selector;
|
ne_header->auto_data_seg-1];
|
||||||
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1].selector;
|
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1];
|
||||||
ip_reg = wpnt->ne->ne_header->ip;
|
ip_reg = wpnt->ne->ne_header->ip;
|
||||||
|
|
||||||
dprintf_exec(stddeb, "Initializing %s, cs:ip %04x:%04x, ds %04x\n",
|
dprintf_exec(stddeb, "Initializing %s, cs:ip %04x:%04x, ds %04x\n",
|
||||||
|
@ -117,10 +116,10 @@ void StartNewTask(HINSTANCE hInst)
|
||||||
dprintf_exec(stddeb,"StartNewTask() before InitializeLoadedNewDLLs !\n");
|
dprintf_exec(stddeb,"StartNewTask() before InitializeLoadedNewDLLs !\n");
|
||||||
InitializeLoadedNewDLLs(hInst);
|
InitializeLoadedNewDLLs(hInst);
|
||||||
dprintf_exec(stddeb,"StartNewTask() before setup register !\n");
|
dprintf_exec(stddeb,"StartNewTask() before setup register !\n");
|
||||||
ds_reg = (wpnt->ne->selector_table[wpnt->ne->ne_header->auto_data_seg-1].selector);
|
ds_reg = (wpnt->ne->selector_table[wpnt->ne->ne_header->auto_data_seg-1]);
|
||||||
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1].selector;
|
cs_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->cs-1];
|
||||||
ip_reg = wpnt->ne->ne_header->ip;
|
ip_reg = wpnt->ne->ne_header->ip;
|
||||||
ss_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->ss-1].selector;
|
ss_reg = wpnt->ne->selector_table[wpnt->ne->ne_header->ss-1];
|
||||||
sp_reg = wpnt->ne->ne_header->sp;
|
sp_reg = wpnt->ne->ne_header->sp;
|
||||||
|
|
||||||
dprintf_exec(stddeb,"StartNewTask() before CallToInit16() !\n");
|
dprintf_exec(stddeb,"StartNewTask() before CallToInit16() !\n");
|
||||||
|
|
26
misc/file.c
26
misc/file.c
|
@ -51,6 +51,8 @@ INT _lopen (LPSTR lpPathName, INT iReadWrite)
|
||||||
return HFILE_ERROR;
|
return HFILE_ERROR;
|
||||||
iReadWrite &= 0x000F;
|
iReadWrite &= 0x000F;
|
||||||
handle = open (UnixFileName, iReadWrite);
|
handle = open (UnixFileName, iReadWrite);
|
||||||
|
if( ( handle == -1 ) && Options.allowReadOnly )
|
||||||
|
handle = open( UnixFileName, O_RDONLY );
|
||||||
|
|
||||||
dprintf_file(stddeb, "_lopen: open: %s (handle %d)\n", UnixFileName, handle);
|
dprintf_file(stddeb, "_lopen: open: %s (handle %d)\n", UnixFileName, handle);
|
||||||
|
|
||||||
|
@ -244,11 +246,12 @@ INT OpenFile (LPSTR lpFileName, LPOFSTRUCT ofs, WORD wStyle)
|
||||||
/* Now we are actually going to open the file. According to Microsoft's
|
/* Now we are actually going to open the file. According to Microsoft's
|
||||||
Knowledge Basis, this is done by calling int 21h, ax=3dh. */
|
Knowledge Basis, this is done by calling int 21h, ax=3dh. */
|
||||||
|
|
||||||
|
#if 0
|
||||||
AX = 0x3d00;
|
AX = 0x3d00;
|
||||||
AL = (AL & 0x0f) | (wStyle & 0x70); /* Handle OF_SHARE_xxx etc. */
|
AL = (AL & 0x0f) | (wStyle & 0x70); /* Handle OF_SHARE_xxx etc. */
|
||||||
AL = (AL & 0xf0) | (wStyle & 0x03); /* Handle OF_READ etc. */
|
AL = (AL & 0xf0) | (wStyle & 0x03); /* Handle OF_READ etc. */
|
||||||
DS = segment (ofs->szPathName);
|
DS = SELECTOROF(ofs->szPathName);
|
||||||
DX = offset (ofs->szPathName);
|
DX = OFFSETOF(ofs->szPathName);
|
||||||
|
|
||||||
OpenExistingFile (context);
|
OpenExistingFile (context);
|
||||||
|
|
||||||
|
@ -259,6 +262,25 @@ INT OpenFile (LPSTR lpFileName, LPOFSTRUCT ofs, WORD wStyle)
|
||||||
}
|
}
|
||||||
|
|
||||||
return AX;
|
return AX;
|
||||||
|
#endif
|
||||||
|
/* FIXME: Quick hack to get it to work without calling DOS --AJ */
|
||||||
|
{
|
||||||
|
int mode, handle;
|
||||||
|
switch(wStyle & 3)
|
||||||
|
{
|
||||||
|
case 0: mode = O_RDONLY; break;
|
||||||
|
case 1: mode = O_WRONLY; break;
|
||||||
|
default: mode = O_RDWR; break;
|
||||||
|
}
|
||||||
|
if ((handle = open(DOS_GetUnixFileName(ofs->szPathName), mode)) == -1)
|
||||||
|
{
|
||||||
|
ofs->nErrCode = 2; /* not found */
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
/* don't bother with locking for now */
|
||||||
|
|
||||||
|
return handle;
|
||||||
|
}
|
||||||
#endif /*WINELIB*/
|
#endif /*WINELIB*/
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
121
misc/lstr.c
121
misc/lstr.c
|
@ -9,7 +9,7 @@ static char Copyright[] = "Copyright Yngvi Sigurjonsson (yngvi@hafro.is), 1993"
|
||||||
#include <fcntl.h>
|
#include <fcntl.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
|
||||||
#include "regfunc.h"
|
#include "ldt.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
|
||||||
#define ToUpper(c) toupper(c)
|
#define ToUpper(c) toupper(c)
|
||||||
|
@ -18,12 +18,10 @@ static char Copyright[] = "Copyright Yngvi Sigurjonsson (yngvi@hafro.is), 1993"
|
||||||
/* Funny to divide them between user and kernel. */
|
/* Funny to divide them between user and kernel. */
|
||||||
|
|
||||||
/* KERNEL.89 */
|
/* KERNEL.89 */
|
||||||
LPSTR lstrcat(LPSTR target,LPCSTR source)
|
SEGPTR lstrcat( SEGPTR target, SEGPTR source )
|
||||||
{
|
{
|
||||||
#ifdef DEBUG_STRING
|
strcat( (char *)PTR_SEG_TO_LIN(target), (char *)PTR_SEG_TO_LIN(source) );
|
||||||
fprintf(stderr,"lstrcat(%s,%s)\n",target,source);
|
return target;
|
||||||
#endif
|
|
||||||
return strcat(target,source);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* USER.430 */
|
/* USER.430 */
|
||||||
|
@ -43,15 +41,17 @@ INT lstrcmpi(LPCSTR str1,LPCSTR str2)
|
||||||
}
|
}
|
||||||
|
|
||||||
/* KERNEL.88 */
|
/* KERNEL.88 */
|
||||||
LPSTR lstrcpy(LPSTR target,LPCSTR source)
|
SEGPTR lstrcpy( SEGPTR target, SEGPTR source )
|
||||||
{
|
{
|
||||||
return strcpy(target,source);
|
strcpy( (char *)PTR_SEG_TO_LIN(target), (char *)PTR_SEG_TO_LIN(source) );
|
||||||
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* KERNEL.353 */
|
/* KERNEL.353 */
|
||||||
LPSTR lstrcpyn(LPSTR target,LPCSTR source,int n)
|
SEGPTR lstrcpyn( SEGPTR target, SEGPTR source, WORD n )
|
||||||
{
|
{
|
||||||
return strncpy(target,source,n);
|
strncpy((char *)PTR_SEG_TO_LIN(target), (char *)PTR_SEG_TO_LIN(source), n);
|
||||||
|
return target;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* KERNEL.90 */
|
/* KERNEL.90 */
|
||||||
|
@ -84,29 +84,41 @@ BOOL IsCharLower(char ch)
|
||||||
return islower(ch);
|
return islower(ch);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AnsiUpper USER.431 */
|
/***********************************************************************
|
||||||
LPSTR AnsiUpper(LPSTR strOrChar)
|
* AnsiUpper (USER.431)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 16-bit version */
|
||||||
|
SEGPTR WIN16_AnsiUpper( SEGPTR strOrChar )
|
||||||
{
|
{
|
||||||
char *s = strOrChar;
|
|
||||||
/* I am not sure if the locale stuff works with toupper, but then again
|
/* I am not sure if the locale stuff works with toupper, but then again
|
||||||
I am not sure if the Linux libc locale stuffs works at all */
|
I am not sure if the Linux libc locale stuffs works at all */
|
||||||
|
|
||||||
/* uppercase only one char if strOrChar < 0x10000 */
|
/* uppercase only one char if strOrChar < 0x10000 */
|
||||||
if(HIWORD((DWORD)strOrChar)) {
|
if (HIWORD(strOrChar))
|
||||||
while (*s) {
|
{
|
||||||
if (IsCharLower(*s))
|
char *s = PTR_SEG_TO_LIN(strOrChar);
|
||||||
*s = ToUpper(*s);
|
while (*s) *s++ = ToUpper( *s );
|
||||||
s++;
|
return strOrChar;
|
||||||
}
|
}
|
||||||
return strOrChar;
|
else return (SEGPTR)ToUpper( (int)strOrChar );
|
||||||
} else
|
|
||||||
if (IsCharLower((int)strOrChar))
|
|
||||||
return (LPSTR) ToUpper((int)strOrChar);
|
|
||||||
else
|
|
||||||
return (LPSTR) strOrChar;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AnsiUpperBuff USER.437 */
|
/* 32-bit version */
|
||||||
|
LPSTR AnsiUpper(LPSTR strOrChar)
|
||||||
|
{
|
||||||
|
char *s = strOrChar;
|
||||||
|
/* I am not sure if the locale stuff works with toupper, but then again
|
||||||
|
I am not sure if the Linux libc locale stuffs works at all */
|
||||||
|
|
||||||
|
while (*s) *s++ = ToUpper( *s );
|
||||||
|
return strOrChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* AnsiUpperBuff (USER.437)
|
||||||
|
*/
|
||||||
UINT AnsiUpperBuff(LPSTR str,UINT len)
|
UINT AnsiUpperBuff(LPSTR str,UINT len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -117,29 +129,41 @@ UINT AnsiUpperBuff(LPSTR str,UINT len)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AnsiLower USER.432 */
|
/***********************************************************************
|
||||||
LPSTR AnsiLower(LPSTR strOrChar)
|
* AnsiLower (USER.432)
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 16-bit version */
|
||||||
|
SEGPTR WIN16_AnsiLower(SEGPTR strOrChar)
|
||||||
{
|
{
|
||||||
char *s = strOrChar;
|
|
||||||
/* I am not sure if the locale stuff works with toupper, but then again
|
/* I am not sure if the locale stuff works with toupper, but then again
|
||||||
I am not sure if the Linux libc locale stuffs works at all */
|
I am not sure if the Linux libc locale stuffs works at all */
|
||||||
|
|
||||||
/* lowercase only one char if strOrChar < 0x10000 */
|
/* lowercase only one char if strOrChar < 0x10000 */
|
||||||
if(HIWORD((DWORD)strOrChar)) {
|
if (HIWORD(strOrChar))
|
||||||
while (*s) {
|
{
|
||||||
if (IsCharUpper(*s))
|
char *s = PTR_SEG_TO_LIN( strOrChar );
|
||||||
*s = ToLower(*s);
|
while (*s) *s++ = ToLower( *s );
|
||||||
s++;
|
return strOrChar;
|
||||||
}
|
}
|
||||||
return strOrChar;
|
else return (SEGPTR)ToLower( (int)strOrChar );
|
||||||
} else
|
|
||||||
if (IsCharUpper((int)strOrChar))
|
|
||||||
return (LPSTR) ToLower((int)strOrChar);
|
|
||||||
else
|
|
||||||
return (LPSTR) strOrChar;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AnsiLowerBuff USER.438 */
|
/* 32-bit version */
|
||||||
|
LPSTR AnsiLower(LPSTR strOrChar)
|
||||||
|
{
|
||||||
|
char *s = strOrChar;
|
||||||
|
/* I am not sure if the locale stuff works with toupper, but then again
|
||||||
|
I am not sure if the Linux libc locale stuffs works at all */
|
||||||
|
|
||||||
|
while (*s) *s++ = ToLower( *s );
|
||||||
|
return strOrChar;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* AnsiLowerBuff (USER.438)
|
||||||
|
*/
|
||||||
UINT AnsiLowerBuff(LPSTR str,UINT len)
|
UINT AnsiLowerBuff(LPSTR str,UINT len)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -152,16 +176,17 @@ UINT AnsiLowerBuff(LPSTR str,UINT len)
|
||||||
return i;
|
return i;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* AnsiNext USER.472 */
|
/* AnsiNext USER.472 */
|
||||||
LPSTR AnsiNext(LPSTR current)
|
SEGPTR AnsiNext(SEGPTR current)
|
||||||
{
|
{
|
||||||
return (*current)?current+1:current;
|
return (*(char *)PTR_SEG_TO_LIN(current)) ? current + 1 : current;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* AnsiPrev USER.473 */
|
/* AnsiPrev USER.473 */
|
||||||
char FAR* AnsiPrev(/*const*/ char FAR* start,char FAR* current)
|
SEGPTR AnsiPrev( SEGPTR start, SEGPTR current)
|
||||||
{
|
{
|
||||||
return (current==start)?start:current-1;
|
return (current==start)?start:current-1;
|
||||||
}
|
}
|
||||||
|
|
||||||
BYTE Oem2Ansi[256], Ansi2Oem[256];
|
BYTE Oem2Ansi[256], Ansi2Oem[256];
|
||||||
|
|
15
misc/main.c
15
misc/main.c
|
@ -28,7 +28,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1994";
|
||||||
#include "desktop.h"
|
#include "desktop.h"
|
||||||
#include "prototypes.h"
|
#include "prototypes.h"
|
||||||
#include "texts.h"
|
#include "texts.h"
|
||||||
#include "selectors.h" /* for InitSelectors prototype */
|
#include "dlls.h"
|
||||||
#include "library.h"
|
#include "library.h"
|
||||||
#define DEBUG_DEFINE_VARIABLES
|
#define DEBUG_DEFINE_VARIABLES
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
|
@ -74,7 +74,8 @@ struct options Options =
|
||||||
FALSE, /* synchronous */
|
FALSE, /* synchronous */
|
||||||
FALSE, /* backing store */
|
FALSE, /* backing store */
|
||||||
SW_SHOWNORMAL, /* cmdShow */
|
SW_SHOWNORMAL, /* cmdShow */
|
||||||
FALSE
|
FALSE,
|
||||||
|
FALSE /* AllowReadOnly */
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
|
@ -91,7 +92,8 @@ static XrmOptionDescRec optionsTable[] =
|
||||||
{ "-spy", ".spy", XrmoptionSepArg, (caddr_t)NULL },
|
{ "-spy", ".spy", XrmoptionSepArg, (caddr_t)NULL },
|
||||||
{ "-debug", ".debug", XrmoptionNoArg, (caddr_t)"on" },
|
{ "-debug", ".debug", XrmoptionNoArg, (caddr_t)"on" },
|
||||||
{ "-debugmsg", ".debugmsg", XrmoptionSepArg, (caddr_t)NULL },
|
{ "-debugmsg", ".debugmsg", XrmoptionSepArg, (caddr_t)NULL },
|
||||||
{ "-dll", ".dll", XrmoptionSepArg, (caddr_t)NULL }
|
{ "-dll", ".dll", XrmoptionSepArg, (caddr_t)NULL },
|
||||||
|
{ "-allowreadonly", ".allowreadonly", XrmoptionNoArg, (caddr_t)"on" }
|
||||||
};
|
};
|
||||||
|
|
||||||
#define NB_OPTIONS (sizeof(optionsTable) / sizeof(optionsTable[0]))
|
#define NB_OPTIONS (sizeof(optionsTable) / sizeof(optionsTable[0]))
|
||||||
|
@ -112,7 +114,8 @@ static XrmOptionDescRec optionsTable[] =
|
||||||
" -spy file Turn on message spying to the specified file\n" \
|
" -spy file Turn on message spying to the specified file\n" \
|
||||||
" -relaydbg Obsolete. Use -debugmsg +relay instead\n" \
|
" -relaydbg Obsolete. Use -debugmsg +relay instead\n" \
|
||||||
" -debugmsg name Turn debugging-messages on or off\n" \
|
" -debugmsg name Turn debugging-messages on or off\n" \
|
||||||
" -dll name Enable or disable built-in DLLs\n"
|
" -dll name Enable or disable built-in DLLs\n" \
|
||||||
|
" -allowreadonly Read only files may be opened in write mode\n"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -353,6 +356,8 @@ static void MAIN_ParseOptions( int *argc, char *argv[] )
|
||||||
Options.backingstore = TRUE;
|
Options.backingstore = TRUE;
|
||||||
if (MAIN_GetResource( db, ".debug", &value ))
|
if (MAIN_GetResource( db, ".debug", &value ))
|
||||||
Options.debug = TRUE;
|
Options.debug = TRUE;
|
||||||
|
if (MAIN_GetResource( db, ".allowreadonly", &value ))
|
||||||
|
Options.allowReadOnly = TRUE;
|
||||||
if (MAIN_GetResource( db, ".spy", &value))
|
if (MAIN_GetResource( db, ".spy", &value))
|
||||||
Options.spyFilename = value.addr;
|
Options.spyFilename = value.addr;
|
||||||
if (MAIN_GetResource( db, ".depth", &value))
|
if (MAIN_GetResource( db, ".depth", &value))
|
||||||
|
@ -514,7 +519,6 @@ static void called_at_exit(void)
|
||||||
sync_profiles();
|
sync_profiles();
|
||||||
MAIN_RestoreSetup();
|
MAIN_RestoreSetup();
|
||||||
WSACleanup();
|
WSACleanup();
|
||||||
CleanupSelectors();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -569,7 +573,6 @@ int main( int argc, char *argv[] )
|
||||||
if (Options.desktopGeometry) MAIN_CreateDesktop( argc, argv );
|
if (Options.desktopGeometry) MAIN_CreateDesktop( argc, argv );
|
||||||
else rootWindow = DefaultRootWindow( display );
|
else rootWindow = DefaultRootWindow( display );
|
||||||
|
|
||||||
InitSelectors();
|
|
||||||
MAIN_SaveSetup();
|
MAIN_SaveSetup();
|
||||||
DOS_InitFS();
|
DOS_InitFS();
|
||||||
Comm_Init();
|
Comm_Init();
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue