projects
/
ncurses.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ncurses 6.0 - patch 20180120
[ncurses.git]
/
ncurses
/
base
/
wresize.c
diff --git
a/ncurses/base/wresize.c
b/ncurses/base/wresize.c
index f756f0f237f777c303655a46c67bf0a4bf914867..bc6b5732ea41fe05aa46ed575c2db9af8d6b7389 100644
(file)
--- a/
ncurses/base/wresize.c
+++ b/
ncurses/base/wresize.c
@@
-1,5
+1,5
@@
/****************************************************************************
/****************************************************************************
- * Copyright (c) 1998-20
06,2007
Free Software Foundation, Inc. *
+ * Copyright (c) 1998-20
10,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 *
@@
-27,12
+27,13
@@
****************************************************************************/
/****************************************************************************
****************************************************************************/
/****************************************************************************
- * Author: Thomas E. Dickey 1996-2002 *
+ * Author: Thomas E. Dickey 1996-on *
+ * and: Juergen Pfeifer *
****************************************************************************/
#include <curses.priv.h>
****************************************************************************/
#include <curses.priv.h>
-MODULE_ID("$Id: wresize.c,v 1.
27 2007/12/22 23:20:53
tom Exp $")
+MODULE_ID("$Id: wresize.c,v 1.
35 2011/05/21 18:55:07
tom Exp $")
static int
cleanup_lines(struct ldat *data, int length)
static int
cleanup_lines(struct ldat *data, int length)
@@
-53,10
+54,13
@@
repair_subwindows(WINDOW *cmp)
WINDOWLIST *wp;
struct ldat *pline = cmp->_line;
int row;
WINDOWLIST *wp;
struct ldat *pline = cmp->_line;
int row;
+#ifdef USE_SP_WINDOWLIST
+ SCREEN *sp = _nc_screen_of(cmp);
+#endif
- _nc_lock_global(
windowlist
);
+ _nc_lock_global(
curses
);
- for (
wp = _nc_windows; wp != 0; wp = wp->next
) {
+ for (
each_window(SP_PARM, wp)
) {
WINDOW *tst = &(wp->win);
if (tst->_parent == cmp) {
WINDOW *tst = &(wp->win);
if (tst->_parent == cmp) {
@@
-67,9
+71,9
@@
repair_subwindows(WINDOW *cmp)
tst->_parx = cmp->_maxx;
if (tst->_maxy + tst->_pary > cmp->_maxy)
tst->_parx = cmp->_maxx;
if (tst->_maxy + tst->_pary > cmp->_maxy)
- tst->_maxy =
cmp->_maxy - tst->_pary
;
+ tst->_maxy =
(NCURSES_SIZE_T) (cmp->_maxy - tst->_pary)
;
if (tst->_maxx + tst->_parx > cmp->_maxx)
if (tst->_maxx + tst->_parx > cmp->_maxx)
- tst->_maxx =
cmp->_maxx - tst->_parx
;
+ tst->_maxx =
(NCURSES_SIZE_T) (cmp->_maxx - tst->_parx)
;
for (row = 0; row <= tst->_maxy; ++row) {
tst->_line[row].text = &pline[tst->_pary + row].text[tst->_parx];
for (row = 0; row <= tst->_maxy; ++row) {
tst->_line[row].text = &pline[tst->_pary + row].text[tst->_parx];
@@
-77,7
+81,7
@@
repair_subwindows(WINDOW *cmp)
repair_subwindows(tst);
}
}
repair_subwindows(tst);
}
}
- _nc_unlock_global(
windowlist
);
+ _nc_unlock_global(
curses
);
}
/*
}
/*
@@
-93,7
+97,7
@@
wresize(WINDOW *win, int ToLines, int ToCols)
struct ldat *new_lines = 0;
#ifdef TRACE
struct ldat *new_lines = 0;
#ifdef TRACE
- T((T_CALLED("wresize(%p,%d,%d)"), win, ToLines, ToCols));
+ T((T_CALLED("wresize(%p,%d,%d)"),
(void *)
win, ToLines, ToCols));
if (win) {
TR(TRACE_UPDATE, ("...beg (%ld, %ld), max(%ld,%ld), reg(%ld,%ld)",
(long) win->_begy, (long) win->_begx,
if (win) {
TR(TRACE_UPDATE, ("...beg (%ld, %ld), max(%ld,%ld), reg(%ld,%ld)",
(long) win->_begy, (long) win->_begx,
@@
-153,7
+157,8
@@
wresize(WINDOW *win, int ToLines, int ToCols)
if (!(win->_flags & _SUBWIN)) {
if (row <= size_y) {
if (ToCols != size_x) {
if (!(win->_flags & _SUBWIN)) {
if (row <= size_y) {
if (ToCols != size_x) {
- if ((s = typeMalloc(NCURSES_CH_T, ToCols + 1)) == 0)
+ s = typeMalloc(NCURSES_CH_T, (unsigned) ToCols + 1);
+ if (s == 0)
returnCode(cleanup_lines(new_lines, row));
for (col = 0; col <= ToCols; ++col) {
s[col] = (col <= size_x
returnCode(cleanup_lines(new_lines, row));
for (col = 0; col <= ToCols; ++col) {
s[col] = (col <= size_x
@@
-164,13
+169,16
@@
wresize(WINDOW *win, int ToLines, int ToCols)
s = win->_line[row].text;
}
} else {
s = win->_line[row].text;
}
} else {
- if ((s = typeMalloc(NCURSES_CH_T, ToCols + 1)) == 0)
+ s = typeMalloc(NCURSES_CH_T, (unsigned) ToCols + 1);
+ if (s == 0)
returnCode(cleanup_lines(new_lines, row));
for (col = 0; col <= ToCols; ++col)
s[col] = win->_nc_bkgd;
}
returnCode(cleanup_lines(new_lines, row));
for (col = 0; col <= ToCols; ++col)
s[col] = win->_nc_bkgd;
}
- } else {
+ } else
if (pline != 0 && pline[win->_pary + row].text != 0)
{
s = &pline[win->_pary + row].text[win->_parx];
s = &pline[win->_pary + row].text[win->_parx];
+ } else {
+ s = 0;
}
if_USE_SCROLL_HINTS(new_lines[row].oldindex = row);
}
if_USE_SCROLL_HINTS(new_lines[row].oldindex = row);
@@
-181,11
+189,11
@@
wresize(WINDOW *win, int ToLines, int ToCols)
if ((ToCols != size_x) || (row > size_y)) {
if (end >= begin) { /* growing */
if (new_lines[row].firstchar < begin)
if ((ToCols != size_x) || (row > size_y)) {
if (end >= begin) { /* growing */
if (new_lines[row].firstchar < begin)
- new_lines[row].firstchar = begin;
+ new_lines[row].firstchar =
(NCURSES_SIZE_T)
begin;
} else { /* shrinking */
new_lines[row].firstchar = 0;
}
} else { /* shrinking */
new_lines[row].firstchar = 0;
}
- new_lines[row].lastchar = ToCols;
+ new_lines[row].lastchar =
(NCURSES_SIZE_T)
ToCols;
}
new_lines[row].text = s;
}
}
new_lines[row].text = s;
}
@@
-212,8
+220,8
@@
wresize(WINDOW *win, int ToLines, int ToCols)
* Finally, adjust the parameters showing screen size and cursor
* position:
*/
* Finally, adjust the parameters showing screen size and cursor
* position:
*/
- win->_maxx = ToCols;
- win->_maxy = ToLines;
+ win->_maxx =
(NCURSES_SIZE_T)
ToCols;
+ win->_maxy =
(NCURSES_SIZE_T)
ToLines;
if (win->_regtop > win->_maxy)
win->_regtop = win->_maxy;
if (win->_regtop > win->_maxy)
win->_regtop = win->_maxy;