/****************************************************************************
- * Copyright (c) 1998-2006,2007 Free Software Foundation, Inc. *
+ * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
* and: Thomas E. Dickey 1996-on *
+ * and: Juergen Pfeifer 2009 *
****************************************************************************/
/*
* we'll consider nonlocal.
*/
#define NOT_LOCAL(fy, fx, ty, tx) ((tx > LONG_DIST) \
- && (tx < screen_columns - 1 - LONG_DIST) \
+ && (tx < screen_columns(CURRENT_SCREEN) - 1 - LONG_DIST) \
&& (abs(ty-fy) + abs(tx-fx) > LONG_DIST))
/****************************************************************************
#include <term.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_mvcur.c,v 1.109 2007/05/05 21:47:03 tom Exp $")
+MODULE_ID("$Id: lib_mvcur.c,v 1.115 2009/04/18 19:03:05 tom Exp $")
#define WANT_CHAR(y, x) SP->_newscr->_line[y].text[x] /* desired state */
#define BAUDRATE cur_term->_baudrate /* bits per second */
}
#if NCURSES_NO_PADDING
- if (!(SP->_no_padding))
+ if (!GetNoPadding(SP))
#endif
cum_cost += number * 10;
} else
{
if (change_scroll_region) {
TPUTS_TRACE("change_scroll_region");
- putp(TPARM_2(change_scroll_region, 0, screen_lines - 1));
+ putp(TPARM_2(change_scroll_region, 0, screen_lines(CURRENT_SCREEN) - 1));
}
}
/* wrap up cursor-addressing mode */
{
/* leave cursor at screen bottom */
- mvcur(-1, -1, screen_lines - 1, 0);
+ mvcur(-1, -1, screen_lines(CURRENT_SCREEN) - 1, 0);
/* set cursor to normal mode */
- if (SP->_cursor != -1)
+ if (SP->_cursor != -1) {
+ int cursor = SP->_cursor;
curs_set(1);
+ SP->_cursor = cursor;
+ }
if (exit_ca_mode) {
TPUTS_TRACE("exit_ca_mode");
int i;
for (i = 0; i < n; i++)
- *check.s_tail++ = CharOf(WANT_CHAR(to_y, from_x + i));
+ *check.s_tail++ = (char) CharOf(WANT_CHAR(to_y,
+ from_x + i));
*check.s_tail = '\0';
check.s_size -= n;
lhcost += n * SP->_char_padding;
/* tactic #4: use home-down + local movement */
if (cursor_to_ll
- && ((newcost = relative_move(NullResult, screen_lines - 1, 0, ynew,
+ && ((newcost = relative_move(NullResult,
+ screen_lines(CURRENT_SCREEN) - 1, 0, ynew,
xnew, ovw)) != INFINITY)
&& SP->_ll_cost + newcost < usecost) {
tactic = 4;
t5_cr_cost = (xold > 0 ? SP->_cr_cost : 0);
if (auto_left_margin && !eat_newline_glitch
&& yold > 0 && cursor_left
- && ((newcost = relative_move(NullResult, yold - 1, screen_columns -
- 1, ynew, xnew, ovw)) != INFINITY)
+ && ((newcost = relative_move(NullResult,
+ yold - 1,
+ screen_columns(CURRENT_SCREEN) - 1,
+ ynew,
+ xnew,
+ ovw)) != INFINITY)
&& t5_cr_cost + SP->_cub1_cost + newcost < usecost) {
tactic = 5;
usecost = t5_cr_cost + SP->_cub1_cost + newcost;
break;
case 4:
(void) _nc_safe_strcpy(&result, cursor_to_ll);
- (void) relative_move(&result, screen_lines - 1, 0, ynew, xnew, ovw);
+ (void) relative_move(&result,
+ screen_lines(CURRENT_SCREEN) - 1,
+ 0,
+ ynew,
+ xnew,
+ ovw);
break;
case 5:
if (xold > 0)
(void) _nc_safe_strcat(&result, carriage_return);
(void) _nc_safe_strcat(&result, cursor_left);
- (void) relative_move(&result, yold - 1, screen_columns - 1, ynew,
- xnew, ovw);
+ (void) relative_move(&result,
+ yold - 1,
+ screen_columns(CURRENT_SCREEN) - 1,
+ ynew,
+ xnew,
+ ovw);
break;
}
#endif /* !NO_OPTIMIZE */
return (ERR);
}
-NCURSES_EXPORT(int)
-mvcur(int yold, int xold, int ynew, int xnew)
/* optimized cursor move from (yold, xold) to (ynew, xnew) */
+NCURSES_EXPORT(int)
+NCURSES_SP_NAME(mvcur) (NCURSES_SP_DCLx
+ int yold, int xold, int ynew, int xnew)
{
NCURSES_CH_T oldattr;
int code;
TR(TRACE_CALLS | TRACE_MOVE, (T_CALLED("mvcur(%d,%d,%d,%d)"),
yold, xold, ynew, xnew));
- if (SP == 0) {
+ if (SP_PARM == 0) {
code = ERR;
} else if (yold == ynew && xold == xnew) {
code = OK;
* column position implied by wraparound or the lack thereof and
* rolling up the screen to get ynew on the screen.
*/
- if (xnew >= screen_columns) {
- ynew += xnew / screen_columns;
- xnew %= screen_columns;
+ if (xnew >= screen_columns(CURRENT_SCREEN)) {
+ ynew += xnew / screen_columns(CURRENT_SCREEN);
+ xnew %= screen_columns(CURRENT_SCREEN);
}
/*
* character set -- these have a strong tendency to screw up the CR &
* LF used for local character motions!
*/
- oldattr = SCREEN_ATTRS(SP);
+ oldattr = SCREEN_ATTRS(SP_PARM);
if ((AttrOf(oldattr) & A_ALTCHARSET)
|| (AttrOf(oldattr) && !move_standout_mode)) {
TR(TRACE_CHARPUT, ("turning off (%#lx) %s before move",
(void) VIDATTR(A_NORMAL, 0);
}
- if (xold >= screen_columns) {
+ if (xold >= screen_columns(CURRENT_SCREEN)) {
int l;
- if (SP->_nl) {
- l = (xold + 1) / screen_columns;
+ if (SP_PARM->_nl) {
+ l = (xold + 1) / screen_columns(CURRENT_SCREEN);
yold += l;
- if (yold >= screen_lines)
- l -= (yold - screen_lines - 1);
+ if (yold >= screen_lines(CURRENT_SCREEN))
+ l -= (yold - screen_lines(CURRENT_SCREEN) - 1);
if (l > 0) {
if (carriage_return) {
}
}
- if (yold > screen_lines - 1)
- yold = screen_lines - 1;
- if (ynew > screen_lines - 1)
- ynew = screen_lines - 1;
+ if (yold > screen_lines(CURRENT_SCREEN) - 1)
+ yold = screen_lines(CURRENT_SCREEN) - 1;
+ if (ynew > screen_lines(CURRENT_SCREEN) - 1)
+ ynew = screen_lines(CURRENT_SCREEN) - 1;
/* destination location is on screen now */
code = onscreen_mvcur(yold, xold, ynew, xnew, TRUE);
/*
* Restore attributes if we disabled them before moving.
*/
- if (!SameAttrOf(oldattr, SCREEN_ATTRS(SP))) {
+ if (!SameAttrOf(oldattr, SCREEN_ATTRS(SP_PARM))) {
TR(TRACE_CHARPUT, ("turning on (%#lx) %s after move",
(unsigned long) AttrOf(oldattr),
_traceattr(AttrOf(oldattr))));
returnCode(code);
}
+#if NCURSES_SP_FUNCS
+NCURSES_EXPORT(int)
+mvcur(int yold, int xold, int ynew, int xnew)
+{
+ return NCURSES_SP_NAME(mvcur) (CURRENT_SCREEN, yold, xold, ynew, xnew);
+}
+#endif
+
#if defined(TRACE) || defined(NCURSES_TEST)
NCURSES_EXPORT_VAR(int) _nc_optimize_enable = OPTIMIZE_ALL;
#endif
load_term();
} else if (sscanf(buf, "d %s", capname) == 1) {
struct name_table_entry const *np = _nc_find_entry(capname,
- _nc_info_hash_table);
+ _nc_get_hash_table(FALSE));
if (np == NULL)
(void) printf("No such capability as \"%s\"\n", capname);