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.
diff --git a/include/debug.h b/include/debug.h
index 82e08eb..1d72191 100644
--- a/include/debug.h
+++ b/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 @@
#else
0,
#endif
+#ifdef DEBUG_COMMDLG
+ 1,
+#else
+ 0,
+#endif
#ifdef DEBUG_CURSOR
1,
#else
@@ -713,8 +720,21 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
#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 @@
"clipping",
"combo",
"comm",
+ "commdlg",
"cursor",
"dc",
"dde",
diff --git a/include/dialog.h b/include/dialog.h
index 772074e..2eb2d8f 100644
--- a/include/dialog.h
+++ b/include/dialog.h
@@ -70,4 +70,7 @@
#pragma pack(4)
+extern WORD xBaseUnit,yBaseUnit;
+int DIALOG_DoDialogBox( HWND hwnd, HWND owner );
+
#endif /* DIALOG_H */
diff --git a/include/file.h b/include/file.h
index 1c585a4..9a4e0e4 100644
--- a/include/file.h
+++ b/include/file.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 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 */
diff --git a/include/gdi.h b/include/gdi.h
index a8f1899..16a631c 100644
--- a/include/gdi.h
+++ b/include/gdi.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)
diff --git a/include/handle32.h b/include/handle32.h
index e6d07a7..08ab132 100644
--- a/include/handle32.h
+++ b/include/handle32.h
@@ -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 @@
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 @@
#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
*/
diff --git a/include/miscemu.h b/include/miscemu.h
index 33d7648..af6b061 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -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;
diff --git a/include/msdos.h b/include/msdos.h
index e399be1..094c680 100644
--- a/include/msdos.h
+++ b/include/msdos.h
@@ -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 @@
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 @@
#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];
diff --git a/include/options.h b/include/options.h
index 684aa6b..a646908 100644
--- a/include/options.h
+++ b/include/options.h
@@ -16,7 +16,8 @@
LANG_No, /* Norwegian */
LANG_Fr, /* French */
LANG_Fi, /* Finnish */
- LANG_Da /* Danish */
+ LANG_Da, /* Danish */
+ LANG_Cz /* Czech */
} WINE_LANGUAGE;
struct options
diff --git a/include/pe_image.h b/include/pe_image.h
index 220f5b2..944d2ff 100644
--- a/include/pe_image.h
+++ b/include/pe_image.h
@@ -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 @@
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 pe_data *pe;
OFSTRUCT ofs;
unsigned int load_addr;
+ WIN32_builtin* builtin;
};
@@ -38,18 +55,4 @@
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 */
diff --git a/include/relay32.h b/include/relay32.h
index 2736089..0fd7680 100644
--- a/include/relay32.h
+++ b/include/relay32.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 @@
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
+
diff --git a/include/resource32.h b/include/resource32.h
index bcddc21..c47d50e 100644
--- a/include/resource32.h
+++ b/include/resource32.h
@@ -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 @@
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 */
diff --git a/include/stddebug.h b/include/stddebug.h
index 54cc9d2..452812a 100644
--- a/include/stddebug.h
+++ b/include/stddebug.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
diff --git a/include/string32.h b/include/string32.h
index b598c0e..a50bb01 100644
--- a/include/string32.h
+++ b/include/string32.h
@@ -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
diff --git a/include/struct32.h b/include/struct32.h
index f9394cd..a7d4dfa 100644
--- a/include/struct32.h
+++ b/include/struct32.h
@@ -22,4 +22,26 @@
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
diff --git a/include/win.h b/include/win.h
index f5f7ba1..37184a7 100644
--- a/include/win.h
+++ b/include/win.h
@@ -60,14 +60,15 @@
} 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)
diff --git a/include/windows.h b/include/windows.h
index 0e2ce32..22a0cd2 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -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 @@
#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 @@
#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 @@
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 @@
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);
diff --git a/include/winpos.h b/include/winpos.h
index 8660036..33ee4bb 100644
--- a/include/winpos.h
+++ b/include/winpos.h
@@ -34,5 +34,6 @@
RECT *oldClientRect, WINDOWPOS *winpos,
RECT *newClientRect );
extern LONG WINPOS_HandleWindowPosChanging( WINDOWPOS *winpos );
+extern INT WINPOS_WindowFromPoint( POINT pt, HWND *phwnd );
#endif /* WINPOS_H */
diff --git a/include/wintypes.h b/include/wintypes.h
index 30da778..77b33fe 100644
--- a/include/wintypes.h
+++ b/include/wintypes.h
@@ -39,6 +39,9 @@
#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 @@
#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 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(HDRVR);
DECLARE_HANDLE(HDWP);
DECLARE_HANDLE(HFONT);
+DECLARE_HANDLE(HGDIOBJ);
DECLARE_HANDLE(HGLOBAL);
DECLARE_HANDLE(HICON);
DECLARE_HANDLE(HINSTANCE);
@@ -107,12 +115,23 @@
#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