aboutsummaryrefslogtreecommitdiff
path: root/ncurses/tty/tty_update.c
diff options
context:
space:
mode:
Diffstat (limited to 'ncurses/tty/tty_update.c')
-rw-r--r--ncurses/tty/tty_update.c62
1 files changed, 33 insertions, 29 deletions
diff --git a/ncurses/tty/tty_update.c b/ncurses/tty/tty_update.c
index 8626c79e69e2..20f9349bd688 100644
--- a/ncurses/tty/tty_update.c
+++ b/ncurses/tty/tty_update.c
@@ -1,5 +1,5 @@
/****************************************************************************
- * Copyright 2018-2019,2020 Thomas E. Dickey *
+ * Copyright 2018-2020,2021 Thomas E. Dickey *
* Copyright 1998-2016,2017 Free Software Foundation, Inc. *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
@@ -85,7 +85,7 @@
#include <ctype.h>
-MODULE_ID("$Id: tty_update.c,v 1.305 2020/02/02 23:34:34 tom Exp $")
+MODULE_ID("$Id: tty_update.c,v 1.310 2021/02/06 14:24:38 tom Exp $")
/*
* This define controls the line-breakout optimization. Every once in a
@@ -117,14 +117,14 @@ static int ClrBottom(SCREEN *, int total);
static void ClearScreen(SCREEN *, NCURSES_CH_T blank);
static void ClrUpdate(SCREEN *);
static void DelChar(SCREEN *, int count);
-static void InsStr(SCREEN *, NCURSES_CH_T * line, int count);
+static void InsStr(SCREEN *, NCURSES_CH_T *line, int count);
static void TransformLine(SCREEN *, int const lineno);
#else
static int ClrBottom(int total);
static void ClearScreen(NCURSES_CH_T blank);
static void ClrUpdate(void);
static void DelChar(int count);
-static void InsStr(NCURSES_CH_T * line, int count);
+static void InsStr(NCURSES_CH_T *line, int count);
static void TransformLine(int const lineno);
#endif
@@ -136,7 +136,7 @@ static void TransformLine(int const lineno);
****************************************************************************/
static void
-position_check(NCURSES_SP_DCLx int expected_y, int expected_x, char *legend)
+position_check(NCURSES_SP_DCLx int expected_y, int expected_x, const char *legend)
/* check to see if the real cursor position matches the virtual */
{
char buf[20];
@@ -170,9 +170,9 @@ position_check(NCURSES_SP_DCLx int expected_y, int expected_x, char *legend)
if (y - 1 != expected_y || x - 1 != expected_x) {
NCURSES_SP_NAME(beep) (NCURSES_SP_ARG);
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- tparm("\033[%d;%dH",
- expected_y + 1,
- expected_x + 1),
+ TIPARM_2("\033[%d;%dH",
+ expected_y + 1,
+ expected_x + 1),
1, NCURSES_SP_NAME(_nc_outch));
_tracef("position seen (%d, %d) doesn't match expected one (%d, %d) in %s",
y - 1, x - 1, expected_y, expected_x, legend);
@@ -429,11 +429,12 @@ PutCharLR(NCURSES_SP_DCLx const ARG_CH_T ch)
/* we can put the char directly */
PutAttrChar(NCURSES_SP_ARGx ch);
} else if (enter_am_mode && exit_am_mode) {
+ int oldcol = SP_PARM->_curscol;
/* we can suppress automargin */
NCURSES_PUTP2("exit_am_mode", exit_am_mode);
PutAttrChar(NCURSES_SP_ARGx ch);
- SP_PARM->_curscol--;
+ SP_PARM->_curscol = oldcol;
position_check(NCURSES_SP_ARGx
SP_PARM->_cursrow,
SP_PARM->_curscol,
@@ -567,7 +568,7 @@ can_clear_with(NCURSES_SP_DCLx ARG_CH_T ch)
* This code is optimized using ech and rep.
*/
static int
-EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
+EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T *ntext, int num)
{
int i;
@@ -605,7 +606,7 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
&& runcount > SP_PARM->_ech_cost + SP_PARM->_cup_ch_cost
&& can_clear_with(NCURSES_SP_ARGx CHREF(ntext0))) {
UpdateAttrs(SP_PARM, ntext0);
- NCURSES_PUTP2("erase_chars", TPARM_1(erase_chars, runcount));
+ NCURSES_PUTP2("erase_chars", TIPARM_1(erase_chars, runcount));
/*
* If this is the last part of the given interval,
@@ -620,6 +621,9 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
return 1; /* cursor stays in the middle */
}
} else if (repeat_char != 0 &&
+#if BSD_TPUTS
+ !isdigit(UChar(CharOf(ntext0))) &&
+#endif
#if USE_WIDEC_SUPPORT
(!SP_PARM->_screen_unicode &&
(CharOf(ntext0) < ((AttrOf(ntext0) & A_ALTCHARSET)
@@ -645,9 +649,9 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
AttrOf(ntext0) | A_ALTCHARSET);
}
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(repeat_char,
- CharOf(temp),
- rep_count),
+ TIPARM_2(repeat_char,
+ CharOf(temp),
+ rep_count),
1,
NCURSES_SP_NAME(_nc_outch));
SP_PARM->_curscol += rep_count;
@@ -679,8 +683,8 @@ EmitRange(NCURSES_SP_DCLx const NCURSES_CH_T * ntext, int num)
*/
static int
PutRange(NCURSES_SP_DCLx
- const NCURSES_CH_T * otext,
- const NCURSES_CH_T * ntext,
+ const NCURSES_CH_T *otext,
+ const NCURSES_CH_T *ntext,
int row,
int first, int last)
{
@@ -1701,7 +1705,7 @@ ClearScreen(NCURSES_SP_DCLx NCURSES_CH_T blank)
*/
static void
-InsStr(NCURSES_SP_DCLx NCURSES_CH_T * line, int count)
+InsStr(NCURSES_SP_DCLx NCURSES_CH_T *line, int count)
{
TR(TRACE_UPDATE, ("InsStr(%p, %p,%d) called",
(void *) SP_PARM,
@@ -1713,7 +1717,7 @@ InsStr(NCURSES_SP_DCLx NCURSES_CH_T * line, int count)
if (parm_ich) {
TPUTS_TRACE("parm_ich");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(parm_ich, count),
+ TIPARM_1(parm_ich, count),
1,
NCURSES_SP_NAME(_nc_outch));
while (count > 0) {
@@ -1766,7 +1770,7 @@ DelChar(NCURSES_SP_DCLx int count)
if (parm_dch) {
TPUTS_TRACE("parm_dch");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_1(parm_dch, count),
+ TIPARM_1(parm_dch, count),
1,
NCURSES_SP_NAME(_nc_outch));
} else {
@@ -1835,7 +1839,7 @@ scroll_csr_forward(NCURSES_SP_DCLx
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_index");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_index, n, 0),
+ TIPARM_1(parm_index, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (parm_delete_line && bot == maxy) {
@@ -1843,7 +1847,7 @@ scroll_csr_forward(NCURSES_SP_DCLx
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_delete_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_delete_line, n, 0),
+ TIPARM_1(parm_delete_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (scroll_forward && top == miny && bot == maxy) {
@@ -1900,7 +1904,7 @@ scroll_csr_backward(NCURSES_SP_DCLx
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_rindex");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_rindex, n, 0),
+ TIPARM_1(parm_rindex, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (parm_insert_line && bot == maxy) {
@@ -1908,7 +1912,7 @@ scroll_csr_backward(NCURSES_SP_DCLx
UpdateAttrs(SP_PARM, blank);
TPUTS_TRACE("parm_insert_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_insert_line, n, 0),
+ TIPARM_1(parm_insert_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else if (scroll_reverse && top == miny && bot == maxy) {
@@ -1956,7 +1960,7 @@ scroll_idl(NCURSES_SP_DCLx int n, int del, int ins, NCURSES_CH_T blank)
} else if (parm_delete_line) {
TPUTS_TRACE("parm_delete_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_delete_line, n, 0),
+ TIPARM_1(parm_delete_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else { /* if (delete_line) */
@@ -1972,7 +1976,7 @@ scroll_idl(NCURSES_SP_DCLx int n, int del, int ins, NCURSES_CH_T blank)
} else if (parm_insert_line) {
TPUTS_TRACE("parm_insert_line");
NCURSES_SP_NAME(tputs) (NCURSES_SP_ARGx
- TPARM_2(parm_insert_line, n, 0),
+ TIPARM_1(parm_insert_line, n),
n,
NCURSES_SP_NAME(_nc_outch));
} else { /* if (insert_line) */
@@ -2037,7 +2041,7 @@ NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_DCLx
NCURSES_PUTP2("save_cursor", save_cursor);
}
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, top, bot));
+ TIPARM_2(change_scroll_region, top, bot));
if (cursor_saved) {
NCURSES_PUTP2("restore_cursor", restore_cursor);
} else {
@@ -2047,7 +2051,7 @@ NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_DCLx
res = scroll_csr_forward(NCURSES_SP_ARGx n, top, bot, top, bot, blank);
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, 0, maxy));
+ TIPARM_2(change_scroll_region, 0, maxy));
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
}
@@ -2083,7 +2087,7 @@ NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_DCLx
NCURSES_PUTP2("save_cursor", save_cursor);
}
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, top, bot));
+ TIPARM_2(change_scroll_region, top, bot));
if (cursor_saved) {
NCURSES_PUTP2("restore_cursor", restore_cursor);
} else {
@@ -2094,7 +2098,7 @@ NCURSES_SP_NAME(_nc_scrolln) (NCURSES_SP_DCLx
-n, top, bot, top, bot, blank);
NCURSES_PUTP2("change_scroll_region",
- TPARM_2(change_scroll_region, 0, maxy));
+ TIPARM_2(change_scroll_region, 0, maxy));
SP_PARM->_cursrow = SP_PARM->_curscol = -1;
}