diff options
| author | Richard Brooksby | 2012-08-22 09:31:38 +0100 |
|---|---|---|
| committer | Richard Brooksby | 2012-08-22 09:31:38 +0100 |
| commit | c8a97631209e616d60b143707b71c056fb0fc764 (patch) | |
| tree | b911ba1d513529f1a95587a2da8b0416dd333d0f /mps/code | |
| parent | 76ab2591ef672a5bbd3e18582373a0ca8359ad71 (diff) | |
| download | emacs-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.c | 61 |
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 | ||
| 72 | typedef struct { | 72 | typedef 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 | ||
| 102 | static eventRecord eventTypes[] = { | 97 | static 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 | |||
| 115 | static 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 | ||
| 129 | static size_t eventCode2Index(EventCode code, Bool errorp) | 110 | static 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 | |||
| 176 | EventCode 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 | |||
| 184 | Bool EventCodeIsValid(EventCode code) | 155 | Bool 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 | ||