#include <curses.priv.h>
#include <stddef.h>
-MODULE_ID("$Id: lib_newwin.c,v 1.57 2009/05/09 23:40:03 tom Exp $")
+MODULE_ID("$Id: lib_newwin.c,v 1.60 2009/09/06 16:32:48 tom Exp $")
#define window_is(name) ((sp)->_##name == win)
{
SCREEN *sp;
+#ifdef USE_SP_WINDOWLIST
+ if ((sp = _nc_screen_of(win)) != 0) {
+ if (window_is(curscr)) {
+ remove_window(curscr);
+ } else if (window_is(stdscr)) {
+ remove_window(stdscr);
+ } else if (window_is(newscr)) {
+ remove_window(newscr);
+ }
+ }
+#else
for (each_screen(sp)) {
if (window_is(curscr)) {
remove_window(curscr);
break;
}
}
+#endif
}
NCURSES_EXPORT(int)
WINDOWLIST *p, *q;
int i;
int result = ERR;
+#ifdef USE_SP_WINDOWLIST
+ SCREEN *sp = _nc_screen_of(win); /* pretend this is parameter */
+#endif
T((T_CALLED("_nc_freewin(%p)"), win));
if (win != 0) {
- if (_nc_try_global(curses) == 0) {
+ if (_nc_nonsp_try_global(curses) == 0) {
q = 0;
- for (each_window(SP, p)) {
+ for (each_window(SP_PARM, p)) {
if (&(p->win) == win) {
remove_window_from_screen(win);
if (q == 0)
- WindowList(SP) = p->next;
+ WindowList(SP_PARM) = p->next;
else
q->next = p->next;
}
q = p;
}
- _nc_unlock_global(curses);
+ _nc_nonsp_unlock_global(curses);
}
}
returnCode(result);
NCURSES_CH_T *ptr;
int i;
- T((T_CALLED("newwin(%d,%d,%d,%d)"), num_lines, num_columns, begy, begx));
+ T((T_CALLED("newwin(%p, %d,%d,%d,%d)"), SP_PARM, num_lines, num_columns,
+ begy, begx));
if (begy < 0 || begx < 0 || num_lines < 0 || num_columns < 0)
returnWin(0);
NCURSES_EXPORT(WINDOW *)
newwin(int num_lines, int num_columns, int begy, int begx)
{
- return NCURSES_SP_NAME(newwin) (CURRENT_SCREEN,
- num_lines, num_columns,
- begy, begx);
+ WINDOW *win;
+ _nc_sp_lock_global(curses);
+ win = NCURSES_SP_NAME(newwin) (CURRENT_SCREEN,
+ num_lines, num_columns, begy, begx);
+ _nc_sp_unlock_global(curses);
+ return (win);
}
#endif
NCURSES_EXPORT(WINDOW *)
derwin(WINDOW *orig, int num_lines, int num_columns, int begy, int begx)
{
-#if NCURSES_SP_FUNCS
- SCREEN *sp = CURRENT_SCREEN;
-#endif
WINDOW *win;
int i;
int flags = _SUBWIN;
+#if NCURSES_SP_FUNCS
+ SCREEN *sp = _nc_screen_of(orig);
+#endif
T((T_CALLED("derwin(%p,%d,%d,%d,%d)"), orig, num_lines, num_columns,
begy, begx));
int i;
WINDOWLIST *wp;
WINDOW *win;
- bool is_pad = (flags & _ISPAD);
+ bool is_padwin = (flags & _ISPAD);
T((T_CALLED("_nc_makenew(%p,%d,%d,%d,%d)"),
SP_PARM, num_lines, num_columns, begy, begx));
returnWin(0);
}
- _nc_lock_global(curses);
+ _nc_nonsp_lock_global(curses);
win->_curx = 0;
win->_cury = 0;
WINDOW_ATTRS(win) = A_NORMAL;
SetChar(win->_nc_bkgd, BLANK_TEXT, BLANK_ATTR);
- win->_clear = (is_pad
+ win->_clear = (is_padwin
? FALSE
: (num_lines == screen_lines(SP_PARM)
&& num_columns == screen_columns(SP_PARM)));
if_USE_SCROLL_HINTS(win->_line[i].oldindex = i);
}
- if (!is_pad && (begx + num_columns == screen_columns(SP_PARM))) {
+ if (!is_padwin && (begx + num_columns == screen_columns(SP_PARM))) {
win->_flags |= _ENDLINE;
if (begx == 0 && num_lines == screen_lines(SP_PARM) && begy == 0)
T((T_CREATE("window %p"), win));
- _nc_unlock_global(curses);
+ _nc_nonsp_unlock_global(curses);
returnWin(win);
}
-#if NCURSES_SP_FUNCS
-NCURSES_EXPORT(WINDOW *)
-_nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags)
-{
- return NCURSES_SP_NAME(_nc_makenew) (CURRENT_SCREEN,
- num_lines, num_columns,
- begy, begx, flags);
-}
-#endif
-
/*
* wgetch() and other functions with a WINDOW* parameter may use a SCREEN*
* internally, and it is useful to allow those to be invoked without switching
* SCREEN's, e.g., for multi-threaded applications.
*/
-NCURSES_EXPORT(SCREEN *)
-_nc_screen_of(WINDOW *win)
-{
- SCREEN *sp = 0;
-
- if (win != 0) {
- WINDOWLIST *wp = (WINDOWLIST *) win;
- sp = wp->screen;
- }
- return (sp);
-}
-
#if NCURSES_SP_FUNCS
NCURSES_EXPORT(WINDOW *)
_nc_curscr_of(SCREEN *sp)