-#define PRINTPREPARE \
- original = printcharfun; \
- if (NILP (printcharfun)) printcharfun = Qt; \
- if (BUFFERP (printcharfun)) \
- { \
- if (XBUFFER (printcharfun) != current_buffer) \
- Fset_buffer (printcharfun); \
- printcharfun = Qnil; \
- } \
- if (MARKERP (printcharfun)) \
- { \
- if (!(XMARKER (original)->buffer)) \
- error ("Marker does not point anywhere"); \
- if (XMARKER (original)->buffer != current_buffer) \
- set_buffer_internal (XMARKER (original)->buffer); \
- old_point = PT; \
- old_point_byte = PT_BYTE; \
- SET_PT_BOTH (marker_position (printcharfun), \
- marker_byte_position (printcharfun)); \
- start_point = PT; \
- start_point_byte = PT_BYTE; \
- printcharfun = Qnil; \
- } \
- if (NILP (printcharfun)) \
- { \
- Lisp_Object string; \
- if (print_buffer != 0) \
- { \
- string = make_string_from_bytes (print_buffer, \
- print_buffer_pos, \
- print_buffer_pos_byte); \
- record_unwind_protect (print_unwind, string); \
- } \
- else \
- { \
- print_buffer_size = 1000; \
- print_buffer = (char *) xmalloc (print_buffer_size); \
- free_print_buffer = 1; \
- } \
- print_buffer_pos = 0; \
- print_buffer_pos_byte = 0; \
- } \
- if (!CONSP (Vprint_gensym)) \
- Vprint_gensym_alist = Qnil
-
-#define PRINTFINISH \
- if (NILP (printcharfun)) \
- insert_1_both (print_buffer, print_buffer_pos, \
- print_buffer_pos_byte, 0, 1, 0); \
- if (free_print_buffer) \
- { \
- xfree (print_buffer); \
- print_buffer = 0; \
- } \
- unbind_to (specpdl_count, Qnil); \
- if (MARKERP (original)) \
- set_marker_both (original, Qnil, PT, PT_BYTE); \
- if (old_point >= 0) \
- SET_PT_BOTH (old_point + (old_point >= start_point \
- ? PT - start_point : 0), \
+#define PRINTPREPARE \
+ original = printcharfun; \
+ if (NILP (printcharfun)) printcharfun = Qt; \
+ if (BUFFERP (printcharfun)) \
+ { \
+ if (XBUFFER (printcharfun) != current_buffer) \
+ Fset_buffer (printcharfun); \
+ printcharfun = Qnil; \
+ } \
+ if (MARKERP (printcharfun)) \
+ { \
+ EMACS_INT marker_pos; \
+ if (! XMARKER (printcharfun)->buffer) \
+ error ("Marker does not point anywhere"); \
+ if (XMARKER (printcharfun)->buffer != current_buffer) \
+ set_buffer_internal (XMARKER (printcharfun)->buffer); \
+ marker_pos = marker_position (printcharfun); \
+ if (marker_pos < BEGV || marker_pos > ZV) \
+ error ("Marker is outside the accessible part of the buffer"); \
+ old_point = PT; \
+ old_point_byte = PT_BYTE; \
+ SET_PT_BOTH (marker_pos, \
+ marker_byte_position (printcharfun)); \
+ start_point = PT; \
+ start_point_byte = PT_BYTE; \
+ printcharfun = Qnil; \
+ } \
+ if (NILP (printcharfun)) \
+ { \
+ Lisp_Object string; \
+ if (NILP (current_buffer->enable_multibyte_characters) \
+ && ! print_escape_multibyte) \
+ specbind (Qprint_escape_multibyte, Qt); \
+ if (! NILP (current_buffer->enable_multibyte_characters) \
+ && ! print_escape_nonascii) \
+ specbind (Qprint_escape_nonascii, Qt); \
+ if (print_buffer != 0) \
+ { \
+ string = make_string_from_bytes (print_buffer, \
+ print_buffer_pos, \
+ print_buffer_pos_byte); \
+ record_unwind_protect (print_unwind, string); \
+ } \
+ else \
+ { \
+ print_buffer_size = 1000; \
+ print_buffer = (char *) xmalloc (print_buffer_size); \
+ free_print_buffer = 1; \
+ } \
+ print_buffer_pos = 0; \
+ print_buffer_pos_byte = 0; \
+ } \
+ if (EQ (printcharfun, Qt) && ! noninteractive) \
+ setup_echo_area_for_printing (multibyte);
+
+#define PRINTFINISH \
+ if (NILP (printcharfun)) \
+ { \
+ if (print_buffer_pos != print_buffer_pos_byte \
+ && NILP (current_buffer->enable_multibyte_characters)) \
+ { \
+ unsigned char *temp \
+ = (unsigned char *) alloca (print_buffer_pos + 1); \
+ copy_text (print_buffer, temp, print_buffer_pos_byte, \
+ 1, 0); \
+ insert_1_both (temp, print_buffer_pos, \
+ print_buffer_pos, 0, 1, 0); \
+ } \
+ else \
+ insert_1_both (print_buffer, print_buffer_pos, \
+ print_buffer_pos_byte, 0, 1, 0); \
+ signal_after_change (PT - print_buffer_pos, 0, print_buffer_pos);\
+ } \
+ if (free_print_buffer) \
+ { \
+ xfree (print_buffer); \
+ print_buffer = 0; \
+ } \
+ unbind_to (specpdl_count, Qnil); \
+ if (MARKERP (original)) \
+ set_marker_both (original, Qnil, PT, PT_BYTE); \
+ if (old_point >= 0) \
+ SET_PT_BOTH (old_point + (old_point >= start_point \
+ ? PT - start_point : 0), \