Release 960218
Sun Feb 18 16:35:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch> * [controls/desktop.c] Look for the wallpaper file in the Windows directory. * [controls/menu.c] Fixed swapped parameters in SetMenuItemBitmaps(). Create a separator in MENU_SetItemData() when the string is NULL. * [file/dosfs.c] DOSFS_FindNext: don't return '.' and '..' in a drive root dir. * [files/file.c] Added a DOS_FILE structure to store per-file information (not really used yet). Fixed _lread and _hread to check the size of the buffer before calling Unix read() to avoid EFAULT error. * [misc/exec.c] Return TRUE in WinHelp() for HELP_QUIT to quiet Notepad on exit. * [miscemu/instr.c] Call DOSMEM_Alarm() in INSTR_ReplaceSelector(). This should fix programs that poll the BIOS counter, provided they reload the selector on every read. * [miscemu/int21.c] Re-implemented FindFirst/FindNext for FCB calls. * [windows/message.c] [windows/winpos.c] Merged MSG_GetWindowForEvent() and WINPOS_WindowFromPoint(). * [windows/nonclient.c] [windows/win.c] [include/windows.h] Added a per-window WIN_MANAGED flag; only windows that have a dialog frame or a sizing border are managed. Sat Feb 17 18:25:00 1996 Thomas Sandford <tdgsandf@prds-grn.demon.co.uk> * [if1632/Makefile.in] Added -g flag to compilation of .c files generated from *32.spec. * [if1632/gdi32.spec] Numerous additional functions implemented. * if1632/user32.spec] wsprintfA maps to vsprintf not wsprintf Numerous additional functions implemented. * [include/gdi.h] [objects/gdiobj.c] New #define MAGIC_DONTCARE added. This is used in GDI_GetObjPtr to enable getting a pointer to a GDI object of unknow type. * [win32/gdi32.c] New file. * [win32/param32.c] WIN32_MoveToEx() - handle NULL pointer argument. * [win32/user32.c] USER32_InvalidateRect - handle passing of a NULL pointer. USER32_SetTimer - New function. * [files/directory.c] Fixed DIR_Init() (off by one in allocation of space for environment variables). * [files/drive.c] Added <sys/types.h> to #includes (prerequisite for <sys/stat.h> on FreeBSD). Fri Feb 16 10:26:56 1996 Andreas Kirschbaum <ank@rbg.informatik.th-darmstadt.de> * [controls/menu.c] Memory leak plugged. * [controls/edit.c] Erase space with function ExtTextOut(). This eliminates the use of xmalloc(). Memory leak in EDIT_WriteText plugged. * [debugger/db_disasm.c] Operand for scas now is di. * [files/profile.c] PROFILE_GetSection was copying too much data. PROFILE_GetSection now returns the correct value. It was returning the number of unused instead of used bytes. * [objects/dc.c] Corrected two typos in comments. * [objects/font.c] FONT_MatchFont didn't return if it couldn't find any font. * [objects/oembitmap.c] Free object only if it has been allocated. * [windows/scroll.c] Memory leak in ScrollDC plugged. Tue Feb 13 11:17:00 1996 William Magro <wmagro@tc.cornell.edu> * [controls/edit.c] Implemented ES_NOHIDESEL style, shift+click selection, shift+{arrow,home,end,pgup,pgdn} selection. Optimized (de)selection drawing. Changed selection drawing to use correct system colors instead of inverting. Fixed deleting or backspacing across a '\r\n' end of line pair. Selection now anchors correctly. Fixed text leaking and extra garbage problem bug uncovered by change in class style in wine960131. * [controls/widgets.c] Class flags now match those of Windows. Mon Feb 12 21:28:19 1996 Martin von Loewis <loewis@informatik.hu-berlin.de> * [controls/widgets.c] WIDGETS_Init: RELAY32_GetEntryPoint does not take a string anymore. * [if1632/Makefile.in][if1632/relay32.c][include/relay32.h] comctl32.spec ole32.spec winspool.spec: new files. RELAY32_Init: call initialization of new DLLs. RELAY32_GetEntryPoint: expects WIN32_builtin* now. RELAY32_MakeFakeModule: new function. * [if1632/gdi32.spec][if1632/kernel32.spec][if1632/user32.spec] Added Win95 functions. Ordinals now differ from both NT and Win95 HeapCreate, CreateDialogIndirectParamA, CreateDialogIndirectParamW, CreateDialogParamA, CreateDialogParamW, DialogBoxIndirectParamA DialogBoxIndirectParamW, DialogBoxParamA, DialogBoxParamW: new relays. * [if1632/shell32.spec] shell32.spec: renumbered all functions to take into account ordinals. These seem to be identical between NT and Win95. * [include/dialog.h][windows/dialog.c] xBaseUnit,yBaseUnit,DIALOG_DoDialogBox: made non-static. * [include/handle32.h] New handle types VRANGE, HEAP, HEAPITEM. * [include/pe_image.h][loader/pe_image.c] struct w_files: new field builtin. PE_FindExportedFunction: support ordinals. PE_GetProcAddress: call RELAY32_GetEntryPoint for builtins. fixup_imports: support ordinals. PE_LoadImage: prefer directories over segments. * [include/resource.h][win32/resource.c] FindResource32: changed parameter from LPCTSTR to LPCWSTR check LANG_NEUTRAL if LANG_ENGLISH fails. LoadAcceleratorsW,SizeofResource32,AccessResource32: disabled because it's broken. Casted to and from LPWSTR at various places. * [include/string32.h][win32/string32.c] Changed prototypes to take const arguments where appropriate. * [include/struct32.h] New structures DLGTEMPLATE32, DLGITEMTEMPLATE32. * [tools/build.c] BuildSpec32Files: generate Base value into code, generate call to RELAY32_MakeFakeModule. * [win32/heap.c] This is still not finished and needs rework. HeapAlloc: renamed to SIMPLE_HeapAlloc, implemented HeapAlloc. HeapCreate: implemented on top of VirtualAlloc, which does not work yet HeapDestroy, HEAP_GrowHeap, HeapFree: new functions. * [win32/memory.c] Support for VRANGE_OBJECT. This is not yet called from any place, and needs more platform specific support MEMORY_FindVrange, MEMORY_IsVrangeFree, MEMORY_InsertVrange, MEMORY_AllocVrange, MEMORY_ReleaseVrange: new functions. * [win32/user32.c] WIN32_CreateWindowExA: don't GlobalAlloc for integer class and window names, as in dialogs. Implemented dialog functions (see user32.spec). * [windows/caret.c] CARET_Initialize: call RELAY32_GetBuiltinDLL. Mon Feb 12 18:52:40 1996 Jim Peterson <jspeter@birch.ee.vt.edu> * [controls/edit.c] Removed commented out #ifdefs for WINELIB. * [tools/makehtml.pl] Put in error checking when trying to open a file. * [libtest/Makefile.in] [libtest/new.c] [libtest/hello4.c] Added two new targets: hello4 and new. * [include/windows.h] Added definition of DEVMODE structure, although it's not yet used. Modified various API functions from CreateDC() to Escape(), in order to make them more compliant with the strict API definitions. * [include/wintypes.h] Added 'typedef char TCHAR'. It probably should be defined as 'short', but then we would have to support such characters. Also did 'typedef const TCHAR* LPCTSTR' and 'typedef TCHAR* LPTSTR'. Also defined WNDENUMPROC, FONTENUMPROC, GOBJENUMPROC, PROPENUMPROC MFENUMPROC, and HGDIOBJ. Mon Feb 5 16:42:07 1996 Frans van Dorsselaer <dorssel@rulhm1.leidenuniv.nl> * [misc/commdlg.c] Patched a bug that occurred in the internal COMMDLG module for the FileOpen(), FileSave() and FileSaveAs() functions. The file-type combobox is now handled correctly. Fri Feb 2 22:52:58 1996 Roman Dolejsi <roman@sorry.vse.cz> * [resources/sysres_Cz.rc] Added support for Czech [Cz] language. Thu Feb 1 00:35:04 1996 Philippe De Muyter <phdm@info.ucl.ac.be> * [objects/font.c] FONT_matchfont : for fixed-spacing fonts, allow 'c' if 'm' fails; for variable-spacing fonts : allow '*' if 'p' fails; if asked lfHeight is -1, assume 0. CreateFontIndirect : if font parameter is NULL, issue an error message. CreateFont : null-terminate lfFaceName. ParseFontParms : debug code turned off : too verbose. InitFontsList : recognize *-c-* fonts as fixed-spacing fonts. * [objects/color.c] ColorToPhysical : admit 0xff...... COLORREF's as 0x00...... ones.
This commit is contained in:
parent
7e56f6843b
commit
0c126c7c61
108 changed files with 3545 additions and 1417 deletions
25
ANNOUNCE
25
ANNOUNCE
|
@ -1,15 +1,14 @@
|
|||
This is release 960131 of Wine the MS Windows emulator. This is still a
|
||||
This is release 960218 of Wine the MS Windows emulator. This is still a
|
||||
developer's only release. There are many bugs and many unimplemented API
|
||||
features. Most applications still do not work.
|
||||
|
||||
Patches should be submitted to "wine-new@amscons.com". Please don't forget
|
||||
to include a ChangeLog entry. I'll make a new release every other week.
|
||||
Patches should be submitted to "julliard@lrc.epfl.ch". Please don't
|
||||
forget to include a ChangeLog entry.
|
||||
|
||||
WHAT'S NEW with Wine-960131: (see ChangeLog for details)
|
||||
- New format for drives configuration in wine.conf; please
|
||||
check your configuration files.
|
||||
- Many MDI improvements.
|
||||
- Even more Win32 code.
|
||||
WHAT'S NEW with Wine-960218: (see ChangeLog for details)
|
||||
- Lots of edit control fixes.
|
||||
- Czech language support.
|
||||
- As usual, more Win32 code.
|
||||
- Lots of bug fixes.
|
||||
|
||||
See the README file in the distribution for installation instructions.
|
||||
|
@ -18,10 +17,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
|
||||
from the following locations:
|
||||
|
||||
sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-960131.tar.gz
|
||||
tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-960131.tar.gz
|
||||
ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-960131.tar.gz
|
||||
aris.com:/pub/linux/ALPHA/Wine/development/Wine-960131.tar.gz
|
||||
sunsite.unc.edu:/pub/Linux/ALPHA/wine/Wine-960218.tar.gz
|
||||
tsx-11.mit.edu:/pub/linux/ALPHA/Wine/development/Wine-960218.tar.gz
|
||||
ftp.infomagic.com:/pub/mirrors/linux/wine/development/Wine-960218.tar.gz
|
||||
aris.com:/pub/linux/ALPHA/Wine/development/Wine-960218.tar.gz
|
||||
|
||||
It should also be available from any site that mirrors tsx-11 or sunsite.
|
||||
|
||||
|
@ -49,4 +48,4 @@ and James Youngman.
|
|||
|
||||
--
|
||||
Alexandre Julliard
|
||||
julliard@sunsite.unc.edu
|
||||
julliard@lrc.epfl.ch
|
||||
|
|
238
ChangeLog
238
ChangeLog
|
@ -1,5 +1,241 @@
|
|||
----------------------------------------------------------------------
|
||||
Wed Jan 31 10:58:00 1996 Alexandre Julliard <julliar@sunsite.unc.edu>
|
||||
Sun Feb 18 16:35:54 1996 Alexandre Julliard <julliard@lrc.epfl.ch>
|
||||
|
||||
* [controls/desktop.c]
|
||||
Look for the wallpaper file in the Windows directory.
|
||||
|
||||
* [controls/menu.c]
|
||||
Fixed swapped parameters in SetMenuItemBitmaps().
|
||||
Create a separator in MENU_SetItemData() when the string is NULL.
|
||||
|
||||
* [file/dosfs.c]
|
||||
DOSFS_FindNext: don't return '.' and '..' in a drive root dir.
|
||||
|
||||
* [files/file.c]
|
||||
Added a DOS_FILE structure to store per-file information (not
|
||||
really used yet).
|
||||
Fixed _lread and _hread to check the size of the buffer before
|
||||
calling Unix read() to avoid EFAULT error.
|
||||
|
||||
* [misc/exec.c]
|
||||
Return TRUE in WinHelp() for HELP_QUIT to quiet Notepad on exit.
|
||||
|
||||
* [miscemu/instr.c]
|
||||
Call DOSMEM_Alarm() in INSTR_ReplaceSelector(). This should fix
|
||||
programs that poll the BIOS counter, provided they reload the
|
||||
selector on every read.
|
||||
|
||||
* [miscemu/int21.c]
|
||||
Re-implemented FindFirst/FindNext for FCB calls.
|
||||
|
||||
* [windows/message.c] [windows/winpos.c]
|
||||
Merged MSG_GetWindowForEvent() and WINPOS_WindowFromPoint().
|
||||
|
||||
* [windows/nonclient.c] [windows/win.c] [include/windows.h]
|
||||
Added a per-window WIN_MANAGED flag; only windows that have a
|
||||
dialog frame or a sizing border are managed.
|
||||
|
||||
Sat Feb 17 18:25:00 1996 Thomas Sandford <tdgsandf@prds-grn.demon.co.uk>
|
||||
|
||||
* [if1632/Makefile.in]
|
||||
Added -g flag to compilation of .c files generated from *32.spec.
|
||||
|
||||
* [if1632/gdi32.spec]
|
||||
Numerous additional functions implemented.
|
||||
|
||||
* if1632/user32.spec]
|
||||
wsprintfA maps to vsprintf not wsprintf
|
||||
Numerous additional functions implemented.
|
||||
|
||||
* [include/gdi.h] [objects/gdiobj.c]
|
||||
New #define MAGIC_DONTCARE added. This is used in
|
||||
GDI_GetObjPtr to enable getting a pointer to a GDI object of
|
||||
unknow type.
|
||||
|
||||
* [win32/gdi32.c]
|
||||
New file.
|
||||
|
||||
* [win32/param32.c]
|
||||
WIN32_MoveToEx() - handle NULL pointer argument.
|
||||
|
||||
* [win32/user32.c]
|
||||
USER32_InvalidateRect - handle passing of a NULL pointer.
|
||||
USER32_SetTimer - New function.
|
||||
|
||||
* [files/directory.c]
|
||||
Fixed DIR_Init() (off by one in allocation of space for
|
||||
environment variables).
|
||||
|
||||
* [files/drive.c]
|
||||
Added <sys/types.h> to #includes (prerequisite for <sys/stat.h>
|
||||
on FreeBSD).
|
||||
|
||||
Fri Feb 16 10:26:56 1996 Andreas Kirschbaum <ank@rbg.informatik.th-darmstadt.de>
|
||||
|
||||
* [controls/menu.c]
|
||||
Memory leak plugged.
|
||||
|
||||
* [controls/edit.c]
|
||||
Erase space with function ExtTextOut(). This eliminates the use of
|
||||
xmalloc(). Memory leak in EDIT_WriteText plugged.
|
||||
|
||||
* [debugger/db_disasm.c]
|
||||
Operand for scas now is di.
|
||||
|
||||
* [files/profile.c]
|
||||
PROFILE_GetSection was copying too much data.
|
||||
PROFILE_GetSection now returns the correct value. It was returning
|
||||
the number of unused instead of used bytes.
|
||||
|
||||
* [objects/dc.c]
|
||||
Corrected two typos in comments.
|
||||
|
||||
* [objects/font.c]
|
||||
FONT_MatchFont didn't return if it couldn't find any font.
|
||||
|
||||
* [objects/oembitmap.c]
|
||||
Free object only if it has been allocated.
|
||||
|
||||
* [windows/scroll.c]
|
||||
Memory leak in ScrollDC plugged.
|
||||
|
||||
Tue Feb 13 11:17:00 1996 William Magro <wmagro@tc.cornell.edu>
|
||||
|
||||
* [controls/edit.c]
|
||||
Implemented ES_NOHIDESEL style, shift+click selection,
|
||||
shift+{arrow,home,end,pgup,pgdn} selection. Optimized
|
||||
(de)selection drawing. Changed selection drawing to use correct
|
||||
system colors instead of inverting. Fixed deleting or backspacing
|
||||
across a '\r\n' end of line pair. Selection now anchors
|
||||
correctly. Fixed text leaking and extra garbage problem bug
|
||||
uncovered by change in class style in wine960131.
|
||||
|
||||
* [controls/widgets.c]
|
||||
Class flags now match those of Windows.
|
||||
|
||||
Mon Feb 12 21:28:19 1996 Martin von Loewis <loewis@informatik.hu-berlin.de>
|
||||
|
||||
* [controls/widgets.c]
|
||||
WIDGETS_Init: RELAY32_GetEntryPoint does not take a string anymore.
|
||||
|
||||
* [if1632/Makefile.in][if1632/relay32.c][include/relay32.h]
|
||||
comctl32.spec ole32.spec winspool.spec: new files.
|
||||
RELAY32_Init: call initialization of new DLLs.
|
||||
RELAY32_GetEntryPoint: expects WIN32_builtin* now.
|
||||
RELAY32_MakeFakeModule: new function.
|
||||
|
||||
* [if1632/gdi32.spec][if1632/kernel32.spec][if1632/user32.spec]
|
||||
Added Win95 functions. Ordinals now differ from both NT and Win95
|
||||
HeapCreate, CreateDialogIndirectParamA, CreateDialogIndirectParamW,
|
||||
CreateDialogParamA, CreateDialogParamW, DialogBoxIndirectParamA
|
||||
DialogBoxIndirectParamW, DialogBoxParamA, DialogBoxParamW:
|
||||
new relays.
|
||||
|
||||
* [if1632/shell32.spec]
|
||||
shell32.spec: renumbered all functions to take into account ordinals.
|
||||
These seem to be identical between NT and Win95.
|
||||
|
||||
* [include/dialog.h][windows/dialog.c]
|
||||
xBaseUnit,yBaseUnit,DIALOG_DoDialogBox: made non-static.
|
||||
|
||||
* [include/handle32.h]
|
||||
New handle types VRANGE, HEAP, HEAPITEM.
|
||||
|
||||
* [include/pe_image.h][loader/pe_image.c]
|
||||
struct w_files: new field builtin.
|
||||
PE_FindExportedFunction: support ordinals.
|
||||
PE_GetProcAddress: call RELAY32_GetEntryPoint for builtins.
|
||||
fixup_imports: support ordinals.
|
||||
PE_LoadImage: prefer directories over segments.
|
||||
|
||||
* [include/resource.h][win32/resource.c]
|
||||
FindResource32: changed parameter from LPCTSTR to LPCWSTR
|
||||
check LANG_NEUTRAL if LANG_ENGLISH fails.
|
||||
LoadAcceleratorsW,SizeofResource32,AccessResource32:
|
||||
disabled because it's broken.
|
||||
Casted to and from LPWSTR at various places.
|
||||
|
||||
* [include/string32.h][win32/string32.c]
|
||||
Changed prototypes to take const arguments where appropriate.
|
||||
|
||||
* [include/struct32.h]
|
||||
New structures DLGTEMPLATE32, DLGITEMTEMPLATE32.
|
||||
|
||||
* [tools/build.c]
|
||||
BuildSpec32Files: generate Base value into code, generate call to
|
||||
RELAY32_MakeFakeModule.
|
||||
|
||||
* [win32/heap.c]
|
||||
This is still not finished and needs rework.
|
||||
HeapAlloc: renamed to SIMPLE_HeapAlloc, implemented HeapAlloc.
|
||||
HeapCreate: implemented on top of VirtualAlloc, which does not work yet
|
||||
HeapDestroy, HEAP_GrowHeap, HeapFree: new functions.
|
||||
|
||||
* [win32/memory.c]
|
||||
Support for VRANGE_OBJECT. This is not yet called from any place,
|
||||
and needs more platform specific support
|
||||
MEMORY_FindVrange, MEMORY_IsVrangeFree, MEMORY_InsertVrange,
|
||||
MEMORY_AllocVrange, MEMORY_ReleaseVrange: new functions.
|
||||
|
||||
* [win32/user32.c]
|
||||
WIN32_CreateWindowExA: don't GlobalAlloc for integer class and window
|
||||
names, as in dialogs.
|
||||
Implemented dialog functions (see user32.spec).
|
||||
|
||||
* [windows/caret.c]
|
||||
CARET_Initialize: call RELAY32_GetBuiltinDLL.
|
||||
|
||||
Mon Feb 12 18:52:40 1996 Jim Peterson <jspeter@birch.ee.vt.edu>
|
||||
|
||||
* [controls/edit.c]
|
||||
Removed commented out #ifdefs for WINELIB.
|
||||
|
||||
* [tools/makehtml.pl]
|
||||
Put in error checking when trying to open a file.
|
||||
|
||||
* [libtest/Makefile.in] [libtest/new.c] [libtest/hello4.c]
|
||||
Added two new targets: hello4 and new.
|
||||
|
||||
* [include/windows.h]
|
||||
Added definition of DEVMODE structure, although it's not yet used.
|
||||
Modified various API functions from CreateDC() to Escape(), in
|
||||
order to make them more compliant with the strict API definitions.
|
||||
|
||||
* [include/wintypes.h]
|
||||
Added 'typedef char TCHAR'. It probably should be defined as
|
||||
'short', but then we would have to support such characters. Also did
|
||||
'typedef const TCHAR* LPCTSTR' and 'typedef TCHAR* LPTSTR'.
|
||||
Also defined WNDENUMPROC, FONTENUMPROC, GOBJENUMPROC, PROPENUMPROC
|
||||
MFENUMPROC, and HGDIOBJ.
|
||||
|
||||
Mon Feb 5 16:42:07 1996 Frans van Dorsselaer <dorssel@rulhm1.leidenuniv.nl>
|
||||
|
||||
* [misc/commdlg.c]
|
||||
Patched a bug that occurred in the internal COMMDLG module for the
|
||||
FileOpen(), FileSave() and FileSaveAs() functions. The file-type
|
||||
combobox is now handled correctly.
|
||||
|
||||
Fri Feb 2 22:52:58 1996 Roman Dolejsi <roman@sorry.vse.cz>
|
||||
|
||||
* [resources/sysres_Cz.rc]
|
||||
Added support for Czech [Cz] language.
|
||||
|
||||
Thu Feb 1 00:35:04 1996 Philippe De Muyter <phdm@info.ucl.ac.be>
|
||||
|
||||
* [objects/font.c]
|
||||
FONT_matchfont : for fixed-spacing fonts, allow 'c' if 'm' fails;
|
||||
for variable-spacing fonts : allow '*' if 'p' fails; if asked lfHeight
|
||||
is -1, assume 0.
|
||||
CreateFontIndirect : if font parameter is NULL, issue an error message.
|
||||
CreateFont : null-terminate lfFaceName.
|
||||
ParseFontParms : debug code turned off : too verbose.
|
||||
InitFontsList : recognize *-c-* fonts as fixed-spacing fonts.
|
||||
|
||||
* [objects/color.c]
|
||||
ColorToPhysical : admit 0xff...... COLORREF's as 0x00...... ones.
|
||||
|
||||
--------------------------------------------------------------------
|
||||
Wed Jan 31 10:58:00 1996 Alexandre Julliard <julliard@sunsite.unc.edu>
|
||||
|
||||
* [configure.in]
|
||||
Added --with-dll option to build libwine.so.
|
||||
|
|
2
README
2
README
|
@ -77,7 +77,7 @@ comp.emulators.ms-windows.wine. The Wine FAQ is posted there every
|
|||
month.
|
||||
|
||||
If you add something, or fix a bug, please send a patch ('diff -u'
|
||||
format preferred) to wine-new@amscons.com for inclusion in the next
|
||||
format preferred) to julliard@lrc.epfl.ch for inclusion in the next
|
||||
release.
|
||||
|
||||
--
|
||||
|
|
|
@ -986,7 +986,7 @@ LRESULT ComboLBoxWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
/************************************************************************
|
||||
* DlgDirSelectComboBox [USER.194]
|
||||
*/
|
||||
BOOL DlgDirSelectComboBox(HWND hDlg, LPSTR lpStr, int nIDLBox)
|
||||
BOOL DlgDirSelectComboBox(HWND hDlg, LPSTR lpStr, INT nIDLBox)
|
||||
{
|
||||
fprintf(stdnimp,"DlgDirSelectComboBox("NPFMT", '%s', %d) \n",
|
||||
hDlg, lpStr, nIDLBox);
|
||||
|
@ -998,7 +998,7 @@ BOOL DlgDirSelectComboBox(HWND hDlg, LPSTR lpStr, int nIDLBox)
|
|||
* DlgDirListComboBox [USER.195]
|
||||
*/
|
||||
INT DlgDirListComboBox( HWND hDlg, SEGPTR path, INT idCBox,
|
||||
INT idStatic, WORD wType )
|
||||
INT idStatic, UINT wType )
|
||||
{
|
||||
INT ret = 0;
|
||||
|
||||
|
|
|
@ -2,9 +2,7 @@
|
|||
* Desktop window class.
|
||||
*
|
||||
* Copyright 1994 Alexandre Julliard
|
||||
|
||||
static char Copyright[] = "Copyright Alexandre Julliard, 1994";
|
||||
*/
|
||||
*/
|
||||
|
||||
#include <fcntl.h>
|
||||
#include <stdio.h>
|
||||
|
@ -13,6 +11,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1994";
|
|||
#include <unistd.h>
|
||||
#include "win.h"
|
||||
#include "desktop.h"
|
||||
#include "directory.h"
|
||||
#include "dos_fs.h"
|
||||
#include "graphics.h"
|
||||
|
||||
|
@ -34,7 +33,17 @@ static HBITMAP DESKTOP_LoadBitmap( HDC hdc, const char *filename )
|
|||
|
||||
/* Read all the file into memory */
|
||||
|
||||
if (!(unixFileName = DOSFS_GetUnixFileName( filename, TRUE ))) return 0;
|
||||
if (!(unixFileName = DOSFS_GetUnixFileName( filename, TRUE )))
|
||||
{
|
||||
int len = DIR_GetWindowsUnixDir( NULL, 0 );
|
||||
if (!(buffer = malloc( len + strlen(filename) + 2 ))) return 0;
|
||||
DIR_GetWindowsUnixDir( buffer, len + 1 );
|
||||
strcat( buffer, "/" );
|
||||
strcat( buffer, filename );
|
||||
unixFileName = DOSFS_GetUnixFileName( buffer, TRUE );
|
||||
free( buffer );
|
||||
if (!unixFileName) return 0;
|
||||
}
|
||||
if ((file = open( unixFileName, O_RDONLY )) == -1) return 0;
|
||||
size = lseek( file, 0, SEEK_END );
|
||||
if (!(buffer = (char *)malloc( size )))
|
||||
|
|
338
controls/edit.c
338
controls/edit.c
|
@ -2,9 +2,8 @@
|
|||
* Edit control
|
||||
*
|
||||
* Copyright David W. Metcalfe, 1994
|
||||
* Copyright William Magro, 1995, 1996
|
||||
*
|
||||
* Release 3, July 1994
|
||||
* April 1995 bug fixes (William Magro)
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -50,7 +49,6 @@ typedef struct
|
|||
HANDLE hText; /* handle to text buffer */
|
||||
INT *CharWidths; /* widths of chars in font */
|
||||
unsigned int *textptrs; /* list of line offsets */
|
||||
char *BlankLine; /* to fill blank lines quickly */
|
||||
int CurrCol; /* current column */
|
||||
int CurrLine; /* current line */
|
||||
int WndCol; /* current window column */
|
||||
|
@ -78,8 +76,8 @@ typedef struct
|
|||
#define EditBufStartLen(hwnd) (GetWindowLong(hwnd,GWL_STYLE) & ES_MULTILINE \
|
||||
? EDITLEN : ENTRYLEN)
|
||||
#define CurrChar (EDIT_TextLine(hwnd, es->CurrLine) + es->CurrCol)
|
||||
#define SelMarked(es) ((es)->SelBegLine != 0 || (es)->SelBegCol != 0 || \
|
||||
(es)->SelEndLine != 0 || (es)->SelEndCol != 0)
|
||||
#define SelMarked(es) (((es)->SelBegCol != (es)->SelEndCol) || \
|
||||
((es)->SelBegLine != (es)->SelEndLine))
|
||||
#define ROUNDUP(numer, denom) (((numer) % (denom)) \
|
||||
? ((((numer) + (denom)) / (denom)) * (denom)) \
|
||||
: (numer) + (denom))
|
||||
|
@ -459,11 +457,12 @@ static void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
|||
HDC hdc;
|
||||
HANDLE hStr;
|
||||
char *str, *cp, *cp1;
|
||||
int diff=0, num_spaces, tabwidth, scol;
|
||||
int diff=0, tabwidth, scol;
|
||||
HRGN hrgnClip;
|
||||
COLORREF oldTextColor, oldBkgdColor;
|
||||
HFONT oldfont;
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
RECT rc2;
|
||||
|
||||
dprintf_edit(stddeb,"EDIT_WriteText lp=%s, off=%d, len=%d, row=%d, col=%d, reverse=%d\n", lp, off, len, row, col, reverse);
|
||||
|
||||
|
@ -478,6 +477,7 @@ static void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
|||
str = (char *)EDIT_HeapLock(hwnd, hStr);
|
||||
hrgnClip = CreateRectRgnIndirect(rc);
|
||||
SelectClipRgn(hdc, hrgnClip);
|
||||
DeleteObject(hrgnClip);
|
||||
|
||||
if (es->hFont)
|
||||
oldfont = (HFONT)SelectObject(hdc, (HANDLE)es->hFont);
|
||||
|
@ -495,21 +495,12 @@ static void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
|||
{
|
||||
oldBkgdColor = GetBkColor(hdc);
|
||||
oldTextColor = GetTextColor(hdc);
|
||||
SetBkColor(hdc, oldTextColor);
|
||||
SetTextColor(hdc, oldBkgdColor);
|
||||
SetBkColor(hdc, GetSysColor(COLOR_HIGHLIGHT));
|
||||
SetTextColor(hdc, GetSysColor(COLOR_HIGHLIGHTTEXT));
|
||||
}
|
||||
else /* -Wall does not see the use of if */
|
||||
oldTextColor = oldBkgdColor = 0;
|
||||
|
||||
if (strlen(es->BlankLine) < (es->ClientWidth / es->CharWidths[32]) + 2)
|
||||
{
|
||||
dprintf_edit( stddeb, "EDIT_WriteText: realloc\n" );
|
||||
es->BlankLine = xrealloc(es->BlankLine,
|
||||
(es->ClientWidth / es->CharWidths[32]) + 2);
|
||||
memset(es->BlankLine, ' ', (es->ClientWidth / es->CharWidths[32]) + 2);
|
||||
es->BlankLine[(es->ClientWidth / es->CharWidths[32]) + 1] = 0;
|
||||
}
|
||||
|
||||
if ((es->PasswordChar && GetWindowLong( hwnd, GWL_STYLE ) & ES_PASSWORD))
|
||||
{
|
||||
int len = strlen(str);
|
||||
|
@ -525,8 +516,8 @@ static void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
|||
TextOut(hdc, col - diff, row * es->txtht, str, (int)(cp - str));
|
||||
scol = EDIT_StrWidth(hwnd, str, (int)(cp - str), 0);
|
||||
tabwidth = EDIT_CharWidth(hwnd, VK_TAB, scol);
|
||||
num_spaces = tabwidth / es->CharWidths[32] + 1;
|
||||
TextOut(hdc, scol, row * es->txtht, es->BlankLine, num_spaces);
|
||||
SetRect(&rc2, scol, row * es->txtht, scol+tabwidth, (row + 1) * es->txtht);
|
||||
ExtTextOut(hdc, 0, 0, ETO_OPAQUE, &rc2, "", 0, NULL);
|
||||
cp++;
|
||||
scol += tabwidth;
|
||||
|
||||
|
@ -535,8 +526,8 @@ static void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
|||
TextOut(hdc, scol, row * es->txtht, cp, (int)(cp1 - cp));
|
||||
scol += EDIT_StrWidth(hwnd, cp, (int)(cp1 - cp), scol);
|
||||
tabwidth = EDIT_CharWidth(hwnd, VK_TAB, scol);
|
||||
num_spaces = tabwidth / es->CharWidths[32] + 1;
|
||||
TextOut(hdc, scol, row * es->txtht, es->BlankLine, num_spaces);
|
||||
SetRect(&rc2, scol, row * es->txtht, scol+tabwidth, (row + 1) * es->txtht);
|
||||
ExtTextOut( hdc, 0, 0, ETO_OPAQUE, &rc2, "", 0, NULL );
|
||||
cp = ++cp1;
|
||||
scol += tabwidth;
|
||||
}
|
||||
|
@ -551,13 +542,11 @@ static void EDIT_WriteText(HWND hwnd, char *lp, int off, int len, int row,
|
|||
}
|
||||
|
||||
/* blank out remainder of line if appropriate */
|
||||
if (blank)
|
||||
if (blank && ((rc->right - col) > len))
|
||||
{
|
||||
if ((rc->right - col) > len)
|
||||
{
|
||||
num_spaces = (rc->right - col - len) / es->CharWidths[32];
|
||||
TextOut(hdc, col + len, row * es->txtht, es->BlankLine, num_spaces);
|
||||
}
|
||||
SetRect( &rc2, col + len, row * es->txtht,
|
||||
rc->right, (row + 1) * es->txtht );
|
||||
ExtTextOut( hdc, 0, 0, ETO_OPAQUE, &rc2, "", 0, NULL );
|
||||
}
|
||||
|
||||
if (es->hFont)
|
||||
|
@ -643,7 +632,7 @@ static void EDIT_WriteTextLine(HWND hwnd, RECT *rect, int y)
|
|||
}
|
||||
len = MIN(lnlen, rc.right - rc.left);
|
||||
|
||||
if (SelMarked(es))
|
||||
if (SelMarked(es) && (es->HaveFocus))
|
||||
{
|
||||
sbl = es->SelBegLine;
|
||||
sel = es->SelEndLine;
|
||||
|
@ -1142,11 +1131,21 @@ static void EDIT_DelKey(HWND hwnd)
|
|||
RECT rc;
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
char *currchar = CurrChar;
|
||||
BOOL repaint = *currchar == '\n';
|
||||
BOOL repaint;
|
||||
|
||||
if (IsMultiLine(hwnd) && *currchar == '\n' && *(currchar + 1) == '\0')
|
||||
if (IsMultiLine(hwnd) && !strncmp(currchar,"\r\n\0",3))
|
||||
return;
|
||||
strcpy(currchar, currchar + 1);
|
||||
|
||||
if(*currchar == '\n') {
|
||||
repaint = TRUE;
|
||||
strcpy(currchar, currchar + 1);
|
||||
} else if (*currchar == '\r') {
|
||||
repaint = TRUE;
|
||||
strcpy(currchar, currchar + 2);
|
||||
} else {
|
||||
repaint = FALSE;
|
||||
strcpy(currchar, currchar + 1);
|
||||
}
|
||||
NOTIFY_PARENT(hwnd, EN_UPDATE);
|
||||
|
||||
if (repaint)
|
||||
|
@ -1304,11 +1303,9 @@ static void EDIT_ClearText(HWND hwnd)
|
|||
char *text;
|
||||
|
||||
dprintf_edit(stddeb,"EDIT_ClearText %d\n",blen);
|
||||
/*#ifndef WINELIB*/
|
||||
es->hText = EDIT_HeapReAlloc(hwnd, es->hText, blen);
|
||||
text = EDIT_HeapLock(hwnd, es->hText);
|
||||
memset(text, 0, blen);
|
||||
/*#endif*/
|
||||
es->textlen = 0;
|
||||
es->wlines = 0;
|
||||
es->CurrLine = es->CurrCol = 0;
|
||||
|
@ -1316,9 +1313,7 @@ static void EDIT_ClearText(HWND hwnd)
|
|||
es->wleft = es->wtop = 0;
|
||||
es->textwidth = 0;
|
||||
es->TextChanged = FALSE;
|
||||
/*#ifndef WINELIB*/
|
||||
EDIT_ClearTextPointers(hwnd);
|
||||
/*#endif*/
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -1364,6 +1359,29 @@ static void EDIT_GetLineCol(HWND hwnd, int off, int *line, int *col)
|
|||
#endif
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* EDIT_UpdateSel
|
||||
*
|
||||
* Redraw the current selection, after losing focus, for example.
|
||||
*/
|
||||
static void EDIT_UpdateSel(HWND hwnd)
|
||||
{
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
int y, bbl, bel;
|
||||
RECT rc;
|
||||
|
||||
/* Note which lines need redrawing. */
|
||||
bbl=MIN(es->SelBegLine,es->SelEndLine);
|
||||
bel=MAX(es->SelBegLine,es->SelEndLine);
|
||||
|
||||
/* Redraw the affected lines */
|
||||
GetClientRect(hwnd, &rc);
|
||||
for (y = bbl; y <= bel; y++)
|
||||
{
|
||||
EDIT_WriteTextLine(hwnd, &rc, y);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* EDIT_ClearSel
|
||||
*
|
||||
|
@ -1372,12 +1390,23 @@ static void EDIT_GetLineCol(HWND hwnd, int off, int *line, int *col)
|
|||
static void EDIT_ClearSel(HWND hwnd)
|
||||
{
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
int y, bbl, bel;
|
||||
RECT rc;
|
||||
|
||||
/* Note which lines need redrawing. */
|
||||
bbl=MIN(es->SelBegLine,es->SelEndLine);
|
||||
bel=MAX(es->SelBegLine,es->SelEndLine);
|
||||
|
||||
/* Clear the selection */
|
||||
es->SelBegLine = es->SelBegCol = 0;
|
||||
es->SelEndLine = es->SelEndCol = 0;
|
||||
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
UpdateWindow(hwnd);
|
||||
/* Redraw the affected lines */
|
||||
GetClientRect(hwnd, &rc);
|
||||
for (y = bbl; y <= bel; y++)
|
||||
{
|
||||
EDIT_WriteTextLine(hwnd, &rc, y);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -1412,33 +1441,52 @@ static void EDIT_SaveDeletedText(HWND hwnd, char *deltext, int len,
|
|||
*/
|
||||
static void EDIT_DeleteSel(HWND hwnd)
|
||||
{
|
||||
char *bbl, *bel;
|
||||
char *selStart, *selEnd;
|
||||
int bl, el, bc, ec;
|
||||
int len;
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
|
||||
if (SelMarked(es))
|
||||
{
|
||||
bbl = EDIT_TextLine(hwnd, es->SelBegLine) + es->SelBegCol;
|
||||
bel = EDIT_TextLine(hwnd, es->SelEndLine) + es->SelEndCol;
|
||||
len = (int)(bel - bbl);
|
||||
EDIT_SaveDeletedText(hwnd, bbl, len, es->SelBegLine, es->SelBegCol);
|
||||
/* Get the real beginning and ending lines and columns */
|
||||
bl = es->SelBegLine;
|
||||
el = es->SelEndLine;
|
||||
if ( bl > el ) {
|
||||
bl = el;
|
||||
el = es->SelBegLine;
|
||||
bc = es->SelEndCol;
|
||||
ec = es->SelBegCol;
|
||||
} else if ( bl == el ) {
|
||||
bc = MIN(es->SelBegCol,es->SelEndCol);
|
||||
ec = MAX(es->SelBegCol,es->SelEndCol);
|
||||
} else {
|
||||
bc = es->SelBegCol;
|
||||
ec = es->SelEndCol;
|
||||
}
|
||||
|
||||
selStart = EDIT_TextLine(hwnd, bl) + bc;
|
||||
selEnd = EDIT_TextLine(hwnd, el) + ec;
|
||||
len = (int)(selEnd - selStart);
|
||||
EDIT_SaveDeletedText(hwnd, selStart, len, bl, bc);
|
||||
es->TextChanged = TRUE;
|
||||
strcpy(bbl, bel);
|
||||
EDIT_ClearSel(hwnd);
|
||||
strcpy(selStart, selEnd);
|
||||
|
||||
es->CurrLine = es->SelBegLine;
|
||||
es->CurrCol = es->SelBegCol;
|
||||
es->WndRow = es->SelBegLine - es->wtop;
|
||||
es->CurrLine = bl;
|
||||
es->CurrCol = bc;
|
||||
es->WndRow = bl - es->wtop;
|
||||
if (es->WndRow < 0)
|
||||
{
|
||||
es->wtop = es->SelBegLine;
|
||||
es->wtop = bl;
|
||||
es->WndRow = 0;
|
||||
}
|
||||
es->WndCol = EDIT_StrWidth(hwnd, bbl - es->SelBegCol,
|
||||
es->SelBegCol, 0) - es->wleft;
|
||||
es->WndCol = EDIT_StrWidth(hwnd, selStart - bc, bc, 0) - es->wleft;
|
||||
|
||||
EDIT_BuildTextPointers(hwnd);
|
||||
es->PaintBkgd = TRUE;
|
||||
EDIT_ClearSel(hwnd);
|
||||
|
||||
InvalidateRect(hwnd, NULL, TRUE);
|
||||
UpdateWindow(hwnd);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1475,65 +1523,11 @@ static int EDIT_TextLineNumber(HWND hwnd, char *lp)
|
|||
*/
|
||||
static void EDIT_SetAnchor(HWND hwnd, int row, int col)
|
||||
{
|
||||
BOOL sel = FALSE;
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
|
||||
if (SelMarked(es))
|
||||
{
|
||||
sel = TRUE;
|
||||
EDIT_ClearSel(hwnd);
|
||||
}
|
||||
if (SelMarked(es)) EDIT_ClearSel(hwnd);
|
||||
es->SelBegLine = es->SelEndLine = row;
|
||||
es->SelBegCol = es->SelEndCol = col;
|
||||
if (sel)
|
||||
{
|
||||
InvalidateRect(hwnd, NULL, FALSE);
|
||||
UpdateWindow(hwnd);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* EDIT_WriteSel
|
||||
*
|
||||
* Display selection by reversing pixels in selected text.
|
||||
* If end == -1, selection applies to end of line.
|
||||
*/
|
||||
static void EDIT_WriteSel(HWND hwnd, int y, int start, int end)
|
||||
{
|
||||
RECT rc, rcInvert;
|
||||
int scol, ecol;
|
||||
char *cp;
|
||||
HDC hdc;
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
|
||||
dprintf_edit(stddeb,"EDIT_WriteSel: y=%d start=%d end=%d\n", y, start,end);
|
||||
GetClientRect(hwnd, &rc);
|
||||
|
||||
/* make sure y is within the window */
|
||||
if (y < es->wtop || y > (es->wtop + es->ClientHeight))
|
||||
return;
|
||||
|
||||
/* get pointer to text */
|
||||
cp = EDIT_TextLine(hwnd, y);
|
||||
|
||||
/* get length of line if end == -1 */
|
||||
if (end == -1)
|
||||
end = EDIT_LineLength(hwnd, y);
|
||||
|
||||
scol = EDIT_StrWidth(hwnd, cp, start, 0) - es->wleft;
|
||||
if (scol > rc.right) return;
|
||||
if (scol < rc.left) scol = rc.left;
|
||||
ecol = EDIT_StrWidth(hwnd, cp, end, 0) - es->wleft;
|
||||
if (ecol < rc.left) return;
|
||||
if (ecol > rc.right) ecol = rc.right;
|
||||
|
||||
hdc = GetDC(hwnd);
|
||||
rcInvert.left = scol;
|
||||
rcInvert.top = (y - es->wtop) * es->txtht;
|
||||
rcInvert.right = ecol;
|
||||
rcInvert.bottom = (y - es->wtop + 1) * es->txtht;
|
||||
InvertRect(hdc, (LPRECT) &rcInvert);
|
||||
ReleaseDC(hwnd, hdc);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -1543,10 +1537,11 @@ static void EDIT_WriteSel(HWND hwnd, int y, int start, int end)
|
|||
*/
|
||||
static void EDIT_ExtendSel(HWND hwnd, INT x, INT y)
|
||||
{
|
||||
int bbl, bel, bbc, bec;
|
||||
int bbl, bel, bbc;
|
||||
char *cp;
|
||||
int len, line;
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
RECT rc;
|
||||
|
||||
dprintf_edit(stddeb,"EDIT_ExtendSel: x=%d, y=%d\n", x, y);
|
||||
|
||||
|
@ -1580,53 +1575,21 @@ static void EDIT_ExtendSel(HWND hwnd, INT x, INT y)
|
|||
es->SelEndCol = es->CurrCol;
|
||||
|
||||
bel = es->SelEndLine;
|
||||
bec = es->SelEndCol;
|
||||
|
||||
/* return if no new characters to mark */
|
||||
if (bbl == bel && bbc == bec)
|
||||
return;
|
||||
if (bbl == bel && bbc == es->SelEndCol) return;
|
||||
|
||||
/* put lowest marker first */
|
||||
if (bbl > bel)
|
||||
{
|
||||
SWAP_INT(bbl, bel);
|
||||
SWAP_INT(bbc, bec);
|
||||
}
|
||||
if (bbl == bel && bbc > bec)
|
||||
SWAP_INT(bbc, bec);
|
||||
if (bbl > bel) SWAP_INT(bbl, bel);
|
||||
|
||||
/* Update lines on which selection has changed */
|
||||
GetClientRect(hwnd, &rc);
|
||||
for (y = bbl; y <= bel; y++)
|
||||
{
|
||||
if (y == bbl && y == bel)
|
||||
EDIT_WriteSel(hwnd, y, bbc, bec);
|
||||
else if (y == bbl)
|
||||
EDIT_WriteSel(hwnd, y, bbc, -1);
|
||||
else if (y == bel)
|
||||
EDIT_WriteSel(hwnd, y, 0, bec);
|
||||
else
|
||||
EDIT_WriteSel(hwnd, y, 0, -1);
|
||||
EDIT_WriteTextLine(hwnd, &rc, y);
|
||||
}
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* EDIT_StopMarking
|
||||
*
|
||||
* Stop text marking (selection).
|
||||
*/
|
||||
static void EDIT_StopMarking(HWND hwnd)
|
||||
{
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
|
||||
TextMarking = FALSE;
|
||||
if (es->SelBegLine > es->SelEndLine)
|
||||
{
|
||||
SWAP_INT((es->SelBegLine), (es->SelEndLine));
|
||||
SWAP_INT((es->SelBegCol), (es->SelEndCol));
|
||||
}
|
||||
if (es->SelBegLine == es->SelEndLine && es->SelBegCol > es->SelEndCol)
|
||||
SWAP_INT((es->SelBegCol), (es->SelEndCol));
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
* EDIT_InsertText
|
||||
*
|
||||
|
@ -1804,6 +1767,7 @@ static void EDIT_KeyTyped(HWND hwnd, short ch)
|
|||
EDIT_BuildTextPointers(hwnd);
|
||||
EDIT_End(hwnd);
|
||||
EDIT_Forward(hwnd);
|
||||
EDIT_SetAnchor(hwnd, es->CurrLine, es->CurrCol);
|
||||
|
||||
/* invalidate rest of window */
|
||||
GetClientRect(hwnd, &rc);
|
||||
|
@ -1829,6 +1793,7 @@ static void EDIT_KeyTyped(HWND hwnd, short ch)
|
|||
}
|
||||
es->WndCol += EDIT_CharWidth(hwnd, (BYTE)ch, es->WndCol + es->wleft);
|
||||
es->CurrCol++;
|
||||
EDIT_SetAnchor(hwnd, es->CurrLine, es->CurrCol);
|
||||
EDIT_WriteTextLine(hwnd, NULL, es->wtop + es->WndRow);
|
||||
SetCaretPos(es->WndCol, es->WndRow * es->txtht);
|
||||
ShowCaret(hwnd);
|
||||
|
@ -2222,7 +2187,8 @@ static void EDIT_WM_Paint(HWND hwnd)
|
|||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
|
||||
hdc = BeginPaint(hwnd, &ps);
|
||||
rc = ps.rcPaint;
|
||||
GetClientRect(hwnd, &rc);
|
||||
IntersectClipRect(hdc, rc.left, rc.top, rc.right, rc.bottom);
|
||||
|
||||
dprintf_edit(stddeb,"WM_PAINT: rc=(%ld,%ld), (%ld,%ld)\n", (LONG)rc.left,
|
||||
(LONG)rc.top, (LONG)rc.right, (LONG)rc.bottom);
|
||||
|
@ -2399,12 +2365,6 @@ static long EDIT_WM_Create(HWND hwnd, LONG lParam)
|
|||
es->NumTabStops = 0;
|
||||
es->TabStops = xmalloc( sizeof(short) );
|
||||
|
||||
/* allocate space for a line full of blanks to speed up */
|
||||
/* line filling */
|
||||
es->BlankLine = xmalloc( (es->ClientWidth / es->CharWidths[32]) + 2);
|
||||
memset(es->BlankLine, ' ', (es->ClientWidth / es->CharWidths[32]) + 2);
|
||||
es->BlankLine[(es->ClientWidth / es->CharWidths[32]) + 1] = 0;
|
||||
|
||||
/* set up text cursor for edit class */
|
||||
{
|
||||
char editname[] = "EDIT";
|
||||
|
@ -2491,8 +2451,12 @@ static void EDIT_WM_LButtonDown(HWND hwnd, WORD wParam, LONG lParam)
|
|||
BOOL end = FALSE;
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
ButtonDown = TRUE;
|
||||
|
||||
if ((wParam & MK_SHIFT)) {
|
||||
EDIT_ExtendSel(hwnd, LOWORD(lParam), HIWORD(lParam));
|
||||
return;
|
||||
}
|
||||
|
||||
es->WndRow = HIWORD(lParam) / es->txtht;
|
||||
dprintf_edit( stddeb, "EDIT_LButtonDown: %04x %08lx, WndRow %d\n", wParam,
|
||||
|
@ -2515,9 +2479,9 @@ static void EDIT_WM_LButtonDown(HWND hwnd, WORD wParam, LONG lParam)
|
|||
es->CurrCol = EDIT_PixelToChar(hwnd, es->CurrLine, &(es->WndCol));
|
||||
es->WndCol -= es->wleft;
|
||||
|
||||
ButtonDown = TRUE;
|
||||
ButtonRow = es->CurrLine;
|
||||
ButtonCol = es->CurrCol;
|
||||
EDIT_SetAnchor(hwnd, ButtonRow, ButtonCol);
|
||||
}
|
||||
|
||||
/*********************************************************************
|
||||
|
@ -2527,13 +2491,11 @@ static void EDIT_WM_MouseMove(HWND hwnd, WORD wParam, LONG lParam)
|
|||
{
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
|
||||
if (wParam != MK_LBUTTON)
|
||||
return;
|
||||
if (!(wParam & MK_LBUTTON)) return;
|
||||
|
||||
HideCaret(hwnd);
|
||||
if (ButtonDown)
|
||||
{
|
||||
EDIT_SetAnchor(hwnd, ButtonRow, ButtonCol);
|
||||
TextMarking = TRUE;
|
||||
ButtonDown = FALSE;
|
||||
}
|
||||
|
@ -2582,6 +2544,7 @@ static void EDIT_WM_Char(HWND hwnd, WORD wParam)
|
|||
static void EDIT_WM_KeyDown(HWND hwnd, WORD wParam)
|
||||
{
|
||||
EDITSTATE *es = EDIT_GetEditState(hwnd);
|
||||
BOOL motionKey = FALSE;
|
||||
|
||||
dprintf_edit(stddeb,"EDIT_WM_KeyDown: key=%x\n", wParam);
|
||||
|
||||
|
@ -2589,63 +2552,55 @@ static void EDIT_WM_KeyDown(HWND hwnd, WORD wParam)
|
|||
switch (wParam)
|
||||
{
|
||||
case VK_UP:
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
if (IsMultiLine(hwnd))
|
||||
EDIT_Upward(hwnd);
|
||||
else
|
||||
EDIT_Backward(hwnd);
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_DOWN:
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
if (IsMultiLine(hwnd))
|
||||
EDIT_Downward(hwnd);
|
||||
else
|
||||
EDIT_Forward(hwnd);
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_RIGHT:
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
EDIT_Forward(hwnd);
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_LEFT:
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
EDIT_Backward(hwnd);
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_HOME:
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
EDIT_Home(hwnd);
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_END:
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
EDIT_End(hwnd);
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_PRIOR:
|
||||
if (IsMultiLine(hwnd))
|
||||
{
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
EDIT_KeyVScrollPage(hwnd, SB_PAGEUP);
|
||||
}
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_NEXT:
|
||||
if (IsMultiLine(hwnd))
|
||||
{
|
||||
if (SelMarked(es))
|
||||
EDIT_ClearSel(hwnd);
|
||||
EDIT_KeyVScrollPage(hwnd, SB_PAGEDOWN);
|
||||
}
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
case VK_BACK:
|
||||
|
@ -2666,8 +2621,26 @@ static void EDIT_WM_KeyDown(HWND hwnd, WORD wParam)
|
|||
else
|
||||
EDIT_DelKey(hwnd);
|
||||
break;
|
||||
|
||||
case VK_SHIFT:
|
||||
motionKey = TRUE;
|
||||
break;
|
||||
|
||||
default:
|
||||
ShowCaret(hwnd);
|
||||
return;
|
||||
}
|
||||
|
||||
/* FIXME: GetKeyState appears to have its bits reversed */
|
||||
#if CorrectGetKeyState
|
||||
if(motionKey && (0x80 & GetKeyState(VK_SHIFT))) {
|
||||
#else
|
||||
if(motionKey && (0x01 & GetKeyState(VK_SHIFT))) {
|
||||
#endif
|
||||
EDIT_ExtendSel(hwnd, es->WndCol, es->WndRow*es->txtht);
|
||||
} else {
|
||||
EDIT_SetAnchor(hwnd, es->CurrLine, es->CurrCol);
|
||||
}
|
||||
SetCaretPos(es->WndCol, es->WndRow * es->txtht);
|
||||
ShowCaret(hwnd);
|
||||
}
|
||||
|
@ -2813,6 +2786,7 @@ LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
|
||||
case EM_SETHANDLE:
|
||||
HideCaret(hwnd);
|
||||
EDIT_ClearDeletedText(hwnd);
|
||||
EDIT_SetHandleMsg(hwnd, wParam);
|
||||
SetCaretPos(es->WndCol, es->WndRow * es->txtht);
|
||||
ShowCaret(hwnd);
|
||||
|
@ -2882,7 +2856,6 @@ LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
free(es->textptrs);
|
||||
free(es->CharWidths);
|
||||
free(es->TabStops);
|
||||
free(es->BlankLine);
|
||||
EDIT_HeapFree(hwnd, es->hText);
|
||||
free( EDIT_GetEditState(hwnd) );
|
||||
break;
|
||||
|
@ -2919,9 +2892,14 @@ LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
break;
|
||||
|
||||
case WM_KILLFOCUS:
|
||||
dprintf_edit(stddeb, "WM_KILLFOCUS\n");
|
||||
es->HaveFocus = FALSE;
|
||||
DestroyCaret();
|
||||
if (SelMarked(es)) EDIT_ClearSel(hwnd);
|
||||
if (SelMarked(es))
|
||||
if(GetWindowLong(hwnd,GWL_STYLE) & ES_NOHIDESEL)
|
||||
EDIT_UpdateSel(hwnd);
|
||||
else
|
||||
EDIT_ClearSel(hwnd);
|
||||
NOTIFY_PARENT(hwnd, EN_KILLFOCUS);
|
||||
break;
|
||||
|
||||
|
@ -2938,8 +2916,7 @@ LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
if (GetCapture() != hwnd) break;
|
||||
ReleaseCapture();
|
||||
ButtonDown = FALSE;
|
||||
if (TextMarking)
|
||||
EDIT_StopMarking(hwnd);
|
||||
TextMarking = FALSE;
|
||||
break;
|
||||
|
||||
case WM_MOUSEMOVE:
|
||||
|
@ -2964,7 +2941,9 @@ LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
break;
|
||||
|
||||
case WM_SETFOCUS:
|
||||
dprintf_edit(stddeb, "WM_SETFOCUS\n");
|
||||
es->HaveFocus = TRUE;
|
||||
if (SelMarked(es)) EDIT_UpdateSel(hwnd);
|
||||
CreateCaret(hwnd, 0, 2, es->txtht);
|
||||
SetCaretPos(es->WndCol, es->WndRow * es->txtht);
|
||||
ShowCaret(hwnd);
|
||||
|
@ -2985,6 +2964,7 @@ LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
break;
|
||||
#endif
|
||||
case WM_SETTEXT:
|
||||
EDIT_ClearDeletedText(hwnd);
|
||||
EDIT_WM_SetText(hwnd, lParam);
|
||||
break;
|
||||
|
||||
|
@ -2997,6 +2977,12 @@ LRESULT EditWndProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
|||
EDIT_WM_VScroll(hwnd, wParam, lParam);
|
||||
break;
|
||||
|
||||
case WM_LBUTTONDBLCLK:
|
||||
dprintf_edit(stddeb, "WM_LBUTTONDBLCLK: hwnd=%d, wParam=%x\n",
|
||||
hwnd, wParam);
|
||||
lResult = 0;
|
||||
break;
|
||||
|
||||
default:
|
||||
lResult = DefWindowProc(hwnd, uMsg, wParam, lParam);
|
||||
break;
|
||||
|
|
|
@ -694,6 +694,7 @@ LONG ListBoxDirectory(LPHEADLIST lphl, UINT attrib, LPCSTR filespec)
|
|||
if ((ret = ListBoxAddString(lphl, temp)) == LB_ERR) break;
|
||||
}
|
||||
}
|
||||
free( path );
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
@ -1886,7 +1887,7 @@ LRESULT ListBoxWndProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
|||
/**********************************************************************
|
||||
* DlgDirSelect (USER.99)
|
||||
*/
|
||||
BOOL DlgDirSelect( HWND hDlg, LPSTR lpStr, int id )
|
||||
BOOL DlgDirSelect( HWND hDlg, LPSTR lpStr, INT id )
|
||||
{
|
||||
char buffer[20];
|
||||
INT i;
|
||||
|
@ -1920,7 +1921,7 @@ BOOL DlgDirSelect( HWND hDlg, LPSTR lpStr, int id )
|
|||
/**********************************************************************
|
||||
* DlgDirList (USER.100)
|
||||
*/
|
||||
INT DlgDirList( HWND hDlg, SEGPTR spec, INT idLBox, INT idStatic, WORD attrib )
|
||||
INT DlgDirList( HWND hDlg, SEGPTR spec, INT idLBox, INT idStatic, UINT attrib )
|
||||
{
|
||||
char *filespec = (char *)PTR_SEG_TO_LIN( spec );
|
||||
int drive;
|
||||
|
@ -1934,7 +1935,7 @@ INT DlgDirList( HWND hDlg, SEGPTR spec, INT idLBox, INT idStatic, WORD attrib )
|
|||
hDlg, filespec ? filespec : "NULL",
|
||||
idLBox, idStatic, attrib );
|
||||
|
||||
if (filespec && (filespec[1] == ':'))
|
||||
if (filespec && filespec[0] && (filespec[1] == ':'))
|
||||
{
|
||||
drive = toupper( filespec[0] ) - 'A';
|
||||
filespec += 2;
|
||||
|
@ -2004,4 +2005,5 @@ INT DlgDirList( HWND hDlg, SEGPTR spec, INT idLBox, INT idStatic, WORD attrib )
|
|||
SENDMSG( WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(temp) );
|
||||
}
|
||||
return TRUE;
|
||||
#undef SENDMSG
|
||||
}
|
||||
|
|
|
@ -895,27 +895,39 @@ static void MENU_SelectPrevItem( HWND hwndOwner, HMENU hmenu )
|
|||
*/
|
||||
static BOOL MENU_SetItemData( MENUITEM *item, UINT flags, UINT id, SEGPTR data)
|
||||
{
|
||||
item->item_flags = flags & ~(MF_HILITE | MF_MOUSESELECT);
|
||||
item->item_id = id;
|
||||
HANDLE hPrevText = IS_STRING_ITEM(item->item_flags) ? item->hText : 0;
|
||||
|
||||
SetRectEmpty( &item->rect );
|
||||
if (IS_STRING_ITEM(flags))
|
||||
{
|
||||
char *str = (char *)PTR_SEG_TO_LIN(data);
|
||||
HANDLE hText;
|
||||
|
||||
/* Item beginning with a backspace is a help item */
|
||||
if (*str == '\b')
|
||||
{
|
||||
item->item_flags |= MF_HELP;
|
||||
str++;
|
||||
}
|
||||
if (!(hText = USER_HEAP_ALLOC( strlen(str)+1 ))) return FALSE;
|
||||
item->hText = hText;
|
||||
strcpy( (char *)USER_HEAP_LIN_ADDR( hText ), str );
|
||||
if (!data)
|
||||
{
|
||||
flags |= MF_SEPARATOR;
|
||||
item->hText = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
char *str = (char *)PTR_SEG_TO_LIN(data);
|
||||
HANDLE hText;
|
||||
|
||||
/* Item beginning with a backspace is a help item */
|
||||
if (*str == '\b')
|
||||
{
|
||||
flags |= MF_HELP;
|
||||
str++;
|
||||
}
|
||||
if (!(hText = USER_HEAP_ALLOC( strlen(str)+1 ))) return FALSE;
|
||||
item->hText = hText;
|
||||
strcpy( (char *)USER_HEAP_LIN_ADDR( hText ), str );
|
||||
}
|
||||
}
|
||||
else if (flags & MF_BITMAP) item->hText = (HANDLE)(DWORD)data;
|
||||
else if (flags & MF_OWNERDRAW) SET_OWNERDRAW_DATA( item, data );
|
||||
else item->hText = 0;
|
||||
|
||||
item->item_flags = flags & ~(MF_HILITE | MF_MOUSESELECT);
|
||||
item->item_id = id;
|
||||
SetRectEmpty( &item->rect );
|
||||
if (hPrevText) USER_HEAP_FREE( hPrevText );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
@ -984,6 +996,7 @@ static MENUITEM *MENU_InsertItem( HMENU hMenu, UINT pos, UINT flags )
|
|||
}
|
||||
menu->hItems = hNewItems;
|
||||
menu->nItems++;
|
||||
memset( &newItems[pos], 0, sizeof(*newItems) );
|
||||
return &newItems[pos];
|
||||
}
|
||||
|
||||
|
@ -1022,8 +1035,7 @@ static SEGPTR MENU_ParseResource( SEGPTR res, HMENU hMenu )
|
|||
}
|
||||
else
|
||||
{
|
||||
if (!id && !flags && !*(char *)PTR_SEG_TO_LIN(data))
|
||||
flags |= MF_SEPARATOR; /* FIXME: do this in InsertMenu? */
|
||||
if (!*(char *)PTR_SEG_TO_LIN(data)) data = 0;
|
||||
AppendMenu( hMenu, flags, id, data );
|
||||
}
|
||||
} while (!(flags & MF_END));
|
||||
|
@ -1877,13 +1889,9 @@ BOOL InsertMenu( HMENU hMenu, UINT pos, UINT flags, UINT id, SEGPTR data )
|
|||
{
|
||||
MENUITEM *item;
|
||||
|
||||
if (IS_STRING_ITEM(flags))
|
||||
{
|
||||
if (IS_STRING_ITEM(flags) && data)
|
||||
dprintf_menu( stddeb, "InsertMenu: "NPFMT" %d %04x %04x '%s'\n",
|
||||
hMenu, pos, flags, id,
|
||||
data ? (char *)PTR_SEG_TO_LIN(data) : "#NULL#" );
|
||||
if (!data) return FALSE;
|
||||
}
|
||||
hMenu, pos, flags, id, (char *)PTR_SEG_TO_LIN(data) );
|
||||
else dprintf_menu( stddeb, "InsertMenu: "NPFMT" %d %04x %04x %08lx\n",
|
||||
hMenu, pos, flags, id, (DWORD)data );
|
||||
|
||||
|
@ -1891,7 +1899,6 @@ BOOL InsertMenu( HMENU hMenu, UINT pos, UINT flags, UINT id, SEGPTR data )
|
|||
|
||||
if (!(MENU_SetItemData( item, flags, id, data )))
|
||||
{
|
||||
item->hText = 0;
|
||||
RemoveMenu( hMenu, pos, flags );
|
||||
return FALSE;
|
||||
}
|
||||
|
@ -1928,7 +1935,8 @@ BOOL RemoveMenu(HMENU hMenu, UINT nPos, UINT wFlags)
|
|||
|
||||
/* Remove item */
|
||||
|
||||
if (IS_STRING_ITEM(lpitem->item_flags)) USER_HEAP_FREE( lpitem->hText );
|
||||
if (IS_STRING_ITEM(lpitem->item_flags) && lpitem->hText)
|
||||
USER_HEAP_FREE(lpitem->hText);
|
||||
if (--menu->nItems == 0)
|
||||
{
|
||||
USER_HEAP_FREE( menu->hItems );
|
||||
|
@ -1969,7 +1977,6 @@ BOOL DeleteMenu(HMENU hMenu, UINT nPos, UINT wFlags)
|
|||
BOOL ModifyMenu( HMENU hMenu, UINT pos, UINT flags, UINT id, SEGPTR data )
|
||||
{
|
||||
MENUITEM *item;
|
||||
HANDLE hText = 0;
|
||||
|
||||
if (IS_STRING_ITEM(flags))
|
||||
{
|
||||
|
@ -1983,10 +1990,7 @@ BOOL ModifyMenu( HMENU hMenu, UINT pos, UINT flags, UINT id, SEGPTR data )
|
|||
hMenu, pos, flags, id, (DWORD)data );
|
||||
if (!(item = MENU_FindItem( &hMenu, &pos, flags ))) return FALSE;
|
||||
|
||||
if (IS_STRING_ITEM(item->item_flags)) hText = item->hText;
|
||||
if (!MENU_SetItemData( item, flags, id, data )) return FALSE;
|
||||
if (hText) USER_HEAP_FREE( hText );
|
||||
return TRUE;
|
||||
return MENU_SetItemData( item, flags, id, data );
|
||||
}
|
||||
|
||||
|
||||
|
@ -2018,7 +2022,7 @@ DWORD GetMenuCheckMarkDimensions()
|
|||
* SetMenuItemBitmaps [USER.418]
|
||||
*/
|
||||
BOOL SetMenuItemBitmaps(HMENU hMenu, UINT nPos, UINT wFlags,
|
||||
HBITMAP hNewCheck, HBITMAP hNewUnCheck)
|
||||
HBITMAP hNewUnCheck, HBITMAP hNewCheck)
|
||||
{
|
||||
LPMENUITEM lpitem;
|
||||
dprintf_menu(stddeb,"SetMenuItemBitmaps ("NPFMT", %04X, %04X, "NPFMT", %08lX) !\n",
|
||||
|
@ -2090,6 +2094,8 @@ BOOL DestroyMenu(HMENU hMenu)
|
|||
{
|
||||
if (item->item_flags & MF_POPUP)
|
||||
DestroyMenu( (HMENU)item->item_id );
|
||||
if (IS_STRING_ITEM(item->item_flags) && item->hText)
|
||||
USER_HEAP_FREE(item->hText);
|
||||
}
|
||||
USER_HEAP_FREE( lppop->hItems );
|
||||
}
|
||||
|
|
|
@ -971,7 +971,7 @@ void ShowScrollBar( HWND hwnd, WORD wBar, BOOL fShow )
|
|||
/*************************************************************************
|
||||
* EnableScrollBar (USER.482)
|
||||
*/
|
||||
BOOL EnableScrollBar( HWND hwnd, INT nBar, UINT flags )
|
||||
BOOL EnableScrollBar( HWND hwnd, UINT nBar, UINT flags )
|
||||
{
|
||||
SCROLLINFO *infoPtr;
|
||||
HDC hdc;
|
||||
|
|
|
@ -19,20 +19,27 @@
|
|||
|
||||
static WNDCLASS WIDGETS_BuiltinClasses[] =
|
||||
{
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC, (WNDPROC)"ButtonWndProc", 0,
|
||||
sizeof(BUTTONINFO), 0, 0, 0, 0, 0, (SEGPTR)"BUTTON" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC, (WNDPROC)"StaticWndProc", 0,
|
||||
sizeof(STATICINFO), 0, 0, 0, 0, 0, (SEGPTR)"STATIC" },
|
||||
{ CS_GLOBALCLASS | CS_HREDRAW | CS_VREDRAW | CS_PARENTDC , (WNDPROC)"ScrollBarWndProc", 0,
|
||||
sizeof(SCROLLINFO), 0, 0, 0, 0, 0, (SEGPTR)"SCROLLBAR" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS, (WNDPROC)"ListBoxWndProc", 0,
|
||||
8, 0, 0, 0, 0, 0, (SEGPTR)"LISTBOX" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC, (WNDPROC)"ComboBoxWndProc", 0, 8,
|
||||
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
|
||||
(WNDPROC)"ButtonWndProc", 0, sizeof(BUTTONINFO),
|
||||
0, 0, 0, 0, 0, (SEGPTR)"BUTTON" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC,
|
||||
(WNDPROC)"StaticWndProc", 0, sizeof(STATICINFO),
|
||||
0, 0, 0, 0, 0, (SEGPTR)"STATIC" },
|
||||
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_VREDRAW | CS_HREDRAW | CS_PARENTDC,
|
||||
(WNDPROC)"ScrollBarWndProc", 0, sizeof(SCROLLINFO),
|
||||
0, 0, 0, 0, 0, (SEGPTR)"SCROLLBAR" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
|
||||
(WNDPROC)"ListBoxWndProc", 0, 8,
|
||||
0, 0, 0, 0, 0, (SEGPTR)"LISTBOX" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
|
||||
(WNDPROC)"ComboBoxWndProc", 0, 8,
|
||||
0, 0, 0, 0, 0, (SEGPTR)"COMBOBOX" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS | CS_SAVEBITS, (WNDPROC)"ComboLBoxWndProc",
|
||||
0, 8, 0, 0, 0, 0, 0, (SEGPTR)"COMBOLBOX" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS, (WNDPROC)"EditWndProc",
|
||||
0, sizeof(DWORD), 0, 0, 0, 0, 0, (SEGPTR)"EDIT" },
|
||||
{ CS_GLOBALCLASS | CS_DBLCLKS | CS_SAVEBITS,
|
||||
(WNDPROC)"ComboLBoxWndProc", 0, 8,
|
||||
0, 0, 0, 0, 0, (SEGPTR)"COMBOLBOX" },
|
||||
{ CS_GLOBALCLASS | CS_PARENTDC | CS_DBLCLKS,
|
||||
(WNDPROC)"EditWndProc", 0, sizeof(DWORD),
|
||||
0, 0, 0, 0, 0, (SEGPTR)"EDIT" },
|
||||
{ CS_GLOBALCLASS | CS_SAVEBITS, (WNDPROC)"PopupMenuWndProc", 0, 8,
|
||||
0, 0, 0, 0, 0, (SEGPTR)POPUPMENU_CLASS_NAME },
|
||||
{ CS_GLOBALCLASS, (WNDPROC)"DesktopWndProc", 0, sizeof(DESKTOPINFO),
|
||||
|
@ -61,11 +68,13 @@ BOOL WIDGETS_Init(void)
|
|||
for (i = 0; i < NB_BUILTIN_CLASSES; i++, class++)
|
||||
{
|
||||
DWORD WineProc,Win16Proc,Win32Proc;
|
||||
WIN32_builtin *dll;
|
||||
/* currently, there is no way to get the 'real' pointer at run time */
|
||||
WineProc=0;
|
||||
Win16Proc = (DWORD)GetWndProcEntry16( (char *)class->lpfnWndProc );
|
||||
dll = RELAY32_GetBuiltinDLL("WINPROCS32");
|
||||
Win32Proc = (DWORD)RELAY32_GetEntryPoint(
|
||||
"WINPROCS32",(char *)class->lpfnWndProc, 0);
|
||||
dll,(char *)class->lpfnWndProc, 0);
|
||||
/* Register the alias so we don't pass Win16 pointers to Win32 apps */
|
||||
ALIAS_RegisterAlias(WineProc,Win16Proc,Win32Proc);
|
||||
|
||||
|
|
|
@ -733,8 +733,8 @@ static struct inst db_inst_table[256] = {
|
|||
/*ab*/ { "stos", FALSE, LONG, op1(DI), 0 },
|
||||
/*ac*/ { "lods", FALSE, BYTE, op1(SI), 0 },
|
||||
/*ad*/ { "lods", FALSE, LONG, op1(SI), 0 },
|
||||
/*ae*/ { "scas", FALSE, BYTE, op1(SI), 0 },
|
||||
/*af*/ { "scas", FALSE, LONG, op1(SI), 0 },
|
||||
/*ae*/ { "scas", FALSE, BYTE, op1(DI), 0 },
|
||||
/*af*/ { "scas", FALSE, LONG, op1(DI), 0 },
|
||||
|
||||
/*b0*/ { "mov", FALSE, BYTE, op2(I, Ri), 0 },
|
||||
/*b1*/ { "mov", FALSE, BYTE, op2(I, Ri), 0 },
|
||||
|
|
|
@ -164,11 +164,11 @@ int DIR_Init(void)
|
|||
|
||||
/* Put the temp and Windows directories into the environment */
|
||||
|
||||
env_p = (char *)xmalloc( strlen(DIR_TempDosDir) + 5 );
|
||||
env_p = (char *)xmalloc( strlen(DIR_TempDosDir) + 6 );
|
||||
strcpy( env_p, "TEMP=" );
|
||||
strcpy( env_p + 5, DIR_TempDosDir );
|
||||
putenv( env_p );
|
||||
env_p = (char *)xmalloc( strlen(DIR_WindowsDosDir) + 7 );
|
||||
env_p = (char *)xmalloc( strlen(DIR_WindowsDosDir) + 8 );
|
||||
strcpy( env_p, "windir=" );
|
||||
strcpy( env_p + 7, DIR_WindowsDosDir );
|
||||
putenv( env_p );
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
* Copyright 1996 Alexandre Julliard
|
||||
*/
|
||||
|
||||
#include <sys/types.h>
|
||||
#include <ctype.h>
|
||||
#include <dirent.h>
|
||||
#include <string.h>
|
||||
|
@ -415,7 +416,7 @@ const char *DOSFS_IsDevice( const char *name )
|
|||
int i;
|
||||
const char *p;
|
||||
|
||||
if (name[1] == ':') name += 2;
|
||||
if (name[0] && (name[1] == ':')) name += 2;
|
||||
if ((p = strrchr( name, '/' ))) name = p + 1;
|
||||
if ((p = strrchr( name, '\\' ))) name = p + 1;
|
||||
for (i = 0; i < sizeof(DOSFS_Devices)/sizeof(DOSFS_Devices[0]); i++)
|
||||
|
@ -424,7 +425,6 @@ const char *DOSFS_IsDevice( const char *name )
|
|||
if (!lstrncmpi( dev, name, strlen(dev) ))
|
||||
{
|
||||
p = name + strlen( dev );
|
||||
if (*p == ':') p++;
|
||||
if (!*p || (*p == '.')) return DOSFS_Devices[i][1];
|
||||
}
|
||||
}
|
||||
|
@ -446,7 +446,7 @@ const char * DOSFS_GetUnixFileName( const char * name, int check_last )
|
|||
char *p, *root;
|
||||
|
||||
dprintf_dosfs( stddeb, "DOSFS_GetUnixFileName: %s\n", name );
|
||||
if (name[1] == ':')
|
||||
if (name[0] && (name[1] == ':'))
|
||||
{
|
||||
drive = toupper(name[0]) - 'A';
|
||||
name += 2;
|
||||
|
@ -549,7 +549,7 @@ const char * DOSFS_GetDosTrueName( const char *name, int unix_format )
|
|||
char *p;
|
||||
|
||||
dprintf_dosfs( stddeb, "DOSFS_GetDosTrueName(%s,%d)\n", name, unix_format);
|
||||
if (name[1] == ':')
|
||||
if (name[0] && (name[1] == ':'))
|
||||
{
|
||||
drive = toupper(name[0]) - 'A';
|
||||
name += 2;
|
||||
|
@ -646,6 +646,7 @@ int DOSFS_FindNext( const char *path, const char *mask, int drive,
|
|||
int count = 0;
|
||||
static char buffer[MAX_PATHNAME_LEN];
|
||||
static int cur_pos = 0;
|
||||
static int drive_root = 0;
|
||||
char *p;
|
||||
const char *hash_name;
|
||||
|
||||
|
@ -664,12 +665,22 @@ int DOSFS_FindNext( const char *path, const char *mask, int drive,
|
|||
if (dir && !strcmp( buffer, path ) && (cur_pos <= skip)) skip -= cur_pos;
|
||||
else /* Not in the cache, open it anew */
|
||||
{
|
||||
const char *drive_path;
|
||||
dprintf_dosfs( stddeb, "DOSFS_FindNext: cache miss, path=%s skip=%d buf=%s cur=%d\n",
|
||||
path, skip, buffer, cur_pos );
|
||||
cur_pos = skip;
|
||||
if (dir) closedir(dir);
|
||||
if (!(dir = opendir( path ))) return 0;
|
||||
drive_path = path;
|
||||
drive_root = 0;
|
||||
if (DRIVE_FindDriveRoot( &drive_path ) != -1)
|
||||
{
|
||||
while ((*drive_path == '/') || (*drive_path == '\\')) drive_path++;
|
||||
if (!*drive_path) drive_root = 1;
|
||||
}
|
||||
dprintf_dosfs(stddeb, "DOSFS_FindNext: drive_root = %d\n", drive_root);
|
||||
lstrcpyn( buffer, path, sizeof(buffer) - 1 );
|
||||
|
||||
}
|
||||
strcat( buffer, "/" );
|
||||
p = buffer + strlen(buffer);
|
||||
|
@ -681,6 +692,10 @@ int DOSFS_FindNext( const char *path, const char *mask, int drive,
|
|||
count++;
|
||||
hash_name = DOSFS_Hash( dirent->d_name, TRUE );
|
||||
if (!DOSFS_Match( mask, hash_name )) continue;
|
||||
/* Don't return '.' and '..' in the root of the drive */
|
||||
if (drive_root && (dirent->d_name[0] == '.') &&
|
||||
(!dirent->d_name[1] ||
|
||||
((dirent->d_name[1] == '.') && !dirent->d_name[2]))) continue;
|
||||
lstrcpyn( p, dirent->d_name, sizeof(buffer) - (int)(p - buffer) );
|
||||
|
||||
if (!FILE_Stat( buffer, &entry->attr, &entry->size,
|
||||
|
|
|
@ -7,6 +7,7 @@
|
|||
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include <sys/types.h>
|
||||
#include <sys/stat.h>
|
||||
|
||||
#if defined(__linux__) || defined(sun)
|
||||
|
@ -131,7 +132,7 @@ int DRIVE_Init(void)
|
|||
|
||||
if (!count)
|
||||
{
|
||||
fprintf( stderr, "Warning: no valid DOS drive found\n" );
|
||||
fprintf( stderr, "Warning: no valid DOS drive found, check your configuration file.\n" );
|
||||
/* Create a C drive pointing to Unix root dir */
|
||||
DOSDrives[2].root = xstrdup( "/" );
|
||||
DOSDrives[2].dos_cwd = xstrdup( "" );
|
||||
|
|
336
files/file.c
336
files/file.c
|
@ -26,6 +26,179 @@
|
|||
#include "stddebug.h"
|
||||
#include "debug.h"
|
||||
|
||||
#define MAX_OPEN_FILES 64 /* Max. open files for all tasks; must be <255 */
|
||||
|
||||
typedef struct
|
||||
{
|
||||
int unix_handle;
|
||||
int mode;
|
||||
} DOS_FILE;
|
||||
|
||||
/* Global files array */
|
||||
static DOS_FILE DOSFiles[MAX_OPEN_FILES];
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_AllocDOSFile
|
||||
*
|
||||
* Allocate a file from the DOS files array.
|
||||
*/
|
||||
static BYTE FILE_AllocDOSFile( int unix_handle )
|
||||
{
|
||||
BYTE i;
|
||||
for (i = 0; i < MAX_OPEN_FILES; i++) if (!DOSFiles[i].mode)
|
||||
{
|
||||
DOSFiles[i].unix_handle = unix_handle;
|
||||
DOSFiles[i].mode = 1;
|
||||
return i;
|
||||
}
|
||||
return 0xff;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_FreeDOSFile
|
||||
*
|
||||
* Free a file from the DOS files array.
|
||||
*/
|
||||
static BOOL FILE_FreeDOSFile( BYTE handle )
|
||||
{
|
||||
if (handle >= MAX_OPEN_FILES) return FALSE;
|
||||
if (!DOSFiles[handle].mode) return FALSE;
|
||||
DOSFiles[handle].mode = 0;
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_GetUnixHandle
|
||||
*
|
||||
* Return the Unix handle for a global DOS file handle.
|
||||
*/
|
||||
static int FILE_GetUnixHandle( BYTE handle )
|
||||
{
|
||||
if (handle >= MAX_OPEN_FILES) return -1;
|
||||
if (!DOSFiles[handle].mode) return -1;
|
||||
return DOSFiles[handle].unix_handle;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_AllocTaskHandle
|
||||
*
|
||||
* Allocate a per-task file handle.
|
||||
*/
|
||||
static HFILE FILE_AllocTaskHandle( int unix_handle )
|
||||
{
|
||||
PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() );
|
||||
BYTE *files, *fp;
|
||||
WORD i;
|
||||
|
||||
if (!pdb)
|
||||
{
|
||||
fprintf(stderr,"FILE_MakeTaskHandle: internal error, no current PDB.\n");
|
||||
exit(1);
|
||||
}
|
||||
files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
fp = files + 1; /* Don't use handle 0, as some programs don't like it */
|
||||
for (i = pdb->nbFiles - 1; (i > 0) && (*fp != 0xff); i--, fp++);
|
||||
if (!i || (*fp = FILE_AllocDOSFile( unix_handle )) == 0xff)
|
||||
{ /* No more handles or files */
|
||||
DOS_ERROR( ER_TooManyOpenFiles, EC_ProgramError, SA_Abort, EL_Disk );
|
||||
return -1;
|
||||
}
|
||||
dprintf_file(stddeb,
|
||||
"FILE_AllocTaskHandle: returning task handle %d, file %d for unix handle %d file %d of %d \n",
|
||||
(fp - files), *fp, unix_handle, pdb->nbFiles - i, pdb->nbFiles );
|
||||
return (HFILE)(fp - files);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_FreeTaskHandle
|
||||
*
|
||||
* Free a per-task file handle.
|
||||
*/
|
||||
static void FILE_FreeTaskHandle( HFILE handle )
|
||||
{
|
||||
PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() );
|
||||
BYTE *files;
|
||||
|
||||
if (!pdb)
|
||||
{
|
||||
fprintf(stderr,"FILE_FreeTaskHandle: internal error, no current PDB.\n");
|
||||
exit(1);
|
||||
}
|
||||
files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
dprintf_file( stddeb,"FILE_FreeTaskHandle: dos=%d file=%d\n",
|
||||
handle, files[handle] );
|
||||
if ((handle < 0) || (handle >= (INT)pdb->nbFiles) ||
|
||||
!FILE_FreeDOSFile( files[handle] ))
|
||||
{
|
||||
fprintf( stderr, "FILE_FreeTaskHandle: invalid file handle %d\n",
|
||||
handle );
|
||||
return;
|
||||
}
|
||||
files[handle] = 0xff;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_GetUnixTaskHandle
|
||||
*
|
||||
* Return the Unix file handle associated to a task file handle.
|
||||
*/
|
||||
int FILE_GetUnixTaskHandle( HFILE handle )
|
||||
{
|
||||
PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() );
|
||||
BYTE *files;
|
||||
int unix_handle;
|
||||
|
||||
if (!pdb)
|
||||
{
|
||||
fprintf(stderr,"FILE_GetUnixHandle: internal error, no current PDB.\n");
|
||||
exit(1);
|
||||
}
|
||||
files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
if ((handle < 0) || (handle >= (INT)pdb->nbFiles) ||
|
||||
((unix_handle = FILE_GetUnixHandle( files[handle] )) == -1))
|
||||
{
|
||||
DOS_ERROR( ER_InvalidHandle, EC_ProgramError, SA_Abort, EL_Disk );
|
||||
return -1;
|
||||
}
|
||||
return unix_handle;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_CloseAllFiles
|
||||
*
|
||||
* Close all open files of a given PDB. Used on task termination.
|
||||
*/
|
||||
void FILE_CloseAllFiles( HANDLE hPDB )
|
||||
{
|
||||
BYTE *files;
|
||||
WORD count;
|
||||
PDB *pdb = (PDB *)GlobalLock( hPDB );
|
||||
int unix_handle;
|
||||
|
||||
if (!pdb) return;
|
||||
files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
dprintf_file(stddeb,"FILE_CloseAllFiles: closing %d files\n",pdb->nbFiles);
|
||||
for (count = pdb->nbFiles; count > 0; count--, files++)
|
||||
{
|
||||
if (*files != 0xff)
|
||||
{
|
||||
if ((unix_handle = FILE_GetUnixHandle( *files )) != -1)
|
||||
{
|
||||
close( unix_handle );
|
||||
FILE_FreeDOSFile( *files );
|
||||
}
|
||||
*files = 0xff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_SetDosError
|
||||
|
@ -75,115 +248,6 @@ void FILE_SetDosError(void)
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_AllocTaskHandle
|
||||
*
|
||||
* Allocate a DOS file handle for the current task.
|
||||
*/
|
||||
static HFILE FILE_AllocTaskHandle( int handle )
|
||||
{
|
||||
PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() );
|
||||
BYTE *files, *fp;
|
||||
WORD i;
|
||||
|
||||
if (!pdb)
|
||||
{
|
||||
fprintf(stderr,"FILE_MakeTaskHandle: internal error, no current PDB.\n");
|
||||
exit(1);
|
||||
}
|
||||
fp = files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
for (i = pdb->nbFiles; (i > 0) && (*fp != 0xff); i--, fp++);
|
||||
if (!i || (handle >= 0xff)) /* No more handles */
|
||||
{
|
||||
DOS_ERROR( ER_TooManyOpenFiles, EC_ProgramError, SA_Abort, EL_Disk );
|
||||
return -1;
|
||||
}
|
||||
*fp = (BYTE)handle;
|
||||
dprintf_file(stddeb,
|
||||
"FILE_AllocTaskHandle: returning %d for handle %d file %d of %d \n",
|
||||
(fp - files),handle,pdb->nbFiles - i, pdb->nbFiles );
|
||||
return (HFILE)(fp - files);
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_FreeTaskHandle
|
||||
*
|
||||
* Free a DOS file handle for the current task.
|
||||
*/
|
||||
static void FILE_FreeTaskHandle( HFILE handle )
|
||||
{
|
||||
PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() );
|
||||
BYTE *files;
|
||||
|
||||
if (!pdb)
|
||||
{
|
||||
fprintf(stderr,"FILE_FreeTaskHandle: internal error, no current PDB.\n");
|
||||
exit(1);
|
||||
}
|
||||
files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
dprintf_file( stddeb,"FILE_FreeTaskHandle: dos=%d unix=%d\n",
|
||||
handle, files[handle]);
|
||||
if ((handle<0) || (handle >= (INT)pdb->nbFiles) || (files[handle] == 0xff))
|
||||
{
|
||||
fprintf( stderr, "FILE_FreeTaskHandle: invalid file handle %d\n",
|
||||
handle );
|
||||
return;
|
||||
}
|
||||
files[handle] = 0xff;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_GetUnixHandle
|
||||
*
|
||||
* Return the Unix file handle associated to a DOS file handle.
|
||||
*/
|
||||
int FILE_GetUnixHandle( HFILE handle )
|
||||
{
|
||||
PDB *pdb = (PDB *)GlobalLock( GetCurrentPDB() );
|
||||
BYTE *files;
|
||||
|
||||
if (!pdb)
|
||||
{
|
||||
fprintf(stderr,"FILE_GetUnixHandle: internal error, no current PDB.\n");
|
||||
exit(1);
|
||||
}
|
||||
files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
if ((handle<0) || (handle >= (INT)pdb->nbFiles) || (files[handle] == 0xff))
|
||||
{
|
||||
DOS_ERROR( ER_InvalidHandle, EC_ProgramError, SA_Abort, EL_Disk );
|
||||
return -1;
|
||||
}
|
||||
return (int)files[handle];
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_CloseAllFiles
|
||||
*
|
||||
* Close all open files of a given PDB. Used on task termination.
|
||||
*/
|
||||
void FILE_CloseAllFiles( HANDLE hPDB )
|
||||
{
|
||||
BYTE *files;
|
||||
WORD count;
|
||||
PDB *pdb = (PDB *)GlobalLock( hPDB );
|
||||
|
||||
if (!pdb) return;
|
||||
files = PTR_SEG_TO_LIN( pdb->fileHandlesPtr );
|
||||
fprintf(stderr,"FILE_CloseAllFiles: closing %d files\n",pdb->nbFiles);
|
||||
for (count = pdb->nbFiles; count > 0; count--, files++)
|
||||
{
|
||||
if (*files != 0xff)
|
||||
{
|
||||
close( (int)*files );
|
||||
*files = 0xff;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_OpenUnixFile
|
||||
*/
|
||||
|
@ -310,7 +374,7 @@ int FILE_Stat( LPCSTR unixName, BYTE *pattr, DWORD *psize,
|
|||
return 0;
|
||||
}
|
||||
if (pattr) *pattr = FA_ARCHIVE | (S_ISDIR(st.st_mode) ? FA_DIRECTORY : 0);
|
||||
if (psize) *psize = st.st_size;
|
||||
if (psize) *psize = S_ISDIR(st.st_mode) ? 0 : st.st_size;
|
||||
DOSFS_ToDosDateTime( &st.st_mtime, pdate, ptime );
|
||||
return 1;
|
||||
}
|
||||
|
@ -327,14 +391,14 @@ int FILE_Fstat( HFILE hFile, BYTE *pattr, DWORD *psize,
|
|||
struct stat st;
|
||||
int handle;
|
||||
|
||||
if ((handle = FILE_GetUnixHandle( hFile )) == -1) return 0;
|
||||
if ((handle = FILE_GetUnixTaskHandle( hFile )) == -1) return 0;
|
||||
if (fstat( handle, &st ) == -1)
|
||||
{
|
||||
FILE_SetDosError();
|
||||
return 0;
|
||||
}
|
||||
if (pattr) *pattr = FA_ARCHIVE | (S_ISDIR(st.st_mode) ? FA_DIRECTORY : 0);
|
||||
if (psize) *psize = st.st_size;
|
||||
if (psize) *psize = S_ISDIR(st.st_mode) ? 0 : st.st_size;
|
||||
DOSFS_ToDosDateTime( &st.st_mtime, pdate, ptime );
|
||||
return 1;
|
||||
}
|
||||
|
@ -400,7 +464,7 @@ HFILE FILE_Dup( HFILE hFile )
|
|||
int handle, newhandle;
|
||||
HFILE dosHandle;
|
||||
|
||||
if ((handle = FILE_GetUnixHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
if ((handle = FILE_GetUnixTaskHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
dprintf_file( stddeb, "FILE_Dup for handle %d\n",handle);
|
||||
if ((newhandle = dup(handle)) == -1)
|
||||
{
|
||||
|
@ -425,7 +489,7 @@ HFILE FILE_Dup2( HFILE hFile1, HFILE hFile2 )
|
|||
BYTE *files;
|
||||
int handle, newhandle;
|
||||
|
||||
if ((handle = FILE_GetUnixHandle( hFile1 )) == -1) return HFILE_ERROR;
|
||||
if ((handle = FILE_GetUnixTaskHandle( hFile1 )) == -1) return HFILE_ERROR;
|
||||
dprintf_file( stddeb, "FILE_Dup2 for handle %d\n",handle);
|
||||
if ((hFile2 < 0) || (hFile2 >= (INT)pdb->nbFiles))
|
||||
{
|
||||
|
@ -639,6 +703,22 @@ found:
|
|||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* FILE_Read
|
||||
*/
|
||||
LONG FILE_Read( HFILE hFile, LPSTR buffer, LONG count )
|
||||
{
|
||||
int handle;
|
||||
LONG result;
|
||||
|
||||
dprintf_file( stddeb, "FILE_Read: %d %p %ld\n", hFile, buffer, count );
|
||||
if ((handle = FILE_GetUnixTaskHandle( hFile )) == -1) return -1;
|
||||
if (!count) return 0;
|
||||
if ((result = read( handle, buffer, count )) == -1) FILE_SetDosError();
|
||||
return result;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* GetTempFileName (KERNEL.97)
|
||||
*/
|
||||
|
@ -719,7 +799,7 @@ HFILE _lclose( HFILE hFile )
|
|||
int handle;
|
||||
|
||||
|
||||
if ((handle = FILE_GetUnixHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
if ((handle = FILE_GetUnixTaskHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
dprintf_file( stddeb, "_lclose: doshandle %d unixhandle %d\n", hFile,handle );
|
||||
if (handle <= 2)
|
||||
{
|
||||
|
@ -735,7 +815,7 @@ HFILE _lclose( HFILE hFile )
|
|||
/***********************************************************************
|
||||
* _lread (KERNEL.82)
|
||||
*/
|
||||
INT _lread( HFILE hFile, LPSTR buffer, WORD count )
|
||||
INT _lread( HFILE hFile, SEGPTR buffer, WORD count )
|
||||
{
|
||||
return (INT)_hread( hFile, buffer, (LONG)count );
|
||||
}
|
||||
|
@ -787,7 +867,7 @@ LONG _llseek( HFILE hFile, LONG lOffset, INT nOrigin )
|
|||
dprintf_file( stddeb, "_llseek: handle %d, offset %ld, origin %d\n",
|
||||
hFile, lOffset, nOrigin);
|
||||
|
||||
if ((handle = FILE_GetUnixHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
if ((handle = FILE_GetUnixTaskHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
switch(nOrigin)
|
||||
{
|
||||
case 1: origin = SEEK_CUR; break;
|
||||
|
@ -843,17 +923,19 @@ INT _lwrite( HFILE hFile, LPCSTR buffer, WORD count )
|
|||
/***********************************************************************
|
||||
* _hread (KERNEL.349)
|
||||
*/
|
||||
LONG _hread( HFILE hFile, LPSTR buffer, LONG count )
|
||||
LONG _hread( HFILE hFile, SEGPTR buffer, LONG count )
|
||||
{
|
||||
int handle;
|
||||
LONG result;
|
||||
#ifndef WINELIB
|
||||
LONG maxlen;
|
||||
|
||||
dprintf_file( stddeb, "_hread: %d %p %ld\n", hFile, buffer, count );
|
||||
|
||||
if ((handle = FILE_GetUnixHandle( hFile )) == -1) return -1;
|
||||
if (!count) return 0;
|
||||
if ((result = read( handle, buffer, count )) == -1) FILE_SetDosError();
|
||||
return result;
|
||||
dprintf_file( stddeb, "_hread: %d %08lx %ld\n",
|
||||
hFile, (DWORD)buffer, count );
|
||||
|
||||
/* Some programs pass a count larger than the allocated buffer */
|
||||
maxlen = GetSelectorLimit( SELECTOROF(buffer) ) - OFFSETOF(buffer) + 1;
|
||||
if (count > maxlen) count = maxlen;
|
||||
#endif
|
||||
return FILE_Read( hFile, PTR_SEG_TO_LIN(buffer), count );
|
||||
}
|
||||
|
||||
|
||||
|
@ -867,7 +949,7 @@ LONG _hwrite( HFILE hFile, LPCSTR buffer, LONG count )
|
|||
|
||||
dprintf_file( stddeb, "_hwrite: %d %p %ld\n", hFile, buffer, count );
|
||||
|
||||
if ((handle = FILE_GetUnixHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
if ((handle = FILE_GetUnixTaskHandle( hFile )) == -1) return HFILE_ERROR;
|
||||
|
||||
if (count == 0) /* Expand or truncate at current position */
|
||||
result = ftruncate( handle, lseek( handle, 0, SEEK_CUR ) );
|
||||
|
|
|
@ -447,21 +447,22 @@ static INT PROFILE_GetSection( PROFILESECTION *section,
|
|||
{
|
||||
if (section->name && !lstrcmpi( section->name, section_name ))
|
||||
{
|
||||
INT oldlen = len;
|
||||
for (key = section->key; key; key = key->next)
|
||||
{
|
||||
if (len <= 2) break;
|
||||
if (IS_ENTRY_COMMENT(key->name)) continue; /* Skip comments */
|
||||
PROFILE_CopyEntry( buffer, key->name, len - 1, handle_env );
|
||||
len -= strlen(buffer) - 1;
|
||||
len -= strlen(buffer) + 1;
|
||||
buffer += strlen(buffer) + 1;
|
||||
}
|
||||
*buffer = '\0';
|
||||
return len - 1;
|
||||
return oldlen - len + 1;
|
||||
}
|
||||
section = section->next;
|
||||
}
|
||||
buffer[0] = buffer[1] = '\0';
|
||||
return len - 2;
|
||||
return 2;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -8,7 +8,8 @@ DLLS16 = commdlg.spec compobj.spec ddeml.spec gdi.spec kernel.spec \
|
|||
shell.spec sound.spec storage.spec stress.spec system.spec \
|
||||
toolhelp.spec user.spec win87em.spec winprocs.spec winsock.spec
|
||||
|
||||
DLLS32 = advapi32.spec comdlg32.spec gdi32.spec kernel32.spec shell32.spec user32.spec winprocs32.spec
|
||||
DLLS32 = advapi32.spec comctl32.spec comdlg32.spec gdi32.spec kernel32.spec \
|
||||
ole32.spec shell32.spec user32.spec winprocs32.spec winspool.spec
|
||||
|
||||
SPEC16_FILES = $(DLLS16:.spec=.S)
|
||||
SPEC32_FILES = $(DLLS32:.spec=.c)
|
||||
|
@ -53,18 +54,18 @@ clean::
|
|||
|
||||
# Kludge: don't use optimisation flags to compile these files
|
||||
advapi32.o: advapi32.c
|
||||
$(CC) -c $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o advapi32.o advapi32.c
|
||||
$(CC) -c -g $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o advapi32.o advapi32.c
|
||||
comdlg32.o: comdlg32.c
|
||||
$(CC) -c $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o comdlg32.o comdlg32.c
|
||||
$(CC) -c -g $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o comdlg32.o comdlg32.c
|
||||
gdi32.o: gdi32.c
|
||||
$(CC) -c $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o gdi32.o gdi32.c
|
||||
$(CC) -c -g $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o gdi32.o gdi32.c
|
||||
kernel32.o: kernel32.c
|
||||
$(CC) -c $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o kernel32.o kernel32.c
|
||||
$(CC) -c -g $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o kernel32.o kernel32.c
|
||||
shell32.o: shell32.c
|
||||
$(CC) -c $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o shell32.o shell32.c
|
||||
$(CC) -c -g $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o shell32.o shell32.c
|
||||
user32.o: user32.c
|
||||
$(CC) -c $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o user32.o user32.c
|
||||
$(CC) -c -g $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o user32.o user32.c
|
||||
winprocs32.o: winprocs32.c
|
||||
$(CC) -c $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o winprocs32.o winprocs32.c
|
||||
$(CC) -c -g $(DEFS) $(DIVINCL) $(EXTRA_DEFS) -o winprocs32.o winprocs32.c
|
||||
|
||||
### Dependencies:
|
||||
|
|
60
if1632/comctl32.spec
Normal file
60
if1632/comctl32.spec
Normal file
|
@ -0,0 +1,60 @@
|
|||
name comctl32
|
||||
base 2
|
||||
|
||||
00 stub MenuHelp
|
||||
01 stub ShowHideMenuCtl
|
||||
02 stub GetEffectiveClientRect
|
||||
03 stub DrawStatusTextA
|
||||
04 stub CreateStatusWindowA
|
||||
05 stub CreateToolbar
|
||||
06 stub CreateMappedBitmap
|
||||
07 stub CreatePropertySheetPage
|
||||
08 stub CreatePropertySheetPageA
|
||||
09 stub CreatePropertySheetPageW
|
||||
10 stub CreateStatusWindow
|
||||
11 stub MakeDragList
|
||||
12 stub LBItemFromPt
|
||||
13 stub DrawInsert
|
||||
14 stub CreateUpDownControl
|
||||
15 stub InitCommonControls
|
||||
16 stub CreateStatusWindowW
|
||||
17 stub CreateToolbarEx
|
||||
18 stub DestroyPropertySheetPage
|
||||
19 stub DrawStatusText
|
||||
20 stub DrawStatusTextW
|
||||
21 stub ImageList_Add
|
||||
22 stub ImageList_AddIcon
|
||||
23 stub ImageList_AddMasked
|
||||
24 stub ImageList_BeginDrag
|
||||
25 stub ImageList_Create
|
||||
26 stub ImageList_Destroy
|
||||
27 stub ImageList_DragEnter
|
||||
28 stub ImageList_DragLeave
|
||||
29 stub ImageList_DragMove
|
||||
30 stub ImageList_DragShowNolock
|
||||
31 stub ImageList_Draw
|
||||
32 stub ImageList_DrawEx
|
||||
33 stub ImageList_EndDrag
|
||||
34 stub ImageList_GetBkColor
|
||||
35 stub ImageList_GetDragImage
|
||||
36 stub ImageList_GetIcon
|
||||
37 stub ImageList_GetIconSize
|
||||
38 stub ImageList_GetImageCount
|
||||
39 stub ImageList_GetImageInfo
|
||||
40 stub ImageList_GetImageRect
|
||||
41 stub ImageList_LoadImage
|
||||
42 stub ImageList_LoadImageA
|
||||
43 stub ImageList_LoadImageW
|
||||
44 stub ImageList_Merge
|
||||
45 stub ImageList_Read
|
||||
46 stub ImageList_Remove
|
||||
47 stub ImageList_Replace
|
||||
48 stub ImageList_ReplaceIcon
|
||||
49 stub ImageList_SetBkColor
|
||||
50 stub ImageList_SetDragCursorImage
|
||||
51 stub ImageList_SetIconSize
|
||||
52 stub ImageList_SetOverlayImage
|
||||
53 stub ImageList_Write
|
||||
54 stub PropertySheet
|
||||
55 stub PropertySheetA
|
||||
56 stub PropertySheetW
|
|
@ -20,7 +20,7 @@ base 1
|
|||
0016 stub CloseFigure
|
||||
0017 stub CloseMetaFile
|
||||
0018 stub ColorMatchToTarget
|
||||
0019 stub CombineRgn
|
||||
0019 stdcall CombineRgn(long long long long) CombineRgn
|
||||
0020 stub CombineTransform
|
||||
0021 stub CopyEnhMetaFileA
|
||||
0022 stub CopyEnhMetaFileW
|
||||
|
@ -60,7 +60,7 @@ base 1
|
|||
0056 stub CreatePenIndirect
|
||||
0057 stub CreatePolyPolygonRgn
|
||||
0058 stub CreatePolygonRgn
|
||||
0059 stub CreateRectRgn
|
||||
0059 stdcall CreateRectRgn(long long long long) CreateRectRgn
|
||||
0060 stub CreateRectRgnIndirect
|
||||
0061 stub CreateRoundRectRgn
|
||||
0062 stub CreateScalableFontResourceA
|
||||
|
@ -205,7 +205,7 @@ base 1
|
|||
0201 stub GetMiterLimit
|
||||
0202 stub GetNearestColor
|
||||
0203 stub GetNearestPaletteIndex
|
||||
0204 stdcall GetObjectA(long long ptr) GetObject
|
||||
0204 stdcall GetObjectA(long long ptr) WIN32_GetObject
|
||||
0205 stub GetObjectType
|
||||
0206 stub GetObjectW
|
||||
0207 stub GetOutlineTextMetricsA
|
||||
|
@ -333,7 +333,7 @@ base 1
|
|||
0329 stub SetPixelV
|
||||
0330 stub SetPolyFillMode
|
||||
0331 stub SetROP2
|
||||
0332 stub SetRectRgn
|
||||
0332 stdcall SetRectRgn(long long long long long) SetRectRgn
|
||||
0333 stub SetRelAbs
|
||||
0334 stub SetStretchBltMode
|
||||
0335 stub SetSystemPaletteUse
|
||||
|
@ -351,7 +351,7 @@ base 1
|
|||
0347 stub StartDocA
|
||||
0348 stub StartDocW
|
||||
0349 stub StartPage
|
||||
0350 stub StretchBlt
|
||||
0350 stdcall StretchBlt(long long long long long long long long long long long) StretchBlt
|
||||
0351 stub StretchDIBits
|
||||
0352 stub StrokeAndFillPath
|
||||
0353 stub StrokePath
|
||||
|
@ -363,4 +363,30 @@ base 1
|
|||
0359 stub UpdateColors
|
||||
0360 stub WidenPath
|
||||
0361 stub pstackConnect
|
||||
#late additions
|
||||
0362 stub DeviceCapabilitiesEx
|
||||
0363 stub GdiDciBeginAccess
|
||||
0364 stub GdiDciCreateOffscreenSurface
|
||||
0365 stub GdiDciCreateOverlaySurface
|
||||
0366 stub GdiDciCreatePrimarySurface
|
||||
0367 stub GdiDciDestroySurface
|
||||
0368 stub GdiDciDrawSurface
|
||||
0369 stub GdiDciEndAccess
|
||||
0370 stub GdiDciEnumSurface
|
||||
0371 stub GdiDciInitialize
|
||||
0372 stub GdiDciSetClipList
|
||||
0373 stub GdiDciSetDestination
|
||||
0374 stub GdiDllInitialize
|
||||
0375 stub GdiGetLocalBitmap
|
||||
0376 stub GdiWinWatchClose
|
||||
0377 stub GdiWinWatchDidStatusChange
|
||||
0378 stub GdiWinWatchGetClipList
|
||||
0379 stub GdiWinWatchOpen
|
||||
0380 stub GetGlyphOutlineWow
|
||||
0381 stub GetTextCharsetInfo
|
||||
0382 stub TranslateCharsetInfo
|
||||
0383 stub UpdateICMRegKeyA
|
||||
0384 stub UpdateICMRegKeyW
|
||||
0385 stub gdiPlaySpoolStream
|
||||
|
||||
|
||||
|
|
|
@ -78,7 +78,7 @@ id 1
|
|||
#79 RESERVED3
|
||||
#80 RESERVED4
|
||||
81 pascal16 _lclose(word) _lclose
|
||||
82 pascal16 _lread(word ptr word) _lread
|
||||
82 pascal16 _lread(word segptr word) _lread
|
||||
83 pascal16 _lcreat(ptr word) _lcreat
|
||||
84 pascal _llseek(word long word) _llseek
|
||||
85 pascal16 _lopen(ptr word) _lopen
|
||||
|
@ -256,7 +256,7 @@ id 1
|
|||
346 pascal16 IsBadHugeReadPtr(segptr long) IsBadHugeReadPtr
|
||||
347 pascal16 IsBadHugeWritePtr(segptr long) IsBadHugeWritePtr
|
||||
348 pascal16 hmemcpy(ptr ptr long) hmemcpy
|
||||
349 pascal _hread(word ptr long) _hread
|
||||
349 pascal _hread(word segptr long) _hread
|
||||
350 pascal _hwrite(word ptr long) _hwrite
|
||||
#351 BUNNY_351
|
||||
352 stub lstrcatn
|
||||
|
|
|
@ -338,7 +338,7 @@ base 1
|
|||
0333 stub GlobalWire
|
||||
0334 stdcall HeapAlloc(long long long) HeapAlloc
|
||||
0335 stub HeapCompact
|
||||
0336 stub HeapCreate
|
||||
0336 stdcall HeapCreate(long long long) HeapCreate
|
||||
0337 stub HeapDestroy
|
||||
0338 stub HeapFree
|
||||
0339 stub HeapLock
|
||||
|
@ -618,3 +618,22 @@ base 1
|
|||
0613 stub lstrlen
|
||||
0614 stdcall lstrlenA(ptr) strlen
|
||||
0615 stub lstrlenW
|
||||
#late additions
|
||||
0616 stub GetPrivateProfileSectionNamesA
|
||||
0617 stub GetPrivateProfileSectionNamesW
|
||||
0618 stub GetPrivateProfileStructA
|
||||
0619 stub GetPrivateProfileStructW
|
||||
0620 stub GetProcessVersion
|
||||
0621 stub GetSystemPowerStatus
|
||||
0622 stub GetSystemTimeAsFileTime
|
||||
0623 stub HeapCreateTagsW
|
||||
0624 stub HeapExtend
|
||||
0625 stub HeapQueryTagW
|
||||
0626 stub HeapSummary
|
||||
0627 stub HeapUsage
|
||||
0628 stub IsDebuggerPresent
|
||||
0629 stub PostQueuedCompletionStatus
|
||||
0630 stub SetSystemPowerState
|
||||
0631 stub WritePrivateProfileStructA
|
||||
0632 stub WritePrivateProfileStructW
|
||||
0633 stub MakeCriticalSectionGlobal
|
||||
|
|
165
if1632/ole32.spec
Normal file
165
if1632/ole32.spec
Normal file
|
@ -0,0 +1,165 @@
|
|||
name ole32
|
||||
base 1
|
||||
|
||||
0 stub BindMoniker
|
||||
1 stub CLSIDFromProgID
|
||||
2 stub CLSIDFromString
|
||||
3 stub CoBuildVersion
|
||||
4 stub CoCreateFreeThreadedMarshaler
|
||||
5 stub CoCreateGuid
|
||||
6 stub CoCreateInstance
|
||||
7 stub CoDisconnectObject
|
||||
8 stub CoDosDateTimeToFileTime
|
||||
9 stub CoFileTimeNow
|
||||
10 stub CoFileTimeToDosDateTime
|
||||
11 stub CoFreeAllLibraries
|
||||
12 stub CoFreeLibrary
|
||||
13 stub CoFreeUnusedLibraries
|
||||
14 stub CoGetCallerTID
|
||||
15 stub CoGetClassObject
|
||||
16 stub CoGetCurrentLogicalThreadId
|
||||
17 stub CoGetCurrentProcess
|
||||
18 stub CoGetInterfaceAndReleaseStream
|
||||
19 stub CoGetMalloc
|
||||
20 stub CoGetMarshalSizeMax
|
||||
21 stub CoGetPSClsid
|
||||
22 stub CoGetStandardMarshal
|
||||
23 stub CoGetState
|
||||
24 stub CoGetTreatAsClass
|
||||
25 stub CoInitialize
|
||||
26 stub CoInitializeWOW
|
||||
27 stub CoIsHandlerConnected
|
||||
28 stub CoIsOle1Class
|
||||
29 stub CoLoadLibrary
|
||||
30 stub CoLockObjectExternal
|
||||
31 stub CoMarshalHresult
|
||||
32 stub CoMarshalInterThreadInterfaceInStream
|
||||
33 stub CoMarshalInterface
|
||||
34 stub CoQueryReleaseObject
|
||||
35 stub CoRegisterClassObject
|
||||
36 stub CoRegisterMallocSpy
|
||||
37 stub CoRegisterMessageFilter
|
||||
38 stub CoReleaseMarshalData
|
||||
39 stub CoRevokeClassObject
|
||||
40 stub CoRevokeMallocSpy
|
||||
41 stub CoSetState
|
||||
42 stub CoTaskMemAlloc
|
||||
43 stub CoTaskMemFree
|
||||
44 stub CoTaskMemRealloc
|
||||
45 stub CoTreatAsClass
|
||||
46 stub CoUninitialize
|
||||
47 stub CoUnloadingWOW
|
||||
48 stub CoUnmarshalHresult
|
||||
49 stub CoUnmarshalInterface
|
||||
50 stub CreateAntiMoniker
|
||||
51 stub CreateBindCtx
|
||||
52 stub CreateDataAdviseHolder
|
||||
53 stub CreateDataCache
|
||||
54 stub CreateFileMoniker
|
||||
55 stub CreateGenericComposite
|
||||
56 stub CreateILockBytesOnHGlobal
|
||||
57 stub CreateItemMoniker
|
||||
58 stub CreateOleAdviseHolder
|
||||
59 stub CreatePointerMoniker
|
||||
60 stub CreateStreamOnHGlobal
|
||||
61 stub DllDebugObjectRPCHook
|
||||
62 stub DllGetClassObject
|
||||
63 stub DllGetClassObjectWOW
|
||||
64 stub DoDragDrop
|
||||
65 stub EnableHookObject
|
||||
66 stub GetClassFile
|
||||
67 stub GetConvertStg
|
||||
68 stub GetDocumentBitStg
|
||||
69 stub GetHGlobalFromILockBytes
|
||||
70 stub GetHGlobalFromStream
|
||||
71 stub GetHookInterface
|
||||
72 stub GetRunningObjectTable
|
||||
73 stub IIDFromString
|
||||
74 stub IsAccelerator
|
||||
75 stub IsEqualGUID
|
||||
76 stub IsValidIid
|
||||
77 stub IsValidInterface
|
||||
78 stub IsValidPtrIn
|
||||
79 stub IsValidPtrOut
|
||||
80 stub MkParseDisplayName
|
||||
81 stub MonikerCommonPrefixWith
|
||||
82 stub MonikerRelativePathTo
|
||||
83 stub OleBuildVersion
|
||||
84 stub OleConvertIStorageToOLESTREAM
|
||||
85 stub OleConvertIStorageToOLESTREAMEx
|
||||
86 stub OleConvertOLESTREAMToIStorage
|
||||
87 stub OleConvertOLESTREAMToIStorageEx
|
||||
88 stub OleCreate
|
||||
89 stub OleCreateDefaultHandler
|
||||
90 stub OleCreateEmbeddingHelper
|
||||
91 stub OleCreateFromData
|
||||
92 stub OleCreateFromFile
|
||||
93 stub OleCreateLink
|
||||
94 stub OleCreateLinkFromData
|
||||
95 stub OleCreateLinkToFile
|
||||
96 stub OleCreateMenuDescriptor
|
||||
97 stub OleCreateStaticFromData
|
||||
98 stub OleDestroyMenuDescriptor
|
||||
99 stub OleDoAutoConvert
|
||||
100 stub OleDraw
|
||||
101 stub OleDuplicateData
|
||||
102 stub OleFlushClipboard
|
||||
103 stub OleGetAutoConvert
|
||||
104 stub OleGetClipboard
|
||||
105 stub OleGetIconOfClass
|
||||
106 stub OleGetIconOfFile
|
||||
107 stub OleInitialize
|
||||
108 stub OleInitializeWOW
|
||||
109 stub OleIsCurrentClipboard
|
||||
110 stub OleIsRunning
|
||||
111 stub OleLoad
|
||||
112 stub OleLoadFromStream
|
||||
113 stub OleLockRunning
|
||||
114 stub OleMetafilePictFromIconAndLabel
|
||||
115 stub OleNoteObjectVisible
|
||||
116 stub OleQueryCreateFromData
|
||||
117 stub OleQueryLinkFromData
|
||||
118 stub OleRegEnumFormatEtc
|
||||
119 stub OleRegEnumVerbs
|
||||
120 stub OleRegGetMiscStatus
|
||||
121 stub OleRegGetUserType
|
||||
122 stub OleRun
|
||||
123 stub OleSave
|
||||
124 stub OleSaveToStream
|
||||
125 stub OleSetAutoConvert
|
||||
126 stub OleSetClipboard
|
||||
127 stub OleSetContainedObject
|
||||
128 stub OleSetMenuDescriptor
|
||||
129 stub OleTranslateAccelerator
|
||||
130 stub OleUninitialize
|
||||
131 stub OpenOrCreateStream
|
||||
132 stub ProgIDFromCLSID
|
||||
133 stub ReadClassStg
|
||||
134 stub ReadClassStm
|
||||
135 stub ReadFmtUserTypeStg
|
||||
136 stub ReadOleStg
|
||||
137 stub ReadStringStream
|
||||
138 stub RegisterDragDrop
|
||||
139 stub ReleaseStgMedium
|
||||
140 stub RevokeDragDrop
|
||||
141 stub SetConvertStg
|
||||
142 stub SetDocumentBitStg
|
||||
143 stub StgCreateDocfile
|
||||
144 stub StgCreateDocfileOnILockBytes
|
||||
145 stub StgIsStorageFile
|
||||
146 stub StgIsStorageILockBytes
|
||||
147 stub StgOpenStorage
|
||||
148 stub StgOpenStorageOnILockBytes
|
||||
149 stub StgSetTimes
|
||||
150 stub StringFromCLSID
|
||||
151 stub StringFromGUID2
|
||||
152 stub StringFromIID
|
||||
153 stub UtConvertDvtd16toDvtd32
|
||||
154 stub UtConvertDvtd32toDvtd16
|
||||
155 stub UtGetDvtd16Info
|
||||
156 stub UtGetDvtd32Info
|
||||
157 stub WriteClassStg
|
||||
158 stub WriteClassStm
|
||||
159 stub WriteFmtUserTypeStg
|
||||
160 stub WriteOleStg
|
||||
161 stub WriteStringStream
|
130
if1632/relay32.c
130
if1632/relay32.c
|
@ -12,6 +12,8 @@
|
|||
#include <errno.h>
|
||||
#include "windows.h"
|
||||
#include "dlls.h"
|
||||
#include "module.h"
|
||||
#include "neexe.h"
|
||||
#include "pe_image.h"
|
||||
#include "peexe.h"
|
||||
#include "relay32.h"
|
||||
|
@ -23,24 +25,30 @@ WIN32_builtin *WIN32_builtin_list;
|
|||
|
||||
/* Functions are in generated code */
|
||||
void ADVAPI32_Init();
|
||||
void COMCTL32_Init();
|
||||
void COMDLG32_Init();
|
||||
void OLE32_Init();
|
||||
void GDI32_Init();
|
||||
void KERNEL32_Init();
|
||||
void SHELL32_Init();
|
||||
void USER32_Init();
|
||||
void WINPROCS32_Init();
|
||||
void WINSPOOL_Init();
|
||||
|
||||
int RELAY32_Init(void)
|
||||
{
|
||||
#ifndef WINELIB
|
||||
/* Add a call for each DLL */
|
||||
ADVAPI32_Init();
|
||||
COMCTL32_Init();
|
||||
COMDLG32_Init();
|
||||
GDI32_Init();
|
||||
KERNEL32_Init();
|
||||
OLE32_Init();
|
||||
SHELL32_Init();
|
||||
USER32_Init();
|
||||
WINPROCS32_Init();
|
||||
WINSPOOL_Init();
|
||||
#endif
|
||||
/* Why should it fail, anyways? */
|
||||
return 1;
|
||||
|
@ -72,70 +80,18 @@ void RELAY32_Unimplemented(char *dll, int item)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
void *RELAY32_GetEntryPoint(char *dll_name, char *item, int hint)
|
||||
void *RELAY32_GetEntryPoint(WIN32_builtin *dll, char *item, int hint)
|
||||
{
|
||||
WIN32_builtin *dll;
|
||||
int i;
|
||||
u_short * ordinal;
|
||||
u_long * function;
|
||||
u_char ** name;
|
||||
struct PE_Export_Directory * pe_exports;
|
||||
unsigned int load_addr;
|
||||
|
||||
dprintf_module(stddeb, "Looking for %s in %s, hint %x\n",
|
||||
item ? item: "(no name)", dll_name, hint);
|
||||
dll=RELAY32_GetBuiltinDLL(dll_name);
|
||||
/* FIXME: This should deal with built-in DLLs only. See pe_module on
|
||||
loading PE DLLs */
|
||||
item ? item: "(no name)", dll->name, hint);
|
||||
if(!dll)
|
||||
return 0;
|
||||
#if 0
|
||||
if(!dll) {
|
||||
if(!wine_files || !wine_files->name ||
|
||||
lstrcmpi(dll_name, wine_files->name)) {
|
||||
LoadModule(dll_name, (LPVOID) -1);
|
||||
if(!wine_files || !wine_files->name ||
|
||||
lstrcmpi(dll_name, wine_files->name))
|
||||
return 0;
|
||||
}
|
||||
load_addr = wine_files->load_addr;
|
||||
pe_exports = wine_files->pe->pe_export;
|
||||
ordinal = (u_short *) (((char *) load_addr) + (int) pe_exports->Address_Of_Name_Ordinals);
|
||||
function = (u_long *) (((char *) load_addr) + (int) pe_exports->AddressOfFunctions);
|
||||
name = (u_char **) (((char *) load_addr) + (int) pe_exports->AddressOfNames);
|
||||
/* import by ordinal */
|
||||
if(!item){
|
||||
return 0;
|
||||
}
|
||||
/* hint is correct */
|
||||
#if 0
|
||||
if(hint && hint<dll->size &&
|
||||
dll->functions[hint].name &&
|
||||
strcmp(item,dll->functions[hint].name)==0)
|
||||
return dll->functions[hint].definition;
|
||||
#endif
|
||||
/* hint is incorrect, search for name */
|
||||
for(i=0;i<pe_exports->Number_Of_Functions;i++)
|
||||
if (name[i] && !strcmp(item,name[i]+load_addr))
|
||||
return function[i]+(char *)load_addr;
|
||||
|
||||
/* function at hint has no name (unimplemented) */
|
||||
#if 0
|
||||
if(hint && hint<dll->size && !dll->functions[hint].name)
|
||||
{
|
||||
dll->functions[hint].name=xstrdup(item);
|
||||
dprintf_module(stddeb, "Returning unimplemented function %s.%d\n",
|
||||
dll_name,hint);
|
||||
return dll->functions[hint].definition;
|
||||
}
|
||||
#endif
|
||||
printf("Not found\n");
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
/* import by ordinal */
|
||||
if(!item){
|
||||
if(hint && hint<dll->size)return dll->functions[hint].definition;
|
||||
if(hint && hint<dll->size)
|
||||
return dll->functions[hint-dll->base].definition;
|
||||
return 0;
|
||||
}
|
||||
/* hint is correct */
|
||||
|
@ -153,7 +109,7 @@ void *RELAY32_GetEntryPoint(char *dll_name, char *item, int hint)
|
|||
{
|
||||
dll->functions[hint].name=xstrdup(item);
|
||||
dprintf_module(stddeb, "Returning unimplemented function %s.%d\n",
|
||||
dll_name,hint);
|
||||
dll->name,hint);
|
||||
return dll->functions[hint].definition;
|
||||
}
|
||||
return 0;
|
||||
|
@ -179,3 +135,63 @@ __asm__ (
|
|||
);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void RELAY32_MakeFakeModule(WIN32_builtin*dll)
|
||||
{
|
||||
NE_MODULE *pModule;
|
||||
struct w_files *wpnt;
|
||||
int size;
|
||||
HMODULE hModule;
|
||||
LOADEDFILEINFO *pFileInfo;
|
||||
char *pStr;
|
||||
wpnt=xmalloc(sizeof(struct w_files));
|
||||
wpnt->hinstance=0;
|
||||
wpnt->hModule=0;
|
||||
wpnt->initialised=1;
|
||||
wpnt->mz_header=wpnt->pe=0;
|
||||
size=sizeof(NE_MODULE) +
|
||||
/* loaded file info */
|
||||
sizeof(LOADEDFILEINFO) + strlen(dll->name) +
|
||||
/* name table */
|
||||
12 +
|
||||
/* several empty tables */
|
||||
8;
|
||||
hModule = GlobalAlloc( GMEM_MOVEABLE | GMEM_ZEROINIT, size );
|
||||
wpnt->hModule = hModule;
|
||||
FarSetOwner( hModule, hModule );
|
||||
pModule = (NE_MODULE*)GlobalLock(hModule);
|
||||
/* Set all used entries */
|
||||
pModule->magic=PE_SIGNATURE;
|
||||
pModule->count=1;
|
||||
pModule->next=0;
|
||||
pModule->flags=0;
|
||||
pModule->dgroup=0;
|
||||
pModule->ss=0;
|
||||
pModule->cs=0;
|
||||
pModule->heap_size=0;
|
||||
pModule->stack_size=0;
|
||||
pModule->seg_count=0;
|
||||
pModule->modref_count=0;
|
||||
pModule->nrname_size=0;
|
||||
pModule->seg_table=0;
|
||||
pModule->fileinfo=sizeof(NE_MODULE);
|
||||
pModule->os_flags=NE_OSFLAGS_WINDOWS;
|
||||
pModule->expected_version=0x30A;
|
||||
pFileInfo=(LOADEDFILEINFO *)(pModule + 1);
|
||||
pFileInfo->length = sizeof(LOADEDFILEINFO)+strlen(dll->name)-1;
|
||||
strcpy(pFileInfo->filename,dll->name);
|
||||
pStr = ((char*)pFileInfo+pFileInfo->length+1);
|
||||
pModule->name_table=(int)pStr-(int)pModule;
|
||||
*pStr=strlen(dll->name);
|
||||
strcpy(pStr+1,dll->name);
|
||||
pStr += *pStr+1;
|
||||
pModule->res_table=pModule->import_table=pModule->entry_table=
|
||||
(int)pStr-(int)pModule;
|
||||
MODULE_RegisterModule(hModule);
|
||||
wpnt->builtin=dll;
|
||||
wpnt->next=wine_files;
|
||||
wine_files=wpnt;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
|
|
@ -4,84 +4,122 @@ base 1
|
|||
0000 stub CheckEscapesA
|
||||
0001 stub CheckEscapesW
|
||||
0002 stub CommandLineToArgvW
|
||||
0003 stub DoEnvironmentSubstA
|
||||
0004 stub DoEnvironmentSubstW
|
||||
0005 stub DragAcceptFiles
|
||||
0006 stub DragFinish
|
||||
0007 stub DragQueryFileA
|
||||
0008 stub DragQueryFileAorW
|
||||
0009 stub DragQueryFileW
|
||||
0010 stub DragQueryPoint
|
||||
0011 stub DuplicateIcon
|
||||
0012 stub ExtractAssociatedIconA
|
||||
0013 stub ExtractAssociatedIconExA
|
||||
0014 stub ExtractAssociatedIconExW
|
||||
0015 stub ExtractAssociatedIconW
|
||||
0016 stub ExtractIconA
|
||||
0017 stub ExtractIconResInfoA
|
||||
0018 stub ExtractIconResInfoW
|
||||
0019 stub ExtractIconW
|
||||
0020 stub ExtractVersionResource16W
|
||||
0021 stub FindExeDlgProc
|
||||
0022 stub FindExecutableA
|
||||
0023 stub FindExecutableW
|
||||
0024 stub FreeIconList
|
||||
0025 stub InternalExtractIconListA
|
||||
0026 stub InternalExtractIconListW
|
||||
0027 stub RealShellExecuteA
|
||||
0028 stub RealShellExecuteExA
|
||||
0029 stub RealShellExecuteExW
|
||||
0030 stub RealShellExecuteW
|
||||
0031 stub RegenerateUserEnvironment
|
||||
0032 stub RegisterShellHook
|
||||
0033 stub SheChangeDirA
|
||||
0034 stub SheChangeDirExA
|
||||
0035 stub SheChangeDirExW
|
||||
0036 stub SheChangeDirW
|
||||
0037 stub SheConvertPathW
|
||||
0038 stub SheFullPathA
|
||||
0039 stub SheFullPathW
|
||||
0040 stub SheGetCurDrive
|
||||
0041 stub SheGetDirA
|
||||
0042 stub SheGetDirExW
|
||||
0043 stub SheGetDirW
|
||||
0044 stub SheGetPathOffsetW
|
||||
0045 stub SheRemoveQuotesA
|
||||
0046 stub SheRemoveQuotesW
|
||||
0047 stub SheSetCurDrive
|
||||
0048 stub SheShortenPathA
|
||||
0049 stub SheShortenPathW
|
||||
0050 stub ShellAboutA
|
||||
0051 stub ShellAboutW
|
||||
0052 stub ShellExecuteA
|
||||
0053 stub ShellExecuteW
|
||||
0054 stub ShellHookProc
|
||||
0055 stub StrChrA
|
||||
0056 stub StrChrIA
|
||||
0057 stub StrChrIW
|
||||
0058 stub StrChrW
|
||||
0059 stub StrCmpNA
|
||||
0060 stub StrCmpNIA
|
||||
0061 stub StrCmpNIW
|
||||
0062 stub StrCmpNW
|
||||
0063 stub StrCpyNA
|
||||
0064 stub StrCpyNW
|
||||
0065 stub StrNCmpA
|
||||
0066 stub StrNCmpIA
|
||||
0067 stub StrNCmpIW
|
||||
0068 stub StrNCmpW
|
||||
0069 stub StrNCpyA
|
||||
0070 stub StrNCpyW
|
||||
0071 stub StrRChrA
|
||||
0072 stub StrRChrIA
|
||||
0073 stub StrRChrIW
|
||||
0074 stub StrRChrW
|
||||
0075 stub StrRStrA
|
||||
0076 stub StrRStrIA
|
||||
0077 stub StrRStrIW
|
||||
0078 stub StrRStrW
|
||||
0079 stub StrStrA
|
||||
0080 stub StrStrIA
|
||||
0081 stub StrStrIW
|
||||
0082 stub StrStrW
|
||||
0083 stub WOWShellExecute
|
||||
0003 stub Control_FillCache_RunDLL
|
||||
0004 stub Control_RunDLL
|
||||
0005 stub DllGetClassObject
|
||||
0006 stub DoEnvironmentSubstA
|
||||
0007 stub DoEnvironmentSubstW
|
||||
0008 stub DragAcceptFiles
|
||||
0009 stub DragFinish
|
||||
0010 stub DragQueryFile
|
||||
0011 stub DragQueryFileA
|
||||
0012 stub DragQueryFileAorW
|
||||
0013 stub DragQueryFileW
|
||||
0014 stub DragQueryPoint
|
||||
0015 stub DuplicateIcon
|
||||
0016 stub ExtractAssociatedIconA
|
||||
0017 stub ExtractAssociatedIconExA
|
||||
0018 stub ExtractAssociatedIconExW
|
||||
0019 stub ExtractAssociatedIconW
|
||||
0020 stub ExtractIconA
|
||||
0021 stub ExtractIconEx
|
||||
0022 stub ExtractIconExA
|
||||
0023 stub ExtractIconExW
|
||||
0024 stub ExtractIconResInfoA
|
||||
0025 stub ExtractIconResInfoW
|
||||
0026 stub ExtractIconW
|
||||
0027 stub ExtractVersionResource16W
|
||||
0028 stub FindExeDlgProc
|
||||
0029 stub FindExecutableA
|
||||
0030 stub FindExecutableW
|
||||
0031 stub FreeIconList
|
||||
0032 stub InternalExtractIconListA
|
||||
0033 stub InternalExtractIconListW
|
||||
0034 stub OpenAs_RunDLL
|
||||
0035 stub PrintersGetCommand_RunDLL
|
||||
0036 stub RealShellExecuteA
|
||||
0037 stub RealShellExecuteExA
|
||||
0038 stub RealShellExecuteExW
|
||||
0039 stub RealShellExecuteW
|
||||
0040 stub RegenerateUserEnvironment
|
||||
0041 stub RegisterShellHook
|
||||
0042 stub SHAddToRecentDocs
|
||||
0043 stub SHAppBarMessage
|
||||
0044 stub SHBrowseForFolder
|
||||
0045 stub SHBrowseForFolderA
|
||||
0046 stub SHBrowseForFolderW
|
||||
0047 stub SHChangeNotify
|
||||
0048 stub SHFileOperation
|
||||
0049 stub SHFileOperationA
|
||||
0050 stub SHFileOperationW
|
||||
0051 stub SHFormatDrive
|
||||
0052 stub SHFreeNameMappings
|
||||
0053 stub SHGetDesktopFolder
|
||||
0054 stub SHGetFileInfo
|
||||
0055 stub SHGetFileInfoA
|
||||
0056 stub SHGetFileInfoW
|
||||
0057 stub SHGetInstanceExplorer
|
||||
0058 stub SHGetMalloc
|
||||
0059 stub SHGetPathFromIDList
|
||||
0060 stub SHGetPathFromIDListA
|
||||
0061 stub SHGetPathFromIDListW
|
||||
0062 stub SHGetSpecialFolderLocation
|
||||
0063 stub SHHelpShortcuts_RunDLL
|
||||
0064 stub SHLoadInProc
|
||||
0065 stub SheChangeDirA
|
||||
0066 stub SheChangeDirExA
|
||||
0067 stub SheChangeDirExW
|
||||
0068 stub SheChangeDirW
|
||||
0069 stub SheConvertPathW
|
||||
0070 stub SheFullPathA
|
||||
0071 stub SheFullPathW
|
||||
0072 stub SheGetCurDrive
|
||||
0073 stub SheGetDirA
|
||||
0074 stub SheGetDirExW
|
||||
0075 stub SheGetDirW
|
||||
0076 stub SheGetPathOffsetW
|
||||
0077 stub SheRemoveQuotesA
|
||||
0078 stub SheRemoveQuotesW
|
||||
0079 stub SheSetCurDrive
|
||||
0080 stub SheShortenPathA
|
||||
0081 stub SheShortenPathW
|
||||
0082 stub ShellAboutA
|
||||
0083 stub ShellAboutW
|
||||
0084 stub ShellExecuteA
|
||||
0085 stub ShellExecuteEx
|
||||
0086 stub ShellExecuteExA
|
||||
0087 stub ShellExecuteExW
|
||||
0088 stub ShellExecuteW
|
||||
0089 stub ShellHookProc
|
||||
0090 stub Shell_NotifyIcon
|
||||
0091 stub Shell_NotifyIconA
|
||||
0092 stub Shell_NotifyIconW
|
||||
0093 stub StrChrA
|
||||
0094 stub StrChrIA
|
||||
0095 stub StrChrIW
|
||||
0096 stub StrChrW
|
||||
0097 stub StrCmpNA
|
||||
0098 stub StrCmpNIA
|
||||
0099 stub StrCmpNIW
|
||||
0100 stub StrCmpNW
|
||||
0101 stub StrCpyNA
|
||||
0102 stub StrCpyNW
|
||||
0103 stub StrNCmpA
|
||||
0104 stub StrNCmpIA
|
||||
0105 stub StrNCmpIW
|
||||
0106 stub StrNCmpW
|
||||
0107 stub StrNCpyA
|
||||
0108 stub StrNCpyW
|
||||
0109 stub StrRChrA
|
||||
0110 stub StrRChrIA
|
||||
0111 stub StrRChrIW
|
||||
0112 stub StrRChrW
|
||||
0113 stub StrRStrA
|
||||
0114 stub StrRStrIA
|
||||
0115 stub StrRStrIW
|
||||
0116 stub StrRStrW
|
||||
0117 stub StrStrA
|
||||
0118 stub StrStrIA
|
||||
0119 stub StrStrIW
|
||||
0120 stub StrStrW
|
||||
0121 stub WOWShellExecute
|
||||
|
|
|
@ -70,11 +70,15 @@ base 1
|
|||
0066 stub CreateCursor
|
||||
0067 stub CreateDesktopA
|
||||
0068 stub CreateDesktopW
|
||||
0069 stub CreateDialogIndirectParamA
|
||||
0069 stdcall CreateDialogIndirectParamA(long ptr long ptr long)
|
||||
USER32_CreateDialogIndirectParamA
|
||||
0070 stub CreateDialogIndirectParamAorW
|
||||
0071 stub CreateDialogIndirectParamW
|
||||
0072 stub CreateDialogParamA
|
||||
0073 stub CreateDialogParamW
|
||||
0071 stdcall CreateDialogIndirectParamW(long ptr long ptr long)
|
||||
USER32_CreateDialogIndirectParamW
|
||||
0072 stdcall CreateDialogParamA(long ptr long ptr long)
|
||||
USER32_CreateDialogParamA
|
||||
0073 stdcall CreateDialogParamW(long ptr long ptr long)
|
||||
USER32_CreateDialogParamW
|
||||
0074 stub CreateIcon
|
||||
0075 stub CreateIconFromResource
|
||||
0076 stub CreateIconFromResourceEx
|
||||
|
@ -137,11 +141,13 @@ base 1
|
|||
0132 stub DestroyIcon
|
||||
0133 stub DestroyMenu
|
||||
0134 stub DestroyWindow
|
||||
0135 stub DialogBoxIndirectParamA
|
||||
0135 stdcall DialogBoxIndirectParamA(long ptr long ptr long)
|
||||
USER32_DialogBoxIndirectParamA
|
||||
0136 stub DialogBoxIndirectParamAorW
|
||||
0137 stub DialogBoxIndirectParamW
|
||||
0138 stub DialogBoxParamA
|
||||
0139 stub DialogBoxParamW
|
||||
0137 stdcall DialogBoxIndirectParamW(long ptr long ptr long)
|
||||
USER32_DialogBoxIndirectParamW
|
||||
0138 stdcall DialogBoxParamA(long ptr long ptr long) USER32_DialogBoxParamA
|
||||
0139 stdcall DialogBoxParamW(long ptr long ptr long) USER32_DialogBoxParamW
|
||||
0140 stdcall DispatchMessageA(ptr) USER32_DispatchMessageA
|
||||
0141 stub DispatchMessageW
|
||||
0142 stub DlgDirListA
|
||||
|
@ -203,7 +209,7 @@ base 1
|
|||
0198 stub FindWindowExA
|
||||
0199 stub FindWindowExW
|
||||
0200 stub FindWindowW
|
||||
0201 stub FlashWindow
|
||||
0201 stdcall FlashWindow(long long) FlashWindow
|
||||
0202 stub FrameRect
|
||||
0203 stub FreeDDElParam
|
||||
0204 stub GetActiveWindow
|
||||
|
@ -355,7 +361,7 @@ base 1
|
|||
0350 stub IsWindowVisible
|
||||
0351 stub IsZoomed
|
||||
0352 stub KillSystemTimer
|
||||
0353 stub KillTimer
|
||||
0353 stdcall KillTimer(long long) KillTimer
|
||||
0354 stdcall LoadAcceleratorsA(long ptr) WIN32_LoadAcceleratorsA
|
||||
0355 stdcall LoadAcceleratorsW(long ptr) WIN32_LoadAcceleratorsW
|
||||
0356 stdcall LoadBitmapA(long ptr) WIN32_LoadBitmapA
|
||||
|
@ -421,7 +427,7 @@ base 1
|
|||
0415 stub PeekMessageA
|
||||
0416 stub PeekMessageW
|
||||
0417 stub PlaySoundEvent
|
||||
0418 stub PostMessageA
|
||||
0418 stdcall PostMessageA(long long long long) PostMessage
|
||||
0419 stub PostMessageW
|
||||
0420 stdcall PostQuitMessage(long) PostQuitMessage
|
||||
0421 stub PostThreadMessageA
|
||||
|
@ -441,7 +447,7 @@ base 1
|
|||
0435 stub RegisterTasklist
|
||||
0436 stub RegisterWindowMessageA
|
||||
0437 stub RegisterWindowMessageW
|
||||
0438 stub ReleaseCapture
|
||||
0438 stdcall ReleaseCapture() ReleaseCapture
|
||||
0439 stdcall ReleaseDC(long long) ReleaseDC
|
||||
0440 stub RemoveMenu
|
||||
0441 stub RemovePropA
|
||||
|
@ -456,7 +462,7 @@ base 1
|
|||
0450 stub ScrollWindowEx
|
||||
0451 stub SendDlgItemMessageA
|
||||
0452 stub SendDlgItemMessageW
|
||||
0453 stub SendMessageA
|
||||
0453 stdcall SendMessageA(long long long long) SendMessage
|
||||
0454 stub SendMessageCallbackA
|
||||
0455 stub SendMessageCallbackW
|
||||
0456 stub SendMessageTimeoutA
|
||||
|
@ -466,7 +472,7 @@ base 1
|
|||
0460 stub SendNotifyMessageW
|
||||
0461 stub ServerSetFunctionPointers
|
||||
0462 stub SetActiveWindow
|
||||
0463 stub SetCapture
|
||||
0463 stdcall SetCapture(long) SetCapture
|
||||
0464 stub SetCaretBlinkTime
|
||||
0465 stub SetCaretPos
|
||||
0466 stub SetClassLongA
|
||||
|
@ -513,7 +519,7 @@ base 1
|
|||
0507 stub SetSystemMenu
|
||||
0508 stub SetSystemTimer
|
||||
0509 stub SetThreadDesktop
|
||||
0510 stub SetTimer
|
||||
0510 stdcall SetTimer(long long long long) USER32_SetTimer
|
||||
0511 stub SetUserObjectInformationA
|
||||
0512 stub SetUserObjectInformationW
|
||||
0513 stub SetUserObjectSecurity
|
||||
|
@ -587,7 +593,19 @@ base 1
|
|||
0581 stub WindowFromPoint
|
||||
0582 stub keybd_event
|
||||
0583 stub mouse_event
|
||||
0584 cdecl wsprintfA(ptr ptr ...) wsprintf
|
||||
0584 cdecl wsprintfA(ptr ptr ...) vsprintf
|
||||
0585 stub wsprintfW
|
||||
0586 stub wvsprintfA
|
||||
0587 stub wvsprintfW
|
||||
#late additions
|
||||
0588 stub ChangeDisplaySettingsA
|
||||
0588 stub ChangeDisplaySettingsW
|
||||
0588 stub EnumDesktopWindows
|
||||
0588 stub EnumDisplaySettingsA
|
||||
0588 stub EnumDisplaySettingsW
|
||||
0588 stub GetWindowRgn
|
||||
0588 stub MapVirtualKeyExW
|
||||
0588 stub RegisterServicesProcess
|
||||
0588 stub SetWindowRgn
|
||||
0588 stub ToUnicodeEx
|
||||
|
||||
|
|
126
if1632/winspool.spec
Normal file
126
if1632/winspool.spec
Normal file
|
@ -0,0 +1,126 @@
|
|||
name winspool
|
||||
base 100
|
||||
|
||||
001 stub ADVANCEDSETUPDIALOG
|
||||
002 stub AbortPrinter
|
||||
003 stub AddFormA
|
||||
004 stub AddFormW
|
||||
005 stub AddJobA
|
||||
006 stub AddJobW
|
||||
007 stub AddMonitorA
|
||||
008 stub AddMonitorW
|
||||
009 stub AddPortA
|
||||
010 stub AddPortExA
|
||||
011 stub AddPortExW
|
||||
012 stub AddPortW
|
||||
013 stub AddPrintProcessorA
|
||||
014 stub AddPrintProcessorW
|
||||
015 stub AddPrintProvidorA
|
||||
016 stub AddPrintProvidorW
|
||||
017 stub AddPrinterA
|
||||
018 stub AddPrinterConnectionA
|
||||
019 stub AddPrinterConnectionW
|
||||
020 stub AddPrinterDriverA
|
||||
021 stub AddPrinterDriverW
|
||||
022 stub AddPrinterW
|
||||
023 stub AdvancedDocumentPropertiesA
|
||||
024 stub AdvancedDocumentPropertiesW
|
||||
025 stub AdvancedSetupDialog
|
||||
026 stub ClosePrinter
|
||||
027 stub ConfigurePortA
|
||||
028 stub ConfigurePortW
|
||||
029 stub ConnectToPrinterDlg
|
||||
030 stub CreatePrinterIC
|
||||
031 stub DEVICECAPABILITIES
|
||||
032 stub DEVICEMODE
|
||||
033 stub DeleteFormA
|
||||
034 stub DeleteFormW
|
||||
035 stub DeleteMonitorA
|
||||
036 stub DeleteMonitorW
|
||||
037 stub DeletePortA
|
||||
038 stub DeletePortW
|
||||
039 stub DeletePrintProcessorA
|
||||
040 stub DeletePrintProcessorW
|
||||
041 stub DeletePrintProvidorA
|
||||
042 stub DeletePrintProvidorW
|
||||
043 stub DeletePrinter
|
||||
044 stub DeletePrinterConnectionA
|
||||
045 stub DeletePrinterConnectionW
|
||||
046 stub DeletePrinterDriverA
|
||||
047 stub DeletePrinterDriverW
|
||||
048 stub DeletePrinterIC
|
||||
049 stub DevQueryPrint
|
||||
050 stub DeviceCapabilities
|
||||
051 stub DeviceCapabilitiesA
|
||||
052 stub DeviceCapabilitiesW
|
||||
053 stub DeviceMode
|
||||
054 stub DocumentEvent
|
||||
055 stub DocumentPropertiesA
|
||||
056 stub DocumentPropertiesW
|
||||
057 stub EXTDEVICEMODE
|
||||
058 stub EndDocPrinter
|
||||
059 stub EndPagePrinter
|
||||
060 stub EnumFormsA
|
||||
061 stub EnumFormsW
|
||||
062 stub EnumJobsA
|
||||
063 stub EnumJobsW
|
||||
064 stub EnumMonitorsA
|
||||
065 stub EnumMonitorsW
|
||||
066 stub EnumPortsA
|
||||
067 stub EnumPortsW
|
||||
068 stub EnumPrintProcessorDatatypesA
|
||||
069 stub EnumPrintProcessorDatatypesW
|
||||
070 stub EnumPrintProcessorsA
|
||||
071 stub EnumPrintProcessorsW
|
||||
072 stub EnumPrinterDriversA
|
||||
073 stub EnumPrinterDriversW
|
||||
074 stub EnumPrintersA
|
||||
075 stub EnumPrintersW
|
||||
076 stub ExtDeviceMode
|
||||
077 stub FindClosePrinterChangeNotification
|
||||
078 stub FindFirstPrinterChangeNotification
|
||||
079 stub FindNextPrinterChangeNotification
|
||||
080 stub FreePrinterNotifyInfo
|
||||
081 stub GetFormA
|
||||
082 stub GetFormW
|
||||
083 stub GetJobA
|
||||
084 stub GetJobW
|
||||
085 stub GetPrintProcessorDirectoryA
|
||||
086 stub GetPrintProcessorDirectoryW
|
||||
087 stub GetPrinterA
|
||||
088 stub GetPrinterDataA
|
||||
089 stub GetPrinterDataW
|
||||
090 stub GetPrinterDriverA
|
||||
091 stub GetPrinterDriverDirectoryA
|
||||
092 stub GetPrinterDriverDirectoryW
|
||||
093 stub GetPrinterDriverW
|
||||
094 stub GetPrinterW
|
||||
095 stub InitializeDll
|
||||
096 stub OpenPrinterA
|
||||
097 stub OpenPrinterW
|
||||
098 stub PlayGdiScriptOnPrinterIC
|
||||
099 stub PrinterMessageBoxA
|
||||
100 stub PrinterMessageBoxW
|
||||
101 stub PrinterProperties
|
||||
102 stub ReadPrinter
|
||||
103 stub ResetPrinterA
|
||||
104 stub ResetPrinterW
|
||||
105 stub ScheduleJob
|
||||
106 stub SetAllocFailCount
|
||||
107 stub SetFormA
|
||||
108 stub SetFormW
|
||||
109 stub SetJobA
|
||||
110 stub SetJobW
|
||||
111 stub SetPrinterA
|
||||
112 stub SetPrinterDataA
|
||||
113 stub SetPrinterDataW
|
||||
114 stub SetPrinterW
|
||||
115 stub SpoolerDevQueryPrintW
|
||||
116 stub SpoolerInit
|
||||
117 stub StartDocDlgA
|
||||
118 stub StartDocDlgW
|
||||
119 stub StartDocPrinterA
|
||||
120 stub StartDocPrinterW
|
||||
121 stub StartPagePrinter
|
||||
122 stub WaitForPrinterChange
|
||||
123 stub WritePrinter
|
273
include/debug.h
273
include/debug.h
|
@ -28,6 +28,7 @@
|
|||
#undef DEBUG_CLIPPING
|
||||
#undef DEBUG_COMBO
|
||||
#undef DEBUG_COMM
|
||||
#undef DEBUG_COMMDLG
|
||||
#undef DEBUG_CURSOR
|
||||
#undef DEBUG_DC
|
||||
#undef DEBUG_DDE
|
||||
|
@ -106,6 +107,7 @@
|
|||
#define DEBUG_CLIPPING
|
||||
#define DEBUG_COMBO
|
||||
#define DEBUG_COMM
|
||||
#define DEBUG_COMMDLG
|
||||
#define DEBUG_CURSOR
|
||||
#define DEBUG_DC
|
||||
#define DEBUG_DDE
|
||||
|
@ -234,6 +236,11 @@ short debug_msg_enabled[]={
|
|||
#else
|
||||
0,
|
||||
#endif
|
||||
#ifdef DEBUG_COMMDLG
|
||||
1,
|
||||
#else
|
||||
0,
|
||||
#endif
|
||||
#ifdef DEBUG_CURSOR
|
||||
1,
|
||||
#else
|
||||
|
@ -713,8 +720,21 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_cursor if(!debug_msg_enabled[12]) ; else fprintf
|
||||
#define debugging_cursor debug_msg_enabled[12]
|
||||
#define dprintf_commdlg if(!debug_msg_enabled[12]) ; else fprintf
|
||||
#define debugging_commdlg debug_msg_enabled[12]
|
||||
#else
|
||||
#ifdef DEBUG_COMMDLG
|
||||
#define dprintf_commdlg fprintf
|
||||
#define debugging_commdlg 1
|
||||
#else
|
||||
#define dprintf_commdlg while(0) fprintf
|
||||
#define debugging_commdlg 0
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_cursor if(!debug_msg_enabled[13]) ; else fprintf
|
||||
#define debugging_cursor debug_msg_enabled[13]
|
||||
#else
|
||||
#ifdef DEBUG_CURSOR
|
||||
#define dprintf_cursor fprintf
|
||||
|
@ -726,8 +746,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_dc if(!debug_msg_enabled[13]) ; else fprintf
|
||||
#define debugging_dc debug_msg_enabled[13]
|
||||
#define dprintf_dc if(!debug_msg_enabled[14]) ; else fprintf
|
||||
#define debugging_dc debug_msg_enabled[14]
|
||||
#else
|
||||
#ifdef DEBUG_DC
|
||||
#define dprintf_dc fprintf
|
||||
|
@ -739,8 +759,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_dde if(!debug_msg_enabled[14]) ; else fprintf
|
||||
#define debugging_dde debug_msg_enabled[14]
|
||||
#define dprintf_dde if(!debug_msg_enabled[15]) ; else fprintf
|
||||
#define debugging_dde debug_msg_enabled[15]
|
||||
#else
|
||||
#ifdef DEBUG_DDE
|
||||
#define dprintf_dde fprintf
|
||||
|
@ -752,8 +772,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_dialog if(!debug_msg_enabled[15]) ; else fprintf
|
||||
#define debugging_dialog debug_msg_enabled[15]
|
||||
#define dprintf_dialog if(!debug_msg_enabled[16]) ; else fprintf
|
||||
#define debugging_dialog debug_msg_enabled[16]
|
||||
#else
|
||||
#ifdef DEBUG_DIALOG
|
||||
#define dprintf_dialog fprintf
|
||||
|
@ -765,8 +785,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_dll if(!debug_msg_enabled[16]) ; else fprintf
|
||||
#define debugging_dll debug_msg_enabled[16]
|
||||
#define dprintf_dll if(!debug_msg_enabled[17]) ; else fprintf
|
||||
#define debugging_dll debug_msg_enabled[17]
|
||||
#else
|
||||
#ifdef DEBUG_DLL
|
||||
#define dprintf_dll fprintf
|
||||
|
@ -778,8 +798,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_dosfs if(!debug_msg_enabled[17]) ; else fprintf
|
||||
#define debugging_dosfs debug_msg_enabled[17]
|
||||
#define dprintf_dosfs if(!debug_msg_enabled[18]) ; else fprintf
|
||||
#define debugging_dosfs debug_msg_enabled[18]
|
||||
#else
|
||||
#ifdef DEBUG_DOSFS
|
||||
#define dprintf_dosfs fprintf
|
||||
|
@ -791,8 +811,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_driver if(!debug_msg_enabled[18]) ; else fprintf
|
||||
#define debugging_driver debug_msg_enabled[18]
|
||||
#define dprintf_driver if(!debug_msg_enabled[19]) ; else fprintf
|
||||
#define debugging_driver debug_msg_enabled[19]
|
||||
#else
|
||||
#ifdef DEBUG_DRIVER
|
||||
#define dprintf_driver fprintf
|
||||
|
@ -804,8 +824,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_edit if(!debug_msg_enabled[19]) ; else fprintf
|
||||
#define debugging_edit debug_msg_enabled[19]
|
||||
#define dprintf_edit if(!debug_msg_enabled[20]) ; else fprintf
|
||||
#define debugging_edit debug_msg_enabled[20]
|
||||
#else
|
||||
#ifdef DEBUG_EDIT
|
||||
#define dprintf_edit fprintf
|
||||
|
@ -817,8 +837,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_enum if(!debug_msg_enabled[20]) ; else fprintf
|
||||
#define debugging_enum debug_msg_enabled[20]
|
||||
#define dprintf_enum if(!debug_msg_enabled[21]) ; else fprintf
|
||||
#define debugging_enum debug_msg_enabled[21]
|
||||
#else
|
||||
#ifdef DEBUG_ENUM
|
||||
#define dprintf_enum fprintf
|
||||
|
@ -830,8 +850,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_env if(!debug_msg_enabled[21]) ; else fprintf
|
||||
#define debugging_env debug_msg_enabled[21]
|
||||
#define dprintf_env if(!debug_msg_enabled[22]) ; else fprintf
|
||||
#define debugging_env debug_msg_enabled[22]
|
||||
#else
|
||||
#ifdef DEBUG_ENV
|
||||
#define dprintf_env fprintf
|
||||
|
@ -843,8 +863,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_event if(!debug_msg_enabled[22]) ; else fprintf
|
||||
#define debugging_event debug_msg_enabled[22]
|
||||
#define dprintf_event if(!debug_msg_enabled[23]) ; else fprintf
|
||||
#define debugging_event debug_msg_enabled[23]
|
||||
#else
|
||||
#ifdef DEBUG_EVENT
|
||||
#define dprintf_event fprintf
|
||||
|
@ -856,8 +876,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_exec if(!debug_msg_enabled[23]) ; else fprintf
|
||||
#define debugging_exec debug_msg_enabled[23]
|
||||
#define dprintf_exec if(!debug_msg_enabled[24]) ; else fprintf
|
||||
#define debugging_exec debug_msg_enabled[24]
|
||||
#else
|
||||
#ifdef DEBUG_EXEC
|
||||
#define dprintf_exec fprintf
|
||||
|
@ -869,8 +889,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_file if(!debug_msg_enabled[24]) ; else fprintf
|
||||
#define debugging_file debug_msg_enabled[24]
|
||||
#define dprintf_file if(!debug_msg_enabled[25]) ; else fprintf
|
||||
#define debugging_file debug_msg_enabled[25]
|
||||
#else
|
||||
#ifdef DEBUG_FILE
|
||||
#define dprintf_file fprintf
|
||||
|
@ -882,8 +902,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_fixup if(!debug_msg_enabled[25]) ; else fprintf
|
||||
#define debugging_fixup debug_msg_enabled[25]
|
||||
#define dprintf_fixup if(!debug_msg_enabled[26]) ; else fprintf
|
||||
#define debugging_fixup debug_msg_enabled[26]
|
||||
#else
|
||||
#ifdef DEBUG_FIXUP
|
||||
#define dprintf_fixup fprintf
|
||||
|
@ -895,8 +915,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_font if(!debug_msg_enabled[26]) ; else fprintf
|
||||
#define debugging_font debug_msg_enabled[26]
|
||||
#define dprintf_font if(!debug_msg_enabled[27]) ; else fprintf
|
||||
#define debugging_font debug_msg_enabled[27]
|
||||
#else
|
||||
#ifdef DEBUG_FONT
|
||||
#define dprintf_font fprintf
|
||||
|
@ -908,8 +928,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_gdi if(!debug_msg_enabled[27]) ; else fprintf
|
||||
#define debugging_gdi debug_msg_enabled[27]
|
||||
#define dprintf_gdi if(!debug_msg_enabled[28]) ; else fprintf
|
||||
#define debugging_gdi debug_msg_enabled[28]
|
||||
#else
|
||||
#ifdef DEBUG_GDI
|
||||
#define dprintf_gdi fprintf
|
||||
|
@ -921,8 +941,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_global if(!debug_msg_enabled[28]) ; else fprintf
|
||||
#define debugging_global debug_msg_enabled[28]
|
||||
#define dprintf_global if(!debug_msg_enabled[29]) ; else fprintf
|
||||
#define debugging_global debug_msg_enabled[29]
|
||||
#else
|
||||
#ifdef DEBUG_GLOBAL
|
||||
#define dprintf_global fprintf
|
||||
|
@ -934,8 +954,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_graphics if(!debug_msg_enabled[29]) ; else fprintf
|
||||
#define debugging_graphics debug_msg_enabled[29]
|
||||
#define dprintf_graphics if(!debug_msg_enabled[30]) ; else fprintf
|
||||
#define debugging_graphics debug_msg_enabled[30]
|
||||
#else
|
||||
#ifdef DEBUG_GRAPHICS
|
||||
#define dprintf_graphics fprintf
|
||||
|
@ -947,8 +967,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_hook if(!debug_msg_enabled[30]) ; else fprintf
|
||||
#define debugging_hook debug_msg_enabled[30]
|
||||
#define dprintf_hook if(!debug_msg_enabled[31]) ; else fprintf
|
||||
#define debugging_hook debug_msg_enabled[31]
|
||||
#else
|
||||
#ifdef DEBUG_HOOK
|
||||
#define dprintf_hook fprintf
|
||||
|
@ -960,8 +980,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_icon if(!debug_msg_enabled[31]) ; else fprintf
|
||||
#define debugging_icon debug_msg_enabled[31]
|
||||
#define dprintf_icon if(!debug_msg_enabled[32]) ; else fprintf
|
||||
#define debugging_icon debug_msg_enabled[32]
|
||||
#else
|
||||
#ifdef DEBUG_ICON
|
||||
#define dprintf_icon fprintf
|
||||
|
@ -973,8 +993,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_int if(!debug_msg_enabled[32]) ; else fprintf
|
||||
#define debugging_int debug_msg_enabled[32]
|
||||
#define dprintf_int if(!debug_msg_enabled[33]) ; else fprintf
|
||||
#define debugging_int debug_msg_enabled[33]
|
||||
#else
|
||||
#ifdef DEBUG_INT
|
||||
#define dprintf_int fprintf
|
||||
|
@ -986,8 +1006,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_key if(!debug_msg_enabled[33]) ; else fprintf
|
||||
#define debugging_key debug_msg_enabled[33]
|
||||
#define dprintf_key if(!debug_msg_enabled[34]) ; else fprintf
|
||||
#define debugging_key debug_msg_enabled[34]
|
||||
#else
|
||||
#ifdef DEBUG_KEY
|
||||
#define dprintf_key fprintf
|
||||
|
@ -999,8 +1019,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_keyboard if(!debug_msg_enabled[34]) ; else fprintf
|
||||
#define debugging_keyboard debug_msg_enabled[34]
|
||||
#define dprintf_keyboard if(!debug_msg_enabled[35]) ; else fprintf
|
||||
#define debugging_keyboard debug_msg_enabled[35]
|
||||
#else
|
||||
#ifdef DEBUG_KEYBOARD
|
||||
#define dprintf_keyboard fprintf
|
||||
|
@ -1012,8 +1032,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_ldt if(!debug_msg_enabled[35]) ; else fprintf
|
||||
#define debugging_ldt debug_msg_enabled[35]
|
||||
#define dprintf_ldt if(!debug_msg_enabled[36]) ; else fprintf
|
||||
#define debugging_ldt debug_msg_enabled[36]
|
||||
#else
|
||||
#ifdef DEBUG_LDT
|
||||
#define dprintf_ldt fprintf
|
||||
|
@ -1025,8 +1045,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_listbox if(!debug_msg_enabled[36]) ; else fprintf
|
||||
#define debugging_listbox debug_msg_enabled[36]
|
||||
#define dprintf_listbox if(!debug_msg_enabled[37]) ; else fprintf
|
||||
#define debugging_listbox debug_msg_enabled[37]
|
||||
#else
|
||||
#ifdef DEBUG_LISTBOX
|
||||
#define dprintf_listbox fprintf
|
||||
|
@ -1038,8 +1058,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_local if(!debug_msg_enabled[37]) ; else fprintf
|
||||
#define debugging_local debug_msg_enabled[37]
|
||||
#define dprintf_local if(!debug_msg_enabled[38]) ; else fprintf
|
||||
#define debugging_local debug_msg_enabled[38]
|
||||
#else
|
||||
#ifdef DEBUG_LOCAL
|
||||
#define dprintf_local fprintf
|
||||
|
@ -1051,8 +1071,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_mci if(!debug_msg_enabled[38]) ; else fprintf
|
||||
#define debugging_mci debug_msg_enabled[38]
|
||||
#define dprintf_mci if(!debug_msg_enabled[39]) ; else fprintf
|
||||
#define debugging_mci debug_msg_enabled[39]
|
||||
#else
|
||||
#ifdef DEBUG_MCI
|
||||
#define dprintf_mci fprintf
|
||||
|
@ -1064,8 +1084,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_mcianim if(!debug_msg_enabled[39]) ; else fprintf
|
||||
#define debugging_mcianim debug_msg_enabled[39]
|
||||
#define dprintf_mcianim if(!debug_msg_enabled[40]) ; else fprintf
|
||||
#define debugging_mcianim debug_msg_enabled[40]
|
||||
#else
|
||||
#ifdef DEBUG_MCIANIM
|
||||
#define dprintf_mcianim fprintf
|
||||
|
@ -1077,8 +1097,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_mciwave if(!debug_msg_enabled[40]) ; else fprintf
|
||||
#define debugging_mciwave debug_msg_enabled[40]
|
||||
#define dprintf_mciwave if(!debug_msg_enabled[41]) ; else fprintf
|
||||
#define debugging_mciwave debug_msg_enabled[41]
|
||||
#else
|
||||
#ifdef DEBUG_MCIWAVE
|
||||
#define dprintf_mciwave fprintf
|
||||
|
@ -1090,8 +1110,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_mdi if(!debug_msg_enabled[41]) ; else fprintf
|
||||
#define debugging_mdi debug_msg_enabled[41]
|
||||
#define dprintf_mdi if(!debug_msg_enabled[42]) ; else fprintf
|
||||
#define debugging_mdi debug_msg_enabled[42]
|
||||
#else
|
||||
#ifdef DEBUG_MDI
|
||||
#define dprintf_mdi fprintf
|
||||
|
@ -1103,8 +1123,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_menu if(!debug_msg_enabled[42]) ; else fprintf
|
||||
#define debugging_menu debug_msg_enabled[42]
|
||||
#define dprintf_menu if(!debug_msg_enabled[43]) ; else fprintf
|
||||
#define debugging_menu debug_msg_enabled[43]
|
||||
#else
|
||||
#ifdef DEBUG_MENU
|
||||
#define dprintf_menu fprintf
|
||||
|
@ -1116,8 +1136,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_message if(!debug_msg_enabled[43]) ; else fprintf
|
||||
#define debugging_message debug_msg_enabled[43]
|
||||
#define dprintf_message if(!debug_msg_enabled[44]) ; else fprintf
|
||||
#define debugging_message debug_msg_enabled[44]
|
||||
#else
|
||||
#ifdef DEBUG_MESSAGE
|
||||
#define dprintf_message fprintf
|
||||
|
@ -1129,8 +1149,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_metafile if(!debug_msg_enabled[44]) ; else fprintf
|
||||
#define debugging_metafile debug_msg_enabled[44]
|
||||
#define dprintf_metafile if(!debug_msg_enabled[45]) ; else fprintf
|
||||
#define debugging_metafile debug_msg_enabled[45]
|
||||
#else
|
||||
#ifdef DEBUG_METAFILE
|
||||
#define dprintf_metafile fprintf
|
||||
|
@ -1142,8 +1162,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_midi if(!debug_msg_enabled[45]) ; else fprintf
|
||||
#define debugging_midi debug_msg_enabled[45]
|
||||
#define dprintf_midi if(!debug_msg_enabled[46]) ; else fprintf
|
||||
#define debugging_midi debug_msg_enabled[46]
|
||||
#else
|
||||
#ifdef DEBUG_MIDI
|
||||
#define dprintf_midi fprintf
|
||||
|
@ -1155,8 +1175,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_mmio if(!debug_msg_enabled[46]) ; else fprintf
|
||||
#define debugging_mmio debug_msg_enabled[46]
|
||||
#define dprintf_mmio if(!debug_msg_enabled[47]) ; else fprintf
|
||||
#define debugging_mmio debug_msg_enabled[47]
|
||||
#else
|
||||
#ifdef DEBUG_MMIO
|
||||
#define dprintf_mmio fprintf
|
||||
|
@ -1168,8 +1188,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_mmsys if(!debug_msg_enabled[47]) ; else fprintf
|
||||
#define debugging_mmsys debug_msg_enabled[47]
|
||||
#define dprintf_mmsys if(!debug_msg_enabled[48]) ; else fprintf
|
||||
#define debugging_mmsys debug_msg_enabled[48]
|
||||
#else
|
||||
#ifdef DEBUG_MMSYS
|
||||
#define dprintf_mmsys fprintf
|
||||
|
@ -1181,8 +1201,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_mmtime if(!debug_msg_enabled[48]) ; else fprintf
|
||||
#define debugging_mmtime debug_msg_enabled[48]
|
||||
#define dprintf_mmtime if(!debug_msg_enabled[49]) ; else fprintf
|
||||
#define debugging_mmtime debug_msg_enabled[49]
|
||||
#else
|
||||
#ifdef DEBUG_MMTIME
|
||||
#define dprintf_mmtime fprintf
|
||||
|
@ -1194,8 +1214,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_module if(!debug_msg_enabled[49]) ; else fprintf
|
||||
#define debugging_module debug_msg_enabled[49]
|
||||
#define dprintf_module if(!debug_msg_enabled[50]) ; else fprintf
|
||||
#define debugging_module debug_msg_enabled[50]
|
||||
#else
|
||||
#ifdef DEBUG_MODULE
|
||||
#define dprintf_module fprintf
|
||||
|
@ -1207,8 +1227,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_msg if(!debug_msg_enabled[50]) ; else fprintf
|
||||
#define debugging_msg debug_msg_enabled[50]
|
||||
#define dprintf_msg if(!debug_msg_enabled[51]) ; else fprintf
|
||||
#define debugging_msg debug_msg_enabled[51]
|
||||
#else
|
||||
#ifdef DEBUG_MSG
|
||||
#define dprintf_msg fprintf
|
||||
|
@ -1220,8 +1240,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_nonclient if(!debug_msg_enabled[51]) ; else fprintf
|
||||
#define debugging_nonclient debug_msg_enabled[51]
|
||||
#define dprintf_nonclient if(!debug_msg_enabled[52]) ; else fprintf
|
||||
#define debugging_nonclient debug_msg_enabled[52]
|
||||
#else
|
||||
#ifdef DEBUG_NONCLIENT
|
||||
#define dprintf_nonclient fprintf
|
||||
|
@ -1233,8 +1253,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_ole if(!debug_msg_enabled[52]) ; else fprintf
|
||||
#define debugging_ole debug_msg_enabled[52]
|
||||
#define dprintf_ole if(!debug_msg_enabled[53]) ; else fprintf
|
||||
#define debugging_ole debug_msg_enabled[53]
|
||||
#else
|
||||
#ifdef DEBUG_OLE
|
||||
#define dprintf_ole fprintf
|
||||
|
@ -1246,8 +1266,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_palette if(!debug_msg_enabled[53]) ; else fprintf
|
||||
#define debugging_palette debug_msg_enabled[53]
|
||||
#define dprintf_palette if(!debug_msg_enabled[54]) ; else fprintf
|
||||
#define debugging_palette debug_msg_enabled[54]
|
||||
#else
|
||||
#ifdef DEBUG_PALETTE
|
||||
#define dprintf_palette fprintf
|
||||
|
@ -1259,8 +1279,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_profile if(!debug_msg_enabled[54]) ; else fprintf
|
||||
#define debugging_profile debug_msg_enabled[54]
|
||||
#define dprintf_profile if(!debug_msg_enabled[55]) ; else fprintf
|
||||
#define debugging_profile debug_msg_enabled[55]
|
||||
#else
|
||||
#ifdef DEBUG_PROFILE
|
||||
#define dprintf_profile fprintf
|
||||
|
@ -1272,8 +1292,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_prop if(!debug_msg_enabled[55]) ; else fprintf
|
||||
#define debugging_prop debug_msg_enabled[55]
|
||||
#define dprintf_prop if(!debug_msg_enabled[56]) ; else fprintf
|
||||
#define debugging_prop debug_msg_enabled[56]
|
||||
#else
|
||||
#ifdef DEBUG_PROP
|
||||
#define dprintf_prop fprintf
|
||||
|
@ -1285,8 +1305,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_reg if(!debug_msg_enabled[56]) ; else fprintf
|
||||
#define debugging_reg debug_msg_enabled[56]
|
||||
#define dprintf_reg if(!debug_msg_enabled[57]) ; else fprintf
|
||||
#define debugging_reg debug_msg_enabled[57]
|
||||
#else
|
||||
#ifdef DEBUG_REG
|
||||
#define dprintf_reg fprintf
|
||||
|
@ -1298,8 +1318,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_region if(!debug_msg_enabled[57]) ; else fprintf
|
||||
#define debugging_region debug_msg_enabled[57]
|
||||
#define dprintf_region if(!debug_msg_enabled[58]) ; else fprintf
|
||||
#define debugging_region debug_msg_enabled[58]
|
||||
#else
|
||||
#ifdef DEBUG_REGION
|
||||
#define dprintf_region fprintf
|
||||
|
@ -1311,8 +1331,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_relay if(!debug_msg_enabled[58]) ; else fprintf
|
||||
#define debugging_relay debug_msg_enabled[58]
|
||||
#define dprintf_relay if(!debug_msg_enabled[59]) ; else fprintf
|
||||
#define debugging_relay debug_msg_enabled[59]
|
||||
#else
|
||||
#ifdef DEBUG_RELAY
|
||||
#define dprintf_relay fprintf
|
||||
|
@ -1324,8 +1344,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_resource if(!debug_msg_enabled[59]) ; else fprintf
|
||||
#define debugging_resource debug_msg_enabled[59]
|
||||
#define dprintf_resource if(!debug_msg_enabled[60]) ; else fprintf
|
||||
#define debugging_resource debug_msg_enabled[60]
|
||||
#else
|
||||
#ifdef DEBUG_RESOURCE
|
||||
#define dprintf_resource fprintf
|
||||
|
@ -1337,8 +1357,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_scroll if(!debug_msg_enabled[60]) ; else fprintf
|
||||
#define debugging_scroll debug_msg_enabled[60]
|
||||
#define dprintf_scroll if(!debug_msg_enabled[61]) ; else fprintf
|
||||
#define debugging_scroll debug_msg_enabled[61]
|
||||
#else
|
||||
#ifdef DEBUG_SCROLL
|
||||
#define dprintf_scroll fprintf
|
||||
|
@ -1350,8 +1370,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_selector if(!debug_msg_enabled[61]) ; else fprintf
|
||||
#define debugging_selector debug_msg_enabled[61]
|
||||
#define dprintf_selector if(!debug_msg_enabled[62]) ; else fprintf
|
||||
#define debugging_selector debug_msg_enabled[62]
|
||||
#else
|
||||
#ifdef DEBUG_SELECTOR
|
||||
#define dprintf_selector fprintf
|
||||
|
@ -1363,8 +1383,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_sem if(!debug_msg_enabled[62]) ; else fprintf
|
||||
#define debugging_sem debug_msg_enabled[62]
|
||||
#define dprintf_sem if(!debug_msg_enabled[63]) ; else fprintf
|
||||
#define debugging_sem debug_msg_enabled[63]
|
||||
#else
|
||||
#ifdef DEBUG_SEM
|
||||
#define dprintf_sem fprintf
|
||||
|
@ -1376,8 +1396,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_shm if(!debug_msg_enabled[63]) ; else fprintf
|
||||
#define debugging_shm debug_msg_enabled[63]
|
||||
#define dprintf_shm if(!debug_msg_enabled[64]) ; else fprintf
|
||||
#define debugging_shm debug_msg_enabled[64]
|
||||
#else
|
||||
#ifdef DEBUG_SHM
|
||||
#define dprintf_shm fprintf
|
||||
|
@ -1389,8 +1409,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_stress if(!debug_msg_enabled[64]) ; else fprintf
|
||||
#define debugging_stress debug_msg_enabled[64]
|
||||
#define dprintf_stress if(!debug_msg_enabled[65]) ; else fprintf
|
||||
#define debugging_stress debug_msg_enabled[65]
|
||||
#else
|
||||
#ifdef DEBUG_STRESS
|
||||
#define dprintf_stress fprintf
|
||||
|
@ -1402,8 +1422,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_syscolor if(!debug_msg_enabled[65]) ; else fprintf
|
||||
#define debugging_syscolor debug_msg_enabled[65]
|
||||
#define dprintf_syscolor if(!debug_msg_enabled[66]) ; else fprintf
|
||||
#define debugging_syscolor debug_msg_enabled[66]
|
||||
#else
|
||||
#ifdef DEBUG_SYSCOLOR
|
||||
#define dprintf_syscolor fprintf
|
||||
|
@ -1415,8 +1435,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_task if(!debug_msg_enabled[66]) ; else fprintf
|
||||
#define debugging_task debug_msg_enabled[66]
|
||||
#define dprintf_task if(!debug_msg_enabled[67]) ; else fprintf
|
||||
#define debugging_task debug_msg_enabled[67]
|
||||
#else
|
||||
#ifdef DEBUG_TASK
|
||||
#define dprintf_task fprintf
|
||||
|
@ -1428,8 +1448,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_text if(!debug_msg_enabled[67]) ; else fprintf
|
||||
#define debugging_text debug_msg_enabled[67]
|
||||
#define dprintf_text if(!debug_msg_enabled[68]) ; else fprintf
|
||||
#define debugging_text debug_msg_enabled[68]
|
||||
#else
|
||||
#ifdef DEBUG_TEXT
|
||||
#define dprintf_text fprintf
|
||||
|
@ -1441,8 +1461,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_timer if(!debug_msg_enabled[68]) ; else fprintf
|
||||
#define debugging_timer debug_msg_enabled[68]
|
||||
#define dprintf_timer if(!debug_msg_enabled[69]) ; else fprintf
|
||||
#define debugging_timer debug_msg_enabled[69]
|
||||
#else
|
||||
#ifdef DEBUG_TIMER
|
||||
#define dprintf_timer fprintf
|
||||
|
@ -1454,8 +1474,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_toolhelp if(!debug_msg_enabled[69]) ; else fprintf
|
||||
#define debugging_toolhelp debug_msg_enabled[69]
|
||||
#define dprintf_toolhelp if(!debug_msg_enabled[70]) ; else fprintf
|
||||
#define debugging_toolhelp debug_msg_enabled[70]
|
||||
#else
|
||||
#ifdef DEBUG_TOOLHELP
|
||||
#define dprintf_toolhelp fprintf
|
||||
|
@ -1467,8 +1487,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_utility if(!debug_msg_enabled[70]) ; else fprintf
|
||||
#define debugging_utility debug_msg_enabled[70]
|
||||
#define dprintf_utility if(!debug_msg_enabled[71]) ; else fprintf
|
||||
#define debugging_utility debug_msg_enabled[71]
|
||||
#else
|
||||
#ifdef DEBUG_UTILITY
|
||||
#define dprintf_utility fprintf
|
||||
|
@ -1480,8 +1500,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_vxd if(!debug_msg_enabled[71]) ; else fprintf
|
||||
#define debugging_vxd debug_msg_enabled[71]
|
||||
#define dprintf_vxd if(!debug_msg_enabled[72]) ; else fprintf
|
||||
#define debugging_vxd debug_msg_enabled[72]
|
||||
#else
|
||||
#ifdef DEBUG_VXD
|
||||
#define dprintf_vxd fprintf
|
||||
|
@ -1493,8 +1513,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_win if(!debug_msg_enabled[72]) ; else fprintf
|
||||
#define debugging_win debug_msg_enabled[72]
|
||||
#define dprintf_win if(!debug_msg_enabled[73]) ; else fprintf
|
||||
#define debugging_win debug_msg_enabled[73]
|
||||
#else
|
||||
#ifdef DEBUG_WIN
|
||||
#define dprintf_win fprintf
|
||||
|
@ -1506,8 +1526,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_win32 if(!debug_msg_enabled[73]) ; else fprintf
|
||||
#define debugging_win32 debug_msg_enabled[73]
|
||||
#define dprintf_win32 if(!debug_msg_enabled[74]) ; else fprintf
|
||||
#define debugging_win32 debug_msg_enabled[74]
|
||||
#else
|
||||
#ifdef DEBUG_WIN32
|
||||
#define dprintf_win32 fprintf
|
||||
|
@ -1519,8 +1539,8 @@ extern short debug_msg_enabled[];
|
|||
#endif
|
||||
|
||||
#ifdef DEBUG_RUNTIME
|
||||
#define dprintf_winsock if(!debug_msg_enabled[74]) ; else fprintf
|
||||
#define debugging_winsock debug_msg_enabled[74]
|
||||
#define dprintf_winsock if(!debug_msg_enabled[75]) ; else fprintf
|
||||
#define debugging_winsock debug_msg_enabled[75]
|
||||
#else
|
||||
#ifdef DEBUG_WINSOCK
|
||||
#define dprintf_winsock fprintf
|
||||
|
@ -1547,6 +1567,7 @@ static char *debug_msg_name[] = {
|
|||
"clipping",
|
||||
"combo",
|
||||
"comm",
|
||||
"commdlg",
|
||||
"cursor",
|
||||
"dc",
|
||||
"dde",
|
||||
|
|
|
@ -70,4 +70,7 @@ typedef struct
|
|||
|
||||
#pragma pack(4)
|
||||
|
||||
extern WORD xBaseUnit,yBaseUnit;
|
||||
int DIALOG_DoDialogBox( HWND hwnd, HWND owner );
|
||||
|
||||
#endif /* DIALOG_H */
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
#include "windows.h"
|
||||
|
||||
extern void FILE_SetDosError(void);
|
||||
extern int FILE_GetUnixHandle( HFILE handle );
|
||||
extern int FILE_GetUnixTaskHandle( HFILE handle );
|
||||
extern void FILE_CloseAllFiles( HANDLE hPDB );
|
||||
extern int FILE_Open( LPCSTR path, int mode );
|
||||
extern int FILE_Create( LPCSTR path, int mode, int unique );
|
||||
|
@ -24,6 +24,7 @@ extern int FILE_RemoveDir( LPCSTR path );
|
|||
extern HFILE FILE_Dup( HFILE hFile );
|
||||
extern HFILE FILE_Dup2( HFILE hFile1, HFILE hFile2 );
|
||||
extern int FILE_OpenFile( LPCSTR name, OFSTRUCT *ofs, UINT mode );
|
||||
extern LONG FILE_Read( HFILE hFile, LPSTR buffer, LONG count );
|
||||
extern INT _lcreat_uniq( LPCSTR path, INT attr );
|
||||
|
||||
#endif /* __WINE_FILE_H */
|
||||
|
|
|
@ -26,6 +26,7 @@
|
|||
#define META_DC_MAGIC 0x4f4f
|
||||
#define METAFILE_MAGIC 0x4f50
|
||||
#define METAFILE_DC_MAGIC 0x4f51
|
||||
#define MAGIC_DONTCARE 0xffff
|
||||
|
||||
#ifndef WINELIB
|
||||
#pragma pack(1)
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#define __WINE_HANDLE32_H
|
||||
|
||||
#include <malloc.h>
|
||||
#include "wintypes.h"
|
||||
|
||||
/* The _*_OBJECT structures contain information needed about each
|
||||
* particular type of handle. This information is a combination of
|
||||
|
@ -61,6 +62,31 @@ typedef struct {
|
|||
KERNEL_OBJECT common;
|
||||
} REGKEY_OBJECT;
|
||||
|
||||
typedef struct _VRANGE_OBJECT{
|
||||
KERNEL_OBJECT common;
|
||||
DWORD start;
|
||||
DWORD size;
|
||||
struct _VRANGE_OBJECT *next;
|
||||
} VRANGE_OBJECT;
|
||||
|
||||
struct _HEAPITEM_OBJECT;
|
||||
typedef struct{
|
||||
KERNEL_OBJECT common;
|
||||
LPVOID start;
|
||||
DWORD size;
|
||||
DWORD maximum;
|
||||
DWORD flags;
|
||||
struct _HEAPITEM_OBJECT *first,*last;
|
||||
} HEAP_OBJECT;
|
||||
|
||||
typedef struct _HEAPITEM_OBJECT{
|
||||
KERNEL_OBJECT common;
|
||||
HEAP_OBJECT *heap;
|
||||
DWORD size; /* size including header */
|
||||
struct _HEAPITEM_OBJECT *next,*prev;
|
||||
} HEAPITEM_OBJECT;
|
||||
|
||||
|
||||
/* Object number definitions. These numbers are used to
|
||||
* validate the kernel object by comparison against the
|
||||
* object's 'magic' value.
|
||||
|
@ -73,6 +99,9 @@ typedef struct {
|
|||
#define KERNEL_OBJECT_EVENT (KERNEL_OBJECT_UNUSED + 5)
|
||||
#define KERNEL_OBJECT_REGKEY (KERNEL_OBJECT_UNUSED + 6)
|
||||
#define KERNEL_OBJECT_FILEMAP (KERNEL_OBJECT_UNUSED + 7)
|
||||
#define KERNEL_OBJECT_VRANGE (KERNEL_OBJECT_UNUSED + 8)
|
||||
#define KERNEL_OBJECT_HEAP (KERNEL_OBJECT_UNUSED + 9)
|
||||
#define KERNEL_OBJECT_HEAPITEM (KERNEL_OBJECT_UNUSED + 10)
|
||||
|
||||
/* Define the invalid handle value
|
||||
*/
|
||||
|
|
|
@ -12,6 +12,7 @@
|
|||
|
||||
/* miscemu/dosmem.c */
|
||||
extern BOOL DOSMEM_Init(void);
|
||||
extern void DOSMEM_Alarm(void);
|
||||
extern void DOSMEM_FillBiosSegment(void);
|
||||
extern HANDLE DOSMEM_BiosSeg;
|
||||
|
||||
|
|
|
@ -5,21 +5,6 @@
|
|||
#include <windows.h>
|
||||
#include "comm.h"
|
||||
|
||||
#define WINE_PATH_LENGTH 256
|
||||
struct dosdirent {
|
||||
int inuse;
|
||||
DIR *ds;
|
||||
char unixpath[WINE_PATH_LENGTH];
|
||||
char filename[WINE_PATH_LENGTH];
|
||||
char filemask[13];
|
||||
char attribute;
|
||||
char search_attribute;
|
||||
long filesize;
|
||||
long filetime;
|
||||
short entnum; /* Directory entry number */
|
||||
struct dosdirent *next;
|
||||
};
|
||||
|
||||
struct fcb {
|
||||
BYTE drive;
|
||||
char name[8];
|
||||
|
@ -48,6 +33,26 @@ typedef struct
|
|||
char filename[13]; /* 1e file name + extension */
|
||||
} FINDFILE_DTA;
|
||||
|
||||
/* FCB layout for FindFirstFCB/FindNextFCB */
|
||||
typedef struct
|
||||
{
|
||||
BYTE drive; /* 00 drive letter */
|
||||
char filename[11]; /* 01 filename 8+3 format */
|
||||
int count; /* 0c entry count (was: reserved) */
|
||||
char *unixPath; /* 10 unix path (was: reserved) */
|
||||
} FINDFILE_FCB;
|
||||
|
||||
/* DOS directory entry for FindFirstFCB/FindNextFCB */
|
||||
typedef struct
|
||||
{
|
||||
char filename[11]; /* 00 filename 8+3 format */
|
||||
BYTE fileattr; /* 0b file attributes */
|
||||
BYTE reserved[10]; /* 0c reserved */
|
||||
WORD filetime; /* 16 file time */
|
||||
WORD filedate; /* 18 file date */
|
||||
WORD cluster; /* 1a file first cluster */
|
||||
DWORD filesize; /* 1c file size */
|
||||
} DOS_DIRENTRY_LAYOUT;
|
||||
|
||||
#define DOSVERSION 0x1606 /* Major version in low byte: DOS 6.22 */
|
||||
#define WINDOSVER 0x0616 /* Windows reports the DOS version reversed */
|
||||
|
@ -55,8 +60,6 @@ typedef struct
|
|||
|
||||
#define MAX_DOS_DRIVES 26
|
||||
|
||||
extern WORD ExtendedError;
|
||||
extern BYTE ErrorClass, Action, ErrorLocus;
|
||||
extern struct DosDeviceStruct COM[MAX_PORTS];
|
||||
extern struct DosDeviceStruct LPT[MAX_PORTS];
|
||||
|
||||
|
|
|
@ -16,7 +16,8 @@ typedef enum
|
|||
LANG_No, /* Norwegian */
|
||||
LANG_Fr, /* French */
|
||||
LANG_Fi, /* Finnish */
|
||||
LANG_Da /* Danish */
|
||||
LANG_Da, /* Danish */
|
||||
LANG_Cz /* Czech */
|
||||
} WINE_LANGUAGE;
|
||||
|
||||
struct options
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef __WINE_PE_IMAGE_H
|
||||
#define __WINE_PE_IMAGE_H
|
||||
|
||||
#include <sys/types.h>
|
||||
#include "windows.h"
|
||||
|
||||
struct pe_data {
|
||||
|
@ -16,6 +17,21 @@ struct pe_data {
|
|||
int resource_offset; /* offset to resource typedirectory in file */
|
||||
};
|
||||
|
||||
typedef struct _WIN32_function{
|
||||
char *name;
|
||||
void *definition;
|
||||
} WIN32_function;
|
||||
|
||||
typedef struct _WIN32_builtin{
|
||||
char *name;
|
||||
WIN32_function *functions;
|
||||
int size;
|
||||
int base;
|
||||
struct _WIN32_builtin *next;
|
||||
} WIN32_builtin;
|
||||
|
||||
extern WIN32_builtin *WIN32_builtin_list;
|
||||
|
||||
struct w_files
|
||||
{
|
||||
struct w_files * next;
|
||||
|
@ -29,6 +45,7 @@ struct w_files
|
|||
struct pe_data *pe;
|
||||
OFSTRUCT ofs;
|
||||
unsigned int load_addr;
|
||||
WIN32_builtin* builtin;
|
||||
};
|
||||
|
||||
|
||||
|
@ -38,18 +55,4 @@ extern void PE_InitDLL(HMODULE hModule);
|
|||
extern void my_wcstombs(char * result, u_short * source, int len);
|
||||
extern struct w_files *wine_files;
|
||||
|
||||
typedef struct _WIN32_function{
|
||||
char *name;
|
||||
void *definition;
|
||||
} WIN32_function;
|
||||
|
||||
typedef struct _WIN32_builtin{
|
||||
char *name;
|
||||
WIN32_function *functions;
|
||||
int size;
|
||||
struct _WIN32_builtin *next;
|
||||
} WIN32_builtin;
|
||||
|
||||
extern WIN32_builtin *WIN32_builtin_list;
|
||||
|
||||
#endif /* __WINE_PE_IMAGE_H */
|
||||
|
|
|
@ -4,8 +4,13 @@
|
|||
* Copyright 1995 Martin von Loewis
|
||||
*/
|
||||
|
||||
#ifndef _RELAY32_H
|
||||
#define _RELAY32_H
|
||||
#include "pe_image.h"
|
||||
|
||||
void RELAY32_Unimplemented(char *dll, int item);
|
||||
void *RELAY32_GetEntryPoint(char *dll_name, char *item, int hint);
|
||||
WIN32_builtin *RELAY32_GetBuiltinDLL(char *name);
|
||||
void *RELAY32_GetEntryPoint(WIN32_builtin *dll, char *item, int hint);
|
||||
LONG RELAY32_CallWindowProc(WNDPROC,int,int,int,int);
|
||||
void RELAY32_DebugEnter(char *dll,char *name);
|
||||
|
||||
|
@ -58,3 +63,5 @@ LRESULT USER32_DefWindowProcA(DWORD hwnd,DWORD msg,DWORD wParam,DWORD lParam);
|
|||
BOOL USER32_GetMessageA(struct WIN32_MSG* lpmsg,DWORD hwnd,DWORD min,DWORD max);
|
||||
HDC USER32_BeginPaint(DWORD hwnd,struct WIN32_PAINTSTRUCT *lpps);
|
||||
BOOL USER32_EndPaint(DWORD hwnd,struct WIN32_PAINTSTRUCT *lpps);
|
||||
#endif
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@
|
|||
|
||||
#include <stddef.h>
|
||||
|
||||
HANDLE32 FindResource32( HINSTANCE hModule, LPCTSTR name, LPCTSTR type );
|
||||
HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type );
|
||||
HANDLE32 LoadResource32( HINSTANCE hModule, HANDLE32 hRsrc );
|
||||
LPVOID LockResource32( HANDLE32 handle );
|
||||
BOOL FreeResource32( HANDLE32 handle );
|
||||
|
@ -45,4 +45,9 @@ typedef struct _IMAGE_RESOURCE_DIR_STRING_U {
|
|||
WCHAR NameString[1];
|
||||
} IMAGE_RESOURCE_DIR_STRING_U, *PIMAGE_RESOURCE_DIR_STRING_U;
|
||||
|
||||
HMENU WIN32_LoadMenuIndirectW(void *menu);
|
||||
HMENU WIN32_LoadMenuW(HANDLE instance, LPCWSTR name);
|
||||
HMENU WIN32_LoadMenuIndirectA(void *menu);
|
||||
HMENU WIN32_LoadMenuA(HANDLE instance,LPCSTR name);
|
||||
|
||||
#endif /* __WINE_RESOURCE32_H */
|
||||
|
|
|
@ -88,6 +88,7 @@
|
|||
#undef DEBUG_CLIPPING
|
||||
#undef DEBUG_COMBO
|
||||
#undef DEBUG_COMM
|
||||
#undef DEBUG_COMMDLG
|
||||
#undef DEBUG_CURSOR
|
||||
#undef DEBUG_DC
|
||||
#undef DEBUG_DDE
|
||||
|
@ -166,6 +167,7 @@
|
|||
#define DEBUG_CLIPPING
|
||||
#define DEBUG_COMBO
|
||||
#define DEBUG_COMM
|
||||
#define DEBUG_COMMDLG
|
||||
#define DEBUG_CURSOR
|
||||
#define DEBUG_DC
|
||||
#define DEBUG_DDE
|
||||
|
|
|
@ -13,8 +13,10 @@
|
|||
int STRING32_UniLen(LPWSTR s);
|
||||
void STRING32_UniToAnsi(LPSTR dest,LPCWSTR src);
|
||||
void STRING32_AnsiToUni(LPWSTR dest,LPCSTR src);
|
||||
LPSTR STRING32_DupUniToAnsi(LPWSTR src);
|
||||
LPWSTR STRING32_DupAnsiToUni(LPSTR src);
|
||||
LPWSTR STRING32_lstrcmpnW(LPCWSTR a,LPCWSTR b,DWORD len);
|
||||
LPSTR STRING32_DupUniToAnsi(LPCWSTR src);
|
||||
LPWSTR STRING32_DupAnsiToUni(LPCSTR src);
|
||||
int STRING32_lstrcmpnW(LPCWSTR a,LPCWSTR b,DWORD len);
|
||||
int STRING32_lstrcmpniW(LPCWSTR a,LPCWSTR b,DWORD len);
|
||||
DWORD STRING32_lstrlenW(LPCWSTR);
|
||||
|
||||
#endif
|
||||
|
|
|
@ -22,4 +22,26 @@ typedef struct tagPOINT32
|
|||
void PARAM32_POINT32to16(const POINT32*,POINT*);
|
||||
void PARAM32_POINT16to32(const POINT*,POINT32*);
|
||||
|
||||
typedef struct {
|
||||
DWORD style;
|
||||
DWORD dwExtendedStyle;
|
||||
WORD noOfItems;
|
||||
short x;
|
||||
short y;
|
||||
WORD cx;
|
||||
WORD cy;
|
||||
} DLGTEMPLATE32;
|
||||
|
||||
typedef struct {
|
||||
DWORD style;
|
||||
DWORD dwExtendedStyle;
|
||||
short x;
|
||||
short y;
|
||||
short cx;
|
||||
short cy;
|
||||
WORD id;
|
||||
} DLGITEMTEMPLATE32;
|
||||
|
||||
#define CW_USEDEFAULT32 0x80000000
|
||||
|
||||
#endif
|
||||
|
|
|
@ -60,14 +60,15 @@ typedef struct tagWND
|
|||
} WND;
|
||||
|
||||
/* WND flags values */
|
||||
#define WIN_NEEDS_BEGINPAINT 0x01 /* WM_PAINT sent to window */
|
||||
#define WIN_NEEDS_ERASEBKGND 0x02 /* WM_ERASEBKGND must be sent to window*/
|
||||
#define WIN_NEEDS_NCPAINT 0x04 /* WM_NCPAINT must be sent to window */
|
||||
#define WIN_RESTORE_MAX 0x08 /* Maximize when restoring */
|
||||
#define WIN_INTERNAL_PAINT 0x10 /* Internal WM_PAINT message pending */
|
||||
#define WIN_NO_REDRAW 0x20 /* WM_SETREDRAW called for this window */
|
||||
#define WIN_GOT_SIZEMSG 0x40 /* WM_SIZE has been sent to the window */
|
||||
#define WIN_NCACTIVATED 0x80 /* last WM_NCACTIVATE was positive */
|
||||
#define WIN_NEEDS_BEGINPAINT 0x0001 /* WM_PAINT sent to window */
|
||||
#define WIN_NEEDS_ERASEBKGND 0x0002 /* WM_ERASEBKGND must be sent to window*/
|
||||
#define WIN_NEEDS_NCPAINT 0x0004 /* WM_NCPAINT must be sent to window */
|
||||
#define WIN_RESTORE_MAX 0x0008 /* Maximize when restoring */
|
||||
#define WIN_INTERNAL_PAINT 0x0010 /* Internal WM_PAINT message pending */
|
||||
#define WIN_NO_REDRAW 0x0020 /* WM_SETREDRAW called for this window */
|
||||
#define WIN_GOT_SIZEMSG 0x0040 /* WM_SIZE has been sent to the window */
|
||||
#define WIN_NCACTIVATED 0x0080 /* last WM_NCACTIVATE was positive */
|
||||
#define WIN_MANAGED 0x0100 /* Window managed by the X wm */
|
||||
|
||||
#define WIN_CLASS_INFO(wndPtr) (CLASS_FindClassPtr((wndPtr)->hClass)->wc)
|
||||
#define WIN_CLASS_STYLE(wndPtr) (WIN_CLASS_INFO(wndPtr).style)
|
||||
|
|
|
@ -10,23 +10,14 @@
|
|||
#endif
|
||||
|
||||
#ifdef WINELIB32
|
||||
typedef struct { LONG x,y; } POINT;
|
||||
typedef struct { SHORT x,y; } POINTS;
|
||||
typedef struct { LONG cx,cy; } SIZE, *LPSIZE;
|
||||
typedef struct { LONG left, top, right, bottom; } RECT;
|
||||
#define MAKEPOINTS(l) (*((POINTS *)&(l)))
|
||||
#else
|
||||
typedef struct { INT x,y; } POINT;
|
||||
typedef struct { INT cx,cy; } SIZE, *LPSIZE;
|
||||
typedef struct { INT left, top, right, bottom; } RECT;
|
||||
#define MAKEPOINT(l) (*((POINT *)&(l)))
|
||||
#endif
|
||||
typedef POINT *PPOINT;
|
||||
typedef POINT *NPPOINT;
|
||||
typedef POINT *LPPOINT;
|
||||
typedef RECT *LPRECT;
|
||||
typedef RECT *NPRECT;
|
||||
typedef RECT *PRECT;
|
||||
typedef struct { INT cx,cy; } SIZE, *LPSIZE;
|
||||
typedef struct { INT x,y; } POINT, *PPOINT, *NPPOINT, *LPPOINT;
|
||||
typedef struct { INT left, top, right, bottom; } RECT, *LPRECT;
|
||||
|
||||
#ifdef WINELIB32
|
||||
#define MAKEWPARAM(low, high) ((LONG)(((WORD)(low)) | \
|
||||
|
@ -1751,32 +1742,33 @@ typedef struct tagDRAGINFO {
|
|||
#define TPM_CENTERALIGN 0x0004
|
||||
#define TPM_RIGHTALIGN 0x0008
|
||||
|
||||
#define MF_INSERT 0
|
||||
#define MF_CHANGE 0x0080
|
||||
#define MF_APPEND 0x0100
|
||||
#define MF_DELETE 0x0200
|
||||
#define MF_REMOVE 0x1000
|
||||
#define MF_BYCOMMAND 0
|
||||
#define MF_BYPOSITION 0x0400
|
||||
#define MF_SEPARATOR 0x0800
|
||||
#define MF_ENABLED 0
|
||||
#define MF_GRAYED 0x0001
|
||||
#define MF_DISABLED 0x0002
|
||||
#define MF_UNCHECKED 0
|
||||
#define MF_CHECKED 0x0008
|
||||
#define MF_INSERT 0x0000
|
||||
#define MF_CHANGE 0x0080
|
||||
#define MF_APPEND 0x0100
|
||||
#define MF_DELETE 0x0200
|
||||
#define MF_REMOVE 0x1000
|
||||
#define MF_END 0x0080
|
||||
|
||||
#define MF_ENABLED 0x0000
|
||||
#define MF_GRAYED 0x0001
|
||||
#define MF_DISABLED 0x0002
|
||||
#define MF_STRING 0x0000
|
||||
#define MF_BITMAP 0x0004
|
||||
#define MF_UNCHECKED 0x0000
|
||||
#define MF_CHECKED 0x0008
|
||||
#define MF_POPUP 0x0010
|
||||
#define MF_MENUBARBREAK 0x0020
|
||||
#define MF_MENUBREAK 0x0040
|
||||
#define MF_UNHILITE 0x0000
|
||||
#define MF_HILITE 0x0080
|
||||
#define MF_OWNERDRAW 0x0100
|
||||
#define MF_USECHECKBITMAPS 0x0200
|
||||
#define MF_STRING 0
|
||||
#define MF_BITMAP 0x0004
|
||||
#define MF_OWNERDRAW 0x0100
|
||||
#define MF_POPUP 0x0010
|
||||
#define MF_MENUBARBREAK 0x0020
|
||||
#define MF_MENUBREAK 0x0040
|
||||
#define MF_UNHILITE 0
|
||||
#define MF_HILITE 0x0080
|
||||
#define MF_SYSMENU 0x2000
|
||||
#define MF_HELP 0x4000
|
||||
#define MF_MOUSESELECT 0x8000
|
||||
#define MF_END 0x0080
|
||||
#define MF_BYCOMMAND 0x0000
|
||||
#define MF_BYPOSITION 0x0400
|
||||
#define MF_SEPARATOR 0x0800
|
||||
#define MF_SYSMENU 0x2000
|
||||
#define MF_HELP 0x4000
|
||||
#define MF_MOUSESELECT 0x8000
|
||||
|
||||
#ifndef NOWINOFFSETS
|
||||
#define GCW_HBRBACKGROUND (-10)
|
||||
|
@ -2566,6 +2558,35 @@ typedef struct {
|
|||
#define HELP_MULTIKEY 0x0201
|
||||
#define HELP_SETWINPOS 0x0203
|
||||
|
||||
typedef struct {
|
||||
TCHAR dmDeviceName[32];
|
||||
WORD dmSpecVersion;
|
||||
WORD dmDriverVersion;
|
||||
WORD dmSize;
|
||||
WORD dmDriverExtra;
|
||||
DWORD dmFields;
|
||||
short dmOrientation;
|
||||
short dmPaperSize;
|
||||
short dmPaperLength;
|
||||
short dmPaperWidth;
|
||||
short dmScale;
|
||||
short dmCopies;
|
||||
short dmDefaultSource;
|
||||
short dmPrintQuality;
|
||||
short dmColor;
|
||||
short dmDuplex;
|
||||
short dmYResolution;
|
||||
short dmTTOption;
|
||||
short dmCollate;
|
||||
TCHAR dmFormName[32];
|
||||
WORD dmUnusedPadding;
|
||||
WORD dmBitsPerPel;
|
||||
DWORD dmPelsWidth;
|
||||
DWORD dmPelsHeight;
|
||||
DWORD dmDisplayFlags;
|
||||
DWORD dmDisplayFrequency;
|
||||
} DEVMODE;
|
||||
|
||||
#ifndef WINELIB
|
||||
#pragma pack(4)
|
||||
#endif
|
||||
|
@ -2638,95 +2659,95 @@ HBRUSH CreateBrushIndirect(const LOGBRUSH*);
|
|||
BOOL CreateCaret(HWND,HBITMAP,INT,INT);
|
||||
HBITMAP CreateCompatibleBitmap(HDC,INT,INT);
|
||||
HDC CreateCompatibleDC(HDC);
|
||||
HCURSOR CreateCursor(HANDLE,INT,INT,INT,INT,LPVOID,LPVOID);
|
||||
HANDLE CreateCursorIconIndirect(HANDLE,CURSORICONINFO*,LPSTR,LPSTR);
|
||||
HDC CreateDC(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
|
||||
HCURSOR CreateCursor(HANDLE,INT,INT,INT,INT,const BYTE*,const BYTE*);
|
||||
HANDLE CreateCursorIconIndirect(HANDLE,CURSORICONINFO*,const BYTE*,const BYTE*);
|
||||
HDC CreateDC(LPCTSTR,LPCTSTR,LPCTSTR,const DEVMODE*);
|
||||
HBRUSH CreateDIBPatternBrush(HGLOBAL,UINT);
|
||||
HBITMAP CreateDIBitmap(HDC,BITMAPINFOHEADER*,DWORD,LPVOID,BITMAPINFO*,UINT);
|
||||
HWND CreateDialog(HANDLE,SEGPTR,HWND,DLGPROC);
|
||||
HWND CreateDialogIndirect(HANDLE,SEGPTR,HWND,DLGPROC);
|
||||
HWND CreateDialogIndirectParam(HANDLE,SEGPTR,HWND,DLGPROC,LPARAM);
|
||||
HWND CreateDialogParam(HANDLE,SEGPTR,HWND,DLGPROC,LPARAM);
|
||||
HWND CreateDialog(HINSTANCE,SEGPTR,HWND,DLGPROC);
|
||||
HWND CreateDialogIndirect(HINSTANCE,SEGPTR,HWND,DLGPROC);
|
||||
HWND CreateDialogIndirectParam(HINSTANCE,SEGPTR,HWND,DLGPROC,LPARAM);
|
||||
HWND CreateDialogParam(HINSTANCE,SEGPTR,HWND,DLGPROC,LPARAM);
|
||||
HBITMAP CreateDiscardableBitmap(HDC,INT,INT);
|
||||
HRGN CreateEllipticRgn(INT,INT,INT,INT);
|
||||
HRGN CreateEllipticRgnIndirect(LPRECT);
|
||||
HFONT CreateFont(INT,INT,INT,INT,INT,BYTE,BYTE,BYTE,BYTE,BYTE,BYTE,BYTE,BYTE,LPCSTR);
|
||||
HFONT CreateFontIndirect(const LOGFONT*);
|
||||
HBRUSH CreateHatchBrush(INT,COLORREF);
|
||||
HDC CreateIC(LPSTR,LPSTR,LPSTR,LPSTR);
|
||||
HICON CreateIcon(HANDLE,INT,INT,BYTE,BYTE,LPSTR,LPSTR);
|
||||
HDC CreateIC(LPCTSTR,LPCTSTR,LPCTSTR,const DEVMODE*);
|
||||
HICON CreateIcon(HINSTANCE,INT,INT,BYTE,BYTE,const BYTE*,const BYTE*);
|
||||
HMENU CreateMenu(void);
|
||||
HANDLE CreateMetaFile(LPSTR);
|
||||
HPALETTE CreatePalette(LPLOGPALETTE);
|
||||
HDC CreateMetaFile(LPCTSTR);
|
||||
HPALETTE CreatePalette(const LOGPALETTE*);
|
||||
HBRUSH CreatePatternBrush(HBITMAP);
|
||||
HPEN CreatePen(INT,INT,COLORREF);
|
||||
HPEN CreatePenIndirect(LOGPEN*);
|
||||
HRGN CreatePolyPolygonRgn(LPPOINT,LPINT,INT,INT);
|
||||
HRGN CreatePolygonRgn(LPPOINT,INT,INT);
|
||||
HPEN CreatePenIndirect(const LOGPEN*);
|
||||
HRGN CreatePolyPolygonRgn(const POINT*,const INT*,INT,INT);
|
||||
HRGN CreatePolygonRgn(const POINT*,INT,INT);
|
||||
HMENU CreatePopupMenu(void);
|
||||
HRGN CreateRectRgn(short,short,short,short);
|
||||
HRGN CreateRectRgnIndirect(LPRECT);
|
||||
HRGN CreateRoundRectRgn(short,short,short,short,short,short);
|
||||
HBRUSH CreateSolidBrush(DWORD);
|
||||
HRGN CreateRectRgn(INT,INT,INT,INT);
|
||||
HRGN CreateRectRgnIndirect(const RECT*);
|
||||
HRGN CreateRoundRectRgn(INT,INT,INT,INT,INT,INT);
|
||||
HBRUSH CreateSolidBrush(COLORREF);
|
||||
HWND CreateWindow(SEGPTR,SEGPTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,SEGPTR);
|
||||
HWND CreateWindowEx(DWORD,SEGPTR,SEGPTR,DWORD,INT,INT,INT,INT,HWND,HMENU,HINSTANCE,SEGPTR);
|
||||
BOOL DPtoLP(HDC,LPPOINT,int);
|
||||
BOOL DPtoLP(HDC,LPPOINT,INT);
|
||||
void DebugBreak(void);
|
||||
LONG DefDlgProc(HWND,UINT,WPARAM,LPARAM);
|
||||
LONG DefFrameProc(HWND,HWND,UINT,WPARAM,LPARAM);
|
||||
LRESULT DefDlgProc(HWND,UINT,WPARAM,LPARAM);
|
||||
LRESULT DefFrameProc(HWND,HWND,UINT,WPARAM,LPARAM);
|
||||
DWORD DefHookProc(short,WORD,DWORD,HHOOK*);
|
||||
LONG DefMDIChildProc(HWND,UINT,WPARAM,LPARAM);
|
||||
LRESULT DefMDIChildProc(HWND,UINT,WPARAM,LPARAM);
|
||||
LRESULT DefWindowProc(HWND,UINT,WPARAM,LPARAM);
|
||||
HDWP DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,WORD);
|
||||
HDWP DeferWindowPos(HDWP,HWND,HWND,INT,INT,INT,INT,UINT);
|
||||
ATOM DeleteAtom(ATOM);
|
||||
BOOL DeleteDC(HDC);
|
||||
BOOL DeleteMenu(HMENU,UINT,UINT);
|
||||
BOOL DeleteMetaFile(HMETAFILE);
|
||||
BOOL DeleteObject(HANDLE);
|
||||
void DestroyCaret(void);
|
||||
BOOL DeleteObject(HGDIOBJ);
|
||||
BOOL DestroyCaret(void);
|
||||
BOOL DestroyCursor(HCURSOR);
|
||||
BOOL DestroyIcon(HICON);
|
||||
BOOL DestroyMenu(HMENU);
|
||||
BOOL DestroyWindow(HWND);
|
||||
int DialogBox(HINSTANCE,SEGPTR,HWND,WNDPROC);
|
||||
int DialogBoxIndirect(HANDLE,HANDLE,HWND,WNDPROC);
|
||||
int DialogBoxIndirectParam(HANDLE,HANDLE,HWND,WNDPROC,LONG);
|
||||
int DialogBoxParam(HANDLE,SEGPTR,HWND,WNDPROC,LONG);
|
||||
INT DialogBox(HINSTANCE,SEGPTR,HWND,DLGPROC);
|
||||
INT DialogBoxIndirect(HINSTANCE,HANDLE,HWND,DLGPROC);
|
||||
INT DialogBoxIndirectParam(HINSTANCE,HANDLE,HWND,DLGPROC,LONG);
|
||||
INT DialogBoxParam(HINSTANCE,SEGPTR,HWND,DLGPROC,LONG);
|
||||
HANDLE DirectResAlloc(HANDLE,WORD,WORD);
|
||||
void DirectedYield(HTASK);
|
||||
LONG DispatchMessage(LPMSG);
|
||||
INT DlgDirList(HWND,SEGPTR,INT,INT,WORD);
|
||||
INT DlgDirListComboBox(HWND,SEGPTR,INT,INT,WORD);
|
||||
BOOL DlgDirSelect(HWND,LPSTR,int);
|
||||
BOOL DlgDirSelectComboBox(HWND,LPSTR,int);
|
||||
LONG DispatchMessage(const MSG*);
|
||||
INT DlgDirList(HWND,SEGPTR,INT,INT,UINT);
|
||||
INT DlgDirListComboBox(HWND,SEGPTR,INT,INT,UINT);
|
||||
BOOL DlgDirSelect(HWND,LPSTR,INT);
|
||||
BOOL DlgDirSelectComboBox(HWND,LPSTR,INT);
|
||||
BOOL DragDetect(HWND,POINT);
|
||||
DWORD DragObject(HWND, HWND, WORD, HANDLE, WORD, HCURSOR);
|
||||
void DrawFocusRect(HDC,LPRECT);
|
||||
BOOL DrawIcon(HDC,short,short,HICON);
|
||||
void DrawFocusRect(HDC,const RECT*);
|
||||
BOOL DrawIcon(HDC,INT,INT,HICON);
|
||||
void DrawMenuBar(HWND);
|
||||
int DrawText(HDC,LPCSTR,int,LPRECT,WORD);
|
||||
INT DrawText(HDC,LPCTSTR,INT,LPRECT,UINT);
|
||||
DWORD DumpIcon(SEGPTR,WORD*,SEGPTR*,SEGPTR*);
|
||||
BOOL Ellipse(HDC,INT,INT,INT,INT);
|
||||
BOOL EmptyClipboard(void);
|
||||
BOOL EnableHardwareInput(BOOL);
|
||||
BOOL EnableMenuItem(HMENU,UINT,UINT);
|
||||
BOOL EnableScrollBar(HWND,INT,UINT);
|
||||
BOOL EnableScrollBar(HWND,UINT,UINT);
|
||||
BOOL EnableWindow(HWND,BOOL);
|
||||
BOOL EndDeferWindowPos(HDWP);
|
||||
void EndDialog(HWND,short);
|
||||
void EndPaint(HWND,LPPAINTSTRUCT);
|
||||
BOOL EnumChildWindows(HWND,FARPROC,LONG);
|
||||
WORD EnumClipboardFormats(WORD);
|
||||
int EnumFontFamilies(HDC,LPSTR,FONTENUMPROC,LPARAM);
|
||||
int EnumFonts(HDC,LPSTR,FARPROC,LPSTR);
|
||||
BOOL EnumMetaFile(HDC,LOCALHANDLE,FARPROC,BYTE*);
|
||||
int EnumObjects(HDC,int,FARPROC,LPARAM);
|
||||
int EnumProps(HWND,FARPROC);
|
||||
BOOL EnumTaskWindows(HANDLE,FARPROC,LONG);
|
||||
BOOL EnumWindows(FARPROC,LONG);
|
||||
BOOL EqualRect(LPRECT,LPRECT);
|
||||
BOOL EndDialog(HWND,INT);
|
||||
BOOL EndPaint(HWND,const PAINTSTRUCT*);
|
||||
BOOL EnumChildWindows(HWND,WNDENUMPROC,LPARAM);
|
||||
UINT EnumClipboardFormats(UINT);
|
||||
INT EnumFontFamilies(HDC,LPCTSTR,FONTENUMPROC,LPARAM);
|
||||
INT EnumFonts(HDC,LPCTSTR,FONTENUMPROC,LPARAM);
|
||||
BOOL EnumMetaFile(HDC,HMETAFILE,MFENUMPROC,LPARAM);
|
||||
INT EnumObjects(HDC,INT,GOBJENUMPROC,LPARAM);
|
||||
INT EnumProps(HWND,PROPENUMPROC);
|
||||
BOOL EnumTaskWindows(HTASK,WNDENUMPROC,LPARAM);
|
||||
BOOL EnumWindows(WNDENUMPROC,LPARAM);
|
||||
BOOL EqualRect(const RECT*,const RECT*);
|
||||
BOOL EqualRgn(HRGN,HRGN);
|
||||
int Escape(HDC,int,int,LPSTR,LPSTR);
|
||||
INT Escape(HDC,INT,INT,LPCSTR,LPVOID);
|
||||
LONG EscapeCommFunction(int,int);
|
||||
int ExcludeClipRect(HDC,short,short,short,short);
|
||||
int ExcludeUpdateRgn(HDC,HWND);
|
||||
|
@ -3269,13 +3290,13 @@ void WriteOutProfiles(void);
|
|||
BOOL WritePrivateProfileString(LPCSTR,LPCSTR,LPCSTR,LPCSTR);
|
||||
BOOL WriteProfileString(LPCSTR,LPCSTR,LPCSTR);
|
||||
void Yield(void);
|
||||
LONG _hread(HFILE,LPSTR,LONG);
|
||||
LONG _hread(HFILE,SEGPTR,LONG);
|
||||
LONG _hwrite(HFILE,LPCSTR,LONG);
|
||||
HFILE _lclose(HFILE);
|
||||
HFILE _lcreat(LPCSTR,INT);
|
||||
LONG _llseek(HFILE,LONG,INT);
|
||||
HFILE _lopen(LPCSTR,INT);
|
||||
INT _lread(HFILE,LPSTR,WORD);
|
||||
INT _lread(HFILE,SEGPTR,WORD);
|
||||
INT _lwrite(HFILE,LPCSTR,WORD);
|
||||
void hmemcpy(LPVOID,LPCVOID,LONG);
|
||||
SEGPTR lstrcat(SEGPTR,SEGPTR);
|
||||
|
|
|
@ -34,5 +34,6 @@ extern LONG WINPOS_SendNCCalcSize( HWND hwnd, BOOL calcValidRect,
|
|||
RECT *oldClientRect, WINDOWPOS *winpos,
|
||||
RECT *newClientRect );
|
||||
extern LONG WINPOS_HandleWindowPosChanging( WINDOWPOS *winpos );
|
||||
extern INT WINPOS_WindowFromPoint( POINT pt, HWND *phwnd );
|
||||
|
||||
#endif /* WINPOS_H */
|
||||
|
|
|
@ -39,6 +39,9 @@ typedef void* SEGPTR;
|
|||
#define UIFMT "%u"
|
||||
#define NPFMT "%p"
|
||||
#define SPFMT "%p"
|
||||
|
||||
/* Should probably eventually be unsigned short, but not now */
|
||||
typedef char TCHAR;
|
||||
#else
|
||||
typedef short INT;
|
||||
typedef unsigned short UINT;
|
||||
|
@ -49,6 +52,9 @@ typedef DWORD SEGPTR;
|
|||
#define UIFMT "%hu"
|
||||
#define NPFMT "%04x"
|
||||
#define SPFMT "%08lx"
|
||||
|
||||
/* TCHAR is just char in Win16 */
|
||||
typedef char TCHAR;
|
||||
#endif
|
||||
typedef LONG LPARAM;
|
||||
typedef LONG LRESULT;
|
||||
|
@ -56,7 +62,8 @@ typedef INT HFILE;
|
|||
typedef DWORD HHOOK;
|
||||
typedef char *LPSTR;
|
||||
typedef const char *LPCSTR;
|
||||
typedef LPCSTR LPCTSTR;
|
||||
typedef TCHAR *LPTSTR;
|
||||
typedef const TCHAR *LPCTSTR;
|
||||
typedef WCHAR *LPWSTR;
|
||||
typedef const WCHAR *LPCWSTR;
|
||||
typedef char *NPSTR;
|
||||
|
@ -81,6 +88,7 @@ DECLARE_HANDLE(HDROP);
|
|||
DECLARE_HANDLE(HDRVR);
|
||||
DECLARE_HANDLE(HDWP);
|
||||
DECLARE_HANDLE(HFONT);
|
||||
DECLARE_HANDLE(HGDIOBJ);
|
||||
DECLARE_HANDLE(HGLOBAL);
|
||||
DECLARE_HANDLE(HICON);
|
||||
DECLARE_HANDLE(HINSTANCE);
|
||||
|
@ -107,12 +115,23 @@ typedef HGLOBAL GLOBALHANDLE;
|
|||
#ifdef WINELIB
|
||||
typedef long (*FARPROC)();
|
||||
typedef LRESULT (*WNDPROC)(HWND,UINT,WPARAM,LPARAM);
|
||||
typedef LRESULT (*WNDENUMPROC)(HWND,LPARAM);
|
||||
/*typedef int (*FONTENUMPROC)(const LOGFONT*,const TEXTMETRIC*,DWORD,LPARAM);*/
|
||||
typedef int (*FONTENUMPROC)(const void*,const void*,DWORD,LPARAM);
|
||||
typedef int (*GOBJENUMPROC)(LPVOID,LPARAM);
|
||||
typedef BOOL (*PROPENUMPROC)(HWND,LPCTSTR,HANDLE);
|
||||
/*typedef int (*MFENUMPROC)(HDC,HANDLETABLE*,METARECORD*,int,LPARAM);*/
|
||||
typedef int (*MFENUMPROC)(HDC,void*,void*,int,LPARAM);
|
||||
#else
|
||||
typedef SEGPTR FARPROC;
|
||||
typedef SEGPTR WNDPROC;
|
||||
typedef SEGPTR WNDENUMPROC;
|
||||
typedef SEGPTR FONTENUMPROC;
|
||||
typedef SEGPTR GOBJENUMPROC;
|
||||
typedef SEGPTR PROPENUMPROC;
|
||||
typedef SEGPTR MFENUMPROC;
|
||||
#endif
|
||||
typedef FARPROC DLGPROC;
|
||||
typedef FARPROC FONTENUMPROC;
|
||||
typedef FARPROC HOOKPROC;
|
||||
|
||||
#define TRUE 1
|
||||
|
|
|
@ -10,6 +10,7 @@
|
|||
#include "dde_mem.h"
|
||||
#include "windows.h"
|
||||
#include "global.h"
|
||||
#include "relay32.h"
|
||||
#include "debug.h"
|
||||
#include "xmalloc.h"
|
||||
|
||||
|
@ -128,7 +129,12 @@ HGLOBAL GlobalHandle(LPCVOID a)
|
|||
return 0;
|
||||
}
|
||||
|
||||
void *RELAY32_GetEntryPoint(char *dll_name, char *item, int hint)
|
||||
WIN32_builtin *RELAY32_GetBuiltinDLL(char *name)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
||||
void *RELAY32_GetEntryPoint(WIN32_builtin *dll, char *item, int hint)
|
||||
{
|
||||
return NULL;
|
||||
}
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
TOPSRC = @top_srcdir@
|
||||
MODULE = none
|
||||
PROGRAMS = hello hello2 hello3 rolex
|
||||
PROGRAMS = hello hello2 hello3 hello4 new rolex
|
||||
ALL_LIBS = $(WINELIB) $(X_LIBS) $(XPM_LIB) $(XLIB) $(LDLIBS)
|
||||
|
||||
C_SRCS = \
|
||||
|
@ -8,6 +8,8 @@ C_SRCS = \
|
|||
hello2.c \
|
||||
hello3.c \
|
||||
hello3res.c \
|
||||
hello4.c \
|
||||
new.c \
|
||||
rolex.c
|
||||
|
||||
all: check_winerc $(PROGRAMS)
|
||||
|
@ -23,11 +25,17 @@ hello2: hello2.o $(WINELIB)
|
|||
hello3: hello3res.o hello3.o $(WINELIB)
|
||||
$(CC) -o hello3 hello3.o hello3res.o $(LDOPTIONS) $(ALL_LIBS)
|
||||
|
||||
hello4: hello4.o $(WINELIB)
|
||||
$(CC) -o hello4 hello4.o $(LDOPTIONS) $(ALL_LIBS)
|
||||
|
||||
new: new.o $(WINELIB)
|
||||
$(CC) -o new new.o $(LDOPTIONS) $(ALL_LIBS)
|
||||
|
||||
rolex: rolex.o $(WINELIB)
|
||||
$(CC) -o rolex rolex.o $(LDOPTIONS) $(ALL_LIBS)
|
||||
|
||||
clean::
|
||||
$(RM) hello hello2 hello3 hello3res.c hello3res.h rolex
|
||||
$(RM) hello hello2 hello3 hello3res.c hello3res.h hello4 new rolex
|
||||
|
||||
hello3res.c hello3res.h: $(WINERC)
|
||||
|
||||
|
|
121
libtest/hello4.c
Normal file
121
libtest/hello4.c
Normal file
|
@ -0,0 +1,121 @@
|
|||
#include <stdio.h>
|
||||
#include <windows.h>
|
||||
|
||||
void Write (HDC dc, int x, int y, char *s)
|
||||
{
|
||||
TextOut (dc, x, y, s, strlen (s));
|
||||
}
|
||||
|
||||
LRESULT WndProc (HWND wnd, UINT msg, WPARAM w, LPARAM l)
|
||||
{
|
||||
static short xChar, yChar;
|
||||
HDC dc;
|
||||
PAINTSTRUCT ps;
|
||||
TEXTMETRIC tm;
|
||||
|
||||
switch (msg){
|
||||
case WM_CREATE:
|
||||
dc = GetDC (wnd);
|
||||
GetTextMetrics (dc, &tm);
|
||||
xChar = tm.tmAveCharWidth;
|
||||
yChar = tm.tmHeight;
|
||||
ReleaseDC (wnd, dc);
|
||||
break;
|
||||
|
||||
case WM_PAINT:
|
||||
dc = BeginPaint (wnd, &ps);
|
||||
Write (dc, xChar, yChar, "Hola");
|
||||
EndPaint (wnd, &ps);
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage (0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc (wnd, msg, w, l);
|
||||
}
|
||||
return 0l;
|
||||
}
|
||||
|
||||
LRESULT WndProc2 (HWND wnd, UINT msg, WPARAM w, LPARAM l)
|
||||
{
|
||||
static short xChar, yChar;
|
||||
char buf[128];
|
||||
HDC dc;
|
||||
PAINTSTRUCT ps;
|
||||
TEXTMETRIC tm;
|
||||
|
||||
switch (msg){
|
||||
case WM_CREATE:
|
||||
dc = GetDC (wnd);
|
||||
GetTextMetrics (dc, &tm);
|
||||
xChar = tm.tmAveCharWidth;
|
||||
yChar = tm.tmHeight;
|
||||
ReleaseDC (wnd, dc);
|
||||
break;
|
||||
|
||||
case WM_PAINT:
|
||||
dc = BeginPaint (wnd, &ps);
|
||||
sprintf(buf,"ps.rcPaint = {left = %d, top = %d, right = %d, bottom = %d}",
|
||||
ps.rcPaint.left,ps.rcPaint.top,ps.rcPaint.right,ps.rcPaint.bottom);
|
||||
Write (dc, xChar, yChar, buf);
|
||||
EndPaint (wnd, &ps);
|
||||
break;
|
||||
|
||||
case WM_DESTROY:
|
||||
PostQuitMessage (0);
|
||||
break;
|
||||
|
||||
default:
|
||||
return DefWindowProc (wnd, msg, w, l);
|
||||
}
|
||||
return 0l;
|
||||
}
|
||||
|
||||
int PASCAL WinMain (HANDLE inst, HANDLE prev, LPSTR cmdline, int show)
|
||||
{
|
||||
HWND wnd,wnd2;
|
||||
MSG msg;
|
||||
WNDCLASS class;
|
||||
|
||||
if (!prev){
|
||||
class.style = CS_HREDRAW | CS_VREDRAW;
|
||||
class.lpfnWndProc = WndProc;
|
||||
class.cbClsExtra = 0;
|
||||
class.cbWndExtra = 0;
|
||||
class.hInstance = inst;
|
||||
class.hIcon = LoadIcon (0, IDI_APPLICATION);
|
||||
class.hCursor = LoadCursor (0, IDC_ARROW);
|
||||
class.hbrBackground = GetStockObject (WHITE_BRUSH);
|
||||
class.lpszMenuName = NULL;
|
||||
class.lpszClassName = (SEGPTR)"class";
|
||||
if (!RegisterClass (&class))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
wnd = CreateWindow ("class", "Test app", WS_OVERLAPPEDWINDOW,
|
||||
CW_USEDEFAULT, 0, CW_USEDEFAULT, 0, 0,
|
||||
0, inst, 0);
|
||||
|
||||
if (!prev){
|
||||
class.lpfnWndProc = WndProc2;
|
||||
class.lpszClassName = (SEGPTR)"class2";
|
||||
if (!RegisterClass (&class))
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
wnd2= CreateWindow ("class2","Test app", WS_BORDER | WS_CHILD,
|
||||
50, 50, 350, 50, wnd, 0, inst, 0);
|
||||
|
||||
ShowWindow (wnd, show);
|
||||
UpdateWindow (wnd);
|
||||
ShowWindow (wnd2, show);
|
||||
UpdateWindow (wnd2);
|
||||
|
||||
while (GetMessage (&msg, 0, 0, 0)){
|
||||
TranslateMessage (&msg);
|
||||
DispatchMessage (&msg);
|
||||
}
|
||||
return 0;
|
||||
}
|
153
libtest/new.c
Normal file
153
libtest/new.c
Normal file
|
@ -0,0 +1,153 @@
|
|||
#include <windows.h>
|
||||
|
||||
HANDLE ghInstance;
|
||||
|
||||
|
||||
long FAR PASCAL WndProc (HWND, WORD, WPARAM, LPARAM);
|
||||
long FAR PASCAL ChildProc(HWND, WORD, WPARAM, LPARAM);
|
||||
|
||||
int PASCAL WinMain (HANDLE hInstance, HANDLE hPrevInstance,
|
||||
LPSTR lpszCmdParam, int nCmdShow)
|
||||
{
|
||||
static char szAppName[] = "ClassLook" ;
|
||||
HWND hwnd ;
|
||||
MSG msg ;
|
||||
WNDCLASS wndclass ;
|
||||
|
||||
ghInstance = hInstance;
|
||||
if (!hPrevInstance)
|
||||
{
|
||||
wndclass.style = CS_HREDRAW | CS_VREDRAW ;
|
||||
wndclass.lpfnWndProc = WndProc ;
|
||||
wndclass.cbClsExtra = 0 ;
|
||||
wndclass.cbWndExtra = 0 ;
|
||||
wndclass.hInstance = hInstance ;
|
||||
wndclass.hIcon = LoadIcon (NULL, IDI_APPLICATION) ;
|
||||
wndclass.hCursor = LoadCursor (NULL, IDC_ARROW) ;
|
||||
wndclass.hbrBackground = GetStockObject (WHITE_BRUSH) ;
|
||||
wndclass.lpszMenuName = NULL ;
|
||||
wndclass.lpszClassName = szAppName ;
|
||||
|
||||
RegisterClass (&wndclass) ;
|
||||
}
|
||||
|
||||
hwnd = CreateWindow (szAppName, /* window class name */
|
||||
"ClassLook", /* window caption */
|
||||
WS_OVERLAPPEDWINDOW, /* window style */
|
||||
CW_USEDEFAULT, /* initial x position */
|
||||
CW_USEDEFAULT, /* initial y position */
|
||||
600, /* initial x size */
|
||||
400, /* initial y size */
|
||||
NULL, /* parent window handle */
|
||||
NULL, /* window menu handle */
|
||||
hInstance, /* program instance handle */
|
||||
NULL) ; /* creation parameters */
|
||||
|
||||
ShowWindow (hwnd, nCmdShow) ;
|
||||
UpdateWindow (hwnd) ;
|
||||
|
||||
while (GetMessage (&msg, NULL, 0, 0))
|
||||
{
|
||||
TranslateMessage (&msg) ;
|
||||
DispatchMessage (&msg) ;
|
||||
}
|
||||
return msg.wParam ;
|
||||
}
|
||||
|
||||
long FAR PASCAL WndProc (HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HDC hdc ;
|
||||
PAINTSTRUCT ps ;
|
||||
RECT rect ;
|
||||
WNDCLASS wndclass ;
|
||||
|
||||
static HWND hChild;
|
||||
|
||||
switch (message)
|
||||
{
|
||||
case WM_CREATE :
|
||||
wndclass.style = CS_PARENTDC | CS_HREDRAW | CS_VREDRAW;
|
||||
wndclass.lpfnWndProc = ChildProc ;
|
||||
wndclass.cbClsExtra = 0 ;
|
||||
wndclass.cbWndExtra = 0 ;
|
||||
wndclass.hInstance = ghInstance ;
|
||||
wndclass.hIcon = NULL ;
|
||||
wndclass.hCursor = LoadCursor (NULL, IDC_CROSS) ;
|
||||
wndclass.hbrBackground = GetStockObject (LTGRAY_BRUSH) ;
|
||||
wndclass.lpszMenuName = NULL ;
|
||||
wndclass.lpszClassName = "SecondClass" ;
|
||||
|
||||
RegisterClass (&wndclass);
|
||||
|
||||
hChild = CreateWindow("SecondClass","Child Window",
|
||||
WS_CHILD | WS_VISIBLE | WS_BORDER,
|
||||
10, 10, 580, 380, hwnd, NULL, ghInstance, NULL);
|
||||
ShowWindow(hChild, SW_SHOW);
|
||||
case WM_PAINT :
|
||||
hdc = BeginPaint (hwnd, &ps) ;
|
||||
|
||||
GetClientRect (hwnd, &rect) ;
|
||||
|
||||
DrawText (hdc, "Hello, Windows!", -1, &rect,
|
||||
DT_SINGLELINE | DT_CENTER | DT_VCENTER) ;
|
||||
|
||||
EndPaint (hwnd, &ps);
|
||||
return 0 ;
|
||||
|
||||
case WM_DESTROY :
|
||||
PostQuitMessage (0) ;
|
||||
return 0 ;
|
||||
}
|
||||
return DefWindowProc (hwnd, message, wParam, lParam) ;
|
||||
}
|
||||
|
||||
long FAR PASCAL ChildProc(HWND hwnd, WORD message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
HDC hDC;
|
||||
PAINTSTRUCT ps;
|
||||
WNDCLASS wndClass;
|
||||
char* classes[]={"EDIT","BUTTON","LISTBOX","STATIC","SCROLLBAR","COMBOBOX","COMBOLBOX", NULL};
|
||||
char** curr;
|
||||
char buf[256];
|
||||
RECT rect ;
|
||||
int i;
|
||||
|
||||
switch (message) {
|
||||
case WM_PAINT:
|
||||
curr = classes;
|
||||
i=0;
|
||||
hDC = BeginPaint(hwnd, &ps);
|
||||
SelectObject(hDC,GetStockObject(ANSI_FIXED_FONT));
|
||||
while (*curr) {
|
||||
wsprintf(buf,"%12s:",*curr);
|
||||
GetClassInfo(NULL, *curr, &wndClass);
|
||||
if(wndClass.style&CS_VREDRAW) lstrcat(buf," | CS_VREDRAW");
|
||||
if(wndClass.style&CS_HREDRAW) lstrcat(buf," | CS_HREDRAW" );
|
||||
if(wndClass.style&CS_KEYCVTWINDOW) lstrcat(buf," | CS_KEYCVTWINDOW" );
|
||||
if(wndClass.style&CS_DBLCLKS) lstrcat(buf," | CS_DBLCLKS" );
|
||||
if(wndClass.style&CS_OWNDC) lstrcat(buf," | CS_OWNDC" );
|
||||
if(wndClass.style&CS_CLASSDC) lstrcat(buf," | CS_CLASSDC" );
|
||||
if(wndClass.style&CS_PARENTDC) lstrcat(buf," | CS_PARENTDC" );
|
||||
if(wndClass.style&CS_NOKEYCVT) lstrcat(buf," | CS_NOKEYCVT" );
|
||||
if(wndClass.style&CS_NOCLOSE) lstrcat(buf," | CS_NOCLOSE" );
|
||||
if(wndClass.style&CS_SAVEBITS) lstrcat(buf," | CS_SAVEBITS" );
|
||||
if(wndClass.style&CS_GLOBALCLASS) lstrcat(buf," | CS_GLOBALCLASS");
|
||||
GetClientRect (hwnd, &rect) ;
|
||||
TextOut (hDC, 5,20+i,buf,lstrlen(buf)) ;
|
||||
i += 15;
|
||||
curr++;
|
||||
}
|
||||
/* EndPaint(hwnd, &ps);
|
||||
break;
|
||||
hDC = BeginPaint(hwnd, &ps);
|
||||
*/
|
||||
MoveTo(hDC, 0, 0);
|
||||
LineTo(hDC, 500, 500);
|
||||
EndPaint(hwnd, &ps);
|
||||
break;
|
||||
default:
|
||||
return DefWindowProc (hwnd, message, wParam, lParam) ;
|
||||
}
|
||||
return (0L);
|
||||
}
|
||||
|
|
@ -76,6 +76,9 @@ int MAIN_Init(void)
|
|||
/* Initialize tasks */
|
||||
if (!TASK_Init()) return 0;
|
||||
|
||||
/* Initialize communications */
|
||||
COMM_Init();
|
||||
|
||||
#ifndef WINELIB
|
||||
/* Initialize interrupt vectors */
|
||||
if (!INT_Init()) return 0;
|
||||
|
@ -85,12 +88,7 @@ int MAIN_Init(void)
|
|||
|
||||
/* Initialize signal handling */
|
||||
init_wine_signals();
|
||||
#endif
|
||||
|
||||
/* Initialize communications */
|
||||
COMM_Init();
|
||||
|
||||
#ifndef WINELIB
|
||||
/* Initialize the DOS memory */
|
||||
if (!INT21_Init()) return 0;
|
||||
|
||||
|
|
|
@ -1,6 +1,7 @@
|
|||
#ifndef WINELIB
|
||||
/*
|
||||
* Copyright 1994 Eric Youndale & Erik Bos
|
||||
* Copyright 1995 Martin von Löwis
|
||||
*
|
||||
* based on Eric Youndale's pe-test and:
|
||||
*
|
||||
|
@ -118,9 +119,15 @@ DWORD PE_FindExportedFunction(struct w_files* wpnt, char* funcName)
|
|||
name = (u_char **) (((char *) load_addr) + (int) exports->AddressOfNames);
|
||||
for(i=0; i<exports->Number_Of_Functions; i++)
|
||||
{
|
||||
ename = (char *) (((char *) load_addr) + (int) *name);
|
||||
if(strcmp(ename,funcName)==0)
|
||||
return load_addr+*function;
|
||||
if(HIWORD(funcName))
|
||||
{
|
||||
ename = (char *) (((char *) load_addr) + (int) *name);
|
||||
if(strcmp(ename,funcName)==0)
|
||||
return load_addr+*function;
|
||||
}else{
|
||||
if(funcName == (int)*ordinal + exports->Base)
|
||||
return load_addr+*function;
|
||||
}
|
||||
function++;
|
||||
ordinal++;
|
||||
name++;
|
||||
|
@ -134,6 +141,13 @@ DWORD PE_GetProcAddress(HMODULE hModule, char* function)
|
|||
for(wpnt=wine_files;wpnt;wpnt=wpnt->next)
|
||||
if(wpnt->hModule==hModule) break;
|
||||
if(!wpnt)return 0;
|
||||
if(wpnt->builtin)
|
||||
{
|
||||
if(HIWORD(function))
|
||||
return RELAY32_GetEntryPoint(wpnt->builtin,function,0);
|
||||
else
|
||||
return RELAY32_GetEntryPoint(wpnt->builtin,0,(int)function);
|
||||
}
|
||||
return PE_FindExportedFunction(wpnt,function);
|
||||
}
|
||||
|
||||
|
@ -179,16 +193,9 @@ void fixup_imports(struct w_files* wpnt)
|
|||
char * Module;
|
||||
struct pe_import_name * pe_name;
|
||||
unsigned int * import_list, *thunk_list;
|
||||
#if 0
|
||||
char * c;
|
||||
#endif
|
||||
|
||||
Module = ((char *) load_addr) + pe_imp->ModuleName;
|
||||
dprintf_win32(stddeb, "%s\n", Module);
|
||||
#if 0
|
||||
c = strchr(Module, '.');
|
||||
if (c) *c = 0;
|
||||
#endif
|
||||
|
||||
if(pe_imp->Import_List != 0) { /* original microsoft style */
|
||||
dprintf_win32(stddeb, "Microsoft style imports used\n");
|
||||
|
@ -198,28 +205,29 @@ void fixup_imports(struct w_files* wpnt)
|
|||
(((unsigned int) load_addr) + pe_imp->Thunk_List);
|
||||
|
||||
|
||||
while(*import_list)
|
||||
while(*import_list)
|
||||
{
|
||||
pe_name = (struct pe_import_name *) ((int) load_addr + *import_list);
|
||||
if((unsigned)pe_name & 0x80000000)
|
||||
if((unsigned)*import_list & 0x80000000)
|
||||
{
|
||||
fprintf(stderr,"Import by ordinal not supported\n");
|
||||
exit(0);
|
||||
}
|
||||
int ordinal=*import_list & (0x80000000-1);
|
||||
dprintf_win32(stddeb,"--- Ordinal %s,%d\n", Module, ordinal);
|
||||
*thunk_list = WIN32_GetProcAddress(MODULE_FindModule(Module),
|
||||
ordinal);
|
||||
}else{ /* import by name */
|
||||
dprintf_win32(stddeb, "--- %s %s.%d\n", pe_name->Name, Module, pe_name->Hint);
|
||||
#ifndef WINELIB /* FIXME: JBP: Should this happen in libwine.a? */
|
||||
/* FIXME: Both calls should be unified into GetProcAddress */
|
||||
*thunk_list=(unsigned int)RELAY32_GetEntryPoint(Module,pe_name->Name,pe_name->Hint);
|
||||
if(*thunk_list == 0)
|
||||
*thunk_list = WIN32_GetProcAddress(MODULE_FindModule(Module),
|
||||
pe_name->Name);
|
||||
|
||||
#else
|
||||
fprintf(stderr,"JBP: Call to RELAY32_GetEntryPoint being ignored.\n");
|
||||
#endif
|
||||
}
|
||||
if(!*thunk_list)
|
||||
{
|
||||
fprintf(stderr,"No implementation for %s.%d\n",Module, pe_name->Hint);
|
||||
fprintf(stderr,"No implementation for %s.%d(%s)\n",Module,
|
||||
pe_name->Hint, pe_name->Name);
|
||||
fixup_failed=1;
|
||||
}
|
||||
|
||||
|
@ -239,8 +247,10 @@ void fixup_imports(struct w_files* wpnt)
|
|||
dprintf_win32(stddeb, "--- %s %s.%d\n", pe_name->Name, Module, pe_name->Hint);
|
||||
#ifndef WINELIB /* FIXME: JBP: Should this happen in libwine.a? */
|
||||
/* FIXME: Both calls should be unified into GetProcAddress */
|
||||
#if 0
|
||||
*thunk_list=(unsigned int)RELAY32_GetEntryPoint(Module,pe_name->Name,pe_name->Hint);
|
||||
if(*thunk_list == 0)
|
||||
#endif
|
||||
*thunk_list = WIN32_GetProcAddress(MODULE_FindModule(Module),
|
||||
pe_name->Name);
|
||||
#else
|
||||
|
@ -454,8 +464,8 @@ static HINSTANCE PE_LoadImage( int fd, struct w_files *wpnt )
|
|||
if(wpnt->pe->pe_export &&
|
||||
wpnt->pe->pe_export!=load_addr+dir.Virtual_address)
|
||||
fprintf(stderr,"wrong export directory??\n");
|
||||
else
|
||||
wpnt->pe->pe_export = load_addr+dir.Virtual_address;
|
||||
/* always trust the directory */
|
||||
wpnt->pe->pe_export = load_addr+dir.Virtual_address;
|
||||
}
|
||||
|
||||
dir=wpnt->pe->pe_header->opt_coff.DataDirectory[IMAGE_FILE_IMPORT_DIRECTORY];
|
||||
|
@ -463,9 +473,8 @@ static HINSTANCE PE_LoadImage( int fd, struct w_files *wpnt )
|
|||
{
|
||||
if(wpnt->pe->pe_import &&
|
||||
wpnt->pe->pe_import!=load_addr+dir.Virtual_address)
|
||||
fprintf(stderr,"wrong export directory??\n");
|
||||
else
|
||||
wpnt->pe->pe_import = load_addr+dir.Virtual_address;
|
||||
fprintf(stderr,"wrong import directory??\n");
|
||||
wpnt->pe->pe_import = load_addr+dir.Virtual_address;
|
||||
}
|
||||
|
||||
dir=wpnt->pe->pe_header->opt_coff.DataDirectory[IMAGE_FILE_RESOURCE_DIRECTORY];
|
||||
|
@ -474,8 +483,7 @@ static HINSTANCE PE_LoadImage( int fd, struct w_files *wpnt )
|
|||
if(wpnt->pe->pe_resource &&
|
||||
wpnt->pe->pe_resource!=load_addr+dir.Virtual_address)
|
||||
fprintf(stderr,"wrong resource directory??\n");
|
||||
else
|
||||
wpnt->pe->pe_resource = load_addr+dir.Virtual_address;
|
||||
wpnt->pe->pe_resource = load_addr+dir.Virtual_address;
|
||||
}
|
||||
|
||||
dir=wpnt->pe->pe_header->opt_coff.DataDirectory[IMAGE_FILE_BASE_RELOCATION_TABLE];
|
||||
|
@ -483,9 +491,8 @@ static HINSTANCE PE_LoadImage( int fd, struct w_files *wpnt )
|
|||
{
|
||||
if(wpnt->pe->pe_reloc &&
|
||||
wpnt->pe->pe_reloc!=load_addr+dir.Virtual_address)
|
||||
fprintf(stderr,"wrong export directory??\n");
|
||||
else
|
||||
wpnt->pe->pe_reloc = load_addr+dir.Virtual_address;
|
||||
fprintf(stderr,"wrong relocation list??\n");
|
||||
wpnt->pe->pe_reloc = load_addr+dir.Virtual_address;
|
||||
}
|
||||
|
||||
if(wpnt->pe->pe_header->opt_coff.DataDirectory
|
||||
|
@ -549,6 +556,7 @@ HINSTANCE PE_LoadModule(int fd, OFSTRUCT *ofs, LOADPARAMS* params)
|
|||
wpnt->hinstance=0;
|
||||
wpnt->hModule=0;
|
||||
wpnt->initialised=0;
|
||||
wpnt->builtin=0;
|
||||
lseek(fd,0,SEEK_SET);
|
||||
wpnt->mz_header=xmalloc(sizeof(struct mz_header_s));
|
||||
read(fd,wpnt->mz_header,sizeof(struct mz_header_s));
|
||||
|
|
|
@ -125,6 +125,7 @@ int LDT_SetEntry( int entry, const ldt_entry *content )
|
|||
{
|
||||
struct modify_ldt_ldt_s ldt_info;
|
||||
|
||||
/* Clear all unused bits (like seg_not_present) */
|
||||
memset( &ldt_info, 0, sizeof(ldt_info) );
|
||||
ldt_info.entry_number = entry;
|
||||
ldt_info.base_addr = content->base;
|
||||
|
|
|
@ -681,6 +681,7 @@ HLOCAL LOCAL_Free( HANDLE ds, HLOCAL handle )
|
|||
|
||||
dprintf_local( stddeb, "LocalFree: %04x ds=%04x\n", handle, ds );
|
||||
|
||||
if (!handle) { fprintf( stderr, "LOCAL_Free: handle is 0.\n" ); return 0; }
|
||||
if (HANDLE_FIXED( handle )) {
|
||||
arena = ARENA_HEADER( handle );
|
||||
} else {
|
||||
|
|
|
@ -308,7 +308,10 @@ WORD SelectorAccessRights( WORD sel, WORD op, WORD val )
|
|||
LDT_GetEntry( SELECTOR_TO_ENTRY(sel), &entry );
|
||||
if (op == 0) /* get */
|
||||
{
|
||||
return 1 /* accessed */ |
|
||||
return 0x01 | /* accessed */
|
||||
0x10 | /* not system */
|
||||
0x60 | /* DPL 3 */
|
||||
0x80 | /* present */
|
||||
((entry.read_only == 0) << 1) |
|
||||
(entry.type << 2) |
|
||||
(entry.seg_32bit << 14) |
|
||||
|
@ -453,7 +456,7 @@ SEGPTR MAKE_SEGPTR(void * ptr)
|
|||
if (!ptr)
|
||||
return ptr;
|
||||
if (!((unsigned)ptr & 0xffff0000)) {
|
||||
fprintf(stderr, "Invalid pointer %08x has been passed to MAKE_SEGPTR. This was\n", ptr);
|
||||
fprintf(stderr, "Invalid pointer %p has been passed to MAKE_SEGPTR. This was\n", ptr);
|
||||
fprintf(stderr, "probably caused by an unnecessary call to PTR_SEG_TO_LIN.\n");
|
||||
fprintf(stderr, "Forcing call to debugger\n");
|
||||
ptr = *(void **)0;
|
||||
|
|
|
@ -187,7 +187,7 @@ INT CountClipboardFormats()
|
|||
/**************************************************************************
|
||||
* EnumClipboardFormats [USER.144]
|
||||
*/
|
||||
WORD EnumClipboardFormats(WORD wFormat)
|
||||
UINT EnumClipboardFormats(UINT wFormat)
|
||||
{
|
||||
LPCLIPFORMAT lpFormat = ClipFormats;
|
||||
dprintf_clipboard(stddeb,"EnumClipboardFormats(%04X) !\n", wFormat);
|
||||
|
|
|
@ -17,6 +17,8 @@
|
|||
#include "dos_fs.h"
|
||||
#include "drive.h"
|
||||
#include "stackframe.h"
|
||||
#include "stddebug.h"
|
||||
#include "debug.h"
|
||||
|
||||
static DWORD CommDlgLastError = 0;
|
||||
|
||||
|
@ -90,7 +92,7 @@ BOOL GetOpenFileName(LPOPENFILENAME lpofn)
|
|||
else SYSRES_FreeResource( hDlgTmpl );
|
||||
}
|
||||
|
||||
printf("GetOpenFileName // return lpstrFile='%s' !\n",
|
||||
dprintf_commdlg(stddeb,"GetOpenFileName // return lpstrFile='%s' !\n",
|
||||
(LPSTR)PTR_SEG_TO_LIN(lpofn->lpstrFile));
|
||||
return bRet;
|
||||
}
|
||||
|
@ -131,7 +133,7 @@ BOOL GetSaveFileName(LPOPENFILENAME lpofn)
|
|||
else SYSRES_FreeResource( hDlgTmpl );
|
||||
}
|
||||
|
||||
printf( "GetSaveFileName // return lpstrFile='%s' !\n",
|
||||
dprintf_commdlg(stddeb, "GetSaveFileName // return lpstrFile='%s' !\n",
|
||||
(LPSTR)PTR_SEG_TO_LIN(lpofn->lpstrFile));
|
||||
return bRet;
|
||||
}
|
||||
|
@ -253,14 +255,14 @@ static LONG FILEDLG_WMDrawItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
FillRect(lpdis->hDC, &lpdis->rcItem, hBrush);
|
||||
SendMessage(lpdis->hwndItem, CB_GETLBTEXT, lpdis->itemID,
|
||||
(LPARAM)MAKE_SEGPTR(str));
|
||||
switch(str[2]) {
|
||||
case 'a': case 'b':
|
||||
hBitmap = hFloppy;
|
||||
break;
|
||||
default:
|
||||
hBitmap = hHDisk;
|
||||
break;
|
||||
}
|
||||
switch(DRIVE_GetType( str[2] - 'a' ))
|
||||
{
|
||||
case TYPE_FLOPPY: hBitmap = hFloppy; break;
|
||||
case TYPE_CDROM: hBitmap = hCDRom; break;
|
||||
case TYPE_HD:
|
||||
case TYPE_NETWORK:
|
||||
default: hBitmap = hHDisk; break;
|
||||
}
|
||||
GetObject(hBitmap, sizeof(BITMAP), (LPSTR)&bm);
|
||||
TextOut(lpdis->hDC, lpdis->rcItem.left + bm.bmWidth,
|
||||
lpdis->rcItem.top, str, strlen(str));
|
||||
|
@ -299,6 +301,7 @@ static LONG FILEDLG_WMMeasureItem(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
int n;
|
||||
int i;
|
||||
LPOPENFILENAME lpofn;
|
||||
char tmpstr[512];
|
||||
LPSTR pstr;
|
||||
|
@ -308,16 +311,17 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
if (lpofn->lpstrCustomFilter)
|
||||
{
|
||||
pstr = (LPSTR)PTR_SEG_TO_LIN(lpofn->lpstrCustomFilter);
|
||||
printf("lpstrCustomFilter = %p\n", pstr);
|
||||
dprintf_commdlg(stddeb,"lpstrCustomFilter = %p\n", pstr);
|
||||
while(*pstr)
|
||||
{
|
||||
n = strlen(pstr);
|
||||
strncpy(tmpstr, pstr, 511); tmpstr[511]=0;
|
||||
printf("lpstrCustomFilter // add tmpstr='%s' ", tmpstr);
|
||||
SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
|
||||
dprintf_commdlg(stddeb,"lpstrCustomFilter // add tmpstr='%s' ", tmpstr);
|
||||
i = SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
|
||||
pstr += n + 1;
|
||||
n = strlen(pstr);
|
||||
printf("associated to '%s'\n", pstr);
|
||||
dprintf_commdlg(stddeb,"associated to '%s'\n", pstr);
|
||||
SendDlgItemMessage(hWnd, cmb1, CB_SETITEMDATA, i, (LPARAM)pstr);
|
||||
pstr += n + 1;
|
||||
}
|
||||
}
|
||||
|
@ -327,11 +331,12 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
{
|
||||
n = strlen(pstr);
|
||||
strncpy(tmpstr, pstr, 511); tmpstr[511]=0;
|
||||
printf("lpstrFilter // add tmpstr='%s' ", tmpstr);
|
||||
SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
|
||||
dprintf_commdlg(stddeb,"lpstrFilter // add tmpstr='%s' ", tmpstr);
|
||||
i = SendDlgItemMessage(hWnd, cmb1, CB_ADDSTRING, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
|
||||
pstr += n + 1;
|
||||
n = strlen(pstr);
|
||||
printf("associated to '%s'\n", pstr);
|
||||
dprintf_commdlg(stddeb,"associated to '%s'\n", pstr);
|
||||
SendDlgItemMessage(hWnd, cmb1, CB_SETITEMDATA, i, (LPARAM)pstr);
|
||||
pstr += n + 1;
|
||||
}
|
||||
/* set default filter */
|
||||
|
@ -341,7 +346,7 @@ static LONG FILEDLG_WMInitDialog(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
strncpy(tmpstr, FILEDLG_GetFileType(PTR_SEG_TO_LIN(lpofn->lpstrCustomFilter),
|
||||
PTR_SEG_TO_LIN(lpofn->lpstrFilter), lpofn->nFilterIndex - 1),511);
|
||||
tmpstr[511]=0;
|
||||
printf("nFilterIndex = %ld // SetText of edt1 to '%s'\n",
|
||||
dprintf_commdlg(stddeb,"nFilterIndex = %ld // SetText of edt1 to '%s'\n",
|
||||
lpofn->nFilterIndex, tmpstr);
|
||||
SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr));
|
||||
/* get drive list */
|
||||
|
@ -437,9 +442,8 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
lRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0);
|
||||
if (lRet == LB_ERR)
|
||||
return TRUE;
|
||||
pstr = FILEDLG_GetFileType(PTR_SEG_TO_LIN(lpofn->lpstrCustomFilter),
|
||||
PTR_SEG_TO_LIN(lpofn->lpstrFilter),
|
||||
lRet);
|
||||
pstr = (LPSTR)SendDlgItemMessage(hWnd, cmb1, CB_GETITEMDATA, lRet, 0);
|
||||
dprintf_commdlg(stddeb,"Selected filter : %s\n", pstr);
|
||||
strncpy(tmpstr2, pstr, 511); tmpstr2[511]=0;
|
||||
SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2));
|
||||
FILEDLG_ScanDir(hWnd, tmpstr);
|
||||
|
@ -467,7 +471,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
strcpy(tmpstr2, tmpstr);
|
||||
*tmpstr=0;
|
||||
}
|
||||
printf("commdlg: %s, %s\n", tmpstr, tmpstr2);
|
||||
dprintf_commdlg(stddeb,"commdlg: %s, %s\n", tmpstr, tmpstr2);
|
||||
SendDlgItemMessage(hWnd, edt1, WM_SETTEXT, 0, (LPARAM)MAKE_SEGPTR(tmpstr2));
|
||||
FILEDLG_ScanDir(hWnd, tmpstr);
|
||||
return TRUE;
|
||||
|
@ -480,7 +484,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
lRet = SendDlgItemMessage(hWnd, cmb1, CB_GETCURSEL, 0, 0);
|
||||
if (lRet == LB_ERR) return TRUE;
|
||||
lpofn->nFilterIndex = lRet + 1;
|
||||
printf("commdlg: lpofn->nFilterIndex=%ld\n", lpofn->nFilterIndex);
|
||||
dprintf_commdlg(stddeb,"commdlg: lpofn->nFilterIndex=%ld\n", lpofn->nFilterIndex);
|
||||
strncpy(tmpstr2,
|
||||
FILEDLG_GetFileType(PTR_SEG_TO_LIN(lpofn->lpstrCustomFilter),
|
||||
PTR_SEG_TO_LIN(lpofn->lpstrFilter),
|
||||
|
@ -528,7 +532,7 @@ static LRESULT FILEDLG_WMCommand(HWND hWnd, WPARAM wParam, LPARAM lParam)
|
|||
lRet = SendDlgItemMessage(hWnd, lst1, LB_GETCURSEL, 0, 0);
|
||||
SendDlgItemMessage(hWnd, lst1, LB_GETTEXT, lRet,
|
||||
(LPARAM)MAKE_SEGPTR(tmpstr));
|
||||
printf("strcpy'ing '%s'\n",tmpstr); fflush(stdout);
|
||||
dprintf_commdlg(stddeb,"strcpy'ing '%s'\n",tmpstr); fflush(stdout);
|
||||
strcpy(PTR_SEG_TO_LIN(lpofn->lpstrFileTitle), tmpstr);
|
||||
}
|
||||
EndDialog(hWnd, TRUE);
|
||||
|
@ -639,7 +643,7 @@ LRESULT ColorDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
|
|||
switch (wMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
printf("ColorDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
dprintf_commdlg(stddeb,"ColorDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
return (TRUE);
|
||||
case WM_COMMAND:
|
||||
|
@ -702,7 +706,7 @@ LRESULT FindTextDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
|
|||
switch (wMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
printf("FindTextDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
dprintf_commdlg(stddeb,"FindTextDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
return (TRUE);
|
||||
case WM_COMMAND:
|
||||
|
@ -729,7 +733,7 @@ LRESULT ReplaceTextDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
|
|||
switch (wMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
printf("ReplaceTextDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
dprintf_commdlg(stddeb,"ReplaceTextDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
return (TRUE);
|
||||
case WM_COMMAND:
|
||||
|
@ -756,7 +760,7 @@ BOOL PrintDlg(LPPRINTDLG lpPrint)
|
|||
HANDLE hInst, hDlgTmpl;
|
||||
BOOL bRet;
|
||||
|
||||
printf("PrintDlg(%p) // Flags=%08lX\n", lpPrint, lpPrint->Flags );
|
||||
dprintf_commdlg(stddeb,"PrintDlg(%p) // Flags=%08lX\n", lpPrint, lpPrint->Flags );
|
||||
|
||||
if (lpPrint->Flags & PD_RETURNDEFAULT)
|
||||
/* FIXME: should fill lpPrint->hDevMode and lpPrint->hDevNames here */
|
||||
|
@ -786,7 +790,7 @@ LRESULT PrintDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
|
|||
switch (wMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
printf("PrintDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
dprintf_commdlg(stddeb,"PrintDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
return (TRUE);
|
||||
case WM_COMMAND:
|
||||
|
@ -813,7 +817,7 @@ LRESULT PrintSetupDlgProc(HWND hWnd, UINT wMsg, WPARAM wParam, LPARAM lParam)
|
|||
switch (wMsg)
|
||||
{
|
||||
case WM_INITDIALOG:
|
||||
printf("PrintSetupDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
dprintf_commdlg(stddeb,"PrintSetupDlgProc // WM_INITDIALOG lParam=%08lX\n", lParam);
|
||||
ShowWindow(hWnd, SW_SHOWNORMAL);
|
||||
return (TRUE);
|
||||
case WM_COMMAND:
|
||||
|
@ -846,7 +850,7 @@ DWORD CommDlgExtendedError(void)
|
|||
short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf)
|
||||
{
|
||||
int i, len;
|
||||
printf("GetFileTitle(%p %p %d); \n", lpFile, lpTitle, cbBuf);
|
||||
dprintf_commdlg(stddeb,"GetFileTitle(%p %p %d); \n", lpFile, lpTitle, cbBuf);
|
||||
if (lpFile == NULL || lpTitle == NULL)
|
||||
return -1;
|
||||
len = strlen(lpFile);
|
||||
|
@ -863,7 +867,7 @@ short GetFileTitle(LPCSTR lpFile, LPSTR lpTitle, UINT cbBuf)
|
|||
i++;
|
||||
break;
|
||||
}
|
||||
printf("\n---> '%s' ", &lpFile[i]);
|
||||
dprintf_commdlg(stddeb,"\n---> '%s' ", &lpFile[i]);
|
||||
|
||||
len = strlen(lpFile+i)+1;
|
||||
if (cbBuf < len)
|
||||
|
|
|
@ -10,8 +10,8 @@ static char Copyright[] = "Copyright Bob Amstadt, 1994";
|
|||
#include <stdio.h>
|
||||
#include "windows.h"
|
||||
|
||||
int Escape(HDC hdc, int nEscape, int cbInput,
|
||||
LPSTR lpszInData, LPSTR lpvOutData)
|
||||
INT Escape(HDC hdc, INT nEscape, INT cbInput,
|
||||
LPCSTR lpszInData, LPVOID lpvOutData)
|
||||
{
|
||||
fprintf(stderr, "Escape(nEscape = %04x)\n", nEscape);
|
||||
return 0;
|
||||
|
|
|
@ -72,6 +72,8 @@ BOOL WinHelp(HWND hWnd, LPSTR lpHelpFile, WORD wCommand, DWORD dwData)
|
|||
strcat(str, lpHelpFile);
|
||||
dprintf_exec(stddeb,"'%s'\n", str);
|
||||
break;
|
||||
case HELP_QUIT:
|
||||
return TRUE;
|
||||
default:
|
||||
return FALSE;
|
||||
}
|
||||
|
|
|
@ -55,6 +55,7 @@ static const char *langNames[] =
|
|||
"Fr", /* LANG_Fr */
|
||||
"Fi", /* LANG_Fi */
|
||||
"Da", /* LANG_Da */
|
||||
"Cz", /* LANG_Cz */
|
||||
NULL
|
||||
};
|
||||
|
||||
|
@ -132,7 +133,7 @@ static XrmOptionDescRec optionsTable[] =
|
|||
" -iconic Start as an icon\n" \
|
||||
" -ipc Enable IPC facilities\n" \
|
||||
" -debug Enter debugger before starting application\n" \
|
||||
" -language xx Set the language (one of En,Es,De,No,Fr,Fi,Da)\n" \
|
||||
" -language xx Set the language (one of En,Es,De,No,Fr,Fi,Da,Cz)\n" \
|
||||
" -managed Allow the window manager to manage created windows\n" \
|
||||
" -name name Set the application name\n" \
|
||||
" -privatemap Use a private color map\n" \
|
||||
|
|
|
@ -30,6 +30,7 @@ DWORD WINAPI GetUserDefaultLCID()
|
|||
case LANG_Fr:
|
||||
case LANG_Fi:
|
||||
case LANG_Da:
|
||||
case LANG_Cz:
|
||||
default:
|
||||
return 0; /* Neutral language */
|
||||
}
|
||||
|
|
|
@ -135,7 +135,7 @@ BOOL UnionRect( LPRECT dest, LPRECT src1, LPRECT src2 )
|
|||
/***********************************************************************
|
||||
* EqualRect (USER.244)
|
||||
*/
|
||||
BOOL EqualRect( LPRECT rect1, LPRECT rect2 )
|
||||
BOOL EqualRect( const RECT* rect1, const RECT* rect2 )
|
||||
{
|
||||
return ((rect1->left == rect2->left) && (rect1->right == rect2->right) &&
|
||||
(rect1->top == rect2->top) && (rect1->bottom == rect2->bottom));
|
||||
|
|
|
@ -696,7 +696,8 @@ INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon)
|
|||
{
|
||||
WineProc=(DWORD)AboutDlgProc;
|
||||
Win16Proc=(DWORD)GetWndProcEntry16("AboutDlgProc");
|
||||
Win32Proc=(DWORD)RELAY32_GetEntryPoint("WINPROCS32","AboutDlgProc",0);
|
||||
Win32Proc=(DWORD)RELAY32_GetEntryPoint(RELAY32_GetBuiltinDLL("WINPROCS32"),
|
||||
"AboutDlgProc",0);
|
||||
ALIAS_RegisterAlias(WineProc,Win16Proc,Win32Proc);
|
||||
initialized=1;
|
||||
}
|
||||
|
@ -752,7 +753,7 @@ HICON ExtractAssociatedIcon(HINSTANCE hInst,LPSTR lpIconPath, LPWORD lpiIcon)
|
|||
*/
|
||||
DWORD DoEnvironmentSubst(LPSTR str,WORD len)
|
||||
{
|
||||
dprintf_reg(stdnimp, "DoEnvironmentSubst(%s,%x): Empyt Stub !!!\n",str,len);
|
||||
dprintf_reg(stdnimp, "DoEnvironmentSubst(%s,%x): Empty Stub !!!\n",str,len);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,7 +64,7 @@ NotifyUnregister(HTASK htask)
|
|||
if (i==-1)
|
||||
return FALSE;
|
||||
memcpy(notifys+i,notifys+(i+1),sizeof(struct notify)*(nrofnotifys-i-1));
|
||||
notifys=(struct notify*)realloc(notifys,(nrofnotifys-1)*sizeof(struct notify));
|
||||
notifys=(struct notify*)xrealloc(notifys,(nrofnotifys-1)*sizeof(struct notify));
|
||||
nrofnotifys--;
|
||||
return TRUE;
|
||||
}
|
||||
|
|
|
@ -5,8 +5,8 @@
|
|||
the return value yourself, for instance because you don't have a good
|
||||
way to handle a zero return value.
|
||||
|
||||
Typically, Wine's own memory requests should be handles by this function,
|
||||
while the client's should use malloc directly (and Wine should return an
|
||||
Typically, Wine's own memory requests should be handled by this function,
|
||||
while the clients should use malloc directly (and Wine should return an
|
||||
error to the client if allocation fails).
|
||||
|
||||
Copyright 1995 by Morten Welinder.
|
||||
|
|
|
@ -136,7 +136,7 @@ BOOL DOSMEM_Init(void)
|
|||
*
|
||||
* Increment the BIOS tick counter.
|
||||
*/
|
||||
static void DOSMEM_Alarm(void)
|
||||
void DOSMEM_Alarm(void)
|
||||
{
|
||||
pBiosData->Ticks = INT1A_GetTicksSinceMidnight();
|
||||
printf( "Ticks = %ld\n", pBiosData->Ticks );
|
||||
|
|
|
@ -290,11 +290,23 @@ void INT_Int31Handler( struct sigcontext_struct context )
|
|||
case 0x0601: /* Unlock linear region */
|
||||
break; /* Just ignore it */
|
||||
|
||||
case 0x0602: /* Unlock real-mode region */
|
||||
break; /* Just ignore it */
|
||||
|
||||
case 0x0603: /* Lock real-mode region */
|
||||
break; /* Just ignore it */
|
||||
|
||||
case 0x0604: /* Get page size */
|
||||
BX_reg(&context) = 0;
|
||||
CX_reg(&context) = 4096;
|
||||
break;
|
||||
|
||||
case 0x0702: /* Mark page as demand-paging candidate */
|
||||
break; /* Just ignore it */
|
||||
|
||||
case 0x0703: /* Discard page contents */
|
||||
break; /* Just ignore it */
|
||||
|
||||
default:
|
||||
INT_BARF( &context, 0x31 );
|
||||
AX_reg(&context) = 0x8001; /* unsupported function */
|
||||
|
|
|
@ -30,6 +30,7 @@ static WORD INSTR_ReplaceSelector( struct sigcontext_struct *context, WORD sel)
|
|||
{
|
||||
fprintf( stderr, "Direct access to segment 0x40 (cs:ip=%04x:%04lx).\n",
|
||||
CS_reg(context), EIP_reg(context) );
|
||||
DOSMEM_Alarm(); /* Increment BIOS clock */
|
||||
return DOSMEM_BiosSeg;
|
||||
}
|
||||
return 0; /* Can't replace selector */
|
||||
|
|
149
miscemu/int21.c
149
miscemu/int21.c
|
@ -560,8 +560,8 @@ static int INT21_FindFirst(struct sigcontext_struct *context)
|
|||
return 0;
|
||||
}
|
||||
memcpy( dta->mask, mask, sizeof(dta->mask) );
|
||||
dta->drive = (path[1] == ':') ? toupper(path[0]) - 'A'
|
||||
: DRIVE_GetCurrentDrive();
|
||||
dta->drive = (path[0] && (path[1] == ':')) ? toupper(path[0]) - 'A'
|
||||
: DRIVE_GetCurrentDrive();
|
||||
dta->count = 0;
|
||||
dta->search_attr = CL_reg(context);
|
||||
return 1;
|
||||
|
@ -694,86 +694,76 @@ static int INT21_SetDiskSerialNumber(struct sigcontext_struct *context)
|
|||
}
|
||||
|
||||
|
||||
static void DumpFCB(BYTE *fcb)
|
||||
{
|
||||
int x, y;
|
||||
|
||||
fcb -= 7;
|
||||
|
||||
for (y = 0; y !=2 ; y++) {
|
||||
for (x = 0; x!=15;x++)
|
||||
dprintf_int(stddeb, "%02x ", *fcb++);
|
||||
dprintf_int(stddeb,"\n");
|
||||
}
|
||||
}
|
||||
|
||||
/* microsoft's programmers should be shot for using CP/M style int21
|
||||
calls in Windows for Workgroup's winfile.exe */
|
||||
|
||||
static void FindFirstFCB(struct sigcontext_struct *context)
|
||||
static int INT21_FindFirstFCB( struct sigcontext_struct *context )
|
||||
{
|
||||
BYTE *fcb = PTR_SEG_OFF_TO_LIN(DS_reg(context), DX_reg(context));
|
||||
struct fcb *standard_fcb;
|
||||
struct fcb *output_fcb;
|
||||
int drive;
|
||||
char path[12];
|
||||
BYTE *fcb = (BYTE *)PTR_SEG_OFF_TO_LIN(DS_reg(context), DX_reg(context));
|
||||
FINDFILE_FCB *pFCB;
|
||||
BYTE attr;
|
||||
char buffer[] = "A:.";
|
||||
const char *unixPath;
|
||||
|
||||
BYTE *dta = GetCurrentDTA();
|
||||
if (*fcb == 0xff)
|
||||
{
|
||||
attr = fcb[6];
|
||||
pFCB = (FINDFILE_FCB *)(fcb + 7);
|
||||
}
|
||||
else
|
||||
{
|
||||
attr = 0;
|
||||
pFCB = (FINDFILE_FCB *)fcb;
|
||||
}
|
||||
|
||||
DumpFCB( fcb );
|
||||
|
||||
if ((*fcb) == 0xff)
|
||||
{
|
||||
standard_fcb = (struct fcb *)(fcb + 7);
|
||||
output_fcb = (struct fcb *)(dta + 7);
|
||||
*dta = 0xff;
|
||||
}
|
||||
else
|
||||
{
|
||||
standard_fcb = (struct fcb *)fcb;
|
||||
output_fcb = (struct fcb *)dta;
|
||||
}
|
||||
buffer[0] += DOS_GET_DRIVE( pFCB->drive );
|
||||
pFCB->unixPath = NULL;
|
||||
if (!(unixPath = DOSFS_GetUnixFileName( buffer, TRUE ))) return 0;
|
||||
pFCB->unixPath = xstrdup( unixPath );
|
||||
pFCB->count = 0;
|
||||
return 1;
|
||||
}
|
||||
|
||||
if (standard_fcb->drive)
|
||||
{
|
||||
drive = standard_fcb->drive - 1;
|
||||
if (!DRIVE_IsValid(drive))
|
||||
{
|
||||
DOS_ERROR(ER_InvalidDrive, EC_MediaError, SA_Abort, EL_Disk);
|
||||
AX_reg(context) = 0xff;
|
||||
return;
|
||||
}
|
||||
}
|
||||
else
|
||||
drive = DRIVE_GetCurrentDrive();
|
||||
|
||||
output_fcb->drive = drive;
|
||||
static int INT21_FindNextFCB( struct sigcontext_struct *context )
|
||||
{
|
||||
BYTE *fcb = (BYTE *)PTR_SEG_OFF_TO_LIN(DS_reg(context), DX_reg(context));
|
||||
FINDFILE_FCB *pFCB;
|
||||
DOS_DIRENTRY_LAYOUT *pResult = (DOS_DIRENTRY_LAYOUT *)GetCurrentDTA();
|
||||
DOS_DIRENT entry;
|
||||
BYTE attr;
|
||||
int count;
|
||||
|
||||
if (*(fcb) == 0xff)
|
||||
{
|
||||
if (*(fcb+6) & FA_LABEL) /* return volume label */
|
||||
{
|
||||
*(dta+6) = FA_LABEL;
|
||||
memset(&output_fcb->name, ' ', 11);
|
||||
memcpy(output_fcb->name, DRIVE_GetLabel(drive), 11);
|
||||
AX_reg(context) = 0x00;
|
||||
return;
|
||||
}
|
||||
}
|
||||
if (*fcb == 0xff)
|
||||
{
|
||||
attr = fcb[6];
|
||||
pFCB = (FINDFILE_FCB *)(fcb + 7);
|
||||
}
|
||||
else
|
||||
{
|
||||
attr = 0;
|
||||
pFCB = (FINDFILE_FCB *)fcb;
|
||||
}
|
||||
|
||||
strncpy(output_fcb->name, standard_fcb->name, 11);
|
||||
if (*fcb == 0xff)
|
||||
*(dta+6) = ( *(fcb+6) & (!FA_DIRECTORY));
|
||||
if (!pFCB->unixPath) return 0;
|
||||
if (!(count = DOSFS_FindNext( pFCB->unixPath, pFCB->filename,
|
||||
DOS_GET_DRIVE( pFCB->drive ), attr,
|
||||
pFCB->count, &entry )))
|
||||
{
|
||||
free( pFCB->unixPath );
|
||||
pFCB->unixPath = NULL;
|
||||
return 0;
|
||||
}
|
||||
pFCB->count += count;
|
||||
|
||||
#if 0
|
||||
sprintf(path,"%c:*.*",drive+'A');
|
||||
if ((output_fcb->directory = DOS_opendir(path))==NULL)
|
||||
{
|
||||
Error (PathNotFound, EC_MediaError, EL_Disk);
|
||||
AX_reg(context) = 0xff;
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
memcpy( pResult->filename, entry.name, sizeof(pResult->filename) );
|
||||
pResult->fileattr = entry.attr;
|
||||
memset( pResult->reserved, 0, sizeof(pResult->reserved) );
|
||||
pResult->filetime = entry.time;
|
||||
pResult->filedate = entry.date;
|
||||
pResult->cluster = 0; /* what else? */
|
||||
pResult->filesize = entry.size;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
|
@ -975,7 +965,6 @@ void DOS3Call( struct sigcontext_struct context )
|
|||
case 0x0c: /* FLUSH BUFFER AND READ STANDARD INPUT */
|
||||
case 0x0f: /* OPEN FILE USING FCB */
|
||||
case 0x10: /* CLOSE FILE USING FCB */
|
||||
case 0x12: /* FIND NEXT MATCHING FILE USING FCB */
|
||||
case 0x14: /* SEQUENTIAL READ FROM FCB FILE */
|
||||
case 0x15: /* SEQUENTIAL WRITE TO FCB FILE */
|
||||
case 0x16: /* CREATE OR TRUNCATE FILE USING FCB */
|
||||
|
@ -1017,7 +1006,15 @@ void DOS3Call( struct sigcontext_struct context )
|
|||
break;
|
||||
|
||||
case 0x11: /* FIND FIRST MATCHING FILE USING FCB */
|
||||
FindFirstFCB(&context);
|
||||
if (!INT21_FindFirstFCB(&context))
|
||||
{
|
||||
AL_reg(&context) = 0xff;
|
||||
break;
|
||||
}
|
||||
/* else fall through */
|
||||
|
||||
case 0x12: /* FIND NEXT MATCHING FILE USING FCB */
|
||||
AL_reg(&context) = INT21_FindNextFCB(&context) ? 0x00 : 0xff;
|
||||
break;
|
||||
|
||||
case 0x13: /* DELETE FILE USING FCB */
|
||||
|
@ -1200,8 +1197,8 @@ void DOS3Call( struct sigcontext_struct context )
|
|||
case 0x3f: /* "READ" - READ FROM FILE OR DEVICE */
|
||||
{
|
||||
LONG result = _hread( BX_reg(&context),
|
||||
PTR_SEG_OFF_TO_LIN( DS_reg(&context),
|
||||
DX_reg(&context) ),
|
||||
(SEGPTR)MAKELONG( DX_reg(&context),
|
||||
DS_reg(&context) ),
|
||||
CX_reg(&context) );
|
||||
if (result == -1)
|
||||
{
|
||||
|
@ -1569,7 +1566,7 @@ void DOS3Call( struct sigcontext_struct context )
|
|||
|
||||
case 0x68: /* "FFLUSH" - COMMIT FILE */
|
||||
case 0x6a: /* COMMIT FILE */
|
||||
if (fsync( FILE_GetUnixHandle( BX_reg(&context) )) == -1)
|
||||
if (fsync( FILE_GetUnixTaskHandle( BX_reg(&context) )) == -1)
|
||||
{
|
||||
FILE_SetDosError();
|
||||
AX_reg(&context) = DOS_ExtendedError;
|
||||
|
|
|
@ -46,6 +46,8 @@ void INT_Int2fHandler( struct sigcontext_struct context )
|
|||
{
|
||||
case 0x10: /* smartdrv */
|
||||
break; /* not installed */
|
||||
case 0x11: /* dblspace */
|
||||
break; /* not installed */
|
||||
case 0x12: /* realtime compression interface */
|
||||
break; /* not installed */
|
||||
default:
|
||||
|
|
|
@ -12,6 +12,8 @@
|
|||
#include "gdi.h"
|
||||
#include "color.h"
|
||||
#include "palette.h"
|
||||
#include "stddebug.h"
|
||||
#include "debug.h"
|
||||
#include "xmalloc.h"
|
||||
|
||||
Colormap COLOR_WinColormap = 0;
|
||||
|
@ -301,8 +303,18 @@ int COLOR_ToPhysical( DC *dc, COLORREF color )
|
|||
{
|
||||
WORD index = 0;
|
||||
WORD *mapping;
|
||||
unsigned char spec_type;
|
||||
|
||||
if (dc && (dc->w.bitsPerPixel == 1) && ((color >> 24) == 0))
|
||||
spec_type = color >> 24;
|
||||
if (spec_type == 0xff)
|
||||
{
|
||||
spec_type = 0; /* 'write' seems to need that for 'Page 1' text */
|
||||
color &= 0xffffff;
|
||||
}
|
||||
if (spec_type > 2)
|
||||
fprintf(stderr, "COLOR_ToPhysical : color >> 24 not in {-1,0,1,2} : %08lx\n",
|
||||
color);
|
||||
if (dc && (dc->w.bitsPerPixel == 1) && (spec_type == 0))
|
||||
{
|
||||
/* monochrome */
|
||||
if (((color >> 16) & 0xff) +
|
||||
|
@ -320,7 +332,7 @@ int COLOR_ToPhysical( DC *dc, COLORREF color )
|
|||
unsigned idx;
|
||||
PALETTEOBJ * palPtr;
|
||||
|
||||
switch(color >> 24)
|
||||
switch(spec_type)
|
||||
{
|
||||
case 0: /* RGB */
|
||||
case 2: /* PALETTERGB -- needs some work, but why bother; we've got a REALLY LARGE number of colors...? */
|
||||
|
@ -362,8 +374,9 @@ int COLOR_ToPhysical( DC *dc, COLORREF color )
|
|||
return (red << COLOR_Redshift) | (green << COLOR_Greenshift) | (blue << COLOR_Blueshift);
|
||||
}
|
||||
}
|
||||
else switch(color >> 24)
|
||||
else switch(spec_type)
|
||||
{
|
||||
default:
|
||||
case 0: /* RGB */
|
||||
index = GetNearestPaletteIndex( STOCK_DEFAULT_PALETTE, color );
|
||||
break;
|
||||
|
|
|
@ -499,7 +499,8 @@ HICON LoadIcon( HANDLE hInstance, SEGPTR name )
|
|||
* CreateCursor (USER.406)
|
||||
*/
|
||||
HCURSOR CreateCursor( HINSTANCE hInstance, INT xHotSpot, INT yHotSpot,
|
||||
INT nWidth, INT nHeight, LPVOID lpANDbits, LPVOID lpXORbits)
|
||||
INT nWidth, INT nHeight,
|
||||
const BYTE *lpANDbits, const BYTE *lpXORbits )
|
||||
{
|
||||
CURSORICONINFO info = { { xHotSpot, yHotSpot }, nWidth, nHeight, 0, 1, 1 };
|
||||
|
||||
|
@ -512,8 +513,8 @@ HCURSOR CreateCursor( HINSTANCE hInstance, INT xHotSpot, INT yHotSpot,
|
|||
/***********************************************************************
|
||||
* CreateIcon (USER.407)
|
||||
*/
|
||||
HICON CreateIcon( HANDLE hInstance, INT nWidth, INT nHeight, BYTE bPlanes,
|
||||
BYTE bBitsPixel, LPSTR lpANDbits, LPSTR lpXORbits)
|
||||
HICON CreateIcon( HINSTANCE hInstance, INT nWidth, INT nHeight, BYTE bPlanes,
|
||||
BYTE bBitsPixel, const BYTE* lpANDbits, const BYTE* lpXORbits)
|
||||
{
|
||||
CURSORICONINFO info = { { 0, 0 }, nWidth, nHeight, 0, bPlanes, bBitsPixel };
|
||||
|
||||
|
@ -527,7 +528,7 @@ HICON CreateIcon( HANDLE hInstance, INT nWidth, INT nHeight, BYTE bPlanes,
|
|||
* CreateCursorIconIndirect (USER.408)
|
||||
*/
|
||||
HANDLE CreateCursorIconIndirect( HANDLE hInstance, CURSORICONINFO *info,
|
||||
LPSTR lpANDbits, LPSTR lpXORbits )
|
||||
const BYTE *lpANDbits, const BYTE *lpXORbits )
|
||||
{
|
||||
HANDLE handle;
|
||||
char *ptr;
|
||||
|
@ -611,7 +612,7 @@ BOOL DestroyCursor( HCURSOR hCursor )
|
|||
/***********************************************************************
|
||||
* DrawIcon (USER.84)
|
||||
*/
|
||||
BOOL DrawIcon( HDC hdc, short x, short y, HICON hIcon )
|
||||
BOOL DrawIcon( HDC hdc, INT x, INT y, HICON hIcon )
|
||||
{
|
||||
CURSORICONINFO *ptr;
|
||||
HDC hMemDC;
|
||||
|
|
10
objects/dc.c
10
objects/dc.c
|
@ -158,7 +158,7 @@ void DC_InitDC( HDC hdc )
|
|||
|
||||
|
||||
/***********************************************************************
|
||||
* DC_SetupDCForPatBlt
|
||||
* DC_SetupGCForPatBlt
|
||||
*
|
||||
* Setup the GC for a PatBlt operation using current brush.
|
||||
* If fMapColors is TRUE, X pixels are mapped to Windows colors.
|
||||
|
@ -239,7 +239,7 @@ BOOL DC_SetupGCForPatBlt( DC * dc, GC gc, BOOL fMapColors )
|
|||
|
||||
|
||||
/***********************************************************************
|
||||
* DC_SetupDCForBrush
|
||||
* DC_SetupGCForBrush
|
||||
*
|
||||
* Setup dc->u.x.gc for drawing operations using current brush.
|
||||
* Return FALSE if brush is BS_NULL, TRUE otherwise.
|
||||
|
@ -251,7 +251,7 @@ BOOL DC_SetupGCForBrush( DC * dc )
|
|||
|
||||
|
||||
/***********************************************************************
|
||||
* DC_SetupDCForPen
|
||||
* DC_SetupGCForPen
|
||||
*
|
||||
* Setup dc->u.x.gc for drawing operations using current pen.
|
||||
* Return FALSE if pen is PS_NULL, TRUE otherwise.
|
||||
|
@ -450,7 +450,7 @@ BOOL RestoreDC( HDC hdc, short level )
|
|||
/***********************************************************************
|
||||
* CreateDC (GDI.53)
|
||||
*/
|
||||
HDC CreateDC( LPCSTR driver, LPCSTR device, LPCSTR output, LPCSTR initData )
|
||||
HDC CreateDC( LPCTSTR driver, LPCTSTR device, LPCTSTR output, const DEVMODE* initData )
|
||||
{
|
||||
DC * dc;
|
||||
HANDLE handle;
|
||||
|
@ -494,7 +494,7 @@ HDC CreateDC( LPCSTR driver, LPCSTR device, LPCSTR output, LPCSTR initData )
|
|||
/***********************************************************************
|
||||
* CreateIC (GDI.153)
|
||||
*/
|
||||
HDC CreateIC( LPSTR driver, LPSTR device, LPSTR output, LPSTR initData )
|
||||
HDC CreateIC( LPCTSTR driver, LPCTSTR device, LPCTSTR output, const DEVMODE* initData )
|
||||
{
|
||||
/* Nothing special yet for ICs */
|
||||
return CreateDC( driver, device, output, initData );
|
||||
|
|
|
@ -123,20 +123,26 @@ static XFontStruct * FONT_MatchFont( LOGFONT * font, DC * dc )
|
|||
char pattern[100];
|
||||
const char *family, *weight, *charset;
|
||||
char **names;
|
||||
char slant, spacing;
|
||||
char slant, oldspacing, spacing;
|
||||
int width, height, oldheight, count;
|
||||
XFontStruct * fontStruct;
|
||||
|
||||
dprintf_font(stddeb,
|
||||
"FONT_MatchFont(H,W = %d,%d; Weight = %d; Italic = %d; FaceName = '%s'\n",
|
||||
font->lfHeight, font->lfWidth, font->lfWeight, font->lfItalic, font->lfFaceName);
|
||||
weight = (font->lfWeight > 550) ? "bold" : "medium";
|
||||
slant = font->lfItalic ? 'i' : 'r';
|
||||
height = font->lfHeight * dc->w.VportExtX / dc->w.WndExtX;
|
||||
if (font->lfHeight == -1)
|
||||
height = 0;
|
||||
else
|
||||
height = font->lfHeight * dc->w.VportExtX / dc->w.WndExtX;
|
||||
if (height == 0) height = 120; /* Default height = 12 */
|
||||
else if (height < 0)
|
||||
{
|
||||
/* If height is negative, it means the height of the characters */
|
||||
/* *without* the internal leading. So we adjust it a bit to */
|
||||
/* compensate. 5/4 seems to give good results for small fonts. */
|
||||
height = 10 * (-height * 5 / 4);
|
||||
height = 10 * (-height * 8 / 7);
|
||||
}
|
||||
else height *= 10;
|
||||
width = 10 * (font->lfWidth * dc->w.VportExtY / dc->w.WndExtY);
|
||||
|
@ -172,6 +178,7 @@ static XFontStruct * FONT_MatchFont( LOGFONT * font, DC * dc )
|
|||
}
|
||||
|
||||
oldheight = height;
|
||||
oldspacing = spacing;
|
||||
while (TRUE) {
|
||||
/* Width==0 seems not to be a valid wildcard on SGI's, using * instead */
|
||||
if ( width == 0 )
|
||||
|
@ -183,22 +190,30 @@ static XFontStruct * FONT_MatchFont( LOGFONT * font, DC * dc )
|
|||
dprintf_font(stddeb, "FONT_MatchFont: '%s'\n", pattern );
|
||||
names = XListFonts( display, pattern, 1, &count );
|
||||
if (count > 0) break;
|
||||
if (spacing == 'm') /* try 'c' if no 'm' found */ {
|
||||
spacing = 'c';
|
||||
continue;
|
||||
} else if (spacing == 'p') /* try '*' if no 'p' found */ {
|
||||
spacing = '*';
|
||||
continue;
|
||||
}
|
||||
spacing = oldspacing;
|
||||
height -= 10;
|
||||
if (height < 10) {
|
||||
dprintf_font(stddeb,"*** No match for %s\n", pattern );
|
||||
if(slant == 'i') {
|
||||
if (slant == 'i') {
|
||||
/* try oblique if no italic font */
|
||||
slant = 'o';
|
||||
height = oldheight;
|
||||
continue;
|
||||
}
|
||||
if (spacing == 'm') {
|
||||
if (spacing == 'm' && strcmp(family, "*-*") != 0) {
|
||||
/* If a fixed spacing font could not be found, ignore
|
||||
* the family */
|
||||
family = "*-*";
|
||||
height = oldheight;
|
||||
continue;
|
||||
}
|
||||
fprintf(stderr, "FONT_MatchFont(%s) : returning NULL\n", pattern);
|
||||
return NULL;
|
||||
}
|
||||
}
|
||||
|
@ -296,12 +311,20 @@ BOOL CreateScalableFontResource( UINT fHidden,LPSTR lpszResourceFile,
|
|||
HFONT CreateFontIndirect( const LOGFONT * font )
|
||||
{
|
||||
FONTOBJ * fontPtr;
|
||||
HFONT hfont = GDI_AllocObject( sizeof(FONTOBJ), FONT_MAGIC );
|
||||
HFONT hfont;
|
||||
|
||||
if (!font)
|
||||
{
|
||||
fprintf(stderr, "CreateFontIndirect : font is NULL : returning NULL\n");
|
||||
return 0;
|
||||
}
|
||||
hfont = GDI_AllocObject( sizeof(FONTOBJ), FONT_MAGIC );
|
||||
if (!hfont) return 0;
|
||||
fontPtr = (FONTOBJ *) GDI_HEAP_LIN_ADDR( hfont );
|
||||
memcpy( &fontPtr->logfont, font, sizeof(LOGFONT) );
|
||||
AnsiLower( fontPtr->logfont.lfFaceName );
|
||||
dprintf_font(stddeb,"CreateFontIndirect(%p); return "NPFMT"\n",font,hfont);
|
||||
dprintf_font(stddeb,"CreateFontIndirect(%p (%d,%d)); return "NPFMT"\n",
|
||||
font, font->lfHeight, font->lfWidth, hfont);
|
||||
return hfont;
|
||||
}
|
||||
|
||||
|
@ -316,7 +339,12 @@ HFONT CreateFont( INT height, INT width, INT esc, INT orient, INT weight,
|
|||
{
|
||||
LOGFONT logfont = { height, width, esc, orient, weight, italic, underline,
|
||||
strikeout, charset, outpres, clippres, quality, pitch, };
|
||||
if (name) strncpy( logfont.lfFaceName, name, LF_FACESIZE );
|
||||
dprintf_font(stddeb,"CreateFont(%d,%d)\n", height, width);
|
||||
if (name)
|
||||
{
|
||||
strncpy( logfont.lfFaceName, name, LF_FACESIZE - 1 );
|
||||
logfont.lfFaceName[LF_FACESIZE - 1] = '\0';
|
||||
}
|
||||
else logfont.lfFaceName[0] = '\0';
|
||||
return CreateFontIndirect( &logfont );
|
||||
}
|
||||
|
@ -344,8 +372,9 @@ HFONT FONT_SelectObject( DC * dc, HFONT hfont, FONTOBJ * font )
|
|||
XFontStruct * fontStruct;
|
||||
dprintf_font(stddeb,"FONT_SelectObject(%p, "NPFMT", %p)\n",
|
||||
dc, hfont, font);
|
||||
/* Load font if necessary */
|
||||
|
||||
#if 0 /* From the code in SelectObject, this can not happen */
|
||||
/* Load font if necessary */
|
||||
if (!font)
|
||||
{
|
||||
HFONT hnewfont;
|
||||
|
@ -355,6 +384,7 @@ HFONT FONT_SelectObject( DC * dc, HFONT hfont, FONTOBJ * font )
|
|||
DEFAULT_QUALITY, FF_DONTCARE, "*" );
|
||||
font = (FONTOBJ *) GDI_HEAP_LIN_ADDR( hnewfont );
|
||||
}
|
||||
#endif
|
||||
|
||||
if (dc->header.wMagic == METAFILE_DC_MAGIC)
|
||||
if (MF_CreateFontIndirect(dc, hfont, &(font->logfont)))
|
||||
|
@ -627,8 +657,10 @@ BOOL RemoveFontResource( LPSTR str )
|
|||
int ParseFontParms(LPSTR lpFont, WORD wParmsNo, LPSTR lpRetStr, WORD wMaxSiz)
|
||||
{
|
||||
int i;
|
||||
#if 0
|
||||
dprintf_font(stddeb,"ParseFontParms('%s', %d, %p, %d);\n",
|
||||
lpFont, wParmsNo, lpRetStr, wMaxSiz);
|
||||
#endif
|
||||
if (lpFont == NULL) return 0;
|
||||
if (lpRetStr == NULL) return 0;
|
||||
for (i = 0; (*lpFont != '\0' && i != wParmsNo); ) {
|
||||
|
@ -641,7 +673,9 @@ int ParseFontParms(LPSTR lpFont, WORD wParmsNo, LPSTR lpRetStr, WORD wMaxSiz)
|
|||
for (i = 0; (*lpFont != '\0' && *lpFont != '-' && i < wMaxSiz); i++)
|
||||
*(lpRetStr + i) = *lpFont++;
|
||||
*(lpRetStr + i) = '\0';
|
||||
#if 0
|
||||
dprintf_font(stddeb,"ParseFontParms // '%s'\n", lpRetStr);
|
||||
#endif
|
||||
return i;
|
||||
}
|
||||
else
|
||||
|
@ -714,6 +748,7 @@ void InitFontsList(void)
|
|||
lpNewFont->lfPitchAndFamily = VARIABLE_PITCH | FF_SWISS;
|
||||
break;
|
||||
case 'm':
|
||||
case 'c':
|
||||
lpNewFont->lfPitchAndFamily = FIXED_PITCH | FF_MODERN;
|
||||
break;
|
||||
default:
|
||||
|
@ -734,7 +769,7 @@ void InitFontsList(void)
|
|||
/*************************************************************************
|
||||
* EnumFonts [GDI.70]
|
||||
*/
|
||||
int EnumFonts(HDC hDC, LPSTR lpFaceName, FARPROC lpEnumFunc, LPSTR lpData)
|
||||
INT EnumFonts(HDC hDC, LPCTSTR lpFaceName, FONTENUMPROC lpEnumFunc, LPARAM lpData)
|
||||
{
|
||||
HANDLE hLog;
|
||||
HANDLE hMet;
|
||||
|
@ -747,7 +782,7 @@ int EnumFonts(HDC hDC, LPSTR lpFaceName, FARPROC lpEnumFunc, LPSTR lpData)
|
|||
int nRet = 0;
|
||||
int i;
|
||||
|
||||
dprintf_font(stddeb,"EnumFonts("NPFMT", %p='%s', %08lx, %p)\n",
|
||||
dprintf_font(stddeb,"EnumFonts("NPFMT", %p='%s', %08lx, %08lx)\n",
|
||||
hDC, lpFaceName, lpFaceName, (LONG)lpEnumFunc, lpData);
|
||||
if (lpEnumFunc == 0) return 0;
|
||||
hLog = GDI_HEAP_ALLOC( sizeof(LOGFONT) + LF_FACESIZE );
|
||||
|
@ -804,7 +839,7 @@ int EnumFonts(HDC hDC, LPSTR lpFaceName, FARPROC lpEnumFunc, LPSTR lpData)
|
|||
/*************************************************************************
|
||||
* EnumFontFamilies [GDI.330]
|
||||
*/
|
||||
int EnumFontFamilies(HDC hDC, LPSTR lpszFamily, FONTENUMPROC lpEnumFunc, LPARAM lpData)
|
||||
INT EnumFontFamilies(HDC hDC, LPCTSTR lpszFamily, FONTENUMPROC lpEnumFunc, LPARAM lpData)
|
||||
{
|
||||
HANDLE hLog;
|
||||
HANDLE hMet;
|
||||
|
|
|
@ -246,7 +246,7 @@ GDIOBJHDR * GDI_GetObjPtr( HANDLE handle, WORD magic )
|
|||
else
|
||||
ptr = (GDIOBJHDR *) GDI_HEAP_LIN_ADDR( handle );
|
||||
if (!ptr) return NULL;
|
||||
if (ptr->wMagic != magic) return NULL;
|
||||
if ((magic != MAGIC_DONTCARE) && (ptr->wMagic != magic)) return NULL;
|
||||
return ptr;
|
||||
}
|
||||
|
||||
|
@ -254,7 +254,7 @@ GDIOBJHDR * GDI_GetObjPtr( HANDLE handle, WORD magic )
|
|||
/***********************************************************************
|
||||
* DeleteObject (GDI.69)
|
||||
*/
|
||||
BOOL DeleteObject( HANDLE obj )
|
||||
BOOL DeleteObject( HGDIOBJ obj )
|
||||
{
|
||||
/* Check if object is valid */
|
||||
|
||||
|
@ -377,7 +377,7 @@ BOOL UnrealizeObject( HANDLE handle )
|
|||
/***********************************************************************
|
||||
* EnumObjects (GDI.71)
|
||||
*/
|
||||
int EnumObjects( HDC hdc, int nObjType, FARPROC lpEnumFunc, LPARAM lParam )
|
||||
INT EnumObjects( HDC hdc, INT nObjType, GOBJENUMPROC lpEnumFunc, LPARAM lParam )
|
||||
{
|
||||
/* Solid colors to enumerate */
|
||||
static const COLORREF solid_colors[] =
|
||||
|
|
|
@ -10,6 +10,7 @@ static char Copyright[] = "Copyright David W. Metcalfe, 1994";
|
|||
#include <fcntl.h>
|
||||
#include "gdi.h"
|
||||
#include "bitmap.h"
|
||||
#include "file.h"
|
||||
#include "metafile.h"
|
||||
#include "stddebug.h"
|
||||
/* #define DEBUG_METAFILE */
|
||||
|
@ -55,7 +56,7 @@ HMETAFILE GetMetaFile(LPSTR lpFilename)
|
|||
GlobalFree(hmf);
|
||||
return 0;
|
||||
}
|
||||
if (_lread(mf->hFile, (char *)mh, MFHEADERSIZE) == HFILE_ERROR) {
|
||||
if (FILE_Read(mf->hFile, (char *)mh, MFHEADERSIZE) == HFILE_ERROR) {
|
||||
GlobalFree(mf->hMetaHdr);
|
||||
GlobalFree(hmf);
|
||||
return 0;
|
||||
|
@ -77,7 +78,7 @@ HMETAFILE GetMetaFile(LPSTR lpFilename)
|
|||
/******************************************************************
|
||||
* CreateMetafile GDI.125
|
||||
*/
|
||||
HANDLE CreateMetaFile(LPSTR lpFilename)
|
||||
HANDLE CreateMetaFile(LPCTSTR lpFilename)
|
||||
{
|
||||
DC *dc;
|
||||
HANDLE handle;
|
||||
|
@ -254,9 +255,9 @@ BOOL PlayMetaFile(HDC hdc, HMETAFILE hmf)
|
|||
{
|
||||
if (mh->mtType == 1) /* disk based metafile */
|
||||
{
|
||||
_lread(mf->hFile, buffer, sizeof(METARECORD));
|
||||
FILE_Read(mf->hFile, buffer, sizeof(METARECORD));
|
||||
mr = (METARECORD *)buffer;
|
||||
_lread(mf->hFile, (char *)(mr->rdParam + 1), (mr->rdSize * 2) -
|
||||
FILE_Read(mf->hFile, (char *)(mr->rdParam + 1), (mr->rdSize * 2) -
|
||||
sizeof(METARECORD));
|
||||
mf->MetaOffset += mr->rdSize * 2;
|
||||
}
|
||||
|
|
|
@ -323,9 +323,8 @@ static HBITMAP OBM_MakeBitmap( WORD width, WORD height,
|
|||
*
|
||||
* Create the 2 bitmaps from XPM data.
|
||||
*/
|
||||
static BOOL OBM_CreateBitmaps( char **data, BOOL color, BOOL mask,
|
||||
HBITMAP *hBitmap, HBITMAP *hBitmapMask,
|
||||
POINT *hotspot )
|
||||
static BOOL OBM_CreateBitmaps( char **data, BOOL color, HBITMAP *hBitmap,
|
||||
HBITMAP *hBitmapMask, POINT *hotspot )
|
||||
{
|
||||
Pixmap pixmap, pixmask;
|
||||
XpmAttributes attrs;
|
||||
|
@ -348,14 +347,14 @@ static BOOL OBM_CreateBitmaps( char **data, BOOL color, BOOL mask,
|
|||
}
|
||||
*hBitmap = OBM_MakeBitmap( attrs.width, attrs.height,
|
||||
attrs.depth, pixmap );
|
||||
if (mask) *hBitmapMask = OBM_MakeBitmap( attrs.width, attrs.height,
|
||||
1, pixmask );
|
||||
if (hBitmapMask) *hBitmapMask = OBM_MakeBitmap( attrs.width, attrs.height,
|
||||
1, pixmask );
|
||||
if (!*hBitmap)
|
||||
{
|
||||
if (pixmap) XFreePixmap( display, pixmap );
|
||||
if (pixmask) XFreePixmap( display, pixmask );
|
||||
if (*hBitmap) GDI_FreeObject( *hBitmap );
|
||||
if (*hBitmapMask) GDI_FreeObject( *hBitmapMask );
|
||||
if (hBitmapMask && *hBitmapMask) GDI_FreeObject( *hBitmapMask );
|
||||
return FALSE;
|
||||
}
|
||||
else return TRUE;
|
||||
|
@ -367,17 +366,17 @@ static BOOL OBM_CreateBitmaps( char **data, BOOL color, BOOL mask,
|
|||
*/
|
||||
HBITMAP OBM_LoadBitmap( WORD id )
|
||||
{
|
||||
HBITMAP hbitmap, hbitmask;
|
||||
HBITMAP hbitmap;
|
||||
|
||||
if ((id < OBM_FIRST) || (id > OBM_LAST)) return 0;
|
||||
id -= OBM_FIRST;
|
||||
|
||||
if (!OBM_InitColorSymbols()) return 0;
|
||||
|
||||
if (!CallTo32_LargeStack( (int(*)())OBM_CreateBitmaps, 6,
|
||||
if (!CallTo32_LargeStack( (int(*)())OBM_CreateBitmaps, 5,
|
||||
OBM_Pixmaps_Data[id].data,
|
||||
OBM_Pixmaps_Data[id].color,
|
||||
FALSE, &hbitmap, &hbitmask, NULL, NULL ))
|
||||
&hbitmap, NULL, NULL ))
|
||||
{
|
||||
fprintf( stderr, "Error creating OEM bitmap %d\n", OBM_FIRST+id );
|
||||
return 0;
|
||||
|
@ -417,9 +416,9 @@ HANDLE OBM_LoadCursorIcon( WORD id, BOOL fCursor )
|
|||
|
||||
if (!OBM_InitColorSymbols()) return 0;
|
||||
|
||||
if (!CallTo32_LargeStack( (int(*)())OBM_CreateBitmaps, 6,
|
||||
if (!CallTo32_LargeStack( (int(*)())OBM_CreateBitmaps, 5,
|
||||
fCursor ? OBM_Cursors_Data[id] : OBM_Icons_Data[id],
|
||||
!fCursor, TRUE, &hXorBits, &hAndBits, &hotspot ))
|
||||
!fCursor, &hXorBits, &hAndBits, &hotspot ))
|
||||
{
|
||||
fprintf( stderr, "Error creating OEM cursor/icon %d\n", id );
|
||||
return 0;
|
||||
|
|
|
@ -76,7 +76,7 @@ static WORD PALETTE_GetNearestIndexAndColor(HPALETTE hpalette, COLORREF *color)
|
|||
/***********************************************************************
|
||||
* CreatePalette (GDI.360)
|
||||
*/
|
||||
HPALETTE CreatePalette( LOGPALETTE * palette )
|
||||
HPALETTE CreatePalette( const LOGPALETTE* palette )
|
||||
{
|
||||
PALETTEOBJ * palettePtr;
|
||||
HPALETTE hpalette;
|
||||
|
|
|
@ -24,7 +24,7 @@ HPEN CreatePen( INT style, INT width, COLORREF color )
|
|||
/***********************************************************************
|
||||
* CreatePenIndirect (GDI.62)
|
||||
*/
|
||||
HPEN CreatePenIndirect( LOGPEN * pen )
|
||||
HPEN CreatePenIndirect( const LOGPEN * pen )
|
||||
{
|
||||
PENOBJ * penPtr;
|
||||
HPEN hpen;
|
||||
|
|
|
@ -66,7 +66,7 @@ int GetRgnBox( HRGN hrgn, LPRECT rect )
|
|||
/***********************************************************************
|
||||
* CreateRectRgn (GDI.64)
|
||||
*/
|
||||
HRGN CreateRectRgn( short left, short top, short right, short bottom )
|
||||
HRGN CreateRectRgn( INT left, INT top, INT right, INT bottom )
|
||||
{
|
||||
HRGN hrgn;
|
||||
RGNOBJ *obj;
|
||||
|
@ -93,7 +93,7 @@ HRGN CreateRectRgn( short left, short top, short right, short bottom )
|
|||
/***********************************************************************
|
||||
* CreateRectRgnIndirect (GDI.65)
|
||||
*/
|
||||
HRGN CreateRectRgnIndirect( LPRECT rect )
|
||||
HRGN CreateRectRgnIndirect( const RECT* rect )
|
||||
{
|
||||
return CreateRectRgn( rect->left, rect->top, rect->right, rect->bottom );
|
||||
}
|
||||
|
@ -124,8 +124,8 @@ void SetRectRgn( HRGN hrgn, short left, short top, short right, short bottom )
|
|||
/***********************************************************************
|
||||
* CreateRoundRectRgn (GDI.444)
|
||||
*/
|
||||
HRGN CreateRoundRectRgn( short left, short top, short right, short bottom,
|
||||
short ellipse_width, short ellipse_height )
|
||||
HRGN CreateRoundRectRgn( INT left, INT top, INT right, INT bottom,
|
||||
INT ellipse_width, INT ellipse_height )
|
||||
{
|
||||
RGNOBJ * obj;
|
||||
HRGN hrgn;
|
||||
|
@ -240,7 +240,7 @@ HRGN CreateEllipticRgnIndirect( LPRECT rect )
|
|||
/***********************************************************************
|
||||
* CreatePolygonRgn (GDI.63)
|
||||
*/
|
||||
HRGN CreatePolygonRgn( POINT * points, INT count, INT mode )
|
||||
HRGN CreatePolygonRgn( const POINT * points, INT count, INT mode )
|
||||
{
|
||||
return CreatePolyPolygonRgn( points, &count, 1, mode );
|
||||
}
|
||||
|
@ -249,7 +249,7 @@ HRGN CreatePolygonRgn( POINT * points, INT count, INT mode )
|
|||
/***********************************************************************
|
||||
* CreatePolyPolygonRgn (GDI.451)
|
||||
*/
|
||||
HRGN CreatePolyPolygonRgn( POINT * points, INT * count,
|
||||
HRGN CreatePolyPolygonRgn( const POINT * points, const INT * count,
|
||||
INT nbpolygons, INT mode )
|
||||
{
|
||||
RGNOBJ * obj;
|
||||
|
|
|
@ -184,12 +184,12 @@ static const char *TEXT_NextLine( HDC hdc, const char *str, int *count,
|
|||
/***********************************************************************
|
||||
* DrawText (USER.85)
|
||||
*/
|
||||
int DrawText( HDC hdc, LPCSTR str, int count, LPRECT rect, WORD flags )
|
||||
INT DrawText( HDC hdc, LPCTSTR str, INT i_count, LPRECT rect, UINT flags )
|
||||
{
|
||||
SIZE size;
|
||||
const char *strPtr;
|
||||
static char line[1024];
|
||||
int len, lh;
|
||||
int len, lh, count=i_count;
|
||||
int prefix_x = 0;
|
||||
int prefix_end = 0;
|
||||
TEXTMETRIC tm;
|
||||
|
|
|
@ -32,7 +32,6 @@ as long as you leave the existing copyrights intact.
|
|||
|
||||
Bug Reports and Fixes
|
||||
If you find a bug in winerc, you can report it to me,
|
||||
martin@cs.csufresno.edu (Martin von Loewis)
|
||||
or to comp.emulators.ms-windows.wine. If you can fix the bug, send the
|
||||
diffs & ChangeLog to wine-new@amscons.com (Bob Amstadt), or send it to
|
||||
me, and I will collect the fixes and forward them to wine-news.
|
||||
martin@cs.csufresno.edu (Martin von Loewis) or to
|
||||
comp.emulators.ms-windows.wine. If you can fix the bug, send the diffs
|
||||
and ChangeLog entry to julliard@lrc.epfl.ch (Alexandre Julliard).
|
||||
|
|
|
@ -2,7 +2,7 @@ TOPSRC = @top_srcdir@
|
|||
|
||||
MODULE = resources
|
||||
|
||||
LANGUAGES = En Es De No Fr Fi Da
|
||||
LANGUAGES = En Es De No Fr Fi Da Cz
|
||||
|
||||
SYSRES_SRCS = $(LANGUAGES:%=sysres_%.c)
|
||||
|
||||
|
|
|
@ -16,6 +16,7 @@
|
|||
#include "sysres_Fr.h"
|
||||
#include "sysres_Fi.h"
|
||||
#include "sysres_Da.h"
|
||||
#include "sysres_Cz.h"
|
||||
|
||||
|
||||
static const struct resource * const * SYSRES_Resources[] =
|
||||
|
@ -26,7 +27,8 @@ static const struct resource * const * SYSRES_Resources[] =
|
|||
sysres_No_Table, /* LANG_No */
|
||||
sysres_Fr_Table, /* LANG_Fr */
|
||||
sysres_Fi_Table, /* LANG_Fi */
|
||||
sysres_Da_Table /* LANG_Da */
|
||||
sysres_Da_Table, /* LANG_Da */
|
||||
sysres_Cz_Table /* LANG_Cz */
|
||||
};
|
||||
|
||||
|
||||
|
|
200
resources/sysres_Cz.rc
Normal file
200
resources/sysres_Cz.rc
Normal file
|
@ -0,0 +1,200 @@
|
|||
SYSMENU MENU LOADONCALL MOVEABLE DISCARDABLE
|
||||
{
|
||||
MENUITEM "&Obnov", 61728
|
||||
MENUITEM "Pøe&suò", 61456
|
||||
MENUITEM "&Zmìò velikost", 61440
|
||||
MENUITEM "Mi&nimalizuj", 61472
|
||||
MENUITEM "Ma&ximalizuj", 61488
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Zavøi\tAlt-F4", 61536
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&Pøepni do jiné úlohy...\tCtrl-Esc", 61744
|
||||
MENUITEM SEPARATOR
|
||||
MENUITEM "&O programu WINE", 61761
|
||||
}
|
||||
|
||||
MSGBOX DIALOG 100, 80, 216, 168
|
||||
STYLE DS_SYSMODAL | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
BEGIN
|
||||
ICON "", 1088, 8, 20, 16, 16, WS_CHILD | WS_VISIBLE
|
||||
LTEXT "", 100, 32, 4, 176, 48, WS_CHILD | WS_VISIBLE | WS_GROUP
|
||||
PUSHBUTTON "&Ok", 1, 16, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Storno", 2, 64, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Pøerušit", 3, 112, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Zkusit znovu", 4, 160, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Ignorovat", 5, 208, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Ano", 6, 256, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
PUSHBUTTON "&Ne", 7, 304, 56, 40, 14, WS_CHILD | WS_VISIBLE | WS_TABSTOP
|
||||
END
|
||||
|
||||
SHELL_ABOUT_MSGBOX DIALOG LOADONCALL MOVEABLE DISCARDABLE 50, 44, 223, 200
|
||||
STYLE DS_LOCALEDIT | DS_MODALFRAME | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "O aplikaci %s"
|
||||
FONT 10, "System"
|
||||
{
|
||||
DEFPUSHBUTTON "OK", 1, 91, 180, 40, 14
|
||||
CONTROL "", -1, "STATIC", SS_BLACKFRAME | WS_CHILD | WS_VISIBLE | WS_DISABLED, 4, 35, 215, 140
|
||||
LTEXT "Text", 100, 11, 40, 200, 130, SS_NOPREFIX | WS_GROUP
|
||||
ICON "", 1088, 195, 10, 18, 20
|
||||
}
|
||||
|
||||
|
||||
OPEN_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Otevøení souboru"
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
LTEXT "&jméno souboru:", 1090, 6, 6, 76, 9
|
||||
EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP
|
||||
LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP
|
||||
LTEXT "&Adresáøe:", -1, 110, 6, 92, 9
|
||||
LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP
|
||||
LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP
|
||||
LTEXT "&Typ zobrazených souborù:", 1089, 6, 104, 90, 9
|
||||
COMBOBOX 1136, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "&Diskové jednotky:", 1091, 110, 104, 92, 9
|
||||
COMBOBOX 1137, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
DEFPUSHBUTTON "Otevøít", 1, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Storno", 2, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Nápovìda", 1038, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
CHECKBOX "&Pouze pro ètení", 1040, 208, 68, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
}
|
||||
|
||||
|
||||
SAVE_FILE DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 275, 134
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Ulož pod jménem..."
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
LTEXT "&Jméno souboru:", 1090, 6, 6, 76, 9
|
||||
EDITTEXT 1152, 6, 16, 90, 12, ES_AUTOHSCROLL | ES_OEMCONVERT | WS_BORDER | WS_TABSTOP
|
||||
LISTBOX 1120, 6, 32, 90, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP
|
||||
LTEXT "&Adresáøe:", -1, 110, 6, 92, 9
|
||||
LTEXT "", 1088, 110, 18, 92, 9, SS_NOPREFIX | WS_GROUP
|
||||
LISTBOX 1121, 110, 32, 92, 68, LBS_STANDARD | LBS_OWNERDRAWFIXED | LBS_HASSTRINGS | LBS_DISABLENOSCROLL | WS_TABSTOP
|
||||
LTEXT "&Typ zobrazených souborù:", 1089, 6, 104, 90, 9
|
||||
COMBOBOX 1136, 6, 114, 90, 36, CBS_DROPDOWNLIST | CBS_AUTOHSCROLL | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
LTEXT "&Diskové jednotky:", 1091, 110, 104, 92, 9
|
||||
COMBOBOX 1137, 110, 114, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
DEFPUSHBUTTON "Ulož pod jménem", 1, 208, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Storno", 2, 208, 24, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Nápovìda", 1038, 208, 46, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
CHECKBOX "&Pouze pro ètení", 1040, 208, 68, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
}
|
||||
|
||||
|
||||
PRINT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Tisk"
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
LTEXT "Tiskárna:", 1088, 6, 6, 40, 9
|
||||
LTEXT "", 1089, 60, 6, 150, 9
|
||||
GROUPBOX "Rozsah tisku", 1072, 6, 30, 160, 65, BS_GROUPBOX
|
||||
RADIOBUTTON "Vytiskni vš&e", 1056, 16, 45, 60, 12
|
||||
RADIOBUTTON "Vytiskni &výbìr", 1057, 16, 60, 60, 12
|
||||
RADIOBUTTON "Vytiskni &zadané stránky", 1058, 16, 75, 60, 12
|
||||
DEFPUSHBUTTON "Tiskni", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Storno", 2, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Nastavit...", 1024, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
LTEXT "&Od:", 1090, 60, 80, 30, 9
|
||||
LTEXT "&Do:", 1091, 120, 80, 30, 9
|
||||
LTEXT "Kvalita &tisku:", 1092, 6, 100, 76, 9
|
||||
COMBOBOX 1136, 80, 100, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
CHECKBOX "Tisk do so&uboru", 1040, 20, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
CHECKBOX "Kondenzované", 1041, 160, 100, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
}
|
||||
|
||||
|
||||
PRINT_SETUP DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Nastavení zpùsobu tisku"
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
GROUPBOX "Tiskárna", 1072, 6, 10, 180, 65, BS_GROUPBOX
|
||||
RADIOBUTTON "&Pøedvolená tiskárna", 1056, 16, 20, 80, 12
|
||||
LTEXT "[none]", 1088, 35, 35, 120, 9
|
||||
RADIOBUTTON "Specifická &tiskárna", 1057, 16, 50, 80, 12
|
||||
COMBOBOX 1136, 35, 65, 149, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
DEFPUSHBUTTON "Ok", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Storno", 2, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Další volby...", 1024, 206, 46, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
GROUPBOX "Orientace", 1073, 6, 85, 100, 50, BS_GROUPBOX
|
||||
RADIOBUTTON "Na &výšku", 1058, 50, 100, 40, 12
|
||||
RADIOBUTTON "Na šíø&ku", 1059, 50, 115, 40, 12
|
||||
ICON "LANDSCAP", 1097, 10, 95, 32, 32
|
||||
ICON "PORTRAIT", 1098, 10, 95, 32, 32
|
||||
GROUPBOX "Papír", 1074, 120, 85, 180, 50, BS_GROUPBOX
|
||||
LTEXT "&Formát", 1089, 130, 95, 30, 9
|
||||
LTEXT "&Odkud", 1090, 130, 110, 30, 9
|
||||
COMBOBOX 1137, 155, 95, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
COMBOBOX 1138, 155, 110, 92, 68, CBS_DROPDOWNLIST | CBS_OWNERDRAWFIXED | CBS_AUTOHSCROLL | CBS_SORT | CBS_HASSTRINGS | WS_BORDER | WS_VSCROLL | WS_TABSTOP
|
||||
}
|
||||
|
||||
|
||||
CHOOSE_FONT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 134
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Písmo"
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
LTEXT "Písmo:", 1088, 6, 6, 40, 9
|
||||
LTEXT "", 1089, 60, 6, 150, 9
|
||||
DEFPUSHBUTTON "Ok", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Storno", 2, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
}
|
||||
|
||||
|
||||
CHOOSE_COLOR DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 200
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Barvy"
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
LTEXT "&Základní barvy:", 1088, 6, 6, 40, 9
|
||||
LTEXT "&Barvy na zakázku:", 1089, 6, 126, 40, 9
|
||||
LTEXT "Barva|Spoj&itá", 1090, 100, 146, 40, 9
|
||||
LTEXT "&Odstín:", 1091, 150, 126, 40, 9
|
||||
LTEXT "&Sytost:", 1092, 150, 146, 40, 9
|
||||
LTEXT "&Jas:", 1093, 150, 166, 40, 9
|
||||
LTEXT "Èe&rvená:", 1094, 150, 126, 40, 9
|
||||
LTEXT "&Zelená:", 1095, 150, 146, 40, 9
|
||||
LTEXT "&Modrá:", 1096, 150, 166, 40, 9
|
||||
DEFPUSHBUTTON "Ok", 1, 6, 182, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Pøidat barvu", 1024, 120, 182, 100, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "&Vyøadit barvu", 1025, 6, 164, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Storno", 2, 76, 182, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
}
|
||||
|
||||
|
||||
FIND_TEXT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 84
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Hledání"
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
LTEXT "&Vyhledat:", 1088, 6, 6, 40, 9
|
||||
LTEXT "", 1089, 60, 6, 150, 9
|
||||
CHECKBOX "Pouze &celá slova", 1040, 20, 30, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
CHECKBOX "&Rozlišovat malá a velká písmena", 1041, 20, 50, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
GROUPBOX "Smìr", 1072, 90, 40, 80, 40, BS_GROUPBOX
|
||||
RADIOBUTTON "&Nahoru", 1056, 100, 50, 50, 12
|
||||
RADIOBUTTON "&Dolu", 1057, 150, 50, 50, 12
|
||||
DEFPUSHBUTTON "Vyhledat d&alší", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Zavøít", 2, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
}
|
||||
|
||||
|
||||
REPLACE_TEXT DIALOG LOADONCALL MOVEABLE DISCARDABLE 36, 24, 264, 114
|
||||
STYLE DS_MODALFRAME | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "Zámìna"
|
||||
FONT 8, "Helv"
|
||||
{
|
||||
LTEXT "&Vyhledat:", 1088, 6, 6, 40, 9
|
||||
LTEXT "", 1089, 60, 6, 150, 9
|
||||
LTEXT "&Zamìnit za:", 1090, 6, 26, 40, 9
|
||||
LTEXT "", 1091, 60, 26, 150, 9
|
||||
CHECKBOX "Pouze &celá slova", 1040, 20, 40, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
CHECKBOX "&Rozlišovat malá a velká písmena", 1041, 20, 60, 50, 12, BS_AUTOCHECKBOX | WS_GROUP | WS_TABSTOP
|
||||
DEFPUSHBUTTON "Vyhledat d&alší", 1, 206, 6, 56, 14, BS_DEFPUSHBUTTON | WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Za&mìnit", 1024, 206, 24, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Zamìnit ve vý&bìru", 1025, 206, 44, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
PUSHBUTTON "Zavøít", 2, 206, 64, 56, 14, WS_GROUP | WS_TABSTOP
|
||||
}
|
|
@ -915,12 +915,12 @@ static void BuildSpec32Files( char *specname )
|
|||
}
|
||||
printf("};\n\n");
|
||||
|
||||
printf( "static WIN32_builtin dll={\"%s\",functions,%d,0};\n",
|
||||
UpperDLLName, Limit+1);
|
||||
printf( "static WIN32_builtin dll={\"%s\",functions,%d,%d,0};\n",
|
||||
UpperDLLName, Limit+1, Base);
|
||||
|
||||
printf( "void %s_Init(void)\n{\n",UpperDLLName);
|
||||
printf( "\tdll.next=WIN32_builtin_list;\n");
|
||||
printf( "\tWIN32_builtin_list=&dll;\n}");
|
||||
printf( "\tWIN32_builtin_list=&dll;\n\tRELAY32_MakeFakeModule(&dll);\n}");
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
#!/usr/bin/perl
|
||||
open(APIW,"./apiw.index");
|
||||
open(APIW,"./apiw.index") or die "Can't find ./apiw.index";
|
||||
while(<APIW>)
|
||||
{
|
||||
($func,$link)=split /:/;
|
||||
|
@ -9,13 +9,13 @@ while(<APIW>)
|
|||
}
|
||||
close(APIW);
|
||||
|
||||
open(WINDOWS,"../include/windows.h");
|
||||
open(WINDOWS,"../include/windows.h") or die "Can't find ../include/windows.h";
|
||||
while(<WINDOWS>) { add_func($_) if /AccessResource/../wvsprintf/; }
|
||||
close(WINDOWS);
|
||||
open(TOOLHELP,"../include/toolhelp.h");
|
||||
open(TOOLHELP,"../include/toolhelp.h") or die "Can't find ../include/toolhelp.h";
|
||||
while(<TOOLHELP>) { add_func($_) if /GlobalInfo/../MemoryWrite/; }
|
||||
close(TOOLHELP);
|
||||
open(COMMDLG,"../include/commdlg.h");
|
||||
open(COMMDLG,"../include/commdlg.h") or die "Can't find ../include/commdlg.h";
|
||||
while(<COMMDLG>) { add_func($_) if /ChooseColor/../ReplaceText/; }
|
||||
close(COMMDLG);
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ C_SRCS = \
|
|||
environment.c \
|
||||
error.c \
|
||||
file.c \
|
||||
gdi32.c \
|
||||
heap.c \
|
||||
init.c \
|
||||
memory.c \
|
||||
|
|
74
win32/gdi32.c
Normal file
74
win32/gdi32.c
Normal file
|
@ -0,0 +1,74 @@
|
|||
|
||||
/*
|
||||
* Win32 GDI functions
|
||||
*
|
||||
* Copyright 1996 Thomas Sandford t.d.g.sandford@prds-grn.demon.co.uk
|
||||
*/
|
||||
|
||||
#include <windows.h>
|
||||
#include <gdi.h>
|
||||
#include <pen.h>
|
||||
#include <brush.h>
|
||||
#include <bitmap.h>
|
||||
#include <font.h>
|
||||
#include <palette.h>
|
||||
#include <debug.h>
|
||||
|
||||
int WIN32_GetObject( HANDLE handle, int count, LPVOID buffer )
|
||||
|
||||
/* largely a copy of GetObject, but with size mangling capabilities to
|
||||
convert between win16 and win32 objects. Yeuch! */
|
||||
|
||||
{
|
||||
void *temp = alloca(count);
|
||||
GDIOBJHDR * ptr = NULL;
|
||||
|
||||
dprintf_win32(stddeb, "WIN32_GetObject: %d %d %p\n", handle, count, buffer);
|
||||
|
||||
if ((!count) || (temp == NULL))
|
||||
return 0;
|
||||
|
||||
ptr = GDI_GetObjPtr(handle, MAGIC_DONTCARE);
|
||||
if (!ptr) return 0;
|
||||
|
||||
/* FIXME: only bitmaps fixed so far */
|
||||
|
||||
switch(ptr->wMagic)
|
||||
{
|
||||
case PEN_MAGIC:
|
||||
return PEN_GetObject( (PENOBJ *)ptr, count, buffer );
|
||||
case BRUSH_MAGIC:
|
||||
return BRUSH_GetObject( (BRUSHOBJ *)ptr, count, buffer );
|
||||
case BITMAP_MAGIC: {
|
||||
BITMAP *pbm = (BITMAP *)temp;
|
||||
int *pdest = (int *)buffer;
|
||||
|
||||
if (buffer == NULL)
|
||||
return 28;
|
||||
|
||||
BITMAP_GetObject( (BITMAPOBJ *)ptr, count, temp );
|
||||
if (count > 3)
|
||||
pdest[0] = pbm->bmType;
|
||||
if (count > 7)
|
||||
pdest[1] = pbm->bmWidth;
|
||||
if (count > 11)
|
||||
pdest[2] = pbm->bmHeight;
|
||||
if (count > 15)
|
||||
pdest[3] = pbm->bmWidthBytes;
|
||||
if (count > 19)
|
||||
pdest[4] = pbm->bmPlanes;
|
||||
if (count > 23)
|
||||
pdest[5] = pbm->bmBitsPixel;
|
||||
if (count > 27)
|
||||
pdest[6] = pbm->bmBits;
|
||||
|
||||
return (count > 28) ? 28 : count - (count % 4);
|
||||
}
|
||||
case FONT_MAGIC:
|
||||
return FONT_GetObject( (FONTOBJ *)ptr, count, buffer );
|
||||
case PALETTE_MAGIC:
|
||||
return PALETTE_GetObject( (PALETTEOBJ *)ptr, count, buffer );
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
157
win32/heap.c
157
win32/heap.c
|
@ -2,6 +2,7 @@
|
|||
* Win32 kernel functions
|
||||
*
|
||||
* Copyright 1995 Thomas Sandford <t.d.g.sandford@prds-grn.demon.co.uk>
|
||||
* Copyright 1995 Martin von Löwis
|
||||
*/
|
||||
|
||||
#include <stdio.h>
|
||||
|
@ -13,6 +14,7 @@
|
|||
#include "windows.h"
|
||||
#include "winerror.h"
|
||||
#include "kernel32.h"
|
||||
#include "handle32.h"
|
||||
#include "winbase.h"
|
||||
#include "stddebug.h"
|
||||
#include "debug.h"
|
||||
|
@ -21,12 +23,11 @@
|
|||
|
||||
/* FIXME: these functions do *not* implement the win32 API properly. They
|
||||
are here merely as "get you going" aids */
|
||||
|
||||
/***********************************************************************
|
||||
* HeapAlloc (KERNEL32.222)
|
||||
*
|
||||
*/
|
||||
LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD dwBytes)
|
||||
LPVOID SIMPLE_HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD dwBytes)
|
||||
|
||||
{
|
||||
void *result;
|
||||
|
@ -36,3 +37,155 @@ LPVOID HeapAlloc(HANDLE hHeap, DWORD dwFlags, DWORD dwBytes)
|
|||
memset(result, 0, dwBytes);
|
||||
return result;
|
||||
}
|
||||
|
||||
HANDLE32 HeapCreate(DWORD flOptions, DWORD dwInitialSize, DWORD dwMaximumSize)
|
||||
{
|
||||
LPVOID start;
|
||||
HEAP_OBJECT *ret;
|
||||
HEAPITEM_OBJECT *item;
|
||||
if(dwInitialSize<4096)
|
||||
return 0;
|
||||
start = VirtualAlloc(0,dwMaximumSize, MEM_RESERVE, PAGE_READWRITE);
|
||||
if(!start)
|
||||
return 0;
|
||||
if(!VirtualAlloc(start,dwInitialSize, MEM_COMMIT, PAGE_READWRITE))
|
||||
{
|
||||
VirtualFree(start,dwMaximumSize,MEM_RELEASE);
|
||||
return 0;
|
||||
}
|
||||
ret=CreateKernelObject(sizeof(HEAP_OBJECT));
|
||||
ret->common.magic=KERNEL_OBJECT_HEAP;
|
||||
ret->start=start;
|
||||
ret->size=dwInitialSize;
|
||||
ret->maximum=dwMaximumSize;
|
||||
ret->flags=flOptions;
|
||||
item=start;
|
||||
item->common.magic=KERNEL_OBJECT_HEAPITEM;
|
||||
item->next=item->prev=0;
|
||||
item->heap=ret;
|
||||
|
||||
ret->first=ret->last=item;
|
||||
|
||||
return (HANDLE32)ret;
|
||||
}
|
||||
|
||||
BOOL HeapDestroy(HEAP_OBJECT *h)
|
||||
{
|
||||
/* FIXME: last error */
|
||||
if(h->common.magic!=KERNEL_OBJECT_HEAP)
|
||||
return 0;
|
||||
h->common.magic=0;
|
||||
VirtualFree(h->start,h->size,MEM_RELEASE);
|
||||
ReleaseKernelObject(h);
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
static BOOL HEAP_GrowHeap(HEAP_OBJECT *h,DWORD size)
|
||||
{
|
||||
HEAPITEM_OBJECT *last;
|
||||
/* FIXME: last error */
|
||||
if(size > h->maximum-h->size)
|
||||
return 0;
|
||||
if(!VirtualAlloc(h->start+h->size,size,MEM_COMMIT,PAGE_READWRITE))
|
||||
return 0;
|
||||
/* FIXME: consolidate with previous item */
|
||||
last=h->start+size;
|
||||
h->size+=size;
|
||||
h->last->next=last;
|
||||
last->prev=h->last;
|
||||
last->next=0;
|
||||
h->last=last;
|
||||
last->common.magic=KERNEL_OBJECT_HEAPITEM;
|
||||
last->heap=h;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
||||
LPVOID HeapAlloc(HEAP_OBJECT *h,DWORD dwFlags,DWORD dwBytes)
|
||||
{
|
||||
HEAPITEM_OBJECT *it,*next,*prev;
|
||||
/* FIXME: last error */
|
||||
if(!h)
|
||||
return SIMPLE_HeapAlloc(h,dwFlags,dwBytes);
|
||||
if(h->common.magic!=KERNEL_OBJECT_HEAP)
|
||||
return 0;
|
||||
/* align to DWORD */
|
||||
dwBytes = (dwBytes + 3) & ~3;
|
||||
for(it=h->first;it;it=it->next)
|
||||
{
|
||||
if(it->size>dwBytes+sizeof(HEAPITEM_OBJECT))
|
||||
break;
|
||||
}
|
||||
if(!it)
|
||||
{
|
||||
if(!HEAP_GrowHeap(h,dwBytes))
|
||||
return 0;
|
||||
it=h->last;
|
||||
}
|
||||
next = it->next;
|
||||
prev = it->prev;
|
||||
if(it->size > dwBytes+2*sizeof(HEAPITEM_OBJECT))
|
||||
{ /* split item */
|
||||
HEAPITEM_OBJECT *next=(HEAPITEM_OBJECT*)((char*)(it+1)+dwBytes);
|
||||
next->common.magic=KERNEL_OBJECT_HEAPITEM;
|
||||
next->size=it->size-sizeof(HEAPITEM_OBJECT)-dwBytes;
|
||||
next->next = it->next;
|
||||
}
|
||||
if(next)
|
||||
next->prev=prev;
|
||||
else
|
||||
h->last=prev;
|
||||
if(prev)
|
||||
prev->next=next;
|
||||
else
|
||||
h->first=next;
|
||||
/* Allocated item is denoted by self-referencing */
|
||||
it->next=it->prev=it;
|
||||
return (LPVOID)(it+1);
|
||||
}
|
||||
|
||||
BOOL HeapFree(HEAP_OBJECT *h,DWORD dwFlags,LPVOID lpMem)
|
||||
{
|
||||
HEAPITEM_OBJECT *item,*prev,*next;
|
||||
item = (HEAPITEM_OBJECT*)lpMem - 1;
|
||||
if(item->common.magic != KERNEL_OBJECT_HEAP)
|
||||
return 0;
|
||||
for(next=item;(caddr_t)next<(caddr_t)h->start+h->size;
|
||||
next=(HEAPITEM_OBJECT*)((char*)next+next->size))
|
||||
if(next!=next->next)
|
||||
break;
|
||||
if((caddr_t)next>=(caddr_t)h->start+h->size)
|
||||
next=0;
|
||||
if(next)
|
||||
prev=next->prev;
|
||||
else
|
||||
prev=h->last;
|
||||
/* consolidate with previous */
|
||||
if(prev && (char*)prev+prev->size==(char*)item)
|
||||
{
|
||||
prev->size+=item->size;
|
||||
item=prev;
|
||||
prev=item->prev;
|
||||
}
|
||||
/* consolidate with next */
|
||||
if(next && (char*)item+item->size==(char*)next)
|
||||
{
|
||||
item->size+=next->size;
|
||||
next=next->next;
|
||||
}
|
||||
if(prev)
|
||||
{
|
||||
item->prev=prev;
|
||||
prev->next=item;
|
||||
} else
|
||||
h->first=item;
|
||||
if(next)
|
||||
{
|
||||
item->next=next;
|
||||
next->prev=item;
|
||||
}else
|
||||
h->last=item;
|
||||
return 1;
|
||||
}
|
||||
|
||||
|
|
129
win32/memory.c
129
win32/memory.c
|
@ -10,10 +10,13 @@
|
|||
#include <sys/time.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/mman.h>
|
||||
#include <string.h>
|
||||
#include <stdlib.h>
|
||||
#include "windows.h"
|
||||
#include "winerror.h"
|
||||
#include "kernel32.h"
|
||||
#include "winbase.h"
|
||||
#include "handle32.h"
|
||||
#include "stddebug.h"
|
||||
#include "debug.h"
|
||||
|
||||
|
@ -33,6 +36,131 @@ virtual_mem_t *mem = 0;
|
|||
int mem_count = 0;
|
||||
int mem_used = 0;
|
||||
|
||||
/*******************************************************************
|
||||
* VRANGE
|
||||
* A VRANGE denotes a contiguous part of the address space. It is used
|
||||
* for house keeping, and will be obtained by higher-level memory allocation
|
||||
* functions (VirtualAlloc, MapViewOfFile)
|
||||
* There can be at most one VRANGE object covering any address at any time.
|
||||
* Currently, all VRANGE objects are stored in a sorted list. Wine does not
|
||||
* attempt to give a complete list of in-use address ranges, only those
|
||||
* allocated via Win32.
|
||||
* An exception is IsVrangeFree, which should test the OS specific
|
||||
* mappings, too. As a default, an range not known to be allocated is
|
||||
* considered free.
|
||||
*******************************************************************/
|
||||
|
||||
VRANGE_OBJECT *MEMORY_ranges=0;
|
||||
|
||||
VRANGE_OBJECT *MEMORY_FindVrange(DWORD start)
|
||||
{
|
||||
VRANGE_OBJECT *range;
|
||||
for(range=MEMORY_ranges;range && range->start<start;range=range->next)
|
||||
{
|
||||
if(range->start<start && start<range->start+range->size)
|
||||
return range;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int MEMORY_IsVrangeFree(DWORD start,DWORD size)
|
||||
{
|
||||
DWORD end;
|
||||
VRANGE_OBJECT *range;
|
||||
if(!size)
|
||||
return 1;
|
||||
/* First, check our lists*/
|
||||
end=start+size;
|
||||
for(range=MEMORY_ranges;range && range->start<start;range=range->next)
|
||||
{
|
||||
if((range->start<start && start<range->start+range->size) ||
|
||||
(range->start<end && end<range->start+range->size))
|
||||
return 0;
|
||||
}
|
||||
/* Now, check the maps that are not under our control */
|
||||
#ifdef linux
|
||||
{
|
||||
FILE *f=fopen("/proc/self/maps","r");
|
||||
char line[80];
|
||||
int found=0;
|
||||
while(1)
|
||||
{
|
||||
char *it;
|
||||
int lower,upper;
|
||||
if(!fgets(line,sizeof(line),f))
|
||||
break;
|
||||
it=line;
|
||||
lower=strtoul(it,&it,16);
|
||||
if(*it++!='-')
|
||||
fprintf(stderr,"Format of /proc/self/maps changed\n");
|
||||
upper=strtoul(it,&it,16);
|
||||
if((lower<start && start<upper) || (lower<start+size && start+size<upper))
|
||||
{
|
||||
found=1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
fclose(f);
|
||||
return !found;
|
||||
}
|
||||
#else
|
||||
{
|
||||
static int warned=0;
|
||||
if(!warned)
|
||||
{
|
||||
fprintf("Don't know how to perform MEMORY_IsVrangeFree on "
|
||||
"this system.\n Please fix\n");
|
||||
warned=0;
|
||||
}
|
||||
return 1;
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
/* FIXME: might need to consolidate ranges */
|
||||
void MEMORY_InsertVrange(VRANGE_OBJECT *r)
|
||||
{
|
||||
VRANGE_OBJECT *it,*last;
|
||||
if(!MEMORY_ranges || r->start<MEMORY_ranges->start)
|
||||
{
|
||||
r->next=MEMORY_ranges;
|
||||
MEMORY_ranges=r;
|
||||
}
|
||||
for(it=MEMORY_ranges,last=0;it && it->start<r->start;it=it->next)
|
||||
last=it;
|
||||
r->next=last->next;
|
||||
last->next=r;
|
||||
}
|
||||
|
||||
|
||||
VRANGE_OBJECT *MEMORY_AllocVrange(int start,int size)
|
||||
{
|
||||
VRANGE_OBJECT *ret=CreateKernelObject(sizeof(VRANGE_OBJECT));
|
||||
ret->common.magic=KERNEL_OBJECT_VRANGE;
|
||||
MEMORY_InsertVrange(ret);
|
||||
return ret;
|
||||
}
|
||||
|
||||
void MEMORY_ReleaseVrange(VRANGE_OBJECT *r)
|
||||
{
|
||||
VRANGE_OBJECT *it;
|
||||
if(MEMORY_ranges==r)
|
||||
{
|
||||
MEMORY_ranges=r->next;
|
||||
ReleaseKernelObject(r);
|
||||
return;
|
||||
}
|
||||
for(it=MEMORY_ranges;it;it=it->next)
|
||||
if(it->next==r)break;
|
||||
if(!it)
|
||||
{
|
||||
fprintf(stderr,"VRANGE not found\n");
|
||||
return;
|
||||
}
|
||||
it->next=r->next;
|
||||
ReleaseKernelObject(r);
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* VirtualAlloc (KERNEL32.548)
|
||||
*/
|
||||
|
@ -167,3 +295,4 @@ int TranslateProtectionFlags(DWORD protection_flags)
|
|||
}
|
||||
return prot;
|
||||
}
|
||||
|
||||
|
|
|
@ -25,6 +25,10 @@ void PARAM32_POINT32to16(const POINT32* p32,POINT* p16)
|
|||
BOOL WIN32_MoveToEx(HDC hdc,int x,int y,POINT32* p32)
|
||||
{
|
||||
POINT p;
|
||||
PARAM32_POINT32to16(p32,&p);
|
||||
return MoveToEx(hdc,x,y,&p);
|
||||
if (p32 == NULL)
|
||||
return MoveToEx(hdc,x,y,(POINT *)NULL);
|
||||
else {
|
||||
PARAM32_POINT32to16(p32,&p);
|
||||
return MoveToEx(hdc,x,y,&p);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -29,11 +29,15 @@
|
|||
|
||||
int language = 0x0409;
|
||||
|
||||
#if 0
|
||||
#define PrintId(name) \
|
||||
if (HIWORD((DWORD)name)) \
|
||||
dprintf_resource( stddeb, "'%s'", name); \
|
||||
else \
|
||||
dprintf_resource( stddeb, "#%04x", LOWORD(name));
|
||||
#else
|
||||
#define PrintId(name)
|
||||
#endif
|
||||
|
||||
/**********************************************************************
|
||||
* GetResDirEntry
|
||||
|
@ -85,12 +89,13 @@ PIMAGE_RESOURCE_DIRECTORY GetResDirEntry(PIMAGE_RESOURCE_DIRECTORY resdirptr,
|
|||
/**********************************************************************
|
||||
* FindResource (KERNEL.60)
|
||||
*/
|
||||
HANDLE32 FindResource32( HINSTANCE hModule, LPCTSTR name, LPCTSTR type )
|
||||
HANDLE32 FindResource32( HINSTANCE hModule, LPCWSTR name, LPCWSTR type )
|
||||
{
|
||||
#ifndef WINELIB
|
||||
struct w_files *wptr = wine_files;
|
||||
PIMAGE_RESOURCE_DIRECTORY resdirptr;
|
||||
DWORD root;
|
||||
HANDLE32 result;
|
||||
|
||||
#if 0
|
||||
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
|
||||
|
@ -110,7 +115,10 @@ HANDLE32 FindResource32( HINSTANCE hModule, LPCTSTR name, LPCTSTR type )
|
|||
return 0;
|
||||
if ((resdirptr = GetResDirEntry(resdirptr, name, root)) == NULL)
|
||||
return 0;
|
||||
return (HANDLE32) GetResDirEntry(resdirptr, (LPCSTR)language, root);
|
||||
result = GetResDirEntry(resdirptr, (LPCWSTR)language, root);
|
||||
/* Try LANG_NEUTRAL, too */
|
||||
if(!result)
|
||||
return GetResDirEntry(resdirptr, (LPCWSTR)0, root);
|
||||
#else
|
||||
return LIBRES_FindResource( hModule, name, type );
|
||||
#endif
|
||||
|
@ -164,26 +172,12 @@ BOOL FreeResource32( HANDLE32 handle )
|
|||
*/
|
||||
INT AccessResource32( HINSTANCE hModule, HRSRC hRsrc )
|
||||
{
|
||||
WORD *pModule;
|
||||
|
||||
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
|
||||
dprintf_resource(stddeb, "AccessResource: module="NPFMT" res="NPFMT"\n",
|
||||
hModule, hRsrc );
|
||||
if (!hRsrc) return 0;
|
||||
if (!(pModule = (WORD *)GlobalLock( hModule ))) return 0;
|
||||
#ifndef WINELIB
|
||||
switch(*pModule)
|
||||
{
|
||||
case NE_SIGNATURE:
|
||||
return NE_AccessResource( hModule, hRsrc );
|
||||
case PE_SIGNATURE:
|
||||
return 0;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
return LIBRES_AccessResource( hModule, hRsrc );
|
||||
#endif
|
||||
fprintf(stderr,"AccessResource32: not implemented\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
|
@ -192,25 +186,11 @@ INT AccessResource32( HINSTANCE hModule, HRSRC hRsrc )
|
|||
*/
|
||||
DWORD SizeofResource32( HINSTANCE hModule, HRSRC hRsrc )
|
||||
{
|
||||
WORD *pModule;
|
||||
|
||||
hModule = GetExePtr( hModule ); /* In case we were passed an hInstance */
|
||||
dprintf_resource(stddeb, "SizeofResource: module="NPFMT" res="NPFMT"\n",
|
||||
hModule, hRsrc );
|
||||
if (!(pModule = (WORD *)GlobalLock( hModule ))) return 0;
|
||||
#ifndef WINELIB
|
||||
switch(*pModule)
|
||||
{
|
||||
case NE_SIGNATURE:
|
||||
return NE_SizeofResource( hModule, hRsrc );
|
||||
case PE_SIGNATURE:
|
||||
return 0;
|
||||
default:
|
||||
return 0;
|
||||
}
|
||||
#else
|
||||
return LIBRES_SizeofResource( hModule, hRsrc );
|
||||
#endif
|
||||
fprintf(stderr,"SizeofResource32: not implemented\n");
|
||||
return 0;
|
||||
}
|
||||
|
||||
/**********************************************************************
|
||||
|
@ -218,6 +198,7 @@ DWORD SizeofResource32( HINSTANCE hModule, HRSRC hRsrc )
|
|||
*/
|
||||
HANDLE32 WIN32_LoadAcceleratorsW(HINSTANCE instance, LPCWSTR lpTableName)
|
||||
{
|
||||
#if 0
|
||||
HANDLE32 hAccel;
|
||||
HANDLE32 rsc_mem;
|
||||
HANDLE32 hRsrc;
|
||||
|
@ -232,7 +213,8 @@ HANDLE32 WIN32_LoadAcceleratorsW(HINSTANCE instance, LPCWSTR lpTableName)
|
|||
dprintf_accel( stddeb, "LoadAccelerators: "NPFMT" %04x\n",
|
||||
instance, LOWORD(lpTableName) );
|
||||
|
||||
if (!(hRsrc = FindResource32( instance, lpTableName, RT_ACCELERATOR )))
|
||||
if (!(hRsrc = FindResource32( instance, lpTableName,
|
||||
(LPCWSTR)RT_ACCELERATOR )))
|
||||
return 0;
|
||||
if (!(rsc_mem = LoadResource32( instance, hRsrc ))) return 0;
|
||||
|
||||
|
@ -258,6 +240,10 @@ HANDLE32 WIN32_LoadAcceleratorsW(HINSTANCE instance, LPCWSTR lpTableName)
|
|||
GlobalUnlock(hAccel);
|
||||
FreeResource( rsc_mem );
|
||||
return hAccel;
|
||||
#else
|
||||
fprintf(stderr,"LoadAcceleratorsW: not implemented\n");
|
||||
return 0;
|
||||
#endif
|
||||
}
|
||||
|
||||
HANDLE32 WIN32_LoadAcceleratorsA(HINSTANCE instance, LPCSTR lpTableName)
|
||||
|
@ -280,9 +266,10 @@ WIN32_LoadStringW(HINSTANCE instance, DWORD resource_id, LPWSTR buffer, int bufl
|
|||
int i;
|
||||
|
||||
dprintf_resource(stddeb, "LoadString: instance = "NPFMT", id = %04x, buffer = %08x, "
|
||||
"length = %d\n", instance, resource_id, (int) buffer, buflen);
|
||||
"length = %d\n", instance, (int)resource_id, (int) buffer, buflen);
|
||||
|
||||
hrsrc = FindResource32( instance, (resource_id>>4)+1, RT_STRING );
|
||||
hrsrc = FindResource32( instance, (LPCWSTR)((resource_id>>4)+1),
|
||||
(LPCWSTR)RT_STRING );
|
||||
if (!hrsrc) return 0;
|
||||
hmem = LoadResource32( instance, hrsrc );
|
||||
if (!hmem) return 0;
|
||||
|
@ -305,8 +292,10 @@ WIN32_LoadStringW(HINSTANCE instance, DWORD resource_id, LPWSTR buffer, int bufl
|
|||
buffer[0] = (WCHAR) 0;
|
||||
return 0;
|
||||
}
|
||||
#if 0
|
||||
fprintf(stderr,"LoadString // I dont know why , but caller give buflen=%d *p=%d !\n", buflen, *p);
|
||||
fprintf(stderr,"LoadString // and try to obtain string '%s'\n", p + 1);
|
||||
#endif
|
||||
}
|
||||
dprintf_resource(stddeb,"LoadString // '%s' copied !\n", buffer);
|
||||
return i;
|
||||
|
@ -341,7 +330,7 @@ HICON LoadIconA32(HINSTANCE hinst, LPCTSTR lpszIcon)
|
|||
/**********************************************************************
|
||||
* LoadBitmapW
|
||||
*/
|
||||
HBITMAP WIN32_LoadBitmapW( HANDLE instance, LPCTSTR name )
|
||||
HBITMAP WIN32_LoadBitmapW( HANDLE instance, LPCWSTR name )
|
||||
{
|
||||
HBITMAP hbitmap = 0;
|
||||
HDC hdc;
|
||||
|
@ -355,7 +344,8 @@ HBITMAP WIN32_LoadBitmapW( HANDLE instance, LPCTSTR name )
|
|||
return OBM_LoadBitmap( LOWORD((int)name) );
|
||||
}
|
||||
|
||||
if (!(hRsrc = FindResource32( instance, name, RT_BITMAP ))) return 0;
|
||||
if (!(hRsrc = FindResource32( instance, name,
|
||||
(LPWSTR)RT_BITMAP ))) return 0;
|
||||
if (!(handle = LoadResource32( instance, hRsrc ))) return 0;
|
||||
|
||||
info = (BITMAPINFO *)LockResource32( handle );
|
||||
|
@ -371,11 +361,11 @@ HBITMAP WIN32_LoadBitmapW( HANDLE instance, LPCTSTR name )
|
|||
/**********************************************************************
|
||||
* LoadBitmapA
|
||||
*/
|
||||
HBITMAP WIN32_LoadBitmapA( HANDLE instance, LPCTSTR name )
|
||||
HBITMAP WIN32_LoadBitmapA( HANDLE instance, LPCSTR name )
|
||||
{
|
||||
HBITMAP res;
|
||||
if(!HIWORD(name))
|
||||
res = WIN32_LoadBitmapW(instance,name);
|
||||
res = WIN32_LoadBitmapW(instance,(LPWSTR)name);
|
||||
else{
|
||||
LPWSTR uni=STRING32_DupAnsiToUni(name);
|
||||
res=WIN32_LoadBitmapW(instance,uni);
|
||||
|
@ -403,15 +393,15 @@ BYTE* WIN32_ParseMenu(HMENU hMenu,BYTE *it)
|
|||
if(flags & MF_POPUP)
|
||||
{
|
||||
wMenuID = CreatePopupMenu();
|
||||
len = STRING32_lstrlenW(it);
|
||||
utext = it;
|
||||
len = STRING32_lstrlenW((LPWSTR)it);
|
||||
utext = (WCHAR*)it;
|
||||
it += sizeof(WCHAR)*(len+1);
|
||||
it = WIN32_ParseMenu(wMenuID,it);
|
||||
} else {
|
||||
wMenuID=*(WORD*)it;
|
||||
it+=sizeof(WORD);
|
||||
utext = it;
|
||||
len = STRING32_lstrlenW(it);
|
||||
utext = (LPWSTR)it;
|
||||
len = STRING32_lstrlenW((LPWSTR)it);
|
||||
it += sizeof(WCHAR)*(len+1);
|
||||
if(!wMenuID && !*utext)
|
||||
flags |= MF_SEPARATOR;
|
||||
|
@ -444,7 +434,7 @@ HMENU WIN32_LoadMenuIndirectW(void *menu)
|
|||
HMENU WIN32_LoadMenuW(HANDLE instance, LPCWSTR name)
|
||||
{
|
||||
HANDLE32 hrsrc;
|
||||
hrsrc=FindResource32(instance,name,RT_MENU);
|
||||
hrsrc=FindResource32(instance,name,(LPWSTR)RT_MENU);
|
||||
if(!hrsrc)return 0;
|
||||
return WIN32_LoadMenuIndirectW(LoadResource32(instance, hrsrc));
|
||||
}
|
||||
|
@ -465,7 +455,7 @@ HMENU WIN32_LoadMenuA(HANDLE instance,LPCSTR name)
|
|||
{
|
||||
HMENU res;
|
||||
if(!HIWORD(name))
|
||||
res = WIN32_LoadMenuW(instance,name);
|
||||
res = WIN32_LoadMenuW(instance,(LPWSTR)name);
|
||||
else{
|
||||
LPWSTR uni=STRING32_DupAnsiToUni(name);
|
||||
res=WIN32_LoadMenuW(instance,uni);
|
||||
|
|
|
@ -45,14 +45,14 @@ void STRING32_AnsiToUni(LPWSTR dest,LPCSTR src)
|
|||
*dest = *src;
|
||||
}
|
||||
|
||||
LPSTR STRING32_DupUniToAnsi(LPWSTR src)
|
||||
LPSTR STRING32_DupUniToAnsi(LPCWSTR src)
|
||||
{
|
||||
LPSTR dest=xmalloc(STRING32_UniLen(src)+1);
|
||||
STRING32_UniToAnsi(dest,src);
|
||||
return dest;
|
||||
}
|
||||
|
||||
LPWSTR STRING32_DupAnsiToUni(LPSTR src)
|
||||
LPWSTR STRING32_DupAnsiToUni(LPCSTR src)
|
||||
{
|
||||
LPWSTR dest=xmalloc(2*strlen(src)+2);
|
||||
STRING32_AnsiToUni(dest,src);
|
||||
|
@ -75,7 +75,7 @@ WCHAR STRING32_tolowerW(WCHAR c)
|
|||
return tolower(c);
|
||||
}
|
||||
|
||||
LPWSTR STRING32_lstrcmpniW(LPCWSTR a,LPCWSTR b,DWORD len)
|
||||
int STRING32_lstrcmpniW(LPCWSTR a,LPCWSTR b,DWORD len)
|
||||
{
|
||||
while(len--)
|
||||
{
|
||||
|
|
365
win32/user32.c
365
win32/user32.c
|
@ -8,13 +8,21 @@
|
|||
stubs. 'Real' implementations go into context specific files */
|
||||
|
||||
#include <unistd.h>
|
||||
#include <stdio.h>
|
||||
#include "windows.h"
|
||||
#include "winerror.h"
|
||||
#include "relay32.h"
|
||||
#include "alias.h"
|
||||
#include "stackframe.h"
|
||||
#include "xmalloc.h"
|
||||
#include "handle32.h"
|
||||
#include "struct32.h"
|
||||
#include "resource32.h"
|
||||
#include "string32.h"
|
||||
#include "dialog.h"
|
||||
#include "win.h"
|
||||
#include "debug.h"
|
||||
#include "stddebug.h"
|
||||
|
||||
/* Structure copy functions */
|
||||
static void MSG16to32(MSG *msg16,struct WIN32_MSG *msg32)
|
||||
|
@ -182,47 +190,77 @@ DWORD USER32_CreateWindowExA(long flags,char* class,char *title,
|
|||
DWORD instance,DWORD param)
|
||||
{
|
||||
DWORD retval;
|
||||
HANDLE classh, titleh;
|
||||
SEGPTR classsegp, titlesegp;
|
||||
HANDLE classh=0, titleh=0;
|
||||
SEGPTR classsegp=0, titlesegp=0;
|
||||
char *classbuf, *titlebuf;
|
||||
int usec,uset;
|
||||
|
||||
/*Have to translate CW_USEDEFAULT */
|
||||
if(x==0x80000000)x=CW_USEDEFAULT;
|
||||
if(y==0x80000000)y=CW_USEDEFAULT;
|
||||
if(width==0x80000000)width=CW_USEDEFAULT;
|
||||
if(height==0x80000000)height=CW_USEDEFAULT;
|
||||
if(x==CW_USEDEFAULT32)x=CW_USEDEFAULT;
|
||||
if(y==CW_USEDEFAULT32)y=CW_USEDEFAULT;
|
||||
if(width==CW_USEDEFAULT32)width=CW_USEDEFAULT;
|
||||
if(height==CW_USEDEFAULT32)height=CW_USEDEFAULT;
|
||||
|
||||
/* FIXME: There has to be a better way of doing this - but neither
|
||||
malloc nor alloca will work */
|
||||
usec = HIWORD(class);
|
||||
uset = HIWORD(title);
|
||||
|
||||
classh = GlobalAlloc(0, strlen(class)+1);
|
||||
titleh = GlobalAlloc(0, strlen(title)+1);
|
||||
classsegp = WIN16_GlobalLock(classh);
|
||||
titlesegp = WIN16_GlobalLock(titleh);
|
||||
classbuf = PTR_SEG_TO_LIN(classsegp);
|
||||
titlebuf = PTR_SEG_TO_LIN(titlesegp);
|
||||
strcpy( classbuf, class );
|
||||
strcpy( titlebuf, title );
|
||||
if(usec){
|
||||
classh = GlobalAlloc(0, strlen(class)+1);
|
||||
classsegp = WIN16_GlobalLock(classh);
|
||||
classbuf = PTR_SEG_TO_LIN(classsegp);
|
||||
strcpy( classbuf, class );
|
||||
}
|
||||
if(uset){
|
||||
titleh = GlobalAlloc(0, strlen(title)+1);
|
||||
titlesegp = WIN16_GlobalLock(titleh);
|
||||
titlebuf = PTR_SEG_TO_LIN(titlesegp);
|
||||
strcpy( titlebuf, title );
|
||||
}
|
||||
|
||||
retval = (DWORD) CreateWindowEx(flags,classsegp,
|
||||
titlesegp,style,x,y,width,height,
|
||||
retval = (DWORD) CreateWindowEx(flags,(usec ? classsegp : (SEGPTR)class),
|
||||
(uset ? titlesegp : (SEGPTR)title),style,x,y,width,height,
|
||||
(HWND)parent,(HMENU)menu,(HINSTANCE)instance,
|
||||
(LPVOID)param);
|
||||
GlobalFree(classh);
|
||||
GlobalFree(titleh);
|
||||
(DWORD)param);
|
||||
if(usec)GlobalFree(classh);
|
||||
if(uset)GlobalFree(titleh);
|
||||
return retval;
|
||||
}
|
||||
|
||||
DWORD USER32_CreateWindowExW(long flags,LPCWSTR class,LPCWSTR title,
|
||||
long style,int x,int y,int width,int height,DWORD parent,DWORD menu,
|
||||
DWORD instance,DWORD param)
|
||||
{
|
||||
HWND hwnd;
|
||||
LPSTR c,t;
|
||||
int usec,uset;
|
||||
usec=HIWORD(class);
|
||||
uset=HIWORD(title);
|
||||
c = usec ? STRING32_DupUniToAnsi(class) : (LPSTR)class;
|
||||
t = uset ? STRING32_DupUniToAnsi(title) : (LPSTR)title;
|
||||
hwnd=USER32_CreateWindowExA(flags,c,t,style,x,y,width,height,parent,menu,
|
||||
instance,param);
|
||||
if(usec)free(c);
|
||||
if(uset)free(t);
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* InvalidateRect (USER32.327)
|
||||
*/
|
||||
BOOL USER32_InvalidateRect(HWND hWnd,const RECT32 *lpRect,BOOL bErase)
|
||||
{
|
||||
RECT r;
|
||||
USER32_RECT32to16(lpRect,&r);
|
||||
InvalidateRect(hWnd,&r,bErase);
|
||||
/* FIXME: Return value */
|
||||
return 0;
|
||||
|
||||
if (lpRect == NULL)
|
||||
InvalidateRect(hWnd, (RECT *)NULL, bErase);
|
||||
else {
|
||||
USER32_RECT32to16(lpRect,&r);
|
||||
InvalidateRect(hWnd,&r,bErase);
|
||||
}
|
||||
/* FIXME: Return meaningful value */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -247,3 +285,284 @@ BOOL USER32_GetClientRect(HWND hwnd,RECT32 *r32)
|
|||
return 0;
|
||||
}
|
||||
|
||||
UINT USER32_SetTimer(HWND hwnd, UINT id, UINT timeout, void *proc)
|
||||
|
||||
{
|
||||
dprintf_win32(stddeb, "USER32_SetTimer: %d %d %d %08lx\n", hwnd, id, timeout,
|
||||
(LONG)proc );
|
||||
return SetTimer( hwnd, id, timeout, MAKE_SEGPTR(proc));
|
||||
}
|
||||
|
||||
/* WARNING: It has not been verified that the signature or semantics
|
||||
of the corresponding NT function is the same */
|
||||
|
||||
HWND USER32_CreateDialogIndirectParamAorW(HINSTANCE hInst,LPVOID templ,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam,int A)
|
||||
{
|
||||
DLGTEMPLATE32 *dlgTempl=templ;
|
||||
DLGITEMTEMPLATE32 *dlgitem;
|
||||
WORD *ptr;
|
||||
DWORD MenuName=0;
|
||||
DWORD ClassName=0;
|
||||
DWORD szFontName=0;
|
||||
WORD wPointSize;
|
||||
HFONT hFont=0;
|
||||
HMENU hMenu=0;
|
||||
DWORD exStyle;
|
||||
DWORD szCaption;
|
||||
RECT rect;
|
||||
DIALOGINFO *dlgInfo;
|
||||
WND *wndPtr;
|
||||
WORD xUnit = xBaseUnit;
|
||||
WORD yUnit = yBaseUnit;
|
||||
int i;
|
||||
DWORD ClassId;
|
||||
DWORD Text;
|
||||
HWND hwnd,hwndCtrl;
|
||||
HWND hwndDefButton=0;
|
||||
WCHAR buffer[200];
|
||||
|
||||
/* parse the dialog template header*/
|
||||
exStyle = dlgTempl->dwExtendedStyle;
|
||||
ptr = (WORD*)(dlgTempl+1);
|
||||
switch(*ptr){
|
||||
case 0: MenuName=0;ptr++;break;
|
||||
case 0xFFFF: MenuName=*(ptr+1);ptr+=2;break;
|
||||
default: MenuName = (DWORD)ptr;
|
||||
ptr += STRING32_lstrlenW(ptr)+1;
|
||||
}
|
||||
switch(*ptr){
|
||||
case 0: ClassName = DIALOG_CLASS_ATOM;ptr++;break;
|
||||
case 0xFFFF: ClassName = *(ptr+1);ptr+=2;break;
|
||||
default: ClassName = (DWORD)ptr;
|
||||
ptr += STRING32_lstrlenW(ptr)+1;
|
||||
}
|
||||
szCaption=(DWORD)ptr;
|
||||
ptr+=STRING32_lstrlenW(ptr)+1;
|
||||
if(dlgTempl->style & DS_SETFONT)
|
||||
{
|
||||
wPointSize = *ptr;
|
||||
ptr++;
|
||||
szFontName = (DWORD)ptr;
|
||||
ptr+=STRING32_lstrlenW(ptr)+1;
|
||||
}
|
||||
|
||||
if(MenuName) hMenu=WIN32_LoadMenuW(hInst,(LPWSTR)MenuName);
|
||||
if(dlgTempl->style & DS_SETFONT)
|
||||
{
|
||||
fprintf(stderr,"Win32: dialog fonts not supported yet\n");
|
||||
}
|
||||
|
||||
/* Create dialog main window */
|
||||
rect.left = rect.top = 0;
|
||||
rect.right = dlgTempl->cx * xUnit / 4;
|
||||
rect.bottom = dlgTempl->cy * yUnit / 8;
|
||||
|
||||
/* FIXME: proper modalframe handling ??*/
|
||||
if (dlgTempl->style & DS_MODALFRAME) exStyle |= WS_EX_DLGMODALFRAME;
|
||||
|
||||
/* FIXME: AdjustWindowRectEx */
|
||||
|
||||
rect.right -= rect.left;
|
||||
rect.bottom -= rect.top;
|
||||
|
||||
if(dlgTempl->x == CW_USEDEFAULT)
|
||||
rect.left = rect.top = CW_USEDEFAULT;
|
||||
else{
|
||||
rect.left += dlgTempl->x * xUnit / 4;
|
||||
rect.top += dlgTempl->y * yUnit / 8;
|
||||
if (!(dlgTempl->style & DS_ABSALIGN))
|
||||
ClientToScreen(hWndParent, (POINT *)&rect );
|
||||
}
|
||||
|
||||
/* FIXME: Here is the place to consider A */
|
||||
hwnd = USER32_CreateWindowExW(exStyle, (LPWSTR)ClassName, (LPWSTR)szCaption,
|
||||
dlgTempl->style & ~WS_VISIBLE,
|
||||
rect.left, rect.top, rect.right, rect.bottom,
|
||||
hWndParent, hMenu, hInst, 0);
|
||||
|
||||
if(!hwnd)
|
||||
{
|
||||
if(hFont)DeleteObject(hFont);
|
||||
if(hMenu)DeleteObject(hMenu);
|
||||
return 0;
|
||||
}
|
||||
|
||||
wndPtr = WIN_FindWndPtr(hwnd);
|
||||
|
||||
/* FIXME: should purge junk from system menu, but windows/dialog.c
|
||||
says this does not belong here */
|
||||
|
||||
/* Create control windows */
|
||||
dprintf_dialog(stddeb, " BEGIN\n" );
|
||||
dlgInfo = (DIALOGINFO *)wndPtr->wExtra;
|
||||
dlgInfo->msgResult = 0; /* This is used to store the default button id */
|
||||
dlgInfo->hDialogHeap = 0;
|
||||
|
||||
for (i = 0; i < dlgTempl->noOfItems; i++)
|
||||
{
|
||||
if((int)ptr&3)
|
||||
{
|
||||
fprintf(stddeb,"DWORD aligning\n");
|
||||
ptr++;
|
||||
}
|
||||
dlgitem = (DLGITEMTEMPLATE32*)ptr;
|
||||
ptr = (WORD*)(dlgitem+1);
|
||||
if(*ptr == 0xFFFF) {
|
||||
/* FIXME: ignore HIBYTE? */
|
||||
ClassId = *(ptr+1);
|
||||
ptr+=2;
|
||||
}else{
|
||||
ClassId = (DWORD)ptr;
|
||||
ptr += STRING32_lstrlenW(ptr)+1;
|
||||
}
|
||||
if(*ptr == 0xFFFF) {
|
||||
Text = *(ptr+1);
|
||||
ptr+=2;
|
||||
}else{
|
||||
Text = (DWORD)ptr;
|
||||
ptr += STRING32_lstrlenW(ptr)+1;
|
||||
}
|
||||
if(!HIWORD(ClassId))
|
||||
{
|
||||
switch(LOWORD(ClassId))
|
||||
{
|
||||
case 0x80: STRING32_AnsiToUni(buffer,"BUTTON" ); break;
|
||||
case 0x81: STRING32_AnsiToUni( buffer, "EDIT" ); break;
|
||||
case 0x82: STRING32_AnsiToUni( buffer, "STATIC" ); break;
|
||||
case 0x83: STRING32_AnsiToUni( buffer, "LISTBOX" ); break;
|
||||
case 0x84: STRING32_AnsiToUni( buffer, "SCROLLBAR" ); break;
|
||||
case 0x85: STRING32_AnsiToUni( buffer, "COMBOBOX" ); break;
|
||||
default: buffer[0] = '\0'; break;
|
||||
}
|
||||
ClassId = (DWORD)buffer;
|
||||
}
|
||||
/*FIXME: debugging output*/
|
||||
/*FIXME: local edit ?*/
|
||||
exStyle = dlgitem->dwExtendedStyle|WS_EX_NOPARENTNOTIFY;
|
||||
if(*ptr)
|
||||
{
|
||||
fprintf(stderr,"having data\n");
|
||||
}
|
||||
ptr++;
|
||||
hwndCtrl = USER32_CreateWindowExW(WS_EX_NOPARENTNOTIFY,
|
||||
(LPWSTR)ClassId, (LPWSTR)Text,
|
||||
dlgitem->style | WS_CHILD,
|
||||
dlgitem->x * xUnit / 4,
|
||||
dlgitem->y * yUnit / 8,
|
||||
dlgitem->cx * xUnit / 4,
|
||||
dlgitem->cy * yUnit / 8,
|
||||
hwnd, (HMENU)((DWORD)dlgitem->id),
|
||||
hInst, (SEGPTR)0 );
|
||||
SetWindowPos( hwndCtrl, HWND_BOTTOM, 0, 0, 0, 0,
|
||||
SWP_NOSIZE | SWP_NOMOVE | SWP_NOACTIVATE );
|
||||
/* Send initialisation messages to the control */
|
||||
if (hFont) SendMessage( hwndCtrl, WM_SETFONT, (WPARAM)hFont, 0 );
|
||||
if (SendMessage( hwndCtrl, WM_GETDLGCODE, 0, 0 ) & DLGC_DEFPUSHBUTTON)
|
||||
{
|
||||
/* If there's already a default push-button, set it back */
|
||||
/* to normal and use this one instead. */
|
||||
if (hwndDefButton)
|
||||
SendMessage( hwndDefButton, BM_SETSTYLE, BS_PUSHBUTTON, FALSE);
|
||||
hwndDefButton = hwndCtrl;
|
||||
dlgInfo->msgResult = GetWindowWord( hwndCtrl, GWW_ID );
|
||||
}
|
||||
}
|
||||
dprintf_dialog(stddeb, " END\n" );
|
||||
|
||||
/* Initialise dialog extra data */
|
||||
ALIAS_RegisterAlias(0,0,lpDialogFunc);
|
||||
dlgInfo->dlgProc = lpDialogFunc;
|
||||
dlgInfo->hUserFont = hFont;
|
||||
dlgInfo->hMenu = hMenu;
|
||||
dlgInfo->xBaseUnit = xUnit;
|
||||
dlgInfo->yBaseUnit = yUnit;
|
||||
dlgInfo->hwndFocus = DIALOG_GetFirstTabItem( hwnd );
|
||||
|
||||
/* Send initialisation messages and set focus */
|
||||
if (dlgInfo->hUserFont)
|
||||
SendMessage( hwnd, WM_SETFONT, (WPARAM)dlgInfo->hUserFont, 0 );
|
||||
if (SendMessage( hwnd, WM_INITDIALOG, (WPARAM)dlgInfo->hwndFocus, dwInitParam ))
|
||||
SetFocus( dlgInfo->hwndFocus );
|
||||
if (dlgTempl->style & WS_VISIBLE) ShowWindow(hwnd, SW_SHOW);
|
||||
return hwnd;
|
||||
}
|
||||
|
||||
HWND USER32_CreateDialogIndirectParamW(HINSTANCE hInst,LPVOID dlgTempl,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
return USER32_CreateDialogIndirectParamAorW(hInst,dlgTempl,hWndParent,
|
||||
lpDialogFunc,dwInitParam,0);
|
||||
}
|
||||
|
||||
HWND USER32_CreateDialogIndirectParamA(HINSTANCE hInst,LPVOID dlgTempl,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
return USER32_CreateDialogIndirectParamAorW(hInst,dlgTempl,hWndParent,
|
||||
lpDialogFunc,dwInitParam,1);
|
||||
}
|
||||
|
||||
HWND USER32_CreateDialogParamW(HINSTANCE hInst,LPCWSTR lpszName,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
HANDLE32 hrsrc;
|
||||
hrsrc=FindResource32(hInst,lpszName,(LPWSTR)RT_DIALOG);
|
||||
if(!hrsrc)return 0;
|
||||
return USER32_CreateDialogIndirectParamW(hInst,
|
||||
LoadResource32(hInst, hrsrc),hWndParent,lpDialogFunc,dwInitParam);
|
||||
}
|
||||
|
||||
HWND USER32_CreateDialogParamA(HINSTANCE hInst,LPCSTR lpszName,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
HWND res;
|
||||
if(!HIWORD(lpszName))
|
||||
res = USER32_CreateDialogParamW(hInst,(LPCWSTR)lpszName,hWndParent,
|
||||
lpDialogFunc,dwInitParam);
|
||||
else{
|
||||
LPWSTR uni=STRING32_DupAnsiToUni(lpszName);
|
||||
res=USER32_CreateDialogParamW(hInst,uni,hWndParent,
|
||||
lpDialogFunc,dwInitParam);
|
||||
}
|
||||
return res;
|
||||
}
|
||||
|
||||
int USER32_DialogBoxIndirectParamW(HINSTANCE hInstance,LPVOID dlgTempl,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
HWND hwnd;
|
||||
hwnd = USER32_CreateDialogIndirectParamW(hInstance,dlgTempl,
|
||||
hWndParent,lpDialogFunc,dwInitParam);
|
||||
if(hwnd)return DIALOG_DoDialogBox(hwnd,hWndParent);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int USER32_DialogBoxIndirectParamA(HINSTANCE hInstance,LPVOID dlgTempl,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
HWND hwnd;
|
||||
hwnd = USER32_CreateDialogIndirectParamA(hInstance,dlgTempl,
|
||||
hWndParent,lpDialogFunc,dwInitParam);
|
||||
if(hwnd)return DIALOG_DoDialogBox(hwnd,hWndParent);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int USER32_DialogBoxParamW(HINSTANCE hInstance,LPCWSTR lpszName,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
HWND hwnd;
|
||||
hwnd = USER32_CreateDialogParamW(hInstance,lpszName,
|
||||
hWndParent,lpDialogFunc,dwInitParam);
|
||||
if(hwnd)return DIALOG_DoDialogBox(hwnd,hWndParent);
|
||||
return -1;
|
||||
}
|
||||
|
||||
int USER32_DialogBoxParamA(HINSTANCE hInstance,LPCSTR lpszName,
|
||||
HWND hWndParent,DLGPROC lpDialogFunc,LPARAM dwInitParam)
|
||||
{
|
||||
HWND hwnd;
|
||||
hwnd = USER32_CreateDialogParamA(hInstance,lpszName,
|
||||
hWndParent,lpDialogFunc,dwInitParam);
|
||||
if(hwnd)return DIALOG_DoDialogBox(hwnd,hWndParent);
|
||||
return -1;
|
||||
}
|
||||
|
|
|
@ -84,7 +84,7 @@ static void CARET_HideCaret()
|
|||
else
|
||||
hBrush = CreatePatternBrush(Caret.bitmap);
|
||||
SelectObject(hdc, (HANDLE)hBrush);
|
||||
SetROP2(hdc, R2_XORPEN);
|
||||
SetROP2(hdc, R2_NOTXORPEN);
|
||||
rgn = CreateRectRgn(Caret.x, Caret.y,
|
||||
Caret.x + Caret.width,
|
||||
Caret.y + Caret.height);
|
||||
|
@ -105,7 +105,8 @@ static void CARET_Initialize()
|
|||
{
|
||||
WineProc=(DWORD)CARET_Callback;
|
||||
Win16Proc=(DWORD)GetWndProcEntry16("CARET_Callback");
|
||||
Win32Proc=(DWORD)RELAY32_GetEntryPoint("WINPROCS32","CARET_Callback",0);
|
||||
Win32Proc=(DWORD)RELAY32_GetEntryPoint(
|
||||
RELAY32_GetBuiltinDLL("WINPROCS32"),"CARET_Callback",0);
|
||||
ALIAS_RegisterAlias(WineProc,Win16Proc,Win32Proc);
|
||||
initialized=1;
|
||||
}
|
||||
|
@ -165,7 +166,7 @@ BOOL CreateCaret(HWND hwnd, HBITMAP bitmap, INT width, INT height)
|
|||
* DestroyCaret (USER.164)
|
||||
*/
|
||||
|
||||
void DestroyCaret()
|
||||
BOOL DestroyCaret()
|
||||
{
|
||||
/* if (!Caret.hwnd) return;
|
||||
*/
|
||||
|
@ -177,6 +178,7 @@ void DestroyCaret()
|
|||
CARET_HideCaret();
|
||||
|
||||
Caret.hwnd = 0; /* cursor marked as not existing */
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@ static char Copyright[] = "Copyright Alexandre Julliard, 1993, 1994";
|
|||
#include "debug.h"
|
||||
|
||||
/* Dialog base units */
|
||||
static WORD xBaseUnit = 0, yBaseUnit = 0;
|
||||
WORD xBaseUnit = 0, yBaseUnit = 0;
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
|
@ -469,7 +469,7 @@ HWND CreateDialogIndirectParam( HINSTANCE hInst, SEGPTR dlgTemplate,
|
|||
/***********************************************************************
|
||||
* DIALOG_DoDialogBox
|
||||
*/
|
||||
static int DIALOG_DoDialogBox( HWND hwnd, HWND owner )
|
||||
int DIALOG_DoDialogBox( HWND hwnd, HWND owner )
|
||||
{
|
||||
WND * wndPtr;
|
||||
DIALOGINFO * dlgInfo;
|
||||
|
@ -508,8 +508,8 @@ static int DIALOG_DoDialogBox( HWND hwnd, HWND owner )
|
|||
/***********************************************************************
|
||||
* DialogBox (USER.87)
|
||||
*/
|
||||
int DialogBox( HINSTANCE hInst, SEGPTR dlgTemplate,
|
||||
HWND owner, WNDPROC dlgProc )
|
||||
INT DialogBox( HINSTANCE hInst, SEGPTR dlgTemplate,
|
||||
HWND owner, DLGPROC dlgProc )
|
||||
{
|
||||
return DialogBoxParam( hInst, dlgTemplate, owner, dlgProc, 0 );
|
||||
}
|
||||
|
@ -518,8 +518,8 @@ int DialogBox( HINSTANCE hInst, SEGPTR dlgTemplate,
|
|||
/***********************************************************************
|
||||
* DialogBoxParam (USER.239)
|
||||
*/
|
||||
int DialogBoxParam( HINSTANCE hInst, SEGPTR dlgTemplate,
|
||||
HWND owner, WNDPROC dlgProc, LPARAM param )
|
||||
INT DialogBoxParam( HINSTANCE hInst, SEGPTR dlgTemplate,
|
||||
HWND owner, DLGPROC dlgProc, LPARAM param )
|
||||
{
|
||||
HWND hwnd;
|
||||
|
||||
|
@ -534,8 +534,8 @@ int DialogBoxParam( HINSTANCE hInst, SEGPTR dlgTemplate,
|
|||
/***********************************************************************
|
||||
* DialogBoxIndirect (USER.218)
|
||||
*/
|
||||
int DialogBoxIndirect( HINSTANCE hInst, HANDLE dlgTemplate,
|
||||
HWND owner, WNDPROC dlgProc )
|
||||
INT DialogBoxIndirect( HINSTANCE hInst, HANDLE dlgTemplate,
|
||||
HWND owner, DLGPROC dlgProc )
|
||||
{
|
||||
return DialogBoxIndirectParam( hInst, dlgTemplate, owner, dlgProc, 0 );
|
||||
}
|
||||
|
@ -544,8 +544,8 @@ int DialogBoxIndirect( HINSTANCE hInst, HANDLE dlgTemplate,
|
|||
/***********************************************************************
|
||||
* DialogBoxIndirectParam (USER.240)
|
||||
*/
|
||||
int DialogBoxIndirectParam( HINSTANCE hInst, HANDLE dlgTemplate,
|
||||
HWND owner, WNDPROC dlgProc, LPARAM param )
|
||||
INT DialogBoxIndirectParam( HINSTANCE hInst, HANDLE dlgTemplate,
|
||||
HWND owner, DLGPROC dlgProc, LPARAM param )
|
||||
{
|
||||
HWND hwnd;
|
||||
SEGPTR ptr;
|
||||
|
@ -561,13 +561,14 @@ int DialogBoxIndirectParam( HINSTANCE hInst, HANDLE dlgTemplate,
|
|||
/***********************************************************************
|
||||
* EndDialog (USER.88)
|
||||
*/
|
||||
void EndDialog( HWND hwnd, short retval )
|
||||
BOOL EndDialog( HWND hwnd, INT retval )
|
||||
{
|
||||
WND * wndPtr = WIN_FindWndPtr( hwnd );
|
||||
DIALOGINFO * dlgInfo = (DIALOGINFO *)wndPtr->wExtra;
|
||||
dlgInfo->msgResult = retval;
|
||||
dlgInfo->fEnd = TRUE;
|
||||
dprintf_dialog(stddeb, "EndDialog: "NPFMT" %d\n", hwnd, retval );
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -642,7 +642,7 @@ BOOL InvertRgn( HDC hdc, HRGN hrgn )
|
|||
/***********************************************************************
|
||||
* DrawFocusRect (USER.466)
|
||||
*/
|
||||
void DrawFocusRect( HDC hdc, LPRECT rc )
|
||||
void DrawFocusRect( HDC hdc, const RECT* rc )
|
||||
{
|
||||
HPEN hOldPen;
|
||||
int oldDrawMode, oldBkMode;
|
||||
|
|
|
@ -38,7 +38,7 @@ void MAPPING_FixIsotropic( DC * dc )
|
|||
/***********************************************************************
|
||||
* DPtoLP (GDI.67)
|
||||
*/
|
||||
BOOL DPtoLP( HDC hdc, LPPOINT points, int count )
|
||||
BOOL DPtoLP( HDC hdc, LPPOINT points, INT count )
|
||||
{
|
||||
POINT * pt;
|
||||
DC * dc = (DC *) GDI_GetObjPtr( hdc, DC_MAGIC );
|
||||
|
|
|
@ -1138,11 +1138,7 @@ LRESULT DefFrameProc(HWND hwnd, HWND hwndMDIClient, UINT message,
|
|||
* DefMDIChildProc (USER.447)
|
||||
*
|
||||
*/
|
||||
#ifdef WINELIB32
|
||||
LONG DefMDIChildProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
#else
|
||||
LONG DefMDIChildProc(HWND hwnd, WORD message, WORD wParam, LONG lParam)
|
||||
#endif
|
||||
LRESULT DefMDIChildProc(HWND hwnd, UINT message, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
MDICLIENTINFO *ci;
|
||||
WND *clientWnd;
|
||||
|
|
|
@ -209,88 +209,6 @@ HTASK MSG_GetQueueTask( HANDLE hQueue )
|
|||
return (msgQ) ? msgQ->hTask : 0 ;
|
||||
}
|
||||
|
||||
/***********************************************************************
|
||||
* MSG_GetWindowForEvent
|
||||
*
|
||||
* Find the window and hittest for a mouse event.
|
||||
*/
|
||||
static INT MSG_GetWindowForEvent( POINT pt, HWND *phwnd )
|
||||
{
|
||||
WND *wndPtr;
|
||||
HWND hwnd;
|
||||
INT hittest = HTERROR;
|
||||
INT x, y;
|
||||
|
||||
*phwnd = hwnd = GetDesktopWindow();
|
||||
x = pt.x;
|
||||
y = pt.y;
|
||||
while (hwnd)
|
||||
{
|
||||
/* If point is in window, and window is visible, and it */
|
||||
/* is enabled (or it's a top-level window), then explore */
|
||||
/* its children. Otherwise, go to the next window. */
|
||||
|
||||
wndPtr = WIN_FindWndPtr( hwnd );
|
||||
if ((wndPtr->dwStyle & WS_VISIBLE) &&
|
||||
(!(wndPtr->dwStyle & WS_DISABLED) ||
|
||||
!(wndPtr->dwStyle & WS_CHILD)) &&
|
||||
(x >= wndPtr->rectWindow.left) &&
|
||||
(x < wndPtr->rectWindow.right) &&
|
||||
(y >= wndPtr->rectWindow.top) &&
|
||||
(y < wndPtr->rectWindow.bottom))
|
||||
{
|
||||
*phwnd = hwnd;
|
||||
x -= wndPtr->rectClient.left;
|
||||
y -= wndPtr->rectClient.top;
|
||||
/* If window is minimized or disabled, ignore its children */
|
||||
if ((wndPtr->dwStyle & WS_MINIMIZE) ||
|
||||
(wndPtr->dwStyle & WS_DISABLED)) break;
|
||||
hwnd = wndPtr->hwndChild;
|
||||
}
|
||||
else hwnd = wndPtr->hwndNext;
|
||||
}
|
||||
|
||||
/* Make point relative to parent again */
|
||||
|
||||
wndPtr = WIN_FindWndPtr( *phwnd );
|
||||
x += wndPtr->rectClient.left;
|
||||
y += wndPtr->rectClient.top;
|
||||
|
||||
/* Send the WM_NCHITTEST message */
|
||||
|
||||
while (*phwnd)
|
||||
{
|
||||
wndPtr = WIN_FindWndPtr( *phwnd );
|
||||
if (wndPtr->dwStyle & WS_DISABLED) hittest = HTERROR;
|
||||
else hittest = (INT)SendMessage( *phwnd, WM_NCHITTEST, 0,
|
||||
MAKELONG( pt.x, pt.y ) );
|
||||
if (hittest != HTTRANSPARENT) break; /* Found the window */
|
||||
hwnd = wndPtr->hwndNext;
|
||||
while (hwnd)
|
||||
{
|
||||
WND *nextPtr = WIN_FindWndPtr( hwnd );
|
||||
if ((nextPtr->dwStyle & WS_VISIBLE) &&
|
||||
(x >= nextPtr->rectWindow.left) &&
|
||||
(x < nextPtr->rectWindow.right) &&
|
||||
(y >= nextPtr->rectWindow.top) &&
|
||||
(y < nextPtr->rectWindow.bottom)) break;
|
||||
hwnd = nextPtr->hwndNext;
|
||||
}
|
||||
if (hwnd) *phwnd = hwnd; /* Found a suitable sibling */
|
||||
else /* Go back to the parent */
|
||||
{
|
||||
if (!(*phwnd = wndPtr->hwndParent)) break;
|
||||
wndPtr = WIN_FindWndPtr( *phwnd );
|
||||
x += wndPtr->rectClient.left;
|
||||
y += wndPtr->rectClient.top;
|
||||
}
|
||||
}
|
||||
|
||||
if (!*phwnd) *phwnd = GetDesktopWindow();
|
||||
return hittest;
|
||||
}
|
||||
|
||||
|
||||
/***********************************************************************
|
||||
* MSG_TranslateMouseMsg
|
||||
*
|
||||
|
@ -333,7 +251,7 @@ static BOOL MSG_TranslateMouseMsg( MSG *msg, BOOL remove )
|
|||
msg->message, (LPARAM)MAKE_SEGPTR(&hook));
|
||||
}
|
||||
|
||||
if ((hittest = MSG_GetWindowForEvent( msg->pt, &msg->hwnd )) != HTERROR)
|
||||
if ((hittest = WINPOS_WindowFromPoint( msg->pt, &msg->hwnd )) != HTERROR)
|
||||
{
|
||||
|
||||
/* Send the WM_PARENTNOTIFY message */
|
||||
|
@ -1171,7 +1089,7 @@ BOOL TranslateMessage( LPMSG msg )
|
|||
/***********************************************************************
|
||||
* DispatchMessage (USER.114)
|
||||
*/
|
||||
LONG DispatchMessage( LPMSG msg )
|
||||
LONG DispatchMessage( const MSG* msg )
|
||||
{
|
||||
WND * wndPtr;
|
||||
LONG retval;
|
||||
|
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Add table
Reference in a new issue