Mercurial > hg > xemacs-beta
diff src/console.h @ 0:376386a54a3c r19-14
Import from CVS: tag r19-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 08:45:50 +0200 |
parents | |
children | ac2d302a0011 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/console.h Mon Aug 13 08:45:50 2007 +0200 @@ -0,0 +1,559 @@ +/* Define console object for XEmacs. + Copyright (C) 1996 Ben Wing + +This file is part of XEmacs. + +XEmacs is free software; you can redistribute it and/or modify it +under the terms of the GNU General Public License as published by the +Free Software Foundation; either version 2, or (at your option) any +later version. + +XEmacs is distributed in the hope that it will be useful, but WITHOUT +ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or +FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License +for more details. + +You should have received a copy of the GNU General Public License +along with XEmacs; see the file COPYING. If not, write to +the Free Software Foundation, Inc., 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +/* Synched up with: Not in FSF. */ + +/* Written by Ben Wing. */ + +#ifndef _XEMACS_CONSOLE_H_ +#define _XEMACS_CONSOLE_H_ + +/* Devices and consoles are similar entities. The idea is that + a console represents a physical keyboard/mouse/other-input-source + while a device represents a display where frames appear on. + In the X world, a console is a "Display" while a device is a + "Screen". Implementationally, it can sometimes get confusing: + under X, multiple devices on a single console are different + "Display" connections to what is in reality the same Display on + the same server. Because of this, input comes from the device + and not from the console. This is OK because events are basically + always tagged to a particular X window (i.e. frame), + which exists on only one screen; therefore the event won't be + reported multiple times even if there are multiple devices on + the same physical display. This is an implementational detail + specific to X consoles (e.g. under NeXTstep or Windows, this + could be different, and input would come directly from the console). +*/ + +struct console_methods +{ + CONST char *name; /* Used by print_console, print_device, print_frame */ + Lisp_Object symbol; + Lisp_Object predicate_symbol; + + /* console methods */ + void (*init_console_method) (struct console *, Lisp_Object props); + void (*mark_console_method) (struct console *, void (*)(Lisp_Object)); + int (*initially_selected_for_input_method) (struct console *); + void (*delete_console_method) (struct console *); + Lisp_Object (*semi_canonicalize_console_connection_method) + (Lisp_Object connection, Error_behavior errb); + Lisp_Object (*semi_canonicalize_device_connection_method) + (Lisp_Object connection, Error_behavior errb); + Lisp_Object (*canonicalize_console_connection_method) + (Lisp_Object connection, Error_behavior errb); + Lisp_Object (*canonicalize_device_connection_method) + (Lisp_Object connection, Error_behavior errb); + Lisp_Object (*device_to_console_connection_method) + (Lisp_Object connection, Error_behavior errb); + + /* device methods */ + void (*init_device_method) (struct device *, Lisp_Object props); + void (*finish_init_device_method) (struct device *, Lisp_Object props); + void (*delete_device_method) (struct device *); + void (*mark_device_method) (struct device *, void (*)(Lisp_Object)); + void (*asynch_device_change_method) (void); + int (*device_pixel_width_method) (struct device *); + int (*device_pixel_height_method) (struct device *); + int (*device_mm_width_method) (struct device *); + int (*device_mm_height_method) (struct device *); + int (*device_bitplanes_method) (struct device *); + int (*device_color_cells_method) (struct device *); + + /* frame methods */ + Lisp_Object *device_specific_frame_props; + void (*init_frame_1_method) (struct frame *, Lisp_Object properties); + void (*init_frame_2_method) (struct frame *, Lisp_Object properties); + void (*init_frame_3_method) (struct frame *); + void (*after_init_frame_method) (struct frame *, int first_on_device, + int first_on_console); + void (*mark_frame_method) (struct frame *, void (*)(Lisp_Object)); + void (*delete_frame_method) (struct frame *); + void (*focus_on_frame_method) (struct frame *); + void (*raise_frame_method) (struct frame *); + void (*lower_frame_method) (struct frame *); + int (*get_mouse_position_method) (struct device *d, Lisp_Object *frame, + int *x, int *y); + void (*set_mouse_position_method) (struct window *w, int x, int y); + void (*make_frame_visible_method) (struct frame *f); + void (*make_frame_invisible_method) (struct frame *f); + void (*iconify_frame_method) (struct frame *f); + Lisp_Object (*frame_property_method) (struct frame *f, Lisp_Object prop); + int (*internal_frame_property_p_method) (struct frame *f, + Lisp_Object prop); + Lisp_Object (*frame_properties_method) (struct frame *f); + void (*set_frame_properties_method) (struct frame *f, Lisp_Object plist); + void (*set_frame_size_method) (struct frame *f, int width, int height); + void (*set_frame_position_method) (struct frame *f, int xoff, int yoff); + int (*frame_visible_p_method) (struct frame *f); + int (*frame_totally_visible_p_method) (struct frame *f); + int (*frame_iconified_p_method) (struct frame *f); + void (*set_title_from_char_method) (struct frame *f, char *title); + void (*set_icon_name_from_char_method) (struct frame *f, char *title); + void (*set_frame_pointer_method) (struct frame *f); + void (*set_frame_icon_method) (struct frame *f); + void (*popup_menu_method) (Lisp_Object menu, Lisp_Object event); + Lisp_Object (*get_frame_parent_method) (struct frame *f); + + /* redisplay methods */ + int (*left_margin_width_method) (struct window *); + int (*right_margin_width_method) (struct window *); + int (*text_width_method) (struct face_cachel *cachel, + CONST Emchar *str, Charcount len); + void (*output_display_block_method) (struct window *, struct display_line *, + int, int, int, int, int, int, int); + int (*divider_width_method) (void); + int (*divider_height_method) (void); + int (*eol_cursor_width_method) (void); + void (*output_vertical_divider_method) (struct window *, int); + void (*clear_to_window_end_method) (struct window *, int, int); + void (*clear_region_method) (Lisp_Object, face_index, int, int, int, int); + void (*clear_frame_method) (struct frame *); + void (*output_begin_method) (struct device *); + void (*output_end_method) (struct device *); + int (*flash_method) (struct device *); + void (*ring_bell_method) (struct device *, int volume, int pitch, + int duration); + void (*frame_redraw_cursor_method) (struct frame *f); + + /* color methods */ + int (*initialize_color_instance_method) (struct Lisp_Color_Instance *, + Lisp_Object name, + Lisp_Object device, + Error_behavior errb); + void (*mark_color_instance_method) (struct Lisp_Color_Instance *, + void (*)(Lisp_Object)); + void (*print_color_instance_method) (struct Lisp_Color_Instance *, + Lisp_Object printcharfun, + int escapeflag); + void (*finalize_color_instance_method) (struct Lisp_Color_Instance *); + int (*color_instance_equal_method) (struct Lisp_Color_Instance *, + struct Lisp_Color_Instance *, + int depth); + unsigned long (*color_instance_hash_method) (struct Lisp_Color_Instance *, + int depth); + Lisp_Object (*color_instance_rgb_components_method) + (struct Lisp_Color_Instance *); + int (*valid_color_name_p_method) (struct device *, Lisp_Object color); + + /* font methods */ + int (*initialize_font_instance_method) (struct Lisp_Font_Instance *, + Lisp_Object name, + Lisp_Object device, + Error_behavior errb); + void (*mark_font_instance_method) (struct Lisp_Font_Instance *, + void (*)(Lisp_Object)); + void (*print_font_instance_method) (struct Lisp_Font_Instance *, + Lisp_Object printcharfun, + int escapeflag); + void (*finalize_font_instance_method) (struct Lisp_Font_Instance *); + Lisp_Object (*font_instance_truename_method) (struct Lisp_Font_Instance *, + Error_behavior errb); + Lisp_Object (*font_instance_properties_method) (struct Lisp_Font_Instance *); + Lisp_Object (*list_fonts_method) (Lisp_Object pattern, + Lisp_Object device); + Lisp_Object (*find_charset_font_method) (Lisp_Object device, + Lisp_Object font, + Lisp_Object charset); + int (*font_spec_matches_charset_method) (struct device *d, + Lisp_Object charset, + CONST Bufbyte *nonreloc, + Lisp_Object reloc, + Bytecount offset, + Bytecount length); + + /* image methods */ + void (*mark_image_instance_method) (struct Lisp_Image_Instance *, + void (*)(Lisp_Object)); + void (*print_image_instance_method) (struct Lisp_Image_Instance *, + Lisp_Object printcharfun, + int escapeflag); + void (*finalize_image_instance_method) (struct Lisp_Image_Instance *); + int (*image_instance_equal_method) (struct Lisp_Image_Instance *, + struct Lisp_Image_Instance *, + int depth); + unsigned long (*image_instance_hash_method) (struct Lisp_Image_Instance *, + int depth); + int (*colorize_image_instance_method) (Lisp_Object image_instance, + Lisp_Object fg, Lisp_Object bg); + Lisp_Object image_conversion_list; + +#ifdef HAVE_TOOLBARS + /* toolbar methods */ + void (*toolbar_size_changed_in_frame_method) (struct frame *f, + enum toolbar_pos pos, + Lisp_Object oldval); + void (*toolbar_visible_p_changed_in_frame_method) (struct frame *f, + enum toolbar_pos pos, + Lisp_Object oldval); + void (*output_frame_toolbars_method) (struct frame *); + void (*initialize_frame_toolbars_method) (struct frame *); + void (*free_frame_toolbars_method) (struct frame *); + void (*output_toolbar_button_method) (struct frame *, Lisp_Object); + void (*redraw_frame_toolbars_method) (struct frame *); + void (*redraw_exposed_toolbars_method) (struct frame *f, int x, int y, + int width, int height); +#endif + +#ifdef HAVE_SCROLLBARS + /* scrollbar methods */ + int (*inhibit_scrollbar_thumb_size_change_method) (void); + void (*free_scrollbar_instance_method) (struct scrollbar_instance *); + void (*release_scrollbar_instance_method) (struct scrollbar_instance *); + void (*create_scrollbar_instance_method) (struct frame *, int, + struct scrollbar_instance *); + void (*scrollbar_width_changed_in_frame_method) (Lisp_Object, struct frame *, + Lisp_Object); + void (*scrollbar_height_changed_in_frame_method) (Lisp_Object, + struct frame *, + Lisp_Object); + void (*update_scrollbar_instance_values_method) (struct window *, + struct scrollbar_instance *, + int, int, int, int, int, + int, int, int, int, int); + void (*update_scrollbar_instance_status_method) (struct window *, int, int, + struct + scrollbar_instance *); + void (*scrollbar_pointer_changed_in_window_method) (struct window *w); +#ifdef MEMORY_USAGE_STATS + int (*compute_scrollbar_instance_usage_method) (struct device *, + struct scrollbar_instance *, + struct overhead_stats *); +#endif +#endif /* HAVE_SCROLLBARS */ + +#ifdef HAVE_MENUBARS + /* menubar methods */ + void (*update_frame_menubars_method) (struct frame *); + void (*free_frame_menubars_method) (struct frame *); +#endif + +#ifdef HAVE_DIALOGS + /* dialog methods */ +#endif +}; + +#define CONSOLE_TYPE_NAME(c) ((c)->conmeths->name) +#define CONSOLE_TYPE(c) ((c)->conmeths->symbol) +#define CONMETH_TYPE(meths) ((meths)->symbol) + +/******** Accessing / calling a console method *********/ + +#define HAS_CONTYPE_METH_P(meth, m) ((meth)->m##_method) +#define CONTYPE_METH(meth, m, args) (((meth)->m##_method) args) + +/* Call a void-returning console method, if it exists */ +#define MAYBE_CONTYPE_METH(meth, m, args) \ +do { \ + struct console_methods *_maybe_contype_meth_meth = (meth); \ + if (HAS_CONTYPE_METH_P (_maybe_contype_meth_meth, m)) \ + CONTYPE_METH (_maybe_contype_meth_meth, m, args); \ +} while (0) + +MAC_DECLARE_EXTERN (struct console_methods *, MTcontype_meth_or_given) + +/* Call a console method, if it exists; otherwise return + the specified value */ +#define CONTYPE_METH_OR_GIVEN(meth, m, args, given) \ +MAC_BEGIN \ + MAC_DECLARE (struct console_methods *, \ + MTcontype_meth_or_given, meth) \ + HAS_CONTYPE_METH_P (MTcontype_meth_or_given, m) ? \ + CONTYPE_METH (MTcontype_meth_or_given, m, args) : (given) \ +MAC_END + +/* Call an int-returning console method, if it exists; otherwise + return 0 */ +#define MAYBE_INT_CONTYPE_METH(meth, m, args) \ + CONTYPE_METH_OR_GIVEN (meth, m, args, 0) + +/* Call an Lisp-Object-returning console method, if it exists; + otherwise return Qnil */ +#define MAYBE_LISP_CONTYPE_METH(meth, m, args) \ + CONTYPE_METH_OR_GIVEN (meth, m, args, Qnil) + +/******** Same functions, operating on a console instead of a + struct console_methods ********/ + +#define HAS_CONMETH_P(c, m) HAS_CONTYPE_METH_P ((c)->conmeths, m) +#define CONMETH(c, m, args) CONTYPE_METH ((c)->conmeths, m, args) +#define MAYBE_CONMETH(c, m, args) MAYBE_CONTYPE_METH ((c)->conmeths, m, args) +#define CONMETH_OR_GIVEN(c, m, args, given) \ + CONTYPE_METH_OR_GIVEN((c)->conmeths, m, args, given) +#define MAYBE_INT_CONMETH(c, m, args) \ + MAYBE_INT_CONTYPE_METH ((c)->conmeths, m, args) +#define MAYBE_LISP_CONMETH(c, m, args) \ + MAYBE_LISP_CONTYPE_METH ((c)->conmeths, m, args) + +/******** Defining new console types ********/ + +struct console_type_entry +{ + Lisp_Object symbol; + struct console_methods *meths; +}; + +#define DECLARE_CONSOLE_TYPE(type) \ +extern struct console_methods * type##_console_methods + +#define DEFINE_CONSOLE_TYPE(type) \ +struct console_methods * type##_console_methods + +#define INITIALIZE_CONSOLE_TYPE(type, obj_name, pred_sym) \ + do { \ + type##_console_methods = \ + malloc_type_and_zero (struct console_methods); \ + type##_console_methods->name = obj_name; \ + type##_console_methods->symbol = Q##type; \ + defsymbol (&type##_console_methods->predicate_symbol, \ + pred_sym); \ + add_entry_to_console_type_list (Q##type, \ + type##_console_methods); \ + type##_console_methods->image_conversion_list = Qnil; \ + staticpro (&type##_console_methods->image_conversion_list); \ + } while (0) + +/* Declare that console-type TYPE has method M; used in + initialization routines */ +#define CONSOLE_HAS_METHOD(type, m) \ + (type##_console_methods->m##_method = type##_##m) + +struct console +{ + struct lcrecord_header header; + + /* Description of this console's methods. */ + struct console_methods *conmeths; + + /* A structure of auxiliary data specific to the console type. + struct x_console is used for X window frames; defined in console-x.h + struct tty_console is used to TTY's; defined in console-tty.h */ + void *console_data; + + /* Character that causes a quit. Normally C-g. + #### Should be possible for this not to be ASCII. */ + int quit_char; + + /* ----- begin partially-completed console localization of + event loop ---- */ + + int local_var_flags; + +#define MARKED_SLOT(x) Lisp_Object x +#include "conslots.h" +#undef MARKED_SLOT + + /* Where to store the next keystroke of the macro. + Index into con->kbd_macro_builder. */ + int kbd_macro_ptr; + + /* The finalized section of the macro starts at kbd_macro_buffer and + ends before this. This is not the same as kbd_macro_pointer, because + we advance this to kbd_macro_pointer when a key's command is complete. + This way, the keystrokes for "end-kbd-macro" are not included in the + macro. */ + int kbd_macro_end; + + /* ----- end partially-completed console localization of event loop ---- */ + + unsigned int input_enabled :1; +}; + +DECLARE_LRECORD (console, struct console); +#define XCONSOLE(x) XRECORD (x, console, struct console) +#define XSETCONSOLE(x, p) XSETRECORD (x, p, console) +#define CONSOLEP(x) RECORDP (x, console) +#define GC_CONSOLEP(x) GC_RECORDP (x, console) +#define CHECK_CONSOLE(x) CHECK_RECORD (x, console) +#define CONCHECK_CONSOLE(x) CONCHECK_RECORD (x, console) + +#define CHECK_LIVE_CONSOLE(x) \ + do { CHECK_CONSOLE (x); \ + if (! CONSOLEP (x) \ + || ! CONSOLE_LIVE_P (XCONSOLE (x))) \ + dead_wrong_type_argument (Qconsole_live_p, (x)); } while (0) +#define CONCHECK_LIVE_CONSOLE(x) \ + do { CONCHECK_CONSOLE (x); \ + if (! CONSOLEP (x) \ + || ! CONSOLE_LIVE_P (XCONSOLE (x))) \ + x = wrong_type_argument (Qconsole_live_p, (x)); } while (0) + +#define CONSOLE_TYPE_P(con, type) EQ (CONSOLE_TYPE (con), Q##type) + +#ifdef ERROR_CHECK_TYPECHECK +MAC_DECLARE_EXTERN (struct console *, MTconsole_data) +# define CONSOLE_TYPE_DATA(con, type) \ +MAC_BEGIN \ + MAC_DECLARE (struct console *, MTconsole_data, con) \ + assert (CONSOLE_TYPE_P (MTconsole_data, type)) \ + MAC_SEP \ + (struct type##_console *) MTconsole_data->console_data \ +MAC_END +#else +# define CONSOLE_TYPE_DATA(con, type) \ + ((struct type##_console *) (con)->console_data) +#endif + +#define CHECK_CONSOLE_TYPE(x, type) \ + do { \ + CHECK_CONSOLE (x); \ + if (!(CONSOLEP (x) && CONSOLE_TYPE_P (XCONSOLE (x), \ + type))) \ + dead_wrong_type_argument \ + (type##_console_methods->predicate_symbol, x); \ + } while (0) +#define CONCHECK_CONSOLE_TYPE(x, type) \ + do { \ + CONCHECK_CONSOLE (x); \ + if (!(CONSOLEP (x) && CONSOLE_TYPE_P (XCONSOLE (x), \ + type))) \ + x = wrong_type_argument \ + (type##_console_methods->predicate_symbol, x); \ + } while (0) + +/* #### These should be in the console-*.h files but there are + too many places where the abstraction is broken. Need to + fix. */ + +#ifdef HAVE_X_WINDOWS +#define CONSOLE_TYPESYM_X_P(typesym) EQ (typesym, Qx) +#else +#define CONSOLE_TYPESYM_X_P(typesym) 0 +#endif +#ifdef HAVE_NEXTSTEP +#define CONSOLE_TYPESYM_NS_P(typesym) EQ (typesym, Qns) +#else +#define CONSOLE_TYPESYM_NS_P(typesym) 0 +#endif +#ifdef HAVE_TTY +#define CONSOLE_TYPESYM_TTY_P(typesym) EQ (typesym, Qtty) +#else +#define CONSOLE_TYPESYM_TTY_P(typesym) 0 +#endif +#define CONSOLE_TYPESYM_STREAM_P(typesym) EQ (typesym, Qstream) + +#define CONSOLE_TYPESYM_WIN_P(typesym) \ + (CONSOLE_TYPESYM_X_P (typesym) || CONSOLE_TYPESYM_NS_P (typesym)) + +#define CONSOLE_X_P(con) CONSOLE_TYPESYM_X_P (CONSOLE_TYPE (con)) +#define CHECK_X_CONSOLE(z) CHECK_CONSOLE_TYPE (z, x) +#define CONCHECK_X_CONSOLE(z) CONCHECK_CONSOLE_TYPE (z, x) + +#define CONSOLE_NS_P(con) CONSOLE_TYPESYM_NS_P (CONSOLE_TYPE (con)) +#define CHECK_NS_CONSOLE(z) CHECK_CONSOLE_TYPE (z, ns) +#define CONCHECK_NS_CONSOLE(z) CONCHECK_CONSOLE_TYPE (z, ns) + +#define CONSOLE_TTY_P(con) CONSOLE_TYPESYM_TTY_P (CONSOLE_TYPE (con)) +#define CHECK_TTY_CONSOLE(z) CHECK_CONSOLE_TYPE (z, tty) +#define CONCHECK_TTY_CONSOLE(z) CONCHECK_CONSOLE_TYPE (z, tty) + +#define CONSOLE_STREAM_P(con) CONSOLE_TYPESYM_STREAM_P (CONSOLE_TYPE (con)) +#define CHECK_STREAM_CONSOLE(z) CHECK_CONSOLE_TYPE (z, stream) +#define CONCHECK_STREAM_CONSOLE(z) CONCHECK_CONSOLE_TYPE (z, stream) + +#define CONSOLE_WIN_P(con) CONSOLE_TYPESYM_WIN_P (CONSOLE_TYPE (con)) + +extern Lisp_Object Vconsole_list, Vselected_console, Vdefault_console; +extern Lisp_Object Qconsole_live_p; + +/* This structure holds the default values of the console-local + variables defined with DEFVAR_CONSOLE_LOCAL, that have special + slots in each console. The default value occupies the same slot + in this structure as an individual console's value occupies in + that console. Setting the default value also goes through the + list of consoles and stores into each console that does not say + it has a local value. */ + +extern Lisp_Object Vconsole_defaults; + +/* This structure marks which slots in a console have corresponding + default values in console_defaults. + Each such slot has a nonzero value in this structure. + The value has only one nonzero bit. + + When a console has its own local value for a slot, + the bit for that slot (found in the same slot in this structure) + is turned on in the console's local_var_flags slot. + + If a slot in this structure is zero, then even though there may + be a DEFVAR_CONSOLE_LOCAL for the slot, there is no default value for it; + and the corresponding slot in console_defaults is not used. */ + +extern struct console console_local_flags; + +extern Lisp_Object Vconsole_type_list; + +extern Lisp_Object Qtty, Qstream, Qdead; +#ifdef HAVE_X_WINDOWS +extern Lisp_Object Qx; +#endif /* HAVE_X_WINDOWS */ +#ifdef HAVE_NEXTSTEP +extern Lisp_Object Qns; +#endif /* HAVE_NEXTSTEP */ + +int valid_console_type_p (Lisp_Object type); + +#define CONSOLE_LIVE_P(con) (!EQ (CONSOLE_TYPE (con), Qdead)) + +#define CONSOLE_NAME(con) ((con)->name) +#define CONSOLE_CONNECTION(con) ((con)->connection) +#define CONSOLE_CANON_CONNECTION(con) ((con)->canon_connection) +#define CONSOLE_FUNCTION_KEY_MAP(con) ((con)->function_key_map) +#define CONSOLE_DEVICE_LIST(con) ((con)->device_list) +#define CONSOLE_SELECTED_DEVICE(con) ((con)->selected_device) +#define CONSOLE_SELECTED_FRAME(con) \ + DEVICE_SELECTED_FRAME (XDEVICE ((con)->selected_device)) +#define CONSOLE_LAST_NONMINIBUF_FRAME(con) NON_LVALUE ((con)->_last_nonminibuf_frame) +#define CONSOLE_QUIT_CHAR(con) ((con)->quit_char) + +#define CDFW_CONSOLE(obj) \ + (WINDOWP (obj) \ + ? WINDOW_CONSOLE (XWINDOW (obj)) \ + : (FRAMEP (obj) \ + ? FRAME_CONSOLE (XFRAME (obj)) \ + : (DEVICEP (obj) \ + ? DEVICE_CONSOLE (XDEVICE (obj)) \ + : (CONSOLEP (obj) \ + ? obj \ + : Qnil)))) + +#define CONSOLE_LOOP(concons) LIST_LOOP (concons, Vconsole_list) +#define CONSOLE_DEVICE_LOOP(devcons, con) \ + LIST_LOOP (devcons, CONSOLE_DEVICE_LIST (con)) + +DECLARE_CONSOLE_TYPE (dead); +extern console_type_entry_dynarr *the_console_type_entry_dynarr; + +Lisp_Object create_console (Lisp_Object name, Lisp_Object type, + Lisp_Object connection, Lisp_Object props); +void select_console_1 (Lisp_Object); +struct console *decode_console (Lisp_Object); +Lisp_Object make_console (struct console *c); +void add_entry_to_console_type_list (Lisp_Object symbol, + struct console_methods *type); +struct console_methods *decode_console_type (Lisp_Object type, + Error_behavior errb); +void delete_console_internal (struct console *con, int force, + int from_kill_emacs, int from_io_error); +void io_error_delete_console (Lisp_Object console); +void set_console_last_nonminibuf_frame (struct console *con, + Lisp_Object frame); + +#endif /* _XEMACS_CONSOLE_H_ */