Sat Apr 29 20:42:01 1995 Alexandre Julliard (julliard@sunsite.unc.edu) * [controls/static.c] Fixed painting of SS_*FRAME controls. * [if1632/callback.c] Pass the window instance as DS to the 16-bit window procedure. Rewrote Catch() and Throw() to make them work with multiple tasks. * [loader/main.c] New function MAIN_Init() to perform initializations before the first task is started instead of doing them in InitApp(). Temporary hack to command-line parsing to load one program per command-line argument, to make testing task-switching easier. * [loader/*.c] Reimplemented modules to use a Windows-compatible layout and to allow multiple tasks and multiple module instances. Not really finished yet. * [loader/task.c] [misc/exec.c] Reimplemented tasks to use a common address space, and implemented preliminary task-switching capabilities. * [memory/global.c] Fixed bug in GlobalNext(). * [misc/main.c] Updated the list of contributors. Let me know if I forgot someone. * [miscemu/int21.c] Use one DTA per task instead of a global one. * [objects/bitblt.c] Fixed bug in BitBlt() that could cause BadMatch errors. * [tools/build.c] Added new function type 'stub', that makes possible to export an unimplemented function by name as well as by ordinal. This will avoid loading errors for unimplemented functions. Generate an in-memory module layout for built-in DLLs so that the same code can be used for built-in and loaded modules. Changed relay code to make it unnecessary to save the value of the BP register. * [windows/message.c] Implemented multiple message queues and preliminary task-switching capabilities. Inter-task SendMessage() calls are not implemented yet and will probably cause crashes if used. * [windows/property.c] Reimplemented properties and allocate them on the USER heap. * [windows/win.c] Fixed bug in SetWindowWord(). Reimplemented EnumWindows() and EnumTaskWindows(). Tue Apr 18 09:48:38 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de> * [misc/main.c] GetSystemParametersInfo(): Additional action SPI_GETICONTITLEFONT. * [loader/resource.c] Removed the check for NE_SEGFLAGS_EXECUTEONLY, since it broke control.exe. Fixed icon loading. * [objects/font.c] [include/windows.h] Fixed a bug in InitFontsList() and worked on the EnumFonts() functions to make them comprehensible. * [controls/button.c] Fixed my previous patch to handle LBUTTONUP messages. Fri Apr 14 11:41:28 1995 Cameron Heide (heide@ee.ualberta.ca) * [misc/network.c, misc/dos_fs.c] Implemented WNetGetConnection. All that is currently supported are drives, for which the remote name is simply the redirected UNIX directory name. * [miscemu/int2?.c] More drive number validity checking. Wed Apr 12 11:28:37 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de> * [controls/listbox.c] Oops, my previous change to ListBoxDirectory broke the Borland file open dialog. Fixed. Mon Apr 10 23:17:12 1995 Martin von Loewis <loewis@informatik.hu-berlin.de> * [if1632/ole2nls.spec] [misc/ole2nls.c] [misc/Imakefile] New file ole2nls.c. Added stubs for GetUserDefaultLCID, GetSystemDefaultLCID, GetUserDefaultLangID, GetSystemDefaultLangID. Mon Apr 10 10:05:18 1995 Bernd Schmidt <crux@pool.informatik.rwth-aachen.de> * [memory/global.c] [memory/local.c] [include/windows.h] GlobalReAlloc(): If GMEM_MODIFY is set, don't resize the block. LocalReAlloc(): Same for LMEM_MODIFY. * [controls/listbox.c] Fixed a bug in ListBoxDirectory that prevented commdlg from working. Check for errors in some more places. * [if1632/gdi.spec] [if1632/user.spec] 16 bit callback functions should be passed as segptrs. * [include/dlls.h] [loader/ne_image.c] [loader/selector.c] [loader/library.c] Prevent a DLL from being initialized twice (Borlands Resource Workshop used to do this). Provide an additional flag for each w_file that indicates whether it's an EXE or a DLL, for combinations like pbrush.exe/.dll. * [controls/button.c] Handle LBUTTONUP messages even if the button no longer has the capture (for WinHelp). * [include/wintypes.h] FARPROC is now a segptr for the emulator and a function pointer for the library. * [misc/commdlg.c] [misc/commdlg.h] Cleaned the file dialogs up a little. They now work reasonably well, although there are still some problems (e.g. files are initially invisible). * [windows/class.c] [if1632/user.spec] [include/windows.h] GetClassInfo() must take a segptr, as it checks whether the highword is zero. GetClassName() called the wrong atom function. No surprise it didn't find anything. * [misc/lstr.c] AnsiToOem() and OemToAnsi() didn't terminate the strings. Fixed. Removed some warnings. * [if1632/relay.c] [if1632/ddeml.spec] [include/dlls.h] New spec file for the 3.1 DDEML DDL. * [controls/menu.c] Small fix to ChangeMenu - mask out the obsolete flags (MF_APPEND == MF_OWNERDRAW, this led to problems). It also had problems with the MF_BYPOSITION flag. * [windows/message.c] SendMessage(): call the WH_CALLWNDPROC hook function. This is rather ugly, I'm afraid. Windows probably passes a pointer to the 16 bit stack for speed reasons. * [windows/hook.c] [include/windows.h] Set/HookWindowsHook() shouldn't just call their *Ex counterparts, as they have slightly different semantics. MS Hearts now works somewhat, if you disable the new builtin DDEML. The graphics are completely messed up, though.
228 lines
6.2 KiB
C
228 lines
6.2 KiB
C
/* $Id: neexe.h,v 1.4 1993/07/04 04:04:21 root Exp root $
|
|
*/
|
|
/*
|
|
* Copyright Robert J. Amstadt, 1993
|
|
*/
|
|
#ifndef NEEXE_H
|
|
#define NEEXE_H
|
|
|
|
#include "wintypes.h"
|
|
|
|
/*
|
|
* Old MZ header for DOS programs. Actually just a couple of fields
|
|
* from it, so that we can find the start of the NE header.
|
|
*/
|
|
struct mz_header_s
|
|
{
|
|
WORD mz_magic; /* MZ Header signature */
|
|
BYTE dont_care[0x3a]; /* MZ Header stuff */
|
|
WORD ne_offset; /* Offset to extended header */
|
|
};
|
|
|
|
#define MZ_SIGNATURE ('M' | ('Z' << 8))
|
|
|
|
/*
|
|
* This is the Windows executable (NE) header.
|
|
*/
|
|
struct ne_header_s
|
|
{
|
|
WORD ne_magic; /* NE signature 'NE' */
|
|
BYTE linker_version; /* Linker version number */
|
|
BYTE linker_revision; /* Linker revision number */
|
|
WORD entry_tab_offset; /* Offset to entry table relative to NE */
|
|
WORD entry_tab_length; /* Length of entry table in bytes */
|
|
DWORD reserved1; /* Reserved by Microsoft */
|
|
WORD format_flags; /* Flags about segments in this file */
|
|
WORD auto_data_seg; /* Automatic data segment number */
|
|
WORD local_heap_length; /* Initial size of local heap */
|
|
WORD stack_length; /* Initial size of stack */
|
|
WORD ip; /* Initial IP */
|
|
WORD cs; /* Initial CS */
|
|
WORD sp; /* Initial SP */
|
|
WORD ss; /* Initial SS */
|
|
WORD n_segment_tab; /* # of entries in segment table */
|
|
WORD n_mod_ref_tab; /* # of entries in module reference tab.*/
|
|
WORD nrname_tab_length; /* Length of nonresident-name table */
|
|
WORD segment_tab_offset; /* Offset to segment table */
|
|
WORD resource_tab_offset;/* Offset to resource table */
|
|
WORD rname_tab_offset; /* Offset to resident-name table */
|
|
WORD moduleref_tab_offset;/* Offset to module reference table */
|
|
WORD iname_tab_offset; /* Offset to imported name table */
|
|
DWORD nrname_tab_offset; /* Offset to nonresident-name table */
|
|
WORD n_mov_entry_points; /* # of movable entry points */
|
|
WORD align_shift_count; /* Logical sector alignment shift count */
|
|
WORD n_resource_seg; /* # of resource segments */
|
|
BYTE operating_system; /* Flags indicating target OS */
|
|
BYTE additional_flags; /* Additional information flags */
|
|
WORD fastload_offset; /* Offset to fast load area */
|
|
WORD fastload_length; /* Length of fast load area */
|
|
WORD reserved2; /* Reserved by Microsoft */
|
|
WORD expect_version; /* Expected Windows version number */
|
|
};
|
|
|
|
#define NE_SIGNATURE ('N' | ('E' << 8))
|
|
#define PE_SIGNATURE ('P' | ('E' << 8))
|
|
|
|
/*
|
|
* NE Header FORMAT FLAGS
|
|
*/
|
|
#define NE_FFLAGS_SINGLEDATA 0x0001
|
|
#define NE_FFLAGS_MULTIPLEDATA 0x0002
|
|
#define NE_FFLAGS_SELFLOAD 0x0800
|
|
#define NE_FFLAGS_LINKERROR 0x2000
|
|
#define NE_FFLAGS_LIBMODULE 0x8000
|
|
|
|
/*
|
|
* NE Header OPERATING SYSTEM
|
|
*/
|
|
#define NE_OSFLAGS_UNKNOWN 0x01
|
|
#define NE_OSFLAGS_WINDOWS 0x04
|
|
|
|
/*
|
|
* NE Header ADDITIONAL FLAGS
|
|
*/
|
|
#define NE_AFLAGS_WIN2_PROTMODE 0x02
|
|
#define NE_AFLAGS_WIN2_PROFONTS 0x04
|
|
#define NE_AFLAGS_FASTLOAD 0x08
|
|
|
|
/*
|
|
* Segment table entry
|
|
*/
|
|
struct ne_segment_table_entry_s
|
|
{
|
|
WORD seg_data_offset; /* Sector offset of segment data */
|
|
WORD seg_data_length; /* Length of segment data */
|
|
WORD seg_flags; /* Flags associated with this segment */
|
|
WORD min_alloc; /* Minimum allocation size for this */
|
|
};
|
|
|
|
/*
|
|
* Segment Flags
|
|
*/
|
|
#define NE_SEGFLAGS_DATA 0x0001
|
|
#define NE_SEGFLAGS_ALLOCATED 0x0002
|
|
#define NE_SEGFLAGS_LOADED 0x0004
|
|
#define NE_SEGFLAGS_MOVEABLE 0x0010
|
|
#define NE_SEGFLAGS_SHAREABLE 0x0020
|
|
#define NE_SEGFLAGS_PRELOAD 0x0040
|
|
#define NE_SEGFLAGS_EXECUTEONLY 0x0080
|
|
#define NE_SEGFLAGS_READONLY 0x0080
|
|
#define NE_SEGFLAGS_RELOC_DATA 0x0100
|
|
#define NE_SEGFLAGS_DISCARDABLE 0x1000
|
|
|
|
/*
|
|
* Relocation table entry
|
|
*/
|
|
struct relocation_entry_s
|
|
{
|
|
BYTE address_type; /* Relocation address type */
|
|
BYTE relocation_type; /* Relocation type */
|
|
WORD offset; /* Offset in segment to fixup */
|
|
WORD target1; /* Target specification */
|
|
WORD target2; /* Target specification */
|
|
};
|
|
|
|
/*
|
|
* Relocation address types
|
|
*/
|
|
#define NE_RADDR_LOWBYTE 0
|
|
#define NE_RADDR_SELECTOR 2
|
|
#define NE_RADDR_POINTER32 3
|
|
#define NE_RADDR_OFFSET16 5
|
|
#define NE_RADDR_POINTER48 11
|
|
#define NE_RADDR_OFFSET32 13
|
|
|
|
/*
|
|
* Relocation types
|
|
*/
|
|
#define NE_RELTYPE_INTERNAL 0
|
|
#define NE_RELTYPE_ORDINAL 1
|
|
#define NE_RELTYPE_NAME 2
|
|
#define NE_RELTYPE_OSFIXUP 3
|
|
#define NE_RELFLAG_ADDITIVE 4
|
|
|
|
/*
|
|
* DOS PSP
|
|
*/
|
|
struct dos_psp_s
|
|
{
|
|
unsigned short pspInt20;
|
|
unsigned short pspNextParagraph;
|
|
unsigned char pspReserved1;
|
|
unsigned char pspDispatcher[5];
|
|
unsigned short pspTerminateVector[2];
|
|
unsigned short pspControlCVector[2];
|
|
unsigned short pspCritErrorVector[2];
|
|
unsigned short pspReserved2[11];
|
|
unsigned short pspEnvironment;
|
|
unsigned short pspReserved3[23];
|
|
unsigned char pspFCB_1[16];
|
|
unsigned char pspFCB_2[16];
|
|
unsigned char pspReserved4[4];
|
|
unsigned char pspCommandTailCount;
|
|
unsigned char pspCommandTail[128];
|
|
};
|
|
|
|
/*
|
|
* Entry table structures.
|
|
*/
|
|
struct entry_tab_header_s
|
|
{
|
|
unsigned char n_entries;
|
|
unsigned char seg_number;
|
|
};
|
|
|
|
struct entry_tab_movable_s
|
|
{
|
|
unsigned char flags;
|
|
unsigned char int3f[2];
|
|
unsigned char seg_number;
|
|
unsigned short offset;
|
|
};
|
|
|
|
struct entry_tab_fixed_s
|
|
{
|
|
unsigned char flags;
|
|
unsigned char offset[2];
|
|
};
|
|
|
|
/*
|
|
* Resource table structures.
|
|
*/
|
|
struct resource_nameinfo_s
|
|
{
|
|
unsigned short offset;
|
|
unsigned short length;
|
|
unsigned short flags;
|
|
unsigned short id;
|
|
unsigned short handle;
|
|
unsigned short usage;
|
|
};
|
|
|
|
struct resource_typeinfo_s
|
|
{
|
|
unsigned short type_id; /* Type identifier */
|
|
unsigned short count; /* Number of resources of this type */
|
|
unsigned long reserved;
|
|
/*
|
|
* Name info array.
|
|
*/
|
|
};
|
|
|
|
#define NE_RSCTYPE_ACCELERATOR 0x8009
|
|
#define NE_RSCTYPE_BITMAP 0x8002
|
|
#define NE_RSCTYPE_CURSOR 0x8001
|
|
#define NE_RSCTYPE_DIALOG 0x8005
|
|
#define NE_RSCTYPE_FONT 0x8008
|
|
#define NE_RSCTYPE_FONTDIR 0x8007
|
|
#define NE_RSCTYPE_GROUP_CURSOR 0x800c
|
|
#define NE_RSCTYPE_GROUP_ICON 0x800e
|
|
#define NE_RSCTYPE_ICON 0x8003
|
|
#define NE_RSCTYPE_MENU 0x8004
|
|
#define NE_RSCTYPE_RCDATA 0x800a
|
|
#define NE_RSCTYPE_STRING 0x8006
|
|
|
|
int load_typeinfo (int, struct resource_typeinfo_s *);
|
|
int load_nameinfo (int, struct resource_nameinfo_s *);
|
|
|
|
#endif /* NEEXE_H */
|