comparison src/file-coding.c @ 1204:e22b0213b713

[xemacs-hg @ 2003-01-12 11:07:58 by michaels] modules/ChangeLog: 2002-12-16 Ben Wing <ben@xemacs.org> * postgresql/postgresql.c: remove ifdef USE_KKCC. src/ChangeLog: 2003-01-08 Mike Sperber <mike@xemacs.org> * console.h (CDFW_CONSOLE): Don't lead to a crash if we're dealing with a dead window/frame/device/console. 2002-12-20 Mike Sperber <mike@xemacs.org> * ui-gtk.c: Fix typo from Ben's patch: emacs_ffi_data is a typedef, not a struct. emacs_gtk_object_data is a typedef, not a struct. * gtk-glue.c (gdk_event_to_emacs_event): Fix typos from Ben's patch: le -> emacs_event + rearrange the code. * event-gtk.c (gtk_event_to_emacs_event): Fix typos from Ben's patch: ..._UNDERLYING_GDK_EVENT -> ..._GDK_EVENT, ev -> key_event. * device-gtk.c: Fix typo from Ben's patch: x_keysym_map_hash_table -> x_keysym_map_hashtable. 2002-12-19 Mike Sperber <mike@xemacs.org> * menubar-x.c (set_frame_menubar): Initialize protect_me field of popup_data. 2002-12-16 Ben Wing <ben@xemacs.org> Major cleanup of KKCC, etc. KKCC, pdump-related: -- descriptions are written for all objects. this required some changes in the format of some objects, e.g. extents, popup-data, coding system, lstream, lcrecord-list. -- KKCC now handles weakness in markers, hash tables, elsewhere correctly (formerly, you'd eventually get a stack overflow due to endlessly expanding markers). -- textual changes: lrecord_description -> memory_description, struct_description -> sized_memory_description. -- extensive comment describing descriptions and pdump. -- redo XD_UNION so it works inline and change its format to provide sufficient info for pdump. implement XD_UNION in pdump. also add XD_UNION_DYNAMIC_SIZE, which works like XD_UNION except for when auto-computing structure sizes. -- add support for XD_INDIRECT in description offsets (used by extents). -- add support for "description maps", allowing for indirect descriptions that are retrieved from an object at run-time. this generalizes XD_CODING_SYSTEM_END, XD_SPECIFIER_END, etc., which have now been eliminated. -- add a fifth field "flags" to memory_description, to support flags that can be specified for this particular line. Currently defined flags are XD_FLAG_NO_KKCC (KKCC should ignore this entry; useful for the weakness above in markers, etc.), XD_FLAG_NO_PDUMP (pdump should ignore this entry), XD_FLAG_UNION_DEFAULT_ENTRY (in union maps, this specifies a "default" entry for all remaining values), and XD_FLAG_FREE_LISP_OBJECT (for use with lcrecord-lists). -- clean up the kkcc-itis in events, so that the differences between event data as separate objects and as a union are now minimized to a small number of places. with the new XD_UNION, we no longer need event data as separate objects, so this code is no longer ifdef USE_KKCC, but instead ifdef EVENT_DATA_AS_OBJECTS, not used by default. make sure that we explicitly free the separate event data objects when no longer in use, to maintain the invariant the event processing causes no consing. -- also remove other USE_KKCC ifdefs when not necessary. -- allow for KKCC compilation under MS Windows. -- fix README.kkcc. -- dump_add_root_object -> dump_add_root_lisp_object. -- implement dump_add_root_block and use this to handle dump_add_opaque. -- factor out some code duplicated in kkcc and pdump. Other allocation/object-related: -- change various *slots.h so MARKED_SLOT() call no longer includes semicolon. -- free_marker() takes a Lisp_Object not a direct pointer. -- make bit vectors lcrecords, like vectors, and eliminate code that essentially duplicated the lcrecord handling. -- additional asserts in FREE_FIXED_TYPE, formerly duplicated in the various callers of this. -- all lcrecord allocation functions now zero out the returned lcrecords. unnecessary calls to zero_lcrecord removed. add long comment describing these functions. -- extract out process and coding system slots, like for buffers, frames, etc. -- lcrecords now set the type of items sitting on the free list to lcrecord_type_free. -- changes to the way that gap arrays are allocated, for kkcc's benefit -- now, one single memory block with a stretchy array on the end, instead of a separate block holding the array. Error-checking-related: -- now can compile with C++ under MS Windows. clean up compile errors discovered that way. (a few were real problems) -- add C++ error-checking code to verify problems with mismatched GCPRO/UNGCPRO. (there were a few in the kkcc code.) add long comment about how to catch insufficient GCPRO (yes, it's possible using C++). -- add debug_p4(), a simple object printer, when debug_print() doesn't work. -- add dp() and db() as short synonyms of debug_print(), debug_backtrace(). -- `print' tries EXTREMELY hard to avoid core dumping when printing when crashing or from debug_print(), and tries as hard as it reasonably can in other situations. -- Correct the message output upon crashing to be more up-to-date. Event-related: -- document event-matches-key-specifier-p better. -- generalize the dispatch queues formerly duplicated in the various event implementations. add event methods to drain pending events. generalize and clean up QUIT handling, removing event-specific quit processing. allow arbitrary keystrokes, not just ASCII, to be the QUIT char. among other things, this should fix some longstanding bugs in X quit handling. long comment describing the various event queues. -- implement delaying of XFlush() if there are pending expose events. SOMEONE PLEASE TRY THIS OUT. -- Fix `xemacs -batch -l dunnet' under Cygwin. Try to fix under MS Windows but not quite there yet. Other: -- class -> class_ and no more C++ games with this item. new -> new_ in the lwlib code, so far not elsewhere. -- use `struct htentry' not `struct hentry' in elhash.c to avoid debugger confusion with hash.c. -- new macros ALIST_LOOP_3, ALIST_LOOP_4. * README.kkcc: * alloc.c: * alloc.c (deadbeef_memory): * alloc.c (allocate_lisp_storage): * alloc.c (copy_lisp_object): * alloc.c (ALLOCATE_FIXED_TYPE_1): * alloc.c (FREE_FIXED_TYPE): * alloc.c (make_vector_internal): * alloc.c (make_bit_vector_internal): * alloc.c (make_key_data): * alloc.c (make_button_data): * alloc.c (make_motion_data): * alloc.c (make_process_data): * alloc.c (make_timeout_data): * alloc.c (make_magic_data): * alloc.c (make_magic_eval_data): * alloc.c (make_eval_data): * alloc.c (make_misc_user_data): * alloc.c (struct string_chars_block): * alloc.c (mark_lcrecord_list): * alloc.c (make_lcrecord_list): * alloc.c (alloc_managed_lcrecord): * alloc.c (free_managed_lcrecord): * alloc.c (alloc_automanaged_lcrecord): * alloc.c (staticpro_1): * alloc.c (staticpro): * alloc.c (lispdesc_indirect_count_1): * alloc.c (lispdesc_indirect_description_1): * alloc.c (lispdesc_one_description_line_size): * alloc.c (lispdesc_structure_size): * alloc.c (mark_object_maybe_checking_free): * alloc.c (mark_with_description): * alloc.c (mark_struct_contents): * alloc.c (mark_object): * alloc.c (tick_lcrecord_stats): * alloc.c (free_cons): * alloc.c (free_key_data): * alloc.c (free_button_data): * alloc.c (free_motion_data): * alloc.c (free_process_data): * alloc.c (free_timeout_data): * alloc.c (free_magic_data): * alloc.c (free_magic_eval_data): * alloc.c (free_eval_data): * alloc.c (free_misc_user_data): * alloc.c (free_marker): * alloc.c (compact_string_chars): * alloc.c (gc_sweep): * alloc.c (garbage_collect_1): * alloc.c (Fgarbage_collect): * alloc.c (common_init_alloc_early): * alloc.c (init_alloc_early): * alloc.c (init_alloc_once_early): * buffer.c: * buffer.c (mark_buffer): * buffer.c (MARKED_SLOT): * buffer.c (cleanup_buffer_undo_lists): * buffer.c (Fget_file_buffer): * buffer.h (MARKED_SLOT): * bufslots.h: * bytecode.c: * callint.c: * casetab.c: * chartab.c: * chartab.c (symbol_to_char_table_type): * cmdloop.c: * cmdloop.c (Fcommand_loop_1): * config.h.in (new): * conslots.h: * console-gtk-impl.h (struct gtk_frame): * console-impl.h: * console-impl.h (struct console): * console-impl.h (MARKED_SLOT): * console-impl.h (CONSOLE_QUIT_EVENT): * console-msw-impl.h (XM_BUMPQUEUE): * console-msw.c (write_string_to_mswindows_debugging_output): * console-msw.h: * console-stream-impl.h: * console-stream-impl.h (struct stream_console): * console-stream.c: * console-stream.c (stream_init_console): * console-stream.h: * console-tty.c: * console-tty.h: * console-x.h: * console.c: * console.c (mark_console): * console.c (MARKED_SLOT): * console.c (allocate_console): * console.c (get_console_variant): * console.c (create_console): * console.c (delete_console_internal): * console.c (Fset_input_mode): * console.c (Fcurrent_input_mode): * console.c (common_init_complex_vars_of_console): * console.h: * console.h (console_variant): * console.h (device_metrics): * data.c: * data.c (Faref): * data.c (Faset): * data.c (decode_weak_list_type): * database.c: * debug.c (xemacs_debug_loop): * debug.c (FROB): * debug.c (Fadd_debug_class_to_check): * debug.c (Fdelete_debug_class_to_check): * debug.c (Fset_debug_classes_to_check): * debug.c (Fset_debug_class_types_to_check): * debug.c (Fdebug_types_being_checked): * debug.h (DASSERT): * device-gtk.c: * device-impl.h (struct device): * device-impl.h (MARKED_SLOT): * device-msw.c: * device-x.c: * device-x.c (x_init_device_class): * device-x.c (x_comp_visual_info): * device-x.c (x_try_best_visual_class): * device-x.c (x_init_device): * device-x.c (construct_name_list): * device-x.c (x_get_resource_prefix): * device-x.c (Fx_get_resource): * device-x.c (Fx_display_visual_class): * device.c: * device.c (MARKED_SLOT): * device.c (allocate_device): * device.c (Fmake_device): * device.c (delete_device_internal): * device.c (Fset_device_class): * device.h: * devslots.h: * devslots.h (MARKED_SLOT): * dialog-msw.c: * dired-msw.c (mswindows_ls_sort_fcn): * dired-msw.c (mswindows_get_files): * dired-msw.c (mswindows_format_file): * doprnt.c (parse_doprnt_spec): * dumper.c: * dumper.c (struct): * dumper.c (dump_add_root_block): * dumper.c (dump_add_root_struct_ptr): * dumper.c (dump_add_root_lisp_object): * dumper.c (pdump_struct_list_elt): * dumper.c (pdump_get_entry_list): * dumper.c (pdump_backtrace): * dumper.c (pdump_bump_depth): * dumper.c (pdump_register_sub): * dumper.c (pdump_register_object): * dumper.c (pdump_register_struct_contents): * dumper.c (pdump_register_struct): * dumper.c (pdump_store_new_pointer_offsets): * dumper.c (pdump_dump_data): * dumper.c (pdump_reloc_one): * dumper.c (pdump_allocate_offset): * dumper.c (pdump_scan_by_alignment): * dumper.c (pdump_dump_root_blocks): * dumper.c (pdump_dump_rtables): * dumper.c (pdump_dump_root_lisp_objects): * dumper.c (pdump): * dumper.c (pdump_load_finish): * dumper.c (pdump_file_get): * dumper.c (pdump_resource_get): * dumper.c (pdump_load): * editfns.c (save_excursion_restore): * editfns.c (user_login_name): * editfns.c (save_restriction_restore): * elhash.c: * elhash.c (htentry): * elhash.c (struct Lisp_Hash_Table): * elhash.c (HTENTRY_CLEAR_P): * elhash.c (LINEAR_PROBING_LOOP): * elhash.c (check_hash_table_invariants): * elhash.c (mark_hash_table): * elhash.c (hash_table_equal): * elhash.c (print_hash_table_data): * elhash.c (free_hentries): * elhash.c (make_general_lisp_hash_table): * elhash.c (decode_hash_table_weakness): * elhash.c (decode_hash_table_test): * elhash.c (Fcopy_hash_table): * elhash.c (resize_hash_table): * elhash.c (pdump_reorganize_hash_table): * elhash.c (find_htentry): * elhash.c (Fgethash): * elhash.c (Fputhash): * elhash.c (remhash_1): * elhash.c (Fremhash): * elhash.c (Fclrhash): * elhash.c (copy_compress_hentries): * elhash.c (elisp_maphash_unsafe): * elhash.c (finish_marking_weak_hash_tables): * elhash.c (prune_weak_hash_tables): * elhash.h: * emacs.c: * emacs.c (main_1): * emacs.c (main): * emacs.c (shut_down_emacs): * emodules.h (dump_add_root_lisp_object): * eval.c: * eval.c (unwind_to_catch): * eval.c (maybe_signal_error_1): * eval.c (maybe_signal_continuable_error_1): * eval.c (maybe_signal_error): * eval.c (maybe_signal_continuable_error): * eval.c (maybe_signal_error_2): * eval.c (maybe_signal_continuable_error_2): * eval.c (maybe_signal_ferror): * eval.c (maybe_signal_continuable_ferror): * eval.c (maybe_signal_ferror_with_frob): * eval.c (maybe_signal_continuable_ferror_with_frob): * eval.c (maybe_syntax_error): * eval.c (maybe_sferror): * eval.c (maybe_invalid_argument): * eval.c (maybe_invalid_constant): * eval.c (maybe_invalid_operation): * eval.c (maybe_invalid_change): * eval.c (maybe_invalid_state): * eval.c (Feval): * eval.c (call_trapping_problems): * eval.c (call_with_suspended_errors): * eval.c (warn_when_safe_lispobj): * eval.c (warn_when_safe): * eval.c (vars_of_eval): * event-Xt.c: * event-Xt.c (maybe_define_x_key_as_self_inserting_character): * event-Xt.c (x_to_emacs_keysym): * event-Xt.c (x_event_to_emacs_event): * event-Xt.c (emacs_Xt_enqueue_focus_event): * event-Xt.c (emacs_Xt_format_magic_event): * event-Xt.c (emacs_Xt_compare_magic_event): * event-Xt.c (emacs_Xt_hash_magic_event): * event-Xt.c (emacs_Xt_handle_magic_event): * event-Xt.c (Xt_timeout_to_emacs_event): * event-Xt.c (Xt_process_to_emacs_event): * event-Xt.c (signal_special_Xt_user_event): * event-Xt.c (emacs_Xt_next_event): * event-Xt.c (emacs_Xt_event_handler): * event-Xt.c (emacs_Xt_drain_queue): * event-Xt.c (emacs_Xt_event_pending_p): * event-Xt.c (check_if_pending_expose_event): * event-Xt.c (reinit_vars_of_event_Xt): * event-Xt.c (vars_of_event_Xt): * event-gtk.c: * event-gtk.c (IS_MODIFIER_KEY): * event-gtk.c (emacs_gtk_format_magic_event): * event-gtk.c (emacs_gtk_compare_magic_event): * event-gtk.c (emacs_gtk_hash_magic_event): * event-gtk.c (emacs_gtk_handle_magic_event): * event-gtk.c (gtk_to_emacs_keysym): * event-gtk.c (gtk_timeout_to_emacs_event): * event-gtk.c (gtk_process_to_emacs_event): * event-gtk.c (dragndrop_data_received): * event-gtk.c (signal_special_gtk_user_event): * event-gtk.c (emacs_gtk_next_event): * event-gtk.c (gtk_event_to_emacs_event): * event-gtk.c (generic_event_handler): * event-gtk.c (emacs_shell_event_handler): * event-gtk.c (emacs_gtk_drain_queue): * event-gtk.c (emacs_gtk_event_pending_p): * event-gtk.c (reinit_vars_of_event_gtk): * event-gtk.c (vars_of_event_gtk): * event-msw.c: * event-msw.c (struct winsock_stream): * event-msw.c (winsock_reader): * event-msw.c (winsock_writer): * event-msw.c (mswindows_enqueue_dispatch_event): * event-msw.c (mswindows_enqueue_misc_user_event): * event-msw.c (mswindows_enqueue_magic_event): * event-msw.c (mswindows_enqueue_process_event): * event-msw.c (mswindows_enqueue_mouse_button_event): * event-msw.c (mswindows_enqueue_keypress_event): * event-msw.c (mswindows_dequeue_dispatch_event): * event-msw.c (emacs_mswindows_drain_queue): * event-msw.c (mswindows_need_event_in_modal_loop): * event-msw.c (mswindows_need_event): * event-msw.c (mswindows_wm_timer_callback): * event-msw.c (dde_eval_string): * event-msw.c (Fdde_alloc_advise_item): * event-msw.c (mswindows_dde_callback): * event-msw.c (mswindows_wnd_proc): * event-msw.c (remove_timeout_mapper): * event-msw.c (emacs_mswindows_remove_timeout): * event-msw.c (emacs_mswindows_event_pending_p): * event-msw.c (emacs_mswindows_format_magic_event): * event-msw.c (emacs_mswindows_compare_magic_event): * event-msw.c (emacs_mswindows_hash_magic_event): * event-msw.c (emacs_mswindows_handle_magic_event): * event-msw.c (emacs_mswindows_select_console): * event-msw.c (emacs_mswindows_unselect_console): * event-msw.c (reinit_vars_of_event_mswindows): * event-msw.c (vars_of_event_mswindows): * event-stream.c: * event-stream.c (mark_command_builder): * event-stream.c (reset_command_builder_event_chain): * event-stream.c (allocate_command_builder): * event-stream.c (copy_command_builder): * event-stream.c (command_builder_append_event): * event-stream.c (event_stream_event_pending_p): * event-stream.c (event_stream_force_event_pending): * event-stream.c (maybe_read_quit_event): * event-stream.c (event_stream_drain_queue): * event-stream.c (remove_quit_p_event): * event-stream.c (event_stream_quit_p): * event-stream.c (echo_key_event): * event-stream.c (maybe_kbd_translate): * event-stream.c (execute_help_form): * event-stream.c (event_stream_generate_wakeup): * event-stream.c (enqueue_dispatch_event): * event-stream.c (enqueue_magic_eval_event): * event-stream.c (Fenqueue_eval_event): * event-stream.c (enqueue_misc_user_event): * event-stream.c (enqueue_misc_user_event_pos): * event-stream.c (next_event_internal): * event-stream.c (Fnext_event): * event-stream.c (Faccept_process_output): * event-stream.c (execute_internal_event): * event-stream.c (munge_keymap_translate): * event-stream.c (command_builder_find_leaf_no_mule_processing): * event-stream.c (command_builder_find_leaf): * event-stream.c (lookup_command_event): * event-stream.c (is_scrollbar_event): * event-stream.c (execute_command_event): * event-stream.c (Fdispatch_event): * event-stream.c (Fread_key_sequence): * event-stream.c (dribble_out_event): * event-stream.c (vars_of_event_stream): * event-tty.c (tty_timeout_to_emacs_event): * event-tty.c (emacs_tty_next_event): * event-tty.c (emacs_tty_drain_queue): * event-tty.c (reinit_vars_of_event_tty): * event-unixoid.c: * event-unixoid.c (find_tty_or_stream_console_from_fd): * event-unixoid.c (read_event_from_tty_or_stream_desc): * event-unixoid.c (drain_tty_devices): * event-unixoid.c (poll_fds_for_input): * events.c: * events.c (deinitialize_event): * events.c (zero_event): * events.c (mark_event): * events.c (print_event_1): * events.c (print_event): * events.c (event_equal): * events.c (event_hash): * events.c (Fmake_event): * events.c (Fdeallocate_event): * events.c (Fcopy_event): * events.c (map_event_chain_remove): * events.c (character_to_event): * events.c (event_to_character): * events.c (Fevent_to_character): * events.c (format_event_object): * events.c (upshift_event): * events.c (downshift_event): * events.c (event_upshifted_p): * events.c (Fevent_live_p): * events.c (Fevent_type): * events.c (Fevent_timestamp): * events.c (CHECK_EVENT_TYPE): * events.c (CHECK_EVENT_TYPE2): * events.c (CHECK_EVENT_TYPE3): * events.c (Fevent_key): * events.c (Fevent_button): * events.c (Fevent_modifier_bits): * events.c (event_x_y_pixel_internal): * events.c (event_pixel_translation): * events.c (Fevent_process): * events.c (Fevent_function): * events.c (Fevent_object): * events.c (Fevent_properties): * events.c (syms_of_events): * events.c (vars_of_events): * events.h: * events.h (struct event_stream): * events.h (struct Lisp_Key_Data): * events.h (KEY_DATA_KEYSYM): * events.h (EVENT_KEY_KEYSYM): * events.h (struct Lisp_Button_Data): * events.h (EVENT_BUTTON_BUTTON): * events.h (struct Lisp_Motion_Data): * events.h (EVENT_MOTION_X): * events.h (struct Lisp_Process_Data): * events.h (EVENT_PROCESS_PROCESS): * events.h (struct Lisp_Timeout_Data): * events.h (EVENT_TIMEOUT_INTERVAL_ID): * events.h (struct Lisp_Eval_Data): * events.h (EVENT_EVAL_FUNCTION): * events.h (struct Lisp_Misc_User_Data): * events.h (EVENT_MISC_USER_FUNCTION): * events.h (struct Lisp_Magic_Eval_Data): * events.h (EVENT_MAGIC_EVAL_INTERNAL_FUNCTION): * events.h (struct Lisp_Magic_Data): * events.h (EVENT_MAGIC_UNDERLYING): * events.h (EVENT_MAGIC_GDK_EVENT): * events.h (struct Lisp_Event): * events.h (XEVENT_CHANNEL): * events.h (SET_EVENT_TIMESTAMP_ZERO): * events.h (SET_EVENT_CHANNEL): * events.h (SET_EVENT_NEXT): * events.h (XSET_EVENT_TYPE): * events.h (struct command_builder): * extents.c: * extents.c (gap_array_adjust_markers): * extents.c (gap_array_recompute_derived_values): * extents.c (gap_array_move_gap): * extents.c (gap_array_make_gap): * extents.c (gap_array_insert_els): * extents.c (gap_array_delete_els): * extents.c (gap_array_make_marker): * extents.c (gap_array_delete_marker): * extents.c (gap_array_move_marker): * extents.c (make_gap_array): * extents.c (free_gap_array): * extents.c (extent_list_num_els): * extents.c (extent_list_insert): * extents.c (mark_extent_auxiliary): * extents.c (allocate_extent_auxiliary): * extents.c (decode_extent_at_flag): * extents.c (verify_extent_mapper): * extents.c (symbol_to_glyph_layout): * extents.c (syms_of_extents): * faces.c: * file-coding.c: * file-coding.c (struct_detector_category_description =): * file-coding.c (detector_category_dynarr_description_1): * file-coding.c (struct_detector_description =): * file-coding.c (detector_dynarr_description_1): * file-coding.c (MARKED_SLOT): * file-coding.c (mark_coding_system): * file-coding.c (coding_system_extra_description_map): * file-coding.c (coding_system_description): * file-coding.c (allocate_coding_system): * file-coding.c (symbol_to_eol_type): * file-coding.c (Fcoding_system_aliasee): * file-coding.c (set_coding_stream_coding_system): * file-coding.c (struct convert_eol_coding_system): * file-coding.c (struct undecided_coding_system): * file-coding.c (undecided_mark_coding_stream): * file-coding.c (coding_category_symbol_to_id): * file-coding.c (struct gzip_coding_system): * file-coding.c (coding_system_type_create): * file-coding.h: * file-coding.h (struct Lisp_Coding_System): * file-coding.h (CODING_SYSTEM_SLOT_DECLARATION): * file-coding.h (coding_system_variant): * file-coding.h (struct coding_system_methods): * file-coding.h (DEFINE_CODING_SYSTEM_TYPE_WITH_DATA): * file-coding.h (INITIALIZE_CODING_SYSTEM_TYPE_WITH_DATA): * file-coding.h (struct coding_stream): * fileio.c (Fsubstitute_in_file_name): * floatfns.c: * fns.c: * fns.c (base64_encode_1): * frame-gtk.c: * frame-gtk.c (Fgtk_start_drag_internal): * frame-impl.h (struct frame): * frame-impl.h (MARKED_SLOT): * frame-msw.c: * frame-x.c: * frame-x.c (Fcde_start_drag_internal): * frame-x.c (Foffix_start_drag_internal): * frame.c: * frame.c (MARKED_SLOT): * frame.c (allocate_frame_core): * frame.c (delete_frame_internal): * frame.c (Fmouse_position_as_motion_event): * frameslots.h: * frameslots.h (MARKED_SLOT_ARRAY): * free-hook.c: * glyphs-msw.c (mswindows_widget_instantiate): * glyphs-x.c: * glyphs-x.c (convert_EImage_to_XImage): * glyphs.c: * glyphs.c (process_image_string_instantiator): * glyphs.c (mark_image_instance): * glyphs.c (allocate_image_instance): * glyphs.c (unmap_subwindow): * glyphs.c (map_subwindow): * glyphs.c (syms_of_glyphs): * glyphs.c (specifier_type_create_image): * glyphs.h: * glyphs.h (struct text_image_instance): * glyphs.h (struct Lisp_Image_Instance): * gmalloc.c: * gmalloc.c ("C"): * gpmevent.c (Freceive_gpm_event): * gpmevent.c (gpm_next_event_cb): * gpmevent.c (vars_of_gpmevent): * gtk-glue.c (gdk_event_to_emacs_event): * gtk-xemacs.c (gtk_xemacs_class_init): * gui-msw.c: * gui-msw.c (mswindows_handle_gui_wm_command): * gui-msw.c (mswindows_translate_menu_or_dialog_item): * gui-x.c: * gui-x.c (mark_popup_data): * gui-x.c (snarf_widget_value_mapper): * gui-x.c (gcpro_popup_callbacks): * gui-x.c (ungcpro_popup_callbacks): * gui-x.c (free_popup_widget_value_tree): * gui-x.c (popup_selection_callback): * gui-x.h: * gui-x.h (struct popup_data): * gui.c: * gui.c (allocate_gui_item): * gutter.c (decode_gutter_position): * hash.c (NULL_ENTRY): * indent.c (vmotion_1): * indent.c (vmotion_pixels): * input-method-motif.c (res): * input-method-xlib.c (IMInstantiateCallback): * input-method-xlib.c (XIM_init_device): * input-method-xlib.c (res): * intl-encap-win32.c: * intl-encap-win32.c (qxeSHGetDataFromIDList): * intl-win32.c: * intl-win32.c (mswindows_multibyte_cp_type): * intl-win32.c (struct mswindows_multibyte_coding_system): * keymap.c: * keymap.c (make_key_description): * keymap.c (keymap_store): * keymap.c (get_keyelt): * keymap.c (keymap_lookup_1): * keymap.c (define_key_parser): * keymap.c (key_desc_list_to_event): * keymap.c (event_matches_key_specifier_p): * keymap.c (meta_prefix_char_p): * keymap.c (ensure_meta_prefix_char_keymapp): * keymap.c (Fdefine_key): * keymap.c (struct raw_lookup_key_mapper_closure): * keymap.c (raw_lookup_key): * keymap.c (raw_lookup_key_mapper): * keymap.c (lookup_keys): * keymap.c (lookup_events): * keymap.c (Flookup_key): * keymap.c (struct map_keymap_unsorted_closure): * keymap.c (map_keymap_unsorted_mapper): * keymap.c (map_keymap_sorted): * keymap.c (map_keymap_mapper): * keymap.c (map_keymap): * keymap.c (accessible_keymaps_mapper_1): * keymap.c (Faccessible_keymaps): * keymap.c (Fsingle_key_description): * keymap.c (raw_keys_to_keys): * keymap.c (format_raw_keys): * keymap.c (where_is_recursive_mapper): * keymap.c (where_is_internal): * keymap.c (describe_map_mapper_shadow_search): * keymap.c (keymap_lookup_inherited_mapper): * keymap.c (describe_map_mapper): * keymap.h (event_matches_key_specifier_p): * lisp.h: * lisp.h (this): * lisp.h (RETURN_NOT_REACHED): * lisp.h (struct Lisp_Vector): * lisp.h (struct Lisp_Bit_Vector): * lisp.h (UNGCPRO_1): * lisp.h (NUNGCPRO): * lisp.h (NNUNGCPRO): * lisp.h (DECLARE_INLINE_HEADER): * lrecord.h: * lrecord.h (struct lrecord_header): * lrecord.h (struct lcrecord_header): * lrecord.h (lrecord_type): * lrecord.h (struct lrecord_implementation): * lrecord.h (RECORD_DUMPABLE): * lrecord.h (memory_description_type): * lrecord.h (data_description_entry_flags): * lrecord.h (struct memory_description): * lrecord.h (struct sized_memory_description): * lrecord.h (XD_INDIRECT): * lrecord.h (XD_IS_INDIRECT): * lrecord.h (XD_DYNARR_DESC): * lrecord.h (DEFINE_BASIC_LRECORD_IMPLEMENTATION): * lrecord.h (MAKE_LRECORD_IMPLEMENTATION): * lrecord.h (MAKE_EXTERNAL_LRECORD_IMPLEMENTATION): * lrecord.h (alloc_lcrecord_type): * lstream.c: * lstream.c (Lstream_new): * lstream.c (lisp_buffer_marker): * lstream.h: * lstream.h (lstream_implementation): * lstream.h (DEFINE_LSTREAM_IMPLEMENTATION): * lstream.h (DEFINE_LSTREAM_IMPLEMENTATION_WITH_DATA): * marker.c: * marker.c (copy_marker_1): * mem-limits.h: * menubar-gtk.c: * menubar-gtk.c (gtk_popup_menu): * menubar-msw.c: * menubar-msw.c (mswindows_popup_menu): * menubar-x.c (make_dummy_xbutton_event): * menubar-x.c (command_builder_operate_menu_accelerator): * menubar-x.c (menu_accelerator_safe_compare): * menubar-x.c (menu_accelerator_safe_mod_compare): * mule-charset.c: * mule-charset.c (make_charset): * mule-charset.c (Fcharset_property): * mule-coding.c: * mule-coding.c (ccs_description_1): * mule-coding.c (ccs_description =): * mule-coding.c (ccsd_description_1): * mule-coding.c (ccsd_description =): * nt.c (getpwnam): * nt.c (init_mswindows_environment): * nt.c (get_cached_volume_information): * nt.c (mswindows_is_executable): * nt.c (read_unc_volume): * nt.c (mswindows_access): * nt.c (mswindows_link): * nt.c (mswindows_fstat): * nt.c (mswindows_stat): * nt.c (mswindows_executable_type): * nt.c (Fmswindows_short_file_name): * nt.c (Fmswindows_long_file_name): * objects-impl.h (struct Lisp_Color_Instance): * objects-impl.h (struct Lisp_Font_Instance): * objects-tty.c: * objects-x.c (allocate_nearest_color): * objects.c: * objects.c (Fmake_color_instance): * objects.c (Fmake_font_instance): * objects.c (font_instantiate): * opaque.c: * opaque.c (make_opaque): * opaque.c (make_opaque_ptr): * opaque.c (reinit_opaque_early): * opaque.c (init_opaque_once_early): * print.c: * print.c (printing_badness): * print.c (printing_major_badness): * print.c (print_internal): * print.c (debug_p4): * print.c (dp): * print.c (debug_backtrace): * process-nt.c (nt_create_process): * process-nt.c (get_internet_address): * process-unix.c: * process-unix.c (struct unix_process_data): * process-unix.c (get_internet_address): * process-unix.c (unix_alloc_process_data): * process-unix.c (unix_create_process): * process-unix.c (try_to_initialize_subtty): * process-unix.c (unix_kill_child_process): * process-unix.c (process_type_create_unix): * process.c: * process.c (mark_process): * process.c (MARKED_SLOT): * process.c (make_process_internal): * process.c (Fprocess_tty_name): * process.c (decode_signal): * process.h: * procimpl.h: * procimpl.h (struct process_methods): * procimpl.h (struct Lisp_Process): * rangetab.c: * realpath.c (readlink_and_correct_case): * redisplay-x.c (x_window_output_end): * redisplay-x.c (x_redraw_exposed_area): * redisplay-x.c (x_clear_frame): * redisplay.c: * redisplay.h: * redisplay.h (struct rune_dglyph): * redisplay.h (struct rune): * scrollbar.c: * scrollbar.c (create_scrollbar_instance): * specifier.c: * specifier.c (specifier_empty_extra_description_1): * specifier.c (make_specifier_internal): * specifier.c (decode_locale_type): * specifier.c (decode_how_to_add_specification): * specifier.h: * specifier.h (struct specifier_methods): * specifier.h (DEFINE_SPECIFIER_TYPE_WITH_DATA): * specifier.h (INITIALIZE_SPECIFIER_TYPE_WITH_DATA): * symbols.c: * symbols.c (Fsetplist): * symbols.c (default_value): * symbols.c (decode_magic_handler_type): * symbols.c (handler_type_from_function_symbol): * symbols.c (Fdefvaralias): * symbols.c (init_symbols_once_early): * symbols.c (reinit_symbols_early): * symsinit.h: * sysdep.c (sys_subshell): * sysdep.c (tty_init_sys_modes_on_device): * syswindows.h: * text.c (dfc_convert_to_external_format): * text.c (dfc_convert_to_internal_format): * text.c (reinit_eistring_early): * text.c (init_eistring_once_early): * text.c (reinit_vars_of_text): * text.h: * text.h (INC_IBYTEPTR_FMT): * text.h (DEC_IBYTEPTR_FMT): * toolbar.c: * toolbar.c (decode_toolbar_position): * tooltalk.c: * ui-gtk.c: * unexnt.c: * unexnt.c (_start): * unexnt.c (unexec): * unexnt.c (get_section_info): * unicode.c: * unicode.c (vars_of_unicode): * window.c: * window.c (allocate_window): * window.c (new_window_mirror): * window.c (update_mirror_internal): * winslots.h:
author michaels
date Sun, 12 Jan 2003 11:08:22 +0000
parents 7924b28c57a4
children f0af455e89d9
comparison
equal deleted inserted replaced
1203:5f2f8dcbfb3e 1204:e22b0213b713
359 Dynarr_declare (coding_system_type_entry); 359 Dynarr_declare (coding_system_type_entry);
360 } coding_system_type_entry_dynarr; 360 } coding_system_type_entry_dynarr;
361 361
362 static coding_system_type_entry_dynarr *the_coding_system_type_entry_dynarr; 362 static coding_system_type_entry_dynarr *the_coding_system_type_entry_dynarr;
363 363
364 static const struct lrecord_description cste_description_1[] = { 364 static const struct memory_description cste_description_1[] = {
365 { XD_STRUCT_PTR, offsetof (coding_system_type_entry, meths), 1, &coding_system_methods_description }, 365 { XD_STRUCT_PTR, offsetof (coding_system_type_entry, meths), 1, &coding_system_methods_description },
366 { XD_END } 366 { XD_END }
367 }; 367 };
368 368
369 static const struct struct_description cste_description = { 369 static const struct sized_memory_description cste_description = {
370 sizeof (coding_system_type_entry), 370 sizeof (coding_system_type_entry),
371 cste_description_1 371 cste_description_1
372 }; 372 };
373 373
374 static const struct lrecord_description csted_description_1[] = { 374 static const struct memory_description csted_description_1[] = {
375 XD_DYNARR_DESC (coding_system_type_entry_dynarr, &cste_description), 375 XD_DYNARR_DESC (coding_system_type_entry_dynarr, &cste_description),
376 { XD_END } 376 { XD_END }
377 }; 377 };
378 378
379 static const struct struct_description csted_description = { 379 static const struct sized_memory_description csted_description = {
380 sizeof (coding_system_type_entry_dynarr), 380 sizeof (coding_system_type_entry_dynarr),
381 csted_description_1 381 csted_description_1
382 }; 382 };
383 383
384 static Lisp_Object Vcoding_system_type_list; 384 static Lisp_Object Vcoding_system_type_list;
396 int coding_detector_count; 396 int coding_detector_count;
397 int coding_detector_category_count; 397 int coding_detector_category_count;
398 398
399 detector_dynarr *all_coding_detectors; 399 detector_dynarr *all_coding_detectors;
400 400
401 static const struct lrecord_description struct_detector_category_description_1[] 401 static const struct memory_description struct_detector_category_description_1[]
402 = 402 =
403 { 403 {
404 { XD_LISP_OBJECT, offsetof (struct detector_category, sym) }, 404 { XD_LISP_OBJECT, offsetof (struct detector_category, sym) },
405 { XD_END } 405 { XD_END }
406 }; 406 };
407 407
408 static const struct struct_description struct_detector_category_description = 408 static const struct sized_memory_description struct_detector_category_description =
409 { 409 {
410 sizeof (struct detector_category), 410 sizeof (struct detector_category),
411 struct_detector_category_description_1 411 struct_detector_category_description_1
412 }; 412 };
413 413
414 static const struct lrecord_description detector_category_dynarr_description_1[] = 414 static const struct memory_description detector_category_dynarr_description_1[] =
415 { 415 {
416 XD_DYNARR_DESC (detector_category_dynarr, 416 XD_DYNARR_DESC (detector_category_dynarr,
417 &struct_detector_category_description), 417 &struct_detector_category_description),
418 { XD_END } 418 { XD_END }
419 }; 419 };
420 420
421 static const struct struct_description detector_category_dynarr_description = { 421 static const struct sized_memory_description detector_category_dynarr_description = {
422 sizeof (detector_category_dynarr), 422 sizeof (detector_category_dynarr),
423 detector_category_dynarr_description_1 423 detector_category_dynarr_description_1
424 }; 424 };
425 425
426 static const struct lrecord_description struct_detector_description_1[] 426 static const struct memory_description struct_detector_description_1[]
427 = 427 =
428 { 428 {
429 { XD_STRUCT_PTR, offsetof (struct detector, cats), 1, 429 { XD_STRUCT_PTR, offsetof (struct detector, cats), 1,
430 &detector_category_dynarr_description }, 430 &detector_category_dynarr_description },
431 { XD_END } 431 { XD_END }
432 }; 432 };
433 433
434 static const struct struct_description struct_detector_description = 434 static const struct sized_memory_description struct_detector_description =
435 { 435 {
436 sizeof (struct detector), 436 sizeof (struct detector),
437 struct_detector_description_1 437 struct_detector_description_1
438 }; 438 };
439 439
440 static const struct lrecord_description detector_dynarr_description_1[] = 440 static const struct memory_description detector_dynarr_description_1[] =
441 { 441 {
442 XD_DYNARR_DESC (detector_dynarr, &struct_detector_description), 442 XD_DYNARR_DESC (detector_dynarr, &struct_detector_description),
443 { XD_END } 443 { XD_END }
444 }; 444 };
445 445
446 static const struct struct_description detector_dynarr_description = { 446 static const struct sized_memory_description detector_dynarr_description = {
447 sizeof (detector_dynarr), 447 sizeof (detector_dynarr),
448 detector_dynarr_description_1 448 detector_dynarr_description_1
449 }; 449 };
450 450
451 Lisp_Object Qcoding_systemp; 451 Lisp_Object Qcoding_systemp;
510 static Lisp_Object 510 static Lisp_Object
511 mark_coding_system (Lisp_Object obj) 511 mark_coding_system (Lisp_Object obj)
512 { 512 {
513 Lisp_Coding_System *codesys = XCODING_SYSTEM (obj); 513 Lisp_Coding_System *codesys = XCODING_SYSTEM (obj);
514 514
515 mark_object (CODING_SYSTEM_NAME (codesys)); 515 #define MARKED_SLOT(x) mark_object (codesys->x);
516 mark_object (CODING_SYSTEM_DESCRIPTION (codesys)); 516 #include "coding-system-slots.h"
517 mark_object (CODING_SYSTEM_MNEMONIC (codesys));
518 mark_object (CODING_SYSTEM_DOCUMENTATION (codesys));
519 mark_object (CODING_SYSTEM_EOL_LF (codesys));
520 mark_object (CODING_SYSTEM_EOL_CRLF (codesys));
521 mark_object (CODING_SYSTEM_EOL_CR (codesys));
522 mark_object (CODING_SYSTEM_SUBSIDIARY_PARENT (codesys));
523 mark_object (CODING_SYSTEM_CANONICAL (codesys));
524 517
525 MAYBE_CODESYSMETH (codesys, mark, (obj)); 518 MAYBE_CODESYSMETH (codesys, mark, (obj));
526 519
527 mark_object (CODING_SYSTEM_PRE_WRITE_CONVERSION (codesys)); 520 return Qnil;
528 return CODING_SYSTEM_POST_READ_CONVERSION (codesys);
529 } 521 }
530 522
531 static void 523 static void
532 print_coding_system_properties (Lisp_Object obj, Lisp_Object printcharfun) 524 print_coding_system_properties (Lisp_Object obj, Lisp_Object printcharfun)
533 { 525 {
581 { 573 {
582 const Lisp_Coding_System *p = (const Lisp_Coding_System *) header; 574 const Lisp_Coding_System *p = (const Lisp_Coding_System *) header;
583 return offsetof (Lisp_Coding_System, data) + p->methods->extra_data_size; 575 return offsetof (Lisp_Coding_System, data) + p->methods->extra_data_size;
584 } 576 }
585 577
586 static const struct lrecord_description coding_system_methods_description_1[] 578 static const struct memory_description coding_system_methods_description_1[]
587 = { 579 = {
588 { XD_LISP_OBJECT, 580 { XD_LISP_OBJECT,
589 offsetof (struct coding_system_methods, type) }, 581 offsetof (struct coding_system_methods, type) },
590 { XD_LISP_OBJECT, 582 { XD_LISP_OBJECT,
591 offsetof (struct coding_system_methods, predicate_symbol) }, 583 offsetof (struct coding_system_methods, predicate_symbol) },
592 { XD_END } 584 { XD_END }
593 }; 585 };
594 586
595 const struct struct_description coding_system_methods_description = { 587 const struct sized_memory_description coding_system_methods_description = {
596 sizeof (struct coding_system_methods), 588 sizeof (struct coding_system_methods),
597 coding_system_methods_description_1 589 coding_system_methods_description_1
598 }; 590 };
599 591
600 const struct lrecord_description coding_system_empty_extra_description[] = { 592 static const struct sized_memory_description coding_system_extra_description_map[] =
593 {
594 { offsetof (Lisp_Coding_System, methods) },
595 { offsetof (struct coding_system_methods, extra_description) },
596 { -1 },
597 };
598
599 static const struct memory_description coding_system_description[] =
600 {
601 { XD_STRUCT_PTR, offsetof (Lisp_Coding_System, methods), 1,
602 &coding_system_methods_description },
603 #define MARKED_SLOT(x) { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, x) },
604 #define MARKED_SLOT_ARRAY(slot, size) \
605 { XD_LISP_OBJECT_ARRAY, offsetof (Lisp_Coding_System, slot), size },
606 #include "coding-system-slots.h"
607 { XD_STRUCT_ARRAY, offsetof (Lisp_Coding_System, data), 1,
608 coding_system_extra_description_map },
601 { XD_END } 609 { XD_END }
602 }; 610 };
603 611
604 static const struct lrecord_description coding_system_description[] = 612 static const struct memory_description coding_system_empty_extra_description_1[] =
605 { 613 {
606 { XD_STRUCT_PTR, offsetof (Lisp_Coding_System, methods), 1, 614 { XD_END }
607 &coding_system_methods_description },
608 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, name) },
609 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, description) },
610 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, mnemonic) },
611 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, documentation) },
612 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, post_read_conversion) },
613 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, pre_write_conversion) },
614 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, text_file_wrapper) },
615 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, auto_eol_wrapper) },
616 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, eol[0]) },
617 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, eol[1]) },
618 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, eol[2]) },
619 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, subsidiary_parent) },
620 { XD_LISP_OBJECT, offsetof (Lisp_Coding_System, canonical) },
621 { XD_CODING_SYSTEM_END }
622 }; 615 };
623 616
624 #ifdef USE_KKCC 617 const struct sized_memory_description coding_system_empty_extra_description = {
618 0, coding_system_empty_extra_description_1
619 };
620
625 DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("coding-system", coding_system, 621 DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("coding-system", coding_system,
626 1, /*dumpable-flag*/ 622 1, /*dumpable-flag*/
627 mark_coding_system, 623 mark_coding_system,
628 print_coding_system, 624 print_coding_system,
629 finalize_coding_system, 625 finalize_coding_system,
630 0, 0, coding_system_description, 626 0, 0, coding_system_description,
631 sizeof_coding_system, 627 sizeof_coding_system,
632 Lisp_Coding_System); 628 Lisp_Coding_System);
633 #else /* not USE_KKCC */
634 DEFINE_LRECORD_SEQUENCE_IMPLEMENTATION ("coding-system", coding_system,
635 mark_coding_system,
636 print_coding_system,
637 finalize_coding_system,
638 0, 0, coding_system_description,
639 sizeof_coding_system,
640 Lisp_Coding_System);
641 #endif /* not USE_KKCC */
642 629
643 /************************************************************************/ 630 /************************************************************************/
644 /* Creating coding systems */ 631 /* Creating coding systems */
645 /************************************************************************/ 632 /************************************************************************/
646 633
960 Bytecount data_size, 947 Bytecount data_size,
961 Lisp_Object name) 948 Lisp_Object name)
962 { 949 {
963 Bytecount total_size = offsetof (Lisp_Coding_System, data) + data_size; 950 Bytecount total_size = offsetof (Lisp_Coding_System, data) + data_size;
964 Lisp_Coding_System *codesys = 951 Lisp_Coding_System *codesys =
965 (Lisp_Coding_System *) alloc_lcrecord (total_size, &lrecord_coding_system); 952 (Lisp_Coding_System *) basic_alloc_lcrecord (total_size,
966 953 &lrecord_coding_system);
967 zero_sized_lcrecord (codesys, total_size); 954
968 codesys->methods = codesys_meths; 955 codesys->methods = codesys_meths;
969 CODING_SYSTEM_PRE_WRITE_CONVERSION (codesys) = Qnil; 956 #define MARKED_SLOT(x) codesys->x = Qnil;
970 CODING_SYSTEM_POST_READ_CONVERSION (codesys) = Qnil; 957 #include "coding-system-slots.h"
958
971 CODING_SYSTEM_EOL_TYPE (codesys) = EOL_LF; 959 CODING_SYSTEM_EOL_TYPE (codesys) = EOL_LF;
972 CODING_SYSTEM_EOL_CRLF (codesys) = Qnil;
973 CODING_SYSTEM_EOL_CR (codesys) = Qnil;
974 CODING_SYSTEM_EOL_LF (codesys) = Qnil;
975 CODING_SYSTEM_SUBSIDIARY_PARENT (codesys) = Qnil;
976 CODING_SYSTEM_CANONICAL (codesys) = Qnil;
977 CODING_SYSTEM_MNEMONIC (codesys) = Qnil;
978 CODING_SYSTEM_DOCUMENTATION (codesys) = Qnil;
979 CODING_SYSTEM_TEXT_FILE_WRAPPER (codesys) = Qnil;
980 CODING_SYSTEM_AUTO_EOL_WRAPPER (codesys) = Qnil;
981 CODING_SYSTEM_NAME (codesys) = name; 960 CODING_SYSTEM_NAME (codesys) = name;
982 961
983 MAYBE_CODESYSMETH (codesys, init, (wrap_coding_system (codesys))); 962 MAYBE_CODESYSMETH (codesys, init, (wrap_coding_system (codesys)));
984 963
985 return codesys; 964 return codesys;
993 if (EQ (symbol, Qlf)) return EOL_LF; 972 if (EQ (symbol, Qlf)) return EOL_LF;
994 if (EQ (symbol, Qcrlf)) return EOL_CRLF; 973 if (EQ (symbol, Qcrlf)) return EOL_CRLF;
995 if (EQ (symbol, Qcr)) return EOL_CR; 974 if (EQ (symbol, Qcr)) return EOL_CR;
996 975
997 invalid_constant ("Unrecognized eol type", symbol); 976 invalid_constant ("Unrecognized eol type", symbol);
998 RETURN_NOT_REACHED (EOL_AUTODETECT) 977 RETURN_NOT_REACHED (EOL_AUTODETECT);
999 } 978 }
1000 979
1001 static Lisp_Object 980 static Lisp_Object
1002 eol_type_to_symbol (enum eol_type type) 981 eol_type_to_symbol (enum eol_type type)
1003 { 982 {
1706 Lisp_Object aliasee = Fgethash (alias, Vcoding_system_hash_table, Qnil); 1685 Lisp_Object aliasee = Fgethash (alias, Vcoding_system_hash_table, Qnil);
1707 if (SYMBOLP (aliasee)) 1686 if (SYMBOLP (aliasee))
1708 return aliasee; 1687 return aliasee;
1709 else 1688 else
1710 invalid_argument ("Symbol is not a coding system alias", alias); 1689 invalid_argument ("Symbol is not a coding system alias", alias);
1711 RETURN_NOT_REACHED (Qnil) 1690 RETURN_NOT_REACHED (Qnil);
1712 } 1691 }
1713 1692
1714 /* A maphash function, for removing dangling coding system aliases. */ 1693 /* A maphash function, for removing dangling coding system aliases. */
1715 static int 1694 static int
1716 dangling_coding_system_alias_p (Lisp_Object alias, 1695 dangling_coding_system_alias_p (Lisp_Object alias,
1987 /* A coding stream is a stream used for encoding or decoding text. The 1966 /* A coding stream is a stream used for encoding or decoding text. The
1988 coding-stream object keeps track of the actual coding system, the stream 1967 coding-stream object keeps track of the actual coding system, the stream
1989 that is at the other end, and data that needs to be persistent across 1968 that is at the other end, and data that needs to be persistent across
1990 the lifetime of the stream. */ 1969 the lifetime of the stream. */
1991 1970
1992 DEFINE_LSTREAM_IMPLEMENTATION ("coding", coding); 1971 extern const struct sized_memory_description chain_coding_stream_description;
1972 extern const struct sized_memory_description undecided_coding_stream_description;
1973
1974 static const struct memory_description coding_stream_data_description_1 []= {
1975 { XD_STRUCT_PTR, chain_coding_system, 1, &chain_coding_stream_description},
1976 { XD_STRUCT_PTR, undecided_coding_system, 1, &undecided_coding_stream_description},
1977 { XD_END }
1978 };
1979
1980 static const struct sized_memory_description coding_stream_data_description = {
1981 sizeof (void *), coding_stream_data_description_1
1982 };
1983
1984 static const struct memory_description coding_lstream_description[] = {
1985 { XD_INT, offsetof (struct coding_stream, type) },
1986 { XD_LISP_OBJECT, offsetof (struct coding_stream, orig_codesys) },
1987 { XD_LISP_OBJECT, offsetof (struct coding_stream, codesys) },
1988 { XD_LISP_OBJECT, offsetof (struct coding_stream, other_end) },
1989 { XD_UNION, offsetof (struct coding_stream, data),
1990 XD_INDIRECT (0, 0), &coding_stream_data_description },
1991 { XD_END }
1992 };
1993
1994 DEFINE_LSTREAM_IMPLEMENTATION_WITH_DATA ("coding", coding);
1993 1995
1994 /* Encoding and decoding are parallel operations, so we create just one 1996 /* Encoding and decoding are parallel operations, so we create just one
1995 stream for both. "Decoding" may involve the extra step of autodetection 1997 stream for both. "Decoding" may involve the extra step of autodetection
1996 of the data format, but that's only because of the conventional 1998 of the data format, but that's only because of the conventional
1997 definition of decoding as converting from external- to 1999 definition of decoding as converting from external- to
2307 { 2309 {
2308 xfree (str->data); 2310 xfree (str->data);
2309 str->data = 0; 2311 str->data = 0;
2310 } 2312 }
2311 if (XCODING_SYSTEM_METHODS (str->codesys)->coding_data_size) 2313 if (XCODING_SYSTEM_METHODS (str->codesys)->coding_data_size)
2312 str->data = 2314 {
2313 xmalloc_and_zero (XCODING_SYSTEM_METHODS (str->codesys)-> 2315 str->data =
2314 coding_data_size); 2316 xmalloc_and_zero (XCODING_SYSTEM_METHODS (str->codesys)->
2317 coding_data_size);
2318 str->type = XCODING_SYSTEM_METHODS (str->codesys)->enumtype;
2319 }
2315 MAYBE_XCODESYSMETH (str->codesys, init_coding_stream, (str)); 2320 MAYBE_XCODESYSMETH (str->codesys, init_coding_stream, (str));
2316 /* The new coding system may have different ideas regarding whether its 2321 /* The new coding system may have different ideas regarding whether its
2317 ends are characters or bytes. */ 2322 ends are characters or bytes. */
2318 set_coding_character_mode (lstr); 2323 set_coding_character_mode (lstr);
2319 } 2324 }
2536 2541
2537 /* #### Need a way to create "opposite-direction" coding systems. */ 2542 /* #### Need a way to create "opposite-direction" coding systems. */
2538 2543
2539 /* Chain two or more coding systems together to make a combination coding 2544 /* Chain two or more coding systems together to make a combination coding
2540 system. */ 2545 system. */
2541 DEFINE_CODING_SYSTEM_TYPE (chain);
2542 2546
2543 struct chain_coding_system 2547 struct chain_coding_system
2544 { 2548 {
2545 /* List of coding systems, in decode order */ 2549 /* List of coding systems, in decode order */
2546 Lisp_Object *chain; 2550 Lisp_Object *chain;
2556 /* Lstreams for chain coding system */ 2560 /* Lstreams for chain coding system */
2557 Lisp_Object *lstreams; 2561 Lisp_Object *lstreams;
2558 int lstream_count; 2562 int lstream_count;
2559 }; 2563 };
2560 2564
2561 static const struct lrecord_description lo_description_1[] = { 2565 static const struct memory_description chain_coding_system_description[] = {
2562 { XD_LISP_OBJECT, 0 }, 2566 { XD_INT, offsetof (struct chain_coding_system, count) },
2567 { XD_STRUCT_PTR, offsetof (struct chain_coding_system, chain),
2568 XD_INDIRECT (0, 0), &lisp_object_description },
2569 { XD_LISP_OBJECT, offsetof (struct chain_coding_system,
2570 canonicalize_after_coding) },
2563 { XD_END } 2571 { XD_END }
2564 }; 2572 };
2565 2573
2566 static const struct struct_description lo_description = { 2574 static const struct memory_description chain_coding_stream_description_1 [] = {
2567 sizeof (Lisp_Object), 2575 { XD_INT, offsetof (struct chain_coding_stream, lstream_count) },
2568 lo_description_1 2576 { XD_STRUCT_PTR, offsetof (struct chain_coding_stream, lstreams),
2569 }; 2577 XD_INDIRECT (0, 0), &lisp_object_description },
2570
2571 static const struct lrecord_description chain_coding_system_description[] = {
2572 { XD_INT,
2573 coding_system_data_offset + offsetof (struct chain_coding_system,
2574 count) },
2575 { XD_STRUCT_PTR,
2576 coding_system_data_offset + offsetof (struct chain_coding_system,
2577 chain),
2578 XD_INDIRECT (0, 0), &lo_description },
2579 { XD_LISP_OBJECT,
2580 coding_system_data_offset + offsetof (struct chain_coding_system,
2581 canonicalize_after_coding) },
2582 { XD_END } 2578 { XD_END }
2583 }; 2579 };
2580
2581 const struct sized_memory_description chain_coding_stream_description = {
2582 sizeof (struct chain_coding_stream), chain_coding_stream_description_1
2583 };
2584
2585 DEFINE_CODING_SYSTEM_TYPE_WITH_DATA (chain);
2584 2586
2585 static Lisp_Object 2587 static Lisp_Object
2586 chain_canonicalize (Lisp_Object codesys) 2588 chain_canonicalize (Lisp_Object codesys)
2587 { 2589 {
2588 /* We make use of the fact that this method is called at init time, after 2590 /* We make use of the fact that this method is called at init time, after
3022 for example). 3024 for example).
3023 3025
3024 There is one parameter: `subtype', either `cr', `lf', `crlf', or nil. 3026 There is one parameter: `subtype', either `cr', `lf', `crlf', or nil.
3025 */ 3027 */
3026 3028
3027 DEFINE_CODING_SYSTEM_TYPE (convert_eol);
3028
3029 struct convert_eol_coding_system 3029 struct convert_eol_coding_system
3030 { 3030 {
3031 enum eol_type subtype; 3031 enum eol_type subtype;
3032 }; 3032 };
3033 3033
3039 struct convert_eol_coding_stream 3039 struct convert_eol_coding_stream
3040 { 3040 {
3041 enum eol_type actual; 3041 enum eol_type actual;
3042 }; 3042 };
3043 3043
3044 static const struct lrecord_description 3044 static const struct memory_description
3045 convert_eol_coding_system_description[] = { 3045 convert_eol_coding_system_description[] = {
3046 { XD_END } 3046 { XD_END }
3047 }; 3047 };
3048
3049 DEFINE_CODING_SYSTEM_TYPE_WITH_DATA (convert_eol);
3048 3050
3049 static void 3051 static void
3050 convert_eol_print (Lisp_Object cs, Lisp_Object printcharfun, int escapeflag) 3052 convert_eol_print (Lisp_Object cs, Lisp_Object printcharfun, int escapeflag)
3051 { 3053 {
3052 struct convert_eol_coding_system *data = 3054 struct convert_eol_coding_system *data =
3281 non-EOL-processing coding system (if possible), or terminate EOL 3283 non-EOL-processing coding system (if possible), or terminate EOL
3282 detection and use the specified EOL type. This prevents data from being 3284 detection and use the specified EOL type. This prevents data from being
3283 EOL-processed twice. 3285 EOL-processed twice.
3284 */ 3286 */
3285 3287
3286 DEFINE_CODING_SYSTEM_TYPE (undecided);
3287
3288 struct undecided_coding_system 3288 struct undecided_coding_system
3289 { 3289 {
3290 int do_eol, do_coding; 3290 int do_eol, do_coding;
3291 Lisp_Object cs; 3291 Lisp_Object cs;
3292 }; 3292 };
3298 struct chain_coding_stream c; 3298 struct chain_coding_stream c;
3299 3299
3300 struct detection_state *st; 3300 struct detection_state *st;
3301 }; 3301 };
3302 3302
3303 static const struct lrecord_description 3303 static const struct memory_description undecided_coding_system_description[] = {
3304 undecided_coding_system_description[] = { 3304 { XD_LISP_OBJECT, offsetof (struct undecided_coding_system, cs) },
3305 { XD_LISP_OBJECT,
3306 coding_system_data_offset + offsetof (struct undecided_coding_system,
3307 cs) },
3308 { XD_END } 3305 { XD_END }
3309 }; 3306 };
3307
3308 static const struct memory_description undecided_coding_stream_description_1 [] = {
3309 { XD_LISP_OBJECT, offsetof (struct undecided_coding_stream, actual) },
3310 { XD_STRUCT_ARRAY, offsetof (struct undecided_coding_stream, c),
3311 1, &chain_coding_stream_description },
3312 { XD_END }
3313 };
3314
3315 const struct sized_memory_description undecided_coding_stream_description = {
3316 sizeof (struct undecided_coding_stream), undecided_coding_stream_description_1
3317 };
3318
3319 DEFINE_CODING_SYSTEM_TYPE_WITH_DATA (undecided);
3310 3320
3311 static void 3321 static void
3312 undecided_init (Lisp_Object codesys) 3322 undecided_init (Lisp_Object codesys)
3313 { 3323 {
3314 struct undecided_coding_system *data = 3324 struct undecided_coding_system *data =
3357 } 3367 }
3358 3368
3359 static void 3369 static void
3360 undecided_mark_coding_stream (struct coding_stream *str) 3370 undecided_mark_coding_stream (struct coding_stream *str)
3361 { 3371 {
3372 mark_object (CODING_STREAM_TYPE_DATA (str, undecided)->actual);
3362 chain_mark_coding_stream_1 (&CODING_STREAM_TYPE_DATA (str, undecided)->c); 3373 chain_mark_coding_stream_1 (&CODING_STREAM_TYPE_DATA (str, undecided)->c);
3363 } 3374 }
3364 3375
3365 static int 3376 static int
3366 undecided_putprop (Lisp_Object codesys, Lisp_Object key, Lisp_Object value) 3377 undecided_putprop (Lisp_Object codesys, Lisp_Object key, Lisp_Object value)
3447 if (EQ (Dynarr_at (cats, j).sym, symbol)) 3458 if (EQ (Dynarr_at (cats, j).sym, symbol))
3448 return Dynarr_at (cats, j).id; 3459 return Dynarr_at (cats, j).id;
3449 } 3460 }
3450 3461
3451 invalid_constant ("Unrecognized coding category", symbol); 3462 invalid_constant ("Unrecognized coding category", symbol);
3452 RETURN_NOT_REACHED (0) 3463 RETURN_NOT_REACHED (0);
3453 } 3464 }
3454 3465
3455 static Lisp_Object 3466 static Lisp_Object
3456 coding_category_id_to_symbol (int id) 3467 coding_category_id_to_symbol (int id)
3457 { 3468 {
4269 4280
4270 /************************************************************************/ 4281 /************************************************************************/
4271 /* Gzip methods */ 4282 /* Gzip methods */
4272 /************************************************************************/ 4283 /************************************************************************/
4273 4284
4274 DEFINE_CODING_SYSTEM_TYPE (gzip);
4275
4276 struct gzip_coding_system 4285 struct gzip_coding_system
4277 { 4286 {
4278 int level; /* 0 through 9, or -1 for default */ 4287 int level; /* 0 through 9, or -1 for default */
4279 }; 4288 };
4280 4289
4289 int stream_initted; 4298 int stream_initted;
4290 int reached_eof; /* #### this should be handled by the caller, once we 4299 int reached_eof; /* #### this should be handled by the caller, once we
4291 return LSTREAM_EOF */ 4300 return LSTREAM_EOF */
4292 }; 4301 };
4293 4302
4294 static const struct lrecord_description 4303 static const struct memory_description
4295 gzip_coding_system_description[] = { 4304 gzip_coding_system_description[] = {
4296 { XD_END } 4305 { XD_END }
4297 }; 4306 };
4307
4308 DEFINE_CODING_SYSTEM_TYPE_WITH_DATA (gzip);
4298 4309
4299 enum source_sink_type 4310 enum source_sink_type
4300 gzip_conversion_end_type (Lisp_Object codesys) 4311 gzip_conversion_end_type (Lisp_Object codesys)
4301 { 4312 {
4302 return DECODES_BYTE_TO_BYTE; 4313 return DECODES_BYTE_TO_BYTE;
4638 4649
4639 /* Initialize to something reasonable ... */ 4650 /* Initialize to something reasonable ... */
4640 for (i = 0; i < MAX_DETECTOR_CATEGORIES; i++) 4651 for (i = 0; i < MAX_DETECTOR_CATEGORIES; i++)
4641 { 4652 {
4642 coding_category_system[i] = Qnil; 4653 coding_category_system[i] = Qnil;
4643 dump_add_root_object (&coding_category_system[i]); 4654 dump_add_root_lisp_object (&coding_category_system[i]);
4644 coding_category_by_priority[i] = i; 4655 coding_category_by_priority[i] = i;
4645 } 4656 }
4646 4657
4647 dump_add_opaque (coding_category_by_priority, 4658 dump_add_opaque (coding_category_by_priority,
4648 sizeof (coding_category_by_priority)); 4659 sizeof (coding_category_by_priority));