X-Git-Url: https://ncurses.scripts.mit.edu/?a=blobdiff_plain;ds=inline;f=ncurses%2Fbase%2Flib_newwin.c;h=e7a30bf937ce3501e9263399e5708490044dd88e;hb=d998cb49bfb53bd99900fd4ed94519579bea99de;hp=78a18b88631e95760ec8bc75b4a5b110c0f03713;hpb=bd7ef7c2309fd00aa4576168c46f557c622cb9c3;p=ncurses.git diff --git a/ncurses/base/lib_newwin.c b/ncurses/base/lib_newwin.c index 78a18b88..e7a30bf9 100644 --- a/ncurses/base/lib_newwin.c +++ b/ncurses/base/lib_newwin.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2007,2008 Free Software Foundation, Inc. * + * Copyright (c) 1998-2008,2009 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 * @@ -30,6 +30,7 @@ * Author: Zeyd M. Ben-Halim 1992,1995 * * and: Eric S. Raymond * * and: Thomas E. Dickey 1996-on * + * and: Juergen Pfeifer 2009 * ****************************************************************************/ /* @@ -42,7 +43,7 @@ #include #include -MODULE_ID("$Id: lib_newwin.c,v 1.51 2008/05/31 21:50:09 tom Exp $") +MODULE_ID("$Id: lib_newwin.c,v 1.54 2009/04/18 21:02:34 tom Exp $") #define window_is(name) ((sp)->_##name == win) @@ -85,7 +86,7 @@ _nc_freewin(WINDOW *win) T((T_CALLED("_nc_freewin(%p)"), win)); if (win != 0) { - if (_nc_try_global(windowlist) == 0) { + if (_nc_try_global(curses) == 0) { q = 0; for (each_window(p)) { if (&(p->win) == win) { @@ -108,14 +109,15 @@ _nc_freewin(WINDOW *win) } q = p; } - _nc_unlock_global(windowlist); + _nc_unlock_global(curses); } } returnCode(result); } NCURSES_EXPORT(WINDOW *) -newwin(int num_lines, int num_columns, int begy, int begx) +NCURSES_SP_NAME(newwin) (NCURSES_SP_DCLx + int num_lines, int num_columns, int begy, int begx) { WINDOW *win; NCURSES_CH_T *ptr; @@ -127,9 +129,9 @@ newwin(int num_lines, int num_columns, int begy, int begx) returnWin(0); if (num_lines == 0) - num_lines = SP->_lines_avail - begy; + num_lines = SP_PARM->_lines_avail - begy; if (num_columns == 0) - num_columns = screen_columns - begx; + num_columns = screen_columns(SP_PARM) - begx; if ((win = _nc_makenew(num_lines, num_columns, begy, begx, 0)) == 0) returnWin(0); @@ -149,6 +151,16 @@ newwin(int num_lines, int num_columns, int begy, int begx) returnWin(win); } +#if NCURSES_SP_FUNCS +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); +} +#endif + NCURSES_EXPORT(WINDOW *) derwin(WINDOW *orig, int num_lines, int num_columns, int begy, int begx) { @@ -211,7 +223,12 @@ dimension_limit(int value) } NCURSES_EXPORT(WINDOW *) -_nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags) +NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx + int num_lines, + int num_columns, + int begy, + int begx, + int flags) { int i; WINDOWLIST *wp; @@ -220,7 +237,7 @@ _nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags) T((T_CALLED("_nc_makenew(%d,%d,%d,%d)"), num_lines, num_columns, begy, begx)); - if (SP == 0) + if (SP_PARM == 0) returnWin(0); if (!dimension_limit(num_lines) || !dimension_limit(num_columns)) @@ -229,8 +246,6 @@ _nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags) if ((wp = typeCalloc(WINDOWLIST, 1)) == 0) returnWin(0); - _nc_mutex_init(&(wp->mutex_use_window)); - win = &(wp->win); if ((win->_line = typeCalloc(struct ldat, ((unsigned) num_lines))) == 0) { @@ -238,7 +253,7 @@ _nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags) returnWin(0); } - _nc_lock_global(windowlist); + _nc_lock_global(curses); win->_curx = 0; win->_cury = 0; @@ -246,14 +261,16 @@ _nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags) win->_maxx = num_columns - 1; win->_begy = begy; win->_begx = begx; - win->_yoffset = SP->_topstolen; + win->_yoffset = SP_PARM->_topstolen; win->_flags = flags; WINDOW_ATTRS(win) = A_NORMAL; SetChar(win->_nc_bkgd, BLANK_TEXT, BLANK_ATTR); - win->_clear = is_pad ? FALSE : (num_lines == screen_lines - && num_columns == screen_columns); + win->_clear = (is_pad + ? FALSE + : (num_lines == screen_lines(SP_PARM) + && num_columns == screen_columns(SP_PARM))); win->_idlok = FALSE; win->_idcok = TRUE; win->_scroll = FALSE; @@ -302,26 +319,36 @@ _nc_makenew(int num_lines, int num_columns, int begy, int begx, int flags) if_USE_SCROLL_HINTS(win->_line[i].oldindex = i); } - if (!is_pad && (begx + num_columns == screen_columns)) { + if (!is_pad && (begx + num_columns == screen_columns(SP_PARM))) { win->_flags |= _ENDLINE; - if (begx == 0 && num_lines == screen_lines && begy == 0) + if (begx == 0 && num_lines == screen_lines(SP_PARM) && begy == 0) win->_flags |= _FULLWIN; - if (begy + num_lines == screen_lines) + if (begy + num_lines == screen_lines(SP_PARM)) win->_flags |= _SCROLLWIN; } wp->next = _nc_windows; - wp->screen = SP; + wp->screen = SP_PARM; _nc_windows = wp; T((T_CREATE("window %p"), win)); - _nc_unlock_global(windowlist); + _nc_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