Release 950727
[wine] / include / module.h
1 /*
2  * Module definitions
3  *
4  * Copyright 1995 Alexandre Julliard
5  */
6
7 #ifndef _WINE_MODULE_H
8 #define _WINE_MODULE_H
9
10 #include "wintypes.h"
11
12 #ifndef WINELIB
13 #pragma pack(1)
14 #endif
15
16   /* In-memory module structure. See 'Windows Internals' p. 219 */
17 typedef struct
18 {
19     WORD    magic;            /* 'NE' signature */
20     WORD    count;            /* Usage count */
21     WORD    entry_table;      /* Near ptr to entry table */
22     WORD    next;             /* Selector to next module */
23     WORD    dgroup_entry;     /* Near ptr to segment entry for DGROUP */
24     WORD    fileinfo;         /* Near ptr to file info (LOADEDFILEINFO) */
25     WORD    flags;            /* Module flags */
26     WORD    dgroup;           /* Logical segment for DGROUP */
27     WORD    heap_size;        /* Initial heap size */
28     WORD    stack_size;       /* Initial stack size */
29     WORD    ip;               /* Initial ip */
30     WORD    cs;               /* Initial cs (logical segment) */
31     WORD    sp;               /* Initial stack pointer */
32     WORD    ss;               /* Initial ss (logical segment) */
33     WORD    seg_count;        /* Number of segments in segment table */
34     WORD    modref_count;     /* Number of module references */
35     WORD    nrname_size;      /* Size of non-resident names table */
36     WORD    seg_table;        /* Near ptr to segment table */
37     WORD    res_table;        /* Near ptr to resource table */
38     WORD    name_table;       /* Near ptr to resident names table */
39     WORD    modref_table;     /* Near ptr to module reference table */
40     WORD    import_table;     /* Near ptr to imported names table */
41     DWORD   nrname_fpos;      /* File offset of non-resident names table */
42     WORD    moveable_entries; /* Number of moveable entries in entry table */
43     WORD    alignment;        /* Alignment shift count */
44     WORD    truetype;         /* Set to 2 if TrueType font */
45     BYTE    os_flags;         /* Operating system flags */
46     BYTE    misc_flags;       /* Misc. flags */
47     HANDLE  dlls_to_init;     /* List of DLLs to initialize */
48     HANDLE  nrname_handle;    /* Handle to non-resident name table in memory */
49     WORD    min_swap_area;    /* Min. swap area size */
50     WORD    expected_version; /* Expected Windows version */
51 } NE_MODULE;
52
53   /* Loaded file info */
54 typedef struct
55 {
56     BYTE  length;       /* Length of the structure, not counting this byte */
57     BYTE  fixed_media;  /* File is on removable media */
58     WORD  error;        /* Error code (?) */
59     WORD  date;         /* File date in MS-DOS format */
60     WORD  time;         /* File time in MS-DOS format */
61     char  filename[1];  /* File name */
62 } LOADEDFILEINFO;
63
64   /* In-memory segment table */
65 typedef struct
66 {
67     WORD    filepos;   /* Position in file, in sectors */
68     WORD    size;      /* Segment size on disk */
69     WORD    flags;     /* Segment flags */
70     WORD    minsize;   /* Min. size of segment in memory */
71     WORD    selector;  /* Selector of segment in memory */
72 } SEGTABLEENTRY;
73
74   /* Parameters for LoadModule() */
75 typedef struct
76 {
77     HANDLE hEnvironment;  /* Environment segment */
78     SEGPTR cmdLine;       /* Command-line */
79     SEGPTR showCmd;       /* Code for ShowWindow() */
80     SEGPTR reserved;
81 } LOADPARAMS;
82
83 #define NE_SEG_TABLE(pModule) \
84     ((SEGTABLEENTRY *)((char *)(pModule) + (pModule)->seg_table))
85
86 #define NE_MODULE_TABLE(pModule) \
87     ((WORD *)((char *)(pModule) + (pModule)->modref_table))
88
89 #ifndef WINELIB
90 #pragma pack(4)
91 #endif
92
93 extern BOOL MODULE_Init(void);
94 extern int MODULE_OpenFile( HMODULE hModule );
95 extern LPSTR MODULE_GetModuleName( HMODULE hModule );
96 extern WORD MODULE_GetOrdinal( HMODULE hModule, char *name );
97 extern DWORD MODULE_GetEntryPoint( HMODULE hModule, WORD ordinal );
98 extern BOOL MODULE_SetEntryPoint( HMODULE hModule, WORD ordinal, WORD offset );
99 extern LPSTR MODULE_GetEntryPointName( HMODULE hModule, WORD ordinal );
100
101 extern BOOL NE_LoadSegment( HMODULE hModule, WORD segnum );
102 extern void NE_FixupPrologs( HMODULE hModule );
103 extern void NE_InitializeDLLs( HMODULE hModule );
104
105 #endif  /* _WINE_MODULE_H */