(Vw32_pass_lwindow_to_system):
(Vw32_pass_rwindow_to_system):
(Vw32_lwindow_modifier):
(Vw32_rwindow_modifier):
(Vw32_apps_modifier):
(Vw32_enable_num_lock):
(Vw32_enable_caps_lock):
(Vw32_scroll_lock_modifier): New variables.
(modifier_set): Return toggle state for Scroll Lock.
(w32_key_to_modifier): New function. Returns chosen modifier bit
for given key.
(w32_get_modifiers): Returns modifier flags for
non-keyboard input events.
(construct_console_modifiers): Renamed from construct_modifiers;
recognize Windows and Apps keys as modifiers.
(w32_get_key_modifiers): New function. Returns modifier flags for
keyboard input events.
(map_keypad_keys): Make non-static. Use second arg as extended
flag.
(w32_grabbed_keys): New variable.
(HOTKEY, HOTKEY_ID, HOTKEY_VK_CODE, HOTKEY_MODIFIERS): New macros.
(register_hot_keys):
(unregister_hot_keys):
(lookup_vk_code):
(w32_parse_hot_key):
(Fw32_register_hot_key):
(Fw32_unregister_hot_key):
(Fw32_registered_hot_keys):
(Fw32_reconstruct_hot_key): New functions to support hotkeys.
(post_character_message): New function.
(w32_msg_pump): Handle new messages for using hotkeys and changing
keyboard layout/language.
(w32_wnd_proc): Major rework of keyboard input handling:
optionally recognize Windows keys and Apps key as modifiers;
optionally treat NumLock, CapsLock and ScrollLock as function
keys; let system translate keystrokes to characters to avoid
system bugs relating to dead-key handling; preserve shift
distinction for control characters; forward keyboard
layout/language changes to lisp; detect and convert hot-key events
to normal keystrokes.
(syms_of_w32fns): Register new functions and variables.
(w32_last_error): New function for use in debugging.
(map_keypad_keys):
(Vw32_enable_caps_lock):
(Vw32_enable_num_lock):
(Vw32_pass_lwindow_to_system):
(Vw32_pass_rwindow_to_system):
(Vw32_lwindow_modifier):
(Vw32_rwindow_modifier):
(Vw32_apps_modifier):
(Vw32_scroll_lock_modifier):
(w32_key_to_modifier): Add externs.
(w32_kbd_mods_to_emacs): Recognize Windows keys, Apps key, and
Scroll Lock as potential modifiers; exclude numpad keys from
effect by CapsLock; act on Vw32_enable_caps_lock; remove obsolete
code.
(is_dead_key): Copy from w32fns.c.
(w32_kbd_patch_key): Comment attempt to improve handling of
dead-keys, and system bug relating to same on Windows NT. Work
around the bug by calling ToUnicode and then converting to the
correct codepage.
(map_virt_key): Removed obsolete variable.
(lispy_function_keys): Add extern.
(key_event): Major rework of keyboard input handling: optionally
recognize Windows keys and Apps key as modifiers; optionally treat
NumLock, CapsLock and ScrollLock as function keys; let system
translate keystrokes to characters to avoid system bugs relating
to dead-key handling; preserve shift distinction for control
characters. Remove some obsolete code.
composition char ID more strictly.
(Fcmpchar_component): Call cmpchar_component with NOERROR arg
zero.
(Fcmpchar_cmp_rule): If CHARACTER should be composed relatively,
return 255.
(Fcompose_string): Signal error if STR contains a rule-based
composition character.
varidity of multibyte form.
(update_charset_table): Check validity of BYTES. Don't set
bytes_by_char_head here.
(init_charset_once): Set bytes_by_char_head completely.
(CHECK_BYTE_COMBINING_FOR_INSERT): Call byte_combining_error.
(insert_from_string_1): Set *(GPT_ADDR) to 0 before calling
CHECK_BYTE_COMBINING_FOR_INSERT.
(insert_from_buffer_1): Likewise.
(adjust_after_replace): Check the posibility of inhibitted byte
combining correctly.
(replace_range): Before signaling an error for inhibitted byte
combining, recover the buffer in a safe state.
(del_range_2): Check the posibility of inhibitted byte combining
correctly.
(syms_of_w32select): DEFVAR_LISP it.
(Fw32_set_clipboard_data): Use Vnext_selection_coding_system if
non-nil. Always convert multibyte strings.
(Fw32_get_clipboard_data): Use Vnext_selection_coding_system if
non-nil. Always convert a string that includes non-ASCII characters.
combined_before_bytes and combined_after_bytes into account.
(count_combining_after): Handle the case that LENGTH is zero.
(adjust_after_replace): Record deletion at correct buffer
position. Handle the case that LEN is zero.
(replace_range): Record deletion at correct buffer position.
(del_range_2): Call adjust_makers_for_replace to adjust makers for
combined bytes.
coding->spec.ccl.valid_codes for CCL based coding system.
(code_convert_region): Set point to FROM before inserting the
result of pre-write-funciton. Preserve original point.
(code_convert_string): If coding->type is coding_type_ccl, do
conversion even if the length of conversion region is zero.
Add ENCODE_BIG5 macro from coding.c.
(w32_no_unicode_output): New variable.
(w32_codepage_for_charset, w32_use_unicode_for_codepage): New
functions.
(BUILD_WCHAR_T, BYTE1, BYTE2): New macros.
(dumpglyphs): Rewrite based on xterm.c equivalent.
(x_new_font): Use functionality provided in fontset.c.
(x_new_fontset): New function based on the one in xterm.c.
(syms_of_w32term): Add w32-no-unicode-output flag.
(unibyte_display_via_language_environment): New global variable.
(x_set_font): Add support for setting fontsets.
(Fx_create_frame): Add check_w32(). Initialize fontsets. Fix
font names to match xlfd-tight-regexp.
(w32_load_font): Rewrite based on x_load_font.
(x_to_w32_charset, w32_to_x_charset): Add character sets. Use
`iso8859-1' rather than `ansi'.
(w32_to_x_font): Remove `-' from font name. Remove the `-' off the
end. Move charset into `charset registry' field.
(enum_font_cb2): Check charsets match. Include width in font list.
(w32_list_fonts): Rewrite based on x_list_fonts.
Moved from w32term.c to have access to enumfont_t struct.
(Fx_list_fonts): w32 specific version eliminated. Include
`x-list-fonts.c'.
(w32_get_font_info, w32_query_font, w32_find_ccl_program): New
functions for fontset support - adapted from x_ equivalents.
(syms_of_w32fns): New lisp variables initialised. Function
pointers for fontset.c set up.
(allocate_face, copy_face, face_eql, load_font,
Fpixmap_spec_p, free_frame_faces, new_computed_face,
frame_update_line_height, merge_faces, compute_base_face,
Fset_face_attribute_internal): Use fontset support based on xfaces.c.
(mouse_preempted): New variable.
(dos_rawgetc): Don't generate mouse events if mouse is preempted.
(XMenuActivate): Preempt the mouse during menu-handling loop.
Release the current time slice while idling in the menu-handling
loop. Leave the loop only if the user pressed, then released the
same button. Discard all mouse events that are pending in the
event queue before exiting.
and $TEMP, since the former is always set in msdos.c.
(Fcall_process_region): When looking for a place to put the
temporary files, check $TMPDIR as well.
(adjust_markers_for_replace): Correctly adjust marker positions.
Don't record these adjustment because they were recorded already.
(combine_bytes): Don't adjust markers here.
make_string_from_bytes.
(Ffind_charset_region): Include `composition' in the returned list
if the region contains any composite characters.
(Ffind_charset_string): Include `composition' in the returned list
if the string contains any composite characters.
(find_charset_in_str): Handle CMPCHARP arg correctly.
(check_all_windows): New function for debugging tests.
(syms_of_window): Initialize it.
(Qwindow_configuration_p): New variable.
(Fwindow_configuration_frame): New function.
(syms_of_window): defsubr it.
(Fset_window_configuration): Return t if frame is live.
Use Qwindow_configuration_p.
alwasy returns 0 or -1.
(decode_coding_iso2022): Adjusted for the above change.
(encode_coding_iso2022): When encoding the last block, flush out
tailing garbage bytes.
(setup_coding_system): Delete unnecessary code.
(shrink_decoding_region): Check translation table. If ASCII
should be translated, give up shrinking.
(shrink_encoding_region): Likewise.
(SHRINK_CONVERSION_REGION_THRESHHOLD): New macro.
(SHRINK_CONVERSION_REGION): New macro.
(code_convert_region): Call SHRINK_CONVERSION_REGION. Delete text
properties here.
(code_convert_region): In the case of encoding, always calulate
correct character number.
(code_convert_string): Call SHRINK_CONVERSION_REGION.
(code_convert_region1): Don't delete text properties here.
(check_composing_code): Fix previous change. Now it
alwasy returns 0 or -1.
(decode_coding_iso2022): Adjusted for the above change.
(encode_coding_iso2022): When encoding the last block, flush out
tailing garbage bytes.
(setup_coding_system): Delete unnecessary code.
(shrink_decoding_region): Check translation table. If ASCII
should be translated, give up shrinking.
(shrink_encoding_region): Likewise.
(SHRINK_CONVERSION_REGION_THRESHHOLD): New macro.
(SHRINK_CONVERSION_REGION): New macro.
(code_convert_region): Call SHRINK_CONVERSION_REGION. Delete text
properties here.
(code_convert_region): In the case of encoding, always calulate
correct character number.
(code_convert_string): Call SHRINK_CONVERSION_REGION.
(code_convert_region1): Don't delete text properties here.
sequence doesn't end properly, return -1.
(DECODE_CHARACTER_ASCII): Update coding->composed_chars.
(DECODE_CHARACTER_DIMENSION1): Likewise.
(decode_coding_iso2022): Check validity of a composing sequence.
(code_convert_string): If the length of text to be converted is
shrunk to zero, don't perform code conversion.
(shrink_decoding_region): Fix previous change.
Set the buffer to a nonzero value before calling
strftime, and check to see whether strftime has set the buffer to zero.
This lets us distinguish between an empty buffer and an error.
I'm installing this patch by hand now; it will be superseded whenever
the glibc sources are propagated back to fsf.org.
(ccl_driver): If BUFFER-MAGNIFICATION of the CCL program is 0,
cause error if the program is going to output some bytes. When
outputing a string to notify an error, check the case that
DST_BYTES is zero.
user or the CCL program executed an invalid command, return
CODING_FINISH_INTERRUPT.
(code_convert_region): Pay attention to the converters return
value CODING_FINISH_NORMAL and CODING_FINISH_INTERRUPT.
position if it is FROM.
(adjust_markers_for_combining): New function.
(combine_bytes): Call adjust_markers_for_combining instead of
adjust_markers_for_replace.
(adjust_after_replace): Record deletion of combining after bytes
with the correct position. Don't add combining bytes to the args
given to adjust_point. Handle correctly the case that there are
both before and after combining bytes.
(replace_range): Likewise. Record the actual deletion after
recoding deletions of combining bytes.
(syms_of_win16select): DEFVAR_LISP it. No need to staticpro
Vselection_coding_system.
(Fw16_set_clipboard_data): Always convert multibyte strings. Use
Vnext_selection_coding_system if non-nil.
(Fw16_get_clipboard_data): Always convert a string that includes
non-ASCII characters. Use Vnext_selection_coding_system if
non-nil.
Vnonacii_translation_table will convert a 7-bit charcater.
(multibyte_char_to_unibyte): Handle the case that
Vnonacii_translation_table converts a multibyte charcater to a
unibyte charcter of less than 128.
(init_charset_once): Initialize nonascii_insert_offset and
Vnonacii_translation_table.
using negation, not subtraction; this makes a difference with
IEEE floating point arithmetic (and also if integer arithmetic
is ones' complement or signed-magnitude!).
LC_TIME to "C" (reverting the 1998-08-07 change), and also
resets LC_MESSAGES to "C".
(x_term_init): Use it to fix up the locale after setlocale
(LC_ALL, "").
bind input-method-exit-on-first-char and input-method-use-echo-area
to t.
(read_char): If PREV_EVENT is non-nil, don't run the input method.
(read_key_sequence): Do not bind input-method-function.
(read_char): [All these changes are in the input method code.]
Process and clear before_command_restore_flag before the input method.
Save and restore ok_to_echo_at_next_pause and
current_kboard->echo_after_prompt.
Save, copy and empty this_command_keys, if it is not empty.
Clear the echo area before the input method.
Then in all cases restore this_command_keys, and reenable echoing
if it was enabled before.
(selection_data_to_lisp_data): If Vnext_selection_coding_system is
non-nil, use it.
(lisp_data_to_selection_data): Likewise.
(syms_of_xselect): Declare next-selection-coding-system as a Lisp
variable.
(LIB_GCC): Unconditional definition deleted.
[ELF] (LD_SWITCH_SYSTEM, START_FILES, UNEXEC, LIB_STANDARD, LIB_GCC):
New alternative definitions.
[! ELF] (START_FILES, LIB_GCC): New alternative definitions.
(real_this_command): New variable, but not a Lisp variable;
updated like Vthis_command, but never altered by Lisp programs.
(command_loop_1): Use real_this_command to set Vreal_last_command.
(read_char): When input method returns no chars, call cancel_echoing.
Restore the previous echo area message and this_command_keys, too.
(Vinput_method_previous_message): New variable.
(syms_of_keyboard): Set up lisp variable.
(Qinput_method_exit_on_first_char, Qinput_method_use_echo_area): New variables.
(syms_of_keyboard): Initialize them.
(Fread_key_sequence): New arg COMMAND_LOOP.
Bind those variables.
(Qprint_escape_nonascii): New variables.
(syms_of_print): Initialize them and set up Lisp variable.
(PRINTPREPARE): Bind print-escape-multibyte to t if appropriate.
Also bind print-escape-nonascii if appropriate.
(print): Test print_escape_multibyte and print_escape_nonascii,
rather than enable-multibyte-characters.
(fast_find_position): Handle case where position is before
an invisible character, thus not actually listed in charstarts.
(x_make_frame_visible): Use XGetGeometry to see if
position has been changed by the window manager. Use
FRAME_OUTER_WINDOW.
Rename Vclipboard_coding_system to Vselection_coding_system.
(Fw16_set_clipboard_data): Don't count trailing zero in the string
for the purposes of conversion.
(coding_category_name): Include "coding-category-ccl".
(detect_coding_ccl): New function.
(setup_coding_system): Setup coding->spec.ccl.valid_codes from the
coding system priority `valid-codes' for CCL based coding systesm.
(detect_coding_mask): Check also a CCL based coding system.
(Fupdate_coding_systems_internal): Renamed from
Fupdate_iso_coding_systems.
(syms_of_coding): Change property char-table-extra-slot of
translation-table to 1. Initialize and static pro Qvalid_codes.
(CODING_CATEGORY_IDX_BIG5, CODING_CATEGORY_IDX_RAW_TEXT,
CODING_CATEGORY_IDX_BINARY, CODING_CATEGORY_IDX_MAX): Increased by
one.
(CODING_CATEGORY_MASK_CCL): New macro.
(CODING_CATEGORY_MASK_ANY): Include CODING_CATEGORY_MASK_CCL.
(syms_of_keyboard): Init and staticpro it.
(read_key_sequence): Bind input-method-function,
and set it to nil after reading the first event.
(raw_keybuf, raw_keybuf_count): New variables, to record
raw input events as they are read with read_char.
(GROW_RAW_KEYBUF): New macro.
(Fthis_single_command_raw_keys): New function.
(syms_of_keyboard): defsubr it.
(read_char): Call the input method if appropriate.
Change logic for distinguishing rereads from new events;
use local var `reread'. Take events from
Vunread_input_method_events and Vunread_post_input_method_events.
(Vunread_input_method_events, Vunread_post_input_method_events)
(Vinput_method_function): New variable.
(syms_of_keyboard): Set up Lisp vars.
(command_loop_1): Check Vunread_input_method_events and
Vunread_post_input_method_events along with Vunread_command_events.
with two arguments.
(Fwrite_region): If buffer-file-coding-system is set locally, use
the coding system whithout checking file-coding-system-alist.
(syms_of_fileio): Docstring of set-auto-coding-function adjusted
for the change of argument number.
(set_clipboard_data, set_clipboard_data): New parameter Raw
determines whether CRLF <-> NL translation needs to be done. All
callers changed.
(Fw16_set_clipboard_data): Encode the text using
Vclipboard_coding_system, if necessary.
(Fw16_get_clipboard_data): Decode the text using
Vclipboard_coding_system, if necessary.
(syms_of_win16select): DEFVAR Vclipboard_coding_system and
staticpro it.
`w32-get-true-file-attributes' to t while calling stat.
(Finsert_file_contents) [WINDOWSNT]: Likewise.
(Fwrite_region): Don't try seeking to end of FILENAME for
appending if not a regular file.
(syms_of_minibuf): Set up Lisp variable.
(Fminibuffer_complete_word): Test it, instead of checking
specifically for Qread_file_name_internal.
(Fcompleting_read): Likewise.
(make_hdr) [MSDOS]: If a_name is a coff-go32-exe executable with a
prepended stub, compute coff_offset.
(make_hdr, copy_sym) [COFF]: Use coff_offset when seeking into temacs.
(Vclipboard_coding_system): New variable.
(syms_of_w32select): DEF_VAR it.
(Fw32_set_clipboard_data): Encode string using
Vclipboard_coding_system if necessary.
(Fw32_get_clipboard_data): Decode clipboard contents using
Vclipboard_coding_system if necessary.
line endings. Always update dst_bytes to number of bytes actually copied.
(decode_eol): Fix value of coding->produced when decoding Unix
line endings (in case this function is ever used for that).
(Finsert_file_contents): If the current buffer is empty, decide
the coding system after the file is inserted in the buffer. If
not, insert the head and tail of a file in a temporary buffer and
call set-auto-coding-function.
(e_write): If there are carryover bytes in encoding because of
incomplete multibyte form, write them out as is.
make last_point invalid instead of setting it normally.
(display_text_line): If cursor's in the frame's echo area,
don't set this_line_endpos.
(redisplay_window): Use Fwindow_end to find lower scroll margin.
(init_kboard, command_loop_1): Init Vlast_prefix_arg.
(Fcommand_execute): Set Vlast_prefix_arg to prefix arg used.
(command_loop_1): Set Vreal_last_command with Vlast_command.
(init_kboard): Init Vreal_last_command field.
(syms_of_keyboard): Set up Lisp var real-last-command.
(lispy_function_keys): Add kanji...eisu-toggle.
(re_match_2, re_search_2): Adjust startpos or pos by 1
only if acting on a buffer.
nil for re_match_object means a buffer.
(re_match_2_internal <notwordbeg>): Assume POS1 is positive.
that ends a comment, when moving forward.
(Fbackward_prefix_chars): Return immediately if point is at BEGV.
(prev_char_comend_first): New function.
(back_comment): Use that. Carefully update syntax table position
for each character that is fetched.
(Fforward_comment): Likewise.
(scan_lists): Likewise.
(prev_char_comstart_first): New function.
(sys_access): Provide our own implementation which recognizes D_OK.
(is_exec): New function.
(stat): Use it.
(init_environment): Set TMPDIR to an existing directory.
Abort if none of the usual places is available.
(sys_rename): On Windows 95, choose a temp name that
includes the original file's base name and use an explicit loop
rather than calling mktemp. Only attempt to unlink the newname if
the rename fails, rather than second-guessing whether the old and
new names refer to the same file.
for a string.
(interval_start_pos): New function.
(find_interval): Handle string positions starting at 0.
(adjust_intervals_for_insertion): Likewise.
(adjust_intervals_for_deletion): Likewise.
(compare_string_intervals): Likewise.
(graft_intervals_into_buffer): Set `position' in reproduce_tree value.
(copy_intervals): Init `position' to 0.
(prev_saved_doc_string*): New variables.
(Fload): Initalize prev_saved_doc_string.
(read1): Copy saved_doc_string to prev_saved_doc_string
before storing a new string in saved_doc_string.
(read_list): Look in prev_saved_doc_string as well as
in saved_doc_string.
(read1): Swap saved_doc_string_length and
prev_saved_doc_string_length.
(read_list): Negate docstring position if negative before checking
against saved_doc_string_length et al.
(read_vector): Add bytecodeflag parameter, which is
nonzero when reading a bytecode object. If
`load-force-doc-strings' is t when reading a lazily-loaded
bytecode vector, the loaded docstring must be treated as unibyte
and passed to Fread to obtain the actual bytecode string and
constants vector.
(read1): Add extra parameter to read_vector calls.
(read1): Enable saving of doc strings on WINDOWSNT.
(read_list): Call get_doc_string instead of read_doc_string, when
forced to load doc strings.
position for string when comparing with LIMIT.
(property_change_between_p): Likewise.
(Fnext_single_property_change, Fprevious_property_change): Likewise.
(Fprevious_single_property_change): Likewise.
(detect_coding_mask): Skip ASCII codes at the head according to
ascii_skip_code.
(coding_priorities): New variable.
(Fset_coding_priority_internal): New function.
(detect_coding): Call set_coding_mask with coding_priorities as
arg CODING.
(init_coding_once): Initialize ascii_skip_code.
(syms_of_coding): Declare set-coding-priority-internal as a Lisp
function.
(frame_buffer_list, set_frame_buffer_list): Likewise.
(make_frame): Pass new arg to Fother_buffer.
(make_frame_visible_1): New function.
(Fmake_frame_visible): Use that.
translate/translation respectively throughtout the file.
(encode_coding_iso2022): Fix bug in encoding a text ending by a
composite character.
(check_composing_code): If we are decoding the last block of data,
return 0 even if the source doesn't end by an escape sequence
which terminates the current composing sequence.
(decode_coding_iso2022): Decode correctly even if the source
doesn't end by an escape sequence which terminates the current
composing sequence.
to read a character byte by byte, if its byte sequence
does not really match the character code.
(unreadchar): Handle readchar_backlog.
(readevalloop, Fread): Initialize readchar_backlog to -1.
(init_crit): Initialize it.
(delete_crit): Cleanup on exit.
(signal_quit): New function. Signal any threads that are blocked
on a "system" call (provided they have been specially written to
check for this), so the call can fail with EINTR as on Unix.
(test_completion): In obarray, try both unibyte and multibyte strings.
(read_minibuf): Convert unibyte prompt to multi if minibuffer is multi.
(Fdisplay_completion_list): Convert unibyte to strings to multibyte
to conform to the buffer.
unibyte, for initializing the process coding systems.
Instead, use the normal multibyte code, but check
BUFFER's value and the default value of enable-multibyte-characters.
(Fopen_network_stream): Likewise.
prefix /: is present, and reinsert after name has been expanded.
Only recognize drive specifier at beginning of name.
(Fexpand_file_name): Don't strip trailing slash if newdir is just /.
platforms. Avoid calling fdopen only for WINDOWSNT, use fdopen
for the the MSDOS version.
(read1): Avoid recording doc strings positions only for WINDOWSNT,
not for MSDOS.
(${lispsource}TAGS): Target deleted.
(tags): Depend on TAGS-LISP.
(TAGS): Generate the TAGS file in the build dir.
(lisptagsfiles): Variable deleted.
(shortnamesdir, cppdir): Vars deleted.
(shortnames): Target deleted.
(temacs): Don't use $(SHORT).
(SHORT): Var deleted.
(Ftry_completion): Use it to return multibyte string
if and only if the completion table has a multibyte string.
(Fdisplay_completion_list):
Convert string to unibyte before displaying it, if default is unibyte.
Store inherit_coding_system_flag as a Lisp_Object.
(Fopen_network_stream): Likewise.
(Fprocess_inherit_coding_system_flag): Access it as Lisp_Object.
(read_process_output): Likewise.
STARTP. New variable scroll_margin_bytepos, to parallel
scroll_margin_pos. Fix arguments of pos_tab_offset to agree with
the first argument of compute_motion.
(x_set_mouse_color, x_set_cursor_color): Don't call unload_color
if same pixel is used in another slot in the frame.
(x_set_foreground_color): Call unload_color on the old color.
(x_set_background_color, x_set_mouse_color): Likewise.
(x_set_cursor_color, x_set_border_pixel): Likewise.
if preceded by CR, since that confuses eol decoding.
(code_convert_region): When conversion fails with
CODING_FINISH_INSUFFICIENT_SRC, was overwriting src with garbage
from dst instead of copying from src to dst.
conjunction with stat to make handling of file timestamps
consistent.
(convert_from_time_t): Fix calculation of low-order bits.
(sys_unlink): Allow read-only files to be unlinked as on Unix.
right, as is conventional on MS-Windows.
(w32_wnd_proc): Add code to draw popup menu titles.
Ensure mouse capture is released before running popup menu.
(read_from_string_index): Now counts characters.
(readchar, unreadchar, Fread_from_string): Changed accordingly.
(readchar): Read a multibyte char all at once
from a buffer, marker or string.
(unreadchar): Unread a multibyte char all at once.
(read1): Properly handle non-escaped multibyte chars.
They force a string to be multibyte.
When reading direct from a file, any multibyte sequence means
a multibyte string.
Insist on MAX_LENGTH_OF_MULTI_BYTE_FORM bytes when checking
for read_buffer full; this way need not check specially for multibyte.
(main): Move the --unibyte code below
the most basic initializations.
Clear out *Messages* at that point.
(main): When handling --unibyte, mark all existing
buffers as unibyte; but don't handle it when dumping.
(child_setup) [MSDOS]: Call run_msdos_command here.
(child_setup) [DOS_NT]: Get past drive letter in pwd. Don't call
close_load_descs, since we are not in a vfork.
Use it to bind load_convert_to_unibyte.
(Feval_buffer): New arg UNIBYTE. Pass it to readevalloop.
(readevalloop_1): New unwind-protect subroutine.
(load_convert_to_unibyte): New variable.
(syms_of_lread): Set up Lisp var.
(read1): If load_convert_to_unibyte, convert strings to unibyte.
Fprocess_inherit_coding_system_flag): New functions.
(syms_of_process): Defsubr them.
(Fstart_process, Fopen_network_stream): Initialize inherit_coding_system_flag.
(read_process_output): If the process buffer isn't dead, call
after-insert-file-set-buffer-file-coding-system.
(dumpglyphs): Update from xterm.c.
(w32_ring_bell): Flash window, don't just reset its state.
(dumprectangle, show_mouse_face, x_draw_single_glyph): Use new
args to dumpglyphs.
(my_set_foreground_window): New function.
(w32_condemn_scroll_bars): Mark all as condemned scroll bars.
(w32_redeem_scroll_bar): Look through all scroll bars.
(w32_judge_scroll_bars): Don't clear out condemned list.
(w32_read_socket): Clip window after frame has been restored.
(x_focus_on_frame, x_raise_frame): Use my_set_foreground_window.
(syms_of_w32term): Define Vw32_recognize_altgr.
making size comparison.
(sys_spawnve): Update comments.
(sys_select): Ignore children dead children with pending input.
Delay sending SIGCHLD until all output has been read.
(sys_kill): Sleep to allow focus change events to propagate.
Use TerminateProcess on Win95.
(int_from_hex, enum_locale_fn, Fw32_get_valid_locale_ids):
New functions.
(Vw32_valid_locale_ids): New variable.
(Fw32_set_current_locale): Send message to input thread.
(syms_of_ntproc): defsubr Sw32_get_valid_locale_ids.
(w32_kbd_mods_to_emacs): Obey Vw32_recognize_altgr.
Add more keys for Vw32_capslock_is_shiftlock.
(w32_kbd_patch_key): Obey Vw32_recognize_altgr.
(map_virt_key): Brazilian keyboards use 0xc1 for /(?) key.
Report normal EOF when read fails if nothing in buffer.
Only read more if more remaining.
(check_windows_init_file): New function.
(term_ntproc): Invoke check_windows_init_file.
(get_bss_info_from_map_file): Only define if SEPARATE_BSS_SECTION.
(get_section_info): Use my_begbss_static, my_endbss_static to
determine bounds of bss.
(w32_fatal_reload_error): New function.
(read_in_bss, map_in_heap): Invoke w32_fatal_reload_error upon error.
(fs_load_font): Call a function pointed by find_ccl_program_func
instead of finding CCL program to encode a character by itself.
(Fquery_fontset): New optional 2nd arg REGEXPP. Callers changed.
(Qccl_program_idx, Qunification_table, Qunification_table_id): New
variables.
(syms_of_ccl): Initialize and staticpro them.
(CCL_ReadMultibyteChar2): Macro name changed from
CCL_ReadMultibyteCharacter.
(CCL_WriteMultibyteChar2): Macro name changed from
CCL_WriteMultibyteChar2.
(CCL_
(MAX_TABLE_SET_LEVEL): New macro.
(tr_stack): New type.
(translate_stack, translate_stack_pointer): New variables.
(PUSH_TRANSLATE_STACK, POP_TRANSLATE_STACK): New macros.
(ccl_driver): Adjusted for the above changes.
(resolve_symbol_ccl_program): New function.
(Fccl_execute): The arg CCL-PROGRAM can be a symbol of CCL
program. If CCL-PRGRAM is a vector, convert symbols in it to ID
numbers by resolve_symbol_ccl_program.
(Fccl_execute_on_string): Likewise.
(Fregister_ccl_program): If the arg CCL-PRGRAM is a vector,
convert symbols in it to ID numbers by resolve_symbol_ccl_program.
(SYNTAX_TABLE_BYTE_TO_CHAR): Handle the offset properly
both before and after conversion.
(UPDATE_SYNTAX_TABLE_FORWARD): Arg renamed to charpos.
(UPDATE_SYNTAX_TABLE_BACKWARD, UPDATE_SYNTAX_TABLE): Likewise.
any) following a multibyte character in *ACTUAL_LEN.
(Fcharset_after): New function.
(syms_of_charset): Defsubr it.
(multibyte_form_length): Modified to be consistent with
string_to_non_ascii_char.
(regex_compile): Special handling for range \177-\377.
(regex_compile): Cast args to TRANSLATE to unsigned char.
(re_search_2): Fix forward scan handling multibyte.
Recognize that nonascii characters are not in the fastmap.
Handle fetching multibyte characters for backward scan,
(re_match_2_internal): Handle multibyte and translation
in exactn and anychar.
(bcmp_translate): Handle multibyte chars for translation.
(TRANSLATE): Don't cast to unsigned char.
(PATFETCH): Use RE_TRANSLATE to translate.
(adjust_after_replace): Arguments changed. Call
adjust_markers_for_replace if this function is called after
replacement.
(adjust_after_insert): New function.
at the head and tail of conversion region correctly when adjusting
position keepers. Call adjust_after_insert to record undo info
and adjust markers when we don't have to change byte sequence of
a buffer.
(syms_of_insdel): Set up Lisp var.
(CHECK_MARKERS): New macro. Use it everywhere
instead of calling check_markers directly.
It tests check_markers_debug_flag.
don't mark a marker just cause it is in this list.
(Fgarbage_collect): Discard from all undo-lists
all elements that adjust markers that were not marked.
(make_string_from_bytes): New function.
(compact_strings): Get byte size from size, if size_byte < 0.
(Fmake_string): Use make_uninit_string for single-byte char.
(make_unibyte_string): Mark string as unibyte.
(make_uninit_string): Likewise.
(make_string): Likewise, if size == size in bytes.
(make_pure_string): New arg MULTIBYTE.
(Fpurecopy): Pass new arg to make_pure_string.
has moved to keyboard.c.
(menu_item_equiv_key, menu_item_enabled_p_1, menu_item_enabled_p):
Functions deleted; code moved to parse_menu_item in keyboard.c.
(single_keymap_panes): Large part of code moved to single_menu_item.
(single_menu_item): New function that uses parse_menu_item.
(Qmenu_alias): Variable deleted.
(QCtoggle, QCradio): New variables.
(syms_of_xmenu): Change initializations of variables.
(parse_menu_item): New function.
(menu_item_eval_property_1, menu_item_eval_property) New suroutines.
(menu_bar_one_keymap): Moved some code to menu_bar_item.
(menu_bar_item): Rewritten to use parse_menu_item.
(menu_bar_item_1): Function deleted.
(QCenable, QCvisible, QChelp, QCfilter, QCbutton, QCtoggle, QCradio):
(Qmenu_alias): New variables.
(syms_of_keyboard): Initialize them, and item_properties.
(adjust_before_replace, adjust_after_replace, replace_range):
(del_range_2): Call record_delete the new way.
Use make_buffer_string_both to make the string to pass.
(adjust_markers_for_delete): Delete unused local coming_gap_size.
(adjust_markers_for_record_delete): New function.
(insert_1_both, insert_from_string_1, insert_from_buffer_1)
(adjust_after_replace, replace_range):
Use adjust_markers_for_record_delete.
the uptime, assume the lock is from this system boot.
(get_boot_time): New function.
(lock_file_1): Include boot time in the lock text.
(current_lock_owner): Parse and compare the boot time.
(scan_sexps_forward): Make INC_FROM do UPDATE_SYNTAX_TABLE_FORWARD.
Delete the explicit calls to UPDATE_SYNTAX_TABLE_FORWARD.
Also set prev_from_syntax (new local var). Test that in the loop,
instead of fetching syntax of the previous char.
(combine_bytes): Use the macro ADJUST_CHAR_POS.
(adjust_after_replace): New arg REPLACE. If it is zero, give LEN
as the arg LENGTH to offset_intervals.
(del_range_2): Give correct args to count_combining_before and
combine_bytes. Adjust the gap position after record_delete if
necessary. Give character position to adjust_overlays_for_delete.
(adjust_after_replace, replace_range):
Account for combining bytes in args to record_insert.
(del_range_2): Make undo records for combining bytes.
Put second call to move_gap_both before setting beg_unchanged.
(set_internal, default_value, Fset_default, Fmake_local_variable)
(Fmake_variable_buffer_local, Fkill_local_variable):
Handle new data structure for struct Lisp_Buffer_Local_Value.
(Fmake_variable_frame_local): New function.
adjust_overlays_for_delete.
(adjust_after_replace): Delete args COMBINED_BEFORE_BYTES and
COMBINED_AFTER_BYTES. This makes the newly generated text
following GPT_ADDR a buffer contents.
and handling post-read-conversion here, they are done in
code_convert_region. Even if a file is read by no-conversion,
call adjust_after_replace to adjust positions.
(insert_1_both, insert_from_string_1, insert_from_buffer_1):
Simplify greatly by using combine_bytes near the end
to handle all aspects of combining except for undo-recording.
This means most of the code deals with the text as if there were
no combining.
(replace_range): Likewise. Also handle unibyte-multibyte conversion
as in insert_from_string_1.
(del_range_2): Handle combining of character before the deletion
with strays after the deletion.
(adjust_markers_for_delete): Delete debugging code for Z == Z_BYTE.
(adjust_markers_for_insert): Move Z == Z_BYTE debugging code
to before we relocate the marker.
the combined_after_bytes. Use DEC than INC when leaving
a marker before the insertion.
(count_combining_before): Return number of bytes from start
of insertion that will combine.
(insert_1_both): Compensate for change in count_combining_before.
Delete intervals for the combined_after_bytes.
Compensate for that when updating other intervals.
(insert_from_buffer_1, replace_range): Likewise.
(adjust_after_replace): Likewise.
(insert_from_string_1): Likewise. Also handle intervals
for inserting just part of string.
New args COMBINED_AFTER_BYTES, COMBINED_BEFORE_BYTES. Calls changed.
(insert_1): Call insert_1_both.
(count_combining_before): New function.
(count_combining_after): New function.
(insert_1_both, insert_from_string_1): Handle bytes that combine
with chars adjacent to the inserted text.
(insert_from_buffer_1, replace_range): Likewise.
(adjust_after_replace): New args COMBINED_BEFORE_BYTES, COMBINED_AFTER_BYTES.
(ENCODE_FILE): This macro is moved to coding.h.
(Vdefault_file_name_coding_system): Extern it.
(Fdirectory_files): Use DECODE_FILE.
(file_name_completion): Likewise.
(Vdefault_file_name_coding_system): New variable.
(syms_of_fileio): Defsubr it.
(Ffile_symlink_p): Use DECODE_FILE.
(Ffile_name_directory): Use size_byte member of XSTRING (filename).
(Ffile_name_as_directory): Likewise.
(Fdirectory_file_name): Likewise.
(Fsubstitute_in_file_name): Likewise.
(expand_and_dir_to_file): Likewise.
(Fdo_auto_save): Likewise.
(Fread_file_name): Likewise.
(Fstring_make_multibyte, Fstring_make_unibyte): New function decl.
(Fstring_as_multibyte, Fstring_as_unibyte): New function decl.
(list2, list3, list4, list5): New function decl.
(Fwrite_region): Add an argument.
(compare_window_configurations): New function decl.
moved to charset.h.
(copy_text): Don't convert codes in the range 0200..0237 to
multibyte characters. For codes in the range 0240..0377, use
unibyte_char_to_multibyte.
(count_size_as_multibyte): Likewise.
(adjust_before_replace): Comment fixed.
unibyte_char_to_multibyte if an argument is character code.
(Finsert_char): Use unibyte_char_to_multibyte.
(string1): Cast ARGS to `char **' to avoid compiler warning.
moved to charset.h.
(unibyte_char_to_multibyte): Always return a valid character.
(Funibyte_char_to_multibyte): New function.
(syms_of_charset): Defsubr it. Doc-string of
nonascii-insert-offset is modified.
is non-null before calling note_mouse_highlight.
(x_destroy_window): If f equals mouse_face_mouse_frame,
clear that, and clear mouse_face_deferred_gc too.
(UPDATE_SYNTAX_TABLE_FORWARD, UPDATE_SYNTAX_TABLE_BACKWARD): Likewise.
(SYNTAX_TABLE_BYTE_TO_CHAR): If parse_sexp_lookup_properties is 0,
return 0 right away.
(SETUP_SYNTAX_TABLE): Add if (1) ... else.
version that returns a sigset_t.
(sigpause) [POSIX_SIGNALS]: Unconditionally define in terms of
sigsuspend. Don't redefine SIGEMPTYMASK.
(sys_sigpause): Don't declare.
(temp_mask): Don't declare.
(current_column_1): Don't follow a display table for a heading
byte of a multibyte character. Use the macro
MULTIBYTE_BYTES_WIDTH.
(Fmove_to_column): Likewise.
(compute_motion): Likewise. Handling of wide-column character
fixed.
(ENCODE_SINGLE_SHIFT_2, ENCODE_SINGLE_SHIFT_3,
encode_coding_iso2022, decode_coding_sjis_big5,
encode_coding_sjis_big5, decode_eol, encode_eol, decode_coding,
encode_coding): Likewise.
(shrink_decoding_region, shrink_encoding_region): Do not skip
non-ASCII code in any cases. Bug fix for getting starting address
from BEG.
(code_convert_region): Sync character positions correctly by
paying attention to coding->fake_multibyte.
(code_convert_string): Set number of character and bytes just
processed in members of CODING.
(code_convert_string): Adjusted for the change of
code_convert_region.
(code_convert_region1): Likewise.
balance_possible_root_interval in case an interval doesn't have a
right child, because otherwise the interval tree might degenerate into
a list.
(split_interval_left): Ditto if an interval hasn't a left child.
(Fforward_comment): Always use both FROM and FROM_BYTE to set point.
Use dec_bytepos not DEC_POS.
(scan_lists): Handle unibyte buffers when decrementing temp_pos.
(INC_FROM): Use INC_BOTH.
(inc_bytepos, dec_bytepos): In unibyte mode, just increment bytepos.
(boyer_moore): New arg CHARSET_BASE says which chars
to use the translate tables for.
(search_buffer): Properly test which chars participate in translation.
(TRANSLATE): New arg OUT. Handle non-integer in TRT.
All calls changed.
(CONSIDER, both definitions): Call it.
(buf_charpos_to_bytepos, buf_bytepos_to_charpos): Likewise.
(byte_debug_flag): New variable.
(syms_of_marker): Set up Lisp variable.
(search_buffer): For non-regexp, use one of those subroutines.
Args TRT and INVERSE_TRT are now Lisp_Object. Callers changed.
(compile_pattern_1): Arg TRANSLATE is now Lisp_Object. Calls changed.
(compile_pattern): Arg TRANSLATE is now Lisp_Object. Calls changed.
Renamed from Fdescribe_bindings. New arg NOMENU.
(syms_of_keymap): Corresponding changes.
(describe_buffer_bindings): Get NOMENU out of the arg list.
Pass it along to describe_map_tree.
Improve text of `alternate_heading'.
STRING.
(trivial_regexp_p): Initialize LEN to byte size of REGEXP.
(search_buffer): Give re_search_2 STARTPOS, RANGE and STOP by
counting them by bytes.
Qccl_translation_table, Qccl_translation_table_id): New variables.
append new symbols. Qccl_translation_table and
Qccl_translation_table_id.
(CCL_Call): Fix the comment.
(CCL_ReadMultibyteCharacter, CCL_WriteMultibyteCharacter,
CCL_UnifyCharacter, CCL_UnifyCharacterConstTbl,
CCL_IterateMultipleMap, CCL_TranslateMultipleMap): New macros for
CCL Commands.
(EXCMD): New macro.
(ccl_driver): New case lable `CCL_Extention'.
(setup_ccl_program): Initialize the member `private_state' of CCL.
(Fregister_ccl_program): Delete unused variable IDX.
(Fregister_ccl_translation_table): New function.
(syms_of_ccl): Intern and staticpro Qccl_program,
Qccl_translation_table, and Qccl_translation_table_id. Declare
`ccl-translation-table-vector' as a Lisp variable. Declare
register-ccl-translation-table as a Lisp function.
(Vcharacter_unification_table_vector): New variable.
(syms_of_charset): Declare it as a Lisp symbol. Declare a Lisp
variable min-composite-char.
(unify_char): Delete unnecessary codes.
(MAX_CHAR_COMPOSITION): New macro.
(CHAR_CHARSET): Check more strictly.
(CODING_FLAG_ISO_DESIGNATION): New macro.
(Vcharacter_unification_table_vector): Extern it.
(UNIFICATION_ID_TABLE): New macro.
(coding_category_table): This variable deleted.
(Vcoding_category_table): New variable.
(coding_category_name): Add "coding-category-iso-7-tight".
(detect_coding_iso2022): Check the mask
CODING_FLAG_ISO_DESIGNATION in CODING->FLAGS. Check a new coding
category coding-category-iso-7-tight.
(DECODE_DESIGNATION): Decode only such designations that CODING
can handle.
(check_composing_code): New function.
(decode_coding_iso2022): Decode only such characters that CODING
can handle.
(encode_coding_iso2022): Before and after encoding composite
characters, reset designation and invocation status.
(detect_coding_sjis): Delete unnecessary check.
(detect_coding_big5): Likewise.
(encode_designation_at_bol): Check the validity of requested
designation register.
(setup_coding_system): Set requested designation registers for
non-supported charsets to
CODING_SPEC_ISO_NO_REQUESTED_DESIGNATION. Set mask
CODING_FLAG_ISO_DESIGNATION in CODING->FLAGS. Code tuned for
no-conversion and undecided.
(detect_coding): Adjusted for the new variable
Vcoding_category_table.
(syms_of_coding): Initialize Vcoding_category_table and staticpro
it. Register select-safe-coding-system as a Lisp variable.
(DECODE_CHARACTER_ASCII): Update coding->produced_char;
(DECODE_CHARACTER_DIMENSION1): Likewise.
(Qraw_text, Qcoding_category): New variables.
(syms_of_coding): Intern and staticpro them.
(coding_system_table): New variable.
(CHARSET_OK, SHIFT_OUT_OK): New macros.
(detect_coding_iso2022): Detection algorithm improved.
(decode_coding_iso2022): Arg CONSUMED deleted, and the meaning of
return value changed. Update members produced, produced_char,
consumed, consumed_char of the struct *coding. Pay attention to
CODING_MODE_INHIBIT_INCONSISTENT_EOL.
(encode_coding_iso2022): Likewise.
(decode_coding_sjis_big5, encode_coding_sjis_big5): Likewise.
(decode_eol, encode_eol): Likewise.
(ENCODE_ISO_CHARACTER): Update coding->consumed_char.
(DECODE_SJIS_BIG5_CHARACTER): Update coding->produced_char.
(ENCODE_SJIS_BIG5_CHARACTER): Update coding->consumed_char.
(detect_coding(detect_coding(detect_ITIES and SKIP.
(detect_coding): Adjusted for the change of detect_coding_mask.
Update coding->heading_ascii.
(detect_eol_type): New arg SKIP.
(detect_eol): Adjusted for the change of detect_eol_type.
(ccl_codign_driver): New function.
(decode_coding): Arg CONSUMED deleted, and the meaning of return
value changed. Update members produced, produced_char, consumed,
consumed_char of the struct *coding.
(encode_coding): Likewise.
(shrink_decoding_region, shrink_encoding_region): New function.
(code_convert_region, code_convert_string): Completely rewritten.
(detect_coding_sy(detect_coding_sy(detect_coding_sy(detect_coding_sy(detect_codiT.
(Fdetect_coding_string): New function.
(Fdecode_coding_region, Fencode_coding_region): Adjusted for the
change of code_convert_region.
(Fdecode_coding_string, Fencode_coding_string): Adjusted for the
change of code_convert_string.
(Fupdate_iso_coding_systems): New function.
(init_coding_once): Initialize coding_system_table.
(struct iso2022_spec): New member.
last_invalid_designation_register.
(struct coding_system): New member inhibit_inconsistent_eol_type.
(CODING_CATEGORY_IDX_ISO_7_TIGHT,
CODING_CATEGORY_MASK_ISO_7_TIGHT): New macros.
(CODING_CATEGORY_MASK_ANY): Include
CODING_CATEGORY_MASK_ISO_7_TIGHT.
(coding_category_table, coding_category_name): Extern deleted.
(Vselect_safe_coding_system_function): Extern it.
(CODING_FINISH_XXX): New macros.
(CODING_MODE_XXX): New macros.
(struct coding_system): New member mode, category_idx,
heading_ascii. Deleted members last_block, direction, selective,
carryover, carryover_size.
(CODING_MAY_REQUIRE_DECODING): New macro.
(CODING_CATEGORY_MASK_ISO_7BIT, CODING_CATEGORY_MASK_ISO_8BIT,
CODING_CATEGORY_MASK_ISO_SHIFT, CODING_CATEGORY_MASK_ISO): New
macros.
(Qraw_text): Extern it.
if enable-multibyte-characters is nil. Initialize members
decoding_carryover and encoding_carryover of PROC.
(create_process): Adjusted for the change of encode_coding.
(Fopen_network_stream): Initialize members decoding_carryover and
encoding_carryover of PROC.
(read_process_output): Adjusted for the change of decode_coding.
(send_process): Adjusted for the change of encode_coding.
enable-multibyte-characters is nil, we must check `coding:' tag
and `file-coding-system-alist' to handle eol-conversion.
(Finsert_file_contents): Adjusted for the change of
struct coding_system and function decode_coding. For normail file
reading, use code_convert_region.
(Fwrite_region): Adjusted for the change of struct coding_system.
(e_write): Adjusted for the change of encode_coding.
of decode_coding.
(lisp_data_to_selection_data): Adjusted for the change of
encode_coding.
(syms_of_xselect): Initialize clipboard-coding-system to
compound-text.
in accord with value of enable-multilibyte-characters.
(Fcoding_system_p): Doc fix.
(Fcheck_coding_system): Doc fix.
(Fterminal_coding_system): Doc fix.
(Fkeyboard_coding_system): Doc fix.
does not fit MULTIBYTE, convert its contents.
(fast_c_string_match_ignore_case): Pass 0 to compile_pattern
as MULTIBYTE.
(search_buffer): If representation of STRING
does not fit MULTIBYTE, convert its contents.
Otherwise buffer_defaults->enable_multibyte_characters decides.
Only set force_singlebyte when a \-sequence is in the relevant
range.
(read_escape): New arg STRINGP. `\ ' is ignored only when STRINGP
(normally, when reading a string). Calls changed.
back to the right place.
Always compute result_len_byte as for a multibyte string. Then,
if the result will be single-byte, don't use that computation.
When converting single-byte to multibyte, don't use copy_text.
Do use copy_text between single-byte string and multibyte string.
(Fstring_make_multibyte, Fstring_make_unibyte): New functions.
(syms_of_fns): defsubr them.
(string_char_to_byte): Count from the beginning or the end,
whichever is closer. Keep a cache of recent values.
(string_byte_to_char): Likewise.
(Fstring_lessp): Compare the strings char by char.
properly calculate number of chars in the text.
Fix error message.
(file_name_as_directory): Error if arg is empty.
(Fwrite_region): Don't flush the encoding buffer if failure is set.
(struct gl_state_s): New field `object'.
(SETUP_SYNTAX_TABLE_FOR_OBJECT): Set it.
Handle non-current buffer properly. Args renamed to all caps.
(SETUP_SYNTAX_TABLE): Set `object'. Args renamed to all caps.
(UPDATE_SYNTAX_TABLE): Use gl_state.object.
(UPDATE_SYNTAX_TABLE_FORWARD, UPDATE_SYNTAX_TABLE_BACKWARD): Likewise.
(SETUP_SYNTAX_TABLE_FOR_OBJECT): Add gl_state.offset
when using the arg FROM. Use BYTE_TO_CHAR.
Callers changed.
(message1, message1_nolog): String must be ASCII-only.
(message2, message2_nolog): Now static.
(x_consider_frame_title): Use size_byte.
(display_text_line): Likewise.
And scan Voverlay_arrow_string by bytes and chars.
(display_menu_bar): Call display_string with a byte size.
(display_mode_line): Call display_string with a byte size.
(describe_vector): Pass new args to insert_from_string.
(Ftext_char_description): Use make_multibyte_string.
(Fkey_binding): Scan PREFIX a char at a time.
(Fkey_description): Scan KEYS by chars.
(Fexecute_extended_command): Likewise.
(read_char_minibuf_menu_prompt): Use message2_nolog, not message1.
(parse_modifiers): Use size_byte.
(echo_char): Use size_byte.
(parse_modifiers_uncached): Likewise.
(record_char): Likewise.
(parse_solitary_modifier): Likewise.
(read_char): Use Faref on Vkeyboard_translate_table
if it is a string.
(apply_modifiers_uncached): New arg base_len_byte. Calls changed.
(read_char_minibuf_menu_prompt):
(read_key_sequence): Access buffer's downcase_table with XCHAR_TABLE.
(Fexecute_extended_command): Use Faref to access FUNCTION.
Use size_byte of BINDING.
(stuff_buffered_input): Use size_byte of STUFFSTRING.
(Fwrite_region): Use message_with_string.
(auto_save_error, Fdo_auto_save): Likewise.
(Ffile_name_directory): Maybe use make_unibyte_string.
(Ffile_name_nondirectory): Likewise.
(Fsubstitute_in_file_name): Convert substituted envvars to multibyte
if necessary. Otherwise use make_unibyte_string.
(Finsert_file_contents): Use make_unibyte_string.
(double_dollars): Use make_uninit_multibyte_string.
(Fstring): Use make_multibyte_string.
(Fcompose_string): Likewise.
(Ffind_charset_string): Handle bytes vs chars in string.
Special case for single-byte strings.
(Fchars_in_string): Function deleted.
(Fstring): Renamed from Fconcat_chars.
Handle bytes vs chars in string.
(syms_of_charset): Corresponding changes.
(oblookup): Take args SIZE and SIZE_BYTE. Callers changed.
(init_obarray, read1, make_symbol):
Pass new arg to make_pure_string.
(Fintern, oblookup, Fintern_soft, intern): Handle size_byte.
(dir_warning): Pass new arg to message_dolog.
(read1): PCH is now int *.
Declare ch as int.
(read0): Declare c as int.
(read_list): Declare ch as int.
(read0): Use Fmake_string not make_string.
(read1): When reading a string, maybe use make_unibyte_string.
(Fread_from_string): Convert string indices to/from bytes.
(insert_from_string_1, insert_from_buffer_1): Use it.
(copy_text): New function.
(insert_from_buffer_1): Call copy_text to convert between
single-byte and multibyte text.
(insert_from_string_1): Likewise.
(insert_1_both): New function.
(insert_from_string): New args POS_BYTE, LENGTH.
(insert_from_string_before_markers):
(insert_from_string_1): New arg POS_BYTE. Swap args NCHARS, NBYTES.
Don't fail to use POS_BYTE!
(insert_from_buffer_1): Get both inschars and insbytes from NEW.
(Fsubstring): Use make_multibyte_string.
(concat, Fsubstring, internal_equal, mapcar1):
Distinguish bytes and chars when indexing strings.
(Fstring_equal, Fstring_lessp): Likewise.
(substring_both): New function.
(string_make_multibyte, string_make_unibyte): New functions.
(string_char_to_byte, string_byte_to_char): New functions.
check them for multibyteness, don't check enable-multibyte-characters.
(Fcall_process): Use size_byte for the args.
(Fcall_process_region): Likewise for temp file.
(child_setup, getenv_internal, Fgetenv): Likewise.
(read_process_output): New var `multibyte'.
Set it according to which coding system was used.
(read_process_output): Handle bytes vs chars.
(send_process): Use size_byte of OBJECT.
(Fprocess_send_string): Pass size_byte to send_process.
(print): When multibyte is disabled,
print multibyte string chars using hex escapes.
(printchar): Pass new arg to message_dolog.
(strout): New arg MULTIBYTE. Callers changed.
(strout): Take args SIZE and SIZE_BYTE;
operate on both chars and bytes.
(print_string): Pass new arg to strout.
If not using strout, fetch a whole multibyte char at once.
(write_string): Pass new arg to strout.
(write_string_1): Likewise.
(print) <case Lisp_String>: Scan by chars and bytes.
(print) <case Lisp_Symbol>: Scan name by chars and bytes.
(PRINTPREPARE): Use make_multibyte_string.
Initialize print_buffer_pos_byte. Use insert_1_both.
(printchar): Update print_buffer_pos_byte and print_buffer_pos.
(print_buffer_pos_byte): New variable.
Have two locals len and len_byte.
(fast_c_string_match_ignore_case): Use string_make_unibyte.
(compile_pattern): New arg MULTIBYTE. Callers changed.
(wordify): Use make_uninit_multibyte_string.
Scan by chars and bytes.
(string_match_1): Convert string indices to/from bytes.
(Freplace_match): Convert string indices to/from bytes.
(Fregexp_quote): Convert string indices to/from bytes.
Take account of size used by size_byte; store both sizes.
(Fpurecopy): Call make_pure_string the new way.
(compact_strings): Use size_byte field to compute string's size.
(make_uninit_multibyte_string): New function.
(make_uninit_string): Use make_uninit_multibyte_string.
(make_multibyte_string): New function.
(make_unibyte_string): New function.
(make_string): Compute number of chars from the data.
(Fminibuffer_complete_word): Scan string bytes and chars.
Pass new args to insert_from_string.
(Ftry_completion): Use size_byte while comparing.
(Fall_completions): Use size_byte while comparing.
Update call to CHAR_HEAD_P.
(indented_beyond_p): Take POS in bytes and chars. Callers changed.
(pos_tab_indent): Function moved to xdisp.c.
(Fcurrent_indentation): Use scan_newline and SET_PT_BOTH.
(indented_beyond_p, current_column_1): Likewise.
(vmotion, compute_motion): Set up bytepos value to return it.
(current_column): Handle bytepos and charpos.
(position_indentation): Take bytepos as arg, and scan with it. Calls changed.
(Fmove_to_column): Scan with bytepos and charpos.
(pos_tab_offset): Use bytepos to do FETCH_BYTE.
(skip_invisible): Don't worry about position in middle of character.
positions from it. When arg is an integer, no need to worry that it
is in middle of a character.
(buildmark): Take 2 args (charpos and bytepos). Callers changed.
(Fline_beginning_position): Save and restore both kinds of PT.
(Fprevious_char): Use PT_BYTE.
(Fbolp, Feolp): Use PT_BYTE.
(transpose_markers): Take args in chars and bytes.
(Ftranspose_regions): Work with byte and char positions.
(Fchar_after, Fchar_before): Use bytepos.
(make_buffer_string): Convert charpos to bytepos.
(Fcompare_buffer_substrings): Work with charpos and bytepos.
(Fsubst_char_in_region): Handle charpos and bytepos.
(Fwiden, Fnarrow_to_region): Likewise.
(save_restriction_restore): Update PT and PT_BYTES.
Cast arg to doprnt_lisp.
New arg BYTE; BUFFER is now first arg; use temp_set_point_both.
(set_point): New function; uses set_point_both.
(temp_set_point_both): New function.
(temp_set_point): Update BUF_PT_BYTE.
(get_local_map): Save and restore both forms of the buffer bounds.
(move_gap_both): New function.
(gap_left, gap_right): Take both charpos and bytepos args.
(adjust_markers_gap_motion): Renamed from adjust_markers and simplified.
(adjust_markers_for_delete): New function.
(adjust_markers_for_insert): Take args in chars and bytes.
Also new arg BEFORE_MARKERS. One call does all marker updating
needed for any insert.
(adjust_point): Take 2 args and update PT and PT_BYTE.
(make_gap): Handle bytes vs chars.
(insert, insert_and_inherit): Handle bytes vs chars.
Pass new BEFORE_MARKERS arg to insert_1.
(insert_before_markers, insert_before_markers_and_inherit): Likewise.
(insert_from_string, insert_from_string_before_markers): Likewise.
(insert_from_buffer): Likewise.
(insert_1): Handle bytes vs chars. New arg BEFORE_MARKERS.
(insert_from_string_1, insert_from_buffer_1): Likewise.
(replace_range): Likewise.
(del_range_2): New subroutine, taken from del_range_1.
(del_range_1): Use del_range_2.
(del_range_byte, del_range_both): New functions.
(CHAR_TO_BYTE, BYTE_TO_CHAR): New macros.
(BEG_BYTE, BEGV_BYTE, PT_BYTE, GPT_BYTE)
(ZV_BYTE, Z_BYTE): New macros.
(BUF_BEG_BYTE, BUF_BEGV_BYTE, BUF_PT_BYTE, BUF_GPT_BYTE)
(BUF_ZV_BYTE, BUF_Z_BYTE): New macros.
(BUF_GAP_END_ADDR): New macro.
(BEGV_ADDR, PT_ADDR, GPT_ADDR, GAP_END_ADDR, ZV_ADDR, Z_ADDR):
Use the new ..._byte buffer data.
(BUFFER_CEILING_OF, BUFFER_FLOOR_OF): Likewise.
(BUF_GPT_ADDR, BUF_Z_ADDR): Likewise.
(SET_PT_BOTH, TEMP_SET_PT_BOTH): New macros.
(SET_PT, TEMP_SET_PT, BUF_SET_PT, BUF_TEMP_SET_PT):
Call functions with new arg order.
(SET_BUF_BEGV, SET_BUF_BEGV_BOTH): New macros.
(SET_BUF_PT): Macro deleted.
(SET_BUF_ZV): Set charpos and bytepos.
(SET_BUF_ZV_BOTH, SET_BUF_PT_BOTH): New macros.
(BYTE_POS_ADDR): Renamed from POS_ADDR.
(CHAR_POS_ADDR): New macro.
(FETCH_BYTE): Use BYTE_POS_ADDR.
(FETCH_MULTIBYTE_CHAR): Use ..._BYTE macros.
(BUF_CHAR_ADDRESS): Convert charpos to bytepos.
(BUF_BYTE_ADDRESS): New macro, like the old BUF_CHAR_ADDRESS.
(PTR_BYTE_POS): Renamed from PTR_CHAR_POS.
(BUF_PTR_BYTE_POS): New macro.
(BUF_FETCH_CHAR, BUF_FETCH_BYTE, BUF_FETCH_MULTIBYTE_CHAR): New macros.
(struct buffer_text): New fields gpt_byte, z_byte.
(struct buffer): New fields pt_byte, begv_byte, zv_byte.
(Fprocess_send_region): Make bytepos for send_process.
(read_process_output): Save, restore, and update both kinds of ptrs.
(send_process): OFFSET is now in bytes.
(PRINTPREPARE): For a marker, set old_point_byte and start_point_byte.
Set both kinds of PT from the marker.
(PRINTFINISH): For a marker, use set_marker_both.
Restore both kinds of PT.
(print): For strings and symbols, handle multibyte chars.
(readchar): When fetching from buffer or marker,
use readchar_backlog to fetch bytes from a character.
(unreadchar): Increment readchar_backlog.
(readevalloop, Fread): Init readchar_backlog.
(find_defun_start): Additional arg POS_BYTE.
Save final byte pos in find_start_value_byte.
(find_start_value_byte): New variable.
(Fforward_comment): Scan by bytes and chars.
(Fbackward_prefix_chars): Scan by bytes and chars.
(scan_words, scan_sexps_forward): Scan bytes as well as chars.
(skip_chars, scan_lists): Scan by bytes and chars. Now static.
(char_quoted): Take charpos and bytepos as args.
(back_comment): Likewise.
(update_syntax_table): Arg renamed.
(inc_bytepos, dec_bytepos): New functions.
Convert search regs to charpos, if search succeeded.
(search_buffer): Likewise. Also convert charpos <-> bytepos
in non-regexp case.
(scan_buffer): Convert charpos <-> bytepos.
(scan_newline): New function.
(find_next_newline): Function deleted.
(set_search_regs): Args now in bytes; convert to charpos.
(Freplace_match): Convert charpos <-> bytepos when scanning case.
(Fforward_point): Just add.
(Fforward_char): Don't call forward_point, just add.
(Fforward_line): Use scan_newline.
(Fdelete_char): No need for forward_point, just add.
(Fdelete_backward_char): Handle bytes and chars.
(internal_self_insert): Handle bytes and chars.
(set_buffer_internal_1): Likewise.
(set_buffer_temp): Likewise.
(set_buffer_temp): Update BUF_PT_BYTE, BUF_BEGV_BYTE and BUF_ZV_BYTE.
(Fmake_indirect_buffer, set_buffer_internal_1):
Set up the pt, begv and zv markers with both kinds of position.
Set BUF_PT_BYTE, BUF_BEGV_BYTE, BUF_ZV_BYTE.
(Fget_buffer_create): Set BUF_..._BYTE.
(marker_position): New function returns the charpos.
(Fbuffer_has_markers_at): Test the marker's charpos.
(set_marker_restricted, Fset_marker): Set both kinds of position.
Optimize case where POSITION is a marker.
(set_marker_both, set_marker_restricted_both): New functions.
(Fmarker_position): Use the charpos.
(charpos_to_bytepos, bytepos_to_charpos): New functions.
(buf_charpos_to_bytepos, buf_bytepos_to_charpos): New functions.
(try_window_id): Use scan_newline.
(display_text_line): Use scan_newline.
(pos_tab_indent): Moved from indent,c. Now static.
Take POS in bytes and chars. Callers changed.
(redisplay_window): Handle byte and char positions.
(try_window): Don't move W->start if it's already at right place.
(display_count_lines): Several changes in args.
Do the work directly.
(display_scan_buffer): Function deleted.
(decode_mode_spec): Pass new arg.
(message_log_check_duplicate): Take charpos and bytepos args.
(message_dolog): Use markers to update old PT, BEGV, ZV.
Use scan_newline. Handle positions in bytes and chars.
(try_window): Pass bytepos to and from display_text_line.
(try_window_id): Likewise. Use byte pos as well as charpos.
(redisplay_internal): Handle bytepos for tlbufpos.
(message): Cast last arg to doprnt.
(Fset_window_buffer): Use set_marker_both.
(Fselect_window, Fscroll_other_window, save_window_save): Likewise.
(Fset_window_configuration): Pass p->mark itself to Fset_marker
and set_marker_restricted_both.
(temp_output_buffer_show): Use set_marker_restricted_both.
(window_scroll): Save and restore both kinds of pointers.
(Fdelete_other_windows): Rely on vmotion to give bytepos.
Use set_marker_both. Use byte positions.
(Frecenter): Likewise.
(Fmove_to_window_line): Use set_marker_both and Fgoto_char.
(chars_in_text, str_cmpchar_id, Fcompose_string): Likewise.
(Fchar_boundary_p): Always return 0.
(Fchars_in_region): Just subtract the arguments.
(chars_in_text): New function.
(Ffind_charset_region): Scan in bytepos as well as charpos.
(Fwrite_region): Use scan_newline.
(restore_point_unwind): Now static. Use Fgoto_char.
(Funhandled_file_name_directory): Doc fix.
(Finsert_file_contents): Handle bytes vs chars.
(Fwrite_region): Handle bytes vs chars.
(a_write): Take args in bytes; handle annotations labeled in chars.
(e_write): Rename args.
(Funhandled_file_name_directory): Doc fix.
(a_write, e_write): Now static.
when comparing buffer against string.
(temp_echo_area_glyphs): Save, update, delete text using
byte and char positions.
(read_minibuf): BACKUP_N counts bytes.
buffer, when we convert between multibyte and single-byte.
Properly initialize i.
(message_dolog): Convert between single-byte and multibyte
when inserting text into *Messages*.
Define it simply as a number.
(DOUBLE_FAIL_STACK, regex_compile): Set the limit at the size
TYPICAL_FAILURE_SIZE specifies, rather than at twice that much.
(re_max_failures): Double the initial values.
(INIT_FAIL_STACK): Use TYPICAL_FAILURE_SIZE so that INIT_FAILURE_ALLOC
counts in the proper units.
(INIT_FAILURE_ALLOC): Increase to 20.
(FAIL_STACK_GROWTH_FACTOR): New macro.
(GROW_FAIL_STACK): Renamed from DOUBLE_FAIL_STACK.
FAIL_STACK_GROWTH_FACTOR controls what ratio to increase size by.
proc_encode_coding_system[p->outfd] is NULL, instead of allocating
`struct coding_system' for encoding, just skip setting up coding
system for encoding. Set Vlast_coding_system_used after some text
is read.
(send_process): Set Vlast_coding_system_used after deciding a
coding system to be used for encoding.