projects
/
ncurses.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ncurses 6.2 - patch 20210418
[ncurses.git]
/
ncurses
/
base
/
lib_scroll.c
diff --git
a/ncurses/base/lib_scroll.c
b/ncurses/base/lib_scroll.c
index ec462c9e077351289d50c146bc94076270183773..ecc0ba569fe2c947ab967d30e2d51b01d984088c 100644
(file)
--- a/
ncurses/base/lib_scroll.c
+++ b/
ncurses/base/lib_scroll.c
@@
-1,5
+1,6
@@
/****************************************************************************
/****************************************************************************
- * Copyright (c) 1998-2003,2004 Free Software Foundation, Inc. *
+ * Copyright 2019,2020 Thomas E. Dickey *
+ * Copyright 1998-2010,2011 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 *
* *
* Permission is hereby granted, free of charge, to any person obtaining a *
* copy of this software and associated documentation files (the *
@@
-43,21
+44,22
@@
#include <curses.priv.h>
#include <curses.priv.h>
-MODULE_ID("$Id: lib_scroll.c,v 1.
25 2004/12/11 18:28:51
tom Exp $")
+MODULE_ID("$Id: lib_scroll.c,v 1.
32 2020/02/02 23:34:34
tom Exp $")
NCURSES_EXPORT(void)
_nc_scroll_window(WINDOW *win,
int const n,
NCURSES_EXPORT(void)
_nc_scroll_window(WINDOW *win,
int const n,
-
NCURSES_SIZE_T
const top,
-
NCURSES_SIZE_T
const bottom,
+
int
const top,
+
int
const bottom,
NCURSES_CH_T blank)
{
int limit;
int line;
int j;
NCURSES_CH_T blank)
{
int limit;
int line;
int j;
- size_t to_copy = (size
_t) (sizeof(NCURSES_CH_T) *
(win->_maxx + 1));
+ size_t to_copy = (size
of(NCURSES_CH_T) * (size_t)
(win->_maxx + 1));
- TR(TRACE_MOVE, ("_nc_scroll_window(%p, %d, %d, %d)", win, n, top, bottom));
+ TR(TRACE_MOVE, ("_nc_scroll_window(%p, %d, %ld, %ld)",
+ (void *) win, n, (long) top, (long) bottom));
if (top < 0
|| bottom < top
if (top < 0
|| bottom < top
@@
-76,11
+78,13
@@
_nc_scroll_window(WINDOW *win,
* setup cost. So there is no point in trying to be excessively
* clever -- esr.
*/
* setup cost. So there is no point in trying to be excessively
* clever -- esr.
*/
+#define BottomLimit(n) ((n) >= 0 && (n) >= top)
+#define TopLimit(n) ((n) <= win->_maxy && (n) <= bottom)
/* shift n lines downwards */
if (n < 0) {
limit = top - n;
/* shift n lines downwards */
if (n < 0) {
limit = top - n;
- for (line = bottom; line >= limit &&
line >= 0
; line--) {
+ for (line = bottom; line >= limit &&
BottomLimit(line)
; line--) {
TR(TRACE_MOVE, ("...copying %d to %d", line + n, line));
memcpy(win->_line[line].text,
win->_line[line + n].text,
TR(TRACE_MOVE, ("...copying %d to %d", line + n, line));
memcpy(win->_line[line].text,
win->_line[line + n].text,
@@
-88,7
+92,7
@@
_nc_scroll_window(WINDOW *win,
if_USE_SCROLL_HINTS(win->_line[line].oldindex =
win->_line[line + n].oldindex);
}
if_USE_SCROLL_HINTS(win->_line[line].oldindex =
win->_line[line + n].oldindex);
}
- for (line = top; line < limit &&
line <= win->_maxy
; line++) {
+ for (line = top; line < limit &&
TopLimit(line)
; line++) {
TR(TRACE_MOVE, ("...filling %d", line));
for (j = 0; j <= win->_maxx; j++)
win->_line[line].text[j] = blank;
TR(TRACE_MOVE, ("...filling %d", line));
for (j = 0; j <= win->_maxx; j++)
win->_line[line].text[j] = blank;
@@
-99,14
+103,14
@@
_nc_scroll_window(WINDOW *win,
/* shift n lines upwards */
if (n > 0) {
limit = bottom - n;
/* shift n lines upwards */
if (n > 0) {
limit = bottom - n;
- for (line = top; line <= limit &&
line <= win->_maxy
; line++) {
+ for (line = top; line <= limit &&
TopLimit(line)
; line++) {
memcpy(win->_line[line].text,
win->_line[line + n].text,
to_copy);
if_USE_SCROLL_HINTS(win->_line[line].oldindex =
win->_line[line + n].oldindex);
}
memcpy(win->_line[line].text,
win->_line[line + n].text,
to_copy);
if_USE_SCROLL_HINTS(win->_line[line].oldindex =
win->_line[line + n].oldindex);
}
- for (line = bottom; line > limit &&
line >= 0
; line--) {
+ for (line = bottom; line > limit &&
BottomLimit(line)
; line--) {
for (j = 0; j <= win->_maxx; j++)
win->_line[line].text[j] = blank;
if_USE_SCROLL_HINTS(win->_line[line].oldindex = _NEWINDEX);
for (j = 0; j <= win->_maxx; j++)
win->_line[line].text[j] = blank;
if_USE_SCROLL_HINTS(win->_line[line].oldindex = _NEWINDEX);
@@
-134,7
+138,7
@@
_nc_scroll_window(WINDOW *win,
NCURSES_EXPORT(int)
wscrl(WINDOW *win, int n)
{
NCURSES_EXPORT(int)
wscrl(WINDOW *win, int n)
{
- T((T_CALLED("wscrl(%p,%d)"), win, n));
+ T((T_CALLED("wscrl(%p,%d)"),
(void *)
win, n));
if (!win || !win->_scroll) {
TR(TRACE_MOVE, ("...scrollok is false"));
if (!win || !win->_scroll) {
TR(TRACE_MOVE, ("...scrollok is false"));