comparison src/device.h @ 272:c5d627a313b1 r21-0b34

Import from CVS: tag r21-0b34
author cvs
date Mon, 13 Aug 2007 10:28:48 +0200
parents b2472a1930f2
children 8626e4521993
comparison
equal deleted inserted replaced
271:c7b7086b0a39 272:c5d627a313b1
220 #define DEVICEP(x) RECORDP (x, device) 220 #define DEVICEP(x) RECORDP (x, device)
221 #define GC_DEVICEP(x) GC_RECORDP (x, device) 221 #define GC_DEVICEP(x) GC_RECORDP (x, device)
222 #define CHECK_DEVICE(x) CHECK_RECORD (x, device) 222 #define CHECK_DEVICE(x) CHECK_RECORD (x, device)
223 #define CONCHECK_DEVICE(x) CONCHECK_RECORD (x, device) 223 #define CONCHECK_DEVICE(x) CONCHECK_RECORD (x, device)
224 224
225 #define CHECK_LIVE_DEVICE(x) \ 225 #define CHECK_LIVE_DEVICE(x) do { \
226 do { CHECK_DEVICE (x); \ 226 CHECK_DEVICE (x); \
227 if (! DEVICEP (x) \ 227 if (! DEVICE_LIVE_P (XDEVICE (x))) \
228 || ! DEVICE_LIVE_P (XDEVICE (x))) \ 228 dead_wrong_type_argument (Qdevice_live_p, (x)); \
229 dead_wrong_type_argument (Qdevice_live_p, (x)); } while (0) 229 } while (0)
230 #define CONCHECK_LIVE_DEVICE(x) \ 230 #define CONCHECK_LIVE_DEVICE(x) do { \
231 do { CONCHECK_DEVICE (x); \ 231 CONCHECK_DEVICE (x); \
232 if (! DEVICEP (x) \ 232 if (! DEVICE_LIVE_P (XDEVICE (x))) \
233 || ! DEVICE_LIVE_P (XDEVICE (x))) \ 233 x = wrong_type_argument (Qdevice_live_p, (x)); \
234 x = wrong_type_argument (Qdevice_live_p, (x)); } while (0) 234 } while (0)
235 235
236 #define DEVICE_TYPE_P(d, type) EQ (DEVICE_TYPE (d), Q##type) 236 #define DEVICE_TYPE_P(d, type) EQ (DEVICE_TYPE (d), Q##type)
237 237
238 #ifdef ERROR_CHECK_TYPECHECK 238 #ifdef ERROR_CHECK_TYPECHECK
239 MAC_DECLARE_EXTERN (struct device *, MTdevice_data) 239 INLINE struct device *
240 error_check_device_type (struct device *d, Lisp_Object sym);
241 INLINE struct device *
242 error_check_device_type (struct device *d, Lisp_Object sym)
243 {
244 assert (EQ (DEVICE_TYPE (d), sym));
245 return d;
246 }
240 # define DEVICE_TYPE_DATA(d, type) \ 247 # define DEVICE_TYPE_DATA(d, type) \
241 MAC_BEGIN \ 248 ((struct type##_device *) (error_check_device_type (d, Q##type))->device_data)
242 MAC_DECLARE (struct device *, MTdevice_data, d) \
243 assert (DEVICE_TYPE_P (MTdevice_data, type)) \
244 MAC_SEP \
245 (struct type##_device *) MTdevice_data->device_data \
246 MAC_END
247 #else 249 #else
248 # define DEVICE_TYPE_DATA(d, type) \ 250 # define DEVICE_TYPE_DATA(d, type) \
249 ((struct type##_device *) (d)->device_data) 251 ((struct type##_device *) (d)->device_data)
250 #endif 252 #endif
251 253
286 #define CHECK_STREAM_DEVICE(z) CHECK_DEVICE_TYPE (z, stream) 288 #define CHECK_STREAM_DEVICE(z) CHECK_DEVICE_TYPE (z, stream)
287 #define CONCHECK_STREAM_DEVICE(z) CONCHECK_DEVICE_TYPE (z, stream) 289 #define CONCHECK_STREAM_DEVICE(z) CONCHECK_DEVICE_TYPE (z, stream)
288 290
289 #define DEVICE_WIN_P(dev) CONSOLE_TYPESYM_WIN_P (DEVICE_TYPE (dev)) 291 #define DEVICE_WIN_P(dev) CONSOLE_TYPESYM_WIN_P (DEVICE_TYPE (dev))
290 292
291 extern Lisp_Object Vdefault_device; 293 EXFUN (Fdevice_console, 1);
292 extern Lisp_Object Qdelete_device; 294 EXFUN (Fdevice_name, 1);
293 extern Lisp_Object Qdevice_live_p; 295 EXFUN (Fmake_device, 3);
294 296 EXFUN (Fselected_device, 1);
297
298 extern Lisp_Object Qcreate_device_hook, Qdelete_device_hook, Qgrayscale;
299 extern Lisp_Object Qinit_post_tty_win, Qmono, Vdefault_x_device;
295 extern Lisp_Object Vdevice_class_list; 300 extern Lisp_Object Vdevice_class_list;
296 301
297 extern Lisp_Object Qcolor, Qgrayscale, Qmono;
298 int valid_device_class_p (Lisp_Object class); 302 int valid_device_class_p (Lisp_Object class);
299 303
300 #define DEVICE_LIVE_P(d) (!EQ (DEVICE_TYPE (d), Qdead)) 304 #define DEVICE_LIVE_P(d) (!EQ (DEVICE_TYPE (d), Qdead))
301 305
302 #define DEVICE_REDISPLAY_INFO(d) ((d)->redisplay_info) 306 #define DEVICE_REDISPLAY_INFO(d) ((d)->redisplay_info)
319 #define DEVICE_OUTFD(d) ((d)->outfd) 323 #define DEVICE_OUTFD(d) ((d)->outfd)
320 #define DEVICE_OLD_FCNTL_OWNER(d) ((d)->old_fcntl_owner) 324 #define DEVICE_OLD_FCNTL_OWNER(d) ((d)->old_fcntl_owner)
321 #define DEVICE_ON_CONSOLE_P(d) ((d)->on_console_p) 325 #define DEVICE_ON_CONSOLE_P(d) ((d)->on_console_p)
322 #define DEVICE_CONNECTED_TO_NAS_P(d) ((d)->connected_to_nas_p) 326 #define DEVICE_CONNECTED_TO_NAS_P(d) ((d)->connected_to_nas_p)
323 327
324 #define LOCK_DEVICE(d) do { (d)->locked = 1; } while (0) 328 #define LOCK_DEVICE(d) ((void) ((d)->locked = 1))
325 #define UNLOCK_DEVICE(d) do { (d)->locked = 0; } while (0) 329 #define UNLOCK_DEVICE(d) ((void) ((d)->locked = 0))
326 330
327 #define INVALIDATE_DEVICE_PIXEL_TO_GLYPH_CACHE(d) \ 331 #define INVALIDATE_DEVICE_PIXEL_TO_GLYPH_CACHE(d) \
328 (d)->pixel_to_glyph_cache.valid = 0 332 ((void) ((d)->pixel_to_glyph_cache.valid = 0))
329 333
330 #define INVALIDATE_PIXEL_TO_GLYPH_CACHE do { \ 334 #define INVALIDATE_PIXEL_TO_GLYPH_CACHE do { \
331 Lisp_Object _devcons_, _concons_; \ 335 Lisp_Object _devcons_, _concons_; \
332 DEVICE_LOOP_NO_BREAK (_devcons_, _concons_) \ 336 DEVICE_LOOP_NO_BREAK (_devcons_, _concons_) \
333 INVALIDATE_DEVICE_PIXEL_TO_GLYPH_CACHE (XDEVICE (XCONS (_devcons_)->car));\ 337 INVALIDATE_DEVICE_PIXEL_TO_GLYPH_CACHE (XDEVICE (XCAR (_devcons_)));\
334 } while (0) 338 } while (0)
335 339
336 #define MARK_DEVICE_FACES_CHANGED(d) do { \ 340 #define MARK_DEVICE_FACES_CHANGED(d) \
337 faces_changed = 1; \ 341 ((void) (faces_changed = (d)->faces_changed = 1))
338 (d)->faces_changed = 1; } while (0) 342
339 343 #define MARK_DEVICE_GLYPHS_CHANGED(d) \
340 #define MARK_DEVICE_GLYPHS_CHANGED(d) do { \ 344 ((void) (glyphs_changed = (d)->glyphs_changed = 1))
341 glyphs_changed = 1; \ 345
342 (d)->glyphs_changed = 1; } while (0) 346 #define MARK_DEVICE_TOOLBARS_CHANGED(d) \
343 347 ((void) (toolbar_changed = (d)->toolbar_changed = 1))
344 #define MARK_DEVICE_TOOLBARS_CHANGED(d) do { \ 348
345 toolbar_changed = 1; \ 349 #define MARK_DEVICE_SIZE_CHANGED(d) \
346 (d)->toolbar_changed = 1; } while (0) 350 ((void) (size_changed = (d)->size_changed = 1))
347 351
348 #define MARK_DEVICE_SIZE_CHANGED(d) do { \ 352 #define MARK_DEVICE_FRAMES_FACES_CHANGED(d) do { \
349 size_changed = 1; \ 353 struct device *mdffc_d = (d); \
350 (d)->size_changed = 1; } while (0) 354 Lisp_Object frmcons; \
351 355 DEVICE_FRAME_LOOP (frmcons, mdffc_d) \
352 #define MARK_DEVICE_FRAMES_FACES_CHANGED(d) do { \ 356 XFRAME (XCAR (frmcons))->faces_changed = 1; \
353 Lisp_Object frmcons; \ 357 MARK_DEVICE_FACES_CHANGED (mdffc_d); \
354 DEVICE_FRAME_LOOP (frmcons, d) \ 358 } while (0)
355 XFRAME (XCONS (frmcons)->car)->faces_changed = 1; \ 359
356 MARK_DEVICE_FACES_CHANGED (d); } while (0) 360 #define MARK_DEVICE_FRAME_CHANGED(d) \
357 361 ((void) (frame_changed = (d)->frame_changed = 1))
358 #define MARK_DEVICE_FRAME_CHANGED(d) do { \ 362
359 frame_changed = 1; \ 363 #define MARK_DEVICE_WINDOWS_CHANGED(d) \
360 (d)->frame_changed = 1; } while (0) 364 ((void) (windows_changed = (d)->windows_changed = 1))
361 365
362 #define MARK_DEVICE_WINDOWS_CHANGED(d) do { \ 366 #define MARK_DEVICE_WINDOWS_STRUCTURE_CHANGED(d) \
363 windows_changed = 1; \ 367 ((void) (windows_structure_changed = (d)->windows_structure_changed = 1))
364 (d)->windows_changed = 1; } while (0)
365
366 #define MARK_DEVICE_WINDOWS_STRUCTURE_CHANGED(d) do { \
367 windows_structure_changed = 1; \
368 (d)->windows_structure_changed = 1; } while (0)
369 368
370 /* This turns out to be used heavily so we make it a macro to make it 369 /* This turns out to be used heavily so we make it a macro to make it
371 inline. Also, the majority of the time the object will turn out to 370 inline. Also, the majority of the time the object will turn out to
372 be a window so we move it from being checked last to being checked 371 be a window so we move it from being checked last to being checked
373 first. */ 372 first. */
388 CONSOLE_DEVICE_LOOP (devcons, con) \ 387 CONSOLE_DEVICE_LOOP (devcons, con) \
389 DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons))) 388 DEVICE_FRAME_LOOP (frmcons, XDEVICE (XCAR (devcons)))
390 389
391 void select_device_1 (Lisp_Object); 390 void select_device_1 (Lisp_Object);
392 struct device *decode_device (Lisp_Object); 391 struct device *decode_device (Lisp_Object);
393 Lisp_Object make_device (struct device *d);
394 void handle_asynch_device_change (void); 392 void handle_asynch_device_change (void);
395 void call_critical_lisp_code (struct device *d, Lisp_Object function, 393 void call_critical_lisp_code (struct device *d, Lisp_Object function,
396 Lisp_Object object); 394 Lisp_Object object);
397 void delete_device_internal (struct device *d, int force, 395 void delete_device_internal (struct device *d, int force,
398 int called_from_delete_console, 396 int called_from_delete_console,