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 fe4e80804daef3de444430a3418cb7c587708ec3..ecc0ba569fe2c947ab967d30e2d51b01d984088c 100644
(file)
--- a/
ncurses/base/lib_scroll.c
+++ b/
ncurses/base/lib_scroll.c
@@
-1,5
+1,6
@@
/****************************************************************************
/****************************************************************************
- * Copyright (c) 1998-2009,2010 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,13
+44,13
@@
#include <curses.priv.h>
#include <curses.priv.h>
-MODULE_ID("$Id: lib_scroll.c,v 1.
28 2010/12/19 01:48:09
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;
NCURSES_CH_T blank)
{
int limit;
@@
-77,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,
@@
-89,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;
@@
-100,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);