<!-- 
  ****************************************************************************
  * Copyright (c) 1998-2014,2015 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            *
  * "Software"), to deal in the Software without restriction, including      *
  * without limitation the rights to use, copy, modify, merge, publish,      *
  * distribute, distribute with modifications, sublicense, and/or sell       *
  * copies of the Software, and to permit persons to whom the Software is    *
  * furnished to do so, subject to the following conditions:                 *
  *                                                                          *
  * The above copyright notice and this permission notice shall be included  *
  * in all copies or substantial portions of the Software.                   *
  *                                                                          *
  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS  *
  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF               *
  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.   *
  * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM,   *
  * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR    *
  * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR    *
  * THE USE OR OTHER DEALINGS IN THE SOFTWARE.                               *
  *                                                                          *
  * Except as contained in this notice, the name(s) of the above copyright   *
  * holders shall not be used in advertising or otherwise to promote the     *
  * sale, use or other dealings in this Software without prior written       *
  * authorization.                                                           *
  ****************************************************************************
  * @Id: curs_window.3x,v 1.19 2015/07/21 08:25:23 tom Exp @
-->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">
<HTML>
<HEAD>
<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">
<meta name="generator" content="Manpage converted by man2html - see http://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>curs_window 3x</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</HEAD>
<BODY>
<H1 class="no-header">curs_window 3x</H1>
<PRE>
<STRONG><A HREF="curs_window.3x.html">curs_window(3x)</A></STRONG>                                         <STRONG><A HREF="curs_window.3x.html">curs_window(3x)</A></STRONG>




</PRE>
<H2><a name="h2-NAME">NAME</a></H2><PRE>
       <STRONG>newwin</STRONG>, <STRONG>delwin</STRONG>, <STRONG>mvwin</STRONG>, <STRONG>subwin</STRONG>, <STRONG>derwin</STRONG>, <STRONG>mvderwin</STRONG>, <STRONG>dupwin</STRONG>,
       <STRONG>wsyncup</STRONG>, <STRONG>syncok</STRONG>, <STRONG>wcursyncup</STRONG>, <STRONG>wsyncdown</STRONG> - create <STRONG>curses</STRONG>
       windows


</PRE>
<H2><a name="h2-SYNOPSIS">SYNOPSIS</a></H2><PRE>
       <STRONG>#include</STRONG> <STRONG>&lt;curses.h&gt;</STRONG>

       <STRONG>WINDOW</STRONG> <STRONG>*newwin(</STRONG>
             <STRONG>int</STRONG> <EM>nlines</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>ncols</EM><STRONG>,</STRONG>
             <STRONG>int</STRONG> <EM>begin</EM><STRONG>_</STRONG><EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>begin</EM><STRONG>_</STRONG><EM>x</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>delwin(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>mvwin(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>x</EM><STRONG>);</STRONG>
       <STRONG>WINDOW</STRONG> <STRONG>*subwin(WINDOW</STRONG> <STRONG>*</STRONG><EM>orig</EM><STRONG>,</STRONG>
             <STRONG>int</STRONG> <EM>nlines</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>ncols</EM><STRONG>,</STRONG>
             <STRONG>int</STRONG> <EM>begin</EM><STRONG>_</STRONG><EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>begin</EM><STRONG>_</STRONG><EM>x</EM><STRONG>);</STRONG>
       <STRONG>WINDOW</STRONG> <STRONG>*derwin(WINDOW</STRONG> <STRONG>*</STRONG><EM>orig</EM><STRONG>,</STRONG>
             <STRONG>int</STRONG> <EM>nlines</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>ncols</EM><STRONG>,</STRONG>
             <STRONG>int</STRONG> <EM>begin</EM><STRONG>_</STRONG><EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>begin</EM><STRONG>_</STRONG><EM>x</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>mvderwin(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>par</EM><STRONG>_</STRONG><EM>y</EM><STRONG>,</STRONG> <STRONG>int</STRONG> <EM>par</EM><STRONG>_</STRONG><EM>x</EM><STRONG>);</STRONG>
       <STRONG>WINDOW</STRONG> <STRONG>*dupwin(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>);</STRONG>
       <STRONG>void</STRONG> <STRONG>wsyncup(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>);</STRONG>
       <STRONG>int</STRONG> <STRONG>syncok(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>,</STRONG> <STRONG>bool</STRONG> <EM>bf</EM><STRONG>);</STRONG>
       <STRONG>void</STRONG> <STRONG>wcursyncup(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>);</STRONG>
       <STRONG>void</STRONG> <STRONG>wsyncdown(WINDOW</STRONG> <STRONG>*</STRONG><EM>win</EM><STRONG>);</STRONG>


</PRE>
<H2><a name="h2-DESCRIPTION">DESCRIPTION</a></H2><PRE>

</PRE>
<H3><a name="h3-newwin">newwin</a></H3><PRE>
       Calling <STRONG>newwin</STRONG> creates and returns a pointer to a new win-
       dow with the given number of lines and columns.  The upper
       left-hand corner of the window is at
              line <EM>begin</EM>_<EM>y</EM>,
              column <EM>begin</EM>_<EM>x</EM>

       If either <EM>nlines</EM> or <EM>ncols</EM> is zero, they default to
              <STRONG>LINES</STRONG> <STRONG>-</STRONG> <EM>begin</EM>_<EM>y</EM> and
              <STRONG>COLS</STRONG> <STRONG>-</STRONG> <EM>begin</EM>_<EM>x</EM>.

       A   new   full-screen   window   is   created  by  calling
       <STRONG>newwin(0,0,0,0)</STRONG>.


</PRE>
<H3><a name="h3-delwin">delwin</a></H3><PRE>
       Calling <STRONG>delwin</STRONG> deletes the named window, freeing all memo-
       ry associated with it (it does not actually erase the win-
       dow's screen image).  Subwindows must  be  deleted  before
       the main window can be deleted.


</PRE>
<H3><a name="h3-mvwin">mvwin</a></H3><PRE>
       Calling <STRONG>mvwin</STRONG> moves the window so that the upper left-hand
       corner is at position (<EM>x</EM>, <EM>y</EM>).  If the move would cause the
       window to be off the screen, it is an error and the window
       is not moved.  Moving subwindows is allowed, but should be
       avoided.


</PRE>
<H3><a name="h3-subwin">subwin</a></H3><PRE>
       Calling <STRONG>subwin</STRONG> creates and returns a pointer to a new win-
       dow with the given number of lines, <EM>nlines</EM>,  and  columns,
       <EM>ncols</EM>.   The  window  is at position (<EM>begin</EM>_<EM>y</EM>, <EM>begin</EM>_<EM>x</EM>) on
       the screen.  The subwindow shares memory with  the  window
       <EM>orig</EM>,  so that changes made to one window will affect both
       windows.  When using this routine, it is necessary to call
       <STRONG>touchwin</STRONG>  or  <STRONG>touchline</STRONG> on <EM>orig</EM> before calling <STRONG>wrefresh</STRONG> on
       the subwindow.


</PRE>
<H3><a name="h3-derwin">derwin</a></H3><PRE>
       Calling <STRONG>derwin</STRONG> is the same as calling <STRONG>subwin,</STRONG> except  that
       <EM>begin</EM>_<EM>y</EM> and <EM>begin</EM>_<EM>x</EM> are relative to the origin of the win-
       dow <EM>orig</EM> rather than the screen.  There is  no  difference
       between the subwindows and the derived windows.

       Calling <STRONG>mvderwin</STRONG> moves a derived window (or subwindow) in-
       side its parent window.  The screen-relative parameters of
       the  window are not changed.  This routine is used to dis-
       play different parts of the  parent  window  at  the  same
       physical position on the screen.


</PRE>
<H3><a name="h3-dupwin">dupwin</a></H3><PRE>
       Calling  <STRONG>dupwin</STRONG>  creates  an exact duplicate of the window
       <EM>win</EM>.


</PRE>
<H3><a name="h3-wsyncup">wsyncup</a></H3><PRE>
       Calling <STRONG>wsyncup</STRONG> touches all locations in ancestors of  <EM>win</EM>
       that  are changed in <EM>win</EM>.  If <STRONG>syncok</STRONG> is called with second
       argument <STRONG>TRUE</STRONG> then <STRONG>wsyncup</STRONG> is called automatically whenev-
       er there is a change in the window.


</PRE>
<H3><a name="h3-wsyncdown">wsyncdown</a></H3><PRE>
       The  <STRONG>wsyncdown</STRONG>  routine  touches each location in <EM>win</EM> that
       has been touched in any of  its  ancestor  windows.   This
       routine  is  called by <STRONG>wrefresh</STRONG>, so it should almost never
       be necessary to call it manually.


</PRE>
<H3><a name="h3-wcursyncup">wcursyncup</a></H3><PRE>
       The routine <STRONG>wcursyncup</STRONG> updates the current cursor position
       of  all the ancestors of the window to reflect the current
       cursor position of the window.


</PRE>
<H2><a name="h2-RETURN-VALUE">RETURN VALUE</a></H2><PRE>
       Routines that return an integer return the integer <STRONG>ERR</STRONG> up-
       on  failure  and <STRONG>OK</STRONG> (SVr4 only specifies "an integer value
       other than <STRONG>ERR</STRONG>") upon successful completion.

       Routines that return pointers return <STRONG>NULL</STRONG> on error.

       X/Open defines no error conditions.  In  this  implementa-
       tion

       <STRONG>delwin</STRONG>
            returns an error if the window pointer is null, or if
            the window is the parent of another window.

       <STRONG>derwin</STRONG>
            returns an error if  the  parent  window  pointer  is
            null,  or  if  any  of its ordinates or dimensions is
            negative, or if the resulting window does not fit in-
            side the parent window.

       <STRONG>dupwin</STRONG>
            returns an error if the window pointer is null.

            This implementation also maintains a list of windows,
            and checks that the pointer passed to <STRONG>delwin</STRONG>  is  one
            that it created, returning an error if it was not..

       <STRONG>mvderwin</STRONG>
            returns an error if the window pointer is null, or if
            some part of the window would be placed off-screen.

       <STRONG>mvwin</STRONG>
            returns an error if the window pointer is null, or if
            the  window  is  really a pad, or if some part of the
            window would be placed off-screen.

       <STRONG>newwin</STRONG>
            will fail if either of  its  beginning  ordinates  is
            negative, or if either the number of lines or columns
            is negative.

       <STRONG>syncok</STRONG>
            returns an error if the window pointer is null.

       <STRONG>subwin</STRONG>
            returns an error if  the  parent  window  pointer  is
            null,  or  if  any  of its ordinates or dimensions is
            negative, or if the resulting window does not fit in-
            side the parent window.

       The  functions which return a window pointer may also fail
       if there is insufficient memory for its  data  structures.
       Any  of  these  functions  will fail if the screen has not
       been initialized, i.e., with <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>.


</PRE>
<H2><a name="h2-NOTES">NOTES</a></H2><PRE>
       If many small changes are made to the window, the  <STRONG>wsyncup</STRONG>
       option could degrade performance.

       Note that <STRONG>syncok</STRONG> may be a macro.


</PRE>
<H2><a name="h2-BUGS">BUGS</a></H2><PRE>
       The  subwindow  functions (<EM>subwin</EM>, <EM>derwin</EM>, <EM>mvderwin</EM>, <STRONG>wsyn-</STRONG>
       <STRONG>cup</STRONG>, <STRONG>wsyncdown</STRONG>, <STRONG>wcursyncup</STRONG>, <STRONG>syncok</STRONG>) are flaky, incomplete-
       ly implemented, and not well tested.

       The  System  V  curses documentation is very unclear about
       what <STRONG>wsyncup</STRONG> and <STRONG>wsyncdown</STRONG> actually do.  It seems to imply
       that  they  are only supposed to touch exactly those lines
       that are affected by ancestor changes.  The language here,
       and  the  behavior  of  the <STRONG>curses</STRONG> implementation, is pat-
       terned on the XPG4 curses standard.  The weaker XPG4  spec
       may result in slower updates.


</PRE>
<H2><a name="h2-PORTABILITY">PORTABILITY</a></H2><PRE>
       The  XSI  Curses  standard,  Issue 4 describes these func-
       tions.


</PRE>
<H2><a name="h2-SEE-ALSO">SEE ALSO</a></H2><PRE>
       <STRONG><A HREF="ncurses.3x.html">curses(3x)</A></STRONG>, <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3x)</A></STRONG>,  <STRONG><A HREF="curs_touch.3x.html">curs_touch(3x)</A></STRONG>,  <STRONG>curs_vari-</STRONG>
       <STRONG><A HREF="curs_variables.3x.html">ables(3x)</A></STRONG>



                                                        <STRONG><A HREF="curs_window.3x.html">curs_window(3x)</A></STRONG>
</PRE>
<div class="nav">
<ul>
<li><a href="#h2-NAME">NAME</a></li>
<li><a href="#h2-SYNOPSIS">SYNOPSIS</a></li>
<li><a href="#h2-DESCRIPTION">DESCRIPTION</a>
<ul>
<li><a href="#h3-newwin">newwin</a></li>
<li><a href="#h3-delwin">delwin</a></li>
<li><a href="#h3-mvwin">mvwin</a></li>
<li><a href="#h3-subwin">subwin</a></li>
<li><a href="#h3-derwin">derwin</a></li>
<li><a href="#h3-dupwin">dupwin</a></li>
<li><a href="#h3-wsyncup">wsyncup</a></li>
<li><a href="#h3-wsyncdown">wsyncdown</a></li>
<li><a href="#h3-wcursyncup">wcursyncup</a></li>
</ul>
</li>
<li><a href="#h2-RETURN-VALUE">RETURN VALUE</a></li>
<li><a href="#h2-NOTES">NOTES</a></li>
<li><a href="#h2-BUGS">BUGS</a></li>
<li><a href="#h2-PORTABILITY">PORTABILITY</a></li>
<li><a href="#h2-SEE-ALSO">SEE ALSO</a></li>
</ul>
</div>
</BODY>
</HTML>
