Mercurial > emacs
annotate src/msdos.c @ 112364:42e22c4f06b7
Move all DEFVAR'd globals into a structure -- threading infrastructure
* globals.h: New file.
* xterm.h (Vx_pixel_size_width_font_regexp): Remove declaration.
* window.h (Vinitial_window_system, Vminibuf_scroll_window)
(Vwindow_system_version): Remove declaration.
* w32term.h (Vw32_enable_palette)
(Vx_pixel_size_width_font_regexp): Remove declaration.
* w32menu.c (Voverriding_local_map)
(Voverriding_local_map_menu_flag): Remove declaration.
* w32inevt.c (Vw32_alt_is_meta, Vw32_apps_modifier)
(Vw32_capslock_is_shiftlock, Vw32_enable_caps_lock)
(Vw32_enable_num_lock, Vw32_lwindow_modifier)
(Vw32_pass_lwindow_to_system, Vw32_pass_rwindow_to_system)
(Vw32_phantom_key_code, Vw32_recognize_altgr)
(Vw32_rwindow_modifier, Vw32_scroll_lock_modifier)
(w32_use_full_screen_buffer): Remove declaration.
* w32.c (Vsystem_configuration, Vw32_downcase_file_names)
(Vw32_generate_fake_inodes, Vw32_get_true_file_attributes)
(w32_num_mouse_buttons, w32_pipe_read_delay): Remove declaration.
* termopts.h (Vtruncate_partial_width_windows, inverse_video)
(no_redraw_on_reenter, visible_bell): Remove declaration.
* sysdep.c (Vsystem_name): Remove declaration.
* syntax.h (parse_sexp_lookup_properties): Remove declaration.
* menu.h (Vmenu_updating_frame): Remove declaration.
* macros.h (Vexecuting_kbd_macro, executing_kbd_macro_index):
Remove declaration.
* lisp.h (Vafter_init_time, Vafter_load_alist)
(Vauto_save_list_file_name, Vbefore_init_time, Vcommand_history)
(Vcompletion_regexp_list, Vcurrent_load_list)
(Vcurrent_prefix_arg, Vdata_directory, Vdebug_on_error)
(Vdoc_directory, Vdoc_file_name, Vdynamic_library_alist)
(Vexec_directory, Vexec_path, Vexec_suffixes)
(Vface_font_rescale_alist, Vface_ignored_fonts, Vfeatures)
(Vhelp_form, Vhistory_length, Vinhibit_field_text_motion)
(Vinhibit_quit, Vinhibit_read_only, Vinhibit_redisplay)
(Vinstallation_directory, Vinvocation_directory)
(Vinvocation_name, Vload_file_rep_suffixes, Vload_history)
(Vload_suffixes, Vmark_even_if_inactive, Vmemory_full)
(Vmessage_log_max, Vobarray, Vprint_length, Vprint_level)
(Vpurify_flag, Vquit_flag, Vsaved_region_selection)
(Vscalable_fonts_allowed, Vselect_active_regions)
(Vshell_file_name, Vstandard_input, Vstandard_output)
(Vsystem_name, Vtemporary_file_directory, Vthrow_on_input)
(Vtop_level, Vtty_erase_char, Vundo_outer_limit)
(Vuser_login_name, Vwindow_scroll_functions)
(Vwindow_system_version, Vx_no_window_manager)
(Vx_resource_class, Vx_resource_name, baud_rate)
(completion_ignore_case, debug_on_next_call, gc_cons_threshold)
(history_delete_duplicates, inhibit_x_resources)
(last_nonmenu_event, load_in_progress, max_specpdl_size)
(minibuffer_auto_raise, print_escape_newlines, scroll_margin)
(use_dialog_box, use_file_dialog): Remove declaration. Include
globals.h.
* keymap.h (Voverriding_local_map)
(Voverriding_local_map_menu_flag, meta_prefix_char): Remove
declaration.
* keyboard.h (Vdouble_click_time, Vfunction_key_map)
(Vinput_method_function, Vkey_translation_map)
(Vlucid_menu_bar_dirty_flag, Vthis_original_command)
(do_mouse_tracking, extra_keyboard_modifiers)
(num_nonmacro_input_events): Remove declaration.
* intervals.h (Vchar_property_alias_alist)
(Vdefault_text_properties, Vinhibit_point_motion_hooks)
(Vtext_property_default_nonsticky): Remove declaration.
* gtkutil.h (x_gtk_file_dialog_help_text)
(x_gtk_show_hidden_files, x_gtk_use_old_file_dialog)
(x_gtk_whole_detached_tool_bar): Remove declaration.
* frame.h (Vdefault_frame_alist, Vframe_alpha_lower_limit)
(Vmenu_bar_mode, Vmouse_highlight, Vterminal_frame)
(Vtool_bar_mode, Vx_resource_class, Vx_resource_name)
(focus_follows_mouse): Remove declaration.
* fontset.h (Valternate_fontname_alist, Vfontset_alias_alist)
(Vignore_relative_composition, Votf_script_alist)
(Vuse_default_ascent, Vvertical_centering_font_regexp): Remove
declaration.
* font.h (Vfont_log): Remove declaration.
* dosfns.h (Vdos_display_scancodes, Vdos_version)
(Vdos_windows_version, dos_codepage, dos_country_code)
(dos_decimal_point, dos_hyper_key, dos_keyboard_layout)
(dos_keypad_mode, dos_super_key, dos_timezone_offset): Remove
declaration.
* disptab.h (Vglyph_table, Vstandard_display_table): Remove
declaration.
* dispextern.h (Vface_remapping_alist, Vglyphless_char_display)
(Vmouse_autoselect_window, Voverflow_newline_into_fringe)
(Vshow_trailing_whitespace, Vtool_bar_button_margin)
(Vtool_bar_style, cursor_in_echo_area, display_hourglass_p)
(inverse_video, mode_line_in_non_selected_windows)
(tool_bar_button_relief, tool_bar_max_label_size)
(underline_minimum_offset)
(unibyte_display_via_language_environment, x_stretch_cursor_p):
Remove declaration.
* composite.h (Vauto_composition_function)
(Vcomposition_function_table): Remove declaration.
* commands.h (Vexecuting_kbd_macro)
(Vminibuffer_local_completion_map)
(Vminibuffer_local_filename_completion_map)
(Vminibuffer_local_filename_must_match_map)
(Vminibuffer_local_map, Vminibuffer_local_must_match_map)
(Vminibuffer_local_ns_map, Vthis_command)
(Vunread_command_events, cursor_in_echo_area)
(last_command_event, last_nonmenu_event, unread_command_char):
Remove declaration.
* coding.h (Vcoding_system_for_read, Vcoding_system_for_write)
(Vdefault_file_name_coding_system)
(Vdefault_process_coding_system, Vfile_name_coding_system)
(Vlast_coding_system_used, Vlocale_coding_system)
(Vselect_safe_coding_system_function)
(Vtranslation_table_for_input, coding_system_require_warning)
(eol_mnemonic_dos, eol_mnemonic_mac, eol_mnemonic_undecided)
(eol_mnemonic_unix, inherit_process_coding_system): Remove
declaration.
* charset.h (Vcharset_list, Vcurrent_iso639_language): Remove
declaration.
* character.h (Vauto_fill_chars, Vchar_direction_table)
(Vchar_script_table, Vchar_width_table, Vprintable_chars)
(Vscript_representative_chars, Vtranslation_table_vector)
(Vunicode_category_table): Remove declaration.
* ccl.h (Vfont_ccl_encoder_alist): Remove declaration.
* buffer.h (Vafter_change_functions, Vbefore_change_functions)
(Vdeactivate_mark, Vfirst_change_hook, Vtransient_mark_mode)
(inhibit_modification_hooks): Remove declaration.
* xterm.c (syms_of_xterm): Update.
(Vx_alt_keysym, Vx_hyper_keysym, Vx_keysym_table)
(Vx_meta_keysym, Vx_super_keysym, Vx_toolkit_scroll_bars)
(x_mouse_click_focus_ignore_position)
(x_underline_at_descent_line)
(x_use_underline_position_properties): Remove.
* xsmfns.c (syms_of_xsmfns): Update.
(Vx_session_id, Vx_session_previous_id): Remove.
* xsettings.c (syms_of_xsettings): Update.
(Vxft_settings, use_system_font): Remove.
* xselect.c (syms_of_xselect): Update.
(Vselection_converter_alist, Vx_lost_selection_functions)
(Vx_sent_selection_functions, x_selection_timeout): Remove.
* xfns.c (syms_of_xfns): Update.
(Vgtk_version_string, Vmotif_version_string)
(Vx_cursor_fore_pixel, Vx_hourglass_pointer_shape)
(Vx_max_tooltip_size, Vx_mode_pointer_shape)
(Vx_no_window_manager, Vx_nontext_pointer_shape)
(Vx_pixel_size_width_font_regexp, Vx_pointer_shape)
(Vx_sensitive_text_pointer_shape)
(Vx_window_horizontal_drag_shape, x_gtk_file_dialog_help_text)
(x_gtk_show_hidden_files, x_gtk_use_old_file_dialog)
(x_gtk_use_system_tooltips, x_gtk_whole_detached_tool_bar):
Remove.
* xfaces.c (syms_of_xfaces): Update.
(Vface_default_stipple, Vface_font_rescale_alist)
(Vface_ignored_fonts, Vface_new_frame_defaults)
(Vface_remapping_alist, Vfont_list_limit)
(Vscalable_fonts_allowed, Vtty_defined_color_alist): Remove.
* xdisp.c (syms_of_xdisp): Update.
(Vauto_resize_tool_bars, Vblink_cursor_alist)
(Vdisplay_pixels_per_inch, Vfontification_functions)
(Vframe_title_format, Vglobal_mode_string)
(Vglyphless_char_display, Vhourglass_delay, Vhscroll_step)
(Vicon_title_format, Vinhibit_redisplay)
(Vline_number_display_limit, Vline_prefix)
(Vmax_mini_window_height, Vmenu_bar_update_hook)
(Vmenu_updating_frame, Vmessage_log_max)
(Vmouse_autoselect_window, Vnobreak_char_display)
(Voverlay_arrow_position, Voverlay_arrow_string)
(Voverlay_arrow_variable_list, Vredisplay_end_trigger_functions)
(Vresize_mini_windows, Vshow_trailing_whitespace)
(Vtool_bar_border, Vtool_bar_button_margin, Vtool_bar_style)
(Vtruncate_partial_width_windows, Vvoid_text_area_pointer)
(Vwindow_scroll_functions, Vwindow_size_change_functions)
(Vwindow_text_change_functions, Vwrap_prefix)
(auto_raise_tool_bar_buttons_p, automatic_hscrolling_p)
(debug_end_pos, display_hourglass_p, emacs_scroll_step)
(highlight_nonselected_windows, hscroll_margin)
(inhibit_eval_during_redisplay, inhibit_free_realized_faces)
(inhibit_menubar_update, inhibit_try_cursor_movement)
(inhibit_try_window_id, inhibit_try_window_reusing)
(line_number_display_limit_width)
(make_cursor_line_fully_visible_p, message_truncate_lines)
(mode_line_inverse_video, multiple_frames, overline_margin)
(scroll_conservatively, scroll_margin, tool_bar_button_relief)
(tool_bar_max_label_size, underline_minimum_offset)
(unibyte_display_via_language_environment, x_stretch_cursor_p):
Remove.
* window.c (syms_of_window): Update.
(Vminibuf_scroll_window, Vother_window_scroll_buffer)
(Vrecenter_redisplay, Vscroll_preserve_screen_position)
(Vtemp_buffer_show_function, Vwindow_configuration_change_hook)
(Vwindow_point_insertion_type, auto_window_vscroll_p)
(mode_line_in_non_selected_windows, next_screen_context_lines)
(window_min_height, window_min_width): Remove.
(scroll_margin): Remove declaration.
* w32term.c (syms_of_w32term): Update.
(Vw32_capslock_is_shiftlock, Vw32_grab_focus_on_raise)
(Vw32_recognize_altgr, Vw32_swap_mouse_buttons)
(Vx_toolkit_scroll_bars, w32_num_mouse_buttons)
(w32_use_visible_system_caret, x_underline_at_descent_line)
(x_use_underline_position_properties): Remove.
(Vcommand_line_args, Vsystem_name, extra_keyboard_modifiers):
Remove declaration.
* w32select.c (syms_of_w32select): Update.
(Vnext_selection_coding_system, Vselection_coding_system): Remove.
* w32proc.c (syms_of_ntproc): Update.
(Vw32_downcase_file_names, Vw32_generate_fake_inodes)
(Vw32_get_true_file_attributes, Vw32_quote_process_args)
(Vw32_start_process_inherit_error_mode)
(Vw32_start_process_share_console)
(Vw32_start_process_show_window, w32_pipe_read_delay): Remove.
(Vsystem_name): Remove declaration.
* w32font.c (syms_of_w32font): Update.
(Vw32_charset_info_alist): Remove.
* w32fns.c (globals_of_w32fns, syms_of_w32fns): Update.
(Vw32_alt_is_meta, Vw32_apps_modifier, Vw32_bdf_filename_alist)
(Vw32_color_map, Vw32_enable_caps_lock, Vw32_enable_num_lock)
(Vw32_enable_palette, Vw32_lwindow_modifier)
(Vw32_pass_alt_to_system, Vw32_pass_lwindow_to_system)
(Vw32_pass_rwindow_to_system, Vw32_phantom_key_code)
(Vw32_rwindow_modifier, Vw32_scroll_lock_modifier)
(Vx_cursor_fore_pixel, Vx_hourglass_pointer_shape)
(Vx_max_tooltip_size, Vx_mode_pointer_shape)
(Vx_no_window_manager, Vx_nontext_pointer_shape)
(Vx_pixel_size_width_font_regexp, Vx_pointer_shape)
(Vx_sensitive_text_pointer_shape)
(Vx_window_horizontal_drag_shape, w32_ansi_code_page)
(w32_enable_synthesized_fonts, w32_mouse_button_tolerance)
(w32_mouse_move_interval)
(w32_pass_extra_mouse_buttons_to_system)
(w32_pass_multimedia_buttons_to_system, w32_quit_key)
(w32_strict_fontnames, w32_strict_painting): Remove.
(Vhourglass_delay, Vmenu_bar_mode, Vtool_bar_mode)
(Vw32_recognize_altgr, Vwindow_system_version)
(w32_num_mouse_buttons, w32_use_visible_system_caret): Remove
declaration.
* w32console.c (syms_of_ntterm): Update.
(w32_use_full_screen_buffer): Remove.
(Vtty_defined_color_alist): Remove declaration.
* w16select.c (syms_of_win16select): Update.
(Vnext_selection_coding_system, Vselection_coding_system): Remove.
* undo.c (syms_of_undo): Update.
(Vundo_outer_limit, Vundo_outer_limit_function)
(undo_inhibit_record_point, undo_limit, undo_strong_limit):
Remove.
* textprop.c (syms_of_textprop): Update.
(Vchar_property_alias_alist, Vdefault_text_properties)
(Vinhibit_point_motion_hooks, Vtext_property_default_nonsticky):
Remove.
* terminal.c (syms_of_terminal): Update.
(Vdelete_terminal_functions, Vring_bell_function): Remove.
* term.c (syms_of_term): Update.
(Vresume_tty_functions, Vsuspend_tty_functions)
(no_redraw_on_reenter, system_uses_terminfo, visible_cursor):
Remove.
* syntax.c (syms_of_syntax): Update.
(Vfind_word_boundary_function_table, multibyte_syntax_as_symbol)
(open_paren_in_column_0_is_defun_start)
(parse_sexp_ignore_comments, parse_sexp_lookup_properties)
(words_include_escapes): Remove.
* search.c (syms_of_search): Update.
(Vinhibit_changing_match_data, Vsearch_spaces_regexp): Remove.
* process.c (syms_of_process): Update.
(Vprocess_adaptive_read_buffering, Vprocess_connection_type)
(delete_exited_processes): Remove.
* print.c (syms_of_print): Update.
(Vfloat_output_format, Vprint_charset_text_property)
(Vprint_circle, Vprint_continuous_numbering, Vprint_gensym)
(Vprint_length, Vprint_level, Vprint_number_table)
(Vstandard_output, print_escape_multibyte)
(print_escape_newlines, print_escape_nonascii, print_quoted):
Remove.
* msdos.c (syms_of_msdos): Update.
(Vdos_unsupported_char_glyph): Remove.
(unibyte_display_via_language_environment): Remove declaration.
* minibuf.c (syms_of_minibuf): Update.
(Vcompletion_regexp_list, Vhistory_add_new_input)
(Vhistory_length, Vminibuffer_completing_file_name)
(Vminibuffer_completion_confirm)
(Vminibuffer_completion_predicate, Vminibuffer_completion_table)
(Vminibuffer_exit_hook, Vminibuffer_help_form)
(Vminibuffer_history_position, Vminibuffer_history_variable)
(Vminibuffer_prompt_properties, Vminibuffer_setup_hook)
(Vread_buffer_function, Vread_expression_map)
(completion_ignore_case, enable_recursive_minibuffers)
(history_delete_duplicates, minibuffer_allow_text_properties)
(minibuffer_auto_raise, read_buffer_completion_ignore_case):
Remove.
* marker.c (syms_of_marker): Update.
(byte_debug_flag): Remove.
* macros.c (syms_of_macros): Update.
(Vexecuting_kbd_macro, executing_kbd_macro_index): Remove.
* lread.c (syms_of_lread): Update.
(Vafter_load_alist, Vbyte_boolean_vars)
(Vbytecomp_version_regexp, Vcurrent_load_list)
(Veval_buffer_list, Vload_file_name, Vload_file_rep_suffixes)
(Vload_history, Vload_path, Vload_read_function)
(Vload_source_file_function, Vload_suffixes, Vobarray)
(Vold_style_backquotes, Vpreloaded_file_list, Vread_circle)
(Vread_symbol_positions_list, Vread_with_symbol_positions)
(Vsource_directory, Vstandard_input, Vuser_init_file, Vvalues)
(force_load_messages, load_convert_to_unibyte)
(load_dangerous_libraries, load_force_doc_strings)
(load_in_progress): Remove.
* keymap.c (syms_of_keymap): Update.
(Vdefine_key_rebound_commands, Vemulation_mode_map_alists)
(Vminibuffer_local_completion_map)
(Vminibuffer_local_filename_completion_map)
(Vminibuffer_local_filename_must_match_map)
(Vminibuffer_local_map, Vminibuffer_local_must_match_map)
(Vminibuffer_local_ns_map, Vminor_mode_map_alist)
(Vminor_mode_overriding_map_alist, Vwhere_is_preferred_modifier):
Remove.
* keyboard.c (syms_of_keyboard): Update.
(Vauto_save_timeout, Vcommand_error_function)
(Vcommand_hook_internal, Vdeactivate_mark)
(Vdeferred_action_function, Vdeferred_action_list)
(Vdisable_point_adjustment, Vdouble_click_time)
(Vecho_keystrokes, Venable_disabled_menus_and_buttons)
(Vfunction_key_map, Vglobal_disable_point_adjustment)
(Vhelp_char, Vhelp_event_list, Vhelp_form)
(Vinput_method_function, Vinput_method_previous_message)
(Vkey_translation_map, Vlast_event_frame)
(Vlucid_menu_bar_dirty_flag, Vmenu_bar_final_items)
(Vminibuffer_message_timeout, Voverriding_local_map)
(Voverriding_local_map_menu_flag, Vpost_command_hook)
(Vpre_command_hook, Vprefix_help_command)
(Vsaved_region_selection, Vselect_active_regions)
(Vshow_help_function, Vspecial_event_map, Vsuggest_key_bindings)
(Vthis_command, Vthis_command_keys_shift_translated)
(Vthis_original_command, Vthrow_on_input, Vtimer_idle_list)
(Vtimer_list, Vtool_bar_separator_image_expression, Vtop_level)
(Vtty_erase_char, Vunread_command_events)
(Vunread_input_method_events, Vunread_post_input_method_events)
(auto_save_interval, cannot_suspend, do_mouse_tracking)
(double_click_fuzz, extra_keyboard_modifiers)
(inhibit_local_menu_bar_menus, last_command_event)
(last_input_event, last_nonmenu_event, menu_prompt_more_char)
(menu_prompting, meta_prefix_char, num_input_keys)
(num_nonmacro_input_events, polling_period, unread_command_char):
Remove.
* insdel.c (syms_of_insdel): Update.
(Vcombine_after_change_calls, check_markers_debug_flag): Remove.
* indent.c (syms_of_indent): Update.
(indent_tabs_mode): Remove.
* image.c (syms_of_image): Update.
(Vimage_cache_eviction_delay, Vimage_types)
(Vimagemagick_render_type, Vmax_image_size, Vx_bitmap_file_path)
(cross_disabled_images): Remove.
* fringe.c (syms_of_fringe): Update.
(Vfringe_bitmaps, Voverflow_newline_into_fringe): Remove.
* frame.c (syms_of_frame): Update.
(Vdefault_frame_alist, Vdefault_frame_scroll_bars)
(Vdelete_frame_functions, Vframe_alpha_lower_limit)
(Vmake_pointer_invisible, Vmenu_bar_mode, Vmouse_highlight)
(Vmouse_position_function, Vterminal_frame, Vtool_bar_mode)
(Vx_resource_class, Vx_resource_name, focus_follows_mouse):
Remove.
* fontset.c (syms_of_fontset): Update.
(Valternate_fontname_alist, Vfont_encoding_charset_alist)
(Vfontset_alias_alist, Vignore_relative_composition)
(Votf_script_alist, Vuse_default_ascent)
(Vvertical_centering_font_regexp): Remove.
* font.c (syms_of_font): Update.
(Vfont_encoding_alist, Vfont_log, Vfont_slant_table)
(Vfont_weight_table, Vfont_width_table): Remove.
* fns.c (syms_of_fns): Update.
(Vfeatures, use_dialog_box, use_file_dialog): Remove.
* filelock.c (syms_of_filelock): Update.
(Vtemporary_file_directory): Remove.
* fileio.c (syms_of_fileio): Update.
(Vafter_insert_file_functions, Vauto_save_include_big_deletions)
(Vauto_save_list_file_name, Vauto_save_visited_file_name)
(Vdefault_file_name_coding_system, Vfile_name_coding_system)
(Vfile_name_handler_alist, Vinhibit_file_name_handlers)
(Vinhibit_file_name_operation, Vset_auto_coding_function)
(Vwrite_region_annotate_functions)
(Vwrite_region_annotations_so_far)
(Vwrite_region_post_annotation_function)
(delete_by_moving_to_trash, write_region_inhibit_fsync): Remove.
(Vw32_get_true_file_attributes): Remove declaration.
* eval.c (syms_of_eval): Update.
(Vdebug_ignored_errors, Vdebug_on_error, Vdebug_on_signal)
(Vdebugger, Vinhibit_quit, Vmacro_declaration_function)
(Vquit_flag, Vsignal_hook_function, Vstack_trace_on_error)
(debug_on_next_call, debug_on_quit, debugger_may_continue)
(max_lisp_eval_depth, max_specpdl_size): Remove.
* emacs.c (syms_of_emacs): Update.
(Vafter_init_time, Vbefore_init_time, Vcommand_line_args)
(Vdynamic_library_alist, Vemacs_copyright, Vemacs_version)
(Vinstallation_directory, Vinvocation_directory)
(Vinvocation_name, Vkill_emacs_hook, Vpath_separator)
(Vprevious_system_messages_locale, Vprevious_system_time_locale)
(Vsystem_configuration, Vsystem_configuration_options)
(Vsystem_messages_locale, Vsystem_time_locale, Vsystem_type)
(inhibit_x_resources, noninteractive1): Remove.
* editfns.c (syms_of_editfns): Update.
(Vbuffer_access_fontified_property)
(Vbuffer_access_fontify_functions, Vinhibit_field_text_motion)
(Voperating_system_release, Vsystem_name, Vuser_full_name)
(Vuser_login_name, Vuser_real_login_name): Remove.
* dosfns.c (syms_of_dosfns): Update.
(Vdos_display_scancodes, Vdos_version, Vdos_windows_version)
(dos_codepage, dos_country_code, dos_decimal_point)
(dos_hyper_key, dos_keyboard_layout, dos_keypad_mode)
(dos_super_key, dos_timezone_offset): Remove.
* doc.c (syms_of_doc): Update.
(Vbuild_files, Vdoc_file_name): Remove.
* dispnew.c (syms_of_display): Update.
(Vglyph_table, Vinitial_window_system)
(Vredisplay_preemption_period, Vstandard_display_table)
(Vwindow_system_version, baud_rate, cursor_in_echo_area)
(inverse_video, redisplay_dont_pause, visible_bell): Remove.
* dired.c (syms_of_dired): Update.
(Vcompletion_ignored_extensions): Remove.
(Vw32_get_true_file_attributes): Remove declaration.
* dbusbind.c (syms_of_dbusbind): Update.
(Vdbus_debug, Vdbus_registered_buses)
(Vdbus_registered_objects_table): Remove.
* data.c (syms_of_data): Update.
(Vmost_negative_fixnum, Vmost_positive_fixnum): Remove.
* composite.c (syms_of_composite): Update.
(Vauto_composition_function, Vauto_composition_mode)
(Vcompose_chars_after_function, Vcomposition_function_table):
Remove.
* coding.c (syms_of_coding): Update.
(Vcharset_revision_table, Vcoding_category_list)
(Vcoding_system_alist, Vcoding_system_for_read)
(Vcoding_system_for_write, Vcoding_system_list)
(Vdefault_process_coding_system, Venable_character_translation)
(Vfile_coding_system_alist, Vlast_code_conversion_error)
(Vlast_coding_system_used, Vlatin_extra_code_table)
(Vlocale_coding_system, Vnetwork_coding_system_alist)
(Vprocess_coding_system_alist)
(Vselect_safe_coding_system_function)
(Vstandard_translation_table_for_decode)
(Vstandard_translation_table_for_encode)
(Vtranslation_table_for_input, coding_system_require_warning)
(eol_mnemonic_dos, eol_mnemonic_mac, eol_mnemonic_undecided)
(eol_mnemonic_unix, inherit_process_coding_system)
(inhibit_eol_conversion, inhibit_iso_escape_detection)
(inhibit_null_byte_detection): Remove.
* cmds.c (syms_of_cmds): Update.
(Vpost_self_insert_hook): Remove.
* charset.c (syms_of_charset): Update.
(Vcharset_list, Vcharset_map_path, Vcurrent_iso639_language)
(inhibit_load_charset_map): Remove.
* character.c (syms_of_character): Update.
(Vauto_fill_chars, Vchar_direction_table, Vchar_script_table)
(Vchar_width_table, Vprintable_chars)
(Vscript_representative_chars, Vtranslation_table_vector)
(Vunicode_category_table): Remove.
* ccl.c (syms_of_ccl): Update.
(Vcode_conversion_map_vector, Vfont_ccl_encoder_alist)
(Vtranslation_hash_table_vector): Remove.
* category.c (syms_of_category): Update.
(Vword_combining_categories, Vword_separating_categories): Remove.
* callproc.c (syms_of_callproc): Update.
(Vconfigure_info_directory, Vdata_directory, Vdoc_directory)
(Vexec_directory, Vexec_path, Vexec_suffixes)
(Vinitial_environment, Vprocess_environment)
(Vshared_game_score_directory, Vshell_file_name): Remove.
* callint.c (syms_of_callint): Update.
(Vcommand_debug_status, Vcommand_history, Vcurrent_prefix_arg)
(Vmark_even_if_inactive, Vmouse_leave_buffer_hook): Remove.
* bytecode.c (syms_of_bytecode): Update.
(Vbyte_code_meter, byte_metering_on): Remove.
* buffer.c (syms_of_buffer): Update.
(Vafter_change_functions, Vbefore_change_functions)
(Vchange_major_mode_hook, Vfirst_change_hook)
(Vinhibit_read_only, Vkill_buffer_query_functions)
(Vtransient_mark_mode, inhibit_modification_hooks): Remove.
* alloc.c (syms_of_alloc): Update.
(Vgc_cons_percentage, Vgc_elapsed, Vmemory_full)
(Vmemory_signal_data, Vpost_gc_hook, Vpurify_flag)
(cons_cells_consed, floats_consed, garbage_collection_messages)
(gc_cons_threshold, gcs_done, intervals_consed)
(misc_objects_consed, pure_bytes_used, string_chars_consed)
(strings_consed, symbols_consed, vector_cells_consed): Remove.
* lisp.h (DEFVAR_LISP, DEFVAR_LISP_NOPRO, DEFVAR_BOOL)
(DEFVAR_INT): Assume global is in `globals'.
* alloc.c (globals): Define.
| author | Tom Tromey <tromey@redhat.com> |
|---|---|
| date | Tue, 18 Jan 2011 13:45:37 -0700 |
| parents | ef719132ddfa |
| children |
| rev | line source |
|---|---|
|
19871
847fbc8725a9
Switch to raw-text as coding system.
Richard M. Stallman <rms@gnu.org>
parents:
19864
diff
changeset
|
1 /* MS-DOS specific C utilities. -*- coding: raw-text -*- |
|
64770
a0d1312ede66
Update years in copyright notice; nfc.
Thien-Thi Nguyen <ttn@gnuvola.org>
parents:
64084
diff
changeset
|
2 Copyright (C) 1993, 1994, 1995, 1996, 1997, 1999, 2000, 2001, 2002, |
|
112218
376148b31b5e
Add 2011 to FSF/AIST copyright years.
Glenn Morris <rgm@gnu.org>
parents:
106815
diff
changeset
|
3 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011 |
| 79759 | 4 Free Software Foundation, Inc. |
| 5503 | 5 |
| 6 This file is part of GNU Emacs. | |
| 7 | |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
8 GNU Emacs is free software: you can redistribute it and/or modify |
| 5503 | 9 it under the terms of the GNU General Public License as published by |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
10 the Free Software Foundation, either version 3 of the License, or |
|
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
11 (at your option) any later version. |
| 5503 | 12 |
| 13 GNU Emacs is distributed in the hope that it will be useful, | |
| 14 but WITHOUT ANY WARRANTY; without even the implied warranty of | |
| 15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
| 16 GNU General Public License for more details. | |
| 17 | |
| 18 You should have received a copy of the GNU General Public License | |
|
94963
8971ddf55736
Switch to recommended form of GPLv3 permissions notice.
Glenn Morris <rgm@gnu.org>
parents:
92280
diff
changeset
|
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */ |
| 5503 | 20 |
|
7666
13a977e6777a
(dos_rawgetc): Doc fix. Make C-, S-, and M- modifiers
Richard M. Stallman <rms@gnu.org>
parents:
7523
diff
changeset
|
21 /* Contributed by Morten Welinder */ |
| 13179 | 22 /* New display, keyboard, and mouse control by Kim F. Storm */ |
|
7666
13a977e6777a
(dos_rawgetc): Doc fix. Make C-, S-, and M- modifiers
Richard M. Stallman <rms@gnu.org>
parents:
7523
diff
changeset
|
23 |
| 5503 | 24 /* Note: some of the stuff here was taken from end of sysdep.c in demacs. */ |
| 25 | |
| 5980 | 26 #include <config.h> |
| 5503 | 27 |
| 28 #ifdef MSDOS | |
|
105669
68dd71358159
* alloc.c: Do not define struct catchtag.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
103114
diff
changeset
|
29 #include <setjmp.h> |
| 5503 | 30 #include "lisp.h" |
| 31 #include <stdio.h> | |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
32 #include <time.h> |
| 5503 | 33 #include <sys/param.h> |
| 34 #include <sys/time.h> | |
| 35 #include <dos.h> | |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
36 #include <errno.h> |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
37 #include <sys/stat.h> /* for _fixpath */ |
|
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
38 #include <unistd.h> /* for chdir, dup, dup2, etc. */ |
|
42192
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
39 #include <dir.h> /* for getdisk */ |
|
55292
d9dc976b92ba
(top-level): Add "#pragma pack(0)" after <dir.h>, to
Eli Zaretskii <eliz@gnu.org>
parents:
55198
diff
changeset
|
40 #pragma pack(0) /* dir.h does a pack(4), which isn't GCC's default */ |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
41 #include <fcntl.h> |
|
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
42 #include <io.h> /* for setmode */ |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
43 #include <dpmi.h> /* for __dpmi_xxx stuff */ |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
44 #include <sys/farptr.h> /* for _farsetsel, _farnspokeb */ |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
45 #include <libc/dosio.h> /* for _USE_LFN */ |
|
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
46 #include <conio.h> /* for cputs */ |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
47 |
| 5503 | 48 #include "msdos.h" |
| 49 #include "systime.h" | |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
50 #include "frame.h" |
| 5503 | 51 #include "termhooks.h" |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
52 #include "termchar.h" |
| 9572 | 53 #include "dispextern.h" |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
54 #include "dosfns.h" |
| 9572 | 55 #include "termopts.h" |
|
88351
aac41b50c875
Include "character.h" instead of "charset.h".
Kenichi Handa <handa@m17n.org>
parents:
43371
diff
changeset
|
56 #include "character.h" |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
57 #include "coding.h" |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
58 #include "disptab.h" |
| 9572 | 59 #include "window.h" |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
60 #include "buffer.h" |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
61 #include "commands.h" |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
62 #include "blockinput.h" |
| 30711 | 63 #include "keyboard.h" |
|
52308
00e2bb6c6d5b
Include intervals.h, since STRING_INTERVALS requires that.
Eli Zaretskii <eliz@gnu.org>
parents:
51571
diff
changeset
|
64 #include "intervals.h" |
| 5503 | 65 #include <go32.h> |
| 66 #include <pc.h> | |
| 67 #include <ctype.h> | |
| 68 /* #include <process.h> */ | |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
69 /* Damn that local process.h! Instead we can define P_WAIT and |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
70 spawnve ourselves. */ |
| 5503 | 71 #define P_WAIT 1 |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
72 extern int spawnve (int, const char *, char *const [], char *const []); |
| 5503 | 73 |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
74 #ifndef _USE_LFN |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
75 #define _USE_LFN 0 |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
76 #endif |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
77 |
|
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
78 #ifndef _dos_ds |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
79 #define _dos_ds _go32_info_block.selector_for_linear_memory |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
80 #endif |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
81 |
| 14999 | 82 #include <signal.h> |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
83 #include "syssignal.h" |
| 14999 | 84 |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
85 #ifndef SYSTEM_MALLOC |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
86 |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
87 #ifdef GNU_MALLOC |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
88 |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
89 /* If other `malloc' than ours is used, force our `sbrk' behave like |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
90 Unix programs expect (resize memory blocks to keep them contiguous). |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
91 If `sbrk' from `ralloc.c' is NOT used, also zero-out sbrk'ed memory, |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
92 because that's what `gmalloc' expects to get. */ |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
93 #include <crt0.h> |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
94 |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
95 #ifdef REL_ALLOC |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
96 int _crt0_startup_flags = _CRT0_FLAG_UNIX_SBRK; |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
97 #else /* not REL_ALLOC */ |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
98 int _crt0_startup_flags = (_CRT0_FLAG_UNIX_SBRK | _CRT0_FLAG_FILL_SBRK_MEMORY); |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
99 #endif /* not REL_ALLOC */ |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
100 #endif /* GNU_MALLOC */ |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
101 |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
102 #endif /* not SYSTEM_MALLOC */ |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
103 |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
104 static unsigned long |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
105 event_timestamp (void) |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
106 { |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
107 struct time t; |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
108 unsigned long s; |
| 45332 | 109 |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
110 gettime (&t); |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
111 s = t.ti_min; |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
112 s *= 60; |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
113 s += t.ti_sec; |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
114 s *= 1000; |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
115 s += t.ti_hund * 10; |
| 45332 | 116 |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
117 return s; |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
118 } |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
119 |
| 13179 | 120 |
| 121 /* ------------------------ Mouse control --------------------------- | |
| 122 * | |
| 123 * Coordinates are in screen positions and zero based. | |
| 124 * Mouse buttons are numbered from left to right and also zero based. | |
| 125 */ | |
| 5503 | 126 |
|
28553
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
127 /* This used to be in termhooks.h, but mainstream Emacs code no longer |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
128 uses it, and it was removed... */ |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
129 #define NUM_MOUSE_BUTTONS (5) |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
130 |
| 13179 | 131 int have_mouse; /* 0: no, 1: enabled, -1: disabled */ |
| 132 static int mouse_visible; | |
| 5503 | 133 |
| 13179 | 134 static int mouse_last_x; |
| 135 static int mouse_last_y; | |
| 5503 | 136 |
| 13179 | 137 static int mouse_button_translate[NUM_MOUSE_BUTTONS]; |
| 138 static int mouse_button_count; | |
| 5503 | 139 |
| 13179 | 140 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
141 mouse_on (void) |
| 13179 | 142 { |
| 143 union REGS regs; | |
| 5503 | 144 |
| 13179 | 145 if (have_mouse > 0 && !mouse_visible) |
| 146 { | |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
147 struct tty_display_info *tty = CURTTY (); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
148 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
149 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
150 fprintf (tty->termscript, "<M_ON>"); |
| 13179 | 151 regs.x.ax = 0x0001; |
| 152 int86 (0x33, ®s, ®s); | |
| 153 mouse_visible = 1; | |
| 5503 | 154 } |
| 155 } | |
| 156 | |
| 13179 | 157 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
158 mouse_off (void) |
| 5503 | 159 { |
| 13179 | 160 union REGS regs; |
| 5503 | 161 |
| 13179 | 162 if (have_mouse > 0 && mouse_visible) |
| 5503 | 163 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
164 struct tty_display_info *tty = CURTTY (); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
165 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
166 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
167 fprintf (tty->termscript, "<M_OFF>"); |
| 13179 | 168 regs.x.ax = 0x0002; |
| 169 int86 (0x33, ®s, ®s); | |
| 170 mouse_visible = 0; | |
| 5503 | 171 } |
| 172 } | |
| 173 | |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
174 static void |
|
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
175 mouse_setup_buttons (int n_buttons) |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
176 { |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
177 if (n_buttons == 3) |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
178 { |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
179 mouse_button_count = 3; |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
180 mouse_button_translate[0] = 0; /* Left */ |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
181 mouse_button_translate[1] = 2; /* Middle */ |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
182 mouse_button_translate[2] = 1; /* Right */ |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
183 } |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
184 else /* two, what else? */ |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
185 { |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
186 mouse_button_count = 2; |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
187 mouse_button_translate[0] = 0; |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
188 mouse_button_translate[1] = 1; |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
189 } |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
190 } |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
191 |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
192 DEFUN ("msdos-set-mouse-buttons", Fmsdos_set_mouse_buttons, Smsdos_set_mouse_buttons, |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
193 1, 1, "NSet number of mouse buttons to: ", |
|
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
194 doc: /* Set the number of mouse buttons to use by Emacs. |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
195 This is useful with mice that report the number of buttons inconsistently, |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
196 e.g., if the number of buttons is reported as 3, but Emacs only sees 2 of |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
197 them. This happens with wheeled mice on Windows 9X, for example. */) |
|
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
198 (Lisp_Object nbuttons) |
|
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
199 { |
|
34561
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
200 int n; |
|
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
201 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40082
diff
changeset
|
202 CHECK_NUMBER (nbuttons); |
|
34561
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
203 n = XINT (nbuttons); |
|
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
204 if (n < 2 || n > 3) |
|
71986
de36a2bee064
(Fmsdos_set_mouse_buttons): Use xsignal2.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
205 xsignal2 (Qargs_out_of_range, |
|
de36a2bee064
(Fmsdos_set_mouse_buttons): Use xsignal2.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
206 build_string ("only 2 or 3 mouse buttons are supported"), |
|
de36a2bee064
(Fmsdos_set_mouse_buttons): Use xsignal2.
Kim F. Storm <storm@cua.dk>
parents:
68651
diff
changeset
|
207 nbuttons); |
|
34561
62530d6f561d
(Fmsdos_set_mouse_buttons): Signal an error if the
Eli Zaretskii <eliz@gnu.org>
parents:
34483
diff
changeset
|
208 mouse_setup_buttons (n); |
|
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
209 return Qnil; |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
210 } |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
211 |
|
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
212 static void |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
213 mouse_get_xy (int *x, int *y) |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
214 { |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
215 union REGS regs; |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
216 |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
217 regs.x.ax = 0x0003; |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
218 int86 (0x33, ®s, ®s); |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
219 *x = regs.x.cx / 8; |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
220 *y = regs.x.dx / 8; |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
221 } |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
222 |
| 5503 | 223 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
224 mouse_moveto (int x, int y) |
| 5503 | 225 { |
| 13179 | 226 union REGS regs; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
227 struct tty_display_info *tty = CURTTY (); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
228 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
229 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
230 fprintf (tty->termscript, "<M_XY=%dx%d>", x, y); |
| 13179 | 231 regs.x.ax = 0x0004; |
| 232 mouse_last_x = regs.x.cx = x * 8; | |
| 233 mouse_last_y = regs.x.dx = y * 8; | |
| 234 int86 (0x33, ®s, ®s); | |
| 5503 | 235 } |
| 236 | |
| 13179 | 237 static int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
238 mouse_pressed (int b, int *xp, int *yp) |
| 13179 | 239 { |
| 240 union REGS regs; | |
| 241 | |
| 242 if (b >= mouse_button_count) | |
| 243 return 0; | |
| 244 regs.x.ax = 0x0005; | |
| 245 regs.x.bx = mouse_button_translate[b]; | |
| 246 int86 (0x33, ®s, ®s); | |
| 247 if (regs.x.bx) | |
| 248 *xp = regs.x.cx / 8, *yp = regs.x.dx / 8; | |
| 249 return (regs.x.bx != 0); | |
| 250 } | |
| 251 | |
| 252 static int | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
253 mouse_released (int b, int *xp, int *yp) |
| 13179 | 254 { |
| 255 union REGS regs; | |
| 256 | |
| 257 if (b >= mouse_button_count) | |
| 258 return 0; | |
| 259 regs.x.ax = 0x0006; | |
| 260 regs.x.bx = mouse_button_translate[b]; | |
| 261 int86 (0x33, ®s, ®s); | |
| 262 if (regs.x.bx) | |
| 263 *xp = regs.x.cx / 8, *yp = regs.x.dx / 8; | |
| 264 return (regs.x.bx != 0); | |
| 265 } | |
| 266 | |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
267 static int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
268 mouse_button_depressed (int b, int *xp, int *yp) |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
269 { |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
270 union REGS regs; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
271 |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
272 if (b >= mouse_button_count) |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
273 return 0; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
274 regs.x.ax = 0x0003; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
275 int86 (0x33, ®s, ®s); |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
276 if ((regs.x.bx & (1 << mouse_button_translate[b])) != 0) |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
277 { |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
278 *xp = regs.x.cx / 8; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
279 *yp = regs.x.dx / 8; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
280 return 1; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
281 } |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
282 return 0; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
283 } |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
284 |
| 13179 | 285 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
286 mouse_get_pos (FRAME_PTR *f, int insist, Lisp_Object *bar_window, |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
287 enum scroll_bar_part *part, Lisp_Object *x, Lisp_Object *y, |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
288 unsigned long *time) |
| 13179 | 289 { |
| 290 int ix, iy; | |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
291 Lisp_Object frame, tail; |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
292 |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
293 /* Clear the mouse-moved flag for every frame on this display. */ |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
294 FOR_EACH_FRAME (tail, frame) |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
295 XFRAME (frame)->mouse_moved = 0; |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
296 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
297 *f = SELECTED_FRAME(); |
| 13179 | 298 *bar_window = Qnil; |
| 299 mouse_get_xy (&ix, &iy); | |
| 300 *time = event_timestamp (); | |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
301 *x = make_number (mouse_last_x = ix); |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
302 *y = make_number (mouse_last_y = iy); |
| 13179 | 303 } |
| 304 | |
| 305 static void | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
306 mouse_check_moved (void) |
| 13179 | 307 { |
| 308 int x, y; | |
| 309 | |
| 310 mouse_get_xy (&x, &y); | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
311 SELECTED_FRAME()->mouse_moved |= (x != mouse_last_x || y != mouse_last_y); |
| 13179 | 312 mouse_last_x = x; |
| 313 mouse_last_y = y; | |
| 5503 | 314 } |
| 315 | |
| 30711 | 316 /* Force the mouse driver to ``forget'' about any button clicks until |
| 317 now. */ | |
| 318 static void | |
| 319 mouse_clear_clicks (void) | |
| 320 { | |
| 321 int b; | |
| 322 | |
| 323 for (b = 0; b < mouse_button_count; b++) | |
| 324 { | |
| 325 int dummy_x, dummy_y; | |
| 326 | |
| 327 (void) mouse_pressed (b, &dummy_x, &dummy_y); | |
| 328 (void) mouse_released (b, &dummy_x, &dummy_y); | |
| 329 } | |
| 330 } | |
| 331 | |
| 13179 | 332 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
333 mouse_init (void) |
| 5503 | 334 { |
| 13179 | 335 union REGS regs; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
336 struct tty_display_info *tty = CURTTY (); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
337 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
338 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
339 fprintf (tty->termscript, "<M_INIT>"); |
| 13179 | 340 |
| 341 regs.x.ax = 0x0021; | |
| 342 int86 (0x33, ®s, ®s); | |
| 343 | |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
344 /* Reset the mouse last press/release info. It seems that Windows |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
345 doesn't do that automatically when function 21h is called, which |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
346 causes Emacs to ``remember'' the click that switched focus to the |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
347 window just before Emacs was started from that window. */ |
| 30711 | 348 mouse_clear_clicks (); |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
349 |
| 13179 | 350 regs.x.ax = 0x0007; |
| 351 regs.x.cx = 0; | |
| 352 regs.x.dx = 8 * (ScreenCols () - 1); | |
| 353 int86 (0x33, ®s, ®s); | |
| 354 | |
| 355 regs.x.ax = 0x0008; | |
| 356 regs.x.cx = 0; | |
| 357 regs.x.dx = 8 * (ScreenRows () - 1); | |
| 358 int86 (0x33, ®s, ®s); | |
| 359 | |
| 360 mouse_moveto (0, 0); | |
| 361 mouse_visible = 0; | |
| 362 } | |
|
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
363 |
| 13179 | 364 /* ------------------------- Screen control ---------------------- |
| 365 * | |
| 366 */ | |
| 5503 | 367 |
| 13179 | 368 static int internal_terminal = 0; |
| 369 | |
| 370 #ifndef HAVE_X_WINDOWS | |
| 371 extern unsigned char ScreenAttrib; | |
| 372 static int screen_face; | |
| 373 | |
| 374 static int screen_size_X; | |
| 375 static int screen_size_Y; | |
| 376 static int screen_size; | |
| 377 | |
| 378 static int current_pos_X; | |
| 379 static int current_pos_Y; | |
| 380 static int new_pos_X; | |
| 381 static int new_pos_Y; | |
| 382 | |
| 383 static void *startup_screen_buffer; | |
| 384 static int startup_screen_size_X; | |
| 385 static int startup_screen_size_Y; | |
| 386 static int startup_pos_X; | |
| 387 static int startup_pos_Y; | |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
388 static unsigned char startup_screen_attrib; |
| 13179 | 389 |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
390 static clock_t startup_time; |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
391 |
| 13179 | 392 static int term_setup_done; |
| 393 | |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
394 static unsigned short outside_cursor; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
395 |
| 13179 | 396 /* Similar to the_only_frame. */ |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
397 struct tty_display_info the_only_display_info; |
| 13179 | 398 |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
399 /* Support for DOS/V (allows Japanese characters to be displayed on |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
400 standard, non-Japanese, ATs). Only supported for DJGPP v2 and later. */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
401 |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
402 /* Holds the address of the text-mode screen buffer. */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
403 static unsigned long screen_old_address = 0; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
404 /* Segment and offset of the virtual screen. If 0, DOS/V is NOT loaded. */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
405 static unsigned short screen_virtual_segment = 0; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
406 static unsigned short screen_virtual_offset = 0; |
|
53187
7ba9466a0ed8
(Qcursor_type, Qbar, Qhbar): Declare extern.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
407 extern Lisp_Object Qcursor_type; |
|
7ba9466a0ed8
(Qcursor_type, Qbar, Qhbar): Declare extern.
Kim F. Storm <storm@cua.dk>
parents:
52401
diff
changeset
|
408 extern Lisp_Object Qbar, Qhbar; |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
409 |
| 49381 | 410 /* The screen colors of the current frame, which serve as the default |
|
41406
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
411 colors for newly-created frames. */ |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
412 static int initial_screen_colors[2]; |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
413 |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
414 /* Update the screen from a part of relocated DOS/V screen buffer which |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
415 begins at OFFSET and includes COUNT characters. */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
416 static void |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
417 dosv_refresh_virtual_screen (int offset, int count) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
418 { |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
419 __dpmi_regs regs; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
420 |
|
28932
f8b0ac62f238
Use the term `invalid' instead of `illegal'.
Gerd Moellmann <gerd@gnu.org>
parents:
28553
diff
changeset
|
421 if (offset < 0 || count < 0) /* paranoia; invalid values crash DOS/V */ |
|
21489
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
422 return; |
|
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
423 |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
424 regs.h.ah = 0xff; /* update relocated screen */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
425 regs.x.es = screen_virtual_segment; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
426 regs.x.di = screen_virtual_offset + offset; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
427 regs.x.cx = count; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
428 __dpmi_int (0x10, ®s); |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
429 } |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
430 |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
431 static void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
432 dos_direct_output (int y, int x, char *buf, int len) |
| 5503 | 433 { |
|
21489
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
434 int t0 = 2 * (x + y * screen_size_X); |
|
a1a2beb0a09c
(dosv_refresh_virtual_screen): Do not use negative arguments.
Eli Zaretskii <eliz@gnu.org>
parents:
21415
diff
changeset
|
435 int t = t0 + (int) ScreenPrimary; |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
436 int l0 = len; |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
437 |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
438 /* This is faster. */ |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
439 for (_farsetsel (_dos_ds); --len >= 0; t += 2, buf++) |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
440 _farnspokeb (t, *buf); |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
441 |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
442 if (screen_virtual_segment) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
443 dosv_refresh_virtual_screen (t0, l0); |
| 13179 | 444 } |
| 445 #endif | |
| 446 | |
| 447 #ifndef HAVE_X_WINDOWS | |
| 448 | |
|
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
449 static int blink_bit = -1; /* the state of the blink bit at startup */ |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
450 |
|
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
451 /* Enable bright background colors. */ |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
452 static void |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
453 bright_bg (void) |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
454 { |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
455 union REGS regs; |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
456 |
|
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
457 /* Remember the original state of the blink/bright-background bit. |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
458 It is stored at 0040:0065h in the BIOS data area. */ |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
459 if (blink_bit == -1) |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
460 blink_bit = (_farpeekb (_dos_ds, 0x465) & 0x20) == 0x20; |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
461 |
|
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
462 regs.h.bl = 0; |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
463 regs.x.ax = 0x1003; |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
464 int86 (0x10, ®s, ®s); |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
465 } |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
466 |
|
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
467 /* Disable bright background colors (and enable blinking) if we found |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
468 the video system in that state at startup. */ |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
469 static void |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
470 maybe_enable_blinking (void) |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
471 { |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
472 if (blink_bit == 1) |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
473 { |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
474 union REGS regs; |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
475 |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
476 regs.h.bl = 1; |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
477 regs.x.ax = 0x1003; |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
478 int86 (0x10, ®s, ®s); |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
479 } |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
480 } |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
481 |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
482 /* Return non-zero if the system has a VGA adapter. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
483 static int |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
484 vga_installed (void) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
485 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
486 union REGS regs; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
487 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
488 regs.x.ax = 0x1a00; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
489 int86 (0x10, ®s, ®s); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
490 if (regs.h.al == 0x1a && regs.h.bl > 5 && regs.h.bl < 13) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
491 return 1; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
492 return 0; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
493 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
494 |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
495 /* Set the screen dimensions so that it can show no less than |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
496 ROWS x COLS frame. */ |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
497 |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
498 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
499 dos_set_window_size (int *rows, int *cols) |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
500 { |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
501 char video_name[30]; |
| 45332 | 502 union REGS regs; |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
503 Lisp_Object video_mode; |
| 45332 | 504 int video_mode_value, have_vga = 0; |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
505 int current_rows = ScreenRows (), current_cols = ScreenCols (); |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
506 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
507 if (*rows == current_rows && *cols == current_cols) |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
508 return; |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
509 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
510 mouse_off (); |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
511 have_vga = vga_installed (); |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
512 |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
513 /* If the user specified a special video mode for these dimensions, |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
514 use that mode. */ |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
515 sprintf (video_name, "screen-dimensions-%dx%d", *rows, *cols); |
|
108299
a5fcd78ad3eb
Don't use XSYMBOL (foo)->value.
Eli Zaretskii <eliz@gnu.org>
parents:
108234
diff
changeset
|
516 video_mode = Fsymbol_value (Fintern_soft (build_string (video_name), Qnil)); |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
517 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
518 if (INTEGERP (video_mode) |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
519 && (video_mode_value = XINT (video_mode)) > 0) |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
520 { |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
521 regs.x.ax = video_mode_value; |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
522 int86 (0x10, ®s, ®s); |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
523 |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
524 if (have_mouse) |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
525 { |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
526 /* Must hardware-reset the mouse, or else it won't update |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
527 its notion of screen dimensions for some non-standard |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
528 video modes. This is *painfully* slow... */ |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
529 regs.x.ax = 0; |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
530 int86 (0x33, ®s, ®s); |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
531 } |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
532 } |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
533 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
534 /* Find one of the dimensions supported by standard EGA/VGA |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
535 which gives us at least the required dimensions. */ |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
536 else |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
537 { |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
538 static struct { |
| 45332 | 539 int rows, need_vga; |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
540 } std_dimension[] = { |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
541 {25, 0}, |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
542 {28, 1}, |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
543 {35, 0}, |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
544 {40, 1}, |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
545 {43, 0}, |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
546 {50, 1} |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
547 }; |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
548 int i = 0; |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
549 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
550 while (i < sizeof (std_dimension) / sizeof (std_dimension[0])) |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
551 { |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
552 if (std_dimension[i].need_vga <= have_vga |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
553 && std_dimension[i].rows >= *rows) |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
554 { |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
555 if (std_dimension[i].rows != current_rows |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
556 || *cols != current_cols) |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
557 _set_screen_lines (std_dimension[i].rows); |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
558 break; |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
559 } |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
560 i++; |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
561 } |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
562 } |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
563 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
564 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
565 if (have_mouse) |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
566 { |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
567 mouse_init (); |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
568 mouse_on (); |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
569 } |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
570 |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
571 /* Tell the caller what dimensions have been REALLY set. */ |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
572 *rows = ScreenRows (); |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
573 *cols = ScreenCols (); |
|
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
574 |
|
32730
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
575 /* Update Emacs' notion of screen dimensions. */ |
|
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
576 screen_size_X = *cols; |
|
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
577 screen_size_Y = *rows; |
|
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
578 screen_size = *cols * *rows; |
|
5d98418d7b78
(dos_set_window_size): Update screen dimension variables.
Eli Zaretskii <eliz@gnu.org>
parents:
32546
diff
changeset
|
579 |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
580 /* If the dimensions changed, the mouse highlight info is invalid. */ |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
581 if (current_rows != *rows || current_cols != *cols) |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
582 { |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
583 struct frame *f = SELECTED_FRAME(); |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
584 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
585 Lisp_Object window = hlinfo->mouse_face_window; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
586 |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
587 if (! NILP (window) && XFRAME (XWINDOW (window)->frame) == f) |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
588 { |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
589 hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
590 hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
591 hlinfo->mouse_face_window = Qnil; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
592 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
593 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
594 |
|
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
595 /* Enable bright background colors. */ |
|
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
596 bright_bg (); |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
597 |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
598 /* FIXME: I'm not sure the above will run at all on DOS/V. But let's |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
599 be defensive anyway. */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
600 if (screen_virtual_segment) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
601 dosv_refresh_virtual_screen (0, *cols * *rows); |
|
14284
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
602 } |
|
0eaecdc13142
(dos_set_window_size): New function; switches the screen
Karl Heuer <kwzh@gnu.org>
parents:
14279
diff
changeset
|
603 |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
604 /* If we write a character in the position where the mouse is, |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
605 the mouse cursor may need to be refreshed. */ |
|
7744
da18793f532d
(output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7667
diff
changeset
|
606 |
|
da18793f532d
(output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7667
diff
changeset
|
607 static void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
608 mouse_off_maybe (void) |
|
7744
da18793f532d
(output_string): New function.
Richard M. Stallman <rms@gnu.org>
parents:
7667
diff
changeset
|
609 { |
| 13179 | 610 int x, y; |
| 45332 | 611 |
| 13179 | 612 if (!mouse_visible) |
| 613 return; | |
| 45332 | 614 |
| 13179 | 615 mouse_get_xy (&x, &y); |
| 616 if (y != new_pos_Y || x < new_pos_X) | |
| 617 return; | |
| 45332 | 618 |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
619 mouse_off (); |
| 9572 | 620 } |
| 621 | |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
622 #define DEFAULT_CURSOR_START (-1) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
623 #define DEFAULT_CURSOR_WIDTH (-1) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
624 #define BOX_CURSOR_WIDTH (-32) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
625 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
626 /* Set cursor to begin at scan line START_LINE in the character cell |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
627 and extend for WIDTH scan lines. Scan lines are counted from top |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
628 of the character cell, starting from zero. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
629 static void |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
630 msdos_set_cursor_shape (struct frame *f, int start_line, int width) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
631 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
632 unsigned desired_cursor; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
633 __dpmi_regs regs; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
634 int max_line, top_line, bot_line; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
635 struct tty_display_info *tty = FRAME_TTY (f); |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
636 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
637 /* Avoid the costly BIOS call if F isn't the currently selected |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
638 frame. Allow for NULL as unconditionally meaning the selected |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
639 frame. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
640 if (f && f != SELECTED_FRAME()) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
641 return; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
642 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
643 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
644 fprintf (tty->termscript, "\nCURSOR SHAPE=(%d,%d)", start_line, width); |
|
57048
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
645 |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
646 /* The character cell size in scan lines is stored at 40:85 in the |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
647 BIOS data area. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
648 max_line = _farpeekw (_dos_ds, 0x485) - 1; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
649 switch (max_line) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
650 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
651 default: /* this relies on CGA cursor emulation being ON! */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
652 case 7: |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
653 bot_line = 7; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
654 break; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
655 case 9: |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
656 bot_line = 9; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
657 break; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
658 case 13: |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
659 bot_line = 12; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
660 break; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
661 case 15: |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
662 bot_line = 14; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
663 break; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
664 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
665 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
666 if (width < 0) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
667 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
668 if (width == BOX_CURSOR_WIDTH) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
669 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
670 top_line = 0; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
671 bot_line = max_line; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
672 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
673 else if (start_line != DEFAULT_CURSOR_START) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
674 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
675 top_line = start_line; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
676 bot_line = top_line - width - 1; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
677 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
678 else if (width != DEFAULT_CURSOR_WIDTH) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
679 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
680 top_line = 0; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
681 bot_line = -1 - width; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
682 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
683 else |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
684 top_line = bot_line + 1; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
685 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
686 else if (width == 0) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
687 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
688 /* [31, 0] seems to DTRT for all screen sizes. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
689 top_line = 31; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
690 bot_line = 0; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
691 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
692 else /* WIDTH is positive */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
693 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
694 if (start_line != DEFAULT_CURSOR_START) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
695 bot_line = start_line; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
696 top_line = bot_line - (width - 1); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
697 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
698 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
699 /* If the current cursor shape is already what they want, we are |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
700 history here. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
701 desired_cursor = ((top_line & 0x1f) << 8) | (bot_line & 0x1f); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
702 if (desired_cursor == _farpeekw (_dos_ds, 0x460)) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
703 return; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
704 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
705 regs.h.ah = 1; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
706 regs.x.cx = desired_cursor; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
707 __dpmi_int (0x10, ®s); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
708 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
709 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
710 static void |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
711 IT_set_cursor_type (struct frame *f, Lisp_Object cursor_type) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
712 { |
| 44695 | 713 if (EQ (cursor_type, Qbar) || EQ (cursor_type, Qhbar)) |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
714 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
715 /* Just BAR means the normal EGA/VGA cursor. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
716 msdos_set_cursor_shape (f, DEFAULT_CURSOR_START, DEFAULT_CURSOR_WIDTH); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
717 } |
| 44695 | 718 else if (CONSP (cursor_type) |
| 719 && (EQ (XCAR (cursor_type), Qbar) | |
| 720 || EQ (XCAR (cursor_type), Qhbar))) | |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
721 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
722 Lisp_Object bar_parms = XCDR (cursor_type); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
723 int width; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
724 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
725 if (INTEGERP (bar_parms)) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
726 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
727 /* Feature: negative WIDTH means cursor at the top |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
728 of the character cell, zero means invisible cursor. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
729 width = XINT (bar_parms); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
730 msdos_set_cursor_shape (f, width >= 0 ? DEFAULT_CURSOR_START : 0, |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
731 width); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
732 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
733 else if (CONSP (bar_parms) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
734 && INTEGERP (XCAR (bar_parms)) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
735 && INTEGERP (XCDR (bar_parms))) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
736 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
737 int start_line = XINT (XCDR (bar_parms)); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
738 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
739 width = XINT (XCAR (bar_parms)); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
740 msdos_set_cursor_shape (f, start_line, width); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
741 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
742 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
743 else |
|
57048
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
744 { |
|
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
745 /* Treat anything unknown as "box cursor". This includes nil, so |
|
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
746 that a frame which doesn't specify a cursor type gets a box, |
|
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
747 which is the default in Emacs. */ |
|
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
748 msdos_set_cursor_shape (f, 0, BOX_CURSOR_WIDTH); |
|
79225007cc58
(msdos_set_cursor_shape): Add debugging print-out to termscript.
Eli Zaretskii <eliz@gnu.org>
parents:
56729
diff
changeset
|
749 } |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
750 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
751 |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
752 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
753 IT_ring_bell (struct frame *f) |
| 9572 | 754 { |
| 755 if (visible_bell) | |
| 756 { | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
757 mouse_off (); |
| 13179 | 758 ScreenVisualBell (); |
| 9572 | 759 } |
| 760 else | |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
761 { |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
762 union REGS inregs, outregs; |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
763 inregs.h.ah = 2; |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
764 inregs.h.dl = 7; |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
765 intdos (&inregs, &outregs); |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
766 } |
| 9572 | 767 } |
| 768 | |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
769 /* Given a face id FACE, extract the face parameters to be used for |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
770 display until the face changes. The face parameters (actually, its |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
771 color) are used to construct the video attribute byte for each |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
772 glyph during the construction of the buffer that is then blitted to |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
773 the video RAM. */ |
| 9572 | 774 static void |
| 775 IT_set_face (int face) | |
| 776 { | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
777 struct frame *sf = SELECTED_FRAME(); |
|
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
778 struct face *fp = FACE_FROM_ID (sf, face); |
|
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
779 struct face *dfp = FACE_FROM_ID (sf, DEFAULT_FACE_ID); |
|
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
780 unsigned long fg, bg, dflt_fg, dflt_bg; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
781 struct tty_display_info *tty = FRAME_TTY (sf); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
782 |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
783 if (!fp) |
|
25214
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
784 { |
|
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
785 fp = dfp; |
|
25214
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
786 /* The default face for the frame should always be realized and |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
787 cached. */ |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
788 if (!fp) |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
789 abort (); |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
790 } |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
791 screen_face = face; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
792 fg = fp->foreground; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
793 bg = fp->background; |
|
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
794 dflt_fg = dfp->foreground; |
|
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
795 dflt_bg = dfp->background; |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
796 |
|
40082
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
797 /* Don't use invalid colors. In particular, FACE_TTY_DEFAULT_* colors |
|
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
798 mean use the colors of the default face. Note that we assume all |
|
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
799 16 colors to be available for the background, since Emacs switches |
|
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
800 on this mode (and loses the blinking attribute) at startup. */ |
|
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26729
diff
changeset
|
801 if (fg == FACE_TTY_DEFAULT_COLOR || fg == FACE_TTY_DEFAULT_FG_COLOR) |
|
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
802 fg = FRAME_FOREGROUND_PIXEL (sf); |
|
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26729
diff
changeset
|
803 else if (fg == FACE_TTY_DEFAULT_BG_COLOR) |
|
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
804 fg = FRAME_BACKGROUND_PIXEL (sf); |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
805 if (bg == FACE_TTY_DEFAULT_COLOR || bg == FACE_TTY_DEFAULT_BG_COLOR) |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
806 bg = FRAME_BACKGROUND_PIXEL (sf); |
|
26902
264b83a3a688
Changes for separate unspecified foreground and background colors
Eli Zaretskii <eliz@gnu.org>
parents:
26729
diff
changeset
|
807 else if (bg == FACE_TTY_DEFAULT_FG_COLOR) |
|
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
808 bg = FRAME_FOREGROUND_PIXEL (sf); |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
809 |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
810 /* Make sure highlighted lines really stand out, come what may. */ |
|
40082
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
811 if (fp->tty_reverse_p && (fg == dflt_fg && bg == dflt_bg)) |
|
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
812 { |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
813 unsigned long tem = fg; |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
814 |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
815 fg = bg; |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
816 bg = tem; |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
817 } |
|
34676
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
818 /* If the user requested inverse video, obey. */ |
|
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
819 if (inverse_video) |
|
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
820 { |
|
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
821 unsigned long tem2 = fg; |
|
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
822 |
|
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
823 fg = bg; |
|
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
824 bg = tem2; |
|
fbd6630ebdaa
(IT_set_face): Obey inverse_video.
Eli Zaretskii <eliz@gnu.org>
parents:
34657
diff
changeset
|
825 } |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
826 if (tty->termscript) |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
827 fprintf (tty->termscript, "<FACE %d: %lu/%lu[FG:%lu/BG:%lu]>", face, |
|
40082
0eaf29d6544e
(IT_reassert_line_highlight, IT_change_line_highlight): Functions removed.
Miles Bader <miles@gnu.org>
parents:
38314
diff
changeset
|
828 fp->foreground, fp->background, fg, bg); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
829 if (fg >= 0 && fg < 16) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
830 { |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
831 ScreenAttrib &= 0xf0; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
832 ScreenAttrib |= fg; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
833 } |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
834 if (bg >= 0 && bg < 16) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
835 { |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
836 ScreenAttrib &= 0x0f; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
837 ScreenAttrib |= ((bg & 0x0f) << 4); |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
838 } |
| 9572 | 839 } |
| 840 | |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
841 /* According to RBIL (INTERRUP.A, V-1000), 160 is the maximum possible |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
842 width of a DOS display in any known text mode. We multiply by 2 to |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
843 accomodate the screen attribute byte. */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
844 #define MAX_SCREEN_BUF 160*2 |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
845 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
846 extern unsigned char *encode_terminal_code (struct glyph *, int, |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
847 struct coding_system *); |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
848 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
849 IT_write_glyphs (struct frame *f, struct glyph *str, int str_len) |
| 9572 | 850 { |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
851 unsigned char screen_buf[MAX_SCREEN_BUF], *screen_bp, *bp; |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
852 int offset = 2 * (new_pos_X + screen_size_X * new_pos_Y); |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
853 register int sl = str_len; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
854 struct tty_display_info *tty = FRAME_TTY (f); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
855 struct frame *sf; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
856 unsigned char *conversion_buffer; |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
857 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
858 /* If terminal_coding does any conversion, use it, otherwise use |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
859 safe_terminal_coding. We can't use CODING_REQUIRE_ENCODING here |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
860 because it always returns 1 if terminal_coding.src_multibyte is 1. */ |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
861 struct coding_system *coding = FRAME_TERMINAL_CODING (f); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
862 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
863 if (!(coding->common_flags & CODING_REQUIRE_ENCODING_MASK)) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
864 coding = &safe_terminal_coding; |
|
30835
45f168392f57
(IT_write_glyphs): Use a locally declared conversion_buffer.
Kenichi Handa <handa@m17n.org>
parents:
30826
diff
changeset
|
865 |
|
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
866 if (str_len <= 0) return; |
| 45332 | 867 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
868 sf = SELECTED_FRAME(); |
|
25214
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
869 |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
870 /* Since faces get cached and uncached behind our back, we can't |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
871 rely on their indices in the cache being consistent across |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
872 invocations. So always reset the screen face to the default |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
873 face of the frame, before writing glyphs, and let the glyphs |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
874 set the right face if it's different from the default. */ |
|
acfe5b9d7233
(IT_set_face): Abort if the default face is not realized
Eli Zaretskii <eliz@gnu.org>
parents:
25110
diff
changeset
|
875 IT_set_face (DEFAULT_FACE_ID); |
| 45332 | 876 |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
877 /* The mode bit CODING_MODE_LAST_BLOCK should be set to 1 only at |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
878 the tail. */ |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
879 coding->mode &= ~CODING_MODE_LAST_BLOCK; |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
880 screen_bp = &screen_buf[0]; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
881 while (sl > 0) |
| 9572 | 882 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
883 int cf; |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
884 int n; |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
885 |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
886 /* If the face of this glyph is different from the current |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
887 screen face, update the screen attribute byte. */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
888 cf = str->face_id; |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
889 if (cf != screen_face) |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
890 IT_set_face (cf); /* handles invalid faces gracefully */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
891 |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
892 /* Identify a run of glyphs with the same face. */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
893 for (n = 1; n < sl; ++n) |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
894 if (str[n].face_id != cf) |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
895 break; |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
896 |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
897 if (n >= sl) |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
898 /* This is the last glyph. */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
899 coding->mode |= CODING_MODE_LAST_BLOCK; |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
900 |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
901 conversion_buffer = encode_terminal_code (str, n, coding); |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
902 if (coding->produced > 0) |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
903 { |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
904 /* Copy the encoded bytes to the screen buffer. */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
905 for (bp = conversion_buffer; coding->produced--; bp++) |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
906 { |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
907 /* Paranoia: discard bytes that would overrun the end of |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
908 the screen buffer. */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
909 if (screen_bp - screen_buf <= MAX_SCREEN_BUF - 2) |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
910 { |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
911 *screen_bp++ = (unsigned char)*bp; |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
912 *screen_bp++ = ScreenAttrib; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
913 } |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
914 if (tty->termscript) |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
915 fputc (*bp, tty->termscript); |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
916 } |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
917 } |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
918 /* Update STR and its remaining length. */ |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
919 str += n; |
|
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
920 sl -= n; |
| 9572 | 921 } |
| 13179 | 922 |
|
102034
bebfd771aaeb
(MAX_SCREEN_BUF): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
101658
diff
changeset
|
923 /* Dump whatever we have in the screen buffer. */ |
| 13179 | 924 mouse_off_maybe (); |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
925 dosmemput (screen_buf, screen_bp - screen_buf, (int)ScreenPrimary + offset); |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
926 if (screen_virtual_segment) |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
927 dosv_refresh_virtual_screen (offset, (screen_bp - screen_buf) / 2); |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
928 new_pos_X += (screen_bp - screen_buf) / 2; |
| 9572 | 929 } |
| 930 | |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
931 /************************************************************************ |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
932 Mouse Highlight (and friends..) |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
933 ************************************************************************/ |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
934 |
|
44359
ff9f7aee02c8
Rename autoselect_window_p to mouse_autoselect_window.
Pavel Jan?k <Pavel@Janik.cz>
parents:
44337
diff
changeset
|
935 /* Last window where we saw the mouse. Used by mouse-autoselect-window. */ |
|
43363
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
936 static Lisp_Object last_mouse_window; |
|
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
937 |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
938 static int mouse_preempted = 0; /* non-zero when XMenu gobbles mouse events */ |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
939 |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
940 int |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
941 popup_activated (void) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
942 { |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
943 return mouse_preempted; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
944 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
945 |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
946 /* Draw TEXT_AREA glyphs between START and END of glyph row ROW on |
|
111344
b775602e70c8
Cleanup fallout from redesigning mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111342
diff
changeset
|
947 window W. X is relative to TEXT_AREA in W. HL is a face override |
|
b775602e70c8
Cleanup fallout from redesigning mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111342
diff
changeset
|
948 for drawing the glyphs. */ |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
949 void |
|
111344
b775602e70c8
Cleanup fallout from redesigning mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111342
diff
changeset
|
950 tty_draw_row_with_mouse_face (struct window *w, struct glyph_row *row, |
|
b775602e70c8
Cleanup fallout from redesigning mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111342
diff
changeset
|
951 int start_hpos, int end_hpos, |
|
b775602e70c8
Cleanup fallout from redesigning mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111342
diff
changeset
|
952 enum draw_glyphs_face hl) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
953 { |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
954 struct frame *f = XFRAME (WINDOW_FRAME (w)); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
955 struct tty_display_info *tty = FRAME_TTY (f); |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
956 Mouse_HLInfo *hlinfo = &tty->mouse_highlight; |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
957 |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
958 if (hl == DRAW_MOUSE_FACE) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
959 { |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
960 int vpos = row->y + WINDOW_TOP_EDGE_Y (w); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
961 int kstart = start_hpos + WINDOW_LEFT_EDGE_X (w); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
962 int nglyphs = end_hpos - start_hpos; |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
963 int offset = ScreenPrimary + 2*(vpos*screen_size_X + kstart) + 1; |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
964 int start_offset = offset; |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
965 |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
966 if (tty->termscript) |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
967 fprintf (tty->termscript, "\n<MH+ %d-%d:%d>", |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
968 kstart, kstart + nglyphs - 1, vpos); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
969 |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
970 mouse_off (); |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
971 IT_set_face (hlinfo->mouse_face_face_id); |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
972 /* Since we are going to change only the _colors_ of already |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
973 displayed text, there's no need to go through all the pain of |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
974 generating and encoding the text from the glyphs. Instead, |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
975 we simply poke the attribute byte of each affected position |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
976 in video memory with the colors computed by IT_set_face! */ |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
977 _farsetsel (_dos_ds); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
978 while (nglyphs--) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
979 { |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
980 _farnspokeb (offset, ScreenAttrib); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
981 offset += 2; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
982 } |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
983 if (screen_virtual_segment) |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
984 dosv_refresh_virtual_screen (start_offset, end_hpos - start_hpos); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
985 mouse_on (); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
986 } |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
987 else if (hl == DRAW_NORMAL_TEXT) |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
988 { |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
989 /* We are removing a previously-drawn mouse highlight. The |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
990 safest way to do so is to redraw the glyphs anew, since all |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
991 kinds of faces and display tables could have changed behind |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
992 our back. */ |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
993 int nglyphs = end_hpos - start_hpos; |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
994 int save_x = new_pos_X, save_y = new_pos_Y; |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
995 |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
996 if (end_hpos >= row->used[TEXT_AREA]) |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
997 nglyphs = row->used[TEXT_AREA] - start_hpos; |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
998 |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
999 /* IT_write_glyphs writes at cursor position, so we need to |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1000 temporarily move cursor coordinates to the beginning of |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1001 the highlight region. */ |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1002 new_pos_X = start_hpos + WINDOW_LEFT_EDGE_X (w); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1003 new_pos_Y = row->y + WINDOW_TOP_EDGE_Y (w); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1004 |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1005 if (tty->termscript) |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1006 fprintf (tty->termscript, "<MH- %d-%d:%d>", |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1007 new_pos_X, new_pos_X + nglyphs - 1, new_pos_Y); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1008 IT_write_glyphs (f, row->glyphs[TEXT_AREA] + start_hpos, nglyphs); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1009 if (tty->termscript) |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1010 fputs ("\n", tty->termscript); |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1011 new_pos_X = save_x; |
|
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
1012 new_pos_Y = save_y; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1013 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1014 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1015 |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1016 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1017 IT_clear_end_of_line (struct frame *f, int first_unused) |
| 9572 | 1018 { |
| 13179 | 1019 char *spaces, *sp; |
| 45332 | 1020 int i, j, offset = 2 * (new_pos_X + screen_size_X * new_pos_Y); |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1021 extern int fatal_error_in_progress; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1022 struct tty_display_info *tty = FRAME_TTY (f); |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1023 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1024 if (new_pos_X >= first_unused || fatal_error_in_progress) |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1025 return; |
| 13179 | 1026 |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
1027 IT_set_face (0); |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
1028 i = (j = first_unused - new_pos_X) * 2; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1029 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1030 fprintf (tty->termscript, "<CLR:EOL[%d..%d)>", new_pos_X, first_unused); |
| 13179 | 1031 spaces = sp = alloca (i); |
| 45332 | 1032 |
| 13179 | 1033 while (--j >= 0) |
| 1034 { | |
| 1035 *sp++ = ' '; | |
| 1036 *sp++ = ScreenAttrib; | |
| 1037 } | |
| 1038 | |
| 1039 mouse_off_maybe (); | |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1040 dosmemput (spaces, i, (int)ScreenPrimary + offset); |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1041 if (screen_virtual_segment) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1042 dosv_refresh_virtual_screen (offset, i / 2); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1043 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1044 /* clear_end_of_line_raw on term.c leaves the cursor at first_unused. |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1045 Let's follow their lead, in case someone relies on this. */ |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1046 new_pos_X = first_unused; |
| 13179 | 1047 } |
| 1048 | |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1049 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1050 IT_clear_screen (struct frame *f) |
| 13179 | 1051 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1052 struct tty_display_info *tty = FRAME_TTY (f); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1053 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1054 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1055 fprintf (tty->termscript, "<CLR:SCR>"); |
|
41406
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1056 /* We are sometimes called (from clear_garbaged_frames) when a new |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1057 frame is being created, but its faces are not yet realized. In |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1058 such a case we cannot call IT_set_face, since it will fail to find |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1059 any valid faces and will abort. Instead, use the initial screen |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1060 colors; that should mimic what a Unix tty does, which simply clears |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1061 the screen with whatever default colors are in use. */ |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1062 if (FACE_FROM_ID (SELECTED_FRAME (), DEFAULT_FACE_ID) == NULL) |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1063 ScreenAttrib = (initial_screen_colors[0] << 4) | initial_screen_colors[1]; |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1064 else |
|
9ba7c0fd50b7
(IT_clear_screen): If the frame's faces are not yet
Eli Zaretskii <eliz@gnu.org>
parents:
41122
diff
changeset
|
1065 IT_set_face (0); |
| 13179 | 1066 mouse_off (); |
| 1067 ScreenClear (); | |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1068 if (screen_virtual_segment) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1069 dosv_refresh_virtual_screen (0, screen_size); |
| 13179 | 1070 new_pos_X = new_pos_Y = 0; |
| 1071 } | |
| 1072 | |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1073 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1074 IT_clear_to_end (struct frame *f) |
| 13179 | 1075 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1076 struct tty_display_info *tty = FRAME_TTY (f); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1077 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1078 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1079 fprintf (tty->termscript, "<CLR:EOS>"); |
| 13179 | 1080 |
| 1081 while (new_pos_Y < screen_size_Y) { | |
| 1082 new_pos_X = 0; | |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1083 IT_clear_end_of_line (f, screen_size_X); |
| 13179 | 1084 new_pos_Y++; |
| 1085 } | |
| 9572 | 1086 } |
| 1087 | |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1088 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1089 IT_cursor_to (struct frame *f, int y, int x) |
| 9572 | 1090 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1091 struct tty_display_info *tty = FRAME_TTY (f); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1092 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1093 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1094 fprintf (tty->termscript, "\n<XY=%dx%d>", x, y); |
| 13179 | 1095 new_pos_X = x; |
| 1096 new_pos_Y = y; | |
| 9572 | 1097 } |
| 1098 | |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1099 static int cursor_cleared; |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1100 |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1101 static void |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1102 IT_display_cursor (int on) |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1103 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1104 struct tty_display_info *tty = CURTTY (); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1105 |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1106 if (on && cursor_cleared) |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1107 { |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1108 ScreenSetCursor (current_pos_Y, current_pos_X); |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1109 cursor_cleared = 0; |
|
97871
bc27b61d82f8
(IT_display_cursor): Write "CURSOR ON/OFF" to termscript only when
Eli Zaretskii <eliz@gnu.org>
parents:
97771
diff
changeset
|
1110 if (tty->termscript) |
|
109660
85236524c2a3
Fix redisplay bugs due to uninitialized glyphs in frame glyph pool.
Eli Zaretskii <eliz@gnu.org>
parents:
109573
diff
changeset
|
1111 fprintf (tty->termscript, "\nCURSOR ON (%dx%d)", |
|
85236524c2a3
Fix redisplay bugs due to uninitialized glyphs in frame glyph pool.
Eli Zaretskii <eliz@gnu.org>
parents:
109573
diff
changeset
|
1112 current_pos_Y, current_pos_X); |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1113 } |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1114 else if (!on && !cursor_cleared) |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1115 { |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1116 ScreenSetCursor (-1, -1); |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1117 cursor_cleared = 1; |
|
97871
bc27b61d82f8
(IT_display_cursor): Write "CURSOR ON/OFF" to termscript only when
Eli Zaretskii <eliz@gnu.org>
parents:
97771
diff
changeset
|
1118 if (tty->termscript) |
|
109660
85236524c2a3
Fix redisplay bugs due to uninitialized glyphs in frame glyph pool.
Eli Zaretskii <eliz@gnu.org>
parents:
109573
diff
changeset
|
1119 fprintf (tty->termscript, "\nCURSOR OFF (%dx%d)", |
|
85236524c2a3
Fix redisplay bugs due to uninitialized glyphs in frame glyph pool.
Eli Zaretskii <eliz@gnu.org>
parents:
109573
diff
changeset
|
1120 current_pos_Y, current_pos_X); |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1121 } |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1122 } |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1123 |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1124 /* Emacs calls cursor-movement functions a lot when it updates the |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1125 display (probably a legacy of old terminals where you cannot |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1126 update a screen line without first moving the cursor there). |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1127 However, cursor movement is expensive on MSDOS (it calls a slow |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1128 BIOS function and requires 2 mode switches), while actual screen |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1129 updates access the video memory directly and don't depend on |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1130 cursor position. To avoid slowing down the redisplay, we cheat: |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1131 all functions that move the cursor only set internal variables |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1132 which record the cursor position, whereas the cursor is only |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1133 moved to its final position whenever screen update is complete. |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1134 |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1135 `IT_cmgoto' is called from the keyboard reading loop and when the |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1136 frame update is complete. This means that we are ready for user |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1137 input, so we update the cursor position to show where the point is, |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1138 and also make the mouse pointer visible. |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1139 |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1140 Special treatment is required when the cursor is in the echo area, |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1141 to put the cursor at the end of the text displayed there. */ |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1142 |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1143 static void |
|
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1144 IT_cmgoto (FRAME_PTR f) |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1145 { |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1146 /* Only set the cursor to where it should be if the display is |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1147 already in sync with the window contents. */ |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1148 int update_cursor_pos = 1; /* MODIFF == unchanged_modified; */ |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1149 struct tty_display_info *tty = FRAME_TTY (f); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1150 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1151 /* FIXME: This needs to be rewritten for the new redisplay, or |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1152 removed. */ |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1153 #if 0 |
|
23156
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1154 static int previous_pos_X = -1; |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1155 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1156 update_cursor_pos = 1; /* temporary!!! */ |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1157 |
|
23156
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1158 /* If the display is in sync, forget any previous knowledge about |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1159 cursor position. This is primarily for unexpected events like |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1160 C-g in the minibuffer. */ |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1161 if (update_cursor_pos && previous_pos_X >= 0) |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1162 previous_pos_X = -1; |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1163 /* If we are in the echo area, put the cursor at the |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1164 end of the echo area message. */ |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1165 if (!update_cursor_pos |
|
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
1166 && WINDOW_TOP_EDGE_LINE (XWINDOW (FRAME_MINIBUF_WINDOW (f))) <= new_pos_Y) |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1167 { |
|
23156
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1168 int tem_X = current_pos_X, dummy; |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1169 |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1170 if (echo_area_glyphs) |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1171 { |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1172 tem_X = echo_area_glyphs_length; |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1173 /* Save current cursor position, to be restored after the |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1174 echo area message is erased. Only remember one level |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1175 of previous cursor position. */ |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1176 if (previous_pos_X == -1) |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1177 ScreenGetCursor (&dummy, &previous_pos_X); |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1178 } |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1179 else if (previous_pos_X >= 0) |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1180 { |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1181 /* We wind up here after the echo area message is erased. |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1182 Restore the cursor position we remembered above. */ |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1183 tem_X = previous_pos_X; |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1184 previous_pos_X = -1; |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1185 } |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1186 |
|
e080ad3cc739
(IT_cmgoto): When tracking echo area messages with the
Eli Zaretskii <eliz@gnu.org>
parents:
23011
diff
changeset
|
1187 if (current_pos_X != tem_X) |
|
22992
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1188 { |
|
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1189 new_pos_X = tem_X; |
|
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1190 update_cursor_pos = 1; |
|
9b39197e9ecd
(IT_cmgoto): In the echo area, only put the cursor at
Eli Zaretskii <eliz@gnu.org>
parents:
22481
diff
changeset
|
1191 } |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1192 } |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1193 #endif |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1194 |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1195 if (update_cursor_pos |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1196 && (current_pos_X != new_pos_X || current_pos_Y != new_pos_Y)) |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1197 { |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1198 ScreenSetCursor (current_pos_Y = new_pos_Y, current_pos_X = new_pos_X); |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1199 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1200 fprintf (tty->termscript, "\n<CURSOR:%dx%d>", current_pos_X, current_pos_Y); |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1201 } |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1202 |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1203 /* Maybe cursor is invisible, so make it visible. */ |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1204 IT_display_cursor (1); |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1205 |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1206 /* Mouse pointer should be always visible if we are waiting for |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1207 keyboard input. */ |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1208 if (!mouse_visible) |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1209 mouse_on (); |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1210 } |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
1211 |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1212 static void |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1213 IT_update_begin (struct frame *f) |
| 9572 | 1214 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1215 struct tty_display_info *display_info = FRAME_X_DISPLAY_INFO (f); |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1216 Mouse_HLInfo *hlinfo = &display_info->mouse_highlight; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1217 struct frame *mouse_face_frame = hlinfo->mouse_face_mouse_frame; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1218 |
|
97873
a74660c83709
(IT_update_begin, IT_update_end): Add termscript trace.
Eli Zaretskii <eliz@gnu.org>
parents:
97871
diff
changeset
|
1219 if (display_info->termscript) |
|
a74660c83709
(IT_update_begin, IT_update_end): Add termscript trace.
Eli Zaretskii <eliz@gnu.org>
parents:
97871
diff
changeset
|
1220 fprintf (display_info->termscript, "\n\n<UPDATE_BEGIN"); |
|
a74660c83709
(IT_update_begin, IT_update_end): Add termscript trace.
Eli Zaretskii <eliz@gnu.org>
parents:
97871
diff
changeset
|
1221 |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1222 BLOCK_INPUT; |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1223 |
|
30826
f225a6bd06fc
(IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents:
30725
diff
changeset
|
1224 if (f && f == mouse_face_frame) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1225 { |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1226 /* Don't do highlighting for mouse motion during the update. */ |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1227 hlinfo->mouse_face_defer = 1; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1228 |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1229 /* If F needs to be redrawn, simply forget about any prior mouse |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1230 highlighting. */ |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1231 if (FRAME_GARBAGED_P (f)) |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1232 hlinfo->mouse_face_window = Qnil; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1233 |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1234 /* Can we tell that this update does not affect the window |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1235 where the mouse highlight is? If so, no need to turn off. |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1236 Likewise, don't do anything if none of the enabled rows |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1237 contains glyphs highlighted in mouse face. */ |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1238 if (!NILP (hlinfo->mouse_face_window) |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1239 && WINDOWP (hlinfo->mouse_face_window)) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1240 { |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1241 struct window *w = XWINDOW (hlinfo->mouse_face_window); |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1242 int i; |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1243 |
|
27046
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1244 /* If the mouse highlight is in the window that was deleted |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1245 (e.g., if it was popped by completion), clear highlight |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1246 unconditionally. */ |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1247 if (NILP (w->buffer)) |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1248 hlinfo->mouse_face_window = Qnil; |
|
27046
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1249 else |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1250 { |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1251 for (i = 0; i < w->desired_matrix->nrows; ++i) |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1252 if (MATRIX_ROW_ENABLED_P (w->desired_matrix, i) |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
1253 && MATRIX_ROW (w->current_matrix, i)->mouse_face_p) |
|
27046
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1254 break; |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1255 } |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1256 |
|
872992e41f21
(IT_update_begin): Don't dereference members of struct
Eli Zaretskii <eliz@gnu.org>
parents:
27038
diff
changeset
|
1257 if (NILP (w->buffer) || i < w->desired_matrix->nrows) |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1258 clear_mouse_face (hlinfo); |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1259 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1260 } |
|
30826
f225a6bd06fc
(IT_update_begin): Don't crash if mouse_face_mouse_frame
Eli Zaretskii <eliz@gnu.org>
parents:
30725
diff
changeset
|
1261 else if (mouse_face_frame && !FRAME_LIVE_P (mouse_face_frame)) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1262 { |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1263 /* If the frame with mouse highlight was deleted, invalidate the |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1264 highlight info. */ |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1265 hlinfo->mouse_face_beg_row = hlinfo->mouse_face_beg_col = -1; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1266 hlinfo->mouse_face_end_row = hlinfo->mouse_face_end_col = -1; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1267 hlinfo->mouse_face_window = Qnil; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1268 hlinfo->mouse_face_deferred_gc = 0; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1269 hlinfo->mouse_face_mouse_frame = NULL; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1270 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1271 |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1272 UNBLOCK_INPUT; |
| 13179 | 1273 } |
| 1274 | |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1275 static void |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1276 IT_update_end (struct frame *f) |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1277 { |
|
97873
a74660c83709
(IT_update_begin, IT_update_end): Add termscript trace.
Eli Zaretskii <eliz@gnu.org>
parents:
97871
diff
changeset
|
1278 struct tty_display_info *dpyinfo = FRAME_X_DISPLAY_INFO (f); |
|
a74660c83709
(IT_update_begin, IT_update_end): Add termscript trace.
Eli Zaretskii <eliz@gnu.org>
parents:
97871
diff
changeset
|
1279 |
|
a74660c83709
(IT_update_begin, IT_update_end): Add termscript trace.
Eli Zaretskii <eliz@gnu.org>
parents:
97871
diff
changeset
|
1280 if (dpyinfo->termscript) |
|
a74660c83709
(IT_update_begin, IT_update_end): Add termscript trace.
Eli Zaretskii <eliz@gnu.org>
parents:
97871
diff
changeset
|
1281 fprintf (dpyinfo->termscript, "\n<UPDATE_END\n"); |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1282 dpyinfo->mouse_highlight.mouse_face_defer = 0; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1283 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1284 |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1285 static void |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1286 IT_frame_up_to_date (struct frame *f) |
| 13179 | 1287 { |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1288 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (f); |
|
28553
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1289 Lisp_Object new_cursor, frame_desired_cursor; |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1290 struct window *sw; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1291 |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1292 if (hlinfo->mouse_face_deferred_gc |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1293 || (f && f == hlinfo->mouse_face_mouse_frame)) |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1294 { |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1295 BLOCK_INPUT; |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1296 if (hlinfo->mouse_face_mouse_frame) |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1297 note_mouse_highlight (hlinfo->mouse_face_mouse_frame, |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1298 hlinfo->mouse_face_mouse_x, |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1299 hlinfo->mouse_face_mouse_y); |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1300 hlinfo->mouse_face_deferred_gc = 0; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1301 UNBLOCK_INPUT; |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1302 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1303 |
|
28553
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1304 /* Set the cursor type to whatever they wanted. In a minibuffer |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1305 window, we want the cursor to appear only if we are reading input |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1306 from this window, and we want the cursor to be taken from the |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1307 frame parameters. For the selected window, we use either its |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1308 buffer-local value or the value from the frame parameters if the |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1309 buffer doesn't define its local value for the cursor type. */ |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1310 sw = XWINDOW (f->selected_window); |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1311 frame_desired_cursor = Fcdr (Fassq (Qcursor_type, f->param_alist)); |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1312 if (cursor_in_echo_area |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1313 && FRAME_HAS_MINIBUF_P (f) |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1314 && EQ (FRAME_MINIBUF_WINDOW (f), echo_area_window) |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1315 && sw == XWINDOW (echo_area_window)) |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1316 new_cursor = frame_desired_cursor; |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1317 else |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1318 { |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1319 struct buffer *b = XBUFFER (sw->buffer); |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1320 |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1321 if (EQ (b->cursor_type, Qt)) |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1322 new_cursor = frame_desired_cursor; |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1323 else if (NILP (b->cursor_type)) /* nil means no cursor */ |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1324 new_cursor = Fcons (Qbar, make_number (0)); |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1325 else |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1326 new_cursor = b->cursor_type; |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1327 } |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1328 |
|
56d5ca61cfd8
(NUM_MOUSE_BUTTONS): Define.
Eli Zaretskii <eliz@gnu.org>
parents:
28227
diff
changeset
|
1329 IT_set_cursor_type (f, new_cursor); |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1330 |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
1331 IT_cmgoto (f); /* position cursor when update is done */ |
| 9572 | 1332 } |
| 1333 | |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1334 /* Copy LEN glyphs displayed on a single line whose vertical position |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1335 is YPOS, beginning at horizontal position XFROM to horizontal |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1336 position XTO, by moving blocks in the video memory. Used by |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1337 functions that insert and delete glyphs. */ |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1338 static void |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1339 IT_copy_glyphs (int xfrom, int xto, size_t len, int ypos) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1340 { |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1341 /* The offsets of source and destination relative to the |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1342 conventional memorty selector. */ |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1343 int from = 2 * (xfrom + screen_size_X * ypos) + ScreenPrimary; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1344 int to = 2 * (xto + screen_size_X * ypos) + ScreenPrimary; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1345 |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1346 if (from == to || len <= 0) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1347 return; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1348 |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1349 _farsetsel (_dos_ds); |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1350 |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1351 /* The source and destination might overlap, so we need to move |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1352 glyphs non-destructively. */ |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1353 if (from > to) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1354 { |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1355 for ( ; len; from += 2, to += 2, len--) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1356 _farnspokew (to, _farnspeekw (from)); |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1357 } |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1358 else |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1359 { |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1360 from += (len - 1) * 2; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1361 to += (len - 1) * 2; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1362 for ( ; len; from -= 2, to -= 2, len--) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1363 _farnspokew (to, _farnspeekw (from)); |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1364 } |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1365 if (screen_virtual_segment) |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1366 dosv_refresh_virtual_screen (ypos * screen_size_X * 2, screen_size_X); |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1367 } |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1368 |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1369 /* Insert and delete glyphs. */ |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1370 static void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
1371 IT_insert_glyphs (struct frame *f, struct glyph *start, int len) |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1372 { |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1373 int shift_by_width = screen_size_X - (new_pos_X + len); |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1374 |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1375 /* Shift right the glyphs from the nominal cursor position to the |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1376 end of this line. */ |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1377 IT_copy_glyphs (new_pos_X, new_pos_X + len, shift_by_width, new_pos_Y); |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1378 |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
1379 /* Now write the glyphs to be inserted. */ |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1380 IT_write_glyphs (f, start, len); |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1381 } |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1382 |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1383 static void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
1384 IT_delete_glyphs (struct frame *f, int n) |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1385 { |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1386 abort (); |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1387 } |
|
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
1388 |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1389 /* set-window-configuration on window.c needs this. */ |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1390 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
1391 x_set_menu_bar_lines (struct frame *f, Lisp_Object value, Lisp_Object oldval) |
| 9572 | 1392 { |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1393 extern void set_menu_bar_lines (struct frame *, Lisp_Object, Lisp_Object); |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1394 |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1395 set_menu_bar_lines (f, value, oldval); |
| 9572 | 1396 } |
| 1397 | |
|
32271
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
1398 /* This was copied from xfaces.c */ |
|
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
1399 |
|
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
1400 extern Lisp_Object Qbackground_color; |
|
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
1401 extern Lisp_Object Qforeground_color; |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1402 Lisp_Object Qreverse; |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1403 extern Lisp_Object Qtitle; |
|
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1404 |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
1405 /* IT_set_terminal_modes is called when emacs is started, |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
1406 resumed, and whenever the screen is redrawn! */ |
| 13179 | 1407 |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1408 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1409 IT_set_terminal_modes (struct terminal *term) |
| 13179 | 1410 { |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1411 struct tty_display_info *tty; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1412 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1413 /* If called with initial terminal, it's too early to do anything |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1414 useful. */ |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1415 if (term->type == output_initial) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1416 return; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1417 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1418 tty = term->display_info.tty; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1419 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1420 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1421 fprintf (tty->termscript, "\n<SET_TERM>"); |
| 13179 | 1422 |
| 1423 screen_size_X = ScreenCols (); | |
| 1424 screen_size_Y = ScreenRows (); | |
| 1425 screen_size = screen_size_X * screen_size_Y; | |
| 45332 | 1426 |
| 13179 | 1427 new_pos_X = new_pos_Y = 0; |
| 1428 current_pos_X = current_pos_Y = -1; | |
| 1429 | |
| 1430 if (term_setup_done) | |
| 1431 return; | |
| 1432 term_setup_done = 1; | |
| 45332 | 1433 |
| 13179 | 1434 startup_screen_size_X = screen_size_X; |
| 1435 startup_screen_size_Y = screen_size_Y; | |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1436 startup_screen_attrib = ScreenAttrib; |
| 13179 | 1437 |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1438 /* Is DOS/V (or any other RSIS software which relocates |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1439 the screen) installed? */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1440 { |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1441 unsigned short es_value; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1442 __dpmi_regs regs; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1443 |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1444 regs.h.ah = 0xfe; /* get relocated screen address */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1445 if (ScreenPrimary == 0xb0000UL || ScreenPrimary == 0xb8000UL) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1446 regs.x.es = (ScreenPrimary >> 4) & 0xffff; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1447 else if (screen_old_address) /* already switched to Japanese mode once */ |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1448 regs.x.es = (screen_old_address >> 4) & 0xffff; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1449 else |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1450 regs.x.es = ScreenMode () == 7 ? 0xb000 : 0xb800; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1451 regs.x.di = 0; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1452 es_value = regs.x.es; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1453 __dpmi_int (0x10, ®s); |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1454 |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1455 if (regs.x.es != es_value) |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1456 { |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1457 /* screen_old_address is only set if ScreenPrimary does NOT |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1458 already point to the relocated buffer address returned by |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1459 the Int 10h/AX=FEh call above. DJGPP v2.02 and later sets |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1460 ScreenPrimary to that address at startup under DOS/V. */ |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1461 if (regs.x.es != ((ScreenPrimary >> 4) & 0xffff)) |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1462 screen_old_address = ScreenPrimary; |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1463 screen_virtual_segment = regs.x.es; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1464 screen_virtual_offset = regs.x.di; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1465 ScreenPrimary = (screen_virtual_segment << 4) + screen_virtual_offset; |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1466 } |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1467 } |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1468 |
| 13179 | 1469 ScreenGetCursor (&startup_pos_Y, &startup_pos_X); |
| 1470 ScreenRetrieve (startup_screen_buffer = xmalloc (screen_size * 2)); | |
| 1471 | |
|
15341
8a0f5a5937e5
(bright_bg): New function, enables bright background colors.
Richard M. Stallman <rms@gnu.org>
parents:
15222
diff
changeset
|
1472 bright_bg (); |
| 13179 | 1473 } |
| 1474 | |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
1475 /* IT_reset_terminal_modes is called when emacs is |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
1476 suspended or killed. */ |
| 13179 | 1477 |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1478 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1479 IT_reset_terminal_modes (struct terminal *term) |
| 13179 | 1480 { |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1481 int display_row_start = (int) ScreenPrimary; |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1482 int saved_row_len = startup_screen_size_X * 2; |
| 45332 | 1483 int update_row_len = ScreenCols () * 2, current_rows = ScreenRows (); |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1484 int to_next_row = update_row_len; |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1485 unsigned char *saved_row = startup_screen_buffer; |
| 45332 | 1486 int cursor_pos_X = ScreenCols () - 1, cursor_pos_Y = ScreenRows () - 1; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1487 struct tty_display_info *tty = term->display_info.tty; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1488 |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1489 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1490 fprintf (tty->termscript, "\n<RESET_TERM>"); |
| 13179 | 1491 |
| 1492 if (!term_setup_done) | |
| 1493 return; | |
| 45332 | 1494 |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1495 mouse_off (); |
|
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
1496 |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
1497 /* Leave the video system in the same state as we found it, |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
1498 as far as the blink/bright-background bit is concerned. */ |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
1499 maybe_enable_blinking (); |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1500 |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1501 /* We have a situation here. |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1502 We cannot just do ScreenUpdate(startup_screen_buffer) because |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1503 the luser could have changed screen dimensions inside Emacs |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1504 and failed (or didn't want) to restore them before killing |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1505 Emacs. ScreenUpdate() uses the *current* screen dimensions and |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1506 thus will happily use memory outside what was allocated for |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1507 `startup_screen_buffer'. |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1508 Thus we only restore as much as the current screen dimensions |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1509 can hold, and clear the rest (if the saved screen is smaller than |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1510 the current) with the color attribute saved at startup. The cursor |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1511 is also restored within the visible dimensions. */ |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1512 |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1513 ScreenAttrib = startup_screen_attrib; |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1514 |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1515 /* Don't restore the screen if we are exiting less than 2 seconds |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1516 after startup: we might be crashing, and the screen might show |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1517 some vital clues to what's wrong. */ |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1518 if (clock () - startup_time >= 2*CLOCKS_PER_SEC) |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1519 { |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1520 ScreenClear (); |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1521 if (screen_virtual_segment) |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1522 dosv_refresh_virtual_screen (0, screen_size); |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1523 |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1524 if (update_row_len > saved_row_len) |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1525 update_row_len = saved_row_len; |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1526 if (current_rows > startup_screen_size_Y) |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1527 current_rows = startup_screen_size_Y; |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1528 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1529 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1530 fprintf (tty->termscript, "<SCREEN RESTORED (dimensions=%dx%d)>\n", |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1531 update_row_len / 2, current_rows); |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1532 |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1533 while (current_rows--) |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1534 { |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1535 dosmemput (saved_row, update_row_len, display_row_start); |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1536 if (screen_virtual_segment) |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1537 dosv_refresh_virtual_screen (display_row_start - ScreenPrimary, |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1538 update_row_len / 2); |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1539 saved_row += saved_row_len; |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1540 display_row_start += to_next_row; |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
1541 } |
|
13717
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1542 } |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1543 if (startup_pos_X < cursor_pos_X) |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1544 cursor_pos_X = startup_pos_X; |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1545 if (startup_pos_Y < cursor_pos_Y) |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1546 cursor_pos_Y = startup_pos_Y; |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1547 |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1548 ScreenSetCursor (cursor_pos_Y, cursor_pos_X); |
|
d7bb4093a950
(IT_set_terminal_modes): Save screen color attribute
Karl Heuer <kwzh@gnu.org>
parents:
13714
diff
changeset
|
1549 xfree (startup_screen_buffer); |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1550 startup_screen_buffer = NULL; |
| 13179 | 1551 |
| 1552 term_setup_done = 0; | |
| 1553 } | |
| 1554 | |
|
21785
c7ef8b48a039
(IT_ring_bell, IT_write_glyphs, IT_clear_end_of_line,
Eli Zaretskii <eliz@gnu.org>
parents:
21693
diff
changeset
|
1555 static void |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1556 IT_set_terminal_window (struct frame *f, int foo) |
| 13179 | 1557 { |
| 1558 } | |
| 1559 | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1560 /* Remember the screen colors of the curent frame, to serve as the |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1561 default colors for newly-created frames. */ |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1562 DEFUN ("msdos-remember-default-colors", Fmsdos_remember_default_colors, |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1563 Smsdos_remember_default_colors, 1, 1, 0, |
|
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
1564 doc: /* Remember the screen colors of the current frame. */) |
|
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
1565 (Lisp_Object frame) |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1566 { |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1567 struct frame *f; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1568 |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40082
diff
changeset
|
1569 CHECK_FRAME (frame); |
|
97771
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1570 f = XFRAME (frame); |
|
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
1571 |
|
36483
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
1572 /* This function is called after applying default-frame-alist to the |
|
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
1573 initial frame. At that time, if reverse-colors option was |
|
c3734c1b1362
(Fmsdos_remember_default_colors): If default-frame-alist
Eli Zaretskii <eliz@gnu.org>
parents:
34676
diff
changeset
|
1574 specified in default-frame-alist, it was already applied, and |
|
97771
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1575 frame colors are reversed. */ |
|
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1576 initial_screen_colors[0] = FRAME_FOREGROUND_PIXEL (f); |
|
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1577 initial_screen_colors[1] = FRAME_BACKGROUND_PIXEL (f); |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1578 |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1579 return Qnil; |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1580 } |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1581 |
| 9572 | 1582 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
1583 IT_set_frame_parameters (struct frame *f, Lisp_Object alist) |
| 9572 | 1584 { |
| 1585 Lisp_Object tail; | |
| 45332 | 1586 int i, j, length = XINT (Flength (alist)); |
|
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1587 Lisp_Object *parms |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1588 = (Lisp_Object *) alloca (length * sizeof (Lisp_Object)); |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1589 Lisp_Object *values |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1590 = (Lisp_Object *) alloca (length * sizeof (Lisp_Object)); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1591 /* Do we have to reverse the foreground and background colors? */ |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1592 int reverse = EQ (Fcdr (Fassq (Qreverse, f->param_alist)), Qt); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1593 int redraw = 0, fg_set = 0, bg_set = 0; |
| 45332 | 1594 unsigned long orig_fg, orig_bg; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1595 struct tty_display_info *tty = FRAME_TTY (f); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1596 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1597 /* If we are creating a new frame, begin with the original screen colors |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1598 used for the initial frame. */ |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1599 if (!f->default_face_done_p |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1600 && initial_screen_colors[0] != -1 && initial_screen_colors[1] != -1) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1601 { |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1602 FRAME_FOREGROUND_PIXEL (f) = initial_screen_colors[0]; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1603 FRAME_BACKGROUND_PIXEL (f) = initial_screen_colors[1]; |
|
97771
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1604 init_frame_faces (f); |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1605 f->default_face_done_p = 1; |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1606 } |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1607 orig_fg = reverse ? FRAME_BACKGROUND_PIXEL (f) : FRAME_FOREGROUND_PIXEL (f); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1608 orig_bg = reverse ? FRAME_FOREGROUND_PIXEL (f) : FRAME_BACKGROUND_PIXEL (f); |
|
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1609 |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1610 /* Extract parm names and values into those vectors. */ |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1611 i = 0; |
| 9572 | 1612 for (tail = alist; CONSP (tail); tail = Fcdr (tail)) |
| 1613 { | |
|
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1614 Lisp_Object elt; |
| 9572 | 1615 |
| 1616 elt = Fcar (tail); | |
|
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1617 parms[i] = Fcar (elt); |
|
40656
cdfd4d09b79a
Update usage of CHECK_ macros (remove unused second argument).
Pavel Jan?k <Pavel@Janik.cz>
parents:
40082
diff
changeset
|
1618 CHECK_SYMBOL (parms[i]); |
|
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1619 values[i] = Fcdr (elt); |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1620 i++; |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1621 } |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1622 |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1623 j = i; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1624 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1625 for (i = 0; i < j; i++) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1626 { |
|
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
1627 Lisp_Object prop, val; |
|
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
1628 |
|
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
1629 prop = parms[i]; |
|
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
1630 val = values[i]; |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1631 |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1632 if (EQ (prop, Qreverse)) |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1633 reverse = EQ (val, Qt); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1634 } |
|
32546
9672c4db6bed
(IT_set_face): Compare highlighted face with the default
Eli Zaretskii <eliz@gnu.org>
parents:
32337
diff
changeset
|
1635 |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1636 if (tty->termscript && reverse) |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1637 fprintf (tty->termscript, "<INVERSE-VIDEO>\n"); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1638 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1639 /* Now process the alist elements in reverse of specified order. */ |
|
19293
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1640 for (i--; i >= 0; i--) |
|
af78882332ed
(IT_set_frame_parameters): Actually store the frame
Richard M. Stallman <rms@gnu.org>
parents:
19287
diff
changeset
|
1641 { |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1642 Lisp_Object prop, val; |
|
32335
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
1643 |
|
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
1644 prop = parms[i]; |
|
442188fbf8b5
(IT_set_frame_parameters): Don't initialize Lisp_Object
Eli Zaretskii <eliz@gnu.org>
parents:
32271
diff
changeset
|
1645 val = values[i]; |
| 9572 | 1646 |
|
19864
44dcf37ec345
(syms_of_msdos): Intern background-color and
Richard M. Stallman <rms@gnu.org>
parents:
19603
diff
changeset
|
1647 if (EQ (prop, Qforeground_color)) |
| 9572 | 1648 { |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1649 unsigned long new_color = load_color (f, NULL, val, reverse |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1650 ? LFACE_BACKGROUND_INDEX |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1651 : LFACE_FOREGROUND_INDEX); |
|
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
1652 if (new_color != FACE_TTY_DEFAULT_COLOR |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
1653 && new_color != FACE_TTY_DEFAULT_FG_COLOR |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
1654 && new_color != FACE_TTY_DEFAULT_BG_COLOR) |
| 9572 | 1655 { |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1656 if (!reverse) |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1657 { |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1658 FRAME_FOREGROUND_PIXEL (f) = new_color; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1659 /* Make sure the foreground of the default face for |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1660 this frame is changed as well. */ |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1661 update_face_from_frame_parameter (f, Qforeground_color, val); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1662 fg_set = 1; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1663 if (tty->termscript) |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1664 fprintf (tty->termscript, "<FGCOLOR %lu>\n", new_color); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1665 } |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1666 else |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1667 { |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1668 FRAME_BACKGROUND_PIXEL (f) = new_color; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1669 update_face_from_frame_parameter (f, Qbackground_color, val); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1670 bg_set = 1; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1671 if (tty->termscript) |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1672 fprintf (tty->termscript, "<BGCOLOR %lu>\n", new_color); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1673 } |
| 9572 | 1674 redraw = 1; |
| 1675 } | |
| 1676 } | |
|
19864
44dcf37ec345
(syms_of_msdos): Intern background-color and
Richard M. Stallman <rms@gnu.org>
parents:
19603
diff
changeset
|
1677 else if (EQ (prop, Qbackground_color)) |
| 9572 | 1678 { |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1679 unsigned long new_color = load_color (f, NULL, val, reverse |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1680 ? LFACE_FOREGROUND_INDEX |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1681 : LFACE_BACKGROUND_INDEX); |
|
26946
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
1682 if (new_color != FACE_TTY_DEFAULT_COLOR |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
1683 && new_color != FACE_TTY_DEFAULT_FG_COLOR |
|
9e0e23a92539
(IT_set_face): Don't swap face colors when highlight or
Eli Zaretskii <eliz@gnu.org>
parents:
26902
diff
changeset
|
1684 && new_color != FACE_TTY_DEFAULT_BG_COLOR) |
| 9572 | 1685 { |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1686 if (!reverse) |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1687 { |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1688 FRAME_BACKGROUND_PIXEL (f) = new_color; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1689 /* Make sure the background of the default face for |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1690 this frame is changed as well. */ |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1691 bg_set = 1; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1692 update_face_from_frame_parameter (f, Qbackground_color, val); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1693 if (tty->termscript) |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1694 fprintf (tty->termscript, "<BGCOLOR %lu>\n", new_color); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1695 } |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1696 else |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1697 { |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1698 FRAME_FOREGROUND_PIXEL (f) = new_color; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1699 fg_set = 1; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1700 update_face_from_frame_parameter (f, Qforeground_color, val); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1701 if (tty->termscript) |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1702 fprintf (tty->termscript, "<FGCOLOR %lu>\n", new_color); |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1703 } |
| 9572 | 1704 redraw = 1; |
| 1705 } | |
| 1706 } | |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1707 else if (EQ (prop, Qtitle)) |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1708 { |
|
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1709 x_set_title (f, val); |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1710 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1711 fprintf (tty->termscript, "<TITLE: %s>\n", SDATA (val)); |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1712 } |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1713 else if (EQ (prop, Qcursor_type)) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1714 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1715 IT_set_cursor_type (f, val); |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1716 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1717 fprintf (tty->termscript, "<CTYPE: %s>\n", |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1718 EQ (val, Qbar) |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1719 || EQ (val, Qhbar) |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1720 || (CONSP (val) && (EQ (XCAR (val), Qbar) |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
1721 || EQ (XCAR (val), Qhbar))) |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1722 ? "bar" : "box"); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
1723 } |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1724 else if (EQ (prop, Qtty_type)) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1725 { |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1726 internal_terminal_init (); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1727 if (tty->termscript) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1728 fprintf (tty->termscript, "<TERM_INIT done, TTY_TYPE: %.*s>\n", |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1729 SBYTES (val), SDATA (val)); |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1730 } |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1731 store_frame_param (f, prop, val); |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1732 } |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1733 |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1734 /* If they specified "reverse", but not the colors, we need to swap |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1735 the current frame colors. */ |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1736 if (reverse) |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1737 { |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1738 if (!fg_set) |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1739 { |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1740 FRAME_FOREGROUND_PIXEL (f) = orig_bg; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1741 update_face_from_frame_parameter (f, Qforeground_color, |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1742 tty_color_name (f, orig_bg)); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1743 redraw = 1; |
|
20036
65c394bb8b17
(mouse_get_pos): Remove reduntant call to `int86'.
Eli Zaretskii <eliz@gnu.org>
parents:
19871
diff
changeset
|
1744 } |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1745 if (!bg_set) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1746 { |
|
109118
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1747 FRAME_BACKGROUND_PIXEL (f) = orig_fg; |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1748 update_face_from_frame_parameter (f, Qbackground_color, |
|
254d81c0e750
Fix setting colors on MS-DOS frames.
Eli Zaretskii <eliz@gnu.org>
parents:
109117
diff
changeset
|
1749 tty_color_name (f, orig_fg)); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1750 redraw = 1; |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1751 } |
| 9572 | 1752 } |
| 1753 | |
| 1754 if (redraw) | |
| 1755 { | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1756 face_change_count++; /* forces xdisp.c to recompute basic faces */ |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1757 if (f == SELECTED_FRAME()) |
|
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1758 redraw_frame (f); |
| 9572 | 1759 } |
| 1760 } | |
| 1761 | |
|
16915
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
1762 extern void init_frame_faces (FRAME_PTR); |
|
8d28d96f6031
(run_msdos_command): Remove unused variables.
Eli Zaretskii <eliz@gnu.org>
parents:
16872
diff
changeset
|
1763 |
| 13179 | 1764 #endif /* !HAVE_X_WINDOWS */ |
| 9572 | 1765 |
| 1766 | |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
1767 /* Do we need the internal terminal? */ |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
1768 |
| 5503 | 1769 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
1770 internal_terminal_init (void) |
| 5503 | 1771 { |
|
97736
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1772 static int init_needed = 1; |
| 45332 | 1773 char *term = getenv ("TERM"), *colors; |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1774 struct frame *sf = SELECTED_FRAME(); |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1775 struct tty_display_info *tty; |
| 13179 | 1776 |
| 9572 | 1777 #ifdef HAVE_X_WINDOWS |
| 1778 if (!inhibit_window_system) | |
| 1779 return; | |
| 1780 #endif | |
| 1781 | |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1782 /* If this is the initial terminal, we are done here. */ |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1783 if (sf->output_method == output_initial) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1784 return; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1785 |
| 5503 | 1786 internal_terminal |
| 1787 = (!noninteractive) && term && !strcmp (term, "internal"); | |
| 9572 | 1788 |
| 1789 #ifndef HAVE_X_WINDOWS | |
| 13179 | 1790 if (!internal_terminal || inhibit_window_system) |
| 9572 | 1791 { |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1792 sf->output_method = output_termcap; |
| 13179 | 1793 return; |
| 1794 } | |
| 9572 | 1795 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1796 tty = FRAME_TTY (sf); |
|
97771
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1797 current_kboard->Vwindow_system = Qpc; |
|
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1798 sf->output_method = output_msdos_raw; |
|
97736
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1799 if (init_needed) |
| 13179 | 1800 { |
|
97736
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1801 if (!tty->termscript && getenv ("EMACSTEST")) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1802 tty->termscript = fopen (getenv ("EMACSTEST"), "wt"); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1803 if (tty->termscript) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1804 { |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1805 time_t now = time (NULL); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1806 struct tm *tnow = localtime (&now); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1807 char tbuf[100]; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1808 |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1809 strftime (tbuf, sizeof (tbuf) - 1, "%a %b %e %Y %H:%M:%S %Z", tnow); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1810 fprintf (tty->termscript, "\nEmacs session started at %s\n", tbuf); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1811 fprintf (tty->termscript, "=====================\n\n"); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1812 } |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1813 |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1814 Vinitial_window_system = Qpc; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1815 Vwindow_system_version = make_number (23); /* RE Emacs version */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1816 tty->terminal->type = output_msdos_raw; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1817 |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1818 /* If Emacs was dumped on DOS/V machine, forget the stale VRAM |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1819 address. */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1820 screen_old_address = 0; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1821 |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1822 /* Forget the stale screen colors as well. */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1823 initial_screen_colors[0] = initial_screen_colors[1] = -1; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1824 |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1825 FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ()) = 7; /* White */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1826 FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ()) = 0; /* Black */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1827 bright_bg (); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1828 colors = getenv ("EMACSCOLORS"); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1829 if (colors && strlen (colors) >= 2) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1830 { |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1831 /* The colors use 4 bits each (we enable bright background). */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1832 if (isdigit (colors[0])) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1833 colors[0] -= '0'; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1834 else if (isxdigit (colors[0])) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1835 colors[0] -= (isupper (colors[0]) ? 'A' : 'a') - 10; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1836 if (colors[0] >= 0 && colors[0] < 16) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1837 FRAME_FOREGROUND_PIXEL (SELECTED_FRAME ()) = colors[0]; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1838 if (isdigit (colors[1])) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1839 colors[1] -= '0'; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1840 else if (isxdigit (colors[1])) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1841 colors[1] -= (isupper (colors[1]) ? 'A' : 'a') - 10; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1842 if (colors[1] >= 0 && colors[1] < 16) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1843 FRAME_BACKGROUND_PIXEL (SELECTED_FRAME ()) = colors[1]; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1844 } |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1845 the_only_display_info.mouse_highlight.mouse_face_mouse_frame = NULL; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1846 the_only_display_info.mouse_highlight.mouse_face_deferred_gc = 0; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1847 the_only_display_info.mouse_highlight.mouse_face_beg_row = |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1848 the_only_display_info.mouse_highlight.mouse_face_beg_col = -1; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1849 the_only_display_info.mouse_highlight.mouse_face_end_row = |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1850 the_only_display_info.mouse_highlight.mouse_face_end_col = -1; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1851 the_only_display_info.mouse_highlight.mouse_face_face_id = DEFAULT_FACE_ID; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1852 the_only_display_info.mouse_highlight.mouse_face_window = Qnil; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1853 the_only_display_info.mouse_highlight.mouse_face_mouse_x = |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1854 the_only_display_info.mouse_highlight.mouse_face_mouse_y = 0; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1855 the_only_display_info.mouse_highlight.mouse_face_defer = 0; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
1856 the_only_display_info.mouse_highlight.mouse_face_hidden = 0; |
|
97736
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1857 |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1858 if (have_mouse) /* detected in dos_ttraw, which see */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1859 { |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1860 have_mouse = 1; /* enable mouse */ |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1861 mouse_visible = 0; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1862 mouse_setup_buttons (mouse_button_count); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1863 tty->terminal->mouse_position_hook = &mouse_get_pos; |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1864 mouse_init (); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1865 } |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1866 |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1867 if (tty->termscript && screen_size) |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1868 fprintf (tty->termscript, "<SCREEN SAVED (dimensions=%dx%d)>\n", |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1869 screen_size_X, screen_size_Y); |
|
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1870 |
|
97771
f8bd5f0db6f3
(Fmsdos_remember_default_colors): Don't reverse frame colors under -rv.
Eli Zaretskii <eliz@gnu.org>
parents:
97736
diff
changeset
|
1871 init_frame_faces (sf); |
|
97736
926ec8434a52
(internal_terminal_init): Most initializations done only once, especially
Eli Zaretskii <eliz@gnu.org>
parents:
97680
diff
changeset
|
1872 init_needed = 0; |
| 13179 | 1873 } |
| 9572 | 1874 #endif |
| 5503 | 1875 } |
| 13179 | 1876 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1877 void |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1878 initialize_msdos_display (struct terminal *term) |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1879 { |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1880 term->rif = 0; /* we don't support window-based display */ |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1881 term->cursor_to_hook = term->raw_cursor_to_hook = IT_cursor_to; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1882 term->clear_to_end_hook = IT_clear_to_end; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1883 term->clear_frame_hook = IT_clear_screen; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1884 term->clear_end_of_line_hook = IT_clear_end_of_line; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1885 term->ins_del_lines_hook = 0; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1886 term->insert_glyphs_hook = IT_insert_glyphs; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1887 term->write_glyphs_hook = IT_write_glyphs; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1888 term->delete_glyphs_hook = IT_delete_glyphs; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1889 term->ring_bell_hook = IT_ring_bell; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1890 term->reset_terminal_modes_hook = IT_reset_terminal_modes; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1891 term->set_terminal_modes_hook = IT_set_terminal_modes; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1892 term->set_terminal_window_hook = IT_set_terminal_window; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1893 term->update_begin_hook = IT_update_begin; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1894 term->update_end_hook = IT_update_end; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1895 term->frame_up_to_date_hook = IT_frame_up_to_date; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1896 term->mouse_position_hook = 0; /* set later by dos_ttraw */ |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1897 term->frame_rehighlight_hook = 0; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1898 term->frame_raise_lower_hook = 0; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1899 term->set_vertical_scroll_bar_hook = 0; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1900 term->condemn_scroll_bars_hook = 0; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1901 term->redeem_scroll_bar_hook = 0; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1902 term->judge_scroll_bars_hook = 0; |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1903 term->read_socket_hook = &tty_read_avail_input; /* from keyboard.c */ |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1904 } |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
1905 |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
1906 int |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
1907 dos_get_saved_screen (char **screen, int *rows, int *cols) |
| 13179 | 1908 { |
| 1909 #ifndef HAVE_X_WINDOWS | |
| 1910 *screen = startup_screen_buffer; | |
| 1911 *cols = startup_screen_size_X; | |
| 1912 *rows = startup_screen_size_Y; | |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
1913 return *screen != (char *)0; |
| 13179 | 1914 #else |
| 1915 return 0; | |
| 45332 | 1916 #endif |
| 13179 | 1917 } |
|
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1918 |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1919 #ifndef HAVE_X_WINDOWS |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1920 |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1921 /* We are not X, but we can emulate it well enough for our needs... */ |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1922 void |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1923 check_x (void) |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1924 { |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1925 if (! FRAME_MSDOS_P (SELECTED_FRAME())) |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
1926 error ("Not running under a window system"); |
|
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1927 } |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1928 |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1929 #endif |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
1930 |
| 13274 | 1931 |
| 13179 | 1932 /* ----------------------- Keyboard control ---------------------- |
| 1933 * | |
| 1934 * Keymaps reflect the following keyboard layout: | |
| 1935 * | |
| 1936 * 0 1 2 3 4 5 6 7 8 9 10 11 12 BS | |
| 1937 * TAB 15 16 17 18 19 20 21 22 23 24 25 26 (41) | |
| 1938 * CLOK 30 31 32 33 34 35 36 37 38 39 40 (41) RET | |
| 1939 * SH () 45 46 47 48 49 50 51 52 53 54 SHIFT | |
| 1940 * SPACE | |
| 1941 */ | |
| 1942 | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1943 #define Ignore 0x0000 |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1944 #define Normal 0x0000 /* normal key - alt changes scan-code */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1945 #define FctKey 0x1000 /* func key if c == 0, else c */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1946 #define Special 0x2000 /* func key even if c != 0 */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1947 #define ModFct 0x3000 /* special if mod-keys, else 'c' */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1948 #define Map 0x4000 /* alt scan-code, map to unshift/shift key */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1949 #define KeyPad 0x5000 /* map to insert/kp-0 depending on c == 0xe0 */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1950 #define Grey 0x6000 /* Grey keypad key */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1951 |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1952 #define Alt 0x0100 /* alt scan-code */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1953 #define Ctrl 0x0200 /* ctrl scan-code */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1954 #define Shift 0x0400 /* shift scan-code */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1955 |
| 74145 | 1956 static int extended_kbd; /* 101 (102) keyboard present. */ |
| 13179 | 1957 |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1958 struct kbd_translate { |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1959 unsigned char sc; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1960 unsigned char ch; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1961 unsigned short code; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1962 }; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1963 |
| 13179 | 1964 struct dos_keyboard_map |
| 1965 { | |
| 1966 char *unshifted; | |
| 1967 char *shifted; | |
| 1968 char *alt_gr; | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1969 struct kbd_translate *translate_table; |
| 13179 | 1970 }; |
| 1971 | |
|
13040
169d50e2ee4c
(gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents:
13020
diff
changeset
|
1972 |
| 13179 | 1973 static struct dos_keyboard_map us_keyboard = { |
| 1974 /* 0 1 2 3 4 5 */ | |
| 1975 /* 01234567890123456789012345678901234567890 12345678901234 */ | |
| 1976 "`1234567890-= qwertyuiop[] asdfghjkl;'\\ zxcvbnm,./ ", | |
| 1977 /* 0123456789012345678901234567890123456789 012345678901234 */ | |
| 1978 "~!@#$%^&*()_+ QWERTYUIOP{} ASDFGHJKL:\"| ZXCVBNM<>? ", | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1979 0, /* no Alt-Gr key */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1980 0 /* no translate table */ |
| 13179 | 1981 }; |
| 1982 | |
| 1983 static struct dos_keyboard_map fr_keyboard = { | |
| 1984 /* 0 1 2 3 4 5 */ | |
| 1985 /* 012 3456789012345678901234567890123456789012345678901234 */ | |
| 1986 "ý&‚\",(-Š_€…)= azertyuiop^$ qsdfghjklm—* wxcvbnm;:! ", | |
| 1987 /* 0123456789012345678901234567890123456789012345678901234 */ | |
| 1988 " 1234567890ø+ AZERTYUIOPùœ QSDFGHJKLM%æ WXCVBN?./õ ", | |
| 1989 /* 01234567 89012345678901234567890123456789012345678901234 */ | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1990 " ~#{[|`\\^@]} Ï ", |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
1991 0 /* no translate table */ |
| 13179 | 1992 }; |
| 1993 | |
|
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
1994 /* |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
1995 * Italian keyboard support, country code 39. |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
1996 * '<' 56:3c*0000 |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
1997 * '>' 56:3e*0000 |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
1998 * added also {,},` as, respectively, AltGr-8, AltGr-9, AltGr-' |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
1999 * Donated by Stefano Brozzi <brozzis@mag00.cedi.unipr.it> |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2000 */ |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2001 |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2002 static struct kbd_translate it_kbd_translate_table[] = { |
|
24566
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2003 { 0x56, 0x3c, Normal | 13 }, |
|
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2004 { 0x56, 0x3e, Normal | 27 }, |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2005 { 0, 0, 0 } |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2006 }; |
|
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2007 static struct dos_keyboard_map it_keyboard = { |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2008 /* 0 1 2 3 4 5 */ |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2009 /* 0 123456789012345678901234567890123456789012345678901234 */ |
|
24566
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2010 "\\1234567890'< qwertyuiopŠ+> asdfghjkl•…— zxcvbnm,.- ", |
|
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2011 /* 01 23456789012345678901234567890123456789012345678901234 */ |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2012 "|!\"œ$%&/()=?^> QWERTYUIOP‚* ASDFGHJKL‡øõ ZXCVBNM;:_ ", |
|
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2013 /* 0123456789012345678901234567890123456789012345678901234 */ |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2014 " {}~` [] @# ", |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2015 it_kbd_translate_table |
|
21583
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2016 }; |
|
ba75380b39f7
(it_keyboard): New variable, supports Italian keyboard.
Eli Zaretskii <eliz@gnu.org>
parents:
21489
diff
changeset
|
2017 |
| 13179 | 2018 static struct dos_keyboard_map dk_keyboard = { |
| 2019 /* 0 1 2 3 4 5 */ | |
| 2020 /* 0123456789012345678901234567890123456789012345678901234 */ | |
| 2021 "«1234567890+| qwertyuiop†~ asdfghjkl‘›' zxcvbnm,.- ", | |
| 2022 /* 01 23456789012345678901234567890123456789012345678901234 */ | |
| 2023 "õ!\"#$%&/()=?` QWERTYUIOP^ ASDFGHJKL’* ZXCVBNM;:_ ", | |
| 2024 /* 0123456789012345678901234567890123456789012345678901234 */ | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2025 " @œ$ {[]} | ", |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2026 0 /* no translate table */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2027 }; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2028 |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2029 static struct kbd_translate jp_kbd_translate_table[] = { |
|
24560
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2030 { 0x73, 0x5c, Normal | 0 }, |
|
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2031 { 0x73, 0x5f, Normal | 0 }, |
|
24593
ffe7dfc452d7
(jp_kbd_translate_table): Fix the other \ key.
Eli Zaretskii <eliz@gnu.org>
parents:
24566
diff
changeset
|
2032 { 0x73, 0x1c, Map | 0 }, |
|
24560
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2033 { 0x7d, 0x5c, Normal | 13 }, |
|
bb608cd1af6e
(jp_kbd_translate_table): Fix last change.
Eli Zaretskii <eliz@gnu.org>
parents:
24559
diff
changeset
|
2034 { 0x7d, 0x7c, Normal | 13 }, |
|
24566
5082c3adfa2f
(dos_rawgetc): Don't zero out c if private translation
Eli Zaretskii <eliz@gnu.org>
parents:
24560
diff
changeset
|
2035 { 0x7d, 0x1c, Map | 13 }, |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2036 { 0, 0, 0 } |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2037 }; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2038 static struct dos_keyboard_map jp_keyboard = { |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2039 /* 0 1 2 3 4 5 */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2040 /* 0123456789012 345678901234567890123456789012345678901234 */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2041 "\\1234567890-^\\ qwertyuiop@[ asdfghjkl;:] zxcvbnm,./ ", |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2042 /* 01 23456789012345678901234567890123456789012345678901234 */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2043 "_!\"#$%&'()~=~| QWERTYUIOP`{ ASDFGHJKL+*} ZXCVBNM<>? ", |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2044 0, /* no Alt-Gr key */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2045 jp_kbd_translate_table |
| 13179 | 2046 }; |
| 2047 | |
| 2048 static struct keyboard_layout_list | |
| 2049 { | |
| 2050 int country_code; | |
| 2051 struct dos_keyboard_map *keyboard_map; | |
| 13274 | 2052 } keyboard_layout_list[] = |
| 2053 { | |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2054 { 1, &us_keyboard }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2055 { 33, &fr_keyboard }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2056 { 39, &it_keyboard }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2057 { 45, &dk_keyboard }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2058 { 81, &jp_keyboard } |
| 13179 | 2059 }; |
| 2060 | |
| 2061 static struct dos_keyboard_map *keyboard; | |
| 2062 static int keyboard_map_all; | |
|
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2063 static int international_keyboard; |
|
7523
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2064 |
|
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2065 int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2066 dos_set_keyboard (int code, int always) |
|
7523
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2067 { |
| 13179 | 2068 int i; |
|
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2069 _go32_dpmi_registers regs; |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2070 |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2071 /* See if Keyb.Com is installed (for international keyboard support). |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2072 Note: calling Int 2Fh via int86 wedges the DOS box on some versions |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2073 of Windows 9X! So don't do that! */ |
|
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2074 regs.x.ax = 0xad80; |
|
23011
fe3128dafc96
(dos_set_keyboard): Set up stack and flags before
Eli Zaretskii <eliz@gnu.org>
parents:
22992
diff
changeset
|
2075 regs.x.ss = regs.x.sp = regs.x.flags = 0; |
|
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
2076 _go32_dpmi_simulate_int (0x2f, ®s); |
|
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2077 if (regs.h.al == 0xff) |
|
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2078 international_keyboard = 1; |
|
13624
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2079 |
|
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2080 /* Initialize to US settings, for countries that don't have their own. */ |
|
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2081 keyboard = keyboard_layout_list[0].keyboard_map; |
|
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2082 keyboard_map_all = always; |
|
47484dd9a970
(dos_set_keyboard): If CODE is not recognized,
Richard M. Stallman <rms@gnu.org>
parents:
13520
diff
changeset
|
2083 dos_keyboard_layout = 1; |
| 45332 | 2084 |
| 13179 | 2085 for (i = 0; i < (sizeof (keyboard_layout_list)/sizeof (struct keyboard_layout_list)); i++) |
| 2086 if (code == keyboard_layout_list[i].country_code) | |
| 2087 { | |
| 2088 keyboard = keyboard_layout_list[i].keyboard_map; | |
| 2089 keyboard_map_all = always; | |
| 2090 dos_keyboard_layout = code; | |
| 2091 return 1; | |
| 2092 } | |
|
7523
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2093 return 0; |
|
8994727ff976
(gettimeofday): New function substituting the library
Richard M. Stallman <rms@gnu.org>
parents:
7507
diff
changeset
|
2094 } |
| 13274 | 2095 |
| 13179 | 2096 static struct |
| 2097 { | |
| 2098 unsigned char char_code; /* normal code */ | |
| 2099 unsigned char meta_code; /* M- code */ | |
| 2100 unsigned char keypad_code; /* keypad code */ | |
| 2101 unsigned char editkey_code; /* edit key */ | |
| 2102 } keypad_translate_map[] = { | |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2103 { '0', '0', 0xb0, /* kp-0 */ 0x63 /* insert */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2104 { '1', '1', 0xb1, /* kp-1 */ 0x57 /* end */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2105 { '2', '2', 0xb2, /* kp-2 */ 0x54 /* down */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2106 { '3', '3', 0xb3, /* kp-3 */ 0x56 /* next */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2107 { '4', '4', 0xb4, /* kp-4 */ 0x51 /* left */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2108 { '5', '5', 0xb5, /* kp-5 */ 0xb5 /* kp-5 */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2109 { '6', '6', 0xb6, /* kp-6 */ 0x53 /* right */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2110 { '7', '7', 0xb7, /* kp-7 */ 0x50 /* home */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2111 { '8', '8', 0xb8, /* kp-8 */ 0x52 /* up */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2112 { '9', '9', 0xb9, /* kp-9 */ 0x55 /* prior */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2113 { '.', '-', 0xae, /* kp-decimal */ 0xff /* delete */} |
| 13179 | 2114 }; |
| 2115 | |
| 2116 static struct | |
| 2117 { | |
| 2118 unsigned char char_code; /* normal code */ | |
| 2119 unsigned char keypad_code; /* keypad code */ | |
| 2120 } grey_key_translate_map[] = { | |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2121 { '/', 0xaf /* kp-decimal */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2122 { '*', 0xaa /* kp-multiply */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2123 { '-', 0xad /* kp-subtract */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2124 { '+', 0xab /* kp-add */ }, |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2125 { '\r', 0x8d /* kp-enter */ } |
| 13179 | 2126 }; |
| 2127 | |
| 2128 static unsigned short | |
| 2129 ibmpc_translate_map[] = | |
|
13040
169d50e2ee4c
(gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents:
13020
diff
changeset
|
2130 { |
| 13179 | 2131 /* --------------- 00 to 0f --------------- */ |
| 2132 Normal | 0xff, /* Ctrl Break + Alt-NNN */ | |
| 2133 Alt | ModFct | 0x1b, /* Escape */ | |
| 2134 Normal | 1, /* '1' */ | |
| 2135 Normal | 2, /* '2' */ | |
| 2136 Normal | 3, /* '3' */ | |
| 2137 Normal | 4, /* '4' */ | |
| 2138 Normal | 5, /* '5' */ | |
| 2139 Normal | 6, /* '6' */ | |
| 2140 Normal | 7, /* '7' */ | |
| 2141 Normal | 8, /* '8' */ | |
| 2142 Normal | 9, /* '9' */ | |
| 2143 Normal | 10, /* '0' */ | |
| 2144 Normal | 11, /* '-' */ | |
| 2145 Normal | 12, /* '=' */ | |
| 2146 Special | 0x08, /* Backspace */ | |
| 2147 ModFct | 0x74, /* Tab/Backtab */ | |
| 2148 | |
| 2149 /* --------------- 10 to 1f --------------- */ | |
| 2150 Map | 15, /* 'q' */ | |
| 2151 Map | 16, /* 'w' */ | |
| 2152 Map | 17, /* 'e' */ | |
| 2153 Map | 18, /* 'r' */ | |
| 2154 Map | 19, /* 't' */ | |
| 2155 Map | 20, /* 'y' */ | |
| 2156 Map | 21, /* 'u' */ | |
| 2157 Map | 22, /* 'i' */ | |
| 2158 Map | 23, /* 'o' */ | |
| 2159 Map | 24, /* 'p' */ | |
| 2160 Map | 25, /* '[' */ | |
| 45332 | 2161 Map | 26, /* ']' */ |
| 13179 | 2162 ModFct | 0x0d, /* Return */ |
| 2163 Ignore, /* Ctrl */ | |
| 2164 Map | 30, /* 'a' */ | |
| 2165 Map | 31, /* 's' */ | |
| 2166 | |
| 2167 /* --------------- 20 to 2f --------------- */ | |
| 2168 Map | 32, /* 'd' */ | |
| 2169 Map | 33, /* 'f' */ | |
| 2170 Map | 34, /* 'g' */ | |
| 2171 Map | 35, /* 'h' */ | |
| 2172 Map | 36, /* 'j' */ | |
| 2173 Map | 37, /* 'k' */ | |
| 2174 Map | 38, /* 'l' */ | |
| 2175 Map | 39, /* ';' */ | |
| 2176 Map | 40, /* '\'' */ | |
| 2177 Map | 0, /* '`' */ | |
| 2178 Ignore, /* Left shift */ | |
| 2179 Map | 41, /* '\\' */ | |
| 2180 Map | 45, /* 'z' */ | |
| 2181 Map | 46, /* 'x' */ | |
| 2182 Map | 47, /* 'c' */ | |
| 2183 Map | 48, /* 'v' */ | |
| 2184 | |
| 2185 /* --------------- 30 to 3f --------------- */ | |
| 2186 Map | 49, /* 'b' */ | |
| 2187 Map | 50, /* 'n' */ | |
| 2188 Map | 51, /* 'm' */ | |
| 2189 Map | 52, /* ',' */ | |
| 2190 Map | 53, /* '.' */ | |
| 2191 Map | 54, /* '/' */ | |
| 2192 Ignore, /* Right shift */ | |
| 2193 Grey | 1, /* Grey * */ | |
| 2194 Ignore, /* Alt */ | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2195 Normal | 55, /* ' ' */ |
| 13179 | 2196 Ignore, /* Caps Lock */ |
| 2197 FctKey | 0xbe, /* F1 */ | |
| 2198 FctKey | 0xbf, /* F2 */ | |
| 2199 FctKey | 0xc0, /* F3 */ | |
| 2200 FctKey | 0xc1, /* F4 */ | |
| 2201 FctKey | 0xc2, /* F5 */ | |
| 2202 | |
| 2203 /* --------------- 40 to 4f --------------- */ | |
| 2204 FctKey | 0xc3, /* F6 */ | |
| 2205 FctKey | 0xc4, /* F7 */ | |
| 2206 FctKey | 0xc5, /* F8 */ | |
| 2207 FctKey | 0xc6, /* F9 */ | |
| 2208 FctKey | 0xc7, /* F10 */ | |
| 2209 Ignore, /* Num Lock */ | |
| 2210 Ignore, /* Scroll Lock */ | |
| 2211 KeyPad | 7, /* Home */ | |
| 2212 KeyPad | 8, /* Up */ | |
| 2213 KeyPad | 9, /* Page Up */ | |
| 2214 Grey | 2, /* Grey - */ | |
| 2215 KeyPad | 4, /* Left */ | |
| 2216 KeyPad | 5, /* Keypad 5 */ | |
| 2217 KeyPad | 6, /* Right */ | |
| 2218 Grey | 3, /* Grey + */ | |
| 2219 KeyPad | 1, /* End */ | |
| 2220 | |
| 2221 /* --------------- 50 to 5f --------------- */ | |
| 2222 KeyPad | 2, /* Down */ | |
| 2223 KeyPad | 3, /* Page Down */ | |
| 2224 KeyPad | 0, /* Insert */ | |
| 2225 KeyPad | 10, /* Delete */ | |
| 2226 Shift | FctKey | 0xbe, /* (Shift) F1 */ | |
| 2227 Shift | FctKey | 0xbf, /* (Shift) F2 */ | |
| 2228 Shift | FctKey | 0xc0, /* (Shift) F3 */ | |
| 2229 Shift | FctKey | 0xc1, /* (Shift) F4 */ | |
| 2230 Shift | FctKey | 0xc2, /* (Shift) F5 */ | |
| 2231 Shift | FctKey | 0xc3, /* (Shift) F6 */ | |
| 2232 Shift | FctKey | 0xc4, /* (Shift) F7 */ | |
| 2233 Shift | FctKey | 0xc5, /* (Shift) F8 */ | |
| 2234 Shift | FctKey | 0xc6, /* (Shift) F9 */ | |
| 2235 Shift | FctKey | 0xc7, /* (Shift) F10 */ | |
| 2236 Ctrl | FctKey | 0xbe, /* (Ctrl) F1 */ | |
| 2237 Ctrl | FctKey | 0xbf, /* (Ctrl) F2 */ | |
|
13040
169d50e2ee4c
(gettimeofday, init_gettimeofday, daylight, gmtoffset): Undo previous change.
Paul Eggert <eggert@twinsun.com>
parents:
13020
diff
changeset
|
2238 |
| 13179 | 2239 /* --------------- 60 to 6f --------------- */ |
| 2240 Ctrl | FctKey | 0xc0, /* (Ctrl) F3 */ | |
| 2241 Ctrl | FctKey | 0xc1, /* (Ctrl) F4 */ | |
| 2242 Ctrl | FctKey | 0xc2, /* (Ctrl) F5 */ | |
| 2243 Ctrl | FctKey | 0xc3, /* (Ctrl) F6 */ | |
| 2244 Ctrl | FctKey | 0xc4, /* (Ctrl) F7 */ | |
| 2245 Ctrl | FctKey | 0xc5, /* (Ctrl) F8 */ | |
| 2246 Ctrl | FctKey | 0xc6, /* (Ctrl) F9 */ | |
| 2247 Ctrl | FctKey | 0xc7, /* (Ctrl) F10 */ | |
| 2248 Alt | FctKey | 0xbe, /* (Alt) F1 */ | |
| 2249 Alt | FctKey | 0xbf, /* (Alt) F2 */ | |
| 2250 Alt | FctKey | 0xc0, /* (Alt) F3 */ | |
| 2251 Alt | FctKey | 0xc1, /* (Alt) F4 */ | |
| 2252 Alt | FctKey | 0xc2, /* (Alt) F5 */ | |
| 2253 Alt | FctKey | 0xc3, /* (Alt) F6 */ | |
| 2254 Alt | FctKey | 0xc4, /* (Alt) F7 */ | |
| 2255 Alt | FctKey | 0xc5, /* (Alt) F8 */ | |
| 2256 | |
| 2257 /* --------------- 70 to 7f --------------- */ | |
| 2258 Alt | FctKey | 0xc6, /* (Alt) F9 */ | |
| 2259 Alt | FctKey | 0xc7, /* (Alt) F10 */ | |
| 2260 Ctrl | FctKey | 0x6d, /* (Ctrl) Sys Rq */ | |
| 2261 Ctrl | KeyPad | 4, /* (Ctrl) Left */ | |
| 2262 Ctrl | KeyPad | 6, /* (Ctrl) Right */ | |
| 2263 Ctrl | KeyPad | 1, /* (Ctrl) End */ | |
| 2264 Ctrl | KeyPad | 3, /* (Ctrl) Page Down */ | |
| 2265 Ctrl | KeyPad | 7, /* (Ctrl) Home */ | |
| 2266 Alt | Map | 1, /* '1' */ | |
| 2267 Alt | Map | 2, /* '2' */ | |
| 2268 Alt | Map | 3, /* '3' */ | |
| 2269 Alt | Map | 4, /* '4' */ | |
| 2270 Alt | Map | 5, /* '5' */ | |
| 2271 Alt | Map | 6, /* '6' */ | |
| 2272 Alt | Map | 7, /* '7' */ | |
| 2273 Alt | Map | 8, /* '8' */ | |
| 2274 | |
| 2275 /* --------------- 80 to 8f --------------- */ | |
| 2276 Alt | Map | 9, /* '9' */ | |
| 2277 Alt | Map | 10, /* '0' */ | |
| 2278 Alt | Map | 11, /* '-' */ | |
| 2279 Alt | Map | 12, /* '=' */ | |
| 2280 Ctrl | KeyPad | 9, /* (Ctrl) Page Up */ | |
| 2281 FctKey | 0xc8, /* F11 */ | |
| 2282 FctKey | 0xc9, /* F12 */ | |
| 2283 Shift | FctKey | 0xc8, /* (Shift) F11 */ | |
| 2284 Shift | FctKey | 0xc9, /* (Shift) F12 */ | |
| 2285 Ctrl | FctKey | 0xc8, /* (Ctrl) F11 */ | |
| 2286 Ctrl | FctKey | 0xc9, /* (Ctrl) F12 */ | |
| 2287 Alt | FctKey | 0xc8, /* (Alt) F11 */ | |
| 2288 Alt | FctKey | 0xc9, /* (Alt) F12 */ | |
| 2289 Ctrl | KeyPad | 8, /* (Ctrl) Up */ | |
| 2290 Ctrl | Grey | 2, /* (Ctrl) Grey - */ | |
| 2291 Ctrl | KeyPad | 5, /* (Ctrl) Keypad 5 */ | |
| 2292 | |
| 2293 /* --------------- 90 to 9f --------------- */ | |
| 2294 Ctrl | Grey | 3, /* (Ctrl) Grey + */ | |
| 2295 Ctrl | KeyPad | 2, /* (Ctrl) Down */ | |
| 2296 Ctrl | KeyPad | 0, /* (Ctrl) Insert */ | |
| 2297 Ctrl | KeyPad | 10, /* (Ctrl) Delete */ | |
| 2298 Ctrl | FctKey | 0x09, /* (Ctrl) Tab */ | |
| 2299 Ctrl | Grey | 0, /* (Ctrl) Grey / */ | |
| 2300 Ctrl | Grey | 1, /* (Ctrl) Grey * */ | |
| 2301 Alt | FctKey | 0x50, /* (Alt) Home */ | |
| 2302 Alt | FctKey | 0x52, /* (Alt) Up */ | |
| 2303 Alt | FctKey | 0x55, /* (Alt) Page Up */ | |
| 2304 Ignore, /* NO KEY */ | |
| 2305 Alt | FctKey | 0x51, /* (Alt) Left */ | |
| 2306 Ignore, /* NO KEY */ | |
| 2307 Alt | FctKey | 0x53, /* (Alt) Right */ | |
| 2308 Ignore, /* NO KEY */ | |
| 2309 Alt | FctKey | 0x57, /* (Alt) End */ | |
| 2310 | |
| 2311 /* --------------- a0 to af --------------- */ | |
| 2312 Alt | KeyPad | 2, /* (Alt) Down */ | |
| 2313 Alt | KeyPad | 3, /* (Alt) Page Down */ | |
| 2314 Alt | KeyPad | 0, /* (Alt) Insert */ | |
| 2315 Alt | KeyPad | 10, /* (Alt) Delete */ | |
| 2316 Alt | Grey | 0, /* (Alt) Grey / */ | |
| 2317 Alt | FctKey | 0x09, /* (Alt) Tab */ | |
| 2318 Alt | Grey | 4 /* (Alt) Keypad Enter */ | |
| 2319 }; | |
| 13274 | 2320 |
| 13179 | 2321 /* These bit-positions corresponds to values returned by BIOS */ |
| 2322 #define SHIFT_P 0x0003 /* two bits! */ | |
| 2323 #define CTRL_P 0x0004 | |
| 2324 #define ALT_P 0x0008 | |
| 2325 #define SCRLOCK_P 0x0010 | |
| 2326 #define NUMLOCK_P 0x0020 | |
| 2327 #define CAPSLOCK_P 0x0040 | |
| 2328 #define ALT_GR_P 0x0800 | |
| 2329 #define SUPER_P 0x4000 /* pseudo */ | |
| 2330 #define HYPER_P 0x8000 /* pseudo */ | |
| 2331 | |
| 2332 static int | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2333 dos_get_modifiers (int *keymask) |
| 5503 | 2334 { |
| 13179 | 2335 union REGS regs; |
| 45332 | 2336 int mask, modifiers = 0; |
| 2337 | |
| 13179 | 2338 /* Calculate modifier bits */ |
| 2339 regs.h.ah = extended_kbd ? 0x12 : 0x02; | |
| 2340 int86 (0x16, ®s, ®s); | |
| 2341 | |
| 2342 if (!extended_kbd) | |
| 2343 { | |
| 45332 | 2344 mask = regs.h.al & (SHIFT_P | CTRL_P | ALT_P | |
| 13179 | 2345 SCRLOCK_P | NUMLOCK_P | CAPSLOCK_P); |
| 2346 } | |
| 2347 else | |
| 2348 { | |
| 2349 mask = regs.h.al & (SHIFT_P | | |
| 2350 SCRLOCK_P | NUMLOCK_P | CAPSLOCK_P); | |
| 45332 | 2351 |
| 13179 | 2352 /* Do not break international keyboard support. */ |
| 2353 /* When Keyb.Com is loaded, the right Alt key is */ | |
| 2354 /* used for accessing characters like { and } */ | |
| 2355 if (regs.h.ah & 2) /* Left ALT pressed ? */ | |
| 2356 mask |= ALT_P; | |
| 2357 | |
| 2358 if ((regs.h.ah & 8) != 0) /* Right ALT pressed ? */ | |
| 2359 { | |
| 2360 mask |= ALT_GR_P; | |
| 2361 if (dos_hyper_key == 1) | |
| 2362 { | |
| 2363 mask |= HYPER_P; | |
| 2364 modifiers |= hyper_modifier; | |
| 2365 } | |
| 2366 else if (dos_super_key == 1) | |
| 2367 { | |
| 2368 mask |= SUPER_P; | |
| 2369 modifiers |= super_modifier; | |
| 2370 } | |
|
16763
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2371 else if (!international_keyboard) |
|
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2372 { |
|
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2373 /* If Keyb.Com is NOT installed, let Right Alt behave |
|
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2374 like the Left Alt. */ |
|
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2375 mask &= ~ALT_GR_P; |
|
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2376 mask |= ALT_P; |
|
e4f0f7fe8304
(dos_set_keyboard): Test whether KEYB.COM is installed
Richard M. Stallman <rms@gnu.org>
parents:
16613
diff
changeset
|
2377 } |
| 13179 | 2378 } |
| 45332 | 2379 |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
2380 if (regs.h.ah & 1) /* Left CTRL pressed ? */ |
| 13179 | 2381 mask |= CTRL_P; |
| 2382 | |
| 2383 if (regs.h.ah & 4) /* Right CTRL pressed ? */ | |
| 2384 { | |
| 2385 if (dos_hyper_key == 2) | |
| 2386 { | |
| 2387 mask |= HYPER_P; | |
| 2388 modifiers |= hyper_modifier; | |
| 2389 } | |
| 2390 else if (dos_super_key == 2) | |
| 2391 { | |
| 2392 mask |= SUPER_P; | |
| 2393 modifiers |= super_modifier; | |
| 2394 } | |
| 2395 else | |
| 2396 mask |= CTRL_P; | |
| 2397 } | |
| 2398 } | |
| 2399 | |
| 2400 if (mask & SHIFT_P) | |
| 2401 modifiers |= shift_modifier; | |
| 2402 if (mask & CTRL_P) | |
| 2403 modifiers |= ctrl_modifier; | |
| 2404 if (mask & ALT_P) | |
| 2405 modifiers |= meta_modifier; | |
| 2406 | |
| 2407 if (keymask) | |
| 2408 *keymask = mask; | |
| 2409 return modifiers; | |
| 5503 | 2410 } |
| 2411 | |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2412 #define NUM_RECENT_DOSKEYS (100) |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2413 int recent_doskeys_index; /* Index for storing next element into recent_doskeys */ |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2414 int total_doskeys; /* Total number of elements stored into recent_doskeys */ |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2415 Lisp_Object recent_doskeys; /* A vector, holding the last 100 keystrokes */ |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2416 |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2417 DEFUN ("recent-doskeys", Frecent_doskeys, Srecent_doskeys, 0, 0, 0, |
|
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
2418 doc: /* Return vector of last 100 keyboard input values seen in dos_rawgetc. |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
2419 Each input key receives two values in this vector: first the ASCII code, |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
2420 and then the scan code. */) |
|
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
2421 (void) |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2422 { |
| 45332 | 2423 Lisp_Object val, *keys = XVECTOR (recent_doskeys)->contents; |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2424 |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2425 if (total_doskeys < NUM_RECENT_DOSKEYS) |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2426 return Fvector (total_doskeys, keys); |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2427 else |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2428 { |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2429 val = Fvector (NUM_RECENT_DOSKEYS, keys); |
|
109165
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109162
diff
changeset
|
2430 memcpy (XVECTOR (val)->contents, keys + recent_doskeys_index, |
|
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109162
diff
changeset
|
2431 (NUM_RECENT_DOSKEYS - recent_doskeys_index) * sizeof (Lisp_Object)); |
|
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109162
diff
changeset
|
2432 memcpy (XVECTOR (val)->contents + NUM_RECENT_DOSKEYS - recent_doskeys_index, |
|
750db9f3e6d8
Replace bcopy, bzero, bcmp by memcpy, memmove, memset, memcmp
Andreas Schwab <schwab@linux-m68k.org>
parents:
109162
diff
changeset
|
2433 keys, recent_doskeys_index * sizeof (Lisp_Object)); |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2434 return val; |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2435 } |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2436 } |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2437 |
| 13179 | 2438 /* Get a char from keyboard. Function keys are put into the event queue. */ |
| 2439 static int | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2440 dos_rawgetc (void) |
| 5503 | 2441 { |
| 13179 | 2442 struct input_event event; |
| 2443 union REGS regs; | |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
2444 Mouse_HLInfo *hlinfo = MOUSE_HL_INFO (SELECTED_FRAME()); |
|
51571
904f120f283f
(dos_rawgetc): Don't pass uninitialized data to kbd_buffer_store_event.
Stefan Monnier <monnier@iro.umontreal.ca>
parents:
51201
diff
changeset
|
2445 EVENT_INIT (event); |
|
54730
c33e4ac43939
(clear_mouse_face): Only clear mouse highlight if not hidden.
Kim F. Storm <storm@cua.dk>
parents:
53187
diff
changeset
|
2446 |
| 13179 | 2447 #ifndef HAVE_X_WINDOWS |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
2448 /* Maybe put the cursor where it should be. */ |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2449 IT_cmgoto (SELECTED_FRAME()); |
| 13179 | 2450 #endif |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
2451 |
| 13179 | 2452 /* The following condition is equivalent to `kbhit ()', except that |
| 2453 it uses the bios to do its job. This pleases DESQview/X. */ | |
| 2454 while ((regs.h.ah = extended_kbd ? 0x11 : 0x01), | |
| 2455 int86 (0x16, ®s, ®s), | |
| 2456 (regs.x.flags & 0x40) == 0) | |
| 5503 | 2457 { |
| 13179 | 2458 union REGS regs; |
| 2459 register unsigned char c; | |
| 45332 | 2460 int modifiers, sc, code = -1, mask, kp_mode; |
| 13179 | 2461 |
| 2462 regs.h.ah = extended_kbd ? 0x10 : 0x00; | |
| 2463 int86 (0x16, ®s, ®s); | |
| 2464 c = regs.h.al; | |
| 2465 sc = regs.h.ah; | |
| 5503 | 2466 |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2467 total_doskeys += 2; |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2468 XVECTOR (recent_doskeys)->contents[recent_doskeys_index++] |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2469 = make_number (c); |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2470 if (recent_doskeys_index == NUM_RECENT_DOSKEYS) |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2471 recent_doskeys_index = 0; |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2472 XVECTOR (recent_doskeys)->contents[recent_doskeys_index++] |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2473 = make_number (sc); |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2474 if (recent_doskeys_index == NUM_RECENT_DOSKEYS) |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2475 recent_doskeys_index = 0; |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2476 |
| 13274 | 2477 modifiers = dos_get_modifiers (&mask); |
| 45332 | 2478 |
| 13179 | 2479 #ifndef HAVE_X_WINDOWS |
| 13274 | 2480 if (!NILP (Vdos_display_scancodes)) |
| 13179 | 2481 { |
|
14157
38606398dfa6
(dos_rawgetc): Make buf longer.
Richard M. Stallman <rms@gnu.org>
parents:
14036
diff
changeset
|
2482 char buf[11]; |
| 13179 | 2483 sprintf (buf, "%02x:%02x*%04x", |
| 2484 (unsigned) (sc&0xff), (unsigned) c, mask); | |
| 2485 dos_direct_output (screen_size_Y - 2, screen_size_X - 12, buf, 10); | |
| 2486 } | |
| 2487 #endif | |
| 5503 | 2488 |
| 13179 | 2489 if (sc == 0xe0) |
| 2490 { | |
| 2491 switch (c) | |
| 2492 { | |
| 2493 case 10: /* Ctrl Grey Enter */ | |
| 2494 code = Ctrl | Grey | 4; | |
| 2495 break; | |
| 2496 case 13: /* Grey Enter */ | |
| 2497 code = Grey | 4; | |
| 2498 break; | |
| 2499 case '/': /* Grey / */ | |
| 2500 code = Grey | 0; | |
| 2501 break; | |
| 2502 default: | |
| 2503 continue; | |
| 2504 }; | |
| 2505 c = 0; | |
| 2506 } | |
| 2507 else | |
| 2508 { | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2509 /* Try the keyboard-private translation table first. */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2510 if (keyboard->translate_table) |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2511 { |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2512 struct kbd_translate *p = keyboard->translate_table; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2513 |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2514 while (p->sc) |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2515 { |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2516 if (p->sc == sc && p->ch == c) |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2517 { |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2518 code = p->code; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2519 break; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2520 } |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2521 p++; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2522 } |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2523 } |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2524 /* If the private table didn't translate it, use the general |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2525 one. */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2526 if (code == -1) |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2527 { |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2528 if (sc >= (sizeof (ibmpc_translate_map) / sizeof (short))) |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2529 continue; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2530 if ((code = ibmpc_translate_map[sc]) == Ignore) |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2531 continue; |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
2532 } |
| 13179 | 2533 } |
| 45332 | 2534 |
| 13179 | 2535 if (c == 0) |
| 2536 { | |
|
16967
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2537 /* We only look at the keyboard Ctrl/Shift/Alt keys when |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2538 Emacs is ready to read a key. Therefore, if they press |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2539 `Alt-x' when Emacs is busy, by the time we get to |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2540 `dos_get_modifiers', they might have already released the |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2541 Alt key, and Emacs gets just `x', which is BAD. |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2542 However, for keys with the `Map' property set, the ASCII |
| 78501 | 2543 code returns zero only if Alt is pressed. So, when we DON'T |
|
16967
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2544 have to support international_keyboard, we don't have to |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2545 distinguish between the left and right Alt keys, and we |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2546 can set the META modifier for any keys with the `Map' |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2547 property if they return zero ASCII code (c = 0). */ |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2548 if ( (code & Alt) |
|
4ca0a5e25605
dos_rawgetc: When international keyboard doesn't have
Eli Zaretskii <eliz@gnu.org>
parents:
16915
diff
changeset
|
2549 || ( (code & 0xf000) == Map && !international_keyboard)) |
| 13179 | 2550 modifiers |= meta_modifier; |
| 2551 if (code & Ctrl) | |
| 2552 modifiers |= ctrl_modifier; | |
| 2553 if (code & Shift) | |
| 2554 modifiers |= shift_modifier; | |
| 2555 } | |
| 45332 | 2556 |
| 13179 | 2557 switch (code & 0xf000) |
| 2558 { | |
| 2559 case ModFct: | |
| 2560 if (c && !(mask & (SHIFT_P | ALT_P | CTRL_P | HYPER_P | SUPER_P))) | |
| 2561 return c; | |
| 2562 c = 0; /* Special */ | |
| 45332 | 2563 |
| 13179 | 2564 case FctKey: |
| 2565 if (c != 0) | |
| 2566 return c; | |
| 45332 | 2567 |
| 13179 | 2568 case Special: |
| 2569 code |= 0xff00; | |
| 2570 break; | |
| 45332 | 2571 |
| 13179 | 2572 case Normal: |
| 2573 if (sc == 0) | |
| 2574 { | |
| 2575 if (c == 0) /* ctrl-break */ | |
| 2576 continue; | |
| 2577 return c; /* ALT-nnn */ | |
| 2578 } | |
| 2579 if (!keyboard_map_all) | |
| 2580 { | |
| 2581 if (c != ' ') | |
| 2582 return c; | |
| 2583 code = c; | |
| 2584 break; | |
| 2585 } | |
| 45332 | 2586 |
| 13179 | 2587 case Map: |
| 2588 if (c && !(mask & ALT_P) && !((mask & SHIFT_P) && (mask & CTRL_P))) | |
| 2589 if (!keyboard_map_all) | |
| 2590 return c; | |
| 5503 | 2591 |
| 13179 | 2592 code &= 0xff; |
| 2593 if (mask & ALT_P && code <= 10 && code > 0 && dos_keypad_mode & 0x200) | |
| 2594 mask |= SHIFT_P; /* ALT-1 => M-! etc. */ | |
| 45332 | 2595 |
| 13179 | 2596 if (mask & SHIFT_P) |
| 2597 { | |
| 13274 | 2598 code = keyboard->shifted[code]; |
| 13179 | 2599 mask -= SHIFT_P; |
| 2600 modifiers &= ~shift_modifier; | |
| 2601 } | |
| 2602 else | |
| 13274 | 2603 if ((mask & ALT_GR_P) && keyboard->alt_gr && keyboard->alt_gr[code] != ' ') |
| 2604 code = keyboard->alt_gr[code]; | |
| 13179 | 2605 else |
| 13274 | 2606 code = keyboard->unshifted[code]; |
| 13179 | 2607 break; |
| 2608 | |
| 2609 case KeyPad: | |
| 2610 code &= 0xff; | |
| 2611 if (c == 0xe0) /* edit key */ | |
| 2612 kp_mode = 3; | |
| 2613 else | |
| 2614 if ((mask & (NUMLOCK_P|CTRL_P|SHIFT_P|ALT_P)) == NUMLOCK_P) /* numlock on */ | |
| 2615 kp_mode = dos_keypad_mode & 0x03; | |
| 2616 else | |
| 2617 kp_mode = (dos_keypad_mode >> 4) & 0x03; | |
| 45332 | 2618 |
| 13179 | 2619 switch (kp_mode) |
| 2620 { | |
| 2621 case 0: | |
| 2622 if (code == 10 && dos_decimal_point) | |
| 2623 return dos_decimal_point; | |
| 13274 | 2624 return keypad_translate_map[code].char_code; |
| 5503 | 2625 |
| 13179 | 2626 case 1: |
| 13274 | 2627 code = 0xff00 | keypad_translate_map[code].keypad_code; |
| 13179 | 2628 break; |
| 5503 | 2629 |
| 13179 | 2630 case 2: |
| 13274 | 2631 code = keypad_translate_map[code].meta_code; |
| 13179 | 2632 modifiers = meta_modifier; |
| 2633 break; | |
| 45332 | 2634 |
| 13179 | 2635 case 3: |
| 13274 | 2636 code = 0xff00 | keypad_translate_map[code].editkey_code; |
| 13179 | 2637 break; |
| 2638 } | |
| 2639 break; | |
| 45332 | 2640 |
| 13179 | 2641 case Grey: |
| 2642 code &= 0xff; | |
| 2643 kp_mode = ((mask & (NUMLOCK_P|CTRL_P|SHIFT_P|ALT_P)) == NUMLOCK_P) ? 0x04 : 0x40; | |
| 2644 if (dos_keypad_mode & kp_mode) | |
| 13274 | 2645 code = 0xff00 | grey_key_translate_map[code].keypad_code; |
| 13179 | 2646 else |
| 13274 | 2647 code = grey_key_translate_map[code].char_code; |
| 13179 | 2648 break; |
| 2649 } | |
| 45332 | 2650 |
| 13179 | 2651 if (code == 0) |
| 2652 continue; | |
|
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2653 |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
2654 if (!hlinfo->mouse_face_hidden && INTEGERP (Vmouse_highlight)) |
|
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2655 { |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
2656 clear_mouse_face (hlinfo); |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
2657 hlinfo->mouse_face_hidden = 1; |
|
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2658 } |
|
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2659 |
| 13179 | 2660 if (code >= 0x100) |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45332
diff
changeset
|
2661 event.kind = NON_ASCII_KEYSTROKE_EVENT; |
| 13179 | 2662 else |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45332
diff
changeset
|
2663 event.kind = ASCII_KEYSTROKE_EVENT; |
| 13179 | 2664 event.code = code; |
| 2665 event.modifiers = modifiers; | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2666 event.frame_or_window = selected_frame; |
|
30198
f39367e12c14
(dos_rawgetc): Always set `arg' member of input_events.
Gerd Moellmann <gerd@gnu.org>
parents:
30180
diff
changeset
|
2667 event.arg = Qnil; |
| 13179 | 2668 event.timestamp = event_timestamp (); |
| 2669 kbd_buffer_store_event (&event); | |
| 2670 } | |
| 5503 | 2671 |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
2672 if (have_mouse > 0 && !mouse_preempted) |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2673 { |
| 13179 | 2674 int but, press, x, y, ok; |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2675 int mouse_prev_x = mouse_last_x, mouse_prev_y = mouse_last_y; |
|
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2676 Lisp_Object mouse_window = Qnil; |
| 5503 | 2677 |
| 13179 | 2678 /* Check for mouse movement *before* buttons. */ |
| 2679 mouse_check_moved (); | |
| 5503 | 2680 |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2681 /* If the mouse moved from the spot of its last sighting, we |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2682 might need to update mouse highlight. */ |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2683 if (mouse_last_x != mouse_prev_x || mouse_last_y != mouse_prev_y) |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2684 { |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
2685 if (hlinfo->mouse_face_hidden) |
|
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2686 { |
|
111342
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
2687 hlinfo->mouse_face_hidden = 0; |
|
7f466168c008
REALLY finish coding portable mouse highlight.
Eli Zaretskii <eliz@gnu.org>
parents:
111339
diff
changeset
|
2688 clear_mouse_face (hlinfo); |
|
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2689 } |
|
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2690 |
|
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2691 /* Generate SELECT_WINDOW_EVENTs when needed. */ |
|
72736
f6b18b9949d1
* xdisp.c (mouse_autoselect_window): Removed.
Chong Yidong <cyd@stupidchicken.com>
parents:
71986
diff
changeset
|
2692 if (!NILP (Vmouse_autoselect_window)) |
|
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2693 { |
|
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2694 mouse_window = window_from_coordinates (SELECTED_FRAME(), |
|
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2695 mouse_last_x, |
|
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2696 mouse_last_y, |
|
111566
b4dbe6c4111e
Cleanup of window coordinate positioning code.
Chong Yidong <cyd@stupidchicken.com>
parents:
111564
diff
changeset
|
2697 0, 0); |
|
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2698 /* A window will be selected only when it is not |
|
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2699 selected now, and the last mouse movement event was |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2700 not in it. A minibuffer window will be selected iff |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2701 it is active. */ |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2702 if (WINDOWP (mouse_window) |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2703 && !EQ (mouse_window, last_mouse_window) |
|
79060
848bc3eac628
(dos_rawgetc): Undo last change (there's no ``leaving selected frame''
Eli Zaretskii <eliz@gnu.org>
parents:
78987
diff
changeset
|
2704 && !EQ (mouse_window, selected_window)) |
|
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2705 { |
|
44337
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2706 event.kind = SELECT_WINDOW_EVENT; |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2707 event.frame_or_window = mouse_window; |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2708 event.arg = Qnil; |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2709 event.timestamp = event_timestamp (); |
|
228b881931ef
(dos_rawgetc): Generate SELECT_WINDOW_EVENTs when required.
Eli Zaretskii <eliz@gnu.org>
parents:
44303
diff
changeset
|
2710 kbd_buffer_store_event (&event); |
|
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2711 } |
|
43363
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
2712 last_mouse_window = mouse_window; |
|
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
2713 } |
|
43363
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
2714 else |
|
bcefd6f01283
(last_mouse_window): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43357
diff
changeset
|
2715 last_mouse_window = Qnil; |
|
43371
263456abbeb0
(disable_mouse_highlight): Removed variable.
Kim F. Storm <storm@cua.dk>
parents:
43363
diff
changeset
|
2716 |
|
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
2717 previous_help_echo_string = help_echo_string; |
|
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
2718 help_echo_string = help_echo_object = help_echo_window = Qnil; |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2719 help_echo_pos = -1; |
|
111339
e302712538dc
Unify mouse highlight code of MSDOS and GUI sessions.
Eli Zaretskii <eliz@gnu.org>
parents:
110683
diff
changeset
|
2720 note_mouse_highlight (SELECTED_FRAME(), mouse_last_x, mouse_last_y); |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2721 /* If the contents of the global variable help_echo has |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2722 changed, generate a HELP_EVENT. */ |
|
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
2723 if (!NILP (help_echo_string) || !NILP (previous_help_echo_string)) |
|
111642
f6c701d79adf
msdos.c (dos_rawgetc): Use gen_help_event, instead of doing the same in-line.
Eli Zaretskii <eliz@gnu.org>
parents:
111344
diff
changeset
|
2724 gen_help_event (help_echo_string, selected_frame, help_echo_window, |
|
f6c701d79adf
msdos.c (dos_rawgetc): Use gen_help_event, instead of doing the same in-line.
Eli Zaretskii <eliz@gnu.org>
parents:
111344
diff
changeset
|
2725 help_echo_object, help_echo_pos); |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2726 } |
|
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
2727 |
| 13179 | 2728 for (but = 0; but < NUM_MOUSE_BUTTONS; but++) |
| 2729 for (press = 0; press < 2; press++) | |
| 2730 { | |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2731 int button_num = but; |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2732 |
| 13179 | 2733 if (press) |
| 2734 ok = mouse_pressed (but, &x, &y); | |
| 2735 else | |
| 2736 ok = mouse_released (but, &x, &y); | |
| 2737 if (ok) | |
| 2738 { | |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2739 /* Allow a simultaneous press/release of Mouse-1 and |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2740 Mouse-2 to simulate Mouse-3 on two-button mice. */ |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2741 if (mouse_button_count == 2 && but < 2) |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2742 { |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2743 int x2, y2; /* don't clobber original coordinates */ |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2744 |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2745 /* If only one button is pressed, wait 100 msec and |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2746 check again. This way, Speedy Gonzales isn't |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2747 punished, while the slow get their chance. */ |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2748 if ((press && mouse_pressed (1-but, &x2, &y2)) |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2749 || (!press && mouse_released (1-but, &x2, &y2))) |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2750 button_num = 2; |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2751 else |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2752 { |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2753 delay (100); |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2754 if ((press && mouse_pressed (1-but, &x2, &y2)) |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
2755 || (!press && mouse_released (1-but, &x2, &y2))) |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2756 button_num = 2; |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2757 } |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2758 } |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2759 |
|
45803
9484de301252
Rename enum event_kind items.
Pavel Jan?k <Pavel@Janik.cz>
parents:
45332
diff
changeset
|
2760 event.kind = MOUSE_CLICK_EVENT; |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2761 event.code = button_num; |
| 13179 | 2762 event.modifiers = dos_get_modifiers (0) |
| 2763 | (press ? down_modifier : up_modifier); | |
|
56335
b6377908f1d4
(dos_rawgetc): Use make_number to produce Lisp objects
Eli Zaretskii <eliz@gnu.org>
parents:
55662
diff
changeset
|
2764 event.x = make_number (x); |
|
b6377908f1d4
(dos_rawgetc): Use make_number to produce Lisp objects
Eli Zaretskii <eliz@gnu.org>
parents:
55662
diff
changeset
|
2765 event.y = make_number (y); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2766 event.frame_or_window = selected_frame; |
|
30198
f39367e12c14
(dos_rawgetc): Always set `arg' member of input_events.
Gerd Moellmann <gerd@gnu.org>
parents:
30180
diff
changeset
|
2767 event.arg = Qnil; |
| 13179 | 2768 event.timestamp = event_timestamp (); |
| 2769 kbd_buffer_store_event (&event); | |
| 2770 } | |
| 2771 } | |
| 2772 } | |
| 5503 | 2773 |
| 13179 | 2774 return -1; |
| 9572 | 2775 } |
| 2776 | |
| 13179 | 2777 static int prev_get_char = -1; |
| 5503 | 2778 |
| 13179 | 2779 /* Return 1 if a key is ready to be read without suspending execution. */ |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2780 int |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2781 dos_keysns (void) |
| 5503 | 2782 { |
| 13179 | 2783 if (prev_get_char != -1) |
| 2784 return 1; | |
| 2785 else | |
| 2786 return ((prev_get_char = dos_rawgetc ()) != -1); | |
| 5503 | 2787 } |
| 2788 | |
| 13179 | 2789 /* Read a key. Return -1 if no key is ready. */ |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2790 int |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2791 dos_keyread (void) |
| 5503 | 2792 { |
| 13179 | 2793 if (prev_get_char != -1) |
|
8246
d48c2b01fba5
(mouse_init1): Use alternate mouse detection for old mouse drivers.
Richard M. Stallman <rms@gnu.org>
parents:
8194
diff
changeset
|
2794 { |
| 13179 | 2795 int c = prev_get_char; |
| 2796 prev_get_char = -1; | |
| 2797 return c; | |
|
8246
d48c2b01fba5
(mouse_init1): Use alternate mouse detection for old mouse drivers.
Richard M. Stallman <rms@gnu.org>
parents:
8194
diff
changeset
|
2798 } |
| 13179 | 2799 else |
| 2800 return dos_rawgetc (); | |
| 2801 } | |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
2802 |
| 9572 | 2803 #ifndef HAVE_X_WINDOWS |
|
50247
f9447a2e045c
* xdisp.c (pixel_to_glyph_coords, glyph_to_pixel_coords):
Kim F. Storm <storm@cua.dk>
parents:
50225
diff
changeset
|
2804 |
| 9572 | 2805 /* Simulation of X's menus. Nothing too fancy here -- just make it work |
| 2806 for now. | |
| 2807 | |
| 2808 Actually, I don't know the meaning of all the parameters of the functions | |
| 2809 here -- I only know how they are called by xmenu.c. I could of course | |
| 2810 grab the nearest Xlib manual (down the hall, second-to-last door on the | |
| 2811 left), but I don't think it's worth the effort. */ | |
| 2812 | |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2813 /* These hold text of the current and the previous menu help messages. */ |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2814 static char *menu_help_message, *prev_menu_help_message; |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2815 /* Pane number and item number of the menu item which generated the |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2816 last menu help message. */ |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2817 static int menu_help_paneno, menu_help_itemno; |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2818 |
| 9572 | 2819 static XMenu * |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2820 IT_menu_create (void) |
| 9572 | 2821 { |
| 2822 XMenu *menu; | |
| 2823 | |
| 2824 menu = (XMenu *) xmalloc (sizeof (XMenu)); | |
| 2825 menu->allocated = menu->count = menu->panecount = menu->width = 0; | |
| 2826 return menu; | |
| 2827 } | |
| 2828 | |
| 2829 /* Allocate some (more) memory for MENU ensuring that there is room for one | |
| 2830 for item. */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2831 |
| 9572 | 2832 static void |
| 2833 IT_menu_make_room (XMenu *menu) | |
| 2834 { | |
| 2835 if (menu->allocated == 0) | |
| 2836 { | |
| 2837 int count = menu->allocated = 10; | |
| 2838 menu->text = (char **) xmalloc (count * sizeof (char *)); | |
| 2839 menu->submenu = (XMenu **) xmalloc (count * sizeof (XMenu *)); | |
| 2840 menu->panenumber = (int *) xmalloc (count * sizeof (int)); | |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2841 menu->help_text = (char **) xmalloc (count * sizeof (char *)); |
| 9572 | 2842 } |
| 2843 else if (menu->allocated == menu->count) | |
| 2844 { | |
| 2845 int count = menu->allocated = menu->allocated + 10; | |
| 2846 menu->text | |
| 2847 = (char **) xrealloc (menu->text, count * sizeof (char *)); | |
| 2848 menu->submenu | |
| 2849 = (XMenu **) xrealloc (menu->submenu, count * sizeof (XMenu *)); | |
| 2850 menu->panenumber | |
| 2851 = (int *) xrealloc (menu->panenumber, count * sizeof (int)); | |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2852 menu->help_text |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2853 = (char **) xrealloc (menu->help_text, count * sizeof (char *)); |
| 9572 | 2854 } |
| 2855 } | |
| 2856 | |
| 2857 /* Search the given menu structure for a given pane number. */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2858 |
| 9572 | 2859 static XMenu * |
| 2860 IT_menu_search_pane (XMenu *menu, int pane) | |
| 2861 { | |
| 2862 int i; | |
| 2863 XMenu *try; | |
| 2864 | |
| 2865 for (i = 0; i < menu->count; i++) | |
| 2866 if (menu->submenu[i]) | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2867 { |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2868 if (pane == menu->panenumber[i]) |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2869 return menu->submenu[i]; |
| 13179 | 2870 if ((try = IT_menu_search_pane (menu->submenu[i], pane))) |
| 9572 | 2871 return try; |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2872 } |
| 9572 | 2873 return (XMenu *) 0; |
| 2874 } | |
| 2875 | |
| 2876 /* Determine how much screen space a given menu needs. */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2877 |
| 9572 | 2878 static void |
| 2879 IT_menu_calc_size (XMenu *menu, int *width, int *height) | |
| 2880 { | |
| 2881 int i, h2, w2, maxsubwidth, maxheight; | |
| 2882 | |
| 2883 maxsubwidth = 0; | |
| 2884 maxheight = menu->count; | |
| 2885 for (i = 0; i < menu->count; i++) | |
| 2886 { | |
| 2887 if (menu->submenu[i]) | |
| 2888 { | |
| 2889 IT_menu_calc_size (menu->submenu[i], &w2, &h2); | |
| 2890 if (w2 > maxsubwidth) maxsubwidth = w2; | |
| 2891 if (i + h2 > maxheight) maxheight = i + h2; | |
| 2892 } | |
| 2893 } | |
| 2894 *width = menu->width + maxsubwidth; | |
| 2895 *height = maxheight; | |
| 2896 } | |
| 2897 | |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
2898 /* Display MENU at (X,Y) using FACES. */ |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2899 |
|
97903
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2900 #define BUILD_CHAR_GLYPH(GLYPH, CODE, FACE_ID, PADDING_P) \ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2901 do \ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2902 { \ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2903 (GLYPH).type = CHAR_GLYPH; \ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2904 SET_CHAR_GLYPH ((GLYPH), CODE, FACE_ID, PADDING_P); \ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2905 (GLYPH).charpos = -1; \ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2906 } \ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2907 while (0) |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2908 |
| 9572 | 2909 static void |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2910 IT_menu_display (XMenu *menu, int y, int x, int pn, int *faces, int disp_help) |
| 9572 | 2911 { |
| 45332 | 2912 int i, j, face, width, mx, my, enabled, mousehere, row, col; |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2913 struct glyph *text, *p; |
|
98030
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2914 const unsigned char *q; |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2915 struct frame *sf = SELECTED_FRAME(); |
| 9572 | 2916 |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2917 menu_help_message = NULL; |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2918 |
| 9572 | 2919 width = menu->width; |
|
97903
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2920 /* We multiply width by 2 to account for possible control characters. |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2921 FIXME: cater to non-ASCII characters in menus. */ |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2922 text = (struct glyph *) xmalloc ((width * 2 + 2) * sizeof (struct glyph)); |
| 9572 | 2923 ScreenGetCursor (&row, &col); |
| 2924 mouse_get_xy (&mx, &my); | |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2925 IT_update_begin (sf); |
| 9572 | 2926 for (i = 0; i < menu->count; i++) |
| 2927 { | |
|
27409
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2928 int max_width = width + 2; |
|
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2929 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2930 IT_cursor_to (sf, y + i, x); |
| 9572 | 2931 enabled |
| 2932 = (!menu->submenu[i] && menu->panenumber[i]) || (menu->submenu[i]); | |
|
97903
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2933 mousehere = (y + i == my && x <= mx && mx < x + max_width); |
| 9572 | 2934 face = faces[enabled + mousehere * 2]; |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2935 /* The following if clause means that we display the menu help |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2936 strings even if the menu item is currently disabled. */ |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
2937 if (disp_help && enabled + mousehere * 2 >= 2) |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2938 { |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2939 menu_help_message = menu->help_text[i]; |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2940 menu_help_paneno = pn - 1; |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2941 menu_help_itemno = i; |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
2942 } |
| 9572 | 2943 p = text; |
|
97903
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2944 BUILD_CHAR_GLYPH (*p, ' ', face, 0); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2945 p++; |
| 9572 | 2946 for (j = 0, q = menu->text[i]; *q; j++) |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
2947 { |
|
98030
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2948 unsigned c = STRING_CHAR_ADVANCE (q); |
|
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2949 |
|
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2950 if (c > 26) |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2951 { |
|
98030
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2952 BUILD_CHAR_GLYPH (*p, c, face, 0); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2953 p++; |
|
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2954 } |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
2955 else /* make '^x' */ |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
2956 { |
|
97903
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2957 BUILD_CHAR_GLYPH (*p, '^', face, 0); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2958 p++; |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
2959 j++; |
|
98030
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2960 BUILD_CHAR_GLYPH (*p, c + 64, face, 0); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2961 p++; |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
2962 } |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
2963 } |
|
27409
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2964 /* Don't let the menu text overflow into the next screen row. */ |
|
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2965 if (x + max_width > screen_size_X) |
|
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2966 { |
|
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2967 max_width = screen_size_X - x; |
|
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2968 text[max_width - 1].u.ch = '$'; /* indicate it's truncated */ |
|
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2969 } |
|
4df4f3866b55
(IT_menu_display): Truncate long menu lines at the right
Eli Zaretskii <eliz@gnu.org>
parents:
27046
diff
changeset
|
2970 for (; j < max_width - 2; j++, p++) |
|
97903
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2971 BUILD_CHAR_GLYPH (*p, ' ', face, 0); |
|
fa91a1ebb701
(BUILD_CHAR_GLYPH): New macro.
Eli Zaretskii <eliz@gnu.org>
parents:
97873
diff
changeset
|
2972 |
|
98030
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2973 /* 16 is the character code of a character that on DOS terminal |
|
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2974 produces a nice-looking right-pointing arrow glyph. */ |
|
5c5323a73e60
(IT_menu_display): Use STRING_CHAR_ADVANCE instead of a "char *q" to access
Eli Zaretskii <eliz@gnu.org>
parents:
97903
diff
changeset
|
2975 BUILD_CHAR_GLYPH (*p, menu->submenu[i] ? 16 : ' ', face, 0); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
2976 p++; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2977 IT_write_glyphs (sf, text, max_width); |
| 9572 | 2978 } |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
2979 IT_update_end (sf); |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
2980 IT_cursor_to (sf, row, col); |
| 9572 | 2981 xfree (text); |
| 2982 } | |
|
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
2983 |
|
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
2984 /* --------------------------- X Menu emulation ---------------------- */ |
| 9572 | 2985 |
|
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
2986 /* Report availability of menus. */ |
|
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
2987 |
|
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
2988 int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
2989 have_menus_p (void) { return 1; } |
| 13179 | 2990 |
| 9572 | 2991 /* Create a brand new menu structure. */ |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
2992 |
| 9572 | 2993 XMenu * |
|
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
2994 XMenuCreate (Display *foo1, Window foo2, char *foo3) |
| 9572 | 2995 { |
| 2996 return IT_menu_create (); | |
| 2997 } | |
| 2998 | |
| 2999 /* Create a new pane and place it on the outer-most level. It is not | |
| 3000 clear that it should be placed out there, but I don't know what else | |
| 3001 to do. */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3002 |
| 9572 | 3003 int |
|
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3004 XMenuAddPane (Display *foo, XMenu *menu, char *txt, int enable) |
| 9572 | 3005 { |
| 3006 int len; | |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3007 char *p; |
| 9572 | 3008 |
| 3009 if (!enable) | |
| 3010 abort (); | |
| 3011 | |
| 3012 IT_menu_make_room (menu); | |
| 3013 menu->submenu[menu->count] = IT_menu_create (); | |
| 3014 menu->text[menu->count] = txt; | |
| 3015 menu->panenumber[menu->count] = ++menu->panecount; | |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3016 menu->help_text[menu->count] = NULL; |
| 9572 | 3017 menu->count++; |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3018 |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3019 /* Adjust length for possible control characters (which will |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3020 be written as ^x). */ |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3021 for (len = strlen (txt), p = txt; *p; p++) |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3022 if (*p < 27) |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3023 len++; |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3024 |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3025 if (len > menu->width) |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3026 menu->width = len; |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3027 |
| 9572 | 3028 return menu->panecount; |
| 3029 } | |
| 3030 | |
| 3031 /* Create a new item in a menu pane. */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3032 |
| 9572 | 3033 int |
|
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3034 XMenuAddSelection (Display *bar, XMenu *menu, int pane, |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3035 int foo, char *txt, int enable, char *help_text) |
| 9572 | 3036 { |
| 3037 int len; | |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3038 char *p; |
| 9572 | 3039 |
| 3040 if (pane) | |
| 3041 if (!(menu = IT_menu_search_pane (menu, pane))) | |
| 3042 return XM_FAILURE; | |
| 3043 IT_menu_make_room (menu); | |
| 3044 menu->submenu[menu->count] = (XMenu *) 0; | |
| 3045 menu->text[menu->count] = txt; | |
| 3046 menu->panenumber[menu->count] = enable; | |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3047 menu->help_text[menu->count] = help_text; |
| 9572 | 3048 menu->count++; |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3049 |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3050 /* Adjust length for possible control characters (which will |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3051 be written as ^x). */ |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3052 for (len = strlen (txt), p = txt; *p; p++) |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3053 if (*p < 27) |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3054 len++; |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3055 |
|
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3056 if (len > menu->width) |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3057 menu->width = len; |
|
15627
c5c4d478c78d
(IT_menu_display): Display control characters as ^X.
Karl Heuer <kwzh@gnu.org>
parents:
15618
diff
changeset
|
3058 |
| 9572 | 3059 return XM_SUCCESS; |
| 3060 } | |
| 3061 | |
| 3062 /* Decide where the menu would be placed if requested at (X,Y). */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3063 |
|
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3064 void |
|
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3065 XMenuLocate (Display *foo0, XMenu *menu, int foo1, int foo2, int x, int y, |
| 9572 | 3066 int *ulx, int *uly, int *width, int *height) |
| 3067 { | |
|
13714
45e71ea63d71
(XMenuActivate): Display the menu pane title.
Karl Heuer <kwzh@gnu.org>
parents:
13657
diff
changeset
|
3068 IT_menu_calc_size (menu, width, height); |
| 9572 | 3069 *ulx = x + 1; |
| 3070 *uly = y; | |
| 3071 *width += 2; | |
| 3072 } | |
| 3073 | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3074 struct IT_menu_state |
| 9572 | 3075 { |
| 3076 void *screen_behind; | |
| 3077 XMenu *menu; | |
| 3078 int pane; | |
| 3079 int x, y; | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3080 }; |
| 9572 | 3081 |
| 3082 | |
| 3083 /* Display menu, wait for user's response, and return that response. */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3084 |
| 9572 | 3085 int |
|
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3086 XMenuActivate (Display *foo, XMenu *menu, int *pane, int *selidx, |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3087 int x0, int y0, unsigned ButtonMask, char **txt, |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3088 void (*help_callback)(char *, int, int)) |
| 9572 | 3089 { |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3090 struct IT_menu_state *state; |
| 45332 | 3091 int statecount, x, y, i, b, screensize, leave, result, onepane; |
|
13860
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3092 int title_faces[4]; /* face to display the menu title */ |
| 45332 | 3093 int faces[4], buffers_num_deleted = 0; |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3094 struct frame *sf = SELECTED_FRAME(); |
| 45332 | 3095 Lisp_Object saved_echo_area_message, selectface; |
| 9572 | 3096 |
| 3097 /* Just in case we got here without a mouse present... */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3098 if (have_mouse <= 0) |
| 9572 | 3099 return XM_IA_SELECT; |
|
16871
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3100 /* Don't allow non-positive x0 and y0, lest the menu will wrap |
|
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3101 around the display. */ |
|
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3102 if (x0 <= 0) |
|
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3103 x0 = 1; |
|
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3104 if (y0 <= 0) |
|
45a12f628d3f
* (XMenuActivate): Don't allow non-positive menu
Eli Zaretskii <eliz@gnu.org>
parents:
16837
diff
changeset
|
3105 y0 = 1; |
| 9572 | 3106 |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3107 /* We will process all the mouse events directly, so we had |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3108 better prevent dos_rawgetc from stealing them from us. */ |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3109 mouse_preempted++; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3110 |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3111 state = alloca (menu->panecount * sizeof (struct IT_menu_state)); |
| 13179 | 3112 screensize = screen_size * 2; |
| 9572 | 3113 faces[0] |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3114 = lookup_derived_face (sf, intern ("msdos-menu-passive-face"), |
|
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3115 DEFAULT_FACE_ID, 1); |
| 9572 | 3116 faces[1] |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3117 = lookup_derived_face (sf, intern ("msdos-menu-active-face"), |
|
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3118 DEFAULT_FACE_ID, 1); |
|
25110
4833aea1f1e7
(IT_set_face): Rewritten for the new redisplay engine.
Eli Zaretskii <eliz@gnu.org>
parents:
25100
diff
changeset
|
3119 selectface = intern ("msdos-menu-select-face"); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3120 faces[2] = lookup_derived_face (sf, selectface, |
|
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3121 faces[0], 1); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3122 faces[3] = lookup_derived_face (sf, selectface, |
|
90128
13796b0653c7
Revision: miles@gnu.org--gnu-2005/emacs--unicode--0--patch-29
Miles Bader <miles@gnu.org>
diff
changeset
|
3123 faces[1], 1); |
| 9572 | 3124 |
|
13860
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3125 /* Make sure the menu title is always displayed with |
|
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3126 `msdos-menu-active-face', no matter where the mouse pointer is. */ |
|
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3127 for (i = 0; i < 4; i++) |
|
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3128 title_faces[i] = faces[3]; |
|
659a54e026bb
(XMenuActivate): Make sure the menu title is always
Richard M. Stallman <rms@gnu.org>
parents:
13848
diff
changeset
|
3129 |
| 9572 | 3130 statecount = 1; |
|
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3131 |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3132 /* Don't let the title for the "Buffers" popup menu include a |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3133 digit (which is ugly). |
| 45332 | 3134 |
|
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3135 This is a terrible kludge, but I think the "Buffers" case is |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3136 the only one where the title includes a number, so it doesn't |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3137 seem to be necessary to make this more general. */ |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3138 if (strncmp (menu->text[0], "Buffers 1", 9) == 0) |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3139 { |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3140 menu->text[0][7] = '\0'; |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3141 buffers_num_deleted = 1; |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3142 } |
|
30132
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3143 |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3144 /* We need to save the current echo area message, so that we could |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3145 restore it below, before we exit. See the commentary below, |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3146 before the call to message_with_string. */ |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3147 saved_echo_area_message = Fcurrent_message (); |
| 9572 | 3148 state[0].menu = menu; |
| 3149 mouse_off (); | |
| 3150 ScreenRetrieve (state[0].screen_behind = xmalloc (screensize)); | |
|
13714
45e71ea63d71
(XMenuActivate): Display the menu pane title.
Karl Heuer <kwzh@gnu.org>
parents:
13657
diff
changeset
|
3151 |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3152 /* Turn off the cursor. Otherwise it shows through the menu |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3153 panes, which is ugly. */ |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3154 IT_display_cursor (0); |
|
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3155 |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3156 /* Display the menu title. */ |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3157 IT_menu_display (menu, y0 - 1, x0 - 1, 1, title_faces, 0); |
|
15387
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3158 if (buffers_num_deleted) |
|
9ac116f47f33
(check_x): Fix error message.
Richard M. Stallman <rms@gnu.org>
parents:
15341
diff
changeset
|
3159 menu->text[0][7] = ' '; |
| 9572 | 3160 if ((onepane = menu->count == 1 && menu->submenu[0])) |
| 3161 { | |
| 3162 menu->width = menu->submenu[0]->width; | |
| 3163 state[0].menu = menu->submenu[0]; | |
| 3164 } | |
| 3165 else | |
| 3166 { | |
| 3167 state[0].menu = menu; | |
| 3168 } | |
| 3169 state[0].x = x0 - 1; | |
| 3170 state[0].y = y0; | |
| 3171 state[0].pane = onepane; | |
| 3172 | |
| 3173 mouse_last_x = -1; /* A hack that forces display. */ | |
| 3174 leave = 0; | |
| 3175 while (!leave) | |
| 3176 { | |
| 13179 | 3177 if (!mouse_visible) mouse_on (); |
| 9572 | 3178 mouse_check_moved (); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3179 if (sf->mouse_moved) |
| 9572 | 3180 { |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3181 sf->mouse_moved = 0; |
| 9572 | 3182 result = XM_IA_SELECT; |
| 3183 mouse_get_xy (&x, &y); | |
| 3184 for (i = 0; i < statecount; i++) | |
| 3185 if (state[i].x <= x && x < state[i].x + state[i].menu->width + 2) | |
| 3186 { | |
| 3187 int dy = y - state[i].y; | |
| 3188 if (0 <= dy && dy < state[i].menu->count) | |
| 3189 { | |
| 3190 if (!state[i].menu->submenu[dy]) | |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3191 { |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3192 if (state[i].menu->panenumber[dy]) |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3193 result = XM_SUCCESS; |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3194 else |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3195 result = XM_IA_SELECT; |
|
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3196 } |
| 9572 | 3197 *pane = state[i].pane - 1; |
| 3198 *selidx = dy; | |
| 14036 | 3199 /* We hit some part of a menu, so drop extra menus that |
| 9572 | 3200 have been opened. That does not include an open and |
| 3201 active submenu. */ | |
| 3202 if (i != statecount - 2 | |
| 3203 || state[i].menu->submenu[dy] != state[i+1].menu) | |
| 3204 while (i != statecount - 1) | |
| 3205 { | |
| 3206 statecount--; | |
| 3207 mouse_off (); | |
| 3208 ScreenUpdate (state[statecount].screen_behind); | |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3209 if (screen_virtual_segment) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3210 dosv_refresh_virtual_screen (0, screen_size); |
| 9572 | 3211 xfree (state[statecount].screen_behind); |
| 3212 } | |
| 3213 if (i == statecount - 1 && state[i].menu->submenu[dy]) | |
| 3214 { | |
| 3215 IT_menu_display (state[i].menu, | |
| 3216 state[i].y, | |
| 3217 state[i].x, | |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3218 state[i].pane, |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3219 faces, 1); |
| 9572 | 3220 state[statecount].menu = state[i].menu->submenu[dy]; |
| 3221 state[statecount].pane = state[i].menu->panenumber[dy]; | |
| 3222 mouse_off (); | |
| 3223 ScreenRetrieve (state[statecount].screen_behind | |
| 3224 = xmalloc (screensize)); | |
| 3225 state[statecount].x | |
| 3226 = state[i].x + state[i].menu->width + 2; | |
| 3227 state[statecount].y = y; | |
| 45332 | 3228 statecount++; |
| 9572 | 3229 } |
| 3230 } | |
| 3231 } | |
| 3232 IT_menu_display (state[statecount - 1].menu, | |
| 3233 state[statecount - 1].y, | |
| 3234 state[statecount - 1].x, | |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3235 state[statecount - 1].pane, |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3236 faces, 1); |
| 9572 | 3237 } |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3238 else |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3239 { |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3240 if ((menu_help_message || prev_menu_help_message) |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3241 && menu_help_message != prev_menu_help_message) |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3242 { |
|
30341
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3243 help_callback (menu_help_message, |
|
2ad638704621
(IT_note_mode_line_highlight, IT_note_mouse_highlight):
Eli Zaretskii <eliz@gnu.org>
parents:
30198
diff
changeset
|
3244 menu_help_paneno, menu_help_itemno); |
|
27640
4ce3be69ca1f
(XMenuActivate): Turn off the cursor after displaying
Eli Zaretskii <eliz@gnu.org>
parents:
27462
diff
changeset
|
3245 IT_display_cursor (0); |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3246 prev_menu_help_message = menu_help_message; |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3247 } |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3248 /* We are busy-waiting for the mouse to move, so let's be nice |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3249 to other Windows applications by releasing our time slice. */ |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3250 __dpmi_yield (); |
|
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3251 } |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3252 for (b = 0; b < mouse_button_count && !leave; b++) |
| 9572 | 3253 { |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3254 /* Only leave if user both pressed and released the mouse, and in |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3255 that order. This avoids popping down the menu pane unless |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3256 the user is really done with it. */ |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3257 if (mouse_pressed (b, &x, &y)) |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3258 { |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3259 while (mouse_button_depressed (b, &x, &y)) |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3260 __dpmi_yield (); |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3261 leave = 1; |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3262 } |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3263 (void) mouse_released (b, &x, &y); |
| 9572 | 3264 } |
| 3265 } | |
| 3266 | |
| 3267 mouse_off (); | |
| 3268 ScreenUpdate (state[0].screen_behind); | |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3269 if (screen_virtual_segment) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
3270 dosv_refresh_virtual_screen (0, screen_size); |
|
30132
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3271 |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3272 /* We have a situation here. ScreenUpdate has just restored the |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3273 screen contents as it was before we started drawing this menu. |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3274 That includes any echo area message that could have been |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3275 displayed back then. (In reality, that echo area message will |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3276 almost always be the ``keystroke echo'' that echoes the sequence |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3277 of menu items chosen by the user.) However, if the menu had some |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3278 help messages, then displaying those messages caused Emacs to |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3279 forget about the original echo area message. So when |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3280 ScreenUpdate restored it, it created a discrepancy between the |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3281 actual screen contents and what Emacs internal data structures |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3282 know about it. |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3283 |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3284 To avoid this conflict, we force Emacs to restore the original |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3285 echo area message as we found it when we entered this function. |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3286 The irony of this is that we then erase the restored message |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3287 right away, so the only purpose of restoring it is so that |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3288 erasing it works correctly... */ |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3289 if (! NILP (saved_echo_area_message)) |
|
5d20e989c3d4
(XMenuActivate): After exiting the menu, restore the
Eli Zaretskii <eliz@gnu.org>
parents:
30050
diff
changeset
|
3290 message_with_string ("%s", saved_echo_area_message, 0); |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3291 message (0); |
| 9572 | 3292 while (statecount--) |
| 3293 xfree (state[statecount].screen_behind); | |
|
16598
4b0b6719bbd2
[__DJGPP__ >= 2] (dos_direct_output): Faster method of
Karl Heuer <kwzh@gnu.org>
parents:
16524
diff
changeset
|
3294 IT_display_cursor (1); /* turn cursor back on */ |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3295 /* Clean up any mouse events that are waiting inside Emacs event queue. |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3296 These events are likely to be generated before the menu was even |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3297 displayed, probably because the user pressed and released the button |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3298 (which invoked the menu) too quickly. If we don't remove these events, |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3299 Emacs will process them after we return and surprise the user. */ |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3300 discard_mouse_events (); |
| 30711 | 3301 mouse_clear_clicks (); |
| 3302 if (!kbd_buffer_events_waiting (1)) | |
| 3303 clear_input_pending (); | |
|
23497
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3304 /* Allow mouse events generation by dos_rawgetc. */ |
|
eee76d0af99c
(mouse_init): Reset the button press/release info of the mouse driver.
Eli Zaretskii <eliz@gnu.org>
parents:
23156
diff
changeset
|
3305 mouse_preempted--; |
| 9572 | 3306 return result; |
| 3307 } | |
| 3308 | |
| 3309 /* Dispose of a menu. */ | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3310 |
|
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3311 void |
|
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3312 XMenuDestroy (Display *foo, XMenu *menu) |
| 9572 | 3313 { |
| 3314 int i; | |
| 3315 if (menu->allocated) | |
| 3316 { | |
| 3317 for (i = 0; i < menu->count; i++) | |
| 3318 if (menu->submenu[i]) | |
|
10501
19c4a9ef23e5
(XMenuCreate, XMenuAddPane, XMenuAddSelection, XMenuLocate,
Richard M. Stallman <rms@gnu.org>
parents:
9572
diff
changeset
|
3319 XMenuDestroy (foo, menu->submenu[i]); |
| 9572 | 3320 xfree (menu->text); |
| 3321 xfree (menu->submenu); | |
| 3322 xfree (menu->panenumber); | |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3323 xfree (menu->help_text); |
| 9572 | 3324 } |
| 3325 xfree (menu); | |
|
27462
a4cddf1245d7
(IT_clear_end_of_line): Print the extent of the cleared
Eli Zaretskii <eliz@gnu.org>
parents:
27409
diff
changeset
|
3326 menu_help_message = prev_menu_help_message = NULL; |
| 9572 | 3327 } |
| 3328 | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3329 int |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3330 x_pixel_width (struct frame *f) |
| 9572 | 3331 { |
|
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
3332 return FRAME_COLS (f); |
| 9572 | 3333 } |
| 3334 | |
|
12995
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3335 int |
|
a3620c5ffad7
(putchar): Call internal_flush instead of _flsbuf.
Richard M. Stallman <rms@gnu.org>
parents:
12614
diff
changeset
|
3336 x_pixel_height (struct frame *f) |
| 9572 | 3337 { |
|
51201
df6e2df16eb0
Make (several) trivial substitutions for renamed and
Kim F. Storm <storm@cua.dk>
parents:
50247
diff
changeset
|
3338 return FRAME_LINES (f); |
| 9572 | 3339 } |
| 3340 #endif /* !HAVE_X_WINDOWS */ | |
|
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3341 |
| 13179 | 3342 /* ----------------------- DOS / UNIX conversion --------------------- */ |
| 3343 | |
|
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3344 void msdos_downcase_filename (unsigned char *); |
|
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3345 |
| 13179 | 3346 /* Destructively turn backslashes into slashes. */ |
| 3347 | |
| 3348 void | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3349 dostounix_filename (char *p) |
| 13179 | 3350 { |
|
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3351 msdos_downcase_filename (p); |
|
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3352 |
| 13179 | 3353 while (*p) |
| 3354 { | |
| 3355 if (*p == '\\') | |
| 3356 *p = '/'; | |
| 3357 p++; | |
| 3358 } | |
| 3359 } | |
| 3360 | |
| 3361 /* Destructively turn slashes into backslashes. */ | |
| 3362 | |
| 3363 void | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3364 unixtodos_filename (char *p) |
| 13179 | 3365 { |
|
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3366 if (p[1] == ':' && *p >= 'A' && *p <= 'Z') |
|
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3367 { |
|
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3368 *p += 'a' - 'A'; |
|
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3369 p += 2; |
|
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3370 } |
|
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3371 |
| 13179 | 3372 while (*p) |
| 3373 { | |
| 3374 if (*p == '/') | |
| 3375 *p = '\\'; | |
| 3376 p++; | |
| 3377 } | |
| 3378 } | |
| 3379 | |
| 3380 /* Get the default directory for a given drive. 0=def, 1=A, 2=B, ... */ | |
| 3381 | |
| 3382 int | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3383 getdefdir (int drive, char *dst) |
| 13179 | 3384 { |
|
77906
a33e69b10eed
(getdefdir): Delete stray semicolon.
Chong Yidong <cyd@stupidchicken.com>
parents:
75348
diff
changeset
|
3385 char in_path[4], *p = in_path, e = errno; |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3386 |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3387 /* Generate "X:." (when drive is X) or "." (when drive is 0). */ |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3388 if (drive != 0) |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3389 { |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3390 *p++ = drive + 'A' - 1; |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3391 *p++ = ':'; |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3392 } |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3393 |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3394 *p++ = '.'; |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3395 *p = '\0'; |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3396 errno = 0; |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3397 _fixpath (in_path, dst); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3398 /* _fixpath can set errno to ENOSYS on non-LFN systems because |
|
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
3399 it queries the LFN support, so ignore that error. */ |
|
25100
2e3da138463f
(getdefdir): Don't return failure indication when
Eli Zaretskii <eliz@gnu.org>
parents:
24680
diff
changeset
|
3400 if ((errno && errno != ENOSYS) || *dst == '\0') |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3401 return 0; |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3402 |
|
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3403 msdos_downcase_filename (dst); |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3404 |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3405 errno = e; |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3406 return 1; |
| 13179 | 3407 } |
| 3408 | |
|
42192
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3409 char * |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3410 emacs_root_dir (void) |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3411 { |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3412 static char root_dir[4]; |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3413 |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3414 sprintf (root_dir, "%c:/", 'A' + getdisk ()); |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3415 root_dir[0] = tolower (root_dir[0]); |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3416 return root_dir; |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3417 } |
|
bd23b0c564d9
(emacs_root_dir): New function.
Eli Zaretskii <eliz@gnu.org>
parents:
41940
diff
changeset
|
3418 |
| 13179 | 3419 /* Remove all CR's that are followed by a LF. */ |
| 3420 | |
| 3421 int | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3422 crlf_to_lf (int n, unsigned char *buf) |
| 13179 | 3423 { |
| 45332 | 3424 unsigned char *np = buf, *startp = buf, *endp = buf + n; |
| 13179 | 3425 |
| 3426 if (n == 0) | |
| 3427 return n; | |
| 3428 while (buf < endp - 1) | |
| 3429 { | |
| 3430 if (*buf == 0x0d) | |
| 3431 { | |
| 3432 if (*(++buf) != 0x0a) | |
| 3433 *np++ = 0x0d; | |
| 3434 } | |
| 3435 else | |
| 3436 *np++ = *buf++; | |
| 3437 } | |
| 3438 if (buf < endp) | |
| 3439 *np++ = *buf++; | |
| 3440 return np - startp; | |
| 3441 } | |
| 14999 | 3442 |
|
15174
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
3443 DEFUN ("msdos-long-file-names", Fmsdos_long_file_names, Smsdos_long_file_names, |
|
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3444 0, 0, 0, |
|
99540
c5c8f07bc47c
* w32-fns.el (w32-shell-dos-semantics):
Juanma Barranquero <lekktu@gmail.com>
parents:
98030
diff
changeset
|
3445 doc: /* Return non-nil if long file names are supported on MS-DOS. */) |
|
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
3446 (void) |
|
15174
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
3447 { |
|
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
3448 return (_USE_LFN ? Qt : Qnil); |
|
08937f70419e
(Fmsdos_long_file_names): New function.
Richard M. Stallman <rms@gnu.org>
parents:
15125
diff
changeset
|
3449 } |
|
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3450 |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3451 /* Convert alphabetic characters in a filename to lower-case. */ |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3452 |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3453 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3454 msdos_downcase_filename (unsigned char *p) |
|
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3455 { |
| 15588 | 3456 /* Always lower-case drive letters a-z, even if the filesystem |
| 3457 preserves case in filenames. | |
| 3458 This is so MSDOS filenames could be compared by string comparison | |
| 3459 functions that are case-sensitive. Even case-preserving filesystems | |
| 3460 do not distinguish case in drive letters. */ | |
| 3461 if (p[1] == ':' && *p >= 'A' && *p <= 'Z') | |
| 3462 { | |
| 3463 *p += 'a' - 'A'; | |
| 3464 p += 2; | |
| 3465 } | |
| 3466 | |
|
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3467 /* Under LFN we expect to get pathnames in their true case. */ |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3468 if (NILP (Fmsdos_long_file_names ())) |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3469 for ( ; *p; p++) |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3470 if (*p >= 'A' && *p <= 'Z') |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3471 *p += 'a' - 'A'; |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3472 } |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3473 |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3474 DEFUN ("msdos-downcase-filename", Fmsdos_downcase_filename, Smsdos_downcase_filename, |
|
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3475 1, 1, 0, |
|
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3476 doc: /* Convert alphabetic characters in FILENAME to lower case and return that. |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3477 When long filenames are supported, doesn't change FILENAME. |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3478 If FILENAME is not a string, returns nil. |
|
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
3479 The argument object is never altered--the value is a copy. */) |
|
109179
8cfee7d2955f
Convert DEFUNs to standard C.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109165
diff
changeset
|
3480 (Lisp_Object filename) |
|
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3481 { |
|
15222
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
3482 Lisp_Object tem; |
|
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
3483 |
|
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
3484 if (! STRINGP (filename)) |
|
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
3485 return Qnil; |
|
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
3486 |
|
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
3487 tem = Fcopy_sequence (filename); |
|
46370
40db0673e6f0
Most uses of XSTRING combined with STRING_BYTES or indirection changed to
Ken Raeburn <raeburn@raeburn.org>
parents:
46272
diff
changeset
|
3488 msdos_downcase_filename (SDATA (tem)); |
|
15222
cc264dd966cd
(Fmsdos_downcase_filename): Don't change the argument, return a copy.
Richard M. Stallman <rms@gnu.org>
parents:
15219
diff
changeset
|
3489 return tem; |
|
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
3490 } |
| 13179 | 3491 |
| 3492 /* The Emacs root directory as determined by init_environment. */ | |
| 3493 | |
| 3494 static char emacsroot[MAXPATHLEN]; | |
| 3495 | |
| 3496 char * | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3497 rootrelativepath (char *rel) |
| 13179 | 3498 { |
| 3499 static char result[MAXPATHLEN + 10]; | |
| 3500 | |
| 3501 strcpy (result, emacsroot); | |
| 3502 strcat (result, "/"); | |
| 3503 strcat (result, rel); | |
| 3504 return result; | |
| 3505 } | |
| 3506 | |
| 3507 /* Define a lot of environment variables if not already defined. Don't | |
| 3508 remove anything unless you know what you're doing -- lots of code will | |
| 3509 break if one or more of these are missing. */ | |
| 3510 | |
| 3511 void | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3512 init_environment (int argc, char **argv, int skip_args) |
| 13179 | 3513 { |
| 3514 char *s, *t, *root; | |
| 45332 | 3515 int len, i; |
|
22054
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3516 static const char * const tempdirs[] = { |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3517 "$TMPDIR", "$TEMP", "$TMP", "c:/" |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3518 }; |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3519 const int imax = sizeof (tempdirs) / sizeof (tempdirs[0]); |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3520 |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3521 /* Make sure they have a usable $TMPDIR. Many Emacs functions use |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3522 temporary files and assume "/tmp" if $TMPDIR is unset, which |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3523 will break on DOS/Windows. Refuse to work if we cannot find |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3524 a directory, not even "c:/", usable for that purpose. */ |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3525 for (i = 0; i < imax ; i++) |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3526 { |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3527 const char *tmp = tempdirs[i]; |
|
55198
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3528 char buf[FILENAME_MAX]; |
|
22054
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3529 |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3530 if (*tmp == '$') |
|
55198
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3531 { |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3532 int tmp_len; |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3533 |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3534 tmp = getenv (tmp + 1); |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3535 if (!tmp) |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3536 continue; |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3537 |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3538 /* Some lusers set TMPDIR=e:, probably because some losing |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3539 programs cannot handle multiple slashes if they use e:/. |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3540 e: fails in `access' below, so we interpret e: as e:/. */ |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3541 tmp_len = strlen(tmp); |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3542 if (tmp[tmp_len - 1] != '/' && tmp[tmp_len - 1] != '\\') |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3543 { |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3544 strcpy(buf, tmp); |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3545 buf[tmp_len++] = '/', buf[tmp_len] = 0; |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3546 tmp = buf; |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3547 } |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3548 } |
|
dabd7326e596
(init_environment): If one of the TMP... environment
Eli Zaretskii <eliz@gnu.org>
parents:
54730
diff
changeset
|
3549 |
|
22054
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3550 /* Note that `access' can lie to us if the directory resides on a |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3551 read-only filesystem, like CD-ROM or a write-protected floppy. |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3552 The only way to be really sure is to actually create a file and |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3553 see if it succeeds. But I think that's too much to ask. */ |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3554 if (tmp && access (tmp, D_OK) == 0) |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3555 { |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3556 setenv ("TMPDIR", tmp, 1); |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3557 break; |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3558 } |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3559 } |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3560 if (i >= imax) |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3561 cmd_error_internal |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3562 (Fcons (Qerror, |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3563 Fcons (build_string ("no usable temporary directories found!!"), |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3564 Qnil)), |
|
d313bff62b93
(init_environment): Set TMPDIR to an existing
Eli Zaretskii <eliz@gnu.org>
parents:
21785
diff
changeset
|
3565 "While setting TMPDIR: "); |
| 13179 | 3566 |
|
23815
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
3567 /* Note the startup time, so we know not to clear the screen if we |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
3568 exit immediately; see IT_reset_terminal_modes. |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
3569 (Yes, I know `clock' returns zero the first time it's called, but |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
3570 I do this anyway, in case some wiseguy changes that at some point.) */ |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
3571 startup_time = clock (); |
|
fe9557bb7056
(init_environment): Record the time we started up.
Eli Zaretskii <eliz@gnu.org>
parents:
23497
diff
changeset
|
3572 |
| 13179 | 3573 /* Find our root from argv[0]. Assuming argv[0] is, say, |
| 3574 "c:/emacs/bin/emacs.exe" our root will be "c:/emacs". */ | |
| 3575 root = alloca (MAXPATHLEN + 20); | |
| 3576 _fixpath (argv[0], root); | |
|
15618
5da6a61ce827
(dostounix_filename): On caseless filesystems, downcase the filename.
Miles Bader <miles@gnu.org>
parents:
15588
diff
changeset
|
3577 msdos_downcase_filename (root); |
| 13179 | 3578 len = strlen (root); |
| 3579 while (len > 0 && root[len] != '/' && root[len] != ':') | |
| 3580 len--; | |
| 3581 root[len] = '\0'; | |
|
19295
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
3582 if (len > 4 |
|
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
3583 && (strcmp (root + len - 4, "/bin") == 0 |
|
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
3584 || strcmp (root + len - 4, "/src") == 0)) /* under a debugger */ |
| 13179 | 3585 root[len - 4] = '\0'; |
| 3586 else | |
|
19295
812986c77ae2
(init_environment): Set Emacs root directory properly when
Richard M. Stallman <rms@gnu.org>
parents:
19293
diff
changeset
|
3587 strcpy (root, "c:/emacs"); /* let's be defensive */ |
| 13179 | 3588 len = strlen (root); |
| 3589 strcpy (emacsroot, root); | |
| 3590 | |
| 3591 /* We default HOME to our root. */ | |
| 3592 setenv ("HOME", root, 0); | |
| 3593 | |
| 3594 /* We default EMACSPATH to root + "/bin". */ | |
| 3595 strcpy (root + len, "/bin"); | |
| 3596 setenv ("EMACSPATH", root, 0); | |
| 3597 | |
| 3598 /* I don't expect anybody to ever use other terminals so the internal | |
| 3599 terminal is the default. */ | |
| 3600 setenv ("TERM", "internal", 0); | |
| 3601 | |
| 3602 #ifdef HAVE_X_WINDOWS | |
| 3603 /* Emacs expects DISPLAY to be set. */ | |
| 3604 setenv ("DISPLAY", "unix:0.0", 0); | |
| 3605 #endif | |
| 3606 | |
| 3607 /* SHELL is a bit tricky -- COMSPEC is the closest we come, but we must | |
| 3608 downcase it and mirror the backslashes. */ | |
| 3609 s = getenv ("COMSPEC"); | |
| 3610 if (!s) s = "c:/command.com"; | |
| 3611 t = alloca (strlen (s) + 1); | |
| 3612 strcpy (t, s); | |
| 3613 dostounix_filename (t); | |
| 3614 setenv ("SHELL", t, 0); | |
| 3615 | |
| 3616 /* PATH is also downcased and backslashes mirrored. */ | |
| 3617 s = getenv ("PATH"); | |
| 3618 if (!s) s = ""; | |
| 3619 t = alloca (strlen (s) + 3); | |
| 3620 /* Current directory is always considered part of MsDos's path but it is | |
| 3621 not normally mentioned. Now it is. */ | |
| 3622 strcat (strcpy (t, ".;"), s); | |
| 3623 dostounix_filename (t); /* Not a single file name, but this should work. */ | |
| 3624 setenv ("PATH", t, 1); | |
| 3625 | |
| 3626 /* In some sense all dos users have root privileges, so... */ | |
| 3627 setenv ("USER", "root", 0); | |
| 3628 setenv ("NAME", getenv ("USER"), 0); | |
| 3629 | |
| 3630 /* Time zone determined from country code. To make this possible, the | |
| 3631 country code may not span more than one time zone. In other words, | |
| 3632 in the USA, you lose. */ | |
| 13274 | 3633 if (!getenv ("TZ")) |
| 13179 | 3634 switch (dos_country_code) |
| 3635 { | |
| 3636 case 31: /* Belgium */ | |
| 3637 case 32: /* The Netherlands */ | |
| 3638 case 33: /* France */ | |
| 3639 case 34: /* Spain */ | |
| 3640 case 36: /* Hungary */ | |
| 3641 case 38: /* Yugoslavia (or what's left of it?) */ | |
| 3642 case 39: /* Italy */ | |
| 3643 case 41: /* Switzerland */ | |
| 3644 case 42: /* Tjekia */ | |
| 3645 case 45: /* Denmark */ | |
| 3646 case 46: /* Sweden */ | |
| 3647 case 47: /* Norway */ | |
| 3648 case 48: /* Poland */ | |
| 3649 case 49: /* Germany */ | |
| 3650 /* Daylight saving from last Sunday in March to last Sunday in | |
| 3651 September, both at 2AM. */ | |
|
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3652 setenv ("TZ", "MET-01METDST-02,M3.5.0/02:00,M9.5.0/02:00", 0); |
| 13179 | 3653 break; |
| 3654 case 44: /* United Kingdom */ | |
| 3655 case 351: /* Portugal */ | |
| 3656 case 354: /* Iceland */ | |
|
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3657 setenv ("TZ", "GMT+00", 0); |
| 13179 | 3658 break; |
| 3659 case 81: /* Japan */ | |
| 3660 case 82: /* Korea */ | |
|
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3661 setenv ("TZ", "JST-09", 0); |
| 13179 | 3662 break; |
| 3663 case 90: /* Turkey */ | |
| 3664 case 358: /* Finland */ | |
|
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3665 setenv ("TZ", "EET-02", 0); |
|
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3666 break; |
| 13179 | 3667 case 972: /* Israel */ |
|
13394
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3668 /* This is an approximation. (For exact rules, use the |
|
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3669 `zoneinfo/israel' file which comes with DJGPP, but you need |
|
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3670 to install it in `/usr/share/zoneinfo/' directory first.) */ |
|
c4549fcdd5f3
(the_only_x_display): Type is now struct x_output.
Karl Heuer <kwzh@gnu.org>
parents:
13305
diff
changeset
|
3671 setenv ("TZ", "IST-02IDT-03,M4.1.6/00:00,M9.5.6/01:00", 0); |
| 13179 | 3672 break; |
| 3673 } | |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3674 tzset (); |
| 13179 | 3675 } |
| 3676 | |
| 3677 | |
| 3678 | |
| 3679 static int break_stat; /* BREAK check mode status. */ | |
| 3680 static int stdin_stat; /* stdin IOCTL status. */ | |
| 3681 | |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3682 /* Turn off Dos' Ctrl-C checking and inhibit interpretation of |
|
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3683 control chars by DOS. Determine the keyboard type. */ |
| 13179 | 3684 |
| 3685 int | |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3686 dos_ttraw (struct tty_display_info *tty) |
| 13179 | 3687 { |
| 3688 union REGS inregs, outregs; | |
| 3689 static int first_time = 1; | |
| 45332 | 3690 |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3691 /* If we are called for the initial terminal, it's too early to do |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3692 anything, and termscript isn't set up. */ |
|
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3693 if (tty->terminal->type == output_initial) |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3694 return 2; |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3695 |
| 13179 | 3696 break_stat = getcbrk (); |
| 3697 setcbrk (0); | |
| 3698 | |
| 3699 if (first_time) | |
| 3700 { | |
| 3701 inregs.h.ah = 0xc0; | |
| 3702 int86 (0x15, &inregs, &outregs); | |
| 3703 extended_kbd = (!outregs.x.cflag) && (outregs.h.ah == 0); | |
| 45332 | 3704 |
| 13179 | 3705 have_mouse = 0; |
| 3706 | |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3707 if (1 |
| 13179 | 3708 #ifdef HAVE_X_WINDOWS |
| 3709 && inhibit_window_system | |
| 3710 #endif | |
| 3711 ) | |
| 3712 { | |
| 3713 inregs.x.ax = 0x0021; | |
| 3714 int86 (0x33, &inregs, &outregs); | |
| 3715 have_mouse = (outregs.x.ax & 0xffff) == 0xffff; | |
| 3716 if (!have_mouse) | |
| 3717 { | |
| 3718 /* Reportedly, the above doesn't work for some mouse drivers. There | |
| 3719 is an additional detection method that should work, but might be | |
| 3720 a little slower. Use that as an alternative. */ | |
| 3721 inregs.x.ax = 0x0000; | |
| 3722 int86 (0x33, &inregs, &outregs); | |
| 3723 have_mouse = (outregs.x.ax & 0xffff) == 0xffff; | |
| 3724 } | |
| 3725 if (have_mouse) | |
|
97657
24f1cb4150ef
Include frame.h before termhooks.h.
Eli Zaretskii <eliz@gnu.org>
parents:
94963
diff
changeset
|
3726 mouse_button_count = outregs.x.bx; |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3727 |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3728 #ifndef HAVE_X_WINDOWS |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3729 /* Save the cursor shape used outside Emacs. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3730 outside_cursor = _farpeekw (_dos_ds, 0x460); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3731 #endif |
| 13179 | 3732 } |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3733 |
| 13179 | 3734 first_time = 0; |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3735 |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3736 stdin_stat = setmode (fileno (stdin), O_BINARY); |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3737 return (stdin_stat != -1); |
| 13179 | 3738 } |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3739 else |
|
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3740 return (setmode (fileno (stdin), O_BINARY) != -1); |
| 13179 | 3741 } |
| 3742 | |
| 3743 /* Restore status of standard input and Ctrl-C checking. */ | |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3744 |
| 13179 | 3745 int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3746 dos_ttcooked (void) |
| 13179 | 3747 { |
| 3748 union REGS inregs, outregs; | |
| 3749 | |
| 3750 setcbrk (break_stat); | |
| 3751 mouse_off (); | |
| 3752 | |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3753 #ifndef HAVE_X_WINDOWS |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3754 /* Restore the cursor shape we found on startup. */ |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3755 if (outside_cursor) |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3756 { |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3757 inregs.h.ah = 1; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3758 inregs.x.cx = outside_cursor; |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3759 int86 (0x10, &inregs, &outregs); |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3760 } |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3761 #endif |
|
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
3762 |
|
14974
b99490300747
[MSDOS]: If DJGPP version 2, include fcntl.h.
Richard M. Stallman <rms@gnu.org>
parents:
14783
diff
changeset
|
3763 return (setmode (fileno (stdin), stdin_stat) != -1); |
| 13179 | 3764 } |
| 3765 | |
| 3766 | |
| 3767 /* Run command as specified by ARGV in directory DIR. | |
|
13718
e1b33f87545f
(run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents:
13717
diff
changeset
|
3768 The command is run with input from TEMPIN, output to |
|
e1b33f87545f
(run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents:
13717
diff
changeset
|
3769 file TEMPOUT and stderr to TEMPERR. */ |
|
14413
77ed54321a41
(dos_rawgetc): Allow simulation of `Mouse-3' by
Richard M. Stallman <rms@gnu.org>
parents:
14284
diff
changeset
|
3770 |
| 13179 | 3771 int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3772 run_msdos_command (unsigned char **argv, const char *working_dir, |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3773 int tempin, int tempout, int temperr, char **envv) |
| 13179 | 3774 { |
|
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3775 char *saveargv1, *saveargv2, *lowcase_argv0, *pa, *pl; |
| 13179 | 3776 char oldwd[MAXPATHLEN + 1]; /* Fixed size is safe on MSDOS. */ |
| 45332 | 3777 int msshell, result = -1, inbak, outbak, errbak, x, y; |
| 13179 | 3778 Lisp_Object cmd; |
| 3779 | |
| 3780 /* Get current directory as MSDOS cwd is not per-process. */ | |
| 3781 getwd (oldwd); | |
| 3782 | |
|
16310
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3783 /* If argv[0] is the shell, it might come in any lettercase. |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3784 Since `Fmember' is case-sensitive, we need to downcase |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3785 argv[0], even if we are on case-preserving filesystems. */ |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3786 lowcase_argv0 = alloca (strlen (argv[0]) + 1); |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3787 for (pa = argv[0], pl = lowcase_argv0; *pa; pl++) |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3788 { |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3789 *pl = *pa++; |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3790 if (*pl >= 'A' && *pl <= 'Z') |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3791 *pl += 'a' - 'A'; |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3792 } |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3793 *pl = '\0'; |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3794 |
|
c987c025d448
(run_msdos_command): When testing whether a shell
Richard M. Stallman <rms@gnu.org>
parents:
16210
diff
changeset
|
3795 cmd = Ffile_name_nondirectory (build_string (lowcase_argv0)); |
| 13179 | 3796 msshell = !NILP (Fmember (cmd, Fsymbol_value (intern ("msdos-shells")))) |
| 3797 && !strcmp ("-c", argv[1]); | |
| 3798 if (msshell) | |
| 3799 { | |
| 3800 saveargv1 = argv[1]; | |
| 3801 saveargv2 = argv[2]; | |
| 3802 argv[1] = "/c"; | |
|
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3803 /* We only need to mirror slashes if a DOS shell will be invoked |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3804 not via `system' (which does the mirroring itself). Yes, that |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3805 means DJGPP v1.x will lose here. */ |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3806 if (argv[2] && argv[3]) |
| 13179 | 3807 { |
| 3808 char *p = alloca (strlen (argv[2]) + 1); | |
| 3809 | |
| 3810 strcpy (argv[2] = p, saveargv2); | |
| 3811 while (*p && isspace (*p)) | |
| 3812 p++; | |
|
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3813 while (*p) |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3814 { |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3815 if (*p == '/') |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3816 *p++ = '\\'; |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3817 else |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3818 p++; |
|
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3819 } |
| 13179 | 3820 } |
| 3821 } | |
| 3822 | |
|
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3823 chdir (working_dir); |
| 13179 | 3824 inbak = dup (0); |
| 3825 outbak = dup (1); | |
| 3826 errbak = dup (2); | |
| 3827 if (inbak < 0 || outbak < 0 || errbak < 0) | |
| 3828 goto done; /* Allocation might fail due to lack of descriptors. */ | |
| 3829 | |
| 3830 if (have_mouse > 0) | |
| 3831 mouse_get_xy (&x, &y); | |
| 3832 | |
|
99583
e84316087c93
(run_msdos_command): Don't call dos_ttcooked, dos_ttraw, and bright_bg
Eli Zaretskii <eliz@gnu.org>
parents:
99540
diff
changeset
|
3833 if (!noninteractive) |
|
e84316087c93
(run_msdos_command): Don't call dos_ttcooked, dos_ttraw, and bright_bg
Eli Zaretskii <eliz@gnu.org>
parents:
99540
diff
changeset
|
3834 dos_ttcooked (); /* do it here while 0 = stdin */ |
| 45332 | 3835 |
| 13179 | 3836 dup2 (tempin, 0); |
| 3837 dup2 (tempout, 1); | |
|
13718
e1b33f87545f
(run_msdos_command): Support redirection of stderr.
Karl Heuer <kwzh@gnu.org>
parents:
13717
diff
changeset
|
3838 dup2 (temperr, 2); |
| 13179 | 3839 |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3840 if (msshell && !argv[3]) |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3841 { |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3842 /* MS-DOS native shells are too restrictive. For starters, they |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3843 cannot grok commands longer than 126 characters. In DJGPP v2 |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3844 and later, `system' is much smarter, so we'll call it instead. */ |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3845 |
|
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3846 const char *cmnd; |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3847 |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3848 /* A shell gets a single argument--its full command |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3849 line--whose original was saved in `saveargv2'. */ |
|
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3850 |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3851 /* Don't let them pass empty command lines to `system', since |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3852 with some shells it will try to invoke an interactive shell, |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3853 which will hang Emacs. */ |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3854 for (cmnd = saveargv2; *cmnd && isspace (*cmnd); cmnd++) |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3855 ; |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3856 if (*cmnd) |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3857 { |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3858 extern char **environ; |
|
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3859 char **save_env = environ; |
|
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3860 int save_system_flags = __system_flags; |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3861 |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3862 /* Request the most powerful version of `system'. We need |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3863 all the help we can get to avoid calling stock DOS shells. */ |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3864 __system_flags = (__system_redirect |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3865 | __system_use_shell |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3866 | __system_allow_multiple_cmds |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3867 | __system_allow_long_cmds |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3868 | __system_handle_null_commands |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3869 | __system_emulate_chdir); |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3870 |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3871 environ = envv; |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3872 result = system (cmnd); |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3873 __system_flags = save_system_flags; |
|
30529
788ce16426e3
(run_msdos_command): Save and restore the master
Eli Zaretskii <eliz@gnu.org>
parents:
30381
diff
changeset
|
3874 environ = save_env; |
|
21693
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3875 } |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3876 else |
|
fc0153e88b71
(run_msdos_command): Don't construct process
Eli Zaretskii <eliz@gnu.org>
parents:
21583
diff
changeset
|
3877 result = 0; /* emulate Unixy shell behavior with empty cmd line */ |
|
15125
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3878 } |
|
4dc406e38d68
(dos_get_modifiers): Restore missing comment terminator.
Richard M. Stallman <rms@gnu.org>
parents:
15096
diff
changeset
|
3879 else |
|
109761
31def5db596a
Fix -Wall compiler warnings in MSDOS sources.
Eli Zaretskii <eliz@gnu.org>
parents:
109668
diff
changeset
|
3880 result = spawnve (P_WAIT, argv[0], (char **)argv, envv); |
| 45332 | 3881 |
| 13179 | 3882 dup2 (inbak, 0); |
| 3883 dup2 (outbak, 1); | |
| 3884 dup2 (errbak, 2); | |
|
26088
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25214
diff
changeset
|
3885 emacs_close (inbak); |
|
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25214
diff
changeset
|
3886 emacs_close (outbak); |
|
b7aa6ac26872
Add support for large files, 64-bit Solaris, system locale codings.
Paul Eggert <eggert@twinsun.com>
parents:
25214
diff
changeset
|
3887 emacs_close (errbak); |
| 13179 | 3888 |
|
99583
e84316087c93
(run_msdos_command): Don't call dos_ttcooked, dos_ttraw, and bright_bg
Eli Zaretskii <eliz@gnu.org>
parents:
99540
diff
changeset
|
3889 if (!noninteractive) |
|
e84316087c93
(run_msdos_command): Don't call dos_ttcooked, dos_ttraw, and bright_bg
Eli Zaretskii <eliz@gnu.org>
parents:
99540
diff
changeset
|
3890 dos_ttraw (CURTTY ()); |
| 13179 | 3891 if (have_mouse > 0) |
| 3892 { | |
| 3893 mouse_init (); | |
| 3894 mouse_moveto (x, y); | |
| 3895 } | |
|
16837
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
3896 |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
3897 /* Some programs might change the meaning of the highest bit of the |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
3898 text attribute byte, so we get blinking characters instead of the |
|
7370bcad5cb1
(bright_bg): Save the original state of video blink bit.
Richard M. Stallman <rms@gnu.org>
parents:
16763
diff
changeset
|
3899 bright background colors. Restore that. */ |
|
99583
e84316087c93
(run_msdos_command): Don't call dos_ttcooked, dos_ttraw, and bright_bg
Eli Zaretskii <eliz@gnu.org>
parents:
99540
diff
changeset
|
3900 if (!noninteractive) |
|
e84316087c93
(run_msdos_command): Don't call dos_ttcooked, dos_ttraw, and bright_bg
Eli Zaretskii <eliz@gnu.org>
parents:
99540
diff
changeset
|
3901 bright_bg (); |
| 45332 | 3902 |
| 13179 | 3903 done: |
| 3904 chdir (oldwd); | |
| 3905 if (msshell) | |
| 3906 { | |
| 3907 argv[1] = saveargv1; | |
| 3908 argv[2] = saveargv2; | |
| 3909 } | |
| 3910 return result; | |
| 3911 } | |
| 3912 | |
|
46954
6c7dc88b9a5d
(croak): Add `void' to definition.
Eli Zaretskii <eliz@gnu.org>
parents:
46370
diff
changeset
|
3913 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3914 croak (char *badfunc) |
| 13179 | 3915 { |
| 3916 fprintf (stderr, "%s not yet implemented\r\n", badfunc); | |
| 53341 | 3917 reset_all_sys_modes (); |
| 13179 | 3918 exit (1); |
| 3919 } | |
|
13848
5f38596d591e
(have_menus_p): Defined.
Richard M. Stallman <rms@gnu.org>
parents:
13744
diff
changeset
|
3920 |
| 107734 | 3921 /* |
| 3922 * A few unimplemented functions that we silently ignore. | |
| 13179 | 3923 */ |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3924 int setpgrp (void) {return 0; } |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3925 int setpriority (int x, int y, int z) { return 0; } |
| 107734 | 3926 |
|
107733
84b961690802
Remove support for DJGPP v1.x (bug#5813).
Eli Zaretskii <eliz@gnu.org>
parents:
106815
diff
changeset
|
3927 #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 2 |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3928 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3929 /* Augment DJGPP library POSIX signal functions. This is needed |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3930 as of DJGPP v2.01, but might be in the library in later releases. */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3931 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3932 #include <libc/bss.h> |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3933 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3934 /* A counter to know when to re-initialize the static sets. */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3935 static int sigprocmask_count = -1; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3936 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3937 /* Which signals are currently blocked (initially none). */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3938 static sigset_t current_mask; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3939 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3940 /* Which signals are pending (initially none). */ |
|
101658
ce543dc9d6b4
Rename pending_signals to msdos_pending_signals.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
3941 static sigset_t msdos_pending_signals; |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3942 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3943 /* Previous handlers to restore when the blocked signals are unblocked. */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3944 typedef void (*sighandler_t)(int); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3945 static sighandler_t prev_handlers[320]; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3946 |
| 46272 | 3947 /* A signal handler which just records that a signal occurred |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3948 (it will be raised later, if and when the signal is unblocked). */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3949 static void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3950 sig_suspender (int signo) |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3951 { |
|
101658
ce543dc9d6b4
Rename pending_signals to msdos_pending_signals.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
3952 sigaddset (&msdos_pending_signals, signo); |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3953 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3954 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3955 int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
3956 sigprocmask (int how, const sigset_t *new_set, sigset_t *old_set) |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3957 { |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3958 int signo; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3959 sigset_t new_mask; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3960 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3961 /* If called for the first time, initialize. */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3962 if (sigprocmask_count != __bss_count) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3963 { |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3964 sigprocmask_count = __bss_count; |
|
101658
ce543dc9d6b4
Rename pending_signals to msdos_pending_signals.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
3965 sigemptyset (&msdos_pending_signals); |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3966 sigemptyset (¤t_mask); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3967 for (signo = 0; signo < 320; signo++) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3968 prev_handlers[signo] = SIG_ERR; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3969 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3970 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3971 if (old_set) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3972 *old_set = current_mask; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3973 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3974 if (new_set == 0) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3975 return 0; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3976 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3977 if (how != SIG_BLOCK && how != SIG_UNBLOCK && how != SIG_SETMASK) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3978 { |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3979 errno = EINVAL; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3980 return -1; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3981 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3982 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3983 sigemptyset (&new_mask); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3984 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3985 /* DJGPP supports upto 320 signals. */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3986 for (signo = 0; signo < 320; signo++) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3987 { |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3988 if (sigismember (¤t_mask, signo)) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3989 sigaddset (&new_mask, signo); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3990 else if (sigismember (new_set, signo) && how != SIG_UNBLOCK) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3991 { |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3992 sigaddset (&new_mask, signo); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3993 |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3994 /* SIGKILL is silently ignored, as on other platforms. */ |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3995 if (signo != SIGKILL && prev_handlers[signo] == SIG_ERR) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3996 prev_handlers[signo] = signal (signo, sig_suspender); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3997 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3998 if (( how == SIG_UNBLOCK |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
3999 && sigismember (&new_mask, signo) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4000 && sigismember (new_set, signo)) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4001 || (how == SIG_SETMASK |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4002 && sigismember (&new_mask, signo) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4003 && !sigismember (new_set, signo))) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4004 { |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4005 sigdelset (&new_mask, signo); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4006 if (prev_handlers[signo] != SIG_ERR) |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4007 { |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4008 signal (signo, prev_handlers[signo]); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4009 prev_handlers[signo] = SIG_ERR; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4010 } |
|
101658
ce543dc9d6b4
Rename pending_signals to msdos_pending_signals.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
4011 if (sigismember (&msdos_pending_signals, signo)) |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4012 { |
|
101658
ce543dc9d6b4
Rename pending_signals to msdos_pending_signals.
Eli Zaretskii <eliz@gnu.org>
parents:
100951
diff
changeset
|
4013 sigdelset (&msdos_pending_signals, signo); |
|
16872
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4014 raise (signo); |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4015 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4016 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4017 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4018 current_mask = new_mask; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4019 return 0; |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4020 } |
|
1efa81ac7e5a
* (sigprocmask, sig_suspender): New functions, implement
Eli Zaretskii <eliz@gnu.org>
parents:
16871
diff
changeset
|
4021 |
| 45332 | 4022 #endif /* not __DJGPP_MINOR__ < 2 */ |
| 13179 | 4023 |
| 4024 #ifndef HAVE_SELECT | |
| 4025 #include "sysselect.h" | |
| 4026 | |
|
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4027 #ifndef EMACS_TIME_ZERO_OR_NEG_P |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4028 #define EMACS_TIME_ZERO_OR_NEG_P(time) \ |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4029 ((long)(time).tv_sec < 0 \ |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4030 || ((time).tv_sec == 0 \ |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4031 && (long)(time).tv_usec <= 0)) |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4032 #endif |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4033 |
|
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4034 /* This yields the rest of the current time slice to the task manager. |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4035 It should be called by any code which knows that it has nothing |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4036 useful to do except idle. |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4037 |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4038 I don't use __dpmi_yield here, since versions of library before 2.02 |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4039 called Int 2Fh/AX=1680h there in a way that would wedge the DOS box |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4040 on some versions of Windows 9X. */ |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4041 |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4042 void |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4043 dos_yield_time_slice (void) |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4044 { |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4045 _go32_dpmi_registers r; |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4046 |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4047 r.x.ax = 0x1680; |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4048 r.x.ss = r.x.sp = r.x.flags = 0; |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4049 _go32_dpmi_simulate_int (0x2f, &r); |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4050 if (r.h.al == 0x80) |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4051 errno = ENOSYS; |
|
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4052 } |
|
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4053 |
| 13179 | 4054 /* Only event queue is checked. */ |
| 14999 | 4055 /* We don't have to call timer_check here |
|
56729
e6e0caa7ec87
Rename wait_reading_process_input to wait_reading_process_output.
Kim F. Storm <storm@cua.dk>
parents:
56335
diff
changeset
|
4056 because wait_reading_process_output takes care of that. */ |
| 13179 | 4057 int |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4058 sys_select (int nfds, SELECT_TYPE *rfds, SELECT_TYPE *wfds, SELECT_TYPE *efds, |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4059 EMACS_TIME *timeout) |
| 13179 | 4060 { |
| 4061 int check_input; | |
| 4062 struct time t; | |
| 4063 | |
| 4064 check_input = 0; | |
| 4065 if (rfds) | |
| 4066 { | |
| 4067 check_input = FD_ISSET (0, rfds); | |
| 4068 FD_ZERO (rfds); | |
| 4069 } | |
| 4070 if (wfds) | |
| 4071 FD_ZERO (wfds); | |
| 4072 if (efds) | |
| 4073 FD_ZERO (efds); | |
| 4074 | |
| 4075 if (nfds != 1) | |
| 4076 abort (); | |
| 45332 | 4077 |
| 13179 | 4078 /* If we are looking only for the terminal, with no timeout, |
| 4079 just read it and wait -- that's more efficient. */ | |
| 4080 if (!timeout) | |
| 4081 { | |
|
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
4082 while (!detect_input_pending ()) |
|
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
4083 { |
|
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4084 dos_yield_time_slice (); |
|
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
4085 } |
| 13179 | 4086 } |
| 4087 else | |
| 4088 { | |
|
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4089 EMACS_TIME clnow, cllast, cldiff; |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4090 |
|
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
4091 gettime (&t); |
|
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4092 EMACS_SET_SECS_USECS (cllast, t.ti_sec, t.ti_hund * 10000L); |
| 13179 | 4093 |
| 4094 while (!check_input || !detect_input_pending ()) | |
| 4095 { | |
|
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
4096 gettime (&t); |
|
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4097 EMACS_SET_SECS_USECS (clnow, t.ti_sec, t.ti_hund * 10000L); |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4098 EMACS_SUB_TIME (cldiff, clnow, cllast); |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4099 |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4100 /* When seconds wrap around, we assume that no more than |
|
15033
9e174c2b4ba6
(check_timer): Removed; use gettime instead.
Richard M. Stallman <rms@gnu.org>
parents:
14999
diff
changeset
|
4101 1 minute passed since last `gettime'. */ |
|
14279
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4102 if (EMACS_TIME_NEG_P (cldiff)) |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4103 EMACS_SET_SECS (cldiff, EMACS_SECS (cldiff) + 60); |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4104 EMACS_SUB_TIME (*timeout, *timeout, cldiff); |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4105 |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4106 /* Stop when timeout value crosses zero. */ |
|
085bc709c11d
(sys_select): Use time macros to prevent time values
Karl Heuer <kwzh@gnu.org>
parents:
14262
diff
changeset
|
4107 if (EMACS_TIME_ZERO_OR_NEG_P (*timeout)) |
| 13179 | 4108 return 0; |
| 4109 cllast = clnow; | |
|
22481
c19803db4a93
(dos_set_keyboard): Call Int 2Fh via the DPMI server, not directly.
Eli Zaretskii <eliz@gnu.org>
parents:
22054
diff
changeset
|
4110 dos_yield_time_slice (); |
| 13179 | 4111 } |
| 4112 } | |
| 45332 | 4113 |
| 13179 | 4114 FD_SET (0, rfds); |
| 4115 return 1; | |
| 4116 } | |
| 4117 #endif | |
| 4118 | |
| 4119 /* | |
| 14036 | 4120 * Define overlaid functions: |
| 13179 | 4121 * |
| 4122 * chdir -> sys_chdir | |
| 4123 * tzset -> init_gettimeofday | |
| 4124 * abort -> dos_abort | |
| 4125 */ | |
| 4126 | |
| 4127 #ifdef chdir | |
| 4128 #undef chdir | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4129 extern int chdir (const char *); |
| 13179 | 4130 |
| 4131 int | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4132 sys_chdir (const char *path) |
| 13179 | 4133 { |
| 4134 int len = strlen (path); | |
| 4135 char *tmp = (char *)path; | |
| 4136 | |
| 4137 if (*tmp && tmp[1] == ':') | |
| 4138 { | |
| 4139 if (getdisk () != tolower (tmp[0]) - 'a') | |
| 4140 setdisk (tolower (tmp[0]) - 'a'); | |
| 4141 tmp += 2; /* strip drive: KFS 1995-07-06 */ | |
| 4142 len -= 2; | |
| 4143 } | |
| 45332 | 4144 |
| 13179 | 4145 if (len > 1 && (tmp[len - 1] == '/')) |
| 4146 { | |
| 4147 char *tmp1 = (char *) alloca (len + 1); | |
| 4148 strcpy (tmp1, tmp); | |
| 4149 tmp1[len - 1] = 0; | |
| 4150 tmp = tmp1; | |
| 4151 } | |
| 4152 return chdir (tmp); | |
| 4153 } | |
| 4154 #endif | |
| 4155 | |
| 4156 #ifdef tzset | |
| 4157 #undef tzset | |
| 4158 extern void tzset (void); | |
| 4159 | |
| 4160 void | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4161 init_gettimeofday (void) |
| 13179 | 4162 { |
| 4163 time_t ltm, gtm; | |
| 4164 struct tm *lstm; | |
| 4165 | |
| 4166 tzset (); | |
| 4167 ltm = gtm = time (NULL); | |
| 4168 ltm = mktime (lstm = localtime (<m)); | |
| 4169 gtm = mktime (gmtime (>m)); | |
| 4170 time_rec.tm_hour = 99; /* force gettimeofday to get date */ | |
| 4171 time_rec.tm_isdst = lstm->tm_isdst; | |
| 4172 dos_timezone_offset = time_rec.tm_gmtoff = (int)(gtm - ltm) / 60; | |
| 4173 } | |
| 4174 #endif | |
| 4175 | |
| 4176 #ifdef abort | |
| 4177 #undef abort | |
| 4178 void | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4179 dos_abort (char *file, int line) |
| 13179 | 4180 { |
| 4181 char buffer1[200], buffer2[400]; | |
| 4182 int i, j; | |
| 45332 | 4183 |
| 13179 | 4184 sprintf (buffer1, "<EMACS FATAL ERROR IN %s LINE %d>", file, line); |
| 4185 for (i = j = 0; buffer1[i]; i++) { | |
| 4186 buffer2[j++] = buffer1[i]; | |
| 4187 buffer2[j++] = 0x70; | |
| 4188 } | |
| 4189 dosmemput (buffer2, j, (int)ScreenPrimary); | |
| 4190 ScreenSetCursor (2, 0); | |
| 4191 abort (); | |
| 4192 } | |
|
13744
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4193 #else |
|
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4194 void |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4195 abort (void) |
|
13744
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4196 { |
|
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4197 dos_ttcooked (); |
|
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4198 ScreenSetCursor (10, 0); |
|
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4199 cputs ("\r\n\nEmacs aborted!\r\n"); |
|
20240
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
4200 #if __DJGPP__ == 2 && __DJGPP_MINOR__ < 2 |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
4201 if (screen_virtual_segment) |
|
963e9cda8f04
Support for Japanese display on DOS/V systems.
Eli Zaretskii <eliz@gnu.org>
parents:
20036
diff
changeset
|
4202 dosv_refresh_virtual_screen (2 * 10 * screen_size_X, 4 * screen_size_X); |
| 14999 | 4203 /* Generate traceback, so we could tell whodunit. */ |
| 4204 signal (SIGINT, SIG_DFL); | |
| 4205 __asm__ __volatile__ ("movb $0x1b,%al;call ___djgpp_hw_exception"); | |
|
24559
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
4206 #else /* __DJGPP_MINOR__ >= 2 */ |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
4207 raise (SIGABRT); |
|
7e59f6e590da
(struct kbd_translate): New struct, for key translation
Eli Zaretskii <eliz@gnu.org>
parents:
24001
diff
changeset
|
4208 #endif /* __DJGPP_MINOR__ >= 2 */ |
|
13744
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4209 exit (2); |
|
120c884de8a2
(check_timer): get rid of the DOS-specific menubar clock
Karl Heuer <kwzh@gnu.org>
parents:
13718
diff
changeset
|
4210 } |
| 13179 | 4211 #endif |
| 4212 | |
|
109162
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4213 void |
|
8efd6d04c47a
Convert function definitions in MS-DOS sources to ANSI C.
Eli Zaretskii <eliz@gnu.org>
parents:
109118
diff
changeset
|
4214 syms_of_msdos (void) |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
4215 { |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
4216 recent_doskeys = Fmake_vector (make_number (NUM_RECENT_DOSKEYS), Qnil); |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
4217 staticpro (&recent_doskeys); |
|
50225
39746533995d
Remove consolidated defines and code.
Kim F. Storm <storm@cua.dk>
parents:
49600
diff
changeset
|
4218 |
|
19334
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
4219 #ifndef HAVE_X_WINDOWS |
|
27019
3956e87adf2d
Changes for supporting mouse/modeline highlight and help echo features:
Eli Zaretskii <eliz@gnu.org>
parents:
26946
diff
changeset
|
4220 |
|
32271
4ff70fe0d99b
(top-level) <Qbackground_color, Qforeground_color>: Make
Eli Zaretskii <eliz@gnu.org>
parents:
30840
diff
changeset
|
4221 /* The following two are from xfns.c: */ |
|
110678
7e83565f8d0e
Use intern_c_string instead of intern.
Dan Nicolaescu <dann@ics.uci.edu>
parents:
109761
diff
changeset
|
4222 Qreverse = intern_c_string ("reverse"); |
|
28092
ce3bf4da00a9
(vga_installed): New function, code moved from
Eli Zaretskii <eliz@gnu.org>
parents:
28008
diff
changeset
|
4223 staticpro (&Qreverse); |
|
23825
085b163b6115
(Vdos_unsupported_char_glyph): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
23815
diff
changeset
|
4224 |
|
112364
42e22c4f06b7
Move all DEFVAR'd globals into a structure -- threading infrastructure
Tom Tromey <tromey@redhat.com>
parents:
112278
diff
changeset
|
4225 DEFVAR_LISP ("dos-unsupported-char-glyph", Vdos_unsupported_char_glyph, |
|
41940
63819c5d6049
Change doc-string comments to `new style' [w/`doc:' keyword].
Pavel Jan?k <Pavel@Janik.cz>
parents:
41406
diff
changeset
|
4226 doc: /* *Glyph to display instead of chars not supported by current codepage. |
|
99540
c5c8f07bc47c
* w32-fns.el (w32-shell-dos-semantics):
Juanma Barranquero <lekktu@gmail.com>
parents:
98030
diff
changeset
|
4227 This variable is used only by MS-DOS terminals. */); |
|
55662
4cea1f00f7bb
(syms_of_msdos): Initialize dos-unsupported-char-glyph with make_number.
Eli Zaretskii <eliz@gnu.org>
parents:
55650
diff
changeset
|
4228 Vdos_unsupported_char_glyph = make_number ('\177'); |
|
43357
c89a11a2baf6
(x_autoselect_window_p): New variable.
Eli Zaretskii <eliz@gnu.org>
parents:
43236
diff
changeset
|
4229 |
|
19334
c7cec07cb0e0
(syms_of_msdos): Define and bind x-bitmap-file-path and
Eli Zaretskii <eliz@gnu.org>
parents:
19295
diff
changeset
|
4230 #endif |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
4231 |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
4232 defsubr (&Srecent_doskeys); |
|
15186
242bddc25e5a
(syms_of_msdos): Fix typo.
Richard M. Stallman <rms@gnu.org>
parents:
15174
diff
changeset
|
4233 defsubr (&Smsdos_long_file_names); |
|
15219
a800d1a0f07e
(msdos_downcase_filename): New function to convert case in filenames.
Richard M. Stallman <rms@gnu.org>
parents:
15186
diff
changeset
|
4234 defsubr (&Smsdos_downcase_filename); |
|
26729
f5dded41adcc
Changes for automatic remapping of X colors on terminal frames:
Eli Zaretskii <eliz@gnu.org>
parents:
26088
diff
changeset
|
4235 defsubr (&Smsdos_remember_default_colors); |
|
30532
328993ad6017
(Fmsdos_set_mouse_buttons, syms_of_msdos): New functions.
Eli Zaretskii <eliz@gnu.org>
parents:
30529
diff
changeset
|
4236 defsubr (&Smsdos_set_mouse_buttons); |
|
13305
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
4237 } |
|
63a43c4b29b2
(IT_ring_bell): Use intdos, not write.
Richard M. Stallman <rms@gnu.org>
parents:
13274
diff
changeset
|
4238 |
| 5503 | 4239 #endif /* MSDOS */ |
| 52401 | 4240 |
