annotate src/dispnew.c @ 1016:817b0ce337d7

* window.c (Fset_window_configuration): Removed #if 0'd code which assumes that minibuf_window is on the same frame as the window configuration. Removed special case for windows whose prevs point to themselves. * window.c (Fset_window_configuration): Rename the argument from ARG to CONFIGURATION, so it matches the docstring. The make-docfile program cares. * window.c [MULTI_FRAME] (syms_of_window): Don't staticpro minibuf_window; the frame list will take care of it. * window.c (window_loop): This used to keep track of the first window processed and wait until we came back around to it. Sadly, this doesn't work if that window gets deleted. So instead, use Fprevious_window to find the last window to process, and loop until we've done that one. * window.c [not MULTI_FRAME] (init_window_once): Don't forget to set the `mini_p' flag on the new minibuffer window to t. * window.c (Fwindow_at): Don't check the type of the frame argument. * window.c [not MULTI_FRAME] (window_loop): Set frame to zero, instead of trying to decode it. * window.c (init_window_once): Initialize minibuf_window before FRAME_ROOT_WINDOW, so the latter actually points to something.
author Jim Blandy <jimb@redhat.com>
date Wed, 19 Aug 1992 06:40:02 +0000
parents aa167fe80ce4
children 41b77a76b885
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1 /* Updating of data structures for redisplay.
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
2 Copyright (C) 1985, 1986, 1987, 1988, 1990, 1992 Free Software Foundation, Inc.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
3
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
4 This file is part of GNU Emacs.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
5
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
6 GNU Emacs is free software; you can redistribute it and/or modify
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
7 it under the terms of the GNU General Public License as published by
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
8 the Free Software Foundation; either version 1, or (at your option)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
9 any later version.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
10
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
11 GNU Emacs is distributed in the hope that it will be useful,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
12 but WITHOUT ANY WARRANTY; without even the implied warranty of
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
14 GNU General Public License for more details.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
15
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
16 You should have received a copy of the GNU General Public License
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
17 along with GNU Emacs; see the file COPYING. If not, write to
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
18 the Free Software Foundation, 675 Mass Ave, Cambridge, MA 02139, USA. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
19
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
20
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
21 #include <signal.h>
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
22
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
23 #include "config.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
24 #include <stdio.h>
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
25 #include <ctype.h>
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
26
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
27 #include "termchar.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
28 #include "termopts.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
29 #include "cm.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
30 #include "lisp.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
31 #include "dispextern.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
32 #include "buffer.h"
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
33 #include "frame.h"
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
34 #include "window.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
35 #include "commands.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
36 #include "disptab.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
37 #include "indent.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
38
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
39 #include "systerm.h"
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
40 #include "systime.h"
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
41
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
42 #ifdef HAVE_X_WINDOWS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
43 #include "xterm.h"
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
44 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
45
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
46 #define max(a, b) ((a) > (b) ? (a) : (b))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
47 #define min(a, b) ((a) < (b) ? (a) : (b))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
48
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
49 #ifndef PENDING_OUTPUT_COUNT
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
50 /* Get number of chars of output now in the buffer of a stdio stream.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
51 This ought to be built in in stdio, but it isn't.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
52 Some s- files override this because their stdio internals differ. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
53 #define PENDING_OUTPUT_COUNT(FILE) ((FILE)->_ptr - (FILE)->_base)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
54 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
55
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
56 /* Nonzero upon entry to redisplay means do not assume anything about
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
57 current contents of actual terminal frame; clear and redraw it. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
58
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
59 int frame_garbaged;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
60
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
61 /* Nonzero means last display completed. Zero means it was preempted. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
62
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
63 int display_completed;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
64
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
65 /* Lisp variable visible-bell; enables use of screen-flash
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
66 instead of audible bell. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
67
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
68 int visible_bell;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
69
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
70 /* Invert the color of the whole frame, at a low level. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
71
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
72 int inverse_video;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
73
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
74 /* Line speed of the terminal. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
75
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
76 int baud_rate;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
77
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
78 /* nil or a symbol naming the window system under which emacs is
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
79 running ('x is the only current possibility). */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
80
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
81 Lisp_Object Vwindow_system;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
82
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
83 /* Version number of X windows: 10, 11 or nil. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
84 Lisp_Object Vwindow_system_version;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
85
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
86 /* Vector of glyph definitions. Indexed by glyph number,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
87 the contents are a string which is how to output the glyph.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
88
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
89 If Vglyph_table is nil, a glyph is output by using its low 8 bits
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
90 as a character code. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
91
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
92 Lisp_Object Vglyph_table;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
93
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
94 /* Display table to use for vectors that don't specify their own. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
95
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
96 Lisp_Object Vstandard_display_table;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
97
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
98 /* Nonzero means reading single-character input with prompt
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
99 so put cursor on minibuffer after the prompt.
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
100 positive means at end of text in echo area;
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
101 negative means at beginning of line. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
102 int cursor_in_echo_area;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
103
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
104 /* The currently selected frame.
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
105 In a single-frame version, this variable always remains 0. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
106
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
107 FRAME_PTR selected_frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
108
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
109 /* A frame which is not just a minibuffer, or 0 if there are no such
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
110 frames. This is usually the most recent such frame that was
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
111 selected. In a single-frame version, this variable always remains 0. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
112 FRAME_PTR last_nonminibuf_frame;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
113
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
114 /* In a single-frame version, the information that would otherwise
986
83605f96f58e * dispnew.c (the_only_frame): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 960
diff changeset
115 exist inside frame objects lives in the following structure instead.
83605f96f58e * dispnew.c (the_only_frame): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 960
diff changeset
116
83605f96f58e * dispnew.c (the_only_frame): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 960
diff changeset
117 NOTE: the_only_frame is not checked for garbage collection; don't
83605f96f58e * dispnew.c (the_only_frame): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 960
diff changeset
118 store collectable objects in any of its fields!
83605f96f58e * dispnew.c (the_only_frame): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 960
diff changeset
119
83605f96f58e * dispnew.c (the_only_frame): Doc fix.
Jim Blandy <jimb@redhat.com>
parents: 960
diff changeset
120 You're not/The only frame in town/... */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
121
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
122 #ifndef MULTI_FRAME
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
123 struct frame the_only_frame;
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
124 #endif
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
125
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
126 /* This is a vector, made larger whenever it isn't large enough,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
127 which is used inside `update_frame' to hold the old contents
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
128 of the FRAME_PHYS_LINES of the frame being updated. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
129 struct frame_glyphs **ophys_lines;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
130 /* Length of vector currently allocated. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
131 int ophys_lines_length;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
132
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
133 FILE *termscript; /* Stdio stream being used for copy of all output. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
134
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
135 struct cm Wcm; /* Structure for info on cursor positioning */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
136
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
137 extern short ospeed; /* Output speed (from sg_ospeed) */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
138
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
139 int delayed_size_change; /* 1 means SIGWINCH happened when not safe. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
140
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
141 #ifdef MULTI_FRAME
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
142
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
143 DEFUN ("redraw-frame", Fredraw_frame, Sredraw_frame, 1, 1, 0,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
144 "Clear frame FRAME and output again what is supposed to appear on it.")
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
145 (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
146 Lisp_Object frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
147 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
148 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
149
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
150 CHECK_LIVE_FRAME (frame, 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
151 f = XFRAME (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
152 update_begin (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
153 /* set_terminal_modes (); */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
154 clear_frame ();
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
155 clear_frame_records (f);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
156 update_end (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
157 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
158 windows_or_buffers_changed++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
159 /* Mark all windows as INaccurate,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
160 so that every window will have its redisplay done. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
161 mark_window_display_accurate (FRAME_ROOT_WINDOW (f), 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
162 f->garbaged = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
163 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
164 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
165
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
166 DEFUN ("redraw-display", Fredraw_display, Sredraw_display, 0, 0, "",
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
167 "Redraw all frames marked as having their images garbled.")
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
168 ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
169 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
170 Lisp_Object frame, tail;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
171
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
172 for (tail = Vframe_list; CONSP (tail); tail = XCONS (tail)->cdr)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
173 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
174 frame = XCONS (tail)->car;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
175 if (XFRAME (frame)->garbaged && XFRAME (frame)->visible)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
176 Fredraw_frame (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
177 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
178 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
179 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
180
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
181 redraw_frame (f)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
182 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
183 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
184 Lisp_Object frame;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
185 XSET (frame, Lisp_Frame, f);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
186 Fredraw_frame (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
187 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
188
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
189 #else /* not MULTI_FRAME */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
190
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
191 DEFUN ("redraw-display", Fredraw_display, Sredraw_display, 0, 0, 0,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
192 "Clear screen and output again what is supposed to appear on it.")
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
193 ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
194 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
195 update_begin (0);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
196 set_terminal_modes ();
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
197 clear_frame ();
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
198 update_end (0);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
199 fflush (stdout);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
200 clear_frame_records (0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
201 windows_or_buffers_changed++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
202 /* Mark all windows as INaccurate,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
203 so that every window will have its redisplay done. */
1003
aa167fe80ce4 * dispnew.c [not MULTI_FRAME] (Fredraw_display): Use
Jim Blandy <jimb@redhat.com>
parents: 986
diff changeset
204 mark_window_display_accurate (FRAME_ROOT_WINDOW (0));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
205 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
206 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
207
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
208 #endif /* not MULTI_FRAME */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
209
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
210 static struct frame_glyphs *
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
211 make_frame_glyphs (frame, empty)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
212 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
213 int empty;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
214 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
215 register int i;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
216 register width = FRAME_WIDTH (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
217 register height = FRAME_HEIGHT (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
218 register struct frame_glyphs *new =
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
219 (struct frame_glyphs *) xmalloc (sizeof (struct frame_glyphs));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
220
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
221 SET_GLYPHS_FRAME (new, frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
222 new->height = height;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
223 new->width = width;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
224 new->used = (int *) xmalloc (height * sizeof (int));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
225 new->glyphs = (GLYPH **) xmalloc (height * sizeof (GLYPH *));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
226 new->highlight = (char *) xmalloc (height * sizeof (char));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
227 new->enable = (char *) xmalloc (height * sizeof (char));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
228 bzero (new->enable, height * sizeof (char));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
229 new->bufp = (int *) xmalloc (height * sizeof (int));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
230
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
231 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
232 if (FRAME_X_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
233 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
234 new->nruns = (int *) xmalloc (height * sizeof (int));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
235 new->face_list
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
236 = (struct run **) xmalloc (height * sizeof (struct run *));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
237 new->top_left_x = (short *) xmalloc (height * sizeof (short));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
238 new->top_left_y = (short *) xmalloc (height * sizeof (short));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
239 new->pix_width = (short *) xmalloc (height * sizeof (short));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
240 new->pix_height = (short *) xmalloc (height * sizeof (short));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
241 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
242 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
243
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
244 if (empty)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
245 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
246 /* Make the buffer used by decode_mode_spec. This buffer is also
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
247 used as temporary storage when updating the frame. See scroll.c. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
248 unsigned int total_glyphs = (width + 2) * sizeof (GLYPH);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
249
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
250 new->total_contents = (GLYPH *) xmalloc (total_glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
251 bzero (new->total_contents, total_glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
252 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
253 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
254 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
255 unsigned int total_glyphs = height * (width + 2) * sizeof (GLYPH);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
256
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
257 new->total_contents = (GLYPH *) xmalloc (total_glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
258 bzero (new->total_contents, total_glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
259 for (i = 0; i < height; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
260 new->glyphs[i] = new->total_contents + i * (width + 2) + 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
261 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
262
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
263 return new;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
264 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
265
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
266 static void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
267 free_frame_glyphs (frame, glyphs)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
268 FRAME_PTR frame;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
269 struct frame_glyphs *glyphs;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
270 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
271 if (glyphs->total_contents)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
272 free (glyphs->total_contents);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
273
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
274 free (glyphs->used);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
275 free (glyphs->glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
276 free (glyphs->highlight);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
277 free (glyphs->enable);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
278 free (glyphs->bufp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
279
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
280 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
281 if (FRAME_X_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
282 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
283 free (glyphs->nruns);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
284 free (glyphs->face_list);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
285 free (glyphs->top_left_x);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
286 free (glyphs->top_left_y);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
287 free (glyphs->pix_width);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
288 free (glyphs->pix_height);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
289 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
290 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
291
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
292 free (glyphs);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
293 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
294
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
295 static void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
296 remake_frame_glyphs (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
297 FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
298 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
299 if (FRAME_CURRENT_GLYPHS (frame))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
300 free_frame_glyphs (frame, FRAME_CURRENT_GLYPHS (frame));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
301 if (FRAME_DESIRED_GLYPHS (frame))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
302 free_frame_glyphs (frame, FRAME_DESIRED_GLYPHS (frame));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
303 if (FRAME_TEMP_GLYPHS (frame))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
304 free_frame_glyphs (frame, FRAME_TEMP_GLYPHS (frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
305
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
306 if (FRAME_MESSAGE_BUF (frame))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
307 FRAME_MESSAGE_BUF (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
308 = (char *) xrealloc (FRAME_MESSAGE_BUF (frame),
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
309 FRAME_WIDTH (frame) + 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
310 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
311 FRAME_MESSAGE_BUF (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
312 = (char *) xmalloc (FRAME_WIDTH (frame) + 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
313
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
314 FRAME_CURRENT_GLYPHS (frame) = make_frame_glyphs (frame, 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
315 FRAME_DESIRED_GLYPHS (frame) = make_frame_glyphs (frame, 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
316 FRAME_TEMP_GLYPHS (frame) = make_frame_glyphs (frame, 1);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
317 SET_FRAME_GARBAGED (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
318 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
319
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
320 /* Return the hash code of contents of line VPOS in frame-matrix M. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
321
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
322 static int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
323 line_hash_code (m, vpos)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
324 register struct frame_glyphs *m;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
325 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
326 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
327 register GLYPH *body, *end;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
328 register int h = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
329
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
330 if (!m->enable[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
331 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
332
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
333 /* Give all lighlighted lines the same hash code
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
334 so as to encourage scrolling to leave them in place. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
335 if (m->highlight[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
336 return -1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
337
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
338 body = m->glyphs[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
339
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
340 if (must_write_spaces)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
341 while (1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
342 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
343 GLYPH g = *body++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
344
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
345 if (g == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
346 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
347 h = (((h << 4) + (h >> 24)) & 0x0fffffff) + g - SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
348 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
349 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
350 while (1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
351 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
352 GLYPH g = *body++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
353
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
354 if (g == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
355 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
356 h = (((h << 4) + (h >> 24)) & 0x0fffffff) + g;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
357 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
358
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
359 if (h)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
360 return h;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
361 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
362 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
363
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
364 /* Return number of characters in line in M at vpos VPOS,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
365 except don't count leading and trailing spaces
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
366 unless the terminal requires those to be explicitly output. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
367
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
368 static unsigned int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
369 line_draw_cost (m, vpos)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
370 struct frame_glyphs *m;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
371 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
372 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
373 register GLYPH *beg = m->glyphs[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
374 register GLYPH *end = m->glyphs[vpos] + m->used[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
375 register int i;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
376 register int tlen = GLYPH_TABLE_LENGTH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
377 register Lisp_Object *tbase = GLYPH_TABLE_BASE;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
378
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
379 /* Ignore trailing and leading spaces if we can. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
380 if (!must_write_spaces)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
381 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
382 while ((end != beg) && (*end == SPACEGLYPH))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
383 --end;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
384 if (end == beg)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
385 return (0); /* All blank line. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
386
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
387 while (*beg == SPACEGLYPH)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
388 ++beg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
389 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
390
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
391 /* If we don't have a glyph-table, each glyph is one character,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
392 so return the number of glyphs. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
393 if (tbase == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
394 return end - beg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
395
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
396 /* Otherwise, scan the glyphs and accumulate their total size in I. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
397 i = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
398 while ((beg <= end) && *beg)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
399 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
400 register GLYPH g = *beg++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
401
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
402 if (GLYPH_SIMPLE_P (tbase, tlen, g))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
403 i += 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
404 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
405 i += GLYPH_LENGTH (tbase, g);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
406 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
407 return i;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
408 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
409
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
410 /* The functions on this page are the interface from xdisp.c to redisplay.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
411
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
412 The only other interface into redisplay is through setting
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
413 FRAME_CURSOR_X (frame) and FRAME_CURSOR_Y (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
414 and SET_FRAME_GARBAGED (frame). */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
415
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
416 /* cancel_line eliminates any request to display a line at position `vpos' */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
417
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
418 cancel_line (vpos, frame)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
419 int vpos;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
420 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
421 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
422 FRAME_DESIRED_GLYPHS (frame)->enable[vpos] = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
423 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
424
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
425 clear_frame_records (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
426 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
427 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
428 bzero (FRAME_CURRENT_GLYPHS (frame)->enable, FRAME_HEIGHT (frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
429 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
430
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
431 /* Prepare to display on line VPOS starting at HPOS within it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
432
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
433 void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
434 get_display_line (frame, vpos, hpos)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
435 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
436 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
437 register int hpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
438 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
439 register struct frame_glyphs *glyphs;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
440 register struct frame_glyphs *desired_glyphs = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
441 register GLYPH *p;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
442
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
443 if (vpos < 0 || (! FRAME_VISIBLE_P (frame)))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
444 abort ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
445
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
446 if ((desired_glyphs->enable[vpos]) && desired_glyphs->used[vpos] > hpos)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
447 abort ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
448
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
449 if (! desired_glyphs->enable[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
450 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
451 desired_glyphs->used[vpos] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
452 desired_glyphs->highlight[vpos] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
453 desired_glyphs->enable[vpos] = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
454 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
455
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
456 if (hpos > desired_glyphs->used[vpos])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
457 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
458 GLYPH *g = desired_glyphs->glyphs[vpos] + desired_glyphs->used[vpos];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
459 GLYPH *end = desired_glyphs->glyphs[vpos] + hpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
460
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
461 desired_glyphs->used[vpos] = hpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
462 while (g != end)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
463 *g++ = SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
464 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
465 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
466
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
467 /* Like bcopy except never gets confused by overlap. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
468
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
469 void
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
470 safe_bcopy (from, to, size)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
471 char *from, *to;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
472 int size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
473 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
474 register char *endf;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
475 register char *endt;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
476
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
477 if (size == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
478 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
479
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
480 /* If destination is higher in memory, and overlaps source zone,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
481 copy from the end. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
482 if (from < to && from + size > to)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
483 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
484 endf = from + size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
485 endt = to + size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
486
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
487 /* If TO - FROM is large, then we should break the copy into
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
488 nonoverlapping chunks of TO - FROM bytes each. However, if
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
489 TO - FROM is small, then the bcopy function call overhead
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
490 makes this not worth it. The crossover point could be about
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
491 anywhere. Since I don't think the obvious copy loop is ever
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
492 too bad, I'm trying to err in its favor. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
493 if (to - from < 64)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
494 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
495 do
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
496 *--endt = *--endf;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
497 while (endf != from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
498 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
499 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
500 {
352
cd7ffb1fcb45 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 314
diff changeset
501 /* Since TO - FROM >= 64, the overlap is less than SIZE,
cd7ffb1fcb45 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 314
diff changeset
502 so we can always safely do this loop once. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
503 while (endt > to)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
504 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
505 endt -= (to - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
506 endf -= (to - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
507
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
508 bcopy (endf, endt, to - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
509 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
510
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
511 /* If TO - FROM wasn't a multiple of SIZE, there will be a
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
512 little left over. The amount left over is
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
513 (endt + (to - from)) - to, which is endt - from. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
514 bcopy (from, to, endt - from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
515 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
516 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
517 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
518 bcopy (from, to, size);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
519 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
520
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
521 #if 0
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
522 void
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
523 safe_bcopy (from, to, size)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
524 char *from, *to;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
525 int size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
526 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
527 register char *endf;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
528 register char *endt;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
529
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
530 if (size == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
531 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
532
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
533 /* If destination is higher in memory, and overlaps source zone,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
534 copy from the end. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
535 if (from < to && from + size > to)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
536 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
537 endf = from + size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
538 endt = to + size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
539
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
540 do
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
541 *--endt = *--endf;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
542 while (endf != from);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
543
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
544 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
545 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
546
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
547 bcopy (from, to, size);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
548 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
549 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
550
352
cd7ffb1fcb45 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 314
diff changeset
551 /* Rotate a vector of SIZE bytes right, by DISTANCE bytes.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
552 DISTANCE may be negative. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
553
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
554 static void
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
555 rotate_vector (vector, size, distance)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
556 char *vector;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
557 int size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
558 int distance;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
559 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
560 char *temp = (char *) alloca (size);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
561
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
562 if (distance < 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
563 distance += size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
564
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
565 bcopy (vector, temp + distance, size - distance);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
566 bcopy (vector + size - distance, temp, distance);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
567 bcopy (temp, vector, size);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
568 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
569
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
570 /* Scroll lines from vpos FROM up to but not including vpos END
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
571 down by AMOUNT lines (AMOUNT may be negative).
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
572 Returns nonzero if done, zero if terminal cannot scroll them. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
573
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
574 int
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
575 scroll_frame_lines (frame, from, end, amount)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
576 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
577 int from, end, amount;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
578 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
579 register int i;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
580 register struct frame_glyphs *current_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
581 = FRAME_CURRENT_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
582
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
583 if (!line_ins_del_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
584 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
585
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
586 if (amount == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
587 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
588
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
589 if (amount > 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
590 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
591 update_begin (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
592 set_terminal_window (end + amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
593 if (!scroll_region_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
594 ins_del_lines (end, -amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
595 ins_del_lines (from, amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
596 set_terminal_window (0);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
597
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
598 rotate_vector (current_frame->glyphs + from,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
599 sizeof (GLYPH *) * (end + amount - from),
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
600 amount * sizeof (GLYPH *));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
601
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
602 safe_bcopy (current_frame->used + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
603 current_frame->used + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
604 (end - from) * sizeof current_frame->used[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
605
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
606 safe_bcopy (current_frame->highlight + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
607 current_frame->highlight + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
608 (end - from) * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
609
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
610 safe_bcopy (current_frame->enable + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
611 current_frame->enable + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
612 (end - from) * sizeof current_frame->enable[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
613
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
614 /* Mark the lines made empty by scrolling as enabled, empty and
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
615 normal video. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
616 bzero (current_frame->used + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
617 amount * sizeof current_frame->used[0]);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
618 bzero (current_frame->highlight + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
619 amount * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
620 for (i = from; i < from + amount; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
621 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
622 current_frame->glyphs[i][0] = '\0';
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
623 current_frame->enable[i] = 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
624 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
625
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
626 safe_bcopy (current_frame->bufp + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
627 current_frame->bufp + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
628 (end - from) * sizeof current_frame->bufp[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
629
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
630 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
631 if (FRAME_X_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
632 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
633 safe_bcopy (current_frame->nruns + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
634 current_frame->nruns + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
635 (end - from) * sizeof current_frame->nruns[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
636
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
637 safe_bcopy (current_frame->face_list + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
638 current_frame->face_list + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
639 (end - from) * sizeof current_frame->face_list[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
640
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
641 safe_bcopy (current_frame->top_left_x + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
642 current_frame->top_left_x + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
643 (end - from) * sizeof current_frame->top_left_x[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
644
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
645 safe_bcopy (current_frame->top_left_y + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
646 current_frame->top_left_y + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
647 (end - from) * sizeof current_frame->top_left_y[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
648
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
649 safe_bcopy (current_frame->pix_width + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
650 current_frame->pix_width + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
651 (end - from) * sizeof current_frame->pix_width[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
652
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
653 safe_bcopy (current_frame->pix_height + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
654 current_frame->pix_height + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
655 (end - from) * sizeof current_frame->pix_height[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
656 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
657 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
658
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
659 update_end (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
660 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
661 if (amount < 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
662 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
663 update_begin (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
664 set_terminal_window (end);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
665 ins_del_lines (from + amount, amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
666 if (!scroll_region_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
667 ins_del_lines (end + amount, -amount);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
668 set_terminal_window (0);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
669
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
670 rotate_vector (current_frame->glyphs + from + amount,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
671 sizeof (GLYPH *) * (end - from - amount),
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
672 amount * sizeof (GLYPH *));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
673
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
674 safe_bcopy (current_frame->used + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
675 current_frame->used + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
676 (end - from) * sizeof current_frame->used[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
677
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
678 safe_bcopy (current_frame->highlight + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
679 current_frame->highlight + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
680 (end - from) * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
681
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
682 safe_bcopy (current_frame->enable + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
683 current_frame->enable + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
684 (end - from) * sizeof current_frame->enable[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
685
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
686 /* Mark the lines made empty by scrolling as enabled, empty and
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
687 normal video. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
688 bzero (current_frame->used + end + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
689 - amount * sizeof current_frame->used[0]);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
690 bzero (current_frame->highlight + end + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
691 - amount * sizeof current_frame->highlight[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
692 for (i = end + amount; i < end; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
693 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
694 current_frame->glyphs[i][0] = '\0';
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
695 current_frame->enable[i] = 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
696 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
697
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
698 safe_bcopy (current_frame->bufp + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
699 current_frame->bufp + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
700 (end - from) * sizeof current_frame->bufp[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
701
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
702 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
703 if (FRAME_X_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
704 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
705 safe_bcopy (current_frame->nruns + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
706 current_frame->nruns + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
707 (end - from) * sizeof current_frame->nruns[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
708
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
709 safe_bcopy (current_frame->face_list + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
710 current_frame->face_list + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
711 (end - from) * sizeof current_frame->face_list[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
712
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
713 safe_bcopy (current_frame->top_left_x + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
714 current_frame->top_left_x + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
715 (end - from) * sizeof current_frame->top_left_x[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
716
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
717 safe_bcopy (current_frame->top_left_y + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
718 current_frame->top_left_y + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
719 (end - from) * sizeof current_frame->top_left_y[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
720
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
721 safe_bcopy (current_frame->pix_width + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
722 current_frame->pix_width + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
723 (end - from) * sizeof current_frame->pix_width[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
724
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
725 safe_bcopy (current_frame->pix_height + from,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
726 current_frame->pix_height + from + amount,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
727 (end - from) * sizeof current_frame->pix_height[0]);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
728 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
729 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
730
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
731 update_end (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
732 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
733 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
734 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
735
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
736 /* After updating a window W that isn't the full frame wide,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
737 copy all the columns that W does not occupy
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
738 into the FRAME_DESIRED_GLYPHS (frame) from the FRAME_PHYS_GLYPHS (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
739 so that update_frame will not change those columns. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
740
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
741 preserve_other_columns (w)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
742 struct window *w;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
743 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
744 register int vpos;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
745 register struct frame_glyphs *current_frame, *desired_frame;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
746 register FRAME_PTR frame = XFRAME (w->frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
747 int start = XFASTINT (w->left);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
748 int end = XFASTINT (w->left) + XFASTINT (w->width);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
749 int bot = XFASTINT (w->top) + XFASTINT (w->height);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
750
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
751 current_frame = FRAME_CURRENT_GLYPHS (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
752 desired_frame = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
753
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
754 for (vpos = XFASTINT (w->top); vpos < bot; vpos++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
755 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
756 if (current_frame->enable[vpos] && desired_frame->enable[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
757 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
758 if (start > 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
759 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
760 int len;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
761
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
762 bcopy (current_frame->glyphs[vpos],
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
763 desired_frame->glyphs[vpos], start);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
764 len = min (start, current_frame->used[vpos]);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
765 if (desired_frame->used[vpos] < len)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
766 desired_frame->used[vpos] = len;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
767 }
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
768 if (current_frame->used[vpos] > end
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
769 && desired_frame->used[vpos] < current_frame->used[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
770 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
771 while (desired_frame->used[vpos] < end)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
772 desired_frame->glyphs[vpos][desired_frame->used[vpos]++]
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
773 = SPACEGLYPH;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
774 bcopy (current_frame->glyphs[vpos] + end,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
775 desired_frame->glyphs[vpos] + end,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
776 current_frame->used[vpos] - end);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
777 desired_frame->used[vpos] = current_frame->used[vpos];
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
778 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
779 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
780 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
781 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
782
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
783 #if 0
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
784
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
785 /* If window w does not need to be updated and isn't the full frame wide,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
786 copy all the columns that w does occupy
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
787 into the FRAME_DESIRED_LINES (frame) from the FRAME_PHYS_LINES (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
788 so that update_frame will not change those columns.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
789
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
790 Have not been able to figure out how to use this correctly. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
791
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
792 preserve_my_columns (w)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
793 struct window *w;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
794 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
795 register int vpos, fin;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
796 register struct frame_glyphs *l1, *l2;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
797 register FRAME_PTR frame = XFRAME (w->frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
798 int start = XFASTINT (w->left);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
799 int end = XFASTINT (w->left) + XFASTINT (w->width);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
800 int bot = XFASTINT (w->top) + XFASTINT (w->height);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
801
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
802 for (vpos = XFASTINT (w->top); vpos < bot; vpos++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
803 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
804 if ((l1 = FRAME_DESIRED_GLYPHS (frame)->glyphs[vpos + 1])
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
805 && (l2 = FRAME_PHYS_GLYPHS (frame)->glyphs[vpos + 1]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
806 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
807 if (l2->length > start && l1->length < l2->length)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
808 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
809 fin = l2->length;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
810 if (fin > end) fin = end;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
811 while (l1->length < start)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
812 l1->body[l1->length++] = ' ';
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
813 bcopy (l2->body + start, l1->body + start, fin - start);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
814 l1->length = fin;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
815 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
816 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
817 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
818 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
819
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
820 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
821
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
822 /* On discovering that the redisplay for a window was no good,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
823 cancel the columns of that window, so that when the window is
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
824 displayed over again get_display_line will not complain. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
825
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
826 cancel_my_columns (w)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
827 struct window *w;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
828 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
829 register int vpos;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
830 register struct frame_glyphs *desired_glyphs =
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
831 FRAME_DESIRED_GLYPHS (XFRAME (w->frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
832 register int start = XFASTINT (w->left);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
833 register int bot = XFASTINT (w->top) + XFASTINT (w->height);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
834
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
835 for (vpos = XFASTINT (w->top); vpos < bot; vpos++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
836 if (desired_glyphs->enable[vpos]
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
837 && desired_glyphs->used[vpos] >= start)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
838 desired_glyphs->used[vpos] = start;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
839 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
840
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
841 /* These functions try to perform directly and immediately on the frame
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
842 the necessary output for one change in the buffer.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
843 They may return 0 meaning nothing was done if anything is difficult,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
844 or 1 meaning the output was performed properly.
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
845 They assume that the frame was up to date before the buffer
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
846 change being displayed. THey make various other assumptions too;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
847 see command_loop_1 where these are called. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
848
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
849 int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
850 direct_output_for_insert (g)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
851 int g;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
852 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
853 register FRAME_PTR frame = selected_frame;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
854 register struct frame_glyphs *current_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
855 = FRAME_CURRENT_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
856
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
857 #ifndef COMPILER_REGISTER_BUG
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
858 register
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
859 #endif /* COMPILER_REGISTER_BUG */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
860 struct window *w = XWINDOW (selected_window);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
861 #ifndef COMPILER_REGISTER_BUG
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
862 register
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
863 #endif /* COMPILER_REGISTER_BUG */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
864 int hpos = FRAME_CURSOR_X (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
865 #ifndef COMPILER_REGISTER_BUG
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
866 register
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
867 #endif /* COMPILER_REGISTER_BUG */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
868 int vpos = FRAME_CURSOR_Y (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
869
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
870 /* Give up if about to continue line */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
871 if (hpos - XFASTINT (w->left) + 1 + 1 >= XFASTINT (w->width)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
872
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
873 /* Avoid losing if cursor is in invisible text off left margin */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
874 || (XINT (w->hscroll) && hpos == XFASTINT (w->left))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
875
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
876 /* Give up if cursor outside window (in minibuf, probably) */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
877 || FRAME_CURSOR_Y (frame) < XFASTINT (w->top)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
878 || FRAME_CURSOR_Y (frame) >= XFASTINT (w->top) + XFASTINT (w->height)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
879
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
880 /* Give up if cursor not really at FRAME_CURSOR_X, FRAME_CURSOR_Y */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
881 || !display_completed
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
882
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
883 /* Give up if buffer appears in two places. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
884 || buffer_shared > 1
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
885
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
886 /* Give up if w is minibuffer and a message is being displayed there */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
887 || (MINI_WINDOW_P (w) && echo_area_glyphs))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
888 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
889
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
890 current_frame->glyphs[vpos][hpos] = g;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
891 unchanged_modified = MODIFF;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
892 beg_unchanged = GPT - BEG;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
893 XFASTINT (w->last_point) = point;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
894 XFASTINT (w->last_point_x) = hpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
895 XFASTINT (w->last_modified) = MODIFF;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
896
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
897 reassert_line_highlight (0, vpos);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
898 write_glyphs (&current_frame->glyphs[vpos][hpos], 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
899 fflush (stdout);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
900 ++FRAME_CURSOR_X (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
901 if (hpos == current_frame->used[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
902 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
903 current_frame->used[vpos] = hpos + 1;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
904 current_frame->glyphs[vpos][hpos + 1] = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
905 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
906
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
907 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
908 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
909
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
910 int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
911 direct_output_forward_char (n)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
912 int n;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
913 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
914 register FRAME_PTR frame = selected_frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
915 register struct window *w = XWINDOW (selected_window);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
916
543
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
917 /* Avoid losing if cursor is in invisible text off left margin
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
918 or about to go off either side of window. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
919 if ((FRAME_CURSOR_X (frame) == XFASTINT (w->left)
543
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
920 && (XINT (w->hscroll) || n < 0))
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
921 || (n > 0
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
922 && (FRAME_CURSOR_X (frame) + 1
543
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
923 >= (XFASTINT (w->left) + XFASTINT (w->width)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
924 - (XFASTINT (w->width) < FRAME_WIDTH (frame))
543
937bccff8155 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 493
diff changeset
925 - 1))))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
926 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
927
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
928 FRAME_CURSOR_X (frame) += n;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
929 XFASTINT (w->last_point_x) = FRAME_CURSOR_X (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
930 XFASTINT (w->last_point) = point;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
931 cursor_to (FRAME_CURSOR_Y (frame), FRAME_CURSOR_X (frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
932 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
933 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
934 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
935
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
936 static void update_line ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
937
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
938 /* Update frame F based on the data in FRAME_DESIRED_GLYPHS.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
939 Value is nonzero if redisplay stopped due to pending input.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
940 FORCE nonzero means do not stop for pending input. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
941
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
942 int
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
943 update_frame (f, force, inhibit_hairy_id)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
944 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
945 int force;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
946 int inhibit_hairy_id;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
947 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
948 register struct frame_glyphs *current_frame = FRAME_CURRENT_GLYPHS (f);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
949 register struct frame_glyphs *desired_frame = FRAME_DESIRED_GLYPHS (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
950 register int i;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
951 int pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
952 int preempt_count = baud_rate / 2400 + 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
953 extern input_pending;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
954 #ifdef HAVE_X_WINDOWS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
955 register int downto, leftmost;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
956 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
957
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
958 if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
959
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
960 detect_input_pending ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
961 if (input_pending && !force)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
962 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
963 pause = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
964 goto do_pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
965 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
966
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
967 update_begin (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
968
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
969 if (!line_ins_del_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
970 inhibit_hairy_id = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
971
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
972 /* See if any of the desired lines are enabled; don't compute for
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
973 i/d line if just want cursor motion. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
974 for (i = 0; i < FRAME_HEIGHT (f); i++)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
975 if (desired_frame->enable[i])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
976 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
977
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
978 /* Try doing i/d line, if not yet inhibited. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
979 if (!inhibit_hairy_id && i < FRAME_HEIGHT (f))
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
980 force |= scrolling (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
981
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
982 /* Update the individual lines as needed. Do bottom line first. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
983
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
984 if (desired_frame->enable[FRAME_HEIGHT (f) - 1])
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
985 update_line (f, FRAME_HEIGHT (f) - 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
986
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
987 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
988 if (FRAME_X_P (f))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
989 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
990 leftmost = downto = f->display.x->internal_border_width;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
991 if (desired_frame->enable[0])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
992 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
993 current_frame->top_left_x[FRAME_HEIGHT (f) - 1] = leftmost;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
994 current_frame->top_left_y[FRAME_HEIGHT (f) - 1]
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
995 = PIXEL_HEIGHT (f) - f->display.x->internal_border_width
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
996 - LINE_HEIGHT(f, FRAME_HEIGHT (f) - 1);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
997 current_frame->top_left_x[0] = leftmost;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
998 current_frame->top_left_y[0] = downto;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
999 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1000 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1001 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1002
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1003 /* Now update the rest of the lines. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1004 for (i = 0; i < FRAME_HEIGHT (f) - 1 && (force || !input_pending); i++)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1005 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1006 if (desired_frame->enable[i])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1007 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1008 if (FRAME_TERMCAP_P (f))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1009 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1010 /* Flush out every so many lines.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1011 Also flush out if likely to have more than 1k buffered
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1012 otherwise. I'm told that some telnet connections get
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1013 really screwed by more than 1k output at once. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1014 int outq = PENDING_OUTPUT_COUNT (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1015 if (outq > 900
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1016 || (outq > 20 && ((i - 1) % preempt_count == 0)))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1017 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1018 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1019 if (preempt_count == 1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1020 {
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1021 #ifdef EMACS_OUTQSIZE
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1022 if (EMACS_OUTQSIZE (0, &outq) < 0)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1023 /* Probably not a tty. Ignore the error and reset
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1024 * the outq count. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1025 outq = PENDING_OUTPUT_COUNT (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1026 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1027 outq *= 10;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1028 sleep (outq / baud_rate);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1029 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1030 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1031 if ((i - 1) % preempt_count == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1032 detect_input_pending ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1033 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1034
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1035 update_line (f, i);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1036 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1037 if (FRAME_X_P (f))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1038 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1039 current_frame->top_left_y[i] = downto;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1040 current_frame->top_left_x[i] = leftmost;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1041 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1042 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1043 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1044
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1045 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1046 if (FRAME_X_P (f))
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1047 downto += LINE_HEIGHT(f, i);
732
a8d94735277e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 708
diff changeset
1048 #endif
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1049 }
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1050 pause = (i < FRAME_HEIGHT (f) - 1) ? i : 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1051
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1052 /* Now just clean up termcap drivers and set cursor, etc. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1053 if (!pause)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1054 {
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1055 if (cursor_in_echo_area)
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1056 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1057 if (f == selected_frame
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1058 && cursor_in_echo_area < 0)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1059 cursor_to (FRAME_HEIGHT (f) - 1, 0);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1060 else if (f == selected_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1061 && ! current_frame->enable[FRAME_HEIGHT (f) - 1])
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1062 cursor_to (FRAME_HEIGHT (f) - 1, 0);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1063 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1064 cursor_to (FRAME_HEIGHT (f) - 1,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1065 min (FRAME_WIDTH (f) - 1,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1066 current_frame->used[FRAME_HEIGHT (f) - 1]));
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1067 }
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1068 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1069 cursor_to (FRAME_CURSOR_Y (f), max (min (FRAME_CURSOR_X (f),
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1070 FRAME_WIDTH (f) - 1), 0));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1071 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1072
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1073 update_end (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1074
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1075 if (termscript)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1076 fflush (termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1077 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1078
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1079 /* Here if output is preempted because input is detected. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1080 do_pause:
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1081
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1082 if (FRAME_HEIGHT (f) == 0) abort (); /* Some bug zeros some core */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1083 display_completed = !pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1084
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1085 bzero (desired_frame->enable, FRAME_HEIGHT (f));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1086 return pause;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1087 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1088
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1089 /* Called when about to quit, to check for doing so
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1090 at an improper time. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1091
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1092 void
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1093 quit_error_check ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1094 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1095 if (FRAME_DESIRED_GLYPHS (selected_frame) == 0)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1096 return;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1097 if (FRAME_DESIRED_GLYPHS (selected_frame)->enable[0])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1098 abort ();
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1099 if (FRAME_DESIRED_GLYPHS (selected_frame)->enable[FRAME_HEIGHT (selected_frame) - 1])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1100 abort ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1101 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1102
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1103 /* Decide what insert/delete line to do, and do it */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1104
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1105 extern void scrolling_1 ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1106
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1107 scrolling (frame)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1108 FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1109 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1110 int unchanged_at_top, unchanged_at_bottom;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1111 int window_size;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1112 int changed_lines;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1113 int *old_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1114 int *new_hash = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1115 int *draw_cost = (int *) alloca (FRAME_HEIGHT (frame) * sizeof (int));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1116 register int i;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1117 int free_at_end_vpos = FRAME_HEIGHT (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1118 register struct frame_glyphs *current_frame = FRAME_CURRENT_GLYPHS (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1119 register struct frame_glyphs *desired_frame = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1120
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1121 /* Compute hash codes of all the lines.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1122 Also calculate number of changed lines,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1123 number of unchanged lines at the beginning,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1124 and number of unchanged lines at the end. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1125
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1126 changed_lines = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1127 unchanged_at_top = 0;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1128 unchanged_at_bottom = FRAME_HEIGHT (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1129 for (i = 0; i < FRAME_HEIGHT (frame); i++)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1130 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1131 /* Give up on this scrolling if some old lines are not enabled. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1132 if (!current_frame->enable[i])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1133 return 0;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1134 old_hash[i] = line_hash_code (current_frame, i);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1135 if (! desired_frame->enable[i])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1136 new_hash[i] = old_hash[i];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1137 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1138 new_hash[i] = line_hash_code (desired_frame, i);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1139
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1140 if (old_hash[i] != new_hash[i])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1141 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1142 changed_lines++;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1143 unchanged_at_bottom = FRAME_HEIGHT (frame) - i - 1;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1144 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1145 else if (i == unchanged_at_top)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1146 unchanged_at_top++;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1147 draw_cost[i] = line_draw_cost (desired_frame, i);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1148 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1149
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1150 /* If changed lines are few, don't allow preemption, don't scroll. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1151 if (changed_lines < baud_rate / 2400
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1152 || unchanged_at_bottom == FRAME_HEIGHT (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1153 return 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1154
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1155 window_size = (FRAME_HEIGHT (frame) - unchanged_at_top
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1156 - unchanged_at_bottom);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1157
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1158 if (scroll_region_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1159 free_at_end_vpos -= unchanged_at_bottom;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1160 else if (memory_below_frame)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1161 free_at_end_vpos = -1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1162
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1163 /* If large window, fast terminal and few lines in common between
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1164 current frame and desired frame, don't bother with i/d calc. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1165 if (window_size >= 18 && baud_rate > 2400
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1166 && (window_size >=
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1167 10 * scrolling_max_lines_saved (unchanged_at_top,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1168 FRAME_HEIGHT (frame) - unchanged_at_bottom,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1169 old_hash, new_hash, draw_cost)))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1170 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1171
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1172 scrolling_1 (frame, window_size, unchanged_at_top, unchanged_at_bottom,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1173 draw_cost + unchanged_at_top - 1,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1174 old_hash + unchanged_at_top - 1,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1175 new_hash + unchanged_at_top - 1,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1176 free_at_end_vpos - unchanged_at_top);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1177
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1178 return 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1179 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1180
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1181 /* Return the offset in its buffer of the character at location col, line
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1182 in the given window. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1183 int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1184 buffer_posn_from_coords (window, col, line)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1185 struct window *window;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1186 int col, line;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1187 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1188 int window_left = XFASTINT (window->left);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1189
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1190 /* The actual width of the window is window->width less one for the
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1191 DISP_CONTINUE_GLYPH, and less one if it's not the rightmost
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1192 window. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1193 int window_width = (XFASTINT (window->width) - 1
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1194 - (XFASTINT (window->width) + window_left
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1195 != FRAME_WIDTH (XFRAME (window->frame))));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1196
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1197 int startp = marker_position (window->start);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1198
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1199 /* Since compute_motion will only operate on the current buffer,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1200 we need to save the old one and restore it when we're done. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1201 struct buffer *old_current_buffer = current_buffer;
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1202 struct position *posn;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1203
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1204 current_buffer = XBUFFER (window->buffer);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1205
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1206 /* It would be nice if we could use FRAME_CURRENT_GLYPHS (XFRAME
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1207 (window->frame))->bufp to avoid scanning from the very top of
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1208 the window, but it isn't maintained correctly, and I'm not even
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1209 sure I will keep it. */
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1210 posn = compute_motion (startp, 0,
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1211 (window == XWINDOW (minibuf_window) && startp == 1
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1212 ? minibuf_prompt_width : 0),
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1213 ZV, line, col - window_left,
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1214 window_width, XINT (window->hscroll), 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1215
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1216 current_buffer = old_current_buffer;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1217
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1218 /* compute_motion considers frame points past the end of a line
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1219 to be *after* the newline, i.e. at the start of the next line.
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1220 This is reasonable, but not really what we want. So if the
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1221 result is on a line below LINE, back it up one character. */
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1222 if (posn->vpos > line)
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1223 return posn->bufpos - 1;
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1224 else
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1225 return posn->bufpos;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1226 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1227
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1228 static int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1229 count_blanks (r)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1230 register GLYPH *r;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1231 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1232 register GLYPH *p = r;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1233 while (*r++ == SPACEGLYPH);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1234 return r - p - 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1235 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1236
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1237 static int
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1238 count_match (str1, str2)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1239 GLYPH *str1, *str2;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1240 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1241 register GLYPH *p1 = str1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1242 register GLYPH *p2 = str2;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1243 while (*p1++ == *p2++);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1244 return p1 - str1 - 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1245 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1246
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1247 /* Char insertion/deletion cost vector, from term.c */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1248 extern int *char_ins_del_vector;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1249
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1250 #define char_ins_del_cost(f) (&char_ins_del_vector[FRAME_HEIGHT((f))])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1251
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1252 static void
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1253 update_line (frame, vpos)
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1254 register FRAME_PTR frame;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1255 int vpos;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1256 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1257 register GLYPH *obody, *nbody, *op1, *op2, *np1, *temp;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1258 int tem;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1259 int osp, nsp, begmatch, endmatch, olen, nlen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1260 int save;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1261 register struct frame_glyphs *current_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1262 = FRAME_CURRENT_GLYPHS (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1263 register struct frame_glyphs *desired_frame
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1264 = FRAME_DESIRED_GLYPHS (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1265
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1266 if (desired_frame->highlight[vpos]
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1267 != (current_frame->enable[vpos] && current_frame->highlight[vpos]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1268 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1269 change_line_highlight (desired_frame->highlight[vpos], vpos,
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1270 (current_frame->enable[vpos] ?
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1271 current_frame->used[vpos] : 0));
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1272 current_frame->enable[vpos] = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1273 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1274 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1275 reassert_line_highlight (desired_frame->highlight[vpos], vpos);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1276
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1277 if (! current_frame->enable[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1278 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1279 olen = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1280 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1281 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1282 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1283 obody = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1284 olen = current_frame->used[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1285 if (! current_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1286 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1287 if (!must_write_spaces)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1288 while (obody[olen - 1] == SPACEGLYPH && olen > 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1289 olen--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1290 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1291 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1292 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1293 /* For an inverse-video line, remember we gave it
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1294 spaces all the way to the frame edge
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1295 so that the reverse video extends all the way across. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1296
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1297 while (olen < FRAME_WIDTH (frame) - 1)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1298 obody[olen++] = SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1299 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1300 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1301
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1302 /* One way or another, this will enable the line being updated. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1303 current_frame->enable[vpos] = 1;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1304 current_frame->used[vpos] = desired_frame->used[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1305 current_frame->highlight[vpos] = desired_frame->highlight[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1306 current_frame->bufp[vpos] = desired_frame->bufp[vpos];
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1307
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1308 #ifdef HAVE_X_WINDOWS
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1309 if (FRAME_X_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1310 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1311 current_frame->pix_width[vpos]
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1312 = current_frame->used[vpos]
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1313 * FONT_WIDTH (frame->display.x->font);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1314 current_frame->pix_height[vpos]
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1315 = FONT_HEIGHT (frame->display.x->font);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1316 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1317 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1318
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1319 if (!desired_frame->enable[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1320 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1321 nlen = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1322 goto just_erase;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1323 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1324
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1325 nbody = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1326 nlen = desired_frame->used[vpos];
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1327
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1328 /* Pretend trailing spaces are not there at all,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1329 unless for one reason or another we must write all spaces. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1330 if (! desired_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1331 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1332 if (!must_write_spaces)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1333 /* We know that the previous character byte contains 0. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1334 while (nbody[nlen - 1] == SPACEGLYPH)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1335 nlen--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1336 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1337 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1338 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1339 /* For an inverse-video line, give it extra trailing spaces
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1340 all the way to the frame edge
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1341 so that the reverse video extends all the way across. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1342
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1343 while (nlen < FRAME_WIDTH (frame) - 1)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1344 nbody[nlen++] = SPACEGLYPH;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1345 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1346
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1347 /* If there's no i/d char, quickly do the best we can without it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1348 if (!char_ins_del_ok)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1349 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1350 int i,j;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1351
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1352 for (i = 0; i < nlen; i++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1353 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1354 if (i >= olen || nbody[i] != obody[i]) /* A non-matching char. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1355 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1356 cursor_to (vpos, i);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1357 for (j = 1; (i + j < nlen &&
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1358 (i + j >= olen || nbody[i+j] != obody[i+j]));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1359 j++);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1360
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1361 /* Output this run of non-matching chars. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1362 write_glyphs (nbody + i, j);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1363 i += j - 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1364
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1365 /* Now find the next non-match. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1366 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1367 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1368
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1369 /* Clear the rest of the line, or the non-clear part of it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1370 if (olen > nlen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1371 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1372 cursor_to (vpos, nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1373 clear_end_of_line (olen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1374 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1375
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1376 /* Exchange contents between current_frame and new_frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1377 temp = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1378 desired_frame->glyphs[vpos] = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1379 current_frame->glyphs[vpos] = temp;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1380
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1381 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1382 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1383
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1384 if (!olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1385 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1386 nsp = (must_write_spaces || desired_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1387 ? 0 : count_blanks (nbody);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1388 if (nlen > nsp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1389 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1390 cursor_to (vpos, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1391 write_glyphs (nbody + nsp, nlen - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1392 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1393
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1394 /* Exchange contents between current_frame and new_frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1395 temp = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1396 desired_frame->glyphs[vpos] = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1397 current_frame->glyphs[vpos] = temp;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1398
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1399 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1400 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1401
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1402 obody[olen] = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1403 save = nbody[nlen];
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1404 nbody[nlen] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1405
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1406 /* Compute number of leading blanks in old and new contents. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1407 osp = count_blanks (obody);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1408 if (!desired_frame->highlight[vpos])
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1409 nsp = count_blanks (nbody);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1410 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1411 nsp = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1412
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1413 /* Compute number of matching chars starting with first nonblank. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1414 begmatch = count_match (obody + osp, nbody + nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1415
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1416 /* Spaces in new match implicit space past the end of old. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1417 /* A bug causing this to be a no-op was fixed in 18.29. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1418 if (!must_write_spaces && osp + begmatch == olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1419 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1420 np1 = nbody + nsp;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1421 while (np1[begmatch] == SPACEGLYPH)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1422 begmatch++;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1423 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1424
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1425 /* Avoid doing insert/delete char
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1426 just cause number of leading spaces differs
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1427 when the following text does not match. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1428 if (begmatch == 0 && osp != nsp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1429 osp = nsp = min (osp, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1430
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1431 /* Find matching characters at end of line */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1432 op1 = obody + olen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1433 np1 = nbody + nlen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1434 op2 = op1 + begmatch - min (olen - osp, nlen - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1435 while (op1 > op2 && op1[-1] == np1[-1])
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1436 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1437 op1--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1438 np1--;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1439 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1440 endmatch = obody + olen - op1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1441
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1442 /* Put correct value back in nbody[nlen].
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1443 This is important because direct_output_for_insert
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1444 can write into the line at a later point.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1445 If this screws up the zero at the end of the line, re-establish it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1446 nbody[nlen] = save;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1447 obody[olen] = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1448
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1449 /* tem gets the distance to insert or delete.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1450 endmatch is how many characters we save by doing so.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1451 Is it worth it? */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1452
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1453 tem = (nlen - nsp) - (olen - osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1454 if (endmatch && tem
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1455 && (!char_ins_del_ok || endmatch <= char_ins_del_cost (frame)[tem]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1456 endmatch = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1457
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1458 /* nsp - osp is the distance to insert or delete.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1459 If that is nonzero, begmatch is known to be nonzero also.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1460 begmatch + endmatch is how much we save by doing the ins/del.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1461 Is it worth it? */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1462
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1463 if (nsp != osp
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1464 && (!char_ins_del_ok
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1465 || begmatch + endmatch <= char_ins_del_cost (frame)[nsp - osp]))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1466 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1467 begmatch = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1468 endmatch = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1469 osp = nsp = min (osp, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1470 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1471
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1472 /* Now go through the line, inserting, writing and
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1473 deleting as appropriate. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1474
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1475 if (osp > nsp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1476 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1477 cursor_to (vpos, nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1478 delete_glyphs (osp - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1479 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1480 else if (nsp > osp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1481 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1482 /* If going to delete chars later in line
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1483 and insert earlier in the line,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1484 must delete first to avoid losing data in the insert */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1485 if (endmatch && nlen < olen + nsp - osp)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1486 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1487 cursor_to (vpos, nlen - endmatch + osp - nsp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1488 delete_glyphs (olen + nsp - osp - nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1489 olen = nlen - (nsp - osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1490 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1491 cursor_to (vpos, osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1492 insert_glyphs ((char *)0, nsp - osp);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1493 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1494 olen += nsp - osp;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1495
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1496 tem = nsp + begmatch + endmatch;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1497 if (nlen != tem || olen != tem)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1498 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1499 cursor_to (vpos, nsp + begmatch);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1500 if (!endmatch || nlen == olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1501 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1502 /* If new text being written reaches right margin,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1503 there is no need to do clear-to-eol at the end.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1504 (and it would not be safe, since cursor is not
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1505 going to be "at the margin" after the text is done) */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1506 if (nlen == FRAME_WIDTH (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1507 olen = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1508 write_glyphs (nbody + nsp + begmatch, nlen - tem);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1509
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1510 #ifdef obsolete
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1511
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1512 /* the following code loses disastrously if tem == nlen.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1513 Rather than trying to fix that case, I am trying the simpler
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1514 solution found above. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1515
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1516 /* If the text reaches to the right margin,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1517 it will lose one way or another (depending on AutoWrap)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1518 to clear to end of line after outputting all the text.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1519 So pause with one character to go and clear the line then. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1520 if (nlen == FRAME_WIDTH (frame) && fast_clear_end_of_line && olen > nlen)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1521 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1522 /* endmatch must be zero, and tem must equal nsp + begmatch */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1523 write_glyphs (nbody + tem, nlen - tem - 1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1524 clear_end_of_line (olen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1525 olen = 0; /* Don't let it be cleared again later */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1526 write_glyphs (nbody + nlen - 1, 1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1527 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1528 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1529 write_glyphs (nbody + nsp + begmatch, nlen - tem);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1530 #endif /* OBSOLETE */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1531
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1532 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1533 else if (nlen > olen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1534 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1535 write_glyphs (nbody + nsp + begmatch, olen - tem);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1536 insert_glyphs (nbody + nsp + begmatch + olen - tem, nlen - olen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1537 olen = nlen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1538 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1539 else if (olen > nlen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1540 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1541 write_glyphs (nbody + nsp + begmatch, nlen - tem);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1542 delete_glyphs (olen - nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1543 olen = nlen;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1544 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1545 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1546
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1547 just_erase:
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1548 /* If any unerased characters remain after the new line, erase them. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1549 if (olen > nlen)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1550 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1551 cursor_to (vpos, nlen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1552 clear_end_of_line (olen);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1553 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1554
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1555 /* Exchange contents between current_frame and new_frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1556 temp = desired_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1557 desired_frame->glyphs[vpos] = current_frame->glyphs[vpos];
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1558 current_frame->glyphs[vpos] = temp;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1559 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1560
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1561 DEFUN ("open-termscript", Fopen_termscript, Sopen_termscript,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1562 1, 1, "FOpen termscript file: ",
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1563 "Start writing all terminal output to FILE as well as the terminal.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1564 FILE = nil means just close any termscript file currently open.")
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1565 (file)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1566 Lisp_Object file;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1567 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1568 if (termscript != 0) fclose (termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1569 termscript = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1570
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1571 if (! NILP (file))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1572 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1573 file = Fexpand_file_name (file, Qnil);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1574 termscript = fopen (XSTRING (file)->data, "w");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1575 if (termscript == 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1576 report_file_error ("Opening termscript", Fcons (file, Qnil));
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1577 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1578 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1579 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1580
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1581
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1582 #ifdef SIGWINCH
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1583 SIGTYPE
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1584 window_change_signal ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1585 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1586 int width, height;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1587 extern int errno;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1588 int old_errno = errno;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1589
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1590 get_frame_size (&width, &height);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1591
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1592 /* The frame size change obviously applies to a termcap-controlled
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1593 frame. Find such a frame in the list, and assume it's the only
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1594 one (since the redisplay code always writes to stdout, not a
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1595 FILE * specified in the frame structure). Record the new size,
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1596 but don't reallocate the data structures now. Let that be done
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1597 later outside of the signal handler. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1598
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1599 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1600 Lisp_Object tail;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1601 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1602
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1603 FOR_EACH_FRAME (tail, f)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1604 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1605 if (FRAME_TERMCAP_P (f))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1606 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1607 change_frame_size (f, height, width, 0, 1);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1608 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1609 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1610 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1611 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1612
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1613 signal (SIGWINCH, window_change_signal);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1614 errno = old_errno;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1615 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1616 #endif /* SIGWINCH */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1617
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1618
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1619 /* Do any change in frame size that was requested by a signal. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1620
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1621 do_pending_window_change ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1622 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1623 /* If window_change_signal should have run before, run it now. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1624 while (delayed_size_change)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1625 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1626 Lisp_Object tail;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1627 FRAME_PTR f;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1628
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1629 delayed_size_change = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1630
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1631 FOR_EACH_FRAME (tail, f)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1632 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1633 int height = FRAME_NEW_HEIGHT (f);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1634 int width = FRAME_NEW_WIDTH (f);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1635
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1636 FRAME_NEW_HEIGHT (f) = 0;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1637 FRAME_NEW_WIDTH (f) = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1638
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1639 if (height != 0)
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1640 change_frame_size (f, height, width, 0, 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1641 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1642 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1643 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1644
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1645
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1646 /* Change the frame height and/or width. Values may be given as zero to
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1647 indicate no change is to take place.
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1648
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1649 If DELAY is non-zero, then assume we're being called from a signal
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1650 handler, and queue the change for later - perhaps the next
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1651 redisplay. Since this tries to resize windows, we can't call it
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1652 from a signal handler. */
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1653
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1654 change_frame_size (frame, newheight, newwidth, pretend, delay)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1655 register FRAME_PTR frame;
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1656 int newheight, newwidth, pretend;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1657 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1658 /* If we can't deal with the change now, queue it for later. */
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1659 if (delay)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1660 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1661 FRAME_NEW_HEIGHT (frame) = newheight;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1662 FRAME_NEW_WIDTH (frame) = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1663 delayed_size_change = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1664 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1665 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1666
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1667 /* This size-change overrides any pending one for this frame. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1668 FRAME_NEW_HEIGHT (frame) = 0;
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1669 FRAME_NEW_WIDTH (frame) = 0;
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1670
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1671 /* If an arguments is zero, set it to the current value. */
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1672 newheight || (newheight = FRAME_HEIGHT (frame));
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1673 newwidth || (newwidth = FRAME_WIDTH (frame));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1674
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1675 /* Round up to the smallest acceptable size. */
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1676 check_frame_size (frame, &newheight, &newwidth);
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1677
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1678 /* If we're not changing the frame size, quit now. */
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1679 if (newheight == FRAME_HEIGHT (frame)
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1680 && newwidth == FRAME_WIDTH (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1681 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1682
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1683 if (newheight != FRAME_HEIGHT (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1684 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1685 if (FRAME_HAS_MINIBUF_P (frame)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1686 && ! FRAME_MINIBUF_ONLY_P (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1687 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1688 /* Frame has both root and minibuffer. */
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1689 set_window_height (FRAME_ROOT_WINDOW (frame),
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1690 newheight - 1, 0);
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1691 XFASTINT (XWINDOW (FRAME_MINIBUF_WINDOW (frame))->top)
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1692 = newheight - 1;
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1693 set_window_height (FRAME_MINIBUF_WINDOW (frame), 1, 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1694 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1695 else
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1696 /* Frame has just one top-level window. */
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1697 set_window_height (FRAME_ROOT_WINDOW (frame), newheight, 0);
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1698
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1699 if (FRAME_TERMCAP_P (frame) && !pretend)
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1700 FrameRows = newheight;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1701
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1702 #if 0
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1703 if (frame->output_method == output_termcap)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1704 {
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1705 frame_height = newheight;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1706 if (!pretend)
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1707 FrameRows = newheight;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1708 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1709 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1710 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1711
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1712 if (newwidth != FRAME_WIDTH (frame))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1713 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1714 set_window_width (FRAME_ROOT_WINDOW (frame), newwidth, 0);
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1715 if (FRAME_HAS_MINIBUF_P (frame))
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1716 set_window_width (FRAME_MINIBUF_WINDOW (frame), newwidth, 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1717
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1718 if (FRAME_TERMCAP_P (frame) && !pretend)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1719 FrameCols = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1720 #if 0
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1721 if (frame->output_method == output_termcap)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1722 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1723 frame_width = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1724 if (!pretend)
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1725 FrameCols = newwidth;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1726 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1727 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1728 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1729
960
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1730 FRAME_HEIGHT (frame) = newheight;
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1731 FRAME_WIDTH (frame) = newwidth;
17986889d3b6 * dispnew.c (Fredraw_frame): Call clear_frame_records before
Jim Blandy <jimb@redhat.com>
parents: 764
diff changeset
1732
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1733 remake_frame_glyphs (frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
1734 calculate_costs (frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1735 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1736
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1737 DEFUN ("send-string-to-terminal", Fsend_string_to_terminal,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1738 Ssend_string_to_terminal, 1, 1, 0,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1739 "Send STRING to the terminal without alteration.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1740 Control characters in STRING will have terminal-dependent effects.")
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1741 (str)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1742 Lisp_Object str;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1743 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1744 CHECK_STRING (str, 0);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1745 fwrite (XSTRING (str)->data, 1, XSTRING (str)->size, stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1746 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1747 if (termscript)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1748 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1749 fwrite (XSTRING (str)->data, 1, XSTRING (str)->size, termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1750 fflush (termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1751 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1752 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1753 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1754
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1755 DEFUN ("ding", Fding, Sding, 0, 1, 0,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1756 "Beep, or flash the screen.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1757 Also, unless an argument is given,\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1758 terminate any keyboard macro currently executing.")
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1759 (arg)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1760 Lisp_Object arg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1761 {
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1762 if (!NILP (arg))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1763 {
649
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
1764 if (noninteractive)
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
1765 putchar (07);
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
1766 else
61deba7b73b6 *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 587
diff changeset
1767 ring_bell ();
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1768 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1769 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1770 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1771 bitch_at_user ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1772
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1773 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1774 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1775
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1776 bitch_at_user ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1777 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1778 if (noninteractive)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1779 putchar (07);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1780 else if (!INTERACTIVE) /* Stop executing a keyboard macro. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1781 error ("Keyboard macro terminated by a command ringing the bell");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1782 else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1783 ring_bell ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1784 fflush (stdout);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1785 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1786
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1787 DEFUN ("sleep-for", Fsleep_for, Ssleep_for, 1, 2, 0,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1788 "Pause, without updating display, for ARG seconds.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1789 Optional second arg non-nil means ARG is measured in milliseconds.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1790 \(Not all operating systems support milliseconds.)")
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1791 (arg, millisec)
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1792 Lisp_Object arg, millisec;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1793 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1794 int usec = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1795 int sec;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1796
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1797 CHECK_NUMBER (arg, 0);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1798 sec = XINT (arg);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1799 if (sec <= 0)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1800 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1801
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1802 if (!NILP (millisec))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1803 {
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1804 #ifndef EMACS_HAS_USECS
687
e2b747dd6a6e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
1805 error ("millisecond `sleep-for' not supported on %s", SYSTEM_TYPE);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1806 #else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1807 usec = sec % 1000 * 1000;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1808 sec /= 1000;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1809 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1810 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1811
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1812 {
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1813 Lisp_Object zero;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1814
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1815 XFASTINT (zero) = 0;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1816 wait_reading_process_input (sec, usec, zero, 0);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1817 }
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1818
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1819 #if 0 /* No wait_reading_process_input */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1820 immediate_quit = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1821 QUIT;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1822
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1823 #ifdef VMS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1824 sys_sleep (sec);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1825 #else /* not VMS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1826 /* The reason this is done this way
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1827 (rather than defined (H_S) && defined (H_T))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1828 is because the VMS preprocessor doesn't grok `defined' */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1829 #ifdef HAVE_SELECT
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1830 EMACS_GET_TIME (end_time);
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1831 EMACS_SET_SECS_USECS (timeout, sec, usec);
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1832 EMACS_ADD_TIME (end_time, end_time, timeout);
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1833
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1834 while (1)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1835 {
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1836 EMACS_GET_TIME (timeout);
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1837 EMACS_SUB_TIME (timeout, end_time, timeout);
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1838 if (EMACS_TIME_NEG_P (timeout)
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1839 || !select (1, 0, 0, 0, &timeout))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1840 break;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1841 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1842 #else /* not HAVE_SELECT */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1843 sleep (sec);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1844 #endif /* HAVE_SELECT */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1845 #endif /* not VMS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1846
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1847 immediate_quit = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1848 #endif /* no subprocesses */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1849
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1850 return Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1851 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1852
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1853 /* This is just like wait_reading_process_input, except that
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1854 it does the redisplay.
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1855
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1856 It's also just like Fsit_for, except that it can be used for
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1857 waiting for input as well. */
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1858
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1859 Lisp_Object
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1860 sit_for (sec, usec, reading, display)
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1861 int sec, usec, reading, display;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1862 {
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1863 Lisp_Object read_kbd;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1864
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1865 if (detect_input_pending ())
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1866 return Qnil;
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1867
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1868 if (display)
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1869 redisplay_preserve_echo_area ();
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1870
673
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
1871 if (sec == 0 && usec == 0)
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
1872 return Qt;
6217fa6e2cab *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 650
diff changeset
1873
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1874 #ifdef SIGIO
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1875 gobble_input ();
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1876 #endif
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1877
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1878 XSET (read_kbd, Lisp_Int, reading ? -1 : 1);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1879 wait_reading_process_input (sec, usec, read_kbd, display);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1880
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1881
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1882 #if 0 /* No wait_reading_process_input available. */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1883 immediate_quit = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1884 QUIT;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1885
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1886 waitchannels = 1;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1887 #ifdef VMS
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1888 input_wait_timeout (XINT (arg));
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1889 #else /* not VMS */
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1890 #ifndef HAVE_TIMEVAL
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1891 timeout_sec = sec;
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1892 select (1, &waitchannels, 0, 0, &timeout_sec);
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1893 #else /* HAVE_TIMEVAL */
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1894 timeout.tv_sec = sec;
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1895 timeout.tv_usec = usec;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1896 select (1, &waitchannels, 0, 0, &timeout);
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1897 #endif /* HAVE_TIMEVAL */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1898 #endif /* not VMS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1899
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1900 immediate_quit = 0;
587
1c2d1836941a *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 554
diff changeset
1901 #endif
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1902
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1903 return detect_input_pending () ? Qnil : Qt;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1904 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1905
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1906 DEFUN ("sit-for", Fsit_for, Ssit_for, 1, 3, 0,
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1907 "Perform redisplay, then wait for ARG seconds or until input is available.\n\
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1908 Optional second arg non-nil means ARG counts in milliseconds.\n\
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1909 Optional third arg non-nil means don't redisplay, just wait for input.\n\
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1910 Redisplay is preempted as always if input arrives, and does not happen\n\
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1911 if input is available before it starts.\n\
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1912 Value is t if waited the full time with no input arriving.")
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1913 (arg, millisec, nodisp)
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1914 Lisp_Object arg, millisec, nodisp;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1915 {
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1916 int usec = 0;
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1917 int sec;
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1918
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1919 CHECK_NUMBER (arg, 0);
708
030fb4635335 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 687
diff changeset
1920 sec = XINT (arg);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1921
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1922 if (!NILP (millisec))
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1923 {
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1924 #ifndef EMACS_HAS_USECS
687
e2b747dd6a6e *** empty log message ***
Richard M. Stallman <rms@gnu.org>
parents: 673
diff changeset
1925 error ("millisecond `sit-for' not supported on %s", SYSTEM_TYPE);
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1926 #else
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1927 usec = (sec % 1000) * 1000;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1928 sec /= 1000;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1929 #endif
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1930 }
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1931
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1932 return sit_for (sec, usec, 0, NILP (nodisp));
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1933 }
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1934
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1935 DEFUN ("sleep-for-millisecs", Fsleep_for_millisecs, Ssleep_for_millisecs,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1936 1, 1, 0,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1937 "Pause, without updating display, for ARG milliseconds.")
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1938 (arg)
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1939 Lisp_Object arg;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1940 {
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1941 Lisp_Object zero;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1942
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1943 #ifndef EMACS_HAS_USECS
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1944 error ("sleep-for-millisecs not supported on %s", SYSTEM_TYPE);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1945 #else
650
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1946 CHECK_NUMBER (arg, 0);
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1947
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1948 XFASTINT (zero) = 0;
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1949 wait_reading_process_input (XINT (arg) / 1000, XINT (arg) % 1000 * 1000,
39f0e62a8511 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 649
diff changeset
1950 zero, 0);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1951 return Qnil;
554
e14686fb979e *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 543
diff changeset
1952 #endif /* EMACS_HAS_USECS */
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1953 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1954
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1955 char *terminal_type;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1956
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1957 /* Initialization done when Emacs fork is started, before doing stty. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1958 /* Determine terminal type and set terminal_driver */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1959 /* Then invoke its decoding routine to set up variables
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1960 in the terminal package */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1961
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1962 init_display ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1963 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1964 #ifdef HAVE_X_WINDOWS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1965 extern int display_arg;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1966 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1967
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1968 meta_key = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1969 inverse_video = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1970 cursor_in_echo_area = 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1971 terminal_type = (char *) 0;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1972
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1973 /* If the DISPLAY environment variable is set, try to use X, and
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1974 die with an error message if that doesn't work. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1975
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1976 /* Check if we're using a window system here before trying to
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1977 initialize the terminal. If we check the terminal first,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1978
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1979 If someone has indicated that they want
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1980 to use a window system, we shouldn't bother initializing the
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1981 terminal. This is especially important when the terminal is so
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1982 dumb that emacs gives up before and doesn't bother using the window
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1983 system. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1984
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1985 #ifdef HAVE_X_WINDOWS
493
8b101799ff37 *** empty log message ***
Jim Blandy <jimb@redhat.com>
parents: 451
diff changeset
1986 if (!inhibit_window_system && (display_arg || getenv ("DISPLAY")))
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1987 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1988 Vwindow_system = intern ("x");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1989 #ifdef HAVE_X11
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1990 Vwindow_system_version = make_number (11);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1991 #else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1992 Vwindow_system_version = make_number (10);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1993 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1994 return;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1995 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1996 #endif /* HAVE_X_WINDOWS */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1997
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1998 /* If no window system has been specified, try to use the terminal. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
1999 if (! isatty (0))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2000 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2001 fprintf (stderr, "emacs: standard input is not a tty\n");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2002 exit (1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2003 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2004
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2005 /* Look at the TERM variable */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2006 terminal_type = (char *) getenv ("TERM");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2007 if (!terminal_type)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2008 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2009 #ifdef VMS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2010 fprintf (stderr, "Please specify your terminal type.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2011 For types defined in VMS, use set term /device=TYPE.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2012 For types not defined in VMS, use define emacs_term \"TYPE\".\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2013 \(The quotation marks are necessary since terminal types are lower case.)\n");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2014 #else
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2015 fprintf (stderr, "Please set the environment variable TERM; see tset(1).\n");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2016 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2017 exit (1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2018 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2019
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2020 #ifdef VMS
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2021 /* VMS DCL tends to upcase things, so downcase term type.
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2022 Hardly any uppercase letters in terminal types; should be none. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2023 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2024 char *new = (char *) xmalloc (strlen (terminal_type) + 1);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2025 char *p;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2026
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2027 strcpy (new, terminal_type);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2028
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2029 for (p = new; *p; p++)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2030 if (isupper (*p))
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2031 *p = tolower (*p);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2032
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2033 terminal_type = new;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2034 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2035 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2036
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2037 term_init (terminal_type);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2038
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2039 remake_frame_glyphs (selected_frame);
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2040 calculate_costs (selected_frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2041
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2042 /* X and Y coordinates of the cursor between updates. */
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2043 FRAME_CURSOR_X (selected_frame) = 0;
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2044 FRAME_CURSOR_Y (selected_frame) = 0;
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2045
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2046 #ifdef SIGWINCH
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2047 #ifndef CANNOT_DUMP
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2048 if (initialized)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2049 #endif /* CANNOT_DUMP */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2050 signal (SIGWINCH, window_change_signal);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2051 #endif /* SIGWINCH */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2052 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2053
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2054 syms_of_display ()
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2055 {
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2056 #ifdef MULTI_FRAME
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2057 defsubr (&Sredraw_frame);
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2058 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2059 defsubr (&Sredraw_display);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2060 defsubr (&Sopen_termscript);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2061 defsubr (&Sding);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2062 defsubr (&Ssit_for);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2063 defsubr (&Ssleep_for);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2064 defsubr (&Ssend_string_to_terminal);
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2065
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2066 DEFVAR_INT ("baud-rate", &baud_rate,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2067 "The output baud rate of the terminal.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2068 On most systems, changing this value will affect the amount of padding\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2069 and the other strategic decisions made during redisplay.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2070 DEFVAR_BOOL ("inverse-video", &inverse_video,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2071 "*Non-nil means invert the entire frame display.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2072 This means everything is in inverse video which otherwise would not be.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2073 DEFVAR_BOOL ("visible-bell", &visible_bell,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2074 "*Non-nil means try to flash the frame to represent a bell.");
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2075 DEFVAR_BOOL ("no-redraw-on-reenter", &no_redraw_on_reenter,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2076 "*Non-nil means no need to redraw entire frame after suspending.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2077 A non-nil value is useful if the terminal can automatically preserve\n\
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2078 Emacs's frame display when you reenter Emacs.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2079 It is up to you to set this variable if your terminal can do that.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2080 DEFVAR_LISP ("window-system", &Vwindow_system,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2081 "A symbol naming the window-system under which Emacs is running\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2082 \(such as `x'), or nil if emacs is running on an ordinary terminal.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2083 DEFVAR_LISP ("window-system-version", &Vwindow_system_version,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2084 "The version number of the window system in use.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2085 For X windows, this is 10 or 11.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2086 DEFVAR_BOOL ("cursor-in-echo-area", &cursor_in_echo_area,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2087 "Non-nil means put cursor in minibuffer, at end of any message there.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2088 DEFVAR_LISP ("glyph-table", &Vglyph_table,
764
bb24f1180bb6 entered into RCS
Jim Blandy <jimb@redhat.com>
parents: 732
diff changeset
2089 "Table defining how to output a glyph code to the frame.\n\
314
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2090 If not nil, this is a vector indexed by glyph code to define the glyph.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2091 Each element can be:\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2092 integer: a glyph code which this glyph is an alias for.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2093 string: output this glyph using that string (not impl. in X windows).\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2094 nil: this glyph mod 256 is char code to output,\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2095 and this glyph / 256 is face code for X windows (see `x-set-face').");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2096 Vglyph_table = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2097
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2098 DEFVAR_LISP ("standard-display-table", &Vstandard_display_table,
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2099 "Display table to use for buffers that specify none.\n\
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2100 See `buffer-display-table' for more information.");
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2101 Vstandard_display_table = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2102
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2103 /* Initialize `window-system', unless init_display already decided it. */
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2104 #ifdef CANNOT_DUMP
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2105 if (noninteractive)
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2106 #endif
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2107 {
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2108 Vwindow_system = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2109 Vwindow_system_version = Qnil;
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2110 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2111 }
36a905212ceb Initial revision
Jim Blandy <jimb@redhat.com>
parents:
diff changeset
2112