comparison src/events.c @ 5178:97eb4942aec8

merge
author Ben Wing <ben@xemacs.org>
date Mon, 29 Mar 2010 21:28:13 -0500
parents 1fae11d56ad2
children 71ee43b8a74d
comparison
equal deleted inserted replaced
5177:b785049378e3 5178:97eb4942aec8
60 60
61 /************************************************************************/ 61 /************************************************************************/
62 /* definition of event object */ 62 /* definition of event object */
63 /************************************************************************/ 63 /************************************************************************/
64 64
65 /* #### Ad-hoc hack. Should be part of define_lrecord_implementation */ 65 /* #### Ad-hoc hack. Should be an object method. */
66 void 66 void
67 clear_event_resource (void) 67 clear_event_resource (void)
68 { 68 {
69 Vevent_resource = Qnil; 69 Vevent_resource = Qnil;
70 } 70 }
72 /* Make sure we lose quickly if we try to use this event */ 72 /* Make sure we lose quickly if we try to use this event */
73 static void 73 static void
74 deinitialize_event (Lisp_Object ev) 74 deinitialize_event (Lisp_Object ev)
75 { 75 {
76 Lisp_Event *event = XEVENT (ev); 76 Lisp_Event *event = XEVENT (ev);
77 int i; 77
78 /* Preserve the old UID for this event, for tracking it */ 78 deadbeef_memory ((Rawbyte *) event + sizeof (event->lheader),
79 unsigned int old_uid = event->lheader.uid; 79 sizeof (*event) - sizeof (event->lheader));
80 80
81 for (i = 0; i < (int) (sizeof (Lisp_Event) / sizeof (int)); i++)
82 ((int *) event) [i] = 0xdeadbeef; /* -559038737 base 10 */
83 set_lheader_implementation (&event->lheader, &lrecord_event);
84 event->lheader.uid = old_uid;
85 set_event_type (event, dead_event); 81 set_event_type (event, dead_event);
86 SET_EVENT_CHANNEL (event, Qnil); 82 SET_EVENT_CHANNEL (event, Qnil);
87 XSET_EVENT_NEXT (ev, Qnil); 83 XSET_EVENT_NEXT (ev, Qnil);
88 } 84 }
89 85
90 /* Set everything to zero or nil so that it's predictable. */ 86 /* Set everything to zero or nil so that it's predictable. */
91 void 87 void
92 zero_event (Lisp_Event *e) 88 zero_event (Lisp_Event *e)
93 { 89 {
94 /* Preserve the old UID for this event, for tracking it */ 90 zero_nonsized_lisp_object (wrap_event (e));
95 unsigned int old_uid = e->lheader.uid;
96
97 xzero (*e);
98 set_lheader_implementation (&e->lheader, &lrecord_event);
99 e->lheader.uid = old_uid;
100 set_event_type (e, empty_event); 91 set_event_type (e, empty_event);
101 SET_EVENT_CHANNEL (e, Qnil); 92 SET_EVENT_CHANNEL (e, Qnil);
102 SET_EVENT_NEXT (e, Qnil); 93 SET_EVENT_NEXT (e, Qnil);
103 } 94 }
104 95
210 { XD_END } 201 { XD_END }
211 }; 202 };
212 203
213 #ifdef EVENT_DATA_AS_OBJECTS 204 #ifdef EVENT_DATA_AS_OBJECTS
214 205
215 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("key-data", key_data, 206 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("key-data", key_data,
216 0, /*dumpable-flag*/ 207 0, internal_object_printer, 0, 0, 0,
217 0, 0, 0, 0, 0, 208 key_data_description,
218 key_data_description, 209 Lisp_Key_Data);
219 Lisp_Key_Data); 210
220 211 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("button-data", button_data,
221 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("button-data", button_data, 212 0, internal_object_printer, 0, 0, 0,
222 0, /*dumpable-flag*/ 213 button_data_description,
223 0, 0, 0, 0, 0, 214 Lisp_Button_Data);
224 button_data_description, 215
225 Lisp_Button_Data); 216 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("motion-data", motion_data,
226 217 0, internal_object_printer, 0, 0, 0,
227 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("motion-data", motion_data, 218 motion_data_description,
228 0, /*dumpable-flag*/ 219 Lisp_Motion_Data);
229 0, 0, 0, 0, 0, 220
230 motion_data_description, 221 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("process-data", process_data,
231 Lisp_Motion_Data); 222 0, internal_object_printer, 0, 0, 0,
232 223 process_data_description,
233 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("process-data", process_data, 224 Lisp_Process_Data);
234 0, /*dumpable-flag*/ 225
235 0, 0, 0, 0, 0, 226 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("timeout-data", timeout_data,
236 process_data_description, 227 0, internal_object_printer, 0, 0, 0,
237 Lisp_Process_Data); 228 timeout_data_description,
238 229 Lisp_Timeout_Data);
239 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("timeout-data", timeout_data, 230
240 0, /*dumpable-flag*/ 231 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("eval-data", eval_data,
241 0, 0, 0, 0, 0, 232 0, internal_object_printer, 0, 0, 0,
242 timeout_data_description, 233 eval_data_description,
243 Lisp_Timeout_Data); 234 Lisp_Eval_Data);
244 235
245 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("eval-data", eval_data, 236 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("misc-user-data", misc_user_data,
246 0, /*dumpable-flag*/ 237 0, internal_object_printer, 0, 0, 0,
247 0, 0, 0, 0, 0, 238 misc_user_data_description,
248 eval_data_description, 239 Lisp_Misc_User_Data);
249 Lisp_Eval_Data); 240
250 241 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("magic-eval-data", magic_eval_data,
251 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("misc-user-data", misc_user_data, 242 0, internal_object_printer, 0, 0, 0,
252 0, /*dumpable-flag*/ 243 magic_eval_data_description,
253 0, 0, 0, 0, 0, 244 Lisp_Magic_Eval_Data);
254 misc_user_data_description, 245
255 Lisp_Misc_User_Data); 246 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("magic-data", magic_data,
256 247 0, internal_object_printer, 0, 0, 0,
257 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("magic-eval-data", magic_eval_data, 248 magic_data_description,
258 0, /*dumpable-flag*/ 249 Lisp_Magic_Data);
259 0, 0, 0, 0, 0,
260 magic_eval_data_description,
261 Lisp_Magic_Eval_Data);
262
263 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("magic-data", magic_data,
264 0, /*dumpable-flag*/
265 0, 0, 0, 0, 0,
266 magic_data_description,
267 Lisp_Magic_Data);
268 250
269 #endif /* EVENT_DATA_AS_OBJECTS */ 251 #endif /* EVENT_DATA_AS_OBJECTS */
270 252
271 static Lisp_Object 253 static Lisp_Object
272 mark_event (Lisp_Object obj) 254 mark_event (Lisp_Object obj)
320 static void 302 static void
321 print_event (Lisp_Object obj, Lisp_Object printcharfun, 303 print_event (Lisp_Object obj, Lisp_Object printcharfun,
322 int UNUSED (escapeflag)) 304 int UNUSED (escapeflag))
323 { 305 {
324 if (print_readably) 306 if (print_readably)
325 printing_unreadable_object ("#<event>"); 307 printing_unreadable_object_fmt ("#<event 0x%x>", LISP_OBJECT_UID (obj));
326 308
327 switch (XEVENT (obj)->event_type) 309 switch (XEVENT (obj)->event_type)
328 { 310 {
329 case key_press_event: 311 case key_press_event:
330 print_event_1 ("#<keypress-event ", obj, printcharfun); 312 print_event_1 ("#<keypress-event ", obj, printcharfun);
378 break; 360 break;
379 default: 361 default:
380 write_ascstring (printcharfun, "#<UNKNOWN-EVENT-TYPE"); 362 write_ascstring (printcharfun, "#<UNKNOWN-EVENT-TYPE");
381 break; 363 break;
382 } 364 }
383 write_ascstring (printcharfun, ">"); 365 write_fmt_string (printcharfun, " 0x%x>", LISP_OBJECT_UID (obj));
384 } 366 }
385 367
386 static int 368 static int
387 event_equal (Lisp_Object obj1, Lisp_Object obj2, int UNUSED (depth), 369 event_equal (Lisp_Object obj1, Lisp_Object obj2, int UNUSED (depth),
388 int UNUSED (foldcase)) 370 int UNUSED (foldcase))
505 } 487 }
506 488
507 return 0; /* unreached */ 489 return 0; /* unreached */
508 } 490 }
509 491
510 DEFINE_BASIC_LRECORD_IMPLEMENTATION ("event", event, 492 DEFINE_NODUMP_FROB_BLOCK_LISP_OBJECT ("event", event,
511 0, /*dumpable-flag*/ 493 mark_event, print_event, 0,
512 mark_event, print_event, 0, event_equal, 494 event_equal, event_hash,
513 event_hash, event_description, 495 event_description,
514 Lisp_Event); 496 Lisp_Event);
515 497
516 DEFUN ("make-event", Fmake_event, 0, 2, 0, /* 498 DEFUN ("make-event", Fmake_event, 0, 2, 0, /*
517 Return a new event of type TYPE, with properties described by PLIST. 499 Return a new event of type TYPE, with properties described by PLIST.
518 500
519 TYPE is a symbol, either `empty', `key-press', `button-press', 501 TYPE is a symbol, either `empty', `key-press', `button-press',
2554 /************************************************************************/ 2536 /************************************************************************/
2555 2537
2556 void 2538 void
2557 syms_of_events (void) 2539 syms_of_events (void)
2558 { 2540 {
2559 INIT_LRECORD_IMPLEMENTATION (event); 2541 INIT_LISP_OBJECT (event);
2560 #ifdef EVENT_DATA_AS_OBJECTS 2542 #ifdef EVENT_DATA_AS_OBJECTS
2561 INIT_LRECORD_IMPLEMENTATION (key_data); 2543 INIT_LISP_OBJECT (key_data);
2562 INIT_LRECORD_IMPLEMENTATION (button_data); 2544 INIT_LISP_OBJECT (button_data);
2563 INIT_LRECORD_IMPLEMENTATION (motion_data); 2545 INIT_LISP_OBJECT (motion_data);
2564 INIT_LRECORD_IMPLEMENTATION (process_data); 2546 INIT_LISP_OBJECT (process_data);
2565 INIT_LRECORD_IMPLEMENTATION (timeout_data); 2547 INIT_LISP_OBJECT (timeout_data);
2566 INIT_LRECORD_IMPLEMENTATION (eval_data); 2548 INIT_LISP_OBJECT (eval_data);
2567 INIT_LRECORD_IMPLEMENTATION (misc_user_data); 2549 INIT_LISP_OBJECT (misc_user_data);
2568 INIT_LRECORD_IMPLEMENTATION (magic_eval_data); 2550 INIT_LISP_OBJECT (magic_eval_data);
2569 INIT_LRECORD_IMPLEMENTATION (magic_data); 2551 INIT_LISP_OBJECT (magic_data);
2570 #endif /* EVENT_DATA_AS_OBJECTS */ 2552 #endif /* EVENT_DATA_AS_OBJECTS */
2571 2553
2572 DEFSUBR (Fcharacter_to_event); 2554 DEFSUBR (Fcharacter_to_event);
2573 DEFSUBR (Fevent_to_character); 2555 DEFSUBR (Fevent_to_character);
2574 2556
2637 void 2619 void
2638 reinit_vars_of_events (void) 2620 reinit_vars_of_events (void)
2639 { 2621 {
2640 Vevent_resource = Qnil; 2622 Vevent_resource = Qnil;
2641 #ifdef NEW_GC 2623 #ifdef NEW_GC
2642 staticpro (&Vevent_resource); 2624 staticpro_nodump (&Vevent_resource);
2643 #endif /* NEW_GC */ 2625 #endif /* NEW_GC */
2644 } 2626 }
2645 2627
2646 void 2628 void
2647 vars_of_events (void) 2629 vars_of_events (void)