aboutsummaryrefslogtreecommitdiffstats
path: root/mps/code
diff options
context:
space:
mode:
authorRichard Brooksby2012-08-22 09:31:38 +0100
committerRichard Brooksby2012-08-22 09:31:38 +0100
commitc8a97631209e616d60b143707b71c056fb0fc764 (patch)
treeb911ba1d513529f1a95587a2da8b0416dd333d0f /mps/code
parent76ab2591ef672a5bbd3e18582373a0ca8359ad71 (diff)
downloademacs-c8a97631209e616d60b143707b71c056fb0fc764.tar.gz
emacs-c8a97631209e616d60b143707b71c056fb0fc764.zip
Oops. missed file from changelist 179018.
Copied from Perforce Change: 179020 ServerID: perforce.ravenbrook.com
Diffstat (limited to 'mps/code')
-rw-r--r--mps/code/eventpro.c61
1 files changed, 17 insertions, 44 deletions
diff --git a/mps/code/eventpro.c b/mps/code/eventpro.c
index e66c76a69a9..e3a2ed320da 100644
--- a/mps/code/eventpro.c
+++ b/mps/code/eventpro.c
@@ -70,7 +70,6 @@ struct EventProcStruct {
70/* eventTypes -- an array containing info about the event types */ 70/* eventTypes -- an array containing info about the event types */
71 71
72typedef struct { 72typedef struct {
73 EventType type;
74 char *name; 73 char *name;
75 EventCode code; 74 EventCode code;
76 size_t length; 75 size_t length;
@@ -78,7 +77,7 @@ typedef struct {
78} eventRecord; 77} eventRecord;
79 78
80#define EVENT0_FORMAT() "" 79#define EVENT0_FORMAT() ""
81/* for i in range(1,20): 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)])) */ 80/* 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)])) */
82#define EVENT1_FORMAT(p0) #p0 81#define EVENT1_FORMAT(p0) #p0
83#define EVENT2_FORMAT(p0, p1) #p0 #p1 82#define EVENT2_FORMAT(p0, p1) #p0 #p1
84#define EVENT3_FORMAT(p0, p1, p2) #p0 #p1 #p2 83#define EVENT3_FORMAT(p0, p1, p2) #p0 #p1 #p2
@@ -94,15 +93,11 @@ typedef struct {
94#define EVENT13_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 93#define EVENT13_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12
95#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 94#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
96#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 95#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
97#define EVENT16_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15
98#define EVENT17_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15 #p16
99#define EVENT18_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15 #p16 #p17
100#define EVENT19_FORMAT(p0, p1, p2, p3, p4, p5, p6, p7, p8, p9, p10, p11, p12, p13, p14, p15, p16, p17, p18) #p0 #p1 #p2 #p3 #p4 #p5 #p6 #p7 #p8 #p9 #p10 #p11 #p12 #p13 #p14 #p15 #p16 #p17 #p18
101 96
102static eventRecord eventTypes[] = { 97static eventRecord eventTypes[] = {
103 {0, "(unused)", 0, 0, "0"}, 98 {"(unused)", 0, 0, "0"},
104#define EVENT_INIT(X, name, code, always, kind, count, format) \ 99#define EVENT_INIT(X, name, code, always, kind, count, format) \
105 {Event##name, #name, code, \ 100 {#name, code, \
106 EventSizeAlign(sizeof(Event##name##Struct)), EVENT##count##_FORMAT format}, 101 EventSizeAlign(sizeof(Event##name##Struct)), EVENT##count##_FORMAT format},
107 EVENT_LIST(EVENT_INIT, X) 102 EVENT_LIST(EVENT_INIT, X)
108}; 103};
@@ -110,20 +105,6 @@ static eventRecord eventTypes[] = {
110#define eventTypeCount (sizeof(eventTypes) / sizeof(eventRecord)) 105#define eventTypeCount (sizeof(eventTypes) / sizeof(eventRecord))
111 106
112 107
113/* eventType2Index -- find index in eventTypes for the given type */
114
115static size_t eventType2Index(EventType type)
116{
117 size_t i;
118
119 for(i = 0; i < eventTypeCount; ++i)
120 if (eventTypes[i].type == type)
121 return i;
122 error("Unknown event type %0"PRIwWORD PRIXLONGEST, (ulongest_t)type);
123 return 0;
124}
125
126
127/* eventcode2Index -- find index in eventTypes for the given code */ 108/* eventcode2Index -- find index in eventTypes for the given code */
128 109
129static size_t eventCode2Index(EventCode code, Bool errorp) 110static size_t eventCode2Index(EventCode code, Bool errorp)
@@ -171,16 +152,6 @@ char *EventCode2Format(EventCode code)
171} 152}
172 153
173 154
174/* EventGetCode -- get event code of the given event */
175
176EventCode EventGetCode(Event event)
177{
178 size_t i = eventType2Index(event->any.code);
179 assert(eventTypes[i].code <= EventCodeMAX);
180 return eventTypes[i].code;
181}
182
183
184Bool EventCodeIsValid(EventCode code) 155Bool EventCodeIsValid(EventCode code)
185{ 156{
186 return (eventCode2Index(code, FALSE) != 0); 157 return (eventCode2Index(code, FALSE) != 0);
@@ -276,14 +247,15 @@ Res EventRead(Event *eventReturn, EventProc proc)
276{ 247{
277 size_t eventIndex, length; 248 size_t eventIndex, length;
278 Res res; 249 Res res;
279 EventType type; 250 EventCode code;
280 Event event; 251 Event event;
281 void *restOfEvent; 252 void *restOfEvent;
282 253
283 res = proc->reader(proc->readerP, &type, sizeof(EventType)); 254 res = proc->reader(proc->readerP, &code, sizeof(EventCode));
284 if (res != ResOK) return res; 255 if (res != ResOK)
256 return res;
285 257
286 eventIndex = eventType2Index(type); 258 eventIndex = eventCode2Index(code, TRUE);
287 length = eventTypes[eventIndex].length; 259 length = eventTypes[eventIndex].length;
288 if (proc->cachedEvent != NULL) { 260 if (proc->cachedEvent != NULL) {
289 event = proc->cachedEvent; 261 event = proc->cachedEvent;
@@ -294,13 +266,14 @@ Res EventRead(Event *eventReturn, EventProc proc)
294 if (event == NULL) return ResMEMORY; 266 if (event == NULL) return ResMEMORY;
295 } 267 }
296 268
297 event->any.code = type; 269 event->any.code = code;
298 restOfEvent = PointerAdd(event, sizeof(EventType)); 270 restOfEvent = PointerAdd(event, sizeof(EventCode));
299 if (type == EventIntern) { /* the only string event */ 271 if (code == EventInternCode) { /* the only string event */
300 /* read enough to get the length */ 272 /* read enough to get the length */
301 res = proc->reader(proc->readerP, restOfEvent, 273 res = proc->reader(proc->readerP, restOfEvent,
302 internStrOffset - sizeof(EventType)); 274 internStrOffset - sizeof(EventCode));
303 if (res != ResOK) return res; 275 if (res != ResOK)
276 return res;
304 /* read the rest */ 277 /* read the rest */
305 res = proc->reader(proc->readerP, &event->Intern.f1.str, 278 res = proc->reader(proc->readerP, &event->Intern.f1.str,
306 /* Length must agree with EVENT_WS. */ 279 /* Length must agree with EVENT_WS. */
@@ -309,7 +282,7 @@ Res EventRead(Event *eventReturn, EventProc proc)
309 if (res != ResOK) return res; 282 if (res != ResOK) return res;
310 } else { 283 } else {
311 res = proc->reader(proc->readerP, restOfEvent, 284 res = proc->reader(proc->readerP, restOfEvent,
312 length - sizeof(EventType)); 285 length - sizeof(EventCode));
313 if (res != ResOK) return res; 286 if (res != ResOK) return res;
314 } 287 }
315 *eventReturn = event; 288 *eventReturn = event;
@@ -328,7 +301,7 @@ Res EventRecord(EventProc proc, Event event, Word etime)
328 Res res; 301 Res res;
329 302
330 switch(event->any.code) { 303 switch(event->any.code) {
331 case EventIntern: { /* id, label */ 304 case EventInternCode: { /* id, label */
332 Symbol sym = malloc(sizeof(symbolStruct)); 305 Symbol sym = malloc(sizeof(symbolStruct));
333 306
334 if (sym == NULL) return ResMEMORY; 307 if (sym == NULL) return ResMEMORY;
@@ -340,7 +313,7 @@ Res EventRecord(EventProc proc, Event event, Word etime)
340 } 313 }
341 res = TableDefine(proc->internTable, sym->id, sym); 314 res = TableDefine(proc->internTable, sym->id, sym);
342 } break; 315 } break;
343 case EventLabel: { /* addr, id */ 316 case EventLabelCode: { /* addr, id */
344 Label label = malloc(sizeof(labelStruct)); 317 Label label = malloc(sizeof(labelStruct));
345 void *entry; 318 void *entry;
346 319