#include <stdio.h>
#include <ctype.h>
#include <setjmp.h>
-
-#ifdef HAVE_UNISTD_H
#include <unistd.h>
-#endif
#include "lisp.h"
#include "termchar.h"
static void update_frame_line (struct frame *, int);
static struct dim allocate_matrices_for_frame_redisplay
(Lisp_Object, int, int, int, int *);
+static int required_matrix_height (struct window *);
+static int required_matrix_width (struct window *);
static void allocate_matrices_for_window_redisplay (struct window *);
static int realloc_glyph_pool (struct glyph_pool *, struct dim);
static void adjust_frame_glyphs (struct frame *);
static int update_window (struct window *, int);
static int update_frame_1 (struct frame *, int, int);
static void set_window_cursor_after_update (struct window *);
-static int row_equal_p (struct window *, struct glyph_row *,
- struct glyph_row *, int);
static void adjust_frame_glyphs_for_window_redisplay (struct frame *);
static void adjust_frame_glyphs_for_frame_redisplay (struct frame *);
-static void reverse_rows (struct glyph_matrix *, int, int);
-static int margin_glyphs_to_reserve (struct window *, int, Lisp_Object);
-static void sync_window_with_frame_matrix_rows (struct window *);
-struct window *frame_row_to_window (struct window *, int);
\f
/* Non-zero means don't pause redisplay for pending input. (This is
has been interrupted for pending input. */
static void
-add_window_display_history (w, msg, paused_p)
- struct window *w;
- char *msg;
- int paused_p;
+add_window_display_history (struct window *w, char *msg, int paused_p)
{
char *buf;
pending input. */
static void
-add_frame_display_history (f, paused_p)
- struct frame *f;
- int paused_p;
+add_frame_display_history (struct frame *f, int paused_p)
{
char *buf;
/* Copy glyph row structure FROM to glyph row structure TO, except
that glyph pointers in the structures are left unchanged. */
-INLINE void
+static INLINE void
copy_row_except_pointers (struct glyph_row *to, struct glyph_row *from)
{
struct glyph *pointers[1 + LAST_AREA];
#if GLYPH_DEBUG
static int
-glyph_row_slice_p (window_row, frame_row)
- struct glyph_row *window_row, *frame_row;
+glyph_row_slice_p (struct glyph_row *window_row, struct glyph_row *frame_row)
{
struct glyph *window_glyph_start = window_row->glyphs[0];
struct glyph *frame_glyph_start = frame_row->glyphs[0];
in WINDOW_MATRIX is found satisfying the condition. */
static struct glyph_row *
-find_glyph_row_slice (window_matrix, frame_matrix, row)
- struct glyph_matrix *window_matrix, *frame_matrix;
- int row;
+find_glyph_row_slice (struct glyph_matrix *window_matrix,
+ struct glyph_matrix *frame_matrix, int row)
{
int i;
/* Return a hash code for glyph row ROW. */
-int
+static int
line_hash_code (struct glyph_row *row)
{
int hash = 0;
*/
void
-flush_stdout ()
+flush_stdout (void)
{
fflush (stdout);
}
MATRIX. */
void
-check_matrix_pointer_lossage (matrix)
- struct glyph_matrix *matrix;
+check_matrix_pointer_lossage (struct glyph_matrix *matrix)
{
int i, j;
/* Get a pointer to glyph row ROW in MATRIX, with bounds checks. */
struct glyph_row *
-matrix_row (matrix, row)
- struct glyph_matrix *matrix;
- int row;
+matrix_row (struct glyph_matrix *matrix, int row)
{
xassert (matrix && matrix->rows);
xassert (row >= 0 && row < matrix->nrows);
window W. */
static void
-check_matrix_invariants (w)
- struct window *w;
+check_matrix_invariants (struct window *w)
{
struct glyph_matrix *matrix = w->current_matrix;
int yb = window_text_bottom_y (w);
/* Return the required height of glyph matrices for window W. */
-int
+static int
required_matrix_height (struct window *w)
{
#ifdef HAVE_WINDOW_SYSTEM
/* Return the required width of glyph matrices for window W. */
-int
+static int
required_matrix_width (struct window *w)
{
#ifdef HAVE_WINDOW_SYSTEM
glyph pointers. */
void
-check_window_matrix_pointers (w)
- struct window *w;
+check_window_matrix_pointers (struct window *w)
{
while (w)
{
corresponding frame row. If it isn't, abort. */
static void
-check_matrix_pointers (window_matrix, frame_matrix)
- struct glyph_matrix *window_matrix, *frame_matrix;
+check_matrix_pointers (struct glyph_matrix *window_matrix,
+ struct glyph_matrix *frame_matrix)
{
/* Row number in WINDOW_MATRIX. */
int i = 0;
vertical position relative to W's frame. */
static int
-window_to_frame_vpos (w, vpos)
- struct window *w;
- int vpos;
+window_to_frame_vpos (struct window *w, int vpos)
{
struct frame *f = XFRAME (w->frame);
a horizontal position relative to W's frame. */
static int
-window_to_frame_hpos (w, hpos)
- struct window *w;
- int hpos;
+window_to_frame_hpos (struct window *w, int hpos)
{
xassert (!FRAME_WINDOW_P (XFRAME (w->frame)));
hpos += WINDOW_LEFT_EDGE_COL (w);
#endif
}
+#if PERIODIC_PREEMPTION_CHECKING
do_pause:
+#endif
/* Reset flags indicating that a window should be updated. */
set_window_update_flags (root_window, 0);
}
}
+#if !PERIODIC_PREEMPTION_CHECKING
do_pause:
+#endif
clear_desired_matrices (f);
return pause;
BYTEPOS (startp) = min (ZV_BYTE, max (BEGV_BYTE, BYTEPOS (startp)));
start_display (&it, w, startp);
- x0 = *x - WINDOW_LEFT_MARGIN_WIDTH (w);
+ x0 = *x;
/* First, move to the beginning of the row corresponding to *Y. We
need to be in that row to get the correct value of base paragraph
f->terminal = t;
t->reference_count++;
+#ifdef MSDOS
+ f->output_data.tty->display_info = &the_only_display_info;
+#else
+ if (f->output_method == output_termcap)
+ create_tty_output (f);
+#endif
t->display_info.tty->top_frame = selected_frame;
change_frame_size (XFRAME (selected_frame),
FrameRows (t->display_info.tty),