source: trunk/emx/include/sys/moddef.h

Last change on this file was 3703, checked in by bird, 14 years ago

moddef.h,emxbind,weakld: Expanded the symbol name fields in libmoddef so that we can parse def-files with long symbols before truncating them (weakld). References #37.

  • Property cvs2svn:cvs-rev set to 1.2
  • Property svn:eol-style set to native
File size: 5.8 KB
Line 
1/* sys/moddef.h (emx+gcc) */
2
3#ifndef _SYS_MODDEF_H
4#define _SYS_MODDEF_H
5
6#if defined (__cplusplus)
7extern "C" {
8#endif
9
10struct _md;
11
12#define _MDT_DEFAULT 0
13#define _MDT_WINDOWAPI 1
14#define _MDT_WINDOWCOMPAT 2
15#define _MDT_NOTWINDOWCOMPAT 3
16
17#define _MDIT_DEFAULT 0
18#define _MDIT_INSTANCE 1
19#define _MDIT_GLOBAL 2
20
21#define _MDS_ALIAS 0x000001
22#define _MDS_CONFORMING 0x000002
23#define _MDS_DISCARDABLE 0x000004
24#define _MDS_EXECUTEONLY 0x000008
25#define _MDS_EXECUTEREAD 0x000010
26#define _MDS_FIXED 0x000020
27#define _MDS_INVALID 0x000040
28#define _MDS_IOPL 0x000080
29#define _MDS_LOADONCALL 0x000100
30#define _MDS_MIXED1632 0x000200
31#define _MDS_MOVEABLE 0x000400
32#define _MDS_MULTIPLE 0x000800
33#define _MDS_NOIOPL 0x001000
34#define _MDS_NONCONFORMING 0x002000
35#define _MDS_NONDISCARDABLE 0x004000
36#define _MDS_NONE 0x008000
37#define _MDS_NONSHARED 0x010000
38#define _MDS_PRELOAD 0x020000
39#define _MDS_READONLY 0x040000
40#define _MDS_READWRITE 0x080000
41#define _MDS_SHARED 0x100000
42#define _MDS_SINGLE 0x200000
43
44#define _MDX_DEFAULT 0
45#define _MDX_UNKNOWN 1
46#define _MDX_OS2 2
47#define _MDX_WINDOWS 3
48
49#define _MDEP_ORDINAL 0x0001
50#define _MDEP_RESIDENTNAME 0x0002
51#define _MDEP_NONAME 0x0004
52#define _MDEP_NODATA 0x0008
53#define _MDEP_PWORDS 0x0010
54
55#define _MDIP_ORDINAL 0x0001
56
57typedef enum
58{
59 _MD_ALIAS, _MD_BASE, _MD_CLASS, _MD_CODE, _MD_CONFORMING,
60 _MD_CONTIGUOUS, _MD_DATA, _MD_DESCRIPTION, _MD_DEV386, _MD_DEVICE,
61 _MD_DISCARDABLE, _MD_DOS4, _MD_DYNAMIC, _MD_EXECUTEONLY,
62 _MD_EXECUTEREAD, _MD_EXETYPE, _MD_EXPANDDOWN, _MD_EXPORTS,
63 _MD_FIXED, _MD_HEAPSIZE, _MD_HUGE, _MD_IMPORTS, _MD_IMPURE,
64 _MD_INCLUDE, _MD_INITGLOBAL, _MD_INITINSTANCE, _MD_INVALID,
65 _MD_IOPL, _MD_LIBRARY, _MD_LOADONCALL, _MD_MAXVAL, _MD_MIXED1632,
66 _MD_MOVEABLE, _MD_MULTIPLE, _MD_NAME, _MD_NEWFILES, _MD_NODATA,
67 _MD_NOEXPANDDOWN, _MD_NOIOPL, _MD_NONAME, _MD_NONCONFORMING,
68 _MD_NONDISCARDABLE, _MD_NONE, _MD_NONPERMANENT, _MD_NONSHARED,
69 _MD_NOTWINDOWCOMPAT, _MD_OBJECTS, _MD_OLD, _MD_ORDER, _MD_OS2,
70 _MD_PERMANENT, _MD_PHYSICAL, _MD_PRELOAD, _MD_PRIVATE,
71 _MD_PRIVATELIB, _MD_PROTECT, _MD_PROTMODE, _MD_PURE, _MD_READONLY,
72 _MD_READWRITE, _MD_REALMODE, _MD_RESIDENT, _MD_RESIDENTNAME,
73 _MD_SEGMENTS, _MD_SHARED, _MD_SINGLE, _MD_STACKSIZE, _MD_STUB,
74 _MD_SWAPPABLE, _MD_TERMGLOBAL, _MD_TERMINSTANCE, _MD_UNKNOWN,
75 _MD_VIRTUAL, _MD_WINDOWAPI, _MD_WINDOWCOMPAT, _MD_WINDOWS,
76 /* The following tokens are no keywords: */
77 _MD_dot, _MD_at, _MD_equal, _MD_quote, _MD_number, _MD_word,
78 _MD_eof, _MD_ioerror, _MD_missingquote,
79 /* Special `token' for _md_parse() callback: */
80 _MD_parseerror
81} _md_token;
82
83typedef enum
84{
85 _MDE_IO_ERROR,
86 _MDE_MISSING_QUOTE,
87 _MDE_EMPTY,
88 _MDE_NAME_EXPECTED,
89 _MDE_STRING_EXPECTED,
90 _MDE_NUMBER_EXPECTED,
91 _MDE_DEVICE_EXPECTED,
92 _MDE_EQUAL_EXPECTED,
93 _MDE_DOT_EXPECTED,
94 _MDE_STRING_TOO_LONG,
95 _MDE_INVALID_ORDINAL,
96 _MDE_INVALID_STMT
97} _md_error;
98
99/** The maximum symbol name size (terminator included). */
100#define _MD_MAX_SYMBOL_SIZE 1536
101
102typedef struct
103{
104 unsigned line_number; /* Linenumber of the statement. */
105 union
106 {
107 struct
108 {
109 _md_error code;
110 _md_token stmt;
111 } error; /* Error */
112 struct
113 {
114 unsigned long addr;
115 } base; /* BASE */
116 struct
117 {
118 char string[256];
119 } descr; /* DESCRIPTION */
120 struct
121 {
122 char name[256];
123 } device; /* PHYSICAL DEVICE and VIRTUAL DEVICE */
124 struct
125 {
126 int type;
127 int minor_version;
128 int major_version;
129 } exetype; /* EXETYPE */
130 struct
131 {
132 char entryname[_MD_MAX_SYMBOL_SIZE];
133 char internalname[_MD_MAX_SYMBOL_SIZE];
134 int ordinal;
135 int pwords;
136 unsigned flags;
137 } export; /* EXPORTS */
138 struct
139 {
140 char entryname[_MD_MAX_SYMBOL_SIZE];
141 char internalname[_MD_MAX_SYMBOL_SIZE];
142 char modulename[256];
143 int ordinal;
144 unsigned flags;
145 } import; /* IMPORTS */
146 struct
147 {
148 unsigned long size;
149 int maxval;
150 } heapsize; /* HEAPSIZE */
151 struct
152 {
153 char name[256];
154 int init;
155 int term;
156 } library; /* LIBRARY */
157 struct
158 {
159 char name[256];
160 int pmtype;
161 int newfiles;
162 } name; /* NAME */
163 struct
164 {
165 char name[256];
166 } old; /* OLD */
167 struct
168 {
169 char segname[256];
170 char classname[256];
171 unsigned attr;
172 } segment; /* SEGMENTS, CODE, DATA */
173 struct
174 {
175 unsigned long size;
176 } stacksize; /* STACKSIZE */
177 struct
178 {
179 char name[256];
180 int none;
181 } stub; /* STUB */
182 }; /* nameless */
183} _md_stmt;
184
185
186long _md_get_linenumber (const struct _md *md);
187long _md_get_number (const struct _md *md);
188const char *_md_get_string (const struct _md *md);
189_md_token _md_get_token (const struct _md *md);
190
191_md_token _md_next_token (struct _md *md);
192
193int _md_close (struct _md *md);
194struct _md *_md_open (const char *fname);
195struct _md *_md_use_file (FILE *f);
196
197int _md_parse (struct _md *md,
198 int (*callback)(struct _md *md, const _md_stmt *stmt,
199 _md_token token, void *arg),
200 void *arg);
201
202const char *_md_errmsg (_md_error code);
203
204#if defined (__cplusplus)
205}
206#endif
207
208#endif /* not _SYS_MODDEF_H */
Note: See TracBrowser for help on using the repository browser.