annotate src/dispnew.c @ 4413:5a00cec8e9b0

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