Release 961215
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch> * [graphics/x11drv/bitblt.c] Fixed BITBLT_StretchImage for partially covered or inverted bitmaps. * [objects/dib.c] Fixed the upside-down bitmap problem. Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk> * [if1632/user32.spec] IsMenu and RemoveMenu added (use existing Win16 functions). * [include/windows.h] Corrections to BITMAPINFOHEADER structure. * [loader/module.c] [if1632/kernel32.spec] New function GetModuleFileName32A (heavily based on original Win16 version). * [loader/pe_image.c] Hack to allow files with short PE header to be loaded (e.g. COMDLG32.DLL from Win32s). * [misc/winsock_async.c] #if out EIDRM case (not present in FreeBSD). * [tools/build.c] Remove trailing comments from .s files generated by build as these break assembly when not run through pre-processor. * [windows/graphics.c] [if1632/gdi32.spec] New function Polyline32 - based on original Polyline. Needs metafile support adding still. Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu> * [win32/findfile.c] [if1632/kernel.spec] FindFirstFile32A(): Use dos current directory for drive prefixes. FindNextFile32A(): Fill in file attribute information. Implement FindFirstFile16, FindNextFile16, FindClose16. * [files/drive.c] GetCurrentDirectory32A - Fix problem with null 3rd character in string. Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de> * [windows/painting.c][windows/message.c] Don't use linked lists to call SendMessage(), for it might destroy the current listentry. * [misc/registry.c] Fixed temporary file saving (rename doesn't work across partitions). * [files/*.c] GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*, GetVolumeInformation32W fixed. * [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec] LoadLibrary* updated to new naming std., *32W added. * [win32/console.c] [include/wincon.h] Additions for NT commandline executables. * [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c] GetUserName32W added, GetComputerName32W added, GetStartupInfo32W added, GetSystemInfo updated to NT standard. * [windows/msgbox.c][misc/shell.c][windows/graphics.c] MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added. * [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c] [if1632/ntdll.spec] Lot of new unicode functions added (needed for NT). * [loader/pe_image.c] NtCurrentTeb added. Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de> * [windows/keyboard.c] Rewrote function TranslateAccelerator(). Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de> * [windows/defwnd.c] DEFWND_SetText(): Set icon name. Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu> * [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c] [if1632/winsock.spec] IPC resource cleanup, bugfixes. * [windows/dialog.c] [windows/defdlg.c] More DefDlgProc() fixes. Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com> * [misc/clipboard.c] [objects/font.c] [win32/init.c] [win32/newfns.c] [windows/graphics.c] Added a few WIN32 functions which needed to run some win32 accessories. Clock should now work almost as well as 16 bit version. Add: RegisterClipboardFormat32W GetTextExtentExPoint32* GetModuleHandleW, DisableThreadLibraryCalls (empty stub), Polygon32 Fix: Polygon16 possible memory leak on error return.
This commit is contained in:
parent
7e6ae4ba5e
commit
b1bac32007
15
ANNOUNCE
15
ANNOUNCE
|
@ -1,13 +1,12 @@
|
||||||
This is release 961208 of Wine, the MS Windows emulator. This is still a
|
This is release 961215 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 correctly.
|
features. Most applications still do not work correctly.
|
||||||
|
|
||||||
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
||||||
forget to include a ChangeLog entry.
|
forget to include a ChangeLog entry.
|
||||||
|
|
||||||
WHAT'S NEW with Wine-961208: (see ChangeLog for details)
|
WHAT'S NEW with Wine-961215: (see ChangeLog for details)
|
||||||
- Win32 hooks.
|
- Tons of new Win32 stuff.
|
||||||
- fnt2bdf font conversion tool.
|
|
||||||
- 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.
|
||||||
|
@ -16,10 +15,10 @@ 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:
|
||||||
|
|
||||||
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-961208.tar.gz
|
ftp://sunsite.unc.edu/pub/Linux/ALPHA/wine/development/Wine-961215.tar.gz
|
||||||
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-961208.tar.gz
|
ftp://tsx-11.mit.edu/pub/linux/ALPHA/Wine/development/Wine-961215.tar.gz
|
||||||
ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-961208.tar.gz
|
ftp://ftp.infomagic.com/pub/mirrors/linux/wine/development/Wine-961215.tar.gz
|
||||||
ftp://aris.com/pub/linux/ALPHA/Wine/development/Wine-961208.tar.gz
|
ftp://aris.com/pub/linux/ALPHA/Wine/development/Wine-961215.tar.gz
|
||||||
|
|
||||||
It should also be available from any site that mirrors tsx-11 or sunsite.
|
It should also be available from any site that mirrors tsx-11 or sunsite.
|
||||||
|
|
||||||
|
|
16
BUGS
16
BUGS
|
@ -5,7 +5,7 @@ done something for one of the problems. You are encouraged to
|
||||||
add new entries and, more importantly, remove those for the
|
add new entries and, more importantly, remove those for the
|
||||||
bugs you fixed ;-)
|
bugs you fixed ;-)
|
||||||
------------------------------------------------------------
|
------------------------------------------------------------
|
||||||
As of Dec 1 1996 -
|
As of Dec 15 1996 -
|
||||||
|
|
||||||
General:
|
General:
|
||||||
|
|
||||||
|
@ -15,10 +15,19 @@ General:
|
||||||
* Font mapping is too generic. No soft font loading, no rotated
|
* Font mapping is too generic. No soft font loading, no rotated
|
||||||
text support. [alex@amadeus.pharm.sunysb.edu]
|
text support. [alex@amadeus.pharm.sunysb.edu]
|
||||||
|
|
||||||
* No thread support in Win32 code.
|
* No thread/process/kernel-object support in Win32 code.
|
||||||
|
|
||||||
* Very alpha printing code. [john@division.co.uk]
|
* Very alpha printing code. [john@division.co.uk]
|
||||||
|
|
||||||
|
* No OLE and OLE32 support (including OLE interfaces etc.).
|
||||||
|
|
||||||
|
* No MS Video support (perhaps interface with xanim).
|
||||||
|
|
||||||
|
* No COMDLG32 support. (Needed badly, the Windows95 comdlg32.dll
|
||||||
|
doesn't work with WINE.)
|
||||||
|
|
||||||
|
* No COMMCTRL/COMCTL32 support.
|
||||||
|
|
||||||
* No icon titles.
|
* No icon titles.
|
||||||
- Windows uses a special window class to display icon titles.
|
- Windows uses a special window class to display icon titles.
|
||||||
Handles to these title windows are stored in the icon window
|
Handles to these title windows are stored in the icon window
|
||||||
|
@ -29,9 +38,6 @@ Miscellaneous:
|
||||||
* Simple OLE actions were working in October release, got
|
* Simple OLE actions were working in October release, got
|
||||||
broken in November (in Winword "Insert Object" now results in
|
broken in November (in Winword "Insert Object" now results in
|
||||||
segfault right after the call to LoadModule()).
|
segfault right after the call to LoadModule()).
|
||||||
* Write and other applications have problems with displaying partially
|
|
||||||
obscured bitmaps.
|
|
||||||
* Asynchronous Winsock services sometimes produce zombie processes.
|
|
||||||
* AllocCSToDSAlias() shouldn't alloc alias for the same segment multiple
|
* AllocCSToDSAlias() shouldn't alloc alias for the same segment multiple
|
||||||
times.
|
times.
|
||||||
* ScrollWindowEx() is outdated.
|
* ScrollWindowEx() is outdated.
|
||||||
|
|
112
ChangeLog
112
ChangeLog
|
@ -1,3 +1,115 @@
|
||||||
|
----------------------------------------------------------------------
|
||||||
|
Sun Dec 15 16:18:15 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
|
||||||
|
|
||||||
|
* [graphics/x11drv/bitblt.c]
|
||||||
|
Fixed BITBLT_StretchImage for partially covered or inverted
|
||||||
|
bitmaps.
|
||||||
|
|
||||||
|
* [objects/dib.c]
|
||||||
|
Fixed the upside-down bitmap problem.
|
||||||
|
|
||||||
|
Sat Dec 14 02:49:57 1996 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
|
||||||
|
|
||||||
|
* [if1632/user32.spec]
|
||||||
|
IsMenu and RemoveMenu added (use existing Win16 functions).
|
||||||
|
|
||||||
|
* [include/windows.h]
|
||||||
|
Corrections to BITMAPINFOHEADER structure.
|
||||||
|
|
||||||
|
* [loader/module.c] [if1632/kernel32.spec]
|
||||||
|
New function GetModuleFileName32A (heavily based on original
|
||||||
|
Win16 version).
|
||||||
|
|
||||||
|
* [loader/pe_image.c]
|
||||||
|
Hack to allow files with short PE header to be loaded (e.g.
|
||||||
|
COMDLG32.DLL from Win32s).
|
||||||
|
|
||||||
|
* [misc/winsock_async.c]
|
||||||
|
#if out EIDRM case (not present in FreeBSD).
|
||||||
|
|
||||||
|
* [tools/build.c]
|
||||||
|
Remove trailing comments from .s files generated by build
|
||||||
|
as these break assembly when not run through pre-processor.
|
||||||
|
|
||||||
|
* [windows/graphics.c] [if1632/gdi32.spec]
|
||||||
|
New function Polyline32 - based on original Polyline. Needs
|
||||||
|
metafile support adding still.
|
||||||
|
|
||||||
|
Fri Dec 13 13:04:06 1996 Bruce Milner <Bruce.Milner@genetics.utah.edu>
|
||||||
|
|
||||||
|
* [win32/findfile.c] [if1632/kernel.spec]
|
||||||
|
FindFirstFile32A(): Use dos current directory for drive prefixes.
|
||||||
|
FindNextFile32A(): Fill in file attribute information.
|
||||||
|
Implement FindFirstFile16, FindNextFile16, FindClose16.
|
||||||
|
|
||||||
|
* [files/drive.c]
|
||||||
|
GetCurrentDirectory32A - Fix problem with null 3rd character in
|
||||||
|
string.
|
||||||
|
|
||||||
|
Tue Dec 10 14:49:07 1996 Marcus Meissner <msmeissn@cip.informatik.uni-erlangen.de>
|
||||||
|
|
||||||
|
* [windows/painting.c][windows/message.c]
|
||||||
|
Don't use linked lists to call SendMessage(), for it might destroy
|
||||||
|
the current listentry.
|
||||||
|
|
||||||
|
* [misc/registry.c]
|
||||||
|
Fixed temporary file saving (rename doesn't work across
|
||||||
|
partitions).
|
||||||
|
|
||||||
|
* [files/*.c]
|
||||||
|
GetFullPathName*,GetDriveType32A fixed, CreateDirectoryEx*,
|
||||||
|
GetVolumeInformation32W fixed.
|
||||||
|
|
||||||
|
* [win32/process.c][if1632/kernel.spec][if1632/kernel32.spec]
|
||||||
|
LoadLibrary* updated to new naming std., *32W added.
|
||||||
|
|
||||||
|
* [win32/console.c] [include/wincon.h]
|
||||||
|
Additions for NT commandline executables.
|
||||||
|
|
||||||
|
* [if1632/advapi32.spec][if1632/kernel32.spec][win32/init.c]
|
||||||
|
GetUserName32W added, GetComputerName32W added,
|
||||||
|
GetStartupInfo32W added, GetSystemInfo updated to NT standard.
|
||||||
|
|
||||||
|
* [windows/msgbox.c][misc/shell.c][windows/graphics.c]
|
||||||
|
MessageBox32W, ShellAbout32W, CommandLineToArgvW, Polygon32 added.
|
||||||
|
|
||||||
|
* [misc/crtdll.c][include/crtdll.h][if1632/crtdll.spec][misc/ntdll.c]
|
||||||
|
[if1632/ntdll.spec]
|
||||||
|
Lot of new unicode functions added (needed for NT).
|
||||||
|
|
||||||
|
* [loader/pe_image.c]
|
||||||
|
NtCurrentTeb added.
|
||||||
|
|
||||||
|
Tue Dec 10 22:39:33 1996 Albrecht Kleine <kleine@ak.sax.de>
|
||||||
|
|
||||||
|
* [windows/keyboard.c]
|
||||||
|
Rewrote function TranslateAccelerator().
|
||||||
|
|
||||||
|
Mon Dec 9 14:52:13 1996 Slaven Rezic <eserte@cs.tu-berlin.de>
|
||||||
|
|
||||||
|
* [windows/defwnd.c]
|
||||||
|
DEFWND_SetText(): Set icon name.
|
||||||
|
|
||||||
|
Sun Dec 8 23:30:00 1996 Alex Korobka <alex@trantor.pharm.sunysb.edu>
|
||||||
|
|
||||||
|
* [loader/signal.c] [misc/winsock.c] [misc/winsock_async.c]
|
||||||
|
[if1632/winsock.spec]
|
||||||
|
IPC resource cleanup, bugfixes.
|
||||||
|
|
||||||
|
* [windows/dialog.c] [windows/defdlg.c]
|
||||||
|
More DefDlgProc() fixes.
|
||||||
|
|
||||||
|
Sun Dec 8 14:01:42 1996 Vadim Strizhevsky <striv@ms.com>
|
||||||
|
|
||||||
|
* [misc/clipboard.c] [objects/font.c] [win32/init.c]
|
||||||
|
[win32/newfns.c] [windows/graphics.c]
|
||||||
|
Added a few WIN32 functions which needed to run some win32
|
||||||
|
accessories. Clock should now work almost as well as 16 bit version.
|
||||||
|
Add: RegisterClipboardFormat32W GetTextExtentExPoint32*
|
||||||
|
GetModuleHandleW, DisableThreadLibraryCalls (empty stub),
|
||||||
|
Polygon32
|
||||||
|
Fix: Polygon16 possible memory leak on error return.
|
||||||
|
|
||||||
----------------------------------------------------------------------
|
----------------------------------------------------------------------
|
||||||
Sun Dec 8 14:51:57 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
|
Sun Dec 8 14:51:57 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
|
||||||
|
|
||||||
|
|
|
@ -483,11 +483,6 @@ LRESULT EditWndProc(HWND hwnd, UINT msg, WPARAM16 wParam, LPARAM lParam)
|
||||||
lResult = EDIT_WM_VScroll(wndPtr, wParam, lParam);
|
lResult = EDIT_WM_VScroll(wndPtr, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
/* Some programs pass messages obtained through
|
|
||||||
* RegisterWindowMessage() (>= 0xc000); we just ignore them
|
|
||||||
*/
|
|
||||||
if ((msg >= WM_USER) && (msg < 0xc000))
|
|
||||||
fprintf(stdnimp, "edit: undocumented message %d >= WM_USER, please report.\n", msg);
|
|
||||||
lResult = DefWindowProc16(hwnd, msg, wParam, lParam);
|
lResult = DefWindowProc16(hwnd, msg, wParam, lParam);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1204,8 +1204,8 @@ static void LISTBOX_MoveCaret( WND *wnd, LB_DESCR *descr, INT32 index,
|
||||||
INT32 last = MAX( descr->focus_item, descr->anchor_item );
|
INT32 last = MAX( descr->focus_item, descr->anchor_item );
|
||||||
if (first > 0)
|
if (first > 0)
|
||||||
LISTBOX_SelectItemRange( wnd, descr, 0, first - 1, FALSE );
|
LISTBOX_SelectItemRange( wnd, descr, 0, first - 1, FALSE );
|
||||||
LISTBOX_SelectItemRange( wnd, descr, first, last, TRUE );
|
|
||||||
LISTBOX_SelectItemRange( wnd, descr, last + 1, -1, FALSE );
|
LISTBOX_SelectItemRange( wnd, descr, last + 1, -1, FALSE );
|
||||||
|
LISTBOX_SelectItemRange( wnd, descr, first, last, TRUE );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (!(descr->style & LBS_MULTIPLESEL) && (descr->selected_item != -1))
|
else if (!(descr->style & LBS_MULTIPLESEL) && (descr->selected_item != -1))
|
||||||
|
|
|
@ -98,23 +98,25 @@ void DEBUG_Help(void)
|
||||||
static const char * const helptext[] =
|
static const char * const helptext[] =
|
||||||
{
|
{
|
||||||
"The commands accepted by the Wine debugger are a small subset",
|
"The commands accepted by the Wine debugger are a small subset",
|
||||||
"of the commands that gdb would accept. The commands currently",
|
"of the commands that gdb would accept.",
|
||||||
"are:\n",
|
"The commands currently are:",
|
||||||
" break [*<addr>] delete break bpnum",
|
" break [*<addr>] delete break bpnum",
|
||||||
" disable bpnum enable bpnum",
|
" disable bpnum enable bpnum",
|
||||||
" help quit",
|
" help quit",
|
||||||
" x <addr> cont",
|
" bt cont",
|
||||||
" step next",
|
" step next",
|
||||||
" mode [16,32] print <expr>",
|
" x <addr> print <expr>",
|
||||||
" set <reg> = <expr> set *<addr> = <expr>",
|
" set <reg> = <expr> set *<addr> = <expr>",
|
||||||
" walk [wnd] <expr> dump [wnd, queue] <expr>",
|
|
||||||
" info [reg,stack,break,segments] bt",
|
|
||||||
" symbolfile <filename> define <identifier> <addr>",
|
" symbolfile <filename> define <identifier> <addr>",
|
||||||
" list <addr> ",
|
" list <addr>\n",
|
||||||
"",
|
|
||||||
|
"Wine-specific commands:",
|
||||||
|
" mode [16,32] walk [wnd,class,queue] <handle>",
|
||||||
|
" info [reg,stack,break,segments] info [wnd, queue] <handle>\n",
|
||||||
|
|
||||||
"The 'x' command accepts repeat counts and formats (including 'i') in the",
|
"The 'x' command accepts repeat counts and formats (including 'i') in the",
|
||||||
"same way that gdb does.",
|
"same way that gdb does.\n",
|
||||||
"",
|
|
||||||
" The following are examples of legal expressions:",
|
" The following are examples of legal expressions:",
|
||||||
" $eax $eax+0x3 0x1000 ($eip + 256) *$eax *($esp + 3)",
|
" $eax $eax+0x3 0x1000 ($eip + 256) *$eax *($esp + 3)",
|
||||||
" Also, a nm format symbol table can be read from a file using the",
|
" Also, a nm format symbol table can be read from a file using the",
|
||||||
|
|
|
@ -892,14 +892,39 @@ DWORD GetFullPathName32A( LPCSTR fn, DWORD buflen, LPSTR buf, LPSTR *lastpart)
|
||||||
{
|
{
|
||||||
dprintf_file(stddeb,"GetFullPathNameA(%s)\n",fn);
|
dprintf_file(stddeb,"GetFullPathNameA(%s)\n",fn);
|
||||||
/* FIXME */
|
/* FIXME */
|
||||||
if (buf)
|
if (buf) {
|
||||||
{
|
|
||||||
lstrcpyn32A(buf,fn,buflen);
|
lstrcpyn32A(buf,fn,buflen);
|
||||||
if (lastpart) *lastpart = strrchr(buf,'\\');
|
if (lastpart) {
|
||||||
|
*lastpart = strrchr(buf,'\\');
|
||||||
|
if (!*lastpart) *lastpart=buf;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return strlen(fn);
|
return strlen(fn);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetFullPathName32W (KERNEL32.273)
|
||||||
|
*/
|
||||||
|
DWORD GetFullPathName32W(LPCWSTR fn,DWORD buflen,LPWSTR buf,LPWSTR *lastpart) {
|
||||||
|
LPWSTR x;
|
||||||
|
|
||||||
|
dprintf_file(stddeb,"GetFullPathNameW(%p)\n",fn);
|
||||||
|
/* FIXME */
|
||||||
|
if (buf) {
|
||||||
|
lstrcpyn32W(buf,fn,buflen);
|
||||||
|
if (lastpart) {
|
||||||
|
x = buf+lstrlen32W(buf)-1;
|
||||||
|
while (x>=buf && *x!='\\')
|
||||||
|
x--;
|
||||||
|
if (x>=buf)
|
||||||
|
*lastpart=x;
|
||||||
|
else
|
||||||
|
*lastpart=buf;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return lstrlen32W(fn);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DosDateTimeToFileTime (KERNEL32.76)
|
* DosDateTimeToFileTime (KERNEL32.76)
|
||||||
|
|
|
@ -603,7 +603,7 @@ UINT16 GetDriveType16( UINT16 drive )
|
||||||
UINT32 GetDriveType32A( LPCSTR root )
|
UINT32 GetDriveType32A( LPCSTR root )
|
||||||
{
|
{
|
||||||
dprintf_dosfs( stddeb, "GetDriveType32A(%s)\n", root );
|
dprintf_dosfs( stddeb, "GetDriveType32A(%s)\n", root );
|
||||||
if ((root[1] != ':') || (root[2] != '\\'))
|
if (root[1] != ':')
|
||||||
{
|
{
|
||||||
fprintf( stderr, "GetDriveType32A: invalid root '%s'\n", root );
|
fprintf( stderr, "GetDriveType32A: invalid root '%s'\n", root );
|
||||||
return DRIVE_DOESNOTEXIST;
|
return DRIVE_DOESNOTEXIST;
|
||||||
|
@ -657,9 +657,9 @@ UINT32 GetCurrentDirectory32A( UINT32 buflen, LPSTR buf )
|
||||||
*buf = '\0';
|
*buf = '\0';
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
lstrcpyn32A( buf, pref, 3 );
|
lstrcpyn32A( buf, pref, MIN( 4, buflen ) );
|
||||||
if (buflen) buf[0] += DRIVE_GetCurrentDrive();
|
if (buflen) buf[0] += DRIVE_GetCurrentDrive();
|
||||||
if (buflen >= 3) lstrcpyn32A( buf + 3, s, buflen - 3 );
|
if (buflen > 3) lstrcpyn32A( buf + 3, s, buflen - 3 );
|
||||||
return strlen(s) + 3; /* length of WHOLE current directory */
|
return strlen(s) + 3; /* length of WHOLE current directory */
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -682,7 +682,7 @@ UINT32 GetCurrentDirectory32W( UINT32 buflen, LPWSTR buf )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SetCurrentDirectory (KERNEL.412)
|
* SetCurrentDirectory (KERNEL.412)
|
||||||
*/
|
*/
|
||||||
BOOL32 SetCurrentDirectory( LPCSTR dir )
|
BOOL16 SetCurrentDirectory16( LPCSTR dir )
|
||||||
{
|
{
|
||||||
if (dir[0] && (dir[1]==':'))
|
if (dir[0] && (dir[1]==':'))
|
||||||
{
|
{
|
||||||
|
@ -698,6 +698,30 @@ BOOL32 SetCurrentDirectory( LPCSTR dir )
|
||||||
return DRIVE_Chdir( DRIVE_GetCurrentDrive(), dir );
|
return DRIVE_Chdir( DRIVE_GetCurrentDrive(), dir );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetCurrentDirectory32A (KERNEL32.479)
|
||||||
|
*/
|
||||||
|
BOOL32 SetCurrentDirectory32A( LPCSTR dir )
|
||||||
|
{
|
||||||
|
/* FIXME: Unauthorized Windows 95 mentions that SetCurrentDirectory
|
||||||
|
* may change drive and current directory for there is no drive based
|
||||||
|
* currentdir table?
|
||||||
|
*/
|
||||||
|
return SetCurrentDirectory16(dir);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetCurrentDirectory32W (KERNEL32.480)
|
||||||
|
*/
|
||||||
|
BOOL32 SetCurrentDirectory32W( LPCWSTR dirW)
|
||||||
|
{
|
||||||
|
LPSTR dir = STRING32_DupUniToAnsi(dirW);
|
||||||
|
BOOL32 res = SetCurrentDirectory32A(dir);
|
||||||
|
|
||||||
|
free(dir);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetLogicalDriveStrings32A (KERNEL32.231)
|
* GetLogicalDriveStrings32A (KERNEL32.231)
|
||||||
|
@ -807,19 +831,19 @@ BOOL32 GetVolumeInformation32W( LPCWSTR root, LPWSTR label, DWORD label_len,
|
||||||
DWORD *serial, DWORD *filename_len,
|
DWORD *serial, DWORD *filename_len,
|
||||||
DWORD *flags, LPWSTR fsname, DWORD fsname_len)
|
DWORD *flags, LPWSTR fsname, DWORD fsname_len)
|
||||||
{
|
{
|
||||||
LPSTR xroot = STRING32_DupUniToAnsi(root);
|
LPSTR xroot = root?STRING32_DupUniToAnsi(root):NULL;
|
||||||
LPSTR xvolname = (char*)xmalloc( label_len );
|
LPSTR xvolname = label?(char*)xmalloc( label_len ):NULL;
|
||||||
LPSTR xfsname = (char*)xmalloc( fsname_len );
|
LPSTR xfsname = fsname?(char*)xmalloc( fsname_len ):NULL;
|
||||||
BOOL32 ret = GetVolumeInformation32A( xroot, xvolname, label_len, serial,
|
BOOL32 ret = GetVolumeInformation32A( xroot, xvolname, label_len, serial,
|
||||||
filename_len, flags, xfsname,
|
filename_len, flags, xfsname,
|
||||||
fsname_len );
|
fsname_len );
|
||||||
if (ret)
|
if (ret)
|
||||||
{
|
{
|
||||||
STRING32_AnsiToUni( label, xvolname );
|
if (label) STRING32_AnsiToUni( label, xvolname );
|
||||||
STRING32_AnsiToUni( fsname, xfsname );
|
if (fsname) STRING32_AnsiToUni( fsname, xfsname );
|
||||||
}
|
}
|
||||||
free(xroot);
|
if (xroot) free(xroot);
|
||||||
free(xvolname);
|
if (xvolname) free(xvolname);
|
||||||
free(xfsname);
|
if (xfsname) free(xfsname);
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
21
files/file.c
21
files/file.c
|
@ -737,7 +737,7 @@ HFILE OpenFile( LPCSTR name, OFSTRUCT *ofs, UINT32 mode )
|
||||||
|
|
||||||
if (GetCurrentTask())
|
if (GetCurrentTask())
|
||||||
{
|
{
|
||||||
GetModuleFileName( GetCurrentTask(), ofs->szPathName, len );
|
GetModuleFileName16( GetCurrentTask(), ofs->szPathName, len );
|
||||||
if ((p = strrchr( ofs->szPathName, '\\' )))
|
if ((p = strrchr( ofs->szPathName, '\\' )))
|
||||||
{
|
{
|
||||||
strcpy( p + 1, name );
|
strcpy( p + 1, name );
|
||||||
|
@ -863,7 +863,7 @@ DWORD SearchPath32A(
|
||||||
|
|
||||||
/* Try the path of the current executable */
|
/* Try the path of the current executable */
|
||||||
if (GetCurrentTask()) {
|
if (GetCurrentTask()) {
|
||||||
GetModuleFileName(GetCurrentTask(),testpath,len);
|
GetModuleFileName16(GetCurrentTask(),testpath,len);
|
||||||
if ((p=strrchr(testpath,'\\'))) {
|
if ((p=strrchr(testpath,'\\'))) {
|
||||||
strcpy(p+1,name);
|
strcpy(p+1,name);
|
||||||
if ((unixName=DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE)))
|
if ((unixName=DOSFS_GetUnixFileName((LPCSTR)testpath,TRUE)))
|
||||||
|
@ -1334,6 +1334,23 @@ BOOL32 CreateDirectory32W( LPCWSTR path, LPSECURITY_ATTRIBUTES lpsecattribs )
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* CreateDirectoryEx32A (KERNEL32.40)
|
||||||
|
*/
|
||||||
|
BOOL32 CreateDirectoryEx32A( LPCSTR template, LPCSTR path,
|
||||||
|
LPSECURITY_ATTRIBUTES lpsecattribs)
|
||||||
|
{
|
||||||
|
return CreateDirectory32A(path,lpsecattribs);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* CreateDirectoryEx32W (KERNEL32.41)
|
||||||
|
*/
|
||||||
|
BOOL32 CreateDirectoryEx32W( LPCWSTR template, LPCWSTR path,
|
||||||
|
LPSECURITY_ATTRIBUTES lpsecattribs)
|
||||||
|
{
|
||||||
|
return CreateDirectory32W(path,lpsecattribs);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* RemoveDirectory16 (KERNEL)
|
* RemoveDirectory16 (KERNEL)
|
||||||
|
|
|
@ -32,7 +32,7 @@ static BOOL16 windrvExtTextOut16( DC *dc, INT16 x, INT16 y, UINT16 flags, const
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
static BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
||||||
LPCSTR output, const DEVMODE* initData );
|
LPCSTR output, const DEVMODE16* initData );
|
||||||
static INT32 WIN16DRV_Escape( DC *dc, INT32 nEscape, INT32 cbInput,
|
static INT32 WIN16DRV_Escape( DC *dc, INT32 nEscape, INT32 cbInput,
|
||||||
SEGPTR lpInData, SEGPTR lpOutData );
|
SEGPTR lpInData, SEGPTR lpOutData );
|
||||||
|
|
||||||
|
@ -284,7 +284,7 @@ static LOADED_PRINTER_DRIVER *LoadPrinterDriver(const char *pszDriver)
|
||||||
char *drvName = malloc(strlen(pszDriver)+5);
|
char *drvName = malloc(strlen(pszDriver)+5);
|
||||||
strcpy(drvName, pszDriver);
|
strcpy(drvName, pszDriver);
|
||||||
strcat(drvName, ".DRV");
|
strcat(drvName, ".DRV");
|
||||||
hInst = LoadLibrary(drvName);
|
hInst = LoadLibrary16(drvName);
|
||||||
}
|
}
|
||||||
dprintf_win16drv(stddeb, "Loaded the library\n");
|
dprintf_win16drv(stddeb, "Loaded the library\n");
|
||||||
|
|
||||||
|
@ -611,7 +611,7 @@ DWORD PRTDRV_RealizeObject(LPPDEVICE lpDestDev, WORD wStyle,
|
||||||
|
|
||||||
|
|
||||||
BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output,
|
BOOL32 WIN16DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device, LPCSTR output,
|
||||||
const DEVMODE* initData )
|
const DEVMODE16* initData )
|
||||||
{
|
{
|
||||||
LOADED_PRINTER_DRIVER *pLPD;
|
LOADED_PRINTER_DRIVER *pLPD;
|
||||||
WORD wRet;
|
WORD wRet;
|
||||||
|
@ -1146,7 +1146,7 @@ int WriteDialog(HANDLE16 hJob, LPSTR lpMsg, WORD cchMsg)
|
||||||
|
|
||||||
dprintf_win16drv(stddeb, "WriteDialog: %04x %04x \"%s\"\n", hJob, cchMsg, lpMsg);
|
dprintf_win16drv(stddeb, "WriteDialog: %04x %04x \"%s\"\n", hJob, cchMsg, lpMsg);
|
||||||
|
|
||||||
nRet = MessageBox(NULL, lpMsg, "Printing Error", MB_OKCANCEL);
|
nRet = MessageBox16(0, lpMsg, "Printing Error", MB_OKCANCEL);
|
||||||
return nRet;
|
return nRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
255
graphics/wing.c
255
graphics/wing.c
|
@ -4,41 +4,86 @@
|
||||||
* Started by Robert Pouliot <krynos@clic.net>
|
* Started by Robert Pouliot <krynos@clic.net>
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "gdi.h"
|
#include <X11/Xlib.h>
|
||||||
|
#include <X11/extensions/XShm.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/ipc.h>
|
||||||
|
#include <sys/shm.h>
|
||||||
|
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
#include "bitmap.h"
|
||||||
|
#include "dc.h"
|
||||||
|
#include "gdi.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
typedef enum WING_DITHER_TYPE
|
||||||
|
{
|
||||||
|
WING_DISPERSED_4x4, WING_DISPERSED_8x8, WING_CLUSTERED_4x4
|
||||||
|
} WING_DITHER_TYPE;
|
||||||
|
|
||||||
|
static int __WinGOK = -1;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* WinG DIB bitmaps can be selected into DC and then scribbled upon
|
||||||
|
* by GDI functions. They can also be changed directly. This gives us
|
||||||
|
* three choices
|
||||||
|
* - use original WinG 16-bit DLL
|
||||||
|
* requires working 16-bit driver interface
|
||||||
|
* - implement DIB graphics driver from scratch
|
||||||
|
* see wing.zip size
|
||||||
|
* - use shared pixmaps
|
||||||
|
* won't work with some videocards and/or videomodes
|
||||||
|
* 961208 - AK
|
||||||
|
*/
|
||||||
|
|
||||||
|
static BITMAPINFOHEADER __bmpiWinG = { 0, 1, -1, 1, 8, BI_RGB, 1, 0, 0, 0, 0 };
|
||||||
|
|
||||||
|
static void __initWinG()
|
||||||
|
{
|
||||||
|
if( __WinGOK < 0 )
|
||||||
|
{
|
||||||
|
Status s = XShmQueryExtension(display);
|
||||||
|
if( s )
|
||||||
|
{
|
||||||
|
int i = XShmPixmapFormat(display);
|
||||||
|
if( i == ZPixmap && screenDepth == 8 )
|
||||||
|
{
|
||||||
|
__WinGOK = True;
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
fprintf(stdnimp,"WinG: no joy.\n");
|
||||||
|
__WinGOK = False;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WingCreateDC16 (WING.1001)
|
* WinGCreateDC16 (WING.1001)
|
||||||
*/
|
*/
|
||||||
HDC16 WinGCreateDC16(void)
|
HDC16 WinGCreateDC16(void)
|
||||||
{
|
{
|
||||||
/* FIXME: Probably wrong... */
|
__initWinG();
|
||||||
return CreateDC("DISPLAY", NULL, NULL, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
if( __WinGOK > 0 )
|
||||||
|
return CreateCompatibleDC(NULL);
|
||||||
|
return (HDC16)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WinGRecommendDIBFormat16 (WING.1002)
|
* WinGRecommendDIBFormat16 (WING.1002)
|
||||||
*/
|
*/
|
||||||
BOOL16 WinGRecommendDIBFormat16(BITMAPINFO *fmt)
|
BOOL16 WinGRecommendDIBFormat16(BITMAPINFO *fmt)
|
||||||
{
|
{
|
||||||
HDC16 i=GetDC16(0);
|
fprintf(stdnimp,"WinGRecommendDIBFormat()\n");
|
||||||
|
|
||||||
fmt->bmiHeader.biSize=sizeof(BITMAPINFOHEADER);
|
if( __WinGOK > 0 && fmt )
|
||||||
fmt->bmiHeader.biWidth=0;
|
{
|
||||||
fmt->bmiHeader.biHeight=1; /* The important part */
|
memcpy(&fmt->bmiHeader, &__bmpiWinG, sizeof(BITMAPINFOHEADER));
|
||||||
fmt->bmiHeader.biPlanes=GetDeviceCaps(i, PLANES);
|
return TRUE;
|
||||||
fmt->bmiHeader.biBitCount=GetDeviceCaps(i, BITSPIXEL);
|
}
|
||||||
fmt->bmiHeader.biCompression=BI_RGB;
|
return FALSE;
|
||||||
fmt->bmiHeader.biSizeImage=0;
|
|
||||||
fmt->bmiHeader.biXPelsPerMeter=1000/25.4*GetDeviceCaps(i,LOGPIXELSX);
|
|
||||||
fmt->bmiHeader.biYPelsPerMeter=1000/25.4*GetDeviceCaps(i,LOGPIXELSY);
|
|
||||||
fmt->bmiHeader.biClrUsed=0;
|
|
||||||
fmt->bmiHeader.biClrImportant=0;
|
|
||||||
ReleaseDC16(0, i);
|
|
||||||
return 1;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -46,22 +91,131 @@ BOOL16 WinGRecommendDIBFormat16(BITMAPINFO *fmt)
|
||||||
*/
|
*/
|
||||||
HBITMAP16 WinGCreateBitmap16(HDC16 winDC, BITMAPINFO *header, void **bits)
|
HBITMAP16 WinGCreateBitmap16(HDC16 winDC, BITMAPINFO *header, void **bits)
|
||||||
{
|
{
|
||||||
fprintf(stdnimp,"WinGCreateBitmap: almost empty stub! (expect failure)\n");
|
fprintf(stdnimp,"WinGCreateBitmap: empty stub! (expect failure)\n");
|
||||||
/* Assume RGB color */
|
if( __WinGOK > 0 && header )
|
||||||
if(bits==NULL)
|
{
|
||||||
return CreateDIBitmap(winDC, header, 0, bits, header, 0);
|
BITMAPINFOHEADER* bmpi = &header->bmiHeader;
|
||||||
else
|
|
||||||
return CreateDIBitmap(winDC, header, 1, bits, header, 0);
|
fprintf(stdnimp,"bytes\t=%i\nplanes\t=%i\nbpp\t=%i\nx\t=%i\ny\t=%i\nrle\t=0x%08x\nsize\t=%i\n",
|
||||||
|
(int)bmpi->biSize, bmpi->biPlanes, bmpi->biBitCount,
|
||||||
|
(int)bmpi->biWidth, (int)bmpi->biHeight, (unsigned)bmpi->biCompression, (int)bmpi->biSizeImage);
|
||||||
|
|
||||||
|
#ifdef PRELIMINARY_WING16_SUPPORT
|
||||||
|
if( bmpi->biPlanes == __bmpiWinG.biPlanes && bmpi->biBitCount == __bmpiWinG.biBitCount &&
|
||||||
|
bmpi->biCompression == __bmpiWinG.biCompression && (int)bmpi->biHeight < 0 &&
|
||||||
|
bmpi->biWidth )
|
||||||
|
{
|
||||||
|
unsigned bytes = (bmpi->biWidth + bmpi->biWidth % 2)*(-bmpi->biHeight) * bmpi->biBitCount/8;
|
||||||
|
int key = shmget(IPC_PRIVATE, bytes, IPC_CREAT | 0x01FF);
|
||||||
|
|
||||||
|
if( key )
|
||||||
|
{
|
||||||
|
/* Create the BITMAPOBJ
|
||||||
|
*
|
||||||
|
* FIXME: A facility to manage shared memory structures
|
||||||
|
* which would clean up when Wine crashes. Perhaps a part of
|
||||||
|
* IPC code can be adapted. Otherwise this code leaves a lot
|
||||||
|
* of junk in shared memory.
|
||||||
|
*/
|
||||||
|
|
||||||
|
HBITMAP16 hbitmap = GDI_AllocObject( sizeof(BITMAPOBJ), BITMAP_MAGIC );
|
||||||
|
if (hbitmap)
|
||||||
|
{
|
||||||
|
__ShmBitmapCtl* p = (__ShmBitmapCtl*)xmalloc(sizeof(__ShmBitmapCtl));
|
||||||
|
BITMAPOBJ* bmpObjPtr = (BITMAPOBJ *) GDI_HEAP_LIN_ADDR( hbitmap );
|
||||||
|
|
||||||
|
bmpObjPtr->size.cx = 0;
|
||||||
|
bmpObjPtr->size.cy = 0;
|
||||||
|
bmpObjPtr->bitmap.bmType = 0;
|
||||||
|
bmpObjPtr->bitmap.bmWidth = (INT16)abs(bmpi->biWidth);
|
||||||
|
bmpObjPtr->bitmap.bmHeight = -(INT16)bmpi->biHeight;
|
||||||
|
bmpObjPtr->bitmap.bmPlanes = (BYTE)bmpi->biPlanes;
|
||||||
|
bmpObjPtr->bitmap.bmBitsPixel = (BYTE)bmpi->biBitCount;
|
||||||
|
bmpObjPtr->bitmap.bmWidthBytes =
|
||||||
|
(INT16)BITMAP_WIDTH_BYTES( bmpObjPtr->bitmap.bmWidth, bmpi->biBitCount );
|
||||||
|
bmpObjPtr->bitmap.bmBits = (SEGPTR)p;
|
||||||
|
|
||||||
|
p->si.shmid = key;
|
||||||
|
p->si.shmaddr = shmat(key, NULL, 0);
|
||||||
|
p->si.readOnly = False;
|
||||||
|
|
||||||
|
if( p->si.shmaddr )
|
||||||
|
{
|
||||||
|
WORD sel = 0;
|
||||||
|
|
||||||
|
XShmAttach(display, &p->si);
|
||||||
|
bmpObjPtr->pixmap = XShmCreatePixmap(display, rootWindow,
|
||||||
|
p->si.shmaddr, &p->si, bmpObjPtr->bitmap.bmWidth,
|
||||||
|
bmpObjPtr->bitmap.bmHeight, bmpi->biBitCount );
|
||||||
|
if( bmpObjPtr->pixmap )
|
||||||
|
{
|
||||||
|
WORD s;
|
||||||
|
if( (sel = AllocSelectorArray( (bytes + 0xFFFF) >> 16 )) )
|
||||||
|
{
|
||||||
|
DWORD base = (DWORD)p->si.shmaddr, l;
|
||||||
|
|
||||||
|
SetSelectorBase( sel, base );
|
||||||
|
SetSelectorLimit( sel, bytes );
|
||||||
|
s = sel;
|
||||||
|
for( l = 0x10000; l < bytes ; )
|
||||||
|
{
|
||||||
|
s += __AHINCR;
|
||||||
|
SetSelectorBase( s, base + l );
|
||||||
|
l += 0x10000;
|
||||||
|
SetSelectorLimit( s, (l < bytes)?0xFFFF:bytes%0x10000);
|
||||||
|
}
|
||||||
|
p->bits = MAKELONG(0, sel);
|
||||||
|
}
|
||||||
|
else XFreePixmap( display, bmpObjPtr->pixmap );
|
||||||
|
}
|
||||||
|
if( !sel )
|
||||||
|
{
|
||||||
|
shmdt( p->si.shmaddr );
|
||||||
|
p->si.shmaddr = NULL;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if( !p->si.shmaddr )
|
||||||
|
{
|
||||||
|
GDI_FreeObject( hbitmap );
|
||||||
|
hbitmap = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return hbitmap;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WinGGetDIBPointer16 (WING.1004)
|
* WinGGetDIBPointer (WING.1004)
|
||||||
*/
|
*/
|
||||||
void* WinGGetDIBPointer16(HBITMAP16 bmap, BITMAPINFO *header)
|
SEGPTR WinGGetDIBPointer16(HBITMAP16 hWinGBitmap, BITMAPINFO* bmpi)
|
||||||
{
|
{
|
||||||
fprintf(stdnimp,"WinGGetDIBPointer16: empty stub!\n");
|
#ifdef PRELIMINARY_WING16_SUPPORT
|
||||||
return NULL;
|
BITMAPOBJ* bmp = (BITMAPOBJ *) GDI_GetObjPtr( hWinGBitmap, BITMAP_MAGIC );
|
||||||
|
|
||||||
|
if( bmp )
|
||||||
|
{
|
||||||
|
__ShmBitmapCtl* p = (__ShmBitmapCtl*)bmp->bitmap.bmBits;
|
||||||
|
if( p )
|
||||||
|
{
|
||||||
|
if( bmpi ) memcpy( bmpi, &__bmpiWinG, sizeof(BITMAPINFOHEADER));
|
||||||
|
return p->bits;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
return (SEGPTR)NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WinGSetDIBColorTable (WING.1004)
|
||||||
|
*/
|
||||||
|
UINT16 WinGSetDIBColorTable16(HDC16 hWinGDC, UINT16 start, UINT16 num, RGBQUAD* pColor)
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"WinGSetDIBColorTable: empty stub!\n");
|
||||||
|
return num;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -70,34 +224,25 @@ void* WinGGetDIBPointer16(HBITMAP16 bmap, BITMAPINFO *header)
|
||||||
UINT16 WinGGetDIBColorTable16(HDC16 winDC, UINT16 start, UINT16 numentry,
|
UINT16 WinGGetDIBColorTable16(HDC16 winDC, UINT16 start, UINT16 numentry,
|
||||||
RGBQUAD* colors)
|
RGBQUAD* colors)
|
||||||
{
|
{
|
||||||
return GetPaletteEntries(winDC, start, numentry, colors);
|
fprintf(stdnimp,"WinGGetDIBColorTable: empty stub!\n");
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
|
||||||
* WinGSetDIBColorTable16 (WING.1006)
|
|
||||||
*/
|
|
||||||
UINT16 WinGSetDIBColorTable16(HDC16 winDC, UINT16 start, UINT16 numentry,
|
|
||||||
RGBQUAD* colors)
|
|
||||||
{
|
|
||||||
return SetPaletteEntries(winDC, start, numentry, colors);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WinGCreateHalfTonePalette16 (WING.1007)
|
* WinGCreateHalfTonePalette16 (WING.1007)
|
||||||
*/
|
*/
|
||||||
HPALETTE16 WinGCreateHalfTonePalette16(void)
|
HPALETTE16 WinGCreateHalfTonePalette16(void)
|
||||||
{
|
{
|
||||||
fprintf(stdnimp,"WinGCreateHalfTonePalette16: empty stub!\n");
|
fprintf(stdnimp,"WinGCreateHalfTonePalette: empty stub!\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* WinGCreateHalfToneBrush16 (WING.1008)
|
* WinGCreateHalfToneBrush16 (WING.1008)
|
||||||
*/
|
*/
|
||||||
HPALETTE16 WinGCreateHalfToneBrush16(HDC16 winDC, COLORREF col, INT16 dithertype)
|
HPALETTE16 WinGCreateHalfToneBrush16(HDC16 winDC, COLORREF col, WING_DITHER_TYPE type)
|
||||||
{
|
{
|
||||||
fprintf(stdnimp,"WinGCreateHalfToneBrush16: empty stub!\n");
|
fprintf(stdnimp,"WinGCreateHalfToneBrush: empty stub!\n");
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -120,8 +265,26 @@ BOOL16 WinGStretchBlt16(HDC16 destDC, INT16 xDest, INT16 yDest, INT16 widDest,
|
||||||
BOOL16 WinGBitBlt16(HDC16 destDC, INT16 xDest, INT16 yDest, INT16 widDest,
|
BOOL16 WinGBitBlt16(HDC16 destDC, INT16 xDest, INT16 yDest, INT16 widDest,
|
||||||
INT16 heiDest, HDC16 srcDC, INT16 xSrc, INT16 ySrc)
|
INT16 heiDest, HDC16 srcDC, INT16 xSrc, INT16 ySrc)
|
||||||
{
|
{
|
||||||
return BitBlt16(destDC, xDest, yDest, widDest, heiDest, srcDC, xSrc, ySrc, SRCCOPY);
|
/* destDC is a display DC, srcDC is a memory DC */
|
||||||
/* fprintf(stdnimp,"WinGBitBlt16: empty stub!\n");*/
|
|
||||||
/* return 0;*/
|
DC *dcDst, *dcSrc;
|
||||||
|
|
||||||
|
if (!(dcDst = (DC *)GDI_GetObjPtr( destDC, DC_MAGIC ))) return FALSE;
|
||||||
|
if (!(dcSrc = (DC *) GDI_GetObjPtr( srcDC, DC_MAGIC ))) return FALSE;
|
||||||
|
|
||||||
|
if (dcDst->w.flags & DC_DIRTY) CLIPPING_UpdateGCRegion( dcDst );
|
||||||
|
|
||||||
|
xSrc = dcSrc->w.DCOrgX + XLPTODP( dcSrc, xSrc );
|
||||||
|
ySrc = dcSrc->w.DCOrgY + YLPTODP( dcSrc, ySrc );
|
||||||
|
xDest = dcDst->w.DCOrgX + XLPTODP( dcDst, xDest );
|
||||||
|
yDest = dcDst->w.DCOrgY + YLPTODP( dcDst, yDest );
|
||||||
|
widDest = widDest * dcDst->w.VportExtX / dcDst->w.WndExtX;
|
||||||
|
heiDest = heiDest * dcDst->w.VportExtY / dcDst->w.WndExtY;
|
||||||
|
|
||||||
|
XSetFunction( display, dcDst->u.x.gc, GXcopy );
|
||||||
|
XCopyArea( display, dcSrc->u.x.drawable,
|
||||||
|
dcDst->u.x.drawable, dcDst->u.x.gc,
|
||||||
|
xSrc, ySrc, widDest, heiDest, xDest, yDest );
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
* Copyright 1993, 1994 Alexandre Julliard
|
* Copyright 1993, 1994 Alexandre Julliard
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <assert.h>
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <X11/Xlib.h>
|
#include <X11/Xlib.h>
|
||||||
|
@ -35,6 +36,9 @@
|
||||||
|
|
||||||
#define MAX_OP_LEN 6 /* Longest opcode + 1 for the terminating 0 */
|
#define MAX_OP_LEN 6 /* Longest opcode + 1 for the terminating 0 */
|
||||||
|
|
||||||
|
#define SWAP_INT32(i1,i2) \
|
||||||
|
do { INT32 __t = *(i1); *(i1) = *(i2); *(i2) = __t; } while(0)
|
||||||
|
|
||||||
extern void CLIPPING_UpdateGCRegion(DC* );
|
extern void CLIPPING_UpdateGCRegion(DC* );
|
||||||
|
|
||||||
static const unsigned char BITBLT_Opcodes[256][MAX_OP_LEN] =
|
static const unsigned char BITBLT_Opcodes[256][MAX_OP_LEN] =
|
||||||
|
@ -522,9 +526,9 @@ main()
|
||||||
*/
|
*/
|
||||||
static void BITBLT_StretchRow( int *rowSrc, int *rowDst,
|
static void BITBLT_StretchRow( int *rowSrc, int *rowDst,
|
||||||
INT32 startDst, INT32 widthDst,
|
INT32 startDst, INT32 widthDst,
|
||||||
INT32 xinc, WORD mode )
|
INT32 xinc, INT32 xoff, WORD mode )
|
||||||
{
|
{
|
||||||
register INT32 xsrc = xinc * startDst;
|
register INT32 xsrc = xinc * startDst + xoff;
|
||||||
rowDst += startDst;
|
rowDst += startDst;
|
||||||
switch(mode)
|
switch(mode)
|
||||||
{
|
{
|
||||||
|
@ -551,9 +555,9 @@ static void BITBLT_StretchRow( int *rowSrc, int *rowDst,
|
||||||
*/
|
*/
|
||||||
static void BITBLT_ShrinkRow( int *rowSrc, int *rowDst,
|
static void BITBLT_ShrinkRow( int *rowSrc, int *rowDst,
|
||||||
INT32 startSrc, INT32 widthSrc,
|
INT32 startSrc, INT32 widthSrc,
|
||||||
INT32 xinc, WORD mode )
|
INT32 xinc, INT32 xoff, WORD mode )
|
||||||
{
|
{
|
||||||
register INT32 xdst = xinc * startSrc;
|
register INT32 xdst = xinc * startSrc + xoff;
|
||||||
rowSrc += startSrc;
|
rowSrc += startSrc;
|
||||||
switch(mode)
|
switch(mode)
|
||||||
{
|
{
|
||||||
|
@ -584,6 +588,9 @@ static void BITBLT_GetRow( XImage *image, int *pdata, INT32 row,
|
||||||
{
|
{
|
||||||
register INT32 i;
|
register INT32 i;
|
||||||
|
|
||||||
|
assert( (row >= 0) && (row < image->height) );
|
||||||
|
assert( (start >= 0) && (width <= image->width) );
|
||||||
|
|
||||||
pdata += swap ? start+width-1 : start;
|
pdata += swap ? start+width-1 : start;
|
||||||
if (image->depth == depthDst) /* color -> color */
|
if (image->depth == depthDst) /* color -> color */
|
||||||
{
|
{
|
||||||
|
@ -636,7 +643,8 @@ static void BITBLT_StretchImage( XImage *srcImage, XImage *dstImage,
|
||||||
int foreground, int background, WORD mode )
|
int foreground, int background, WORD mode )
|
||||||
{
|
{
|
||||||
int *rowSrc, *rowDst, *pixel;
|
int *rowSrc, *rowDst, *pixel;
|
||||||
INT32 xinc, yinc, ysrc, ydst;
|
char *pdata;
|
||||||
|
INT32 xinc, xoff, yinc, ysrc, ydst;
|
||||||
register INT32 x, y;
|
register INT32 x, y;
|
||||||
BOOL32 hstretch, vstretch, hswap, vswap;
|
BOOL32 hstretch, vstretch, hswap, vswap;
|
||||||
|
|
||||||
|
@ -647,9 +655,6 @@ static void BITBLT_StretchImage( XImage *srcImage, XImage *dstImage,
|
||||||
widthDst = abs(widthDst);
|
widthDst = abs(widthDst);
|
||||||
heightDst = abs(heightDst);
|
heightDst = abs(heightDst);
|
||||||
|
|
||||||
dprintf_bitblt( stddeb, "BITBLT_StretchImage: %dx%d -> %dx%d (mode=%d,h=%d,v=%d)\n",
|
|
||||||
widthSrc, heightSrc, widthDst, heightDst, mode, hswap, vswap );
|
|
||||||
|
|
||||||
if (!(rowSrc = (int *)malloc( (widthSrc+widthDst)*sizeof(int) ))) return;
|
if (!(rowSrc = (int *)malloc( (widthSrc+widthDst)*sizeof(int) ))) return;
|
||||||
rowDst = rowSrc + widthSrc;
|
rowDst = rowSrc + widthSrc;
|
||||||
|
|
||||||
|
@ -664,40 +669,112 @@ static void BITBLT_StretchImage( XImage *srcImage, XImage *dstImage,
|
||||||
hstretch = (widthSrc < widthDst);
|
hstretch = (widthSrc < widthDst);
|
||||||
vstretch = (heightSrc < heightDst);
|
vstretch = (heightSrc < heightDst);
|
||||||
|
|
||||||
xinc = hstretch ? ((int)widthSrc << 16) / widthDst :
|
if (hstretch)
|
||||||
((int)widthDst << 16) / widthSrc;
|
{
|
||||||
|
xinc = ((int)widthSrc << 16) / widthDst;
|
||||||
|
xoff = ((widthSrc << 16) - (xinc * widthDst)) / 2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
xinc = ((int)widthDst << 16) / widthSrc;
|
||||||
|
xoff = ((widthDst << 16) - (xinc * widthSrc)) / 2;
|
||||||
|
}
|
||||||
|
|
||||||
if (vstretch)
|
if (vstretch)
|
||||||
{
|
{
|
||||||
yinc = ((int)heightSrc << 16) / heightDst;
|
yinc = ((int)heightSrc << 16) / heightDst;
|
||||||
ydst = visRectDst->top;
|
ydst = visRectDst->top;
|
||||||
ysrc = yinc * ydst + (vswap ? heightSrc<<16 : 0);
|
if (vswap)
|
||||||
|
{
|
||||||
|
ysrc = yinc * (heightDst - ydst - 1);
|
||||||
|
yinc = -yinc;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
ysrc = yinc * ydst;
|
||||||
yinc = ((int)heightDst << 16) / heightSrc;
|
|
||||||
ysrc = visRectSrc->top;
|
|
||||||
ydst = yinc * ysrc - (vswap ? (heightDst-1)<<16 : 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
while(vstretch ? (ydst < visRectDst->bottom) : (ysrc < visRectSrc->bottom))
|
for ( ; (ydst < visRectDst->bottom); ysrc += yinc, ydst++)
|
||||||
{
|
{
|
||||||
|
if (((ysrc >> 16) < visRectSrc->top) ||
|
||||||
|
((ysrc >> 16) >= visRectSrc->bottom)) continue;
|
||||||
|
|
||||||
/* Retrieve a source row */
|
/* Retrieve a source row */
|
||||||
BITBLT_GetRow( srcImage, rowSrc, vstretch ? ysrc >> 16 : ysrc,
|
BITBLT_GetRow( srcImage, rowSrc, (ysrc >> 16) - visRectSrc->top,
|
||||||
visRectSrc->left, visRectSrc->right - visRectSrc->left,
|
hswap ? widthSrc - visRectSrc->right
|
||||||
|
: visRectSrc->left,
|
||||||
|
visRectSrc->right - visRectSrc->left,
|
||||||
dstImage->depth, foreground, background, hswap );
|
dstImage->depth, foreground, background, hswap );
|
||||||
|
|
||||||
/* Stretch or shrink it */
|
/* Stretch or shrink it */
|
||||||
if (hstretch)
|
if (hstretch)
|
||||||
BITBLT_StretchRow( rowSrc, rowDst, visRectDst->left +
|
BITBLT_StretchRow( rowSrc, rowDst, visRectDst->left,
|
||||||
(hswap ? widthDst : 0),
|
visRectDst->right - visRectDst->left,
|
||||||
visRectDst->right-visRectDst->left, xinc, mode);
|
xinc, xoff, mode );
|
||||||
else BITBLT_ShrinkRow( rowSrc, rowDst, visRectSrc->left,
|
else BITBLT_ShrinkRow( rowSrc, rowDst,
|
||||||
visRectSrc->right-visRectSrc->left, xinc, mode);
|
hswap ? widthSrc - visRectSrc->right
|
||||||
|
: visRectSrc->left,
|
||||||
|
visRectSrc->right - visRectSrc->left,
|
||||||
|
xinc, xoff, mode );
|
||||||
|
|
||||||
/* When shrinking, merge several source rows into the destination */
|
/* Store the destination row */
|
||||||
if (!vstretch)
|
pixel = rowDst + visRectDst->right - 1;
|
||||||
|
y = ydst - visRectDst->top;
|
||||||
|
for (x = visRectDst->right-visRectDst->left-1; x >= 0; x--)
|
||||||
|
XPutPixel( dstImage, x, y, *pixel-- );
|
||||||
|
if (mode != STRETCH_DELETESCANS)
|
||||||
|
memset( rowDst, (mode == STRETCH_ANDSCANS) ? 0xff : 0x00,
|
||||||
|
widthDst*sizeof(int) );
|
||||||
|
|
||||||
|
/* Make copies of the destination row */
|
||||||
|
|
||||||
|
pdata = dstImage->data + dstImage->bytes_per_line * y;
|
||||||
|
while (((ysrc + yinc) >> 16 == ysrc >> 16) &&
|
||||||
|
(ydst < visRectDst->bottom-1))
|
||||||
{
|
{
|
||||||
|
memcpy( pdata + dstImage->bytes_per_line, pdata,
|
||||||
|
dstImage->bytes_per_line );
|
||||||
|
pdata += dstImage->bytes_per_line;
|
||||||
|
ysrc += yinc;
|
||||||
|
ydst++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else /* Shrinking */
|
||||||
|
{
|
||||||
|
yinc = ((int)heightDst << 16) / heightSrc;
|
||||||
|
ysrc = visRectSrc->top;
|
||||||
|
ydst = ((heightDst << 16) - (yinc * heightSrc)) / 2;
|
||||||
|
if (vswap)
|
||||||
|
{
|
||||||
|
ydst += yinc * (heightSrc - ysrc - 1);
|
||||||
|
yinc = -yinc;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
ydst += yinc * ysrc;
|
||||||
|
|
||||||
|
for( ; (ysrc < visRectSrc->bottom); ydst += yinc, ysrc++)
|
||||||
|
{
|
||||||
|
if (((ydst >> 16) < visRectDst->top) ||
|
||||||
|
((ydst >> 16) >= visRectDst->bottom)) continue;
|
||||||
|
|
||||||
|
/* Retrieve a source row */
|
||||||
|
BITBLT_GetRow( srcImage, rowSrc, ysrc - visRectSrc->top,
|
||||||
|
hswap ? widthSrc - visRectSrc->right
|
||||||
|
: visRectSrc->left,
|
||||||
|
visRectSrc->right - visRectSrc->left,
|
||||||
|
dstImage->depth, foreground, background, hswap );
|
||||||
|
|
||||||
|
/* Stretch or shrink it */
|
||||||
|
if (hstretch)
|
||||||
|
BITBLT_StretchRow( rowSrc, rowDst, visRectDst->left,
|
||||||
|
visRectDst->right - visRectDst->left,
|
||||||
|
xinc, xoff, mode );
|
||||||
|
else BITBLT_ShrinkRow( rowSrc, rowDst,
|
||||||
|
hswap ? widthSrc - visRectSrc->right
|
||||||
|
: visRectSrc->left,
|
||||||
|
visRectSrc->right - visRectSrc->left,
|
||||||
|
xinc, xoff, mode );
|
||||||
|
|
||||||
|
/* Merge several source rows into the destination */
|
||||||
if (mode == STRETCH_DELETESCANS)
|
if (mode == STRETCH_DELETESCANS)
|
||||||
{
|
{
|
||||||
/* Simply skip the overlapping rows */
|
/* Simply skip the overlapping rows */
|
||||||
|
@ -710,59 +787,18 @@ static void BITBLT_StretchImage( XImage *srcImage, XImage *dstImage,
|
||||||
}
|
}
|
||||||
else if (((ydst + yinc) >> 16 == ydst >> 16) &&
|
else if (((ydst + yinc) >> 16 == ydst >> 16) &&
|
||||||
(ysrc < visRectSrc->bottom-1))
|
(ysrc < visRectSrc->bottom-1))
|
||||||
{
|
|
||||||
ydst += yinc;
|
|
||||||
ysrc++;
|
|
||||||
continue; /* Restart loop for next overlapping row */
|
continue; /* Restart loop for next overlapping row */
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Store the destination row */
|
/* Store the destination row */
|
||||||
|
pixel = rowDst + visRectDst->right - 1;
|
||||||
pixel = rowDst + visRectDst->right - 1 + (hswap ? widthDst : 0);
|
y = (ydst >> 16) - visRectDst->top;
|
||||||
if (vswap)
|
|
||||||
y = visRectDst->bottom - (vstretch ? ydst : ydst >> 16);
|
|
||||||
else
|
|
||||||
y = (vstretch ? ydst : ydst >> 16) - visRectDst->top;
|
|
||||||
for (x = visRectDst->right-visRectDst->left-1; x >= 0; x--)
|
for (x = visRectDst->right-visRectDst->left-1; x >= 0; x--)
|
||||||
XPutPixel( dstImage, x, y, *pixel-- );
|
XPutPixel( dstImage, x, y, *pixel-- );
|
||||||
if (mode != STRETCH_DELETESCANS)
|
if (mode != STRETCH_DELETESCANS)
|
||||||
memset( rowDst, (mode == STRETCH_ANDSCANS) ? 0xff : 0x00,
|
memset( rowDst, (mode == STRETCH_ANDSCANS) ? 0xff : 0x00,
|
||||||
widthDst*sizeof(int) );
|
widthDst*sizeof(int) );
|
||||||
|
|
||||||
/* If stretching, make copies of the destination row */
|
|
||||||
|
|
||||||
if (vstretch)
|
|
||||||
{
|
|
||||||
char *pdata = dstImage->data + dstImage->bytes_per_line * y;
|
|
||||||
while (((ysrc + yinc) >> 16 == ysrc >> 16) &&
|
|
||||||
(ydst < visRectDst->bottom-1))
|
|
||||||
{
|
|
||||||
if (vswap)
|
|
||||||
{
|
|
||||||
memcpy( pdata - dstImage->bytes_per_line, pdata,
|
|
||||||
dstImage->bytes_per_line );
|
|
||||||
pdata -= dstImage->bytes_per_line;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
memcpy( pdata + dstImage->bytes_per_line, pdata,
|
|
||||||
dstImage->bytes_per_line );
|
|
||||||
pdata += dstImage->bytes_per_line;
|
|
||||||
}
|
|
||||||
ysrc += yinc;
|
|
||||||
ydst++;
|
|
||||||
}
|
|
||||||
ysrc += yinc;
|
|
||||||
ydst++;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ydst += yinc;
|
|
||||||
ysrc++;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
free( rowSrc );
|
free( rowSrc );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -785,8 +821,14 @@ static void BITBLT_GetSrcAreaStretch( DC *dcSrc, DC *dcDst,
|
||||||
|
|
||||||
RECT32 rectSrc = *visRectSrc;
|
RECT32 rectSrc = *visRectSrc;
|
||||||
RECT32 rectDst = *visRectDst;
|
RECT32 rectDst = *visRectDst;
|
||||||
|
|
||||||
|
if (widthSrc < 0) xSrc += widthSrc;
|
||||||
|
if (widthDst < 0) xDst += widthDst;
|
||||||
|
if (heightSrc < 0) ySrc += heightSrc;
|
||||||
|
if (heightDst < 0) yDst += heightDst;
|
||||||
OffsetRect32( &rectSrc, -xSrc, -ySrc );
|
OffsetRect32( &rectSrc, -xSrc, -ySrc );
|
||||||
OffsetRect32( &rectDst, -xDst, -yDst );
|
OffsetRect32( &rectDst, -xDst, -yDst );
|
||||||
|
|
||||||
/* FIXME: avoid BadMatch errors */
|
/* FIXME: avoid BadMatch errors */
|
||||||
imageSrc = XGetImage( display, dcSrc->u.x.drawable,
|
imageSrc = XGetImage( display, dcSrc->u.x.drawable,
|
||||||
visRectSrc->left, visRectSrc->top,
|
visRectSrc->left, visRectSrc->top,
|
||||||
|
@ -985,55 +1027,59 @@ static BOOL32 BITBLT_GetVisRectangles( DC *dcDst, INT32 xDst, INT32 yDst,
|
||||||
INT32 widthSrc, INT32 heightSrc,
|
INT32 widthSrc, INT32 heightSrc,
|
||||||
RECT32 *visRectSrc, RECT32 *visRectDst )
|
RECT32 *visRectSrc, RECT32 *visRectDst )
|
||||||
{
|
{
|
||||||
RECT32 tmpRect, clipRect;
|
RECT32 rect, clipRect;
|
||||||
|
|
||||||
if (widthSrc < 0) { widthSrc = -widthSrc; xSrc -= widthSrc; }
|
|
||||||
if (widthDst < 0) { widthDst = -widthDst; xDst -= widthDst; }
|
|
||||||
if (heightSrc < 0) { heightSrc = -heightSrc; ySrc -= heightSrc; }
|
|
||||||
if (heightDst < 0) { heightDst = -heightDst; yDst -= heightDst; }
|
|
||||||
|
|
||||||
/* Get the destination visible rectangle */
|
/* Get the destination visible rectangle */
|
||||||
|
|
||||||
SetRect32( &tmpRect, xDst, yDst, xDst + widthDst, yDst + heightDst );
|
SetRect32( &rect, xDst, yDst, xDst + widthDst, yDst + heightDst );
|
||||||
|
if (widthDst < 0) SWAP_INT32( &rect.left, &rect.right );
|
||||||
|
if (heightDst < 0) SWAP_INT32( &rect.top, &rect.bottom );
|
||||||
GetRgnBox32( dcDst->w.hGCClipRgn, &clipRect );
|
GetRgnBox32( dcDst->w.hGCClipRgn, &clipRect );
|
||||||
OffsetRect32( &clipRect, dcDst->w.DCOrgX, dcDst->w.DCOrgY );
|
OffsetRect32( &clipRect, dcDst->w.DCOrgX, dcDst->w.DCOrgY );
|
||||||
if (!IntersectRect32( visRectDst, &tmpRect, &clipRect )) return FALSE;
|
if (!IntersectRect32( visRectDst, &rect, &clipRect )) return FALSE;
|
||||||
|
|
||||||
/* Get the source visible rectangle */
|
/* Get the source visible rectangle */
|
||||||
|
|
||||||
if (!dcSrc) return TRUE;
|
if (!dcSrc) return TRUE;
|
||||||
SetRect32( &tmpRect, xSrc, ySrc, xSrc + widthSrc, ySrc + heightSrc );
|
SetRect32( &rect, xSrc, ySrc, xSrc + widthSrc, ySrc + heightSrc );
|
||||||
|
if (widthSrc < 0) SWAP_INT32( &rect.left, &rect.right );
|
||||||
|
if (heightSrc < 0) SWAP_INT32( &rect.top, &rect.bottom );
|
||||||
/* Apparently the clip region is only for output, so use hVisRgn here */
|
/* Apparently the clip region is only for output, so use hVisRgn here */
|
||||||
GetRgnBox32( dcSrc->w.hVisRgn, &clipRect );
|
GetRgnBox32( dcSrc->w.hVisRgn, &clipRect );
|
||||||
OffsetRect32( &clipRect, dcSrc->w.DCOrgX, dcSrc->w.DCOrgY );
|
OffsetRect32( &clipRect, dcSrc->w.DCOrgX, dcSrc->w.DCOrgY );
|
||||||
if (!IntersectRect32( visRectSrc, &tmpRect, &clipRect )) return FALSE;
|
if (!IntersectRect32( visRectSrc, &rect, &clipRect )) return FALSE;
|
||||||
|
|
||||||
/* Intersect the rectangles */
|
/* Intersect the rectangles */
|
||||||
|
|
||||||
if ((widthSrc == widthDst) && (heightSrc == heightDst)) /* no stretching */
|
if ((widthSrc == widthDst) && (heightSrc == heightDst)) /* no stretching */
|
||||||
{
|
{
|
||||||
OffsetRect32( visRectSrc, xDst - xSrc, yDst - ySrc );
|
OffsetRect32( visRectSrc, xDst - xSrc, yDst - ySrc );
|
||||||
if (!IntersectRect32( &tmpRect, visRectSrc, visRectDst )) return FALSE;
|
if (!IntersectRect32( &rect, visRectSrc, visRectDst )) return FALSE;
|
||||||
*visRectSrc = *visRectDst = tmpRect;
|
*visRectSrc = *visRectDst = rect;
|
||||||
OffsetRect32( visRectSrc, xSrc - xDst, ySrc - yDst );
|
OffsetRect32( visRectSrc, xSrc - xDst, ySrc - yDst );
|
||||||
}
|
}
|
||||||
else /* stretching */
|
else /* stretching */
|
||||||
{
|
{
|
||||||
visRectSrc->left = xDst + (visRectSrc->left-xSrc)*widthDst/widthSrc;
|
/* Map source rectangle into destination coordinates */
|
||||||
visRectSrc->top = yDst + (visRectSrc->top-ySrc)*heightDst/heightSrc;
|
rect.left = xDst + (visRectSrc->left - xSrc)*widthDst/widthSrc;
|
||||||
visRectSrc->right = xDst +
|
rect.top = yDst + (visRectSrc->top - ySrc)*heightDst/heightSrc;
|
||||||
((visRectSrc->right-xSrc) * widthDst) / widthSrc;
|
rect.right = xDst + ((visRectSrc->right - xSrc)*widthDst)/widthSrc;
|
||||||
visRectSrc->bottom = yDst +
|
rect.bottom = yDst + ((visRectSrc->bottom - ySrc)*heightDst)/heightSrc;
|
||||||
((visRectSrc->bottom-ySrc) * heightDst) / heightSrc;
|
if (rect.left > rect.right) SWAP_INT32( &rect.left, &rect.right );
|
||||||
if (!IntersectRect32( &tmpRect, visRectSrc, visRectDst )) return FALSE;
|
if (rect.top > rect.bottom) SWAP_INT32( &rect.top, &rect.bottom );
|
||||||
*visRectSrc = *visRectDst = tmpRect;
|
InflateRect32( &rect, 1, 1 ); /* Avoid rounding errors */
|
||||||
visRectSrc->left = xSrc + (visRectSrc->left-xDst)*widthSrc/widthDst;
|
if (!IntersectRect32( visRectDst, &rect, visRectDst )) return FALSE;
|
||||||
visRectSrc->top = ySrc + (visRectSrc->top-yDst)*heightSrc/heightDst;
|
|
||||||
visRectSrc->right = xSrc +
|
/* Map destination rectangle back to source coordinates */
|
||||||
((visRectSrc->right-xDst) * widthSrc) / widthDst;
|
rect = *visRectDst;
|
||||||
visRectSrc->bottom = ySrc +
|
rect.left = xSrc + (visRectDst->left - xDst)*widthSrc/widthDst;
|
||||||
((visRectSrc->bottom-yDst) * heightSrc) / heightDst;
|
rect.top = ySrc + (visRectDst->top - yDst)*heightSrc/heightDst;
|
||||||
if (IsRectEmpty32( visRectSrc )) return FALSE;
|
rect.right = xSrc + ((visRectDst->right - xDst)*widthSrc)/widthDst;
|
||||||
|
rect.bottom = ySrc + ((visRectDst->bottom - yDst)*heightSrc)/heightDst;
|
||||||
|
if (rect.left > rect.right) SWAP_INT32( &rect.left, &rect.right );
|
||||||
|
if (rect.top > rect.bottom) SWAP_INT32( &rect.top, &rect.bottom );
|
||||||
|
InflateRect32( &rect, 1, 1 ); /* Avoid rounding errors */
|
||||||
|
if (!IntersectRect32( visRectSrc, &rect, visRectSrc )) return FALSE;
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,7 +11,7 @@
|
||||||
|
|
||||||
|
|
||||||
static BOOL32 X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
static BOOL32 X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
||||||
LPCSTR output, const DEVMODE* initData );
|
LPCSTR output, const DEVMODE16* initData );
|
||||||
static BOOL32 X11DRV_DeleteDC( DC *dc );
|
static BOOL32 X11DRV_DeleteDC( DC *dc );
|
||||||
|
|
||||||
static const DC_FUNCTIONS X11DRV_Funcs =
|
static const DC_FUNCTIONS X11DRV_Funcs =
|
||||||
|
@ -96,7 +96,7 @@ BOOL32 X11DRV_Init(void)
|
||||||
* X11DRV_CreateDC
|
* X11DRV_CreateDC
|
||||||
*/
|
*/
|
||||||
static BOOL32 X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
static BOOL32 X11DRV_CreateDC( DC *dc, LPCSTR driver, LPCSTR device,
|
||||||
LPCSTR output, const DEVMODE* initData )
|
LPCSTR output, const DEVMODE16* initData )
|
||||||
{
|
{
|
||||||
X11DRV_PDEVICE *physDev;
|
X11DRV_PDEVICE *physDev;
|
||||||
|
|
||||||
|
|
|
@ -69,13 +69,13 @@ base 1
|
||||||
0064 stub GetSidSubAuthority
|
0064 stub GetSidSubAuthority
|
||||||
0065 stub GetSidSubAuthorityCount
|
0065 stub GetSidSubAuthorityCount
|
||||||
0066 stub GetTokenInformation
|
0066 stub GetTokenInformation
|
||||||
0067 stdcall GetUserNameA(ptr ptr) GetUserNameA
|
0067 stdcall GetUserNameA(ptr ptr) GetUserName32A
|
||||||
0068 stub GetUserNameW
|
0068 stdcall GetUserNameW(ptr ptr) GetUserName32W
|
||||||
0069 stub ImpersonateLoggedOnUser
|
0069 stub ImpersonateLoggedOnUser
|
||||||
0070 stub ImpersonateNamedPipeClient
|
0070 stub ImpersonateNamedPipeClient
|
||||||
0071 stub ImpersonateSelf
|
0071 stub ImpersonateSelf
|
||||||
0072 stub InitializeAcl
|
0072 stub InitializeAcl
|
||||||
0073 stub InitializeSecurityDescriptor
|
0073 return InitializeSecurityDescriptor 8 1
|
||||||
0074 stub InitializeSid
|
0074 stub InitializeSid
|
||||||
0075 stub InitiateSystemShutdownA
|
0075 stub InitiateSystemShutdownA
|
||||||
0076 stub InitiateSystemShutdownW
|
0076 stub InitiateSystemShutdownW
|
||||||
|
|
|
@ -3,8 +3,8 @@ name crtdll
|
||||||
type win32
|
type win32
|
||||||
base 1
|
base 1
|
||||||
|
|
||||||
001 stub ??2@YAPAXI@Z
|
001 cdecl ??2@YAPAXI@Z(long) CRTDLL_malloc
|
||||||
002 stub ??3@YAXPAX@Z
|
002 cdecl ??3@YAXPAX@Z(long) CRTDLL_free
|
||||||
003 stub ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z
|
003 stub ?_set_new_handler@@YAP6AHI@ZP6AHI@Z@Z
|
||||||
004 stub _CIacos
|
004 stub _CIacos
|
||||||
005 stub _CIasin
|
005 stub _CIasin
|
||||||
|
@ -324,13 +324,13 @@ base 1
|
||||||
319 stub _vsnwprintf
|
319 stub _vsnwprintf
|
||||||
320 stub _wcsdup
|
320 stub _wcsdup
|
||||||
321 stub _wcsicmp
|
321 stub _wcsicmp
|
||||||
322 stub _wcsicoll
|
322 cdecl _wcsicoll(ptr ptr) CRTDLL__wcsicoll
|
||||||
323 stub _wcslwr
|
323 cdecl _wcslwr(ptr) CRTDLL__wcslwr
|
||||||
324 stub _wcsnicmp
|
324 stub _wcsnicmp
|
||||||
325 stub _wcsnset
|
325 stub _wcsnset
|
||||||
326 stub _wcsrev
|
326 stub _wcsrev
|
||||||
327 stub _wcsset
|
327 stub _wcsset
|
||||||
328 stub _wcsupr
|
328 cdecl _wcsupr(ptr) CRTDLL__wcsupr
|
||||||
329 extern _winmajor_dll CRTDLL_winmajor_dll
|
329 extern _winmajor_dll CRTDLL_winmajor_dll
|
||||||
330 extern _winminor_dll CRTDLL_winminor_dll
|
330 extern _winminor_dll CRTDLL_winminor_dll
|
||||||
331 extern _winver_dll CRTDLL_winver_dll
|
331 extern _winver_dll CRTDLL_winver_dll
|
||||||
|
@ -455,7 +455,7 @@ base 1
|
||||||
450 stub rewind
|
450 stub rewind
|
||||||
451 stub scanf
|
451 stub scanf
|
||||||
452 stub setbuf
|
452 stub setbuf
|
||||||
453 stub setlocale
|
453 cdecl setlocale(long ptr) CRTDLL_setlocale
|
||||||
454 stub setvbuf
|
454 stub setvbuf
|
||||||
455 stub signal
|
455 stub signal
|
||||||
456 cdecl sin(long) CRTDLL_sin
|
456 cdecl sin(long) CRTDLL_sin
|
||||||
|
@ -463,7 +463,7 @@ base 1
|
||||||
458 cdecl sprintf() CRTDLL_sprintf
|
458 cdecl sprintf() CRTDLL_sprintf
|
||||||
459 cdecl sqrt(long) CRTDLL_sqrt
|
459 cdecl sqrt(long) CRTDLL_sqrt
|
||||||
460 cdecl srand(long) CRTDLL_srand
|
460 cdecl srand(long) CRTDLL_srand
|
||||||
461 stub sscanf
|
461 cdecl sscanf() CRTDLL_sscanf
|
||||||
462 cdecl strcat(ptr ptr) strcat
|
462 cdecl strcat(ptr ptr) strcat
|
||||||
463 cdecl strchr(ptr long) strchr
|
463 cdecl strchr(ptr long) strchr
|
||||||
464 cdecl strcmp(ptr ptr) strcmp
|
464 cdecl strcmp(ptr ptr) strcmp
|
||||||
|
@ -485,7 +485,7 @@ base 1
|
||||||
480 cdecl strtol(ptr ptr long) strtol
|
480 cdecl strtol(ptr ptr long) strtol
|
||||||
481 cdecl strtoul(ptr ptr long) strtoul
|
481 cdecl strtoul(ptr ptr long) strtoul
|
||||||
482 cdecl strxfrm(ptr ptr long) strxfrm
|
482 cdecl strxfrm(ptr ptr long) strxfrm
|
||||||
483 stub swprintf
|
483 cdecl swprintf() CRTDLL_swprintf
|
||||||
484 stub swscanf
|
484 stub swscanf
|
||||||
485 stub system
|
485 stub system
|
||||||
486 cdecl tan(long) CRTDLL_tan
|
486 cdecl tan(long) CRTDLL_tan
|
||||||
|
@ -496,7 +496,7 @@ base 1
|
||||||
491 cdecl tolower(long) CRTDLL_tolower
|
491 cdecl tolower(long) CRTDLL_tolower
|
||||||
492 cdecl toupper(long) CRTDLL_toupper
|
492 cdecl toupper(long) CRTDLL_toupper
|
||||||
493 stub towlower
|
493 stub towlower
|
||||||
494 stub towupper
|
494 cdecl towupper(long) CRTDLL_towupper
|
||||||
495 stub ungetc
|
495 stub ungetc
|
||||||
496 stub ungetwc
|
496 stub ungetwc
|
||||||
497 stub vfprintf
|
497 stub vfprintf
|
||||||
|
@ -505,21 +505,21 @@ base 1
|
||||||
500 cdecl vsprintf() CRTDLL_vsprintf
|
500 cdecl vsprintf() CRTDLL_vsprintf
|
||||||
501 stub vswprintf
|
501 stub vswprintf
|
||||||
502 stub vwprintf
|
502 stub vwprintf
|
||||||
503 stub wcscat
|
503 cdecl wcscat(ptr ptr) lstrcat32W
|
||||||
504 stub wcschr
|
504 cdecl wcschr(ptr long) CRTDLL_wcschr
|
||||||
505 stub wcscmp
|
505 stub wcscmp
|
||||||
506 stub wcscoll
|
506 cdecl wcscoll(ptr ptr) CRTDLL_wcscoll
|
||||||
507 stub wcscpy
|
507 cdecl wcscpy(ptr ptr) lstrcpy32W
|
||||||
508 stub wcscspn
|
508 stub wcscspn
|
||||||
509 stub wcsftime
|
509 stub wcsftime
|
||||||
510 stub wcslen
|
510 cdecl wcslen(ptr) lstrlen32W
|
||||||
511 stub wcsncat
|
511 cdecl wcsncat(ptr ptr long) lstrcatn32W
|
||||||
512 stub wcsncmp
|
512 cdecl wcsncmp(ptr ptr long) lstrncmp32W
|
||||||
513 stub wcsncpy
|
513 cdecl wcsncpy(ptr ptr long) lstrcpyn32W
|
||||||
514 stub wcspbrk
|
514 stub wcspbrk
|
||||||
515 stub wcsrchr
|
515 cdecl wcsrchr(ptr long) CRTDLL_wcsrchr
|
||||||
516 stub wcsspn
|
516 cdecl wcsspn(ptr ptr) CRTDLL_wcsspn
|
||||||
517 stub wcsstr
|
517 cdecl wcsstr(ptr ptr) CRTDLL_wcsstr
|
||||||
518 stub wcstod
|
518 stub wcstod
|
||||||
519 stub wcstok
|
519 stub wcstok
|
||||||
520 stub wcstol
|
520 stub wcstol
|
||||||
|
|
|
@ -59,7 +59,7 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects)
|
||||||
50 pascal16 CreateBrushIndirect(ptr) CreateBrushIndirect16
|
50 pascal16 CreateBrushIndirect(ptr) CreateBrushIndirect16
|
||||||
51 pascal16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap
|
51 pascal16 CreateCompatibleBitmap(word word word) CreateCompatibleBitmap
|
||||||
52 pascal16 CreateCompatibleDC(word) CreateCompatibleDC
|
52 pascal16 CreateCompatibleDC(word) CreateCompatibleDC
|
||||||
53 pascal16 CreateDC(ptr ptr ptr ptr) CreateDC
|
53 pascal16 CreateDC(ptr ptr ptr ptr) CreateDC16
|
||||||
54 pascal16 CreateEllipticRgn(s_word s_word s_word s_word) CreateEllipticRgn16
|
54 pascal16 CreateEllipticRgn(s_word s_word s_word s_word) CreateEllipticRgn16
|
||||||
55 pascal16 CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect16
|
55 pascal16 CreateEllipticRgnIndirect(ptr) CreateEllipticRgnIndirect16
|
||||||
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
|
||||||
|
@ -98,7 +98,7 @@ heap 65488 # 65536 - 16 (instance data) - 32 (stock objects)
|
||||||
89 pascal16 GetTextCharacterExtra(word) GetTextCharacterExtra
|
89 pascal16 GetTextCharacterExtra(word) GetTextCharacterExtra
|
||||||
90 pascal GetTextColor(word) GetTextColor
|
90 pascal GetTextColor(word) GetTextColor
|
||||||
91 pascal GetTextExtent(word ptr s_word) GetTextExtent
|
91 pascal GetTextExtent(word ptr s_word) GetTextExtent
|
||||||
92 pascal16 GetTextFace(word s_word ptr) GetTextFace
|
92 pascal16 GetTextFace(word s_word ptr) GetTextFace16
|
||||||
93 pascal16 GetTextMetrics(word ptr) GetTextMetrics16
|
93 pascal16 GetTextMetrics(word ptr) GetTextMetrics16
|
||||||
94 pascal GetViewportExt(word) GetViewportExt
|
94 pascal GetViewportExt(word) GetViewportExt
|
||||||
95 pascal GetViewportOrg(word) GetViewportOrg
|
95 pascal GetViewportOrg(word) GetViewportOrg
|
||||||
|
|
|
@ -34,8 +34,8 @@ base 1
|
||||||
0029 stub CreateColorSpaceW
|
0029 stub CreateColorSpaceW
|
||||||
0030 stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap
|
0030 stdcall CreateCompatibleBitmap(long long long) CreateCompatibleBitmap
|
||||||
0031 stdcall CreateCompatibleDC(long) CreateCompatibleDC
|
0031 stdcall CreateCompatibleDC(long) CreateCompatibleDC
|
||||||
0032 stub CreateDCA
|
0032 stdcall CreateDCA(ptr ptr ptr ptr) CreateDC32A
|
||||||
0033 stub CreateDCW
|
0033 stdcall CreateDCW(ptr ptr ptr ptr) CreateDC32W
|
||||||
0034 stdcall CreateDIBPatternBrush(long long) CreateDIBPatternBrush32
|
0034 stdcall CreateDIBPatternBrush(long long) CreateDIBPatternBrush32
|
||||||
0035 stub CreateDIBPatternBrushPt
|
0035 stub CreateDIBPatternBrushPt
|
||||||
0036 stub CreateDIBSection
|
0036 stub CreateDIBSection
|
||||||
|
@ -94,9 +94,9 @@ base 1
|
||||||
0086 stub EnumICMProfilesA
|
0086 stub EnumICMProfilesA
|
||||||
0087 stub EnumICMProfilesW
|
0087 stub EnumICMProfilesW
|
||||||
0088 stub EnumMetaFile
|
0088 stub EnumMetaFile
|
||||||
0089 stdcall EnumObjects(long long ptr long) EnumObjects32
|
0089 stdcall EnumObjects(long long ptr long) THUNK_EnumObjects32
|
||||||
0090 stdcall EqualRgn(long long) EqualRgn32
|
0090 stdcall EqualRgn(long long) EqualRgn32
|
||||||
0091 stub Escape
|
0091 stdcall Escape(long long long ptr ptr) Escape
|
||||||
0092 stdcall ExcludeClipRect(long long long long long) ExcludeClipRect32
|
0092 stdcall ExcludeClipRect(long long long long long) ExcludeClipRect32
|
||||||
0093 stub ExtCreatePen
|
0093 stub ExtCreatePen
|
||||||
0094 stub ExtCreateRegion
|
0094 stub ExtCreateRegion
|
||||||
|
@ -158,9 +158,9 @@ base 1
|
||||||
0150 stub GetCharABCWidthsFloatA
|
0150 stub GetCharABCWidthsFloatA
|
||||||
0151 stub GetCharABCWidthsFloatW
|
0151 stub GetCharABCWidthsFloatW
|
||||||
0152 stub GetCharABCWidthsW
|
0152 stub GetCharABCWidthsW
|
||||||
0153 stub GetCharWidth32A
|
0153 stdcall GetCharWidth32A(long long long long) GetCharWidth
|
||||||
0154 stub GetCharWidth32W
|
0154 stub GetCharWidth32W
|
||||||
0155 stub GetCharWidthA
|
0155 stdcall GetCharWidthA(long long long long) GetCharWidth
|
||||||
0156 stub GetCharWidthFloatA
|
0156 stub GetCharWidthFloatA
|
||||||
0157 stub GetCharWidthFloatW
|
0157 stub GetCharWidthFloatW
|
||||||
0158 stub GetCharWidthW
|
0158 stub GetCharWidthW
|
||||||
|
@ -233,14 +233,14 @@ base 1
|
||||||
0225 stub GetTextCharacterExtra
|
0225 stub GetTextCharacterExtra
|
||||||
0226 stub GetTextCharset
|
0226 stub GetTextCharset
|
||||||
0227 stdcall GetTextColor(long) GetTextColor
|
0227 stdcall GetTextColor(long) GetTextColor
|
||||||
0228 stub GetTextExtentExPointA
|
0228 stdcall GetTextExtentExPointA(long ptr long long ptr ptr ptr) GetTextExtentExPoint32A
|
||||||
0229 stub GetTextExtentExPointW
|
0229 stdcall GetTextExtentExPointW(long ptr long long ptr ptr ptr) GetTextExtentExPoint32W
|
||||||
0230 stdcall GetTextExtentPoint32A(long ptr long ptr) GetTextExtentPoint32A
|
0230 stdcall GetTextExtentPoint32A(long ptr long ptr) GetTextExtentPoint32A
|
||||||
0231 stdcall GetTextExtentPoint32W(long ptr long ptr) GetTextExtentPoint32W
|
0231 stdcall GetTextExtentPoint32W(long ptr long ptr) GetTextExtentPoint32W
|
||||||
0232 stdcall GetTextExtentPointA(long ptr long ptr) GetTextExtentPoint32ABuggy
|
0232 stdcall GetTextExtentPointA(long ptr long ptr) GetTextExtentPoint32ABuggy
|
||||||
0233 stdcall GetTextExtentPointW(long ptr long ptr) GetTextExtentPoint32WBuggy
|
0233 stdcall GetTextExtentPointW(long ptr long ptr) GetTextExtentPoint32WBuggy
|
||||||
0234 stdcall GetTextFaceA(long long ptr) GetTextFace
|
0234 stdcall GetTextFaceA(long long ptr) GetTextFace32A
|
||||||
0235 stub GetTextFaceW
|
0235 stdcall GetTextFaceW(long long ptr) GetTextFace32W
|
||||||
0236 stdcall GetTextMetricsA(long ptr) GetTextMetrics32A
|
0236 stdcall GetTextMetricsA(long ptr) GetTextMetrics32A
|
||||||
0237 stdcall GetTextMetricsW(long ptr) GetTextMetrics32W
|
0237 stdcall GetTextMetricsW(long ptr) GetTextMetrics32W
|
||||||
0238 stub GetTransform
|
0238 stub GetTransform
|
||||||
|
@ -280,8 +280,8 @@ base 1
|
||||||
0272 stub PolyPolyline
|
0272 stub PolyPolyline
|
||||||
0273 stub PolyTextOutA
|
0273 stub PolyTextOutA
|
||||||
0274 stub PolyTextOutW
|
0274 stub PolyTextOutW
|
||||||
0275 stub Polygon
|
0275 stdcall Polygon(long ptr long) Polygon32
|
||||||
0276 stub Polyline
|
0276 stdcall Polyline(long ptr long) Polyline32
|
||||||
0277 stub PolylineTo
|
0277 stub PolylineTo
|
||||||
0278 stdcall PtInRegion(long long long) PtInRegion32
|
0278 stdcall PtInRegion(long long long) PtInRegion32
|
||||||
0279 stdcall PtVisible(long long long) PtVisible32
|
0279 stdcall PtVisible(long long long) PtVisible32
|
||||||
|
@ -342,7 +342,7 @@ base 1
|
||||||
0333 stub SetRelAbs
|
0333 stub SetRelAbs
|
||||||
0334 stdcall SetStretchBltMode(long long) SetStretchBltMode
|
0334 stdcall SetStretchBltMode(long long) SetStretchBltMode
|
||||||
0335 stub SetSystemPaletteUse
|
0335 stub SetSystemPaletteUse
|
||||||
0336 stub SetTextAlign
|
0336 stdcall SetTextAlign(long long) SetTextAlign
|
||||||
0337 stub SetTextCharacterExtra
|
0337 stub SetTextCharacterExtra
|
||||||
0338 stdcall SetTextColor(long long) SetTextColor
|
0338 stdcall SetTextColor(long long) SetTextColor
|
||||||
0339 stub SetTextJustification
|
0339 stub SetTextJustification
|
||||||
|
|
|
@ -45,7 +45,7 @@ type win16
|
||||||
46 pascal16 FreeModule(word) FreeModule16
|
46 pascal16 FreeModule(word) FreeModule16
|
||||||
47 pascal16 GetModuleHandle(segptr) WIN16_GetModuleHandle
|
47 pascal16 GetModuleHandle(segptr) WIN16_GetModuleHandle
|
||||||
48 pascal16 GetModuleUsage(word) GetModuleUsage
|
48 pascal16 GetModuleUsage(word) GetModuleUsage
|
||||||
49 pascal16 GetModuleFileName(word ptr s_word) GetModuleFileName
|
49 pascal16 GetModuleFileName(word ptr s_word) GetModuleFileName16
|
||||||
50 pascal GetProcAddress(word segptr) GetProcAddress16
|
50 pascal GetProcAddress(word segptr) GetProcAddress16
|
||||||
51 pascal MakeProcInstance(segptr word) MakeProcInstance16
|
51 pascal MakeProcInstance(segptr word) MakeProcInstance16
|
||||||
52 pascal16 FreeProcInstance(segptr) FreeProcInstance16
|
52 pascal16 FreeProcInstance(segptr) FreeProcInstance16
|
||||||
|
@ -91,7 +91,7 @@ type win16
|
||||||
92 pascal GetTempDrive(byte) WIN16_GetTempDrive
|
92 pascal GetTempDrive(byte) WIN16_GetTempDrive
|
||||||
93 pascal16 GetCodeHandle(segptr) GetCodeHandle
|
93 pascal16 GetCodeHandle(segptr) GetCodeHandle
|
||||||
94 stub DefineHandleTable
|
94 stub DefineHandleTable
|
||||||
95 pascal16 LoadLibrary(ptr) LoadLibrary
|
95 pascal16 LoadLibrary(ptr) LoadLibrary16
|
||||||
96 pascal16 FreeLibrary(word) FreeLibrary
|
96 pascal16 FreeLibrary(word) FreeLibrary
|
||||||
97 pascal16 GetTempFileName(byte ptr word ptr) GetTempFileName16
|
97 pascal16 GetTempFileName(byte ptr word ptr) GetTempFileName16
|
||||||
98 return GetLastDiskChange 0 0
|
98 return GetLastDiskChange 0 0
|
||||||
|
@ -271,10 +271,10 @@ type win16
|
||||||
406 stub WritePrivateProfileStruct
|
406 stub WritePrivateProfileStruct
|
||||||
407 stub GetPrivateProfileStruct
|
407 stub GetPrivateProfileStruct
|
||||||
411 pascal GetCurrentDirectory(long ptr) GetCurrentDirectory16
|
411 pascal GetCurrentDirectory(long ptr) GetCurrentDirectory16
|
||||||
412 pascal16 SetCurrentDirectory(ptr) SetCurrentDirectory
|
412 pascal16 SetCurrentDirectory(ptr) SetCurrentDirectory16
|
||||||
413 stub FindFirstFile
|
413 pascal16 FindFirstFile(ptr ptr) FindFirstFile16
|
||||||
414 stub FindNextFile
|
414 pascal16 FindNextFile(word ptr) FindNextFile16
|
||||||
415 stub FindClose
|
415 pascal16 FindClose(word) FindClose16
|
||||||
416 stub WritePrivateProfileSection
|
416 stub WritePrivateProfileSection
|
||||||
417 stub WriteProfileSection
|
417 stub WriteProfileSection
|
||||||
418 stub GetPrivateProfileSection
|
418 stub GetPrivateProfileSection
|
||||||
|
|
|
@ -7,7 +7,7 @@ base 1
|
||||||
0002 stub AddConsoleAliasA
|
0002 stub AddConsoleAliasA
|
||||||
0003 stub AddConsoleAliasW
|
0003 stub AddConsoleAliasW
|
||||||
0004 stub AllocConsole
|
0004 stub AllocConsole
|
||||||
0005 stub AreFileApisANSI
|
0005 stdcall AreFileApisANSI() AreFileApisANSI
|
||||||
0006 stub BackupRead
|
0006 stub BackupRead
|
||||||
0007 stub BackupSeek
|
0007 stub BackupSeek
|
||||||
0008 stub BackupWrite
|
0008 stub BackupWrite
|
||||||
|
@ -38,12 +38,12 @@ base 1
|
||||||
0033 stub ConsoleSubst
|
0033 stub ConsoleSubst
|
||||||
0034 stub ContinueDebugEvent
|
0034 stub ContinueDebugEvent
|
||||||
0035 stub ConvertDefaultLocale
|
0035 stub ConvertDefaultLocale
|
||||||
0036 stub CopyFileA
|
0036 stdcall CopyFileA(ptr ptr long) CopyFile32A
|
||||||
0037 stub CopyFileW
|
0037 stub CopyFileW
|
||||||
0038 stub CreateConsoleScreenBuffer
|
0038 stub CreateConsoleScreenBuffer
|
||||||
0039 stdcall CreateDirectoryA(ptr ptr) CreateDirectory32A
|
0039 stdcall CreateDirectoryA(ptr ptr) CreateDirectory32A
|
||||||
0040 stub CreateDirectoryExA
|
0040 stdcall CreateDirectoryExA(ptr ptr ptr) CreateDirectoryEx32A
|
||||||
0041 stub CreateDirectoryExW
|
0041 stdcall CreateDirectoryExW(ptr ptr ptr) CreateDirectoryEx32W
|
||||||
0042 stdcall CreateDirectoryW(ptr ptr) CreateDirectory32W
|
0042 stdcall CreateDirectoryW(ptr ptr) CreateDirectory32W
|
||||||
0043 stdcall CreateEventA(ptr long long ptr) CreateEventA
|
0043 stdcall CreateEventA(ptr long long ptr) CreateEventA
|
||||||
0044 stub CreateEventW
|
0044 stub CreateEventW
|
||||||
|
@ -76,7 +76,7 @@ base 1
|
||||||
0071 stdcall DeleteFileA(ptr) DeleteFile32A
|
0071 stdcall DeleteFileA(ptr) DeleteFile32A
|
||||||
0072 stdcall DeleteFileW(ptr) DeleteFile32W
|
0072 stdcall DeleteFileW(ptr) DeleteFile32W
|
||||||
0073 stub DeviceIoControl
|
0073 stub DeviceIoControl
|
||||||
0074 stub DisableThreadLibraryCalls
|
0074 stdcall DisableThreadLibraryCalls(long) DisableThreadLibraryCalls
|
||||||
0075 stub DisconnectNamedPipe
|
0075 stub DisconnectNamedPipe
|
||||||
0076 stdcall DosDateTimeToFileTime(long long ptr) DosDateTimeToFileTime
|
0076 stdcall DosDateTimeToFileTime(long long ptr) DosDateTimeToFileTime
|
||||||
0077 stub DuplicateConsoleHandle
|
0077 stub DuplicateConsoleHandle
|
||||||
|
@ -141,7 +141,7 @@ base 1
|
||||||
0136 stub FoldStringA
|
0136 stub FoldStringA
|
||||||
0137 stub FoldStringW
|
0137 stub FoldStringW
|
||||||
0138 stdcall FormatMessageA() WIN32_FormatMessage32A
|
0138 stdcall FormatMessageA() WIN32_FormatMessage32A
|
||||||
0139 stub FormatMessageW
|
0139 stdcall FormatMessageW() WIN32_FormatMessage32W
|
||||||
0140 stub FreeConsole
|
0140 stub FreeConsole
|
||||||
0141 stdcall FreeEnvironmentStringsA(ptr) FreeEnvironmentStringsA
|
0141 stdcall FreeEnvironmentStringsA(ptr) FreeEnvironmentStringsA
|
||||||
0142 stdcall FreeEnvironmentStringsW(ptr) FreeEnvironmentStringsW
|
0142 stdcall FreeEnvironmentStringsW(ptr) FreeEnvironmentStringsW
|
||||||
|
@ -167,8 +167,8 @@ base 1
|
||||||
0162 stdcall GetCommandLineW() GetCommandLine32W
|
0162 stdcall GetCommandLineW() GetCommandLine32W
|
||||||
0163 stub GetCompressedFileSizeA
|
0163 stub GetCompressedFileSizeA
|
||||||
0164 stub GetCompressedFileSizeW
|
0164 stub GetCompressedFileSizeW
|
||||||
0165 stub GetComputerNameA
|
0165 stdcall GetComputerNameA(ptr ptr) GetComputerName32A
|
||||||
0166 stub GetComputerNameW
|
0166 stdcall GetComputerNameW(ptr ptr) GetComputerName32W
|
||||||
0167 stub GetConsoleAliasA
|
0167 stub GetConsoleAliasA
|
||||||
0168 stub GetConsoleAliasExesA
|
0168 stub GetConsoleAliasExesA
|
||||||
0169 stub GetConsoleAliasExesLengthA
|
0169 stub GetConsoleAliasExesLengthA
|
||||||
|
@ -179,7 +179,7 @@ base 1
|
||||||
0174 stub GetConsoleAliasesLengthA
|
0174 stub GetConsoleAliasesLengthA
|
||||||
0175 stub GetConsoleAliasesLengthW
|
0175 stub GetConsoleAliasesLengthW
|
||||||
0176 stub GetConsoleAliasesW
|
0176 stub GetConsoleAliasesW
|
||||||
0177 stub GetConsoleCP
|
0177 stdcall GetConsoleCP() GetConsoleCP
|
||||||
0178 stub GetConsoleCommandHistoryA
|
0178 stub GetConsoleCommandHistoryA
|
||||||
0179 stub GetConsoleCommandHistoryLengthA
|
0179 stub GetConsoleCommandHistoryLengthA
|
||||||
0180 stub GetConsoleCommandHistoryLengthW
|
0180 stub GetConsoleCommandHistoryLengthW
|
||||||
|
@ -190,11 +190,11 @@ base 1
|
||||||
0185 stub GetConsoleFontSize
|
0185 stub GetConsoleFontSize
|
||||||
0186 stub GetConsoleHardwareState
|
0186 stub GetConsoleHardwareState
|
||||||
0187 stub GetConsoleInputWaitHandle
|
0187 stub GetConsoleInputWaitHandle
|
||||||
0188 stub GetConsoleMode
|
0188 stdcall GetConsoleMode(long ptr) GetConsoleMode
|
||||||
0189 stub GetConsoleOutputCP
|
0189 stdcall GetConsoleOutputCP() GetConsoleOutputCP
|
||||||
0190 stdcall GetConsoleScreenBufferInfo(long ptr) GetConsoleScreenBufferInfo
|
0190 stdcall GetConsoleScreenBufferInfo(long ptr) GetConsoleScreenBufferInfo
|
||||||
0191 stub GetConsoleTitleA
|
0191 stdcall GetConsoleTitleA(ptr long) GetConsoleTitle32A
|
||||||
0192 stub GetConsoleTitleW
|
0192 stdcall GetConsoleTitleW(ptr long) GetConsoleTitle32W
|
||||||
0193 stub GetCurrencyFormatA
|
0193 stub GetCurrencyFormatA
|
||||||
0194 stub GetCurrencyFormatW
|
0194 stub GetCurrencyFormatW
|
||||||
0195 stub GetCurrentConsoleFont
|
0195 stub GetCurrentConsoleFont
|
||||||
|
@ -215,8 +215,8 @@ base 1
|
||||||
0210 stdcall GetEnvironmentStrings() GetEnvironmentStrings
|
0210 stdcall GetEnvironmentStrings() GetEnvironmentStrings
|
||||||
0211 stub GetEnvironmentStringsA
|
0211 stub GetEnvironmentStringsA
|
||||||
0212 stdcall GetEnvironmentStringsW() GetEnvironmentStringsW
|
0212 stdcall GetEnvironmentStringsW() GetEnvironmentStringsW
|
||||||
0213 stdcall GetEnvironmentVariableA(ptr ptr long) GetEnvironmentVariableA
|
0213 stdcall GetEnvironmentVariableA(ptr ptr long) GetEnvironmentVariable32A
|
||||||
0214 stub GetEnvironmentVariableW
|
0214 stdcall GetEnvironmentVariableW(ptr ptr long) GetEnvironmentVariable32W
|
||||||
0215 stub GetExitCodeProcess
|
0215 stub GetExitCodeProcess
|
||||||
0216 stub GetExitCodeThread
|
0216 stub GetExitCodeThread
|
||||||
0217 stdcall GetFileAttributesA(ptr) GetFileAttributes32A
|
0217 stdcall GetFileAttributesA(ptr) GetFileAttributes32A
|
||||||
|
@ -226,7 +226,7 @@ base 1
|
||||||
0221 stdcall GetFileTime(long ptr ptr ptr) GetFileTime
|
0221 stdcall GetFileTime(long ptr ptr ptr) GetFileTime
|
||||||
0222 stdcall GetFileType(long) GetFileType
|
0222 stdcall GetFileType(long) GetFileType
|
||||||
0223 stdcall GetFullPathNameA(ptr long ptr ptr) GetFullPathName32A
|
0223 stdcall GetFullPathNameA(ptr long ptr ptr) GetFullPathName32A
|
||||||
0224 stub GetFullPathNameW
|
0224 stdcall GetFullPathNameW(ptr long ptr ptr) GetFullPathName32W
|
||||||
0225 stub GetHandleInformation
|
0225 stub GetHandleInformation
|
||||||
0226 stdcall GetLargestConsoleWindowSize(long) GetLargestConsoleWindowSize
|
0226 stdcall GetLargestConsoleWindowSize(long) GetLargestConsoleWindowSize
|
||||||
0227 stdcall GetLastError() GetLastError
|
0227 stdcall GetLastError() GetLastError
|
||||||
|
@ -237,10 +237,10 @@ base 1
|
||||||
0232 stdcall GetLogicalDriveStringsW(long ptr) GetLogicalDriveStrings32W
|
0232 stdcall GetLogicalDriveStringsW(long ptr) GetLogicalDriveStrings32W
|
||||||
0233 stdcall GetLogicalDrives() GetLogicalDrives
|
0233 stdcall GetLogicalDrives() GetLogicalDrives
|
||||||
0234 stub GetMailslotInfo
|
0234 stub GetMailslotInfo
|
||||||
0235 stdcall GetModuleFileNameA(long ptr long) GetModuleFileName
|
0235 stdcall GetModuleFileNameA(long ptr long) GetModuleFileName32A
|
||||||
0236 stub GetModuleFileNameW
|
0236 stdcall GetModuleFileNameW(long ptr long) GetModuleFileName32W
|
||||||
0237 stdcall GetModuleHandleA(ptr) WIN32_GetModuleHandle
|
0237 stdcall GetModuleHandleA(ptr) WIN32_GetModuleHandleA
|
||||||
0238 stub GetModuleHandleW
|
0238 stdcall GetModuleHandleW(ptr) WIN32_GetModuleHandleW
|
||||||
0239 stub GetNamedPipeHandleStateA
|
0239 stub GetNamedPipeHandleStateA
|
||||||
0240 stub GetNamedPipeHandleStateW
|
0240 stub GetNamedPipeHandleStateW
|
||||||
0241 stub GetNamedPipeInfo
|
0241 stub GetNamedPipeInfo
|
||||||
|
@ -275,8 +275,8 @@ base 1
|
||||||
0270 stub GetQueuedCompletionStatus
|
0270 stub GetQueuedCompletionStatus
|
||||||
0271 stdcall GetShortPathNameA(ptr ptr long) GetShortPathName32A
|
0271 stdcall GetShortPathNameA(ptr ptr long) GetShortPathName32A
|
||||||
0272 stdcall GetShortPathNameW(ptr ptr long) GetShortPathName32W
|
0272 stdcall GetShortPathNameW(ptr ptr long) GetShortPathName32W
|
||||||
0273 stdcall GetStartupInfoA(ptr) GetStartupInfoA
|
0273 stdcall GetStartupInfoA(ptr) GetStartupInfo32A
|
||||||
0274 stub GetStartupInfoW
|
0274 stdcall GetStartupInfoW(ptr) GetStartupInfo32W
|
||||||
0275 stdcall GetStdHandle(long) GetStdHandle
|
0275 stdcall GetStdHandle(long) GetStdHandle
|
||||||
0276 stub GetStringTypeA
|
0276 stub GetStringTypeA
|
||||||
0277 stub GetStringTypeExA
|
0277 stub GetStringTypeExA
|
||||||
|
@ -367,10 +367,10 @@ base 1
|
||||||
0362 stub LCMapStringA
|
0362 stub LCMapStringA
|
||||||
0363 stub LCMapStringW
|
0363 stub LCMapStringW
|
||||||
0364 stdcall LeaveCriticalSection(ptr) LeaveCriticalSection
|
0364 stdcall LeaveCriticalSection(ptr) LeaveCriticalSection
|
||||||
0365 stdcall LoadLibraryA(long) LoadLibraryA
|
0365 stdcall LoadLibraryA(ptr) LoadLibrary32A
|
||||||
0366 stub LoadLibraryExA
|
0366 stub LoadLibraryExA
|
||||||
0367 stub LoadLibraryExW
|
0367 stub LoadLibraryExW
|
||||||
0368 stub LoadLibraryW
|
0368 stdcall LoadLibraryW(ptr) LoadLibrary32W
|
||||||
0369 stub LoadModule
|
0369 stub LoadModule
|
||||||
0370 stdcall LoadResource(long long) LoadResource32
|
0370 stdcall LoadResource(long long) LoadResource32
|
||||||
0371 stdcall LocalAlloc(long long) LocalAlloc32
|
0371 stdcall LocalAlloc(long long) LocalAlloc32
|
||||||
|
@ -384,7 +384,7 @@ base 1
|
||||||
0379 stdcall LocalShrink(long long) LocalShrink32
|
0379 stdcall LocalShrink(long long) LocalShrink32
|
||||||
0380 stdcall LocalSize(long) LocalSize32
|
0380 stdcall LocalSize(long) LocalSize32
|
||||||
0381 stdcall LocalUnlock(long) LocalUnlock32
|
0381 stdcall LocalUnlock(long) LocalUnlock32
|
||||||
0382 stub LockFile
|
0382 stdcall LockFile(long long long long long) LockFile
|
||||||
0383 stub LockFileEx
|
0383 stub LockFileEx
|
||||||
0384 stdcall LockResource(long) LockResource32
|
0384 stdcall LockResource(long) LockResource32
|
||||||
0385 stdcall MapViewOfFile(long long long long long) MapViewOfFile
|
0385 stdcall MapViewOfFile(long long long long long) MapViewOfFile
|
||||||
|
@ -421,7 +421,7 @@ base 1
|
||||||
0416 stub QueryPerformanceFrequency
|
0416 stub QueryPerformanceFrequency
|
||||||
0417 stub QueryWin31IniFilesMappedToRegistry
|
0417 stub QueryWin31IniFilesMappedToRegistry
|
||||||
0418 stdcall RaiseException(long long long ptr) RaiseException
|
0418 stdcall RaiseException(long long long ptr) RaiseException
|
||||||
0419 stub ReadConsoleA
|
0419 stdcall ReadConsoleA(long ptr long ptr ptr) ReadConsole32A
|
||||||
0420 stub ReadConsoleInputA
|
0420 stub ReadConsoleInputA
|
||||||
0421 stub ReadConsoleInputW
|
0421 stub ReadConsoleInputW
|
||||||
0422 stub ReadConsoleOutputA
|
0422 stub ReadConsoleOutputA
|
||||||
|
@ -429,7 +429,7 @@ base 1
|
||||||
0424 stub ReadConsoleOutputCharacterA
|
0424 stub ReadConsoleOutputCharacterA
|
||||||
0425 stub ReadConsoleOutputCharacterW
|
0425 stub ReadConsoleOutputCharacterW
|
||||||
0426 stub ReadConsoleOutputW
|
0426 stub ReadConsoleOutputW
|
||||||
0427 stub ReadConsoleW
|
0427 stdcall ReadConsoleW(long ptr long ptr ptr) ReadConsole32W
|
||||||
0428 stdcall ReadFile(long ptr long ptr ptr) ReadFile
|
0428 stdcall ReadFile(long ptr long ptr ptr) ReadFile
|
||||||
0429 stub ReadFileEx
|
0429 stub ReadFileEx
|
||||||
0430 stub ReadProcessMemory
|
0430 stub ReadProcessMemory
|
||||||
|
@ -471,18 +471,18 @@ base 1
|
||||||
0466 stub SetConsoleKeyShortcuts
|
0466 stub SetConsoleKeyShortcuts
|
||||||
0467 stub SetConsoleMaximumWindowSize
|
0467 stub SetConsoleMaximumWindowSize
|
||||||
0468 stub SetConsoleMenuClose
|
0468 stub SetConsoleMenuClose
|
||||||
0469 stub SetConsoleMode
|
0469 stdcall SetConsoleMode(long long) SetConsoleMode
|
||||||
0470 stub SetConsoleNumberOfCommandsA
|
0470 stub SetConsoleNumberOfCommandsA
|
||||||
0471 stub SetConsoleNumberOfCommandsW
|
0471 stub SetConsoleNumberOfCommandsW
|
||||||
0472 stub SetConsoleOutputCP
|
0472 stub SetConsoleOutputCP
|
||||||
0473 stub SetConsolePalette
|
0473 stub SetConsolePalette
|
||||||
0474 stub SetConsoleScreenBufferSize
|
0474 stub SetConsoleScreenBufferSize
|
||||||
0475 stub SetConsoleTextAttribute
|
0475 stub SetConsoleTextAttribute
|
||||||
0476 stub SetConsoleTitleA
|
0476 stdcall SetConsoleTitleA(ptr) SetConsoleTitle32A
|
||||||
0477 stub SetConsoleTitleW
|
0477 stdcall SetConsoleTitleW(ptr) SetConsoleTitle32W
|
||||||
0478 stub SetConsoleWindowInfo
|
0478 stub SetConsoleWindowInfo
|
||||||
0479 stdcall SetCurrentDirectoryA(ptr) SetCurrentDirectory
|
0479 stdcall SetCurrentDirectoryA(ptr) SetCurrentDirectory32A
|
||||||
0480 stub SetCurrentDirectoryW
|
0480 stdcall SetCurrentDirectoryW(ptr) SetCurrentDirectory32W
|
||||||
0481 stub SetDefaultCommConfigA
|
0481 stub SetDefaultCommConfigA
|
||||||
0482 stub SetDefaultCommConfigW
|
0482 stub SetDefaultCommConfigW
|
||||||
0483 stdcall SetEndOfFile(long) SetEndOfFile
|
0483 stdcall SetEndOfFile(long) SetEndOfFile
|
||||||
|
@ -490,8 +490,8 @@ base 1
|
||||||
0485 stdcall SetEnvironmentVariableW(ptr ptr) SetEnvironmentVariable32W
|
0485 stdcall SetEnvironmentVariableW(ptr ptr) SetEnvironmentVariable32W
|
||||||
0486 stdcall SetErrorMode(long) SetErrorMode
|
0486 stdcall SetErrorMode(long) SetErrorMode
|
||||||
0487 stdcall SetEvent(long) SetEvent
|
0487 stdcall SetEvent(long) SetEvent
|
||||||
0488 stub SetFileApisToANSI
|
0488 stdcall SetFileApisToANSI() SetFileApisToANSI
|
||||||
0489 stub SetFileApisToOEM
|
0489 stdcall SetFileApisToOEM() SetFileApisToOEM
|
||||||
0490 stdcall SetFileAttributesA(ptr long) SetFileAttributes32A
|
0490 stdcall SetFileAttributesA(ptr long) SetFileAttributes32A
|
||||||
0491 stdcall SetFileAttributesW(ptr long) SetFileAttributes32W
|
0491 stdcall SetFileAttributesW(ptr long) SetFileAttributes32W
|
||||||
0492 stdcall SetFilePointer(long long ptr long) SetFilePointer
|
0492 stdcall SetFilePointer(long long ptr long) SetFilePointer
|
||||||
|
@ -540,7 +540,7 @@ base 1
|
||||||
0535 stdcall TransmitCommChar(long long) TransmitCommChar32
|
0535 stdcall TransmitCommChar(long long) TransmitCommChar32
|
||||||
0536 stub TrimVirtualBuffer
|
0536 stub TrimVirtualBuffer
|
||||||
0537 stdcall UnhandledExceptionFilter(ptr) UnhandledExceptionFilter
|
0537 stdcall UnhandledExceptionFilter(ptr) UnhandledExceptionFilter
|
||||||
0538 stub UnlockFile
|
0538 stdcall UnlockFile(long long long long long) UnlockFile
|
||||||
0539 stub UnlockFileEx
|
0539 stub UnlockFileEx
|
||||||
0540 stdcall UnmapViewOfFile(ptr) UnmapViewOfFile
|
0540 stdcall UnmapViewOfFile(ptr) UnmapViewOfFile
|
||||||
0541 stub UpdateResourceA
|
0541 stub UpdateResourceA
|
||||||
|
@ -569,7 +569,7 @@ base 1
|
||||||
0564 stub WaitNamedPipeW
|
0564 stub WaitNamedPipeW
|
||||||
0565 stdcall WideCharToMultiByte(long long ptr long ptr long ptr ptr) WideCharToMultiByte
|
0565 stdcall WideCharToMultiByte(long long ptr long ptr long ptr ptr) WideCharToMultiByte
|
||||||
0566 stdcall WinExec(ptr long) WinExec
|
0566 stdcall WinExec(ptr long) WinExec
|
||||||
0567 stub WriteConsoleA
|
0567 stdcall WriteConsoleA(long ptr long ptr ptr) WriteConsole32A
|
||||||
0568 stub WriteConsoleInputA
|
0568 stub WriteConsoleInputA
|
||||||
0569 stub WriteConsoleInputVDMA
|
0569 stub WriteConsoleInputVDMA
|
||||||
0570 stub WriteConsoleInputVDMW
|
0570 stub WriteConsoleInputVDMW
|
||||||
|
@ -579,7 +579,7 @@ base 1
|
||||||
0574 stub WriteConsoleOutputCharacterA
|
0574 stub WriteConsoleOutputCharacterA
|
||||||
0575 stub WriteConsoleOutputCharacterW
|
0575 stub WriteConsoleOutputCharacterW
|
||||||
0576 stub WriteConsoleOutputW
|
0576 stub WriteConsoleOutputW
|
||||||
0577 stub WriteConsoleW
|
0577 stdcall WriteConsoleW(long ptr long ptr ptr) WriteConsole32W
|
||||||
0578 stdcall WriteFile(long ptr long ptr ptr) WriteFile
|
0578 stdcall WriteFile(long ptr long ptr ptr) WriteFile
|
||||||
0579 stub WriteFileEx
|
0579 stub WriteFileEx
|
||||||
0580 stub WritePrivateProfileSectionA
|
0580 stub WritePrivateProfileSectionA
|
||||||
|
@ -649,3 +649,10 @@ base 1
|
||||||
0643 stub MapSLFix
|
0643 stub MapSLFix
|
||||||
0644 stub UnMapSLFixArray
|
0644 stub UnMapSLFixArray
|
||||||
0645 stub dprintf
|
0645 stub dprintf
|
||||||
|
0646 stub CreateToolhelp32Snapshot
|
||||||
|
0647 stub Module32First
|
||||||
|
0648 stub Module32Next
|
||||||
|
0649 stub Process32First
|
||||||
|
0650 stub Process32Next
|
||||||
|
0651 stub Thread32First
|
||||||
|
0652 stub Thread32Next
|
||||||
|
|
|
@ -16,7 +16,7 @@ type win16
|
||||||
130 pascal16 GetKeyboardType(byte) GetKeyboardType
|
130 pascal16 GetKeyboardType(byte) GetKeyboardType
|
||||||
131 pascal16 MapVirtualKey(word word) MapVirtualKey
|
131 pascal16 MapVirtualKey(word word) MapVirtualKey
|
||||||
132 pascal16 GetKbCodePage() GetKbCodePage
|
132 pascal16 GetKbCodePage() GetKbCodePage
|
||||||
133 pascal16 GetKeyNameText(long ptr word) GetKeyNameText
|
133 pascal16 GetKeyNameText(long ptr word) GetKeyNameText16
|
||||||
134 pascal16 AnsiToOemBuff(ptr ptr word) AnsiToOemBuff
|
134 pascal16 AnsiToOemBuff(ptr ptr word) AnsiToOemBuff
|
||||||
135 pascal16 OemToAnsiBuff(ptr ptr word) OemToAnsiBuff
|
135 pascal16 OemToAnsiBuff(ptr ptr word) OemToAnsiBuff
|
||||||
#136 pascal EnableKbSysReq
|
#136 pascal EnableKbSysReq
|
||||||
|
|
|
@ -90,7 +90,7 @@ base 0
|
||||||
086 stub NtCreateThread
|
086 stub NtCreateThread
|
||||||
087 stub NtCreateTimer
|
087 stub NtCreateTimer
|
||||||
088 stub NtCreateToken
|
088 stub NtCreateToken
|
||||||
089 stub NtCurrentTeb
|
089 register NtCurrentTeb() NtCurrentTeb
|
||||||
090 stub NtDelayExecution
|
090 stub NtDelayExecution
|
||||||
091 stub NtDeleteFile
|
091 stub NtDeleteFile
|
||||||
092 stub NtDeleteKey
|
092 stub NtDeleteKey
|
||||||
|
@ -303,7 +303,7 @@ base 0
|
||||||
299 stub RtlCopyLuid
|
299 stub RtlCopyLuid
|
||||||
300 stub RtlCopyLuidAndAttributesArray
|
300 stub RtlCopyLuidAndAttributesArray
|
||||||
301 stub RtlCopySecurityDescriptor
|
301 stub RtlCopySecurityDescriptor
|
||||||
302 stub RtlCopySid
|
302 stdcall RtlCopySid(long ptr ptr) RtlCopySid
|
||||||
303 stub RtlCopySidAndAttributesArray
|
303 stub RtlCopySidAndAttributesArray
|
||||||
304 stub RtlCopyString
|
304 stub RtlCopyString
|
||||||
305 stub RtlCopyUnicodeString
|
305 stub RtlCopyUnicodeString
|
||||||
|
@ -411,7 +411,7 @@ base 0
|
||||||
407 stub RtlInitializeGenericTable
|
407 stub RtlInitializeGenericTable
|
||||||
408 stub RtlInitializeRXact
|
408 stub RtlInitializeRXact
|
||||||
409 stub RtlInitializeResource
|
409 stub RtlInitializeResource
|
||||||
410 stub RtlInitializeSid
|
410 stdcall RtlInitializeSid(ptr ptr long) RtlInitializeSid
|
||||||
411 stub RtlInsertElementGenericTable
|
411 stub RtlInsertElementGenericTable
|
||||||
412 stub RtlIntegerToChar
|
412 stub RtlIntegerToChar
|
||||||
413 stub RtlIntegerToUnicodeString
|
413 stub RtlIntegerToUnicodeString
|
||||||
|
@ -428,7 +428,7 @@ base 0
|
||||||
424 stub RtlLargeIntegerSubtract
|
424 stub RtlLargeIntegerSubtract
|
||||||
425 stub RtlLargeIntegerToChar
|
425 stub RtlLargeIntegerToChar
|
||||||
426 stub RtlLeaveCriticalSection
|
426 stub RtlLeaveCriticalSection
|
||||||
427 stub RtlLengthRequiredSid
|
427 stdcall RtlLengthRequiredSid(long) RtlLengthRequiredSid
|
||||||
428 stub RtlLengthSecurityDescriptor
|
428 stub RtlLengthSecurityDescriptor
|
||||||
429 stub RtlLengthSid
|
429 stub RtlLengthSid
|
||||||
430 stub RtlLocalTimeToSystemTime
|
430 stub RtlLocalTimeToSystemTime
|
||||||
|
@ -442,14 +442,14 @@ base 0
|
||||||
438 stub RtlNewInstanceSecurityObject
|
438 stub RtlNewInstanceSecurityObject
|
||||||
439 stub RtlNewSecurityGrantedAccess
|
439 stub RtlNewSecurityGrantedAccess
|
||||||
440 stub RtlNewSecurityObject
|
440 stub RtlNewSecurityObject
|
||||||
441 stub RtlNormalizeProcessParams
|
441 stdcall RtlNormalizeProcessParams(ptr) RtlNormalizeProcessParams
|
||||||
442 stub RtlNtStatusToDosError
|
442 stub RtlNtStatusToDosError
|
||||||
443 stub RtlNumberGenericTableElements
|
443 stub RtlNumberGenericTableElements
|
||||||
444 stub RtlNumberOfClearBits
|
444 stub RtlNumberOfClearBits
|
||||||
445 stub RtlNumberOfSetBits
|
445 stub RtlNumberOfSetBits
|
||||||
446 stub RtlOemStringToUnicodeSize
|
446 stub RtlOemStringToUnicodeSize
|
||||||
447 stub RtlOemStringToUnicodeString
|
447 stub RtlOemStringToUnicodeString
|
||||||
448 stub RtlOemToUnicodeN
|
448 stdcall RtlOemToUnicodeN(ptr long ptr ptr long) RtlOemToUnicodeN
|
||||||
449 stub RtlOpenCurrentUser
|
449 stub RtlOpenCurrentUser
|
||||||
450 stub RtlPcToFileHeader
|
450 stub RtlPcToFileHeader
|
||||||
451 stub RtlPrefixString
|
451 stub RtlPrefixString
|
||||||
|
@ -497,8 +497,8 @@ base 0
|
||||||
493 stub RtlSizeHeap
|
493 stub RtlSizeHeap
|
||||||
494 stub RtlSplay
|
494 stub RtlSplay
|
||||||
495 stub RtlStartRXact
|
495 stub RtlStartRXact
|
||||||
496 stub RtlSubAuthorityCountSid
|
496 stdcall RtlSubAuthorityCountSid(ptr) RtlSubAuthorityCountSid
|
||||||
497 stub RtlSubAuthoritySid
|
497 stdcall RtlSubAuthoritySid(ptr long) RtlSubAuthoritySid
|
||||||
498 stub RtlSubtreePredecessor
|
498 stub RtlSubtreePredecessor
|
||||||
499 stub RtlSubtreeSuccessor
|
499 stub RtlSubtreeSuccessor
|
||||||
500 stub RtlSystemTimeToLocalTime
|
500 stub RtlSystemTimeToLocalTime
|
||||||
|
@ -512,11 +512,11 @@ base 0
|
||||||
508 stub RtlUnicodeStringToCountedOemString
|
508 stub RtlUnicodeStringToCountedOemString
|
||||||
509 stub RtlUnicodeStringToInteger
|
509 stub RtlUnicodeStringToInteger
|
||||||
510 stub RtlUnicodeStringToOemSize
|
510 stub RtlUnicodeStringToOemSize
|
||||||
511 stub RtlUnicodeStringToOemString
|
511 stdcall RtlUnicodeStringToOemString(ptr ptr long) RtlUnicodeStringToOemString
|
||||||
512 stub RtlUnicodeToCustomCPN
|
512 stub RtlUnicodeToCustomCPN
|
||||||
513 stub RtlUnicodeToMultiByteN
|
513 stub RtlUnicodeToMultiByteN
|
||||||
514 stub RtlUnicodeToMultiByteSize
|
514 stub RtlUnicodeToMultiByteSize
|
||||||
515 stub RtlUnicodeToOemN
|
515 stdcall RtlUnicodeToOemN(ptr long ptr ptr long) RtlUnicodeToOemN
|
||||||
516 stub RtlUniform
|
516 stub RtlUniform
|
||||||
517 stub RtlUnlockHeap
|
517 stub RtlUnlockHeap
|
||||||
518 stub RtlUnwind
|
518 stub RtlUnwind
|
||||||
|
@ -907,16 +907,16 @@ base 0
|
||||||
903 stub memchr
|
903 stub memchr
|
||||||
904 stub memcmp
|
904 stub memcmp
|
||||||
905 stub memcpy
|
905 stub memcpy
|
||||||
906 stub memmove
|
906 stdcall memmove(ptr ptr long) memmove
|
||||||
907 stub memset
|
907 stub memset
|
||||||
908 stub pow
|
908 stub pow
|
||||||
909 stub qsort
|
909 stub qsort
|
||||||
910 stub sin
|
910 stub sin
|
||||||
911 stub sprintf
|
911 stdcall sprintf() CRTDLL_sprintf
|
||||||
912 stub sqrt
|
912 stub sqrt
|
||||||
913 stub sscanf
|
913 stdcall sscanf() CRTDLL_sscanf
|
||||||
914 stub strcat
|
914 stub strcat
|
||||||
915 stub strchr
|
915 stdcall strchr(ptr long) strchr
|
||||||
916 stub strcmp
|
916 stub strcmp
|
||||||
917 stub strcpy
|
917 stub strcpy
|
||||||
918 stub strcspn
|
918 stub strcspn
|
||||||
|
@ -925,7 +925,7 @@ base 0
|
||||||
921 stub strncmp
|
921 stub strncmp
|
||||||
922 stub strncpy
|
922 stub strncpy
|
||||||
923 stub strpbrk
|
923 stub strpbrk
|
||||||
924 stub strrchr
|
924 stdcall strrchr(ptr long) strrchr
|
||||||
925 stub strspn
|
925 stub strspn
|
||||||
926 stub strstr
|
926 stub strstr
|
||||||
927 stub swprintf
|
927 stub swprintf
|
||||||
|
|
|
@ -132,7 +132,7 @@ base 1
|
||||||
127 stub OleSetContainedObject
|
127 stub OleSetContainedObject
|
||||||
128 stub OleSetMenuDescriptor
|
128 stub OleSetMenuDescriptor
|
||||||
129 stub OleTranslateAccelerator
|
129 stub OleTranslateAccelerator
|
||||||
130 stub OleUninitialize
|
130 return OleUninitialize 0 0
|
||||||
131 stub OpenOrCreateStream
|
131 stub OpenOrCreateStream
|
||||||
132 stub ProgIDFromCLSID
|
132 stub ProgIDFromCLSID
|
||||||
133 stub ReadClassStg
|
133 stub ReadClassStg
|
||||||
|
|
|
@ -4,7 +4,7 @@ base 1
|
||||||
|
|
||||||
0000 stub CheckEscapesA
|
0000 stub CheckEscapesA
|
||||||
0001 stub CheckEscapesW
|
0001 stub CheckEscapesW
|
||||||
0002 stub CommandLineToArgvW
|
0002 stdcall CommandLineToArgvW(ptr ptr) CommandLineToArgvW
|
||||||
0003 stub Control_FillCache_RunDLL
|
0003 stub Control_FillCache_RunDLL
|
||||||
0004 stub Control_RunDLL
|
0004 stub Control_RunDLL
|
||||||
0005 stub DllGetClassObject
|
0005 stub DllGetClassObject
|
||||||
|
@ -85,7 +85,7 @@ base 1
|
||||||
0080 stub SheShortenPathA
|
0080 stub SheShortenPathA
|
||||||
0081 stub SheShortenPathW
|
0081 stub SheShortenPathW
|
||||||
0082 stdcall ShellAboutA(long ptr ptr long) ShellAbout
|
0082 stdcall ShellAboutA(long ptr ptr long) ShellAbout
|
||||||
0083 stub ShellAboutW
|
0083 stdcall ShellAboutW(long ptr ptr long) ShellAbout32W
|
||||||
0084 stdcall ShellExecuteA(long ptr ptr ptr ptr long) ShellExecute
|
0084 stdcall ShellExecuteA(long ptr ptr ptr ptr long) ShellExecute
|
||||||
0085 stub ShellExecuteEx
|
0085 stub ShellExecuteEx
|
||||||
0086 stub ShellExecuteExA
|
0086 stub ShellExecuteExA
|
||||||
|
|
|
@ -105,7 +105,7 @@ INT16 THUNK_EnumObjects16( HDC16 hdc, INT16 nObjType,
|
||||||
INT32 THUNK_EnumObjects32( HDC32 hdc, INT32 nObjType,
|
INT32 THUNK_EnumObjects32( HDC32 hdc, INT32 nObjType,
|
||||||
GOBJENUMPROC32 func, LPARAM lParam )
|
GOBJENUMPROC32 func, LPARAM lParam )
|
||||||
{
|
{
|
||||||
DECL_THUNK( thunk, func, CallTo32_4 );
|
DECL_THUNK( thunk, func, CallTo32_2 );
|
||||||
return EnumObjects32( hdc, nObjType, (GOBJENUMPROC32)&thunk, lParam );
|
return EnumObjects32( hdc, nObjType, (GOBJENUMPROC32)&thunk, lParam );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2,7 +2,7 @@ name user
|
||||||
type win16
|
type win16
|
||||||
heap 65520
|
heap 65520
|
||||||
|
|
||||||
1 pascal16 MessageBox(word ptr ptr word) MessageBox
|
1 pascal16 MessageBox(word ptr ptr word) MessageBox16
|
||||||
2 stub OldExitWindows
|
2 stub OldExitWindows
|
||||||
3 stub EnableOEMLayer
|
3 stub EnableOEMLayer
|
||||||
4 stub DisableOEMLayer
|
4 stub DisableOEMLayer
|
||||||
|
@ -37,7 +37,7 @@ heap 65520
|
||||||
35 pascal16 IsWindowEnabled(word) IsWindowEnabled
|
35 pascal16 IsWindowEnabled(word) IsWindowEnabled
|
||||||
36 pascal16 GetWindowText(word segptr word) GetWindowText16
|
36 pascal16 GetWindowText(word segptr word) GetWindowText16
|
||||||
37 pascal16 SetWindowText(word segptr) SetWindowText16
|
37 pascal16 SetWindowText(word segptr) SetWindowText16
|
||||||
38 pascal16 GetWindowTextLength(word) GetWindowTextLength
|
38 pascal16 GetWindowTextLength(word) GetWindowTextLength16
|
||||||
39 pascal16 BeginPaint(word ptr) BeginPaint16
|
39 pascal16 BeginPaint(word ptr) BeginPaint16
|
||||||
40 pascal16 EndPaint(word ptr) EndPaint16
|
40 pascal16 EndPaint(word ptr) EndPaint16
|
||||||
41 pascal16 CreateWindow(ptr ptr long s_word s_word s_word s_word
|
41 pascal16 CreateWindow(ptr ptr long s_word s_word s_word s_word
|
||||||
|
@ -144,7 +144,7 @@ heap 65520
|
||||||
142 pascal16 GetClipboardData(word) GetClipboardData
|
142 pascal16 GetClipboardData(word) GetClipboardData
|
||||||
143 pascal16 CountClipboardFormats() CountClipboardFormats
|
143 pascal16 CountClipboardFormats() CountClipboardFormats
|
||||||
144 pascal16 EnumClipboardFormats(word) EnumClipboardFormats
|
144 pascal16 EnumClipboardFormats(word) EnumClipboardFormats
|
||||||
145 pascal16 RegisterClipboardFormat(ptr) RegisterClipboardFormat
|
145 pascal16 RegisterClipboardFormat(ptr) RegisterClipboardFormat16
|
||||||
146 pascal16 GetClipboardFormatName(word ptr s_word) GetClipboardFormatName
|
146 pascal16 GetClipboardFormatName(word ptr s_word) GetClipboardFormatName
|
||||||
147 pascal16 SetClipboardViewer(word) SetClipboardViewer
|
147 pascal16 SetClipboardViewer(word) SetClipboardViewer
|
||||||
148 pascal16 GetClipboardViewer() GetClipboardViewer
|
148 pascal16 GetClipboardViewer() GetClipboardViewer
|
||||||
|
@ -423,7 +423,7 @@ heap 65520
|
||||||
480 stub GetUserLocalObjType
|
480 stub GetUserLocalObjType
|
||||||
#481 HARDWARE_EVENT
|
#481 HARDWARE_EVENT
|
||||||
482 pascal16 EnableScrollBar(word word word) EnableScrollBar16
|
482 pascal16 EnableScrollBar(word word word) EnableScrollBar16
|
||||||
483 pascal16 SystemParametersInfo(word word ptr word) SystemParametersInfo
|
483 pascal16 SystemParametersInfo(word word ptr word) SystemParametersInfo16
|
||||||
#484 __GP
|
#484 __GP
|
||||||
# Stubs for Hebrew version
|
# Stubs for Hebrew version
|
||||||
489 pascal16 USER_489() stub_USER_489
|
489 pascal16 USER_489() stub_USER_489
|
||||||
|
|
|
@ -349,7 +349,7 @@ base 1
|
||||||
0342 stub IsDialogMessageW
|
0342 stub IsDialogMessageW
|
||||||
0343 stdcall IsDlgButtonChecked(long long) IsDlgButtonChecked
|
0343 stdcall IsDlgButtonChecked(long long) IsDlgButtonChecked
|
||||||
0344 stdcall IsIconic(long) IsIconic
|
0344 stdcall IsIconic(long) IsIconic
|
||||||
0345 stub IsMenu
|
0345 stdcall IsMenu(long) IsMenu
|
||||||
0346 stdcall IsRectEmpty(ptr) IsRectEmpty32
|
0346 stdcall IsRectEmpty(ptr) IsRectEmpty32
|
||||||
0347 stdcall IsWindow(long) IsWindow
|
0347 stdcall IsWindow(long) IsWindow
|
||||||
0348 stdcall IsWindowEnabled(long) IsWindowEnabled
|
0348 stdcall IsWindowEnabled(long) IsWindowEnabled
|
||||||
|
@ -394,12 +394,12 @@ base 1
|
||||||
0387 stub MenuWindowProcA
|
0387 stub MenuWindowProcA
|
||||||
0388 stub MenuWindowProcW
|
0388 stub MenuWindowProcW
|
||||||
0389 stdcall MessageBeep(long) MessageBeep
|
0389 stdcall MessageBeep(long) MessageBeep
|
||||||
0390 stdcall MessageBoxA(long ptr ptr long) MessageBox
|
0390 stdcall MessageBoxA(long ptr ptr long) MessageBox32A
|
||||||
0391 stub MessageBoxExA
|
0391 stub MessageBoxExA
|
||||||
0392 stub MessageBoxExW
|
0392 stub MessageBoxExW
|
||||||
0393 stub MessageBoxIndirectA
|
0393 stub MessageBoxIndirectA
|
||||||
0394 stub MessageBoxIndirectW
|
0394 stub MessageBoxIndirectW
|
||||||
0395 stub MessageBoxW
|
0395 stdcall MessageBoxW(long ptr ptr long) MessageBox32W
|
||||||
0396 stdcall ModifyMenuA(long long long long ptr) ModifyMenu32A
|
0396 stdcall ModifyMenuA(long long long long ptr) ModifyMenu32A
|
||||||
0397 stdcall ModifyMenuW(long long long long ptr) ModifyMenu32W
|
0397 stdcall ModifyMenuW(long long long long ptr) ModifyMenu32W
|
||||||
0398 stdcall MoveWindow(long long long long long long) MoveWindow
|
0398 stdcall MoveWindow(long long long long long long) MoveWindow
|
||||||
|
@ -434,8 +434,8 @@ base 1
|
||||||
0427 stdcall RegisterClassExA(ptr) RegisterClassEx32A
|
0427 stdcall RegisterClassExA(ptr) RegisterClassEx32A
|
||||||
0428 stdcall RegisterClassExW(ptr) RegisterClassEx32W
|
0428 stdcall RegisterClassExW(ptr) RegisterClassEx32W
|
||||||
0429 stdcall RegisterClassW(ptr) RegisterClass32W
|
0429 stdcall RegisterClassW(ptr) RegisterClass32W
|
||||||
0430 stdcall RegisterClipboardFormatA(ptr) RegisterClipboardFormat
|
0430 stdcall RegisterClipboardFormatA(ptr) RegisterClipboardFormat32A
|
||||||
0431 stub RegisterClipboardFormatW
|
0431 stdcall RegisterClipboardFormatW(ptr) RegisterClipboardFormat32W
|
||||||
0432 stub RegisterHotKey
|
0432 stub RegisterHotKey
|
||||||
0433 stub RegisterLogonProcess
|
0433 stub RegisterLogonProcess
|
||||||
0434 stub RegisterSystemThread
|
0434 stub RegisterSystemThread
|
||||||
|
@ -444,7 +444,7 @@ base 1
|
||||||
0437 stdcall RegisterWindowMessageW(ptr) RegisterWindowMessage32W
|
0437 stdcall RegisterWindowMessageW(ptr) RegisterWindowMessage32W
|
||||||
0438 stdcall ReleaseCapture() ReleaseCapture
|
0438 stdcall ReleaseCapture() ReleaseCapture
|
||||||
0439 stdcall ReleaseDC(long long) ReleaseDC32
|
0439 stdcall ReleaseDC(long long) ReleaseDC32
|
||||||
0440 stub RemoveMenu
|
0440 stdcall RemoveMenu(long long long) RemoveMenu
|
||||||
0441 stdcall RemovePropA(long ptr) RemoveProp32A
|
0441 stdcall RemovePropA(long ptr) RemoveProp32A
|
||||||
0442 stdcall RemovePropW(long ptr) RemoveProp32W
|
0442 stdcall RemovePropW(long ptr) RemoveProp32W
|
||||||
0443 stub ReplyMessage
|
0443 stub ReplyMessage
|
||||||
|
@ -543,8 +543,8 @@ base 1
|
||||||
0536 stdcall SwapMouseButton(long) SwapMouseButton
|
0536 stdcall SwapMouseButton(long) SwapMouseButton
|
||||||
0537 stub SwitchDesktop
|
0537 stub SwitchDesktop
|
||||||
0538 stub SwitchToThisWindow
|
0538 stub SwitchToThisWindow
|
||||||
0539 stdcall SystemParametersInfoA(long long ptr long) SystemParametersInfo
|
0539 stdcall SystemParametersInfoA(long long ptr long) SystemParametersInfo32A
|
||||||
0540 stub SystemParametersInfoW
|
0540 stdcall SystemParametersInfoW(long long ptr long) SystemParametersInfo32W
|
||||||
0541 stub TabbedTextOutA
|
0541 stub TabbedTextOutA
|
||||||
0542 stub TabbedTextOutW
|
0542 stub TabbedTextOutW
|
||||||
0543 stub TileChildWindows
|
0543 stub TileChildWindows
|
||||||
|
|
|
@ -25,7 +25,7 @@ type win16
|
||||||
17 pascal16 recvfrom(word ptr word word ptr ptr) WINSOCK_recvfrom
|
17 pascal16 recvfrom(word ptr word word ptr ptr) WINSOCK_recvfrom
|
||||||
18 pascal16 select(word ptr ptr ptr ptr) WINSOCK_select
|
18 pascal16 select(word ptr ptr ptr ptr) WINSOCK_select
|
||||||
19 pascal16 send(word ptr word word) WINSOCK_send
|
19 pascal16 send(word ptr word word) WINSOCK_send
|
||||||
20 pascal16 sendto(word ptr word word ptr ptr) WINSOCK_sendto
|
20 pascal16 sendto(word ptr word word ptr word) WINSOCK_sendto
|
||||||
21 pascal16 setsockopt(word word word ptr word) WINSOCK_setsockopt
|
21 pascal16 setsockopt(word word word ptr word) WINSOCK_setsockopt
|
||||||
22 pascal16 shutdown(word word) WINSOCK_shutdown
|
22 pascal16 shutdown(word word) WINSOCK_shutdown
|
||||||
23 pascal16 socket(word word word) WINSOCK_socket
|
23 pascal16 socket(word word word) WINSOCK_socket
|
||||||
|
|
|
@ -26,12 +26,12 @@ base 0
|
||||||
022 stub shutdown
|
022 stub shutdown
|
||||||
023 stub socket
|
023 stub socket
|
||||||
051 stdcall gethostbyaddr(ptr long long) gethostbyaddr
|
051 stdcall gethostbyaddr(ptr long long) gethostbyaddr
|
||||||
052 stub gethostbyname
|
052 stdcall gethostbyname(ptr) gethostbyname
|
||||||
053 stub getprotobyname
|
053 stub getprotobyname
|
||||||
054 stub getprotobynumber
|
054 stub getprotobynumber
|
||||||
055 stdcall getservbyname(ptr ptr) getservbyname
|
055 stdcall getservbyname(ptr ptr) getservbyname
|
||||||
056 stub getservbyport
|
056 stub getservbyport
|
||||||
057 stub gethostname
|
057 stdcall gethostname(ptr long) gethostname
|
||||||
101 stub WSAAsyncSelect
|
101 stub WSAAsyncSelect
|
||||||
102 stub WSAAsyncGetHostByAddr
|
102 stub WSAAsyncGetHostByAddr
|
||||||
103 stub WSAAsyncGetHostByName
|
103 stub WSAAsyncGetHostByName
|
||||||
|
|
|
@ -7,8 +7,19 @@
|
||||||
#ifndef __WINE_BITMAP_H
|
#ifndef __WINE_BITMAP_H
|
||||||
#define __WINE_BITMAP_H
|
#define __WINE_BITMAP_H
|
||||||
|
|
||||||
|
#include <X11/extensions/XShm.h>
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
|
|
||||||
|
#ifdef PRELIMINARY_WING16_SUPPORT
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
XShmSegmentInfo si;
|
||||||
|
SEGPTR bits;
|
||||||
|
} __ShmBitmapCtl;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
/* GDI logical bitmap object */
|
/* GDI logical bitmap object */
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
|
|
|
@ -0,0 +1,13 @@
|
||||||
|
#ifndef _WINE_CRTDLL_H
|
||||||
|
#define _WINE_CRTDLL_H
|
||||||
|
|
||||||
|
#define CRTDLL_LC_ALL 0
|
||||||
|
#define CRTDLL_LC_COLLATE 1
|
||||||
|
#define CRTDLL_LC_CTYPE 2
|
||||||
|
#define CRTDLL_LC_MONETARY 3
|
||||||
|
#define CRTDLL_LC_NUMERIC 4
|
||||||
|
#define CRTDLL_LC_TIME 5
|
||||||
|
#define CRTDLL_LC_MIN LC_ALL
|
||||||
|
#define CRTDLL_LC_MAX LC_TIME
|
||||||
|
|
||||||
|
#endif
|
|
@ -148,7 +148,7 @@ typedef struct tagDC_FUNCS
|
||||||
BOOL32 (*pArc)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
|
BOOL32 (*pArc)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
|
||||||
BOOL32 (*pBitBlt)(DC*,INT32,INT32,INT32,INT32,DC*,INT32,INT32,DWORD);
|
BOOL32 (*pBitBlt)(DC*,INT32,INT32,INT32,INT32,DC*,INT32,INT32,DWORD);
|
||||||
BOOL32 (*pChord)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
|
BOOL32 (*pChord)(DC*,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32);
|
||||||
BOOL32 (*pCreateDC)(DC*,LPCSTR,LPCSTR,LPCSTR,const DEVMODE*);
|
BOOL32 (*pCreateDC)(DC*,LPCSTR,LPCSTR,LPCSTR,const DEVMODE16*);
|
||||||
BOOL32 (*pDeleteDC)(DC*);
|
BOOL32 (*pDeleteDC)(DC*);
|
||||||
BOOL32 (*pDeleteObject)(HGDIOBJ16);
|
BOOL32 (*pDeleteObject)(HGDIOBJ16);
|
||||||
BOOL32 (*pEllipse)(DC*,INT32,INT32,INT32,INT32);
|
BOOL32 (*pEllipse)(DC*,INT32,INT32,INT32,INT32);
|
||||||
|
|
|
@ -103,7 +103,7 @@ typedef struct
|
||||||
/* TDB flags */
|
/* TDB flags */
|
||||||
#define TDBF_WINOLDAP 0x0001
|
#define TDBF_WINOLDAP 0x0001
|
||||||
#define TDBF_OS2APP 0x0008
|
#define TDBF_OS2APP 0x0008
|
||||||
#define TDBF_WIN32S 0x0010
|
#define TDBF_WIN32 0x0010
|
||||||
|
|
||||||
#pragma pack(4)
|
#pragma pack(4)
|
||||||
|
|
||||||
|
|
223
include/wincon.h
223
include/wincon.h
|
@ -7,11 +7,20 @@
|
||||||
#define CTRL_LOGOFF_EVENT 5
|
#define CTRL_LOGOFF_EVENT 5
|
||||||
#define CTRL_SHUTDOWN_EVENT 6
|
#define CTRL_SHUTDOWN_EVENT 6
|
||||||
|
|
||||||
|
/* Console Mode flags */
|
||||||
|
#define ENABLE_PROCESSED_INPUT 0x01
|
||||||
|
#define ENABLE_LINE_INPUT 0x02
|
||||||
|
#define ENABLE_ECHO_INPUT 0x04
|
||||||
|
#define ENABLE_WINDOW_INPUT 0x08
|
||||||
|
#define ENABLE_MOUSE_INPUT 0x10
|
||||||
|
|
||||||
|
#define ENABLE_PROCESSED_OUTPUT 0x01
|
||||||
|
#define ENABLE_WRAP_AT_EOL_OUTPUT 0x02
|
||||||
|
|
||||||
|
|
||||||
typedef BOOL32 HANDLER_ROUTINE(WORD);
|
typedef BOOL32 HANDLER_ROUTINE(WORD);
|
||||||
|
|
||||||
/*
|
/* Attributes flags: */
|
||||||
* Attributes flags:
|
|
||||||
*/
|
|
||||||
|
|
||||||
#define FOREGROUND_BLUE 0x0001 /* text color contains blue. */
|
#define FOREGROUND_BLUE 0x0001 /* text color contains blue. */
|
||||||
#define FOREGROUND_GREEN 0x0002 /* text color contains green. */
|
#define FOREGROUND_GREEN 0x0002 /* text color contains green. */
|
||||||
|
@ -47,211 +56,3 @@ typedef struct tagCONSOLE_SCREEN_BUFFER_INFO
|
||||||
|
|
||||||
|
|
||||||
#endif /* __WINE_WINCON_H */
|
#endif /* __WINE_WINCON_H */
|
||||||
|
|
||||||
#if 0
|
|
||||||
#ifndef _WINCON_H_
|
|
||||||
#define _WINCON_H_
|
|
||||||
|
|
||||||
#ifdef UNICODE
|
|
||||||
#define FillConsoleOutputCharacter FillConsoleOutputCharacterW
|
|
||||||
#define GetConsoleTitle GetConsoleTitleW
|
|
||||||
#define PeekConsoleInput PeekConsoleInputW
|
|
||||||
#define ReadConsole ReadConsoleW
|
|
||||||
#define ReadConsoleInput ReadConsoleInputW
|
|
||||||
#define ReadConsoleOutput ReadConsoleOutputW
|
|
||||||
#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterW
|
|
||||||
#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferW
|
|
||||||
#define SetConsoleTitle SetConsoleTitleW
|
|
||||||
#define WriteConsole WriteConsoleW
|
|
||||||
#define WriteConsoleInput WriteConsoleInputW
|
|
||||||
#define WriteConsoleOutput WriteConsoleOutputW
|
|
||||||
#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterW
|
|
||||||
#else
|
|
||||||
#define FillConsoleOutputCharacter FillConsoleOutputCharacterA
|
|
||||||
#define GetConsoleTitle GetConsoleTitleA
|
|
||||||
#define PeekConsoleInput PeekConsoleInputA
|
|
||||||
#define ReadConsole ReadConsoleA
|
|
||||||
#define ReadConsoleInput ReadConsoleInputA
|
|
||||||
#define ReadConsoleOutput ReadConsoleOutputA
|
|
||||||
#define ReadConsoleOutputCharacter ReadConsoleOutputCharacterA
|
|
||||||
#define ScrollConsoleScreenBuffer ScrollConsoleScreenBufferA
|
|
||||||
#define SetConsoleTitle SetConsoleTitleA
|
|
||||||
#define WriteConsole WriteConsoleA
|
|
||||||
#define WriteConsoleInput WriteConsoleInputA
|
|
||||||
#define WriteConsoleOutput WriteConsoleOutputA
|
|
||||||
#define WriteConsoleOutputCharacter WriteConsoleOutputCharacterA
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define RIGHT_ALT_PRESSED 0x1
|
|
||||||
#define LEFT_ALT_PRESSED 0x2
|
|
||||||
#define RIGHT_CTRL_PRESSED 0x4
|
|
||||||
#define LEFT_CTRL_PRESSED 0x8
|
|
||||||
#define SHIFT_PRESSED 0x10
|
|
||||||
#define NUMLOCK_ON 0x20
|
|
||||||
#define SCROLLLOCK_ON 0x40
|
|
||||||
#define CAPSLOCK_ON 0x80
|
|
||||||
#define ENHANCED_KEY 0x100
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
COORD dwMousePosition;
|
|
||||||
DWORD dwButtonState;
|
|
||||||
DWORD dwControlKeyState;
|
|
||||||
DWORD dwEventFlags;
|
|
||||||
}
|
|
||||||
MOUSE_EVENT_RECORD;
|
|
||||||
|
|
||||||
#define CONSOLE_TEXTMODE_BUFFER 1
|
|
||||||
|
|
||||||
|
|
||||||
#define FROM_LEFT_1ST_BUTTON_PRESSED 0x0001
|
|
||||||
#define RIGHTMOST_BUTTON_PRESSED 0x0002
|
|
||||||
#define FROM_LEFT_2ND_BUTTON_PRESSED 0x0004
|
|
||||||
#define FROM_LEFT_3RD_BUTTON_PRESSED 0x0008
|
|
||||||
#define FROM_LEFT_4TH_BUTTON_PRESSED 0x0010
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define MOUSE_MOVED 0x0001
|
|
||||||
#define DOUBLE_CLICK 0x0002
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
COORD size;
|
|
||||||
}
|
|
||||||
WINDOW_BUFFER_SIZE_RECORD;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
UINT dwCommandId;
|
|
||||||
}
|
|
||||||
MENU_EVENT_RECORD;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
BOOL bSetFocus;
|
|
||||||
}
|
|
||||||
FOCUS_EVENT_RECORD;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
WORD EventType;
|
|
||||||
union
|
|
||||||
{
|
|
||||||
KEY_EVENT_RECORD KeyEvent;
|
|
||||||
MOUSE_EVENT_RECORD MouseEvent;
|
|
||||||
WINDOW_BUFFER_SIZE_RECORD WindowBufferSizeEvent;
|
|
||||||
MENU_EVENT_RECORD MenuEvent;
|
|
||||||
FOCUS_EVENT_RECORD FocusEvent;
|
|
||||||
}
|
|
||||||
Event;
|
|
||||||
}
|
|
||||||
INPUT_RECORD;
|
|
||||||
|
|
||||||
#define KEY_EVENT 0x1
|
|
||||||
#define MOUSE_EVENT 0x2
|
|
||||||
#define WINDOW_BUFFER_SIZE_EVENT 0x4
|
|
||||||
#define MENU_EVENT 0x8
|
|
||||||
#define FOCUS_EVENT 0x10
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
union
|
|
||||||
{
|
|
||||||
WCHAR UnicodeChar;
|
|
||||||
CHAR AsciiChar;
|
|
||||||
}
|
|
||||||
Char;
|
|
||||||
WORD Attributes;
|
|
||||||
}
|
|
||||||
CHAR_INFO;
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
DWORD size;
|
|
||||||
BOOL bVisible;
|
|
||||||
}
|
|
||||||
CONSOLE_CURSOR_INFO;
|
|
||||||
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
#define ENABLE_PROCESSED_INPUT 0x01
|
|
||||||
#define ENABLE_LINE_INPUT 0x02
|
|
||||||
#define ENABLE_ECHO_INPUT 0x04
|
|
||||||
#define ENABLE_WINDOW_INPUT 0x08
|
|
||||||
#define ENABLE_MOUSE_INPUT 0x10
|
|
||||||
|
|
||||||
#define ENABLE_PROCESSED_OUTPUT 0x01
|
|
||||||
#define ENABLE_WRAP_AT_EOL_OUTPUT 0x02
|
|
||||||
|
|
||||||
|
|
||||||
BOOL AllocConsole (VOID);
|
|
||||||
|
|
||||||
|
|
||||||
HANDLE CreateConsoleScreenBuffer (DWORD access, DWORD mode,
|
|
||||||
CONST SECURITY_ATTRIBUTES * lattr,
|
|
||||||
DWORD flags, VOID * ptr);
|
|
||||||
BOOL FillConsoleOutputAttribute (HANDLE h, WORD attr, DWORD len,
|
|
||||||
COORD co, DWORD * done);
|
|
||||||
BOOL FillConsoleOutputCharacterA (HANDLE h, CHAR c, DWORD len,
|
|
||||||
COORD co, DWORD * done);
|
|
||||||
BOOL FlushBuffer (HANDLE h);
|
|
||||||
BOOL FreeConsole (VOID);
|
|
||||||
BOOL GenerateConsoleCtrlEvent (DWORD ev, DWORD group);
|
|
||||||
UINT GetConsoleCP (VOID);
|
|
||||||
BOOL GetConsoleCursorInfo (HANDLE h, CONSOLE_CURSOR_INFO *info);
|
|
||||||
BOOL GetConsoleMode (HANDLE h, DWORD * mode);
|
|
||||||
UINT GetConsoleOutputCP (VOID);
|
|
||||||
BOOL GetConsoleScreenBufferInfo (HANDLE h, CONSOLE_SCREEN_BUFFER_INFO * ptr);
|
|
||||||
DWORD GetConsoleTitleA (LPSTR str, DWORD len);
|
|
||||||
COORD GetLargestConsoleWindowSize (HANDLE h);
|
|
||||||
BOOL GetNumberOfConsoleInputEvents (HANDLE h, DWORD * n);
|
|
||||||
BOOL GetNumberOfConsoleMouseButtons (DWORD * n);
|
|
||||||
BOOL PeekConsoleInputA (HANDLE h, INPUT_RECORD * ptr, DWORD len, DWORD * done);
|
|
||||||
BOOL ReadConsoleA (HANDLE h, VOID * ptr, DWORD len, DWORD * done, VOID * res);
|
|
||||||
BOOL ReadConsoleInputA (HANDLE h, INPUT_RECORD * ptr, DWORD len, DWORD * done);
|
|
||||||
BOOL ReadConsoleOutputA (HANDLE h, CHAR_INFO * ptr, COORD size,
|
|
||||||
COORD fred, SMALL_RECT * reg);
|
|
||||||
BOOL ReadConsoleOutputAttribute (HANDLE h, WORD * attr, DWORD len,
|
|
||||||
COORD rc, DWORD * done);
|
|
||||||
BOOL ReadConsoleOutputCharacterA (HANDLE h, LPSTR c, DWORD len,
|
|
||||||
COORD rc, DWORD * done);
|
|
||||||
BOOL ScrollConsoleScreenBufferA (HANDLE h, CONST SMALL_RECT * sr,
|
|
||||||
CONST SMALL_RECT * cr, COORD cpos,
|
|
||||||
CONST CHAR_INFO * i);
|
|
||||||
BOOL SetConsoleActiveScreenBuffer (HANDLE h);
|
|
||||||
BOOL SetConsoleCP (UINT i);
|
|
||||||
BOOL SetConsoleCtrlHandler (HANDLER_ROUTINE * func, BOOL a);
|
|
||||||
BOOL SetConsoleCursorInfo (HANDLE h, CONST CONSOLE_CURSOR_INFO * info);
|
|
||||||
BOOL SetConsoleCursorPosition (HANDLE h, COORD pos);
|
|
||||||
BOOL SetConsoleMode (HANDLE h, DWORD mode);
|
|
||||||
BOOL SetConsoleOutputCP (UINT i);
|
|
||||||
BOOL SetConsoleScreenBufferSize (HANDLE h, COORD size);
|
|
||||||
BOOL SetConsoleTextAttribute (HANDLE h, WORD attrs);
|
|
||||||
BOOL SetConsoleTitleA (const char * str);
|
|
||||||
BOOL SetConsoleWindowInfo (HANDLE h, BOOL abs, CONST SMALL_RECT * wnd);
|
|
||||||
BOOL WriteConsoleA (HANDLE h, CONST VOID * ptr, DWORD slen,
|
|
||||||
DWORD * done, VOID * res);
|
|
||||||
BOOL WriteConsoleInputA (HANDLE h, CONST INPUT_RECORD * ptr,
|
|
||||||
DWORD len, DWORD * done);
|
|
||||||
BOOL WriteConsoleOutputA (HANDLE h, CONST CHAR_INFO * ptr,
|
|
||||||
COORD size, COORD fred,
|
|
||||||
SMALL_RECT* where);
|
|
||||||
BOOL WriteConsoleOutputAttribute (HANDLE h, CONST WORD *attr, DWORD len,
|
|
||||||
COORD co, DWORD * done);
|
|
||||||
BOOL WriteConsoleOutputCharacterA (HANDLE h, const char * c, DWORD len,
|
|
||||||
COORD co, DWORD * done);
|
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#endif /* 0 */
|
|
||||||
|
|
|
@ -1547,14 +1547,14 @@ typedef struct
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
DWORD biSize;
|
DWORD biSize;
|
||||||
DWORD biWidth;
|
LONG biWidth;
|
||||||
DWORD biHeight;
|
LONG biHeight;
|
||||||
WORD biPlanes;
|
WORD biPlanes;
|
||||||
WORD biBitCount;
|
WORD biBitCount;
|
||||||
DWORD biCompression;
|
DWORD biCompression;
|
||||||
DWORD biSizeImage;
|
DWORD biSizeImage;
|
||||||
DWORD biXPelsPerMeter;
|
LONG biXPelsPerMeter;
|
||||||
DWORD biYPelsPerMeter;
|
LONG biYPelsPerMeter;
|
||||||
DWORD biClrUsed;
|
DWORD biClrUsed;
|
||||||
DWORD biClrImportant;
|
DWORD biClrImportant;
|
||||||
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER;
|
} BITMAPINFOHEADER, *LPBITMAPINFOHEADER;
|
||||||
|
@ -1946,6 +1946,63 @@ typedef struct tagCOMSTAT
|
||||||
#define SPI_SETICONTITLELOGFONT 34
|
#define SPI_SETICONTITLELOGFONT 34
|
||||||
#define SPI_GETFASTTASKSWITCH 35
|
#define SPI_GETFASTTASKSWITCH 35
|
||||||
#define SPI_SETFASTTASKSWITCH 36
|
#define SPI_SETFASTTASKSWITCH 36
|
||||||
|
#define SPI_SETDRAGFULLWINDOWS 37
|
||||||
|
#define SPI_GETDRAGFULLWINDOWS 38
|
||||||
|
#define SPI_GETNONCLIENTMETRICS 41
|
||||||
|
#define SPI_SETNONCLIENTMETRICS 42
|
||||||
|
#define SPI_GETMINIMIZEDMETRICS 43
|
||||||
|
#define SPI_SETMINIMIZEDMETRICS 44
|
||||||
|
#define SPI_GETICONMETRICS 45
|
||||||
|
#define SPI_SETICONMETRICS 46
|
||||||
|
#define SPI_SETWORKAREA 47
|
||||||
|
#define SPI_GETWORKAREA 48
|
||||||
|
#define SPI_SETPENWINDOWS 49
|
||||||
|
#define SPI_GETFILTERKEYS 50
|
||||||
|
#define SPI_SETFILTERKEYS 51
|
||||||
|
#define SPI_GETTOGGLEKEYS 52
|
||||||
|
#define SPI_SETTOGGLEKEYS 53
|
||||||
|
#define SPI_GETMOUSEKEYS 54
|
||||||
|
#define SPI_SETMOUSEKEYS 55
|
||||||
|
#define SPI_GETSHOWSOUNDS 56
|
||||||
|
#define SPI_SETSHOWSOUNDS 57
|
||||||
|
#define SPI_GETSTICKYKEYS 58
|
||||||
|
#define SPI_SETSTICKYKEYS 59
|
||||||
|
#define SPI_GETACCESSTIMEOUT 60
|
||||||
|
#define SPI_SETACCESSTIMEOUT 61
|
||||||
|
#define SPI_GETSERIALKEYS 62
|
||||||
|
#define SPI_SETSERIALKEYS 63
|
||||||
|
#define SPI_GETSOUNDSENTRY 64
|
||||||
|
#define SPI_SETSOUNDSENTRY 65
|
||||||
|
#define SPI_GETHIGHCONTRAST 66
|
||||||
|
#define SPI_SETHIGHCONTRAST 67
|
||||||
|
#define SPI_GETKEYBOARDPREF 68
|
||||||
|
#define SPI_SETKEYBOARDPREF 69
|
||||||
|
#define SPI_GETSCREENREADER 70
|
||||||
|
#define SPI_SETSCREENREADER 71
|
||||||
|
#define SPI_GETANIMATION 72
|
||||||
|
#define SPI_SETANIMATION 73
|
||||||
|
#define SPI_GETFONTSMOOTHING 74
|
||||||
|
#define SPI_SETFONTSMOOTHING 75
|
||||||
|
#define SPI_SETDRAGWIDTH 76
|
||||||
|
#define SPI_SETDRAGHEIGHT 77
|
||||||
|
#define SPI_SETHANDHELD 78
|
||||||
|
#define SPI_GETLOWPOWERTIMEOUT 79
|
||||||
|
#define SPI_GETPOWEROFFTIMEOUT 80
|
||||||
|
#define SPI_SETLOWPOWERTIMEOUT 81
|
||||||
|
#define SPI_SETPOWEROFFTIMEOUT 82
|
||||||
|
#define SPI_GETLOWPOWERACTIVE 83
|
||||||
|
#define SPI_GETPOWEROFFACTIVE 84
|
||||||
|
#define SPI_SETLOWPOWERACTIVE 85
|
||||||
|
#define SPI_SETPOWEROFFACTIVE 86
|
||||||
|
#define SPI_SETCURSORS 87
|
||||||
|
#define SPI_SETICONS 88
|
||||||
|
#define SPI_GETDEFAULTINPUTLANG 89
|
||||||
|
#define SPI_SETDEFAULTINPUTLANG 90
|
||||||
|
#define SPI_SETLANGTOGGLE 91
|
||||||
|
#define SPI_GETWINDOWSEXTENSION 92
|
||||||
|
#define SPI_SETMOUSETRAILS 93
|
||||||
|
#define SPI_GETMOUSETRAILS 94
|
||||||
|
#define SPI_SCREENSAVERRUNNING 97
|
||||||
|
|
||||||
/* SystemParametersInfo flags */
|
/* SystemParametersInfo flags */
|
||||||
|
|
||||||
|
@ -2657,7 +2714,7 @@ typedef struct
|
||||||
#define SS_LEFTNOWORDWRAP 0x0000000CL
|
#define SS_LEFTNOWORDWRAP 0x0000000CL
|
||||||
#define SS_NOPREFIX 0x00000080L
|
#define SS_NOPREFIX 0x00000080L
|
||||||
|
|
||||||
/* Static Control Mesages */
|
/* Static Control Messages */
|
||||||
#define STM_SETICON (WM_USER+0)
|
#define STM_SETICON (WM_USER+0)
|
||||||
#define STM_GETICON (WM_USER+1)
|
#define STM_GETICON (WM_USER+1)
|
||||||
|
|
||||||
|
@ -3703,7 +3760,38 @@ typedef struct {
|
||||||
HANDLE32 hStdInput;
|
HANDLE32 hStdInput;
|
||||||
HANDLE32 hStdOutput;
|
HANDLE32 hStdOutput;
|
||||||
HANDLE32 hStdError;
|
HANDLE32 hStdError;
|
||||||
} STARTUPINFO, *LPSTARTUPINFO;
|
} STARTUPINFO32A, *LPSTARTUPINFO32A;
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
DWORD cb;
|
||||||
|
LPWSTR lpReserved;
|
||||||
|
LPWSTR lpDesktop;
|
||||||
|
LPWSTR lpTitle;
|
||||||
|
DWORD dwX;
|
||||||
|
DWORD dwY;
|
||||||
|
DWORD dwXSize;
|
||||||
|
DWORD dwYSize;
|
||||||
|
DWORD dwXCountChars;
|
||||||
|
DWORD dwYCountChars;
|
||||||
|
DWORD dwFillAttribute;
|
||||||
|
DWORD dwFlags;
|
||||||
|
WORD wShowWindow;
|
||||||
|
WORD cbReserved2;
|
||||||
|
BYTE *lpReserved2;
|
||||||
|
HANDLE32 hStdInput;
|
||||||
|
HANDLE32 hStdOutput;
|
||||||
|
HANDLE32 hStdError;
|
||||||
|
} STARTUPINFO32W, *LPSTARTUPINFO32W;
|
||||||
|
|
||||||
|
DECL_WINELIB_TYPE_AW(STARTUPINFO);
|
||||||
|
DECL_WINELIB_TYPE_AW(LPSTARTUPINFO);
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
HANDLE32 hProcess;
|
||||||
|
HANDLE32 hThread;
|
||||||
|
DWORD dwProcessId;
|
||||||
|
DWORD dwThreadId;
|
||||||
|
} PROCESS_INFORMATION,*LPPROCESS_INFORMATION;
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LONG Bias;
|
LONG Bias;
|
||||||
|
@ -3814,34 +3902,113 @@ typedef struct {
|
||||||
#define HELP_MULTIKEY 0x0201
|
#define HELP_MULTIKEY 0x0201
|
||||||
#define HELP_SETWINPOS 0x0203
|
#define HELP_SETWINPOS 0x0203
|
||||||
|
|
||||||
typedef struct {
|
#define CCHDEVICENAME 32
|
||||||
CHAR dmDeviceName[32];
|
#define CCHFORMNAME 32
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BYTE dmDeviceName[CCHDEVICENAME];
|
||||||
WORD dmSpecVersion;
|
WORD dmSpecVersion;
|
||||||
WORD dmDriverVersion;
|
WORD dmDriverVersion;
|
||||||
WORD dmSize;
|
WORD dmSize;
|
||||||
WORD dmDriverExtra;
|
WORD dmDriverExtra;
|
||||||
DWORD dmFields;
|
DWORD dmFields;
|
||||||
short dmOrientation;
|
INT16 dmOrientation;
|
||||||
short dmPaperSize;
|
INT16 dmPaperSize;
|
||||||
short dmPaperLength;
|
INT16 dmPaperLength;
|
||||||
short dmPaperWidth;
|
INT16 dmPaperWidth;
|
||||||
short dmScale;
|
INT16 dmScale;
|
||||||
short dmCopies;
|
INT16 dmCopies;
|
||||||
short dmDefaultSource;
|
INT16 dmDefaultSource;
|
||||||
short dmPrintQuality;
|
INT16 dmPrintQuality;
|
||||||
short dmColor;
|
INT16 dmColor;
|
||||||
short dmDuplex;
|
INT16 dmDuplex;
|
||||||
short dmYResolution;
|
INT16 dmYResolution;
|
||||||
short dmTTOption;
|
INT16 dmTTOption;
|
||||||
short dmCollate;
|
INT16 dmCollate;
|
||||||
CHAR dmFormName[32];
|
BYTE dmFormName[CCHFORMNAME];
|
||||||
WORD dmUnusedPadding;
|
WORD dmUnusedPadding;
|
||||||
WORD dmBitsPerPel;
|
WORD dmBitsPerPel;
|
||||||
DWORD dmPelsWidth;
|
DWORD dmPelsWidth;
|
||||||
DWORD dmPelsHeight;
|
DWORD dmPelsHeight;
|
||||||
DWORD dmDisplayFlags;
|
DWORD dmDisplayFlags;
|
||||||
DWORD dmDisplayFrequency;
|
DWORD dmDisplayFrequency;
|
||||||
} DEVMODE;
|
} DEVMODE16, *LPDEVMODE16;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
BYTE dmDeviceName[CCHDEVICENAME];
|
||||||
|
WORD dmSpecVersion;
|
||||||
|
WORD dmDriverVersion;
|
||||||
|
WORD dmSize;
|
||||||
|
WORD dmDriverExtra;
|
||||||
|
DWORD dmFields;
|
||||||
|
INT16 dmOrientation;
|
||||||
|
INT16 dmPaperSize;
|
||||||
|
INT16 dmPaperLength;
|
||||||
|
INT16 dmPaperWidth;
|
||||||
|
INT16 dmScale;
|
||||||
|
INT16 dmCopies;
|
||||||
|
INT16 dmDefaultSource;
|
||||||
|
INT16 dmPrintQuality;
|
||||||
|
INT16 dmColor;
|
||||||
|
INT16 dmDuplex;
|
||||||
|
INT16 dmYResolution;
|
||||||
|
INT16 dmTTOption;
|
||||||
|
INT16 dmCollate;
|
||||||
|
BYTE dmFormName[CCHFORMNAME];
|
||||||
|
WORD dmLogPixels;
|
||||||
|
DWORD dmBitsPerPel;
|
||||||
|
DWORD dmPelsWidth;
|
||||||
|
DWORD dmPelsHeight;
|
||||||
|
DWORD dmDisplayFlags;
|
||||||
|
DWORD dmDisplayFrequency;
|
||||||
|
DWORD dmICMMethod;
|
||||||
|
DWORD dmICMIntent;
|
||||||
|
DWORD dmMediaType;
|
||||||
|
DWORD dmDitherType;
|
||||||
|
DWORD dmReserved1;
|
||||||
|
DWORD dmReserved2;
|
||||||
|
} DEVMODE32A, *LPDEVMODE32A;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
WCHAR dmDeviceName[CCHDEVICENAME];
|
||||||
|
WORD dmSpecVersion;
|
||||||
|
WORD dmDriverVersion;
|
||||||
|
WORD dmSize;
|
||||||
|
WORD dmDriverExtra;
|
||||||
|
DWORD dmFields;
|
||||||
|
INT16 dmOrientation;
|
||||||
|
INT16 dmPaperSize;
|
||||||
|
INT16 dmPaperLength;
|
||||||
|
INT16 dmPaperWidth;
|
||||||
|
INT16 dmScale;
|
||||||
|
INT16 dmCopies;
|
||||||
|
INT16 dmDefaultSource;
|
||||||
|
INT16 dmPrintQuality;
|
||||||
|
INT16 dmColor;
|
||||||
|
INT16 dmDuplex;
|
||||||
|
INT16 dmYResolution;
|
||||||
|
INT16 dmTTOption;
|
||||||
|
INT16 dmCollate;
|
||||||
|
WCHAR dmFormName[CCHFORMNAME];
|
||||||
|
WORD dmLogPixels;
|
||||||
|
DWORD dmBitsPerPel;
|
||||||
|
DWORD dmPelsWidth;
|
||||||
|
DWORD dmPelsHeight;
|
||||||
|
DWORD dmDisplayFlags;
|
||||||
|
DWORD dmDisplayFrequency;
|
||||||
|
DWORD dmICMMethod;
|
||||||
|
DWORD dmICMIntent;
|
||||||
|
DWORD dmMediaType;
|
||||||
|
DWORD dmDitherType;
|
||||||
|
DWORD dmReserved1;
|
||||||
|
DWORD dmReserved2;
|
||||||
|
} DEVMODE32W, *LPDEVMODE32W;
|
||||||
|
|
||||||
|
DECL_WINELIB_TYPE_AW(DEVMODE);
|
||||||
|
DECL_WINELIB_TYPE_AW(LPDEVMODE);
|
||||||
|
|
||||||
typedef struct _SYSTEM_POWER_STATUS
|
typedef struct _SYSTEM_POWER_STATUS
|
||||||
{
|
{
|
||||||
|
@ -3924,7 +4091,13 @@ DECL_WINELIB_TYPE_AW(LOCALE_ENUMPROC);
|
||||||
|
|
||||||
typedef struct tagSYSTEM_INFO
|
typedef struct tagSYSTEM_INFO
|
||||||
{
|
{
|
||||||
|
union {
|
||||||
DWORD dwOemId;
|
DWORD dwOemId;
|
||||||
|
struct {
|
||||||
|
WORD wProcessorArchitecture;
|
||||||
|
WORD wReserved;
|
||||||
|
} x;
|
||||||
|
} u;
|
||||||
DWORD dwPageSize;
|
DWORD dwPageSize;
|
||||||
LPVOID lpMinimumApplicationAddress;
|
LPVOID lpMinimumApplicationAddress;
|
||||||
LPVOID lpMaximumApplicationAddress;
|
LPVOID lpMaximumApplicationAddress;
|
||||||
|
@ -3932,9 +4105,84 @@ typedef struct tagSYSTEM_INFO
|
||||||
DWORD dwNumberOfProcessors;
|
DWORD dwNumberOfProcessors;
|
||||||
DWORD dwProcessorType;
|
DWORD dwProcessorType;
|
||||||
DWORD dwAllocationGranularity;
|
DWORD dwAllocationGranularity;
|
||||||
DWORD dwReserved;
|
WORD wProcessorLevel;
|
||||||
|
WORD wProcessorRevision;
|
||||||
} SYSTEM_INFO, *LPSYSTEM_INFO;
|
} SYSTEM_INFO, *LPSYSTEM_INFO;
|
||||||
|
|
||||||
|
/* u.x.wProcessorArchitecture (NT) */
|
||||||
|
#define PROCESSOR_ARCHITECTURE_INTEL 0
|
||||||
|
#define PROCESSOR_ARCHITECTURE_MIPS 1
|
||||||
|
#define PROCESSOR_ARCHITECTURE_ALPHA 2
|
||||||
|
#define PROCESSOR_ARCHITECTURE_PPC 3
|
||||||
|
#define PROCESSOR_ARCHITECTURE_UNKNOWN 0xFFFF
|
||||||
|
|
||||||
|
/* dwProcessorType */
|
||||||
|
#define PROCESSOR_INTEL_386 386
|
||||||
|
#define PROCESSOR_INTEL_486 486
|
||||||
|
#define PROCESSOR_INTEL_PENTIUM 586
|
||||||
|
#define PROCESSOR_MIPS_R4000 4000
|
||||||
|
#define PROCESSOR_ALPHA_21064 21064
|
||||||
|
|
||||||
|
/* service main function prototype */
|
||||||
|
typedef VOID (*LPSERVICE_MAIN_FUNCTION32A)(DWORD,LPSTR);
|
||||||
|
typedef VOID (*LPSERVICE_MAIN_FUNCTION32W)(DWORD,LPWSTR);
|
||||||
|
DECL_WINELIB_TYPE_AW(LPSERVICE_MAIN_FUNCTION);
|
||||||
|
|
||||||
|
/* service start table */
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
LPSTR lpServiceName;
|
||||||
|
LPSERVICE_MAIN_FUNCTION32A lpServiceProc;
|
||||||
|
} *LPSERVICE_TABLE_ENTRY32A, SERVICE_TABLE_ENTRY32A;
|
||||||
|
|
||||||
|
typedef struct
|
||||||
|
{
|
||||||
|
LPWSTR lpServiceName;
|
||||||
|
LPSERVICE_MAIN_FUNCTION32W lpServiceProc;
|
||||||
|
} *LPSERVICE_TABLE_ENTRY32W, SERVICE_TABLE_ENTRY32W;
|
||||||
|
|
||||||
|
DECL_WINELIB_TYPE_AW(SERVICE_TABLE_ENTRY);
|
||||||
|
DECL_WINELIB_TYPE_AW(LPSERVICE_TABLE_ENTRY);
|
||||||
|
|
||||||
|
/* Security Ids of NT */
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
BYTE Value[6];
|
||||||
|
} SID_IDENTIFIER_AUTHORITY,*LPSID_IDENTIFIER_AUTHORITY;
|
||||||
|
|
||||||
|
typedef struct _SID {
|
||||||
|
BYTE Revision;
|
||||||
|
BYTE SubAuthorityCount;
|
||||||
|
SID_IDENTIFIER_AUTHORITY IdentifierAuthority;
|
||||||
|
DWORD SubAuthority[1]; /* more than one */
|
||||||
|
} SID,*LPSID;
|
||||||
|
|
||||||
|
#define SID_REVISION (1) /* Current revision */
|
||||||
|
#define SID_MAX_SUB_AUTHORITIES (15) /* current max subauths */
|
||||||
|
#define SID_RECOMMENDED_SUB_AUTHORITIES (1) /* recommended subauths */
|
||||||
|
|
||||||
|
/* NT lowlevel Strings (handled by Rtl* functions in NTDLL)
|
||||||
|
* If they are zero terminated, Length does not include the terminating 0.
|
||||||
|
*/
|
||||||
|
|
||||||
|
typedef struct _STRING {
|
||||||
|
UINT16 Length;
|
||||||
|
UINT16 MaximumLength;
|
||||||
|
LPSTR Buffer;
|
||||||
|
} STRING,*LPSTRING,ANSI_STRING,*LPANSI_STRING;
|
||||||
|
|
||||||
|
typedef struct _CSTRING {
|
||||||
|
UINT16 Length;
|
||||||
|
UINT16 MaximumLength;
|
||||||
|
LPCSTR Buffer;
|
||||||
|
} CSTRING,*LPCSTRING;
|
||||||
|
|
||||||
|
typedef struct _UNICODE_STRING {
|
||||||
|
UINT16 Length; /* bytes ? */
|
||||||
|
UINT16 MaximumLength; /* bytes ? */
|
||||||
|
LPWSTR Buffer;
|
||||||
|
} UNICODE_STRING,*LPUNICODE_STRING;
|
||||||
|
|
||||||
#pragma pack(4)
|
#pragma pack(4)
|
||||||
|
|
||||||
/* Declarations for functions that exist only in Win16 */
|
/* Declarations for functions that exist only in Win16 */
|
||||||
|
@ -3943,6 +4191,8 @@ WORD AllocCStoDSAlias(WORD);
|
||||||
WORD AllocDStoCSAlias(WORD);
|
WORD AllocDStoCSAlias(WORD);
|
||||||
WORD AllocSelector(WORD);
|
WORD AllocSelector(WORD);
|
||||||
WORD AllocSelectorArray(WORD);
|
WORD AllocSelectorArray(WORD);
|
||||||
|
LPSTR AnsiLower(LPSTR);
|
||||||
|
LPSTR AnsiUpper(LPSTR);
|
||||||
INT16 Catch(LPCATCHBUF);
|
INT16 Catch(LPCATCHBUF);
|
||||||
WORD ChangeSelector(WORD,WORD);
|
WORD ChangeSelector(WORD,WORD);
|
||||||
INT16 CloseComm(INT16);
|
INT16 CloseComm(INT16);
|
||||||
|
@ -4107,6 +4357,9 @@ BOOL32 MoveFile32A(LPCSTR,LPCSTR);
|
||||||
BOOL32 MoveFile32W(LPCWSTR,LPCWSTR);
|
BOOL32 MoveFile32W(LPCWSTR,LPCWSTR);
|
||||||
#define MoveFile WINELIB_NAME_AW(MoveFile)
|
#define MoveFile WINELIB_NAME_AW(MoveFile)
|
||||||
BOOL32 QueryPerformanceCounter(LPLARGE_INTEGER);
|
BOOL32 QueryPerformanceCounter(LPLARGE_INTEGER);
|
||||||
|
BOOL32 ReadConsole32A(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
||||||
|
BOOL32 ReadConsole32W(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
||||||
|
#define ReadConsole WINELIB_NAME_AW(ReadConsole)
|
||||||
BOOL32 ReadFile(HFILE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
BOOL32 ReadFile(HFILE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
||||||
DWORD RegCreateKeyEx32A(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,
|
DWORD RegCreateKeyEx32A(HKEY,LPCSTR,DWORD,LPSTR,DWORD,REGSAM,
|
||||||
LPSECURITY_ATTRIBUTES,LPHKEY,LPDWORD);
|
LPSECURITY_ATTRIBUTES,LPHKEY,LPDWORD);
|
||||||
|
@ -4133,6 +4386,9 @@ DWORD SearchPath32W(LPCWSTR,LPCWSTR,LPCWSTR,DWORD,LPWSTR,LPWSTR*);
|
||||||
BOOL32 SetBrushOrgEx(HDC32,INT32,INT32,LPPOINT32);
|
BOOL32 SetBrushOrgEx(HDC32,INT32,INT32,LPPOINT32);
|
||||||
BOOL32 SetCommMask(INT32,DWORD);
|
BOOL32 SetCommMask(INT32,DWORD);
|
||||||
BOOL32 SetCommTimeouts(INT32,LPCOMMTIMEOUTS);
|
BOOL32 SetCommTimeouts(INT32,LPCOMMTIMEOUTS);
|
||||||
|
BOOL32 SetConsoleTitle32A(LPCSTR);
|
||||||
|
BOOL32 SetConsoleTitle32W(LPCWSTR);
|
||||||
|
#define SetConsoleTitle WINELIB_NAME_AW(SetConsoleTitle)
|
||||||
BOOL32 SetEndOfFile(HFILE);
|
BOOL32 SetEndOfFile(HFILE);
|
||||||
DWORD SetFilePointer(HFILE,LONG,LPLONG,DWORD);
|
DWORD SetFilePointer(HFILE,LONG,LPLONG,DWORD);
|
||||||
BOOL32 SetFileTime(HFILE,LPFILETIME,LPFILETIME,LPFILETIME);
|
BOOL32 SetFileTime(HFILE,LPFILETIME,LPFILETIME,LPFILETIME);
|
||||||
|
@ -4143,6 +4399,9 @@ VOID Sleep(DWORD);
|
||||||
BOOL32 SystemTimeToFileTime(LPSYSTEMTIME,LPFILETIME);
|
BOOL32 SystemTimeToFileTime(LPSYSTEMTIME,LPFILETIME);
|
||||||
LPVOID VirtualAlloc(LPVOID,DWORD,DWORD,DWORD);
|
LPVOID VirtualAlloc(LPVOID,DWORD,DWORD,DWORD);
|
||||||
BOOL32 VirtualFree(LPVOID,DWORD,DWORD);
|
BOOL32 VirtualFree(LPVOID,DWORD,DWORD);
|
||||||
|
BOOL32 WriteConsole32A(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
||||||
|
BOOL32 WriteConsole32W(HANDLE32,LPVOID,DWORD,LPDWORD,LPVOID);
|
||||||
|
#define WriteConsole WINELIB_NAME_AW(WriteConsole)
|
||||||
BOOL32 WriteFile(HFILE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
BOOL32 WriteFile(HFILE,LPVOID,DWORD,LPDWORD,LPOVERLAPPED);
|
||||||
|
|
||||||
|
|
||||||
|
@ -4316,6 +4575,10 @@ HBITMAP32 CreateBitmapIndirect32(const BITMAP32*);
|
||||||
HBRUSH16 CreateBrushIndirect16(const LOGBRUSH16*);
|
HBRUSH16 CreateBrushIndirect16(const LOGBRUSH16*);
|
||||||
HBRUSH32 CreateBrushIndirect32(const LOGBRUSH32*);
|
HBRUSH32 CreateBrushIndirect32(const LOGBRUSH32*);
|
||||||
#define CreateBrushIndirect WINELIB_NAME(CreateBrushIndirect)
|
#define CreateBrushIndirect WINELIB_NAME(CreateBrushIndirect)
|
||||||
|
HDC16 CreateDC16(LPCSTR,LPCSTR,LPCSTR,const DEVMODE16*);
|
||||||
|
HDC32 CreateDC32A(LPCSTR,LPCSTR,LPCSTR,const DEVMODE32A*);
|
||||||
|
HDC32 CreateDC32W(LPCWSTR,LPCWSTR,LPCWSTR,const DEVMODE32W*);
|
||||||
|
#define CreateDC WINELIB_NAME_AW(CreateDC)
|
||||||
HWND16 CreateDialog16(HINSTANCE16,SEGPTR,HWND16,DLGPROC16);
|
HWND16 CreateDialog16(HINSTANCE16,SEGPTR,HWND16,DLGPROC16);
|
||||||
#define CreateDialog32A(inst,ptr,hwnd,dlg) \
|
#define CreateDialog32A(inst,ptr,hwnd,dlg) \
|
||||||
CreateDialogParam32A(inst,ptr,hwnd,dlg,0)
|
CreateDialogParam32A(inst,ptr,hwnd,dlg,0)
|
||||||
|
@ -4343,6 +4606,9 @@ BOOL16 CreateDirectory16(LPCSTR,LPVOID);
|
||||||
BOOL32 CreateDirectory32A(LPCSTR,LPSECURITY_ATTRIBUTES);
|
BOOL32 CreateDirectory32A(LPCSTR,LPSECURITY_ATTRIBUTES);
|
||||||
BOOL32 CreateDirectory32W(LPCWSTR,LPSECURITY_ATTRIBUTES);
|
BOOL32 CreateDirectory32W(LPCWSTR,LPSECURITY_ATTRIBUTES);
|
||||||
#define CreateDirectory WINELIB_NAME_AW(CreateDirectory)
|
#define CreateDirectory WINELIB_NAME_AW(CreateDirectory)
|
||||||
|
BOOL32 CreateDirectoryEx32A(LPCSTR,LPCSTR,LPSECURITY_ATTRIBUTES);
|
||||||
|
BOOL32 CreateDirectoryEx32W(LPCWSTR,LPCWSTR,LPSECURITY_ATTRIBUTES);
|
||||||
|
#define CreateDirectoryEx WINELIB_NAME_AW(CreateDirectoryEx)
|
||||||
HRGN16 CreateEllipticRgn16(INT16,INT16,INT16,INT16);
|
HRGN16 CreateEllipticRgn16(INT16,INT16,INT16,INT16);
|
||||||
HRGN32 CreateEllipticRgn32(INT32,INT32,INT32,INT32);
|
HRGN32 CreateEllipticRgn32(INT32,INT32,INT32,INT32);
|
||||||
#define CreateEllipticRgn WINELIB_NAME(CreateEllipticRgn)
|
#define CreateEllipticRgn WINELIB_NAME(CreateEllipticRgn)
|
||||||
|
@ -4690,9 +4956,17 @@ HWND32 GetFocus32(void);
|
||||||
UINT16 GetInternalWindowPos16(HWND16,LPRECT16,LPPOINT16);
|
UINT16 GetInternalWindowPos16(HWND16,LPRECT16,LPPOINT16);
|
||||||
UINT32 GetInternalWindowPos32(HWND32,LPRECT32,LPPOINT32);
|
UINT32 GetInternalWindowPos32(HWND32,LPRECT32,LPPOINT32);
|
||||||
#define GetInternalWindowPos WINELIB_NAME(GetInternalWindowPos)
|
#define GetInternalWindowPos WINELIB_NAME(GetInternalWindowPos)
|
||||||
|
INT16 GetKeyNameText16(LONG,LPSTR,INT16);
|
||||||
|
INT32 GetKeyNameText32A(LONG,LPSTR,INT32);
|
||||||
|
INT32 GetKeyNameText32W(LONG,LPWSTR,INT32);
|
||||||
|
#define GetKeyNameText WINELIB_NAME_AW(GetKeyNameText)
|
||||||
UINT32 GetLogicalDriveStrings32A(UINT32,LPSTR);
|
UINT32 GetLogicalDriveStrings32A(UINT32,LPSTR);
|
||||||
UINT32 GetLogicalDriveStrings32W(UINT32,LPWSTR);
|
UINT32 GetLogicalDriveStrings32W(UINT32,LPWSTR);
|
||||||
#define GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)
|
#define GetLogicalDriveStrings WINELIB_NAME_AW(GetLogicalDriveStrings)
|
||||||
|
INT16 GetModuleFileName16(HINSTANCE16,LPSTR,INT16);
|
||||||
|
DWORD GetModuleFileName32A(HMODULE32,LPSTR,DWORD);
|
||||||
|
DWORD GetModuleFileName32W(HMODULE32,LPWSTR,DWORD);
|
||||||
|
#define GetModuleFileName WINELIB_NAME_AW(GetModuleFileName)
|
||||||
HWND16 GetNextDlgGroupItem16(HWND16,HWND16,BOOL16);
|
HWND16 GetNextDlgGroupItem16(HWND16,HWND16,BOOL16);
|
||||||
HWND32 GetNextDlgGroupItem32(HWND32,HWND32,BOOL32);
|
HWND32 GetNextDlgGroupItem32(HWND32,HWND32,BOOL32);
|
||||||
#define GetNextDlgGroupItem WINELIB_NAME(GetNextDlgGroupItem)
|
#define GetNextDlgGroupItem WINELIB_NAME(GetNextDlgGroupItem)
|
||||||
|
@ -4768,6 +5042,10 @@ BOOL16 GetTextExtentPoint16(HDC16,LPCSTR,INT16,LPSIZE16);
|
||||||
BOOL32 GetTextExtentPoint32A(HDC32,LPCSTR,INT32,LPSIZE32);
|
BOOL32 GetTextExtentPoint32A(HDC32,LPCSTR,INT32,LPSIZE32);
|
||||||
BOOL32 GetTextExtentPoint32W(HDC32,LPCWSTR,INT32,LPSIZE32);
|
BOOL32 GetTextExtentPoint32W(HDC32,LPCWSTR,INT32,LPSIZE32);
|
||||||
#define GetTextExtentPoint WINELIB_NAME_AW(GetTextExtentPoint)
|
#define GetTextExtentPoint WINELIB_NAME_AW(GetTextExtentPoint)
|
||||||
|
INT16 GetTextFace16(HDC16,INT16,LPSTR);
|
||||||
|
INT32 GetTextFace32A(HDC32,INT32,LPSTR);
|
||||||
|
INT32 GetTextFace32W(HDC32,INT32,LPWSTR);
|
||||||
|
#define GetTextFace WINELIB_NAME_AW(GetTextFace)
|
||||||
BOOL16 GetTextMetrics16(HDC16,LPTEXTMETRIC16);
|
BOOL16 GetTextMetrics16(HDC16,LPTEXTMETRIC16);
|
||||||
BOOL32 GetTextMetrics32A(HDC32,LPTEXTMETRIC32A);
|
BOOL32 GetTextMetrics32A(HDC32,LPTEXTMETRIC32A);
|
||||||
BOOL32 GetTextMetrics32W(HDC32,LPTEXTMETRIC32W);
|
BOOL32 GetTextMetrics32W(HDC32,LPTEXTMETRIC32W);
|
||||||
|
@ -4817,6 +5095,10 @@ INT16 GetWindowText16(HWND16,SEGPTR,INT16);
|
||||||
INT32 GetWindowText32A(HWND32,LPSTR,INT32);
|
INT32 GetWindowText32A(HWND32,LPSTR,INT32);
|
||||||
INT32 GetWindowText32W(HWND32,LPWSTR,INT32);
|
INT32 GetWindowText32W(HWND32,LPWSTR,INT32);
|
||||||
#define GetWindowText WINELIB_NAME_AW(GetWindowText)
|
#define GetWindowText WINELIB_NAME_AW(GetWindowText)
|
||||||
|
INT16 GetWindowTextLength16(HWND16);
|
||||||
|
INT32 GetWindowTextLength32A(HWND32);
|
||||||
|
INT32 GetWindowTextLength32W(HWND32);
|
||||||
|
#define GetWindowTextLength WINELIB_NAME_AW(GetWindowTextLength)
|
||||||
ATOM GlobalAddAtom16(SEGPTR);
|
ATOM GlobalAddAtom16(SEGPTR);
|
||||||
ATOM GlobalAddAtom32A(LPCSTR);
|
ATOM GlobalAddAtom32A(LPCSTR);
|
||||||
ATOM GlobalAddAtom32W(LPCWSTR);
|
ATOM GlobalAddAtom32W(LPCWSTR);
|
||||||
|
@ -4951,6 +5233,10 @@ HICON16 LoadIcon16(HINSTANCE16,SEGPTR);
|
||||||
HICON32 LoadIcon32A(HINSTANCE32,LPCSTR);
|
HICON32 LoadIcon32A(HINSTANCE32,LPCSTR);
|
||||||
HICON32 LoadIcon32W(HINSTANCE32,LPCWSTR);
|
HICON32 LoadIcon32W(HINSTANCE32,LPCWSTR);
|
||||||
#define LoadIcon WINELIB_NAME_AW(LoadIcon)
|
#define LoadIcon WINELIB_NAME_AW(LoadIcon)
|
||||||
|
HINSTANCE16 LoadLibrary16(LPCSTR);
|
||||||
|
HINSTANCE32 LoadLibrary32A(LPCSTR);
|
||||||
|
HINSTANCE32 LoadLibrary32W(LPCWSTR);
|
||||||
|
#define LoadLibrary WINELIB_NAME_AW(LoadLibrary)
|
||||||
HMENU16 LoadMenu16(HINSTANCE16,SEGPTR);
|
HMENU16 LoadMenu16(HINSTANCE16,SEGPTR);
|
||||||
HMENU32 LoadMenu32A(HINSTANCE32,LPCSTR);
|
HMENU32 LoadMenu32A(HINSTANCE32,LPCSTR);
|
||||||
HMENU32 LoadMenu32W(HINSTANCE32,LPCWSTR);
|
HMENU32 LoadMenu32W(HINSTANCE32,LPCWSTR);
|
||||||
|
@ -5014,6 +5300,10 @@ void MapDialogRect32(HWND32,LPRECT32);
|
||||||
void MapWindowPoints16(HWND16,HWND16,LPPOINT16,UINT16);
|
void MapWindowPoints16(HWND16,HWND16,LPPOINT16,UINT16);
|
||||||
void MapWindowPoints32(HWND32,HWND32,LPPOINT32,UINT32);
|
void MapWindowPoints32(HWND32,HWND32,LPPOINT32,UINT32);
|
||||||
#define MapWindowPoints WINELIB_NAME(MapWindowPoints)
|
#define MapWindowPoints WINELIB_NAME(MapWindowPoints)
|
||||||
|
INT16 MessageBox16(HWND16,LPCSTR,LPCSTR,UINT16);
|
||||||
|
INT32 MessageBox32A(HWND32,LPCSTR,LPCSTR,UINT32);
|
||||||
|
INT32 MessageBox32W(HWND32,LPCWSTR,LPCWSTR,UINT32);
|
||||||
|
#define MessageBox WINELIB_NAME_AW(MessageBox)
|
||||||
BOOL16 ModifyMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);
|
BOOL16 ModifyMenu16(HMENU16,UINT16,UINT16,UINT16,SEGPTR);
|
||||||
BOOL32 ModifyMenu32A(HMENU32,UINT32,UINT32,UINT32,LPCSTR);
|
BOOL32 ModifyMenu32A(HMENU32,UINT32,UINT32,UINT32,LPCSTR);
|
||||||
BOOL32 ModifyMenu32W(HMENU32,UINT32,UINT32,UINT32,LPCWSTR);
|
BOOL32 ModifyMenu32W(HMENU32,UINT32,UINT32,UINT32,LPCWSTR);
|
||||||
|
@ -5122,6 +5412,10 @@ ATOM RegisterClassEx16(const WNDCLASSEX16*);
|
||||||
ATOM RegisterClassEx32A(const WNDCLASSEX32A *);
|
ATOM RegisterClassEx32A(const WNDCLASSEX32A *);
|
||||||
ATOM RegisterClassEx32W(const WNDCLASSEX32W *);
|
ATOM RegisterClassEx32W(const WNDCLASSEX32W *);
|
||||||
#define RegisterClassEx WINELIB_NAME_AW(RegisterClassEx)
|
#define RegisterClassEx WINELIB_NAME_AW(RegisterClassEx)
|
||||||
|
UINT16 RegisterClipboardFormat16(LPCSTR);
|
||||||
|
UINT32 RegisterClipboardFormat32A(LPCSTR);
|
||||||
|
UINT32 RegisterClipboardFormat32W(LPCWSTR);
|
||||||
|
#define RegisterClipboardFormat WINELIB_NAME_AW(RegisterClipboardFormat)
|
||||||
WORD RegisterWindowMessage16(SEGPTR);
|
WORD RegisterWindowMessage16(SEGPTR);
|
||||||
WORD RegisterWindowMessage32A(LPCSTR);
|
WORD RegisterWindowMessage32A(LPCSTR);
|
||||||
WORD RegisterWindowMessage32W(LPCWSTR);
|
WORD RegisterWindowMessage32W(LPCWSTR);
|
||||||
|
@ -5314,6 +5608,10 @@ INT32 StretchDIBits32(HDC32,INT32,INT32,INT32,INT32,INT32,INT32,INT32,INT32
|
||||||
BOOL16 SubtractRect16(LPRECT16,const RECT16*,const RECT16*);
|
BOOL16 SubtractRect16(LPRECT16,const RECT16*,const RECT16*);
|
||||||
BOOL32 SubtractRect32(LPRECT32,const RECT32*,const RECT32*);
|
BOOL32 SubtractRect32(LPRECT32,const RECT32*,const RECT32*);
|
||||||
#define SubtractRect WINELIB_NAME(SubtractRect)
|
#define SubtractRect WINELIB_NAME(SubtractRect)
|
||||||
|
BOOL16 SystemParametersInfo16(UINT16,UINT16,LPVOID,UINT16);
|
||||||
|
BOOL32 SystemParametersInfo32A(UINT32,UINT32,LPVOID,UINT32);
|
||||||
|
BOOL32 SystemParametersInfo32W(UINT32,UINT32,LPVOID,UINT32);
|
||||||
|
#define SystemParametersInfo WINELIB_NAME_AW(SystemParametersInfo)
|
||||||
BOOL16 TextOut16(HDC16,INT16,INT16,LPCSTR,INT16);
|
BOOL16 TextOut16(HDC16,INT16,INT16,LPCSTR,INT16);
|
||||||
BOOL32 TextOut32A(HDC32,INT32,INT32,LPCSTR,INT32);
|
BOOL32 TextOut32A(HDC32,INT32,INT32,LPCSTR,INT32);
|
||||||
BOOL32 TextOut32W(HDC32,INT32,INT32,LPCWSTR,INT32);
|
BOOL32 TextOut32W(HDC32,INT32,INT32,LPCWSTR,INT32);
|
||||||
|
@ -5471,13 +5769,11 @@ typedef SEGPTR EDITWORDBREAKPROC;
|
||||||
ATOM AddAtom(SEGPTR);
|
ATOM AddAtom(SEGPTR);
|
||||||
INT AddFontResource(LPCSTR);
|
INT AddFontResource(LPCSTR);
|
||||||
BOOL AnimatePalette(HPALETTE16,UINT,UINT,LPPALETTEENTRY);
|
BOOL AnimatePalette(HPALETTE16,UINT,UINT,LPPALETTEENTRY);
|
||||||
LPSTR AnsiLower(LPSTR);
|
|
||||||
UINT AnsiLowerBuff(LPSTR,UINT);
|
UINT AnsiLowerBuff(LPSTR,UINT);
|
||||||
SEGPTR AnsiNext(SEGPTR);
|
SEGPTR AnsiNext(SEGPTR);
|
||||||
SEGPTR AnsiPrev(SEGPTR,SEGPTR);
|
SEGPTR AnsiPrev(SEGPTR,SEGPTR);
|
||||||
INT AnsiToOem(LPCSTR,LPSTR);
|
INT AnsiToOem(LPCSTR,LPSTR);
|
||||||
void AnsiToOemBuff(LPCSTR,LPSTR,UINT);
|
void AnsiToOemBuff(LPCSTR,LPSTR,UINT);
|
||||||
LPSTR AnsiUpper(LPSTR);
|
|
||||||
UINT AnsiUpperBuff(LPSTR,UINT);
|
UINT AnsiUpperBuff(LPSTR,UINT);
|
||||||
BOOL AnyPopup(void);
|
BOOL AnyPopup(void);
|
||||||
UINT ArrangeIconicWindows(HWND);
|
UINT ArrangeIconicWindows(HWND);
|
||||||
|
@ -5497,9 +5793,8 @@ INT CountVoiceNotes(INT);
|
||||||
HDC16 CreateCompatibleDC(HDC16);
|
HDC16 CreateCompatibleDC(HDC16);
|
||||||
HCURSOR16 CreateCursor(HINSTANCE16,INT,INT,INT,INT,const BYTE*,const BYTE*);
|
HCURSOR16 CreateCursor(HINSTANCE16,INT,INT,INT,INT,const BYTE*,const BYTE*);
|
||||||
HGLOBAL16 CreateCursorIconIndirect(HINSTANCE16,CURSORICONINFO*,const BYTE*,const BYTE*);
|
HGLOBAL16 CreateCursorIconIndirect(HINSTANCE16,CURSORICONINFO*,const BYTE*,const BYTE*);
|
||||||
HDC16 CreateDC(LPCSTR,LPCSTR,LPCSTR,const DEVMODE*);
|
|
||||||
HBITMAP16 CreateDIBitmap(HDC16,BITMAPINFOHEADER*,DWORD,LPVOID,BITMAPINFO*,UINT);
|
HBITMAP16 CreateDIBitmap(HDC16,BITMAPINFOHEADER*,DWORD,LPVOID,BITMAPINFO*,UINT);
|
||||||
HDC16 CreateIC(LPCSTR,LPCSTR,LPCSTR,const DEVMODE*);
|
HDC16 CreateIC(LPCSTR,LPCSTR,LPCSTR,const DEVMODE16*);
|
||||||
HICON16 CreateIcon(HINSTANCE16,INT,INT,BYTE,BYTE,const BYTE*,const BYTE*);
|
HICON16 CreateIcon(HINSTANCE16,INT,INT,BYTE,BYTE,const BYTE*,const BYTE*);
|
||||||
HMENU16 CreateMenu(void);
|
HMENU16 CreateMenu(void);
|
||||||
HPALETTE16 CreatePalette(const LOGPALETTE*);
|
HPALETTE16 CreatePalette(const LOGPALETTE*);
|
||||||
|
@ -5566,7 +5861,6 @@ DWORD GetHeapSpaces(HMODULE16);
|
||||||
BOOL GetInputState(void);
|
BOOL GetInputState(void);
|
||||||
int GetKBCodePage(void);
|
int GetKBCodePage(void);
|
||||||
int GetKerningPairs(HDC16,int,LPKERNINGPAIR16);
|
int GetKerningPairs(HDC16,int,LPKERNINGPAIR16);
|
||||||
int GetKeyNameText(LONG,LPSTR,int);
|
|
||||||
INT GetKeyState(INT);
|
INT GetKeyState(INT);
|
||||||
void GetKeyboardState(BYTE*);
|
void GetKeyboardState(BYTE*);
|
||||||
int GetKeyboardType(int);
|
int GetKeyboardType(int);
|
||||||
|
@ -5584,7 +5878,6 @@ DWORD GetMessagePos(void);
|
||||||
LONG GetMessageTime(void);
|
LONG GetMessageTime(void);
|
||||||
HMETAFILE16 GetMetaFile(LPSTR);
|
HMETAFILE16 GetMetaFile(LPSTR);
|
||||||
HGLOBAL16 GetMetaFileBits(HMETAFILE16);
|
HGLOBAL16 GetMetaFileBits(HMETAFILE16);
|
||||||
INT16 GetModuleFileName(HINSTANCE16,LPSTR,INT16);
|
|
||||||
HMODULE16 GetModuleHandle(LPCSTR);
|
HMODULE16 GetModuleHandle(LPCSTR);
|
||||||
INT16 GetModuleUsage(HINSTANCE16);
|
INT16 GetModuleUsage(HINSTANCE16);
|
||||||
DWORD GetNearestColor(HDC16,DWORD);
|
DWORD GetNearestColor(HDC16,DWORD);
|
||||||
|
@ -5610,7 +5903,6 @@ WORD GetTextAlign(HDC16);
|
||||||
short GetTextCharacterExtra(HDC16);
|
short GetTextCharacterExtra(HDC16);
|
||||||
COLORREF GetTextColor(HDC16);
|
COLORREF GetTextColor(HDC16);
|
||||||
DWORD GetTextExtent(HDC16,LPCSTR,short);
|
DWORD GetTextExtent(HDC16,LPCSTR,short);
|
||||||
INT GetTextFace(HDC16,INT,LPSTR);
|
|
||||||
LPINT16 GetThresholdEvent(void);
|
LPINT16 GetThresholdEvent(void);
|
||||||
int GetThresholdStatus(void);
|
int GetThresholdStatus(void);
|
||||||
HWND GetTopWindow(HWND);
|
HWND GetTopWindow(HWND);
|
||||||
|
@ -5621,7 +5913,6 @@ LONG GetWinFlags(void);
|
||||||
HWND GetWindow(HWND,WORD);
|
HWND GetWindow(HWND,WORD);
|
||||||
DWORD GetWindowExt(HDC16);
|
DWORD GetWindowExt(HDC16);
|
||||||
DWORD GetWindowOrg(HDC16);
|
DWORD GetWindowOrg(HDC16);
|
||||||
int GetWindowTextLength(HWND);
|
|
||||||
ATOM GlobalDeleteAtom(ATOM);
|
ATOM GlobalDeleteAtom(ATOM);
|
||||||
void GlobalFix(HGLOBAL16);
|
void GlobalFix(HGLOBAL16);
|
||||||
BOOL16 GlobalUnWire(HGLOBAL16);
|
BOOL16 GlobalUnWire(HGLOBAL16);
|
||||||
|
@ -5643,13 +5934,11 @@ BOOL IsValidMetaFile(HMETAFILE16);
|
||||||
BOOL IsWindowEnabled(HWND);
|
BOOL IsWindowEnabled(HWND);
|
||||||
BOOL IsWindowVisible(HWND);
|
BOOL IsWindowVisible(HWND);
|
||||||
BOOL IsZoomed(HWND);
|
BOOL IsZoomed(HWND);
|
||||||
HINSTANCE16 LoadLibrary(LPCSTR);
|
|
||||||
HINSTANCE16 LoadModule(LPCSTR,LPVOID);
|
HINSTANCE16 LoadModule(LPCSTR,LPVOID);
|
||||||
FARPROC16 LocalNotify(FARPROC16);
|
FARPROC16 LocalNotify(FARPROC16);
|
||||||
HMENU16 LookupMenuHandle(HMENU16,INT);
|
HMENU16 LookupMenuHandle(HMENU16,INT);
|
||||||
WORD MapVirtualKey(WORD,WORD);
|
WORD MapVirtualKey(WORD,WORD);
|
||||||
void MessageBeep(WORD);
|
void MessageBeep(WORD);
|
||||||
int MessageBox(HWND,LPCSTR,LPCSTR,WORD);
|
|
||||||
BOOL MoveWindow(HWND,short,short,short,short,BOOL);
|
BOOL MoveWindow(HWND,short,short,short,short,BOOL);
|
||||||
DWORD OemKeyScan(WORD);
|
DWORD OemKeyScan(WORD);
|
||||||
BOOL OemToAnsi(LPCSTR,LPSTR);
|
BOOL OemToAnsi(LPCSTR,LPSTR);
|
||||||
|
@ -5671,7 +5960,6 @@ void ProfSetup(int,int);
|
||||||
void ProfStart(void);
|
void ProfStart(void);
|
||||||
void ProfStop(void);
|
void ProfStop(void);
|
||||||
WORD RealizeDefaultPalette(HDC16);
|
WORD RealizeDefaultPalette(HDC16);
|
||||||
WORD RegisterClipboardFormat(LPCSTR);
|
|
||||||
BOOL RemoveFontResource(LPSTR);
|
BOOL RemoveFontResource(LPSTR);
|
||||||
BOOL RemoveMenu(HMENU16,UINT,UINT);
|
BOOL RemoveMenu(HMENU16,UINT,UINT);
|
||||||
void ReplyMessage(LRESULT);
|
void ReplyMessage(LRESULT);
|
||||||
|
@ -5734,7 +6022,6 @@ int StopSound(void);
|
||||||
BOOL SwapMouseButton(BOOL);
|
BOOL SwapMouseButton(BOOL);
|
||||||
void SwapRecording(WORD);
|
void SwapRecording(WORD);
|
||||||
int SyncAllVoices(void);
|
int SyncAllVoices(void);
|
||||||
BOOL SystemParametersInfo(UINT,UINT,LPVOID,UINT);
|
|
||||||
LONG TabbedTextOut(HDC16,short,short,LPSTR,short,short,LPINT16,short);
|
LONG TabbedTextOut(HDC16,short,short,LPSTR,short,short,LPINT16,short);
|
||||||
int ToAscii(WORD,WORD,LPSTR,LPVOID,WORD);
|
int ToAscii(WORD,WORD,LPSTR,LPVOID,WORD);
|
||||||
INT16 TranslateAccelerator(HWND,HACCEL16,LPMSG16);
|
INT16 TranslateAccelerator(HWND,HACCEL16,LPMSG16);
|
||||||
|
|
|
@ -443,7 +443,6 @@ typedef struct __aop
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
SEGPTR buffer_base;
|
SEGPTR buffer_base;
|
||||||
int buflen;
|
int buflen;
|
||||||
char* init; /* parameter data - length is in the async_ctl */
|
|
||||||
} ws_async_op;
|
} ws_async_op;
|
||||||
|
|
||||||
#define WSMSG_ASYNC_SELECT 0x0000001
|
#define WSMSG_ASYNC_SELECT 0x0000001
|
||||||
|
@ -462,8 +461,8 @@ typedef struct
|
||||||
{
|
{
|
||||||
long mtype; /* WSMSG_... */
|
long mtype; /* WSMSG_... */
|
||||||
|
|
||||||
UINT32 lParam;
|
UINT32 lParam; /* WS_FD_... event */
|
||||||
UINT16 wParam; /* socket handle */
|
UINT16 wParam; /* socket handle - used only for MTYPE_CLIENT messages */
|
||||||
} ipc_packet;
|
} ipc_packet;
|
||||||
|
|
||||||
#define MTYPE_PARENT_SIZE \
|
#define MTYPE_PARENT_SIZE \
|
||||||
|
@ -476,7 +475,7 @@ typedef struct
|
||||||
{
|
{
|
||||||
int fd;
|
int fd;
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
ws_async_op* p_aop;
|
ws_async_op* p_aop; /* AsyncSelect() handler */
|
||||||
} ws_socket;
|
} ws_socket;
|
||||||
|
|
||||||
typedef struct
|
typedef struct
|
||||||
|
@ -486,6 +485,7 @@ typedef struct
|
||||||
int lEvent;
|
int lEvent;
|
||||||
int lLength;
|
int lLength;
|
||||||
char* buffer;
|
char* buffer;
|
||||||
|
char* init;
|
||||||
ipc_packet ip;
|
ipc_packet ip;
|
||||||
} ws_async_ctl;
|
} ws_async_ctl;
|
||||||
|
|
||||||
|
@ -500,12 +500,14 @@ typedef struct __WSINFO
|
||||||
|
|
||||||
unsigned flags;
|
unsigned flags;
|
||||||
int errno;
|
int errno;
|
||||||
int num_startup;
|
INT16 num_startup;
|
||||||
int num_async_rq;
|
INT16 num_async_rq;
|
||||||
int last_free;
|
INT16 last_free;
|
||||||
|
UINT16 buflen;
|
||||||
|
char* buffer; /* allocated from SEGPTR heap */
|
||||||
|
char* dbuffer; /* buffer for dummies (32 bytes) */
|
||||||
|
|
||||||
ws_socket sock[WS_MAX_SOCKETS_PER_THREAD];
|
ws_socket sock[WS_MAX_SOCKETS_PER_THREAD];
|
||||||
int buflen;
|
|
||||||
char* buffer;
|
|
||||||
FARPROC16 blocking_hook;
|
FARPROC16 blocking_hook;
|
||||||
HTASK16 tid; /* owning thread id - better switch
|
HTASK16 tid; /* owning thread id - better switch
|
||||||
* to TLS when it gets fixed */
|
* to TLS when it gets fixed */
|
||||||
|
@ -527,6 +529,7 @@ void WINSOCK_link_async_op(ws_async_op* p_aop);
|
||||||
void WINSOCK_unlink_async_op(ws_async_op* p_aop);
|
void WINSOCK_unlink_async_op(ws_async_op* p_aop);
|
||||||
void WINSOCK_cancel_async_op(HTASK16 tid);
|
void WINSOCK_cancel_async_op(HTASK16 tid);
|
||||||
void WINSOCK_do_async_select(void);
|
void WINSOCK_do_async_select(void);
|
||||||
|
void WINSOCK_Shutdown(void);
|
||||||
|
|
||||||
UINT16 wsaErrno(void);
|
UINT16 wsaErrno(void);
|
||||||
UINT16 wsaHerrno(void);
|
UINT16 wsaHerrno(void);
|
||||||
|
|
|
@ -1075,7 +1075,7 @@ HINSTANCE16 LoadModule( LPCSTR name, LPVOID paramBlock )
|
||||||
char *p;
|
char *p;
|
||||||
|
|
||||||
/* Try with prepending the path of the current module */
|
/* Try with prepending the path of the current module */
|
||||||
GetModuleFileName( hModule, buffer, sizeof(buffer) );
|
GetModuleFileName16( hModule, buffer, sizeof(buffer) );
|
||||||
if (!(p = strrchr( buffer, '\\' ))) p = buffer;
|
if (!(p = strrchr( buffer, '\\' ))) p = buffer;
|
||||||
memcpy( p + 1, pstr + 1, *pstr );
|
memcpy( p + 1, pstr + 1, *pstr );
|
||||||
strcpy( p + 1 + *pstr, ".dll" );
|
strcpy( p + 1 + *pstr, ".dll" );
|
||||||
|
@ -1284,9 +1284,9 @@ INT16 GetModuleUsage( HINSTANCE16 hModule )
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* GetModuleFileName (KERNEL.49)
|
* GetModuleFileName16 (KERNEL.49)
|
||||||
*/
|
*/
|
||||||
INT16 GetModuleFileName( HINSTANCE16 hModule, LPSTR lpFileName, INT16 nSize )
|
INT16 GetModuleFileName16( HINSTANCE16 hModule, LPSTR lpFileName, INT16 nSize )
|
||||||
{
|
{
|
||||||
NE_MODULE *pModule;
|
NE_MODULE *pModule;
|
||||||
|
|
||||||
|
@ -1294,10 +1294,44 @@ INT16 GetModuleFileName( HINSTANCE16 hModule, LPSTR lpFileName, INT16 nSize )
|
||||||
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
|
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
|
||||||
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
||||||
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), nSize );
|
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), nSize );
|
||||||
dprintf_module( stddeb, "GetModuleFilename: %s\n", lpFileName );
|
dprintf_module( stddeb, "GetModuleFileName16: %s\n", lpFileName );
|
||||||
return strlen(lpFileName);
|
return strlen(lpFileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetModuleFileName32A (KERNEL32.235)
|
||||||
|
*/
|
||||||
|
DWORD GetModuleFileName32A( HMODULE32 hModule, LPSTR lpFileName, DWORD size )
|
||||||
|
{
|
||||||
|
NE_MODULE *pModule;
|
||||||
|
|
||||||
|
if (!hModule)
|
||||||
|
{
|
||||||
|
TDB *pTask = (TDB *)GlobalLock16( GetCurrentTask() );
|
||||||
|
hModule = pTask->hInstance;
|
||||||
|
}
|
||||||
|
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
|
||||||
|
if (!(pModule = MODULE_GetPtr( hModule ))) return 0;
|
||||||
|
lstrcpyn32A( lpFileName, NE_MODULE_NAME(pModule), size );
|
||||||
|
dprintf_module( stddeb, "GetModuleFileName32A: %s\n", lpFileName );
|
||||||
|
return strlen(lpFileName);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetModuleFileName32W (KERNEL32.236)
|
||||||
|
*/
|
||||||
|
DWORD GetModuleFileName32W( HMODULE32 hModule, LPWSTR lpFileName, DWORD size )
|
||||||
|
{
|
||||||
|
LPSTR fnA = (char*)HeapAlloc( GetProcessHeap(), 0, size );
|
||||||
|
DWORD res = GetModuleFileName32A( hModule, fnA, size );
|
||||||
|
lstrcpynAtoW( lpFileName, fnA, size );
|
||||||
|
HeapFree( GetProcessHeap(), 0, fnA );
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* GetModuleName (KERNEL.27)
|
* GetModuleName (KERNEL.27)
|
||||||
*/
|
*/
|
||||||
|
@ -1314,7 +1348,7 @@ BOOL16 GetModuleName( HINSTANCE16 hinst, LPSTR buf, INT16 nSize )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* LoadLibrary (KERNEL.95)
|
* LoadLibrary (KERNEL.95)
|
||||||
*/
|
*/
|
||||||
HINSTANCE16 LoadLibrary( LPCSTR libname )
|
HINSTANCE16 LoadLibrary16( LPCSTR libname )
|
||||||
{
|
{
|
||||||
HINSTANCE16 handle;
|
HINSTANCE16 handle;
|
||||||
|
|
||||||
|
|
|
@ -194,7 +194,7 @@ fixup_imports (struct pe_data *pe, HMODULE16 hModule)
|
||||||
char *p, buffer[256];
|
char *p, buffer[256];
|
||||||
|
|
||||||
/* Try with prepending the path of the current module */
|
/* Try with prepending the path of the current module */
|
||||||
GetModuleFileName (hModule, buffer, sizeof (buffer));
|
GetModuleFileName16 (hModule, buffer, sizeof (buffer));
|
||||||
if (!(p = strrchr (buffer, '\\')))
|
if (!(p = strrchr (buffer, '\\')))
|
||||||
p = buffer;
|
p = buffer;
|
||||||
strcpy (p + 1, name);
|
strcpy (p + 1, name);
|
||||||
|
@ -389,6 +389,16 @@ static struct pe_data *PE_LoadImage( int fd, HMODULE16 hModule, WORD offset )
|
||||||
lseek( fd, offset, SEEK_SET);
|
lseek( fd, offset, SEEK_SET);
|
||||||
read( fd, pe->pe_header, sizeof(struct pe_header_s));
|
read( fd, pe->pe_header, sizeof(struct pe_header_s));
|
||||||
|
|
||||||
|
/* FIXME: this is a *horrible* hack to make COMDLG32.DLL load OK. The
|
||||||
|
problem needs to be fixed properly at some stage */
|
||||||
|
|
||||||
|
if (pe->pe_header->opt_coff.NumberOfRvaAndSizes != 16) {
|
||||||
|
printf("Short PE Header!!!\n");
|
||||||
|
lseek( fd, -(16 - pe->pe_header->opt_coff.NumberOfRvaAndSizes) * sizeof (struct Directory), SEEK_CUR);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* horrible hack ends !!! */
|
||||||
|
|
||||||
/* read sections */
|
/* read sections */
|
||||||
pe->pe_seg = xmalloc(sizeof(struct pe_segment_table) *
|
pe->pe_seg = xmalloc(sizeof(struct pe_segment_table) *
|
||||||
pe->pe_header->coff.NumberOfSections);
|
pe->pe_header->coff.NumberOfSections);
|
||||||
|
@ -627,14 +637,22 @@ based on some kind of documentation would be greatly appreciated :-) */
|
||||||
|
|
||||||
typedef struct _TEB
|
typedef struct _TEB
|
||||||
{
|
{
|
||||||
void *Except;
|
void *Except; /* 00 */
|
||||||
void *stack;
|
void *stack; /* 04 */
|
||||||
int dummy1[4];
|
int dummy1[4]; /* 08 */
|
||||||
struct _TEB *TEBDSAlias;
|
struct _TEB *TEBDSAlias; /* 18 */
|
||||||
int dummy2[2];
|
int dummy2[2]; /* 1C */
|
||||||
int taskid;
|
int taskid; /* 24 */
|
||||||
|
int dummy3[2]; /* 28 */
|
||||||
|
LPBYTE process; /* 30 */ /* points to current process struct */
|
||||||
} TEB;
|
} TEB;
|
||||||
|
|
||||||
|
/* the current process structure. Only the processheap is of interest (off 0x18) */
|
||||||
|
struct {
|
||||||
|
DWORD dummy[6];
|
||||||
|
HANDLE32 procheap; /* 18: Process Heap */
|
||||||
|
} dummyprocess;
|
||||||
|
|
||||||
void PE_InitTEB(int hTEB)
|
void PE_InitTEB(int hTEB)
|
||||||
{
|
{
|
||||||
TDB *pTask;
|
TDB *pTask;
|
||||||
|
@ -646,6 +664,14 @@ void PE_InitTEB(int hTEB)
|
||||||
pTEB->Except = (void *)(-1);
|
pTEB->Except = (void *)(-1);
|
||||||
pTEB->TEBDSAlias = pTEB;
|
pTEB->TEBDSAlias = pTEB;
|
||||||
pTEB->taskid = getpid();
|
pTEB->taskid = getpid();
|
||||||
|
|
||||||
|
dummyprocess.procheap = GetProcessHeap();
|
||||||
|
pTEB->process = &dummyprocess;
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID
|
||||||
|
NtCurrentTeb(CONTEXT *context) {
|
||||||
|
context->Eax = GlobalLock16(LOWORD(context->SegFs));
|
||||||
}
|
}
|
||||||
|
|
||||||
void PE_InitializeDLLs(HMODULE16 hModule)
|
void PE_InitializeDLLs(HMODULE16 hModule)
|
||||||
|
|
|
@ -504,57 +504,6 @@ HACCEL32 LoadAccelerators32A(HINSTANCE32 instance,LPCSTR lpTableName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
|
||||||
* TranslateAccelerator [USER.178]
|
|
||||||
*/
|
|
||||||
INT16 TranslateAccelerator(HWND hWnd, HACCEL16 hAccel, LPMSG16 msg)
|
|
||||||
{
|
|
||||||
ACCELHEADER *lpAccelTbl;
|
|
||||||
int i;
|
|
||||||
|
|
||||||
if (hAccel == 0 || msg == NULL) return 0;
|
|
||||||
if (msg->message != WM_KEYDOWN &&
|
|
||||||
msg->message != WM_KEYUP &&
|
|
||||||
msg->message != WM_SYSKEYDOWN &&
|
|
||||||
msg->message != WM_SYSKEYUP &&
|
|
||||||
msg->message != WM_CHAR) return 0;
|
|
||||||
|
|
||||||
dprintf_accel(stddeb, "TranslateAccelerators hAccel=%04x !\n", hAccel);
|
|
||||||
|
|
||||||
lpAccelTbl = (LPACCELHEADER)GlobalLock16(hAccel);
|
|
||||||
for (i = 0; i < lpAccelTbl->wCount; i++) {
|
|
||||||
if(lpAccelTbl->tbl[i].type & VIRTKEY_ACCEL) {
|
|
||||||
if(msg->wParam == lpAccelTbl->tbl[i].wEvent &&
|
|
||||||
(msg->message == WM_KEYDOWN || msg->message == WM_SYSKEYDOWN)) {
|
|
||||||
INT mask = 0;
|
|
||||||
|
|
||||||
if(GetKeyState(VK_SHIFT) & 0x8000) mask |= SHIFT_ACCEL;
|
|
||||||
if(GetKeyState(VK_CONTROL) & 0x8000) mask |= CONTROL_ACCEL;
|
|
||||||
if(GetKeyState(VK_MENU) & 0x8000) mask |= ALT_ACCEL;
|
|
||||||
if(mask == (lpAccelTbl->tbl[i].type &
|
|
||||||
(SHIFT_ACCEL | CONTROL_ACCEL | ALT_ACCEL))) {
|
|
||||||
SendMessage16(hWnd, WM_COMMAND, lpAccelTbl->tbl[i].wIDval,
|
|
||||||
0x00010000L);
|
|
||||||
GlobalUnlock16(hAccel);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
if (msg->message == WM_KEYUP || msg->message == WM_SYSKEYUP)
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else {
|
|
||||||
if (msg->wParam == lpAccelTbl->tbl[i].wEvent &&
|
|
||||||
msg->message == WM_CHAR) {
|
|
||||||
SendMessage16(hWnd, WM_COMMAND, lpAccelTbl->tbl[i].wIDval, 0x00010000L);
|
|
||||||
GlobalUnlock16(hAccel);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
GlobalUnlock16(hAccel);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* LoadString16
|
* LoadString16
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -9,6 +9,8 @@
|
||||||
|
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/timeb.h>
|
#include <sys/timeb.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/wait.h>
|
||||||
|
|
||||||
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__svr4__) || defined(_SCO_DS)
|
#if defined(__NetBSD__) || defined(__FreeBSD__) || defined(__svr4__) || defined(_SCO_DS)
|
||||||
#ifndef _SCO_DS
|
#ifndef _SCO_DS
|
||||||
|
@ -21,8 +23,10 @@
|
||||||
|
|
||||||
#include "debugger.h"
|
#include "debugger.h"
|
||||||
#include "miscemu.h"
|
#include "miscemu.h"
|
||||||
|
#include "options.h"
|
||||||
#include "registers.h"
|
#include "registers.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
|
#include "winsock.h"
|
||||||
|
|
||||||
#if !defined(BSD4_4) || defined(linux) || defined(__FreeBSD__)
|
#if !defined(BSD4_4) || defined(linux) || defined(__FreeBSD__)
|
||||||
char * cstack[4096];
|
char * cstack[4096];
|
||||||
|
@ -68,6 +72,45 @@ static void wine_timer(int signal, int code, SIGCONTEXT *context)
|
||||||
DOSMEM_Tick();
|
DOSMEM_Tick();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* SIGNAL_break
|
||||||
|
*
|
||||||
|
* Handle Ctrl-C and such
|
||||||
|
*/
|
||||||
|
#ifdef linux
|
||||||
|
static void SIGNAL_break(int signal, SIGCONTEXT context_struct)
|
||||||
|
{
|
||||||
|
SIGCONTEXT *context = &context_struct;
|
||||||
|
#elif defined(__svr4__) || defined(_SCO_DS)
|
||||||
|
static void SIGNAL_break(int signal, void *siginfo, SIGCONTEXT *context)
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
static void SIGNAL_break(int signal, int code, SIGCONTEXT *context)
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
if (Options.debug) wine_debug( signal, context ); /* Enter our debugger */
|
||||||
|
exit(0);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* SIGNAL_child
|
||||||
|
*
|
||||||
|
* wait4 terminated child processes
|
||||||
|
*/
|
||||||
|
#ifdef linux
|
||||||
|
static void SIGNAL_child(int signal, SIGCONTEXT context_struct)
|
||||||
|
{
|
||||||
|
SIGCONTEXT *context = &context_struct;
|
||||||
|
#elif defined(__svr4__) || defined(_SCO_DS)
|
||||||
|
static void SIGNAL_child(int signal, void *siginfo, SIGCONTEXT *context)
|
||||||
|
{
|
||||||
|
#else
|
||||||
|
static void SIGNAL_child(int signal, int code, SIGCONTEXT *context)
|
||||||
|
{
|
||||||
|
#endif
|
||||||
|
wait4( 0, NULL, WNOHANG, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* SIGNAL_trap
|
* SIGNAL_trap
|
||||||
|
@ -206,6 +249,8 @@ BOOL32 SIGNAL_Init(void)
|
||||||
#endif /* __svr4__ || _SCO_DS */
|
#endif /* __svr4__ || _SCO_DS */
|
||||||
|
|
||||||
SIGNAL_SetHandler( SIGALRM, (void (*)())wine_timer, 1);
|
SIGNAL_SetHandler( SIGALRM, (void (*)())wine_timer, 1);
|
||||||
|
SIGNAL_SetHandler( SIGINT, (void (*)())SIGNAL_break, 1);
|
||||||
|
SIGNAL_SetHandler( SIGCHLD, (void (*)())SIGNAL_child, 1);
|
||||||
SIGNAL_SetHandler( SIGSEGV, (void (*)())SIGNAL_fault, 1);
|
SIGNAL_SetHandler( SIGSEGV, (void (*)())SIGNAL_fault, 1);
|
||||||
SIGNAL_SetHandler( SIGILL, (void (*)())SIGNAL_fault, 1);
|
SIGNAL_SetHandler( SIGILL, (void (*)())SIGNAL_fault, 1);
|
||||||
SIGNAL_SetHandler( SIGFPE, (void (*)())SIGNAL_fault, 1);
|
SIGNAL_SetHandler( SIGFPE, (void (*)())SIGNAL_fault, 1);
|
||||||
|
|
|
@ -351,6 +351,7 @@ static BOOL TASK_FreeThunk( HTASK16 hTask, SEGPTR thunk )
|
||||||
static void TASK_CallToStart(void)
|
static void TASK_CallToStart(void)
|
||||||
{
|
{
|
||||||
int cs_reg, ds_reg, fs_reg, ip_reg;
|
int cs_reg, ds_reg, fs_reg, ip_reg;
|
||||||
|
int exit_code = 1;
|
||||||
TDB *pTask = (TDB *)GlobalLock16( hCurrentTask );
|
TDB *pTask = (TDB *)GlobalLock16( hCurrentTask );
|
||||||
NE_MODULE *pModule = MODULE_GetPtr( pTask->hModule );
|
NE_MODULE *pModule = MODULE_GetPtr( pTask->hModule );
|
||||||
SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );
|
SEGTABLEENTRY *pSegTable = NE_SEG_TABLE( pModule );
|
||||||
|
@ -372,8 +373,9 @@ static void TASK_CallToStart(void)
|
||||||
PE_InitTEB( fs_reg );
|
PE_InitTEB( fs_reg );
|
||||||
__asm__ __volatile__("movw %w0,%%fs"::"r" (fs_reg));
|
__asm__ __volatile__("movw %w0,%%fs"::"r" (fs_reg));
|
||||||
PE_InitializeDLLs( pTask->hModule );
|
PE_InitializeDLLs( pTask->hModule );
|
||||||
CallTaskStart32( (FARPROC32)(pModule->pe_module->load_addr +
|
exit_code = CallTaskStart32((FARPROC32)(pModule->pe_module->load_addr +
|
||||||
pModule->pe_module->pe_header->opt_coff.AddressOfEntryPoint) );
|
pModule->pe_module->pe_header->opt_coff.AddressOfEntryPoint) );
|
||||||
|
TASK_KillCurrentTask( exit_code );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -402,11 +404,10 @@ static void TASK_CallToStart(void)
|
||||||
pTask->hPDB /*es*/, 0 /*bp*/, 0 /*ax*/,
|
pTask->hPDB /*es*/, 0 /*bp*/, 0 /*ax*/,
|
||||||
pModule->stack_size /*bx*/, pModule->heap_size /*cx*/,
|
pModule->stack_size /*bx*/, pModule->heap_size /*cx*/,
|
||||||
0 /*dx*/, 0 /*si*/, ds_reg /*di*/ );
|
0 /*dx*/, 0 /*si*/, ds_reg /*di*/ );
|
||||||
}
|
|
||||||
|
|
||||||
/* This should never return */
|
/* This should never return */
|
||||||
fprintf( stderr, "TASK_CallToStart: Main program returned!\n" );
|
fprintf( stderr, "TASK_CallToStart: Main program returned!\n" );
|
||||||
TASK_KillCurrentTask( 1 );
|
TASK_KillCurrentTask( 1 );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -461,7 +462,7 @@ HTASK16 TASK_CreateTask( HMODULE16 hModule, HINSTANCE16 hInstance,
|
||||||
|
|
||||||
/* Get current directory */
|
/* Get current directory */
|
||||||
|
|
||||||
GetModuleFileName( hModule, filename, sizeof(filename) );
|
GetModuleFileName16( hModule, filename, sizeof(filename) );
|
||||||
name = strrchr(filename, '\\');
|
name = strrchr(filename, '\\');
|
||||||
if (name) *(name+1) = 0;
|
if (name) *(name+1) = 0;
|
||||||
|
|
||||||
|
@ -470,6 +471,10 @@ HTASK16 TASK_CreateTask( HMODULE16 hModule, HINSTANCE16 hInstance,
|
||||||
pTask->nEvents = 1; /* So the task can be started */
|
pTask->nEvents = 1; /* So the task can be started */
|
||||||
pTask->hSelf = hTask;
|
pTask->hSelf = hTask;
|
||||||
pTask->flags = 0;
|
pTask->flags = 0;
|
||||||
|
|
||||||
|
if (pModule->flags & NE_FFLAGS_WIN32)
|
||||||
|
pTask->flags |= TDBF_WIN32;
|
||||||
|
|
||||||
pTask->version = pModule->expected_version;
|
pTask->version = pModule->expected_version;
|
||||||
pTask->hInstance = hInstance;
|
pTask->hInstance = hInstance;
|
||||||
pTask->hPrevInstance = hPrevInstance;
|
pTask->hPrevInstance = hPrevInstance;
|
||||||
|
|
|
@ -587,7 +587,10 @@ HGLOBAL16 GlobalLRUNewest( HGLOBAL16 handle )
|
||||||
*/
|
*/
|
||||||
DWORD GetFreeSpace( UINT16 wFlags )
|
DWORD GetFreeSpace( UINT16 wFlags )
|
||||||
{
|
{
|
||||||
return GLOBAL_MAX_ALLOC_SIZE;
|
MEMORYSTATUS ms;
|
||||||
|
|
||||||
|
GlobalMemoryStatus( &ms );
|
||||||
|
return ms.dwAvailVirtual;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -20,6 +20,7 @@ C_SRCS = \
|
||||||
main.c \
|
main.c \
|
||||||
mpr.c \
|
mpr.c \
|
||||||
network.c \
|
network.c \
|
||||||
|
ntdll.c \
|
||||||
ole2.c \
|
ole2.c \
|
||||||
ole2disp.c \
|
ole2disp.c \
|
||||||
ole2nls.c \
|
ole2nls.c \
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "string32.h"
|
||||||
|
|
||||||
#define CF_REGFORMATBASE 0xC000
|
#define CF_REGFORMATBASE 0xC000
|
||||||
|
|
||||||
|
@ -525,9 +526,9 @@ UINT16 EnumClipboardFormats(UINT16 wFormat)
|
||||||
|
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* RegisterClipboardFormat [USER.145]
|
* RegisterClipboardFormat16 (USER.145)
|
||||||
*/
|
*/
|
||||||
WORD RegisterClipboardFormat(LPCSTR FormatName)
|
UINT16 RegisterClipboardFormat16( LPCSTR FormatName )
|
||||||
{
|
{
|
||||||
LPCLIPFORMAT lpNewFormat;
|
LPCLIPFORMAT lpNewFormat;
|
||||||
LPCLIPFORMAT lpFormat = ClipFormats;
|
LPCLIPFORMAT lpFormat = ClipFormats;
|
||||||
|
@ -570,6 +571,28 @@ WORD RegisterClipboardFormat(LPCSTR FormatName)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RegisterClipboardFormat32A (USER32.430)
|
||||||
|
*/
|
||||||
|
UINT32 RegisterClipboardFormat32A( LPCSTR formatName )
|
||||||
|
{
|
||||||
|
return RegisterClipboardFormat16( formatName );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RegisterClipboardFormat32W (USER32.431)
|
||||||
|
*/
|
||||||
|
UINT32 RegisterClipboardFormat32W( LPCWSTR formatName )
|
||||||
|
{
|
||||||
|
LPSTR aFormat;
|
||||||
|
UINT32 ret;
|
||||||
|
aFormat = STRING32_DupUniToAnsi(formatName);
|
||||||
|
ret = RegisterClipboardFormat32A(aFormat);
|
||||||
|
free(aFormat);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* GetClipboardFormatName [USER.146]
|
* GetClipboardFormatName [USER.146]
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -2767,7 +2767,7 @@ LRESULT CFn_WMCommand(HWND hDlg, WPARAM16 wParam, LPARAM lParam)
|
||||||
char buffer[80];
|
char buffer[80];
|
||||||
sprintf(buffer,"Select a font size between %d and %d points.",
|
sprintf(buffer,"Select a font size between %d and %d points.",
|
||||||
lpcf->nSizeMin,lpcf->nSizeMax);
|
lpcf->nSizeMin,lpcf->nSizeMax);
|
||||||
MessageBox(hDlg,buffer,NULL,MB_OK);
|
MessageBox16(hDlg,buffer,NULL,MB_OK);
|
||||||
}
|
}
|
||||||
return(TRUE);
|
return(TRUE);
|
||||||
case IDCANCEL:EndDialog(hDlg, FALSE);
|
case IDCANCEL:EndDialog(hDlg, FALSE);
|
||||||
|
|
166
misc/crtdll.c
166
misc/crtdll.c
|
@ -21,6 +21,8 @@
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
|
#include "crtdll.h"
|
||||||
|
#include "string32.h"
|
||||||
|
|
||||||
UINT32 CRTDLL_argc_dll; /* CRTDLL.23 */
|
UINT32 CRTDLL_argc_dll; /* CRTDLL.23 */
|
||||||
LPSTR *CRTDLL_argv_dll; /* CRTDLL.24 */
|
LPSTR *CRTDLL_argv_dll; /* CRTDLL.24 */
|
||||||
|
@ -575,6 +577,14 @@ int CRTDLL_vsprintf(DWORD *args)
|
||||||
return vsprintf((char *)args[0],(char *)args[1],args+2);
|
return vsprintf((char *)args[0],(char *)args[1],args+2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* vsprintf (CRTDLL.500) (NTDLL.913)
|
||||||
|
*/
|
||||||
|
int CRTDLL_sscanf(DWORD *args)
|
||||||
|
{
|
||||||
|
return vsscanf((char *)args[0],(char *)args[1],args+2);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* _mbscpy (CRTDLL.200)
|
* _mbscpy (CRTDLL.200)
|
||||||
|
@ -596,9 +606,9 @@ unsigned char* CRTDLL__mbscat(unsigned char *x,unsigned char *y)
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* _strupr (CRTDLL.300)
|
* _strupr (CRTDLL.300)
|
||||||
*/
|
*/
|
||||||
CHAR* CRTDLL__strupr(CHAR *x)
|
LPSTR CRTDLL__strupr(LPSTR x)
|
||||||
{
|
{
|
||||||
CHAR *y=x;
|
LPSTR y=x;
|
||||||
|
|
||||||
while (*y) {
|
while (*y) {
|
||||||
*y=toupper(*y);
|
*y=toupper(*y);
|
||||||
|
@ -607,6 +617,35 @@ CHAR* CRTDLL__strupr(CHAR *x)
|
||||||
return x;
|
return x;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* _wcsupr (CRTDLL.328)
|
||||||
|
*/
|
||||||
|
LPWSTR CRTDLL__wcsupr(LPWSTR x)
|
||||||
|
{
|
||||||
|
LPWSTR y=x;
|
||||||
|
|
||||||
|
while (*y) {
|
||||||
|
*y=toupper(*y);
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* _wcslwr (CRTDLL.323)
|
||||||
|
*/
|
||||||
|
LPWSTR CRTDLL__wcslwr(LPWSTR x)
|
||||||
|
{
|
||||||
|
LPWSTR y=x;
|
||||||
|
|
||||||
|
while (*y) {
|
||||||
|
*y=tolower(*y);
|
||||||
|
y++;
|
||||||
|
}
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*********************************************************************
|
/*********************************************************************
|
||||||
* malloc (CRTDLL.427)
|
* malloc (CRTDLL.427)
|
||||||
*/
|
*/
|
||||||
|
@ -655,3 +694,126 @@ DWORD CRTDLL_fclose(LPVOID x)
|
||||||
dprintf_crtdll(stdnimp,"fclose(%p)\n",x);
|
dprintf_crtdll(stdnimp,"fclose(%p)\n",x);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* setlocale (CRTDLL.453)
|
||||||
|
*/
|
||||||
|
LPSTR CRTDLL_setlocale(INT32 category,LPCSTR locale)
|
||||||
|
{
|
||||||
|
LPSTR categorystr;
|
||||||
|
|
||||||
|
switch (category) {
|
||||||
|
case CRTDLL_LC_ALL: categorystr="LC_ALL";break;
|
||||||
|
case CRTDLL_LC_COLLATE: categorystr="LC_COLLATE";break;
|
||||||
|
case CRTDLL_LC_CTYPE: categorystr="LC_CTYPE";break;
|
||||||
|
case CRTDLL_LC_MONETARY: categorystr="LC_MONETARY";break;
|
||||||
|
case CRTDLL_LC_NUMERIC: categorystr="LC_NUMERIC";break;
|
||||||
|
case CRTDLL_LC_TIME: categorystr="LC_TIME";break;
|
||||||
|
default: categorystr = "UNKNOWN?";break;
|
||||||
|
}
|
||||||
|
fprintf(stderr,"CRTDLL.setlocale(%s,%s),stub!\n",categorystr,locale);
|
||||||
|
return "C";
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* wcsspn (CRTDLL.516)
|
||||||
|
*/
|
||||||
|
INT32 CRTDLL_wcsspn(LPWSTR str,LPWSTR accept)
|
||||||
|
{
|
||||||
|
LPWSTR s,t;
|
||||||
|
|
||||||
|
s=str;
|
||||||
|
do {
|
||||||
|
t=accept;
|
||||||
|
while (*t) { if (*t==*s) break;t++;}
|
||||||
|
if (!*t) break;
|
||||||
|
s++;
|
||||||
|
} while (*s);
|
||||||
|
return s-str; /* nr of wchars */
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* wcschr (CRTDLL.504)
|
||||||
|
*/
|
||||||
|
LPWSTR CRTDLL_wcschr(LPWSTR str,WCHAR xchar)
|
||||||
|
{
|
||||||
|
LPWSTR s;
|
||||||
|
|
||||||
|
s=str;
|
||||||
|
do {
|
||||||
|
if (*s==xchar)
|
||||||
|
return s;
|
||||||
|
} while (*s++);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* towupper (CRTDLL.494)
|
||||||
|
*/
|
||||||
|
WCHAR CRTDLL_towupper(WCHAR x)
|
||||||
|
{
|
||||||
|
return (WCHAR)toupper((CHAR)x);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* swprintf (CRTDLL.483)
|
||||||
|
*/
|
||||||
|
DWORD CRTDLL_swprintf(DWORD *args)
|
||||||
|
{
|
||||||
|
return WIN32_wsprintf32W(args);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* _wcsicoll (CRTDLL.322)
|
||||||
|
*/
|
||||||
|
DWORD CRTDLL__wcsicoll(LPWSTR a1,LPWSTR a2)
|
||||||
|
{
|
||||||
|
/* FIXME: handle collates */
|
||||||
|
return lstrcmpi32W(a1,a2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* wcscoll (CRTDLL.506)
|
||||||
|
*/
|
||||||
|
DWORD CRTDLL_wcscoll(LPWSTR a1,LPWSTR a2)
|
||||||
|
{
|
||||||
|
/* FIXME: handle collates */
|
||||||
|
return lstrcmp32W(a1,a2);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* wcsstr (CRTDLL.517)
|
||||||
|
*/
|
||||||
|
LPWSTR CRTDLL_wcsstr(LPWSTR s,LPWSTR b)
|
||||||
|
{
|
||||||
|
LPWSTR x,y,c;
|
||||||
|
|
||||||
|
x=s;
|
||||||
|
while (*x) {
|
||||||
|
if (*x==*b) {
|
||||||
|
y=x;c=b;
|
||||||
|
while (*y && *c && *y==*c) { c++;y++; }
|
||||||
|
if (!*c)
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
x++;
|
||||||
|
}
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*********************************************************************
|
||||||
|
* wcsrchr (CRTDLL.515)
|
||||||
|
*/
|
||||||
|
LPWSTR CRTDLL_wcsrchr(LPWSTR str,WCHAR xchar)
|
||||||
|
{
|
||||||
|
LPWSTR s;
|
||||||
|
|
||||||
|
s=str+lstrlen32W(str);
|
||||||
|
do {
|
||||||
|
if (*s==xchar)
|
||||||
|
return s;
|
||||||
|
s--;
|
||||||
|
} while (s>=str);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -232,7 +232,7 @@ LRESULT DefDriverProc(DWORD dwDevID, HDRVR16 hDriv, UINT16 wMsg,
|
||||||
return (LRESULT)0L;
|
return (LRESULT)0L;
|
||||||
|
|
||||||
case DRV_CONFIGURE:
|
case DRV_CONFIGURE:
|
||||||
MessageBox( (HWND)NULL, "Driver isn't configurable !",
|
MessageBox16( (HWND)NULL, "Driver isn't configurable !",
|
||||||
"Wine Driver", MB_OK );
|
"Wine Driver", MB_OK );
|
||||||
return (LRESULT)0L;
|
return (LRESULT)0L;
|
||||||
|
|
||||||
|
|
|
@ -12,6 +12,7 @@ static char Copyright[] = "Copyright Scott A. Laird, Erik Bos 1993, 1994";
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
/* #define DEBUG_KEYBOARD */
|
/* #define DEBUG_KEYBOARD */
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
|
|
||||||
struct KeyTableEntry {
|
struct KeyTableEntry {
|
||||||
|
@ -217,6 +218,12 @@ WORD VkKeyScan(WORD cChar)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
WORD VkKeyScan32W(WORD cChar)
|
||||||
|
{
|
||||||
|
/* lower part of cChar is used anyway */
|
||||||
|
return VkKeyScan(cChar);
|
||||||
|
}
|
||||||
|
|
||||||
int GetKeyboardType(int nTypeFlag)
|
int GetKeyboardType(int nTypeFlag)
|
||||||
{
|
{
|
||||||
dprintf_keyboard(stddeb,"GetKeyboardType(%d)\n",nTypeFlag);
|
dprintf_keyboard(stddeb,"GetKeyboardType(%d)\n",nTypeFlag);
|
||||||
|
@ -277,7 +284,31 @@ int GetKbCodePage(void)
|
||||||
return 850;
|
return 850;
|
||||||
}
|
}
|
||||||
|
|
||||||
int GetKeyNameText(LONG lParam, LPSTR lpBuffer, int nSize)
|
/****************************************************************************
|
||||||
|
* GetKeyNameText32W (USER32.247)
|
||||||
|
*/
|
||||||
|
INT32 GetKeyNameText32W(LONG lParam, LPWSTR lpBuffer, INT32 nSize)
|
||||||
|
{
|
||||||
|
LPSTR buf = xmalloc(nSize);
|
||||||
|
int res = GetKeyNameText32A(lParam,buf,nSize);
|
||||||
|
|
||||||
|
lstrcpynAtoW(lpBuffer,buf,nSize);
|
||||||
|
free(buf);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* GetKeyNameText32A (USER32.246)
|
||||||
|
*/
|
||||||
|
INT32 GetKeyNameText32A(LONG lParam, LPSTR lpBuffer, INT32 nSize)
|
||||||
|
{
|
||||||
|
return GetKeyNameText16(lParam,lpBuffer,nSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* GetKeyNameText16 (KEYBOARD.133)
|
||||||
|
*/
|
||||||
|
INT16 GetKeyNameText16(LONG lParam, LPSTR lpBuffer, INT16 nSize)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
|
|
190
misc/lstr.c
190
misc/lstr.c
|
@ -819,3 +819,193 @@ WIN32_FormatMessage32A(DWORD *args) {
|
||||||
xargs
|
xargs
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD
|
||||||
|
FormatMessage32W(
|
||||||
|
DWORD dwFlags,
|
||||||
|
LPCVOID lpSource,
|
||||||
|
DWORD dwMessageId,
|
||||||
|
DWORD dwLanguageId,
|
||||||
|
LPWSTR lpBuffer,
|
||||||
|
DWORD nSize,
|
||||||
|
LPDWORD args /* va_list *args */
|
||||||
|
) {
|
||||||
|
LPSTR target,t;
|
||||||
|
DWORD talloced;
|
||||||
|
LPSTR from,f;
|
||||||
|
DWORD width = dwFlags & FORMAT_MESSAGE_MAX_WIDTH_MASK;
|
||||||
|
DWORD nolinefeed = 0;
|
||||||
|
|
||||||
|
dprintf_resource(stddeb,
|
||||||
|
"FormatMessage32A(0x%lx,%p,%ld,0x%lx,%p,%ld,%p)\n",
|
||||||
|
dwFlags,lpSource,dwMessageId,dwLanguageId,lpBuffer,nSize,args
|
||||||
|
);
|
||||||
|
if (width)
|
||||||
|
fprintf(stdnimp," - line wrapping not supported.\n");
|
||||||
|
from = NULL;
|
||||||
|
if (dwFlags & FORMAT_MESSAGE_FROM_STRING)
|
||||||
|
from = STRING32_DupUniToAnsi((LPWSTR)lpSource);
|
||||||
|
if (dwFlags & FORMAT_MESSAGE_FROM_SYSTEM) {
|
||||||
|
/* gather information from system message tables ... */
|
||||||
|
fprintf(stdnimp," - FORMAT_MESSAGE_FROM_SYSTEM not implemented.\n");
|
||||||
|
}
|
||||||
|
if (dwFlags & FORMAT_MESSAGE_FROM_HMODULE) {
|
||||||
|
INT32 bufsize;
|
||||||
|
|
||||||
|
dwMessageId &= 0xFFFF;
|
||||||
|
bufsize=LoadMessage32A(0,dwMessageId,dwLanguageId,NULL,100);
|
||||||
|
if (bufsize) {
|
||||||
|
from = (char*)xmalloc(bufsize+1);
|
||||||
|
LoadMessage32A(0,dwMessageId,dwLanguageId,from,bufsize+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
target = (char*)xmalloc(100);
|
||||||
|
t = target;
|
||||||
|
talloced= 100;
|
||||||
|
*t = 0;
|
||||||
|
|
||||||
|
#define ADD_TO_T(c) \
|
||||||
|
*t++=c;\
|
||||||
|
if (t-target == talloced) {\
|
||||||
|
target = (char*)xrealloc(target,talloced*2);\
|
||||||
|
t = target+talloced;\
|
||||||
|
talloced*=2;\
|
||||||
|
}
|
||||||
|
|
||||||
|
if (from) {
|
||||||
|
f=from;
|
||||||
|
while (*f) {
|
||||||
|
if (*f=='%') {
|
||||||
|
int insertnr;
|
||||||
|
char *fmtstr,*sprintfbuf,*x;
|
||||||
|
DWORD *argliststart;
|
||||||
|
|
||||||
|
fmtstr = NULL;
|
||||||
|
f++;
|
||||||
|
if (!*f) {
|
||||||
|
ADD_TO_T('%');
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
switch (*f) {
|
||||||
|
case '1':case '2':case '3':case '4':case '5':
|
||||||
|
case '6':case '7':case '8':case '9':
|
||||||
|
insertnr=*f-'0';
|
||||||
|
switch (f[1]) {
|
||||||
|
case '0':case '1':case '2':case '3':
|
||||||
|
case '4':case '5':case '6':case '7':
|
||||||
|
case '8':case '9':
|
||||||
|
f++;
|
||||||
|
insertnr=insertnr*10+*f-'0';
|
||||||
|
f++;
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
f++;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
if (*f=='!') {
|
||||||
|
f++;
|
||||||
|
if (NULL!=(x=strchr(f,'!'))) {
|
||||||
|
*x='\0';
|
||||||
|
fmtstr=(char*)xmalloc(strlen(f)+2);
|
||||||
|
sprintf(fmtstr,"%%%s",f);
|
||||||
|
f=x+1;
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
fmtstr=strdup("%s");
|
||||||
|
if (dwFlags & FORMAT_MESSAGE_ARGUMENT_ARRAY)
|
||||||
|
argliststart=args+insertnr-1;
|
||||||
|
else
|
||||||
|
/* FIXME: not sure that this is
|
||||||
|
* correct for unix-c-varargs.
|
||||||
|
*/
|
||||||
|
argliststart=((DWORD*)&args)+insertnr-1;
|
||||||
|
|
||||||
|
if (fmtstr[strlen(fmtstr)]=='s') {
|
||||||
|
DWORD xarr[3];
|
||||||
|
|
||||||
|
xarr[0]=(DWORD)STRING32_DupUniToAnsi((LPWSTR)(*(argliststart+0)));
|
||||||
|
/* possible invalid pointers */
|
||||||
|
xarr[1]=*(argliststart+1);
|
||||||
|
xarr[2]=*(argliststart+2);
|
||||||
|
sprintfbuf=(char*)xmalloc(lstrlen32W((LPWSTR)argliststart[0])*2+1);
|
||||||
|
vsprintf(sprintfbuf,fmtstr,xarr);
|
||||||
|
} else {
|
||||||
|
sprintfbuf=(char*)xmalloc(100);
|
||||||
|
vsprintf(sprintfbuf,fmtstr,argliststart);
|
||||||
|
}
|
||||||
|
x=sprintfbuf;
|
||||||
|
while (*x) {
|
||||||
|
ADD_TO_T(*x++);
|
||||||
|
}
|
||||||
|
free(sprintfbuf);
|
||||||
|
free(fmtstr);
|
||||||
|
break;
|
||||||
|
case '0':
|
||||||
|
nolinefeed=1;
|
||||||
|
f++;
|
||||||
|
break;
|
||||||
|
default:ADD_TO_T(*f++)
|
||||||
|
break;
|
||||||
|
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
ADD_TO_T(*f++)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*t='\0';
|
||||||
|
}
|
||||||
|
if (!nolinefeed && t[-1]!='\n')
|
||||||
|
ADD_TO_T('\n');
|
||||||
|
talloced = strlen(target)+1;
|
||||||
|
if (nSize && talloced<nSize)
|
||||||
|
target = (char*)xrealloc(target,nSize);
|
||||||
|
if (dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) {
|
||||||
|
/* nSize is the MINIMUM size */
|
||||||
|
*((LPVOID*)lpBuffer) = (LPVOID)LocalAlloc32(GMEM_ZEROINIT,talloced*2+2);
|
||||||
|
lstrcpynAtoW(*(LPWSTR*)lpBuffer,target,talloced);
|
||||||
|
} else
|
||||||
|
lstrcpynAtoW(lpBuffer,target,nSize);
|
||||||
|
free(target);
|
||||||
|
if (from) free(from);
|
||||||
|
return (dwFlags & FORMAT_MESSAGE_ALLOCATE_BUFFER) ?
|
||||||
|
lstrlen32W(*(LPWSTR*)lpBuffer):
|
||||||
|
lstrlen32W(lpBuffer);
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* FormatMessageA (KERNEL32.138) Emulator Version
|
||||||
|
*/
|
||||||
|
DWORD
|
||||||
|
WIN32_FormatMessage32W(DWORD *args) {
|
||||||
|
DWORD dwFlags = args[0];
|
||||||
|
LPCVOID lpSource = (LPCVOID)args[1];
|
||||||
|
DWORD dwMessageId = args[2];
|
||||||
|
DWORD dwLanguageId = args[3];
|
||||||
|
LPWSTR lpBuffer = (LPWSTR)args[4];
|
||||||
|
DWORD nSize = args[5];
|
||||||
|
DWORD *xargs;
|
||||||
|
|
||||||
|
/* convert possible varargs to an argument array look-a-like */
|
||||||
|
|
||||||
|
if (dwFlags & FORMAT_MESSAGE_ARGUMENT_ARRAY) {
|
||||||
|
xargs=(DWORD*)args[6];
|
||||||
|
} else {
|
||||||
|
/* args[6] is a pointer to a pointer to the start of
|
||||||
|
* a list of arguments.
|
||||||
|
*/
|
||||||
|
if (args[6])
|
||||||
|
xargs=(DWORD*)(((DWORD*)args[6])[0]);
|
||||||
|
else
|
||||||
|
xargs=NULL;
|
||||||
|
dwFlags|=FORMAT_MESSAGE_ARGUMENT_ARRAY;
|
||||||
|
}
|
||||||
|
return FormatMessage32W(
|
||||||
|
dwFlags,
|
||||||
|
lpSource,
|
||||||
|
dwMessageId,
|
||||||
|
dwLanguageId,
|
||||||
|
lpBuffer,
|
||||||
|
nSize,
|
||||||
|
xargs
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
123
misc/main.c
123
misc/main.c
|
@ -602,7 +602,7 @@ static void MAIN_RestoreSetup(void)
|
||||||
static void called_at_exit(void)
|
static void called_at_exit(void)
|
||||||
{
|
{
|
||||||
MAIN_RestoreSetup();
|
MAIN_RestoreSetup();
|
||||||
WSACleanup();
|
WINSOCK_Shutdown();
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
|
@ -879,8 +879,8 @@ BOOL32 SetEnvironmentVariable32A( LPCSTR lpName, LPCSTR lpValue )
|
||||||
{
|
{
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = SetEnvironment(lpName, lpValue, strlen(lpValue) + 1);
|
rc = SetEnvironment(lpName, lpValue, lpValue?(strlen(lpValue)+1):0);
|
||||||
return (rc > 0) ? 1 : 0;
|
return (rc>0)?TRUE:FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -889,15 +889,13 @@ BOOL32 SetEnvironmentVariable32A( LPCSTR lpName, LPCSTR lpValue )
|
||||||
*/
|
*/
|
||||||
BOOL32 SetEnvironmentVariable32W( LPCWSTR lpName, LPCWSTR lpValue )
|
BOOL32 SetEnvironmentVariable32W( LPCWSTR lpName, LPCWSTR lpValue )
|
||||||
{
|
{
|
||||||
LPSTR lpAName, lpAValue;
|
LPSTR lpNameA = STRING32_DupUniToAnsi(lpName);
|
||||||
BOOL ret;
|
LPSTR lpValueA = lpValue?STRING32_DupUniToAnsi(lpValue):NULL;
|
||||||
|
BOOL32 ret = SetEnvironmentVariable32A(lpNameA,lpValueA);
|
||||||
|
|
||||||
lpAName = STRING32_DupUniToAnsi( lpName );
|
free (lpNameA);
|
||||||
lpAValue = STRING32_DupUniToAnsi ( lpValue );
|
if (lpValue) free (lpValueA);
|
||||||
ret = SetEnvironment(lpAName, lpAValue, strlen(lpAValue) + 1);
|
return ret;
|
||||||
free (lpAName);
|
|
||||||
free (lpAValue);
|
|
||||||
return (ret > 0) ? 1 : 0;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -926,13 +924,28 @@ int GetEnvironment(LPSTR lpPortName, LPSTR lpEnviron, WORD nMaxSiz)
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetEnvironmentVariableA (KERNEL32.213)
|
* GetEnvironmentVariable32A (KERNEL32.213)
|
||||||
*/
|
*/
|
||||||
DWORD GetEnvironmentVariableA(LPSTR lpName, LPSTR lpValue, DWORD size)
|
DWORD GetEnvironmentVariable32A( LPSTR lpName, LPSTR lpValue, DWORD size )
|
||||||
{
|
{
|
||||||
return GetEnvironment(lpName, lpValue, size);
|
return GetEnvironment(lpName, lpValue, size);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetEnvironmentVariable32W (KERNEL32.214)
|
||||||
|
*/
|
||||||
|
DWORD GetEnvironmentVariable32W( LPWSTR nameW, LPWSTR valW, DWORD size )
|
||||||
|
{
|
||||||
|
LPSTR name = nameW?STRING32_DupUniToAnsi(nameW):NULL;
|
||||||
|
LPSTR val = valW?(LPSTR)xmalloc(size*2):NULL;
|
||||||
|
DWORD res = GetEnvironment(name,val,size);
|
||||||
|
|
||||||
|
if (name) free(name);
|
||||||
|
if (val) lstrcpynAtoW(valW,val,size);
|
||||||
|
if (val) free(val);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetEnvironmentStrings (KERNEL32.210)
|
* GetEnvironmentStrings (KERNEL32.210)
|
||||||
*/
|
*/
|
||||||
|
@ -1047,9 +1060,20 @@ LONG GetTimerResolution(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* SystemParametersInfo (USER.483)
|
* SystemParametersInfo32A (USER32.539)
|
||||||
*/
|
*/
|
||||||
BOOL SystemParametersInfo (UINT uAction, UINT uParam, LPVOID lpvParam, UINT fuWinIni)
|
BOOL32 SystemParametersInfo32A( UINT32 uAction, UINT32 uParam,
|
||||||
|
LPVOID lpvParam, UINT32 fuWinIni )
|
||||||
|
{
|
||||||
|
return SystemParametersInfo16(uAction,uParam,lpvParam,fuWinIni);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SystemParametersInfo16 (USER.483)
|
||||||
|
*/
|
||||||
|
BOOL16 SystemParametersInfo16( UINT16 uAction, UINT16 uParam,
|
||||||
|
LPVOID lpvParam, UINT16 fuWinIni )
|
||||||
{
|
{
|
||||||
int timeout, temp;
|
int timeout, temp;
|
||||||
char buffer[256];
|
char buffer[256];
|
||||||
|
@ -1160,7 +1184,7 @@ BOOL SystemParametersInfo (UINT uAction, UINT uParam, LPVOID lpvParam, UINT fuWi
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case SPI_SETDESKPATTERN:
|
case SPI_SETDESKPATTERN:
|
||||||
if ((INT) uParam == -1) {
|
if ((INT16)uParam == -1) {
|
||||||
GetProfileString32A("Desktop", "Pattern",
|
GetProfileString32A("Desktop", "Pattern",
|
||||||
"170 85 170 85 170 85 170 85",
|
"170 85 170 85 170 85 170 85",
|
||||||
buffer, sizeof(buffer) );
|
buffer, sizeof(buffer) );
|
||||||
|
@ -1195,16 +1219,79 @@ BOOL SystemParametersInfo (UINT uAction, UINT uParam, LPVOID lpvParam, UINT fuWi
|
||||||
case SPI_SETFASTTASKSWITCH:
|
case SPI_SETFASTTASKSWITCH:
|
||||||
case SPI_SETKEYBOARDDELAY:
|
case SPI_SETKEYBOARDDELAY:
|
||||||
case SPI_SETKEYBOARDSPEED:
|
case SPI_SETKEYBOARDSPEED:
|
||||||
fprintf(stderr, "SystemParametersInfo: option %d ignored.\n", uParam);
|
fprintf(stderr, "SystemParametersInfo: option %d ignored.\n", uAction);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SPI_GETWORKAREA:
|
||||||
|
SetRect16( (RECT16 *)lpvParam, 0, 0,
|
||||||
|
GetSystemMetrics( SM_CXSCREEN ),
|
||||||
|
GetSystemMetrics( SM_CYSCREEN ) );
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
fprintf(stderr, "SystemParametersInfo: unknown option %d.\n", uParam);
|
fprintf(stderr, "SystemParametersInfo: unknown option %d.\n", uAction);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SystemParametersInfo32W (USER32.540)
|
||||||
|
*/
|
||||||
|
BOOL32 SystemParametersInfo32W( UINT32 uAction, UINT32 uParam,
|
||||||
|
LPVOID lpvParam, UINT32 fuWinIni )
|
||||||
|
{
|
||||||
|
char buffer[256];
|
||||||
|
|
||||||
|
switch (uAction)
|
||||||
|
{
|
||||||
|
case SPI_SETDESKWALLPAPER:
|
||||||
|
if (lpvParam)
|
||||||
|
{
|
||||||
|
lstrcpynWtoA(buffer,(LPWSTR)lpvParam,sizeof(buffer));
|
||||||
|
return SetDeskWallPaper32(buffer);
|
||||||
|
}
|
||||||
|
return SetDeskWallPaper32(NULL);
|
||||||
|
|
||||||
|
case SPI_SETDESKPATTERN:
|
||||||
|
if ((INT) uParam == -1)
|
||||||
|
{
|
||||||
|
GetProfileString32A("Desktop", "Pattern",
|
||||||
|
"170 85 170 85 170 85 170 85",
|
||||||
|
buffer, sizeof(buffer) );
|
||||||
|
return (DESKTOP_SetPattern((LPSTR) buffer));
|
||||||
|
}
|
||||||
|
if (lpvParam)
|
||||||
|
{
|
||||||
|
lstrcpynWtoA(buffer,(LPWSTR)lpvParam,sizeof(buffer));
|
||||||
|
return DESKTOP_SetPattern(buffer);
|
||||||
|
}
|
||||||
|
return DESKTOP_SetPattern(NULL);
|
||||||
|
|
||||||
|
case SPI_GETICONTITLELOGFONT:
|
||||||
|
{
|
||||||
|
/* FIXME GetProfileString32A( "?", "?", "?" ) */
|
||||||
|
LPLOGFONT32W lpLogFont = (LPLOGFONT32W)lpvParam;
|
||||||
|
lpLogFont->lfHeight = 10;
|
||||||
|
lpLogFont->lfWidth = 0;
|
||||||
|
lpLogFont->lfEscapement = lpLogFont->lfOrientation = 0;
|
||||||
|
lpLogFont->lfWeight = FW_NORMAL;
|
||||||
|
lpLogFont->lfItalic = lpLogFont->lfStrikeOut = lpLogFont->lfUnderline = FALSE;
|
||||||
|
lpLogFont->lfCharSet = ANSI_CHARSET;
|
||||||
|
lpLogFont->lfOutPrecision = OUT_DEFAULT_PRECIS;
|
||||||
|
lpLogFont->lfClipPrecision = CLIP_DEFAULT_PRECIS;
|
||||||
|
lpLogFont->lfPitchAndFamily = DEFAULT_PITCH | FF_SWISS;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return SystemParametersInfo32A(uAction,uParam,lpvParam,fuWinIni);
|
||||||
|
|
||||||
|
}
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* COPY (GDI.250)
|
* COPY (GDI.250)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
/*
|
||||||
|
* NT basis DLL
|
||||||
|
*
|
||||||
|
* Copyright 1996 Marcus Meissner
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
#include <time.h>
|
||||||
|
#include <ctype.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include "win.h"
|
||||||
|
#include "windows.h"
|
||||||
|
#include "stddebug.h"
|
||||||
|
#include "debug.h"
|
||||||
|
#include "module.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
#include "heap.h"
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlLengthRequiredSid [NTDLL]
|
||||||
|
*/
|
||||||
|
DWORD
|
||||||
|
RtlLengthRequiredSid(DWORD nrofsubauths) {
|
||||||
|
return sizeof(DWORD)*nrofsubauths+sizeof(SID);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlNormalizeProcessParams [NTDLL]
|
||||||
|
*/
|
||||||
|
LPVOID
|
||||||
|
RtlNormalizeProcessParams(LPVOID x)
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"RtlNormalizeProcessParams(%p), stub.\n",x);
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlInitializeSid [NTDLL]
|
||||||
|
*/
|
||||||
|
DWORD
|
||||||
|
RtlInitializeSid(LPSID lpsid,LPSID_IDENTIFIER_AUTHORITY lpsidauth,DWORD c) {
|
||||||
|
BYTE a = c&0xff;
|
||||||
|
|
||||||
|
if (a>=SID_MAX_SUB_AUTHORITIES)
|
||||||
|
return a;
|
||||||
|
lpsid->SubAuthorityCount = a;
|
||||||
|
lpsid->Revision = SID_REVISION;
|
||||||
|
memcpy(&(lpsid->IdentifierAuthority),lpsidauth,sizeof(SID_IDENTIFIER_AUTHORITY));
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlSubAuthoritySid [NTDLL]
|
||||||
|
*/
|
||||||
|
LPDWORD
|
||||||
|
RtlSubAuthoritySid(LPSID lpsid,DWORD nr) {
|
||||||
|
return &(lpsid->SubAuthority[nr]);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlSubAuthorityCountSid [NTDLL]
|
||||||
|
*/
|
||||||
|
LPBYTE
|
||||||
|
RtlSubAuthorityCountSid(LPSID lpsid) {
|
||||||
|
return ((LPBYTE)lpsid)+1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlCopySid [NTDLL]
|
||||||
|
*/
|
||||||
|
DWORD
|
||||||
|
RtlCopySid(DWORD len,LPSID to,LPSID from) {
|
||||||
|
if (len<(from->SubAuthorityCount*4+8))
|
||||||
|
return 0xC0000023;
|
||||||
|
memmove(to,from,from->SubAuthorityCount*4+8);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlOemToUnicodeN [NTDLL]
|
||||||
|
*/
|
||||||
|
DWORD /* NTSTATUS */
|
||||||
|
RtlOemToUnicodeN(LPWSTR unistr,DWORD unilen,LPDWORD reslen,LPSTR oemstr,DWORD oemlen) {
|
||||||
|
DWORD len;
|
||||||
|
LPWSTR x;
|
||||||
|
|
||||||
|
len = oemlen;
|
||||||
|
if (unilen/2 < len)
|
||||||
|
len = unilen/2;
|
||||||
|
x=(LPWSTR)xmalloc((len+1)*sizeof(WCHAR));
|
||||||
|
lstrcpynAtoW(x,oemstr,len+1);
|
||||||
|
memcpy(unistr,x,len*2);
|
||||||
|
if (reslen) *reslen = len*2;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlUnicodeToOemN [NTDLL]
|
||||||
|
*/
|
||||||
|
DWORD /* NTSTATUS */
|
||||||
|
RtlUnicodeToOemN(LPSTR oemstr,DWORD oemlen,LPDWORD reslen,LPWSTR unistr,DWORD unilen) {
|
||||||
|
DWORD len;
|
||||||
|
LPSTR x;
|
||||||
|
|
||||||
|
len = oemlen;
|
||||||
|
if (unilen/2 < len)
|
||||||
|
len = unilen/2;
|
||||||
|
x=(LPSTR)xmalloc(len+1);
|
||||||
|
lstrcpynWtoA(x,unistr,len+1);
|
||||||
|
memcpy(oemstr,x,len);
|
||||||
|
if (reslen) *reslen = len;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* RtlUnicodeStringToOemString [NTDLL]
|
||||||
|
*/
|
||||||
|
DWORD /* NTSTATUS */
|
||||||
|
RtlUnicodeStringToOemString(LPUNICODE_STRING uni,LPANSI_STRING oem,BOOL32 alloc)
|
||||||
|
{
|
||||||
|
if (alloc) {
|
||||||
|
oem->Buffer = (LPSTR)xmalloc(uni->Length/2)+1;
|
||||||
|
oem->MaximumLength = uni->Length/2+1;
|
||||||
|
}
|
||||||
|
oem->Length = uni->Length/2;
|
||||||
|
lstrcpynWtoA(oem->Buffer,uni->Buffer,uni->Length/2+1);
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -503,7 +503,8 @@ SHELL_SaveRegistry() {
|
||||||
pwd=getpwuid(getuid());
|
pwd=getpwuid(getuid());
|
||||||
if (pwd!=NULL && pwd->pw_dir!=NULL)
|
if (pwd!=NULL && pwd->pw_dir!=NULL)
|
||||||
{
|
{
|
||||||
char *tmp = tmpnam(NULL);
|
char *tmp;
|
||||||
|
|
||||||
fn=(char*)xmalloc( strlen(pwd->pw_dir) + strlen(WINE_PREFIX) +
|
fn=(char*)xmalloc( strlen(pwd->pw_dir) + strlen(WINE_PREFIX) +
|
||||||
strlen(SAVE_CURRENT_USER) + 2 );
|
strlen(SAVE_CURRENT_USER) + 2 );
|
||||||
strcpy(fn,pwd->pw_dir);
|
strcpy(fn,pwd->pw_dir);
|
||||||
|
@ -511,12 +512,28 @@ SHELL_SaveRegistry() {
|
||||||
/* create the directory. don't care about errorcodes. */
|
/* create the directory. don't care about errorcodes. */
|
||||||
mkdir(fn,0755); /* drwxr-xr-x */
|
mkdir(fn,0755); /* drwxr-xr-x */
|
||||||
strcat(fn,"/"SAVE_CURRENT_USER);
|
strcat(fn,"/"SAVE_CURRENT_USER);
|
||||||
if (_savereg(key_current_user,tmp,all)) rename(tmp,fn);
|
tmp = (char*)xmalloc(strlen(fn)+strlen(".tmp")+1);
|
||||||
|
strcpy(tmp,fn);strcat(tmp,".tmp");
|
||||||
|
if (_savereg(key_current_user,tmp,all)) {
|
||||||
|
if (-1==rename(tmp,fn)) {
|
||||||
|
perror("rename tmp registry");
|
||||||
|
unlink(tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(tmp);
|
||||||
free(fn);
|
free(fn);
|
||||||
fn=(char*)xmalloc(strlen(pwd->pw_dir)+strlen(WINE_PREFIX)+strlen(SAVE_LOCAL_MACHINE)+2);
|
fn=(char*)xmalloc(strlen(pwd->pw_dir)+strlen(WINE_PREFIX)+strlen(SAVE_LOCAL_MACHINE)+2);
|
||||||
strcpy(fn,pwd->pw_dir);
|
strcpy(fn,pwd->pw_dir);
|
||||||
strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_MACHINE);
|
strcat(fn,WINE_PREFIX"/"SAVE_LOCAL_MACHINE);
|
||||||
if (_savereg(key_local_machine,tmp,all)) rename(tmp,fn);
|
tmp = (char*)xmalloc(strlen(fn)+strlen(".tmp")+1);
|
||||||
|
strcpy(tmp,fn);strcat(tmp,".tmp");
|
||||||
|
if (_savereg(key_local_machine,tmp,all)) {
|
||||||
|
if (-1==rename(tmp,fn)) {
|
||||||
|
perror("rename tmp registry");
|
||||||
|
unlink(tmp);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
free(tmp);
|
||||||
free(fn);
|
free(fn);
|
||||||
} else
|
} else
|
||||||
fprintf(stderr,"SHELL_SaveRegistry:failed to get homedirectory of UID %d.\n",getuid());
|
fprintf(stderr,"SHELL_SaveRegistry:failed to get homedirectory of UID %d.\n",getuid());
|
||||||
|
@ -1639,7 +1656,7 @@ DWORD RegOpenKeyEx32W(
|
||||||
i = 0;
|
i = 0;
|
||||||
while ((i<wpc) && (wps[i][0]=='\0')) i++;
|
while ((i<wpc) && (wps[i][0]=='\0')) i++;
|
||||||
lpxkey = lpNextKey;
|
lpxkey = lpNextKey;
|
||||||
while (i<wpc) {
|
while (wps[i]) {
|
||||||
lpxkey=lpNextKey->nextsub;
|
lpxkey=lpNextKey->nextsub;
|
||||||
while (lpxkey) {
|
while (lpxkey) {
|
||||||
if (!lstrcmp32W(wps[i],lpxkey->keyname))
|
if (!lstrcmp32W(wps[i],lpxkey->keyname))
|
||||||
|
|
76
misc/shell.c
76
misc/shell.c
|
@ -406,6 +406,33 @@ INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON16 hIcon)
|
||||||
return bRet;
|
return bRet;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* ShellAbout32W [SHELL32.83]
|
||||||
|
*/
|
||||||
|
INT32 ShellAbout32W(HWND32 hWnd, LPCWSTR szApp, LPCWSTR szOtherStuff, HICON16 hIcon)
|
||||||
|
{
|
||||||
|
HGLOBAL16 handle;
|
||||||
|
BOOL bRet;
|
||||||
|
|
||||||
|
if (szApp) lstrcpynWtoA(AppName, szApp, sizeof(AppName));
|
||||||
|
else *AppName = 0;
|
||||||
|
AppName[sizeof(AppName)-1]=0;
|
||||||
|
|
||||||
|
if (szOtherStuff) lstrcpynWtoA(AppMisc, szOtherStuff, sizeof(AppMisc));
|
||||||
|
else *AppMisc = 0;
|
||||||
|
AppMisc[sizeof(AppMisc)-1]=0;
|
||||||
|
|
||||||
|
if (!hIcon) hIcon = LoadIcon16(0,MAKEINTRESOURCE(OIC_WINEICON));
|
||||||
|
handle = SYSRES_LoadResource( SYSRES_DIALOG_SHELL_ABOUT_MSGBOX );
|
||||||
|
if (!handle) return FALSE;
|
||||||
|
bRet = DialogBoxIndirectParam16( WIN_GetWindowInstance( hWnd ),
|
||||||
|
handle, hWnd,
|
||||||
|
(DLGPROC16)MODULE_GetWndProcEntry16("AboutDlgProc"),
|
||||||
|
(LPARAM)hIcon );
|
||||||
|
SYSRES_FreeResource( handle );
|
||||||
|
return bRet;
|
||||||
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* SHELL_GetResourceTable
|
* SHELL_GetResourceTable
|
||||||
*
|
*
|
||||||
|
@ -691,7 +718,7 @@ HICON16 ExtractAssociatedIcon(HINSTANCE16 hInst,LPSTR lpIconPath,LPWORD lpiIcon)
|
||||||
else
|
else
|
||||||
*lpiIcon = 6; /* generic icon - found nothing */
|
*lpiIcon = 6; /* generic icon - found nothing */
|
||||||
|
|
||||||
GetModuleFileName(hInst, lpIconPath, 0x80);
|
GetModuleFileName16(hInst, lpIconPath, 0x80);
|
||||||
hIcon = LoadIcon16( hInst, MAKEINTRESOURCE(*lpiIcon));
|
hIcon = LoadIcon16( hInst, MAKEINTRESOURCE(*lpiIcon));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -837,3 +864,50 @@ SHGetFileInfo32A(LPCSTR path,DWORD dwFileAttributes,SHFILEINFO32A *psfi,
|
||||||
);
|
);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* CommandLineToArgvW [SHELL32.2]
|
||||||
|
*/
|
||||||
|
LPWSTR*
|
||||||
|
CommandLineToArgvW(LPWSTR cmdline,LPDWORD numargs) {
|
||||||
|
LPWSTR *argv,s,t;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
cmdline = (LPWSTR)STRING32_strdupW(cmdline); /* to get writeable copy */
|
||||||
|
s=cmdline;i=0;
|
||||||
|
while (*s) {
|
||||||
|
/* space */
|
||||||
|
if (*s==0x0020) {
|
||||||
|
i++;
|
||||||
|
s++;
|
||||||
|
while (*s && *s==0x0020)
|
||||||
|
s++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
argv=(LPWSTR*)xmalloc(sizeof(LPWSTR)*(i+1));
|
||||||
|
s=t=cmdline;
|
||||||
|
i=0;
|
||||||
|
while (*s) {
|
||||||
|
if (*s==0x0020) {
|
||||||
|
*s=0;
|
||||||
|
argv[i++]=(LPWSTR)STRING32_strdupW(t);
|
||||||
|
*s=0x0020;
|
||||||
|
while (*s && *s==0x0020)
|
||||||
|
s++;
|
||||||
|
if (*s)
|
||||||
|
t=s+1;
|
||||||
|
else
|
||||||
|
t=s;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
s++;
|
||||||
|
}
|
||||||
|
if (*t)
|
||||||
|
argv[i++]=(LPWSTR)STRING32_strdupW(t);
|
||||||
|
free(cmdline);
|
||||||
|
argv[i]=NULL;
|
||||||
|
*numargs=i;
|
||||||
|
return argv;
|
||||||
|
}
|
||||||
|
|
12
misc/ver.c
12
misc/ver.c
|
@ -674,8 +674,8 @@ VerQueryValue16(SEGPTR segblock,LPCSTR subblock,SEGPTR *buffer,UINT16 *buflen)
|
||||||
dprintf_ver(stddeb,"VerQueryValue16(%p,%s,%p,%d)\n",
|
dprintf_ver(stddeb,"VerQueryValue16(%p,%s,%p,%d)\n",
|
||||||
block,subblock,buffer,*buflen
|
block,subblock,buffer,*buflen
|
||||||
);
|
);
|
||||||
s=(char*)xmalloc(strlen("VS_VERSION_INFO")+strlen(subblock)+1);
|
s=(char*)xmalloc(strlen("VS_VERSION_INFO\\")+strlen(subblock)+1);
|
||||||
strcpy(s,"VS_VERSION_INFO");strcat(s,subblock);
|
strcpy(s,"VS_VERSION_INFO\\");strcat(s,subblock);
|
||||||
b=_find_data(block,s);
|
b=_find_data(block,s);
|
||||||
if (b==NULL) {
|
if (b==NULL) {
|
||||||
*buflen=0;
|
*buflen=0;
|
||||||
|
@ -701,8 +701,8 @@ VerQueryValue32A(LPVOID vblock,LPCSTR subblock,LPVOID *vbuffer,UINT32 *buflen)
|
||||||
dprintf_ver(stddeb,"VerQueryValue32A(%p,%s,%p,%d)\n",
|
dprintf_ver(stddeb,"VerQueryValue32A(%p,%s,%p,%d)\n",
|
||||||
block,subblock,buffer,*buflen
|
block,subblock,buffer,*buflen
|
||||||
);
|
);
|
||||||
s=(char*)xmalloc(strlen("VS_VERSION_INFO")+strlen(subblock)+1);
|
s=(char*)xmalloc(strlen("VS_VERSION_INFO\\")+strlen(subblock)+1);
|
||||||
strcpy(s,"VS_VERSION_INFO");strcat(s,subblock);
|
strcpy(s,"VS_VERSION_INFO\\");strcat(s,subblock);
|
||||||
b=_find_data(block,s);
|
b=_find_data(block,s);
|
||||||
if (b==NULL) {
|
if (b==NULL) {
|
||||||
*buflen=0;
|
*buflen=0;
|
||||||
|
@ -730,8 +730,8 @@ VerQueryValue32W(LPVOID vblock,LPCWSTR subblock,LPVOID *vbuffer,UINT32 *buflen)
|
||||||
char *s,*sb;
|
char *s,*sb;
|
||||||
|
|
||||||
sb=strdupW2A(subblock);
|
sb=strdupW2A(subblock);
|
||||||
s=(char*)xmalloc(strlen("VS_VERSION_INFO")+strlen(sb)+1);
|
s=(char*)xmalloc(strlen("VS_VERSION_INFO\\")+strlen(sb)+1);
|
||||||
strcpy(s,"VS_VERSION_INFO");strcat(s,sb);
|
strcpy(s,"VS_VERSION_INFO\\");strcat(s,sb);
|
||||||
b=_find_data(block,s);
|
b=_find_data(block,s);
|
||||||
if (b==NULL) {
|
if (b==NULL) {
|
||||||
*buflen=0;
|
*buflen=0;
|
||||||
|
|
|
@ -88,7 +88,7 @@ static void fixup_wshe(struct ws_hostent* p_wshe, SEGPTR base);
|
||||||
static void fixup_wspe(struct ws_protoent* p_wspe, SEGPTR base);
|
static void fixup_wspe(struct ws_protoent* p_wspe, SEGPTR base);
|
||||||
static void fixup_wsse(struct ws_servent* p_wsse, SEGPTR base);
|
static void fixup_wsse(struct ws_servent* p_wsse, SEGPTR base);
|
||||||
|
|
||||||
static int delete_async_op(ws_socket*);
|
static int cancel_async_select(ws_socket*);
|
||||||
|
|
||||||
static void convert_sockopt(INT16 *level, INT16 *optname)
|
static void convert_sockopt(INT16 *level, INT16 *optname)
|
||||||
{
|
{
|
||||||
|
@ -298,6 +298,14 @@ INT16 WSAStartup(UINT16 wVersionRequested, LPWSADATA lpWSAData)
|
||||||
return(0);
|
return(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void WINSOCK_Shutdown()
|
||||||
|
{
|
||||||
|
if( async_qid != -1 )
|
||||||
|
if( msgctl(async_qid, IPC_RMID, NULL) == -1 )
|
||||||
|
fprintf(stderr,"failed to delete WS message queue.\n");
|
||||||
|
else async_qid = -1;
|
||||||
|
}
|
||||||
|
|
||||||
INT16 WSACleanup(void)
|
INT16 WSACleanup(void)
|
||||||
{
|
{
|
||||||
LPWSINFO pwsi = wsi_find(GetCurrentTask());
|
LPWSINFO pwsi = wsi_find(GetCurrentTask());
|
||||||
|
@ -316,11 +324,7 @@ INT16 WSACleanup(void)
|
||||||
SIGNAL_MaskAsyncEvents( FALSE );
|
SIGNAL_MaskAsyncEvents( FALSE );
|
||||||
|
|
||||||
wsi_unlink(pwsi);
|
wsi_unlink(pwsi);
|
||||||
if( _wsi_list == NULL && async_qid != -1 )
|
if( _wsi_list == NULL ) WINSOCK_Shutdown();
|
||||||
if( msgctl(async_qid, IPC_RMID, NULL) == -1 )
|
|
||||||
{
|
|
||||||
fprintf(stderr,"failed to delete WS message queue.\n");
|
|
||||||
} else async_qid = -1;
|
|
||||||
|
|
||||||
if( pwsi->flags & WSI_BLOCKINGCALL )
|
if( pwsi->flags & WSI_BLOCKINGCALL )
|
||||||
dprintf_winsock(stddeb,"\tinside blocking call!\n");
|
dprintf_winsock(stddeb,"\tinside blocking call!\n");
|
||||||
|
@ -330,13 +334,14 @@ INT16 WSACleanup(void)
|
||||||
for(i = 0, j = 0, n = 0; i < WS_MAX_SOCKETS_PER_THREAD; i++)
|
for(i = 0, j = 0, n = 0; i < WS_MAX_SOCKETS_PER_THREAD; i++)
|
||||||
if( pwsi->sock[i].fd != -1 )
|
if( pwsi->sock[i].fd != -1 )
|
||||||
{
|
{
|
||||||
n += delete_async_op(&pwsi->sock[i]);
|
n += cancel_async_select(&pwsi->sock[i]);
|
||||||
close(pwsi->sock[i].fd); j++;
|
close(pwsi->sock[i].fd); j++;
|
||||||
}
|
}
|
||||||
if( j )
|
if( j )
|
||||||
dprintf_winsock(stddeb,"\tclosed %i sockets, killed %i async selects!\n", j, n);
|
dprintf_winsock(stddeb,"\tclosed %i sockets, killed %i async selects!\n", j, n);
|
||||||
|
|
||||||
if( pwsi->buffer ) SEGPTR_FREE(pwsi->buffer);
|
if( pwsi->buffer ) SEGPTR_FREE(pwsi->buffer);
|
||||||
|
if( pwsi->dbuffer ) SEGPTR_FREE(pwsi->dbuffer);
|
||||||
WS_FREE(pwsi);
|
WS_FREE(pwsi);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -468,12 +473,12 @@ INT16 WINSOCK_closesocket(SOCKET16 s)
|
||||||
{
|
{
|
||||||
int fd = pws->fd;
|
int fd = pws->fd;
|
||||||
|
|
||||||
delete_async_op(pws);
|
cancel_async_select(pws);
|
||||||
pws->p_aop = NULL; pws->fd = -1;
|
pws->fd = -1;
|
||||||
pws->flags = (unsigned)pwsi->last_free;
|
pws->flags = (unsigned)pwsi->last_free;
|
||||||
pwsi->last_free = pws - &pwsi->sock[0];
|
pwsi->last_free = pws - &pwsi->sock[0];
|
||||||
if (close(fd) < 0) pwsi->errno = (errno == EBADF) ? WSAENOTSOCK : wsaErrno();
|
if (close(fd) == 0) return 0;
|
||||||
else return 0;
|
pwsi->errno = (errno == EBADF) ? WSAENOTSOCK : wsaErrno();
|
||||||
}
|
}
|
||||||
return SOCKET_ERROR;
|
return SOCKET_ERROR;
|
||||||
}
|
}
|
||||||
|
@ -579,18 +584,28 @@ u_short WINSOCK_ntohs(u_short netshort) { return( ntohs(netshort) ); }
|
||||||
|
|
||||||
SEGPTR WINSOCK_inet_ntoa(struct in_addr in)
|
SEGPTR WINSOCK_inet_ntoa(struct in_addr in)
|
||||||
{
|
{
|
||||||
|
/* use "buffer for dummies" here because some applications have
|
||||||
|
* propensity to decode addresses in ws_hostent structure without
|
||||||
|
* saving them first...
|
||||||
|
*/
|
||||||
|
|
||||||
LPWSINFO pwsi = wsi_find(GetCurrentTask());
|
LPWSINFO pwsi = wsi_find(GetCurrentTask());
|
||||||
char* s = inet_ntoa(in);
|
|
||||||
|
|
||||||
if( pwsi )
|
if( pwsi )
|
||||||
{
|
{
|
||||||
if( s == NULL ) { pwsi->errno = wsaErrno(); return NULL; }
|
char* s = inet_ntoa(in);
|
||||||
if( _check_buffer( pwsi, 32 ) )
|
if( s )
|
||||||
|
{
|
||||||
|
if( pwsi->dbuffer == NULL )
|
||||||
|
if((pwsi->dbuffer = (char*) SEGPTR_ALLOC(32)) == NULL )
|
||||||
{
|
{
|
||||||
strncpy(pwsi->buffer, s, 32 );
|
|
||||||
return SEGPTR_GET(pwsi->buffer);
|
|
||||||
}
|
|
||||||
pwsi->errno = WSAENOBUFS;
|
pwsi->errno = WSAENOBUFS;
|
||||||
|
return (SEGPTR)NULL;
|
||||||
|
}
|
||||||
|
strncpy(pwsi->dbuffer, s, 32 );
|
||||||
|
return SEGPTR_GET(pwsi->dbuffer);
|
||||||
|
}
|
||||||
|
pwsi->errno = wsaErrno();
|
||||||
}
|
}
|
||||||
return (SEGPTR)NULL;
|
return (SEGPTR)NULL;
|
||||||
}
|
}
|
||||||
|
@ -683,7 +698,8 @@ INT16 WINSOCK_recvfrom(SOCKET16 s, char *buf, INT16 len, INT16 flags,
|
||||||
if( _check_ws(pwsi, pws) )
|
if( _check_ws(pwsi, pws) )
|
||||||
{
|
{
|
||||||
int length, fromlen32 = *fromlen16;
|
int length, fromlen32 = *fromlen16;
|
||||||
if ((length = recvfrom(pws->fd, buf, len, flags, from, &fromlen32)) >= 0)
|
|
||||||
|
if ((length = recvfrom(pws->fd, buf, len, flags, from, &fromlen32)) >= 0 );
|
||||||
{
|
{
|
||||||
*fromlen16 = fromlen32;
|
*fromlen16 = fromlen32;
|
||||||
notify_client(pws, WS_FD_READ);
|
notify_client(pws, WS_FD_READ);
|
||||||
|
@ -807,8 +823,8 @@ INT16 WINSOCK_shutdown(SOCKET16 s, INT16 how)
|
||||||
(unsigned)pwsi, s, how );
|
(unsigned)pwsi, s, how );
|
||||||
if( _check_ws(pwsi, pws) )
|
if( _check_ws(pwsi, pws) )
|
||||||
{
|
{
|
||||||
pws->flags = WS_FD_INACTIVE;
|
pws->flags |= WS_FD_INACTIVE;
|
||||||
delete_async_op(pws);
|
cancel_async_select(pws);
|
||||||
|
|
||||||
if (shutdown(pws->fd, how) == 0) return 0;
|
if (shutdown(pws->fd, how) == 0) return 0;
|
||||||
pwsi->errno = wsaErrno();
|
pwsi->errno = wsaErrno();
|
||||||
|
@ -862,10 +878,9 @@ SOCKET16 WINSOCK_socket(INT16 af, INT16 type, INT16 protocol)
|
||||||
{
|
{
|
||||||
ws_socket* pnew = wsi_alloc_socket(pwsi, sock);
|
ws_socket* pnew = wsi_alloc_socket(pwsi, sock);
|
||||||
|
|
||||||
/* printf("created %04x (%i)\n", sock, (UINT16)WS_PTR2HANDLE(pnew));
|
dprintf_winsock(stddeb,"\tcreated %04x (handle %i)\n", sock, (UINT16)WS_PTR2HANDLE(pnew));
|
||||||
*/
|
|
||||||
if( pnew ) return (SOCKET16)WS_PTR2HANDLE(pnew);
|
if( pnew ) return (SOCKET16)WS_PTR2HANDLE(pnew);
|
||||||
else
|
|
||||||
{
|
{
|
||||||
close(sock);
|
close(sock);
|
||||||
pwsi->errno = WSAENOBUFS;
|
pwsi->errno = WSAENOBUFS;
|
||||||
|
@ -1044,7 +1059,7 @@ static int aop_control(ws_async_op* p_aop, int flag )
|
||||||
|
|
||||||
read(p_aop->fd[0], &lLength, sizeof(unsigned));
|
read(p_aop->fd[0], &lLength, sizeof(unsigned));
|
||||||
if( LOWORD(lLength) )
|
if( LOWORD(lLength) )
|
||||||
if( LOWORD(lLength) <= p_aop->buflen )
|
if( (int)LOWORD(lLength) <= p_aop->buflen )
|
||||||
{
|
{
|
||||||
char* buffer = (char*)PTR_SEG_TO_LIN(p_aop->buffer_base);
|
char* buffer = (char*)PTR_SEG_TO_LIN(p_aop->buffer_base);
|
||||||
read(p_aop->fd[0], buffer, LOWORD(lLength));
|
read(p_aop->fd[0], buffer, LOWORD(lLength));
|
||||||
|
@ -1089,7 +1104,7 @@ static HANDLE16 __WSAsyncDBQuery(LPWSINFO pwsi, HWND16 hWnd, UINT16 uMsg, LPCSTR
|
||||||
|
|
||||||
if( pipe(async_ctl.ws_aop->fd) == 0 )
|
if( pipe(async_ctl.ws_aop->fd) == 0 )
|
||||||
{
|
{
|
||||||
async_ctl.ws_aop->init = (char*)init;
|
async_ctl.init = (char*)init;
|
||||||
async_ctl.lLength = len;
|
async_ctl.lLength = len;
|
||||||
async_ctl.lEvent = type;
|
async_ctl.lEvent = type;
|
||||||
|
|
||||||
|
@ -1130,6 +1145,7 @@ static HANDLE16 __WSAsyncDBQuery(LPWSINFO pwsi, HWND16 hWnd, UINT16 uMsg, LPCSTR
|
||||||
case WSMSG_ASYNC_SERVBYNAME:
|
case WSMSG_ASYNC_SERVBYNAME:
|
||||||
WS_do_async_getserv(pwsi,flag);
|
WS_do_async_getserv(pwsi,flag);
|
||||||
}
|
}
|
||||||
|
_exit(0); /* skip atexit()'ed cleanup */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
WS_FREE(async_ctl.ws_aop);
|
WS_FREE(async_ctl.ws_aop);
|
||||||
|
@ -1241,7 +1257,7 @@ INT16 WSACancelAsyncRequest(HANDLE16 hAsyncTaskHandle)
|
||||||
if( WINSOCK_check_async_op(p_aop) )
|
if( WINSOCK_check_async_op(p_aop) )
|
||||||
{
|
{
|
||||||
kill(p_aop->pid, SIGKILL);
|
kill(p_aop->pid, SIGKILL);
|
||||||
waitpid(p_aop->pid, NULL, 0);
|
waitpid(p_aop->pid, NULL, 0); /* just in case */
|
||||||
close(p_aop->fd[0]);
|
close(p_aop->fd[0]);
|
||||||
WINSOCK_unlink_async_op(p_aop);
|
WINSOCK_unlink_async_op(p_aop);
|
||||||
WS_FREE(p_aop);
|
WS_FREE(p_aop);
|
||||||
|
@ -1253,14 +1269,15 @@ INT16 WSACancelAsyncRequest(HANDLE16 hAsyncTaskHandle)
|
||||||
|
|
||||||
/* ----- asynchronous select() */
|
/* ----- asynchronous select() */
|
||||||
|
|
||||||
int delete_async_op(ws_socket* pws)
|
int cancel_async_select(ws_socket* pws)
|
||||||
{
|
{
|
||||||
if( pws->p_aop )
|
if( pws->p_aop )
|
||||||
{
|
{
|
||||||
kill(pws->p_aop->pid, SIGKILL);
|
kill(pws->p_aop->pid, SIGKILL);
|
||||||
waitpid(pws->p_aop->pid, NULL, 0);
|
waitpid(pws->p_aop->pid, NULL, 0);
|
||||||
WS_FREE(pws->p_aop); return 1;
|
WS_FREE(pws->p_aop);
|
||||||
pws->flags &= WS_FD_INTERNAL;
|
pws->p_aop = NULL;
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1312,7 +1329,7 @@ int notify_client( ws_socket* pws, unsigned flag )
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
perror("AsyncSelect(parent)");
|
perror("AsyncSelect(parent)");
|
||||||
delete_async_op(pws);
|
cancel_async_select(pws);
|
||||||
pws->flags &= WS_FD_INTERNAL;
|
pws->flags &= WS_FD_INTERNAL;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
@ -1327,11 +1344,9 @@ INT16 init_async_select(ws_socket* pws, HWND16 hWnd, UINT16 uMsg, UINT32 lEvent)
|
||||||
{
|
{
|
||||||
ws_async_op* p_aop;
|
ws_async_op* p_aop;
|
||||||
|
|
||||||
if( delete_async_op(pws) ) /* delete old async handler if any */
|
if( cancel_async_select(pws) ) /* delete old async handler if any */
|
||||||
{
|
|
||||||
pws->p_aop = NULL;
|
|
||||||
pws->flags &= WS_FD_INTERNAL;
|
pws->flags &= WS_FD_INTERNAL;
|
||||||
}
|
|
||||||
if( lEvent == 0 ) return 0;
|
if( lEvent == 0 ) return 0;
|
||||||
|
|
||||||
/* setup async handler - some data may be redundant */
|
/* setup async handler - some data may be redundant */
|
||||||
|
@ -1529,6 +1544,7 @@ int WS_dup_he(LPWSINFO pwsi, struct hostent* p_he, int flag)
|
||||||
p_to->h_name = (SEGPTR)(p_base + (p_name - pwsi->buffer));
|
p_to->h_name = (SEGPTR)(p_base + (p_name - pwsi->buffer));
|
||||||
p_to->h_aliases = (SEGPTR)(p_base + (p_aliases - pwsi->buffer));
|
p_to->h_aliases = (SEGPTR)(p_base + (p_aliases - pwsi->buffer));
|
||||||
p_to->h_addr_list = (SEGPTR)(p_base + (p_addr - pwsi->buffer));
|
p_to->h_addr_list = (SEGPTR)(p_base + (p_addr - pwsi->buffer));
|
||||||
|
|
||||||
return (size + sizeof(struct ws_hostent) - sizeof(struct hostent)); }
|
return (size + sizeof(struct ws_hostent) - sizeof(struct hostent)); }
|
||||||
}
|
}
|
||||||
return size;
|
return size;
|
||||||
|
|
|
@ -21,7 +21,7 @@
|
||||||
|
|
||||||
#define __WS_ASYNC_DEBUG 0
|
#define __WS_ASYNC_DEBUG 0
|
||||||
|
|
||||||
static int _async_io_max_fd = 0;
|
static int __async_io_max_fd = 0;
|
||||||
static fd_set __async_io_fdset;
|
static fd_set __async_io_fdset;
|
||||||
static ws_async_op* __async_op_list = NULL;
|
static ws_async_op* __async_op_list = NULL;
|
||||||
|
|
||||||
|
@ -80,8 +80,8 @@ void WINSOCK_link_async_op(ws_async_op* p_aop)
|
||||||
__async_op_list = p_aop;
|
__async_op_list = p_aop;
|
||||||
|
|
||||||
FD_SET(p_aop->fd[0], &__async_io_fdset);
|
FD_SET(p_aop->fd[0], &__async_io_fdset);
|
||||||
if( p_aop->fd[0] > _async_io_max_fd )
|
if( p_aop->fd[0] > __async_io_max_fd )
|
||||||
_async_io_max_fd = p_aop->fd[0];
|
__async_io_max_fd = p_aop->fd[0];
|
||||||
}
|
}
|
||||||
|
|
||||||
void WINSOCK_unlink_async_op(ws_async_op* p_aop)
|
void WINSOCK_unlink_async_op(ws_async_op* p_aop)
|
||||||
|
@ -91,8 +91,8 @@ void WINSOCK_unlink_async_op(ws_async_op* p_aop)
|
||||||
{ p_aop->prev->next = p_aop->next;
|
{ p_aop->prev->next = p_aop->next;
|
||||||
if( p_aop->next ) p_aop->next->prev = p_aop->prev; }
|
if( p_aop->next ) p_aop->next->prev = p_aop->prev; }
|
||||||
FD_CLR(p_aop->fd[0], &__async_io_fdset);
|
FD_CLR(p_aop->fd[0], &__async_io_fdset);
|
||||||
if( p_aop->fd[0] == _async_io_max_fd )
|
if( p_aop->fd[0] == __async_io_max_fd )
|
||||||
_async_io_max_fd--;
|
__async_io_max_fd--;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* ----------------------------------- SIGIO handler -
|
/* ----------------------------------- SIGIO handler -
|
||||||
|
@ -112,7 +112,7 @@ void WINSOCK_sigio(int signal)
|
||||||
check_set = __async_io_fdset;
|
check_set = __async_io_fdset;
|
||||||
bzero(&timeout,sizeof(timeout));
|
bzero(&timeout,sizeof(timeout));
|
||||||
|
|
||||||
while( select(_async_io_max_fd + 1,
|
while( select(__async_io_max_fd + 1,
|
||||||
&check_set, NULL, NULL, &timeout) > 0)
|
&check_set, NULL, NULL, &timeout) > 0)
|
||||||
{
|
{
|
||||||
for( p_aop = __async_op_list;
|
for( p_aop = __async_op_list;
|
||||||
|
@ -123,7 +123,7 @@ void WINSOCK_sigio(int signal)
|
||||||
if( p_aop->pid )
|
if( p_aop->pid )
|
||||||
{
|
{
|
||||||
kill(p_aop->pid, SIGKILL);
|
kill(p_aop->pid, SIGKILL);
|
||||||
waitpid(p_aop->pid, NULL, 0);
|
waitpid(p_aop->pid, NULL, WNOHANG);
|
||||||
}
|
}
|
||||||
WINSOCK_unlink_async_op( p_aop );
|
WINSOCK_unlink_async_op( p_aop );
|
||||||
}
|
}
|
||||||
|
@ -188,7 +188,9 @@ static int notify_parent( unsigned flag )
|
||||||
MTYPE_CLIENT_SIZE, 0) == -1 )
|
MTYPE_CLIENT_SIZE, 0) == -1 )
|
||||||
{
|
{
|
||||||
if( errno == EINTR ) continue;
|
if( errno == EINTR ) continue;
|
||||||
|
#ifdef EIDRM
|
||||||
else if( errno == EIDRM ) _exit(0);
|
else if( errno == EIDRM ) _exit(0);
|
||||||
|
#endif
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
perror("AsyncSelect(child)");
|
perror("AsyncSelect(child)");
|
||||||
|
@ -240,8 +242,9 @@ static void setup_sig_sets(sigset_t* sig_block)
|
||||||
void WINSOCK_do_async_select()
|
void WINSOCK_do_async_select()
|
||||||
{
|
{
|
||||||
sigset_t sig_block;
|
sigset_t sig_block;
|
||||||
int bytes;
|
int sock_type, bytes;
|
||||||
|
|
||||||
|
getsockopt(async_ctl.ws_sock->fd, SOL_SOCKET, SO_TYPE, &sock_type, &bytes);
|
||||||
setup_sig_sets(&sig_block);
|
setup_sig_sets(&sig_block);
|
||||||
setup_fd_sets();
|
setup_fd_sets();
|
||||||
|
|
||||||
|
@ -249,6 +252,8 @@ void WINSOCK_do_async_select()
|
||||||
{
|
{
|
||||||
int val;
|
int val;
|
||||||
|
|
||||||
|
if( sock_type != SOCK_STREAM )
|
||||||
|
async_ctl.lEvent &= ~(WS_FD_ACCEPT | WS_FD_CONNECT);
|
||||||
sigprocmask( SIG_UNBLOCK, &sig_block, NULL);
|
sigprocmask( SIG_UNBLOCK, &sig_block, NULL);
|
||||||
|
|
||||||
#if __WS_ASYNC_DEBUG
|
#if __WS_ASYNC_DEBUG
|
||||||
|
@ -337,12 +342,21 @@ void WINSOCK_do_async_select()
|
||||||
if( async_ctl.lEvent & (WS_FD_READ | WS_FD_CLOSE) )
|
if( async_ctl.lEvent & (WS_FD_READ | WS_FD_CLOSE) )
|
||||||
if( FD_ISSET(async_ctl.ws_sock->fd, &fd_read) )
|
if( FD_ISSET(async_ctl.ws_sock->fd, &fd_read) )
|
||||||
{
|
{
|
||||||
if( ioctl( async_ctl.ws_sock->fd, FIONREAD, (char*)&bytes) != -1 )
|
int ok = 0;
|
||||||
|
|
||||||
|
if( sock_type == SOCK_RAW ) ok = 1;
|
||||||
|
else if( ioctl( async_ctl.ws_sock->fd, FIONREAD, (char*)&bytes) == -1 )
|
||||||
{
|
{
|
||||||
if( bytes ) /* got data */
|
async_ctl.ip.lParam = WSAMAKESELECTREPLY( WS_FD_READ, wsaErrno() );
|
||||||
|
FD_CLR( async_ctl.ws_sock->fd, &fd_read );
|
||||||
|
bytes = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( bytes || ok ) /* got data */
|
||||||
{
|
{
|
||||||
#if __WS_ASYNC_DEBUG
|
#if __WS_ASYNC_DEBUG
|
||||||
printf("\t%i bytes pending\n", bytes );
|
if( ok ) printf("\traw/datagram read pending\n");
|
||||||
|
else printf("\t%i bytes pending\n", bytes );
|
||||||
#endif
|
#endif
|
||||||
if( async_ctl.lEvent & WS_FD_READ )
|
if( async_ctl.lEvent & WS_FD_READ )
|
||||||
{
|
{
|
||||||
|
@ -380,8 +394,6 @@ void WINSOCK_do_async_select()
|
||||||
async_ctl.lEvent &= ~(WS_FD_CLOSE | WS_FD_READ); /* one-shot */
|
async_ctl.lEvent &= ~(WS_FD_CLOSE | WS_FD_READ); /* one-shot */
|
||||||
FD_ZERO(&fd_read); FD_ZERO(&fd_write);
|
FD_ZERO(&fd_read); FD_ZERO(&fd_write);
|
||||||
}
|
}
|
||||||
}
|
|
||||||
else async_ctl.ip.lParam = WSAMAKESELECTREPLY( WS_FD_READ, wsaErrno() );
|
|
||||||
|
|
||||||
notify_parent( WSMSG_ASYNC_SELECT );
|
notify_parent( WSMSG_ASYNC_SELECT );
|
||||||
}
|
}
|
||||||
|
@ -430,8 +442,8 @@ void WS_do_async_gethost(LPWSINFO pwsi, unsigned flag )
|
||||||
|
|
||||||
close(async_ctl.ws_aop->fd[0]);
|
close(async_ctl.ws_aop->fd[0]);
|
||||||
p_he = (flag & WSMSG_ASYNC_HOSTBYNAME)
|
p_he = (flag & WSMSG_ASYNC_HOSTBYNAME)
|
||||||
? gethostbyname(async_ctl.ws_aop->init)
|
? gethostbyname(async_ctl.init)
|
||||||
: gethostbyaddr(async_ctl.ws_aop->init,
|
: gethostbyaddr(async_ctl.init,
|
||||||
async_ctl.lLength, async_ctl.lEvent);
|
async_ctl.lLength, async_ctl.lEvent);
|
||||||
if( p_he ) size = WS_dup_he(pwsi, p_he, WS_DUP_SEGPTR | WS_DUP_OFFSET );
|
if( p_he ) size = WS_dup_he(pwsi, p_he, WS_DUP_SEGPTR | WS_DUP_OFFSET );
|
||||||
if( size )
|
if( size )
|
||||||
|
@ -441,7 +453,6 @@ void WS_do_async_gethost(LPWSINFO pwsi, unsigned flag )
|
||||||
notify_parent( flag );
|
notify_parent( flag );
|
||||||
}
|
}
|
||||||
else _async_fail();
|
else _async_fail();
|
||||||
_exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS_do_async_getproto(LPWSINFO pwsi, unsigned flag )
|
void WS_do_async_getproto(LPWSINFO pwsi, unsigned flag )
|
||||||
|
@ -451,7 +462,7 @@ void WS_do_async_getproto(LPWSINFO pwsi, unsigned flag )
|
||||||
|
|
||||||
close(async_ctl.ws_aop->fd[0]);
|
close(async_ctl.ws_aop->fd[0]);
|
||||||
p_pe = (flag & WSMSG_ASYNC_PROTOBYNAME)
|
p_pe = (flag & WSMSG_ASYNC_PROTOBYNAME)
|
||||||
? getprotobyname(async_ctl.ws_aop->init)
|
? getprotobyname(async_ctl.init)
|
||||||
: getprotobynumber(async_ctl.lEvent);
|
: getprotobynumber(async_ctl.lEvent);
|
||||||
if( p_pe ) size = WS_dup_pe(pwsi, p_pe, WS_DUP_SEGPTR | WS_DUP_OFFSET );
|
if( p_pe ) size = WS_dup_pe(pwsi, p_pe, WS_DUP_SEGPTR | WS_DUP_OFFSET );
|
||||||
if( size )
|
if( size )
|
||||||
|
@ -461,7 +472,6 @@ void WS_do_async_getproto(LPWSINFO pwsi, unsigned flag )
|
||||||
notify_parent( flag );
|
notify_parent( flag );
|
||||||
}
|
}
|
||||||
else _async_fail();
|
else _async_fail();
|
||||||
_exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void WS_do_async_getserv(LPWSINFO pwsi, unsigned flag )
|
void WS_do_async_getserv(LPWSINFO pwsi, unsigned flag )
|
||||||
|
@ -471,8 +481,8 @@ void WS_do_async_getserv(LPWSINFO pwsi, unsigned flag )
|
||||||
|
|
||||||
close(async_ctl.ws_aop->fd[0]);
|
close(async_ctl.ws_aop->fd[0]);
|
||||||
p_se = (flag & WSMSG_ASYNC_SERVBYNAME)
|
p_se = (flag & WSMSG_ASYNC_SERVBYNAME)
|
||||||
? getservbyname(async_ctl.ws_aop->init, async_ctl.buffer)
|
? getservbyname(async_ctl.init, async_ctl.buffer)
|
||||||
: getservbyport(async_ctl.lEvent, async_ctl.ws_aop->init);
|
: getservbyport(async_ctl.lEvent, async_ctl.init);
|
||||||
if( p_se ) size = WS_dup_se(pwsi, p_se, WS_DUP_SEGPTR | WS_DUP_OFFSET );
|
if( p_se ) size = WS_dup_se(pwsi, p_se, WS_DUP_SEGPTR | WS_DUP_OFFSET );
|
||||||
if( size )
|
if( size )
|
||||||
{
|
{
|
||||||
|
@ -481,6 +491,5 @@ void WS_do_async_getserv(LPWSINFO pwsi, unsigned flag )
|
||||||
notify_parent( flag );
|
notify_parent( flag );
|
||||||
}
|
}
|
||||||
else _async_fail();
|
else _async_fail();
|
||||||
_exit(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -14,6 +14,7 @@
|
||||||
#include "miscemu.h"
|
#include "miscemu.h"
|
||||||
#include "drive.h"
|
#include "drive.h"
|
||||||
#include "msdos.h"
|
#include "msdos.h"
|
||||||
|
#include "toolhelp.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
@ -366,11 +367,18 @@ void INT_Int31Handler( SIGCONTEXT *context )
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 0x0500: /* Get free memory information */
|
case 0x0500: /* Get free memory information */
|
||||||
ptr = (BYTE *)PTR_SEG_OFF_TO_LIN( ES_reg(context), DI_reg(context) );
|
{
|
||||||
*(DWORD *)ptr = 0x00ff0000; /* Largest block available */
|
MEMMANINFO mmi;
|
||||||
memset( ptr + 4, 0xff, 0x2c ); /* No other information supported */
|
|
||||||
break;
|
|
||||||
|
|
||||||
|
mmi.dwSize = sizeof(mmi);
|
||||||
|
MemManInfo(&mmi);
|
||||||
|
ptr = (BYTE *)PTR_SEG_OFF_TO_LIN(ES_reg(context),DI_reg(context));
|
||||||
|
/* the layout is just the same as MEMMANINFO, but without
|
||||||
|
* the dwSize entry.
|
||||||
|
*/
|
||||||
|
memcpy(ptr,((char*)&mmi)+4,sizeof(mmi)-4);
|
||||||
|
break;
|
||||||
|
}
|
||||||
case 0x0501: /* Allocate memory block */
|
case 0x0501: /* Allocate memory block */
|
||||||
if (!(ptr = (BYTE *)HeapAlloc( SystemHeap, 0,MAKELONG( CX_reg(context),
|
if (!(ptr = (BYTE *)HeapAlloc( SystemHeap, 0,MAKELONG( CX_reg(context),
|
||||||
BX_reg(context) ))))
|
BX_reg(context) ))))
|
||||||
|
|
|
@ -1603,7 +1603,7 @@ LONG WAVE_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
|
||||||
case DRV_QUERYCONFIGURE:
|
case DRV_QUERYCONFIGURE:
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_CONFIGURE:
|
case DRV_CONFIGURE:
|
||||||
MessageBox((HWND)NULL, "Sample MultiMedia Linux Driver !",
|
MessageBox16((HWND)NULL, "Sample MultiMedia Linux Driver !",
|
||||||
"MMLinux Driver", MB_OK);
|
"MMLinux Driver", MB_OK);
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_INSTALL:
|
case DRV_INSTALL:
|
||||||
|
|
|
@ -631,7 +631,7 @@ LONG ANIM_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
|
||||||
case DRV_QUERYCONFIGURE:
|
case DRV_QUERYCONFIGURE:
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_CONFIGURE:
|
case DRV_CONFIGURE:
|
||||||
MessageBox((HWND)NULL, "Sample MultiMedia Linux Driver !",
|
MessageBox16((HWND)NULL, "Sample MultiMedia Linux Driver !",
|
||||||
"MMLinux Driver", MB_OK);
|
"MMLinux Driver", MB_OK);
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_INSTALL:
|
case DRV_INSTALL:
|
||||||
|
|
|
@ -1047,7 +1047,7 @@ LONG CDAUDIO_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
|
||||||
case DRV_QUERYCONFIGURE:
|
case DRV_QUERYCONFIGURE:
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_CONFIGURE:
|
case DRV_CONFIGURE:
|
||||||
MessageBox((HWND)NULL, "Sample MultiMedia Linux Driver !",
|
MessageBox16((HWND)NULL, "Sample MultiMedia Linux Driver !",
|
||||||
"MMLinux Driver", MB_OK);
|
"MMLinux Driver", MB_OK);
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_INSTALL:
|
case DRV_INSTALL:
|
||||||
|
|
|
@ -1289,7 +1289,7 @@ LONG MIDI_DriverProc(DWORD dwDevID, HDRVR16 hDriv, WORD wMsg,
|
||||||
case DRV_QUERYCONFIGURE:
|
case DRV_QUERYCONFIGURE:
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_CONFIGURE:
|
case DRV_CONFIGURE:
|
||||||
MessageBox(0, "Sample Midi Linux Driver !",
|
MessageBox16(0, "Sample Midi Linux Driver !",
|
||||||
"MMLinux Driver", MB_OK);
|
"MMLinux Driver", MB_OK);
|
||||||
return 1;
|
return 1;
|
||||||
case DRV_INSTALL:
|
case DRV_INSTALL:
|
||||||
|
|
|
@ -17,6 +17,12 @@
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
#ifdef PRELIMINARY_WING16_SUPPORT
|
||||||
|
#include <sys/types.h>
|
||||||
|
#include <sys/ipc.h>
|
||||||
|
#include <sys/shm.h>
|
||||||
|
#endif
|
||||||
|
|
||||||
/* GCs used for B&W and color bitmap operations */
|
/* GCs used for B&W and color bitmap operations */
|
||||||
GC BITMAP_monoGC = 0, BITMAP_colorGC = 0;
|
GC BITMAP_monoGC = 0, BITMAP_colorGC = 0;
|
||||||
|
|
||||||
|
@ -378,9 +384,27 @@ HBITMAP32 LoadBitmap32A( HINSTANCE32 instance, LPCSTR name )
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* BITMAP_DeleteObject
|
* BITMAP_DeleteObject
|
||||||
*/
|
*/
|
||||||
BOOL32 BITMAP_DeleteObject( HBITMAP16 hbitmap, BITMAPOBJ * bitmap )
|
BOOL32 BITMAP_DeleteObject( HBITMAP16 hbitmap, BITMAPOBJ * bmp )
|
||||||
{
|
{
|
||||||
XFreePixmap( display, bitmap->pixmap );
|
#ifdef PRELIMINARY_WING16_SUPPORT
|
||||||
|
if( bmp->bitmap.bmBits )
|
||||||
|
XShmDetach( display, (XShmSegmentInfo*)bmp->bitmap.bmBits );
|
||||||
|
#endif
|
||||||
|
|
||||||
|
XFreePixmap( display, bmp->pixmap );
|
||||||
|
#ifdef PRELIMINARY_WING16_SUPPORT
|
||||||
|
if( bmp->bitmap.bmBits )
|
||||||
|
{
|
||||||
|
__ShmBitmapCtl* p = (__ShmBitmapCtl*)bmp->bitmap.bmBits;
|
||||||
|
WORD sel = HIWORD(p->bits);
|
||||||
|
unsigned long l, limit = GetSelectorLimit(sel);
|
||||||
|
|
||||||
|
for( l = 0; l < limit; l += 0x10000, sel += __AHINCR )
|
||||||
|
FreeSelector(sel);
|
||||||
|
shmctl(p->si.shmid, IPC_RMID, NULL);
|
||||||
|
shmdt(p->si.shmaddr); /* already marked for destruction */
|
||||||
|
}
|
||||||
|
#endif
|
||||||
return GDI_FreeObject( hbitmap );
|
return GDI_FreeObject( hbitmap );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
40
objects/dc.c
40
objects/dc.c
|
@ -15,6 +15,7 @@
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
|
#include "string32.h"
|
||||||
|
|
||||||
extern void CLIPPING_UpdateGCRegion( DC * dc ); /* objects/clipping.c */
|
extern void CLIPPING_UpdateGCRegion( DC * dc ); /* objects/clipping.c */
|
||||||
|
|
||||||
|
@ -512,9 +513,10 @@ BOOL RestoreDC( HDC16 hdc, short level )
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CreateDC (GDI.53)
|
* CreateDC16 (GDI.53)
|
||||||
*/
|
*/
|
||||||
HDC16 CreateDC( LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODE* initData )
|
HDC16 CreateDC16( LPCSTR driver, LPCSTR device, LPCSTR output,
|
||||||
|
const DEVMODE16 *initData )
|
||||||
{
|
{
|
||||||
DC * dc;
|
DC * dc;
|
||||||
const DC_FUNCTIONS *funcs;
|
const DC_FUNCTIONS *funcs;
|
||||||
|
@ -539,13 +541,43 @@ HDC16 CreateDC( LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODE* init
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* CreateDC32A (GDI32.)
|
||||||
|
*/
|
||||||
|
HDC32 CreateDC32A( LPCSTR driver, LPCSTR device, LPCSTR output,
|
||||||
|
const DEVMODE32A *initData )
|
||||||
|
{
|
||||||
|
return CreateDC16( driver, device, output, (const DEVMODE16 *)initData );
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* CreateDC32W (GDI32.)
|
||||||
|
*/
|
||||||
|
HDC32 CreateDC32W( LPCWSTR driver, LPCWSTR device, LPCWSTR output,
|
||||||
|
const DEVMODE32W *initData )
|
||||||
|
{
|
||||||
|
LPSTR driverA = driver?STRING32_DupUniToAnsi(driver):NULL;
|
||||||
|
LPSTR deviceA = device?STRING32_DupUniToAnsi(device):NULL;
|
||||||
|
LPSTR outputA = output?STRING32_DupUniToAnsi(output):NULL;
|
||||||
|
HDC32 res;
|
||||||
|
|
||||||
|
res = CreateDC16( driverA, deviceA, outputA, (const DEVMODE16 *)initData );
|
||||||
|
if (driverA) free(driverA);
|
||||||
|
if (deviceA) free(deviceA);
|
||||||
|
if (outputA) free(outputA);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* CreateIC (GDI.153)
|
* CreateIC (GDI.153)
|
||||||
*/
|
*/
|
||||||
HDC16 CreateIC( LPCSTR driver, LPCSTR device, LPCSTR output, const DEVMODE* initData )
|
HDC16 CreateIC( LPCSTR driver, LPCSTR device, LPCSTR output,
|
||||||
|
const DEVMODE16* initData )
|
||||||
{
|
{
|
||||||
/* Nothing special yet for ICs */
|
/* Nothing special yet for ICs */
|
||||||
return CreateDC( driver, device, output, initData );
|
return CreateDC16( driver, device, output, initData );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -686,7 +686,8 @@ INT16 SetDIBits( HDC32 hdc, HBITMAP32 hbitmap, UINT32 startscan, UINT32 lines,
|
||||||
dc, lines, bmp->bitmap.bmBitsPixel,
|
dc, lines, bmp->bitmap.bmBitsPixel,
|
||||||
bits, width, bpp, info,
|
bits, width, bpp, info,
|
||||||
coloruse, bmp->pixmap, BITMAP_GC(bmp), 0, 0, 0,
|
coloruse, bmp->pixmap, BITMAP_GC(bmp), 0, 0, 0,
|
||||||
startscan, bmp->bitmap.bmWidth, lines );
|
height - startscan - lines,
|
||||||
|
bmp->bitmap.bmWidth, lines );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -799,11 +799,18 @@ short SetTextJustification( HDC16 hdc, short extra, short breaks )
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetTextFace16 (GDI.92)
|
||||||
|
*/
|
||||||
|
INT16 GetTextFace16( HDC16 hdc, INT16 count, LPSTR name )
|
||||||
|
{
|
||||||
|
return GetTextFace32A(hdc,count,name);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetTextFace (GDI.92)
|
* GetTextFace32A (GDI32.234)
|
||||||
*/
|
*/
|
||||||
INT GetTextFace( HDC16 hdc, INT count, LPSTR name )
|
INT32 GetTextFace32A( HDC32 hdc, INT32 count, LPSTR name )
|
||||||
{
|
{
|
||||||
FONTOBJ *font;
|
FONTOBJ *font;
|
||||||
|
|
||||||
|
@ -815,6 +822,19 @@ INT GetTextFace( HDC16 hdc, INT count, LPSTR name )
|
||||||
return strlen(name);
|
return strlen(name);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetTextFace32W (GDI32.235)
|
||||||
|
*/
|
||||||
|
INT32 GetTextFace32W( HDC32 hdc, INT32 count, LPWSTR name )
|
||||||
|
{
|
||||||
|
LPSTR nameA = (LPSTR)xmalloc(count);
|
||||||
|
INT32 res = GetTextFace32A(hdc,count,nameA);
|
||||||
|
|
||||||
|
lstrcpynAtoW(name,nameA,count);
|
||||||
|
free(nameA);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetTextExtent (GDI.91)
|
* GetTextExtent (GDI.91)
|
||||||
|
@ -884,7 +904,7 @@ BOOL32 GetTextExtentPoint32W( HDC32 hdc, LPCWSTR str, INT32 count,
|
||||||
BOOL32 GetTextExtentPoint32ABuggy( HDC32 hdc, LPCSTR str, INT32 count,
|
BOOL32 GetTextExtentPoint32ABuggy( HDC32 hdc, LPCSTR str, INT32 count,
|
||||||
LPSIZE32 size )
|
LPSIZE32 size )
|
||||||
{
|
{
|
||||||
fprintf( stderr, "GetTextExtentPoint32ABuggy: not bug compatible.\n" );
|
dprintf_font( stddeb, "GetTextExtentPoint32ABuggy: not bug compatible.\n");
|
||||||
return GetTextExtentPoint32A( hdc, str, count, size );
|
return GetTextExtentPoint32A( hdc, str, count, size );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -894,11 +914,66 @@ BOOL32 GetTextExtentPoint32ABuggy( HDC32 hdc, LPCSTR str, INT32 count,
|
||||||
BOOL32 GetTextExtentPoint32WBuggy( HDC32 hdc, LPCWSTR str, INT32 count,
|
BOOL32 GetTextExtentPoint32WBuggy( HDC32 hdc, LPCWSTR str, INT32 count,
|
||||||
LPSIZE32 size )
|
LPSIZE32 size )
|
||||||
{
|
{
|
||||||
fprintf( stderr, "GetTextExtentPoint32WBuggy: not bug compatible.\n" );
|
dprintf_font( stddeb, "GetTextExtentPoint32WBuggy: not bug compatible.\n");
|
||||||
return GetTextExtentPoint32W( hdc, str, count, size );
|
return GetTextExtentPoint32W( hdc, str, count, size );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetTextExtentExPoint32A (GDI32.228)
|
||||||
|
*/
|
||||||
|
BOOL32 GetTextExtentExPoint32A( HDC32 hdc, LPCSTR str, INT32 count,
|
||||||
|
INT32 maxExt,LPINT32 lpnFit, LPINT32 alpDx,
|
||||||
|
LPSIZE32 size )
|
||||||
|
{
|
||||||
|
int index;
|
||||||
|
SIZE32 tSize;
|
||||||
|
int nFit=0;
|
||||||
|
int extent=0;
|
||||||
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||||
|
if (!dc)
|
||||||
|
{
|
||||||
|
if (!(dc = (DC *)GDI_GetObjPtr( hdc, METAFILE_DC_MAGIC )))
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
if (!dc->funcs->pGetTextExtentPoint) return FALSE;
|
||||||
|
|
||||||
|
size->cx=0; size->cy=0;
|
||||||
|
for(index=0;index<count;index++)
|
||||||
|
{
|
||||||
|
if(!dc->funcs->pGetTextExtentPoint( dc, str, 1, &tSize )) return FALSE;
|
||||||
|
if(extent+tSize.cx<maxExt)
|
||||||
|
{
|
||||||
|
extent+=tSize.cx;
|
||||||
|
nFit++;
|
||||||
|
str++;
|
||||||
|
if(alpDx) alpDx[index]=extent;
|
||||||
|
if(tSize.cy > size->cy) size->cy=tSize.cy;
|
||||||
|
}
|
||||||
|
else break;
|
||||||
|
}
|
||||||
|
size->cx=extent;
|
||||||
|
*lpnFit=nFit;
|
||||||
|
dprintf_font(stddeb,"GetTextExtentExPoint32A(%08x '%.*s' %d) returning %d %d %d\n",
|
||||||
|
hdc,count,str,maxExt,nFit, size->cx,size->cy);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetTextExtentExPoint32W (GDI32.229)
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL32 GetTextExtentExPoint32W( HDC32 hdc, LPCWSTR str, INT32 count,
|
||||||
|
INT32 maxExt, LPINT32 lpnFit, LPINT32 alpDx,
|
||||||
|
LPSIZE32 size )
|
||||||
|
{
|
||||||
|
char *p = STRING32_DupUniToAnsi( str );
|
||||||
|
BOOL32 ret = GetTextExtentExPoint32A( hdc, p, count, maxExt,
|
||||||
|
lpnFit, alpDx, size);
|
||||||
|
free( p );
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetTextMetrics16 (GDI.93)
|
* GetTextMetrics16 (GDI.93)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -172,6 +172,14 @@ static HLOCAL GRPFILE_ScanGroup(LPCSTR buffer, INT size,
|
||||||
if (lpszName >= buffer + size) return(0);
|
if (lpszName >= buffer + size) return(0);
|
||||||
|
|
||||||
/* unknown bytes 24 - 31 ignored */
|
/* unknown bytes 24 - 31 ignored */
|
||||||
|
/*
|
||||||
|
Unknown bytes should be:
|
||||||
|
wLogPixelsX = GET_SHORT(buffer, 24);
|
||||||
|
wLogPixelsY = GET_SHORT(buffer, 26);
|
||||||
|
byBitsPerPixel = byte at 28;
|
||||||
|
byPlanes = byte at 29;
|
||||||
|
wReserved = GET_SHORT(buffer, 30);
|
||||||
|
*/
|
||||||
|
|
||||||
hGroup = GROUP_AddGroup(lpszName, lpszGrpFile, nCmdShow, x, y,
|
hGroup = GROUP_AddGroup(lpszName, lpszGrpFile, nCmdShow, x, y,
|
||||||
width, height, iconx, icony,
|
width, height, iconx, icony,
|
||||||
|
|
|
@ -144,7 +144,7 @@ UpdateWindow|UW yylval = MACRO_UpdateWindow; return VOID_FUNCTION_2STRING;
|
||||||
{
|
{
|
||||||
BEGIN INITIAL;
|
BEGIN INITIAL;
|
||||||
*strptr++ = '\0';
|
*strptr++ = '\0';
|
||||||
return STRING;
|
return tSTRING;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -44,7 +44,7 @@ static LPSTR windowname;
|
||||||
%token NOT
|
%token NOT
|
||||||
%token IF_THEN
|
%token IF_THEN
|
||||||
%token IF_THEN_ELSE
|
%token IF_THEN_ELSE
|
||||||
%token <string> STRING
|
%token <string> tSTRING
|
||||||
%token <integer> INTEGER
|
%token <integer> INTEGER
|
||||||
%token <bool_function_string> BOOL_FUNCTION_STRING
|
%token <bool_function_string> BOOL_FUNCTION_STRING
|
||||||
%token <bool_function_void> BOOL_FUNCTION_VOID
|
%token <bool_function_void> BOOL_FUNCTION_VOID
|
||||||
|
@ -91,49 +91,49 @@ macro: /* Empty */ |
|
||||||
'(' ')'
|
'(' ')'
|
||||||
{if (! skip) (*$1)();} |
|
{if (! skip) (*$1)();} |
|
||||||
VOID_FUNCTION_STRING
|
VOID_FUNCTION_STRING
|
||||||
'(' STRING ')'
|
'(' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3);} |
|
{if (! skip) (*$1)($3);} |
|
||||||
VOID_FUNCTION_2STRING
|
VOID_FUNCTION_2STRING
|
||||||
'(' STRING ',' STRING ')'
|
'(' tSTRING ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5);} |
|
{if (! skip) (*$1)($3, $5);} |
|
||||||
VOID_FUNCTION_2STRING_UINT
|
VOID_FUNCTION_2STRING_UINT
|
||||||
'(' STRING ',' STRING ',' INTEGER ')'
|
'(' tSTRING ',' tSTRING ',' INTEGER ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7);} |
|
{if (! skip) (*$1)($3, $5, $7);} |
|
||||||
VOID_FUNCTION_2STRING_UINT_STRING
|
VOID_FUNCTION_2STRING_UINT_STRING
|
||||||
'(' STRING ',' STRING ',' INTEGER ',' STRING ')'
|
'(' tSTRING ',' tSTRING ',' INTEGER ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9);} |
|
{if (! skip) (*$1)($3, $5, $7, $9);} |
|
||||||
VOID_FUNCTION_2STRING_2UINT_2STRING
|
VOID_FUNCTION_2STRING_2UINT_2STRING
|
||||||
'(' STRING ',' STRING ',' INTEGER ',' INTEGER ',' STRING ',' STRING ')'
|
'(' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER ',' tSTRING ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} |
|
{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} |
|
||||||
VOID_FUNCTION_2STRING_WPARAM_LPARAM_STRING
|
VOID_FUNCTION_2STRING_WPARAM_LPARAM_STRING
|
||||||
'(' STRING ',' STRING ',' INTEGER ',' INTEGER ',' STRING ')'
|
'(' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9, $11);} |
|
{if (! skip) (*$1)($3, $5, $7, $9, $11);} |
|
||||||
VOID_FUNCTION_3STRING
|
VOID_FUNCTION_3STRING
|
||||||
'(' STRING ',' STRING ',' STRING ')'
|
'(' tSTRING ',' tSTRING ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7);} |
|
{if (! skip) (*$1)($3, $5, $7);} |
|
||||||
VOID_FUNCTION_3STRING_2UINT
|
VOID_FUNCTION_3STRING_2UINT
|
||||||
'(' STRING ',' STRING ',' STRING ',' INTEGER ',' INTEGER ')'
|
'(' tSTRING ',' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9, $11);} |
|
{if (! skip) (*$1)($3, $5, $7, $9, $11);} |
|
||||||
VOID_FUNCTION_4STRING
|
VOID_FUNCTION_4STRING
|
||||||
'(' STRING ',' STRING ',' STRING ',' STRING ')'
|
'(' tSTRING ',' tSTRING ',' tSTRING ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9);} |
|
{if (! skip) (*$1)($3, $5, $7, $9);} |
|
||||||
VOID_FUNCTION_4STRING_UINT
|
VOID_FUNCTION_4STRING_UINT
|
||||||
'(' STRING ',' STRING ',' STRING ',' STRING ',' INTEGER')'
|
'(' tSTRING ',' tSTRING ',' tSTRING ',' tSTRING ',' INTEGER')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9, $11);} |
|
{if (! skip) (*$1)($3, $5, $7, $9, $11);} |
|
||||||
VOID_FUNCTION_4STRING_2UINT
|
VOID_FUNCTION_4STRING_2UINT
|
||||||
'(' STRING ',' STRING ',' STRING ',' STRING ',' INTEGER ',' INTEGER')'
|
'(' tSTRING ',' tSTRING ',' tSTRING ',' tSTRING ',' INTEGER ',' INTEGER')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} |
|
{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} |
|
||||||
VOID_FUNCTION_STRING_UINT
|
VOID_FUNCTION_STRING_UINT
|
||||||
'(' STRING ',' INTEGER ')'
|
'(' tSTRING ',' INTEGER ')'
|
||||||
{if (! skip) (*$1)($3, $5);} |
|
{if (! skip) (*$1)($3, $5);} |
|
||||||
VOID_FUNCTION_STRING_UINT_STRING
|
VOID_FUNCTION_STRING_UINT_STRING
|
||||||
'(' STRING ',' INTEGER ',' STRING ')'
|
'(' tSTRING ',' INTEGER ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7);} |
|
{if (! skip) (*$1)($3, $5, $7);} |
|
||||||
VOID_FUNCTION_STRING_UINT_2STRING
|
VOID_FUNCTION_STRING_UINT_2STRING
|
||||||
'(' STRING ',' INTEGER ',' STRING ',' STRING ')'
|
'(' tSTRING ',' INTEGER ',' tSTRING ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9);} |
|
{if (! skip) (*$1)($3, $5, $7, $9);} |
|
||||||
VOID_FUNCTION_STRING_WPARAM_LPARAM
|
VOID_FUNCTION_STRING_WPARAM_LPARAM
|
||||||
'(' STRING ',' INTEGER ',' INTEGER ')'
|
'(' tSTRING ',' INTEGER ',' INTEGER ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7);} |
|
{if (! skip) (*$1)($3, $5, $7);} |
|
||||||
VOID_FUNCTION_UINT
|
VOID_FUNCTION_UINT
|
||||||
'(' INTEGER ')'
|
'(' INTEGER ')'
|
||||||
|
@ -142,25 +142,25 @@ macro: /* Empty */ |
|
||||||
'(' INTEGER ',' INTEGER ')'
|
'(' INTEGER ',' INTEGER ')'
|
||||||
{if (! skip) (*$1)($3, $5);} |
|
{if (! skip) (*$1)($3, $5);} |
|
||||||
VOID_FUNCTION_2UINT_STRING
|
VOID_FUNCTION_2UINT_STRING
|
||||||
'(' INTEGER ',' INTEGER ',' STRING ')'
|
'(' INTEGER ',' INTEGER ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7);} |
|
{if (! skip) (*$1)($3, $5, $7);} |
|
||||||
VOID_FUNCTION_3UINT
|
VOID_FUNCTION_3UINT
|
||||||
'(' INTEGER ',' INTEGER ',' INTEGER ')'
|
'(' INTEGER ',' INTEGER ',' INTEGER ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7);} |
|
{if (! skip) (*$1)($3, $5, $7);} |
|
||||||
VOID_FUNCTION_2INT_3UINT_STRING
|
VOID_FUNCTION_2INT_3UINT_STRING
|
||||||
'(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ',' STRING ')'
|
'(' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ',' INTEGER ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} |
|
{if (! skip) (*$1)($3, $5, $7, $9, $11, $13);} |
|
||||||
VOID_FUNCTION_FILE_WIN
|
VOID_FUNCTION_FILE_WIN
|
||||||
'(' file_win ')'
|
'(' file_win ')'
|
||||||
{if (! skip) (*$1)(filename, windowname);} |
|
{if (! skip) (*$1)(filename, windowname);} |
|
||||||
VOID_FUNCTION_FILE_WIN_STRING
|
VOID_FUNCTION_FILE_WIN_STRING
|
||||||
'(' file_win ',' STRING ')'
|
'(' file_win ',' tSTRING ')'
|
||||||
{if (! skip) (*$1)(filename, windowname, $5);} |
|
{if (! skip) (*$1)(filename, windowname, $5);} |
|
||||||
VOID_FUNCTION_FILE_WIN_UINT
|
VOID_FUNCTION_FILE_WIN_UINT
|
||||||
'(' file_win ',' INTEGER ')'
|
'(' file_win ',' INTEGER ')'
|
||||||
{if (! skip) (*$1)(filename, windowname, $5);} ;
|
{if (! skip) (*$1)(filename, windowname, $5);} ;
|
||||||
|
|
||||||
file_win: STRING
|
file_win: tSTRING
|
||||||
{
|
{
|
||||||
filename = windowname = $1;
|
filename = windowname = $1;
|
||||||
while (*windowname && *windowname != '>') windowname++;
|
while (*windowname && *windowname != '>') windowname++;
|
||||||
|
@ -168,6 +168,6 @@ file_win: STRING
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
bool_macro: NOT '(' bool_macro ')' {$$ = ! $3;} |
|
bool_macro: NOT '(' bool_macro ')' {$$ = ! $3;} |
|
||||||
STRING {$$ = MACRO_IsMark($1);} |
|
tSTRING {$$ = MACRO_IsMark($1);} |
|
||||||
BOOL_FUNCTION_VOID '(' ')' {$$ = (*$1)();} |
|
BOOL_FUNCTION_VOID '(' ')' {$$ = (*$1)();} |
|
||||||
BOOL_FUNCTION_STRING '(' STRING ')' {$$ = (*$1)($3);} ;
|
BOOL_FUNCTION_STRING '(' tSTRING ')' {$$ = (*$1)($3);} ;
|
||||||
|
|
|
@ -62,7 +62,7 @@ RTEXT return RTEXT;
|
||||||
SCROLLBAR return SCROLLBAR;
|
SCROLLBAR return SCROLLBAR;
|
||||||
SHIFT return SHIFT;
|
SHIFT return SHIFT;
|
||||||
SEPARATOR return SEPARATOR;
|
SEPARATOR return SEPARATOR;
|
||||||
STRING return STRING;
|
STRING return tSTRING;
|
||||||
STRINGTABLE return STRINGTABLE;
|
STRINGTABLE return STRINGTABLE;
|
||||||
STYLE return STYLE;
|
STYLE return STYLE;
|
||||||
VERSIONINFO return VERSIONINFO;
|
VERSIONINFO return VERSIONINFO;
|
||||||
|
@ -72,7 +72,7 @@ VIRTKEY return VIRTKEY;
|
||||||
[+-]?[0-9]+ yylval.num=atoi(yytext);return NUMBER;
|
[+-]?[0-9]+ yylval.num=atoi(yytext);return NUMBER;
|
||||||
0x[0-9A-Fa-f]+L? yylval.num=strtoul(yytext,0,16);return NUMBER;
|
0x[0-9A-Fa-f]+L? yylval.num=strtoul(yytext,0,16);return NUMBER;
|
||||||
[A-Za-z][A-Za-z_0-9]* yylval.str=strdup(yytext);return IDENT;
|
[A-Za-z][A-Za-z_0-9]* yylval.str=strdup(yytext);return IDENT;
|
||||||
\"[^"]*\" yylval.str=parse_c_string(yytext);return STRING;
|
\"[^"]*\" yylval.str=parse_c_string(yytext);return tSTRING;
|
||||||
\'[^']*\' yylval.str=strdup(yytext+1);return SINGLE_QUOTED;
|
\'[^']*\' yylval.str=strdup(yytext+1);return SINGLE_QUOTED;
|
||||||
\n { line_number++; }
|
\n { line_number++; }
|
||||||
[ \t\r] ;
|
[ \t\r] ;
|
||||||
|
|
34
rc/parser.y
34
rc/parser.y
|
@ -20,14 +20,14 @@ int yyerror(const char *s);
|
||||||
struct rc_style *style;
|
struct rc_style *style;
|
||||||
}
|
}
|
||||||
%token <num> NUMBER
|
%token <num> NUMBER
|
||||||
%token <str> STRING SINGLE_QUOTED IDENT
|
%token <str> tSTRING SINGLE_QUOTED IDENT
|
||||||
%token ACCELERATORS ALT ASCII tBEGIN tBITMAP CAPTION CHECKBOX CHECKED
|
%token ACCELERATORS ALT ASCII tBEGIN tBITMAP CAPTION CHECKBOX CHECKED
|
||||||
%token CLASS COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG
|
%token CLASS COMBOBOX CONTROL CTEXT CURSOR DEFPUSHBUTTON DIALOG
|
||||||
%token DISCARDABLE EDITTEXT tEND FIXED FONT GRAYED GROUPBOX HELP ICON
|
%token DISCARDABLE EDITTEXT tEND FIXED FONT GRAYED GROUPBOX HELP ICON
|
||||||
%token IDENT INACTIVE LISTBOX LTEXT MENU MENUBARBREAK MENUBREAK MENUITEM
|
%token IDENT INACTIVE LISTBOX LTEXT MENU MENUBARBREAK MENUBREAK MENUITEM
|
||||||
%token MOVEABLE LOADONCALL NOINVERT NOT NOT_SUPPORTED POPUP PRELOAD
|
%token MOVEABLE LOADONCALL NOINVERT NOT NOT_SUPPORTED POPUP PRELOAD
|
||||||
%token PURE PUSHBUTTON RADIOBUTTON RCDATA RTEXT SCROLLBAR SHIFT SEPARATOR
|
%token PURE PUSHBUTTON RADIOBUTTON RCDATA RTEXT SCROLLBAR SHIFT SEPARATOR
|
||||||
%token SINGLE_QUOTED STRING STRINGTABLE STYLE VERSIONINFO VIRTKEY
|
%token SINGLE_QUOTED tSTRING STRINGTABLE STYLE VERSIONINFO VIRTKEY
|
||||||
%type <res> resource_file resource resources resource_definition accelerators
|
%type <res> resource_file resource resources resource_definition accelerators
|
||||||
%type <res> events bitmap cursor dialog dlg_attributes controls
|
%type <res> events bitmap cursor dialog dlg_attributes controls
|
||||||
%type <res> generic_control labeled_control control_desc font icon
|
%type <res> generic_control labeled_control control_desc font icon
|
||||||
|
@ -76,7 +76,7 @@ accelerators: ACCELERATORS tBEGIN events tEND {$$=$3;$$->type=acc;}
|
||||||
/* the events are collected in a gen_res, as the accelerator resource is just
|
/* the events are collected in a gen_res, as the accelerator resource is just
|
||||||
an array of events */
|
an array of events */
|
||||||
events: {$$=new_res();}
|
events: {$$=new_res();}
|
||||||
| STRING ',' NUMBER acc_options events
|
| tSTRING ',' NUMBER acc_options events
|
||||||
{$$=add_string_accelerator($1,$3,$4,$5);}
|
{$$=add_string_accelerator($1,$3,$4,$5);}
|
||||||
| NUMBER ',' NUMBER ',' ASCII acc_options events
|
| NUMBER ',' NUMBER ',' ASCII acc_options events
|
||||||
{$$=add_ascii_accelerator($1,$3,$6,$7);}
|
{$$=add_ascii_accelerator($1,$3,$6,$7);}
|
||||||
|
@ -88,14 +88,14 @@ acc_options: {$$=0;}
|
||||||
| ',' SHIFT acc_options {$$=$3|4;}
|
| ',' SHIFT acc_options {$$=$3|4;}
|
||||||
| ',' CONTROL acc_options {$$=$3|8;}
|
| ',' CONTROL acc_options {$$=$3|8;}
|
||||||
|
|
||||||
bitmap: tBITMAP load_and_memoption STRING {$$=make_bitmap(load_file($3));}
|
bitmap: tBITMAP load_and_memoption tSTRING {$$=make_bitmap(load_file($3));}
|
||||||
| tBITMAP load_and_memoption raw_data {$$=make_bitmap($3);}
|
| tBITMAP load_and_memoption raw_data {$$=make_bitmap($3);}
|
||||||
|
|
||||||
/* load and memory options are ignored */
|
/* load and memory options are ignored */
|
||||||
load_and_memoption: | lamo load_and_memoption
|
load_and_memoption: | lamo load_and_memoption
|
||||||
lamo: PRELOAD | LOADONCALL | FIXED | MOVEABLE | DISCARDABLE | PURE
|
lamo: PRELOAD | LOADONCALL | FIXED | MOVEABLE | DISCARDABLE | PURE
|
||||||
|
|
||||||
cursor: CURSOR load_and_memoption STRING {$$=make_cursor(load_file($3));}
|
cursor: CURSOR load_and_memoption tSTRING {$$=make_cursor(load_file($3));}
|
||||||
|CURSOR load_and_memoption raw_data {$$=make_cursor($3);}
|
|CURSOR load_and_memoption raw_data {$$=make_cursor($3);}
|
||||||
|
|
||||||
dialog: DIALOG load_and_memoption NUMBER ',' NUMBER ',' NUMBER ',' NUMBER
|
dialog: DIALOG load_and_memoption NUMBER ',' NUMBER ',' NUMBER ',' NUMBER
|
||||||
|
@ -106,13 +106,13 @@ dialog: DIALOG load_and_memoption NUMBER ',' NUMBER ',' NUMBER ',' NUMBER
|
||||||
dlg_attributes: {$$=new_dialog();}
|
dlg_attributes: {$$=new_dialog();}
|
||||||
| STYLE style dlg_attributes
|
| STYLE style dlg_attributes
|
||||||
{$$=dialog_style($2,$3);}
|
{$$=dialog_style($2,$3);}
|
||||||
| CAPTION STRING dlg_attributes
|
| CAPTION tSTRING dlg_attributes
|
||||||
{$$=dialog_caption($2,$3);}
|
{$$=dialog_caption($2,$3);}
|
||||||
| FONT NUMBER ',' STRING dlg_attributes
|
| FONT NUMBER ',' tSTRING dlg_attributes
|
||||||
{$$=dialog_font($2,$4,$5);}
|
{$$=dialog_font($2,$4,$5);}
|
||||||
| CLASS STRING dlg_attributes
|
| CLASS tSTRING dlg_attributes
|
||||||
{$$=dialog_class($2,$3);}
|
{$$=dialog_class($2,$3);}
|
||||||
| MENU STRING dlg_attributes
|
| MENU tSTRING dlg_attributes
|
||||||
{$$=dialog_menu($2,$3);}
|
{$$=dialog_menu($2,$3);}
|
||||||
|
|
||||||
/* the controls are collected into a gen_res, and finally the dialog header
|
/* the controls are collected into a gen_res, and finally the dialog header
|
||||||
|
@ -133,7 +133,7 @@ controls: {$$=new_res();}
|
||||||
| GROUPBOX labeled_control controls
|
| GROUPBOX labeled_control controls
|
||||||
{$$=add_control(CT_BUTTON, BS_GROUPBOX, $2, $3);}
|
{$$=add_control(CT_BUTTON, BS_GROUPBOX, $2, $3);}
|
||||||
/*special treatment for icons, as the extent is optional*/
|
/*special treatment for icons, as the extent is optional*/
|
||||||
| ICON STRING ',' NUMBER ',' NUMBER ',' NUMBER iconinfo controls
|
| ICON tSTRING ',' NUMBER ',' NUMBER ',' NUMBER iconinfo controls
|
||||||
{$$=add_icon($2, $4, $6, $8, $9, $10);}
|
{$$=add_icon($2, $4, $6, $8, $9, $10);}
|
||||||
| LISTBOX control_desc controls
|
| LISTBOX control_desc controls
|
||||||
{$$=add_control(CT_LISTBOX, 0, $2, $3);}
|
{$$=add_control(CT_LISTBOX, 0, $2, $3);}
|
||||||
|
@ -149,7 +149,7 @@ controls: {$$=new_res();}
|
||||||
{$$=add_control(CT_SCROLLBAR, 0, $2, $3);}
|
{$$=add_control(CT_SCROLLBAR, 0, $2, $3);}
|
||||||
|
|
||||||
|
|
||||||
labeled_control: STRING ',' control_desc {$$=label_control_desc($1,$3);}
|
labeled_control: tSTRING ',' control_desc {$$=label_control_desc($1,$3);}
|
||||||
control_desc: NUMBER ',' NUMBER ',' NUMBER ',' NUMBER ',' NUMBER optional_style
|
control_desc: NUMBER ',' NUMBER ',' NUMBER ',' NUMBER ',' NUMBER optional_style
|
||||||
{$$=create_control_desc($1,$3,$5,$7,$9,$10);}
|
{$$=create_control_desc($1,$3,$5,$7,$9,$10);}
|
||||||
|
|
||||||
|
@ -162,24 +162,24 @@ iconinfo: /*set extent and style to 0 if they are not provided */
|
||||||
| ',' NUMBER ',' NUMBER optional_style
|
| ',' NUMBER ',' NUMBER optional_style
|
||||||
{$$=create_control_desc(0,0,0,$2,$4,$5);}
|
{$$=create_control_desc(0,0,0,$2,$4,$5);}
|
||||||
|
|
||||||
generic_control: STRING ',' NUMBER ',' STRING ',' style ',' NUMBER
|
generic_control: tSTRING ',' NUMBER ',' tSTRING ',' style ',' NUMBER
|
||||||
',' NUMBER ',' NUMBER ',' NUMBER
|
',' NUMBER ',' NUMBER ',' NUMBER
|
||||||
{$$=create_generic_control($1,$3,$5,$7,$9,$11,$13,$15);}
|
{$$=create_generic_control($1,$3,$5,$7,$9,$11,$13,$15);}
|
||||||
|
|
||||||
font: FONT load_and_memoption STRING {$$=make_font(load_file($3));}
|
font: FONT load_and_memoption tSTRING {$$=make_font(load_file($3));}
|
||||||
|
|
||||||
icon: ICON load_and_memoption STRING {$$=make_icon(load_file($3));}
|
icon: ICON load_and_memoption tSTRING {$$=make_icon(load_file($3));}
|
||||||
| ICON load_and_memoption raw_data {$$=make_icon($3);}
|
| ICON load_and_memoption raw_data {$$=make_icon($3);}
|
||||||
|
|
||||||
menu: MENU load_and_memoption menu_body {$$=make_menu($3);}
|
menu: MENU load_and_memoption menu_body {$$=make_menu($3);}
|
||||||
/* menu items are collected in a gen_res and prefixed with the menu header*/
|
/* menu items are collected in a gen_res and prefixed with the menu header*/
|
||||||
menu_body: tBEGIN item_definitions tEND {$$=$2;}
|
menu_body: tBEGIN item_definitions tEND {$$=$2;}
|
||||||
item_definitions: {$$=new_res();}
|
item_definitions: {$$=new_res();}
|
||||||
| MENUITEM STRING ',' NUMBER item_options item_definitions
|
| MENUITEM tSTRING ',' NUMBER item_options item_definitions
|
||||||
{$$=add_menuitem($2,$4,$5,$6);}
|
{$$=add_menuitem($2,$4,$5,$6);}
|
||||||
| MENUITEM SEPARATOR item_definitions
|
| MENUITEM SEPARATOR item_definitions
|
||||||
{$$=add_menuitem("",0,0,$3);}
|
{$$=add_menuitem("",0,0,$3);}
|
||||||
| POPUP STRING item_options menu_body item_definitions
|
| POPUP tSTRING item_options menu_body item_definitions
|
||||||
{$$=add_popup($2,$3,$4,$5);}
|
{$$=add_popup($2,$3,$4,$5);}
|
||||||
item_options: {$$=0;}
|
item_options: {$$=0;}
|
||||||
| ',' CHECKED item_options {$$=$3|MF_CHECKED;}
|
| ',' CHECKED item_options {$$=$3|MF_CHECKED;}
|
||||||
|
@ -200,7 +200,7 @@ raw_elements: SINGLE_QUOTED {$$=hex_to_raw($1,new_res());}
|
||||||
stringtable: STRINGTABLE load_and_memoption tBEGIN strings tEND
|
stringtable: STRINGTABLE load_and_memoption tBEGIN strings tEND
|
||||||
{$$=$4;}
|
{$$=$4;}
|
||||||
strings: {$$=0;}|
|
strings: {$$=0;}|
|
||||||
NUMBER STRING strings {$$=0;add_str_tbl_elm($1,$2);}
|
NUMBER tSTRING strings {$$=0;add_str_tbl_elm($1,$2);}
|
||||||
|
|
||||||
versioninfo: VERSIONINFO NOT_SUPPORTED {$$=0;}
|
versioninfo: VERSIONINFO NOT_SUPPORTED {$$=0;}
|
||||||
|
|
||||||
|
|
|
@ -1194,7 +1194,7 @@ static int BuildSpec16File( FILE *outfile )
|
||||||
fprintf( outfile, "\tpushw %%bp\n" );
|
fprintf( outfile, "\tpushw %%bp\n" );
|
||||||
fprintf( outfile, "\tpushl $" PREFIX "%s\n",odp->u.func.link_name);
|
fprintf( outfile, "\tpushl $" PREFIX "%s\n",odp->u.func.link_name);
|
||||||
/* FreeBSD does not understand lcall, so do it the hard way */
|
/* FreeBSD does not understand lcall, so do it the hard way */
|
||||||
fprintf( outfile, "\t.byte 0x9a /*lcall*/\n" );
|
fprintf( outfile, "\t.byte 0x9a\n" );
|
||||||
fprintf( outfile, "\t.long " PREFIX "CallFrom16_%s_%s\n",
|
fprintf( outfile, "\t.long " PREFIX "CallFrom16_%s_%s\n",
|
||||||
(odp->type == TYPE_REGISTER) ? "regs" :
|
(odp->type == TYPE_REGISTER) ? "regs" :
|
||||||
(odp->type == TYPE_PASCAL) ? "long" : "word",
|
(odp->type == TYPE_PASCAL) ? "long" : "word",
|
||||||
|
|
|
@ -11,23 +11,65 @@
|
||||||
#include "advapi32.h"
|
#include "advapi32.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetUserNameA [ADVAPI32.67]
|
* StartServiceCtrlDispatcherA [ADVAPI32.196]
|
||||||
*/
|
*/
|
||||||
|
BOOL32
|
||||||
BOOL GetUserNameA(LPSTR lpszName, LPDWORD lpSize)
|
StartServiceCtrlDispatcher32A(LPSERVICE_TABLE_ENTRY32A servent)
|
||||||
{
|
{
|
||||||
size_t len;
|
fprintf(stderr,"StartServiceCtrlDispatcherA(%p (%s)), STUB.\n",
|
||||||
char *name;
|
servent,
|
||||||
|
servent->lpServiceName
|
||||||
name=getlogin();
|
);
|
||||||
len = name ? strlen(name) : 0;
|
return TRUE;
|
||||||
if (!len || !lpSize || len > *lpSize) {
|
}
|
||||||
if (lpszName) *lpszName = 0;
|
|
||||||
return 0;
|
/***********************************************************************
|
||||||
}
|
* StartServiceCtrlDispatcherW [ADVAPI32.197]
|
||||||
*lpSize=len;
|
*/
|
||||||
strcpy(lpszName, name);
|
BOOL32
|
||||||
return 1;
|
StartServiceCtrlDispatcher32W(LPSERVICE_TABLE_ENTRY32W servent)
|
||||||
|
{
|
||||||
|
char buffer[200];
|
||||||
|
|
||||||
|
lstrcpynWtoA(buffer,servent->lpServiceName,200);
|
||||||
|
fprintf(stderr,"StartServiceCtrlDispatcherA(%p (%s)), STUB.\n",
|
||||||
|
servent,
|
||||||
|
buffer
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* OpenProcessToken [ADVAPI32.197]
|
||||||
|
*/
|
||||||
|
BOOL32
|
||||||
|
OpenProcessToken(HANDLE32 process,DWORD desiredaccess,HANDLE32 *thandle)
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"OpenProcessToken(%08lx,%08lx,%p),stub!\n",
|
||||||
|
process,desiredaccess,thandle
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LookupPrivilegeValueA [ADVAPI32.90]
|
||||||
|
*/
|
||||||
|
BOOL32
|
||||||
|
LookupPrivilegeValue32A(LPCSTR system,LPCSTR name,LPVOID bla)
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"LookupPrivilegeValue32A(%s,%s,%p),stub\n",
|
||||||
|
system,name,bla
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
BOOL32
|
||||||
|
AdjustTokenPrivileges(HANDLE32 TokenHandle,BOOL32 DisableAllPrivileges,
|
||||||
|
LPVOID NewState,DWORD BufferLength,LPVOID PreviousState,
|
||||||
|
LPDWORD ReturnLength )
|
||||||
|
{
|
||||||
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
151
win32/console.c
151
win32/console.c
|
@ -5,9 +5,12 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
|
#include <malloc.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "wincon.h"
|
#include "wincon.h"
|
||||||
|
#include "string32.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
|
@ -51,11 +54,155 @@ BOOL32 GetConsoleScreenBufferInfo( HANDLE32 hConsoleOutput,
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetLargestConsoleWindowSize (KERNEL32.226)
|
* GetLargestConsoleWindowSize (KERNEL32.226)
|
||||||
*/
|
*/
|
||||||
COORD GetLargestConsoleWindowSize( HANDLE32 hConsoleOutput )
|
DWORD GetLargestConsoleWindowSize( HANDLE32 hConsoleOutput )
|
||||||
{
|
{
|
||||||
return dummyinfo.dwMaximumWindowSize;
|
return (DWORD)MAKELONG(dummyinfo.dwMaximumWindowSize.x,dummyinfo.dwMaximumWindowSize.y);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetConsoleCP (KERNEL32.226)
|
||||||
|
*/
|
||||||
|
UINT32 GetConsoleCP(VOID)
|
||||||
|
{
|
||||||
|
return GetACP();
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetConsoleOutputCP (KERNEL32.189)
|
||||||
|
*/
|
||||||
|
UINT32 GetConsoleOutputCP(VOID)
|
||||||
|
{
|
||||||
|
return GetConsoleCP();
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetConsoleMode (KERNEL32.188)
|
||||||
|
*/
|
||||||
|
BOOL32 GetConsoleMode(HANDLE32 hcon,LPDWORD mode)
|
||||||
|
{
|
||||||
|
*mode = ENABLE_PROCESSED_INPUT |
|
||||||
|
ENABLE_LINE_INPUT |
|
||||||
|
ENABLE_ECHO_INPUT |
|
||||||
|
ENABLE_WINDOW_INPUT |
|
||||||
|
ENABLE_MOUSE_INPUT;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetConsoleMode (KERNEL32.188)
|
||||||
|
*/
|
||||||
|
BOOL32 SetConsoleMode(HANDLE32 hcon,DWORD mode)
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"SetConsoleMode(%08lx,%08lx)\n",hcon,mode);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetConsoleTitleA (KERNEL32.191)
|
||||||
|
*/
|
||||||
|
DWORD GetConsoleTitle32A(LPSTR title,DWORD size)
|
||||||
|
{
|
||||||
|
lstrcpyn32A(title,"Console",size);
|
||||||
|
return strlen("Console");
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetConsoleTitleW (KERNEL32.192)
|
||||||
|
*/
|
||||||
|
DWORD GetConsoleTitle32W(LPWSTR title,DWORD size)
|
||||||
|
{
|
||||||
|
lstrcpynAtoW(title,"Console",size);
|
||||||
|
return strlen("Console");
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WriteConsoleA (KERNEL32.567)
|
||||||
|
*/
|
||||||
|
BOOL32 WriteConsole32A(
|
||||||
|
HANDLE32 hConsoleOutput,
|
||||||
|
LPVOID lpBuffer,
|
||||||
|
DWORD nNumberOfCharsToWrite,
|
||||||
|
LPDWORD lpNumberOfCharsWritten,
|
||||||
|
LPVOID lpReserved )
|
||||||
|
{
|
||||||
|
LPSTR buf = (LPSTR)xmalloc(nNumberOfCharsToWrite+1);
|
||||||
|
|
||||||
|
lstrcpyn32A(buf,lpBuffer,nNumberOfCharsToWrite);
|
||||||
|
buf[nNumberOfCharsToWrite]=0;
|
||||||
|
fprintf(stderr,"%s",buf);
|
||||||
|
free(buf);
|
||||||
|
*lpNumberOfCharsWritten=nNumberOfCharsToWrite;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* WriteConsoleW (KERNEL32.577)
|
||||||
|
*/
|
||||||
|
BOOL32 WriteConsole32W(
|
||||||
|
HANDLE32 hConsoleOutput,
|
||||||
|
LPVOID lpBuffer,
|
||||||
|
DWORD nNumberOfCharsToWrite,
|
||||||
|
LPDWORD lpNumberOfCharsWritten,
|
||||||
|
LPVOID lpReserved )
|
||||||
|
{
|
||||||
|
LPSTR buf = (LPSTR)xmalloc(2*nNumberOfCharsToWrite+1);
|
||||||
|
|
||||||
|
lstrcpynWtoA(buf,lpBuffer,nNumberOfCharsToWrite);
|
||||||
|
buf[nNumberOfCharsToWrite]=0;
|
||||||
|
fprintf(stderr,"%s",buf);
|
||||||
|
free(buf);
|
||||||
|
*lpNumberOfCharsWritten=nNumberOfCharsToWrite;
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* ReadConsoleA (KERNEL32.419)
|
||||||
|
*/
|
||||||
|
BOOL32 ReadConsole32A(
|
||||||
|
HANDLE32 hConsoleInput,
|
||||||
|
LPVOID lpBuffer,
|
||||||
|
DWORD nNumberOfCharsToRead,
|
||||||
|
LPDWORD lpNumberOfCharsRead,
|
||||||
|
LPVOID lpReserved )
|
||||||
|
{
|
||||||
|
fgets(lpBuffer,nNumberOfCharsToRead,stdin);
|
||||||
|
*lpNumberOfCharsRead = strlen(lpBuffer);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* ReadConsoleW (KERNEL32.427)
|
||||||
|
*/
|
||||||
|
BOOL32 ReadConsole32W(
|
||||||
|
HANDLE32 hConsoleInput,
|
||||||
|
LPVOID lpBuffer,
|
||||||
|
DWORD nNumberOfCharsToRead,
|
||||||
|
LPDWORD lpNumberOfCharsRead,
|
||||||
|
LPVOID lpReserved )
|
||||||
|
{
|
||||||
|
LPSTR buf = (LPSTR)xmalloc(nNumberOfCharsToRead);
|
||||||
|
|
||||||
|
fgets(buf,nNumberOfCharsToRead,stdin);
|
||||||
|
lstrcpynAtoW(lpBuffer,buf,nNumberOfCharsToRead);
|
||||||
|
*lpNumberOfCharsRead = strlen(buf);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* SetConsoleTitleA (KERNEL32.476)
|
||||||
|
*/
|
||||||
|
BOOL32 SetConsoleTitle32A(LPCSTR title)
|
||||||
|
{
|
||||||
|
fprintf(stderr,"SetConsoleTitle(%s)\n",title);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
/***********************************************************************
|
||||||
|
* SetConsoleTitleW (KERNEL32.477)
|
||||||
|
*/
|
||||||
|
BOOL32 SetConsoleTitle32W(LPCWSTR title)
|
||||||
|
{
|
||||||
|
LPSTR titleA = STRING32_DupUniToAnsi(title);
|
||||||
|
fprintf(stderr,"SetConsoleTitle(%s)\n",titleA);
|
||||||
|
free(titleA);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
|
@ -26,11 +26,11 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "bitmap.h"
|
|
||||||
#include "callback.h"
|
#include "callback.h"
|
||||||
#include "cursoricon.h"
|
#include "cursoricon.h"
|
||||||
#include "sysmetrics.h"
|
#include "sysmetrics.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
|
#include "bitmap.h"
|
||||||
#include "struct32.h"
|
#include "struct32.h"
|
||||||
#include "string32.h"
|
#include "string32.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
|
|
77
win32/file.c
77
win32/file.c
|
@ -558,3 +558,80 @@ BOOL32 MoveFile32W(LPCWSTR fn1,LPCWSTR fn2)
|
||||||
free(afn2);
|
free(afn2);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
VOID SetFileApisToOEM()
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"SetFileApisToOEM(),stub!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
VOID SetFileApisToANSI()
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"SetFileApisToANSI(),stub!\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL32 AreFileApisANSI()
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"AreFileApisANSI(),stub!\n");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BOOL32 CopyFile32A(LPCSTR sourcefn,LPCSTR destfn,BOOL32 failifexists)
|
||||||
|
{
|
||||||
|
OFSTRUCT of;
|
||||||
|
HFILE hf1,hf2;
|
||||||
|
char buffer[2048];
|
||||||
|
int res,lastread,curlen;
|
||||||
|
|
||||||
|
fprintf(stddeb,"CopyFile: %s -> %s\n",sourcefn,destfn);
|
||||||
|
hf1 = OpenFile(sourcefn,&of,OF_READ);
|
||||||
|
if (hf1==HFILE_ERROR)
|
||||||
|
return TRUE;
|
||||||
|
if (failifexists) {
|
||||||
|
hf2 = OpenFile(sourcefn,&of,OF_WRITE);
|
||||||
|
if (hf2 != HFILE_ERROR)
|
||||||
|
return FALSE;
|
||||||
|
_lclose(hf2);
|
||||||
|
}
|
||||||
|
hf2 = OpenFile(sourcefn,&of,OF_WRITE);
|
||||||
|
if (hf2 == HFILE_ERROR)
|
||||||
|
return FALSE;
|
||||||
|
curlen = 0;
|
||||||
|
while ((lastread=_lread16(hf1,buffer,sizeof(buffer)))>0) {
|
||||||
|
curlen=0;
|
||||||
|
while (curlen<lastread) {
|
||||||
|
int res;
|
||||||
|
|
||||||
|
res=_lwrite16(hf2,buffer+curlen,lastread-curlen);
|
||||||
|
if (res<=0) break;
|
||||||
|
curlen+=res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
_lclose(hf1);
|
||||||
|
_lclose(hf2);
|
||||||
|
return res>0;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL32
|
||||||
|
LockFile(
|
||||||
|
HFILE hFile,DWORD dwFileOffsetLow,DWORD dwFileOffsetHigh,
|
||||||
|
DWORD nNumberOfBytesToLockLow,DWORD nNumberOfBytesToLockHigh )
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"LockFile(%d,0x%08lx%08lx,0x%08lx%08lx),stub!\n",
|
||||||
|
hFile,dwFileOffsetHigh,dwFileOffsetLow,
|
||||||
|
nNumberOfBytesToLockHigh,nNumberOfBytesToLockLow
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
BOOL32
|
||||||
|
UnlockFile(
|
||||||
|
HFILE hFile,DWORD dwFileOffsetLow,DWORD dwFileOffsetHigh,
|
||||||
|
DWORD nNumberOfBytesToUnlockLow,DWORD nNumberOfBytesToUnlockHigh )
|
||||||
|
{
|
||||||
|
fprintf(stdnimp,"UnlockFile(%d,0x%08lx%08lx,0x%08lx%08lx),stub!\n",
|
||||||
|
hFile,dwFileOffsetHigh,dwFileOffsetLow,
|
||||||
|
nNumberOfBytesToUnlockHigh,nNumberOfBytesToUnlockLow
|
||||||
|
);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
234
win32/findfile.c
234
win32/findfile.c
|
@ -3,12 +3,20 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <ctype.h>
|
#include <ctype.h>
|
||||||
#include <malloc.h>
|
#include <malloc.h>
|
||||||
|
#include <errno.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <unistd.h>
|
||||||
#include "xmalloc.h"
|
#include "xmalloc.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "winerror.h"
|
#include "winerror.h"
|
||||||
#include "dos_fs.h"
|
#include "dos_fs.h"
|
||||||
#include "heap.h"
|
#include "heap.h"
|
||||||
#include "string32.h"
|
#include "string32.h"
|
||||||
|
#include "drive.h"
|
||||||
|
#include "stddebug.h"
|
||||||
|
#include "debug.h"
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define PATH_LEN 260
|
#define PATH_LEN 260
|
||||||
|
|
||||||
|
@ -16,23 +24,33 @@ struct FindFileContext32 {
|
||||||
DIR * dir;
|
DIR * dir;
|
||||||
char mask[PATH_LEN];
|
char mask[PATH_LEN];
|
||||||
char path[PATH_LEN];
|
char path[PATH_LEN];
|
||||||
|
char unixpath[PATH_LEN];
|
||||||
};
|
};
|
||||||
|
|
||||||
typedef struct FindFileContext32 FindFileContext32;
|
typedef struct FindFileContext32 FindFileContext32;
|
||||||
|
|
||||||
const char *DOSFS_Hash(const char *, int, int);
|
const char *DOSFS_Hash(const char *, int, int);
|
||||||
|
|
||||||
/* example D:\*.dbs */
|
/* TODO/FIXME
|
||||||
|
* 1) Check volume information to see if long file names supported
|
||||||
|
* and do separate wildcard matching if so. Win95 has extended wildcard
|
||||||
|
* matching - It can have wildcards like '*foo*'. These can match both
|
||||||
|
* the long file name and the short file name.
|
||||||
|
* 2) These file functions may be called from an interrupt
|
||||||
|
* Interrupt 21h Function 714Eh FindFirstFile
|
||||||
|
* Interrupt 21h Function 714Fh FindNextFile
|
||||||
|
* Interrupt 21h Function 71A1h FindClose
|
||||||
|
*/
|
||||||
|
|
||||||
static BOOL32 MatchWildCard(LPCSTR file, LPCSTR mask)
|
static BOOL32 MatchWildCard(LPCSTR file, LPCSTR mask)
|
||||||
{
|
{
|
||||||
int len;
|
int len;
|
||||||
|
|
||||||
/* We should check volume information to see if long filenames possible.
|
|
||||||
*/
|
|
||||||
|
|
||||||
len = strlen(file);
|
len = strlen(file);
|
||||||
|
|
||||||
|
if (strcmp(mask, "*.*") == 0)
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
while (*file) {
|
while (*file) {
|
||||||
if (*mask == '*') {
|
if (*mask == '*') {
|
||||||
if (*(mask+1)) {
|
if (*(mask+1)) {
|
||||||
|
@ -54,6 +72,48 @@ static BOOL32 MatchWildCard(LPCSTR file, LPCSTR mask)
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Functionality is same as GetFileInformationByHandle, but the structures
|
||||||
|
* it fills out are different. This needs to be kept the same as the above
|
||||||
|
* mentioned function.
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
static BOOL32 FINDFILE_GetFileInfo(const char *filename,
|
||||||
|
LPWIN32_FIND_DATA32A finfo)
|
||||||
|
{
|
||||||
|
struct stat file_stat;
|
||||||
|
|
||||||
|
if (stat(filename, &file_stat) == -1) {
|
||||||
|
SetLastError(ErrnoToLastError(errno));
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
finfo->dwFileAttributes = 0;
|
||||||
|
if (file_stat.st_mode & S_IFREG)
|
||||||
|
finfo->dwFileAttributes |= FILE_ATTRIBUTE_NORMAL;
|
||||||
|
if (file_stat.st_mode & S_IFDIR)
|
||||||
|
finfo->dwFileAttributes |= FILE_ATTRIBUTE_DIRECTORY;
|
||||||
|
if ((file_stat.st_mode & S_IRUSR) == 0)
|
||||||
|
finfo->dwFileAttributes |= FILE_ATTRIBUTE_READONLY;
|
||||||
|
|
||||||
|
/* Translate the file times. Use the last modification time
|
||||||
|
* for both the creation time and write time.
|
||||||
|
*/
|
||||||
|
DOSFS_UnixTimeToFileTime(file_stat.st_mtime, &(finfo->ftCreationTime));
|
||||||
|
DOSFS_UnixTimeToFileTime(file_stat.st_mtime, &(finfo->ftLastWriteTime));
|
||||||
|
DOSFS_UnixTimeToFileTime(file_stat.st_atime, &(finfo->ftLastAccessTime));
|
||||||
|
|
||||||
|
finfo->nFileSizeLow = file_stat.st_size;
|
||||||
|
|
||||||
|
/* Zero out currently unused fields.
|
||||||
|
*/
|
||||||
|
finfo->nFileSizeHigh = 0;
|
||||||
|
finfo->dwReserved0 = 0;
|
||||||
|
finfo->dwReserved1 = 0;
|
||||||
|
return TRUE;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* FindNextFile32A (KERNEL32.126)
|
* FindNextFile32A (KERNEL32.126)
|
||||||
*/
|
*/
|
||||||
|
@ -62,6 +122,7 @@ BOOL32 FindNextFile32A(HANDLE32 handle, LPWIN32_FIND_DATA32A data)
|
||||||
FindFileContext32 *context;
|
FindFileContext32 *context;
|
||||||
struct dirent *dirent;
|
struct dirent *dirent;
|
||||||
char dosname[14];
|
char dosname[14];
|
||||||
|
char fullfilename[PATH_LEN];
|
||||||
|
|
||||||
memset(data, 0, sizeof(WIN32_FIND_DATA32A));
|
memset(data, 0, sizeof(WIN32_FIND_DATA32A));
|
||||||
context = (FindFileContext32 *) handle;
|
context = (FindFileContext32 *) handle;
|
||||||
|
@ -71,17 +132,24 @@ BOOL32 FindNextFile32A(HANDLE32 handle, LPWIN32_FIND_DATA32A data)
|
||||||
strcmp(dirent->d_name, ".") == 0)
|
strcmp(dirent->d_name, ".") == 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
strcpy(dosname, DOSFS_Hash(dirent->d_name, FALSE, FALSE));
|
lstrcpy32A(dosname, DOSFS_Hash(dirent->d_name, FALSE, FALSE));
|
||||||
|
|
||||||
if (MatchWildCard(dirent->d_name, context->mask)) {
|
if (MatchWildCard(dirent->d_name, context->mask)) {
|
||||||
/* Full file name - is this a long file name?
|
/* fill in file information */
|
||||||
* If it is, we should probably use the dirent
|
lstrcpy32A(fullfilename, context->unixpath);
|
||||||
* instead of the dos hashed name.
|
if (context->unixpath[strlen(context->unixpath)-1] != '/')
|
||||||
*/
|
strcat(fullfilename, "/");
|
||||||
strcpy(data->cFileName, dosname);
|
strcat(fullfilename, dirent->d_name);
|
||||||
|
FINDFILE_GetFileInfo(fullfilename, data);
|
||||||
|
|
||||||
|
/* long file name */
|
||||||
|
lstrcpy32A(data->cFileName, dirent->d_name);
|
||||||
|
|
||||||
/* file name expressed in 8.3 format */
|
/* file name expressed in 8.3 format */
|
||||||
strcpy(data->cAlternateFileName, dosname);
|
lstrcpy32A(data->cAlternateFileName, dosname);
|
||||||
|
|
||||||
|
dprintf_file(stddeb, "FindNextFile32A: %s (%s)\n",
|
||||||
|
data->cFileName, data->cAlternateFileName);
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -95,6 +163,7 @@ BOOL32 FindNextFile32A(HANDLE32 handle, LPWIN32_FIND_DATA32A data)
|
||||||
BOOL32 FindNextFile32W(HANDLE32 handle, LPWIN32_FIND_DATA32W data)
|
BOOL32 FindNextFile32W(HANDLE32 handle, LPWIN32_FIND_DATA32W data)
|
||||||
{
|
{
|
||||||
WIN32_FIND_DATA32A adata;
|
WIN32_FIND_DATA32A adata;
|
||||||
|
BOOL32 res;
|
||||||
|
|
||||||
adata.dwFileAttributes = data->dwFileAttributes;
|
adata.dwFileAttributes = data->dwFileAttributes;
|
||||||
adata.ftCreationTime = data->ftCreationTime;
|
adata.ftCreationTime = data->ftCreationTime;
|
||||||
|
@ -106,25 +175,72 @@ BOOL32 FindNextFile32W(HANDLE32 handle, LPWIN32_FIND_DATA32W data)
|
||||||
adata.dwReserved1 = data->dwReserved1;
|
adata.dwReserved1 = data->dwReserved1;
|
||||||
STRING32_UniToAnsi(adata.cFileName,data->cFileName);
|
STRING32_UniToAnsi(adata.cFileName,data->cFileName);
|
||||||
STRING32_UniToAnsi(adata.cAlternateFileName,data->cAlternateFileName);
|
STRING32_UniToAnsi(adata.cAlternateFileName,data->cAlternateFileName);
|
||||||
return FindNextFile32A(handle,&adata);
|
res=FindNextFile32A(handle,&adata);
|
||||||
|
if (res) {
|
||||||
|
data->dwFileAttributes = adata.dwFileAttributes;
|
||||||
|
data->ftCreationTime = adata.ftCreationTime;
|
||||||
|
data->ftLastAccessTime = adata.ftLastAccessTime;
|
||||||
|
data->ftLastWriteTime = adata.ftLastWriteTime;
|
||||||
|
data->nFileSizeHigh = adata.nFileSizeHigh;
|
||||||
|
data->nFileSizeLow = adata.nFileSizeLow;
|
||||||
|
data->dwReserved0 = adata.dwReserved0;
|
||||||
|
data->dwReserved1 = adata.dwReserved1;
|
||||||
|
STRING32_AnsiToUni(data->cFileName,adata.cFileName);
|
||||||
|
STRING32_AnsiToUni(data->cAlternateFileName,adata.cAlternateFileName);
|
||||||
|
}
|
||||||
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
/*************************************************************************
|
/*************************************************************************
|
||||||
* FindFirstFile32A (KERNEL32.123)
|
* FindFirstFile32A (KERNEL32.123)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
HANDLE32 FindFirstFile32A(LPCSTR lpfilename,
|
HANDLE32 FindFirstFile32A(LPCSTR lpfilename_in,
|
||||||
LPWIN32_FIND_DATA32A lpFindFileData)
|
LPWIN32_FIND_DATA32A lpFindFileData)
|
||||||
{
|
{
|
||||||
const char *unixpath;
|
const char *unixpath;
|
||||||
char *slash, *p;
|
char *slash, *p;
|
||||||
FindFileContext32 *context;
|
FindFileContext32 *context;
|
||||||
|
char lpfilename[PATH_LEN];
|
||||||
|
INT32 len;
|
||||||
|
|
||||||
context = HeapAlloc(SystemHeap, 0, sizeof(FindFileContext32));
|
context = HeapAlloc(SystemHeap, 0, sizeof(FindFileContext32));
|
||||||
if (!context)
|
if (!context)
|
||||||
return (INVALID_HANDLE_VALUE);
|
return (INVALID_HANDLE_VALUE);
|
||||||
|
|
||||||
|
/* These type of cases
|
||||||
|
* A;\*.*
|
||||||
|
* A;stuff\*.*
|
||||||
|
* *.*
|
||||||
|
* \stuff\*.*
|
||||||
|
*/
|
||||||
|
lstrcpy32A(lpfilename, lpfilename_in);
|
||||||
|
if (lpfilename[1] != ':' &&
|
||||||
|
lpfilename[0] != '\\') {
|
||||||
|
/* drive and root path are not set */
|
||||||
|
len = GetCurrentDirectory32A(PATH_LEN, lpfilename);
|
||||||
|
if (lpfilename[len-1] != '\\')
|
||||||
|
strcat(lpfilename, "\\");
|
||||||
|
strcat(lpfilename, lpfilename_in);
|
||||||
|
}
|
||||||
|
else if (lpfilename[1] != ':') {
|
||||||
|
/* drive not set, but path is rooted */
|
||||||
|
memmove(&lpfilename[2], lpfilename, strlen(lpfilename));
|
||||||
|
lpfilename[0] = DRIVE_GetCurrentDrive();
|
||||||
|
lpfilename[1] = ':';
|
||||||
|
}
|
||||||
|
else if (lpfilename[1] == ':' &&
|
||||||
|
lpfilename[2] != '\\') {
|
||||||
|
/* drive is set, but not root path */
|
||||||
|
lstrcpy32A(lpfilename, DRIVE_GetDosCwd(lpfilename[0]));
|
||||||
|
strcat(lpfilename, lpfilename_in);
|
||||||
|
}
|
||||||
|
|
||||||
|
dprintf_file(stddeb, "FindFirstFile32A: %s -> %s .\n",
|
||||||
|
lpfilename_in, lpfilename);
|
||||||
|
|
||||||
slash = strrchr(lpfilename, '\\');
|
slash = strrchr(lpfilename, '\\');
|
||||||
|
|
||||||
if (slash) {
|
if (slash) {
|
||||||
lstrcpyn32A(context->path, lpfilename, slash - lpfilename + 1);
|
lstrcpyn32A(context->path, lpfilename, slash - lpfilename + 1);
|
||||||
context->path[slash - lpfilename + 1] = '\0';
|
context->path[slash - lpfilename + 1] = '\0';
|
||||||
|
@ -137,11 +253,13 @@ HANDLE32 FindFirstFile32A(LPCSTR lpfilename,
|
||||||
lstrcpy32A(context->mask, slash+1);
|
lstrcpy32A(context->mask, slash+1);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
/* shouldn't really get here now */
|
||||||
context->path[0] = '\0';
|
context->path[0] = '\0';
|
||||||
unixpath = ".";
|
unixpath = ".";
|
||||||
lstrcpy32A(context->mask, lpfilename);
|
lstrcpy32A(context->mask, lpfilename);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
lstrcpy32A(context->unixpath, unixpath);
|
||||||
context->dir = opendir(unixpath);
|
context->dir = opendir(unixpath);
|
||||||
if (!context->dir) {
|
if (!context->dir) {
|
||||||
/* FIXME: SetLastError(??) */
|
/* FIXME: SetLastError(??) */
|
||||||
|
@ -167,17 +285,19 @@ HANDLE32 FindFirstFile32W(LPCWSTR filename,LPWIN32_FIND_DATA32W data)
|
||||||
LPSTR afn = STRING32_DupUniToAnsi(filename);
|
LPSTR afn = STRING32_DupUniToAnsi(filename);
|
||||||
HANDLE32 res;
|
HANDLE32 res;
|
||||||
|
|
||||||
adata.dwFileAttributes = data->dwFileAttributes;
|
|
||||||
adata.ftCreationTime = data->ftCreationTime;
|
|
||||||
adata.ftLastAccessTime = data->ftLastAccessTime;
|
|
||||||
adata.ftLastWriteTime = data->ftLastWriteTime;
|
|
||||||
adata.nFileSizeHigh = data->nFileSizeHigh;
|
|
||||||
adata.nFileSizeLow = data->nFileSizeLow;
|
|
||||||
adata.dwReserved0 = data->dwReserved0;
|
|
||||||
adata.dwReserved1 = data->dwReserved1;
|
|
||||||
STRING32_UniToAnsi(adata.cFileName,data->cFileName);
|
|
||||||
STRING32_UniToAnsi(adata.cAlternateFileName,data->cAlternateFileName);
|
|
||||||
res=FindFirstFile32A(afn,&adata);
|
res=FindFirstFile32A(afn,&adata);
|
||||||
|
if (res) {
|
||||||
|
data->dwFileAttributes = adata.dwFileAttributes;
|
||||||
|
data->ftCreationTime = adata.ftCreationTime;
|
||||||
|
data->ftLastAccessTime = adata.ftLastAccessTime;
|
||||||
|
data->ftLastWriteTime = adata.ftLastWriteTime;
|
||||||
|
data->nFileSizeHigh = adata.nFileSizeHigh;
|
||||||
|
data->nFileSizeLow = adata.nFileSizeLow;
|
||||||
|
data->dwReserved0 = adata.dwReserved0;
|
||||||
|
data->dwReserved1 = adata.dwReserved1;
|
||||||
|
STRING32_AnsiToUni(data->cFileName,adata.cFileName);
|
||||||
|
STRING32_AnsiToUni(data->cAlternateFileName,adata.cAlternateFileName);
|
||||||
|
}
|
||||||
free(afn);
|
free(afn);
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
@ -201,3 +321,71 @@ BOOL32 FindClose32(HANDLE32 handle)
|
||||||
HeapFree(SystemHeap, 0, context);
|
HeapFree(SystemHeap, 0, context);
|
||||||
return (TRUE);
|
return (TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* 16 bit versions of find functions */
|
||||||
|
/*************************************************************************
|
||||||
|
* FindFirstFile16 (KERNEL.413)
|
||||||
|
*/
|
||||||
|
|
||||||
|
HANDLE16
|
||||||
|
FindFirstFile16(LPCSTR lpFileName, LPVOID lpdata)
|
||||||
|
{
|
||||||
|
WIN32_FIND_DATA32A *findData = (WIN32_FIND_DATA32A *) lpdata;
|
||||||
|
HANDLE32 h32;
|
||||||
|
HGLOBAL16 h16;
|
||||||
|
HANDLE32 *ptr;
|
||||||
|
|
||||||
|
/* get a handle to the real pointer */
|
||||||
|
|
||||||
|
|
||||||
|
h32 = FindFirstFile32A(lpFileName, findData);
|
||||||
|
if (h32 > 0) {
|
||||||
|
h16 = GlobalAlloc16(0, sizeof(h32));
|
||||||
|
ptr = GlobalLock16(h16);
|
||||||
|
*ptr = h32;
|
||||||
|
return (h16);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return ((HANDLE16) h32);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* FindNextFile16 (KERNEL.414)
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL16
|
||||||
|
FindNextFile16(HANDLE16 handle, LPVOID lpdata)
|
||||||
|
{
|
||||||
|
WIN32_FIND_DATA32A *findData = (WIN32_FIND_DATA32A *) lpdata;
|
||||||
|
HANDLE32 *lph32;
|
||||||
|
|
||||||
|
lph32 = GlobalLock16(handle);
|
||||||
|
if (FindNextFile32A(*lph32, findData)) {
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*************************************************************************
|
||||||
|
* FindClose16 (KERNEL.415)
|
||||||
|
*/
|
||||||
|
|
||||||
|
BOOL16
|
||||||
|
FindClose16(HANDLE16 handle)
|
||||||
|
{
|
||||||
|
HANDLE32 *lph32;
|
||||||
|
BOOL16 ret;
|
||||||
|
|
||||||
|
if (handle == (HANDLE16) INVALID_HANDLE_VALUE) {
|
||||||
|
SetLastError(ERROR_INVALID_HANDLE);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
lph32 = GlobalLock16(handle);
|
||||||
|
ret = FindClose32(*lph32);
|
||||||
|
GlobalFree16(handle);
|
||||||
|
return (ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
135
win32/init.c
135
win32/init.c
|
@ -13,8 +13,11 @@
|
||||||
#include "except.h"
|
#include "except.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
|
#include "string32.h"
|
||||||
#define DEBUG_WIN32
|
#define DEBUG_WIN32
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
#include "string32.h"
|
||||||
|
#include "xmalloc.h"
|
||||||
|
|
||||||
/* The global error value
|
/* The global error value
|
||||||
*/
|
*/
|
||||||
|
@ -25,14 +28,10 @@ int WIN32_LastError;
|
||||||
*/
|
*/
|
||||||
BOOL CloseHandle(KERNEL_OBJECT *handle)
|
BOOL CloseHandle(KERNEL_OBJECT *handle)
|
||||||
{
|
{
|
||||||
if(ValidateKernelObject(handle) != 0)
|
|
||||||
{
|
|
||||||
SetLastError(ERROR_INVALID_HANDLE);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (handle<0x1000) /* FIXME: hack */
|
if (handle<0x1000) /* FIXME: hack */
|
||||||
return CloseFileHandle(handle);
|
return CloseFileHandle(handle);
|
||||||
|
if (handle==0xFFFFFFFF)
|
||||||
|
return FALSE;
|
||||||
switch(handle->magic)
|
switch(handle->magic)
|
||||||
{
|
{
|
||||||
case KERNEL_OBJECT_UNUSED:
|
case KERNEL_OBJECT_UNUSED:
|
||||||
|
@ -57,11 +56,11 @@ BOOL CloseHandle(KERNEL_OBJECT *handle)
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetModuleHandle (KERNEL32.237)
|
* GetModuleHandle (KERNEL32.237)
|
||||||
*/
|
*/
|
||||||
HMODULE32 WIN32_GetModuleHandle(char *module)
|
HMODULE32 WIN32_GetModuleHandleA(char *module)
|
||||||
{
|
{
|
||||||
HMODULE32 hModule;
|
HMODULE32 hModule;
|
||||||
|
|
||||||
dprintf_win32(stddeb, "GetModuleHandle: %s\n", module ? module : "NULL");
|
dprintf_win32(stddeb, "GetModuleHandleA: %s\n", module ? module : "NULL");
|
||||||
/* Freecell uses the result of GetModuleHandleA(0) as the hInstance in
|
/* Freecell uses the result of GetModuleHandleA(0) as the hInstance in
|
||||||
all calls to e.g. CreateWindowEx. */
|
all calls to e.g. CreateWindowEx. */
|
||||||
if (module == NULL) {
|
if (module == NULL) {
|
||||||
|
@ -69,17 +68,29 @@ all calls to e.g. CreateWindowEx. */
|
||||||
hModule = pTask->hInstance;
|
hModule = pTask->hInstance;
|
||||||
} else
|
} else
|
||||||
hModule = GetModuleHandle(module);
|
hModule = GetModuleHandle(module);
|
||||||
dprintf_win32(stddeb, "GetModuleHandle: returning %d\n", hModule );
|
dprintf_win32(stddeb, "GetModuleHandleA: returning %d\n", hModule );
|
||||||
return hModule;
|
return hModule;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
HMODULE32 WIN32_GetModuleHandleW(LPCWSTR module)
|
||||||
|
{
|
||||||
|
HMODULE32 hModule;
|
||||||
|
LPSTR modulea;
|
||||||
|
if(module==NULL) return WIN32_GetModuleHandleA(NULL);
|
||||||
|
modulea=STRING32_DupUniToAnsi(module);
|
||||||
|
hModule = WIN32_GetModuleHandleA(modulea);
|
||||||
|
free(modulea);
|
||||||
|
return hModule;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetStartupInfoA (KERNEL32.273)
|
* GetStartupInfoA (KERNEL32.273)
|
||||||
*/
|
*/
|
||||||
VOID GetStartupInfoA(LPSTARTUPINFO lpStartupInfo)
|
VOID GetStartupInfo32A(LPSTARTUPINFO32A lpStartupInfo)
|
||||||
{
|
{
|
||||||
lpStartupInfo->cb = sizeof(STARTUPINFO);
|
lpStartupInfo->cb = sizeof(STARTUPINFO32A);
|
||||||
lpStartupInfo->lpReserved = NULL;
|
lpStartupInfo->lpReserved = "<Reserved>";
|
||||||
lpStartupInfo->lpDesktop = "Desktop";
|
lpStartupInfo->lpDesktop = "Desktop";
|
||||||
lpStartupInfo->lpTitle = "Title";
|
lpStartupInfo->lpTitle = "Title";
|
||||||
|
|
||||||
|
@ -90,24 +101,58 @@ VOID GetStartupInfoA(LPSTARTUPINFO lpStartupInfo)
|
||||||
lpStartupInfo->hStdError = (HANDLE32)2;
|
lpStartupInfo->hStdError = (HANDLE32)2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetStartupInfoW (KERNEL32.274)
|
||||||
|
*/
|
||||||
|
VOID GetStartupInfo32W(LPSTARTUPINFO32W lpStartupInfo)
|
||||||
|
{
|
||||||
|
lpStartupInfo->cb = sizeof(STARTUPINFO32W);
|
||||||
|
lpStartupInfo->lpReserved = STRING32_DupAnsiToUni("<Reserved>");
|
||||||
|
lpStartupInfo->lpDesktop = STRING32_DupAnsiToUni("Desktop");
|
||||||
|
lpStartupInfo->lpTitle = STRING32_DupAnsiToUni("Title");
|
||||||
|
|
||||||
|
lpStartupInfo->cbReserved2 = 0;
|
||||||
|
lpStartupInfo->lpReserved2 = NULL; /* must be NULL for VC runtime */
|
||||||
|
lpStartupInfo->hStdInput = (HANDLE32)0;
|
||||||
|
lpStartupInfo->hStdOutput = (HANDLE32)1;
|
||||||
|
lpStartupInfo->hStdError = (HANDLE32)2;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* GetStartupInfoA (KERNEL32.284)
|
* GetStartupInfoA (KERNEL32.284)
|
||||||
* FIXME: perhaps supply better values.
|
* FIXME: perhaps supply better values.
|
||||||
|
* add other architectures for WINELIB.
|
||||||
*/
|
*/
|
||||||
VOID
|
VOID
|
||||||
GetSystemInfo(LPSYSTEM_INFO si) {
|
GetSystemInfo(LPSYSTEM_INFO si) {
|
||||||
si->dwOemId = 0x12345678;
|
WORD cpu;
|
||||||
|
|
||||||
|
si->u.x.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_INTEL;
|
||||||
|
|
||||||
si->dwPageSize = 4096; /* 4K */
|
si->dwPageSize = 4096; /* 4K */
|
||||||
si->lpMinimumApplicationAddress = 0x40000000;
|
si->lpMinimumApplicationAddress = 0x40000000;
|
||||||
si->lpMaximumApplicationAddress = 0x80000000;
|
si->lpMaximumApplicationAddress = 0x80000000;
|
||||||
si->dwActiveProcessorMask = 1;
|
si->dwActiveProcessorMask = 1;
|
||||||
si->dwNumberOfProcessors = 1;
|
si->dwNumberOfProcessors = 1;
|
||||||
#ifdef WINELIB
|
#ifdef WINELIB
|
||||||
si->dwProcessorType = 3;
|
/* FIXME: perhaps check compilation defines ... */
|
||||||
|
si->dwProcessorType = PROCESSOR_INTEL_386;
|
||||||
|
cpu = 3;
|
||||||
#else
|
#else
|
||||||
si->dwProcessorType = runtime_cpu();
|
cpu = runtime_cpu();
|
||||||
|
switch (cpu) {
|
||||||
|
case 4: si->dwProcessorType = PROCESSOR_INTEL_486;
|
||||||
|
break;
|
||||||
|
case 5: si->dwProcessorType = PROCESSOR_INTEL_PENTIUM;
|
||||||
|
break;
|
||||||
|
case 3:
|
||||||
|
default: si->dwProcessorType = PROCESSOR_INTEL_386;
|
||||||
|
break;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
si->dwAllocationGranularity = 8; /* hmm? */
|
si->dwAllocationGranularity = 8; /* hmm? */
|
||||||
|
si->wProcessorLevel = cpu;
|
||||||
|
si->wProcessorRevision = 0; /* FIXME, see SDK */
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Initialize whatever internal data structures we need.
|
/* Initialize whatever internal data structures we need.
|
||||||
|
@ -122,3 +167,63 @@ int KERN32_Init(void)
|
||||||
#endif
|
#endif
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetComputerNameA (KERNEL32.165)
|
||||||
|
*/
|
||||||
|
BOOL32
|
||||||
|
GetComputerName32A(LPSTR name,LPDWORD size) {
|
||||||
|
if (-1==gethostname(name,*size))
|
||||||
|
return FALSE;
|
||||||
|
*size = lstrlen32A(name);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetComputerNameW (KERNEL32.166)
|
||||||
|
*/
|
||||||
|
BOOL32
|
||||||
|
GetComputerName32W(LPWSTR name,LPDWORD size) {
|
||||||
|
LPSTR nameA = (LPSTR)xmalloc(*size);
|
||||||
|
|
||||||
|
if (!GetComputerName32A(nameA,size)) {
|
||||||
|
free(nameA);
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
lstrcpynAtoW(name,nameA,*size);
|
||||||
|
free(nameA);
|
||||||
|
/* FIXME : size correct? */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetUserNameA [ADVAPI32.67]
|
||||||
|
*/
|
||||||
|
BOOL32 GetUserName32A(LPSTR lpszName, LPDWORD lpSize)
|
||||||
|
{
|
||||||
|
size_t len;
|
||||||
|
char *name;
|
||||||
|
|
||||||
|
name=getlogin();
|
||||||
|
len = name ? strlen(name) : 0;
|
||||||
|
if (!len || !lpSize || len > *lpSize) {
|
||||||
|
if (lpszName) *lpszName = 0;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
*lpSize=len;
|
||||||
|
strcpy(lpszName, name);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* GetUserNameW [ADVAPI32.68]
|
||||||
|
*/
|
||||||
|
BOOL32 GetUserName32W(LPWSTR lpszName, LPDWORD lpSize)
|
||||||
|
{
|
||||||
|
LPSTR name = (LPSTR)xmalloc(*lpSize);
|
||||||
|
DWORD size = *lpSize;
|
||||||
|
BOOL32 res = GetUserName32A(name,lpSize);
|
||||||
|
|
||||||
|
lstrcpynAtoW(lpszName,name,size);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
|
@ -33,3 +33,20 @@ QueryPerformanceCounter(LPLARGE_INTEGER counter) {
|
||||||
counter->HighPart = 0;
|
counter->HighPart = 0;
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
DWORD
|
||||||
|
GetWindowThreadProcessId(HWND32 hwnd,LPDWORD processid) {
|
||||||
|
fprintf(stdnimp,"GetWindowThreadProcessId(%04lx,%p),stub\n",hwnd,processid);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* DisableThreadLibraryCalls (KERNEL32.74)
|
||||||
|
*/
|
||||||
|
BOOL32
|
||||||
|
DisableThreadLibraryCalls(HMODULE32 hModule) {
|
||||||
|
/* FIXME: stub for now */
|
||||||
|
fprintf(stdnimp, "DisableThreadLibraryCalls Stub called!\n");
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
@ -100,7 +100,7 @@ HANDLE32 GetProcessHeap(void)
|
||||||
* copied from LoadLibrary
|
* copied from LoadLibrary
|
||||||
* This does not currently support built-in libraries
|
* This does not currently support built-in libraries
|
||||||
*/
|
*/
|
||||||
HINSTANCE32 LoadLibraryA(char *libname)
|
HINSTANCE32 LoadLibrary32A(LPCSTR libname)
|
||||||
{
|
{
|
||||||
HINSTANCE32 handle;
|
HINSTANCE32 handle;
|
||||||
dprintf_module( stddeb, "LoadLibrary: (%08x) %s\n", (int)libname, libname);
|
dprintf_module( stddeb, "LoadLibrary: (%08x) %s\n", (int)libname, libname);
|
||||||
|
@ -119,6 +119,20 @@ HINSTANCE32 LoadLibraryA(char *libname)
|
||||||
return handle;
|
return handle;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* LoadLibrary32W (KERNEL32.368)
|
||||||
|
*/
|
||||||
|
HINSTANCE32 LoadLibrary32W(LPCWSTR libnameW)
|
||||||
|
{
|
||||||
|
LPSTR libnameA = STRING32_DupUniToAnsi(libnameW);
|
||||||
|
HINSTANCE32 ret;
|
||||||
|
|
||||||
|
ret = LoadLibrary32A(libnameA);
|
||||||
|
free(libnameA);
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* FreeLibrary
|
* FreeLibrary
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -45,6 +45,16 @@ BOOL IsDialogMessage32A(DWORD hwnd, MSG32* lpmsg)
|
||||||
return IsDialogMessage(hwnd, &msg);
|
return IsDialogMessage(hwnd, &msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* IsDialogMessage32W (USER32.342)
|
||||||
|
*/
|
||||||
|
BOOL IsDialogMessage32W(DWORD hwnd, MSG32* lpmsg)
|
||||||
|
{
|
||||||
|
MSG16 msg;
|
||||||
|
STRUCT32_MSG32to16(lpmsg, &msg);
|
||||||
|
return IsDialogMessage(hwnd, &msg);
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DispatchMessageA (USER32.140)
|
* DispatchMessageA (USER32.140)
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -39,7 +39,7 @@ DCE *DCE_AllocDCE( HWND32 hWnd, DCE_TYPE type )
|
||||||
{
|
{
|
||||||
DCE * dce;
|
DCE * dce;
|
||||||
if (!(dce = HeapAlloc( SystemHeap, 0, sizeof(DCE) ))) return NULL;
|
if (!(dce = HeapAlloc( SystemHeap, 0, sizeof(DCE) ))) return NULL;
|
||||||
if (!(dce->hDC = CreateDC( "DISPLAY", NULL, NULL, NULL )))
|
if (!(dce->hDC = CreateDC16( "DISPLAY", NULL, NULL, NULL )))
|
||||||
{
|
{
|
||||||
HeapFree( SystemHeap, 0, dce );
|
HeapFree( SystemHeap, 0, dce );
|
||||||
return 0;
|
return 0;
|
||||||
|
|
101
windows/defdlg.c
101
windows/defdlg.c
|
@ -118,9 +118,6 @@ static LRESULT DEFDLG_Proc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
|
||||||
|
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
FillWindow( hwnd, hwnd, (HDC16)wParam, (HBRUSH16)CTLCOLOR_DLG );
|
FillWindow( hwnd, hwnd, (HDC16)wParam, (HBRUSH16)CTLCOLOR_DLG );
|
||||||
return 1;
|
return 1;
|
||||||
|
@ -152,6 +149,7 @@ static LRESULT DEFDLG_Proc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
|
||||||
/* Delete window procedure */
|
/* Delete window procedure */
|
||||||
WINPROC_FreeProc( dlgInfo->dlgProc );
|
WINPROC_FreeProc( dlgInfo->dlgProc );
|
||||||
dlgInfo->dlgProc = (HWINDOWPROC)0;
|
dlgInfo->dlgProc = (HWINDOWPROC)0;
|
||||||
|
dlgInfo->fEnd = TRUE; /* just in case */
|
||||||
|
|
||||||
/* Window clean-up */
|
/* Window clean-up */
|
||||||
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
||||||
|
@ -194,6 +192,9 @@ static LRESULT DEFDLG_Proc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
case WM_GETFONT:
|
||||||
|
return dlgInfo->hUserFont;
|
||||||
|
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
EndDialog( hwnd, TRUE );
|
EndDialog( hwnd, TRUE );
|
||||||
DestroyWindow( hwnd );
|
DestroyWindow( hwnd );
|
||||||
|
@ -202,6 +203,21 @@ static LRESULT DEFDLG_Proc( HWND32 hwnd, UINT32 msg, WPARAM32 wParam,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/***********************************************************************
|
||||||
|
* DEFDLG_Signoff
|
||||||
|
*/
|
||||||
|
static LRESULT DEFDLG_Signoff(DIALOGINFO* dlgInfo, UINT32 msg, BOOL16 fResult)
|
||||||
|
{
|
||||||
|
/* see SDK 3.1 */
|
||||||
|
|
||||||
|
if ((msg >= WM_CTLCOLORMSGBOX && msg <= WM_CTLCOLORSTATIC) ||
|
||||||
|
msg == WM_CTLCOLOR || msg == WM_COMPAREITEM ||
|
||||||
|
msg == WM_VKEYTOITEM || msg == WM_CHARTOITEM ||
|
||||||
|
msg == WM_QUERYDRAGICON || msg == WM_INITDIALOG)
|
||||||
|
return fResult;
|
||||||
|
|
||||||
|
return dlgInfo->msgResult;
|
||||||
|
}
|
||||||
|
|
||||||
/***********************************************************************
|
/***********************************************************************
|
||||||
* DefDlgProc16 (USER.308)
|
* DefDlgProc16 (USER.308)
|
||||||
|
@ -214,38 +230,43 @@ LRESULT DefDlgProc16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam )
|
||||||
|
|
||||||
if (!wndPtr) return 0;
|
if (!wndPtr) return 0;
|
||||||
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
|
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
|
||||||
|
|
||||||
dlgInfo->msgResult = 0;
|
dlgInfo->msgResult = 0;
|
||||||
if (dlgInfo->dlgProc)
|
|
||||||
{
|
if (dlgInfo->dlgProc) /* Call dialog procedure */
|
||||||
/* Call dialog procedure */
|
|
||||||
result = (BOOL16)CallWindowProc16( (WNDPROC16)dlgInfo->dlgProc,
|
result = (BOOL16)CallWindowProc16( (WNDPROC16)dlgInfo->dlgProc,
|
||||||
hwnd, msg, wParam, lParam );
|
hwnd, msg, wParam, lParam );
|
||||||
|
|
||||||
/* Check if window was destroyed by dialog procedure */
|
/* Check if window was destroyed by dialog procedure */
|
||||||
|
|
||||||
if (!IsWindow( hwnd )) return result;
|
if( !result && IsWindow(hwnd))
|
||||||
else if( result ) return dlgInfo->msgResult;
|
{
|
||||||
}
|
/* callback didn't process this message */
|
||||||
|
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
case WM_NCDESTROY:
|
|
||||||
case WM_SHOWWINDOW:
|
case WM_SHOWWINDOW:
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
case DM_SETDEFID:
|
case DM_SETDEFID:
|
||||||
case DM_GETDEFID:
|
case DM_GETDEFID:
|
||||||
case WM_NEXTDLGCTL:
|
case WM_NEXTDLGCTL:
|
||||||
|
case WM_GETFONT:
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
return DEFDLG_Proc( (HWND32)hwnd, msg, (WPARAM32)wParam,
|
case WM_NCDESTROY:
|
||||||
lParam, dlgInfo );
|
return DEFDLG_Proc( (HWND32)hwnd, msg,
|
||||||
|
(WPARAM32)wParam, lParam, dlgInfo );
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
case WM_VKEYTOITEM:
|
||||||
|
case WM_COMPAREITEM:
|
||||||
|
case WM_CHARTOITEM:
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return DefWindowProc16( hwnd, msg, wParam, lParam );
|
return DefWindowProc16( hwnd, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return DEFDLG_Signoff(dlgInfo, msg, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -260,37 +281,43 @@ LRESULT DefDlgProc32A( HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
||||||
|
|
||||||
if (!wndPtr) return 0;
|
if (!wndPtr) return 0;
|
||||||
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
|
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
|
||||||
|
|
||||||
dlgInfo->msgResult = 0;
|
dlgInfo->msgResult = 0;
|
||||||
if (dlgInfo->dlgProc)
|
|
||||||
{
|
if (dlgInfo->dlgProc) /* Call dialog procedure */
|
||||||
/* Call dialog procedure */
|
|
||||||
result = (BOOL16)CallWindowProc32A( (WNDPROC32)dlgInfo->dlgProc,
|
result = (BOOL16)CallWindowProc32A( (WNDPROC32)dlgInfo->dlgProc,
|
||||||
hwnd, msg, wParam, lParam );
|
hwnd, msg, wParam, lParam );
|
||||||
|
|
||||||
/* Check if window was destroyed by dialog procedure */
|
/* Check if window was destroyed by dialog procedure */
|
||||||
|
|
||||||
if (!IsWindow( hwnd )) return result;
|
if( !result && IsWindow(hwnd))
|
||||||
else if( result ) return dlgInfo->msgResult;
|
{
|
||||||
}
|
/* callback didn't process this message */
|
||||||
|
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
case WM_NCDESTROY:
|
|
||||||
case WM_SHOWWINDOW:
|
case WM_SHOWWINDOW:
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
case DM_SETDEFID:
|
case DM_SETDEFID:
|
||||||
case DM_GETDEFID:
|
case DM_GETDEFID:
|
||||||
case WM_NEXTDLGCTL:
|
case WM_NEXTDLGCTL:
|
||||||
|
case WM_GETFONT:
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
return DEFDLG_Proc( hwnd, msg, wParam, lParam, dlgInfo );
|
case WM_NCDESTROY:
|
||||||
|
return DEFDLG_Proc( (HWND32)hwnd, msg,
|
||||||
|
(WPARAM32)wParam, lParam, dlgInfo );
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
case WM_VKEYTOITEM:
|
||||||
|
case WM_COMPAREITEM:
|
||||||
|
case WM_CHARTOITEM:
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
return DefWindowProc32A( hwnd, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return DEFDLG_Signoff(dlgInfo, msg, result);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -305,35 +332,41 @@ LRESULT DefDlgProc32W( HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
||||||
|
|
||||||
if (!wndPtr) return 0;
|
if (!wndPtr) return 0;
|
||||||
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
|
dlgInfo = (DIALOGINFO *)&wndPtr->wExtra;
|
||||||
|
|
||||||
dlgInfo->msgResult = 0;
|
dlgInfo->msgResult = 0;
|
||||||
if (dlgInfo->dlgProc)
|
|
||||||
{
|
if (dlgInfo->dlgProc) /* Call dialog procedure */
|
||||||
/* Call dialog procedure */
|
|
||||||
result = (BOOL16)CallWindowProc32W( (WNDPROC32)dlgInfo->dlgProc,
|
result = (BOOL16)CallWindowProc32W( (WNDPROC32)dlgInfo->dlgProc,
|
||||||
hwnd, msg, wParam, lParam );
|
hwnd, msg, wParam, lParam );
|
||||||
|
|
||||||
/* Check if window was destroyed by dialog procedure */
|
/* Check if window was destroyed by dialog procedure */
|
||||||
|
|
||||||
if (!IsWindow( hwnd )) return result;
|
if( !result && IsWindow(hwnd))
|
||||||
else if( result ) return dlgInfo->msgResult;
|
{
|
||||||
}
|
/* callback didn't process this message */
|
||||||
|
|
||||||
switch(msg)
|
switch(msg)
|
||||||
{
|
{
|
||||||
case WM_INITDIALOG:
|
|
||||||
case WM_ERASEBKGND:
|
case WM_ERASEBKGND:
|
||||||
case WM_NCDESTROY:
|
|
||||||
case WM_SHOWWINDOW:
|
case WM_SHOWWINDOW:
|
||||||
case WM_ACTIVATE:
|
case WM_ACTIVATE:
|
||||||
case WM_SETFOCUS:
|
case WM_SETFOCUS:
|
||||||
case DM_SETDEFID:
|
case DM_SETDEFID:
|
||||||
case DM_GETDEFID:
|
case DM_GETDEFID:
|
||||||
case WM_NEXTDLGCTL:
|
case WM_NEXTDLGCTL:
|
||||||
|
case WM_GETFONT:
|
||||||
case WM_CLOSE:
|
case WM_CLOSE:
|
||||||
return DEFDLG_Proc( hwnd, msg, wParam, lParam, dlgInfo );
|
case WM_NCDESTROY:
|
||||||
|
return DEFDLG_Proc( (HWND32)hwnd, msg,
|
||||||
|
(WPARAM32)wParam, lParam, dlgInfo );
|
||||||
|
case WM_INITDIALOG:
|
||||||
|
case WM_VKEYTOITEM:
|
||||||
|
case WM_COMPAREITEM:
|
||||||
|
case WM_CHARTOITEM:
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return DefWindowProc32W( hwnd, msg, wParam, lParam );
|
return DefWindowProc32W( hwnd, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
return DEFDLG_Signoff(dlgInfo, msg, result);
|
||||||
}
|
}
|
||||||
|
|
|
@ -63,7 +63,11 @@ void DEFWND_SetText( WND *wndPtr, LPCSTR text )
|
||||||
if (!text) text = "";
|
if (!text) text = "";
|
||||||
if (wndPtr->text) HeapFree( SystemHeap, 0, wndPtr->text );
|
if (wndPtr->text) HeapFree( SystemHeap, 0, wndPtr->text );
|
||||||
wndPtr->text = HEAP_strdupA( SystemHeap, 0, text );
|
wndPtr->text = HEAP_strdupA( SystemHeap, 0, text );
|
||||||
if (wndPtr->window) XStoreName( display, wndPtr->window, wndPtr->text );
|
if (wndPtr->window)
|
||||||
|
{
|
||||||
|
XStoreName( display, wndPtr->window, wndPtr->text );
|
||||||
|
XSetIconName( display, wndPtr->window, wndPtr->text );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -71,7 +71,7 @@ BOOL32 DIALOG_Init()
|
||||||
|
|
||||||
/* Calculate the dialog base units */
|
/* Calculate the dialog base units */
|
||||||
|
|
||||||
if (!(hdc = CreateDC( "DISPLAY", NULL, NULL, NULL ))) return FALSE;
|
if (!(hdc = CreateDC16( "DISPLAY", NULL, NULL, NULL ))) return FALSE;
|
||||||
GetTextMetrics16( hdc, &tm );
|
GetTextMetrics16( hdc, &tm );
|
||||||
DeleteDC( hdc );
|
DeleteDC( hdc );
|
||||||
xBaseUnit = tm.tmAveCharWidth;
|
xBaseUnit = tm.tmAveCharWidth;
|
||||||
|
@ -79,7 +79,8 @@ BOOL32 DIALOG_Init()
|
||||||
|
|
||||||
/* Dialog units are based on a proportional system font */
|
/* Dialog units are based on a proportional system font */
|
||||||
/* so we adjust them a bit for a fixed font. */
|
/* so we adjust them a bit for a fixed font. */
|
||||||
if (tm.tmPitchAndFamily & TMPF_FIXED_PITCH) xBaseUnit = xBaseUnit * 5 / 4;
|
if (!(tm.tmPitchAndFamily & TMPF_FIXED_PITCH))
|
||||||
|
xBaseUnit = xBaseUnit * 5 / 4;
|
||||||
|
|
||||||
dprintf_dialog( stddeb, "DIALOG_Init: base units = %d,%d\n",
|
dprintf_dialog( stddeb, "DIALOG_Init: base units = %d,%d\n",
|
||||||
xBaseUnit, yBaseUnit );
|
xBaseUnit, yBaseUnit );
|
||||||
|
@ -511,7 +512,7 @@ static HWND DIALOG_CreateIndirect( HINSTANCE32 hInst, LPCSTR dlgTemplate,
|
||||||
ReleaseDC32( 0, hdc );
|
ReleaseDC32( 0, hdc );
|
||||||
xUnit = tm.tmAveCharWidth;
|
xUnit = tm.tmAveCharWidth;
|
||||||
yUnit = tm.tmHeight;
|
yUnit = tm.tmHeight;
|
||||||
if (tm.tmPitchAndFamily & TMPF_FIXED_PITCH)
|
if (!(tm.tmPitchAndFamily & TMPF_FIXED_PITCH))
|
||||||
xBaseUnit = xBaseUnit * 5 / 4; /* See DIALOG_Init() */
|
xBaseUnit = xBaseUnit * 5 / 4; /* See DIALOG_Init() */
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -968,6 +968,36 @@ BOOL16 Polyline16( HDC16 hdc, LPPOINT16 pt, INT16 count )
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Polyline32 (GDI32.276)
|
||||||
|
*/
|
||||||
|
BOOL32 Polyline32( HDC32 hdc, const LPPOINT32 pt, INT32 count )
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||||
|
if (!dc)
|
||||||
|
{
|
||||||
|
dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
|
||||||
|
if (!dc) return FALSE;
|
||||||
|
fprintf( stderr, "Polyline32: Metafile Polyline not yet supported for Win32\n");
|
||||||
|
/* win 16 code was:
|
||||||
|
MF_MetaPoly(dc, META_POLYLINE, pt, count);
|
||||||
|
return TRUE;
|
||||||
|
*/
|
||||||
|
return FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (DC_SetupGCForPen( dc ))
|
||||||
|
for (i = 0; i < count-1; i ++)
|
||||||
|
XDrawLine (display, dc->u.x.drawable, dc->u.x.gc,
|
||||||
|
dc->w.DCOrgX + XLPTODP(dc, pt [i].x),
|
||||||
|
dc->w.DCOrgY + YLPTODP(dc, pt [i].y),
|
||||||
|
dc->w.DCOrgX + XLPTODP(dc, pt [i+1].x),
|
||||||
|
dc->w.DCOrgY + YLPTODP(dc, pt [i+1].y));
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Polygon16 (GDI.36)
|
* Polygon16 (GDI.36)
|
||||||
*/
|
*/
|
||||||
|
@ -975,7 +1005,7 @@ BOOL16 Polygon16( HDC16 hdc, LPPOINT16 pt, INT16 count )
|
||||||
{
|
{
|
||||||
register int i;
|
register int i;
|
||||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||||
XPoint *points = (XPoint *) xmalloc (sizeof (XPoint) * (count+1));
|
XPoint *points;
|
||||||
|
|
||||||
if (!dc)
|
if (!dc)
|
||||||
{
|
{
|
||||||
|
@ -985,6 +1015,50 @@ BOOL16 Polygon16( HDC16 hdc, LPPOINT16 pt, INT16 count )
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
points = (XPoint *) xmalloc (sizeof (XPoint) * (count+1));
|
||||||
|
for (i = 0; i < count; i++)
|
||||||
|
{
|
||||||
|
points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
|
||||||
|
points[i].y = dc->w.DCOrgY + YLPTODP( dc, pt[i].y );
|
||||||
|
}
|
||||||
|
points[count] = points[0];
|
||||||
|
|
||||||
|
if (DC_SetupGCForBrush( dc ))
|
||||||
|
XFillPolygon( display, dc->u.x.drawable, dc->u.x.gc,
|
||||||
|
points, count+1, Complex, CoordModeOrigin);
|
||||||
|
|
||||||
|
if (DC_SetupGCForPen ( dc ))
|
||||||
|
XDrawLines( display, dc->u.x.drawable, dc->u.x.gc,
|
||||||
|
points, count+1, CoordModeOrigin );
|
||||||
|
|
||||||
|
free( points );
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* Polygon32 (GDI32.275)
|
||||||
|
*
|
||||||
|
* This a copy of Polygon16 so that conversion of array of
|
||||||
|
* LPPOINT32 to LPPOINT16 is not necessary
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
BOOL32 Polygon32( HDC32 hdc, LPPOINT32 pt, INT32 count )
|
||||||
|
{
|
||||||
|
register int i;
|
||||||
|
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||||
|
XPoint *points;
|
||||||
|
|
||||||
|
if (!dc)
|
||||||
|
{
|
||||||
|
dc = (DC *)GDI_GetObjPtr(hdc, METAFILE_DC_MAGIC);
|
||||||
|
if (!dc) return FALSE;
|
||||||
|
/* FIXME: MF_MetaPoly expects LPPOINT16 not 32 */
|
||||||
|
/* MF_MetaPoly(dc, META_POLYGON, pt, count); */
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
points = (XPoint *) xmalloc (sizeof (XPoint) * (count+1));
|
||||||
for (i = 0; i < count; i++)
|
for (i = 0; i < count; i++)
|
||||||
{
|
{
|
||||||
points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
|
points[i].x = dc->w.DCOrgX + XLPTODP( dc, pt[i].x );
|
||||||
|
|
|
@ -2,11 +2,14 @@
|
||||||
* Keyboard related functions
|
* Keyboard related functions
|
||||||
*
|
*
|
||||||
* Copyright 1993 Bob Amstadt
|
* Copyright 1993 Bob Amstadt
|
||||||
|
* Copyright 1996 Albrecht Kleine
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <stdio.h>
|
#include <stdio.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
|
#include "accel.h"
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
|
||||||
extern BOOL MouseButtonsStates[3];
|
extern BOOL MouseButtonsStates[3];
|
||||||
|
@ -115,3 +118,147 @@ int GetAsyncKeyState(int nKey)
|
||||||
dprintf_key(stddeb, "GetAsyncKeyState(%x) -> %x\n", nKey, retval);
|
dprintf_key(stddeb, "GetAsyncKeyState(%x) -> %x\n", nKey, retval);
|
||||||
return retval;
|
return retval;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**********************************************************************
|
||||||
|
* TranslateAccelerator [USER.178]
|
||||||
|
*
|
||||||
|
* FIXME: should send some WM_INITMENU or/and WM_INITMENUPOPUP -messages
|
||||||
|
*/
|
||||||
|
INT16 TranslateAccelerator(HWND hWnd, HACCEL16 hAccel, LPMSG16 msg)
|
||||||
|
{
|
||||||
|
ACCELHEADER *lpAccelTbl;
|
||||||
|
int i;
|
||||||
|
BOOL sendmsg;
|
||||||
|
|
||||||
|
if (hAccel == 0 || msg == NULL) return 0;
|
||||||
|
if (msg->message != WM_KEYDOWN &&
|
||||||
|
msg->message != WM_KEYUP &&
|
||||||
|
msg->message != WM_SYSKEYDOWN &&
|
||||||
|
msg->message != WM_SYSKEYUP &&
|
||||||
|
msg->message != WM_CHAR) return 0;
|
||||||
|
|
||||||
|
dprintf_accel(stddeb, "TranslateAccelerators hAccel=%04x, hWnd=%04x,\
|
||||||
|
msg->hwnd=%04x, msg->message=%04x\n", hAccel,hWnd,msg->hwnd,msg->message);
|
||||||
|
|
||||||
|
lpAccelTbl = (LPACCELHEADER)GlobalLock16(hAccel);
|
||||||
|
for (sendmsg= i = 0; i < lpAccelTbl->wCount; i++)
|
||||||
|
{
|
||||||
|
if(msg->wParam == lpAccelTbl->tbl[i].wEvent)
|
||||||
|
{
|
||||||
|
if (msg->message == WM_CHAR)
|
||||||
|
{
|
||||||
|
if ( !(lpAccelTbl->tbl[i].type & ALT_ACCEL) &&
|
||||||
|
!(lpAccelTbl->tbl[i].type & VIRTKEY_ACCEL) )
|
||||||
|
{
|
||||||
|
dprintf_accel(stddeb,"found accel for WM_CHAR: ('%c')",msg->wParam&0xff);
|
||||||
|
sendmsg=TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if(lpAccelTbl->tbl[i].type & VIRTKEY_ACCEL)
|
||||||
|
{
|
||||||
|
INT mask = 0;
|
||||||
|
dprintf_accel(stddeb,"found accel for virt_key %04x (scan %04x)",
|
||||||
|
msg->wParam,0xff & HIWORD(msg->lParam));
|
||||||
|
if(GetKeyState(VK_SHIFT) & 0x8000) mask |= SHIFT_ACCEL;
|
||||||
|
if(GetKeyState(VK_CONTROL) & 0x8000) mask |= CONTROL_ACCEL;
|
||||||
|
if(GetKeyState(VK_MENU) & 0x8000) mask |= ALT_ACCEL;
|
||||||
|
if(mask == (lpAccelTbl->tbl[i].type &
|
||||||
|
(SHIFT_ACCEL | CONTROL_ACCEL | ALT_ACCEL)))
|
||||||
|
sendmsg=TRUE;
|
||||||
|
else
|
||||||
|
dprintf_accel(stddeb,", but incorrect SHIFT/CTRL/ALT-state\n");
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (!(msg->lParam & 0x01000000)) /* no special_key */
|
||||||
|
{
|
||||||
|
if ((lpAccelTbl->tbl[i].type & ALT_ACCEL) && (msg->lParam & 0x20000000))
|
||||||
|
{ /* ^^ ALT pressed */
|
||||||
|
dprintf_accel(stddeb,"found accel for Alt-%c", msg->wParam&0xff);
|
||||||
|
sendmsg=TRUE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (sendmsg) /* found an accelerator, but send a message... ? */
|
||||||
|
{
|
||||||
|
INT16 iSysStat,iStat,mesg=0;
|
||||||
|
HMENU16 hSysMenu,hMenu;
|
||||||
|
|
||||||
|
if (msg->message == WM_KEYUP || msg->message == WM_SYSKEYUP)
|
||||||
|
mesg=1;
|
||||||
|
else
|
||||||
|
if (GetCapture16())
|
||||||
|
mesg=2;
|
||||||
|
else
|
||||||
|
if (!IsWindowEnabled(hWnd))
|
||||||
|
mesg=3;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
hMenu=GetMenu(hWnd);
|
||||||
|
hSysMenu=GetSystemMenu(hWnd,FALSE);
|
||||||
|
if (hSysMenu)
|
||||||
|
iSysStat=GetMenuState(hSysMenu,lpAccelTbl->tbl[i].wIDval,MF_BYCOMMAND);
|
||||||
|
else
|
||||||
|
iSysStat=-1;
|
||||||
|
if (hMenu)
|
||||||
|
iStat=GetMenuState(hMenu,lpAccelTbl->tbl[i].wIDval,MF_BYCOMMAND);
|
||||||
|
else
|
||||||
|
iStat=-1;
|
||||||
|
if (iSysStat!=-1)
|
||||||
|
{
|
||||||
|
if (iSysStat & (MF_DISABLED|MF_GRAYED))
|
||||||
|
mesg=4;
|
||||||
|
else
|
||||||
|
mesg=WM_SYSCOMMAND;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (iStat!=-1)
|
||||||
|
{
|
||||||
|
if (IsIconic(hWnd))
|
||||||
|
mesg=5;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (iStat & (MF_DISABLED|MF_GRAYED))
|
||||||
|
mesg=6;
|
||||||
|
else
|
||||||
|
mesg=WM_COMMAND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
mesg=WM_COMMAND;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if ( mesg==WM_COMMAND || mesg==WM_SYSCOMMAND )
|
||||||
|
{
|
||||||
|
dprintf_accel(stddeb,", sending %s, wParam=%0x\n",
|
||||||
|
mesg==WM_COMMAND ? "WM_COMMAND" : "WM_SYSCOMMAND",
|
||||||
|
lpAccelTbl->tbl[i].wIDval);
|
||||||
|
SendMessage16(hWnd, mesg, lpAccelTbl->tbl[i].wIDval,0x00010000L);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
/* some reasons for NOT sending the WM_{SYS}COMMAND message:
|
||||||
|
* #0: unknown (please report!)
|
||||||
|
* #1: for WM_KEYUP,WM_SYKEYUP
|
||||||
|
* #2: mouse is captured
|
||||||
|
* #3: window is disabled
|
||||||
|
* #4: it's a disabled system menu option
|
||||||
|
* #5: it's a menu option, but window is iconic
|
||||||
|
* #6: it's a menu option, but disabled
|
||||||
|
*/
|
||||||
|
dprintf_accel(stddeb,", but won't send WM_{SYS}COMMAND, reason is #%d\n",mesg);
|
||||||
|
}
|
||||||
|
GlobalUnlock16(hAccel);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
GlobalUnlock16(hAccel);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
|
@ -524,8 +524,10 @@ static LRESULT MSG_SendMessage( HQUEUE16 hDestQueue, HWND hwnd, UINT msg,
|
||||||
|
|
||||||
dprintf_sendmsg(stddeb,"%*ssm: smResult = %08x\n", prevSMRL, "", (unsigned)queue->smResult );
|
dprintf_sendmsg(stddeb,"%*ssm: smResult = %08x\n", prevSMRL, "", (unsigned)queue->smResult );
|
||||||
|
|
||||||
|
if (queue->smResult) { /* FIXME, smResult should always be set */
|
||||||
queue->smResult->lResult = queue->SendMessageReturn;
|
queue->smResult->lResult = queue->SendMessageReturn;
|
||||||
queue->smResult->bPending = FALSE;
|
queue->smResult->bPending = FALSE;
|
||||||
|
}
|
||||||
queue->wakeBits &= ~QS_SMRESULT;
|
queue->wakeBits &= ~QS_SMRESULT;
|
||||||
|
|
||||||
if( queue->smResult != &qCtrl )
|
if( queue->smResult != &qCtrl )
|
||||||
|
@ -637,7 +639,7 @@ static BOOL MSG_PeekMessage( LPMSG16 msg, HWND hwnd, WORD first, WORD last,
|
||||||
msg->message = WM_QUIT;
|
msg->message = WM_QUIT;
|
||||||
msg->wParam = msgQueue->wExitCode;
|
msg->wParam = msgQueue->wExitCode;
|
||||||
msg->lParam = 0;
|
msg->lParam = 0;
|
||||||
if( !peek ) msgQueue->wPostQMsg = 0;
|
if (flags & PM_REMOVE) msgQueue->wPostQMsg = 0;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -902,6 +904,7 @@ BOOL16 PostAppMessage16( HTASK16 hTask, UINT16 message, WPARAM16 wParam,
|
||||||
LRESULT SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)
|
LRESULT SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
WND * wndPtr;
|
WND * wndPtr;
|
||||||
|
WND **list, **ppWnd;
|
||||||
LRESULT ret;
|
LRESULT ret;
|
||||||
|
|
||||||
#ifdef CONFIG_IPC
|
#ifdef CONFIG_IPC
|
||||||
|
@ -912,8 +915,11 @@ LRESULT SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)
|
||||||
if (hwnd == HWND_BROADCAST16)
|
if (hwnd == HWND_BROADCAST16)
|
||||||
{
|
{
|
||||||
dprintf_msg(stddeb,"SendMessage // HWND_BROADCAST !\n");
|
dprintf_msg(stddeb,"SendMessage // HWND_BROADCAST !\n");
|
||||||
for (wndPtr = WIN_GetDesktop()->child; wndPtr; wndPtr = wndPtr->next)
|
list = WIN_BuildWinArray( WIN_GetDesktop() );
|
||||||
|
for (ppWnd = list; *ppWnd; ppWnd++)
|
||||||
{
|
{
|
||||||
|
wndPtr = *ppWnd;
|
||||||
|
if (!IsWindow(wndPtr->hwndSelf)) continue;
|
||||||
if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION)
|
if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION)
|
||||||
{
|
{
|
||||||
dprintf_msg(stddeb,"BROADCAST Message to hWnd=%04x m=%04X w=%04lX l=%08lX !\n",
|
dprintf_msg(stddeb,"BROADCAST Message to hWnd=%04x m=%04X w=%04lX l=%08lX !\n",
|
||||||
|
@ -921,6 +927,7 @@ LRESULT SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)
|
||||||
SendMessage16( wndPtr->hwndSelf, msg, wParam, lParam );
|
SendMessage16( wndPtr->hwndSelf, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
HeapFree( SystemHeap, 0, list );
|
||||||
dprintf_msg(stddeb,"SendMessage // End of HWND_BROADCAST !\n");
|
dprintf_msg(stddeb,"SendMessage // End of HWND_BROADCAST !\n");
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
@ -975,16 +982,20 @@ LRESULT SendMessage16( HWND16 hwnd, UINT16 msg, WPARAM16 wParam, LPARAM lParam)
|
||||||
LRESULT SendMessage32A(HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
LRESULT SendMessage32A(HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
WND * wndPtr;
|
WND * wndPtr;
|
||||||
|
WND **list, **ppWnd;
|
||||||
LRESULT ret;
|
LRESULT ret;
|
||||||
|
|
||||||
if (hwnd == HWND_BROADCAST32)
|
if (hwnd == HWND_BROADCAST32)
|
||||||
{
|
{
|
||||||
for (wndPtr = WIN_GetDesktop()->child; wndPtr; wndPtr = wndPtr->next)
|
list = WIN_BuildWinArray( WIN_GetDesktop() );
|
||||||
|
for (ppWnd = list; *ppWnd; ppWnd++)
|
||||||
{
|
{
|
||||||
/* FIXME: should use something like EnumWindows here */
|
wndPtr = *ppWnd;
|
||||||
|
if (!IsWindow(wndPtr->hwndSelf)) continue;
|
||||||
if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION)
|
if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION)
|
||||||
SendMessage32A( wndPtr->hwndSelf, msg, wParam, lParam );
|
SendMessage32A( wndPtr->hwndSelf, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
HeapFree( SystemHeap, 0, list );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1031,16 +1042,20 @@ LRESULT SendMessage32A(HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
||||||
LRESULT SendMessage32W(HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
LRESULT SendMessage32W(HWND32 hwnd, UINT32 msg, WPARAM32 wParam, LPARAM lParam)
|
||||||
{
|
{
|
||||||
WND * wndPtr;
|
WND * wndPtr;
|
||||||
|
WND **list, **ppWnd;
|
||||||
LRESULT ret;
|
LRESULT ret;
|
||||||
|
|
||||||
if (hwnd == HWND_BROADCAST32)
|
if (hwnd == HWND_BROADCAST32)
|
||||||
{
|
{
|
||||||
for (wndPtr = WIN_GetDesktop()->child; wndPtr; wndPtr = wndPtr->next)
|
list = WIN_BuildWinArray( WIN_GetDesktop() );
|
||||||
|
for (ppWnd = list; *ppWnd; ppWnd++)
|
||||||
{
|
{
|
||||||
/* FIXME: should use something like EnumWindows here */
|
wndPtr = *ppWnd;
|
||||||
|
if (!IsWindow(wndPtr->hwndSelf)) continue;
|
||||||
if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION)
|
if (wndPtr->dwStyle & WS_POPUP || wndPtr->dwStyle & WS_CAPTION)
|
||||||
SendMessage32W( wndPtr->hwndSelf, msg, wParam, lParam );
|
SendMessage32W( wndPtr->hwndSelf, msg, wParam, lParam );
|
||||||
}
|
}
|
||||||
|
HeapFree( SystemHeap, 0, list );
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -5,12 +5,15 @@
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <stdio.h>
|
||||||
|
#include <malloc.h>
|
||||||
#include "windows.h"
|
#include "windows.h"
|
||||||
#include "dlgs.h"
|
#include "dlgs.h"
|
||||||
#include "module.h"
|
#include "module.h"
|
||||||
#include "win.h"
|
#include "win.h"
|
||||||
#include "resource.h"
|
#include "resource.h"
|
||||||
#include "task.h"
|
#include "task.h"
|
||||||
|
#include "string32.h"
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
LPCSTR title;
|
LPCSTR title;
|
||||||
|
@ -171,10 +174,17 @@ LRESULT SystemMessageBoxProc(HWND hwnd,UINT message,WPARAM16 wParam,LPARAM lPara
|
||||||
}
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* MessageBox [USER.1]
|
* MessageBox16 (USER.1)
|
||||||
*/
|
*/
|
||||||
|
INT16 MessageBox16( HWND16 hwnd, LPCSTR text, LPCSTR title, UINT16 type )
|
||||||
|
{
|
||||||
|
return MessageBox32A( hwnd, text, title, type );
|
||||||
|
}
|
||||||
|
|
||||||
int MessageBox(HWND hWnd, LPCSTR text, LPCSTR title, WORD type)
|
/**************************************************************************
|
||||||
|
* MessageBox32A (USER32.390)
|
||||||
|
*/
|
||||||
|
INT32 MessageBox32A( HWND32 hWnd, LPCSTR text, LPCSTR title, UINT32 type )
|
||||||
{
|
{
|
||||||
HANDLE16 handle;
|
HANDLE16 handle;
|
||||||
MSGBOX mbox;
|
MSGBOX mbox;
|
||||||
|
@ -194,12 +204,38 @@ int MessageBox(HWND hWnd, LPCSTR text, LPCSTR title, WORD type)
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**************************************************************************
|
||||||
|
* MessageBox32W (USER32.395)
|
||||||
|
*/
|
||||||
|
INT32 MessageBox32W( HWND32 hWnd, LPCWSTR text, LPCWSTR title, UINT32 type )
|
||||||
|
{
|
||||||
|
HANDLE16 handle;
|
||||||
|
MSGBOX mbox;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
mbox.title = title?STRING32_DupUniToAnsi(title):NULL;
|
||||||
|
mbox.text = text?STRING32_DupUniToAnsi(text):NULL;
|
||||||
|
mbox.type = type;
|
||||||
|
|
||||||
|
fprintf(stderr,"MessageBox(%s,%s)\n",mbox.text,mbox.title);
|
||||||
|
handle = SYSRES_LoadResource( SYSRES_DIALOG_MSGBOX );
|
||||||
|
if (!handle) return 0;
|
||||||
|
ret = DialogBoxIndirectParam16( WIN_GetWindowInstance(hWnd),
|
||||||
|
handle, hWnd,
|
||||||
|
MODULE_GetWndProcEntry16("SystemMessageBoxProc"),
|
||||||
|
(LONG)&mbox );
|
||||||
|
SYSRES_FreeResource( handle );
|
||||||
|
if (title) free(mbox.title);
|
||||||
|
if (text) free(mbox.text);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
/**************************************************************************
|
/**************************************************************************
|
||||||
* FatalAppExit [USER.137]
|
* FatalAppExit [USER.137]
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void FatalAppExit(UINT fuAction, LPCSTR str)
|
void FatalAppExit(UINT fuAction, LPCSTR str)
|
||||||
{
|
{
|
||||||
MessageBox(0, str, NULL, MB_SYSTEMMODAL | MB_OK);
|
MessageBox16(0, str, NULL, MB_SYSTEMMODAL | MB_OK);
|
||||||
TASK_KillCurrentTask(0);
|
TASK_KillCurrentTask(0);
|
||||||
}
|
}
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "queue.h"
|
#include "queue.h"
|
||||||
#include "gdi.h"
|
#include "gdi.h"
|
||||||
#include "dce.h"
|
#include "dce.h"
|
||||||
|
#include "heap.h"
|
||||||
#include "stddebug.h"
|
#include "stddebug.h"
|
||||||
/* #define DEBUG_WIN */
|
/* #define DEBUG_WIN */
|
||||||
#include "debug.h"
|
#include "debug.h"
|
||||||
|
@ -251,6 +252,7 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
HRGN32 hrgn;
|
HRGN32 hrgn;
|
||||||
RECT32 rectClient;
|
RECT32 rectClient;
|
||||||
WND* wndPtr;
|
WND* wndPtr;
|
||||||
|
WND **list, **ppWnd;
|
||||||
|
|
||||||
if (!hwnd) hwnd = GetDesktopWindow32();
|
if (!hwnd) hwnd = GetDesktopWindow32();
|
||||||
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
if (!(wndPtr = WIN_FindWndPtr( hwnd ))) return FALSE;
|
||||||
|
@ -407,8 +409,12 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (wndPtr = wndPtr->child; wndPtr; wndPtr = wndPtr->next)
|
list = WIN_BuildWinArray( wndPtr );
|
||||||
if( wndPtr->dwStyle & WS_VISIBLE )
|
for (ppWnd = list; *ppWnd; ppWnd++)
|
||||||
|
{
|
||||||
|
wndPtr = *ppWnd;
|
||||||
|
if (!IsWindow(wndPtr->hwndSelf)) continue;
|
||||||
|
if (wndPtr->dwStyle & WS_VISIBLE)
|
||||||
{
|
{
|
||||||
SetRectRgn( hrgn, wndPtr->rectWindow.left,
|
SetRectRgn( hrgn, wndPtr->rectWindow.left,
|
||||||
wndPtr->rectWindow.top,
|
wndPtr->rectWindow.top,
|
||||||
|
@ -421,11 +427,22 @@ BOOL32 PAINT_RedrawWindow( HWND32 hwnd, const RECT32 *rectUpdate,
|
||||||
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, hrgn, flags,
|
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, hrgn, flags,
|
||||||
RDW_C_USEHRGN );
|
RDW_C_USEHRGN );
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
HeapFree( SystemHeap, 0, list );
|
||||||
DeleteObject32( hrgn );
|
DeleteObject32( hrgn );
|
||||||
if (control & RDW_C_DELETEHRGN) DeleteObject32( hrgnUpdate );
|
if (control & RDW_C_DELETEHRGN) DeleteObject32( hrgnUpdate );
|
||||||
}
|
}
|
||||||
else for (wndPtr = wndPtr->child; wndPtr; wndPtr = wndPtr->next)
|
else
|
||||||
|
{
|
||||||
|
list = WIN_BuildWinArray( wndPtr );
|
||||||
|
for (ppWnd = list; *ppWnd; ppWnd++)
|
||||||
|
{
|
||||||
|
wndPtr = *ppWnd;
|
||||||
|
if (IsWindow( wndPtr->hwndSelf ))
|
||||||
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, 0, flags, 0 );
|
PAINT_RedrawWindow( wndPtr->hwndSelf, NULL, 0, flags, 0 );
|
||||||
|
}
|
||||||
|
HeapFree( SystemHeap, 0, list );
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
|
|
@ -1607,14 +1607,30 @@ void SetWindowText32W( HWND32 hwnd, LPCWSTR lpString )
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* GetWindowTextLength (USER.38)
|
* GetWindowTextLength16 (USER.38)
|
||||||
*/
|
*/
|
||||||
int GetWindowTextLength(HWND hwnd)
|
INT16 GetWindowTextLength16( HWND16 hwnd )
|
||||||
{
|
{
|
||||||
return (int)SendMessage16(hwnd, WM_GETTEXTLENGTH, 0, 0 );
|
return (INT16)SendMessage16( hwnd, WM_GETTEXTLENGTH, 0, 0 );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* GetWindowTextLength32A (USER32.309)
|
||||||
|
*/
|
||||||
|
INT32 GetWindowTextLength32A( HWND32 hwnd )
|
||||||
|
{
|
||||||
|
return SendMessage32A( hwnd, WM_GETTEXTLENGTH, 0, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************
|
||||||
|
* GetWindowTextLength32W (USER32.309)
|
||||||
|
*/
|
||||||
|
INT32 GetWindowTextLength32W( HWND32 hwnd )
|
||||||
|
{
|
||||||
|
return SendMessage32W( hwnd, WM_GETTEXTLENGTH, 0, 0 );
|
||||||
|
}
|
||||||
|
|
||||||
/*******************************************************************
|
/*******************************************************************
|
||||||
* IsWindow (USER.47) (USER32.347)
|
* IsWindow (USER.47) (USER32.347)
|
||||||
*/
|
*/
|
||||||
|
|
Loading…
Reference in New Issue