<!--
  ****************************************************************************
  * Copyright 2020,2021 Thomas E. Dickey                                     *
  * Copyright 1998-2015,2016 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.23 2021/06/17 21:11:08 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 https://invisible-island.net/scripts/readme.html#others_scripts">
<TITLE>curs_window 3x</TITLE>
<link rel="author" 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 window  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>.

       Regardless of the function  used  for  creating  a  new  window  (e.g.,
       <STRONG>newwin</STRONG>, <STRONG>subwin</STRONG>, <STRONG>derwin</STRONG>, <STRONG>newpad</STRONG>), rather than a duplicate (with <STRONG>dupwin</STRONG>),
       all of the window modes are initialized to the default  values.   These
       functions set window modes after a window is created:

              idcok, idlok, immedok, keypad, leaveok, nodelay, scrollok,
              setscrreg, syncok, wbkgdset, wbkgrndset, and wtimeout


</PRE><H3><a name="h3-delwin">delwin</a></H3><PRE>
       Calling <STRONG>delwin</STRONG> deletes the named window, freeing all memory  associated
       with  it  (it does not actually erase the window's screen image).  Sub-
       windows 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 window 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>touch-</STRONG>
       <STRONG>win</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 window <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) inside its par-
       ent window.  The screen-relative  parameters  of  the  window  are  not
       changed.  This routine is used to display 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 whenever there is a change in the  win-
       dow.


</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>wre-</STRONG>
       <STRONG>fresh</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> upon failure and
       <STRONG>OK</STRONG> (SVr4 only specifies "an integer value other than  <STRONG>ERR</STRONG>")  upon  suc-
       cessful completion.

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

       X/Open defines no error conditions.  In this implementation

       <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 inside 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, return-
            ing 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 inside 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 (<STRONG>subwin</STRONG>, <STRONG>derwin</STRONG>, <STRONG>mvderwin</STRONG>, <STRONG>wsyncup</STRONG>,  <STRONG>wsyncdown</STRONG>,
       <STRONG>wcursyncup</STRONG>,  <STRONG>syncok</STRONG>)  are flaky, incompletely 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 sup-
       posed to touch exactly  those  lines  that  are  affected  by  ancestor
       changes.  The language here, and the behavior of the <STRONG>curses</STRONG> implementa-
       tion, is patterned 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 functions.


</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><A HREF="curs_variables.3x.html">curs_variables(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>
