Release 950727
Sat Jul 22 22:39:09 IDT 1995 Michael Veksler <e1678223@tochnapc2.technion.ac.il>
* [ipc/*]
New directory. This directory contains the new inter-wine
communications support. It enables DDE protocols between two wine
instances. Currently it is limited to DDE, but can be enhanced to
support OLE between 2 different wine instances. This is very
important for libwine.a DDE/OLE support.
* [tools/ipcl]
A script to delete garbage IPC handles (shared memory, semaphores
and message queues). The current inter-wine communication is not
perfect, and sometimes leaves garbage behind.
* [if1632/relay.c] [include/atom.h] [include/global.h]
[loader/selector.c] [loader/task.c] [loader/module.c]
[loader/signal.c] [memory/global.c] [misc/atom.c]
[windows/class.c] [windows/message.c] [windows/win.c]
[Imakefile]
Hooks for inter-wine DDE support, current Global.*Atom functions
renamed to Local.*Atom since Global.*Atom are used for Inter-Wine
DDE communication. (The first call to these functions sets up the
IPC structures - which otherwise cause unneeded overhead.
Mon Jul 17 19:55:21 1995 Alexandre Julliard <julliard@sunsite.unc.edu>
* [controls/menu.c]
Don't crash if a NULL string is passed to menu functions.
* [memory/selector.c]
We now use a bit in ldt_flags_copy to indicate free LDT entries.
Fixed a bug in SELECTOR_ReallocBlock that could cause it to
overwrite valid LDT entries when growing a block.
* [miscemu/instr.c]
Emulate int xx instruction by storing the interrupt vector in
CS:IP and returning directly. This allows a program to install an
interrupt vector.
* [windows/win.c]
Added function WIN_GetTopParent to get the top-level parent of a
window.
Sun Jul 16 18:17:17 1995 Gregory Trubetskoy <grisha@mira.com>
* [loader/resource.c]
Added LoadIconHandler. It doesn't do anything yet, but now you
can use borland help files with winhelp.exe.
Sun Jul 16 11:58:45 1995 Anand Kumria <akumria@ozemail.com.au>
* [misc/main.c]
Fixed to return 386 Enhanced mode correctly. Also return the same
type of CPU, for both Enhanced and Standard mode, namely a 386.
Sun Jul 16 00:02:04 1995 Martin von Loewis <loewis@informatik.hu-berlin.de>
* [Configure] [include/options.h] [include/wineopts.h]
[misc/main.c][misc/spy.c]
Removed support of spy file. Redirected spy messages to stddeb.
Removed -spy option. Added -debugmsg +spy option.
* [debugger/dbg.y][debugger/debug.l]
Enabled segmented addresses (seg:offs) for break and x commands.
* [if1632/gdi.spec] [objects/region.c] [windows/graphics.c]
[include/region.h]
FrameRgn, REGION_FrameRgn: New functions
* [if1632/kernel.spec]
IsWinOldApTask: Return false
* [if1632/mouse.spec]
CplApplet: Removed
* [if1632/user.spec] [windows/win.c]
ShowOwnedPopups: New function
* [if1632/winsock.spec] [misc/winsocket.c]
inet_addr, select: New prototypes in relay code
Fixed memory layout for netdb functions (getXbyY).
WINSOCK_ioctlsocket: Translated FIONREAD, FIONBIO, and FIOASYNC
* [objects/clipping.c]
RectVisible: Fixed call to LPToDP
* [rc/winerc.c]
main: Removed extra argument to getopt for Linux.
Tue Jul 11 00:14:41 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de>
* [controls/listbox.c]
Yet another fix for ListBoxDirectory().
* [loader/module.c] [if1632/kernel.spec]
Make GetModuleHandle() accept instance handles as parameter.
* [if1632/relay.c] [loader/task.c]
Put a magic cookie at the bottom of the 32 bit stack, and check on
each return from a 32 bit function whether it's still there. Complain
if it's not.
* [if1632/user.spec]
Wrong entry for CloseDriver().
* [misc/dos_fs.c] [loader/task.c] [include/dos_fs.h] [misc/file.c]
[miscemu/int21.c]
Large parts of dos_fs.c simplified. Changed it to use one
current drive/directory per task, which is set to the module path on
task creation.
Prevent CorelPaint from closing stdin.
open() with O_CREAT set must be passed three parameters.
DOS FindFirst()/FindNext() could crash when FA_LABEL was set. Fixed,
it's in DOS_readdir() now.
* [misc/profile.c]
Some badly written software (Lotus Freelance Graphics) passes a bogus
size parameter that caused Wine to write off the end of a segment.
Fixed. (It's probably too paranoid now.)
* [multimedia/mmsystem.c] [multimedia/time.c] [multimedia/joystick.c]
[multimedia/Imakefile] [if1632/winprocs.spec]
16 bit entry point for MMSysTimeCallback.
Split off time.c and joystick.c from mmsystem.c.
* [objects/dib.c]
GetDIBits(): call XGetImage() via CallTo32_LargeStack.
* [windows/cursor.c]
DestroyCursor(): do nothing for builtin cursors.
* [windows/mdi.c]
Half of WM_MDISETMENU implemented.
* [windows/win.c]
EnumWindows() and EnumTaskWindows() never enumerated any windows.
Fixed.
* [windows/*.c]
Fixed GetParent() to return correct values for owned windows.
* [windows/message.c]
Don't try to activate disabled top-level windows.
* [windows/nonclient.c]
Work around a bug in gcc-2.7.0.
* [tools/build.c] [include/stackframe.h] [memory/global.c]
[loader/task.c] [memory/selector.c]
Some Visual Basic programs (and possibly others, too) expect ES to be
preserved by a call to an API function, so we have to save it.
In GlobalFree() and FreeSelector(), we must clear CURRENT_STACK16->es
to prevent segfaults if ES contained the selector to be freed.
Sun Jul 9 20:21:20 1995 Jon Tombs <jon@gtex02.us.es>
* [*/*]
Added missing prototypes to header files and relevant includes
to reduce compile time warnings.
Sun Jul 9 18:32:56 1995 Michael Patra <micky@marie.physik.tu-berlin.de>
* [configure.in] [include/config.h] [*/Makefile.in]
New configuration scheme based on autoconf.
Sat Jul 8 14:12:45 1995 Morten Welinder <terra+@cs.cmu.edu>
* [miscemu/ioports.c]
Revamp to have only one in- and one out- variant, both really
implemented.
* [miscemu/instr.c]
INSTR_EmulateInstruction: Use new ioport interface. Implement
string io. Correct instruction pointer for 32-bit code.
* [include/miscemu.h]
Update port function prototypes.
* [include/registers.h]
Defined FS and GS.
Sat Jul 8 13:38:54 1995 Hans de Graaff <graaff@twi72.twi.tudelft.nl>
* [misc/dos_fs.c]
ChopOffSlash(): A path consisting off a single slash is left
intact, and multiple slashes are all removed.
diff --git a/include/atom.h b/include/atom.h
index 045c343..631f185 100644
--- a/include/atom.h
+++ b/include/atom.h
@@ -31,4 +31,14 @@
#define LocalAlign(flags,bytes) LocalAlloc((flags),(bytes))
#endif
+ATOM LocalAddAtom( LPCSTR str );
+ATOM LocalDeleteAtom( ATOM atom );
+ATOM LocalFindAtom( LPCSTR str );
+WORD LocalGetAtomName( ATOM atom, LPSTR buffer, short count );
+
+ATOM LocalAddAtom( LPCSTR str );
+ATOM LocalDeleteAtom( ATOM atom );
+ATOM LocalFindAtom( LPCSTR str );
+WORD LocalGetAtomName( ATOM atom, LPSTR buffer, short count );
+
#endif /* ATOM_H */
diff --git a/include/bit_array.h b/include/bit_array.h
new file mode 100644
index 0000000..b07cdf6
--- /dev/null
+++ b/include/bit_array.h
@@ -0,0 +1,53 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: bit_array.h
+ * Purpose : manipulate array of bits,
+ * Important: operations may be considered atomic.
+ *
+ ***************************************************************************
+ */
+#ifndef __WINE_BIT_ARRAY_H
+#define __WINE_BIT_ARRAY_H
+
+
+#define BITS_PER_BYTE (8)
+#define BITS_PER_INT (sizeof(int)*BITS_PER_BYTE) /* must be power of 2 */
+
+#define BYTE_LOG2 (3)
+#if defined(INT_LOG2)
+/* nothing to do, IN_LOG2 is ok */
+#elif defined(__i386__)
+# define INT_LOG2 (5)
+#else
+# error "Can't find log2 of BITS_PER_INT, please code it manualy"
+#endif
+
+
+typedef struct bit_array {
+ int bits; /* number of bits in the array */
+ unsigned int *array; /* Actual array data (Never NULL) */
+} bit_array ;
+
+bit_array *AssembleArray(bit_array *new_array, unsigned int *buff, int bits);
+int ResetArray(bit_array *bits);
+
+/* Return index of first free bit, or -1 on failure */
+int VacantBit(bit_array *bits);
+
+
+/* Return the value of bit 'i' */
+int SampleBit(bit_array *bits, int i);
+
+/* Assign 'val' to a bit no. 'i'. Return: old bit's value */
+int AssignBit(bit_array *bits, int i, int val);
+
+/*
+** Allocate a free bit (==0) and make it used (==1).
+** Return: allocated bit index, or -1 on failure.
+*/
+int AllocateBit(bit_array *bits);
+
+#endif /* __WINE_BIT_ARRAY_H */
diff --git a/include/config.h.in b/include/config.h.in
new file mode 100644
index 0000000..10c6b69
--- /dev/null
+++ b/include/config.h.in
@@ -0,0 +1,6 @@
+#undef HAVE_STDLIB_H
+#undef HAVE_TCGETATTR
+#undef HAVE_DIRENT_H
+#undef HAVE_SYS_NDIR_H
+#undef HAVE_NDIR_H
+#undef STAT_MACROS_BROKEN
diff --git a/include/dde.h b/include/dde.h
new file mode 100644
index 0000000..72d250c
--- /dev/null
+++ b/include/dde.h
@@ -0,0 +1,61 @@
+/*****************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: dde.h
+ * Purpose: dde declarations
+ *
+ *****************************************************************************
+ */
+#ifndef __WINE_DDE_H
+#define __WINE_DDE_H
+
+#include "wintypes.h"
+#include "dde_proc.h"
+
+#define WM_DDE_INITIATE 0x3E0
+#define WM_DDE_TERMINATE 0x3E1
+#define WM_DDE_ADVISE 0x3E2
+#define WM_DDE_UNADVISE 0x3E3
+#define WM_DDE_ACK 0x3E4
+#define WM_DDE_DATA 0x3E5
+#define WM_DDE_REQUEST 0x3E6
+#define WM_DDE_POKE 0x3E7
+#define WM_DDE_EXECUTE 0x3E8
+#define WM_DDE_LAST WM_DDE_EXECUTE
+#define WM_DDE_FIRST WM_DDE_INITIATE
+
+/* DDEACK: wStatus in WM_DDE_ACK message */
+struct tagDDEACK
+{
+ WORD bAppReturnCode:8, reserved:6, fBusy:1, fAck:1;
+};
+typedef struct tagDDEACK DDEACK;
+
+/* DDEDATA: hData in WM_DDE_DATA message */
+struct tagDDEDATA
+{
+ WORD unused:12, fResponse:1, fRelease:1, reserved:1, fAckReq:1,
+ cfFormat:16;
+ BYTE Value[1]; /* undetermined array */
+};
+typedef struct tagDDEDATA DDEDATA;
+
+
+/* DDEADVISE: hOptions in WM_DDE_ADVISE message */
+struct tagDDEADVISE
+{
+ WORD reserved:14, fDeferUpd:1, fAckReq:1, cfFormat:16;
+};
+typedef struct tagDDEADVISE DDEADVISE;
+
+/* DDEPOKE: hData in WM_DDE_POKE message. */
+struct tagDDEPOKE
+{
+ WORD unused:13, fRelease:1, fReserved:2, cfFormat:16;
+ BYTE Value[1]; /* undetermined array */
+};
+typedef struct tagDDEPOKE DDEPOKE;
+
+#endif /* __WINE_DDE_H */
diff --git a/include/dde_atom.h b/include/dde_atom.h
new file mode 100644
index 0000000..56df6b7
--- /dev/null
+++ b/include/dde_atom.h
@@ -0,0 +1,23 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: dde_atom.h
+ * Purpose : atom functionality for DDE
+ ***************************************************************************
+ */
+#ifndef __WINE_DDE_ATOM_H
+#define __WINE_DDE_ATOM_H
+#include "windows.h"
+
+#define DDE_ATOMS 157 /* a prime number for hashing */
+
+void ATOM_GlobalInit(void);
+/*
+ATOM GlobalAddAtom( LPCSTR str );
+ATOM GlobalDeleteAtom( ATOM atom );
+ATOM GlobalFindAtom( LPCSTR str );
+WORD GlobalGetAtomName( ATOM atom, LPSTR buffer, short count )
+*/
+#endif __WINE_DDE_ATOM_H
diff --git a/include/dde_mem.h b/include/dde_mem.h
new file mode 100644
index 0000000..6a830e1
--- /dev/null
+++ b/include/dde_mem.h
@@ -0,0 +1,34 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: dde_mem.h
+ * Purpose : shared DDE memory functionality for DDE
+ ***************************************************************************
+ */
+#ifndef __WINE_DDE_MEM_H
+#define __WINE_DDE_MEM_H
+#include "wintypes.h"
+#include "global.h"
+#include "shm_block.h"
+
+#define DDE_HANDLES 0x0400
+#define is_dde_handle(block) ( (block) >= (1<<15) && (block) < (1<<15)+DDE_HANDLES )
+typedef struct {
+ int shmid;
+ REL_PTR rel;
+}DDE_HWND;
+
+WORD DDE_SyncHandle(HGLOBAL handle, WORD sel);
+void *DDE_malloc(unsigned int flags,unsigned long size, SHMDATA *shmdata);
+HANDLE DDE_GlobalReAlloc(WORD,long,WORD);
+HANDLE DDE_GlobalFree(WORD block);
+void *DDE_AttachHandle(HGLOBAL handle, SEGPTR *segptr);
+WORD DDE_GlobalHandleToSel( HGLOBAL handle );
+int DDE_GlobalUnlock(int);
+HANDLE DDE_GlobalSize(WORD);
+HANDLE DDE_GlobalHandle(WORD);
+HANDLE DDE_GlobalFlags(WORD);
+
+#endif /* __WINE_DDE_MEM_H */
diff --git a/include/dde_proc.h b/include/dde_proc.h
new file mode 100644
index 0000000..85e682a
--- /dev/null
+++ b/include/dde_proc.h
@@ -0,0 +1,57 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: dde_proc.h
+ * Purpose : DDE signals and processes functionality for DDE
+ ***************************************************************************
+ */
+#ifndef __WINE_DDE_PROC_H
+#define __WINE_DDE_PROC_H
+#include <setjmp.h>
+#include "wintypes.h"
+#include "windows.h"
+#define DDE_PROCS 64
+#define DDE_WINDOWS 64
+struct _dde_proc {
+ int msg; /* message queue for this process */
+ int shmid; /* first shared memory block id. */
+ int sem; /* semaphore for fragment allocation */
+ int pid;
+} ;
+typedef struct _dde_proc *dde_proc;
+
+extern sigjmp_buf env_wait_x;
+enum stop_wait_op { /* The action to be taken upon SIGUSR2 */
+ CONT, /* Don't do anything */
+ STOP_WAIT_ACK, /* Use siglongjmp to stop wait_ack() */
+ STOP_WAIT_X /* siglongjmp to stop MSG_WaitXEvent() */
+};
+
+typedef struct {
+ WORD proc_idx; /* index into wine's process table */
+ HWND wnd; /* Window on the local proccess */
+} WND_DATA;
+extern enum stop_wait_op stop_wait_op;
+extern int had_SIGUSR2;
+
+extern int curr_proc_idx;
+void stop_wait(int a); /* signal handler for SIGUSR2
+ (interrupts "select" system call) */
+void dde_proc_init(dde_proc proc); /* init proc array */
+void dde_proc_done(dde_proc proc); /* delete a proc entry */
+void dde_proc_refresh(dde_proc proc); /* delete entry, if old junk */
+void dde_proc_add(dde_proc proc); /* Add current proc to proc array */
+void dde_msg_setup(int *msg_ptr);
+int dde_reschedule();
+void dde_wnd_setup(); /* setup Data structure of DDE windows */
+
+/* Send ack. to hnd indicating that posted/sent msg. got to destination*/
+void dde_proc_send_ack(HWND wnd, BOOL val);
+BOOL DDE_PostMessage( MSG *msg);
+BOOL DDE_SendMessage( MSG *msg);
+int DDE_GetRemoteMessage();
+void DDE_DestroyWindow(HWND hwnd); /* delete DDE info regarding hwnd */
+void DDE_TestDDE(HWND hwnd); /* do we have dde handling in the window ?*/
+#endif /* __WINE_DDE_PROC_H */
diff --git a/include/debug.h b/include/debug.h
index d728531..8d74615 100644
--- a/include/debug.h
+++ b/include/debug.h
@@ -17,6 +17,7 @@
#ifdef DEBUG_NONE_EXT
#undef DEBUG_ACCEL
+#undef DEBUG_ATOM
#undef DEBUG_BITBLT
#undef DEBUG_BITMAP
#undef DEBUG_CARET
@@ -29,6 +30,7 @@
#undef DEBUG_COMM
#undef DEBUG_CURSOR
#undef DEBUG_DC
+#undef DEBUG_DDE
#undef DEBUG_DIALOG
#undef DEBUG_DLL
#undef DEBUG_DOSFS
@@ -77,6 +79,9 @@
#undef DEBUG_SCROLL
#undef DEBUG_SELECTOR
#undef DEBUG_SELECTORS
+#undef DEBUG_SEM
+#undef DEBUG_SHM
+#undef DEBUG_SPY
#undef DEBUG_STRESS
#undef DEBUG_SYSCOLOR
#undef DEBUG_TASK
@@ -90,6 +95,7 @@
#ifdef DEBUG_ALL_EXT
#define DEBUG_ACCEL
+#define DEBUG_ATOM
#define DEBUG_BITBLT
#define DEBUG_BITMAP
#define DEBUG_CARET
@@ -102,6 +108,7 @@
#define DEBUG_COMM
#define DEBUG_CURSOR
#define DEBUG_DC
+#define DEBUG_DDE
#define DEBUG_DIALOG
#define DEBUG_DLL
#define DEBUG_DOSFS
@@ -150,6 +157,9 @@
#define DEBUG_SCROLL
#define DEBUG_SELECTOR
#define DEBUG_SELECTORS
+#define DEBUG_SEM
+#define DEBUG_SHM
+#define DEBUG_SPY
#define DEBUG_STRESS
#define DEBUG_SYSCOLOR
#define DEBUG_TASK
@@ -169,6 +179,11 @@
#else
0,
#endif
+#ifdef DEBUG_ATOM
+ 1,
+#else
+ 0,
+#endif
#ifdef DEBUG_BITBLT
1,
#else
@@ -229,6 +244,11 @@
#else
0,
#endif
+#ifdef DEBUG_DDE
+ 1,
+#else
+ 0,
+#endif
#ifdef DEBUG_DIALOG
1,
#else
@@ -469,6 +489,21 @@
#else
0,
#endif
+#ifdef DEBUG_SEM
+ 1,
+#else
+ 0,
+#endif
+#ifdef DEBUG_SHM
+ 1,
+#else
+ 0,
+#endif
+#ifdef DEBUG_SPY
+ 1,
+#else
+ 0,
+#endif
#ifdef DEBUG_STRESS
1,
#else
@@ -535,8 +570,21 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_bitblt if(!debug_msg_enabled[1]) ; else fprintf
-#define debugging_bitblt debug_msg_enabled[1]
+#define dprintf_atom if(!debug_msg_enabled[1]) ; else fprintf
+#define debugging_atom debug_msg_enabled[1]
+#else
+#ifdef DEBUG_ATOM
+#define dprintf_atom fprintf
+#define debugging_atom 1
+#else
+#define dprintf_atom while(0) fprintf
+#define debugging_atom 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_bitblt if(!debug_msg_enabled[2]) ; else fprintf
+#define debugging_bitblt debug_msg_enabled[2]
#else
#ifdef DEBUG_BITBLT
#define dprintf_bitblt fprintf
@@ -548,8 +596,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_bitmap if(!debug_msg_enabled[2]) ; else fprintf
-#define debugging_bitmap debug_msg_enabled[2]
+#define dprintf_bitmap if(!debug_msg_enabled[3]) ; else fprintf
+#define debugging_bitmap debug_msg_enabled[3]
#else
#ifdef DEBUG_BITMAP
#define dprintf_bitmap fprintf
@@ -561,8 +609,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_caret if(!debug_msg_enabled[3]) ; else fprintf
-#define debugging_caret debug_msg_enabled[3]
+#define dprintf_caret if(!debug_msg_enabled[4]) ; else fprintf
+#define debugging_caret debug_msg_enabled[4]
#else
#ifdef DEBUG_CARET
#define dprintf_caret fprintf
@@ -574,8 +622,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_catch if(!debug_msg_enabled[4]) ; else fprintf
-#define debugging_catch debug_msg_enabled[4]
+#define dprintf_catch if(!debug_msg_enabled[5]) ; else fprintf
+#define debugging_catch debug_msg_enabled[5]
#else
#ifdef DEBUG_CATCH
#define dprintf_catch fprintf
@@ -587,8 +635,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_cdaudio if(!debug_msg_enabled[5]) ; else fprintf
-#define debugging_cdaudio debug_msg_enabled[5]
+#define dprintf_cdaudio if(!debug_msg_enabled[6]) ; else fprintf
+#define debugging_cdaudio debug_msg_enabled[6]
#else
#ifdef DEBUG_CDAUDIO
#define dprintf_cdaudio fprintf
@@ -600,8 +648,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_class if(!debug_msg_enabled[6]) ; else fprintf
-#define debugging_class debug_msg_enabled[6]
+#define dprintf_class if(!debug_msg_enabled[7]) ; else fprintf
+#define debugging_class debug_msg_enabled[7]
#else
#ifdef DEBUG_CLASS
#define dprintf_class fprintf
@@ -613,8 +661,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_clipboard if(!debug_msg_enabled[7]) ; else fprintf
-#define debugging_clipboard debug_msg_enabled[7]
+#define dprintf_clipboard if(!debug_msg_enabled[8]) ; else fprintf
+#define debugging_clipboard debug_msg_enabled[8]
#else
#ifdef DEBUG_CLIPBOARD
#define dprintf_clipboard fprintf
@@ -626,8 +674,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_clipping if(!debug_msg_enabled[8]) ; else fprintf
-#define debugging_clipping debug_msg_enabled[8]
+#define dprintf_clipping if(!debug_msg_enabled[9]) ; else fprintf
+#define debugging_clipping debug_msg_enabled[9]
#else
#ifdef DEBUG_CLIPPING
#define dprintf_clipping fprintf
@@ -639,8 +687,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_combo if(!debug_msg_enabled[9]) ; else fprintf
-#define debugging_combo debug_msg_enabled[9]
+#define dprintf_combo if(!debug_msg_enabled[10]) ; else fprintf
+#define debugging_combo debug_msg_enabled[10]
#else
#ifdef DEBUG_COMBO
#define dprintf_combo fprintf
@@ -652,8 +700,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_comm if(!debug_msg_enabled[10]) ; else fprintf
-#define debugging_comm debug_msg_enabled[10]
+#define dprintf_comm if(!debug_msg_enabled[11]) ; else fprintf
+#define debugging_comm debug_msg_enabled[11]
#else
#ifdef DEBUG_COMM
#define dprintf_comm fprintf
@@ -665,8 +713,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_cursor if(!debug_msg_enabled[11]) ; else fprintf
-#define debugging_cursor debug_msg_enabled[11]
+#define dprintf_cursor if(!debug_msg_enabled[12]) ; else fprintf
+#define debugging_cursor debug_msg_enabled[12]
#else
#ifdef DEBUG_CURSOR
#define dprintf_cursor fprintf
@@ -678,8 +726,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_dc if(!debug_msg_enabled[12]) ; else fprintf
-#define debugging_dc debug_msg_enabled[12]
+#define dprintf_dc if(!debug_msg_enabled[13]) ; else fprintf
+#define debugging_dc debug_msg_enabled[13]
#else
#ifdef DEBUG_DC
#define dprintf_dc fprintf
@@ -691,8 +739,21 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_dialog if(!debug_msg_enabled[13]) ; else fprintf
-#define debugging_dialog debug_msg_enabled[13]
+#define dprintf_dde if(!debug_msg_enabled[14]) ; else fprintf
+#define debugging_dde debug_msg_enabled[14]
+#else
+#ifdef DEBUG_DDE
+#define dprintf_dde fprintf
+#define debugging_dde 1
+#else
+#define dprintf_dde while(0) fprintf
+#define debugging_dde 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_dialog if(!debug_msg_enabled[15]) ; else fprintf
+#define debugging_dialog debug_msg_enabled[15]
#else
#ifdef DEBUG_DIALOG
#define dprintf_dialog fprintf
@@ -704,8 +765,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_dll if(!debug_msg_enabled[14]) ; else fprintf
-#define debugging_dll debug_msg_enabled[14]
+#define dprintf_dll if(!debug_msg_enabled[16]) ; else fprintf
+#define debugging_dll debug_msg_enabled[16]
#else
#ifdef DEBUG_DLL
#define dprintf_dll fprintf
@@ -717,8 +778,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_dosfs if(!debug_msg_enabled[15]) ; else fprintf
-#define debugging_dosfs debug_msg_enabled[15]
+#define dprintf_dosfs if(!debug_msg_enabled[17]) ; else fprintf
+#define debugging_dosfs debug_msg_enabled[17]
#else
#ifdef DEBUG_DOSFS
#define dprintf_dosfs fprintf
@@ -730,8 +791,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_driver if(!debug_msg_enabled[16]) ; else fprintf
-#define debugging_driver debug_msg_enabled[16]
+#define dprintf_driver if(!debug_msg_enabled[18]) ; else fprintf
+#define debugging_driver debug_msg_enabled[18]
#else
#ifdef DEBUG_DRIVER
#define dprintf_driver fprintf
@@ -743,8 +804,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_edit if(!debug_msg_enabled[17]) ; else fprintf
-#define debugging_edit debug_msg_enabled[17]
+#define dprintf_edit if(!debug_msg_enabled[19]) ; else fprintf
+#define debugging_edit debug_msg_enabled[19]
#else
#ifdef DEBUG_EDIT
#define dprintf_edit fprintf
@@ -756,8 +817,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_enum if(!debug_msg_enabled[18]) ; else fprintf
-#define debugging_enum debug_msg_enabled[18]
+#define dprintf_enum if(!debug_msg_enabled[20]) ; else fprintf
+#define debugging_enum debug_msg_enabled[20]
#else
#ifdef DEBUG_ENUM
#define dprintf_enum fprintf
@@ -769,8 +830,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_event if(!debug_msg_enabled[19]) ; else fprintf
-#define debugging_event debug_msg_enabled[19]
+#define dprintf_event if(!debug_msg_enabled[21]) ; else fprintf
+#define debugging_event debug_msg_enabled[21]
#else
#ifdef DEBUG_EVENT
#define dprintf_event fprintf
@@ -782,8 +843,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_exec if(!debug_msg_enabled[20]) ; else fprintf
-#define debugging_exec debug_msg_enabled[20]
+#define dprintf_exec if(!debug_msg_enabled[22]) ; else fprintf
+#define debugging_exec debug_msg_enabled[22]
#else
#ifdef DEBUG_EXEC
#define dprintf_exec fprintf
@@ -795,8 +856,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_file if(!debug_msg_enabled[21]) ; else fprintf
-#define debugging_file debug_msg_enabled[21]
+#define dprintf_file if(!debug_msg_enabled[23]) ; else fprintf
+#define debugging_file debug_msg_enabled[23]
#else
#ifdef DEBUG_FILE
#define dprintf_file fprintf
@@ -808,8 +869,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_fixup if(!debug_msg_enabled[22]) ; else fprintf
-#define debugging_fixup debug_msg_enabled[22]
+#define dprintf_fixup if(!debug_msg_enabled[24]) ; else fprintf
+#define debugging_fixup debug_msg_enabled[24]
#else
#ifdef DEBUG_FIXUP
#define dprintf_fixup fprintf
@@ -821,8 +882,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_font if(!debug_msg_enabled[23]) ; else fprintf
-#define debugging_font debug_msg_enabled[23]
+#define dprintf_font if(!debug_msg_enabled[25]) ; else fprintf
+#define debugging_font debug_msg_enabled[25]
#else
#ifdef DEBUG_FONT
#define dprintf_font fprintf
@@ -834,8 +895,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_gdi if(!debug_msg_enabled[24]) ; else fprintf
-#define debugging_gdi debug_msg_enabled[24]
+#define dprintf_gdi if(!debug_msg_enabled[26]) ; else fprintf
+#define debugging_gdi debug_msg_enabled[26]
#else
#ifdef DEBUG_GDI
#define dprintf_gdi fprintf
@@ -847,8 +908,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_global if(!debug_msg_enabled[25]) ; else fprintf
-#define debugging_global debug_msg_enabled[25]
+#define dprintf_global if(!debug_msg_enabled[27]) ; else fprintf
+#define debugging_global debug_msg_enabled[27]
#else
#ifdef DEBUG_GLOBAL
#define dprintf_global fprintf
@@ -860,8 +921,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_graphics if(!debug_msg_enabled[26]) ; else fprintf
-#define debugging_graphics debug_msg_enabled[26]
+#define dprintf_graphics if(!debug_msg_enabled[28]) ; else fprintf
+#define debugging_graphics debug_msg_enabled[28]
#else
#ifdef DEBUG_GRAPHICS
#define dprintf_graphics fprintf
@@ -873,8 +934,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_icon if(!debug_msg_enabled[27]) ; else fprintf
-#define debugging_icon debug_msg_enabled[27]
+#define dprintf_icon if(!debug_msg_enabled[29]) ; else fprintf
+#define debugging_icon debug_msg_enabled[29]
#else
#ifdef DEBUG_ICON
#define dprintf_icon fprintf
@@ -886,8 +947,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_int if(!debug_msg_enabled[28]) ; else fprintf
-#define debugging_int debug_msg_enabled[28]
+#define dprintf_int if(!debug_msg_enabled[30]) ; else fprintf
+#define debugging_int debug_msg_enabled[30]
#else
#ifdef DEBUG_INT
#define dprintf_int fprintf
@@ -899,8 +960,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_key if(!debug_msg_enabled[29]) ; else fprintf
-#define debugging_key debug_msg_enabled[29]
+#define dprintf_key if(!debug_msg_enabled[31]) ; else fprintf
+#define debugging_key debug_msg_enabled[31]
#else
#ifdef DEBUG_KEY
#define dprintf_key fprintf
@@ -912,8 +973,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_keyboard if(!debug_msg_enabled[30]) ; else fprintf
-#define debugging_keyboard debug_msg_enabled[30]
+#define dprintf_keyboard if(!debug_msg_enabled[32]) ; else fprintf
+#define debugging_keyboard debug_msg_enabled[32]
#else
#ifdef DEBUG_KEYBOARD
#define dprintf_keyboard fprintf
@@ -925,8 +986,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_ldt if(!debug_msg_enabled[31]) ; else fprintf
-#define debugging_ldt debug_msg_enabled[31]
+#define dprintf_ldt if(!debug_msg_enabled[33]) ; else fprintf
+#define debugging_ldt debug_msg_enabled[33]
#else
#ifdef DEBUG_LDT
#define dprintf_ldt fprintf
@@ -938,8 +999,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_listbox if(!debug_msg_enabled[32]) ; else fprintf
-#define debugging_listbox debug_msg_enabled[32]
+#define dprintf_listbox if(!debug_msg_enabled[34]) ; else fprintf
+#define debugging_listbox debug_msg_enabled[34]
#else
#ifdef DEBUG_LISTBOX
#define dprintf_listbox fprintf
@@ -951,8 +1012,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_local if(!debug_msg_enabled[33]) ; else fprintf
-#define debugging_local debug_msg_enabled[33]
+#define dprintf_local if(!debug_msg_enabled[35]) ; else fprintf
+#define debugging_local debug_msg_enabled[35]
#else
#ifdef DEBUG_LOCAL
#define dprintf_local fprintf
@@ -964,8 +1025,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_malloc if(!debug_msg_enabled[34]) ; else fprintf
-#define debugging_malloc debug_msg_enabled[34]
+#define dprintf_malloc if(!debug_msg_enabled[36]) ; else fprintf
+#define debugging_malloc debug_msg_enabled[36]
#else
#ifdef DEBUG_MALLOC
#define dprintf_malloc fprintf
@@ -977,8 +1038,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_mci if(!debug_msg_enabled[35]) ; else fprintf
-#define debugging_mci debug_msg_enabled[35]
+#define dprintf_mci if(!debug_msg_enabled[37]) ; else fprintf
+#define debugging_mci debug_msg_enabled[37]
#else
#ifdef DEBUG_MCI
#define dprintf_mci fprintf
@@ -990,8 +1051,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_mcianim if(!debug_msg_enabled[36]) ; else fprintf
-#define debugging_mcianim debug_msg_enabled[36]
+#define dprintf_mcianim if(!debug_msg_enabled[38]) ; else fprintf
+#define debugging_mcianim debug_msg_enabled[38]
#else
#ifdef DEBUG_MCIANIM
#define dprintf_mcianim fprintf
@@ -1003,8 +1064,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_mciwave if(!debug_msg_enabled[37]) ; else fprintf
-#define debugging_mciwave debug_msg_enabled[37]
+#define dprintf_mciwave if(!debug_msg_enabled[39]) ; else fprintf
+#define debugging_mciwave debug_msg_enabled[39]
#else
#ifdef DEBUG_MCIWAVE
#define dprintf_mciwave fprintf
@@ -1016,8 +1077,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_mdi if(!debug_msg_enabled[38]) ; else fprintf
-#define debugging_mdi debug_msg_enabled[38]
+#define dprintf_mdi if(!debug_msg_enabled[40]) ; else fprintf
+#define debugging_mdi debug_msg_enabled[40]
#else
#ifdef DEBUG_MDI
#define dprintf_mdi fprintf
@@ -1029,8 +1090,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_menu if(!debug_msg_enabled[39]) ; else fprintf
-#define debugging_menu debug_msg_enabled[39]
+#define dprintf_menu if(!debug_msg_enabled[41]) ; else fprintf
+#define debugging_menu debug_msg_enabled[41]
#else
#ifdef DEBUG_MENU
#define dprintf_menu fprintf
@@ -1042,8 +1103,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_menucalc if(!debug_msg_enabled[40]) ; else fprintf
-#define debugging_menucalc debug_msg_enabled[40]
+#define dprintf_menucalc if(!debug_msg_enabled[42]) ; else fprintf
+#define debugging_menucalc debug_msg_enabled[42]
#else
#ifdef DEBUG_MENUCALC
#define dprintf_menucalc fprintf
@@ -1055,8 +1116,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_message if(!debug_msg_enabled[41]) ; else fprintf
-#define debugging_message debug_msg_enabled[41]
+#define dprintf_message if(!debug_msg_enabled[43]) ; else fprintf
+#define debugging_message debug_msg_enabled[43]
#else
#ifdef DEBUG_MESSAGE
#define dprintf_message fprintf
@@ -1068,8 +1129,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_metafile if(!debug_msg_enabled[42]) ; else fprintf
-#define debugging_metafile debug_msg_enabled[42]
+#define dprintf_metafile if(!debug_msg_enabled[44]) ; else fprintf
+#define debugging_metafile debug_msg_enabled[44]
#else
#ifdef DEBUG_METAFILE
#define dprintf_metafile fprintf
@@ -1081,8 +1142,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_midi if(!debug_msg_enabled[43]) ; else fprintf
-#define debugging_midi debug_msg_enabled[43]
+#define dprintf_midi if(!debug_msg_enabled[45]) ; else fprintf
+#define debugging_midi debug_msg_enabled[45]
#else
#ifdef DEBUG_MIDI
#define dprintf_midi fprintf
@@ -1094,8 +1155,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_mmio if(!debug_msg_enabled[44]) ; else fprintf
-#define debugging_mmio debug_msg_enabled[44]
+#define dprintf_mmio if(!debug_msg_enabled[46]) ; else fprintf
+#define debugging_mmio debug_msg_enabled[46]
#else
#ifdef DEBUG_MMIO
#define dprintf_mmio fprintf
@@ -1107,8 +1168,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_mmsys if(!debug_msg_enabled[45]) ; else fprintf
-#define debugging_mmsys debug_msg_enabled[45]
+#define dprintf_mmsys if(!debug_msg_enabled[47]) ; else fprintf
+#define debugging_mmsys debug_msg_enabled[47]
#else
#ifdef DEBUG_MMSYS
#define dprintf_mmsys fprintf
@@ -1120,8 +1181,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_mmtime if(!debug_msg_enabled[46]) ; else fprintf
-#define debugging_mmtime debug_msg_enabled[46]
+#define dprintf_mmtime if(!debug_msg_enabled[48]) ; else fprintf
+#define debugging_mmtime debug_msg_enabled[48]
#else
#ifdef DEBUG_MMTIME
#define dprintf_mmtime fprintf
@@ -1133,8 +1194,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_module if(!debug_msg_enabled[47]) ; else fprintf
-#define debugging_module debug_msg_enabled[47]
+#define dprintf_module if(!debug_msg_enabled[49]) ; else fprintf
+#define debugging_module debug_msg_enabled[49]
#else
#ifdef DEBUG_MODULE
#define dprintf_module fprintf
@@ -1146,8 +1207,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_msg if(!debug_msg_enabled[48]) ; else fprintf
-#define debugging_msg debug_msg_enabled[48]
+#define dprintf_msg if(!debug_msg_enabled[50]) ; else fprintf
+#define debugging_msg debug_msg_enabled[50]
#else
#ifdef DEBUG_MSG
#define dprintf_msg fprintf
@@ -1159,8 +1220,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_nonclient if(!debug_msg_enabled[49]) ; else fprintf
-#define debugging_nonclient debug_msg_enabled[49]
+#define dprintf_nonclient if(!debug_msg_enabled[51]) ; else fprintf
+#define debugging_nonclient debug_msg_enabled[51]
#else
#ifdef DEBUG_NONCLIENT
#define dprintf_nonclient fprintf
@@ -1172,8 +1233,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_ole if(!debug_msg_enabled[50]) ; else fprintf
-#define debugging_ole debug_msg_enabled[50]
+#define dprintf_ole if(!debug_msg_enabled[52]) ; else fprintf
+#define debugging_ole debug_msg_enabled[52]
#else
#ifdef DEBUG_OLE
#define dprintf_ole fprintf
@@ -1185,8 +1246,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_palette if(!debug_msg_enabled[51]) ; else fprintf
-#define debugging_palette debug_msg_enabled[51]
+#define dprintf_palette if(!debug_msg_enabled[53]) ; else fprintf
+#define debugging_palette debug_msg_enabled[53]
#else
#ifdef DEBUG_PALETTE
#define dprintf_palette fprintf
@@ -1198,8 +1259,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_profile if(!debug_msg_enabled[52]) ; else fprintf
-#define debugging_profile debug_msg_enabled[52]
+#define dprintf_profile if(!debug_msg_enabled[54]) ; else fprintf
+#define debugging_profile debug_msg_enabled[54]
#else
#ifdef DEBUG_PROFILE
#define dprintf_profile fprintf
@@ -1211,8 +1272,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_prop if(!debug_msg_enabled[53]) ; else fprintf
-#define debugging_prop debug_msg_enabled[53]
+#define dprintf_prop if(!debug_msg_enabled[55]) ; else fprintf
+#define debugging_prop debug_msg_enabled[55]
#else
#ifdef DEBUG_PROP
#define dprintf_prop fprintf
@@ -1224,8 +1285,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_reg if(!debug_msg_enabled[54]) ; else fprintf
-#define debugging_reg debug_msg_enabled[54]
+#define dprintf_reg if(!debug_msg_enabled[56]) ; else fprintf
+#define debugging_reg debug_msg_enabled[56]
#else
#ifdef DEBUG_REG
#define dprintf_reg fprintf
@@ -1237,8 +1298,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_region if(!debug_msg_enabled[55]) ; else fprintf
-#define debugging_region debug_msg_enabled[55]
+#define dprintf_region if(!debug_msg_enabled[57]) ; else fprintf
+#define debugging_region debug_msg_enabled[57]
#else
#ifdef DEBUG_REGION
#define dprintf_region fprintf
@@ -1250,8 +1311,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_relay if(!debug_msg_enabled[56]) ; else fprintf
-#define debugging_relay debug_msg_enabled[56]
+#define dprintf_relay if(!debug_msg_enabled[58]) ; else fprintf
+#define debugging_relay debug_msg_enabled[58]
#else
#ifdef DEBUG_RELAY
#define dprintf_relay fprintf
@@ -1263,8 +1324,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_resource if(!debug_msg_enabled[57]) ; else fprintf
-#define debugging_resource debug_msg_enabled[57]
+#define dprintf_resource if(!debug_msg_enabled[59]) ; else fprintf
+#define debugging_resource debug_msg_enabled[59]
#else
#ifdef DEBUG_RESOURCE
#define dprintf_resource fprintf
@@ -1276,8 +1337,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_scroll if(!debug_msg_enabled[58]) ; else fprintf
-#define debugging_scroll debug_msg_enabled[58]
+#define dprintf_scroll if(!debug_msg_enabled[60]) ; else fprintf
+#define debugging_scroll debug_msg_enabled[60]
#else
#ifdef DEBUG_SCROLL
#define dprintf_scroll fprintf
@@ -1289,8 +1350,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_selector if(!debug_msg_enabled[59]) ; else fprintf
-#define debugging_selector debug_msg_enabled[59]
+#define dprintf_selector if(!debug_msg_enabled[61]) ; else fprintf
+#define debugging_selector debug_msg_enabled[61]
#else
#ifdef DEBUG_SELECTOR
#define dprintf_selector fprintf
@@ -1302,8 +1363,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_selectors if(!debug_msg_enabled[60]) ; else fprintf
-#define debugging_selectors debug_msg_enabled[60]
+#define dprintf_selectors if(!debug_msg_enabled[62]) ; else fprintf
+#define debugging_selectors debug_msg_enabled[62]
#else
#ifdef DEBUG_SELECTORS
#define dprintf_selectors fprintf
@@ -1315,8 +1376,47 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_stress if(!debug_msg_enabled[61]) ; else fprintf
-#define debugging_stress debug_msg_enabled[61]
+#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
+#define debugging_sem 1
+#else
+#define dprintf_sem while(0) fprintf
+#define debugging_sem 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#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
+#define debugging_shm 1
+#else
+#define dprintf_shm while(0) fprintf
+#define debugging_shm 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_spy if(!debug_msg_enabled[65]) ; else fprintf
+#define debugging_spy debug_msg_enabled[65]
+#else
+#ifdef DEBUG_SPY
+#define dprintf_spy fprintf
+#define debugging_spy 1
+#else
+#define dprintf_spy while(0) fprintf
+#define debugging_spy 0
+#endif
+#endif
+
+#ifdef DEBUG_RUNTIME
+#define dprintf_stress if(!debug_msg_enabled[66]) ; else fprintf
+#define debugging_stress debug_msg_enabled[66]
#else
#ifdef DEBUG_STRESS
#define dprintf_stress fprintf
@@ -1328,8 +1428,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_syscolor if(!debug_msg_enabled[62]) ; else fprintf
-#define debugging_syscolor debug_msg_enabled[62]
+#define dprintf_syscolor if(!debug_msg_enabled[67]) ; else fprintf
+#define debugging_syscolor debug_msg_enabled[67]
#else
#ifdef DEBUG_SYSCOLOR
#define dprintf_syscolor fprintf
@@ -1341,8 +1441,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_task if(!debug_msg_enabled[63]) ; else fprintf
-#define debugging_task debug_msg_enabled[63]
+#define dprintf_task if(!debug_msg_enabled[68]) ; else fprintf
+#define debugging_task debug_msg_enabled[68]
#else
#ifdef DEBUG_TASK
#define dprintf_task fprintf
@@ -1354,8 +1454,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_text if(!debug_msg_enabled[64]) ; else fprintf
-#define debugging_text debug_msg_enabled[64]
+#define dprintf_text if(!debug_msg_enabled[69]) ; else fprintf
+#define debugging_text debug_msg_enabled[69]
#else
#ifdef DEBUG_TEXT
#define dprintf_text fprintf
@@ -1367,8 +1467,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_timer if(!debug_msg_enabled[65]) ; else fprintf
-#define debugging_timer debug_msg_enabled[65]
+#define dprintf_timer if(!debug_msg_enabled[70]) ; else fprintf
+#define debugging_timer debug_msg_enabled[70]
#else
#ifdef DEBUG_TIMER
#define dprintf_timer fprintf
@@ -1380,8 +1480,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_toolhelp if(!debug_msg_enabled[66]) ; else fprintf
-#define debugging_toolhelp debug_msg_enabled[66]
+#define dprintf_toolhelp if(!debug_msg_enabled[71]) ; else fprintf
+#define debugging_toolhelp debug_msg_enabled[71]
#else
#ifdef DEBUG_TOOLHELP
#define dprintf_toolhelp fprintf
@@ -1393,8 +1493,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_utility if(!debug_msg_enabled[67]) ; else fprintf
-#define debugging_utility debug_msg_enabled[67]
+#define dprintf_utility if(!debug_msg_enabled[72]) ; else fprintf
+#define debugging_utility debug_msg_enabled[72]
#else
#ifdef DEBUG_UTILITY
#define dprintf_utility fprintf
@@ -1406,8 +1506,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_win if(!debug_msg_enabled[68]) ; else fprintf
-#define debugging_win debug_msg_enabled[68]
+#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
@@ -1419,8 +1519,8 @@
#endif
#ifdef DEBUG_RUNTIME
-#define dprintf_winsock if(!debug_msg_enabled[69]) ; else fprintf
-#define debugging_winsock debug_msg_enabled[69]
+#define dprintf_winsock if(!debug_msg_enabled[74]) ; else fprintf
+#define debugging_winsock debug_msg_enabled[74]
#else
#ifdef DEBUG_WINSOCK
#define dprintf_winsock fprintf
@@ -1436,6 +1536,7 @@
#ifdef DEBUG_DEFINE_VARIABLES
static char *debug_msg_name[] = {
"accel",
+ "atom",
"bitblt",
"bitmap",
"caret",
@@ -1448,6 +1549,7 @@
"comm",
"cursor",
"dc",
+ "dde",
"dialog",
"dll",
"dosfs",
@@ -1496,6 +1598,9 @@
"scroll",
"selector",
"selectors",
+ "sem",
+ "shm",
+ "spy",
"stress",
"syscolor",
"task",
diff --git a/include/dos_fs.h b/include/dos_fs.h
index 01a458c..a6a91a3 100644
--- a/include/dos_fs.h
+++ b/include/dos_fs.h
@@ -10,10 +10,9 @@
extern void DOS_SetDefaultDrive(int drive);
extern void ToUnix(char *s);
extern void ToDos(char *s);
-extern void ChopOffSlash(char *string);
extern int DOS_DisableDrive(int drive);
extern int DOS_EnableDrive(int drive);
-extern char *DOS_GetUnixFileName(char *dosfilename);
+extern char *DOS_GetUnixFileName(const char *dosfilename);
extern char *DOS_GetDosFileName(char *unixfilename);
extern char *DOS_GetCurrentDir(int drive);
extern int DOS_ChangeDir(int drive, char *dirname);
@@ -29,8 +28,6 @@
extern struct dosdirent *DOS_opendir(char *dosdirname);
extern struct dosdirent *DOS_readdir(struct dosdirent *de);
extern void DOS_closedir(struct dosdirent *de);
-extern void DOS_ExpandToFullPath(char *filename, int drive);
-extern void DOS_ExpandToFullUnixPath(char *filename);
extern char *DOS_GetRedirectedDir(int drive);
extern void errno_to_doserr(void);
diff --git a/include/global.h b/include/global.h
index dd912ce..6ea7b40 100644
--- a/include/global.h
+++ b/include/global.h
@@ -9,9 +9,17 @@
#include "wintypes.h"
+typedef struct
+{
+ HGLOBAL handle;
+ WORD sel;
+ int shmid;
+} SHMDATA;
+
extern HGLOBAL GLOBAL_CreateBlock( WORD flags, void *ptr, DWORD size,
HGLOBAL hOwner, BOOL isCode,
- BOOL is32Bit, BOOL isReadOnly );
+ BOOL is32Bit, BOOL isReadOnly,
+ SHMDATA *shmdata);
extern BOOL GLOBAL_FreeBlock( HGLOBAL handle );
extern HGLOBAL GLOBAL_Alloc( WORD flags, DWORD size, HGLOBAL hOwner,
BOOL isCode, BOOL is32Bit, BOOL isReadOnly );
diff --git a/include/ldt.h b/include/ldt.h
index 6e7c853..76f9ca0 100644
--- a/include/ldt.h
+++ b/include/ldt.h
@@ -44,13 +44,13 @@
extern ldt_copy_entry ldt_copy[LDT_SIZE];
-#define __AHSHIFT 3
+#define __AHSHIFT 3 /* don't change! */
#define __AHINCR (1 << __AHSHIFT)
#ifndef WINELIB
#define SELECTOR_TO_ENTRY(sel) (((int)(sel) & 0xffff) >> __AHSHIFT)
#define ENTRY_TO_SELECTOR(i) ((i) ? (((int)(i) << __AHSHIFT) | 7) : 0)
-#define IS_LDT_ENTRY_FREE(i) (!(ldt_copy[(i)].base || ldt_copy[(i)].limit))
+#define IS_LDT_ENTRY_FREE(i) (!(ldt_flags_copy[(i)] & LDT_FLAGS_ALLOCATED))
#define IS_SELECTOR_FREE(sel) (IS_LDT_ENTRY_FREE(SELECTOR_TO_ENTRY(sel)))
#define GET_SEL_BASE(sel) (ldt_copy[SELECTOR_TO_ENTRY(sel)].base)
#define GET_SEL_LIMIT(sel) (ldt_copy[SELECTOR_TO_ENTRY(sel)].limit)
@@ -59,6 +59,7 @@
#define SELECTOR_TO_ENTRY(sel) error.error
#define ENTRY_TO_SELECTOR(i) error.error
#define IS_LDT_ENTRY_FREE(i) error.error
+#define IS_SELECTOR_FREE(sel) error.error
#define GET_SEL_BASE(sel) error.error
#define GET_SEL_LIMIT(sel) error.error
#endif
@@ -83,6 +84,7 @@
#define LDT_FLAGS_EXECONLY 0x04 /* Segment is execute-only (code) */
#define LDT_FLAGS_32BIT 0x08 /* Segment is 32-bit (code or stack) */
#define LDT_FLAGS_BIG 0x10 /* Segment is big (limit is in pages) */
+#define LDT_FLAGS_ALLOCATED 0x80 /* Segment is allocated (no longer free) */
#define GET_SEL_FLAGS(sel) (ldt_flags_copy[SELECTOR_TO_ENTRY(sel)])
diff --git a/include/miscemu.h b/include/miscemu.h
index e979ff1..2507a80 100644
--- a/include/miscemu.h
+++ b/include/miscemu.h
@@ -4,31 +4,10 @@
#include "wintypes.h"
#include "wine.h"
-extern BOOL INSTR_HandleInstruction( struct sigcontext_struct *context );
+extern BOOL INSTR_EmulateInstruction( struct sigcontext_struct *context );
-extern int do_int10(struct sigcontext_struct *);
-extern int do_int13(struct sigcontext_struct *);
-extern int do_int15(struct sigcontext_struct *);
-extern int do_int16(struct sigcontext_struct *);
-extern int do_int1a(struct sigcontext_struct *);
-extern int do_int21(struct sigcontext_struct *);
-extern int do_int25(struct sigcontext_struct *);
-extern int do_int26(struct sigcontext_struct *);
-extern int do_int2a(struct sigcontext_struct *);
-extern int do_int2f(struct sigcontext_struct *);
-extern int do_int31(struct sigcontext_struct *);
-extern int do_int5c(struct sigcontext_struct *);
-
-extern void inportb( struct sigcontext_struct *context );
-extern void inport( struct sigcontext_struct *context, int long_op );
-extern void outportb( struct sigcontext_struct *context );
-extern void outport( struct sigcontext_struct *context, int long_op );
-extern void inportb_abs( struct sigcontext_struct *context);
-extern void inport_abs( struct sigcontext_struct *context, int long_op );
-extern void outportb_abs( struct sigcontext_struct *context );
-extern void outport_abs( struct sigcontext_struct *context, int long_op );
-
-extern void IntBarf(int i, struct sigcontext_struct *context);
+extern DWORD inport( int port, int count );
+extern void outport( int port, int count, DWORD value );
extern BOOL INT_Init(void);
extern SEGPTR INT_GetHandler( BYTE intnum );
@@ -36,4 +15,11 @@
extern void INT21_Init(void);
+
+#define INT_BARF(num) \
+ fprintf( stderr, "int%x: unknown/not implemented parameters:\n" \
+ "int%x: AX %04x, BX %04x, CX %04x, DX %04x, " \
+ "SI %04x, DI %04x, DS %04x, ES %04x\n", \
+ (num), (num), AX, BX, CX, DX, SI, DI, DS, ES )
+
#endif /* __WINE_MISCEMU_H */
diff --git a/include/msdos.h b/include/msdos.h
index 1a94bca..636ae22 100644
--- a/include/msdos.h
+++ b/include/msdos.h
@@ -40,21 +40,23 @@
extern struct DosDeviceStruct COM[MAX_PORTS];
extern struct DosDeviceStruct LPT[MAX_PORTS];
-#define setword(a,b) *(BYTE*)(a) = (b) & 0xff; \
- *((BYTE*)((a)+1)) = ((b)>>8) & 0xff;
+#define setword(a,b) do { *(BYTE*)(a) = (b) & 0xff; \
+ *((BYTE*)((a)+1)) = ((b)>>8) & 0xff;\
+ } while(0)
-#define setdword(a,b) *(BYTE*)(a) = (b) & 0xff; \
- *((BYTE*)(a)+1) = ((b)>>8) & 0xff; \
- *((BYTE*)(a)+2) = ((b)>>16) & 0xff; \
- *((BYTE*)(a)+3) = ((b)>>24) & 0xff;
+#define setdword(a,b) do { *(BYTE*)(a) = (b) & 0xff; \
+ *((BYTE*)(a)+1) = ((b)>>8) & 0xff; \
+ *((BYTE*)(a)+2) = ((b)>>16) & 0xff; \
+ *((BYTE*)(a)+3) = ((b)>>24) & 0xff; \
+ } while(0)
-#define getword(a) (WORD) *(BYTE*)(a) + \
- (*((BYTE*)(a) + 1) << 8)
+#define getword(a) ( (WORD)*(BYTE*)(a) + \
+ ((WORD)*((BYTE*)(a) + 1) << 8))
-#define getdword(a) (DWORD) (*(BYTE*)(a) + \
- (*((BYTE*)(a) + 1) << 8) + \
- (*((BYTE*)(a) + 2) << 16) + \
- (*((BYTE*)(a) + 3) << 24))
+#define getdword(a) ( (DWORD)*(BYTE*)(a) + \
+ (DWORD)(*((BYTE*)(a) + 1) << 8) + \
+ (DWORD)(*((BYTE*)(a) + 2) << 16) + \
+ (DWORD)(*((BYTE*)(a) + 3) << 24))
/* dos file attributes */
diff --git a/include/options.h b/include/options.h
index 80b8a73..a19ae57 100644
--- a/include/options.h
+++ b/include/options.h
@@ -9,7 +9,6 @@
struct options
{
- char * spyFilename;
char * desktopGeometry; /* NULL when no desktop */
char * programName; /* To use when loading resources */
int usePrivateMap;
diff --git a/include/pe_image.h b/include/pe_image.h
index d7fceee..169ddd8 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
+extern void *RELAY32_GetEntryPoint(char *dll_name, char *item, int hint);
extern int PE_unloadImage(struct w_files *wpnt);
extern int PE_StartProgram(struct w_files *wpnt);
extern void PE_InitDLL(struct w_files *wpnt);
diff --git a/include/prototypes.h b/include/prototypes.h
deleted file mode 100644
index 5c8d64d..0000000
--- a/include/prototypes.h
+++ /dev/null
@@ -1,33 +0,0 @@
-/* $Id: prototypes.h,v 1.3 1993/07/04 04:04:21 root Exp root $
- */
-/*
- * Copyright Robert J. Amstadt, 1993
- */
-#ifndef _WINE_PROTOTYPES_H
-#define _WINE_PROTOTYPES_H
-
-#include <sys/types.h>
-
-#include "windows.h"
-
-#ifndef WINELIB
-
-/* loader/resource.c */
-
-extern HBITMAP ConvertCoreBitmap( HDC hdc, BITMAPCOREHEADER * image );
-extern HBITMAP ConvertInfoBitmap( HDC hdc, BITMAPINFO * image );
-
-/* loader/signal.c */
-
-extern void init_wine_signals(void);
-
-/* loader/wine.c */
-
-extern int _WinMain(int argc, char **argv);
-
-/* misc/spy.c */
-
-extern void SpyInit(void);
-
-#endif /* WINELIB */
-#endif /* _WINE_PROTOTYPES_H */
diff --git a/include/region.h b/include/region.h
index 7d87c13..e8f6261 100644
--- a/include/region.h
+++ b/include/region.h
@@ -18,5 +18,6 @@
extern BOOL REGION_DeleteObject( HRGN hrgn, RGNOBJ * obj );
+extern BOOL REGION_FrameRgn(HRGN dest,HRGN src,int x,int y);
#endif /* __WINE_REGION_H */
diff --git a/include/registers.h b/include/registers.h
index 4af04bc..e6253f3 100644
--- a/include/registers.h
+++ b/include/registers.h
@@ -37,6 +37,14 @@
#define ES (context->sc_es)
#define SS (context->sc_ss)
+#ifdef linux
+#define FS (context->sc_fs)
+#define GS (context->sc_gs)
+#else /* FIXME: are fs and gs supported under *BSD? */
+#define FS 0
+#define GS 0
+#endif
+
#ifndef __FreeBSD__
#define EFL (context->sc_eflags)
#define FL (*(WORD*)&context->sc_eflags)
diff --git a/include/resource.h b/include/resource.h
index d389ce4..6a5eeb2 100644
--- a/include/resource.h
+++ b/include/resource.h
@@ -17,6 +17,9 @@
extern HGLOBAL NE_AllocResource( HMODULE hModule, HRSRC hRsrc, DWORD size );
extern HGLOBAL NE_LoadResource( HMODULE hModule, HRSRC hRsrc );
+extern HBITMAP ConvertCoreBitmap( HDC hdc, BITMAPCOREHEADER * image );
+extern HBITMAP ConvertInfoBitmap( HDC hdc, BITMAPINFO * image );
+
struct ResourceTable
{
int id,type;
diff --git a/include/shell.h b/include/shell.h
index 6a30151..b222e7e 100644
--- a/include/shell.h
+++ b/include/shell.h
@@ -2,6 +2,8 @@
* Shell Library definitions
*/
+extern INT ShellAbout(HWND hWnd, LPCSTR szApp, LPCSTR szOtherStuff, HICON hIcon);
+
#define ERROR_SUCCESS 0L
#define ERROR_BADDB 1L
#define ERROR_BADKEY 2L
diff --git a/include/shm_block.h b/include/shm_block.h
new file mode 100644
index 0000000..c19c84f
--- /dev/null
+++ b/include/shm_block.h
@@ -0,0 +1,86 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: shm_block.ch
+ * Purpose: treat a shared memory block.
+ ***************************************************************************
+ */
+#ifndef __WINE_SHM_BLOCK_H
+#define __WINE_SHM_BLOCK_H
+#include <sys/shm.h>
+#include "wintypes.h"
+#define SEGSIZE 0x10000 /* 64 */
+#define SHM_GRANULARITY SEGSIZE
+#define SHM_MINBLOCK SHM_GRANULARITY
+#define SHM_MAXBLOCK (((int)SHMMAX/(int)SHM_GRANULARITY)* \
+ SHM_GRANULARITY)
+#define PTR2REL(block,ptr) (REL_PTR) ( (char *) (ptr) - (char *) (block) )
+#define REL2PTR(block,rel) (void *) ( (char *) (block) + (rel) )
+
+typedef int REL_PTR;
+
+/* full info for each shm block. */
+struct shm_block {
+ /* private */
+ int next_shm_id; /* IPC shm ID (for initial linking) */
+
+ /* public (read only) */
+ int size; /* size of the shm block */
+ int free; /* how much of the block is free */
+ int proc_idx; /* The index of the owner */
+
+ /* public - writable for shm_fragment */
+ REL_PTR free_list; /* first item in the free list */
+};
+
+/* used for mapping local attachments */
+struct local_shm_map {
+ struct local_shm_map *next;
+ int shm_id;
+ int proc_idx;
+
+ /* 32 bit pointer to the beginning of the block */
+ struct shm_block *ptr;
+};
+extern struct local_shm_map *shm_map;
+void shm_setup_block(struct shm_block *block, REL_PTR first, int size);
+
+/* shm_create_block:
+ * allocate and setup a new block:
+ * first - first non header byte.
+ * size - block size (in bytes).
+ * shm_id- IPC shared memory ID.
+ */
+struct shm_block *shm_create_block(REL_PTR first, int size, int *shm_id);
+
+/* shm_locate_block:
+ * locate existing block according to shm_id,
+ * Attach the block if needed. Assume the shm_id is wine's
+ * Set selectors also.
+ */
+struct shm_block *shm_locate_block(int shm_id, struct local_shm_map *map);
+
+/* shm_locate_attached_block:
+ * locate existing block according to shm_id,
+ * Blocks are never attached.
+ * if proc_idx is not NULL, it will be set to owner's index.
+ * map - localy mapped info about block may be NULL;
+ */
+struct shm_block *shm_locate_attached_block(int shm_id,
+ struct local_shm_map *map);
+
+/* shm_attach_block: attach existing shm block, setup selectors
+ * shm_id - id of the block to attach.
+ * proc_idx - if not -1, puts this data into local mapping
+ * map - localy mapped info about this block. (may be NULL)
+ * NOTE: same block can be attached many times
+ */
+struct shm_block *shm_attach_block(int shm_id, int proc_idx,
+ struct local_shm_map *map);
+
+/* delete chain of shm blocks (pointing to each other */
+void shm_delete_chain(int *shmid);
+
+#endif /* __WINE_SHM_BLOCK_H */
diff --git a/include/shm_fragment.h b/include/shm_fragment.h
new file mode 100644
index 0000000..81a4b66
--- /dev/null
+++ b/include/shm_fragment.h
@@ -0,0 +1,47 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: shm_fragment.h
+ * Purpose: Data fragments and free list items. Allocate and free blocks.
+ ***************************************************************************
+ */
+#ifndef __WINE_SHM_FRAGMENT_H
+#define __WINE_SHM_FRAGMENT_H
+
+#include "shm_block.h"
+
+#define NIL ((int) 0)
+/* memory fragment: used or free (when free - it's an item of "free list",
+ * when allocated it contains the data, and it's size)
+ */
+struct shm_fragment {
+ int size; /* fragment's size */
+
+ /* The type of info depends on fragment's status (free/allocated) */
+ union info {
+ int next; /* next free fragment */
+ char data[1]; /* the data */
+ } info;
+};
+
+/* setup first item in the free list */
+void shm_FragmentInit(struct shm_block *block,REL_PTR first,int size);
+
+/* allocate shm fragment. return: offset to data in fragment, or NULL */
+REL_PTR shm_FragmentAlloc(struct shm_block *block, int size);
+
+/* like shm_FragmentAlloc, returns pointer instead of offset */
+char *shm_FragPtrAlloc(struct shm_block *block, int size);
+
+/* free shm fragment - according to offset */
+void shm_FragmentFree(struct shm_block *block, int ofs);
+
+/* free shm fragment - according to pointer */
+void shm_FragPtrFree(struct shm_block *block, void *ptr);
+
+/* This is used for debugging only */
+void shm_print_free_list(struct shm_block *block);
+
+#endif /* __WINE_SHM_FRAGMENT_H */
diff --git a/include/shm_main_blk.h b/include/shm_main_blk.h
new file mode 100644
index 0000000..e3f9e5b
--- /dev/null
+++ b/include/shm_main_blk.h
@@ -0,0 +1,55 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: shm_main_blk.h
+ * Purpose: Main Wine's shared memory block
+ ***************************************************************************
+ */
+#ifndef __WINE_SHM_MAIN_BLK_H
+#define __WINE_SHM_MAIN_BLK_H
+#include <sys/shm.h>
+#include "shm_block.h"
+#include "shm_semaph.h"
+#include "dde_proc.h"
+#include "dde_atom.h"
+#include "dde_mem.h"
+/*****************************************************************************
+ *
+ * main block object
+ *
+ *****************************************************************************
+ */
+#ifndef __inline__
+#ifndef __GNUC__
+#define __inline__
+#endif /* __GNUC__ */
+#endif /* __inline__ */
+
+#define DDE_HANDLES_BIT_ARRAY_SIZE (DDE_HANDLES/sizeof(int)/8)
+
+#define SHM_MAXID SHMSEG /* maximum shm blocks (Wine's limit) */
+struct shm_main_block {
+ /* NOTE: "block" declaration must be the first */
+ struct shm_block block;
+ char magic[64]; /* magic string to identify the block */
+ int build_lock; /* =1 when data structure not stable yet */
+ shm_sem sem; /* semaphores for main_block integrity */
+ struct _dde_proc proc[DDE_PROCS]; /* information about processes */
+ REL_PTR atoms[DDE_ATOMS]; /* relative reference to global atoms */
+ /* Translation from global window handles to local handles */
+ WND_DATA windows[DDE_WINDOWS];
+ DDE_HWND handles[DDE_HANDLES];
+ /* bit array stating if a handle is free (bit=0), LSB in */
+ /* free_handles[0] refers handle 0x8000, the MSB refers 0x801F */
+ unsigned free_handles[DDE_HANDLES_BIT_ARRAY_SIZE];
+};
+extern struct shm_main_block *main_block;
+int shm_init(void);
+void shm_delete_all(int shm_id);
+void DDE_mem_init();
+int DDE_no_of_attached();
+#define DDE_IPC_init() ( (main_block==NULL) ? (DDE_mem_init()) : 0 )
+
+#endif /* __WINE_SHM_MAIN_BLK_H */
diff --git a/include/shm_semaph.h b/include/shm_semaph.h
new file mode 100644
index 0000000..5562446
--- /dev/null
+++ b/include/shm_semaph.h
@@ -0,0 +1,24 @@
+/***************************************************************************
+ * Copyright 1995, Technion, Israel Institute of Technology
+ * Electrical Eng, Software Lab.
+ * Author: Michael Veksler.
+ ***************************************************************************
+ * File: shm_semaph.h
+ * Purpose: Handle semaphores for shared memory operations.
+ ***************************************************************************
+ */
+
+#ifndef __WINE_SHM_SEMAPH_H
+#define __WINE_SHM_SEMAPH_H
+/* IMPORTANT: If possible, restrict usage of these functions. */
+
+typedef int shm_sem;
+
+void shm_read_wait(shm_sem semid);
+void shm_write_wait(shm_sem semid);
+void shm_write_signal(shm_sem semid);
+void shm_read_signal(shm_sem semid);
+void shm_sem_init(shm_sem *semptr);
+void shm_sem_done(shm_sem *semptr);
+
+#endif /* __WINE_SHM_SEMAPH_H */
diff --git a/include/stackframe.h b/include/stackframe.h
index ee0195b..81fcf8e 100644
--- a/include/stackframe.h
+++ b/include/stackframe.h
@@ -19,6 +19,7 @@
{
WORD saved_ss; /* saved previous 16-bit stack */
WORD saved_sp;
+ WORD es;
WORD ds; /* 16-bit ds */
DWORD entry_point WINE_PACKED; /* entry point to call */
WORD ordinal_number; /* ordinal number of entry point */
diff --git a/include/stddebug.h b/include/stddebug.h
index b568098..b262020 100644
--- a/include/stddebug.h
+++ b/include/stddebug.h
@@ -77,6 +77,7 @@
#ifdef DEBUG_NONE
#undef DEBUG_ACCEL
+#undef DEBUG_ATOM
#undef DEBUG_BITBLT
#undef DEBUG_BITMAP
#undef DEBUG_CARET
@@ -89,6 +90,7 @@
#undef DEBUG_COMM
#undef DEBUG_CURSOR
#undef DEBUG_DC
+#undef DEBUG_DDE
#undef DEBUG_DIALOG
#undef DEBUG_DLL
#undef DEBUG_DOSFS
@@ -137,6 +139,9 @@
#undef DEBUG_SCROLL
#undef DEBUG_SELECTOR
#undef DEBUG_SELECTORS
+#undef DEBUG_SEM
+#undef DEBUG_SHM
+#undef DEBUG_SPY
#undef DEBUG_STRESS
#undef DEBUG_SYSCOLOR
#undef DEBUG_TASK
@@ -150,6 +155,7 @@
#ifdef DEBUG_ALL
#define DEBUG_ACCEL
+#define DEBUG_ATOM
#define DEBUG_BITBLT
#define DEBUG_BITMAP
#define DEBUG_CARET
@@ -162,6 +168,7 @@
#define DEBUG_COMM
#define DEBUG_CURSOR
#define DEBUG_DC
+#define DEBUG_DDE
#define DEBUG_DIALOG
#define DEBUG_DLL
#define DEBUG_DOSFS
@@ -210,6 +217,9 @@
#define DEBUG_SCROLL
#define DEBUG_SELECTOR
#define DEBUG_SELECTORS
+#define DEBUG_SEM
+#define DEBUG_SHM
+#define DEBUG_SPY
#define DEBUG_STRESS
#define DEBUG_SYSCOLOR
#define DEBUG_TASK
diff --git a/include/task.h b/include/task.h
index cbd28ae..dd7e9e8 100644
--- a/include/task.h
+++ b/include/task.h
@@ -13,6 +13,10 @@
#pragma pack(1)
#endif
+
+extern BOOL TASK_Init(void);
+extern void TASK_KillCurrentTask( int exitCode );
+
/* Process database (i.e. a normal DOS PSP) */
typedef struct
diff --git a/include/user.h b/include/user.h
index f749007..dc5c68a 100644
--- a/include/user.h
+++ b/include/user.h
@@ -10,6 +10,7 @@
#include "ldt.h"
#include "local.h"
+extern BOOL USER_HeapInit(void);
/* USER local heap */
#ifdef WINELIB
diff --git a/include/win.h b/include/win.h
index e1d1efe..2322240 100644
--- a/include/win.h
+++ b/include/win.h
@@ -74,6 +74,7 @@
extern HWND WIN_FindWinToRepaint( HWND hwnd );
extern void WIN_SendParentNotify( HWND hwnd, WORD event, LONG lParam );
extern BOOL WIN_CreateDesktopWindow(void);
+extern HWND WIN_GetTopParent( HWND hwnd );
extern Display * display;
extern Screen * screen;
diff --git a/include/windows.h b/include/windows.h
index 0389728..eb2f910 100644
--- a/include/windows.h
+++ b/include/windows.h
@@ -2455,6 +2455,8 @@
Fa(DWORD,GetDCOrg,HDC,a)
Fa(DWORD,GetFreeSpace,WORD,a)
Fa(DWORD,GetHeapSpaces,HMODULE,a)
+Fa(DWORD,GetSelectorBase,WORD,a)
+Fa(DWORD,GetSelectorLimit,WORD,a)
Fa(DWORD,GetViewportExt,HDC,a)
Fa(DWORD,GetViewportOrg,HDC,a)
Fa(DWORD,GetWindowExt,HDC,a)
@@ -2524,10 +2526,11 @@
Fa(LPSTR,LockResource,HANDLE,a)
Fa(SEGPTR,AnsiNext,SEGPTR,a)
Fa(SEGPTR,GlobalWire,HGLOBAL,a)
-Fa(SEGPTR,WIN16_LockResource,HANDLE,a)
Fa(SEGPTR,WIN16_GlobalLock,HGLOBAL,a)
+Fa(SEGPTR,WIN16_LockResource,HANDLE,a)
Fa(UINT,GDIRealizePalette,HDC,a)
Fa(UINT,RealizePalette,HDC,a)
+Fa(WORD,AllocCStoDSAlias,WORD,a)
Fa(WORD,AllocDStoCSAlias,WORD,a)
Fa(WORD,AllocSelector,WORD,a)
Fa(WORD,AllocSelectorArray,WORD,a)
@@ -2716,6 +2719,8 @@
Fb(WORD,SetPolyFillMode,HDC,a,WORD,b)
Fb(WORD,SetROP2,HDC,a,WORD,b)
Fb(WORD,SetRelAbs,HDC,a,WORD,b)
+Fb(WORD,SetSelectorBase,WORD,a,DWORD,b)
+Fb(WORD,SetSelectorLimit,WORD,a,DWORD,b)
Fb(WORD,SetStretchBltMode,HDC,a,WORD,b)
Fb(WORD,SetSystemPaletteUse,HDC,a,WORD,b)
Fb(WORD,SetTextAlign,HDC,a,WORD,b)
@@ -2818,12 +2823,12 @@
Fc(INT,OpenFile,LPSTR,a,LPOFSTRUCT,b,WORD,c)
Fc(INT,_lread,INT,a,LPSTR,b,WORD,c)
Fc(INT,_lwrite,INT,a,LPCSTR,b,WORD,c)
-Fc(LONG,_hread,INT,a,LPSTR,b,LONG,c)
-Fc(LONG,_hwrite,INT,a,LPCSTR,b,LONG,c)
Fc(LONG,GetBitmapBits,HBITMAP,a,LONG,b,LPSTR,c)
Fc(LONG,SetBitmapBits,HBITMAP,a,LONG,b,LPSTR,c)
Fc(LONG,SetClassLong,HWND,a,short,b,LONG,c)
Fc(LONG,SetWindowLong,HWND,a,short,b,LONG,c)
+Fc(LONG,_hread,INT,a,LPSTR,b,LONG,c)
+Fc(LONG,_hwrite,INT,a,LPCSTR,b,LONG,c)
Fc(LONG,_llseek,INT,a,LONG,b,INT,c)
Fc(SEGPTR,lstrcpyn,SEGPTR,a,SEGPTR,b,WORD,c)
Fc(WORD,GetAtomName,ATOM,a,LPSTR,b,short,c)
@@ -2831,6 +2836,7 @@
Fc(WORD,GetMenuState,HMENU,a,WORD,b,WORD,c)
Fc(WORD,GetProfileInt,LPSTR,a,LPSTR,b,int,c)
Fc(WORD,GlobalGetAtomName,ATOM,a,LPSTR,b,short,c)
+Fc(WORD,SelectorAccessRights,WORD,a,WORD,b,WORD,c)
Fc(WORD,SetClassWord,HWND,a,short,b,WORD,c)
Fc(WORD,SetWindowWord,HWND,a,short,b,WORD,c)
Fc(int,FillRect,HDC,a,LPRECT,b,HBRUSH,c)
diff --git a/include/wineopts.h b/include/wineopts.h
deleted file mode 100644
index 6f3e66b..0000000
--- a/include/wineopts.h
+++ /dev/null
@@ -1,11 +0,0 @@
-/* WINEOPTS.H
- */
-
-#ifndef WINEOPTS_H
-#define WINEOPTS_H
-
-#include <stdio.h>
-
-FILE *SpyFp;
-
-#endif /* WINEOPTS_H */
diff --git a/include/winsock.h b/include/winsock.h
index 2a2674b..a0450c2 100644
--- a/include/winsock.h
+++ b/include/winsock.h
@@ -7,13 +7,13 @@
#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
-#include <windows.h>
#include <sys/types.h>
#include <sys/time.h>
#include <fcntl.h>
#include <netdb.h>
#include <netinet/in.h>
#include <sys/socket.h>
+#include "windows.h"
/*
* The new type to be used in all