mirror of
git://git.sv.gnu.org/emacs.git
synced 2026-02-17 18:37:33 +00:00
Moving event emitting macros from eventcom.h to event.h, as they aren't used except in the mps.
Tidying up the way event field addresses are fetched to do all the work during compilation and not emit scads of branches. Copied from Perforce Change: 179053 ServerID: perforce.ravenbrook.com
This commit is contained in:
parent
c8a9763120
commit
3208f37aef
5 changed files with 161 additions and 119 deletions
|
|
@ -27,14 +27,11 @@ extern Word EventControl(Word, Word);
|
|||
extern Word EventInternString(const char *);
|
||||
extern Word EventInternGenString(size_t, const char *);
|
||||
extern void EventLabelAddr(Addr, Word);
|
||||
extern Res EventFlush(void);
|
||||
|
||||
|
||||
#ifdef EVENT
|
||||
|
||||
|
||||
extern Res EventFlush(void);
|
||||
|
||||
|
||||
/* Event writing support */
|
||||
|
||||
extern char *EventNext, *EventLimit;
|
||||
|
|
@ -59,6 +56,48 @@ extern Word EventKindControl;
|
|||
END
|
||||
|
||||
|
||||
/* EVENTn -- event emitting macros
|
||||
*
|
||||
* The macros EVENT0, EVENT1, etc. are used throughout the MPS to emit an
|
||||
* event with parameters. They work by appending the event parameters to
|
||||
* an event buffer, which is flushed to the telemetry output stream when
|
||||
* full. EVENT2S is a special case that takes a variable length string.
|
||||
*/
|
||||
|
||||
#define EVENT2S(name, p0, length, string) \
|
||||
BEGIN \
|
||||
size_t _string_len = (length); \
|
||||
size_t size; \
|
||||
size = offsetof(Event##name##Struct, f1.str) + _string_len; \
|
||||
EVENT_BEGIN(name, size) \
|
||||
_event->f0 = (p0); \
|
||||
AVER(_string_len < EventStringLengthMAX); \
|
||||
_event->f1.len = (EventStringLen)_string_len; \
|
||||
mps_lib_memcpy(_event->f1.str, (string), _string_len); \
|
||||
EVENT_END(name, size); \
|
||||
END
|
||||
|
||||
|
||||
#define EVENT0(name) EVENT_BEGIN(name, sizeof(EventAnyStruct)) EVENT_END(name, sizeof(EventAnyStruct))
|
||||
/* The following lines were generated with
|
||||
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)]))'
|
||||
*/
|
||||
#define EVENT1(name, p0) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); EVENT_END(name, sizeof(Event##name##Struct))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
|
||||
|
||||
#else /* EVENT not */
|
||||
|
||||
|
||||
|
|
@ -70,6 +109,26 @@ extern Word EventKindControl;
|
|||
#define EventLabelAddr(a, i) BEGIN UNUSED(a); UNUSED(i); END
|
||||
|
||||
|
||||
#define EVENT0(name) NOOP
|
||||
/* The following lines were generated with
|
||||
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)]))'
|
||||
*/
|
||||
#define EVENT1(name, p0) NOOP
|
||||
#define EVENT2(name, p0, p1) NOOP
|
||||
#define EVENT3(name, p0, p1, p2) NOOP
|
||||
#define EVENT4(name, p0, p1, p2, p3) NOOP
|
||||
#define EVENT5(name, p0, p1, p2, p3, p4) NOOP
|
||||
#define EVENT6(name, p0, p1, p2, p3, p4, p5) NOOP
|
||||
#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) NOOP
|
||||
#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) NOOP
|
||||
#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) NOOP
|
||||
#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) NOOP
|
||||
#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) NOOP
|
||||
#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) NOOP
|
||||
#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) NOOP
|
||||
#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) NOOP
|
||||
|
||||
|
||||
#endif /* EVENT */
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -527,16 +527,8 @@ static void readLog(EventProc proc)
|
|||
printf(styleConv, (ulongest_t)event->PoolInit.f2);
|
||||
} break;
|
||||
default:
|
||||
for (i = 0; i < argCount; ++i) {
|
||||
switch(code) {
|
||||
#define EVENT_CASE(X, name, code, always, kind, count, format) \
|
||||
case code: { \
|
||||
printArg(proc, EVENT##count##_FIELD_PTR(name, event, i), \
|
||||
eventFormat[i], styleConv); \
|
||||
} break;
|
||||
EVENT_LIST(EVENT_CASE, X)
|
||||
}
|
||||
}
|
||||
for (i = 0; i < argCount; ++i)
|
||||
printArg(proc, EventField(event, i), eventFormat[i], styleConv);
|
||||
}
|
||||
|
||||
if (style == 'L') putchar(')');
|
||||
|
|
|
|||
|
|
@ -83,40 +83,36 @@ typedef unsigned EventFU;
|
|||
typedef EventStringStruct EventFS;
|
||||
typedef double EventFD;
|
||||
|
||||
/*
|
||||
for i in range(0, 15):
|
||||
print "#define EVENT%d_STRUCT(%s) struct { EventCode code; EventSize size; Word clock; %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))
|
||||
)
|
||||
*/
|
||||
#define EVENT0_STRUCT() struct { EventCode code; EventSize size; Word clock; }
|
||||
#define EVENT1_STRUCT(p0) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; }
|
||||
#define EVENT2_STRUCT(p0, p1) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; }
|
||||
#define EVENT3_STRUCT(p0, p1, p2) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; }
|
||||
#define EVENT4_STRUCT(p0, p1, p2, p3) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; }
|
||||
#define EVENT5_STRUCT(p0, p1, p2, p3, p4) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; }
|
||||
#define EVENT6_STRUCT(p0, p1, p2, p3, p4, p5) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; }
|
||||
#define EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; }
|
||||
#define EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7) struct { EventCode code; EventSize size; Word clock; EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3; EventF##p4 f4; EventF##p5 f5; EventF##p6 f6; EventF##p7 f7; }
|
||||
#define EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8) struct { EventCode code; EventSize size; Word clock; 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; }
|
||||
#define EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) struct { EventCode code; EventSize size; Word clock; 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; }
|
||||
#define EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) struct { EventCode code; EventSize size; Word clock; 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; }
|
||||
#define EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) struct { EventCode code; EventSize size; Word clock; 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; }
|
||||
#define EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) struct { EventCode code; EventSize size; Word clock; 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; }
|
||||
#define EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) struct { EventCode code; EventSize size; Word clock; 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; }
|
||||
|
||||
/* Common prefix for all event structures. The size field allows an event
|
||||
reader to skip over events whose codes it does not recognise. */
|
||||
typedef struct EventAnyStruct {
|
||||
EventCode code;
|
||||
EventSize size;
|
||||
Word clock;
|
||||
} EventAnyStruct;
|
||||
typedef EVENT0_STRUCT() EventAnyStruct;
|
||||
|
||||
#define EVENT_STRUCT(X, name, _code, always, kind, count, format) \
|
||||
typedef struct Event##name##Struct { \
|
||||
EventCode code; \
|
||||
EventSize size; \
|
||||
Word clock; \
|
||||
EVENT_STRUCT_FIELDS_##count format \
|
||||
} Event##name##Struct;
|
||||
|
||||
#define EVENT_STRUCT_FIELDS_0()
|
||||
/* The following lines were generated with
|
||||
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)))'
|
||||
*/
|
||||
#define EVENT_STRUCT_FIELDS_1(p0) EventF##p0 f0;
|
||||
#define EVENT_STRUCT_FIELDS_2(p0, p1) EventF##p0 f0; EventF##p1 f1;
|
||||
#define EVENT_STRUCT_FIELDS_3(p0, p1, p2) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2;
|
||||
#define EVENT_STRUCT_FIELDS_4(p0, p1, p2, p3) EventF##p0 f0; EventF##p1 f1; EventF##p2 f2; EventF##p3 f3;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
#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;
|
||||
typedef EVENT##count##_STRUCT format Event##name##Struct;
|
||||
|
||||
EVENT_LIST(EVENT_STRUCT, X)
|
||||
|
||||
|
|
@ -137,48 +133,8 @@ typedef union EventUnion {
|
|||
} EventUnion, *Event;
|
||||
|
||||
|
||||
/* EVENTn -- event emitting macros
|
||||
*
|
||||
* The macros EVENT0, EVENT1, etc. are used throughout the MPS to emit an
|
||||
* event with parameters. They work by appending the event parameters to
|
||||
* an event buffer, which is flushed to the telemetry output stream when
|
||||
* full. EVENT2S is a special case that takes a variable length string.
|
||||
*/
|
||||
|
||||
#ifdef EVENT
|
||||
|
||||
#define EVENT2S(name, p0, length, string) \
|
||||
BEGIN \
|
||||
size_t _string_len = (length); \
|
||||
size_t size; \
|
||||
size = offsetof(Event##name##Struct, f1.str) + _string_len; \
|
||||
EVENT_BEGIN(name, size) \
|
||||
_event->f0 = (p0); \
|
||||
AVER(_string_len < EventStringLengthMAX); \
|
||||
_event->f1.len = (EventStringLen)_string_len; \
|
||||
mps_lib_memcpy(_event->f1.str, (string), _string_len); \
|
||||
EVENT_END(name, size); \
|
||||
END
|
||||
|
||||
#define EVENT0(name) EVENT_BEGIN(name, sizeof(EventAnyStruct)) EVENT_END(name, sizeof(EventAnyStruct))
|
||||
/* The following lines were generated with
|
||||
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)]))'
|
||||
*/
|
||||
#define EVENT1(name, p0) EVENT_BEGIN(name, sizeof(Event##name##Struct)) _event->f0 = (p0); EVENT_END(name, sizeof(Event##name##Struct))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
#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))
|
||||
|
||||
#if 0
|
||||
/* FIXME: Eliminate this in favour of some sort of table? */
|
||||
|
||||
#define EVENT0_FIELD_PTR(name, event, i) NULL
|
||||
|
||||
|
|
@ -432,29 +388,7 @@ typedef union EventUnion {
|
|||
: ((i) == 17) ? (void *)&((event)->name.f17) \
|
||||
: ((i) == 18) ? (void *)&((event)->name.f18)\
|
||||
: NULL)
|
||||
|
||||
#else /* EVENT not */
|
||||
|
||||
#define EVENT0(name) NOOP
|
||||
/* The following lines were generated with
|
||||
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)]))'
|
||||
*/
|
||||
#define EVENT1(name, p0) NOOP
|
||||
#define EVENT2(name, p0, p1) NOOP
|
||||
#define EVENT3(name, p0, p1, p2) NOOP
|
||||
#define EVENT4(name, p0, p1, p2, p3) NOOP
|
||||
#define EVENT5(name, p0, p1, p2, p3, p4) NOOP
|
||||
#define EVENT6(name, p0, p1, p2, p3, p4, p5) NOOP
|
||||
#define EVENT7(name, p0, p1, p2, p3, p4, p5, p6) NOOP
|
||||
#define EVENT8(name, p0, p1, p2, p3, p4, p5, p6, p7) NOOP
|
||||
#define EVENT9(name, p0, p1, p2, p3, p4, p5, p6, p7, p8) NOOP
|
||||
#define EVENT10(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) NOOP
|
||||
#define EVENT11(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) NOOP
|
||||
#define EVENT12(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) NOOP
|
||||
#define EVENT13(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) NOOP
|
||||
#define EVENT14(name, p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) NOOP
|
||||
|
||||
#endif /* EVENT */
|
||||
#endif
|
||||
|
||||
|
||||
#endif /* eventcom_h */
|
||||
|
|
|
|||
|
|
@ -70,14 +70,25 @@ struct EventProcStruct {
|
|||
/* eventTypes -- an array containing info about the event types */
|
||||
|
||||
typedef struct {
|
||||
char *name;
|
||||
char *name; /* Event name e.g. "TraceStart" */
|
||||
EventCode code;
|
||||
size_t length;
|
||||
char *format;
|
||||
size_t size; /* event record size, rounded up from structure */
|
||||
Count count; /* Parameter count */
|
||||
char *format; /* string format, e.g. "PPW" */
|
||||
EventSize offsets[15]; /* FIXME: literal constant */
|
||||
} eventRecord;
|
||||
|
||||
/* EVENTn_FORMAT produces a short string version of an event format, e.g.
|
||||
it converts (P,P,W) into "PPW"
|
||||
|
||||
for i in range(1,15):
|
||||
print "#define EVENT%d_FORMAT(%s) %s" % (
|
||||
i,
|
||||
", ".join(["p%d" % j for j in range(0, i)]),
|
||||
" ".join(["#p%d" % j for j in range(0, i)])
|
||||
)
|
||||
*/
|
||||
#define EVENT0_FORMAT() ""
|
||||
/* for i in range(1,15): print "#define EVENT%d_FORMAT(%s) %s" % (i, ", ".join(["p%d" % j for j in range(0, i)]), " ".join(["#p%d" % j for j in range(0, i)])) */
|
||||
#define EVENT1_FORMAT(p0) #p0
|
||||
#define EVENT2_FORMAT(p0, p1) #p0 #p1
|
||||
#define EVENT3_FORMAT(p0, p1, p2) #p0 #p1 #p2
|
||||
|
|
@ -94,11 +105,43 @@ typedef struct {
|
|||
#define EVENT14_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13
|
||||
#define EVENT15_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14
|
||||
|
||||
/* EVENTn_OFFSETS is a macro which produces an. array initializer containing
|
||||
the offsets of the fields within an event structure with the specified
|
||||
format.
|
||||
|
||||
for i in range(0, 15):
|
||||
plist = ", ".join(["p%d" % i for i in range(0, i)])
|
||||
print "#define EVENT%d_OFFSETS(%s) {%s}" % (
|
||||
i, plist,
|
||||
", ".join(["offsetof(EVENT%d_STRUCT(%s), f%d)" % (i, plist, j)
|
||||
for j in range(0, i)])
|
||||
)
|
||||
*/
|
||||
#define EVENT0_OFFSETS() {}
|
||||
#define EVENT1_OFFSETS(p0) {offsetof(EVENT1_STRUCT(p0), f0)}
|
||||
#define EVENT2_OFFSETS(p0, p1) {offsetof(EVENT2_STRUCT(p0, p1), f0), offsetof(EVENT2_STRUCT(p0, p1), f1)}
|
||||
#define EVENT3_OFFSETS(p0, p1, p2) {offsetof(EVENT3_STRUCT(p0, p1, p2), f0), offsetof(EVENT3_STRUCT(p0, p1, p2), f1), offsetof(EVENT3_STRUCT(p0, p1, p2), f2)}
|
||||
#define EVENT4_OFFSETS(p0, p1, p2, p3) {offsetof(EVENT4_STRUCT(p0, p1, p2, p3), f0), offsetof(EVENT4_STRUCT(p0, p1, p2, p3), f1), offsetof(EVENT4_STRUCT(p0, p1, p2, p3), f2), offsetof(EVENT4_STRUCT(p0, p1, p2, p3), f3)}
|
||||
#define EVENT5_OFFSETS(p0, p1, p2, p3, p4) {offsetof(EVENT5_STRUCT(p0, p1, p2, p3, p4), f0), offsetof(EVENT5_STRUCT(p0, p1, p2, p3, p4), f1), offsetof(EVENT5_STRUCT(p0, p1, p2, p3, p4), f2), offsetof(EVENT5_STRUCT(p0, p1, p2, p3, p4), f3), offsetof(EVENT5_STRUCT(p0, p1, p2, p3, p4), f4)}
|
||||
#define EVENT6_OFFSETS(p0, p1, p2, p3, p4, p5) {offsetof(EVENT6_STRUCT(p0, p1, p2, p3, p4, p5), f0), offsetof(EVENT6_STRUCT(p0, p1, p2, p3, p4, p5), f1), offsetof(EVENT6_STRUCT(p0, p1, p2, p3, p4, p5), f2), offsetof(EVENT6_STRUCT(p0, p1, p2, p3, p4, p5), f3), offsetof(EVENT6_STRUCT(p0, p1, p2, p3, p4, p5), f4), offsetof(EVENT6_STRUCT(p0, p1, p2, p3, p4, p5), f5)}
|
||||
#define EVENT7_OFFSETS(p0, p1, p2, p3, p4, p5, p6) {offsetof(EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6), f0), offsetof(EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6), f1), offsetof(EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6), f2), offsetof(EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6), f3), offsetof(EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6), f4), offsetof(EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6), f5), offsetof(EVENT7_STRUCT(p0, p1, p2, p3, p4, p5, p6), f6)}
|
||||
#define EVENT8_OFFSETS(p0, p1, p2, p3, p4, p5, p6, p7) {offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f0), offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f1), offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f2), offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f3), offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f4), offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f5), offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f6), offsetof(EVENT8_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7), f7)}
|
||||
#define EVENT9_OFFSETS(p0, p1, p2, p3, p4, p5, p6, p7, p8) {offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f0), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f1), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f2), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f3), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f4), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f5), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f6), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f7), offsetof(EVENT9_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8), f8)}
|
||||
#define EVENT10_OFFSETS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9) {offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f0), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f1), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f2), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f3), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f4), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f5), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f6), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f7), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f8), offsetof(EVENT10_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9), f9)}
|
||||
#define EVENT11_OFFSETS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10) {offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f0), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f1), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f2), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f3), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f4), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f5), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f6), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f7), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f8), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f9), offsetof(EVENT11_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10), f10)}
|
||||
#define EVENT12_OFFSETS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11) {offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f0), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f1), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f2), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f3), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f4), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f5), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f6), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f7), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f8), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f9), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f10), offsetof(EVENT12_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11), f11)}
|
||||
#define EVENT13_OFFSETS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) {offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f0), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f1), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f2), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f3), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f4), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f5), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f6), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f7), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f8), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f9), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f10), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f11), offsetof(EVENT13_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12), f12)}
|
||||
#define EVENT14_OFFSETS(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13) {offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f0), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f1), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f2), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f3), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f4), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f5), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f6), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f7), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f8), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f9), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f10), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f11), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f12), offsetof(EVENT14_STRUCT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13), f13)}
|
||||
|
||||
static eventRecord eventTypes[] = {
|
||||
{"(unused)", 0, 0, "0"},
|
||||
{"(unused)", 0, 0, 0, "", {}},
|
||||
#define EVENT_INIT(X, name, code, always, kind, count, format) \
|
||||
{#name, code, \
|
||||
EventSizeAlign(sizeof(Event##name##Struct)), EVENT##count##_FORMAT format},
|
||||
{#name, \
|
||||
code, \
|
||||
EventSizeAlign(sizeof(Event##name##Struct)), \
|
||||
count, \
|
||||
EVENT##count##_FORMAT format, \
|
||||
EVENT##count##_OFFSETS format},
|
||||
EVENT_LIST(EVENT_INIT, X)
|
||||
};
|
||||
|
||||
|
|
@ -152,6 +195,19 @@ char *EventCode2Format(EventCode code)
|
|||
}
|
||||
|
||||
|
||||
/* EventCode2Field -- find pointer to a field within an event */
|
||||
|
||||
void *EventField(Event event, unsigned i)
|
||||
{
|
||||
Index j = eventCode2Index(event->any.code, TRUE);
|
||||
ptrdiff_t offset;
|
||||
if (i >= eventTypes[j].count)
|
||||
error("Event field %u out of bounds", i);
|
||||
offset = eventTypes[j].offsets[i];
|
||||
return (void *)((char *)event + offset);
|
||||
}
|
||||
|
||||
|
||||
Bool EventCodeIsValid(EventCode code)
|
||||
{
|
||||
return (eventCode2Index(code, FALSE) != 0);
|
||||
|
|
@ -245,7 +301,7 @@ EventString LabelText(EventProc proc, Word id)
|
|||
|
||||
Res EventRead(Event *eventReturn, EventProc proc)
|
||||
{
|
||||
size_t eventIndex, length;
|
||||
size_t eventIndex, size;
|
||||
Res res;
|
||||
EventCode code;
|
||||
Event event;
|
||||
|
|
@ -256,7 +312,7 @@ Res EventRead(Event *eventReturn, EventProc proc)
|
|||
return res;
|
||||
|
||||
eventIndex = eventCode2Index(code, TRUE);
|
||||
length = eventTypes[eventIndex].length;
|
||||
size = eventTypes[eventIndex].size;
|
||||
if (proc->cachedEvent != NULL) {
|
||||
event = proc->cachedEvent;
|
||||
proc->cachedEvent = NULL;
|
||||
|
|
@ -282,7 +338,7 @@ Res EventRead(Event *eventReturn, EventProc proc)
|
|||
if (res != ResOK) return res;
|
||||
} else {
|
||||
res = proc->reader(proc->readerP, restOfEvent,
|
||||
length - sizeof(EventCode));
|
||||
size - sizeof(EventCode));
|
||||
if (res != ResOK) return res;
|
||||
}
|
||||
*eventReturn = event;
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ typedef Res (*EventProcReader)(void *, void *, size_t);
|
|||
extern EventCode EventName2Code(char *name);
|
||||
extern char *EventCode2Name(EventCode code);
|
||||
extern char *EventCode2Format(EventCode code);
|
||||
extern void *EventField(Event event, unsigned i);
|
||||
extern Bool EventCodeIsValid(EventCode code);
|
||||
|
||||
extern Word AddrLabel(EventProc proc, Addr addr);
|
||||
|
|
|
|||
Loading…
Reference in a new issue