annotate src/lisp.h @ 2720:6fa9919a9a0b

[xemacs-hg @ 2005-04-08 23:10:01 by crestani] ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * configure.ac (XE_COMPLEX_ARG_ENABLE): Add `--enable-mc-alloc' as         a new configure flag.         * configure.in (AC_INIT_PARSE_ARGS): Add `--mc-alloc' as a new         configure flag.         * configure.usage: Add description for `mc-alloc'.         DUMP_IN_EXEC:         * Makefile.in.in: Condition the installation of a separate dump         file on !DUMP_ON_EXEC.         * configure.ac (XE_COMPLEX_ARG_ENABLE): Add         `--enable-dump-in-exec' as a new configure flag.         * configure.ac: DUMP_IN_EXEC is define as default for PDUMP but         not default for MC_ALLOC.         * configure.in (AC_INIT_PARSE_ARGS): Add `--dump-in-exec' as a         new configure flag.         * configure.in: DUMP_IN_EXEC is define as default for PDUMP but         not default for MC_ALLOC.         * configure.usage: Add description for `dump-in-exec'. lib-src/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         DUMP_IN_EXEC:                  * Makefile.in.in: Only compile insert-data-in-exec if         DUMP_IN_EXEC is defined. lisp/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         MEMORY_USAGE_STATS         * diagnose.el: Add new lisp function to pretty print statistics         about the new allocator.         * diagnose.el (show-mc-alloc-memory-usage): New. modules/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         Remove Lcrecords:                  * postgresql/postgresql.c (allocate_pgconn): Allocate with new         allocator.         * postgresql/postgresql.c (allocate_pgresult): Allocate PGresult         with new allocator.           * postgresql/postgresql.h (struct Lisp_PGconn): Add         lrecord_header.         * postgresql/postgresql.h (struct Lisp_PGresult): Add         lrecord_header.         * ldap/eldap.c (allocate_ldap): Allocate with new allocator.         * ldap/eldap.h (struct Lisp_LDAP): Add lrecord_header. nt/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * config.inc.samp: Add new flag `MC_ALLOC'.         * xemacs.mak: Add flag and configuration output for `MC_ALLOC'.         New files:         * xemacs.dsp: Add source files mc-alloc.c and mc-alloc.h.         * xemacs.mak: Add new object file mc-alloc.obj to dependencies. src/ChangeLog addition: 2005-04-01  Marcus Crestani  <crestani@xemacs.org>         The new allocator.         New configure flag: `MC_ALLOC':         * config.h.in: Add new flag `MC_ALLOC'.         New files:         * Makefile.in.in: Add new object file mc-alloc.o.         * depend: Add new files to dependencies.         * mc-alloc.c: New.         * mc-alloc.h: New.         Running the new allocator from XEmacs:         * alloc.c (deadbeef_memory): Moved to mc-alloc.c.         * emacs.c (main_1): Initialize the new allocator and add         syms_of_mc_alloc.         * symsinit.h: Add syms_of_mc_alloc.         New lrecord allocation and free functions:         * alloc.c (alloc_lrecord): New. Allocates an lrecord, includes         type checking and initializing of the lrecord_header.         * alloc.c (noseeum_alloc_lrecord): Same as above, but increments         the NOSEEUM cons counter.         * alloc.c (free_lrecord): New. Calls the finalizer and frees the         lrecord.         * lrecord.h: Add lrecord allocation prototypes and comments.         Remove old lrecord FROB block allocation:                  * alloc.c (allocate_lisp_storage): Former function to expand         heap. Not needed anymore, remove.         * alloc.c: Completely remove `Fixed-size type macros'         * alloc.c (release_breathing_space): Remove.         * alloc.c (memory_full): Remove release_breathing_space.         * alloc.c (refill_memory_reserve): Remove.         * alloc.c (TYPE_ALLOC_SIZE): Remove.         * alloc.c (DECLARE_FIXED_TYPE_ALLOC): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE_FROM_BLOCK): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE_1): Remove.         * alloc.c (ALLOCATE_FIXED_TYPE): Remove.         * alloc.c (NOSEEUM_ALLOCATE_FIXED_TYPE): Remove.         * alloc.c (struct Lisp_Free): Remove.         * alloc.c (LRECORD_FREE_P): Remove.         * alloc.c (MARK_LRECORD_AS_FREE): Remove.         * alloc.c (MARK_LRECORD_AS_NOT_FREE): Remove.         * alloc.c (PUT_FIXED_TYPE_ON_FREE_LIST): Remove.         * alloc.c (FREE_FIXED_TYPE): Remove.         * alloc.c (FREE_FIXED_TYPE_WHEN_NOT_IN_GC): Remove.         Allocate old lrecords with new allocator:                  * alloc.c: DECLARE_FIXED_TYPE_ALLOC removed for all lrecords         defined in alloc.c.         * alloc.c (Fcons): Allocate with new allocator.         * alloc.c (noseeum_cons): Allocate with new allocator.         * alloc.c (make_float): Allocate with new allocator.         * alloc.c (make_bignum): Allocate with new allocator.         * alloc.c (make_bignum_bg): Allocate with new allocator.         * alloc.c (make_ratio): Allocate with new allocator.         * alloc.c (make_ratio_bg): Allocate with new allocator.         * alloc.c (make_ratio_rt): Allocate with new allocator.         * alloc.c (make_bigfloat): Allocate with new allocator.         * alloc.c (make_bigfloat_bf): Allocate with new allocator.         * alloc.c (make_compiled_function): Allocate with new allocator.         * alloc.c (Fmake_symbol): Allocate with new allocator.         * alloc.c (allocate_extent): Allocate with new allocator.         * alloc.c (allocate_event): Allocate with new allocator.         * alloc.c (make_key_data): Allocate with new allocator.         * alloc.c (make_button_data): Allocate with new allocator.         * alloc.c (make_motion_data): Allocate with new allocator.         * alloc.c (make_process_data): Allocate with new allocator.         * alloc.c (make_timeout_data): Allocate with new allocator.         * alloc.c (make_magic_data): Allocate with new allocator.         * alloc.c (make_magic_eval_data): Allocate with new allocator.         * alloc.c (make_eval_data): Allocate with new allocator.         * alloc.c (make_misc_user_data): Allocate with new allocator.         * alloc.c (Fmake_marker): Allocate with new allocator.         * alloc.c (noseeum_make_marker): Allocate with new allocator.         * alloc.c (make_uninit_string): Allocate with new allocator.         * alloc.c (resize_string): Allocate with new allocator.         * alloc.c (make_string_nocopy): Allocate with new allocator.         Garbage Collection:         * alloc.c (GC_CHECK_NOT_FREE): Remove obsolete assertions.         * alloc.c (SWEEP_FIXED_TYPE_BLOCK): Remove.         * alloc.c (SWEEP_FIXED_TYPE_BLOCK_1): Remove.         * alloc.c (sweep_conses): Remove.         * alloc.c (free_cons): Use new allocator to free.         * alloc.c (sweep_compiled_functions): Remove.         * alloc.c (sweep_floats): Remove.         * alloc.c (sweep_bignums): Remove.         * alloc.c (sweep_ratios): Remove.         * alloc.c (sweep_bigfloats): Remove.         * alloc.c (sweep_symbols): Remove.         * alloc.c (sweep_extents): Remove.         * alloc.c (sweep_events): Remove.         * alloc.c (sweep_key_data): Remove.         * alloc.c (free_key_data): Use new allocator to free.         * alloc.c (sweep_button_data): Remove.         * alloc.c (free_button_data): Use new allocator to free.         * alloc.c (sweep_motion_data): Remove.         * alloc.c (free_motion_data): Use new allocator to free.         * alloc.c (sweep_process_data): Remove.         * alloc.c (free_process_data): Use new allocator to free.         * alloc.c (sweep_timeout_data): Remove.         * alloc.c (free_timeout_data): Use new allocator to free.         * alloc.c (sweep_magic_data): Remove.         * alloc.c (free_magic_data): Use new allocator to free.         * alloc.c (sweep_magic_eval_data): Remove.         * alloc.c (free_magic_eval_data): Use new allocator to free.         * alloc.c (sweep_eval_data): Remove.         * alloc.c (free_eval_data): Use new allocator to free.         * alloc.c (sweep_misc_user_data): Remove.         * alloc.c (free_misc_user_data): Use new allocator to free.         * alloc.c (sweep_markers): Remove.         * alloc.c (free_marker): Use new allocator to free.         * alloc.c (garbage_collect_1): Remove release_breathing_space.         * alloc.c (gc_sweep): Remove all the old lcrecord and lrecord         related stuff. Sweeping now works like this: compact string         chars, finalize, sweep.         * alloc.c (common_init_alloc_early): Remove old lrecord         initializations, remove breathing_space.         * emacs.c (Fdump_emacs): Remove release_breathing_space.         * lisp.h: Remove prototype for release_breathing_space.         * lisp.h: Adjust the special cons mark makros.         Lrecord Finalizer:         * alloc.c: Add finalizer to lrecord definition.         * alloc.c (finalize_string): Add finalizer for string.         * bytecode.c: Add finalizer to lrecord definition.         * bytecode.c (finalize_compiled_function): Add finalizer for         compiled function.         * marker.c: Add finalizer to lrecord definition.         * marker.c (finalize_marker): Add finalizer for marker.         These changes build the interface to mc-alloc:         * lrecord.h (MC_ALLOC_CALL_FINALIZER): Tell mc-alloc how to         finalize lrecords.         * lrecord.h (MC_ALLOC_CALL_FINALIZER_FOR_DISKSAVE): Tell         mc-alloc how to finalize for disksave.         Unify lrecords and lcrecords:         * lisp.h (struct Lisp_String): Adjust string union hack to         new lrecord header.         * lrecord.h: Adjust comments.         * lrecord.h (struct lrecord_header): The new lrecord header         includes type, lisp-readonly, free, and uid.         * lrecord.h (set_lheader_implementation): Adjust to new         lrecord_header.         * lrecord.h (struct lrecord_implementation): The field basic_p         for indication of an old lrecord is not needed anymore, remove.         * lrecord.h (MAKE_LRECORD_IMPLEMENTATION): Remove basic_p.         * lrecord.h (MAKE_EXTERNAL_LRECORD_IMPLEMENTATION): Remove         basic_p.         * lrecord.h (copy_sized_lrecord): Remove distinction between         old lrecords and lcrecords.         * lrecord.h (copy_lrecord): Remove distinction between old         lrecords and lcrecords.         * lrecord.h (zero_sized_lrecord): Remove distinction between         old lrecords and lcrecords.         * lrecord.h (zero_lrecord): Remove distinction between old         lrecords and lcrecords.         Remove lcrecords and lcrecord lists:         * alloc.c (basic_alloc_lcrecord): Not needed anymore, remove.         * alloc.c (very_old_free_lcrecord): Not needed anymore, remove.         * alloc.c (copy_lisp_object): No more distinction between         lrecords and lcrecords.         * alloc.c (all_lcrecords): Not needed anymore, remove.         * alloc.c (make_vector_internal): Allocate as lrecord.         * alloc.c (make_bit_vector_internal): Allocate as lrecord.         * alloc.c: Completely remove `lcrecord lists'.         * alloc.c (free_description): Remove.         * alloc.c (lcrecord_list_description): Remove.         * alloc.c (mark_lcrecord_list): Remove.         * alloc.c (make_lcrecord_list): Remove.         * alloc.c (alloc_managed_lcrecord): Remove.         * alloc.c (free_managed_lcrecord): Remove.         * alloc.c (alloc_automanaged_lcrecord): Remove.         * alloc.c (free_lcrecord): Remove.         * alloc.c (lcrecord_stats): Remove.         * alloc.c (tick_lcrecord_stats): Remove.         * alloc.c (disksave_object_finalization_1): Add call to         mc_finalize_for_disksave. Remove the lcrecord way to visit all         objects.         * alloc.c (kkcc_marking): Remove XD_FLAG_FREE_LISP_OBJECT         * alloc.c (sweep_lcrecords_1): Remove.         * alloc.c (common_init_alloc_early): Remove everything related         to lcrecords, remove old lrecord initializations,         * alloc.c (init_lcrecord_lists): Not needed anymore, remove.         * alloc.c (reinit_alloc_early): Remove everything related to         lcrecords.         * alloc.c (init_alloc_once_early): Remove everything related to         lcrecords.         * buffer.c (allocate_buffer): Allocate as lrecord.         * buffer.c (nuke_all_buffer_slots): Use lrecord functions.         * buffer.c (common_init_complex_vars_of_buffer): Allocate as         lrecord.         * buffer.h (struct buffer): Add lrecord_header.         * casetab.c (allocate_case_table): Allocate as lrecord.         * casetab.h (struct Lisp_Case_Table): Add lrecord_header.         * charset.h (struct Lisp_Charset): Add lrecord_header.         * chartab.c (fill_char_table): Use lrecord functions.         * chartab.c (Fmake_char_table): Allocate as lrecord.         * chartab.c (make_char_table_entry): Allocate as lrecord.         * chartab.c (copy_char_table_entry): Allocate as lrecord.         * chartab.c (Fcopy_char_table): Allocate as lrecord.         * chartab.c (put_char_table): Use lrecord functions.         * chartab.h (struct Lisp_Char_Table_Entry): Add lrecord_header.         * chartab.h (struct Lisp_Char_Table): Add lrecord_header.         * console-impl.h (struct console): Add lrecord_header.         * console-msw-impl.h (struct Lisp_Devmode): Add lrecord_header.         * console-msw-impl.h (struct mswindows_dialog_id): Add         lrecord_header.         * console.c (allocate_console): Allocate as lrecord.         * console.c (nuke_all_console_slots): Use lrecord functions.         * console.c (common_init_complex_vars_of_console): Allocate as         lrecord.         * data.c (make_weak_list): Allocate as lrecord.         * data.c (make_weak_box): Allocate as lrecord.         * data.c (make_ephemeron): Allocate as lrecord.         * database.c (struct Lisp_Database): Add lrecord_header.         * database.c (allocate_database): Allocate as lrecord.         * device-impl.h (struct device): Add lrecord_header.         * device-msw.c (allocate_devmode): Allocate as lrecord.         * device.c (nuke_all_device_slots): Use lrecord functions.         * device.c (allocate_device): Allocate as lrecord.         * dialog-msw.c (handle_question_dialog_box): Allocate as lrecord.         * elhash.c (struct Lisp_Hash_Table): Add lrecord_header.         * elhash.c (make_general_lisp_hash_table): Allocate as lrecord.         * elhash.c (Fcopy_hash_table): Allocate as lrecord.         * event-stream.c: Lcrecord lists Vcommand_builder_free_list and         Vtimeout_free_list are no longer needed. Remove.         * event-stream.c (allocate_command_builder): Allocate as lrecord.         * event-stream.c (free_command_builder): Use lrecord functions.         * event-stream.c (event_stream_generate_wakeup): Allocate as         lrecord.         * event-stream.c (event_stream_resignal_wakeup): Use lrecord         functions.         * event-stream.c (event_stream_disable_wakeup): Use lrecord         functions.         * event-stream.c (reinit_vars_of_event_stream): Lcrecord lists         remove.         * events.h (struct Lisp_Timeout): Add lrecord_header.         * events.h (struct command_builder): Add lrecord_header.         * extents-impl.h (struct extent_auxiliary): Add lrecord_header.         * extents-impl.h (struct extent_info): Add lrecord_header.         * extents.c (allocate_extent_auxiliary): Allocate as lrecord.         * extents.c (allocate_extent_info): Allocate as lrecord.         * extents.c (copy_extent): Allocate as lrecord.         * faces.c (allocate_face): Allocate as lrecord.         * faces.h (struct Lisp_Face): Add lrecord_header.         * file-coding.c (allocate_coding_system): Allocate as lrecord.         * file-coding.c (Fcopy_coding_system): Allocate as lrecord.         * file-coding.h (struct Lisp_Coding_System): Add lrecord_header.         * fns.c (Ffillarray): Allocate as lrecord.         * frame-impl.h (struct frame): Add lrecord_header.         * frame.c (nuke_all_frame_slots): Use lrecord functions.         * frame.c (allocate_frame_core): Allocate as lrecord.         * glyphs.c (allocate_image_instance): Allocate as lrecord.         * glyphs.c (Fcolorize_image_instance): Allocate as lrecord.         * glyphs.c (allocate_glyph): Allocate as lrecord.         * glyphs.h (struct Lisp_Image_Instance): Add lrecord_header.         * glyphs.h (struct Lisp_Glyph): Add lrecord_header.         * gui.c (allocate_gui_item): Allocate as lrecord.         * gui.h (struct Lisp_Gui_Item): Add lrecord_header.         * keymap.c (struct Lisp_Keymap): Add lrecord_header.         * keymap.c (make_keymap): Allocate as lrecord.         * lisp.h (struct Lisp_Vector): Add lrecord_header.         * lisp.h (struct Lisp_Bit_Vector): Add lrecord_header.         * lisp.h (struct weak_box): Add lrecord_header.         * lisp.h (struct ephemeron): Add lrecord_header.         * lisp.h (struct weak_list): Add lrecord_header.         * lrecord.h (struct lcrecord_header): Not used, remove.         * lrecord.h (struct free_lcrecord_header): Not used, remove.         * lrecord.h (struct lcrecord_list): Not needed anymore, remove.         * lrecord.h (lcrecord_list): Not needed anymore, remove.         * lrecord.h: (enum data_description_entry_flags): Remove         XD_FLAG_FREE_LISP_OBJECT.         * lstream.c: Lrecord list Vlstream_free_list remove.         * lstream.c (Lstream_new): Allocate as lrecord.         * lstream.c (Lstream_delete): Use lrecod functions.         * lstream.c (reinit_vars_of_lstream): Vlstream_free_list         initialization remove.           * lstream.h (struct lstream): Add lrecord_header.         * emacs.c (main_1): Remove lstream initialization.         * mule-charset.c (make_charset): Allocate as lrecord.         * objects-impl.h (struct Lisp_Color_Instance): Add         lrecord_header.         * objects-impl.h (struct Lisp_Font_Instance): Add lrecord_header.         * objects.c (Fmake_color_instance): Allocate as lrecord.         * objects.c (Fmake_font_instance): Allocate as lrecord.         * objects.c (reinit_vars_of_objects): Allocate as lrecord.         * opaque.c: Lcreord list Vopaque_ptr_list remove.         * opaque.c (make_opaque): Allocate as lrecord.         * opaque.c (make_opaque_ptr): Allocate as lrecord.         * opaque.c (free_opaque_ptr): Use lrecord functions.         * opaque.c (reinit_opaque_early):         * opaque.c (init_opaque_once_early): Vopaque_ptr_list         initialization remove.         * opaque.h (Lisp_Opaque): Add lrecord_header.         * opaque.h (Lisp_Opaque_Ptr): Add lrecord_header.         * emacs.c (main_1): Remove opaque variable initialization.         * print.c (default_object_printer): Use new lrecord_header.         * print.c (print_internal): Use new lrecord_header.         * print.c (debug_p4): Use new lrecord_header.         * process.c (make_process_internal): Allocate as lrecord.         * procimpl.h (struct Lisp_Process): Add lrecord_header.         * rangetab.c (Fmake_range_table): Allocate as lrecord.         * rangetab.c (Fcopy_range_table): Allocate as lrecord.         * rangetab.h (struct Lisp_Range_Table): Add lrecord_header.         * scrollbar.c (create_scrollbar_instance): Allocate as lrecord.         * scrollbar.h (struct scrollbar_instance): Add lrecord_header.         * specifier.c (make_specifier_internal): Allocate as lrecord.         * specifier.h (struct Lisp_Specifier): Add lrecord_header.         * symbols.c:         * symbols.c (Fmake_variable_buffer_local): Allocate as lrecord.         * symbols.c (Fdontusethis_set_symbol_value_handler): Allocate         as lrecord.         * symbols.c (Fdefvaralias): Allocate as lrecord.         * symeval.h (struct symbol_value_magic): Add lrecord_header.         * toolbar.c (update_toolbar_button): Allocate as lrecord.         * toolbar.h (struct toolbar_button): Add lrecord_header.         * tooltalk.c (struct Lisp_Tooltalk_Message): Add lrecord_header.         * tooltalk.c (make_tooltalk_message): Allocate as lrecord.         * tooltalk.c (struct Lisp_Tooltalk_Pattern): Add lrecord_header.         * tooltalk.c (make_tooltalk_pattern): Allocate as lrecord.         * ui-gtk.c (allocate_ffi_data): Allocate as lrecord.         * ui-gtk.c (allocate_emacs_gtk_object_data): Allocate as lrecord.         * ui-gtk.c (allocate_emacs_gtk_boxed_data): Allocate as lrecord.         * ui-gtk.h (structs): Add lrecord_header.         * window-impl.h (struct window): Add lrecord_header.         * window-impl.h (struct window_mirror): Add lrecord_header.         * window.c (allocate_window): Allocate as lrecord.         * window.c (new_window_mirror): Allocate as lrecord.         * window.c (make_dummy_parent): Allocate as lrecord.         MEMORY_USAGE_STATS         * alloc.c (fixed_type_block_overhead): Not used anymore, remove.         * buffer.c (compute_buffer_usage): Get storage size from new         allocator.         * marker.c (compute_buffer_marker_usage): Get storage size from         new allocator.         * mule-charset.c (compute_charset_usage): Get storage size from         new allocator.         * scrollbar-gtk.c (gtk_compute_scrollbar_instance_usage): Get         storage size from new allocator.         * scrollbar-msw.c (mswindows_compute_scrollbar_instance_usage):         Get storage size from new allocator.         * scrollbar-x.c (x_compute_scrollbar_instance_usage): Get         storage size from new allocator.         * scrollbar.c (compute_scrollbar_instance_usage): Get storage         size from new allocator.         * unicode.c (compute_from_unicode_table_size_1): Get storage         size from new allocator.         * unicode.c (compute_to_unicode_table_size_1): Get storage size         from new allocator.         * window.c (compute_window_mirror_usage): Get storage size from         new allocator.         * window.c (compute_window_usage): Get storage size from new         allocator.         MC_ALLOC_TYPE_STATS:         * alloc.c (alloc_lrecord): Bump lrecord count.         * alloc.c (noseeum_alloc_lrecord): Bump lrecord count.         * alloc.c (struct lrecord_stats): Storage for counts.         * alloc.c (init_lrecord_stats): Zero statistics.         * alloc.c (inc_lrecord_stats): Increase the statistic.         * alloc.c (dec_lrecord_stats): Decrease the statistic.         * alloc.c (gc_plist_hack): Used to print the information.         * alloc.c (Fgarbage_collect): Return the collected information.         * mc-alloc.c (remove_cell): Decrease lrecord count.         * mc-alloc.h: Set flag MC_ALLOC_TYPE_STATS.         * emacs.c (main_1): Init lrecord statistics.         * lrecord.h: Add prototypes for *_lrecord_stats.         Strings:         * alloc.c (Fmake_string): Initialize ascii_begin to zero.         * alloc.c (gc_count_num_short_string_in_use): Remove.         * alloc.c (gc_count_string_total_size): Remove.         * alloc.c (gc_count_short_string_total_size): Remove.         * alloc.c (debug_string_purity): Remove.         * alloc.c (debug_string_purity_print): Remove.         * alloc.c (sweep_strings): Remove.                  Remove static C-readonly Lisp objects:         * alloc.c (c_readonly): Not needed anymore, remove.         * alloc.c (GC_CHECK_LHEADER_INVARIANTS): Remove some obsolete         lheader invariants assertions.         * buffer.c (DEFVAR_BUFFER_LOCAL_1): Allocate dynamically.         * console.c (DEFVAR_CONSOLE_LOCAL_1): Allocate dynamically.         * gpmevent.c: Indirection via MC_ALLOC_Freceive_gpm_event.         * gpmevent.c (Fgpm_enable): Allocate dynamically.         * gpmevent.c (syms_of_gpmevent): Allocate dynamically.         * lisp.h (C_READONLY): Not needed anymore, remove.         * lisp.h (DEFUN): Allocate dynamically.         * lrecord.h (C_READONLY_RECORD_HEADER_P): Not needed anymore,         remove.         * lrecord.h (SET_C_READONLY_RECORD_HEADER): Not needed anymore,         remove.         * symbols.c (guts_of_unbound_marker):         * symeval.h (defsubr): Allocate dynamically.         * symeval.h (DEFSUBR_MACRO): Allocate dynamically.         * symeval.h (DEFVAR_ SYMVAL_FWD): Allocate dynamically.         * tests.c (TESTS_DEFSUBR): Allocate dynamically.         Definition of mcpro:         * lisp.h: Add mcpro prototypes.         * alloc.c (common_init_alloc_early): Add initialization for         mcpros.         * alloc.c (mcpro_description_1): New.         * alloc.c (mcpro_description): New.         * alloc.c (mcpros_description_1): New.         * alloc.c (mcpros_description): New.         * alloc.c (mcpro_one_name_description_1): New.         * alloc.c (mcpro_one_name_description): New.         * alloc.c (mcpro_names_description_1): New.         * alloc.c (mcpro_names_description): New.         * alloc.c (mcpros): New.         * alloc.c (mcpro_names): New.         * alloc.c (mcpro_1): New.         * alloc.c (mc_pro): New.         * alloc.c (garbage_collect_1): Add mcpros to root set.         Usage of mcpro:         * alloc.c (make_string_nocopy): Add string to root set.         * symbols.c (init_symbols_once_early): Add Qunbound to root set.         Changes to the Portable Dumper:                  * alloc.c (FREE_OR_REALLOC_BEGIN): Since dumped objects can be         freed with the new allocator, remove assertion for !DUMPEDP.         * dumper.c: Adjust comments, increase PDUMP_HASHSIZE.         * dumper.c (pdump_make_hash): Shift address only 2 bytes, to         avoid collisions.         * dumper.c (pdump_objects_unmark): No more mark bits within         the object, remove.         * dumper.c (mc_addr_elt): New. Element data structure for mc         hash table.         * dumper.c (pdump_mc_hash): New hash table: `lookup table'.         * dumper.c (pdump_get_mc_addr): New. Lookup for hash table.         * dumper.c (pdump_get_indirect_mc_addr): New. Lookup for         convertibles.         * dumper.c (pdump_put_mc_addr): New. Putter for hash table.         * dumper.c (pdump_dump_mc_data): New. Writes the table for         relocation at load time to the dump file.         * dumper.c (pdump_scan_lisp_objects_by_alignment): New.         Visits all dumped Lisp objects.         * dumper.c (pdump_scan_non_lisp_objects_by_alignment): New.         Visits all other dumped objects.         * dumper.c (pdump_reloc_one_mc): New. Updates all pointers         of an object by using the hash table pdump_mc_hash.         * dumper.c (pdump_reloc_one): Replaced by pdump_reloc_one_mc.         * dumper.c (pdump): Change the structure of the dump file, add         the mc post dump relocation table to dump file.         * dumper.c (pdump_load_finish): Hand all dumped objects to the         new allocator and use the mc post dump relocation table for         relocating the dumped objects at dump file load time, free not         longer used data structures.         * dumper.c (pdump_load): Free the dump file.         * dumper.h: Remove pdump_objects_unmark.         * lrecord.h (DUMPEDP): Dumped objects can be freed, remove.              DUMP_IN_EXEC:         * Makefile.in.in: Linking for and with dump in executable only if         DUMP_IN_EXEC is defined.         * config.h.in: Add new flag `DUMP_IN_EXEC'         * emacs.c: Condition dump-data.h on DUMP_IN_EXEC.         * emacs.c (main_1): Flag `-si' only works if dump image is         written into executable.         Miscellanious         * lrecord.h (enum lrecord_type): Added numbers to all types,         very handy for debugging.         * xemacs.def.in.in: Add mc-alloc functions to make them visible         to the modules.
author crestani
date Fri, 08 Apr 2005 23:11:35 +0000
parents e6854ec89f8e
children 520c08f04735
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1 /* Fundamental definitions for XEmacs Lisp interpreter.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2 Copyright (C) 1985-1987, 1992-1995 Free Software Foundation, Inc.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3 Copyright (C) 1993-1996 Richard Mlynarik.
2535
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
4 Copyright (C) 1995, 1996, 2000, 2001, 2002, 2003, 2004, 2005 Ben Wing.
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
6 This file is part of XEmacs.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
7
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
8 XEmacs is free software; you can redistribute it and/or modify it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
9 under the terms of the GNU General Public License as published by the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
10 Free Software Foundation; either version 2, or (at your option) any
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
11 later version.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
12
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
13 XEmacs is distributed in the hope that it will be useful, but WITHOUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
14 ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
15 FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
16 for more details.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
17
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
18 You should have received a copy of the GNU General Public License
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
19 along with XEmacs; see the file COPYING. If not, write to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
20 the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
21 Boston, MA 02111-1307, USA. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
22
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
23 /* Synched up with: FSF 19.30. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
24
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
25 /* Authorship:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
26
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
27 Based on code from pre-release FSF 19, c. 1991.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
28 Various changes by Jamie Zawinski 1991-1994:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
29 converting to ANSI C, splitting out function prototypes to a separate
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
30 file (later moved back for unknown reasons by Steve Baur?), debug-gcpro
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
31 stuff (now moribund).
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
32 ANSI-fication of DEFUN macros by Felix Lee, c. 1992?
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
33 NOT_REACHED, DOESNT_RETURN, PRINTF_ARGS by Richard Mlynarik, c. 1994.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
34 Many changes over the years corresponding to Lisp_Object definition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
35 changes, esp. by Richard Mlynarik (c. 1993) and Kyle Jones (c. 1998).
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
36 See alloc.c for more details.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
37 Overhauled and reordered by Ben Wing, 1995-1996, and many things added:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
38 Dynarrs, REALLOC macros, asserts, typedefs, inline header code,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
39 first LIST_LOOP macros, CONCHECK_*, all error-checking code
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
40 (e.g. error-checking versions of XFOO macros), structure read syntax,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
41 weak lists, lcrecord lists, reworking of quit handling, object hashing,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
42 nested GCPRO, character objects and Ebola checking, memory usage stats,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
43 others.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
44 LOADHIST changes from Steve Baur, c. 1997?
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
45 Various macro-related changes by Martin Buchholz, 1998-1999:
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
46 LIST_LOOP macros greatly expanded and tortoise-hared;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
47 RETURN_SANS_WARNINGS; reworked DEFUN macros; EXFUN macros (???).
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
48 Various macro-related changes by Jerry James, 2003:
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
49 MODULE_API introduced;
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
50 Compiler-specific definitions modernized and moved to compiler.h.
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
51 */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
52
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
53 #ifndef INCLUDED_lisp_h_
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
54 #define INCLUDED_lisp_h_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
55
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
56 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
57 /* general definitions */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
58 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
59
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
60 /* Conventions in comments:
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
61
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
62 "Mule-izing" is the process of going through a file and eliminating
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
63 assumptions that the internal format (Ibyte * text) is the same as the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
64 external format used by library routines. Mule-ization should also
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
65 include replacing *ALL* raw references to `char' or `unsigned char' with
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
66 one of the self-documenting types created below. How exactly to do the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
67 conversion, and how to write correctly Mule-ized code, is described in
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
68 the internals manual. Files that say "This file is Mule-ized" have
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
69 been reviewed at some point; that's not to say that incorrect code hasn't
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
70 crept in, though.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
71
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
72 "Unicode-splitting" is the process of fixing a file so that it will
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
73 handle external text in Unicode under Microsoft Windows, as appropriate.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
74 ("splitting" because it needs to handle either Unicode or variable-width
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
75 multibyte depending on the OS -- NT or 9x). See intl-win32.c.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
76
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
77 #### is a way of marking problems of any sort.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
78
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
79 !!#### marks places that are not properly Mule-ized.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
80
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
81 &&#### marks places that need to be fixed in order for the "8-bit mule"
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
82 conversion to work correctly, i.e. in order to support multiple different
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
83 buffer formats under Mule, including a fixed 8-bit format.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
84
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
85 ^^#### marks places that need to be fixed in order to eliminate the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
86 assumption that Ibyte * text is composed of 1-byte units (e.g. UTF-16
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
87 is composed of 2-byte units and might be a possible format to consider
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
88 for Ibyte * text).
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
89
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
90 %%#### marks places that need work for KKCC (the new garbage collector).
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
91
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
92 */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
93
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
94 /* -------------------------- include files --------------------- */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
95
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
96 /* We include the following generally useful header files so that you
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
97 don't have to worry about prototypes when using the standard C
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
98 library functions and macros. These files shouldn't be excessively
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
99 large so they shouldn't cause that much of a slowdown. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
100
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
101 #include <stdlib.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
102 #include <string.h> /* primarily for memcpy, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
103 #include <stdio.h> /* NULL, etc. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
104 #include <ctype.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
105 #include <stdarg.h>
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
106 #include <stddef.h> /* offsetof */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
107 #include <sys/types.h>
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
108 #include <limits.h>
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
109
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
110 /* -------------------------- error-checking ------------------------ */
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
111
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
112 /* The large categories established by configure can be subdivided into
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
113 smaller subcategories, for problems in specific modules. You can't
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
114 control this using configure, but you can manually stick in a define as
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
115 necessary. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
116
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
117 #ifdef ERROR_CHECK_STRUCTURES
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
118 /* Check for problems with the catch list and specbind stack */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
119 #define ERROR_CHECK_CATCH
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
120 /* Check for insufficient use of call_trapping_problems(), particularly
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
121 due to glyph-related changes causing eval or QUIT within redisplay */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
122 #define ERROR_CHECK_TRAPPING_PROBLEMS
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
123 #endif
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
124
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
125 #ifdef ERROR_CHECK_TYPES
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
126 #define type_checking_assert(assertion) assert (assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
127 #define type_checking_assert_at_line(assertion, file, line) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
128 assert_at_line (assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
129 #define type_checking_assert_with_message(assertion, msg) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
130 assert_with_message (assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
131 #else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
132 #define type_checking_assert(assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
133 #define type_checking_assert_at_line(assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
134 #define type_checking_assert_with_message(assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
135 #endif
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
136 #ifdef ERROR_CHECK_GC
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
137 #define gc_checking_assert(assertion) assert (assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
138 #define gc_checking_assert_at_line(assertion, file, line) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
139 assert_at_line (assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
140 #define gc_checking_assert_with_message(assertion, msg) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
141 assert_with_message (assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
142 #else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
143 #define gc_checking_assert(assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
144 #define gc_checking_assert_at_line(assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
145 #define gc_checking_assert_with_message(assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
146 #endif
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
147 #ifdef ERROR_CHECK_TEXT
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
148 #define text_checking_assert(assertion) assert (assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
149 #define text_checking_assert_at_line(assertion, file, line) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
150 assert_at_line (assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
151 #define text_checking_assert_with_message(assertion, msg) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
152 assert_with_message (assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
153 #else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
154 #define text_checking_assert(assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
155 #define text_checking_assert_at_line(assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
156 #define text_checking_assert_with_message(assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
157 #endif
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
158 #ifdef ERROR_CHECK_TRAPPING_PROBLEMS
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
159 #define trapping_problems_checking_assert(assertion) assert (assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
160 #define trapping_problems_checking_assert_at_line(assertion, file, line) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
161 assert_at_line (assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
162 #define trapping_problems_checking_assert_with_message(assertion, msg) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
163 assert_with_message (assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
164 #else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
165 #define trapping_problems_checking_assert(assertion)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
166 #define trapping_problems_checking_assert_at_line(assertion, file, line)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
167 #define trapping_problems_checking_assert_with_message(assertion, msg)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
168 #endif
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
169
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
170 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
171 /** Definitions of basic types **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
172 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
173
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
174 /* ------------- generic 8/16/32/64/128-bit integral types ------------ */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
175
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
176 #if SIZEOF_SHORT == 2
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
177 #define INT_16_BIT short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
178 #define UINT_16_BIT unsigned short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
179 #elif SIZEOF_INT == 2
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
180 /* Bwa ha ha. As if XEmacs could actually support such systems. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
181 #define INT_16_BIT int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
182 #define UINT_16_BIT unsigned int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
183 #else
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
184 #error Unable to find a 16-bit integral type
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
185 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
186
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
187 #if SIZEOF_INT == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
188 #define INT_32_BIT int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
189 #define UINT_32_BIT unsigned int
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
190 #define MAKE_32_BIT_UNSIGNED_CONSTANT(num) num##U
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
191 #elif SIZEOF_LONG == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
192 /* Bwa ha ha again. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
193 #define INT_32_BIT long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
194 #define UINT_32_BIT unsigned long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
195 #define MAKE_32_BIT_UNSIGNED_CONSTANT(num) num##UL
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
196 #elif SIZEOF_SHORT == 4
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
197 /* And again. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
198 #define INT_32_BIT short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
199 #define UINT_32_BIT unsigned short
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
200 #define MAKE_32_BIT_UNSIGNED_CONSTANT(num) num##U
1429
969b7290edca [xemacs-hg @ 2003-04-24 05:33:43 by youngs]
youngs
parents: 1346
diff changeset
201 #elif 1 /* Unable to find a 32-bit integral type! */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
202 #error What kind of strange-ass system are you running on?
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
203 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
204
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
205 #if SIZEOF_LONG == 8
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
206 #define INT_64_BIT long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
207 #define UINT_64_BIT unsigned long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
208 #define MAKE_64_BIT_UNSIGNED_CONSTANT(num) num##UL
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
209 #elif SIZEOF_LONG_LONG == 8
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
210 #define INT_64_BIT long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
211 #define UINT_64_BIT unsigned long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
212 #define MAKE_64_BIT_UNSIGNED_CONSTANT(num) num##ULL
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
213 /* No error otherwise; just leave undefined */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
214 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
215
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
216 #if SIZEOF_LONG_LONG == 16
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
217 #define INT_128_BIT long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
218 #define UINT_128_BIT unsigned long long
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
219 #define MAKE_128_BIT_UNSIGNED_CONSTANT(num) num##ULL
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
220 /* No error otherwise; just leave undefined */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
221 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
222
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
223 /* #### Fill this in for other systems */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
224 #if defined (INT_64_BIT) && !(defined (i386) || defined (__i386__))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
225 #define EFFICIENT_INT_64_BIT INT_64_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
226 #define EFFICIENT_UINT_64_BIT UINT_64_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
227 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
228
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
229 #if defined (INT_128_BIT)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
230 #define EFFICIENT_INT_128_BIT INT_128_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
231 #define EFFICIENT_UINT_128_BIT UINT_128_BIT
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
232 #endif
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
233
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
234 #ifdef HAVE_INTTYPES_H
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
235 #include <inttypes.h>
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
236 #elif defined (HAVE_INTPTR_T_IN_SYS_TYPES_H)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
237 /* included elsewhere */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
238 #elif SIZEOF_VOID_P == SIZEOF_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
239 typedef int intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
240 typedef unsigned int uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
241 #elif SIZEOF_VOID_P == SIZEOF_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
242 typedef long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
243 typedef unsigned long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
244 #elif defined (SIZEOF_LONG_LONG) && SIZEOF_VOID_P == SIZEOF_LONG_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
245 typedef long long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
246 typedef unsigned long long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
247 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
248 /* Just pray. May break, may not. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
249 typedef long intptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
250 typedef unsigned long uintptr_t;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
251 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
252
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
253 /* ---------------------- definition of EMACS_INT --------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
254
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
255 /* EMACS_INT is the underlying integral type into which a Lisp_Object must fit.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
256 In particular, it must be large enough to contain a pointer.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
257 config.h can override this, e.g. to use `long long' for bigger lisp ints.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
258
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
259 #### In point of fact, it would NOT be a good idea for config.h to mess
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
260 with EMACS_INT. A lot of code makes the basic assumption that EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
261 is the size of a pointer. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
262
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
263 #ifndef SIZEOF_EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
264 # define SIZEOF_EMACS_INT SIZEOF_VOID_P
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
265 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
266
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
267 #ifndef EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
268 # if SIZEOF_EMACS_INT == SIZEOF_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
269 # define EMACS_INT long
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
270 # elif SIZEOF_EMACS_INT == SIZEOF_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
271 # define EMACS_INT int
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
272 # elif SIZEOF_EMACS_INT == SIZEOF_LONG_LONG
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
273 # define EMACS_INT long long
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
274 # else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
275 # error Unable to determine suitable type for EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
276 # endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
277 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
278
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
279 #ifndef EMACS_UINT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
280 # define EMACS_UINT unsigned EMACS_INT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
281 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
282
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
283 #define BITS_PER_EMACS_INT (SIZEOF_EMACS_INT * BITS_PER_CHAR)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
284
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
285 /* -------------------------- basic byte typedefs --------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
286
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
287 /* The definitions we put here and in the next section use typedefs to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
288 attribute specific meaning to types that by themselves are pretty
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
289 general.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
290
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
291 REMEMBER! These typedefs are purely for documentation purposes; from
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
292 the C code's perspective, they are exactly equivalent to `char *',
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
293 `unsigned char *', etc., so you can freely use them with library
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
294 functions declared as such.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
295
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
296 (See also "Byte/Character Types" in text.c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
297
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
298 The basic semantics for `char':
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
299
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
300 a) [Ibyte] pointer to internally-formatted text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
301 b) [Extbyte] pointer to text in some external format, which can be
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
302 defined as all formats other than the internal one
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
303 c) [Ascbyte] pure ASCII text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
304 d) [Binbyte] binary data that is not meant to be interpreted as text
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
305 e) [Rawbyte] general data in memory, where we don't care about whether
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
306 it's text or binary
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
307 f) [Boolbyte] a zero or a one
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
308 g) [Bitbyte] a byte used for bit fields
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
309 h) [Chbyte] null-semantics `char *'; used when casting an argument to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
310 an external API where the the other types may not be
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
311 appropriate
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
312
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
313
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
314 Prefixing codes:
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
315
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
316 C = plain char, when the base type is unsigned
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
317 U = unsigned
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
318 S = signed
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
319
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
320 Ideally, XEmacs code should NEVER directly use `char' or any type
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
321 derived from it. This is for Mule-cleanliness. If you find yourself
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
322 wanting or needing to use `char' and one of the above six semantics does
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
323 not apply, add a new type of semantics; don't use `char' directly.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
324
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
325 See text.c under "Byte Types", and following sections.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
326 */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
327
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
328 /* The data representing the text in a buffer is logically a set
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
329 of Ibytes, declared as follows. */
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
330
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
331 typedef unsigned char Ibyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
332
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
333 /* The following should be used when you are working with internal data
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
334 but for whatever reason need to have it declared a "char *". Examples
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
335 are function arguments whose values are most commonly literal strings,
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
336 or where you have to apply a stdlib string function to internal data.
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
337
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
338 In general, you should avoid this where possible and use Ascbyte if the
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
339 text is just ASCII (e.g. string literals) or otherwise Ibyte, for
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
340 consistency. For example, the new Mule workspace contains Ibyte
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
341 versions of the stdlib string functions. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
342
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
343 typedef char CIbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
344
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
345 /* The data representing a string in "external" format (binary or any
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
346 external encoding) is logically a set of Extbytes, declared as
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
347 follows. Extbyte is guaranteed to be just a char, so for example
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
348 strlen (Extbyte *) is OK. Extbyte is only a documentation device
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
349 for referring to external text. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
350
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
351 typedef char Extbyte;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
352 typedef unsigned char UExtbyte;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
353
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
354 #define EXTTEXT_ZTERM_SIZE (sizeof (Extbyte))
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
355
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
356 /* A byte in a string in entirely US-ASCII format: (Nothing outside
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
357 the range 00 - 7F) */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
358
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
359 typedef char Ascbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
360 typedef unsigned char UAscbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
361
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
362 /* A generic memory pointer, no text or binary semantics assumed.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
363 In general, there should be no manipulation of the memory pointed to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
364 by these pointers other than just copying it around. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
365
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
366 typedef unsigned char Rawbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
367 typedef char CRawbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
368
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
369 /* A byte in a string in binary (not meant as text) format: */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
370
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
371 typedef unsigned char Binbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
372 typedef char CBinbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
373 typedef signed char SBinbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
374
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
375 /* A byte used to represent a boolean value: 0 or 1.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
376 Normally use plain Boolint, and only use Boolbyte to save space. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
377
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
378 typedef char Boolbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
379
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
380 /* A byte composed of bitfields. Hardly ever used. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
381
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
382 typedef unsigned char Bitbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
383
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
384 /* A no-semantics `char'. Used (pretty-much) ONLY for casting arguments to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
385 functions accepting a `char *', `unsigned char *', etc. where the other
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
386 types don't exactly apply and what you are logically concerned with is
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
387 the type of the function's argument and not its semantics.
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
388
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
389 DO NOT DO NOT DO NOT DO NOT use this as a sloppy replacement for one of
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
390 the other types. If you're not using this as part of casting an
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
391 argument to a function call, and you're not Ben Wing, you're using it
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
392 wrong. Go find another one of the types. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
393
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
394 typedef char Chbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
395 typedef unsigned char UChbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
396 typedef signed char SChbyte;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
397
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
398 /* ------------------------ other text-related typedefs ------------------- */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
399
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
400 /* To the user, a buffer is made up of characters. In the non-Mule world,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
401 characters and Ibytes are equivalent, restricted to the range 0 - 255.
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
402 In the Mule world, many more characters are possible (19 bits worth,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
403 more or less), and a character requires (typically) 1 to 4 Ibytes for
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
404 its representation in a buffer or string. Note that the representation
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
405 of a character by itself, in a variable, is very different from its
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
406 representation in a string of text (in a buffer or Lisp string).
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
407
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
408 Under Mule, text can be represented in more than one way. The "default"
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
409 format is variable-width (1 to 4 bytes) and compatible with ASCII --
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
410 ASCII chars are stored in one byte, as themselves, and all other chars
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
411 use only high bytes. The default format is currently the only format
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
412 used for text stored anywhere but in a buffer. In a buffer, other
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
413 formats -- fixed-width formats (1, 2, or 4 bytes) -- are possible, for
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
414 speed.
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
415
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
416 See text.c/text.h for a detailed discussion of all of this. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
417
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
418 /* A character, as represented on its own. */
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
419
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
420 typedef int Ichar;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
421
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
422 /* The "raw value" of a character as stored in the buffer. In the default
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
423 format, this is just the same as the character. In fixed-width formats,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
424 this is the actual value in the buffer, which will be limited to the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
425 range as established by the format. This is used when searching for a
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
426 character in a buffer -- it's faster to convert the character to the raw
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
427 value and look for that, than repeatedly convert each raw value in the
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
428 buffer into a character. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
429
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
430 typedef int Raw_Ichar;
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
431
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
432 /* Internal text as a series of textual units (8-bit bytes in the old
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
433 "Mule" encoding -- still the standard internal encoding -- and in UTF-8,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
434 but 16-bit bytes in UTF-16 and 32-bit bytes in UTF-32). See text.c. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
435
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
436 #ifdef UTF16_IBYTE_FORMAT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
437 #define NON_ASCII_INTERNAL_FORMAT
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
438 typedef unsigned short Itext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
439 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
440 typedef Ibyte Itext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
441 #endif
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
442 typedef EMACS_INT Textcount;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
443
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
444 #define ITEXT_SIZE (sizeof (Itext))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
445 /* Use this to emphasize that we are adding space for the zero-terminator */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
446 #define ITEXT_ZTERM_SIZE ITEXT_SIZE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
447
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
448 /* Wexttext is wchar_t on WIN32_NATIVE (and perhaps other systems that
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
449 support wchar_t's in library functions), and Extbyte otherwise. This is
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
450 used whenever we have to do any sort of manipulation of
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
451 externally-encoded strings -- generally a very bad idea, and unsafe, but
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
452 in some cases we have no choice (especially at startup, and esp. prior
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
453 to pdump, where we haven't loaded the Unicode tables necessary for
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
454 conversion under Windows). On platforms where the external encoding may
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
455 be Unicode (i.e. Windows), we always do our manipulations in Unicode,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
456 converting to and from multibyte if necessary -- otherwise we'd have to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
457 conditionalize on Unicode vs. multibyte all over the place, which is
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
458 just a nightmare. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
459 #ifdef WIN32_NATIVE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
460 #define WEXTTEXT_IS_WIDE
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
461 typedef wchar_t Wexttext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
462 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
463 typedef Extbyte Wexttext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
464 #endif
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
465
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
466 #if !defined (__cplusplus) || !defined (CPLUSPLUS_INTEGRAL_CLASSES_NOT_YET)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
467
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
468 /* Counts of bytes or chars */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
469
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
470 typedef EMACS_INT Bytecount;
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
471 typedef EMACS_INT Charcount;
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
472
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
473 /* Different ways of referring to a position in a buffer. We use
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
474 the typedefs in preference to 'EMACS_INT' to make it clearer what
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
475 sort of position is being used. See text.c for a description
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
476 of the different positions.
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
477
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
478 Note that buffer positions are 1-based, and there's a gap in the middle
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
479 of a buffer; that's why we have separate typedefs. For Lisp strings and
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
480 other strings of text, we just use Bytecount and Charcount. */
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
481
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
482 typedef EMACS_INT Charbpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
483 typedef EMACS_INT Bytebpos;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
484 typedef EMACS_INT Membpos;
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
485
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
486 /* Different ways of referring to a position that can be either in a buffer
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
487 or string; used when passing around an object that can be either a
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
488 buffer or string, and an associated position. Conceptually, they
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
489 resolve as follows:
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
490
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
491 Typedef Buffer String
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
492 ------------------------------------------------------
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
493 Charxpos Charbpos Charcount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
494 Bytexpos Bytebpos Bytecount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
495 Memxpos Membpos Bytecount
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
496
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
497 */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
498
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
499 typedef EMACS_INT Charxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
500 typedef EMACS_INT Bytexpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
501 typedef EMACS_INT Memxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
502
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
503 #else /* __cplusplus */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
504
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
505 /* Implement strong type-checking of the above integral types by declaring
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
506 them to be classes and using operator overloading. Unfortunately this
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
507 is a huge pain in the ass because C++ doesn't strongly distinguish
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
508 "bool" and "size_t" from int. The problem is especially bad with "bool"
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
509 -- if you want to be able to say 'if (len--)' where len is e.g. a
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
510 Bytecount, you need to declare a conversion operator to bool(); and
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
511 since bool is just an alias for int, you suddenly get tons and tons of
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
512 ambiguities, which need to be resolved by lots of laborious declarations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
513 for every single possible type combination. Hence the multitude of
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
514 declarations in DECLARE_INTCLASS_ARITH_COMPARE(). The bool/int
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
515 equivalence also means that we have to forcibly block the combinations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
516 we don't want by creating overloaded versions of them and declaring them
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
517 private. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
518
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
519 class Bytecount;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
520 class Bytebpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
521 class Bytexpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
522 class Charcount;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
523 class Charbpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
524 class Charxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
525 class Membpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
526 class Memxpos;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
527
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
528 /* Declare the arithmetic and comparison operations for an integral class,
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
529 i.e. one of the above classes. If this is a "position" class, where the
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
530 difference between two positions is a different class (a "count" class),
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
531 then use POSCL for the position class and COUNTCL for the count class.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
532 If this is a simple class, where all operations yield the same class,
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
533 substitute the same class for POSCL and COUNTCL. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
534
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
535 #define DECLARE_INTCLASS_ARITH_COMPARE(poscl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
536 poscl operator += (const countcl& l) { data += l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
537 poscl operator -= (const countcl& l) { data -= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
538 poscl operator + (const countcl& l) const { return poscl (data + l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
539 poscl operator - (const countcl& l) const { return poscl (data - l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
540 poscl operator += (const int& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
541 poscl operator -= (const int& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
542 poscl operator + (const int& l) const { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
543 poscl operator - (const int& l) const { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
544 poscl operator += (const unsigned int& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
545 poscl operator -= (const unsigned int& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
546 poscl operator + (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
547 { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
548 poscl operator - (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
549 { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
550 poscl operator += (const long& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
551 poscl operator -= (const long& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
552 poscl operator + (const long& l) const { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
553 poscl operator - (const long& l) const { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
554 poscl operator += (const unsigned long& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
555 poscl operator -= (const unsigned long& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
556 poscl operator + (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
557 { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
558 poscl operator - (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
559 { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
560 poscl operator += (const short& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
561 poscl operator -= (const short& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
562 poscl operator + (const short& l) const { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
563 poscl operator - (const short& l) const { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
564 poscl operator += (const unsigned short& l) { data += l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
565 poscl operator -= (const unsigned short& l) { data -= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
566 poscl operator + (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
567 { return poscl (data + l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
568 poscl operator - (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
569 { return poscl (data - l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
570 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
571 poscl operator *= (const countcl& l) { data *= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
572 poscl operator /= (const countcl& l) { data /= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
573 poscl operator * (const countcl& l) const { return poscl (data * l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
574 poscl operator / (const countcl& l) const { return poscl (data / l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
575 poscl operator *= (const int& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
576 poscl operator /= (const int& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
577 poscl operator * (const int& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
578 poscl operator / (const int& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
579 poscl operator *= (const unsigned int& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
580 poscl operator /= (const unsigned int& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
581 poscl operator * (const unsigned int& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
582 poscl operator / (const unsigned int& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
583 poscl operator *= (const long& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
584 poscl operator /= (const long& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
585 poscl operator * (const long& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
586 poscl operator / (const long& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
587 poscl operator *= (const unsigned long& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
588 poscl operator /= (const unsigned long& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
589 poscl operator * (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
590 { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
591 poscl operator / (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
592 { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
593 poscl operator *= (const short& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
594 poscl operator /= (const short& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
595 poscl operator * (const short& l) const { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
596 poscl operator / (const short& l) const { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
597 poscl operator *= (const unsigned short& l) { data *= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
598 poscl operator /= (const unsigned short& l) { data /= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
599 poscl operator * (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
600 { return poscl (data * l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
601 poscl operator / (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
602 { return poscl (data / l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
603 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
604 poscl operator &= (const countcl& l) { data &= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
605 poscl operator |= (const countcl& l) { data |= l.data; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
606 poscl operator & (const countcl& l) const { return poscl (data & l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
607 poscl operator | (const countcl& l) const { return poscl (data | l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
608 poscl operator &= (const int& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
609 poscl operator |= (const int& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
610 poscl operator & (const int& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
611 poscl operator | (const int& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
612 poscl operator &= (const unsigned int& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
613 poscl operator |= (const unsigned int& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
614 poscl operator & (const unsigned int& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
615 poscl operator | (const unsigned int& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
616 poscl operator &= (const long& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
617 poscl operator |= (const long& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
618 poscl operator & (const long& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
619 poscl operator | (const long& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
620 poscl operator &= (const unsigned long& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
621 poscl operator |= (const unsigned long& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
622 poscl operator & (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
623 { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
624 poscl operator | (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
625 { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
626 poscl operator &= (const short& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
627 poscl operator |= (const short& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
628 poscl operator & (const short& l) const { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
629 poscl operator | (const short& l) const { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
630 poscl operator &= (const unsigned short& l) { data &= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
631 poscl operator |= (const unsigned short& l) { data |= l; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
632 poscl operator & (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
633 { return poscl (data & l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
634 poscl operator | (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
635 { return poscl (data | l); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
636 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
637 poscl operator - () { return poscl (-data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
638 poscl operator-- () { data--; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
639 poscl operator-- (int) { data--; return poscl (data + 1); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
640 poscl operator++ () { data++; return *this; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
641 poscl operator++ (int) { data++; return poscl (data - 1); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
642 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
643 bool operator < (const poscl& l) const { return data < l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
644 bool operator <= (const poscl& l) const { return data <= l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
645 bool operator > (const poscl& l) const { return data > l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
646 bool operator >= (const poscl& l) const { return data >= l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
647 bool operator == (const poscl& l) const { return data == l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
648 bool operator != (const poscl& l) const { return data != l.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
649 bool operator < (const int& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
650 bool operator <= (const int& l) const { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
651 bool operator > (const int& l) const { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
652 bool operator >= (const int& l) const { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
653 bool operator == (const int& l) const { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
654 bool operator != (const int& l) const { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
655 bool operator < (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
656 { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
657 bool operator <= (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
658 { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
659 bool operator > (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
660 { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
661 bool operator >= (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
662 { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
663 bool operator == (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
664 { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
665 bool operator != (const unsigned int& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
666 { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
667 bool operator < (const long& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
668 bool operator <= (const long& l) const { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
669 bool operator > (const long& l) const { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
670 bool operator >= (const long& l) const { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
671 bool operator == (const long& l) const { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
672 bool operator != (const long& l) const { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
673 bool operator < (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
674 { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
675 bool operator <= (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
676 { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
677 bool operator > (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
678 { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
679 bool operator >= (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
680 { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
681 bool operator == (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
682 { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
683 bool operator != (const unsigned long& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
684 { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
685 bool operator < (const short& l) const { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
686 bool operator <= (const short& l) const { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
687 bool operator > (const short& l) const { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
688 bool operator >= (const short& l) const { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
689 bool operator == (const short& l) const { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
690 bool operator != (const short& l) const { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
691 bool operator < (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
692 { return data < (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
693 bool operator <= (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
694 { return data <= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
695 bool operator > (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
696 { return data > (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
697 bool operator >= (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
698 { return data >= (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
699 bool operator == (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
700 { return data == (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
701 bool operator != (const unsigned short& l) const \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
702 { return data != (EMACS_INT) l; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
703 bool operator ! () const { return !data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
704
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
705 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
706 between class GOOD and class BAD. Meant to go inside the private
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
707 section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
708
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
709 #define DECLARE_BAD_INTCLASS_ARITH_COMPARE(good, bad) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
710 good operator += (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
711 good operator -= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
712 good operator *= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
713 good operator /= (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
714 good operator + (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
715 good operator - (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
716 good operator * (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
717 good operator / (const bad& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
718 \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
719 bool operator < (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
720 bool operator <= (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
721 bool operator > (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
722 bool operator >= (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
723 bool operator == (const bad& l) { return 0; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
724 bool operator != (const bad& l) { return 0; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
725
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
726 /* Declare the "bad" or disallowed arithmetic operations between class GOOD
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
727 and another of the same class, for a position class. Meant to go inside
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
728 the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
729
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
730 #define DECLARE_BAD_POS_CLASS_ARITH(good) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
731 good operator += (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
732 good operator -= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
733 good operator *= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
734 good operator /= (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
735 good operator + (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
736 good operator * (const good& l) { return badret; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
737 good operator / (const good& l) { return badret; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
738
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
739 /* Basic declaration at the top of all integral classes. Don't call
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
740 directly, use one of the more specific versions below. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
741
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
742 #define DECLARE_INTCLASS(cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
743 public: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
744 EMACS_INT data; \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
745 cl () { data = 0xCDCDCDCD; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
746 cl (int i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
747 cl (unsigned int i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
748 cl (long i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
749 cl (unsigned long i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
750 cl (short i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
751 cl (unsigned short i) { data = i; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
752 operator EMACS_INT () const { return data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
753
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
754 /* Basic declaration at the top of all count classes. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
755
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
756 #define DECLARE_COUNT_CLASS(cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
757 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
758 DECLARE_INTCLASS_ARITH_COMPARE (cl, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
759 private: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
760 static cl badret;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
761
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
762 /* Basic declaration at the bottom of the prelude of all position classes.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
763 Don't call directly. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
764
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
765 #define DECLARE_POS_CLASS_SECOND_HALF(cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
766 DECLARE_INTCLASS_ARITH_COMPARE (cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
767 countcl operator - (const cl& l) const { return countcl (data - l.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
768 private: \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
769 static cl badret; \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
770 DECLARE_BAD_POS_INTCLASS_ARITH (cl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
771
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
772 /* Basic declaration at the top of all buffer position classes. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
773
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
774 #define DECLARE_BPOS_CLASS(cl, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
775 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
776 DECLARE_POS_CLASS_SECOND_HALF (cl, countcl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
777
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
778 /* Basic declaration at the top of all X-position classes (that can refer
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
779 to buffers or strings). CL1 and CL2 are the equivalent more specific
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
780 classes referring only to buffers or strings, respectively. */
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
781
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
782 #define DECLARE_XPOS_CLASS(cl, countcl, cl1, cl2) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
783 DECLARE_INTCLASS (cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
784 cl (const cl1& x) { data = x.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
785 cl (const cl2& x) { data = x.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
786 operator cl1 () const { return cl1 (data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
787 operator cl2 () const { return cl2 (data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
788 DECLARE_POS_CLASS_SECOND_HALF (cl, countcl)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
789
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
790 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
791 between class CHARCL (a character class) and various non-character
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
792 classes. Meant to go inside the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
793
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
794 #define DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE(charcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
795 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytecount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
796 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytebpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
797 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Bytexpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
798 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Membpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
799 DECLARE_BAD_INTCLASS_ARITH_COMPARE (charcl, Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
800
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
801 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
802 between class BYTECL (a byte class) and various non-byte classes.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
803 Meant to go inside the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
804
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
805 #define DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE(bytecl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
806 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charcount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
807 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charbpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
808 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charxpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
809 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Membpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
810 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
811
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
812 /* Declare the "bad" or disallowed arithmetic and comparion operations
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
813 between class BYTECL (a mem class) and various non-mem classes.
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
814 Meant to go inside the private section of class GOOD. */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
815
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
816 #define DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE(bytecl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
817 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charcount) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
818 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charbpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
819 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Charxpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
820 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Bytebpos) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
821 DECLARE_BAD_INTCLASS_ARITH_COMPARE (bytecl, Bytexpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
822
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
823 class Charcount
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
824 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
825 DECLARE_COUNT_CLASS (Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
826 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
827 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
828
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
829 class Charbpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
830 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
831 DECLARE_BPOS_CLASS (Charbpos, Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
832 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charbpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
833 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
834
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
835 class Charxpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
836 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
837 DECLARE_XPOS_CLASS (Charxpos, Charcount, Charbpos, Charcount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
838 DECLARE_BAD_CHAR_INTCLASS_ARITH_COMPARE (Charxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
839 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
840
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
841 class Bytecount
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
842 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
843 DECLARE_COUNT_CLASS (Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
844 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
845 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
846
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
847 class Bytebpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
848 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
849 DECLARE_BPOS_CLASS (Bytebpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
850 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytebpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
851 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
852
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
853 class Bytexpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
854 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
855 DECLARE_XPOS_CLASS (Bytexpos, Bytecount, Bytebpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
856 DECLARE_BAD_BYTE_INTCLASS_ARITH_COMPARE (Bytexpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
857 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
858
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
859 class Membpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
860 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
861 DECLARE_BPOS_CLASS (Membpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
862 DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE (Membpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
863 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
864
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
865 class Memxpos
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
866 {
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
867 DECLARE_XPOS_CLASS (Memxpos, Bytecount, Membpos, Bytecount)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
868 DECLARE_BAD_MEM_INTCLASS_ARITH_COMPARE (Memxpos)
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
869 };
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
870
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
871 #define DECLARE_POINTER_TYPE_ARITH_COUNT(pointer, countcl) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
872 inline pointer operator += (const pointer & x, const countcl& y) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
873 { x += y.data; return x; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
874 inline pointer operator -= (const pointer & x, const countcl& y) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
875 { x -= y.data; return x; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
876 inline pointer operator + (const pointer x, const countcl& y) \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
877 { return x + y.data; } \
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
878 inline pointer operator - (const pointer x, const countcl& y) \
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
879 { return x - y.data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
880
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
881 #define DECLARE_INTEGRAL_TYPE_ARITH_COUNT(integral, countcl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
882 inline integral operator += (integral & x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
883 { x += y.data; return x; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
884 inline integral operator -= (integral & x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
885 { x -= y.data; return x; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
886 inline countcl operator + (integral x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
887 { return countcl (x + y.data); } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
888 inline countcl operator - (integral x, const countcl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
889 { return countcl (x - y.data); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
890
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
891 #define DECLARE_INTEGRAL_TYPE_COMPARE(integral, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
892 inline bool operator < (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
893 { return (EMACS_INT) x < y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
894 inline bool operator <= (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
895 { return (EMACS_INT) x <= y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
896 inline bool operator > (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
897 { return (EMACS_INT) x > y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
898 inline bool operator >= (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
899 { return (EMACS_INT) x >= y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
900 inline bool operator == (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
901 { return (EMACS_INT) x == y.data; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
902 inline bool operator != (integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
903 { return (EMACS_INT) x != y.data; }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
904
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
905 #if 0
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
906 /* Unfortunately C++ doesn't let you overload the ?: operator, so we have
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
907 to manually deal with ambiguities using casting */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
908 #define DECLARE_INTEGRAL_TYPE_TRISTATE(integral, cl) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
909 inline cl operator ?: (bool b, integral x, const cl& y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
910 { return b ? cl (x) : y; } \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
911 inline cl operator ?: (bool b, const cl& x, integral y) \
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
912 { return b ? x : cl (y); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
913 #endif /* 0 */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
914
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
915 /* DECLARE_POINTER_TYPE_ARITH_COUNT (const Ibyte *, Bytecount);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
916 DECLARE_POINTER_TYPE_ARITH_COUNT (const Extbyte *, Bytecount); */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
917 DECLARE_POINTER_TYPE_ARITH_COUNT (Ibyte *, Bytecount);
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
918 DECLARE_POINTER_TYPE_ARITH_COUNT (Extbyte *, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
919
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
920 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
921 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
922 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
923 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
924 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
925 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
926 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
927 DECLARE_INTEGRAL_TYPE_ARITH_COUNT (unsigned long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
928
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
929 DECLARE_INTEGRAL_TYPE_COMPARE (int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
930 DECLARE_INTEGRAL_TYPE_COMPARE (int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
931 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned int, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
932 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned int, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
933 DECLARE_INTEGRAL_TYPE_COMPARE (long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
934 DECLARE_INTEGRAL_TYPE_COMPARE (long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
935 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned long, Bytecount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
936 DECLARE_INTEGRAL_TYPE_COMPARE (unsigned long, Charcount);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
937
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
938 #if 0 /* doesn't work */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
939 inline Bytecount operator - (const Ibyte *x, const Ibyte *y) \
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
940 { return Bytecount (x - y); }
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
941 #endif
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
942
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
943 #endif /* __cplusplus */
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
944
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
945 /* Counts of elements */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
946 typedef EMACS_INT Elemcount;
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
947 /* Hash codes */
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
948 typedef unsigned long Hashcode;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
949 /* Booleans */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
950 typedef int Boolint;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
951
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
952 /* ------------------------ basic compiler defines ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
953
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
954 #include "compiler.h"
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
955
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
956 /* ------------------------ alignment definitions ------------------- */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
957
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
958 /* No type has a greater alignment requirement than max_align_t.
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
959 (except perhaps for types we don't use, like long double) */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
960 typedef union
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
961 {
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
962 struct { long l; } l;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
963 struct { void *p; } p;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
964 struct { void (*f)(void); } f;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
965 struct { double d; } d;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
966 } max_align_t;
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
967
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
968 /* ALIGNOF returns the required alignment of a type -- i.e. a value such
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
969 that data of this type must begin at a memory address which is a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
970 multiple of that value. For simple types, this is often the same size
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
971 as the type itself. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
972
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
973 #ifndef ALIGNOF
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
974 # if defined (__GNUC__) && (__GNUC__ >= 2)
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
975 /* gcc has an extension that gives us exactly what we want. */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
976 # define ALIGNOF(type) __alignof__ (type)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
977 # elif ! defined (__cplusplus)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
978 /* The following is mostly portable, except that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
979 - it doesn't work for inside out declarations like void (*) (void).
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
980 (so just call ALIGNOF with a typedef'ed name)
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
981 - it doesn't work with C++. The C++ committee has decided,
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
982 in its infinite wisdom, that:
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
983 "Types must be declared in declarations, not in expressions." */
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
984 # define ALIGNOF(type) offsetof (struct { char c; type member; }, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
985 # else
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
986 /* C++ is annoying, but it has a big bag of tricks.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
987 The following doesn't have the "inside out" declaration bug C does. */
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
988 template<typename T> struct alignment_trick { char c; T member; };
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
989 # define ALIGNOF(type) offsetof (alignment_trick<type>, member)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
990 # endif
454
d7a9135ec789 Import from CVS: tag r21-2-42
cvs
parents: 452
diff changeset
991 #endif /* ALIGNOF */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
992
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
993 /* ALIGN_SIZE returns the smallest size greater than or equal to LEN which
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
994 is a multiple of UNIT. This can be used to assure that data that
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
995 follows a block of the returned size is of correct alignment for a type
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
996 whose alignment (as returned by ALIGNOF) is UNIT (provided that the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
997 block itself is correctly aligned for this type; memory returned by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
998 malloc() is guaranteed to be correctly aligned for all types). */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
999
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1000 #define ALIGN_SIZE(len, unit) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1001 ((((len) + (unit) - 1) / (unit)) * (unit))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1002
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1003 /* ALIGN_FOR_TYPE returns the smallest size greater than or equal to LEN
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1004 which is aligned for the given type. This can be used to assure that
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1005 data that follows a block of the returned size is of correct alignment
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1006 for the type (provided that the block itself is correctly aligned for
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1007 this type; memory returned by malloc() is guaranteed to be correctly
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1008 aligned for all types). */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1009
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1010 #define ALIGN_FOR_TYPE(len, type) ALIGN_SIZE (len, ALIGNOF (type))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1011
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1012 /* MAX_ALIGN_SIZE returns the smallest size greater than or equal to LEN
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1013 which guarantees that data following a block of such size is correctly
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1014 aligned for all types (provided that the block itself is so aligned,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1015 which is the case for memory returned by malloc()). */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1016
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1017 #define MAX_ALIGN_SIZE(len) ALIGN_FOR_TYPE (len, max_align_t)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1018
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1019 /* ALIGN_PTR returns the smallest pointer >= PTR which is aligned for
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1020 data of TYPE. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
1021 #define ALIGN_PTR(ptr, type) ((void *) ALIGN_FOR_TYPE ((size_t) (ptr), type))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1022
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1023 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1024
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1025 /* ------------------------ assertions ------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1026
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1027 /* We define assert iff USE_ASSERTIONS or DEBUG_XEMACS is defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1028 Otherwise we define it to be empty. Quantify has shown that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1029 time the assert checks take is measurable so let's not include them
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1030 in production binaries.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1031
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1032 If ASSERTIONS_DONT_ABORT defined, we will continue after assertion
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1033 failures.
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1034
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1035 assert_at_line() is used for asserts inside of inline functions called
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1036 from error-checking macros. If we're not tricky, we just get the file
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1037 and line of the inline function, which is not very useful. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1038
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1039 /* Highly dubious kludge */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1040 /* (thanks, Jamie, I feel better now -- ben) */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1041 MODULE_API void assert_failed (const Ascbyte *, int, const Ascbyte *);
2535
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1042 #define ABORT() (assert_failed (__FILE__, __LINE__, "ABORT()"))
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1043
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1044 #ifdef USE_ASSERTIONS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1045 # define assert(x) ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, #x))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1046 # define assert_with_message(x, msg) \
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1047 ((x) ? (void) 0 : assert_failed (__FILE__, __LINE__, msg))
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1048 # define assert_at_line(x, file, line) \
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
1049 ((x) ? (void) 0 : assert_failed (file, line, #x))
2535
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1050 #elif defined (DEBUG_XEMACS)
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1051 # define assert(x) ((x) ? (void) 0 : (void) ABORT ())
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1052 # define assert_with_message(x, msg) ((x) ? (void) 0 : (void) ABORT ())
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1053 # define assert_at_line(x, file, line) assert (x)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1054 #else
2535
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1055 # define assert(x) ((void) 0)
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1056 # define assert_with_message(x, msg)
4c1f2310451d [xemacs-hg @ 2005-01-31 19:29:47 by ben]
ben
parents: 2532
diff changeset
1057 # define assert_at_line(x, file, line) assert (x)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1058 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1059
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1060 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1061 /** Memory allocation **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1062 /************************************************************************/
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1063
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1064 /* ------------------------ simple memory allocation ------------------- */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1065
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1066 /* Basic memory allocation and freeing functions */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1067 void malloc_warning (const Ascbyte *);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1068 MODULE_API void *xmalloc (Bytecount size) ATTRIBUTE_MALLOC;
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1069 MODULE_API void *xmalloc_and_zero (Bytecount size) ATTRIBUTE_MALLOC;
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1070 MODULE_API void *xrealloc (void *, Bytecount size) ATTRIBUTE_MALLOC;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1071 MODULE_API Chbyte *xstrdup (const Chbyte *) ATTRIBUTE_MALLOC;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1072
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1073 /* Basic free function */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1074
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1075 MODULE_API void xfree_1 (void *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1076 #ifdef ERROR_CHECK_MALLOC
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1077 /* This used to use a temporary variable, which both avoided the multiple
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1078 evaluation and obviated the need for the TYPE argument. But that triggered
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1079 complaints under strict aliasing. #### There should be a better way. */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1080 #define xfree(lvalue, type) do \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1081 { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1082 xfree_1 (lvalue); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1083 VOIDP_CAST (lvalue) = (void *) 0xDEADBEEF; \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1084 } while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1085 #else
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1086 #define xfree(lvalue,type) xfree_1 (lvalue)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1087 #endif /* ERROR_CHECK_MALLOC */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1088
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1089 /* ------------------------ stack allocation -------------------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1090
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1091 /* Allocating excessively large blocks on the stack can cause crashes.
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1092 We provide MALLOC_OR_ALLOCA() below for places where it's likely that
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1093 large amounts will be allocated; it mallocs the block if it's too big.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1094 Unfortunately, that requires a call to unbind_to() at the end of the
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1095 function, and it's not feasible to rewrite all calls to alloca() this
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1096 way.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1097
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1098 Instead, we use the portable C alloca() substitute in alloca.c above a
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1099 certain size. This actually uses malloc(), but checks the current stack
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1100 pointer to see if data from previous alloca() calls needs to be freed.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1101 However, this can lead to large heap sizes -- especially since cleanup
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1102 can only happen in a parent function, and will never happen if (as will
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1103 often be the case) it's the same function in the same place in the code
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1104 that keeps tripping the alloca() limit.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1105
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1106 So we set up a system to periodically force cleanup. Currently we
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1107 do cleanup:
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1108
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1109 -- Only when there's C alloca() data, and then
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1110 -- Every stack alloca() or allocation of Lisp data, every call to
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1111 next_event_internal() [typically near the top of the stack],
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1112 or every 10th funcall
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1113
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1114 This should not be a big penalty because
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1115
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1116 (a) If there are few C alloca() chunks, checking them will be fast
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1117 (b) If not, we've allocated a huge amount of heap space (remember, each
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1118 chunk represents > 256K of heap), and we really want them gone
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1119 */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1120
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1121 /* We use a larger maximum when the choice is alloca() vs. the C alloca()
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1122 substitute than when the choice is vs. malloc(), because in the former
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1123 case, our alternative choice is less palatable because the memory may
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1124 not be freed for awhile. */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1125
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1126 #define MAX_ALLOCA_VS_C_ALLOCA 262144
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1127 #define MAX_ALLOCA_VS_MALLOC 65536
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1128
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1129 #define MAX_FUNCALLS_BETWEEN_ALLOCA_CLEANUP 10
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1130
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1131 extern MODULE_API Bytecount __temp_alloca_size__;
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1132 extern Bytecount funcall_alloca_count;
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1133
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1134 #ifdef ERROR_CHECK_MALLOC
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1135 extern MODULE_API int regex_malloc_disallowed;
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1136 #define REGEX_MALLOC_CHECK() assert (!regex_malloc_disallowed)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1137 #else
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1138 #define REGEX_MALLOC_CHECK() ((void) 0)
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1139 #endif
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1140
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1141 /* Do stack or heap alloca() depending on size.
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1142
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1143 NOTE: The use of a global temporary like this is unsafe if ALLOCA() occurs
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1144 twice anywhere in the same expression; but that seems highly unlikely. The
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1145 alternative is to force all callers to declare a local temporary if the
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1146 expression has side effects -- something easy to forget. */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1147
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1148 #define ALLOCA(size) \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1149 (REGEX_MALLOC_CHECK (), \
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1150 __temp_alloca_size__ = (size), \
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1151 __temp_alloca_size__ > MAX_ALLOCA_VS_C_ALLOCA ? \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1152 xemacs_c_alloca (__temp_alloca_size__) : \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1153 (need_to_check_c_alloca ? xemacs_c_alloca (0) : 0, \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1154 alloca (__temp_alloca_size__)))
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1155
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1156 /* Version of ALLOCA() that is guaranteed to work inside of function calls
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1157 (i.e., we call the C alloca if regular alloca() is broken inside of
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1158 function calls). */
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1159 #ifdef BROKEN_ALLOCA_IN_FUNCTION_CALLS
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1160 #define ALLOCA_FUNCALL_OK(size) xemacs_c_alloca (size)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1161 #else
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1162 #define ALLOCA_FUNCALL_OK(size) ALLOCA (size)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1163 #endif
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1164
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1165 MODULE_API void *xemacs_c_alloca (unsigned int size) ATTRIBUTE_MALLOC;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1166
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1167 MODULE_API int record_unwind_protect_freeing (void *ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1168
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1169 DECLARE_INLINE_HEADER (
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1170 void *
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1171 xmalloc_and_record_unwind (Bytecount size)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1172 )
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1173 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1174 void *ptr = xmalloc (size);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1175 record_unwind_protect_freeing (ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1176 return ptr;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1177 }
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1178
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1179 /* WARNING: If you use this, you must unbind_to() at the end of your
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1180 function! */
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1181
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1182 #define MALLOC_OR_ALLOCA(size) \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1183 (REGEX_MALLOC_CHECK (), \
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1184 __temp_alloca_size__ = (size), \
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1185 __temp_alloca_size__ > MAX_ALLOCA_VS_MALLOC ? \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1186 xmalloc_and_record_unwind (__temp_alloca_size__) : \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1187 (need_to_check_c_alloca ? xemacs_c_alloca (0) : 0, \
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
1188 alloca (__temp_alloca_size__)))
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1189
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1190 /* -------------- convenience functions for memory allocation ------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1191
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1192 #define countof(x) ((int) (sizeof(x)/sizeof((x)[0])))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1193 #define xnew(type) ((type *) xmalloc (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1194 #define xnew_array(type, len) ((type *) xmalloc ((len) * sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1195 #define xnew_and_zero(type) ((type *) xmalloc_and_zero (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1196 #define xzero(lvalue) ((void) memset (&(lvalue), '\0', sizeof (lvalue)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1197 #define xnew_array_and_zero(type, len) ((type *) xmalloc_and_zero ((len) * sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1198
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1199 #define alloca_new(type) ((type *) ALLOCA (sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1200 #define alloca_array(type, len) ((type *) ALLOCA ((len) * sizeof (type)))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1201
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1202 #define alloca_itexts(num) alloca_array (Itext, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1203 #define alloca_ibytes(num) alloca_array (Ibyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1204 #define alloca_extbytes(num) alloca_array (Extbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1205 #define alloca_rawbytes(num) alloca_array (Rawbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1206 #define alloca_binbytes(num) alloca_array (Binbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1207 #define alloca_ascbytes(num) alloca_array (Ascbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1208 #define xmalloc_itexts(num) xnew_array (Itext, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1209 #define xnew_ibytes(num) xnew_array (Ibyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1210 #define xnew_extbytes(num) xnew_array (Extbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1211 #define xnew_rawbytes(num) xnew_array (Rawbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1212 #define xnew_binbytes(num) xnew_array (Binbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1213 #define xnew_ascbytes(num) xnew_array (Ascbyte, num)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1214
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1215 /* Make an alloca'd copy of a Ibyte * */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1216 #define IBYTE_STRING_TO_ALLOCA(p, lval) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1217 do { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1218 Ibyte **_bsta_ = (Ibyte **) &(lval); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1219 const Ibyte *_bsta_2 = (p); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1220 Bytecount _bsta_3 = qxestrlen (_bsta_2); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1221 *_bsta_ = alloca_ibytes (1 + _bsta_3); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1222 memcpy (*_bsta_, _bsta_2, 1 + _bsta_3); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1223 } while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1224
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1225 /* ----------------- convenience functions for reallocation --------------- */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1226
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1227 #define XREALLOC_ARRAY(ptr, type, len) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1228 ((void) (ptr = (type *) xrealloc (ptr, (len) * sizeof (type))))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1229
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1230 /* also generally useful if you want to avoid arbitrary size limits
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1231 but don't need a full dynamic array. Assumes that BASEVAR points
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1232 to a malloced array of TYPE objects (or possibly a NULL pointer,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1233 if SIZEVAR is 0), with the total size stored in SIZEVAR. This
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1234 macro will realloc BASEVAR as necessary so that it can hold at
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1235 least NEEDED_SIZE objects. The reallocing is done by doubling,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1236 which ensures constant amortized time per element. */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1237 #define DO_REALLOC(basevar, sizevar, needed_size, type) do { \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1238 Bytecount do_realloc_needed_size = (needed_size); \
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
1239 REGEX_MALLOC_CHECK (); \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1240 if ((sizevar) < do_realloc_needed_size) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1241 { \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1242 if ((sizevar) < 32) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1243 (sizevar) = 32; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1244 while ((sizevar) < do_realloc_needed_size) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1245 (sizevar) *= 2; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1246 XREALLOC_ARRAY (basevar, type, (sizevar)); \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1247 } \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1248 } while (0)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1249
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1250 /* ------------------------ dynamic arrays ------------------- */
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1251
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1252 #ifdef ERROR_CHECK_STRUCTURES
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1253 #define Dynarr_declare(type) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1254 type *base; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1255 int locked; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1256 int elsize; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1257 int cur; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1258 int largest; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1259 int max
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1260 #else
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1261 #define Dynarr_declare(type) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1262 type *base; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1263 int elsize; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1264 int cur; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1265 int largest; \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1266 int max
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1267 #endif /* ERROR_CHECK_STRUCTURES */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1268
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1269 typedef struct dynarr
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1270 {
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1271 Dynarr_declare (void);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1272 } Dynarr;
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1273
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1274 MODULE_API void *Dynarr_newf (int elsize);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1275 MODULE_API void Dynarr_resize (void *dy, Elemcount size);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1276 MODULE_API void Dynarr_insert_many (void *d, const void *el, int len, int start);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1277 MODULE_API void Dynarr_delete_many (void *d, int start, int len);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1278 MODULE_API void Dynarr_free (void *d);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1279
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1280 #define Dynarr_new(type) ((type##_dynarr *) Dynarr_newf (sizeof (type)))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1281 #define Dynarr_new2(dynarr_type, type) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1282 ((dynarr_type *) Dynarr_newf (sizeof (type)))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1283 #define Dynarr_at(d, pos) ((d)->base[pos])
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1284 #define Dynarr_atp(d, pos) (&Dynarr_at (d, pos))
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1285 #define Dynarr_begin(d) Dynarr_atp (d, 0)
819
6504113e7c2d [xemacs-hg @ 2002-04-25 18:03:23 by andyp]
andyp
parents: 814
diff changeset
1286 #define Dynarr_end(d) Dynarr_atp (d, Dynarr_length (d) - 1)
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1287 #define Dynarr_sizeof(d) ((d)->cur * (d)->elsize)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1288
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
1289 #ifdef ERROR_CHECK_STRUCTURES
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1290 DECLARE_INLINE_HEADER (
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1291 Dynarr *
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1292 Dynarr_verify_1 (void *d, const Ascbyte *file, int line)
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1293 )
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1294 {
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1295 Dynarr *dy = (Dynarr *) d;
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1296 assert_at_line (dy->cur >= 0 && dy->cur <= dy->largest &&
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1297 dy->largest <= dy->max, file, line);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1298 return dy;
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1299 }
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1300
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1301 DECLARE_INLINE_HEADER (
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1302 Dynarr *
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1303 Dynarr_verify_mod_1 (void *d, const Ascbyte *file, int line)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1304 )
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1305 {
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1306 Dynarr *dy = (Dynarr *) d;
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1307 assert_at_line (!dy->locked, file, line);
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1308 assert_at_line (dy->cur >= 0 && dy->cur <= dy->largest &&
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1309 dy->largest <= dy->max, file, line);
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1310 return dy;
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1311 }
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1312
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1313 #define Dynarr_verify(d) Dynarr_verify_1 (d, __FILE__, __LINE__)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1314 #define Dynarr_verify_mod(d) Dynarr_verify_mod_1 (d, __FILE__, __LINE__)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1315 #define Dynarr_lock(d) (Dynarr_verify_mod (d)->locked = 1)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1316 #define Dynarr_unlock(d) ((d)->locked = 0)
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1317 #else
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1318 #define Dynarr_verify(d) (d)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1319 #define Dynarr_verify_mod(d) (d)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1320 #define Dynarr_lock(d)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1321 #define Dynarr_unlock(d)
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
1322 #endif /* ERROR_CHECK_STRUCTURES */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1323
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1324 #define Dynarr_length(d) (Dynarr_verify (d)->cur)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1325 #define Dynarr_largest(d) (Dynarr_verify (d)->largest)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1326 #define Dynarr_reset(d) (Dynarr_verify_mod (d)->cur = 0)
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1327 #define Dynarr_add_many(d, el, len) Dynarr_insert_many (d, el, len, (d)->cur)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1328 #define Dynarr_insert_many_at_start(d, el, len) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1329 Dynarr_insert_many (d, el, len, 0)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1330 #define Dynarr_add_literal_string(d, s) Dynarr_add_many (d, s, sizeof (s) - 1)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1331 #define Dynarr_add_lisp_string(d, s, codesys) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1332 do { \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1333 Lisp_Object dyna_ls_s = (s); \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1334 Lisp_Object dyna_ls_cs = (codesys); \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1335 Extbyte *dyna_ls_eb; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1336 Bytecount dyna_ls_bc; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1337 \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1338 LISP_STRING_TO_SIZED_EXTERNAL (dyna_ls_s, dyna_ls_eb, \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1339 dyna_ls_bc, dyna_ls_cs); \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1340 Dynarr_add_many (d, dyna_ls_eb, dyna_ls_bc); \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1341 } while (0)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1342
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1343 #define Dynarr_add(d, el) ( \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1344 Dynarr_verify_mod (d)->cur >= (d)->max ? Dynarr_resize ((d), (d)->cur+1) : \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1345 (void) 0, \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1346 ((d)->base)[(d)->cur++] = (el), \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1347 (d)->cur > (d)->largest ? (d)->largest = (d)->cur : (int) 0)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1348
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1349 /* The following defines will get you into real trouble if you aren't
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1350 careful. But they can save a lot of execution time when used wisely. */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1351 #define Dynarr_increment(d) (Dynarr_verify_mod (d)->cur++)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1352 #define Dynarr_set_size(d, n) (Dynarr_verify_mod (d)->cur = n)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1353
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1354 #define Dynarr_pop(d) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1355 (assert ((d)->cur > 0), Dynarr_verify_mod (d)->cur--, \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1356 Dynarr_at (d, (d)->cur))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1357 #define Dynarr_delete(d, i) Dynarr_delete_many (d, i, 1)
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1358 #define Dynarr_delete_by_pointer(d, p) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1359 Dynarr_delete_many (d, (p) - ((d)->base), 1)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1360
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1361 #define Dynarr_delete_object(d, el) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1362 do \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1363 { \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1364 REGISTER int i; \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1365 for (i = Dynarr_length (d) - 1; i >= 0; i--) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1366 { \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1367 if (el == Dynarr_at (d, i)) \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1368 Dynarr_delete_many (d, i, 1); \
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1369 } \
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
1370 } while (0)
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
1371
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1372 #ifdef MEMORY_USAGE_STATS
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1373 struct overhead_stats;
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1374 Bytecount Dynarr_memory_usage (void *d, struct overhead_stats *stats);
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1375 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1376
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1377 void *stack_like_malloc (Bytecount size);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1378 void stack_like_free (void *val);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1379
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1380 /************************************************************************/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1381 /** Definitions of more complex types **/
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1382 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1383
647
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
1384 /* Note that the simplest typedefs are near the top of this file. */
b39c14581166 [xemacs-hg @ 2001-08-13 04:45:47 by ben]
ben
parents: 617
diff changeset
1385
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1386 /* We put typedefs here so that prototype declarations don't choke.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1387 Note that we don't actually declare the structures here (except
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1388 maybe for simple structures like Dynarrs); that keeps them private
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1389 to the routines that actually use them. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1390
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1391 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1392 /* Error_Behavior typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1393 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1394
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
1395 #ifndef ERROR_CHECK_TYPES
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1396
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1397 typedef enum error_behavior
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1398 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1399 ERROR_ME,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1400 ERROR_ME_NOT,
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1401 ERROR_ME_WARN,
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1402 ERROR_ME_DEBUG_WARN
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1403 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1404
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1405 #define ERRB_EQ(a, b) ((a) == (b))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1406
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1407 #else
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1408
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1409 /* By defining it like this, we provide strict type-checking
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1410 for code that lazily uses ints. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1411
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1412 typedef struct _error_behavior_struct_
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1413 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1414 int really_unlikely_name_to_have_accidentally_in_a_non_errb_structure;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1415 } Error_Behavior;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1416
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1417 extern Error_Behavior ERROR_ME;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1418 extern Error_Behavior ERROR_ME_NOT;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1419 extern Error_Behavior ERROR_ME_WARN;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
1420 extern Error_Behavior ERROR_ME_DEBUG_WARN;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1421
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1422 #define ERRB_EQ(a, b) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1423 ((a).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure == \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1424 (b).really_unlikely_name_to_have_accidentally_in_a_non_errb_structure)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1425
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1426 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1427
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1428 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1429 /* Empty structures and typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1430 /* ------------------------------- */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1431
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1432 struct buffer; /* "buffer.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1433 struct console; /* "console.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1434 struct device; /* "device.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1435 struct extent_fragment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1436 struct extent;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1437 struct frame; /* "frame.h" */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1438 struct window; /* "window.h" */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1439 struct utimbuf; /* "systime.h" or <utime.h> */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1440 struct display_line;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1441 struct display_glyph_area;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1442 struct display_box;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1443 struct redisplay_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1444 struct window_mirror;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1445 struct scrollbar_instance;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1446 struct font_metric_info;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1447 struct face_cachel;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1448 struct console_type_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1449
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1450 /* This is shared by process.h, events.h and others in future.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1451 See events.h for description */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1452 typedef unsigned int USID;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1453 typedef int face_index;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1454 typedef int glyph_index;
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1706
diff changeset
1455 typedef struct lstream Lstream; /* lstream.h */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1456 typedef struct extent *EXTENT; /* extents-impl.h */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1457 typedef struct Lisp_Event Lisp_Event; /* "events.h" */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1458 typedef struct Lisp_Face Lisp_Face; /* "faces-impl.h" */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1459 typedef struct Lisp_Process Lisp_Process; /* "procimpl.h" */
872
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1460 typedef struct Lisp_Color_Instance Lisp_Color_Instance; /* objects-impl.h */
79c6ff3eef26 [xemacs-hg @ 2002-06-20 21:18:01 by ben]
ben
parents: 867
diff changeset
1461 typedef struct Lisp_Font_Instance Lisp_Font_Instance; /* objects-impl.h */
1726
a8d8f419b459 [xemacs-hg @ 2003-09-30 15:26:34 by james]
james
parents: 1706
diff changeset
1462 typedef struct Lisp_Image_Instance Lisp_Image_Instance; /* glyphs.h */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1463 typedef struct Lisp_Gui_Item Lisp_Gui_Item;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1464
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1465 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1466 /* Dynarr typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1467 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1468
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1469 /* Dynarr typedefs -- basic types first */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1470
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1471 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1472 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1473 Dynarr_declare (Ibyte);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1474 } Ibyte_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1475
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1476 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1477 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1478 Dynarr_declare (Extbyte);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1479 } Extbyte_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1480
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1481 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1482 {
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1483 Dynarr_declare (Ichar);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
1484 } Ichar_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1485
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1486 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1487 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1488 Dynarr_declare (char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1489 } char_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1490
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1491 typedef struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1492 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1493 Dynarr_declare (char *);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1494 } char_ptr_dynarr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1495
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1496 typedef unsigned char unsigned_char;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1497 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1498 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1499 Dynarr_declare (unsigned char);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1500 } unsigned_char_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1501
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1502 typedef unsigned long unsigned_long;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1503 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1504 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1505 Dynarr_declare (unsigned long);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1506 } unsigned_long_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1507
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1508 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1509 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1510 Dynarr_declare (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1511 } int_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1512
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1513 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1514 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1515 Dynarr_declare (Charbpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1516 } Charbpos_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1517
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1518 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1519 {
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1520 Dynarr_declare (Bytebpos);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1521 } Bytebpos_dynarr;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1522
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1523 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1524 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1525 Dynarr_declare (Charcount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1526 } Charcount_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1527
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1528 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1529 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1530 Dynarr_declare (Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1531 } Bytecount_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1532
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1533 /* Dynarr typedefs -- more complex types */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1534
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1535 typedef struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1536 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1537 Dynarr_declare (struct face_cachel);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1538 } face_cachel_dynarr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1539
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1540 typedef struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1541 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1542 Dynarr_declare (struct glyph_cachel);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1543 } glyph_cachel_dynarr;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1544
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1545 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1546 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1547 Dynarr_declare (struct console_type_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1548 } console_type_entry_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1549
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1550 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1551 /* enum typedefs */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1552 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1553
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1554 enum run_hooks_condition
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1555 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1556 RUN_HOOKS_TO_COMPLETION,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1557 RUN_HOOKS_UNTIL_SUCCESS,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1558 RUN_HOOKS_UNTIL_FAILURE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1559 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1560
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1561 #ifdef HAVE_TOOLBARS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1562 enum toolbar_pos
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1563 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1564 TOP_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1565 BOTTOM_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1566 LEFT_TOOLBAR,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1567 RIGHT_TOOLBAR
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1568 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1569 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1570
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1571 enum edge_style
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1572 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1573 EDGE_ETCHED_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1574 EDGE_ETCHED_OUT,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1575 EDGE_BEVEL_IN,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1576 EDGE_BEVEL_OUT
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1577 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1578
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1579 enum munge_me_out_the_door
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1580 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1581 MUNGE_ME_FUNCTION_KEY,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1582 MUNGE_ME_KEY_TRANSLATION
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1583 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1584
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1585 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1586 /* misc */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1587 /* ------------------------------- */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1588
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1589 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1590
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1591 /* This structure is used to keep statistics on the amount of memory
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1592 in use.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1593
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1594 WAS_REQUESTED stores the actual amount of memory that was requested
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1595 of the allocation function. The *_OVERHEAD fields store the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1596 additional amount of memory that was grabbed by the functions to
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1597 facilitate allocation, reallocation, etc. MALLOC_OVERHEAD is for
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1598 memory allocated with malloc(); DYNARR_OVERHEAD is for dynamic
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1599 arrays; GAP_OVERHEAD is for gap arrays. Note that for (e.g.)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1600 dynamic arrays, there is both MALLOC_OVERHEAD and DYNARR_OVERHEAD
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1601 memory: The dynamic array allocates memory above and beyond what
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1602 was asked of it, and when it in turns allocates memory using
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1603 malloc(), malloc() allocates memory beyond what it was asked
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1604 to allocate.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1605
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1606 Functions that accept a structure of this sort do not initialize
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1607 the fields to 0, and add any existing values to whatever was there
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1608 before; this way, you can get a cumulative effect. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1609
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1610 struct overhead_stats
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1611 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1612 int was_requested;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1613 int malloc_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1614 int dynarr_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1615 int gap_overhead;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1616 };
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1617
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1618 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1619
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1620
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1621 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1622 /* Definition of Lisp_Object data type */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1623 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1624
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1625 /* Define the fundamental Lisp data structures */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1626
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1627 /* This is the set of Lisp data types */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1629 enum Lisp_Type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1630 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1631 Lisp_Type_Record,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1632 Lisp_Type_Int_Even,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1633 Lisp_Type_Char,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1634 Lisp_Type_Int_Odd
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1635 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1636
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1637 #define POINTER_TYPE_P(type) ((type) == Lisp_Type_Record)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1638
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1639 /* Overridden by m/next.h */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1640 #ifndef ASSERT_VALID_POINTER
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1641 # define ASSERT_VALID_POINTER(pnt) (assert ((((EMACS_UINT) pnt) & 3) == 0))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1642 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1643
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1644 #define GCMARKBITS 0
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1645 #define GCTYPEBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1646 #define GCBITS 2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1647 #define INT_GCBITS 1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1648
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1649 #define INT_VALBITS (BITS_PER_EMACS_INT - INT_GCBITS)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1650 #define VALBITS (BITS_PER_EMACS_INT - GCBITS)
542
2e265ae71eed [xemacs-hg @ 2001-05-17 09:52:16 by yoshiki]
yoshiki
parents: 528
diff changeset
1651 #define EMACS_INT_MAX ((EMACS_INT) ((1UL << (INT_VALBITS - 1)) -1UL))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1652 #define EMACS_INT_MIN (-(EMACS_INT_MAX) - 1)
802
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1653 /* WARNING: evaluates its arg twice. */
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1654 #define NUMBER_FITS_IN_AN_EMACS_INT(num) \
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
1655 ((num) <= EMACS_INT_MAX && (num) >= EMACS_INT_MIN)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1656
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1657 #ifdef USE_UNION_TYPE
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1658 # include "lisp-union.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1659 #else /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1660 # include "lisp-disunion.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1661 #endif /* !USE_UNION_TYPE */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1663 #define XPNTR(x) ((void *) XPNTRVAL(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1665 /* WARNING WARNING WARNING. You must ensure on your own that proper
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1666 GC protection is provided for the elements in this array. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1667 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1668 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1669 Dynarr_declare (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1670 } Lisp_Object_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1671
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
1672 typedef struct
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
1673 {
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
1674 Dynarr_declare (Lisp_Object *);
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
1675 } Lisp_Object_ptr_dynarr;
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
1676
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1677 /* Close your eyes now lest you vomit or spontaneously combust ... */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1678
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1679 #define HACKEQ_UNSAFE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1680 (EQ (obj1, obj2) || (!POINTER_TYPE_P (XTYPE (obj1)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1681 && !POINTER_TYPE_P (XTYPE (obj2)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1682 && XCHAR_OR_INT (obj1) == XCHAR_OR_INT (obj2)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1683
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1684 #ifdef DEBUG_XEMACS
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1685 extern MODULE_API int debug_issue_ebola_notices;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1686 MODULE_API int eq_with_ebola_notice (Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1687 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1688 (debug_issue_ebola_notices ? eq_with_ebola_notice (obj1, obj2) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1689 : EQ (obj1, obj2))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1690 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1691 #define EQ_WITH_EBOLA_NOTICE(obj1, obj2) EQ (obj1, obj2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1692 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1693
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1694 /* OK, you can open them again */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1695
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1696 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1697
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1698 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1699 /** Definitions of basic Lisp objects **/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1700 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1701
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1702 #include "lrecord.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1703
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
1704 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
1705
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1706 /*------------------------------ unbound -------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1707
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1708 /* Qunbound is a special Lisp_Object (actually of type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1709 symbol-value-forward), that can never be visible to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1710 the Lisp caller and thus can be used in the C code
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1711 to mean "no such value". */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1712
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1713 #define UNBOUNDP(val) EQ (val, Qunbound)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1714
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1715 /* Evaluate expr, return it if it's not Qunbound. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1716 #define RETURN_IF_NOT_UNBOUND(expr) do \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1717 { \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1718 Lisp_Object ret_nunb_val = (expr); \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1719 if (!UNBOUNDP (ret_nunb_val)) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1720 RETURN_SANS_WARNINGS ret_nunb_val; \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1721 } while (0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
1722
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1723 /*------------------------------- cons ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1724
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1725 /* In a cons, the markbit of the car is the gc mark bit */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1726
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1727 struct Lisp_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1728 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1729 struct lrecord_header lheader;
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1730 Lisp_Object car_, cdr_;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1731 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1732 typedef struct Lisp_Cons Lisp_Cons;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1733
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1734 #if 0 /* FSFmacs */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1735 /* Like a cons, but records info on where the text lives that it was read from */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1736 /* This is not really in use now */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1737
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1738 struct Lisp_Buffer_Cons
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1739 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1740 Lisp_Object car, cdr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1741 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
1742 int charbpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1743 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1744 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1745
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1746 DECLARE_MODULE_API_LRECORD (cons, Lisp_Cons);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1747 #define XCONS(x) XRECORD (x, cons, Lisp_Cons)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
1748 #define wrap_cons(p) wrap_record (p, cons)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1749 #define CONSP(x) RECORDP (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1750 #define CHECK_CONS(x) CHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1751 #define CONCHECK_CONS(x) CONCHECK_RECORD (x, cons)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1752
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
1753 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
1754 #define CONS_MARKED_P(c) MARKED_P (&((c)->lheader))
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
1755 #define MARK_CONS(c) MARK (&((c)->lheader))
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
1756 #else /* not MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1757 #define CONS_MARKED_P(c) MARKED_RECORD_HEADER_P(&((c)->lheader))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1758 #define MARK_CONS(c) MARK_RECORD_HEADER (&((c)->lheader))
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
1759 #endif /* not MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1760
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
1761 extern MODULE_API Lisp_Object Qnil;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1762
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1763 #define NILP(x) EQ (x, Qnil)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1764 #define cons_car(a) ((a)->car_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1765 #define cons_cdr(a) ((a)->cdr_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1766 #define XCAR(a) (XCONS (a)->car_)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1767 #define XCDR(a) (XCONS (a)->cdr_)
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1768 #define XCADR(a) (XCAR (XCDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1769 #define XCDDR(a) (XCDR (XCDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1770 #define XCADDR(a) (XCAR (XCDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1771 #define XCDDDR(a) (XCDR (XCDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1772 #define XCADDDR(a) (XCAR (XCDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1773 #define XCDDDDR(a) (XCDR (XCDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1774 #define XCADDDDR(a) (XCAR (XCDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1775 #define XCDDDDDR(a) (XCDR (XCDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1776 #define XCADDDDDR(a) (XCAR (XCDDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1777 #define XCDDDDDDR(a) (XCDR (XCDDDDDR (a)))
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1778 #define X1ST(a) XCAR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1779 #define X2ND(a) XCADR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1780 #define X3RD(a) XCADDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1781 #define X4TH(a) XCADDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1782 #define X5TH(a) XCADDDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1783 #define X6TH(a) XCADDDDDR (a)
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
1784
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1785 #define XSETCAR(a, b) (XCONS (a)->car_ = (b))
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
1786 #define XSETCDR(a, b) (XCONS (a)->cdr_ = (b))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1787 #define LISTP(x) (CONSP(x) || NILP(x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1788
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1789 #define CHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1790 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1791 dead_wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1792 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1793
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1794 #define CONCHECK_LIST(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1795 if (!LISTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1796 x = wrong_type_argument (Qlistp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1797 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1798
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1799 /*---------------------- list traversal macros -------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1800
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1801 /* Note: These macros are for traversing through a list in some format,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1802 and executing code that you specify on each member of the list.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1803
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1804 There are two kinds of macros, those requiring surrounding braces, and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1805 those not requiring this. Which type of macro will be indicated.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1806 The general format for using a brace-requiring macro is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1807
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1808 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1809 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1810 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1811 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1812
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1813 or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1814
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1815 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1816 LIST_LOOP_3 (elt, list, tail)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1817 {
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1818 execute_code_here;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1819 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1820 }
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1821
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1822 You can put variable declarations between the brace and beginning of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1823 macro, but NOTHING ELSE.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1824
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1825 The brace-requiring macros typically declare themselves any arguments
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1826 that are initialized and iterated by the macros. If for some reason
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1827 you need to declare these arguments yourself (e.g. to do something on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1828 them before the iteration starts, use the _NO_DECLARE versions of the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1829 macros.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1830 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1831
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1832 /* There are two basic kinds of macros: those that handle "internal" lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1833 that are known to be correctly structured (i.e. first element is a cons
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1834 or nil, and the car of each cons is also a cons or nil, and there are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1835 no circularities), and those that handle "external" lists, where the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1836 list may have any sort of invalid formation. This is reflected in
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1837 the names: those with "EXTERNAL_" work with external lists, and those
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1838 without this prefix work with internal lists. The internal-list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1839 macros will hit an assertion failure if the structure is ill-formed;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1840 the external-list macros will signal an error in this case, either a
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1841 malformed-list error or a circular-list error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1842 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1843
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1844 /* LIST_LOOP is a simple, old-fashioned macro. It doesn't require brace
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1845 surrounding, and iterates through a list, which may or may not known to
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1846 be syntactically correct. It accepts two args, TAIL (set progressively
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1847 to each cons starting with the first), and LIST, the list to iterate
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1848 over. TAIL needs to be defined by the caller.
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1849
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1850 In each iteration, you can retrieve the current list item using XCAR
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1851 (tail), or destructively modify the list using XSETCAR (tail,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1852 ...). */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1853
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1854 #define LIST_LOOP(tail, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1855 for (tail = list; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1856 !NILP (tail); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1857 tail = XCDR (tail))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1858
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1859 /* The following macros are the "core" macros for list traversal.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1860
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1861 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1862
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1863 LIST_LOOP_2 and EXTERNAL_LIST_LOOP_2 are the standard, most-often used
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1864 macros. They take two arguments, an element variable ELT and the list
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1865 LIST. ELT is automatically declared, and set to each element in turn
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1866 from LIST.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1867
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1868 LIST_LOOP_3 and EXTERNAL_LIST_LOOP_3 are the same, but they have a third
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1869 argument TAIL, another automatically-declared variable. At each iteration,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1870 this one points to the cons cell for which ELT is the car.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1871
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1872 EXTERNAL_LIST_LOOP_4 is like EXTERNAL_LIST_LOOP_3 but takes an additional
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1873 LEN argument, again automatically declared, which counts the number of
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1874 iterations gone by. It is 0 during the first iteration.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1875
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1876 EXTERNAL_LIST_LOOP_4_NO_DECLARE is like EXTERNAL_LIST_LOOP_4 but none
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1877 of the variables are automatically declared, and so you need to declare
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1878 them yourself. (ELT and TAIL are Lisp_Objects, and LEN is an EMACS_INT.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1879 */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1880
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1881 #define LIST_LOOP_2(elt, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1882 LIST_LOOP_3(elt, list, unused_tail_##elt)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1883
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1884 #define LIST_LOOP_3(elt, list, tail) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1885 Lisp_Object elt, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1886 for (tail = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1887 NILP (tail) ? \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1888 0 : (elt = XCAR (tail), 1); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1889 tail = XCDR (tail))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1890
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1891 /* The following macros are for traversing lisp lists.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1892 Signal an error if LIST is not properly acyclic and nil-terminated.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1893
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1894 Use tortoise/hare algorithm to check for cycles, but only if it
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1895 looks like the list is getting too long. Not only is the hare
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1896 faster than the tortoise; it even gets a head start! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1898 /* Optimized and safe macros for looping over external lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1899 #define CIRCULAR_LIST_SUSPICION_LENGTH 1024
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1900
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1901 #define EXTERNAL_LIST_LOOP_1(list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1902 Lisp_Object ELL1_elt, ELL1_hare, ELL1_tortoise; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1903 EMACS_INT ELL1_len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1904 PRIVATE_EXTERNAL_LIST_LOOP_6 (ELL1_elt, list, ELL1_len, ELL1_hare, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1905 ELL1_tortoise, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1906
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1907 #define EXTERNAL_LIST_LOOP_2(elt, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1908 Lisp_Object elt, hare_##elt, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1909 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1910 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1911 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1912
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1913
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1914 #define GC_EXTERNAL_LIST_LOOP_2(elt, list) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1915 do { \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1916 XGCDECL3 (elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1917 Lisp_Object elt, hare_##elt, tortoise_##elt; \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1918 EMACS_INT len_##elt; \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1919 XGCPRO3 (elt, elt, hare_##elt, tortoise_##elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1920 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, hare_##elt, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1921 tortoise_##elt, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1922 CIRCULAR_LIST_SUSPICION_LENGTH)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1923
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1924 #define END_GC_EXTERNAL_LIST_LOOP(elt) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1925 XUNGCPRO (elt); \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1926 } \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1927 while (0)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
1928
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1929 #define EXTERNAL_LIST_LOOP_3(elt, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1930 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1931 EMACS_INT len_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1932 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len_##elt, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1933 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1934
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1935 #define EXTERNAL_LIST_LOOP_4_NO_DECLARE(elt, list, tail, len) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1936 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1937 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1938 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1939
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1940 #define EXTERNAL_LIST_LOOP_4(elt, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1941 Lisp_Object elt, tail, tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1942 EMACS_INT len; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1943 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, tail, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1944 tortoise_##elt, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1945
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1946
444
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1947 #define PRIVATE_EXTERNAL_LIST_LOOP_6(elt, list, len, hare, \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1948 tortoise, suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1949 for (tortoise = hare = list, len = 0; \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1950 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1951 (CONSP (hare) ? ((elt = XCAR (hare)), 1) : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1952 (NILP (hare) ? 0 : \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1953 (signal_malformed_list_error (list), 0))); \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1954 \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1955 hare = XCDR (hare), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1956 (void) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1957 ((++len > suspicion_length) \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1958 && \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1959 ((((len & 1) != 0) && (tortoise = XCDR (tortoise), 0)), \
576fb035e263 Import from CVS: tag r21-2-37
cvs
parents: 442
diff changeset
1960 (EQ (hare, tortoise) && (signal_circular_list_error (list), 0)))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
1961
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1962 /* GET_LIST_LENGTH and GET_EXTERNAL_LIST_LENGTH:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1963
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1964 These two macros return the length of LIST (either an internal or external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1965 list, according to which macro is used), stored into LEN (which must
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1966 be declared by the caller). Circularities are trapped in external lists
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1967 (and cause errors). Neither macro need be declared inside brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1968
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1969 #define GET_LIST_LENGTH(list, len) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1970 Lisp_Object GLL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1971 for (GLL_tail = list, len = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1972 !NILP (GLL_tail); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1973 GLL_tail = XCDR (GLL_tail), ++len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1974 DO_NOTHING; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1975 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1976
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1977 #define GET_EXTERNAL_LIST_LENGTH(list, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1978 do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1979 Lisp_Object GELL_elt, GELL_tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1980 EXTERNAL_LIST_LOOP_4_NO_DECLARE (GELL_elt, list, GELL_tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1981 ; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1982 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1983
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1984 /* For a list that's known to be in valid list format, where we may
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1985 be deleting the current element out of the list --
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2421
diff changeset
1986 will ABORT() if the list is not in valid format */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1987 #define LIST_LOOP_DELETING(consvar, nextconsvar, list) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1988 for (consvar = list; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1989 !NILP (consvar) ? (nextconsvar = XCDR (consvar), 1) :0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1990 consvar = nextconsvar)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1991
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1992 /* LIST_LOOP_DELETE_IF and EXTERNAL_LIST_LOOP_DELETE_IF:
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1993
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1994 These two macros delete all elements of LIST (either an internal or
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1995 external list, according to which macro is used) satisfying
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1996 CONDITION, a C expression referring to variable ELT. ELT is
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1997 automatically declared. Circularities are trapped in external
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1998 lists (and cause errors). Neither macro need be declared inside
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
1999 brackets. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2000
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2001 #define LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2002 /* Do not use ##list when creating new variables because \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2003 that may not be just a variable name. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2004 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2005 LIST_LOOP_3 (elt, list, tail_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2006 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2007 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2008 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2009 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2010 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2011 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2012 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2013 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2014 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2015 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2016 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2017 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2018
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2019 #define EXTERNAL_LIST_LOOP_DELETE_IF(elt, list, condition) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2020 Lisp_Object prev_tail_##elt = Qnil; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2021 EXTERNAL_LIST_LOOP_4 (elt, list, tail_##elt, len_##elt) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2022 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2023 if (condition) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2024 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2025 if (NILP (prev_tail_##elt)) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2026 list = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2027 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2028 XCDR (prev_tail_##elt) = XCDR (tail_##elt); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2029 /* Keep tortoise from ever passing hare. */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2030 len_##elt = 0; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2031 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2032 else \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2033 prev_tail_##elt = tail_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2034 } \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2035 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2036
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2037
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2038 /* Macros for looping over internal alists.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2039
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2040 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2041
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2042 ALIST_LOOP_3 loops over an alist, at each iteration setting CAR and CDR
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2043 to the car and cdr of the acons. CAR and CDR are automatically
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2044 declared.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2045
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2046 ALIST_LOOP_4 is similar to ALIST_LOOP_3 but contains an additional
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2047 variable ACONS at the beginning for access to the acons itself.All of
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2048 the variables ACONS, CAR and CDR are automatically declared.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2049 */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2050
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2051 #define ALIST_LOOP_3(car, cdr, alist) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2052 Lisp_Object _al3_acons_##car, car, cdr, _al3_tail_##car; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2053 for (_al3_tail_##car = alist; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2054 NILP (_al3_tail_##car) ? \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2055 0 : (_al3_acons_##car = XCAR (_al3_tail_##car), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2056 car = XCAR (_al3_acons_##car), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2057 cdr = XCDR (_al3_acons_##car), 1); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2058 _al3_tail_##car = XCDR (_al3_tail_##car))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2059
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2060 #define ALIST_LOOP_4(acons, car, cdr, list) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2061 Lisp_Object acons, car, cdr, _al4_tail_##car; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2062 for (_al4_tail_##car = list; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2063 NILP (_al4_tail_##car) ? \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2064 0 : (elt = XCAR (_al4_tail_##car), car = XCAR (elt), \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2065 cdr = XCDR (elt), 1); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2066 _al4_tail_##car = XCDR (tail))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2067
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2068 /* Macros for looping over external alists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2069
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2070 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2071
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2072 EXTERNAL_ALIST_LOOP_4 is similar to EXTERNAL_LIST_LOOP_2, but it
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2073 assumes the elements are aconses (the elements in an alist) and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2074 sets two additional argument variables ELT_CAR and ELT_CDR to the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2075 car and cdr of the acons. All of the variables ELT, ELT_CAR and
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2076 ELT_CDR are automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2077
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2078 EXTERNAL_ALIST_LOOP_5 adds a TAIL argument to EXTERNAL_ALIST_LOOP_4,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2079 just like EXTERNAL_LIST_LOOP_3 does, and again TAIL is automatically
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2080 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2081
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2082 EXTERNAL_ALIST_LOOP_6 adds a LEN argument to EXTERNAL_ALIST_LOOP_5,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2083 just like EXTERNAL_LIST_LOOP_4 does, and again LEN is automatically
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2084 declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2085
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2086 EXTERNAL_ALIST_LOOP_6_NO_DECLARE does not declare any of its arguments,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2087 just like EXTERNAL_LIST_LOOP_4_NO_DECLARE, and so these must be declared
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2088 manually.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2089 */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2090
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2091 /* Optimized and safe macros for looping over external alists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2092 #define EXTERNAL_ALIST_LOOP_4(elt, elt_car, elt_cdr, list) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2093 Lisp_Object elt, elt_car, elt_cdr; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2094 Lisp_Object hare_##elt, tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2095 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2096 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2097 len_##elt, hare_##elt, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2098 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2099
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2100 #define EXTERNAL_ALIST_LOOP_5(elt, elt_car, elt_cdr, list, tail) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2101 Lisp_Object elt, elt_car, elt_cdr, tail; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2102 Lisp_Object tortoise_##elt; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2103 EMACS_INT len_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2104 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2105 len_##elt, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2106 CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2107
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2108 #define EXTERNAL_ALIST_LOOP_6(elt, elt_car, elt_cdr, list, tail, len) \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2109 Lisp_Object elt, elt_car, elt_cdr, tail; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2110 EMACS_INT len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2111 Lisp_Object tortoise_##elt; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2112 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2113 len, tail, tortoise_##elt, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2114 CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2115
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2116 #define EXTERNAL_ALIST_LOOP_6_NO_DECLARE(elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2117 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2118 Lisp_Object tortoise_##elt; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2119 PRIVATE_EXTERNAL_ALIST_LOOP_8 (elt, elt_car, elt_cdr, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2120 len, tail, tortoise_##elt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2121 CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2122
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2123
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2124 #define PRIVATE_EXTERNAL_ALIST_LOOP_8(elt, elt_car, elt_cdr, list, len, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2125 hare, tortoise, suspicion_length) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2126 PRIVATE_EXTERNAL_LIST_LOOP_6 (elt, list, len, hare, tortoise, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2127 suspicion_length) \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2128 if (CONSP (elt) ? (elt_car = XCAR (elt), elt_cdr = XCDR (elt), 0) :1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2129 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2130 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2131
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2132 /* Macros for looping over external property lists.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2133
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2134 *** ALL OF THESE MACROS MUST BE DECLARED INSIDE BRACES -- SEE ABOVE. ***
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2135
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2136 EXTERNAL_PROPERTY_LIST_LOOP_3 maps over an external list assumed to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2137 be a property list, consisting of alternating pairs of keys
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2138 (typically symbols or keywords) and values. Each iteration
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2139 processes one such pair out of LIST, assigning the two elements to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2140 KEY and VALUE respectively. Malformed lists and circularities are
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2141 trapped as usual, and in addition, property lists with an odd number
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2142 of elements also signal an error.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2143
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2144 EXTERNAL_PROPERTY_LIST_LOOP_4 adds a TAIL argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2145 EXTERNAL_PROPERTY_LIST_LOOP_3, just like EXTERNAL_LIST_LOOP_3 does,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2146 and again TAIL is automatically declared.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2147
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2148 EXTERNAL_PROPERTY_LIST_LOOP_5 adds a LEN argument to
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2149 EXTERNAL_PROPERTY_LIST_LOOP_4, just like EXTERNAL_LIST_LOOP_4 does,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2150 and again LEN is automatically declared. Note that in this case,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2151 LEN counts the iterations, NOT the total number of list elements
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2152 processed, which is 2 * LEN.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2153
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2154 EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE does not declare any of its
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2155 arguments, just like EXTERNAL_LIST_LOOP_4_NO_DECLARE, and so these
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2156 must be declared manually. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2157
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2158 /* Optimized and safe macros for looping over external property lists. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2159 #define EXTERNAL_PROPERTY_LIST_LOOP_3(key, value, list) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2160 Lisp_Object key, value, hare_##key, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2161 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2162 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, hare_##key, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2163 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2164
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2165 #define EXTERNAL_PROPERTY_LIST_LOOP_4(key, value, list, tail) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2166 Lisp_Object key, value, tail, tortoise_##key; \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2167 EMACS_INT len_##key; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2168 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len_##key, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2169 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2170
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2171 #define EXTERNAL_PROPERTY_LIST_LOOP_5(key, value, list, tail, len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2172 Lisp_Object key, value, tail, tortoise_##key; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2173 EMACS_INT len; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2174 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2175 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2176
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2177 #define EXTERNAL_PROPERTY_LIST_LOOP_5_NO_DECLARE(key, value, list, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2178 tail, len) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2179 Lisp_Object tortoise_##key; \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2180 EXTERNAL_PROPERTY_LIST_LOOP_7 (key, value, list, len, tail, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2181 tortoise_##key, CIRCULAR_LIST_SUSPICION_LENGTH)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2182
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2184 #define EXTERNAL_PROPERTY_LIST_LOOP_7(key, value, list, len, hare, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2185 tortoise, suspicion_length) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2186 for (tortoise = hare = list, len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2187 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2188 ((CONSP (hare) && \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2189 (key = XCAR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2190 hare = XCDR (hare), \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2191 (CONSP (hare) ? 1 : \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2192 (signal_malformed_property_list_error (list), 0)))) ? \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2193 (value = XCAR (hare), 1) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2194 (NILP (hare) ? 0 : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2195 (signal_malformed_property_list_error (list), 0))); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2196 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2197 hare = XCDR (hare), \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2198 ((++len < suspicion_length) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2199 ((void) 0) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2200 (((len & 1) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2201 ((void) (tortoise = XCDR (XCDR (tortoise)))) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2202 ((void) 0)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2203 , \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2204 (EQ (hare, tortoise) ? \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2205 ((void) signal_circular_property_list_error (list)) : \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2206 ((void) 0)))))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2207
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2208 #define PRIVATE_PROPERTY_LIST_LOOP_4(tail, key, value, plist) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2209 for (tail = plist; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2210 NILP (tail) ? 0 : \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2211 (key = XCAR (tail), tail = XCDR (tail), \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2212 value = XCAR (tail), tail = XCDR (tail), 1); \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2213 )
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2214
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2215 #define PROPERTY_LIST_LOOP_3(key, value, plist) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2216 Lisp_Object key, value, tail_##key; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2217 PRIVATE_PROPERTY_LIST_LOOP_4 (tail_##key, key, value, plist)
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2218
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2219 #define GC_PROPERTY_LIST_LOOP_3(key, value, plist) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2220 do { \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2221 XGCDECL3 (key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2222 Lisp_Object key, value, tail_##key; \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2223 XGCPRO3 (key, key, value, tail_##key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2224 PRIVATE_PROPERTY_LIST_LOOP_4 (tail_##key, key, value, plist)
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2225
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2226 #define END_GC_PROPERTY_LIST_LOOP(key) \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2227 XUNGCPRO (key); \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2228 } \
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2229 while (0)
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
2230
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2231 /* Return 1 if LIST is properly acyclic and nil-terminated, else 0. */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2232 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2233 int
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2234 TRUE_LIST_P (Lisp_Object object)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2235 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2236 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2237 Lisp_Object hare, tortoise;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2238 EMACS_INT len;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2240 for (hare = tortoise = object, len = 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2241 CONSP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2242 hare = XCDR (hare), len++)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2243 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2244 if (len < CIRCULAR_LIST_SUSPICION_LENGTH)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2245 continue;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2246
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2247 if (len & 1)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2248 tortoise = XCDR (tortoise);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2249 else if (EQ (hare, tortoise))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2250 return 0;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2251 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2253 return NILP (hare);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2254 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2255
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2256 /* Signal an error if LIST is not properly acyclic and nil-terminated. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2257 #define CHECK_TRUE_LIST(list) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2258 Lisp_Object CTL_list = (list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2259 Lisp_Object CTL_hare, CTL_tortoise; \
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2260 EMACS_INT CTL_len; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2261 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2262 for (CTL_hare = CTL_tortoise = CTL_list, CTL_len = 0; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2263 CONSP (CTL_hare); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2264 CTL_hare = XCDR (CTL_hare), CTL_len++) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2265 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2266 if (CTL_len < CIRCULAR_LIST_SUSPICION_LENGTH) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2267 continue; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2268 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2269 if (CTL_len & 1) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2270 CTL_tortoise = XCDR (CTL_tortoise); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2271 else if (EQ (CTL_hare, CTL_tortoise)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2272 Fsignal (Qcircular_list, list1 (CTL_list)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2273 } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2274 \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2275 if (! NILP (CTL_hare)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2276 signal_malformed_list_error (CTL_list); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2277 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2278
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2279 /*------------------------------ string --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2280
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2281 struct Lisp_String
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2282 {
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2283 union
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2284 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2285 struct lrecord_header lheader;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2286 struct
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2287 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2288 /* WARNING: Everything before ascii_begin must agree exactly with
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2289 struct lrecord_header */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2290 unsigned int type :8;
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2291 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2292 unsigned int lisp_readonly :1;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2293 unsigned int free :1;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2294 /* Number of chars at beginning of string that are one byte in length
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2295 (byte_ascii_p) */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2296 unsigned int ascii_begin :22;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2297 #else /* not MC_ALLOC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2298 unsigned int mark :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2299 unsigned int c_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2300 unsigned int lisp_readonly :1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2301 /* Number of chars at beginning of string that are one byte in length
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2302 (byte_ascii_p) */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2303 unsigned int ascii_begin :21;
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2304 #endif /* not MC_ALLOC */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2305 } v;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2306 } u;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2307 Bytecount size_;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
2308 Ibyte *data_;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2309 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2310 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2311 typedef struct Lisp_String Lisp_String;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2312
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
2313 #define MAX_STRING_ASCII_BEGIN ((1 << 21) - 1)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2314
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
2315 DECLARE_MODULE_API_LRECORD (string, Lisp_String);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2316 #define XSTRING(x) XRECORD (x, string, Lisp_String)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2317 #define wrap_string(p) wrap_record (p, string)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2318 #define STRINGP(x) RECORDP (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2319 #define CHECK_STRING(x) CHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2320 #define CONCHECK_STRING(x) CONCHECK_RECORD (x, string)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2321
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2322 /* Most basic macros for strings -- basically just accessing or setting
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2323 fields -- are here. Everything else is in text.h, since they depend on
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2324 stuff there. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2325
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2326 /* Operations on Lisp_String *'s; only ones left */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2327 #define set_lispstringp_length(s, len) ((void) ((s)->size_ = (len)))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2328 #define set_lispstringp_data(s, ptr) ((void) ((s)->data_ = (ptr)))
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2329
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2330 /* Operations on strings as Lisp_Objects. Don't manipulate Lisp_String *'s
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2331 in any new code. */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2332 #define XSTRING_LENGTH(s) (XSTRING (s)->size_)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2333 #define XSTRING_PLIST(s) (XSTRING (s)->plist)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2334 #define XSTRING_DATA(s) (XSTRING (s)->data_ + 0)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2335 #define XSTRING_ASCII_BEGIN(s) (XSTRING (s)->u.v.ascii_begin + 0)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2336 #define XSET_STRING_LENGTH(s, ptr) set_lispstringp_length (XSTRING (s), ptr)
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2337 #define XSET_STRING_DATA(s, ptr) set_lispstringp_data (XSTRING (s), ptr)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2338 /* WARNING: If you modify an existing string, you must call
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2339 bump_string_modiff() afterwards. */
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2340 #define XSET_STRING_ASCII_BEGIN(s, val) \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2341 ((void) (XSTRING (s)->u.v.ascii_begin = (val)))
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2342 #define XSTRING_FORMAT(s) FORMAT_DEFAULT
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2343
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2344 /* Return the true aligned size of a struct whose last member is a
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2345 variable-length array field. (this is known as the "struct hack") */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2346 /* Implementation: in practice, structtype and fieldtype usually have
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2347 the same alignment, but we can't be sure. We need to use
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2348 ALIGN_SIZE to be absolutely sure of getting the correct alignment.
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2349 To help the compiler's optimizer, we use a ternary expression that
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2350 only a very stupid compiler would fail to correctly simplify. */
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2351 #define FLEXIBLE_ARRAY_STRUCT_SIZEOF(structtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2352 fieldtype, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2353 fieldname, \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2354 array_length) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2355 (ALIGNOF (structtype) == ALIGNOF (fieldtype) \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2356 ? (offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2357 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2358 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2359 (array_length)) \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2360 : (ALIGN_FOR_TYPE \
456
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2361 ((offsetof (structtype, fieldname) + \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2362 (offsetof (structtype, fieldname[1]) - \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2363 offsetof (structtype, fieldname[0])) * \
e7ef97881643 Import from CVS: tag r21-2-43
cvs
parents: 454
diff changeset
2364 (array_length)), \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2365 structtype)))
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2366
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2367 /*------------------------------ vector --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2368
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2369 struct Lisp_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2370 {
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2371 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2372 struct lrecord_header header;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2373 #else /* MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2374 struct lcrecord_header header;
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2375 #endif /* MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2376 long size;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2377 Lisp_Object contents[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2378 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2379 typedef struct Lisp_Vector Lisp_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2380
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2381 DECLARE_LRECORD (vector, Lisp_Vector);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2382 #define XVECTOR(x) XRECORD (x, vector, Lisp_Vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2383 #define wrap_vector(p) wrap_record (p, vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2384 #define VECTORP(x) RECORDP (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2385 #define CHECK_VECTOR(x) CHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2386 #define CONCHECK_VECTOR(x) CONCHECK_RECORD (x, vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2387
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2388 #define vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2389 #define XVECTOR_LENGTH(s) vector_length (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2390 #define vector_data(v) ((v)->contents)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2391 #define XVECTOR_DATA(s) vector_data (XVECTOR (s))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2392
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2393 /*---------------------------- bit vectors -----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2394
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2395 #if (LONGBITS < 16)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2396 #error What the hell?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2397 #elif (LONGBITS < 32)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2398 # define LONGBITS_LOG2 4
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2399 # define LONGBITS_POWER_OF_2 16
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2400 #elif (LONGBITS < 64)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2401 # define LONGBITS_LOG2 5
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2402 # define LONGBITS_POWER_OF_2 32
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2403 #elif (LONGBITS < 128)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2404 # define LONGBITS_LOG2 6
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2405 # define LONGBITS_POWER_OF_2 64
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2406 #else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2407 #error You really have 128-bit integers?!
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2408 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2409
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2410 struct Lisp_Bit_Vector
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2411 {
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2412 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2413 struct lrecord_header lheader;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2414 #else /* MC_ALLOC */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
2415 struct lcrecord_header lheader;
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2416 #endif /* MC_ALLOC */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2417 Elemcount size;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2418 unsigned long bits[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2419 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2420 typedef struct Lisp_Bit_Vector Lisp_Bit_Vector;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2421
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2422 DECLARE_LRECORD (bit_vector, Lisp_Bit_Vector);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2423 #define XBIT_VECTOR(x) XRECORD (x, bit_vector, Lisp_Bit_Vector)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2424 #define wrap_bit_vector(p) wrap_record (p, bit_vector)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2425 #define BIT_VECTORP(x) RECORDP (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2426 #define CHECK_BIT_VECTOR(x) CHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2427 #define CONCHECK_BIT_VECTOR(x) CONCHECK_RECORD (x, bit_vector)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2429 #define BITP(x) (INTP (x) && (XINT (x) == 0 || XINT (x) == 1))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2430
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2431 #define CHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2432 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2433 dead_wrong_type_argument (Qbitp, x);\
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2434 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2435
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2436 #define CONCHECK_BIT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2437 if (!BITP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2438 x = wrong_type_argument (Qbitp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2439 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2440
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2441 #define bit_vector_length(v) ((v)->size)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2442
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2443 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2444 int
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2445 bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2446 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2447 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2448 return ((v->bits[n >> LONGBITS_LOG2] >> (n & (LONGBITS_POWER_OF_2 - 1)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2449 & 1);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2450 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2451
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2452 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2453 void
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2454 set_bit_vector_bit (Lisp_Bit_Vector *v, Elemcount n, int value)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2455 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2456 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2457 if (value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2458 v->bits[n >> LONGBITS_LOG2] |= (1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2459 else
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2460 v->bits[n >> LONGBITS_LOG2] &= ~(1UL << (n & (LONGBITS_POWER_OF_2 - 1)));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2461 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2462
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2463 /* Number of longs required to hold LEN bits */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2464 #define BIT_VECTOR_LONG_STORAGE(len) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2465 (((len) + LONGBITS_POWER_OF_2 - 1) >> LONGBITS_LOG2)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2466
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2467
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2468 /*------------------------------ symbol --------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2469
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2470 typedef struct Lisp_Symbol Lisp_Symbol;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2471 struct Lisp_Symbol
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2472 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2473 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2474 /* next symbol in this obarray bucket */
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2475 Lisp_Symbol *next;
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2476 Lisp_Object name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2477 Lisp_Object value;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2478 Lisp_Object function;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2479 Lisp_Object plist;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2480 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2481
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2482 #define SYMBOL_IS_KEYWORD(sym) \
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2483 ((string_byte (symbol_name (XSYMBOL (sym)), 0) == ':') \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2484 && EQ (sym, oblookup (Vobarray, \
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2485 XSTRING_DATA (symbol_name (XSYMBOL (sym))), \
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2486 XSTRING_LENGTH (symbol_name (XSYMBOL (sym))))))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2487 #define KEYWORDP(obj) (SYMBOLP (obj) && SYMBOL_IS_KEYWORD (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2488
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
2489 DECLARE_MODULE_API_LRECORD (symbol, Lisp_Symbol);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2490 #define XSYMBOL(x) XRECORD (x, symbol, Lisp_Symbol)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2491 #define wrap_symbol(p) wrap_record (p, symbol)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2492 #define SYMBOLP(x) RECORDP (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2493 #define CHECK_SYMBOL(x) CHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2494 #define CONCHECK_SYMBOL(x) CONCHECK_RECORD (x, symbol)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2495
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2496 #define symbol_next(s) ((s)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2497 #define symbol_name(s) ((s)->name)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2498 #define symbol_value(s) ((s)->value)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2499 #define symbol_function(s) ((s)->function)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2500 #define symbol_plist(s) ((s)->plist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2501
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2502 #define XSYMBOL_NEXT(s) (XSYMBOL (s)->next)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2503 #define XSYMBOL_NAME(s) (XSYMBOL (s)->name)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2504 #define XSYMBOL_VALUE(s) (XSYMBOL (s)->value)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2505 #define XSYMBOL_FUNCTION(s) (XSYMBOL (s)->function)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2506 #define XSYMBOL_PLIST(s) (XSYMBOL (s)->plist)
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2507
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
2508
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2509 /*------------------------------- subr ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2510
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2511 /* A function that takes no arguments and returns a Lisp_Object.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
2512 We could define such types for n arguments, if needed. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2513 typedef Lisp_Object (*lisp_fn_t) (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2514
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2515 struct Lisp_Subr
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2516 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2517 struct lrecord_header lheader;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2518 short min_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2519 short max_args;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2520 const char *prompt;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2521 const char *doc;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2522 const char *name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2523 lisp_fn_t subr_fn;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2524 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2525 typedef struct Lisp_Subr Lisp_Subr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2526
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2527 DECLARE_LRECORD (subr, Lisp_Subr);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2528 #define XSUBR(x) XRECORD (x, subr, Lisp_Subr)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2529 #define wrap_subr(p) wrap_record (p, subr)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2530 #define SUBRP(x) RECORDP (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2531 #define CHECK_SUBR(x) CHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2532 #define CONCHECK_SUBR(x) CONCHECK_RECORD (x, subr)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2533
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2534 #define subr_function(subr) ((subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2535 #define SUBR_FUNCTION(subr,max_args) \
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2536 ((Lisp_Object (*) (EXFUN_##max_args)) (subr)->subr_fn)
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
2537 #define subr_name(subr) ((subr)->name)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2538
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2539 /*------------------------------ marker --------------------------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2540
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2541
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2542 typedef struct Lisp_Marker Lisp_Marker;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2543 struct Lisp_Marker
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2544 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2545 struct lrecord_header lheader;
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2546 Lisp_Marker *next;
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2547 Lisp_Marker *prev;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2548 struct buffer *buffer;
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
2549 Membpos membpos;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2550 char insertion_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2551 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2552
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
2553 DECLARE_MODULE_API_LRECORD (marker, Lisp_Marker);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2554 #define XMARKER(x) XRECORD (x, marker, Lisp_Marker)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2555 #define wrap_marker(p) wrap_record (p, marker)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2556 #define MARKERP(x) RECORDP (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2557 #define CHECK_MARKER(x) CHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2558 #define CONCHECK_MARKER(x) CONCHECK_RECORD (x, marker)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2559
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2560 /* The second check was looking for GCed markers still in use */
2500
3d8143fc88e1 [xemacs-hg @ 2005-01-24 23:33:30 by ben]
ben
parents: 2421
diff changeset
2561 /* if (INTP (XMARKER (x)->lheader.next.v)) ABORT (); */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2562
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2563 #define marker_next(m) ((m)->next)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2564 #define marker_prev(m) ((m)->prev)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2565
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2566 /*------------------------------- char ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2567
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2568 #define CHARP(x) (XTYPE (x) == Lisp_Type_Char)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2569
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
2570 #ifdef ERROR_CHECK_TYPES
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2571
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2572 DECLARE_INLINE_HEADER (
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
2573 Ichar
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2574 XCHAR_1 (Lisp_Object obj, const Ascbyte *file, int line)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2575 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2576 {
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2577 assert_at_line (CHARP (obj), file, line);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2578 return XCHARVAL (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2579 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2580
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2581 #define XCHAR(x) XCHAR_1 (x, __FILE__, __LINE__)
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2582
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2583 #else /* no error checking */
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2584
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
2585 #define XCHAR(x) ((Ichar) XCHARVAL (x))
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2586
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2587 #endif /* no error checking */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2588
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2589 #define CHECK_CHAR(x) CHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2590 #define CONCHECK_CHAR(x) CONCHECK_NONRECORD (x, Lisp_Type_Char, Qcharacterp)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2591
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2592
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2593 /*------------------------------ float ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2594
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2595 /* Note: the 'unused_next_' field exists only to ensure that the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2596 `next' pointer fits within the structure, for the purposes of the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2597 free list. This makes a difference in the unlikely case of
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2598 sizeof(double) being smaller than sizeof(void *). */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2599
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2600 struct Lisp_Float
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2601 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2602 struct lrecord_header lheader;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2603 union { double d; struct Lisp_Float *unused_next_; } data;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2604 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2605 typedef struct Lisp_Float Lisp_Float;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2606
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2607 DECLARE_LRECORD (float, Lisp_Float);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2608 #define XFLOAT(x) XRECORD (x, float, Lisp_Float)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2609 #define wrap_float(p) wrap_record (p, float)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2610 #define FLOATP(x) RECORDP (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2611 #define CHECK_FLOAT(x) CHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2612 #define CONCHECK_FLOAT(x) CONCHECK_RECORD (x, float)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2613
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2614 #define float_data(f) ((f)->data.d)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2615 #define XFLOAT_DATA(x) float_data (XFLOAT (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2616
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2617 #define XFLOATINT(n) extract_float (n)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2618
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2619 #define CHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2620 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2621 dead_wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2622 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2623
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2624 #define CONCHECK_INT_OR_FLOAT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2625 if (!INT_OR_FLOATP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2626 x = wrong_type_argument (Qnumberp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2627 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2628
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2629 # define INT_OR_FLOATP(x) (INTP (x) || FLOATP (x))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2630
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2631 /*-------------------------------- int ---------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2632
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2633 #define ZEROP(x) EQ (x, Qzero)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2634
800
a5954632b187 [xemacs-hg @ 2002-03-31 08:27:14 by ben]
ben
parents: 793
diff changeset
2635 #ifdef ERROR_CHECK_TYPES
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2636
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2637 #define XCHAR_OR_INT(x) XCHAR_OR_INT_1 (x, __FILE__, __LINE__)
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2638 #define XINT(x) XINT_1 (x, __FILE__, __LINE__)
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2639
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2640 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2641 EMACS_INT
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2642 XINT_1 (Lisp_Object obj, const Ascbyte *file, int line)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2643 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2644 {
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2645 assert_at_line (INTP (obj), file, line);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2646 return XREALINT (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2647 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2648
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2649 DECLARE_INLINE_HEADER (
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2650 EMACS_INT
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
2651 XCHAR_OR_INT_1 (Lisp_Object obj, const Ascbyte *file, int line)
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
2652 )
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2653 {
788
026c5bf9c134 [xemacs-hg @ 2002-03-21 07:29:57 by ben]
ben
parents: 776
diff changeset
2654 assert_at_line (INTP (obj) || CHARP (obj), file, line);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2655 return CHARP (obj) ? XCHAR (obj) : XINT (obj);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2656 }
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2657
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2658 #else /* no error checking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2659
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2660 #define XINT(obj) XREALINT (obj)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2661 #define XCHAR_OR_INT(obj) (CHARP (obj) ? XCHAR (obj) : XINT (obj))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2662
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2663 #endif /* no error checking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2664
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2665 #define CHECK_INT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2666 if (!INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2667 dead_wrong_type_argument (Qintegerp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2668 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2669
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2670 #define CONCHECK_INT(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2671 if (!INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2672 x = wrong_type_argument (Qintegerp, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2673 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2674
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2675 #define NATNUMP(x) (INTP (x) && XINT (x) >= 0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2676
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2677 #define CHECK_NATNUM(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2678 if (!NATNUMP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2679 dead_wrong_type_argument (Qnatnump, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2680 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2681
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2682 #define CONCHECK_NATNUM(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2683 if (!NATNUMP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2684 x = wrong_type_argument (Qnatnump, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2685 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2686
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2687 /* next three always continuable because they coerce their arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2688 #define CHECK_INT_COERCE_CHAR(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2689 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2690 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2691 else if (CHARP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2692 x = make_int (XCHAR (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2693 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2694 x = wrong_type_argument (Qinteger_or_char_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2695 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2696
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2697 #define CHECK_INT_COERCE_MARKER(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2698 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2699 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2700 else if (MARKERP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2701 x = make_int (marker_position (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2702 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2703 x = wrong_type_argument (Qinteger_or_marker_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2704 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2705
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2706 #define CHECK_INT_COERCE_CHAR_OR_MARKER(x) do { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2707 if (INTP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2708 ; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2709 else if (CHARP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2710 x = make_int (XCHAR (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2711 else if (MARKERP (x)) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2712 x = make_int (marker_position (x)); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2713 else \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2714 x = wrong_type_argument (Qinteger_char_or_marker_p, x); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2715 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2716
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2717
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2718 /*--------------------------- readonly objects -------------------------*/
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
2719
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2720 #ifndef MC_ALLOC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2721 #define CHECK_C_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2722 do { if (c_readonly (obj)) c_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2723
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2724 #define C_READONLY(obj) (C_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2725 #endif /* not MC_ALLOC */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2726
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2727 #define CHECK_LISP_WRITEABLE(obj) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2728 do { if (lisp_readonly (obj)) lisp_write_error (obj); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2729
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2730 #define LISP_READONLY(obj) (LISP_READONLY_RECORD_HEADER_P(XRECORD_LHEADER (obj)))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2731
980
2ec85ed291da [xemacs-hg @ 2002-08-30 08:05:30 by youngs]
youngs
parents: 970
diff changeset
2732 /*----------------------------- structures ----------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2733
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2734 typedef struct structure_keyword_entry structure_keyword_entry;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2735 struct structure_keyword_entry
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2736 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2737 Lisp_Object keyword;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2738 int (*validate) (Lisp_Object keyword, Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2739 Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2740 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2741
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2742 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2743 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2744 Dynarr_declare (structure_keyword_entry);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2745 } structure_keyword_entry_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2746
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2747 typedef struct structure_type structure_type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2748 struct structure_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2749 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2750 Lisp_Object type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2751 structure_keyword_entry_dynarr *keywords;
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2752 int (*validate) (Lisp_Object data, Error_Behavior errb);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2753 Lisp_Object (*instantiate) (Lisp_Object data);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2754 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2756 typedef struct
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2757 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2758 Dynarr_declare (structure_type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2759 } structure_type_dynarr;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2760
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2761 struct structure_type *define_structure_type (Lisp_Object type,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2762 int (*validate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2763 (Lisp_Object data,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2764 Error_Behavior errb),
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2765 Lisp_Object (*instantiate)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2766 (Lisp_Object data));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2767 void define_structure_type_keyword (struct structure_type *st,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2768 Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2769 int (*validate) (Lisp_Object keyword,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2770 Lisp_Object value,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
2771 Error_Behavior errb));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2772
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2773 /*---------------------------- weak boxes ------------------------------*/
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2774
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2775 struct weak_box
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2776 {
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2777 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2778 struct lrecord_header header;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2779 #else /* MC_ALLOC */
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2780 struct lcrecord_header header;
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2781 #endif /* MC_ALLOC */
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2782 Lisp_Object value;
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2783
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2784 Lisp_Object next_weak_box; /* don't mark through this! */
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2785 };
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2786
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2787 void prune_weak_boxes (void);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2788 Lisp_Object make_weak_box (Lisp_Object value);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2789 Lisp_Object weak_box_ref (Lisp_Object value);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2790
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2791 DECLARE_LRECORD (weak_box, struct weak_box);
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2792 #define XWEAK_BOX(x) XRECORD (x, weak_box, struct weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2793 #define XSET_WEAK_BOX(x, v) (XWEAK_BOX (x)->value = (v))
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2794 #define wrap_weak_box(p) wrap_record (p, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2795 #define WEAK_BOXP(x) RECORDP (x, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2796 #define CHECK_WEAK_BOX(x) CHECK_RECORD (x, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2797 #define CONCHECK_WEAK_BOX(x) CONCHECK_RECORD (x, weak_box)
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2798
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2799 /*--------------------------- ephemerons ----------------------------*/
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2800
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2801 struct ephemeron
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2802 {
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2803 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2804 struct lrecord_header header;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2805 #else /* MC_ALLOC */
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2806 struct lcrecord_header header;
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2807 #endif /* MC_ALLOC */
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2808
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2809 Lisp_Object key;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2810
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2811 /* This field holds a pair. The cdr of this cons points to the next
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2812 ephemeron in Vall_ephemerons. The car points to another pair
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2813 whose car is the value and whose cdr is the finalizer.
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2814
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2815 This representation makes it very easy to unlink an ephemeron
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2816 from Vall_ephemerons and chain it into
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2817 Vall_ephemerons_to_finalize. */
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2818
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2819 Lisp_Object cons_chain;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2820
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2821 Lisp_Object value;
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2822 };
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2823
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2824 void prune_ephemerons (void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2825 Lisp_Object ephemeron_value(Lisp_Object ephi);
1590
03009473262a [xemacs-hg @ 2003-07-26 14:00:27 by michaels]
michaels
parents: 1467
diff changeset
2826 void init_marking_ephemerons(void);
03009473262a [xemacs-hg @ 2003-07-26 14:00:27 by michaels]
michaels
parents: 1467
diff changeset
2827 int continue_marking_ephemerons(void);
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2828 int finish_marking_ephemerons(void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2829 Lisp_Object zap_finalize_list(void);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2830 Lisp_Object make_ephemeron(Lisp_Object key, Lisp_Object value, Lisp_Object finalizer);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2831
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2832 DECLARE_LRECORD(ephemeron, struct ephemeron);
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2833 #define XEPHEMERON(x) XRECORD (x, ephemeron, struct ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2834 #define XEPHEMERON_REF(x) (XEPHEMERON (x)->value)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2835 #define XEPHEMERON_NEXT(x) (XCDR (XEPHEMERON(x)->cons_chain))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2836 #define XEPHEMERON_FINALIZER(x) (XCDR (XCAR (XEPHEMERON (x)->cons_chain)))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2837 #define XSET_EPHEMERON_NEXT(x, n) (XSETCDR (XEPHEMERON(x)->cons_chain, n))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2838 #define XSET_EPHEMERON_VALUE(x, v) (XEPHEMERON(x)->value = (v))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2839 #define XSET_EPHEMERON_KEY(x, k) (XEPHEMERON(x)->key = (k))
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2840 #define wrap_ephemeron(p) wrap_record (p, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2841 #define EPHEMERONP(x) RECORDP (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2842 #define CHECK_EPHEMERON(x) CHECK_RECORD (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2843 #define CONCHECK_EPHEMERON(x) CONCHECK_RECORD (x, ephemeron)
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
2844
858
2c12fe2da451 [xemacs-hg @ 2002-05-31 09:38:45 by michaels]
michaels
parents: 853
diff changeset
2845
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2846 /*---------------------------- weak lists ------------------------------*/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2847
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2848 enum weak_list_type
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2849 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2850 /* element disappears if it's unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2851 WEAK_LIST_SIMPLE,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2852 /* element disappears if it's a cons and either its car or
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2853 cdr is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2854 WEAK_LIST_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2855 /* element disappears if it's a cons and its car is unmarked. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2856 WEAK_LIST_KEY_ASSOC,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2857 /* element disappears if it's a cons and its cdr is unmarked. */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2858 WEAK_LIST_VALUE_ASSOC,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2859 /* element disappears if it's a cons and neither its car nor
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2860 its cdr is marked. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
2861 WEAK_LIST_FULL_ASSOC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2862 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2863
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2864 struct weak_list
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2865 {
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2866 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2867 struct lrecord_header header;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2868 #else /* MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2869 struct lcrecord_header header;
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2870 #endif /* MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2871 Lisp_Object list; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2872 enum weak_list_type type;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2873 Lisp_Object next_weak; /* don't mark through this! */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2874 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2875
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2876 DECLARE_LRECORD (weak_list, struct weak_list);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2877 #define XWEAK_LIST(x) XRECORD (x, weak_list, struct weak_list)
617
af57a77cbc92 [xemacs-hg @ 2001-06-18 07:09:50 by ben]
ben
parents: 614
diff changeset
2878 #define wrap_weak_list(p) wrap_record (p, weak_list)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2879 #define WEAK_LISTP(x) RECORDP (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2880 #define CHECK_WEAK_LIST(x) CHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2881 #define CONCHECK_WEAK_LIST(x) CONCHECK_RECORD (x, weak_list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2882
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2883 #define weak_list_list(w) ((w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2884 #define XWEAK_LIST_LIST(w) (XWEAK_LIST (w)->list)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2885
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2886 Lisp_Object make_weak_list (enum weak_list_type type);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2887 /* The following two are only called by the garbage collector */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2888 int finish_marking_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2889 void prune_weak_lists (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2890
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
2891 END_C_DECLS
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2892
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2893 /************************************************************************/
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2894 /* Definitions related to the format of text and of characters */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2895 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2896
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2897 /* Note:
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2898
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2899 "internally formatted text" and the term "internal format" in
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2900 general are likely to refer to the format of text in buffers and
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2901 strings; "externally formatted text" and the term "external format"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2902 refer to any text format used in the O.S. or elsewhere outside of
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2903 XEmacs. The format of text and of a character are related and
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2904 there must be a one-to-one relationship (hopefully through a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2905 relatively simple algorithmic means of conversion) between a string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2906 of text and an equivalent array of characters, but the conversion
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2907 between the two is NOT necessarily trivial.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2908
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2909 In a non-Mule XEmacs, allowed characters are numbered 0 through
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2910 255, where no fixed meaning is assigned to them, but (when
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2911 representing text, rather than bytes in a binary file) in practice
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2912 the lower half represents ASCII and the upper half some other 8-bit
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2913 character set (chosen by setting the font, case tables, syntax
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2914 tables, etc. appropriately for the character set through ad-hoc
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2915 means such as the `iso-8859-1' file and the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2916 `standard-display-european' function).
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2917
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2918 #### Finish this.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2919
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2920 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2921 #include "text.h"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2922
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2923
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
2924 /************************************************************************/
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2925 /* Definitions of primitive Lisp functions and variables */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2926 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2927
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2928
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2929 /* DEFUN - Define a built-in Lisp-visible C function or `subr'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2930 `lname' should be the name to give the function in Lisp,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2931 as a null-terminated C string.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2932 `Fname' should be the C equivalent of `lname', using only characters
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2933 valid in a C identifier, with an "F" prepended.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2934 The name of the C constant structure that records information
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2935 on this function for internal use is "S" concatenated with Fname.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2936 `min_args' should be a number, the minimum number of arguments allowed.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2937 `max_args' should be a number, the maximum number of arguments allowed,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2938 or else MANY or UNEVALLED.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2939 MANY means pass a vector of evaluated arguments,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2940 in the form of an integer number-of-arguments
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2941 followed by the address of a vector of Lisp_Objects
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2942 which contains the argument values.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2943 UNEVALLED means pass the list of unevaluated arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2944 `prompt' says how to read arguments for an interactive call.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2945 See the doc string for `interactive'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2946 A null string means call interactively with no arguments.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2947 `arglist' are the comma-separated arguments (always Lisp_Objects) for
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2948 the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2949 The docstring for the function is placed as a "C" comment between
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2950 the prompt and the `args' argument. make-docfile reads the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2951 comment and creates the DOC file from it.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2952 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2953
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2954 #define EXFUN_0 void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2955 #define EXFUN_1 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2956 #define EXFUN_2 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2957 #define EXFUN_3 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2958 #define EXFUN_4 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2959 #define EXFUN_5 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2960 #define EXFUN_6 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2961 Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2962 #define EXFUN_7 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2963 Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2964 #define EXFUN_8 Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object,Lisp_Object, \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2965 Lisp_Object,Lisp_Object,Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2966 #define EXFUN_MANY int, Lisp_Object*
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2967 #define EXFUN_UNEVALLED Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2968 #define EXFUN(sym, max_args) Lisp_Object sym (EXFUN_##max_args)
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
2969 #define EXFUN_NORETURN(sym, max_args) \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
2970 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, sym (EXFUN_##max_args))
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2971
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2972 #define SUBR_MAX_ARGS 8
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2973 #define MANY -2
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2974 #define UNEVALLED -1
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2975
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2976 /* Can't be const, because then subr->doc is read-only and
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2977 Snarf_documentation chokes */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
2978
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2979 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2980 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2981 Lisp_Object Fname (EXFUN_##max_args); \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2982 static struct Lisp_Subr MC_ALLOC_S##Fname = \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2983 { \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2984 { /* struct lrecord_header */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2985 lrecord_type_subr, /* lrecord_type_index */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2986 1, /* lisp_readonly bit */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2987 0, /* free */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2988 0 /* uid */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2989 }, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2990 min_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2991 max_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2992 prompt, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2993 0, /* doc string */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2994 lname, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2995 (lisp_fn_t) Fname \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2996 }; \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2997 Lisp_Object Fname (DEFUN_##max_args arglist)
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2998
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
2999 #define DEFUN_NORETURN(lname, Fname, min_args, max_args, prompt, arglist) \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3000 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, Fname (EXFUN_##max_args)); \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3001 static struct Lisp_Subr MC_ALLOC_S##Fname = \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3002 { \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3003 { /* struct lrecord_header */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3004 lrecord_type_subr, /* lrecord_type_index */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3005 1, /* lisp_readonly bit */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3006 0, /* free */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3007 0 /* uid */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3008 }, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3009 min_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3010 max_args, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3011 prompt, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3012 0, /* doc string */ \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3013 lname, \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3014 (lisp_fn_t) Fname \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3015 }; \
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3016 DOESNT_RETURN_TYPE (Lisp_Object) Fname (DEFUN_##max_args arglist)
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3017 #else /* not MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3018 #define DEFUN(lname, Fname, min_args, max_args, prompt, arglist) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3019 Lisp_Object Fname (EXFUN_##max_args); \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3020 static struct Lisp_Subr S##Fname = \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3021 { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3022 { /* struct lrecord_header */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3023 lrecord_type_subr, /* lrecord_type_index */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3024 1, /* mark bit */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3025 1, /* c_readonly bit */ \
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 1104
diff changeset
3026 1, /* lisp_readonly bit */ \
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 1104
diff changeset
3027 0 /* unused */ \
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3028 }, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3029 min_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3030 max_args, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3031 prompt, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3032 0, /* doc string */ \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3033 lname, \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3034 (lisp_fn_t) Fname \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3035 }; \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3036 Lisp_Object Fname (DEFUN_##max_args arglist)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3037
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3038 #define DEFUN_NORETURN(lname, Fname, min_args, max_args, prompt, arglist) \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3039 DECLARE_DOESNT_RETURN_TYPE (Lisp_Object, Fname (EXFUN_##max_args)); \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3040 static struct Lisp_Subr S##Fname = \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3041 { \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3042 { /* struct lrecord_header */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3043 lrecord_type_subr, /* lrecord_type_index */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3044 1, /* mark bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3045 1, /* c_readonly bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3046 1, /* lisp_readonly bit */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3047 0 /* unused */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3048 }, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3049 min_args, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3050 max_args, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3051 prompt, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3052 0, /* doc string */ \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3053 lname, \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3054 (lisp_fn_t) Fname \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3055 }; \
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3056 DOESNT_RETURN_TYPE (Lisp_Object) Fname (DEFUN_##max_args arglist)
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3057 #endif /* not MC_ALLOC */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3058
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3059 /* Heavy ANSI C preprocessor hackery to get DEFUN to declare a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3060 prototype that matches max_args, and add the obligatory
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3061 `Lisp_Object' type declaration to the formal C arguments. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3062
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3063 #define DEFUN_MANY(named_int, named_Lisp_Object) named_int, named_Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3064 #define DEFUN_UNEVALLED(args) Lisp_Object args
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3065 #define DEFUN_0() void
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3066 #define DEFUN_1(a) Lisp_Object a
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3067 #define DEFUN_2(a,b) DEFUN_1(a), Lisp_Object b
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3068 #define DEFUN_3(a,b,c) DEFUN_2(a,b), Lisp_Object c
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3069 #define DEFUN_4(a,b,c,d) DEFUN_3(a,b,c), Lisp_Object d
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3070 #define DEFUN_5(a,b,c,d,e) DEFUN_4(a,b,c,d), Lisp_Object e
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3071 #define DEFUN_6(a,b,c,d,e,f) DEFUN_5(a,b,c,d,e), Lisp_Object f
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3072 #define DEFUN_7(a,b,c,d,e,f,g) DEFUN_6(a,b,c,d,e,f), Lisp_Object g
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3073 #define DEFUN_8(a,b,c,d,e,f,g,h) DEFUN_7(a,b,c,d,e,f,g),Lisp_Object h
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3074
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3075 /* WARNING: If you add defines here for higher values of max_args,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3076 make sure to also fix the clauses in PRIMITIVE_FUNCALL(),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3077 and change the define of SUBR_MAX_ARGS above. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3078
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3079 #include "symeval.h"
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3080
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3081 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
3082
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3083 /* `specpdl' is the special binding/unwind-protect stack.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3084
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3085 Knuth says (see the Jargon File):
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3086 At MIT, `pdl' [abbreviation for `Push Down List'] used to
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3087 be a more common synonym for `stack'.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3088 Everywhere else `stack' seems to be the preferred term.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3089
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3090 specpdl_depth is the current depth of `specpdl'.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3091 Save this for use later as arg to `unbind_to_1'. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3092 extern MODULE_API int specpdl_depth_counter;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3093 #define specpdl_depth() specpdl_depth_counter
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3094
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3095
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3096 #define CHECK_FUNCTION(fun) do { \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3097 while (NILP (Ffunctionp (fun))) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3098 signal_invalid_function_error (fun); \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3099 } while (0)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3100
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3101
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3102 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3103 /* Checking for QUIT */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3104 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3105
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3106 /* NOTE NOTE NOTE: Invoking QUIT can cause random Lisp code to be executed!
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3107 This can happen in numerous ways. For example, on many platforms, QUIT
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3108 needs to drain the event queue to see whether there's a C-g in the works.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3109 A side effect of this is that, if there's a menu-press event, menu filters
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3110 (i.e. Lisp code) will be invoked. Lisp code could also happen if there's
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3111 an asynchronous timeout, or if the debugger is invoked as a result of
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3112 debug-on-quit and the user returns by hitting `r', etc. etc.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3113
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3114 However, GC CANNOT HAPPEN. It is forbidden everywhere within the QUIT-
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3115 processing code, because most callers cannot tolerate GC during QUIT
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3116 since it's just too prevalent. */
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3117
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3118 /* The exact workings of this mechanism are described in detail in signal.c. */
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3119
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3120 /* Asynchronous events set something_happened, and then are processed
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3121 within the QUIT macro. At this point, we are guaranteed to not be in
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3122 any sensitive code. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3123
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3124 extern MODULE_API volatile int something_happened;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3125 extern MODULE_API int dont_check_for_quit;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3126 MODULE_API void check_what_happened (void);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3127
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3128 extern MODULE_API volatile int quit_check_signal_happened;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3129 extern volatile int quit_check_signal_tick_count;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3130 MODULE_API void check_quit (void);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3131
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3132 MODULE_API void signal_quit (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3133
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3134 int begin_dont_check_for_quit (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3135 int begin_do_check_for_quit (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3136
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3137 /* Nonzero if the values of `quit-flag' and `inhibit-quit' indicate
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3138 that a quit should be signalled. */
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3139 #define QUIT_FLAG_SAYS_SHOULD_QUIT \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3140 (!NILP (Vquit_flag) && \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3141 (NILP (Vinhibit_quit) \
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3142 || (EQ (Vquit_flag, Qcritical) && !dont_check_for_quit)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3143
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3144 /* Nonzero if ought to quit now. This is the "efficient" version, which
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3145 respects the flags set to indicate whether the full quit check should
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3146 be done. Therefore it may be inaccurate (i.e. lagging reality), esp.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3147 when poll for quit is used.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3148
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3149 This is defined for code that wants to allow quitting, but needs to
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3150 do some cleanup if that happens. (You could always register the cleanup
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3151 code using record_unwind_protect(), but sometimes it makes more sense
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3152 to do it using QUITP.) To use this macro, just call it at the
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3153 appropriate time, and if its value is non-zero, do your cleanup code
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3154 and then call QUIT.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3155
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3156 A different version (below) is used for the actual QUIT macro. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3157 #define QUITP \
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3158 ((quit_check_signal_happened ? check_quit () : (void) 0), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3159 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3160
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3161 /* This is the version actually called by QUIT. The difference
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3162 between it and QUITP is that it also has side effects in that it
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3163 will handle anything else that has recently signalled itself
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3164 asynchronously and wants to be handled now. Currently this
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3165 includes executing asynchronous timeouts that may have been set
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3166 from Lisp or from the poll-for-quit or poll-for-sigchld
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3167 timers. (#### It seems that, to be slightly more accurate, we
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3168 should also process poll-for-quit timers in the above version.
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3169 However, this mechanism is inherently approximate, so it really
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3170 doesn't matter much.) In the future, it might also include doing a
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3171 thread context switch. Callers of QUITP generally don't except
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3172 random side effects to happen (#### unfortunately, random side effects
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3173 can happen anyway, e.g. through menu filters -- see comment above),
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3174 so we have this different version. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3175 #define INTERNAL_QUITP \
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3176 ((something_happened ? check_what_happened () : (void) 0), \
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3177 QUIT_FLAG_SAYS_SHOULD_QUIT)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3178
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3179 /* Check quit-flag and quit if it is non-nil. Also do any other things
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3180 that are triggered by asynchronous events and might want to be
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3181 handled. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3182 #define QUIT do { if (INTERNAL_QUITP) signal_quit (); } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3183
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3184
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3185 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3186 /* hashing */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3187 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3188
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3189 /* #### for a 64-bit machine, we should substitute a prime just over 2^32 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3190 #define GOOD_HASH 65599 /* prime number just over 2^16; Dragon book, p. 435 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3191 #define HASH2(a,b) (GOOD_HASH * (a) + (b))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3192 #define HASH3(a,b,c) (GOOD_HASH * HASH2 (a,b) + (c))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3193 #define HASH4(a,b,c,d) (GOOD_HASH * HASH3 (a,b,c) + (d))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3194 #define HASH5(a,b,c,d,e) (GOOD_HASH * HASH4 (a,b,c,d) + (e))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3195 #define HASH6(a,b,c,d,e,f) (GOOD_HASH * HASH5 (a,b,c,d,e) + (f))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3196 #define HASH7(a,b,c,d,e,f,g) (GOOD_HASH * HASH6 (a,b,c,d,e,f) + (g))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3197 #define HASH8(a,b,c,d,e,f,g,h) (GOOD_HASH * HASH7 (a,b,c,d,e,f,g) + (h))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3198 #define HASH9(a,b,c,d,e,f,g,h,i) (GOOD_HASH * HASH8 (a,b,c,d,e,f,g,h) + (i))
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3199
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3200 #define LISP_HASH(obj) ((unsigned long) LISP_TO_VOID (obj))
2516
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
3201 Hashcode memory_hash (const void *xv, Bytecount size);
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
3202 Hashcode internal_hash (Lisp_Object obj, int depth);
b87570db038f [xemacs-hg @ 2005-01-26 10:25:03 by ben]
ben
parents: 2500
diff changeset
3203 Hashcode internal_array_hash (Lisp_Object *arr, int size, int depth);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3204
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3205
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3206 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3207 /* String translation */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3208 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3209
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3210 /* When support for message translation exists, GETTEXT() translates a
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3211 string from English into the language defined by
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3212 `current-language-environment'. This is done by looking the string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3213 up in a large predefined table; if no translation is found, the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3214 original string is returned, and the failure is possibly logged so
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3215 that the translation can later be entered into the table.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3216
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3217 In addition to this, there is a mechanism to snarf message strings
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3218 out of the source code so that they can be entered into the tables.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3219 This is what make-msgfile.lex does.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3220
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3221 Handling `format' strings is more difficult: The format string
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3222 should get translated, but not under all circumstances. When the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3223 format string is a Lisp string, what should happen is that
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3224 Fformat() should format the untranslated args[0] and return that,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3225 and also call Fgettext() on args[0] and, if that is different,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3226 format it and store it in the `string-translatable' property of the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3227 returned string. See Fgettext().
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3228
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3229 CGETTEXT() is the same as GETTEXT() but works with char * strings
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3230 instead of Ibyte * strings.
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3231
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3232 build_msg_string() is a shorthand for build_string (GETTEXT (x)).
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3233 build_msg_intstring() is a shorthand for build_intstring (GETTEXT (x)).
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3234 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3235
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3236 #define GETTEXT(x) (x)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3237 #define CGETTEXT(x) (x)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3238 #define LISP_GETTEXT(x) (x)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3239
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3240 /* DEFER_GETTEXT is used to identify strings which are translated when
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3241 they are referenced instead of when they are defined.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3242 These include Qerror_messages and initialized arrays of strings.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3243 */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3244 #define DEFER_GETTEXT(x) (x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3245
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3246
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3247 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3248 /* Garbage collection / GC-protection */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3249 /************************************************************************/
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3250
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3251 /* Structure for recording stack slots that need marking */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3252
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3253 /* This is a chain of structures, each of which points at a Lisp_Object
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3254 variable whose value should be marked in garbage collection.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3255 Normally every link of the chain is an automatic variable of a function,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3256 and its `val' points to some argument or local variable of the function.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3257 On exit to the function, the chain is set back to the value it had on
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3258 entry. This way, no link remains in the chain when the stack frame
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3259 containing the link disappears.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3260
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3261 Every function that can call Feval must protect in this fashion all
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3262 Lisp_Object variables whose contents will be used again. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3263
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3264 extern MODULE_API struct gcpro *gcprolist;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3265
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3266 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
3267
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3268 /* #### Catching insufficient gcpro:
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3269
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3270 The C++ code below catches GCPRO without UNGCPRO or vice-versa.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3271 Catching cases where there's no GCPRO or UNGCPRO but should be, however,
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3272 is much harder, but could be done:
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3273
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3274 1. Lisp_Object becomes a real object. Its creator and destructor need to
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3275 figure out whether the object is on the stack (by looking at the range
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3276 that `this' is within), and if so, add the pointer to a list of all
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3277 stack-based Lisp_Objects.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3278
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3279 2. The assignment method needs to do reference-counting on actual Lisp
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3280 objects -- in particular, we need to know if there are any references
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3281 to a Lisp object that are *NOT* from stack-based Lisp_Objects.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3282
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3283 3. When we get to a point in the code where we might garbage collect --
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3284 i.e. Ffuncall(), Feval(), or Fgarbage_collect() is called -- we look
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3285 at our list of stack-based Lisp_Objects, and if there are any that
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3286 point to Lisp objects with no non-stack references, see if there are
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3287 any gcpros pointing to the object, and if not, set a flag indicating
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3288 that the object is "destroyed". (Don't abort yet because the function
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3289 might not use the object any more.)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3290
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3291 4. When we detag a pointer using XFOO(), abort if its "destroyed" flag
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3292 is set.
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3293
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3294 --ben
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3295 */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3296
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3297 struct gcpro
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3298 {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3299 struct gcpro *next;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3300 const Lisp_Object *var; /* Address of first protected variable */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3301 int nvars; /* Number of consecutive protected variables */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3302 #if defined (__cplusplus) && defined (ERROR_CHECK_GC)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3303 /* Try to catch GCPRO without UNGCPRO, or vice-versa. G++ complains (at
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3304 least with sufficient numbers of warnings enabled, i.e. -Weffc++) if a
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3305 copy constructor or assignment operator is not defined. */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3306 gcpro () : next (0), var (0), nvars (0) { }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3307 gcpro (const gcpro& g) : next (g.next), var (g.var), nvars (g.nvars) { }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3308 gcpro& operator= (const gcpro& g) { next = g.next; var = g.var;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3309 nvars = g.nvars;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3310 return *this;}
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3311 ~gcpro () { assert (!next); }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3312 #endif /* defined (__cplusplus) && defined (ERROR_CHECK_GC) */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3313 };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3314
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3315 /* Normally, you declare variables gcpro1, gcpro2, ... and use the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3316 GCPROn() macros. However, if you need to have nested gcpro's,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3317 declare ngcpro1, ngcpro2, ... and use NGCPROn(). If you need
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3318 to nest another level, use nngcpro1, nngcpro2, ... and use
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3319 NNGCPROn(). If you need to nest yet another level, create
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3320 the appropriate macros. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3321
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3322 /* NOTE: About comments like "This function does not GC": These are there to
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3323 try to track whether GCPROing is necessary. Strictly speaking, some
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3324 functions that say this might actually GC, but only when it is never
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3325 possible to return (more specifically, in the process of signalling an
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3326 error, the debugger may be invoked, and could GC). For GCPRO purposes,
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3327 you only have to worry about functions that can GC and then return.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3328 The QUIT macro cannot GC any more, although this wasn't true at some point,
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3329 and so some "This function can GC" comments may be inaccurate.
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3330 */
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3331
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3332 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
3333
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3334 #define XGCDECL1(x) struct gcpro x##cpro1
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3335 #define XGCDECL2(x) struct gcpro x##cpro1, x##cpro2
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3336 #define XGCDECL3(x) struct gcpro x##cpro1, x##cpro2, x##cpro3
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3337 #define XGCDECL4(x) struct gcpro x##cpro1, x##cpro2, x##cpro3, x##cpro4
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3338 #define XGCDECL5(x) struct gcpro x##cpro1, x##cpro2, x##cpro3, x##cpro4, x##cpro5
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3339
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3340 #ifdef DEBUG_GCPRO
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3341
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3342 MODULE_API void debug_gcpro1 (Ascbyte *, int, struct gcpro *, Lisp_Object *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3343 MODULE_API void debug_gcpro2 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3344 Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3345 MODULE_API void debug_gcpro3 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3346 struct gcpro *, Lisp_Object *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3347 Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3348 MODULE_API void debug_gcpro4 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3349 struct gcpro *, struct gcpro *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3350 Lisp_Object *, Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3351 MODULE_API void debug_gcpro5 (Ascbyte *, int, struct gcpro *, struct gcpro *,
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3352 struct gcpro *, struct gcpro *, struct gcpro *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3353 Lisp_Object *, Lisp_Object *, Lisp_Object *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3354 Lisp_Object *, Lisp_Object *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3355 MODULE_API void debug_ungcpro(Ascbyte *, int, struct gcpro *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3356
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3357 #define XGCPRO1(x,v) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3358 debug_gcpro1 (__FILE__, __LINE__,&x##cpro1,&v)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3359 #define XGCPRO2(x,v1,v2) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3360 debug_gcpro2 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&v1,&v2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3361 #define XGCPRO3(x,v1,v2,v3) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3362 debug_gcpro3 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&x##cpro3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3363 &v1,&v2,&v3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3364 #define XGCPRO4(x,v1,v2,v3,v4) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3365 debug_gcpro4 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&x##cpro3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3366 &x##cpro4, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3367 &v1,&v2,&v3,&v4)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3368 #define XGCPRO5(x,v1,v2,v3,v4,v5) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3369 debug_gcpro5 (__FILE__, __LINE__,&x##cpro1,&x##cpro2,&x##cpro3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3370 &x##cpro4,&x##cpro5, \
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3371 &v1,&v2,&v3,&v4,&v5)
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3372 #define XUNGCPRO(x) \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3373 debug_ungcpro(__FILE__, __LINE__,&x##cpro1)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3374
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3375 #else /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3376
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3377 #define XGCPRO1(x, var1) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3378 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3379 gcprolist = &x##cpro1 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3380
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3381 #define XGCPRO2(x, var1, var2) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3382 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3383 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3384 gcprolist = &x##cpro2 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3385
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3386 #define XGCPRO3(x, var1, var2, var3) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3387 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3388 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3389 x##cpro3.next = &x##cpro2, x##cpro3.var = &var3, x##cpro3.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3390 gcprolist = &x##cpro3 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3391
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3392 #define XGCPRO4(x, var1, var2, var3, var4) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3393 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3394 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3395 x##cpro3.next = &x##cpro2, x##cpro3.var = &var3, x##cpro3.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3396 x##cpro4.next = &x##cpro3, x##cpro4.var = &var4, x##cpro4.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3397 gcprolist = &x##cpro4 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3398
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3399 #define XGCPRO5(x, var1, var2, var3, var4, var5) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3400 x##cpro1.next = gcprolist, x##cpro1.var = &var1, x##cpro1.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3401 x##cpro2.next = &x##cpro1, x##cpro2.var = &var2, x##cpro2.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3402 x##cpro3.next = &x##cpro2, x##cpro3.var = &var3, x##cpro3.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3403 x##cpro4.next = &x##cpro3, x##cpro4.var = &var4, x##cpro4.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3404 x##cpro5.next = &x##cpro4, x##cpro5.var = &var5, x##cpro5.nvars = 1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3405 gcprolist = &x##cpro5 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3406
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3407 #define XGCPRO1_ARRAY(x, array, n) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3408 x##cpro1.next = gcprolist, x##cpro1.var = array, x##cpro1.nvars = n, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3409 gcprolist = &x##cpro1 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3410
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3411 #define XGCPRO2_ARRAY(x, array1, n1, array2, n2) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3412 x##cpro1.next = gcprolist, x##cpro1.var = array1, x##cpro1.nvars = n1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3413 x##cpro2.next = &x##cpro1, x##cpro2.var = array2, x##cpro2.nvars = n2, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3414 gcprolist = &x##cpro2 ))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3415
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3416 #define XGCPRO3_ARRAY(x, array1, n1, array2, n2, array3, n3) ((void) ( \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3417 x##cpro1.next = gcprolist, x##cpro1.var = array1, x##cpro1.nvars = n1, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3418 x##cpro2.next = &x##cpro1, x##cpro2.var = array2, x##cpro2.nvars = n2, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3419 x##cpro3.next = &x##cpro2, x##cpro3.var = array3, x##cpro3.nvars = n3, \
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3420 gcprolist = &x##cpro3 ))
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3421
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3422 #if defined (__cplusplus) && defined (ERROR_CHECK_GC)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3423 /* We need to reset each gcpro to avoid triggering the assert() in
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3424 ~gcpro(). This happens in UNGCPRO and longjmp(). */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3425 #define UNWIND_GCPRO_TO(val) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3426 do \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3427 { \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3428 struct gcpro *__gcpro_stop = (val); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3429 /* Try to catch UNGCPRO without GCPRO. We arrange for there to be a \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3430 sentinel at the end of the gcprolist, so it should never be NULL. */ \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3431 assert (__gcpro_stop); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3432 while (gcprolist != __gcpro_stop) \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3433 { \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3434 struct gcpro *__gcpro_next = gcprolist->next; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3435 gcprolist->next = 0; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3436 gcprolist = __gcpro_next; \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3437 assert (gcprolist); \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3438 } \
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3439 } while (0)
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3440 #else
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3441 #define UNWIND_GCPRO_TO(val) (gcprolist = (val))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3442 #endif /* defined (__cplusplus) && defined (ERROR_CHECK_GC) */
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3443
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3444 #define XUNGCPRO(x) UNWIND_GCPRO_TO (x##cpro1.next)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3445
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3446 #endif /* ! DEBUG_GCPRO */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3447
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3448 #define GCDECL1 XGCDECL1 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3449 #define GCDECL2 XGCDECL2 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3450 #define GCDECL3 XGCDECL3 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3451 #define GCDECL4 XGCDECL4 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3452 #define GCDECL5 XGCDECL5 (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3453
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3454 #define GCPRO1(a) XGCPRO1 (g,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3455 #define GCPRO2(a,b) XGCPRO2 (g,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3456 #define GCPRO3(a,b,c) XGCPRO3 (g,a,b,c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3457 #define GCPRO4(a,b,c,d) XGCPRO4 (g,a,b,c,d)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3458 #define GCPRO5(a,b,c,d,e) XGCPRO5 (g,a,b,c,d,e)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3459
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3460 #define GCPRO1_ARRAY(a1,n1) XGCPRO1_ARRAY(g,a1,n1)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3461 #define GCPRO2_ARRAY(a1,n1,a2,n2) XGCPRO2_ARRAY (g,a1,n1,a2,n2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3462 #define GCPRO3_ARRAY(a1,n1,a2,n2,a3,n3) XGCPRO3_ARRAY (g,a1,n1,a2,n2,a3,n3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3463
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3464 #define UNGCPRO XUNGCPRO (g)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3465
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3466 #define NGCDECL1 XGCDECL1 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3467 #define NGCDECL2 XGCDECL2 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3468 #define NGCDECL3 XGCDECL3 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3469 #define NGCDECL4 XGCDECL4 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3470 #define NGCDECL5 XGCDECL5 (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3471
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3472 #define NGCPRO1(a) XGCPRO1 (ng,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3473 #define NGCPRO2(a,b) XGCPRO2 (ng,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3474 #define NGCPRO3(a,b,c) XGCPRO3 (ng,a,b,c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3475 #define NGCPRO4(a,b,c,d) XGCPRO4 (ng,a,b,c,d)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3476 #define NGCPRO5(a,b,c,d,e) XGCPRO5 (ng,a,b,c,d,e)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3477
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3478 #define NGCPRO1_ARRAY(a1,n1) XGCPRO1_ARRAY(ng,a1,n1)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3479 #define NGCPRO2_ARRAY(a1,n1,a2,n2) XGCPRO2_ARRAY (ng,a1,n1,a2,n2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3480 #define NGCPRO3_ARRAY(a1,n1,a2,n2,a3,n3) XGCPRO3_ARRAY (ng,a1,n1,a2,n2,a3,n3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3481
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3482 #define NUNGCPRO XUNGCPRO (ng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3483
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3484 #define NNGCDECL1 XGCDECL1 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3485 #define NNGCDECL2 XGCDECL2 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3486 #define NNGCDECL3 XGCDECL3 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3487 #define NNGCDECL4 XGCDECL4 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3488 #define NNGCDECL5 XGCDECL5 (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3489
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3490 #define NNGCPRO1(a) XGCPRO1 (nng,a)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3491 #define NNGCPRO2(a,b) XGCPRO2 (nng,a,b)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3492 #define NNGCPRO3(a,b,c) XGCPRO3 (nng,a,b,c)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3493 #define NNGCPRO4(a,b,c,d) XGCPRO4 (nng,a,b,c,d)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3494 #define NNGCPRO5(a,b,c,d,e) XGCPRO5 (nng,a,b,c,d,e)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3495
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3496 #define NNGCPRO1_ARRAY(a1,n1) XGCPRO1_ARRAY(nng,a1,n1)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3497 #define NNGCPRO2_ARRAY(a1,n1,a2,n2) XGCPRO2_ARRAY (nng,a1,n1,a2,n2)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3498 #define NNGCPRO3_ARRAY(a1,n1,a2,n2,a3,n3) XGCPRO3_ARRAY (nng,a1,n1,a2,n2,a3,n3)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3499
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3500 #define NNUNGCPRO XUNGCPRO (nng)
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3501
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3502 /* Evaluate expr, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3503 #define RETURN_UNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3504 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3505 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3506 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3507 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3508 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3509
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3510 /* Evaluate expr, NUNGCPRO, UNGCPRO, and then return the value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3511 #define RETURN_NUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3512 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3513 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3514 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3515 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3516 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3517 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3518
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3519 /* Evaluate expr, NNUNGCPRO, NUNGCPRO, UNGCPRO, and then return the
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3520 value of expr. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3521 #define RETURN_NNUNGCPRO(expr) do \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3522 { \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3523 Lisp_Object ret_ungc_val = (expr); \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3524 NNUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3525 NUNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3526 UNGCPRO; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3527 RETURN_SANS_WARNINGS ret_ungc_val; \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3528 } while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3529
452
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
3530 extern Lisp_Object_ptr_dynarr *staticpros;
3d3049ae1304 Import from CVS: tag r21-2-41
cvs
parents: 446
diff changeset
3531
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3532 #ifdef DEBUG_XEMACS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3533
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3534 /* Help debug crashes gc-marking a staticpro'ed object. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3535
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3536 MODULE_API void staticpro_1 (Lisp_Object *, Ascbyte *);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3537 MODULE_API void staticpro_nodump_1 (Lisp_Object *, Ascbyte *);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3538 #define staticpro(ptr) staticpro_1 (ptr, #ptr)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3539 #define staticpro_nodump(ptr) staticpro_nodump_1 (ptr, #ptr)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3540
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3541 #ifdef HAVE_SHLIB
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3542 MODULE_API void unstaticpro_nodump_1 (Lisp_Object *, Ascbyte *);
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3543 #define unstaticpro_nodump(ptr) unstaticpro_nodump_1 (ptr, #ptr)
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3544 #endif
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3545
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3546 #else
611
38db05db9cb5 [xemacs-hg @ 2001-06-08 12:21:09 by ben]
ben
parents: 609
diff changeset
3547
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3548 /* Call staticpro (&var) to protect static variable `var'. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3549 MODULE_API void staticpro (Lisp_Object *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3550
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3551 /* Call staticpro_nodump (&var) to protect static variable `var'. */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3552 /* var will not be saved at dump time */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3553 MODULE_API void staticpro_nodump (Lisp_Object *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3554
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3555 #ifdef HAVE_SHLIB
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3556 /* Call unstaticpro_nodump (&var) to stop protecting static variable `var'. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3557 MODULE_API void unstaticpro_nodump (Lisp_Object *);
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3558 #endif
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3559
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3560 #endif
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3561
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3562 #ifdef MC_ALLOC
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3563 extern Lisp_Object_dynarr *mcpros;
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3564 #ifdef DEBUG_XEMACS
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3565 /* Help debug crashes gc-marking a mcpro'ed object. */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3566 MODULE_API void mcpro_1 (Lisp_Object, char *);
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3567 #define mcpro(ptr) mcpro_1 (ptr, #ptr)
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3568 #else /* not DEBUG_XEMACS */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3569 /* Call mcpro (&var) to protect mc variable `var'. */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3570 MODULE_API void mcpro (Lisp_Object);
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3571 #endif /* not DEBUG_XEMACS */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3572 #endif /* MC_ALLOC */
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3573
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3574 void register_post_gc_action (void (*fun) (void *), void *arg);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3575 int begin_gc_forbidden (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3576 void end_gc_forbidden (int count);
1957
59e1bbea04fe [xemacs-hg @ 2004-03-19 02:59:08 by james]
james
parents: 1927
diff changeset
3577 extern int gc_currently_forbidden;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3578
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3579 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
3580
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3581
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3582 /************************************************************************/
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3583 /* Misc definitions */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3584 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3585
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3586 /************************************************************************/
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3587 /* Other numeric types */
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3588 /************************************************************************/
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3589 #ifdef WITH_NUMBER_TYPES
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3590 #include "number.h"
1986
83276542ee26 [xemacs-hg @ 2004-04-06 12:26:36 by stephent]
stephent
parents: 1983
diff changeset
3591 #else
83276542ee26 [xemacs-hg @ 2004-04-06 12:26:36 by stephent]
stephent
parents: 1983
diff changeset
3592 #define make_integer(x) make_int(x)
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3593 #endif
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3594
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3595
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
3596 /************************************************************************/
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3597 /* prototypes */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3598 /************************************************************************/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3599
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3600 /* NOTE: Prototypes should go HERE, not in various header files, unless
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3601 they specifically reference a type that's not defined in lisp.h.
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3602 (And even then, you might consider adding the type to lisp.h.)
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3603
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3604 The idea is that header files typically contain the innards of objects,
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3605 and we want to minimize the number of "dependencies" of one file on
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3606 the specifics of such objects. Putting prototypes here minimizes the
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3607 number of header files that need to be included -- good for a number
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3608 of reasons. --ben */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3609
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3610 /*--------------- prototypes for various public c functions ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3611
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3612 /* Prototypes for all init/syms_of/vars_of initialization functions. */
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3613 #include "symsinit.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3614
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3615 BEGIN_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
3616
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3617 /* Defined in abbrev.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3618 MODULE_API EXFUN (Fexpand_abbrev, 0);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3619
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3620 /* Defined in alloc.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3621 MODULE_API EXFUN (Fcons, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3622 MODULE_API EXFUN (Flist, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3623 EXFUN (Fmake_byte_code, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3624 MODULE_API EXFUN (Fmake_list, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3625 MODULE_API EXFUN (Fmake_string, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3626 MODULE_API EXFUN (Fmake_symbol, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3627 MODULE_API EXFUN (Fmake_vector, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3628 MODULE_API EXFUN (Fvector, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3629
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3630 #ifndef MC_ALLOC
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3631 void release_breathing_space (void);
2720
6fa9919a9a0b [xemacs-hg @ 2005-04-08 23:10:01 by crestani]
crestani
parents: 2645
diff changeset
3632 #endif /* not MC_ALLOC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3633 Lisp_Object noseeum_cons (Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3634 MODULE_API Lisp_Object make_vector (Elemcount, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3635 MODULE_API Lisp_Object vector1 (Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3636 MODULE_API Lisp_Object vector2 (Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3637 MODULE_API Lisp_Object vector3 (Lisp_Object, Lisp_Object, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3638 Lisp_Object make_bit_vector (Elemcount, Lisp_Object);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3639 Lisp_Object make_bit_vector_from_byte_vector (unsigned char *, Elemcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3640 Lisp_Object noseeum_make_marker (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3641 void garbage_collect_1 (void);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3642 MODULE_API Lisp_Object acons (Lisp_Object, Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3643 MODULE_API Lisp_Object cons3 (Lisp_Object, Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3644 MODULE_API Lisp_Object list1 (Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3645 MODULE_API Lisp_Object list2 (Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3646 MODULE_API Lisp_Object list3 (Lisp_Object, Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3647 MODULE_API Lisp_Object list4 (Lisp_Object, Lisp_Object, Lisp_Object,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3648 Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3649 MODULE_API Lisp_Object list5 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3650 Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3651 MODULE_API Lisp_Object list6 (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3652 Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3653 DECLARE_DOESNT_RETURN (memory_full (void));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3654 void disksave_object_finalization (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3655 extern int purify_flag;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3656 extern EMACS_INT gc_generation_number[1];
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3657 int c_readonly (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3658 int lisp_readonly (Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3659 MODULE_API void copy_lisp_object (Lisp_Object dst, Lisp_Object src);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3660 MODULE_API Lisp_Object build_intstring (const Ibyte *);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3661 MODULE_API Lisp_Object build_string (const CIbyte *);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3662 MODULE_API Lisp_Object build_ext_string (const Extbyte *, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3663 MODULE_API Lisp_Object build_msg_intstring (const Ibyte *);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3664 MODULE_API Lisp_Object build_msg_string (const CIbyte *);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3665 MODULE_API Lisp_Object make_string (const Ibyte *, Bytecount);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3666 MODULE_API Lisp_Object make_ext_string (const Extbyte *, EMACS_INT, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3667 void init_string_ascii_begin (Lisp_Object string);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3668 Lisp_Object make_uninit_string (Bytecount);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3669 MODULE_API Lisp_Object make_float (double);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3670 Lisp_Object make_string_nocopy (const Ibyte *, Bytecount);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3671 void free_cons (Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3672 void free_list (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3673 void free_alist (Lisp_Object);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3674 void free_marker (Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3675 int object_dead_p (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3676 void mark_object (Lisp_Object obj);
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1590
diff changeset
3677 #ifdef USE_KKCC
2645
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3678 #ifdef DEBUG_XEMACS
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3679 void kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj, int level, int pos);
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3680 #define kkcc_gc_stack_push_lisp_object(obj, level, pos) \
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3681 kkcc_gc_stack_push_lisp_object_1 (obj, level, pos)
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3682 void kkcc_backtrace (void);
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3683 #else
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3684 void kkcc_gc_stack_push_lisp_object_1 (Lisp_Object obj);
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3685 #define kkcc_gc_stack_push_lisp_object(obj, level, pos) \
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3686 kkcc_gc_stack_push_lisp_object_1 (obj)
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3687 #define kkcc_backtrace()
e6854ec89f8e [xemacs-hg @ 2005-03-10 09:12:36 by crestani]
crestani
parents: 2552
diff changeset
3688 #endif
1598
ac1be85b4a5f [xemacs-hg @ 2003-07-31 13:32:24 by crestani]
crestani
parents: 1590
diff changeset
3689 #endif /* USE_KKCC */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3690 int marked_p (Lisp_Object obj);
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
3691 extern int funcall_allocation_flag;
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
3692 extern int need_to_garbage_collect;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3693 extern MODULE_API int need_to_check_c_alloca;
888
201c016cfc12 [xemacs-hg @ 2002-06-28 14:24:07 by michaels]
michaels
parents: 872
diff changeset
3694 extern int need_to_signal_post_gc;
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
3695 extern Lisp_Object Qpost_gc_hook, Qgarbage_collecting;
851
e7ee5f8bde58 [xemacs-hg @ 2002-05-23 11:46:08 by ben]
ben
parents: 844
diff changeset
3696 void recompute_funcall_allocation_flag (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3697
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3698 #ifdef MEMORY_USAGE_STATS
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3699 Bytecount malloced_storage_size (void *, Bytecount, struct overhead_stats *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3700 Bytecount fixed_type_block_overhead (Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3701 #endif
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3702
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3703 #ifdef EVENT_DATA_AS_OBJECTS
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3704 Lisp_Object make_key_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3705 Lisp_Object make_button_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3706 Lisp_Object make_motion_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3707 Lisp_Object make_process_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3708 Lisp_Object make_timeout_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3709 Lisp_Object make_magic_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3710 Lisp_Object make_magic_eval_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3711 Lisp_Object make_eval_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3712 Lisp_Object make_misc_user_data (void);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3713 void free_key_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3714 void free_button_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3715 void free_motion_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3716 void free_process_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3717 void free_timeout_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3718 void free_magic_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3719 void free_magic_eval_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3720 void free_eval_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3721 void free_misc_user_data (Lisp_Object);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3722 #endif /* EVENT_DATA_AS_OBJECTS */
934
c925bacdda60 [xemacs-hg @ 2002-07-29 09:21:12 by michaels]
michaels
parents: 930
diff changeset
3723
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3724 /* Defined in buffer.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3725 Lisp_Object get_truename_buffer (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3726 void switch_to_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3727 extern int find_file_compare_truenames;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3728 extern int find_file_use_truenames;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3729 Ibyte *get_initial_directory (Ibyte *pathname, Bytecount size);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3730 void set_buffer_internal (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3731 struct buffer *decode_buffer (Lisp_Object buffer, int allow_string);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3732
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3733 void record_buffer (Lisp_Object buf);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3734 Lisp_Object get_buffer (Lisp_Object name,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3735 int error_if_deleted_or_does_not_exist);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3736 int map_over_sharing_buffers (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3737 int (*mapfun) (struct buffer *buf,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3738 void *closure),
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3739 void *closure);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
3740 void cleanup_buffer_undo_lists (void);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3741
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3742 extern struct buffer *current_buffer;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3743
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3744 extern void init_initial_directory (void); /* initialize initial_directory */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3745
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3746 EXFUN (Fbuffer_disable_undo, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3747 MODULE_API EXFUN (Fbuffer_modified_p, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3748 MODULE_API EXFUN (Fbuffer_name, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3749 MODULE_API EXFUN (Fcurrent_buffer, 0);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3750 EXFUN (Ferase_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3751 EXFUN (Fget_buffer, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3752 EXFUN (Fget_buffer_create, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3753 EXFUN (Fget_file_buffer, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3754 MODULE_API EXFUN (Fkill_buffer, 1);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3755 EXFUN (Fother_buffer, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3756 EXFUN (Frecord_buffer, 1);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3757 MODULE_API EXFUN (Fset_buffer, 1);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3758 EXFUN (Fset_buffer_modified_p, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3759
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3760 extern Lisp_Object QSscratch, Qafter_change_function, Qafter_change_functions;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3761 extern Lisp_Object Qbefore_change_function, Qbefore_change_functions;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3762 extern Lisp_Object Qbuffer_or_string_p, Qdefault_directory, Qfirst_change_hook;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3763 extern Lisp_Object Qpermanent_local, Vafter_change_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3764 extern Lisp_Object Vafter_change_functions, Vbefore_change_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3765 extern Lisp_Object Vbefore_change_functions, Vbuffer_alist, Vbuffer_defaults;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3766 extern Lisp_Object Vinhibit_read_only, Vtransient_mark_mode;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3767
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3768 /* Defined in bytecode.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3769 EXFUN (Fbyte_code, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3770
593
5fd7ba8b56e7 [xemacs-hg @ 2001-05-31 12:45:27 by ben]
ben
parents: 578
diff changeset
3771 DECLARE_DOESNT_RETURN (invalid_byte_code
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3772 (const CIbyte *reason, Lisp_Object frob));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3773
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3774 /* Defined in callint.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3775 EXFUN (Fcall_interactively, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3776 EXFUN (Fprefix_numeric_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3777
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3778 /* Defined in casefiddle.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3779 EXFUN (Fdowncase, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3780 EXFUN (Fupcase, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3781 EXFUN (Fupcase_initials, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3782 EXFUN (Fupcase_initials_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3783 EXFUN (Fupcase_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3784
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3785 /* Defined in casetab.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3786 EXFUN (Fset_standard_case_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3787
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3788 /* Defined in chartab.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3789 EXFUN (Freset_char_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3790
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3791 /* Defined in cmds.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3792 EXFUN (Fbeginning_of_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3793 EXFUN (Fend_of_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3794 EXFUN (Fforward_char, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3795 EXFUN (Fforward_line, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3796
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3797 /* Defined in data.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3798 EXFUN (Fadd1, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3799 EXFUN (Faref, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3800 EXFUN (Faset, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3801 EXFUN (Fcar, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3802 EXFUN (Fcar_safe, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3803 EXFUN (Fcdr, 1);
919
111c4f2ed9c9 [xemacs-hg @ 2002-07-14 09:43:52 by adrian]
adrian
parents: 888
diff changeset
3804 EXFUN (Fcdr_safe, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3805 EXFUN (Fgeq, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3806 EXFUN (Fgtr, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3807 EXFUN (Findirect_function, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3808 EXFUN (Fleq, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3809 EXFUN (Flistp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3810 EXFUN (Flss, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3811 EXFUN (Fmax, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3812 EXFUN (Fmin, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3813 EXFUN (Fminus, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3814 EXFUN (Fnumber_to_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3815 EXFUN (Fplus, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3816 EXFUN (Fquo, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3817 EXFUN (Frem, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3818 EXFUN (Fsetcar, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3819 EXFUN (Fsetcdr, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3820 EXFUN (Fsub1, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3821 EXFUN (Fsubr_max_args, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3822 EXFUN (Fsubr_min_args, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3823 EXFUN (Ftimes, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3824
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3825 DECLARE_DOESNT_RETURN (c_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3826 DECLARE_DOESNT_RETURN (lisp_write_error (Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3827 DECLARE_DOESNT_RETURN (args_out_of_range (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3828 DECLARE_DOESNT_RETURN (args_out_of_range_3 (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3829 Lisp_Object));
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3830 MODULE_API Lisp_Object wrong_type_argument (Lisp_Object, Lisp_Object);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3831 MODULE_API
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3832 DECLARE_DOESNT_RETURN (dead_wrong_type_argument (Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3833 void check_int_range (EMACS_INT, EMACS_INT, EMACS_INT);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3834
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3835 EXFUN (Fint_to_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3836 EXFUN (Fchar_to_int, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3837
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3838 enum arith_comparison {
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3839 arith_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3840 arith_notequal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3841 arith_less,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3842 arith_grtr,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3843 arith_less_or_equal,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3844 arith_grtr_or_equal };
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3845 Lisp_Object arithcompare (Lisp_Object, Lisp_Object, enum arith_comparison);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3846
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
3847 /* Do NOT use word_to_lisp or wasteful_word_to_lisp to decode time_t's
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
3848 unless you KNOW arg is non-negative. They cannot return negative
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
3849 values! Use make_time. */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3850 Lisp_Object word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3851 unsigned int lisp_to_word (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3852
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3853 /* Defined in dired.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3854 Lisp_Object make_directory_hash_table (const Ibyte *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3855 Lisp_Object wasteful_word_to_lisp (unsigned int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3856
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3857 /* Defined in doc.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3858 EXFUN (Fsubstitute_command_keys, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3859
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
3860 Lisp_Object unparesseuxify_doc_string (int fd, EMACS_INT position,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3861 Ibyte *name_nonreloc,
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
3862 Lisp_Object name_reloc,
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
3863 int standard_doc_file);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3864 Lisp_Object read_doc_string (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3865
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3866 /* Defined in doprnt.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3867 Bytecount emacs_doprnt_va (Lisp_Object stream, const Ibyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3868 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3869 va_list vargs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3870 Bytecount emacs_doprnt (Lisp_Object stream, const Ibyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3871 Bytecount format_length, Lisp_Object format_reloc,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3872 int nargs, const Lisp_Object *largs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3873 Lisp_Object emacs_vsprintf_string_lisp (const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3874 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3875 const Lisp_Object *largs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3876 Lisp_Object emacs_sprintf_string_lisp (const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3877 Lisp_Object format_reloc, int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3878 Ibyte *emacs_vsprintf_malloc_lisp (const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3879 Lisp_Object format_reloc, int nargs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3880 const Lisp_Object *largs,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3881 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3882 Ibyte *emacs_sprintf_malloc_lisp (Bytecount *len_out,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3883 const CIbyte *format_nonreloc,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3884 Lisp_Object format_reloc, int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3885 Lisp_Object emacs_vsprintf_string (const CIbyte *format, va_list vargs);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3886 Lisp_Object emacs_sprintf_string (const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3887 PRINTF_ARGS (1, 2);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3888 Ibyte *emacs_vsprintf_malloc (const CIbyte *format, va_list vargs,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3889 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3890 Ibyte *emacs_sprintf_malloc (Bytecount *len_out, const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3891 PRINTF_ARGS (2, 3);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3892 Bytecount emacs_vsprintf (Ibyte *output, const CIbyte *format,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3893 va_list vargs);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3894 Bytecount emacs_sprintf (Ibyte *output, const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3895 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3896
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3897
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3898 /* Defined in editfns.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3899 EXFUN (Fbobp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3900 EXFUN (Fbolp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3901 EXFUN (Fbuffer_substring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3902 EXFUN (Fchar_after, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3903 EXFUN (Fchar_to_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3904 EXFUN (Fdelete_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3905 EXFUN (Feobp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3906 EXFUN (Feolp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3907 EXFUN (Ffollowing_char, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3908 EXFUN (Fformat, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3909 EXFUN (Fgoto_char, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3910 EXFUN (Finsert, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3911 EXFUN (Finsert_buffer_substring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3912 EXFUN (Finsert_char, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3913 EXFUN (Fnarrow_to_region, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3914 EXFUN (Fpoint, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3915 EXFUN (Fpoint_marker, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3916 EXFUN (Fpoint_max, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3917 EXFUN (Fpoint_min, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3918 EXFUN (Fpreceding_char, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3919 EXFUN (Fsystem_name, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3920 EXFUN (Fuser_home_directory, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3921 EXFUN (Fuser_login_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3922 EXFUN (Fwiden, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3923
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3924 void uncache_home_directory (void);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3925 Ibyte *get_home_directory (void);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3926 Ibyte *user_login_name (uid_t *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3927 void buffer_insert1 (struct buffer *, Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3928 Lisp_Object make_string_from_buffer (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
3929 Lisp_Object make_string_from_buffer_no_extents (struct buffer *, Charbpos, Charcount);
707
a307f9a2021d [xemacs-hg @ 2001-12-20 05:49:28 by andyp]
andyp
parents: 665
diff changeset
3930 Lisp_Object make_time (time_t);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3931 Lisp_Object save_excursion_save (void);
844
047d37eb70d7 [xemacs-hg @ 2002-05-16 13:30:23 by ben]
ben
parents: 826
diff changeset
3932 Lisp_Object save_restriction_save (struct buffer *buf);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3933 Lisp_Object save_excursion_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3934 Lisp_Object save_restriction_restore (Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3935 void widen_buffer (struct buffer *b, int no_clip);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3936 int beginning_of_line_p (struct buffer *b, Charbpos pt);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3937
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3938 /* Defined in emacsfns.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3939 Lisp_Object save_current_buffer_restore (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3940
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3941 /* Defined in emacs.c */
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3942 EXFUN_NORETURN (Fkill_emacs, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3943 EXFUN (Frunning_temacs_p, 0);
1123
37bdd24225ef [xemacs-hg @ 2002-11-27 07:15:02 by ben]
ben
parents: 1111
diff changeset
3944 EXFUN (Fforce_debugging_signal, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3945
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3946 SIGTYPE fatal_error_signal (int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3947 Lisp_Object make_arg_list (int, Wexttext **);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3948 void make_argc_argv (Lisp_Object, int *, Wexttext ***);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3949 void free_argc_argv (Wexttext **);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3950 Lisp_Object split_external_path (const Extbyte *path);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3951 Lisp_Object split_env_path (const CIbyte *evarname, const Ibyte *default_);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3952
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3953 /* Nonzero means don't do interactive redisplay and don't change tty modes */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3954 extern int noninteractive, noninteractive1;
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
3955 extern int inhibit_non_essential_conversion_operations;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3956 extern int preparing_for_armageddon;
458
c33ae14dd6d0 Import from CVS: tag r21-2-44
cvs
parents: 456
diff changeset
3957 extern Fixnum emacs_priority;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3958 extern int suppress_early_error_handler_backtrace;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3959 void debug_break (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
3960 int debug_can_access_memory (void *ptr, Bytecount len);
2210
9361a78f86a0 [xemacs-hg @ 2004-08-11 02:04:03 by james]
james
parents: 1986
diff changeset
3961 DECLARE_DOESNT_RETURN (really_abort (void));
776
79940b592197 [xemacs-hg @ 2002-03-15 07:43:14 by ben]
ben
parents: 771
diff changeset
3962 void zero_out_command_line_status_vars (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3963
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3964 /* Defined in emodules.c */
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3965 #ifdef HAVE_SHLIB
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3966 EXFUN (Flist_modules, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3967 EXFUN (Fload_module, 3);
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3968 extern int unloading_module;
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
3969 #endif
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3970
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
3971 /* Defined in eval.c */
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
3972 MODULE_API EXFUN (Fapply, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3973 EXFUN (Fbacktrace, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3974 EXFUN (Fcommand_execute, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3975 EXFUN (Fcommandp, 1);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
3976 MODULE_API EXFUN (Feval, 1);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
3977 MODULE_API EXFUN (Ffuncall, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3978 EXFUN (Ffunctionp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3979 EXFUN (Finteractive_p, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3980 EXFUN (Fprogn, UNEVALLED);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
3981 MODULE_API EXFUN (Fsignal, 2);
2268
61855263cb07 [xemacs-hg @ 2004-09-14 14:32:29 by james]
james
parents: 2210
diff changeset
3982 MODULE_API EXFUN_NORETURN (Fthrow, 2);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
3983 MODULE_API EXFUN (Fcall_with_condition_handler, MANY);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3984 EXFUN (Ffunction_max_args, 1);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
3985 EXFUN (Ffunction_min_args, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
3986
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
3987 MODULE_API DECLARE_DOESNT_RETURN (signal_error_1 (Lisp_Object, Lisp_Object));
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3988 void maybe_signal_error_1 (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3989 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3990 Lisp_Object maybe_signal_continuable_error_1 (Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3991 Lisp_Object, Error_Behavior);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3992 MODULE_API DECLARE_DOESNT_RETURN (signal_ferror (Lisp_Object, const CIbyte *,
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
3993 ...)) PRINTF_ARGS(2, 3);
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3994 void maybe_signal_ferror (Lisp_Object, Lisp_Object, Error_Behavior,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3995 const CIbyte *, ...) PRINTF_ARGS (4, 5);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
3996 Lisp_Object signal_continuable_ferror (Lisp_Object, const CIbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
3997 PRINTF_ARGS (2, 3);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
3998 Lisp_Object maybe_signal_continuable_ferror (Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
3999 Error_Behavior,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4000 const CIbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4001 PRINTF_ARGS (4, 5);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4002
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4003 Lisp_Object build_error_data (const CIbyte *reason, Lisp_Object frob);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4004 DECLARE_DOESNT_RETURN (signal_error (Lisp_Object, const CIbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4005 Lisp_Object));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4006 void maybe_signal_error (Lisp_Object, const CIbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4007 Lisp_Object, Error_Behavior);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4008 Lisp_Object signal_continuable_error (Lisp_Object, const CIbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4009 Lisp_Object);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4010 Lisp_Object maybe_signal_continuable_error (Lisp_Object, const CIbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4011 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4012 Lisp_Object, Error_Behavior);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4013 DECLARE_DOESNT_RETURN (signal_ferror_with_frob (Lisp_Object, Lisp_Object,
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4014 const CIbyte *, ...))
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4015 PRINTF_ARGS(3, 4);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4016 void maybe_signal_ferror_with_frob (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4017 Error_Behavior,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4018 const CIbyte *, ...) PRINTF_ARGS (5, 6);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4019 Lisp_Object signal_continuable_ferror_with_frob (Lisp_Object, Lisp_Object,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4020 const CIbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4021 ...) PRINTF_ARGS (3, 4);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4022 Lisp_Object maybe_signal_continuable_ferror_with_frob (Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4023 Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4024 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4025 Error_Behavior,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4026 const CIbyte *, ...)
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4027 PRINTF_ARGS (5, 6);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4028 DECLARE_DOESNT_RETURN (signal_error_2 (Lisp_Object, const CIbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4029 Lisp_Object, Lisp_Object));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4030 void maybe_signal_error_2 (Lisp_Object, const CIbyte *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4031 Lisp_Object, Lisp_Object, Error_Behavior);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4032 Lisp_Object signal_continuable_error_2 (Lisp_Object, const CIbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4033 Lisp_Object, Lisp_Object);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4034 Lisp_Object maybe_signal_continuable_error_2 (Lisp_Object, const CIbyte *,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4035 Lisp_Object, Lisp_Object,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4036 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4037 Error_Behavior);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4038
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4039
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
4040 MODULE_API DECLARE_DOESNT_RETURN (signal_malformed_list_error (Lisp_Object));
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
4041 MODULE_API DECLARE_DOESNT_RETURN (signal_malformed_property_list_error
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
4042 (Lisp_Object));
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
4043 MODULE_API DECLARE_DOESNT_RETURN (signal_circular_list_error (Lisp_Object));
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
4044 MODULE_API DECLARE_DOESNT_RETURN (signal_circular_property_list_error
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
4045 (Lisp_Object));
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
4046
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4047 DECLARE_DOESNT_RETURN (syntax_error (const CIbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
4048 Lisp_Object frob));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4049 DECLARE_DOESNT_RETURN (syntax_error_2 (const CIbyte *reason,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
4050 Lisp_Object frob1,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4051 Lisp_Object frob2));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4052 void maybe_syntax_error (const CIbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4053 Error_Behavior);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4054 DECLARE_DOESNT_RETURN (sferror (const CIbyte *reason, Lisp_Object frob));
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4055 DECLARE_DOESNT_RETURN (sferror_2 (const CIbyte *reason, Lisp_Object frob1,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4056 Lisp_Object frob2));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4057 void maybe_sferror (const CIbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4058 Error_Behavior);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4059 MODULE_API DECLARE_DOESNT_RETURN (invalid_argument (const CIbyte *reason,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4060 Lisp_Object frob));
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4061 MODULE_API DECLARE_DOESNT_RETURN (invalid_argument_2 (const CIbyte *reason,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4062 Lisp_Object frob1,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4063 Lisp_Object frob2));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4064 void maybe_invalid_argument (const CIbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4065 Error_Behavior);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4066 MODULE_API DECLARE_DOESNT_RETURN (invalid_operation (const CIbyte *reason,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4067 Lisp_Object frob));
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4068 MODULE_API DECLARE_DOESNT_RETURN (invalid_operation_2 (const CIbyte *reason,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4069 Lisp_Object frob1,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4070 Lisp_Object frob2));
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4071 MODULE_API void maybe_invalid_operation (const CIbyte *, Lisp_Object,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4072 Lisp_Object, Error_Behavior);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4073 DECLARE_DOESNT_RETURN (invalid_state (const CIbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4074 Lisp_Object frob));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4075 DECLARE_DOESNT_RETURN (invalid_state_2 (const CIbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4076 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4077 Lisp_Object frob2));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4078 void maybe_invalid_state (const CIbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
4079 Error_Behavior);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4080 DECLARE_DOESNT_RETURN (invalid_change (const CIbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4081 Lisp_Object frob));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4082 DECLARE_DOESNT_RETURN (invalid_change_2 (const CIbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4083 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4084 Lisp_Object frob2));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4085 void maybe_invalid_change (const CIbyte *, Lisp_Object, Lisp_Object,
609
13e3d7ae7155 [xemacs-hg @ 2001-06-06 12:34:42 by ben]
ben
parents: 603
diff changeset
4086 Error_Behavior);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4087 MODULE_API DECLARE_DOESNT_RETURN (invalid_constant (const CIbyte *reason,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4088 Lisp_Object frob));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4089 DECLARE_DOESNT_RETURN (invalid_constant_2 (const CIbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4090 Lisp_Object frob1,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4091 Lisp_Object frob2));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4092 void maybe_invalid_constant (const CIbyte *, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4093 Error_Behavior);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4094 DECLARE_DOESNT_RETURN (wtaerror (const CIbyte *reason, Lisp_Object frob));
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4095 MODULE_API DECLARE_DOESNT_RETURN (out_of_memory (const CIbyte *reason,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4096 Lisp_Object frob));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4097 DECLARE_DOESNT_RETURN (stack_overflow (const CIbyte *reason,
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4098 Lisp_Object frob));
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4099 MODULE_API DECLARE_DOESNT_RETURN (printing_unreadable_object (const CIbyte *,
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4100 ...))
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4101 PRINTF_ARGS (1, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4102
436
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
4103 Lisp_Object signal_void_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
4104 Lisp_Object signal_invalid_function_error (Lisp_Object);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
4105 Lisp_Object signal_wrong_number_of_arguments_error (Lisp_Object, int);
080151679be2 Import from CVS: tag r21-2-26
cvs
parents: 434
diff changeset
4106
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4107 Lisp_Object run_hook_with_args_in_buffer (struct buffer *, int, Lisp_Object *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4108 enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4109 Lisp_Object run_hook_with_args (int, Lisp_Object *, enum run_hooks_condition);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4110 void va_run_hook_with_args (Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4111 void va_run_hook_with_args_in_buffer (struct buffer *, Lisp_Object, int, ...);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4112 Lisp_Object run_hook (Lisp_Object);
1706
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4113 MODULE_API Lisp_Object apply1 (Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4114 MODULE_API Lisp_Object call0 (Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4115 MODULE_API Lisp_Object call1 (Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4116 MODULE_API Lisp_Object call2 (Lisp_Object, Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4117 MODULE_API Lisp_Object call3 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4118 Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4119 MODULE_API Lisp_Object call4 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4120 Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4121 MODULE_API Lisp_Object call5 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4122 Lisp_Object, Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4123 MODULE_API Lisp_Object call6 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4124 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4125 Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4126 MODULE_API Lisp_Object call7 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4127 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4128 Lisp_Object, Lisp_Object);
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4129 MODULE_API Lisp_Object call8 (Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4130 Lisp_Object, Lisp_Object, Lisp_Object,
9fc738581a9d [xemacs-hg @ 2003-09-22 03:21:12 by james]
james
parents: 1650
diff changeset
4131 Lisp_Object, Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4132 Lisp_Object call0_in_buffer (struct buffer *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4133 Lisp_Object call1_in_buffer (struct buffer *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4134 Lisp_Object call2_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4135 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4136 Lisp_Object call3_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4137 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4138 Lisp_Object call4_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4139 Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4140 Lisp_Object call5_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4141 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4142 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4143 Lisp_Object call6_in_buffer (struct buffer *, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4144 Lisp_Object, Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4145 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4146 Lisp_Object eval_in_buffer (struct buffer *, Lisp_Object);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4147
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4148 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4149 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4150 int caught_error, caught_throw;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4151 Lisp_Object error_conditions, data;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4152 Lisp_Object backtrace;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4153 Lisp_Object thrown_tag;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4154 Lisp_Object thrown_value;
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4155 };
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4156
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4157 #define NO_INHIBIT_ERRORS (1<<0)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4158 #define NO_INHIBIT_THROWS (1<<1)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4159 #define INTERNAL_INHIBIT_ERRORS (1<<0)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4160 #define INTERNAL_INHIBIT_THROWS (1<<1)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4161 #define INHIBIT_WARNING_ISSUE (1<<2)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4162 #define ISSUE_WARNINGS_AT_DEBUG_LEVEL (1<<3)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4163 #define INHIBIT_QUIT (1<<4)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4164 #define UNINHIBIT_QUIT (1<<5)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4165 #define INHIBIT_GC (1<<6)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4166 #define INHIBIT_EXISTING_PERMANENT_DISPLAY_OBJECT_DELETION (1<<7)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4167 #define INHIBIT_EXISTING_CODING_SYSTEM_DELETION (1<<8)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4168 #define INHIBIT_EXISTING_CHARSET_DELETION (1<<9)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4169 #define INHIBIT_PERMANENT_DISPLAY_OBJECT_CREATION (1<<10)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4170 #define INHIBIT_CODING_SYSTEM_CREATION (1<<11)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4171 #define INHIBIT_CHARSET_CREATION (1<<12)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4172 #define INHIBIT_EXISTING_BUFFER_TEXT_MODIFICATION (1<<13)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4173 #define INHIBIT_ANY_CHANGE_AFFECTING_REDISPLAY (1<<14)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4174 #define INHIBIT_ENTERING_DEBUGGER (1<<15)
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4175 #define CALL_WITH_SUSPENDED_ERRORS (1<<16)
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4176 #define POSTPONE_WARNING_ISSUE (1<<17)
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4177
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4178 enum check_allowed_operation
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4179 {
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4180 OPERATION_DELETE_OBJECT,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4181 OPERATION_CREATE_OBJECT,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4182 OPERATION_MODIFY_BUFFER_TEXT,
1429
969b7290edca [xemacs-hg @ 2003-04-24 05:33:43 by youngs]
youngs
parents: 1346
diff changeset
4183 OPERATION_MODIFY_OBJECT_PROPERTY
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4184 };
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4185
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4186 int get_inhibit_flags (void);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4187 void check_allowed_operation (int what, Lisp_Object obj, Lisp_Object prop);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4188 void note_object_created (Lisp_Object obj);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4189 void note_object_deleted (Lisp_Object obj);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4190 Lisp_Object call_with_condition_handler (Lisp_Object (*handler) (Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4191 Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4192 Lisp_Object),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4193 Lisp_Object handler_arg,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4194 Lisp_Object (*fun) (Lisp_Object),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4195 Lisp_Object arg);
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
4196 int set_trapping_problems_flags (int flags);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4197 Lisp_Object call_trapping_problems (Lisp_Object warning_class,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4198 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4199 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4200 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4201 *problem,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4202 Lisp_Object (*fun) (void *),
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4203 void *arg);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4204 Lisp_Object va_call_trapping_problems (Lisp_Object warning_class,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4205 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4206 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4207 struct call_trapping_problems_result
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4208 *problem,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4209 lisp_fn_t fun, int nargs, ...);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4210 Lisp_Object call0_trapping_problems (const Ascbyte *, Lisp_Object, int);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4211 Lisp_Object call1_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4212 int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4213 Lisp_Object call2_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4214 Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4215 Lisp_Object call3_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4216 Lisp_Object, Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4217 Lisp_Object call4_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4218 Lisp_Object, Lisp_Object, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4219 int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4220 Lisp_Object call5_trapping_problems (const Ascbyte *, Lisp_Object, Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4221 Lisp_Object, Lisp_Object, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4222 Lisp_Object, int);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4223 Lisp_Object eval_in_buffer_trapping_problems (const Ascbyte *, struct buffer *,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4224 Lisp_Object, int);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4225 Lisp_Object run_hook_trapping_problems (Lisp_Object, Lisp_Object, int);
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4226 Lisp_Object safe_run_hook_trapping_problems (Lisp_Object, Lisp_Object, int);
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4227 Lisp_Object run_hook_with_args_in_buffer_trapping_problems (Lisp_Object,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4228 struct buffer *,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4229 int nargs,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4230 Lisp_Object *args,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4231 enum
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4232 run_hooks_condition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4233 cond, int flags);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4234 Lisp_Object run_hook_with_args_trapping_problems (Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4235 int nargs,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4236 Lisp_Object *args,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4237 enum run_hooks_condition
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4238 cond,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4239 int flags);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4240 Lisp_Object va_run_hook_with_args_trapping_problems (Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4241 Lisp_Object hook_var,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4242 int nargs, ...);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4243 Lisp_Object va_run_hook_with_args_in_buffer_trapping_problems (Lisp_Object,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4244 struct buffer *,
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4245 Lisp_Object,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4246 int nargs, ...);
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4247 Lisp_Object call_with_suspended_errors (lisp_fn_t, Lisp_Object,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4248 Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4249 Error_Behavior, int, ...);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4250 /* C Code should be using internal_catch, record_unwind_p, condition_case_1 */
1318
b531bf8658e9 [xemacs-hg @ 2003-02-21 06:56:46 by ben]
ben
parents: 1315
diff changeset
4251 int proper_redisplay_wrapping_in_place (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4252 Lisp_Object internal_catch (Lisp_Object, Lisp_Object (*) (Lisp_Object),
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4253 Lisp_Object, int * volatile,
2532
989a7680c221 [xemacs-hg @ 2005-01-29 09:15:55 by ben]
ben
parents: 2526
diff changeset
4254 Lisp_Object * volatile,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4255 Lisp_Object * volatile);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4256 Lisp_Object condition_case_1 (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4257 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4258 Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4259 Lisp_Object (*) (Lisp_Object, Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4260 Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4261 Lisp_Object condition_case_3 (Lisp_Object, Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4262 MODULE_API Lisp_Object unbind_to_1 (int, Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4263 #define unbind_to(obj) unbind_to_1 (obj, Qnil)
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4264 void specbind (Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4265 MODULE_API int record_unwind_protect (Lisp_Object (*) (Lisp_Object),
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4266 Lisp_Object);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4267 int record_unwind_protect_freeing_dynarr (void *ptr);
1333
1b0339b048ce [xemacs-hg @ 2003-03-02 09:38:37 by ben]
ben
parents: 1318
diff changeset
4268 int record_unwind_protect_restoring_int (int *addr, int val);
802
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
4269 int internal_bind_int (int *addr, int newval);
19dfb459d51a [xemacs-hg @ 2002-04-03 10:47:37 by ben]
ben
parents: 801
diff changeset
4270 int internal_bind_lisp_object (Lisp_Object *addr, Lisp_Object newval);
970
0dc7756a58c4 [xemacs-hg @ 2002-08-22 11:31:39 by stephent]
stephent
parents: 934
diff changeset
4271 void do_autoload (Lisp_Object, Lisp_Object); /* GCPROs both arguments */
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4272 Lisp_Object un_autoload (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4273 void warn_when_safe_lispobj (Lisp_Object, Lisp_Object, Lisp_Object);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4274 MODULE_API void warn_when_safe (Lisp_Object, Lisp_Object, const CIbyte *,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4275 ...) PRINTF_ARGS (3, 4);
1292
f3437b56874d [xemacs-hg @ 2003-02-13 09:57:04 by ben]
ben
parents: 1268
diff changeset
4276 extern int backtrace_with_internal_sections;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4277
1315
70921960b980 [xemacs-hg @ 2003-02-20 08:19:28 by ben]
ben
parents: 1292
diff changeset
4278 extern Lisp_Object Vstack_trace_on_error;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4279
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4280 /* Defined in event-stream.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4281 EXFUN (Faccept_process_output, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4282 EXFUN (Fadd_timeout, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4283 EXFUN (Fdisable_timeout, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4284 EXFUN (Fdiscard_input, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4285 EXFUN (Fdispatch_event, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4286 EXFUN (Fenqueue_eval_event, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4287 EXFUN (Fnext_event, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4288 EXFUN (Fread_key_sequence, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4289 EXFUN (Fsit_for, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4290 EXFUN (Fsleep_for, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4291
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4292 void wait_delaying_user_input (int (*) (void *), void *);
1268
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1261
diff changeset
4293 int detect_input_pending (int how_many);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4294 void reset_this_command_keys (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4295 Lisp_Object enqueue_misc_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4296 Lisp_Object enqueue_misc_user_event_pos (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4297 Lisp_Object, int, int, int, int);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4298 extern int modifier_keys_are_sticky;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4299
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4300 /* Defined in event-Xt.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4301 void signal_special_Xt_user_event (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4302
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4303
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4304 /* Defined in events.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4305 EXFUN (Fcopy_event, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4306 EXFUN (Fevent_to_character, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4307
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4308 void clear_event_resource (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4309 Lisp_Object allocate_event (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4310
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4311 EXFUN (Fevent_x_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4312 EXFUN (Fevent_y_pixel, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4313
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4314
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4315 /* Defined in file-coding.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4316 EXFUN (Fcoding_category_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4317 EXFUN (Fcoding_category_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4318 EXFUN (Fcoding_priority_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4319 EXFUN (Fcoding_system_description, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4320 EXFUN (Fcoding_system_documentation, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4321 EXFUN (Fcoding_system_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4322 EXFUN (Fcoding_system_name, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4323 EXFUN (Fcoding_system_p, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4324 EXFUN (Fcoding_system_property, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4325 EXFUN (Fcoding_system_type, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4326 EXFUN (Fcopy_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4327 EXFUN (Fdecode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4328 EXFUN (Fdecode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4329 EXFUN (Fdecode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4330 EXFUN (Fdefine_coding_system_alias, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4331 EXFUN (Fdetect_coding_region, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4332 EXFUN (Fdefault_encoding_detection_enabled_p, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4333 EXFUN (Fencode_big5_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4334 EXFUN (Fencode_coding_region, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4335 EXFUN (Fencode_shift_jis_char, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4336 EXFUN (Ffind_coding_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4337 EXFUN (Fget_coding_system, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4338 EXFUN (Fmake_coding_system, 4);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4339 EXFUN (Fset_coding_category_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4340 EXFUN (Fset_coding_priority_list, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4341 EXFUN (Fsubsidiary_coding_system, 2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4342
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4343 extern Lisp_Object Qshift_jis, Qiso2022, Qbig5, Qccl;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4344 extern Lisp_Object Qcharset_g0;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4345 extern Lisp_Object Qcharset_g1, Qcharset_g2, Qcharset_g3, Qcoding_system_error;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4346 extern Lisp_Object Qcoding_systemp, Qcr, Qcrlf, Qdecode, Qencode;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4347 extern Lisp_Object Qeol_cr, Qeol_crlf, Qeol_lf, Qeol_type, Qescape_quoted;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4348 extern Lisp_Object Qforce_g0_on_output, Qforce_g1_on_output;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4349 extern Lisp_Object Qforce_g2_on_output, Qforce_g3_on_output;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4350 extern Lisp_Object Qinput_charset_conversion, Qlf, Qlock_shift;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4351 extern Lisp_Object Qmnemonic, Qno_ascii_cntl, Qno_ascii_eol;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4352 extern Lisp_Object Qno_conversion, Qraw_text;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4353 extern Lisp_Object Qno_iso6429, Qoutput_charset_conversion;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4354 extern Lisp_Object Qpost_read_conversion, Qpre_write_conversion, Qseven;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4355 extern Lisp_Object Qshort, Vcoding_system_for_read;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4356 extern Lisp_Object Vcoding_system_for_write;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4357 extern Lisp_Object Vfile_name_coding_system, Vkeyboard_coding_system;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4358 extern Lisp_Object Vterminal_coding_system;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4359 extern Lisp_Object Qcanonicalize_after_coding;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4360 int coding_system_is_for_text_file (Lisp_Object coding_system);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4361 Lisp_Object find_coding_system_for_text_file (Lisp_Object name, int eol_wrap);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4362 MODULE_API Lisp_Object get_coding_system_for_text_file (Lisp_Object name,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4363 int eol_wrap);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4364 int coding_system_is_binary (Lisp_Object coding_system);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4365
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4366
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4367 /* Defined in fileio.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4368 EXFUN (Fdirectory_file_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4369 EXFUN (Fdo_auto_save, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4370 EXFUN (Fexpand_file_name, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4371 EXFUN (Ffile_accessible_directory_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4372 EXFUN (Ffile_directory_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4373 EXFUN (Ffile_executable_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4374 EXFUN (Ffile_exists_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4375 EXFUN (Ffile_name_absolute_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4376 EXFUN (Ffile_name_as_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4377 EXFUN (Ffile_name_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4378 EXFUN (Ffile_name_nondirectory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4379 EXFUN (Ffile_readable_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4380 EXFUN (Ffile_symlink_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4381 EXFUN (Ffile_truename, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4382 EXFUN (Ffind_file_name_handler, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4383 EXFUN (Finsert_file_contents_internal, 7);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4384 EXFUN (Fmake_temp_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4385 EXFUN (Fsubstitute_in_file_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4386 EXFUN (Funhandled_file_name_directory, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4387 EXFUN (Fverify_visited_file_modtime, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4388
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4389 void record_auto_save (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4390 void force_auto_save_soon (void);
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4391 DECLARE_DOESNT_RETURN (report_error_with_errno (Lisp_Object errtype,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4392 const CIbyte *string,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4393 Lisp_Object data));
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4394 DECLARE_DOESNT_RETURN (report_file_type_error (Lisp_Object errtype,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4395 Lisp_Object oserrmess,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4396 const CIbyte *string,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4397 Lisp_Object data));
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4398 DECLARE_DOESNT_RETURN (report_file_error (const CIbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4399 Lisp_Object lisp_strerror (int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4400 Lisp_Object expand_and_dir_to_file (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4401 int internal_delete_file (Lisp_Object);
2526
902d5bd9b75c [xemacs-hg @ 2005-01-28 02:36:11 by ben]
ben
parents: 2516
diff changeset
4402 Ibyte *find_end_of_directory_component (const Ibyte *path,
902d5bd9b75c [xemacs-hg @ 2005-01-28 02:36:11 by ben]
ben
parents: 2516
diff changeset
4403 Bytecount len);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4404
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4405 /* Defined in filelock.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4406 EXFUN (Funlock_buffer, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4407
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4408 void lock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4409 void unlock_file (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4410 void unlock_all_files (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4411 void unlock_buffer (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4412
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4413 /* Defined in floatfns.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4414 EXFUN (Ftruncate, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4415
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4416 double extract_float (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4417
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4418 /* Defined in fns.c */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4419 MODULE_API EXFUN (Fappend, MANY);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4420 EXFUN (Fassoc, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4421 EXFUN (Fassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4422 EXFUN (Fcanonicalize_lax_plist, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4423 EXFUN (Fcanonicalize_plist, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4424 EXFUN (Fcheck_valid_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4425 EXFUN (Fconcat, MANY);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4426 EXFUN (Fcopy_alist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4427 EXFUN (Fcopy_list, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4428 EXFUN (Fcopy_sequence, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4429 EXFUN (Fcopy_tree, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4430 EXFUN (Fdelete, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4431 EXFUN (Fdelq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4432 EXFUN (Fdestructive_alist_to_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4433 EXFUN (Felt, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4434 MODULE_API EXFUN (Fequal, 2);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4435 MODULE_API EXFUN (Fget, 3);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4436 EXFUN (Flast, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4437 EXFUN (Flax_plist_get, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4438 EXFUN (Flax_plist_remprop, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4439 MODULE_API EXFUN (Flength, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4440 EXFUN (Fmapcar, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4441 EXFUN (Fmember, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4442 EXFUN (Fmemq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4443 EXFUN (Fnconc, MANY);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4444 MODULE_API EXFUN (Fnreverse, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4445 EXFUN (Fnthcdr, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4446 EXFUN (Fold_assq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4447 EXFUN (Fold_equal, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4448 EXFUN (Fold_member, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4449 EXFUN (Fold_memq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4450 EXFUN (Fplist_get, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4451 EXFUN (Fplist_member, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4452 EXFUN (Fplist_put, 3);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4453 MODULE_API EXFUN (Fprovide, 1);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4454 MODULE_API EXFUN (Fput, 3);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4455 EXFUN (Frassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4456 EXFUN (Fremassq, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4457 EXFUN (Freplace_list, 2);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4458 MODULE_API EXFUN (Freverse, 1);
1268
fffe735e63ee [xemacs-hg @ 2003-02-07 11:50:50 by ben]
ben
parents: 1261
diff changeset
4459 EXFUN (Fsafe_length, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4460 EXFUN (Fsort, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4461 EXFUN (Fstring_equal, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4462 EXFUN (Fstring_lessp, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4463 EXFUN (Fsubstring, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4464 EXFUN (Fvalid_plist_p, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4465
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4466 Lisp_Object list_sort (Lisp_Object, Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4467 int (*) (Lisp_Object, Lisp_Object, Lisp_Object));
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4468 Lisp_Object merge (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4469
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4470 void bump_string_modiff (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4471 Lisp_Object memq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4472 Lisp_Object assoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4473 Lisp_Object assq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4474 Lisp_Object rassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4475 Lisp_Object delq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4476 Lisp_Object delq_no_quit_and_free_cons (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4477 Lisp_Object remassoc_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4478 Lisp_Object remassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4479 Lisp_Object remrassq_no_quit (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4480
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4481 int plists_differ (Lisp_Object, Lisp_Object, int, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4482 Lisp_Object internal_plist_get (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4483 void internal_plist_put (Lisp_Object *, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4484 int internal_remprop (Lisp_Object *, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4485 Lisp_Object external_plist_get (Lisp_Object *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4486 int, Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4487 void external_plist_put (Lisp_Object *, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4488 Lisp_Object, int, Error_Behavior);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4489 int external_remprop (Lisp_Object *, Lisp_Object, int, Error_Behavior);
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4490 int internal_equal_trapping_problems (Lisp_Object warning_class,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4491 const Ascbyte *warning_string,
853
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4492 int flags,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4493 struct call_trapping_problems_result *p,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4494 int retval,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4495 Lisp_Object obj1, Lisp_Object obj2,
2b6fa2618f76 [xemacs-hg @ 2002-05-28 08:44:22 by ben]
ben
parents: 851
diff changeset
4496 int depth);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4497 int internal_equal (Lisp_Object, Lisp_Object, int);
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
4498 int internal_equalp (Lisp_Object obj1, Lisp_Object obj2, int depth);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4499 Lisp_Object concat2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4500 Lisp_Object concat3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4501 Lisp_Object vconcat2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4502 Lisp_Object vconcat3 (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4503 Lisp_Object nconc2 (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4504 Lisp_Object bytecode_nconc2 (Lisp_Object *);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4505 void check_losing_bytecode (const char *, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4506
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4507 Lisp_Object add_suffix_to_symbol (Lisp_Object symbol,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4508 const Ascbyte *ascii_string);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4509 Lisp_Object add_prefix_to_symbol (const Ascbyte *ascii_string,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4510 Lisp_Object symbol);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4511
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4512 /* Defined in free-hook.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4513 EXFUN (Freally_free, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4514
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4515 /* Defined in glyphs.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4516 EXFUN (Fmake_glyph_internal, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4517
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4518 Error_Behavior decode_error_behavior_flag (Lisp_Object);
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4519 Lisp_Object encode_error_behavior_flag (Error_Behavior);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4520
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4521 /* Defined in glyphs-shared.c */
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4522 void shared_resource_validate (Lisp_Object instantiator);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4523 Lisp_Object shared_resource_normalize (Lisp_Object inst,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4524 Lisp_Object console_type,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4525 Lisp_Object dest_mask,
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4526 Lisp_Object tag);
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4527 extern Lisp_Object Q_resource_type, Q_resource_id;
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4528
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4529 /* Defined in gui.c */
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4530 DECLARE_DOESNT_RETURN (gui_error (const Ascbyte *reason,
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
4531 Lisp_Object frob));
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4532 DECLARE_DOESNT_RETURN (gui_error_2 (const Ascbyte *reason,
569
9cdcb214753f [xemacs-hg @ 2001-05-24 12:20:33 by yoshiki]
yoshiki
parents: 563
diff changeset
4533 Lisp_Object frob0, Lisp_Object frob1));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4534 /* Defined in indent.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4535 EXFUN (Findent_to, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4536 EXFUN (Fvertical_motion, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4537
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4538 int byte_spaces_at_point (struct buffer *, Bytebpos);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4539 int column_at_point (struct buffer *, Charbpos, int);
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
4540 int string_column_at_point (Lisp_Object, Charbpos, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4541 int current_column (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4542 void invalidate_current_column (void);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4543 Charbpos vmotion (struct window *, Charbpos, int, int *);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4544 Charbpos vmotion_pixels (Lisp_Object, Charbpos, int, int, int *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4545
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4546 /* Defined in insdel.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4547 void set_buffer_point (struct buffer *buf, Charbpos pos, Bytebpos bipos);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4548
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4549 /* Defined in intl.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4550 EXFUN (Fgettext, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4551
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4552 /* Defined in keymap.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4553 EXFUN (Fdefine_key, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4554 EXFUN (Fkey_description, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4555 EXFUN (Flookup_key, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4556 EXFUN (Fmake_sparse_keymap, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4557
793
e38acbeb1cae [xemacs-hg @ 2002-03-29 04:46:17 by ben]
ben
parents: 788
diff changeset
4558 void where_is_to_char (Lisp_Object, Eistring *);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4559
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4560 /* Defined in lread.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4561 EXFUN (Fread, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4562
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4563 void ebolify_bytecode_constants (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4564 void close_load_descs (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4565 int locate_file (Lisp_Object, Lisp_Object, Lisp_Object, Lisp_Object *, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4566 EXFUN (Flocate_file_clear_hashing, 1);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4567 int isfloat_string (const char *);
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4568 #ifdef HAVE_RATIO
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4569 int isratio_string (const char *);
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
4570 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4571
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4572 /* Well, I've decided to enable this. -- ben */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4573 /* And I've decided to make it work right. -- sb */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4574 #define LOADHIST
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4575 /* Define the following symbol to enable load history of dumped files */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4576 #define LOADHIST_DUMPED
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4577 /* Define the following symbol to enable load history of C source */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4578 #define LOADHIST_BUILTIN
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4579
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4580 #ifdef LOADHIST /* this is just a stupid idea */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4581 #define LOADHIST_ATTACH(x) \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4582 do { if (initialized) Vcurrent_load_list = Fcons (x, Vcurrent_load_list); } \
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4583 while (0)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4584 #else /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4585 # define LOADHIST_ATTACH(x)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4586 #endif /*! LOADHIST */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4587
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4588 /* Defined in macros.c */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4589 EXFUN (Fexecute_kbd_macro, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4590
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4591 /* Defined in marker.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4592 EXFUN (Fcopy_marker, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4593 EXFUN (Fmake_marker, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4594 EXFUN (Fmarker_buffer, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4595 EXFUN (Fmarker_position, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4596 EXFUN (Fset_marker, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4597 EXFUN (Fset_marker_insertion_type, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4598
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4599 Bytebpos byte_marker_position (Lisp_Object);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4600 Charbpos marker_position (Lisp_Object);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4601 void set_byte_marker_position (Lisp_Object, Bytebpos);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4602 void set_marker_position (Lisp_Object, Charbpos);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4603 void unchain_marker (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4604 Lisp_Object noseeum_copy_marker (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4605 Lisp_Object set_marker_restricted (Lisp_Object, Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4606 #ifdef MEMORY_USAGE_STATS
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4607 int compute_buffer_marker_usage (struct buffer *, struct overhead_stats *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4608 #endif
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4609 void init_buffer_markers (struct buffer *b);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4610 void uninit_buffer_markers (struct buffer *b);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4611
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4612 /* Defined in minibuf.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4613 extern int minibuf_level;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4614 Charcount scmp_1 (const Ibyte *, const Ibyte *, Charcount, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4615 #define scmp(s1, s2, len) scmp_1 (s1, s2, len, completion_ignore_case)
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4616 extern int completion_ignore_case;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4617 int regexp_ignore_completion_p (const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4618 Bytecount, Bytecount);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4619 Lisp_Object clear_echo_area (struct frame *, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4620 Lisp_Object clear_echo_area_from_print (struct frame *, Lisp_Object, int);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4621 void echo_area_append (struct frame *, const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4622 Bytecount, Bytecount, Lisp_Object);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4623 void echo_area_message (struct frame *, const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4624 Bytecount, Bytecount, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4625 Lisp_Object echo_area_status (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4626 int echo_area_active (struct frame *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4627 Lisp_Object echo_area_contents (struct frame *);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4628 void message_internal (const Ibyte *, Lisp_Object, Bytecount, Bytecount);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4629 void message_append_internal (const Ibyte *, Lisp_Object,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4630 Bytecount, Bytecount);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4631 MODULE_API void message (const char *, ...) PRINTF_ARGS (1, 2);
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4632 void message_append (const char *, ...) PRINTF_ARGS (1, 2);
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
4633 void message_no_translate (const char *, ...) PRINTF_ARGS (1, 2);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4634 void clear_message (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4635
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4636 /* Defined in mule-charset.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4637 EXFUN (Fmake_charset, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4638
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4639 extern Lisp_Object Ql2r, Qr2l;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4640
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4641 /* Defined in print.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4642 EXFUN (Fdisplay_error, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4643 EXFUN (Ferror_message_string, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4644 EXFUN (Fprin1, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4645 EXFUN (Fprin1_to_string, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4646 EXFUN (Fprinc, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4647 EXFUN (Fprint, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4648
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4649
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4650 /* Lower-level ways to output data: */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4651 void print_internal (Lisp_Object, Lisp_Object, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4652 void debug_print (Lisp_Object);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4653 void debug_p4 (Lisp_Object obj);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4654 void debug_p3 (Lisp_Object obj);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4655 void debug_short_backtrace (int);
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
4656 void debug_backtrace (void);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4657 /* NOTE: Do not call this with the data of a Lisp_String. Use princ.
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4658 * Note: stream should be defaulted before calling
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4659 * (eg Qnil means stdout, not Vstandard_output, etc) */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4660 MODULE_API void write_c_string (Lisp_Object stream, const CIbyte *str);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4661 /* Same goes for this function. */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4662 MODULE_API void write_string (Lisp_Object stream, const Ibyte *str);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4663 /* Same goes for this function. */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4664 void write_string_1 (Lisp_Object stream, const Ibyte *str, Bytecount size);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4665 void write_eistring (Lisp_Object stream, const Eistring *ei);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4666
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4667 /* Higher-level (printf-style) ways to output data: */
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4668 MODULE_API void write_fmt_string (Lisp_Object stream, const CIbyte *fmt, ...);
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4669 MODULE_API void write_fmt_string_lisp (Lisp_Object stream, const CIbyte *fmt,
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4670 int nargs, ...);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4671 void stderr_out (const CIbyte *, ...) PRINTF_ARGS (1, 2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4672 void stderr_out_lisp (const CIbyte *, int nargs, ...);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4673 void stdout_out (const CIbyte *, ...) PRINTF_ARGS (1, 2);
1346
01c57eb70ae9 [xemacs-hg @ 2003-03-09 02:27:27 by ben]
ben
parents: 1333
diff changeset
4674 void external_out (int dest, const CIbyte *fmt, ...) PRINTF_ARGS (2, 3);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4675 void debug_out (const CIbyte *, ...) PRINTF_ARGS (1, 2);
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
4676 DECLARE_DOESNT_RETURN (fatal (const CIbyte *, ...)) PRINTF_ARGS(1, 2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4677
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4678 /* Internal functions: */
1261
465bd3c7d932 [xemacs-hg @ 2003-02-06 06:35:47 by ben]
ben
parents: 1204
diff changeset
4679 Lisp_Object canonicalize_printcharfun (Lisp_Object printcharfun);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4680 void temp_output_buffer_setup (Lisp_Object);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4681 void temp_output_buffer_show (Lisp_Object, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4682 void print_cons (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4683 void print_vector (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4684 void print_string (Lisp_Object, Lisp_Object, int);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4685 void print_symbol (Lisp_Object, Lisp_Object, int);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4686 void print_float (Lisp_Object, Lisp_Object, int);
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
4687 /* The number of bytes required to store the decimal printed
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
4688 representation of an integral type. Add a few bytes for truncation,
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
4689 optional sign prefix, and null byte terminator.
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
4690 2.40824 == log (256) / log (10).
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
4691
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
4692 We don't use floating point since Sun cc (buggily?) cannot use
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
4693 floating point computations to define a compile-time integral
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
4694 constant. */
603
1c880911c386 [xemacs-hg @ 2001-06-01 08:23:09 by martinb]
martinb
parents: 593
diff changeset
4695 #define DECIMAL_PRINT_SIZE(integral_type) \
614
42bfaea76395 [xemacs-hg @ 2001-06-11 01:55:26 by martinb]
martinb
parents: 611
diff changeset
4696 (((2410824 * sizeof (integral_type)) / 1000000) + 3)
577
910449c92002 [xemacs-hg @ 2001-05-25 10:04:26 by hrvojen]
hrvojen
parents: 569
diff changeset
4697 void long_to_string (char *, long);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4698 extern int print_escape_newlines;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4699 extern MODULE_API int print_readably;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4700 Lisp_Object internal_with_output_to_temp_buffer (Lisp_Object,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4701 Lisp_Object (*) (Lisp_Object),
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4702 Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4703 void float_to_string (char *, double);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4704 void internal_object_printer (Lisp_Object, Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4705
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4706 /* Defined in rangetab.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4707 EXFUN (Fclear_range_table, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4708 EXFUN (Fget_range_table, 3);
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
4709 EXFUN (Fmake_range_table, 1);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4710 EXFUN (Fput_range_table, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4711
2421
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
4712 extern Lisp_Object Qstart_closed_end_open;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
4713 extern Lisp_Object Qstart_open_end_open;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
4714 extern Lisp_Object Qstart_closed_end_closed;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
4715 extern Lisp_Object Qstart_open_end_closed;
ab71ad6ff3dd [xemacs-hg @ 2004-12-06 03:50:53 by ben]
ben
parents: 2367
diff changeset
4716
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4717 void put_range_table (Lisp_Object, EMACS_INT, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4718 int unified_range_table_bytes_needed (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4719 int unified_range_table_bytes_used (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4720 void unified_range_table_copy_data (Lisp_Object, void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4721 Lisp_Object unified_range_table_lookup (void *, EMACS_INT, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4722 int unified_range_table_nentries (void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4723 void unified_range_table_get_range (void *, int, EMACS_INT *, EMACS_INT *,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4724 Lisp_Object *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4725
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4726 /* Defined in search.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4727 EXFUN (Fmatch_beginning, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4728 EXFUN (Fmatch_end, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4729 EXFUN (Fskip_chars_backward, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4730 EXFUN (Fskip_chars_forward, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4731 EXFUN (Fstring_match, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4732
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4733 struct re_pattern_buffer;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4734 struct re_registers;
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4735 Charbpos scan_buffer (struct buffer *, Ichar, Charbpos, Charbpos, EMACS_INT,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4736 EMACS_INT *, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4737 Charbpos find_next_newline (struct buffer *, Charbpos, int);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4738 Charbpos find_next_newline_no_quit (struct buffer *, Charbpos, int);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4739 Bytebpos byte_find_next_newline_no_quit (struct buffer *, Bytebpos, int);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4740 Bytecount byte_find_next_ichar_in_string (Lisp_Object, Ichar, Bytecount,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4741 EMACS_INT);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4742 Charbpos find_before_next_newline (struct buffer *, Charbpos, Charbpos, int);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4743 struct re_pattern_buffer *compile_pattern (Lisp_Object pattern,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4744 struct re_registers *regp,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4745 Lisp_Object translate,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4746 Lisp_Object searchobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4747 struct buffer *searchbuf,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4748 int posix, Error_Behavior errb);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4749 Bytecount fast_string_match (Lisp_Object, const Ibyte *,
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4750 Lisp_Object, Bytecount,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4751 Bytecount, int, Error_Behavior, int);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4752 Bytecount fast_lisp_string_match (Lisp_Object, Lisp_Object);
507
167135c7a7ae [xemacs-hg @ 2001-05-05 10:10:36 by martinb]
martinb
parents: 502
diff changeset
4753 extern Fixnum warn_about_possibly_incompatible_back_references;
502
7039e6323819 [xemacs-hg @ 2001-05-04 22:41:46 by ben]
ben
parents: 490
diff changeset
4754
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4755
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4756 /* Defined in signal.c */
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4757 void init_interrupts_late (void);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4758
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4759 /* Defined in sound.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4760 EXFUN (Fding, 3);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4761
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4762 void init_device_sound (struct device *);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4763 DECLARE_DOESNT_RETURN (report_sound_error (const Ascbyte *, Lisp_Object));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4764
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4765 /* Defined in specifier.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4766 EXFUN (Fadd_spec_to_specifier, 5);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4767 EXFUN (Fspecifier_spec_list, 4);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4768
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4769 Lisp_Object specifier_instance (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4770 Error_Behavior, int, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4771 Lisp_Object specifier_instance_no_quit (Lisp_Object, Lisp_Object, Lisp_Object,
578
190b164ddcac [xemacs-hg @ 2001-05-25 11:26:50 by ben]
ben
parents: 577
diff changeset
4772 Error_Behavior, int, Lisp_Object);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4773
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4774 /* Defined in symbols.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4775 EXFUN (Fboundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4776 EXFUN (Fbuilt_in_variable_type, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4777 EXFUN (Fdefault_boundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4778 EXFUN (Fdefault_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4779 EXFUN (Ffboundp, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4780 EXFUN (Ffset, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4781 EXFUN (Fintern, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4782 EXFUN (Fintern_soft, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4783 EXFUN (Fkill_local_variable, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4784 EXFUN (Fset, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4785 EXFUN (Fset_default, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4786 EXFUN (Fsymbol_function, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4787 EXFUN (Fsymbol_name, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4788 EXFUN (Fsymbol_plist, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4789 EXFUN (Fsymbol_value, 1);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4790
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4791 unsigned int hash_string (const Ibyte *, Bytecount);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4792 Lisp_Object intern_int (const Ibyte *str);
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
4793 MODULE_API Lisp_Object intern (const CIbyte *str);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4794 Lisp_Object intern_converting_underscores_to_dashes (const CIbyte *str);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4795 Lisp_Object oblookup (Lisp_Object, const Ibyte *, Bytecount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4796 void map_obarray (Lisp_Object, int (*) (Lisp_Object, void *), void *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4797 Lisp_Object indirect_function (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4798 Lisp_Object symbol_value_in_buffer (Lisp_Object, Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4799 void kill_buffer_local_variables (struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4800 int symbol_value_buffer_local_info (Lisp_Object, struct buffer *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4801 Lisp_Object find_symbol_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4802 Lisp_Object find_symbol_value_quickly (Lisp_Object, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4803 Lisp_Object top_level_value (Lisp_Object);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4804 void reject_constant_symbols (Lisp_Object sym, Lisp_Object newval,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4805 int function_p,
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4806 Lisp_Object follow_past_lisp_magic);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4807
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4808 /* Defined in syntax.c */
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
4809 Charbpos scan_words (struct buffer *, Charbpos, int);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4810 EXFUN (Fchar_syntax, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4811 EXFUN (Fforward_word, 2);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4812 extern Lisp_Object Vstandard_syntax_table;
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4813 void signal_syntax_table_extent_changed (EXTENT extent);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4814 void signal_syntax_table_extent_adjust (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4815 void init_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4816 void mark_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4817 void uninit_buffer_syntax_cache (struct buffer *buf);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4818 extern Lisp_Object Qsyntax_table;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
4819
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4820 /* Defined in sysdep.c */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4821 long get_random (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4822 void seed_random (long arg);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4823
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4824 /* Defined in text.c */
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4825 void find_charsets_in_ibyte_string (unsigned char *charsets,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4826 const Ibyte *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4827 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4828 void find_charsets_in_ichar_string (unsigned char *charsets,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4829 const Ichar *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4830 Charcount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4831 int ibyte_string_displayed_columns (const Ibyte *str, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4832 int ichar_string_displayed_columns (const Ichar *str, Charcount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4833 Charcount ibyte_string_nonascii_chars (const Ibyte *str, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4834 void convert_ibyte_string_into_ichar_dynarr (const Ibyte *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4835 Bytecount len,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4836 Ichar_dynarr *dyn);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4837 Charcount convert_ibyte_string_into_ichar_string (const Ibyte *str,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4838 Bytecount len,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4839 Ichar *arr);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4840 void convert_ichar_string_into_ibyte_dynarr (Ichar *arr, int nels,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4841 Ibyte_dynarr *dyn);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4842 Ibyte *convert_ichar_string_into_malloced_string (Ichar *arr, int nels,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4843 Bytecount *len_out);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4844 Bytecount copy_text_between_formats (const Ibyte *src, Bytecount srclen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4845 Internal_Format srcfmt,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4846 Lisp_Object srcobj,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4847 Ibyte *dst, Bytecount dstlen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4848 Internal_Format dstfmt,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4849 Lisp_Object dstobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4850 Bytecount *src_used);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4851 Bytecount copy_buffer_text_out (struct buffer *buf, Bytebpos pos,
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4852 Bytecount len, Ibyte *dst, Bytecount dstlen,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4853 Internal_Format dstfmt, Lisp_Object dstobj,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4854 Bytecount *src_used);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4855
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4856 /* flags for get_buffer_pos_char(), get_buffer_range_char(), etc. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4857 /* At most one of GB_COERCE_RANGE and GB_NO_ERROR_IF_BAD should be
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4858 specified. At most one of GB_NEGATIVE_FROM_END and GB_NO_ERROR_IF_BAD
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4859 should be specified. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4860
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4861 #define GB_ALLOW_PAST_ACCESSIBLE (1 << 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4862 #define GB_ALLOW_NIL (1 << 1)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4863 #define GB_CHECK_ORDER (1 << 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4864 #define GB_COERCE_RANGE (1 << 3)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4865 #define GB_NO_ERROR_IF_BAD (1 << 4)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4866 #define GB_NEGATIVE_FROM_END (1 << 5)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4867 #define GB_HISTORICAL_STRING_BEHAVIOR (GB_NEGATIVE_FROM_END | GB_ALLOW_NIL)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4868
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4869 Charbpos get_buffer_pos_char (struct buffer *b, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4870 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4871 Bytebpos get_buffer_pos_byte (struct buffer *b, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4872 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4873 void get_buffer_range_char (struct buffer *b, Lisp_Object from, Lisp_Object to,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4874 Charbpos *from_out, Charbpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4875 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4876 void get_buffer_range_byte (struct buffer *b, Lisp_Object from, Lisp_Object to,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4877 Bytebpos *from_out, Bytebpos *to_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4878 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4879 Charcount get_string_pos_char (Lisp_Object string, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4880 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4881 Bytecount get_string_pos_byte (Lisp_Object string, Lisp_Object pos,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4882 unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4883 void get_string_range_char (Lisp_Object string, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4884 Lisp_Object to, Charcount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4885 Charcount *to_out, unsigned int flags);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4886 void get_string_range_byte (Lisp_Object string, Lisp_Object from,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4887 Lisp_Object to, Bytecount *from_out,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4888 Bytecount *to_out, unsigned int flags);
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4889 Charxpos get_buffer_or_string_pos_char (Lisp_Object object, Lisp_Object pos,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4890 unsigned int flags);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4891 Bytexpos get_buffer_or_string_pos_byte (Lisp_Object object, Lisp_Object pos,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4892 unsigned int flags);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4893 void get_buffer_or_string_range_char (Lisp_Object object, Lisp_Object from,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4894 Lisp_Object to, Charxpos *from_out,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4895 Charxpos *to_out, unsigned int flags);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4896 void get_buffer_or_string_range_byte (Lisp_Object object, Lisp_Object from,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4897 Lisp_Object to, Bytexpos *from_out,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4898 Bytexpos *to_out, unsigned int flags);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4899 Charxpos buffer_or_string_accessible_begin_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4900 Charxpos buffer_or_string_accessible_end_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4901 Bytexpos buffer_or_string_accessible_begin_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4902 Bytexpos buffer_or_string_accessible_end_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4903 Charxpos buffer_or_string_absolute_begin_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4904 Charxpos buffer_or_string_absolute_end_char (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4905 Bytexpos buffer_or_string_absolute_begin_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4906 Bytexpos buffer_or_string_absolute_end_byte (Lisp_Object object);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4907 Charbpos charbpos_clip_to_bounds (Charbpos lower, Charbpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4908 Charbpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4909 Bytebpos bytebpos_clip_to_bounds (Bytebpos lower, Bytebpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4910 Bytebpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4911 Charxpos charxpos_clip_to_bounds (Charxpos lower, Charxpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4912 Charxpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4913 Bytexpos bytexpos_clip_to_bounds (Bytexpos lower, Bytexpos num,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4914 Bytexpos upper);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4915 Charxpos buffer_or_string_clip_to_accessible_char (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4916 Charxpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4917 Bytexpos buffer_or_string_clip_to_accessible_byte (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4918 Bytexpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4919 Charxpos buffer_or_string_clip_to_absolute_char (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4920 Charxpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4921 Bytexpos buffer_or_string_clip_to_absolute_byte (Lisp_Object object,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4922 Bytexpos pos);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
4923
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4924
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4925 #ifdef ENABLE_COMPOSITE_CHARS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4926
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4927 Ichar lookup_composite_char (Ibyte *str, int len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4928 Lisp_Object composite_char_string (Ichar ch);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4929 #endif /* ENABLE_COMPOSITE_CHARS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4930
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4931 EXFUN (Ffind_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4932 EXFUN (Fget_charset, 1);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4933 EXFUN (Fcharset_list, 0);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4934
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4935 extern Lisp_Object Vcharset_ascii;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4936 extern Lisp_Object Vcharset_control_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4937 extern Lisp_Object Vcharset_latin_iso8859_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4938 extern Lisp_Object Vcharset_latin_iso8859_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4939 extern Lisp_Object Vcharset_latin_iso8859_3;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4940 extern Lisp_Object Vcharset_latin_iso8859_4;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4941 extern Lisp_Object Vcharset_thai_tis620;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4942 extern Lisp_Object Vcharset_greek_iso8859_7;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4943 extern Lisp_Object Vcharset_arabic_iso8859_6;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4944 extern Lisp_Object Vcharset_hebrew_iso8859_8;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4945 extern Lisp_Object Vcharset_katakana_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4946 extern Lisp_Object Vcharset_latin_jisx0201;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4947 extern Lisp_Object Vcharset_cyrillic_iso8859_5;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4948 extern Lisp_Object Vcharset_latin_iso8859_9;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4949 extern Lisp_Object Vcharset_japanese_jisx0208_1978;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4950 extern Lisp_Object Vcharset_chinese_gb2312;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4951 extern Lisp_Object Vcharset_japanese_jisx0208;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4952 extern Lisp_Object Vcharset_korean_ksc5601;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4953 extern Lisp_Object Vcharset_japanese_jisx0212;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4954 extern Lisp_Object Vcharset_chinese_cns11643_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4955 extern Lisp_Object Vcharset_chinese_cns11643_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4956 extern Lisp_Object Vcharset_chinese_big5_1;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4957 extern Lisp_Object Vcharset_chinese_big5_2;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4958 extern Lisp_Object Vcharset_composite;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4959
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4960 Ichar Lstream_get_ichar_1 (Lstream *stream, int first_char);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4961 int Lstream_fput_ichar (Lstream *stream, Ichar ch);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4962 void Lstream_funget_ichar (Lstream *stream, Ichar ch);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4963
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4964 DECLARE_INLINE_HEADER (Ibyte *qxestrdup (const Ibyte *s))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4965 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4966 return (Ibyte *) xstrdup ((const Chbyte *) s);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4967 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4968
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4969 DECLARE_INLINE_HEADER (Bytecount qxestrlen (const Ibyte *s))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4970 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4971 return strlen ((const Chbyte *) s);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4972 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4973
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4974 DECLARE_INLINE_HEADER (Charcount qxestrcharlen (const Ibyte *s))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4975 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4976 return bytecount_to_charcount (s, qxestrlen (s));
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4977 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4978
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4979 DECLARE_INLINE_HEADER (int qxestrcmp (const Ibyte *s1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4980 const Ibyte *s2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4981 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4982 return strcmp ((const Chbyte *) s1, (const Chbyte *) s2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4983 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4984
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4985 DECLARE_INLINE_HEADER (int qxestrcmp_ascii (const Ibyte *s1,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4986 const Ascbyte *s2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4987 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4988 return strcmp ((const Chbyte *) s1, s2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4989 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4990
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4991 DECLARE_INLINE_HEADER (int qxestrncmp (const Ibyte *string1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
4992 const Ibyte *string2,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4993 Bytecount count))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4994 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4995 return strncmp ((const Chbyte *) string1, (const Chbyte *) string2,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4996 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4997 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
4998
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
4999 DECLARE_INLINE_HEADER (int qxestrncmp_ascii (const Ibyte *string1,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5000 const Ascbyte *string2,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5001 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5002 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5003 return strncmp ((const Chbyte *) string1, string2, (size_t) count);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5004 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5005
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5006 DECLARE_INLINE_HEADER (Ibyte *qxestrcpy (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5007 const Ibyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5008 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5009 return (Ibyte *) strcpy ((Chbyte *) strDest, (const Chbyte *) strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5010 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5011
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5012 DECLARE_INLINE_HEADER (Ibyte *qxestrcpy_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5013 const Ascbyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5014 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5015 return (Ibyte *) strcpy ((Chbyte *) strDest, strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5016 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5017
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5018 DECLARE_INLINE_HEADER (Ibyte *qxestrncpy (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5019 const Ibyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5020 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5021 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5022 return (Ibyte *) strncpy ((Chbyte *) strDest, (const Chbyte *) strSource,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5023 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5024 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5025
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5026 DECLARE_INLINE_HEADER (Ibyte *qxestrncpy_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5027 const Ascbyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5028 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5029 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5030 return (Ibyte *) strncpy ((Chbyte *) strDest, strSource, (size_t) count);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5031 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5032
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5033 DECLARE_INLINE_HEADER (Ibyte *qxestrcat (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5034 const Ibyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5035 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5036 return (Ibyte *) strcat ((Chbyte *) strDest, (const Chbyte *) strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5037 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5038
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5039 DECLARE_INLINE_HEADER (Ibyte *qxestrcat_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5040 const Ascbyte *strSource))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5041 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5042 return (Ibyte *) strcat ((Chbyte *) strDest, strSource);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5043 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5044
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5045 DECLARE_INLINE_HEADER (Ibyte *qxestrncat (Ibyte *strDest,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5046 const Ibyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5047 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5048 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5049 return (Ibyte *) strncat ((Chbyte *) strDest, (const Chbyte *) strSource,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5050 (size_t) count);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5051 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5052
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5053 DECLARE_INLINE_HEADER (Ibyte *qxestrncat_ascii (Ibyte *strDest,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5054 const Ascbyte *strSource,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5055 Bytecount count))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5056 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5057 return (Ibyte *) strncat ((Chbyte *) strDest, strSource, (size_t) count);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5058 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5059
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5060 DECLARE_INLINE_HEADER (Ibyte *qxestrchr (const Ibyte *s, Ichar c))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5061 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5062 assert (c >= 0 && c <= 255);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5063 return (Ibyte *) strchr ((const Chbyte *) s, c);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5064 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5065
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5066 DECLARE_INLINE_HEADER (Ibyte *qxestrrchr (const Ibyte *s, Ichar c))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5067 {
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5068 assert (c >= 0 && c <= 255);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5069 return (Ibyte *) strrchr ((const Chbyte *) s, c);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5070 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5071
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5072 DECLARE_INLINE_HEADER (Ibyte *qxestrstr (const Ibyte *string1,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5073 const Ibyte *string2))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5074 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5075 return (Ibyte *) strstr ((const Chbyte *) string1, (const Chbyte *) string2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5076 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5077
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5078 DECLARE_INLINE_HEADER (Bytecount qxestrcspn (const Ibyte *string,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5079 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5080 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5081 return (Bytecount) strcspn ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5082 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5083
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5084 DECLARE_INLINE_HEADER (Bytecount qxestrspn (const Ibyte *string,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5085 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5086 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5087 return (Bytecount) strspn ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5088 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5089
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5090 DECLARE_INLINE_HEADER (Ibyte *qxestrpbrk (const Ibyte *string,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5091 const CIbyte *strCharSet))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5092 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5093 return (Ibyte *) strpbrk ((const Chbyte *) string, strCharSet);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5094 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5095
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5096 DECLARE_INLINE_HEADER (Ibyte *qxestrtok (Ibyte *strToken,
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5097 const CIbyte *strDelimit))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5098 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5099 return (Ibyte *) strtok ((Chbyte *) strToken, strDelimit);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5100 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5101
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5102 DECLARE_INLINE_HEADER (double qxestrtod (const Ibyte *nptr,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5103 Ibyte **endptr))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5104 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5105 return strtod ((const Chbyte *) nptr, (Chbyte **) endptr);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5106 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5107
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5108 DECLARE_INLINE_HEADER (long qxestrtol (const Ibyte *nptr, Ibyte **endptr,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5109 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5110 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5111 return strtol ((const Chbyte *) nptr, (Chbyte **) endptr, base);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5112 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5113
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5114 DECLARE_INLINE_HEADER (unsigned long qxestrtoul (const Ibyte *nptr,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5115 Ibyte **endptr,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5116 int base))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5117 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5118 return strtoul ((const Chbyte *) nptr, (Chbyte **) endptr, base);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5119 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5120
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5121 DECLARE_INLINE_HEADER (int qxeatoi (const Ibyte *string))
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5122 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5123 return atoi ((const Chbyte *) string);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5124 }
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5125
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5126 DECLARE_INLINE_HEADER (Ibyte *qxestrupr (Ibyte *s))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5127 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5128 return (Ibyte *) strupr ((Chbyte *) s);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5129 }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5130
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5131 DECLARE_INLINE_HEADER (Ibyte *qxestrlwr (Ibyte *s))
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5132 {
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5133 return (Ibyte *) strlwr ((Chbyte *) s);
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5134 }
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5135
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5136 int qxesprintf (Ibyte *buffer, const CIbyte *format, ...)
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5137 PRINTF_ARGS (2, 3);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5138
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5139 DECLARE_INLINE_HEADER (int qxesscanf_ascii_1 (Ibyte *buffer,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5140 const Ascbyte *format,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5141 void *ptr))
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5142 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5143 /* #### DAMNIT! No vsscanf! */
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5144 return sscanf ((Chbyte *) buffer, format, ptr);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5145 }
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5146
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5147 /* Do not use POSIX locale routines. Not Mule-correct. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5148 #define qxestrcoll DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5149 #define qxestrxfrm DO NOT USE.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5150
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5151 int qxestrcasecmp (const Ibyte *s1, const Ibyte *s2);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5152 int qxestrcasecmp_ascii (const Ibyte *s1, const Ascbyte *s2);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5153 int qxestrcasecmp_i18n (const Ibyte *s1, const Ibyte *s2);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5154 int ascii_strcasecmp (const Ascbyte *s1, const Ascbyte *s2);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5155 int lisp_strcasecmp (Lisp_Object s1, Lisp_Object s2);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5156 int lisp_strcasecmp_i18n (Lisp_Object s1, Lisp_Object s2);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5157 int qxestrncasecmp (const Ibyte *s1, const Ibyte *s2, Bytecount len);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5158 int qxestrncasecmp_ascii (const Ibyte *s1, const Ascbyte *s2,
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5159 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5160 int qxestrncasecmp_i18n (const Ibyte *s1, const Ibyte *s2, Bytecount len);
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5161 int ascii_strncasecmp (const Ascbyte *s1, const Ascbyte *s2,
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5162 Bytecount len);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5163 int qxememcmp (const Ibyte *s1, const Ibyte *s2, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5164 int qxememcmp4 (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5165 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5166 int qxememcasecmp (const Ibyte *s1, const Ibyte *s2, Bytecount len);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5167 int qxememcasecmp4 (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5168 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5169 int qxetextcmp (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5170 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5171 int qxetextcmp_matching (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5172 const Ibyte *s2, Bytecount len2,
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
5173 Charcount *matching);
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5174 int qxetextcasecmp (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5175 const Ibyte *s2, Bytecount len2);
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5176 int qxetextcasecmp_matching (const Ibyte *s1, Bytecount len1,
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5177 const Ibyte *s2, Bytecount len2,
801
2b676dc88c66 [xemacs-hg @ 2002-04-01 03:58:02 by ben]
ben
parents: 800
diff changeset
5178 Charcount *matching);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5179
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5180 void buffer_mule_signal_inserted_region (struct buffer *buf, Charbpos start,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5181 Bytecount bytelength,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5182 Charcount charlength);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5183 void buffer_mule_signal_deleted_region (struct buffer *buf, Charbpos start,
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5184 Charbpos end, Bytebpos byte_start,
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5185 Bytebpos byte_end);
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5186
2367
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5187 typedef struct
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5188 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5189 const char *srctext;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5190 void *dst;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5191 Bytecount dst_size;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5192 } alloca_convert_vals;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5193
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5194 typedef struct
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5195 {
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5196 Dynarr_declare (alloca_convert_vals);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5197 } alloca_convert_vals_dynarr;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5198
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5199 extern alloca_convert_vals_dynarr *active_alloca_convert;
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5200
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5201 MODULE_API int find_pos_of_existing_active_alloca_convert (const char *
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5202 srctext);
ecf1ebac70d8 [xemacs-hg @ 2004-11-04 23:05:23 by ben]
ben
parents: 2268
diff changeset
5203
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5204 /* Defined in unicode.c */
1204
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5205 extern const struct sized_memory_description to_unicode_description;
e22b0213b713 [xemacs-hg @ 2003-01-12 11:07:58 by michaels]
michaels
parents: 1123
diff changeset
5206 extern const struct sized_memory_description from_unicode_description;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5207 void init_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5208 void free_charset_unicode_tables (Lisp_Object charset);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5209 void recalculate_unicode_precedence (void);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5210 extern Lisp_Object Qunicode;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5211 extern Lisp_Object Qutf_16, Qutf_8, Qucs_4, Qutf_7;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5212 #ifdef MEMORY_USAGE_STATS
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5213 Bytecount compute_from_unicode_table_size (Lisp_Object charset,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5214 struct overhead_stats *stats);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5215 Bytecount compute_to_unicode_table_size (Lisp_Object charset,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5216 struct overhead_stats *stats);
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5217 #endif /* MEMORY_USAGE_STATS */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5218
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5219 /* Defined in undo.c */
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5220 EXFUN (Fundo_boundary, 0);
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5221
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5222 Lisp_Object truncate_undo_list (Lisp_Object, int, int);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5223 void record_extent (Lisp_Object, int);
665
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5224 void record_insert (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5225 void record_delete (struct buffer *, Charbpos, Charcount);
fdefd0186b75 [xemacs-hg @ 2001-09-20 06:28:42 by ben]
ben
parents: 647
diff changeset
5226 void record_change (struct buffer *, Charbpos, Charcount);
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5227
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5228 /* Defined in unex*.c */
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5229 #ifdef WIN32_NATIVE
867
804517e16990 [xemacs-hg @ 2002-06-05 09:54:39 by ben]
ben
parents: 858
diff changeset
5230 int unexec (Ibyte *, Ibyte *, uintptr_t, uintptr_t, uintptr_t);
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5231 #else
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5232 int unexec (Extbyte *, Extbyte *, uintptr_t, uintptr_t, uintptr_t);
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5233 #endif
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5234 #ifdef RUN_TIME_REMAP
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5235 int run_time_remap (char *);
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5236 #endif
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5237
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5238 /* Defined in vm-limit.c */
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5239 void memory_warnings (void *, void (*) (const char *));
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5240
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5241 /*--------------- prototypes for constant symbols ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5242
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5243 /* #### We should get rid of this and put the prototypes back up there in
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5244 #### the per-file stuff, where they belong. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5245
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5246 /* Use the following when you have to add a bunch of symbols. */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5247
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5248 /*
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5249
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5250 (defun redo-symbols (beg end)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5251 "Snarf any symbols out of the region and print them into a temporary buffer,
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5252 which is displayed when the function finishes. The symbols are laid out with
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5253 `extern Lisp_Object ' before each one, with as many as can fit on one line
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5254 \(the maximum line width is controlled by the constant `max-line-length' in the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5255 code)."
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5256 (interactive "r")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5257 (save-excursion
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5258 (goto-char beg)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5259 (let (syms)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5260 (while (re-search-forward "\\s-\\(Q[A-Za-z_0-9]+\\)" end t)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5261 (push (match-string 1) syms))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5262 (setq syms (sort syms #'string-lessp))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5263 (with-output-to-temp-buffer "*Symbols*"
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5264 (let* ((col 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5265 (start "extern Lisp_Object ")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5266 (startlen (length start))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5267 ;; with a default-width frame of 80 chars, you can only fit
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5268 ;; 79 before wrapping. you can see this to a lower value if
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5269 ;; you don't want it right up against the right margin.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5270 (max-line-length 79))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5271 (dolist (sym syms)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5272 (cond (;; if something already on line (this will always be the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5273 ;; case except the very first iteration), see what
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5274 ;; space we've got. (need to take into account 2
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5275 ;; for the comma+space, 1 for the semicolon at the
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5276 ;; end.) if enough space, do it.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5277 (and (> col 0) (< (+ col (length sym) 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5278 (1- max-line-length)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5279 (princ ", ")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5280 (princ sym)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5281 (incf col 2)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5282 (incf col (length sym)))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5283 (t
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5284 ;; either we're first iteration or we ran out of space.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5285 ;; if the latter, terminate the previous line. this
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5286 ;; loop is written on purpose so that it always prints
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5287 ;; at least one item, even if that would go over.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5288 (when (> col 0)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5289 (princ ";\n")
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5290 (setq col 0))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5291 (princ start)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5292 (incf col startlen)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5293 (princ sym)
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5294 (incf col (length sym)))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5295 ;; finally terminate the last line.
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5296 (princ ";\n"))))))
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5297
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5298 */
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5299
814
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5300 extern Lisp_Object Qactivate_menubar_hook, Qand_optional, Qand_rest;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5301 extern Lisp_Object Qarith_error, Qarrayp, Qautoload, Qbackground;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5302 extern Lisp_Object Qbackground_pixmap, Qbeginning_of_buffer, Qbitp, Qblinking;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5303 extern Lisp_Object Qbuffer_glyph_p, Qbuffer_live_p, Qbuffer_read_only;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5304 extern Lisp_Object Qbyte_code, Qcall_interactively, Qcategory_designator_p;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5305 extern Lisp_Object Qcategory_table_value_p, Qcdr, Qchar_or_string_p;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5306 extern Lisp_Object Qcharacterp, Qcircular_list, Qcircular_property_list;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5307 extern Lisp_Object Qcolor_pixmap_image_instance_p, Qcommandp;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5308 extern Lisp_Object Qcompletion_ignore_case, Qconsole_live_p, Qconst_specifier;
a634e3b7acc8 [xemacs-hg @ 2002-04-14 12:41:59 by ben]
ben
parents: 802
diff changeset
5309 extern Lisp_Object Qconversion_error, Qcurrent_menubar;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5310 extern Lisp_Object Qcyclic_variable_indirection, Qdefun, Qdevice_live_p, Qdim;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5311 extern Lisp_Object Qdirection, Qdisabled, Qdisabled_command_hook;
930
eaedf30d9d76 [xemacs-hg @ 2002-07-23 08:34:59 by youngs]
youngs
parents: 919
diff changeset
5312 extern Lisp_Object Qdisplay_table, Qdll_error, Qdomain_error, Qediting_error;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5313 extern Lisp_Object Qend_of_buffer, Qend_of_file, Qend_open, Qerror;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5314 extern Lisp_Object Qerror_conditions, Qerror_lacks_explanatory_string;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5315 extern Lisp_Object Qerror_message, Qevent_live_p, Qexit, Qextent_live_p;
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5316 extern Lisp_Object Qexternal_debugging_output, Qfeaturep, Qfile_error;
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5317 extern Lisp_Object Qfile_name_sans_extension, Qfinal;
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 1104
diff changeset
5318 extern Lisp_Object Qforeground, Qformat, Qframe_live_p, Qgraphic;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5319 extern Lisp_Object Qgui_error, Qicon_glyph_p, Qidentity, Qinhibit_quit;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5320 extern Lisp_Object Qinhibit_read_only, Qinteger_char_or_marker_p;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5321 extern Lisp_Object Qinteger_or_char_p, Qinteger_or_marker_p;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5322 extern Lisp_Object Qinteractive, Qinternal_error;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5323 extern Lisp_Object Qinvalid_byte_code, Qinvalid_change, Qinvalid_constant;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5324 extern Lisp_Object Qinvalid_function, Qinvalid_operation;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5325 extern Lisp_Object Qinvalid_read_syntax, Qinvalid_state, Qio_error, Qlambda;
1111
184461bc8de4 [xemacs-hg @ 2002-11-18 06:52:23 by ben]
ben
parents: 1104
diff changeset
5326 extern Lisp_Object Qlayout, Qlist_formation_error, Qlistp, Qload;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5327 extern Lisp_Object Qlong_name, Qmacro, Qmakunbound, Qmalformed_list;
996
25e260cb7994 [xemacs-hg @ 2002-09-10 15:27:02 by james]
james
parents: 980
diff changeset
5328 extern Lisp_Object Qmalformed_property_list, Qmark, Qmodule;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5329 extern Lisp_Object Qmono_pixmap_image_instance_p, Qmouse_leave_buffer_hook;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5330 extern Lisp_Object Qnative_layout, Qnatnump, Qnetwork_error, Qno_catch;
1983
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5331 extern Lisp_Object Qnonnegativep, Qnothing_image_instance_p;
9c872f33ecbe [xemacs-hg @ 2004-04-05 22:49:31 by james]
james
parents: 1957
diff changeset
5332 extern Lisp_Object Qnumber_char_or_marker_p, Qnumberp, Qout_of_memory;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5333 extern Lisp_Object Qoverflow_error, Qpoint, Qpointer_glyph_p;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5334 extern Lisp_Object Qpointer_image_instance_p, Qprint_length;
563
183866b06e0b [xemacs-hg @ 2001-05-24 07:50:48 by ben]
ben
parents: 545
diff changeset
5335 extern Lisp_Object Qprint_string_length, Qprinting_unreadable_object;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5336 extern Lisp_Object Qprogn, Qquit, Qquote, Qrange_error;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5337 extern Lisp_Object Qread_char, Qread_from_minibuffer;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5338 extern Lisp_Object Qreally_early_error_handler, Qregion_beginning;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5339 extern Lisp_Object Qregion_end, Qregistry, Qreverse_direction_charset;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5340 extern Lisp_Object Qrun_hooks, Qsans_modifiers, Qsave_buffers_kill_emacs;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5341 extern Lisp_Object Qself_insert_command, Qself_insert_defer_undo, Qsequencep;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5342 extern Lisp_Object Qset, Qsetting_constant, Qshort_name, Qsingularity_error;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5343 extern Lisp_Object Qsound_error, Qstack_overflow, Qstandard_input;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5344 extern Lisp_Object Qstandard_output, Qstart_open, Qstring_lessp;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5345 extern Lisp_Object Qstructure_formation_error, Qsubwindow;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5346 extern Lisp_Object Qsubwindow_image_instance_p;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5347 extern Lisp_Object Qtext_conversion_error, Qtext_image_instance_p, Qtop_level;
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5348 extern Lisp_Object Qtrue_list_p, Qunderflow_error, Qunderline;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5349 extern Lisp_Object Quser_files_and_directories, Qvalues;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5350 extern Lisp_Object Qvariable_documentation, Qvariable_domain, Qvoid_function;
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5351 extern Lisp_Object Qvoid_variable, Qwindow_live_p, Qwrong_number_of_arguments;
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5352 extern Lisp_Object Qwrong_type_argument, Qyes_or_no_p;
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5353
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5354 extern MODULE_API Lisp_Object Qintegerp, Qinvalid_argument, Qprocess_error;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5355 extern MODULE_API Lisp_Object Qsyntax_error, Qt, Qunbound;
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5356
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5357 #define SYMBOL(fou) extern Lisp_Object fou
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5358 #define SYMBOL_MODULE_API(fou) extern MODULE_API Lisp_Object fou
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5359 #define SYMBOL_KEYWORD(la_cle_est_fou) extern Lisp_Object la_cle_est_fou
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5360 #define SYMBOL_GENERAL(tout_le_monde, est_fou) \
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5361 extern Lisp_Object tout_le_monde
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5362
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5363 #include "general-slots.h"
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5364
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5365 #undef SYMBOL
1632
64eaceca611d [xemacs-hg @ 2003-08-19 02:07:03 by james]
james
parents: 1598
diff changeset
5366 #undef SYMBOL_MODULE_API
442
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5367 #undef SYMBOL_KEYWORD
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5368 #undef SYMBOL_GENERAL
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5369
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5370 /*--------------- prototypes for variables of type Lisp_Object ------------*/
abe6d1db359e Import from CVS: tag r21-2-36
cvs
parents: 440
diff changeset
5371
826
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5372 /* #### We should get rid of this and put the prototypes back up there in
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5373 #### the per-file stuff, where they belong. */
6728e641994e [xemacs-hg @ 2002-05-05 11:30:15 by ben]
ben
parents: 819
diff changeset
5374
446
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
5375 extern Lisp_Object Vactivate_menubar_hook;
1ccc32a20af4 Import from CVS: tag r21-2-38
cvs
parents: 444
diff changeset
5376 extern Lisp_Object Vautoload_queue, Vblank_menubar;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5377 extern Lisp_Object Vcommand_history;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5378 extern Lisp_Object Vcommand_line_args, Vconfigure_info_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5379 extern Lisp_Object Vconfigure_site_directory, Vconfigure_site_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5380 extern Lisp_Object Vconsole_list, Vcontrolling_terminal;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5381 extern Lisp_Object Vcurrent_compiled_function_annotation, Vcurrent_load_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5382 extern Lisp_Object Vcurrent_mouse_event, Vcurrent_prefix_arg, Vdata_directory;
434
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
5383 extern Lisp_Object Vdirectory_sep_char, Vdisabled_command_hook;
9d177e8d4150 Import from CVS: tag r21-2-25
cvs
parents: 430
diff changeset
5384 extern Lisp_Object Vdoc_directory, Vinternal_doc_file_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5385 extern Lisp_Object Vecho_area_buffer, Vemacs_major_version;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5386 extern Lisp_Object Vemacs_minor_version, Vexec_directory, Vexec_path;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5387 extern Lisp_Object Vexecuting_macro, Vfeatures, Vfile_domain;
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5388 extern Lisp_Object Vinvocation_directory, Vinvocation_name;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5389 extern Lisp_Object Vlast_command, Vlast_command_char;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5390 extern Lisp_Object Vlast_command_event, Vlast_input_event;
2548
c4c8a36043be [xemacs-hg @ 2005-02-03 07:11:19 by ben]
ben
parents: 2535
diff changeset
5391 extern Lisp_Object Vload_file_name_internal, Vload_history;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5392 extern Lisp_Object Vload_path, Vmark_even_if_inactive, Vmenubar_configuration;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5393 extern Lisp_Object Vminibuf_preprompt, Vminibuf_prompt, Vminibuffer_zero;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5394 extern Lisp_Object Vmodule_directory, Vmswindows_downcase_file_names;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5395 extern Lisp_Object Vmswindows_get_true_file_attributes, Vobarray;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5396 extern Lisp_Object Vprint_length, Vprint_level, Vprocess_environment;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5397 extern Lisp_Object Vrecent_keys_ring, Vshell_file_name, Vsite_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5398 extern Lisp_Object Vsite_module_directory;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5399 extern Lisp_Object Vstandard_input, Vstandard_output, Vstdio_str;
771
943eaba38521 [xemacs-hg @ 2002-03-13 08:51:24 by ben]
ben
parents: 733
diff changeset
5400 extern Lisp_Object Vsynchronous_sounds, Vsystem_name;
428
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5401 extern Lisp_Object Vthis_command_keys, Vunread_command_event;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5402 extern Lisp_Object Vx_initial_argv_list;
3ecd8885ac67 Import from CVS: tag r21-2-22
cvs
parents:
diff changeset
5403
1927
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5404 extern MODULE_API Lisp_Object Vinhibit_quit, Vquit_flag;
44905d8fae13 [xemacs-hg @ 2004-02-25 17:42:34 by james]
james
parents: 1743
diff changeset
5405
1743
543769b89fed [xemacs-hg @ 2003-10-14 05:02:57 by james]
james
parents: 1726
diff changeset
5406 END_C_DECLS
1650
34abfb24e891 [xemacs-hg @ 2003-08-28 15:44:04 by james]
james
parents: 1632
diff changeset
5407
440
8de8e3f6228a Import from CVS: tag r21-2-28
cvs
parents: 438
diff changeset
5408 #endif /* INCLUDED_lisp_h_ */