<!--
  $Id: index.html,v 1.7 2013/06/07 20:12:36 tom Exp $
  ****************************************************************************
  * Copyright (c) 1998-2010,2013 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.                                                           *
  ****************************************************************************
  -->
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN">

<html>
<head>
  <meta name="generator" content=
  "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org">

  <title>NCURSES &ndash; Manual Pages</title>
  <link rev="MADE" href="mailto:dickey@invisible-island.net">
  <meta http-equiv="Content-Type" content=
  "text/html; charset=us-ascii">
</head>

<body>
  <ul>
    <li>Programs:

      <ul>
        <li><a href="captoinfo.1m.html">captoinfo &ndash; convert a
        termcap description into a terminfo description</a></li>

        <li><a href="clear.1.html">clear &ndash; clear the terminal
        screen</a></li>

        <li><a href="infocmp.1m.html">infocmp &ndash; compare or
        print out terminfo descriptions</a></li>

        <li><a href="infotocap.1m.html">infotocap &ndash; convert a
        terminfo description into a termcap description</a></li>

        <li><a href="tabs.1.html">tabs &ndash; set tabs on a
        terminal</a></li>

        <li><a href="tic.1m.html">tic &ndash; the terminfo
        entry-description compiler</a></li>

        <li><a href="toe.1m.html">toe &ndash; table of (terminfo)
        entries</a></li>

        <li><a href="tput.1.html">tput &ndash; initialize a
        terminal or query terminfo database</a></li>

        <li><a href="tset.1.html">tset &ndash; terminal
        initialization</a></li>
      </ul>
    </li>

    <li>Libraries:

      <ul>
        <li><a href="ncurses.3x.html">ncurses &ndash; CRT screen
        handling and optimization package</a></li>

        <li><a href="panel.3x.html">panel- panel stack extension
        for curses</a></li>

        <li><a href="form.3x.html">form &ndash; curses extension
        for programming forms</a></li>

        <li><a href="menu.3x.html">menu &ndash; curses extension
        for programming menus</a></li>
      </ul>
    </li>

    <li>File formats:

      <ul>
        <li><a href="terminfo.5.html">terminfo &ndash; terminal
        capability data base</a></li>

        <li><a href="term.5.html">term &ndash; format of compiled
        term file.</a></li>

        <li><a href="term.7.html">term &ndash; conventions for
        naming terminal types</a></li>
      </ul>
    </li>
  </ul>
</body>
</html>
