projects
/
ncurses.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
ncurses 6.1 - patch 20190323
[ncurses.git]
/
ncurses
/
base
/
lib_newwin.c
diff --git
a/ncurses/base/lib_newwin.c
b/ncurses/base/lib_newwin.c
index ddbb3da71547a5914ba3c476ed381936abaf9007..5d48107a3003d9fee2917c8bf3af9de50984adda 100644
(file)
--- a/
ncurses/base/lib_newwin.c
+++ b/
ncurses/base/lib_newwin.c
@@
-1,5
+1,5
@@
/****************************************************************************
/****************************************************************************
- * Copyright (c) 1998-20
08,2009
Free Software Foundation, Inc. *
+ * Copyright (c) 1998-20
16,2017
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,7
+43,7
@@
#include <curses.priv.h>
#include <stddef.h>
#include <curses.priv.h>
#include <stddef.h>
-MODULE_ID("$Id: lib_newwin.c,v 1.
61 2009/10/24 22:05:55
tom Exp $")
+MODULE_ID("$Id: lib_newwin.c,v 1.
74 2017/05/13 23:17:29
tom Exp $")
#define window_is(name) ((sp)->_##name == win)
#define window_is(name) ((sp)->_##name == win)
@@
-91,8
+91,6
@@
remove_window_from_screen(WINDOW *win)
NCURSES_EXPORT(int)
_nc_freewin(WINDOW *win)
{
NCURSES_EXPORT(int)
_nc_freewin(WINDOW *win)
{
- WINDOWLIST *p, *q;
- int i;
int result = ERR;
#ifdef USE_SP_WINDOWLIST
SCREEN *sp = _nc_screen_of(win); /* pretend this is parameter */
int result = ERR;
#ifdef USE_SP_WINDOWLIST
SCREEN *sp = _nc_screen_of(win); /* pretend this is parameter */
@@
-101,17
+99,23
@@
_nc_freewin(WINDOW *win)
T((T_CALLED("_nc_freewin(%p)"), (void *) win));
if (win != 0) {
T((T_CALLED("_nc_freewin(%p)"), (void *) win));
if (win != 0) {
+
if (_nc_nonsp_try_global(curses) == 0) {
if (_nc_nonsp_try_global(curses) == 0) {
+ WINDOWLIST *p, *q;
+
q = 0;
q = 0;
- for (each_window(SP_PARM, p)) {
+ for (each_window(sp, p)) {
+
if (&(p->win) == win) {
remove_window_from_screen(win);
if (q == 0)
if (&(p->win) == win) {
remove_window_from_screen(win);
if (q == 0)
- WindowList(
SP_PARM
) = p->next;
+ WindowList(
sp
) = p->next;
else
q->next = p->next;
if (!(win->_flags & _SUBWIN)) {
else
q->next = p->next;
if (!(win->_flags & _SUBWIN)) {
+ int i;
+
for (i = 0; i <= win->_maxy; i++)
FreeIfNeeded(win->_line[i].text);
}
for (i = 0; i <= win->_maxy; i++)
FreeIfNeeded(win->_line[i].text);
}
@@
-141,7
+145,11
@@
NCURSES_SP_NAME(newwin) (NCURSES_SP_DCLx
T((T_CALLED("newwin(%p, %d,%d,%d,%d)"), (void *) SP_PARM, num_lines, num_columns,
begy, begx));
T((T_CALLED("newwin(%p, %d,%d,%d,%d)"), (void *) SP_PARM, num_lines, num_columns,
begy, begx));
- if (begy < 0 || begx < 0 || num_lines < 0 || num_columns < 0)
+ if (begy < 0
+ || begx < 0
+ || num_lines < 0
+ || num_columns < 0
+ || SP_PARM == 0)
returnWin(0);
if (num_lines == 0)
returnWin(0);
if (num_lines == 0)
@@
-235,16
+243,21
@@
derwin(WINDOW *orig, int num_lines, int num_columns, int begy, int begx)
NCURSES_EXPORT(WINDOW *)
subwin(WINDOW *w, int l, int c, int y, int x)
{
NCURSES_EXPORT(WINDOW *)
subwin(WINDOW *w, int l, int c, int y, int x)
{
+ WINDOW *result = 0;
+
T((T_CALLED("subwin(%p, %d, %d, %d, %d)"), (void *) w, l, c, y, x));
T((T_CALLED("subwin(%p, %d, %d, %d, %d)"), (void *) w, l, c, y, x));
- T(("parent has begy = %ld, begx = %ld", (long) w->_begy, (long) w->_begx));
+ if (w != 0) {
+ T(("parent has begy = %ld, begx = %ld", (long) w->_begy, (long) w->_begx));
- returnWin(derwin(w, l, c, y - w->_begy, x - w->_begx));
+ result = derwin(w, l, c, y - w->_begy, x - w->_begx);
+ }
+ returnWin(result);
}
static bool
dimension_limit(int value)
{
}
static bool
dimension_limit(int value)
{
- NCURSES_SIZE_T test = value;
+ NCURSES_SIZE_T test =
(NCURSES_SIZE_T)
value;
return (test == value && value > 0);
}
return (test == value && value > 0);
}
@@
-276,7
+289,7
@@
NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx
win = &(wp->win);
if ((win->_line = typeCalloc(struct ldat, ((unsigned) num_lines))) == 0) {
win = &(wp->win);
if ((win->_line = typeCalloc(struct ldat, ((unsigned) num_lines))) == 0) {
- free(w
in
);
+ free(w
p
);
returnWin(0);
}
returnWin(0);
}
@@
-284,13
+297,13
@@
NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx
win->_curx = 0;
win->_cury = 0;
win->_curx = 0;
win->_cury = 0;
- win->_maxy =
num_lines - 1
;
- win->_maxx =
num_columns - 1
;
- win->_begy = begy;
- win->_begx = begx;
+ win->_maxy =
(NCURSES_SIZE_T) (num_lines - 1)
;
+ win->_maxx =
(NCURSES_SIZE_T) (num_columns - 1)
;
+ win->_begy =
(NCURSES_SIZE_T)
begy;
+ win->_begx =
(NCURSES_SIZE_T)
begx;
win->_yoffset = SP_PARM->_topstolen;
win->_yoffset = SP_PARM->_topstolen;
- win->_flags = flags;
+ win->_flags =
(short)
flags;
WINDOW_ATTRS(win) = A_NORMAL;
SetChar(win->_nc_bkgd, BLANK_TEXT, BLANK_ATTR);
WINDOW_ATTRS(win) = A_NORMAL;
SetChar(win->_nc_bkgd, BLANK_TEXT, BLANK_ATTR);
@@
-311,7
+324,7
@@
NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx
win->_parent = 0;
win->_regtop = 0;
win->_parent = 0;
win->_regtop = 0;
- win->_regbottom =
num_lines - 1
;
+ win->_regbottom =
(NCURSES_SIZE_T) (num_lines - 1)
;
win->_pad._pad_y = -1;
win->_pad._pad_x = -1;
win->_pad._pad_y = -1;
win->_pad._pad_x = -1;
@@
-341,7
+354,7
@@
NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx
* So that's how we want ncurses to behave.
*/
win->_line[i].firstchar = 0;
* So that's how we want ncurses to behave.
*/
win->_line[i].firstchar = 0;
- win->_line[i].lastchar =
num_columns - 1
;
+ win->_line[i].lastchar =
(NCURSES_SIZE_T) (num_columns - 1)
;
if_USE_SCROLL_HINTS(win->_line[i].oldindex = i);
}
if_USE_SCROLL_HINTS(win->_line[i].oldindex = i);
}
@@
-375,18
+388,18
@@
NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx
NCURSES_EXPORT(WINDOW *)
_nc_curscr_of(SCREEN *sp)
{
NCURSES_EXPORT(WINDOW *)
_nc_curscr_of(SCREEN *sp)
{
- return
sp == 0 ? 0 : sp->_curscr
;
+ return
(sp == 0) ? NULL : CurScreen(sp)
;
}
NCURSES_EXPORT(WINDOW *)
_nc_newscr_of(SCREEN *sp)
{
}
NCURSES_EXPORT(WINDOW *)
_nc_newscr_of(SCREEN *sp)
{
- return
sp == 0 ? 0 : sp->_newscr
;
+ return
(sp == 0) ? NULL : NewScreen(sp)
;
}
NCURSES_EXPORT(WINDOW *)
_nc_stdscr_of(SCREEN *sp)
{
}
NCURSES_EXPORT(WINDOW *)
_nc_stdscr_of(SCREEN *sp)
{
- return
sp == 0 ? 0 : sp->_stdscr
;
+ return
(sp == 0) ? NULL : StdScreen(sp)
;
}
#endif
}
#endif