428
+ − 1 /* Define console object for XEmacs.
872
+ − 2 Copyright (C) 1996, 2002 Ben Wing
428
+ − 3
+ − 4 This file is part of XEmacs.
+ − 5
+ − 6 XEmacs is free software; you can redistribute it and/or modify it
+ − 7 under the terms of the GNU General Public License as published by the
+ − 8 Free Software Foundation; either version 2, or (at your option) any
+ − 9 later version.
+ − 10
+ − 11 XEmacs is distributed in the hope that it will be useful, but WITHOUT
+ − 12 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ − 13 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
+ − 14 for more details.
+ − 15
+ − 16 You should have received a copy of the GNU General Public License
+ − 17 along with XEmacs; see the file COPYING. If not, write to
+ − 18 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+ − 19 Boston, MA 02111-1307, USA. */
+ − 20
+ − 21 /* Synched up with: Not in FSF. */
+ − 22
+ − 23 /* Written by Ben Wing. */
+ − 24
440
+ − 25 #ifndef INCLUDED_console_h_
+ − 26 #define INCLUDED_console_h_
428
+ − 27
+ − 28 /* Devices and consoles are similar entities. The idea is that
+ − 29 a console represents a physical keyboard/mouse/other-input-source
+ − 30 while a device represents a display where frames appear on.
+ − 31 In the X world, a console is a "Display" while a device is a
+ − 32 "Screen". Implementationally, it can sometimes get confusing:
+ − 33 under X, multiple devices on a single console are different
+ − 34 "Display" connections to what is in reality the same Display on
+ − 35 the same server. Because of this, input comes from the device
+ − 36 and not from the console. This is OK because events are basically
+ − 37 always tagged to a particular X window (i.e. frame),
+ − 38 which exists on only one screen; therefore the event won't be
+ − 39 reported multiple times even if there are multiple devices on
+ − 40 the same physical display. This is an implementation detail
+ − 41 specific to X consoles (e.g. under NeXTstep or Windows, this
+ − 42 could be different, and input would come directly from the console).
+ − 43 */
+ − 44
+ − 45
+ − 46 /* GCC does not like forward enum declaration. This needs to be
+ − 47 defined here. What a disgust! */
+ − 48
934
+ − 49 enum console_variant
+ − 50 {
+ − 51 dead_console,
+ − 52 tty_console,
+ − 53 gtk_console,
+ − 54 x_console,
+ − 55 mswindows_console,
+ − 56 stream_console
+ − 57 };
+ − 58
428
+ − 59 enum device_metrics
+ − 60 {
+ − 61 DM_color_default, DM_color_select, DM_color_balloon, DM_color_3d_face,
+ − 62 DM_color_3d_light, DM_color_3d_dark, DM_color_menu, DM_color_menu_highlight,
+ − 63 DM_color_menu_button, DM_color_menu_disabled, DM_color_toolbar,
+ − 64 DM_color_scrollbar, DM_color_desktop, DM_color_workspace, DM_font_default,
+ − 65 DM_font_menubar, DM_font_dialog, DM_size_cursor, DM_size_scrollbar,
+ − 66 DM_size_menu, DM_size_toolbar, DM_size_toolbar_button,
+ − 67 DM_size_toolbar_border, DM_size_icon, DM_size_icon_small, DM_size_device,
440
+ − 68 DM_size_workspace, DM_offset_workspace, DM_size_device_mm, DM_device_dpi,
+ − 69 DM_num_bit_planes, DM_num_color_cells, DM_mouse_buttons, DM_swap_buttons,
+ − 70 DM_show_sounds, DM_slow_device, DM_security
428
+ − 71 };
+ − 72
872
+ − 73 struct console;
428
+ − 74
+ − 75 DECLARE_LRECORD (console, struct console);
+ − 76 #define XCONSOLE(x) XRECORD (x, console, struct console)
617
+ − 77 #define wrap_console(p) wrap_record (p, console)
428
+ − 78 #define CONSOLEP(x) RECORDP (x, console)
+ − 79 #define CHECK_CONSOLE(x) CHECK_RECORD (x, console)
+ − 80 #define CONCHECK_CONSOLE(x) CONCHECK_RECORD (x, console)
+ − 81
872
+ − 82 /* Basic properties available to non-privileged users; redefined in
+ − 83 console-impl.h */
+ − 84
874
+ − 85 struct console_methods;
+ − 86
872
+ − 87 int console_live_p (struct console *c);
+ − 88 Lisp_Object console_device_list (struct console *c);
+ − 89
+ − 90 #define CONSOLE_LIVE_P(c) console_live_p (c)
+ − 91 #define CONSOLE_DEVICE_LIST(c) console_device_list (c)
+ − 92
428
+ − 93 #define CHECK_LIVE_CONSOLE(x) do { \
+ − 94 CHECK_CONSOLE (x); \
+ − 95 if (! CONSOLE_LIVE_P (XCONSOLE (x))) \
+ − 96 dead_wrong_type_argument (Qconsole_live_p, (x)); \
+ − 97 } while (0)
+ − 98 #define CONCHECK_LIVE_CONSOLE(x) do { \
+ − 99 CONCHECK_CONSOLE (x); \
+ − 100 if (! CONSOLE_LIVE_P (XCONSOLE (x))) \
+ − 101 x = wrong_type_argument (Qconsole_live_p, (x)); \
+ − 102 } while (0)
+ − 103
+ − 104 #define CDFW_CONSOLE(obj) \
1204
+ − 105 ((WINDOWP (obj) && WINDOW_LIVE_P (XWINDOW(obj))) ? WINDOW_CONSOLE (XWINDOW (obj)) \
+ − 106 : ((FRAMEP (obj) && FRAME_LIVE_P (XFRAME (obj))) ? FRAME_CONSOLE (XFRAME (obj)) \
+ − 107 : ((DEVICEP (obj) && DEVICE_LIVE_P (XDEVICE (obj))) ? DEVICE_CONSOLE (XDEVICE (obj)) \
+ − 108 : ((CONSOLEP (obj) && CONSOLE_LIVE_P (XCONSOLE (obj))) ? obj \
428
+ − 109 : Qnil))))
+ − 110
+ − 111 #define CONSOLE_LOOP(concons) LIST_LOOP (concons, Vconsole_list)
+ − 112 #define CONSOLE_DEVICE_LOOP(devcons, con) \
+ − 113 LIST_LOOP (devcons, CONSOLE_DEVICE_LIST (con))
+ − 114
872
+ − 115 EXFUN (Fconsole_disable_input, 1);
+ − 116 EXFUN (Fdelete_console, 2);
+ − 117 EXFUN (Fselect_console, 1);
+ − 118 EXFUN (Fselected_console, 0);
+ − 119
+ − 120 extern Lisp_Object Qcreate_console_hook, Qdelete_console_hook;
+ − 121 extern Lisp_Object Vconsole_defaults, Vconsole_type_list, Vselected_console;
+ − 122
+ − 123 int valid_console_type_p (Lisp_Object type);
428
+ − 124
+ − 125 Lisp_Object create_console (Lisp_Object name, Lisp_Object type,
+ − 126 Lisp_Object connection, Lisp_Object props);
+ − 127 void select_console_1 (Lisp_Object);
+ − 128 struct console *decode_console (Lisp_Object);
+ − 129 void add_entry_to_console_type_list (Lisp_Object symbol,
+ − 130 struct console_methods *type);
+ − 131 struct console_methods *decode_console_type (Lisp_Object type,
578
+ − 132 Error_Behavior errb);
934
+ − 133
+ − 134 enum console_variant get_console_variant (Lisp_Object type);
+ − 135
428
+ − 136 void delete_console_internal (struct console *con, int force,
+ − 137 int from_kill_emacs, int from_io_error);
+ − 138 void io_error_delete_console (Lisp_Object console);
+ − 139 void set_console_last_nonminibuf_frame (struct console *con,
+ − 140 Lisp_Object frame);
872
+ − 141 void stuff_buffered_input (Lisp_Object);
428
+ − 142
440
+ − 143 #endif /* INCLUDED_console_h_ */