Mercurial > hg > xemacs-beta
diff src/console.c @ 412:697ef44129c6 r21-2-14
Import from CVS: tag r21-2-14
author | cvs |
---|---|
date | Mon, 13 Aug 2007 11:20:41 +0200 |
parents | 2f8bb876ab1d |
children | 41dbb7a9d5f2 |
line wrap: on
line diff
--- a/src/console.c Mon Aug 13 11:19:22 2007 +0200 +++ b/src/console.c Mon Aug 13 11:20:41 2007 +0200 @@ -53,7 +53,6 @@ list of consoles and stores into each console that does not say it has a local value. */ Lisp_Object Vconsole_defaults; -static void *console_defaults_saved_slots; /* This structure marks which slots in a console have corresponding default values in console_defaults. @@ -70,7 +69,7 @@ consoles. If a slot is -1, then there is a DEFVAR_CONSOLE_LOCAL for it - as well as a default value which is used to initialize newly-created + as well as a default value which is used to initialize newly-created consoles and as a reset-value when local-vars are killed. If a slot is -2, there is no DEFVAR_CONSOLE_LOCAL for it. @@ -88,7 +87,6 @@ /* This structure holds the names of symbols whose values may be console-local. It is indexed and accessed in the same way as the above. */ static Lisp_Object Vconsole_local_symbols; -static void *console_local_symbols_saved_slots; DEFINE_CONSOLE_TYPE (dead); @@ -98,19 +96,19 @@ static Lisp_Object -mark_console (Lisp_Object obj) +mark_console (Lisp_Object obj, void (*markobj) (Lisp_Object)) { struct console *con = XCONSOLE (obj); -#define MARKED_SLOT(x) mark_object (con->x) +#define MARKED_SLOT(x) ((void) (markobj (con->x))); #include "conslots.h" #undef MARKED_SLOT /* Can be zero for Vconsole_defaults, Vconsole_local_symbols */ if (con->conmeths) { - mark_object (con->conmeths->symbol); - MAYBE_CONMETH (con, mark_console, (con)); + markobj (con->conmeths->symbol); + MAYBE_CONMETH (con, mark_console, (con, markobj)); } return Qnil; @@ -129,7 +127,7 @@ sprintf (buf, "#<%s-console", !CONSOLE_LIVE_P (con) ? "dead" : CONSOLE_TYPE_NAME (con)); write_c_string (buf, printcharfun); - if (CONSOLE_LIVE_P (con) && !NILP (CONSOLE_CONNECTION (con))) + if (CONSOLE_LIVE_P (con)) { write_c_string (" on ", printcharfun); print_internal (CONSOLE_CONNECTION (con), printcharfun, 1); @@ -139,7 +137,7 @@ } DEFINE_LRECORD_IMPLEMENTATION ("console", console, - mark_console, print_console, 0, 0, 0, 0, + mark_console, print_console, 0, 0, 0, struct console); static struct console * @@ -355,24 +353,16 @@ semi_canonicalize_console_connection (struct console_methods *meths, Lisp_Object name, Error_behavior errb) { - if (HAS_CONTYPE_METH_P (meths, semi_canonicalize_console_connection)) - return CONTYPE_METH (meths, semi_canonicalize_console_connection, - (name, errb)); - else - return CONTYPE_METH_OR_GIVEN (meths, canonicalize_console_connection, - (name, errb), name); + return CONTYPE_METH_OR_GIVEN (meths, semi_canonicalize_console_connection, + (name, errb), name); } static Lisp_Object canonicalize_console_connection (struct console_methods *meths, Lisp_Object name, Error_behavior errb) { - if (HAS_CONTYPE_METH_P (meths, canonicalize_console_connection)) - return CONTYPE_METH (meths, canonicalize_console_connection, - (name, errb)); - else - return CONTYPE_METH_OR_GIVEN (meths, semi_canonicalize_console_connection, - (name, errb), name); + return CONTYPE_METH_OR_GIVEN (meths, canonicalize_console_connection, + (name, errb), name); } static Lisp_Object @@ -496,7 +486,7 @@ /* Do it this way so that the console list is in order of creation */ Vconsole_list = nconc2 (Vconsole_list, Fcons (console, Qnil)); - if (CONMETH_OR_GIVEN (con, initially_selected_for_input, (con), 0)) + if (CONMETH (con, initially_selected_for_input, (con))) event_stream_select_console (con); UNGCPRO; @@ -886,9 +876,7 @@ Extcount count; Extbyte *p; - TO_EXTERNAL_FORMAT (LISP_STRING, stuffstring, - ALLOCA, (p, count), - Qkeyboard); + GET_STRING_EXT_DATA_ALLOCA (stuffstring, FORMAT_KEYBOARD, p, count); while (count-- > 0) stuff_char (XCONSOLE (Vcontrolling_terminal), *p++); stuff_char (XCONSOLE (Vcontrolling_terminal), '\n'); @@ -1073,8 +1061,6 @@ void syms_of_console (void) { - INIT_LRECORD_IMPLEMENTATION (console); - DEFSUBR (Fvalid_console_type_p); DEFSUBR (Fconsole_type_list); DEFSUBR (Fcdfw_console); @@ -1110,45 +1096,10 @@ defsymbol (&Qsuspend_resume_hook, "suspend-resume-hook"); } -static const struct lrecord_description cte_description_1[] = { - { XD_LISP_OBJECT, offsetof (console_type_entry, symbol) }, - { XD_STRUCT_PTR, offsetof (console_type_entry, meths), 1, &console_methods_description }, - { XD_END } -}; - -static const struct struct_description cte_description = { - sizeof (console_type_entry), - cte_description_1 -}; - -static const struct lrecord_description cted_description_1[] = { - XD_DYNARR_DESC (console_type_entry_dynarr, &cte_description), - { XD_END } -}; - -const struct struct_description cted_description = { - sizeof (console_type_entry_dynarr), - cted_description_1 -}; - -static const struct lrecord_description console_methods_description_1[] = { - { XD_LISP_OBJECT, offsetof (struct console_methods, symbol) }, - { XD_LISP_OBJECT, offsetof (struct console_methods, predicate_symbol) }, - { XD_LISP_OBJECT, offsetof (struct console_methods, image_conversion_list) }, - { XD_END } -}; - -const struct struct_description console_methods_description = { - sizeof (struct console_methods), - console_methods_description_1 -}; - - void console_type_create (void) { the_console_type_entry_dynarr = Dynarr_new (console_type_entry); - dumpstruct(&the_console_type_entry_dynarr, &cted_description); Vconsole_type_list = Qnil; staticpro (&Vconsole_type_list); @@ -1163,19 +1114,8 @@ } void -reinit_vars_of_console (void) -{ - staticpro_nodump (&Vconsole_list); - Vconsole_list = Qnil; - staticpro_nodump (&Vselected_console); - Vselected_console = Qnil; -} - -void vars_of_console (void) { - reinit_vars_of_console (); - DEFVAR_LISP ("create-console-hook", &Vcreate_console_hook /* Function or functions to call when a console is created. One argument, the newly-created console. @@ -1191,33 +1131,26 @@ */ ); Vdelete_console_hook = Qnil; + staticpro (&Vconsole_list); + Vconsole_list = Qnil; + staticpro (&Vselected_console); + Vselected_console = Qnil; + #ifdef HAVE_WINDOW_SYSTEM Fprovide (intern ("window-system")); #endif } /* The docstrings for DEFVAR_* are recorded externally by make-docfile. */ + +/* Declaring this stuff as const produces 'Cannot reinitialize' messages + from SunPro C's fix-and-continue feature (a way neato feature that + makes debugging unbelievably more bearable) */ #define DEFVAR_CONSOLE_LOCAL_1(lname, field_name, forward_type, magicfun) do { \ - static const struct symbol_value_forward I_hate_C = \ - { /* struct symbol_value_forward */ \ - { /* struct symbol_value_magic */ \ - { /* struct lcrecord_header */ \ - { /* struct lrecord_header */ \ - lrecord_type_symbol_value_forward, /* lrecord_type_index */ \ - 1, /* mark bit */ \ - 1, /* c_readonly bit */ \ - 1 /* lisp_readonly bit */ \ - }, \ - 0, /* next */ \ - 0, /* uid */ \ - 0 /* free */ \ - }, \ - &(console_local_flags.field_name), \ - forward_type \ - }, \ - magicfun \ - }; \ - \ + static CONST_IF_NOT_DEBUG struct symbol_value_forward I_hate_C \ + = { { { symbol_value_forward_lheader_initializer, \ + (struct lcrecord_header *) &(console_local_flags.field_name), 69 }, \ + forward_type }, magicfun }; \ { \ int offset = ((char *)symbol_value_forward_forward (&I_hate_C) \ - (char *)&console_local_flags); \ @@ -1251,13 +1184,13 @@ { zero_lcrecord (con); -#define MARKED_SLOT(x) con->x = zap +#define MARKED_SLOT(x) con->x = (zap); #include "conslots.h" #undef MARKED_SLOT } -static void -common_init_complex_vars_of_console (void) +void +complex_vars_of_console (void) { /* Make sure all markable slots in console_defaults are initialized reasonably, so mark_console won't choke. @@ -1265,8 +1198,8 @@ struct console *defs = alloc_lcrecord_type (struct console, &lrecord_console); struct console *syms = alloc_lcrecord_type (struct console, &lrecord_console); - staticpro_nodump (&Vconsole_defaults); - staticpro_nodump (&Vconsole_local_symbols); + staticpro (&Vconsole_defaults); + staticpro (&Vconsole_local_symbols); XSETCONSOLE (Vconsole_defaults, defs); XSETCONSOLE (Vconsole_local_symbols, syms); @@ -1321,53 +1254,6 @@ currently allowable due to the XINT() handling of this value. With some rearrangement you can get 4 more bits. */ } -} - - -#define CONSOLE_SLOTS_SIZE (offsetof (struct console, CONSOLE_SLOTS_LAST_NAME) - offsetof (struct console, CONSOLE_SLOTS_FIRST_NAME) + sizeof (Lisp_Object)) -#define CONSOLE_SLOTS_COUNT (CONSOLE_SLOTS_SIZE / sizeof (Lisp_Object)) - -void -reinit_complex_vars_of_console (void) -{ - struct console *defs, *syms; - - common_init_complex_vars_of_console (); - - defs = XCONSOLE (Vconsole_defaults); - syms = XCONSOLE (Vconsole_local_symbols); - memcpy (&defs->CONSOLE_SLOTS_FIRST_NAME, - console_defaults_saved_slots, - CONSOLE_SLOTS_SIZE); - memcpy (&syms->CONSOLE_SLOTS_FIRST_NAME, - console_local_symbols_saved_slots, - CONSOLE_SLOTS_SIZE); -} - - -static const struct lrecord_description console_slots_description_1[] = { - { XD_LISP_OBJECT_ARRAY, 0, CONSOLE_SLOTS_COUNT }, - { XD_END } -}; - -static const struct struct_description console_slots_description = { - CONSOLE_SLOTS_SIZE, - console_slots_description_1 -}; - -void -complex_vars_of_console (void) -{ - struct console *defs, *syms; - - common_init_complex_vars_of_console (); - - defs = XCONSOLE (Vconsole_defaults); - syms = XCONSOLE (Vconsole_local_symbols); - console_defaults_saved_slots = &defs->CONSOLE_SLOTS_FIRST_NAME; - console_local_symbols_saved_slots = &syms->CONSOLE_SLOTS_FIRST_NAME; - dumpstruct (&console_defaults_saved_slots, &console_slots_description); - dumpstruct (&console_local_symbols_saved_slots, &console_slots_description); DEFVAR_CONSOLE_DEFAULTS ("default-function-key-map", function_key_map /* Default value of `function-key-map' for consoles that don't override it. @@ -1398,7 +1284,7 @@ */ ); #ifdef HAVE_TTY - /* #### Should this somehow go to TTY data? How do we make it + /* ### Should this somehow go to TTY data? How do we make it accessible from Lisp, then? */ DEFVAR_CONSOLE_LOCAL ("tty-erase-char", tty_erase_char /* The ERASE character as set by the user with stty. @@ -1407,14 +1293,14 @@ */ ); #endif - /* While this should be const it can't be because some things + /* While this should be CONST it can't be because some things (i.e. edebug) do manipulate it. */ DEFVAR_CONSOLE_LOCAL ("defining-kbd-macro", defining_kbd_macro /* -Non-nil while a keyboard macro is being defined. Don't set this! +Non-nil while a console macro is being defined. Don't set this! */ ); DEFVAR_CONSOLE_LOCAL ("last-kbd-macro", last_kbd_macro /* -Last keyboard macro defined, as a vector of events; nil if none defined. +Last kbd macro defined, as a vector of events; nil if none defined. */ ); DEFVAR_CONSOLE_LOCAL ("prefix-arg", prefix_arg /*