aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/eventcom.h386
-rw-r--r--mps/code/eventgen.h891
2 files changed, 380 insertions, 897 deletions
diff --git a/mps/code/eventcom.h b/mps/code/eventcom.h
index aa0dbb80882..7d372cdd47a 100644
--- a/mps/code/eventcom.h
+++ b/mps/code/eventcom.h
@@ -9,13 +9,12 @@
9#ifndef eventcom_h 9#ifndef eventcom_h
10#define eventcom_h 10#define eventcom_h
11 11
12/* #include "eventgen.h" later in the file */
13#include "mpmtypes.h" /* for Word */ 12#include "mpmtypes.h" /* for Word */
13#include "eventdef.h"
14 14
15 15
16/* Types for event fields */ 16/* Types for event fields */
17 17
18
19typedef Word EventType; 18typedef Word EventType;
20typedef size_t EventCode; 19typedef size_t EventCode;
21typedef Index EventKind; 20typedef Index EventKind;
@@ -34,15 +33,390 @@ typedef EventStringStruct *EventString;
34#define EventCodeMAX ((EventCode)0x0069) 33#define EventCodeMAX ((EventCode)0x0069)
35 34
36 35
37/* eventgen.h is just the automatically generated part of this file */ 36/* Event*Struct -- Event Structures
38#include "eventgen.h" 37 *
38 * Declare the structures that are used to encode events in the internal event
39 * buffers and on the binary telemetry output stream.
40 */
41
42/* Event field types -- similar to WriteF* */
43typedef void *EventFP;
44typedef Addr EventFA;
45typedef Word EventFW;
46typedef unsigned EventFU;
47typedef EventStringStruct EventFS;
48typedef double EventFD;
49
50/* Common prefix for all event structures */
51typedef struct EventAnyStruct {
52 Word code;
53 Word clock;
54} EventAnyStruct;
55
56#define EVENT_STRUCT(X, name, _code, always, kind, count, format) \
57 typedef struct Event##name##Struct { \
58 Word code; \
59 Word clock; \
60 EVENT_STRUCT_FIELDS_##count format \
61 } Event##name##Struct;
62
63#define EVENT_STRUCT_FIELDS_0()
64/* The following lines were generated with
65 python -c 'for i in range(1, 15): print "#define EVENT_STRUCT_FIELDS_%d(%s) %s" % (i, ", ".join(["p%s" % j for j in range(0, i)]), " ".join("EventF##p%d f%d;" % (j, j) for j in range(0,i)))'
66 */
67#define EVENT_STRUCT_FIELDS_1(p0) EventF##p0 f0;
68#define EVENT_STRUCT_FIELDS_2(p0, p1) EventF##p0 f0; EventF##p1 f1;
69#define EVENT_STRUCT_FIELDS_3(p0, p1, p2) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2;
70#define EVENT_STRUCT_FIELDS_4(p0, p1, p2, p3) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3;
71#define EVENT_STRUCT_FIELDS_5(p0, p1, p2, p3, p4) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4;
72#define EVENT_STRUCT_FIELDS_6(p0, p1, p2, p3, p4, p5) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5;
73#define EVENT_STRUCT_FIELDS_7(p0, p1, p2, p3, p4, p5, p6) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6;
74#define EVENT_STRUCT_FIELDS_8(p0, p1, p2, p3, p4, p5, p6, p7) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7;
75#define EVENT_STRUCT_FIELDS_9(p0, p1, p2, p3, p4, p5, p6, p7, p8) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8;
76#define EVENT_STRUCT_FIELDS_10(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9;
77#define EVENT_STRUCT_FIELDS_11(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10;
78#define EVENT_STRUCT_FIELDS_12(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11;
79#define EVENT_STRUCT_FIELDS_13(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; EventF##p12 f12;
80#define EVENT_STRUCT_FIELDS_14(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; EventF##p8 f8; EventF##p9 f9; EventF##p10 f10; EventF##p11 f11; EventF##p12 f12; EventF##p13 f13;
81
82EVENT_LIST(EVENT_STRUCT, X)
83
84
85/* Event -- event union type
86 *
87 * Event is the type of a pointer to EventUnion, which is a union of all
88 * event structures. This can be used as the type of any event, decoded
89 * by examining event->any.code.
90 */
91
92#define EVENT_UNION_MEMBER(X, name, code, always, kind, count, format) \
93 Event##name##Struct name;
94
95typedef union EventUnion {
96 EventAnyStruct any;
97 EVENT_LIST(EVENT_UNION_MEMBER, X)
98} EventUnion, *Event;
39 99
40 100
101/* EVENTn -- event emitting macros
102 *
103 * The macros EVENT0, EVENT1, etc. are used throughout the MPS to emit an
104 * event with parameters. They work by appending the event parameters to
105 * an event buffer, which is flushed to the telemetry output stream when
106 * full. EVENT2S is a special case that takes a variable length string.
107 */
108
41#ifdef EVENT 109#ifdef EVENT
42 110
43typedef EventUnion *Event; 111#define EVENT2S(name, p0, length, string) \
112 BEGIN \
113 size_t _string_len = (length); \
114 size_t size; \
115 AVER(_string_len < EventStringLengthMAX); \
116 size = offsetof(Event##name##Struct, f1.str) + _string_len; \
117 EVENT_BEGIN(name, size) \
118 _event->f0 = (p0); \
119 _event->f1.len = _string_len; \
120 mps_lib_memcpy(_event->f1.str, (string), _string_len); \
121 EVENT_END(name, size); \
122 END
123
124#define EVENT0(name) EVENT_BEGIN(name, sizeof(EventAnyStruct)) EVENT_END(name, sizeof(EventAnyStruct))
125/* The following lines were generated with
126 python -c 'for i in range(1,15): print "#define EVENT%d(name, %s) EVENT_BEGIN(name, sizeof(Event##name##Struct)) %s EVENT_END(name, sizeof(Event##name##Struct))" % (i, ", ".join(["p%d" % j for j in range(0, i)]), " ".join(["_event->f%d = (p%d);" % (j, j) for j in range(0, i)]))'
127 */
128#define EVENT1(name, p0) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); EVENT_END(name, sizeof(Event##name##Struct))
129#define EVENT2(name, p0, p1) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); EVENT_END(name, sizeof(Event##name##Struct))
130#define EVENT3(name, p0, p1, p2) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); EVENT_END(name, sizeof(Event##name##Struct))
131#define EVENT4(name, p0, p1, p2, p3) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); EVENT_END(name, sizeof(Event##name##Struct))
132#define EVENT5(name, p0, p1, p2, p3, p4) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); EVENT_END(name, sizeof(Event##name##Struct))
133#define EVENT6(name, p0, p1, p2, p3, p4, p5) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); EVENT_END(name, sizeof(Event##name##Struct))
134#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); EVENT_END(name, sizeof(Event##name##Struct))
135#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); EVENT_END(name, sizeof(Event##name##Struct))
136#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); EVENT_END(name, sizeof(Event##name##Struct))
137#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); EVENT_END(name, sizeof(Event##name##Struct))
138#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); EVENT_END(name, sizeof(Event##name##Struct))
139#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); _event->f11 = (p11); EVENT_END(name, sizeof(Event##name##Struct))
140#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); _event->f11 = (p11); _event->f12 = (p12); EVENT_END(name, sizeof(Event##name##Struct))
141#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); _event->f1 = (p1); _event->f2 = (p2); _event->f3 = (p3); _event->f4 = (p4); _event->f5 = (p5); _event->f6 = (p6); _event->f7 = (p7); _event->f8 = (p8); _event->f9 = (p9); _event->f10 = (p10); _event->f11 = (p11); _event->f12 = (p12); _event->f13 = (p13); EVENT_END(name, sizeof(Event##name##Struct))
142
143
144
145#define EVENT0_FIELD_PTR(name, event, i) NULL
146
147/*
148 for i in range(1,20): print "#define EVENT%d_FIELD_PTR(name, event, i) ( \\\n %s\\\n : NULL)\n" % (i, " \\\n : ".join(["((i) == %d) ? (void *)&((event)->name.f%d)" % (j, j) for j in range(0, i)]))
149 */
150
151#define EVENT1_FIELD_PTR(name, event, i) ( \
152 ((i) == 0) ? (void *)&((event)->name.f0)\
153 : NULL)
154
155#define EVENT2_FIELD_PTR(name, event, i) ( \
156 ((i) == 0) ? (void *)&((event)->name.f0) \
157 : ((i) == 1) ? (void *)&((event)->name.f1)\
158 : NULL)
159
160#define EVENT3_FIELD_PTR(name, event, i) ( \
161 ((i) == 0) ? (void *)&((event)->name.f0) \
162 : ((i) == 1) ? (void *)&((event)->name.f1) \
163 : ((i) == 2) ? (void *)&((event)->name.f2)\
164 : NULL)
165
166#define EVENT4_FIELD_PTR(name, event, i) ( \
167 ((i) == 0) ? (void *)&((event)->name.f0) \
168 : ((i) == 1) ? (void *)&((event)->name.f1) \
169 : ((i) == 2) ? (void *)&((event)->name.f2) \
170 : ((i) == 3) ? (void *)&((event)->name.f3)\
171 : NULL)
172
173#define EVENT5_FIELD_PTR(name, event, i) ( \
174 ((i) == 0) ? (void *)&((event)->name.f0) \
175 : ((i) == 1) ? (void *)&((event)->name.f1) \
176 : ((i) == 2) ? (void *)&((event)->name.f2) \
177 : ((i) == 3) ? (void *)&((event)->name.f3) \
178 : ((i) == 4) ? (void *)&((event)->name.f4)\
179 : NULL)
180
181#define EVENT6_FIELD_PTR(name, event, i) ( \
182 ((i) == 0) ? (void *)&((event)->name.f0) \
183 : ((i) == 1) ? (void *)&((event)->name.f1) \
184 : ((i) == 2) ? (void *)&((event)->name.f2) \
185 : ((i) == 3) ? (void *)&((event)->name.f3) \
186 : ((i) == 4) ? (void *)&((event)->name.f4) \
187 : ((i) == 5) ? (void *)&((event)->name.f5)\
188 : NULL)
189
190#define EVENT7_FIELD_PTR(name, event, i) ( \
191 ((i) == 0) ? (void *)&((event)->name.f0) \
192 : ((i) == 1) ? (void *)&((event)->name.f1) \
193 : ((i) == 2) ? (void *)&((event)->name.f2) \
194 : ((i) == 3) ? (void *)&((event)->name.f3) \
195 : ((i) == 4) ? (void *)&((event)->name.f4) \
196 : ((i) == 5) ? (void *)&((event)->name.f5) \
197 : ((i) == 6) ? (void *)&((event)->name.f6)\
198 : NULL)
199
200#define EVENT8_FIELD_PTR(name, event, i) ( \
201 ((i) == 0) ? (void *)&((event)->name.f0) \
202 : ((i) == 1) ? (void *)&((event)->name.f1) \
203 : ((i) == 2) ? (void *)&((event)->name.f2) \
204 : ((i) == 3) ? (void *)&((event)->name.f3) \
205 : ((i) == 4) ? (void *)&((event)->name.f4) \
206 : ((i) == 5) ? (void *)&((event)->name.f5) \
207 : ((i) == 6) ? (void *)&((event)->name.f6) \
208 : ((i) == 7) ? (void *)&((event)->name.f7)\
209 : NULL)
210
211#define EVENT9_FIELD_PTR(name, event, i) ( \
212 ((i) == 0) ? (void *)&((event)->name.f0) \
213 : ((i) == 1) ? (void *)&((event)->name.f1) \
214 : ((i) == 2) ? (void *)&((event)->name.f2) \
215 : ((i) == 3) ? (void *)&((event)->name.f3) \
216 : ((i) == 4) ? (void *)&((event)->name.f4) \
217 : ((i) == 5) ? (void *)&((event)->name.f5) \
218 : ((i) == 6) ? (void *)&((event)->name.f6) \
219 : ((i) == 7) ? (void *)&((event)->name.f7) \
220 : ((i) == 8) ? (void *)&((event)->name.f8)\
221 : NULL)
222
223#define EVENT10_FIELD_PTR(name, event, i) ( \
224 ((i) == 0) ? (void *)&((event)->name.f0) \
225 : ((i) == 1) ? (void *)&((event)->name.f1) \
226 : ((i) == 2) ? (void *)&((event)->name.f2) \
227 : ((i) == 3) ? (void *)&((event)->name.f3) \
228 : ((i) == 4) ? (void *)&((event)->name.f4) \
229 : ((i) == 5) ? (void *)&((event)->name.f5) \
230 : ((i) == 6) ? (void *)&((event)->name.f6) \
231 : ((i) == 7) ? (void *)&((event)->name.f7) \
232 : ((i) == 8) ? (void *)&((event)->name.f8) \
233 : ((i) == 9) ? (void *)&((event)->name.f9)\
234 : NULL)
235
236#define EVENT11_FIELD_PTR(name, event, i) ( \
237 ((i) == 0) ? (void *)&((event)->name.f0) \
238 : ((i) == 1) ? (void *)&((event)->name.f1) \
239 : ((i) == 2) ? (void *)&((event)->name.f2) \
240 : ((i) == 3) ? (void *)&((event)->name.f3) \
241 : ((i) == 4) ? (void *)&((event)->name.f4) \
242 : ((i) == 5) ? (void *)&((event)->name.f5) \
243 : ((i) == 6) ? (void *)&((event)->name.f6) \
244 : ((i) == 7) ? (void *)&((event)->name.f7) \
245 : ((i) == 8) ? (void *)&((event)->name.f8) \
246 : ((i) == 9) ? (void *)&((event)->name.f9) \
247 : ((i) == 10) ? (void *)&((event)->name.f10)\
248 : NULL)
249
250#define EVENT12_FIELD_PTR(name, event, i) ( \
251 ((i) == 0) ? (void *)&((event)->name.f0) \
252 : ((i) == 1) ? (void *)&((event)->name.f1) \
253 : ((i) == 2) ? (void *)&((event)->name.f2) \
254 : ((i) == 3) ? (void *)&((event)->name.f3) \
255 : ((i) == 4) ? (void *)&((event)->name.f4) \
256 : ((i) == 5) ? (void *)&((event)->name.f5) \
257 : ((i) == 6) ? (void *)&((event)->name.f6) \
258 : ((i) == 7) ? (void *)&((event)->name.f7) \
259 : ((i) == 8) ? (void *)&((event)->name.f8) \
260 : ((i) == 9) ? (void *)&((event)->name.f9) \
261 : ((i) == 10) ? (void *)&((event)->name.f10) \
262 : ((i) == 11) ? (void *)&((event)->name.f11)\
263 : NULL)
264
265#define EVENT13_FIELD_PTR(name, event, i) ( \
266 ((i) == 0) ? (void *)&((event)->name.f0) \
267 : ((i) == 1) ? (void *)&((event)->name.f1) \
268 : ((i) == 2) ? (void *)&((event)->name.f2) \
269 : ((i) == 3) ? (void *)&((event)->name.f3) \
270 : ((i) == 4) ? (void *)&((event)->name.f4) \
271 : ((i) == 5) ? (void *)&((event)->name.f5) \
272 : ((i) == 6) ? (void *)&((event)->name.f6) \
273 : ((i) == 7) ? (void *)&((event)->name.f7) \
274 : ((i) == 8) ? (void *)&((event)->name.f8) \
275 : ((i) == 9) ? (void *)&((event)->name.f9) \
276 : ((i) == 10) ? (void *)&((event)->name.f10) \
277 : ((i) == 11) ? (void *)&((event)->name.f11) \
278 : ((i) == 12) ? (void *)&((event)->name.f12)\
279 : NULL)
280
281#define EVENT14_FIELD_PTR(name, event, i) ( \
282 ((i) == 0) ? (void *)&((event)->name.f0) \
283 : ((i) == 1) ? (void *)&((event)->name.f1) \
284 : ((i) == 2) ? (void *)&((event)->name.f2) \
285 : ((i) == 3) ? (void *)&((event)->name.f3) \
286 : ((i) == 4) ? (void *)&((event)->name.f4) \
287 : ((i) == 5) ? (void *)&((event)->name.f5) \
288 : ((i) == 6) ? (void *)&((event)->name.f6) \
289 : ((i) == 7) ? (void *)&((event)->name.f7) \
290 : ((i) == 8) ? (void *)&((event)->name.f8) \
291 : ((i) == 9) ? (void *)&((event)->name.f9) \
292 : ((i) == 10) ? (void *)&((event)->name.f10) \
293 : ((i) == 11) ? (void *)&((event)->name.f11) \
294 : ((i) == 12) ? (void *)&((event)->name.f12) \
295 : ((i) == 13) ? (void *)&((event)->name.f13)\
296 : NULL)
297
298#define EVENT15_FIELD_PTR(name, event, i) ( \
299 ((i) == 0) ? (void *)&((event)->name.f0) \
300 : ((i) == 1) ? (void *)&((event)->name.f1) \
301 : ((i) == 2) ? (void *)&((event)->name.f2) \
302 : ((i) == 3) ? (void *)&((event)->name.f3) \
303 : ((i) == 4) ? (void *)&((event)->name.f4) \
304 : ((i) == 5) ? (void *)&((event)->name.f5) \
305 : ((i) == 6) ? (void *)&((event)->name.f6) \
306 : ((i) == 7) ? (void *)&((event)->name.f7) \
307 : ((i) == 8) ? (void *)&((event)->name.f8) \
308 : ((i) == 9) ? (void *)&((event)->name.f9) \
309 : ((i) == 10) ? (void *)&((event)->name.f10) \
310 : ((i) == 11) ? (void *)&((event)->name.f11) \
311 : ((i) == 12) ? (void *)&((event)->name.f12) \
312 : ((i) == 13) ? (void *)&((event)->name.f13) \
313 : ((i) == 14) ? (void *)&((event)->name.f14)\
314 : NULL)
315
316#define EVENT16_FIELD_PTR(name, event, i) ( \
317 ((i) == 0) ? (void *)&((event)->name.f0) \
318 : ((i) == 1) ? (void *)&((event)->name.f1) \
319 : ((i) == 2) ? (void *)&((event)->name.f2) \
320 : ((i) == 3) ? (void *)&((event)->name.f3) \
321 : ((i) == 4) ? (void *)&((event)->name.f4) \
322 : ((i) == 5) ? (void *)&((event)->name.f5) \
323 : ((i) == 6) ? (void *)&((event)->name.f6) \
324 : ((i) == 7) ? (void *)&((event)->name.f7) \
325 : ((i) == 8) ? (void *)&((event)->name.f8) \
326 : ((i) == 9) ? (void *)&((event)->name.f9) \
327 : ((i) == 10) ? (void *)&((event)->name.f10) \
328 : ((i) == 11) ? (void *)&((event)->name.f11) \
329 : ((i) == 12) ? (void *)&((event)->name.f12) \
330 : ((i) == 13) ? (void *)&((event)->name.f13) \
331 : ((i) == 14) ? (void *)&((event)->name.f14) \
332 : ((i) == 15) ? (void *)&((event)->name.f15)\
333 : NULL)
334
335#define EVENT17_FIELD_PTR(name, event, i) ( \
336 ((i) == 0) ? (void *)&((event)->name.f0) \
337 : ((i) == 1) ? (void *)&((event)->name.f1) \
338 : ((i) == 2) ? (void *)&((event)->name.f2) \
339 : ((i) == 3) ? (void *)&((event)->name.f3) \
340 : ((i) == 4) ? (void *)&((event)->name.f4) \
341 : ((i) == 5) ? (void *)&((event)->name.f5) \
342 : ((i) == 6) ? (void *)&((event)->name.f6) \
343 : ((i) == 7) ? (void *)&((event)->name.f7) \
344 : ((i) == 8) ? (void *)&((event)->name.f8) \
345 : ((i) == 9) ? (void *)&((event)->name.f9) \
346 : ((i) == 10) ? (void *)&((event)->name.f10) \
347 : ((i) == 11) ? (void *)&((event)->name.f11) \
348 : ((i) == 12) ? (void *)&((event)->name.f12) \
349 : ((i) == 13) ? (void *)&((event)->name.f13) \
350 : ((i) == 14) ? (void *)&((event)->name.f14) \
351 : ((i) == 15) ? (void *)&((event)->name.f15) \
352 : ((i) == 16) ? (void *)&((event)->name.f16)\
353 : NULL)
354
355#define EVENT18_FIELD_PTR(name, event, i) ( \
356 ((i) == 0) ? (void *)&((event)->name.f0) \
357 : ((i) == 1) ? (void *)&((event)->name.f1) \
358 : ((i) == 2) ? (void *)&((event)->name.f2) \
359 : ((i) == 3) ? (void *)&((event)->name.f3) \
360 : ((i) == 4) ? (void *)&((event)->name.f4) \
361 : ((i) == 5) ? (void *)&((event)->name.f5) \
362 : ((i) == 6) ? (void *)&((event)->name.f6) \
363 : ((i) == 7) ? (void *)&((event)->name.f7) \
364 : ((i) == 8) ? (void *)&((event)->name.f8) \
365 : ((i) == 9) ? (void *)&((event)->name.f9) \
366 : ((i) == 10) ? (void *)&((event)->name.f10) \
367 : ((i) == 11) ? (void *)&((event)->name.f11) \
368 : ((i) == 12) ? (void *)&((event)->name.f12) \
369 : ((i) == 13) ? (void *)&((event)->name.f13) \
370 : ((i) == 14) ? (void *)&((event)->name.f14) \
371 : ((i) == 15) ? (void *)&((event)->name.f15) \
372 : ((i) == 16) ? (void *)&((event)->name.f16) \
373 : ((i) == 17) ? (void *)&((event)->name.f17)\
374 : NULL)
375
376#define EVENT19_FIELD_PTR(name, event, i) ( \
377 ((i) == 0) ? (void *)&((event)->name.f0) \
378 : ((i) == 1) ? (void *)&((event)->name.f1) \
379 : ((i) == 2) ? (void *)&((event)->name.f2) \
380 : ((i) == 3) ? (void *)&((event)->name.f3) \
381 : ((i) == 4) ? (void *)&((event)->name.f4) \
382 : ((i) == 5) ? (void *)&((event)->name.f5) \
383 : ((i) == 6) ? (void *)&((event)->name.f6) \
384 : ((i) == 7) ? (void *)&((event)->name.f7) \
385 : ((i) == 8) ? (void *)&((event)->name.f8) \
386 : ((i) == 9) ? (void *)&((event)->name.f9) \
387 : ((i) == 10) ? (void *)&((event)->name.f10) \
388 : ((i) == 11) ? (void *)&((event)->name.f11) \
389 : ((i) == 12) ? (void *)&((event)->name.f12) \
390 : ((i) == 13) ? (void *)&((event)->name.f13) \
391 : ((i) == 14) ? (void *)&((event)->name.f14) \
392 : ((i) == 15) ? (void *)&((event)->name.f15) \
393 : ((i) == 16) ? (void *)&((event)->name.f16) \
394 : ((i) == 17) ? (void *)&((event)->name.f17) \
395 : ((i) == 18) ? (void *)&((event)->name.f18)\
396 : NULL)
397
398#else /* EVENT not */
399
400#define EVENT0(name) NOOP
401/* The following lines were generated with
402 python -c 'for i in range(1,15): print "#define EVENT%d(name, %s) NOOP" % (i, ", ".join(["p%d" % j for j in range(0, i)]))'
403 */
404#define EVENT1(name, p0) NOOP
405#define EVENT2(name, p0, p1) NOOP
406#define EVENT3(name, p0, p1, p2) NOOP
407#define EVENT4(name, p0, p1, p2, p3) NOOP
408#define EVENT5(name, p0, p1, p2, p3, p4) NOOP
409#define EVENT6(name, p0, p1, p2, p3, p4, p5) NOOP
410#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) NOOP
411#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) NOOP
412#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) NOOP
413#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) NOOP
414#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) NOOP
415#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) NOOP
416#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) NOOP
417#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) NOOP
44 418
45#endif 419#endif /* EVENT */
46 420
47 421
48/* Event types -- see <design/telemetry/> 422/* Event types -- see <design/telemetry/>
diff --git a/mps/code/eventgen.h b/mps/code/eventgen.h
deleted file mode 100644
index a3e95f1a23e..00000000000
--- a/mps/code/eventgen.h
+++ /dev/null
@@ -1,891 +0,0 @@
1/* <code/eventgen.h> -- Automatic event header
2 *
3 * $Id$
4 * Copyright (c) 2001 Ravenbrook Limited. See end of file for license.
5 *
6 * DO NOT EDIT THIS FILE!
7 * This file was generated by //info.ravenbrook.com/project/mps/master/code/eventgen.pl#6
8 */
9
10#ifdef EVENT
11
12#include "eventdef.h"
13
14typedef void *EventFP;
15typedef Addr EventFA;
16typedef Word EventFW;
17typedef unsigned EventFU;
18typedef EventStringStruct EventFS;
19typedef double EventFD;
20
21typedef struct EventAnyStruct {
22 Word code;
23 Word clock;
24} EventAnyStruct;
25
26#define EVENT_STRUCT(X, name, _code, always, kind, count, format) \
27 typedef struct Event##name##Struct { \
28 Word code; \
29 Word clock; \
30 EVENT_STRUCT_FIELDS_##count format \
31 } Event##name##Struct;
32
33#define EVENT_STRUCT_FIELDS_0()
34
35/*
36 for i in range(0, 20): print "#define EVENT_STRUCT_FIELDS_%d(%s) \\\n%s\n" % (i, ", ".join(["p%s" % j for j in range(0, i)]), " \\\n".join(" EventF##p%d f%d;" % (j, j) for j in range(0,i)))
37 */
38
39#define EVENT_STRUCT_FIELDS_1(p0) \
40 EventF##p0 f0;
41
42#define EVENT_STRUCT_FIELDS_2(p0, p1) \
43 EventF##p0 f0; \
44 EventF##p1 f1;
45
46#define EVENT_STRUCT_FIELDS_3(p0, p1, p2) \
47 EventF##p0 f0; \
48 EventF##p1 f1; \
49 EventF##p2 f2;
50
51#define EVENT_STRUCT_FIELDS_4(p0, p1, p2, p3) \
52 EventF##p0 f0; \
53 EventF##p1 f1; \
54 EventF##p2 f2; \
55 EventF##p3 f3;
56
57#define EVENT_STRUCT_FIELDS_5(p0, p1, p2, p3, p4) \
58 EventF##p0 f0; \
59 EventF##p1 f1; \
60 EventF##p2 f2; \
61 EventF##p3 f3; \
62 EventF##p4 f4;
63
64#define EVENT_STRUCT_FIELDS_6(p0, p1, p2, p3, p4, p5) \
65 EventF##p0 f0; \
66 EventF##p1 f1; \
67 EventF##p2 f2; \
68 EventF##p3 f3; \
69 EventF##p4 f4; \
70 EventF##p5 f5;
71
72#define EVENT_STRUCT_FIELDS_7(p0, p1, p2, p3, p4, p5, p6) \
73 EventF##p0 f0; \
74 EventF##p1 f1; \
75 EventF##p2 f2; \
76 EventF##p3 f3; \
77 EventF##p4 f4; \
78 EventF##p5 f5; \
79 EventF##p6 f6;
80
81#define EVENT_STRUCT_FIELDS_8(p0, p1, p2, p3, p4, p5, p6, p7) \
82 EventF##p0 f0; \
83 EventF##p1 f1; \
84 EventF##p2 f2; \
85 EventF##p3 f3; \
86 EventF##p4 f4; \
87 EventF##p5 f5; \
88 EventF##p6 f6; \
89 EventF##p7 f7;
90
91#define EVENT_STRUCT_FIELDS_9(p0, p1, p2, p3, p4, p5, p6, p7, p8) \
92 EventF##p0 f0; \
93 EventF##p1 f1; \
94 EventF##p2 f2; \
95 EventF##p3 f3; \
96 EventF##p4 f4; \
97 EventF##p5 f5; \
98 EventF##p6 f6; \
99 EventF##p7 f7; \
100 EventF##p8 f8;
101
102#define EVENT_STRUCT_FIELDS_10(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) \
103 EventF##p0 f0; \
104 EventF##p1 f1; \
105 EventF##p2 f2; \
106 EventF##p3 f3; \
107 EventF##p4 f4; \
108 EventF##p5 f5; \
109 EventF##p6 f6; \
110 EventF##p7 f7; \
111 EventF##p8 f8; \
112 EventF##p9 f9;
113
114#define EVENT_STRUCT_FIELDS_11(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
115 EventF##p0 f0; \
116 EventF##p1 f1; \
117 EventF##p2 f2; \
118 EventF##p3 f3; \
119 EventF##p4 f4; \
120 EventF##p5 f5; \
121 EventF##p6 f6; \
122 EventF##p7 f7; \
123 EventF##p8 f8; \
124 EventF##p9 f9; \
125 EventF##p10 f10;
126
127#define EVENT_STRUCT_FIELDS_12(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
128 EventF##p0 f0; \
129 EventF##p1 f1; \
130 EventF##p2 f2; \
131 EventF##p3 f3; \
132 EventF##p4 f4; \
133 EventF##p5 f5; \
134 EventF##p6 f6; \
135 EventF##p7 f7; \
136 EventF##p8 f8; \
137 EventF##p9 f9; \
138 EventF##p10 f10; \
139 EventF##p11 f11;
140
141#define EVENT_STRUCT_FIELDS_13(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) \
142 EventF##p0 f0; \
143 EventF##p1 f1; \
144 EventF##p2 f2; \
145 EventF##p3 f3; \
146 EventF##p4 f4; \
147 EventF##p5 f5; \
148 EventF##p6 f6; \
149 EventF##p7 f7; \
150 EventF##p8 f8; \
151 EventF##p9 f9; \
152 EventF##p10 f10; \
153 EventF##p11 f11; \
154 EventF##p12 f12;
155
156#define EVENT_STRUCT_FIELDS_14(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) \
157 EventF##p0 f0; \
158 EventF##p1 f1; \
159 EventF##p2 f2; \
160 EventF##p3 f3; \
161 EventF##p4 f4; \
162 EventF##p5 f5; \
163 EventF##p6 f6; \
164 EventF##p7 f7; \
165 EventF##p8 f8; \
166 EventF##p9 f9; \
167 EventF##p10 f10; \
168 EventF##p11 f11; \
169 EventF##p12 f12; \
170 EventF##p13 f13;
171
172#define EVENT_STRUCT_FIELDS_15(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) \
173 EventF##p0 f0; \
174 EventF##p1 f1; \
175 EventF##p2 f2; \
176 EventF##p3 f3; \
177 EventF##p4 f4; \
178 EventF##p5 f5; \
179 EventF##p6 f6; \
180 EventF##p7 f7; \
181 EventF##p8 f8; \
182 EventF##p9 f9; \
183 EventF##p10 f10; \
184 EventF##p11 f11; \
185 EventF##p12 f12; \
186 EventF##p13 f13; \
187 EventF##p14 f14;
188
189#define EVENT_STRUCT_FIELDS_16(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) \
190 EventF##p0 f0; \
191 EventF##p1 f1; \
192 EventF##p2 f2; \
193 EventF##p3 f3; \
194 EventF##p4 f4; \
195 EventF##p5 f5; \
196 EventF##p6 f6; \
197 EventF##p7 f7; \
198 EventF##p8 f8; \
199 EventF##p9 f9; \
200 EventF##p10 f10; \
201 EventF##p11 f11; \
202 EventF##p12 f12; \
203 EventF##p13 f13; \
204 EventF##p14 f14; \
205 EventF##p15 f15;
206
207#define EVENT_STRUCT_FIELDS_17(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) \
208 EventF##p0 f0; \
209 EventF##p1 f1; \
210 EventF##p2 f2; \
211 EventF##p3 f3; \
212 EventF##p4 f4; \
213 EventF##p5 f5; \
214 EventF##p6 f6; \
215 EventF##p7 f7; \
216 EventF##p8 f8; \
217 EventF##p9 f9; \
218 EventF##p10 f10; \
219 EventF##p11 f11; \
220 EventF##p12 f12; \
221 EventF##p13 f13; \
222 EventF##p14 f14; \
223 EventF##p15 f15; \
224 EventF##p16 f16;
225
226#define EVENT_STRUCT_FIELDS_18(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) \
227 EventF##p0 f0; \
228 EventF##p1 f1; \
229 EventF##p2 f2; \
230 EventF##p3 f3; \
231 EventF##p4 f4; \
232 EventF##p5 f5; \
233 EventF##p6 f6; \
234 EventF##p7 f7; \
235 EventF##p8 f8; \
236 EventF##p9 f9; \
237 EventF##p10 f10; \
238 EventF##p11 f11; \
239 EventF##p12 f12; \
240 EventF##p13 f13; \
241 EventF##p14 f14; \
242 EventF##p15 f15; \
243 EventF##p16 f16; \
244 EventF##p17 f17;
245
246#define EVENT_STRUCT_FIELDS_19(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) \
247 EventF##p0 f0; \
248 EventF##p1 f1; \
249 EventF##p2 f2; \
250 EventF##p3 f3; \
251 EventF##p4 f4; \
252 EventF##p5 f5; \
253 EventF##p6 f6; \
254 EventF##p7 f7; \
255 EventF##p8 f8; \
256 EventF##p9 f9; \
257 EventF##p10 f10; \
258 EventF##p11 f11; \
259 EventF##p12 f12; \
260 EventF##p13 f13; \
261 EventF##p14 f14; \
262 EventF##p15 f15; \
263 EventF##p16 f16; \
264 EventF##p17 f17; \
265 EventF##p18 f18;
266
267EVENT_LIST(EVENT_STRUCT, X)
268
269
270#define EVENT_UNION_MEMBER(X, name, code, always, kind, count, format) \
271 Event##name##Struct name;
272
273typedef union EventUnion {
274 EventAnyStruct any;
275 EVENT_LIST(EVENT_UNION_MEMBER, X)
276} EventUnion, *Event;
277
278
279#define EVENT2S(name, p0, length, string) \
280 BEGIN \
281 size_t _string_len = (length); \
282 size_t size; \
283 AVER(_string_len < EventStringLengthMAX); \
284 size = offsetof(Event##name##Struct, f1.str) + _string_len; \
285 EVENT_BEGIN(name, size) \
286 _event->f0 = (p0); \
287 _event->f1.len = _string_len; \
288 mps_lib_memcpy(_event->f1.str, (string), _string_len); \
289 EVENT_END(name, size); \
290 END
291
292#define EVENT0(name) \
293 EVENT_BEGIN(name, 0) \
294 EVENT_END(name, 0)
295
296/*
297 for i in range(1,20): print "#define EVENT%d(name, %s) \\\n EVENT_BEGIN(name, sizeof(Event##name##Struct)) \\\n%s \\\n EVENT_END(name, sizeof(Event##name##Struct))\n" % (i, ", ".join(["p%d" % j for j in range(0, i)]), " \\\n".join([" _event->f%d = (p%d);" % (j, j) for j in range(0, i)]))
298 */
299
300#define EVENT1(name, p0) \
301 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
302 _event->f0 = (p0); \
303 EVENT_END(name, sizeof(Event##name##Struct))
304
305#define EVENT2(name, p0, p1) \
306 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
307 _event->f0 = (p0); \
308 _event->f1 = (p1); \
309 EVENT_END(name, sizeof(Event##name##Struct))
310
311#define EVENT3(name, p0, p1, p2) \
312 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
313 _event->f0 = (p0); \
314 _event->f1 = (p1); \
315 _event->f2 = (p2); \
316 EVENT_END(name, sizeof(Event##name##Struct))
317
318#define EVENT4(name, p0, p1, p2, p3) \
319 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
320 _event->f0 = (p0); \
321 _event->f1 = (p1); \
322 _event->f2 = (p2); \
323 _event->f3 = (p3); \
324 EVENT_END(name, sizeof(Event##name##Struct))
325
326#define EVENT5(name, p0, p1, p2, p3, p4) \
327 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
328 _event->f0 = (p0); \
329 _event->f1 = (p1); \
330 _event->f2 = (p2); \
331 _event->f3 = (p3); \
332 _event->f4 = (p4); \
333 EVENT_END(name, sizeof(Event##name##Struct))
334
335#define EVENT6(name, p0, p1, p2, p3, p4, p5) \
336 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
337 _event->f0 = (p0); \
338 _event->f1 = (p1); \
339 _event->f2 = (p2); \
340 _event->f3 = (p3); \
341 _event->f4 = (p4); \
342 _event->f5 = (p5); \
343 EVENT_END(name, sizeof(Event##name##Struct))
344
345#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) \
346 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
347 _event->f0 = (p0); \
348 _event->f1 = (p1); \
349 _event->f2 = (p2); \
350 _event->f3 = (p3); \
351 _event->f4 = (p4); \
352 _event->f5 = (p5); \
353 _event->f6 = (p6); \
354 EVENT_END(name, sizeof(Event##name##Struct))
355
356#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) \
357 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
358 _event->f0 = (p0); \
359 _event->f1 = (p1); \
360 _event->f2 = (p2); \
361 _event->f3 = (p3); \
362 _event->f4 = (p4); \
363 _event->f5 = (p5); \
364 _event->f6 = (p6); \
365 _event->f7 = (p7); \
366 EVENT_END(name, sizeof(Event##name##Struct))
367
368#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) \
369 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
370 _event->f0 = (p0); \
371 _event->f1 = (p1); \
372 _event->f2 = (p2); \
373 _event->f3 = (p3); \
374 _event->f4 = (p4); \
375 _event->f5 = (p5); \
376 _event->f6 = (p6); \
377 _event->f7 = (p7); \
378 _event->f8 = (p8); \
379 EVENT_END(name, sizeof(Event##name##Struct))
380
381#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) \
382 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
383 _event->f0 = (p0); \
384 _event->f1 = (p1); \
385 _event->f2 = (p2); \
386 _event->f3 = (p3); \
387 _event->f4 = (p4); \
388 _event->f5 = (p5); \
389 _event->f6 = (p6); \
390 _event->f7 = (p7); \
391 _event->f8 = (p8); \
392 _event->f9 = (p9); \
393 EVENT_END(name, sizeof(Event##name##Struct))
394
395#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) \
396 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
397 _event->f0 = (p0); \
398 _event->f1 = (p1); \
399 _event->f2 = (p2); \
400 _event->f3 = (p3); \
401 _event->f4 = (p4); \
402 _event->f5 = (p5); \
403 _event->f6 = (p6); \
404 _event->f7 = (p7); \
405 _event->f8 = (p8); \
406 _event->f9 = (p9); \
407 _event->f10 = (p10); \
408 EVENT_END(name, sizeof(Event##name##Struct))
409
410#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) \
411 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
412 _event->f0 = (p0); \
413 _event->f1 = (p1); \
414 _event->f2 = (p2); \
415 _event->f3 = (p3); \
416 _event->f4 = (p4); \
417 _event->f5 = (p5); \
418 _event->f6 = (p6); \
419 _event->f7 = (p7); \
420 _event->f8 = (p8); \
421 _event->f9 = (p9); \
422 _event->f10 = (p10); \
423 _event->f11 = (p11); \
424 EVENT_END(name, sizeof(Event##name##Struct))
425
426#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) \
427 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
428 _event->f0 = (p0); \
429 _event->f1 = (p1); \
430 _event->f2 = (p2); \
431 _event->f3 = (p3); \
432 _event->f4 = (p4); \
433 _event->f5 = (p5); \
434 _event->f6 = (p6); \
435 _event->f7 = (p7); \
436 _event->f8 = (p8); \
437 _event->f9 = (p9); \
438 _event->f10 = (p10); \
439 _event->f11 = (p11); \
440 _event->f12 = (p12); \
441 EVENT_END(name, sizeof(Event##name##Struct))
442
443#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) \
444 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
445 _event->f0 = (p0); \
446 _event->f1 = (p1); \
447 _event->f2 = (p2); \
448 _event->f3 = (p3); \
449 _event->f4 = (p4); \
450 _event->f5 = (p5); \
451 _event->f6 = (p6); \
452 _event->f7 = (p7); \
453 _event->f8 = (p8); \
454 _event->f9 = (p9); \
455 _event->f10 = (p10); \
456 _event->f11 = (p11); \
457 _event->f12 = (p12); \
458 _event->f13 = (p13); \
459 EVENT_END(name, sizeof(Event##name##Struct))
460
461#define EVENT15(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) \
462 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
463 _event->f0 = (p0); \
464 _event->f1 = (p1); \
465 _event->f2 = (p2); \
466 _event->f3 = (p3); \
467 _event->f4 = (p4); \
468 _event->f5 = (p5); \
469 _event->f6 = (p6); \
470 _event->f7 = (p7); \
471 _event->f8 = (p8); \
472 _event->f9 = (p9); \
473 _event->f10 = (p10); \
474 _event->f11 = (p11); \
475 _event->f12 = (p12); \
476 _event->f13 = (p13); \
477 _event->f14 = (p14); \
478 EVENT_END(name, sizeof(Event##name##Struct))
479
480#define EVENT16(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) \
481 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
482 _event->f0 = (p0); \
483 _event->f1 = (p1); \
484 _event->f2 = (p2); \
485 _event->f3 = (p3); \
486 _event->f4 = (p4); \
487 _event->f5 = (p5); \
488 _event->f6 = (p6); \
489 _event->f7 = (p7); \
490 _event->f8 = (p8); \
491 _event->f9 = (p9); \
492 _event->f10 = (p10); \
493 _event->f11 = (p11); \
494 _event->f12 = (p12); \
495 _event->f13 = (p13); \
496 _event->f14 = (p14); \
497 _event->f15 = (p15); \
498 EVENT_END(name, sizeof(Event##name##Struct))
499
500#define EVENT17(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) \
501 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
502 _event->f0 = (p0); \
503 _event->f1 = (p1); \
504 _event->f2 = (p2); \
505 _event->f3 = (p3); \
506 _event->f4 = (p4); \
507 _event->f5 = (p5); \
508 _event->f6 = (p6); \
509 _event->f7 = (p7); \
510 _event->f8 = (p8); \
511 _event->f9 = (p9); \
512 _event->f10 = (p10); \
513 _event->f11 = (p11); \
514 _event->f12 = (p12); \
515 _event->f13 = (p13); \
516 _event->f14 = (p14); \
517 _event->f15 = (p15); \
518 _event->f16 = (p16); \
519 EVENT_END(name, sizeof(Event##name##Struct))
520
521#define EVENT18(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) \
522 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
523 _event->f0 = (p0); \
524 _event->f1 = (p1); \
525 _event->f2 = (p2); \
526 _event->f3 = (p3); \
527 _event->f4 = (p4); \
528 _event->f5 = (p5); \
529 _event->f6 = (p6); \
530 _event->f7 = (p7); \
531 _event->f8 = (p8); \
532 _event->f9 = (p9); \
533 _event->f10 = (p10); \
534 _event->f11 = (p11); \
535 _event->f12 = (p12); \
536 _event->f13 = (p13); \
537 _event->f14 = (p14); \
538 _event->f15 = (p15); \
539 _event->f16 = (p16); \
540 _event->f17 = (p17); \
541 EVENT_END(name, sizeof(Event##name##Struct))
542
543#define EVENT19(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) \
544 EVENT_BEGIN(name, sizeof(Event##name##Struct)) \
545 _event->f0 = (p0); \
546 _event->f1 = (p1); \
547 _event->f2 = (p2); \
548 _event->f3 = (p3); \
549 _event->f4 = (p4); \
550 _event->f5 = (p5); \
551 _event->f6 = (p6); \
552 _event->f7 = (p7); \
553 _event->f8 = (p8); \
554 _event->f9 = (p9); \
555 _event->f10 = (p10); \
556 _event->f11 = (p11); \
557 _event->f12 = (p12); \
558 _event->f13 = (p13); \
559 _event->f14 = (p14); \
560 _event->f15 = (p15); \
561 _event->f16 = (p16); \
562 _event->f17 = (p17); \
563 _event->f18 = (p18); \
564 EVENT_END(name, sizeof(Event##name##Struct))
565
566
567#define EVENT0_FIELD_PTR(name, event, i) NULL
568
569/*
570 for i in range(1,20): print "#define EVENT%d_FIELD_PTR(name, event, i) ( \\\n %s\\\n : NULL)\n" % (i, " \\\n : ".join(["((i) == %d) ? (void *)&((event)->name.f%d)" % (j, j) for j in range(0, i)]))
571 */
572
573#define EVENT1_FIELD_PTR(name, event, i) ( \
574 ((i) == 0) ? (void *)&((event)->name.f0)\
575 : NULL)
576
577#define EVENT2_FIELD_PTR(name, event, i) ( \
578 ((i) == 0) ? (void *)&((event)->name.f0) \
579 : ((i) == 1) ? (void *)&((event)->name.f1)\
580 : NULL)
581
582#define EVENT3_FIELD_PTR(name, event, i) ( \
583 ((i) == 0) ? (void *)&((event)->name.f0) \
584 : ((i) == 1) ? (void *)&((event)->name.f1) \
585 : ((i) == 2) ? (void *)&((event)->name.f2)\
586 : NULL)
587
588#define EVENT4_FIELD_PTR(name, event, i) ( \
589 ((i) == 0) ? (void *)&((event)->name.f0) \
590 : ((i) == 1) ? (void *)&((event)->name.f1) \
591 : ((i) == 2) ? (void *)&((event)->name.f2) \
592 : ((i) == 3) ? (void *)&((event)->name.f3)\
593 : NULL)
594
595#define EVENT5_FIELD_PTR(name, event, i) ( \
596 ((i) == 0) ? (void *)&((event)->name.f0) \
597 : ((i) == 1) ? (void *)&((event)->name.f1) \
598 : ((i) == 2) ? (void *)&((event)->name.f2) \
599 : ((i) == 3) ? (void *)&((event)->name.f3) \
600 : ((i) == 4) ? (void *)&((event)->name.f4)\
601 : NULL)
602
603#define EVENT6_FIELD_PTR(name, event, i) ( \
604 ((i) == 0) ? (void *)&((event)->name.f0) \
605 : ((i) == 1) ? (void *)&((event)->name.f1) \
606 : ((i) == 2) ? (void *)&((event)->name.f2) \
607 : ((i) == 3) ? (void *)&((event)->name.f3) \
608 : ((i) == 4) ? (void *)&((event)->name.f4) \
609 : ((i) == 5) ? (void *)&((event)->name.f5)\
610 : NULL)
611
612#define EVENT7_FIELD_PTR(name, event, i) ( \
613 ((i) == 0) ? (void *)&((event)->name.f0) \
614 : ((i) == 1) ? (void *)&((event)->name.f1) \
615 : ((i) == 2) ? (void *)&((event)->name.f2) \
616 : ((i) == 3) ? (void *)&((event)->name.f3) \
617 : ((i) == 4) ? (void *)&((event)->name.f4) \
618 : ((i) == 5) ? (void *)&((event)->name.f5) \
619 : ((i) == 6) ? (void *)&((event)->name.f6)\
620 : NULL)
621
622#define EVENT8_FIELD_PTR(name, event, i) ( \
623 ((i) == 0) ? (void *)&((event)->name.f0) \
624 : ((i) == 1) ? (void *)&((event)->name.f1) \
625 : ((i) == 2) ? (void *)&((event)->name.f2) \
626 : ((i) == 3) ? (void *)&((event)->name.f3) \
627 : ((i) == 4) ? (void *)&((event)->name.f4) \
628 : ((i) == 5) ? (void *)&((event)->name.f5) \
629 : ((i) == 6) ? (void *)&((event)->name.f6) \
630 : ((i) == 7) ? (void *)&((event)->name.f7)\
631 : NULL)
632
633#define EVENT9_FIELD_PTR(name, event, i) ( \
634 ((i) == 0) ? (void *)&((event)->name.f0) \
635 : ((i) == 1) ? (void *)&((event)->name.f1) \
636 : ((i) == 2) ? (void *)&((event)->name.f2) \
637 : ((i) == 3) ? (void *)&((event)->name.f3) \
638 : ((i) == 4) ? (void *)&((event)->name.f4) \
639 : ((i) == 5) ? (void *)&((event)->name.f5) \
640 : ((i) == 6) ? (void *)&((event)->name.f6) \
641 : ((i) == 7) ? (void *)&((event)->name.f7) \
642 : ((i) == 8) ? (void *)&((event)->name.f8)\
643 : NULL)
644
645#define EVENT10_FIELD_PTR(name, event, i) ( \
646 ((i) == 0) ? (void *)&((event)->name.f0) \
647 : ((i) == 1) ? (void *)&((event)->name.f1) \
648 : ((i) == 2) ? (void *)&((event)->name.f2) \
649 : ((i) == 3) ? (void *)&((event)->name.f3) \
650 : ((i) == 4) ? (void *)&((event)->name.f4) \
651 : ((i) == 5) ? (void *)&((event)->name.f5) \
652 : ((i) == 6) ? (void *)&((event)->name.f6) \
653 : ((i) == 7) ? (void *)&((event)->name.f7) \
654 : ((i) == 8) ? (void *)&((event)->name.f8) \
655 : ((i) == 9) ? (void *)&((event)->name.f9)\
656 : NULL)
657
658#define EVENT11_FIELD_PTR(name, event, i) ( \
659 ((i) == 0) ? (void *)&((event)->name.f0) \
660 : ((i) == 1) ? (void *)&((event)->name.f1) \
661 : ((i) == 2) ? (void *)&((event)->name.f2) \
662 : ((i) == 3) ? (void *)&((event)->name.f3) \
663 : ((i) == 4) ? (void *)&((event)->name.f4) \
664 : ((i) == 5) ? (void *)&((event)->name.f5) \
665 : ((i) == 6) ? (void *)&((event)->name.f6) \
666 : ((i) == 7) ? (void *)&((event)->name.f7) \
667 : ((i) == 8) ? (void *)&((event)->name.f8) \
668 : ((i) == 9) ? (void *)&((event)->name.f9) \
669 : ((i) == 10) ? (void *)&((event)->name.f10)\
670 : NULL)
671
672#define EVENT12_FIELD_PTR(name, event, i) ( \
673 ((i) == 0) ? (void *)&((event)->name.f0) \
674 : ((i) == 1) ? (void *)&((event)->name.f1) \
675 : ((i) == 2) ? (void *)&((event)->name.f2) \
676 : ((i) == 3) ? (void *)&((event)->name.f3) \
677 : ((i) == 4) ? (void *)&((event)->name.f4) \
678 : ((i) == 5) ? (void *)&((event)->name.f5) \
679 : ((i) == 6) ? (void *)&((event)->name.f6) \
680 : ((i) == 7) ? (void *)&((event)->name.f7) \
681 : ((i) == 8) ? (void *)&((event)->name.f8) \
682 : ((i) == 9) ? (void *)&((event)->name.f9) \
683 : ((i) == 10) ? (void *)&((event)->name.f10) \
684 : ((i) == 11) ? (void *)&((event)->name.f11)\
685 : NULL)
686
687#define EVENT13_FIELD_PTR(name, event, i) ( \
688 ((i) == 0) ? (void *)&((event)->name.f0) \
689 : ((i) == 1) ? (void *)&((event)->name.f1) \
690 : ((i) == 2) ? (void *)&((event)->name.f2) \
691 : ((i) == 3) ? (void *)&((event)->name.f3) \
692 : ((i) == 4) ? (void *)&((event)->name.f4) \
693 : ((i) == 5) ? (void *)&((event)->name.f5) \
694 : ((i) == 6) ? (void *)&((event)->name.f6) \
695 : ((i) == 7) ? (void *)&((event)->name.f7) \
696 : ((i) == 8) ? (void *)&((event)->name.f8) \
697 : ((i) == 9) ? (void *)&((event)->name.f9) \
698 : ((i) == 10) ? (void *)&((event)->name.f10) \
699 : ((i) == 11) ? (void *)&((event)->name.f11) \
700 : ((i) == 12) ? (void *)&((event)->name.f12)\
701 : NULL)
702
703#define EVENT14_FIELD_PTR(name, event, i) ( \
704 ((i) == 0) ? (void *)&((event)->name.f0) \
705 : ((i) == 1) ? (void *)&((event)->name.f1) \
706 : ((i) == 2) ? (void *)&((event)->name.f2) \
707 : ((i) == 3) ? (void *)&((event)->name.f3) \
708 : ((i) == 4) ? (void *)&((event)->name.f4) \
709 : ((i) == 5) ? (void *)&((event)->name.f5) \
710 : ((i) == 6) ? (void *)&((event)->name.f6) \
711 : ((i) == 7) ? (void *)&((event)->name.f7) \
712 : ((i) == 8) ? (void *)&((event)->name.f8) \
713 : ((i) == 9) ? (void *)&((event)->name.f9) \
714 : ((i) == 10) ? (void *)&((event)->name.f10) \
715 : ((i) == 11) ? (void *)&((event)->name.f11) \
716 : ((i) == 12) ? (void *)&((event)->name.f12) \
717 : ((i) == 13) ? (void *)&((event)->name.f13)\
718 : NULL)
719
720#define EVENT15_FIELD_PTR(name, event, i) ( \
721 ((i) == 0) ? (void *)&((event)->name.f0) \
722 : ((i) == 1) ? (void *)&((event)->name.f1) \
723 : ((i) == 2) ? (void *)&((event)->name.f2) \
724 : ((i) == 3) ? (void *)&((event)->name.f3) \
725 : ((i) == 4) ? (void *)&((event)->name.f4) \
726 : ((i) == 5) ? (void *)&((event)->name.f5) \
727 : ((i) == 6) ? (void *)&((event)->name.f6) \
728 : ((i) == 7) ? (void *)&((event)->name.f7) \
729 : ((i) == 8) ? (void *)&((event)->name.f8) \
730 : ((i) == 9) ? (void *)&((event)->name.f9) \
731 : ((i) == 10) ? (void *)&((event)->name.f10) \
732 : ((i) == 11) ? (void *)&((event)->name.f11) \
733 : ((i) == 12) ? (void *)&((event)->name.f12) \
734 : ((i) == 13) ? (void *)&((event)->name.f13) \
735 : ((i) == 14) ? (void *)&((event)->name.f14)\
736 : NULL)
737
738#define EVENT16_FIELD_PTR(name, event, i) ( \
739 ((i) == 0) ? (void *)&((event)->name.f0) \
740 : ((i) == 1) ? (void *)&((event)->name.f1) \
741 : ((i) == 2) ? (void *)&((event)->name.f2) \
742 : ((i) == 3) ? (void *)&((event)->name.f3) \
743 : ((i) == 4) ? (void *)&((event)->name.f4) \
744 : ((i) == 5) ? (void *)&((event)->name.f5) \
745 : ((i) == 6) ? (void *)&((event)->name.f6) \
746 : ((i) == 7) ? (void *)&((event)->name.f7) \
747 : ((i) == 8) ? (void *)&((event)->name.f8) \
748 : ((i) == 9) ? (void *)&((event)->name.f9) \
749 : ((i) == 10) ? (void *)&((event)->name.f10) \
750 : ((i) == 11) ? (void *)&((event)->name.f11) \
751 : ((i) == 12) ? (void *)&((event)->name.f12) \
752 : ((i) == 13) ? (void *)&((event)->name.f13) \
753 : ((i) == 14) ? (void *)&((event)->name.f14) \
754 : ((i) == 15) ? (void *)&((event)->name.f15)\
755 : NULL)
756
757#define EVENT17_FIELD_PTR(name, event, i) ( \
758 ((i) == 0) ? (void *)&((event)->name.f0) \
759 : ((i) == 1) ? (void *)&((event)->name.f1) \
760 : ((i) == 2) ? (void *)&((event)->name.f2) \
761 : ((i) == 3) ? (void *)&((event)->name.f3) \
762 : ((i) == 4) ? (void *)&((event)->name.f4) \
763 : ((i) == 5) ? (void *)&((event)->name.f5) \
764 : ((i) == 6) ? (void *)&((event)->name.f6) \
765 : ((i) == 7) ? (void *)&((event)->name.f7) \
766 : ((i) == 8) ? (void *)&((event)->name.f8) \
767 : ((i) == 9) ? (void *)&((event)->name.f9) \
768 : ((i) == 10) ? (void *)&((event)->name.f10) \
769 : ((i) == 11) ? (void *)&((event)->name.f11) \
770 : ((i) == 12) ? (void *)&((event)->name.f12) \
771 : ((i) == 13) ? (void *)&((event)->name.f13) \
772 : ((i) == 14) ? (void *)&((event)->name.f14) \
773 : ((i) == 15) ? (void *)&((event)->name.f15) \
774 : ((i) == 16) ? (void *)&((event)->name.f16)\
775 : NULL)
776
777#define EVENT18_FIELD_PTR(name, event, i) ( \
778 ((i) == 0) ? (void *)&((event)->name.f0) \
779 : ((i) == 1) ? (void *)&((event)->name.f1) \
780 : ((i) == 2) ? (void *)&((event)->name.f2) \
781 : ((i) == 3) ? (void *)&((event)->name.f3) \
782 : ((i) == 4) ? (void *)&((event)->name.f4) \
783 : ((i) == 5) ? (void *)&((event)->name.f5) \
784 : ((i) == 6) ? (void *)&((event)->name.f6) \
785 : ((i) == 7) ? (void *)&((event)->name.f7) \
786 : ((i) == 8) ? (void *)&((event)->name.f8) \
787 : ((i) == 9) ? (void *)&((event)->name.f9) \
788 : ((i) == 10) ? (void *)&((event)->name.f10) \
789 : ((i) == 11) ? (void *)&((event)->name.f11) \
790 : ((i) == 12) ? (void *)&((event)->name.f12) \
791 : ((i) == 13) ? (void *)&((event)->name.f13) \
792 : ((i) == 14) ? (void *)&((event)->name.f14) \
793 : ((i) == 15) ? (void *)&((event)->name.f15) \
794 : ((i) == 16) ? (void *)&((event)->name.f16) \
795 : ((i) == 17) ? (void *)&((event)->name.f17)\
796 : NULL)
797
798#define EVENT19_FIELD_PTR(name, event, i) ( \
799 ((i) == 0) ? (void *)&((event)->name.f0) \
800 : ((i) == 1) ? (void *)&((event)->name.f1) \
801 : ((i) == 2) ? (void *)&((event)->name.f2) \
802 : ((i) == 3) ? (void *)&((event)->name.f3) \
803 : ((i) == 4) ? (void *)&((event)->name.f4) \
804 : ((i) == 5) ? (void *)&((event)->name.f5) \
805 : ((i) == 6) ? (void *)&((event)->name.f6) \
806 : ((i) == 7) ? (void *)&((event)->name.f7) \
807 : ((i) == 8) ? (void *)&((event)->name.f8) \
808 : ((i) == 9) ? (void *)&((event)->name.f9) \
809 : ((i) == 10) ? (void *)&((event)->name.f10) \
810 : ((i) == 11) ? (void *)&((event)->name.f11) \
811 : ((i) == 12) ? (void *)&((event)->name.f12) \
812 : ((i) == 13) ? (void *)&((event)->name.f13) \
813 : ((i) == 14) ? (void *)&((event)->name.f14) \
814 : ((i) == 15) ? (void *)&((event)->name.f15) \
815 : ((i) == 16) ? (void *)&((event)->name.f16) \
816 : ((i) == 17) ? (void *)&((event)->name.f17) \
817 : ((i) == 18) ? (void *)&((event)->name.f18)\
818 : NULL)
819
820
821#else /* EVENT not */
822
823#define EVENT0(name) NOOP
824
825/*
826 for i in range(1,20): print "#define EVENT%d(name, %s) NOOP" % (i, ", ".join(["p%d" % j for j in range(0, i)]))
827 */
828
829#define EVENT1(name, p0) NOOP
830#define EVENT2(name, p0, p1) NOOP
831#define EVENT3(name, p0, p1, p2) NOOP
832#define EVENT4(name, p0, p1, p2, p3) NOOP
833#define EVENT5(name, p0, p1, p2, p3, p4) NOOP
834#define EVENT6(name, p0, p1, p2, p3, p4, p5) NOOP
835#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) NOOP
836#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) NOOP
837#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) NOOP
838#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) NOOP
839#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) NOOP
840#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) NOOP
841#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) NOOP
842#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) NOOP
843#define EVENT15(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) NOOP
844#define EVENT16(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) NOOP
845#define EVENT17(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) NOOP
846#define EVENT18(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) NOOP
847#define EVENT19(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) NOOP
848
849#endif /* EVENT */
850
851
852/* C. COPYRIGHT AND LICENSE
853 *
854 * Copyright (C) 2001-2002 Ravenbrook Limited <http://www.ravenbrook.com/>.
855 * All rights reserved. This is an open source license. Contact
856 * Ravenbrook for commercial licensing options.
857 *
858 * Redistribution and use in source and binary forms, with or without
859 * modification, are permitted provided that the following conditions are
860 * met:
861 *
862 * 1. Redistributions of source code must retain the above copyright
863 * notice, this list of conditions and the following disclaimer.
864 *
865 * 2. Redistributions in binary form must reproduce the above copyright
866 * notice, this list of conditions and the following disclaimer in the
867 * documentation and/or other materials provided with the distribution.
868 *
869 * 3. Redistributions in any form must be accompanied by information on how
870 * to obtain complete source code for this software and any accompanying
871 * software that uses this software. The source code must either be
872 * included in the distribution or be available for no more than the cost
873 * of distribution plus a nominal fee, and must be freely redistributable
874 * under reasonable conditions. For an executable file, complete source
875 * code means the source code for all modules it contains. It does not
876 * include source code for modules or files that typically accompany the
877 * major components of the operating system on which the executable file
878 * runs.
879 *
880 * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
881 * IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
882 * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
883 * PURPOSE, OR NON-INFRINGEMENT, ARE DISCLAIMED. IN NO EVENT SHALL THE
884 * COPYRIGHT HOLDERS AND CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
885 * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
886 * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
887 * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON
888 * ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
889 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
890 * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
891 */