X-Git-Url: https://ncurses.scripts.mit.edu/?p=ncurses.git;a=blobdiff_plain;f=ncurses%2Fbase%2Flib_newwin.c;h=a6c64beaaf4a1c0efc45fde3cb30164e8c9a4568;hp=3ab466ab9575871b00f809561c51b4255469d603;hb=f3eb40315f9e5eff503a172aed6d325b4e1f20c6;hpb=ce7b402c144d2b6d3773ef5b42aad9daf1ad76fe diff --git a/ncurses/base/lib_newwin.c b/ncurses/base/lib_newwin.c index 3ab466ab..a6c64bea 100644 --- a/ncurses/base/lib_newwin.c +++ b/ncurses/base/lib_newwin.c @@ -1,5 +1,5 @@ /**************************************************************************** - * Copyright (c) 1998-2008,2009 Free Software Foundation, Inc. * + * Copyright (c) 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 * @@ -43,7 +43,7 @@ #include #include -MODULE_ID("$Id: lib_newwin.c,v 1.60 2009/09/06 16:32:48 tom Exp $") +MODULE_ID("$Id: lib_newwin.c,v 1.71 2011/05/28 21:32:51 tom Exp $") #define window_is(name) ((sp)->_##name == win) @@ -98,7 +98,7 @@ _nc_freewin(WINDOW *win) SCREEN *sp = _nc_screen_of(win); /* pretend this is parameter */ #endif - T((T_CALLED("_nc_freewin(%p)"), win)); + T((T_CALLED("_nc_freewin(%p)"), (void *) win)); if (win != 0) { if (_nc_nonsp_try_global(curses) == 0) { @@ -119,7 +119,7 @@ _nc_freewin(WINDOW *win) free(p); result = OK; - T(("...deleted win=%p", win)); + T(("...deleted win=%p", (void *) win)); break; } q = p; @@ -138,10 +138,14 @@ NCURSES_SP_NAME(newwin) (NCURSES_SP_DCLx NCURSES_CH_T *ptr; int i; - T((T_CALLED("newwin(%p, %d,%d,%d,%d)"), SP_PARM, num_lines, num_columns, + 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) @@ -192,7 +196,7 @@ derwin(WINDOW *orig, int num_lines, int num_columns, int begy, int begx) SCREEN *sp = _nc_screen_of(orig); #endif - T((T_CALLED("derwin(%p,%d,%d,%d,%d)"), orig, num_lines, num_columns, + T((T_CALLED("derwin(%p,%d,%d,%d,%d)"), (void *) orig, num_lines, num_columns, begy, begx)); /* @@ -235,16 +239,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) { - T((T_CALLED("subwin(%p, %d, %d, %d, %d)"), w, l, c, y, x)); - T(("parent has begy = %ld, begx = %ld", (long) w->_begy, (long) w->_begx)); + WINDOW *result = 0; - returnWin(derwin(w, l, c, y - w->_begy, x - w->_begx)); + T((T_CALLED("subwin(%p, %d, %d, %d, %d)"), (void *) w, l, c, y, x)); + if (w != 0) { + T(("parent has begy = %ld, begx = %ld", (long) w->_begy, (long) w->_begx)); + + result = derwin(w, l, c, y - w->_begy, x - w->_begx); + } + returnWin(result); } static bool dimension_limit(int value) { - NCURSES_SIZE_T test = value; + NCURSES_SIZE_T test = (NCURSES_SIZE_T) value; return (test == value && value > 0); } @@ -262,7 +271,7 @@ NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx bool is_padwin = (flags & _ISPAD); T((T_CALLED("_nc_makenew(%p,%d,%d,%d,%d)"), - SP_PARM, num_lines, num_columns, begy, begx)); + (void *) SP_PARM, num_lines, num_columns, begy, begx)); if (SP_PARM == 0) returnWin(0); @@ -276,7 +285,7 @@ NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx win = &(wp->win); if ((win->_line = typeCalloc(struct ldat, ((unsigned) num_lines))) == 0) { - free(win); + free(wp); returnWin(0); } @@ -284,13 +293,13 @@ NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx 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->_flags = flags; + win->_flags = (short) flags; WINDOW_ATTRS(win) = A_NORMAL; SetChar(win->_nc_bkgd, BLANK_TEXT, BLANK_ATTR); @@ -311,7 +320,7 @@ NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx 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; @@ -341,7 +350,7 @@ NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx * 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); } @@ -360,7 +369,7 @@ NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx wp->screen = SP_PARM; WindowList(SP_PARM) = wp; - T((T_CREATE("window %p"), win)); + T((T_CREATE("window %p"), (void *) win)); _nc_nonsp_unlock_global(curses); returnWin(win); @@ -375,18 +384,18 @@ NCURSES_SP_NAME(_nc_makenew) (NCURSES_SP_DCLx NCURSES_EXPORT(WINDOW *) _nc_curscr_of(SCREEN *sp) { - return sp == 0 ? 0 : sp->_curscr; + return sp == 0 ? 0 : CurScreen(sp); } NCURSES_EXPORT(WINDOW *) _nc_newscr_of(SCREEN *sp) { - return sp == 0 ? 0 : sp->_newscr; + return sp == 0 ? 0 : NewScreen(sp); } NCURSES_EXPORT(WINDOW *) _nc_stdscr_of(SCREEN *sp) { - return sp == 0 ? 0 : sp->_stdscr; + return sp == 0 ? 0 : StdScreen(sp); } #endif