Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Newer
Older
100644 476 lines (409 sloc) 13.017 kB
254f294 entered into RCS
Jim Blandy authored
1 /* Cursor motion subroutines for GNU Emacs.
6da7885 @rgmorris Update copyright for years from Emacs 21 to present (mainly adding
rgmorris authored
2 Copyright (C) 1985, 1995, 2001, 2002, 2003, 2004,
72fadaa @rgmorris Add 2012 to FSF copyright years for Emacs files (do not merge to trunk)
rgmorris authored
3 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 Free Software Foundation, Inc.
254f294 entered into RCS
Jim Blandy authored
4 based primarily on public domain code written by Chris Torek
5
6 This file is part of GNU Emacs.
7
9611ff6 @rgmorris Switch to recommended form of GPLv3 permissions notice.
rgmorris authored
8 GNU Emacs is free software: you can redistribute it and/or modify
254f294 entered into RCS
Jim Blandy authored
9 it under the terms of the GNU General Public License as published by
9611ff6 @rgmorris Switch to recommended form of GPLv3 permissions notice.
rgmorris authored
10 the Free Software Foundation, either version 3 of the License, or
11 (at your option) any later version.
254f294 entered into RCS
Jim Blandy authored
12
13 GNU Emacs is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
17
18 You should have received a copy of the GNU General Public License
9611ff6 @rgmorris Switch to recommended form of GPLv3 permissions notice.
rgmorris authored
19 along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>. */
254f294 entered into RCS
Jim Blandy authored
20
21
db4d1df Include <config.h> instead of "config.h".
Roland McGrath authored
22 #include <config.h>
254f294 entered into RCS
Jim Blandy authored
23 #include <stdio.h>
59165f6 * alloc.c: Do not define struct catchtag.
Dan Nicolaescu authored
24 #include <setjmp.h>
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
25
26 #include "lisp.h"
27 #include "frame.h"
254f294 entered into RCS
Jim Blandy authored
28 #include "cm.h"
29 #include "termhooks.h"
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
30 #include "termchar.h"
31
254f294 entered into RCS
Jim Blandy authored
32
50291db Don't try to include termcap.h; see comment there.
Gerd Moellmann authored
33 /* For now, don't try to include termcap.h. On some systems,
34 configure finds a non-standard termcap.h that the main build
35 won't find. */
36
37 #if defined HAVE_TERMCAP_H && 0
e2d2ac8 (toplevel) [HAVE_TERMCAP_H]: Include termcap.h.
Gerd Moellmann authored
38 #include <termcap.h>
11008cb @loveshack [HAVE_TERMCAP_H]: Include <termcap.h>.
loveshack authored
39 #else
40 extern void tputs P_ ((const char *, int, int (*)(int)));
41 extern char *tgoto P_ ((const char *, int, int));
e2d2ac8 (toplevel) [HAVE_TERMCAP_H]: Include termcap.h.
Gerd Moellmann authored
42 #endif
43
254f294 entered into RCS
Jim Blandy authored
44 #define BIG 9999 /* 9999 good on VAXen. For 16 bit machines
45 use about 2000.... */
46
47 extern char *BC, *UP;
48
49 int cost; /* sums up costs */
50
51 /* ARGSUSED */
127fe5c Fix -Wimplicit warnings.
Andreas Schwab authored
52 int
254f294 entered into RCS
Jim Blandy authored
53 evalcost (c)
54 char c;
55 {
56 cost++;
465b49b @Corg-kun (evalcost, cmputc): They now return their arguments.
Corg-kun authored
57 return c;
254f294 entered into RCS
Jim Blandy authored
58 }
59
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
60 /* The terminal to use for low-level output. */
d3a190f Separate frame-local, tty-dependent parameters from tty-local paramet…
Karoly Lorentey authored
61 struct tty_display_info *current_tty;
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
62
127fe5c Fix -Wimplicit warnings.
Andreas Schwab authored
63 int
254f294 entered into RCS
Jim Blandy authored
64 cmputc (c)
65 char c;
66 {
a68809d Implemented suspending of emacsclient frames.
Karoly Lorentey authored
67 if (current_tty->termscript)
68 putc (c & 0177, current_tty->termscript);
69 putc (c & 0177, current_tty->output);
465b49b @Corg-kun (evalcost, cmputc): They now return their arguments.
Corg-kun authored
70 return c;
254f294 entered into RCS
Jim Blandy authored
71 }
72
73 /* NEXT TWO ARE DONE WITH MACROS */
74 #if 0
75 /*
76 * Assume the cursor is at row row, column col. Normally used only after
77 * clearing the screen, when the cursor is at (0, 0), but what the heck,
78 * let's let the guy put it anywhere.
79 */
80
81 static
e05f4e3 Fully eliminated global tty state variables.
Karoly Lorentey authored
82 at (tty, row, col) {
83 curY (tty) = row;
84 curX (tty) = col;
254f294 entered into RCS
Jim Blandy authored
85 }
86
87 /*
88 * Add n columns to the current cursor position.
89 */
90
91 static
e05f4e3 Fully eliminated global tty state variables.
Karoly Lorentey authored
92 addcol (tty, n) {
93 curX (tty) += n;
254f294 entered into RCS
Jim Blandy authored
94
95 /*
96 * If cursor hit edge of screen, what happened?
97 * N.B.: DO NOT!! write past edge of screen. If you do, you
98 * deserve what you get. Furthermore, on terminals with
99 * autowrap (but not magicwrap), don't write in the last column
100 * of the last line.
101 */
102
e05f4e3 Fully eliminated global tty state variables.
Karoly Lorentey authored
103 if (curX (tty) == tty->Wcm->cm_cols) {
254f294 entered into RCS
Jim Blandy authored
104 /*
105 * Well, if magicwrap, still there, past the edge of the
106 * screen (!). If autowrap, on the col 0 of the next line.
107 * Otherwise on last column.
108 */
109
e05f4e3 Fully eliminated global tty state variables.
Karoly Lorentey authored
110 if (tty->Wcm->cm_magicwrap)
254f294 entered into RCS
Jim Blandy authored
111 ; /* "limbo" */
e05f4e3 Fully eliminated global tty state variables.
Karoly Lorentey authored
112 else if (tty->Wcm->cm_autowrap) {
113 curX (tty) = 0;
114 curY (tty) ++; /* Beware end of screen! */
254f294 entered into RCS
Jim Blandy authored
115 }
116 else
e05f4e3 Fully eliminated global tty state variables.
Karoly Lorentey authored
117 curX (tty)--;
254f294 entered into RCS
Jim Blandy authored
118 }
119 }
120 #endif
121
122 /*
049d292 (cmcheckmagic): New function.
Karl Heuer authored
123 * Terminals with magicwrap (xn) don't all behave identically.
124 * The VT100 leaves the cursor in the last column but will wrap before
125 * printing the next character. I hear that the Concept terminal does
126 * the wrap immediately but ignores the next newline it sees. And some
127 * terminals just have buggy firmware, and think that the cursor is still
128 * in limbo if we use direct cursor addressing from the phantom column.
129 * The only guaranteed safe thing to do is to emit a CRLF immediately
130 * after we reach the last column; this takes us to a known state.
131 */
132 void
d3a190f Separate frame-local, tty-dependent parameters from tty-local paramet…
Karoly Lorentey authored
133 cmcheckmagic (struct tty_display_info *tty)
049d292 (cmcheckmagic): New function.
Karl Heuer authored
134 {
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
135 if (curX (tty) == FrameCols (tty))
049d292 (cmcheckmagic): New function.
Karl Heuer authored
136 {
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
137 if (!MagicWrap (tty) || curY (tty) >= FrameRows (tty) - 1)
049d292 (cmcheckmagic): New function.
Karl Heuer authored
138 abort ();
a68809d Implemented suspending of emacsclient frames.
Karoly Lorentey authored
139 if (tty->termscript)
140 putc ('\r', tty->termscript);
141 putc ('\r', tty->output);
142 if (tty->termscript)
143 putc ('\n', tty->termscript);
144 putc ('\n', tty->output);
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
145 curX (tty) = 0;
146 curY (tty)++;
049d292 (cmcheckmagic): New function.
Karl Heuer authored
147 }
148 }
149
150
151 /*
254f294 entered into RCS
Jim Blandy authored
152 * (Re)Initialize the cost factors, given the output speed of the terminal
153 * in the variable ospeed. (Note: this holds B300, B9600, etc -- ie stuff
154 * out of <sgtty.h>.)
155 */
156
127fe5c Fix -Wimplicit warnings.
Andreas Schwab authored
157 void
d3a190f Separate frame-local, tty-dependent parameters from tty-local paramet…
Karoly Lorentey authored
158 cmcostinit (struct tty_display_info *tty)
254f294 entered into RCS
Jim Blandy authored
159 {
160 char *p;
161
162 #define COST(x,e) (x ? (cost = 0, tputs (x, 1, e), cost) : BIG)
163 #define CMCOST(x,e) ((x == 0) ? BIG : (p = tgoto(x, 0, 0), COST(p ,e)))
164
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
165 tty->Wcm->cc_up = COST (tty->Wcm->cm_up, evalcost);
166 tty->Wcm->cc_down = COST (tty->Wcm->cm_down, evalcost);
167 tty->Wcm->cc_left = COST (tty->Wcm->cm_left, evalcost);
168 tty->Wcm->cc_right = COST (tty->Wcm->cm_right, evalcost);
169 tty->Wcm->cc_home = COST (tty->Wcm->cm_home, evalcost);
170 tty->Wcm->cc_cr = COST (tty->Wcm->cm_cr, evalcost);
171 tty->Wcm->cc_ll = COST (tty->Wcm->cm_ll, evalcost);
172 tty->Wcm->cc_tab = tty->Wcm->cm_tabwidth ? COST (tty->Wcm->cm_tab, evalcost) : BIG;
254f294 entered into RCS
Jim Blandy authored
173
174 /*
175 * These last three are actually minimum costs. When (if) they are
176 * candidates for the least-cost motion, the real cost is computed.
177 * (Note that "0" is the assumed to generate the minimum cost.
178 * While this is not necessarily true, I have yet to see a terminal
179 * for which is not; all the terminals that have variable-cost
180 * cursor motion seem to take straight numeric values. --ACT)
181 */
182
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
183 tty->Wcm->cc_abs = CMCOST (tty->Wcm->cm_abs, evalcost);
184 tty->Wcm->cc_habs = CMCOST (tty->Wcm->cm_habs, evalcost);
185 tty->Wcm->cc_vabs = CMCOST (tty->Wcm->cm_vabs, evalcost);
254f294 entered into RCS
Jim Blandy authored
186
187 #undef CMCOST
188 #undef COST
189 }
190
191 /*
192 * Calculate the cost to move from (srcy, srcx) to (dsty, dstx) using
193 * up and down, and left and right, motions, and tabs. If doit is set
194 * actually perform the motion.
195 */
196
127fe5c Fix -Wimplicit warnings.
Andreas Schwab authored
197 static int
d3a190f Separate frame-local, tty-dependent parameters from tty-local paramet…
Karoly Lorentey authored
198 calccost (struct tty_display_info *tty,
199 int srcy, int srcx, int dsty, int dstx, int doit)
254f294 entered into RCS
Jim Blandy authored
200 {
201 register int deltay,
202 deltax,
203 c,
204 totalcost;
205 int ntabs,
206 n2tabs,
207 tabx,
208 tab2x,
209 tabcost;
210 register char *p;
211
212 /* If have just wrapped on a terminal with xn,
213 don't believe the cursor position: give up here
214 and force use of absolute positioning. */
215
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
216 if (curX (tty) == tty->Wcm->cm_cols)
254f294 entered into RCS
Jim Blandy authored
217 goto fail;
218
219 totalcost = 0;
220 if ((deltay = dsty - srcy) == 0)
221 goto x;
222 if (deltay < 0)
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
223 p = tty->Wcm->cm_up, c = tty->Wcm->cc_up, deltay = -deltay;
254f294 entered into RCS
Jim Blandy authored
224 else
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
225 p = tty->Wcm->cm_down, c = tty->Wcm->cc_down;
254f294 entered into RCS
Jim Blandy authored
226 if (c == BIG) { /* caint get thar from here */
227 if (doit)
228 printf ("OOPS");
229 return c;
230 }
231 totalcost = c * deltay;
232 if (doit)
233 while (--deltay >= 0)
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
234 emacs_tputs (tty, p, 1, cmputc);
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
235 x:
254f294 entered into RCS
Jim Blandy authored
236 if ((deltax = dstx - srcx) == 0)
237 goto done;
238 if (deltax < 0) {
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
239 p = tty->Wcm->cm_left, c = tty->Wcm->cc_left, deltax = -deltax;
254f294 entered into RCS
Jim Blandy authored
240 goto dodelta; /* skip all the tab junk */
241 }
242 /* Tabs (the toughie) */
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
243 if (tty->Wcm->cc_tab >= BIG || !tty->Wcm->cm_usetabs)
254f294 entered into RCS
Jim Blandy authored
244 goto olddelta; /* forget it! */
245
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
246 /*
254f294 entered into RCS
Jim Blandy authored
247 * ntabs is # tabs towards but not past dstx; n2tabs is one more
248 * (ie past dstx), but this is only valid if that is not past the
249 * right edge of the screen. We can check that at the same time
250 * as we figure out where we would be if we use the tabs (which
251 * we will put into tabx (for ntabs) and tab2x (for n2tabs)).
252 */
253
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
254 ntabs = (deltax + srcx % tty->Wcm->cm_tabwidth) / tty->Wcm->cm_tabwidth;
254f294 entered into RCS
Jim Blandy authored
255 n2tabs = ntabs + 1;
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
256 tabx = (srcx / tty->Wcm->cm_tabwidth + ntabs) * tty->Wcm->cm_tabwidth;
257 tab2x = tabx + tty->Wcm->cm_tabwidth;
254f294 entered into RCS
Jim Blandy authored
258
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
259 if (tab2x >= tty->Wcm->cm_cols) /* too far (past edge) */
254f294 entered into RCS
Jim Blandy authored
260 n2tabs = 0;
261
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
262 /*
254f294 entered into RCS
Jim Blandy authored
263 * Now set tabcost to the cost for using ntabs, and c to the cost
264 * for using n2tabs, then pick the minimum.
265 */
266
4768931 Cosmetic changes.
Karoly Lorentey authored
267 /* cost for ntabs + cost for right motion */
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
268 tabcost = ntabs ? ntabs * tty->Wcm->cc_tab + (dstx - tabx) * tty->Wcm->cc_right
254f294 entered into RCS
Jim Blandy authored
269 : BIG;
270
4768931 Cosmetic changes.
Karoly Lorentey authored
271 /* cost for n2tabs + cost for left motion */
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
272 c = n2tabs ? n2tabs * tty->Wcm->cc_tab + (tab2x - dstx) * tty->Wcm->cc_left
254f294 entered into RCS
Jim Blandy authored
273 : BIG;
274
275 if (c < tabcost) /* then cheaper to overshoot & back up */
276 ntabs = n2tabs, tabcost = c, tabx = tab2x;
277
278 if (tabcost >= BIG) /* caint use tabs */
279 goto newdelta;
280
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
281 /*
254f294 entered into RCS
Jim Blandy authored
282 * See if tabcost is less than just moving right
283 */
284
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
285 if (tabcost < (deltax * tty->Wcm->cc_right)) {
254f294 entered into RCS
Jim Blandy authored
286 totalcost += tabcost; /* use the tabs */
287 if (doit)
288 while (--ntabs >= 0)
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
289 emacs_tputs (tty, tty->Wcm->cm_tab, 1, cmputc);
254f294 entered into RCS
Jim Blandy authored
290 srcx = tabx;
291 }
292
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
293 /*
254f294 entered into RCS
Jim Blandy authored
294 * Now might as well just recompute the delta.
295 */
296
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
297 newdelta:
254f294 entered into RCS
Jim Blandy authored
298 if ((deltax = dstx - srcx) == 0)
299 goto done;
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
300 olddelta:
254f294 entered into RCS
Jim Blandy authored
301 if (deltax > 0)
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
302 p = tty->Wcm->cm_right, c = tty->Wcm->cc_right;
254f294 entered into RCS
Jim Blandy authored
303 else
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
304 p = tty->Wcm->cm_left, c = tty->Wcm->cc_left, deltax = -deltax;
254f294 entered into RCS
Jim Blandy authored
305
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
306 dodelta:
254f294 entered into RCS
Jim Blandy authored
307 if (c == BIG) { /* caint get thar from here */
308 fail:
309 if (doit)
310 printf ("OOPS");
311 return BIG;
312 }
313 totalcost += c * deltax;
314 if (doit)
315 while (--deltax >= 0)
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
316 emacs_tputs (tty, p, 1, cmputc);
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
317 done:
254f294 entered into RCS
Jim Blandy authored
318 return totalcost;
319 }
320
321 #if 0
322 losecursor ()
323 {
324 curY = -1;
325 }
326 #endif
327
328 #define USEREL 0
329 #define USEHOME 1
330 #define USELL 2
331 #define USECR 3
332
127fe5c Fix -Wimplicit warnings.
Andreas Schwab authored
333 void
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
334 cmgoto (tty, row, col)
d3a190f Separate frame-local, tty-dependent parameters from tty-local paramet…
Karoly Lorentey authored
335 struct tty_display_info *tty;
592e8fa @loveshack (calccost, cmgoto): Declare all args (per C99).
loveshack authored
336 int row, col;
254f294 entered into RCS
Jim Blandy authored
337 {
338 int homecost,
339 crcost,
340 llcost,
341 relcost,
342 directcost;
343 int use;
344 char *p,
345 *dcm;
346
347 /* First the degenerate case */
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
348 if (row == curY (tty) && col == curX (tty)) /* already there */
254f294 entered into RCS
Jim Blandy authored
349 return;
350
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
351 if (curY (tty) >= 0 && curX (tty) >= 0)
254f294 entered into RCS
Jim Blandy authored
352 {
353 /* We may have quick ways to go to the upper-left, bottom-left,
354 * start-of-line, or start-of-next-line. Or it might be best to
355 * start where we are. Examine the options, and pick the cheapest.
356 */
357
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
358 relcost = calccost (tty, curY (tty), curX (tty), row, col, 0);
254f294 entered into RCS
Jim Blandy authored
359 use = USEREL;
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
360 if ((homecost = tty->Wcm->cc_home) < BIG)
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
361 homecost += calccost (tty, 0, 0, row, col, 0);
254f294 entered into RCS
Jim Blandy authored
362 if (homecost < relcost)
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
363 relcost = homecost, use = USEHOME;
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
364 if ((llcost = tty->Wcm->cc_ll) < BIG)
365 llcost += calccost (tty, tty->Wcm->cm_rows - 1, 0, row, col, 0);
254f294 entered into RCS
Jim Blandy authored
366 if (llcost < relcost)
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
367 relcost = llcost, use = USELL;
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
368 if ((crcost = tty->Wcm->cc_cr) < BIG) {
369 if (tty->Wcm->cm_autolf)
370 if (curY (tty) + 1 >= tty->Wcm->cm_rows)
371 crcost = BIG;
254f294 entered into RCS
Jim Blandy authored
372 else
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
373 crcost += calccost (tty, curY (tty) + 1, 0, row, col, 0);
254f294 entered into RCS
Jim Blandy authored
374 else
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
375 crcost += calccost (tty, curY (tty), 0, row, col, 0);
254f294 entered into RCS
Jim Blandy authored
376 }
377 if (crcost < relcost)
378 relcost = crcost, use = USECR;
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
379 directcost = tty->Wcm->cc_abs, dcm = tty->Wcm->cm_abs;
380 if (row == curY (tty) && tty->Wcm->cc_habs < BIG)
381 directcost = tty->Wcm->cc_habs, dcm = tty->Wcm->cm_habs;
382 else if (col == curX (tty) && tty->Wcm->cc_vabs < BIG)
383 directcost = tty->Wcm->cc_vabs, dcm = tty->Wcm->cm_vabs;
254f294 entered into RCS
Jim Blandy authored
384 }
385 else
386 {
387 directcost = 0, relcost = 100000;
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
388 dcm = tty->Wcm->cm_abs;
254f294 entered into RCS
Jim Blandy authored
389 }
390
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
391 /*
254f294 entered into RCS
Jim Blandy authored
392 * In the following comparison, the = in <= is because when the costs
393 * are the same, it looks nicer (I think) to move directly there.
394 */
395 if (directcost <= relcost)
396 {
397 /* compute REAL direct cost */
398 cost = 0;
4768931 Cosmetic changes.
Karoly Lorentey authored
399 p = (dcm == tty->Wcm->cm_habs
400 ? tgoto (dcm, row, col)
401 : tgoto (dcm, col, row));
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
402 emacs_tputs (tty, p, 1, evalcost);
254f294 entered into RCS
Jim Blandy authored
403 if (cost <= relcost)
404 { /* really is cheaper */
f2d85e3 Implemented multiple tty support.
Karoly Lorentey authored
405 emacs_tputs (tty, p, 1, cmputc);
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
406 curY (tty) = row, curX (tty) = col;
254f294 entered into RCS
Jim Blandy authored
407 return;
408 }
409 }
410
411 switch (use)
412 {
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
413 case USEHOME:
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
414 emacs_tputs (tty, tty->Wcm->cm_home, 1, cmputc);
415 curY (tty) = 0, curX (tty) = 0;
254f294 entered into RCS
Jim Blandy authored
416 break;
417
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
418 case USELL:
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
419 emacs_tputs (tty, tty->Wcm->cm_ll, 1, cmputc);
420 curY (tty) = tty->Wcm->cm_rows - 1, curX (tty) = 0;
254f294 entered into RCS
Jim Blandy authored
421 break;
422
ef393e7 @lektu Trailing whitespace deleted.
lektu authored
423 case USECR:
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
424 emacs_tputs (tty, tty->Wcm->cm_cr, 1, cmputc);
425 if (tty->Wcm->cm_autolf)
426 curY (tty)++;
427 curX (tty) = 0;
254f294 entered into RCS
Jim Blandy authored
428 break;
429 }
430
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
431 (void) calccost (tty, curY (tty), curX (tty), row, col, 1);
432 curY (tty) = row, curX (tty) = col;
254f294 entered into RCS
Jim Blandy authored
433 }
434
435 /* Clear out all terminal info.
436 Used before copying into it the info on the actual terminal.
437 */
438
127fe5c Fix -Wimplicit warnings.
Andreas Schwab authored
439 void
d3a190f Separate frame-local, tty-dependent parameters from tty-local paramet…
Karoly Lorentey authored
440 Wcm_clear (struct tty_display_info *tty)
254f294 entered into RCS
Jim Blandy authored
441 {
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
442 bzero (tty->Wcm, sizeof (struct cm));
254f294 entered into RCS
Jim Blandy authored
443 UP = 0;
444 BC = 0;
445 }
446
447 /*
448 * Initialized stuff
449 * Return 0 if can do CM.
450 * Return -1 if cannot.
451 * Return -2 if size not specified.
452 */
453
127fe5c Fix -Wimplicit warnings.
Andreas Schwab authored
454 int
d3a190f Separate frame-local, tty-dependent parameters from tty-local paramet…
Karoly Lorentey authored
455 Wcm_init (struct tty_display_info *tty)
254f294 entered into RCS
Jim Blandy authored
456 {
457 #if 0
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
458 if (tty->Wcm->cm_abs && !tty->Wcm->cm_ds)
254f294 entered into RCS
Jim Blandy authored
459 return 0;
460 #endif
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
461 if (tty->Wcm->cm_abs)
254f294 entered into RCS
Jim Blandy authored
462 return 0;
463 /* Require up and left, and, if no absolute, down and right */
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
464 if (!tty->Wcm->cm_up || !tty->Wcm->cm_left)
254f294 entered into RCS
Jim Blandy authored
465 return - 1;
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
466 if (!tty->Wcm->cm_abs && (!tty->Wcm->cm_down || !tty->Wcm->cm_right))
254f294 entered into RCS
Jim Blandy authored
467 return - 1;
468 /* Check that we know the size of the screen.... */
6bdeff6 Full support for multiple terminal I/O (with some rough edges).
Karoly Lorentey authored
469 if (tty->Wcm->cm_rows <= 0 || tty->Wcm->cm_cols <= 0)
254f294 entered into RCS
Jim Blandy authored
470 return - 2;
471 return 0;
472 }
f51da7d @snogglethorpe Add arch taglines
snogglethorpe authored
473
474 /* arch-tag: bcf64c02-00f6-44ef-94b6-c56eab5b3dc4
475 (do not change this comment) */
Something went wrong with that request. Please try again.