<!--
  $Id: announce.html,v 1.68 2022/12/31 20:38:46 tom Exp $
  ****************************************************************************
  * Copyright 2018-2021,2022 Thomas E. Dickey                                *
  *                                                                          *
  * 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 HTML5 for Linux version 5.6.0">
  <title>Announcing ncurses 6.4</title>
  <link rel="author" href="mailto:bug-ncurses@gnu.org">
  <meta http-equiv="Content-Type" content=
  "text/html; charset=us-ascii">
  <style type="text/css">
  p,li { max-width:700px; }
  dd { max-width:630px; }
  *.main-name {
        font-style: italic;
        font-variant: small-caps;
  }
  *.part-name {
        font-family: "Andale Mono", "Monotype.com", monospace;
        font-size: 12pt;
        font-weight: bold;
  }
  *.demo-name {
        font-family: "Andale Mono", "Monotype.com", monospace;
        font-size: 10pt;
  }
  </style>
</head>
<body>
  <h1 class="no-header">Announcing ncurses 6.4</h1>

  <h2><a name="h2-overview" id="h2-overview">Overview</a></h2>

  <p>The <span class="main-name">ncurses</span> (new curses)
  library is a free software emulation of curses in System V
  Release 4.0 (SVr4), and more. It uses terminfo format, supports
  pads and color and multiple highlights and forms characters and
  function-key mapping, and has all the other SVr4-curses
  enhancements over BSD curses. SVr4 curses became the basis of
  X/Open Curses.</p>

  <p>In mid-June 1995, the maintainer of 4.4BSD curses declared
  that he considered 4.4BSD curses obsolete, and encouraged the
  keepers of <span class="main-name">unix</span> releases such as
  BSD/OS, FreeBSD and NetBSD to switch over to <span class=
  "main-name">ncurses</span>.</p>

  <p>Since 1995, <span class="main-name">ncurses</span> has been
  ported to many systems:</p>

  <ul>
    <li>It is used in almost every system based on the Linux kernel
    (aside from some embedded applications).</li>

    <li>It is used as the system curses library on OpenBSD, FreeBSD
    and MacOS.</li>

    <li>It is used in environments such as Cygwin and MinGW. The
    first of these was EMX on OS/2 Warp.</li>

    <li>It is used (though usually not as the <em>system</em>
    curses) on all of the vendor <span class=
    "main-name">unix</span> systems, e.g., AIX, HP-UX, IRIX64, SCO,
    Solaris, Tru64.</li>

    <li>It should work readily on any ANSI/POSIX-conforming
    <span class="main-name">unix</span>.</li>
  </ul>

  <p>The distribution includes the library and support utilities,
  including</p>

  <ul>
    <li><a href="https://invisible-island.net/ncurses/man/captoinfo.1m.html"><span class=
    "part-name">captoinfo</span></a>, a termcap conversion
    tool</li>

    <li><a href="https://invisible-island.net/ncurses/man/clear.1.html"><span class=
    "part-name">clear</span></a>, utility for clearing the
    screen</li>

    <li><a href="https://invisible-island.net/ncurses/man/infocmp.1m.html"><span class=
    "part-name">infocmp</span></a>, the terminfo decompiler</li>

    <li><a href="https://invisible-island.net/ncurses/man/tabs.1.html"><span class=
    "part-name">tabs</span></a>, set tabs on a terminal</li>

    <li><a href="https://invisible-island.net/ncurses/man/tic.1m.html"><span class=
    "part-name">tic</span></a>, the terminfo compiler</li>

    <li><a href="https://invisible-island.net/ncurses/man/toe.1m.html"><span class=
    "part-name">toe</span></a>, list (table of) terminfo
    entries</li>

    <li><a href="https://invisible-island.net/ncurses/man/tput.1.html"><span class=
    "part-name">tput</span></a>, utility for retrieving terminal
    capabilities in shell scripts</li>

    <li><a href="https://invisible-island.net/ncurses/man/tset.1.html"><span class=
    "part-name">tset</span></a>, to initialize the terminal</li>
  </ul>

  <p>Full manual pages are provided for the library and tools.</p>

  <p>The <span class="main-name">ncurses</span> distribution is
  available at <span class="main-name">ncurses</span>' <a href=
  "https://invisible-island.net/ncurses/">homepage</a>:</p>

  <blockquote>
    <p><a href=
    "https://invisible-island.net/archives/ncurses/">https://invisible-island.net/archives/ncurses/</a>
    or<br>
    <a href=
    "https://invisible-mirror.net/archives/ncurses/">https://invisible-mirror.net/archives/ncurses/</a>&nbsp;.</p>
  </blockquote>

  <p>It is also available at the GNU distribution site</p>

  <blockquote>
    <p><a href=
    "https://ftp.gnu.org/gnu/ncurses/">https://ftp.gnu.org/gnu/ncurses/</a>&nbsp;.</p>
  </blockquote>

  <h2><a name="h2-release-notes" id="h2-release-notes">Release
  Notes</a></h2>

  <p>These notes are for <span class="main-name">ncurses</span>
  6.4, released <strong>December 31, 2022</strong>.</p>

  <p>This release is designed to be source-compatible with
  <span class="main-name">ncurses</span> 5.0 through 6.3; providing
  extensions to the application binary interface (ABI). Although
  the source can still be configured to support the <span class=
  "main-name">ncurses</span> 5 ABI, the reason for the release is
  to reflect improvements to the <span class=
  "main-name">ncurses</span> 6 ABI and the supporting utility
  programs.</p>

  <p>There are, of course, numerous other improvements, listed in
  this announcement.</p>

  <p>The most <a href="#h3-bug-fixes">important
  bug-fixes/improvements</a> dealt with robustness issues. The
  release notes also mention some other bug-fixes, but are focused
  on new features and improvements to existing features since
  <span class="main-name">ncurses</span> 6.3 release.</p>

  <h3><a name="h3-library" id="h3-library">Library improvements</a></h3>

  <h4><a name="h4-new-library" id="h4-new-library">New features</a></h4>

  <p>There are no new features in this release.</p>

  <h4><a name="h4-fixes-library" id="h4-fixes-library">Other
  improvements</a></h4>

  <p>These are improvements to existing features:</p>

  <ul>
    <li>
      <p>modify <tt>delscreen</tt> to more effectively delete all
      windows on the given screen.</p>
    </li>

    <li>
      <p>modify <tt>wnoutrefresh</tt> to call <tt>pnoutrefresh</tt>
      if its parameter is a pad, rather than treating it as an
      error, and modify new_panel to permit its window-parameter to
      be a pad</p>
    </li>

    <li>
      <p>modify curses_trace() to show the trace-mask as symbols,
      e.g., <tt>TRACE_ORDINARY</tt>, <tt>DEBUG_LEVEL(3)</tt>.</p>
    </li>

    <li>
      <p>improve checks for valid mouse events when an intermediate
      mouse state is not part of the mousemask specified by the
      caller</p>
    </li>

    <li>
      <p>allow extended-color number in <em>opts</em> parameter of
      <tt>wattr_on</tt>.</p>
    </li>

    <li>
      <p>improve <tt>_tracecchar_t2</tt> formatting of
      base+combining character.</p>
    </li>

    <li>
      <p>trim out some unwanted linker options from ncurses*config
      and .pc files seen in Fedora 36+.</p>
    </li>

    <li>
      <p>improve shell-scripts with <em>shellcheck</em></p>
    </li>

    <li>
      <p>improve use of "trap" in shell scripts, using a
      script.</p>
    </li>

    <li>
      <p>modify <tt>make-tar.sh</tt> scripts to make timestamps
      more predictable.</p>
    </li>
  </ul>

  <p>These are corrections to existing features:</p>

  <ul>
    <li>
      <p>modify <tt>misc/gen-pkgconfig.in</tt> to allow for the
      case where the library directory does not yet exist, since
      this is processed before doing an install</p>
    </li>

    <li>
      <p>set trailing null on string passed from <tt>winsnstr</tt>
      to <tt>wins_nwstr</tt>.</p>
    </li>

    <li>
      <p>modify <tt>waddch_literal</tt> to allow for double-width
      base character when merging a combining character</p>
    </li>
  </ul>

  <h3><a name="h3-programs" id="h3-programs">Program
  improvements</a></h3>

  <p id="h4-utilities">Several improvements were made to the
  utility programs:</p>

  <dl>
    <dt><span class="part-name"><a href=
    "https://invisible-island.net/ncurses/man/infocmp.1m.html">infocmp</a></span>
    </dt>

    <dd>
      <ul>
        <li>rewrite <tt>canonical_name</tt> function of
        <tt>infocmp</tt> to ensure buffer size</li>

        <li>improve readability of long parameterized expressions
        with the infocmp &ldquo;<tt>-f</tt>&rdquo; option by
        allowing split before a &ldquo;<tt>%p</tt>&rdquo;
        marker.</li>

        <li>modify verbose-option of <tt>infocmp</tt>,
        <tt>tic</tt>, <tt>toe</tt> to enable debug-tracing if that
        is configured.</li>
      </ul>
    </dd>

    <dt><span class="part-name"><a href=
    "https://invisible-island.net/ncurses/man/tabs.1.html">tabs</a></span>
    </dt>

    <dd>limit tab-stop values to max-columns</dd>

    <dt><span class="part-name"><a href=
    "https://invisible-island.net/ncurses/man/tic.1m.html">tic</a></span>
    </dt>

    <dd>add consistency check in tic for u6/u7/u8/u9 and NQ
    capabilities.</dd>

    <dt><span class="part-name"><a href=
    "https://invisible-island.net/ncurses/man/tput.1.html">tput</a></span>
    </dt>

    <dd>corrected use of original tty-modes in <em>init/reset</em>
    subcommands</dd>
  </dl>

  <h4><a name="h4-examples" id="h4-examples">Examples</a></h4>

  <p>Along with the library and utilities, improvements were made
  to the <a href=
  "https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a>. Most of
  this activity aimed at improving the test-packages:</p>

  <ul>
    <li>
      <p>add minimal <tt>-h</tt> (usage) and <tt>-V</tt> (version)
      getopt logic to all ncurses-examples programs.</p>
    </li>

    <li>
      <p>fix an error in "@" command in <tt>test/ncurses.c</tt>
      F-menu</p>
    </li>

    <li>
      <p>add curses_trace to ifdef's for <tt>START_TRACE</tt> in
      <tt>test/test.priv.h</tt></p>
    </li>

    <li>
      <p>improve pthread-configuration for test/worm.c</p>
    </li>

    <li>
      <p>add <tt>setlocale</tt> call to several test-programs.</p>
    </li>

    <li>
      <p>workaround in <tt>test/picsmap.c</tt> for use of floating
      point for rgb values by ImageMagick 6.9.11, which appears to
      use the wrong upper limit.</p>
    </li>

    <li>
      <p>use static libraries for AdaCurses test-package for
      Mageia, since no gprbuild package is available.</p>
    </li>

    <li>
      <p>install Ada95 sample programs in libexecdir, adding a
      wrapper script to invoke those.</p>
    </li>

    <li>
      <p>install ncurses-examples programs in libexecdir, adding a
      wrapper script to invoke those.</p>
    </li>
  </ul>

  <p>There are other new demo/test programs and reusable
  examples:</p>

  <dl>
    <dt><span class="part-name"><em>test/combine</em></span>
    </dt>

    <dd>demonstrate combining characters</dd>

    <dt><span class="part-name"><em>test/test_delwin</em></span>
    </dt>

    <dd>demonstrate deleting a window</dd>

    <dt><span class="part-name"><em>test/test_mouse</em></span>
    </dt>

    <dd>observe mouse events in the raw terminal or parsed ncurses
    modes</dd>

    <dt><span class="part-name"><em>test/test_unget_wch</em></span>
    </dt>

    <dd>demonstrate the unget_wch and unget functions</dd>
  </dl>

  <h3><a name="h3-database" id="h3-database">Terminal database</a></h3>

  <p>There are several new terminal descriptions:</p>

  <ul>
    <li><tt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-mosh">mosh</a></tt>
    </li>

    <li><tt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-mosh-256color">mosh-256color</a></tt>
    </li>

    <li><tt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-teken-16color">teken-16color</a></tt>
    </li>

    <li><tt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-teken-sc">teken-sc</a></tt>
    </li>

    <li><tt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-teken-vt">teken-vt</a></tt>
    </li>

    <li><tt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-xgterm">xgterm</a></tt>
    </li>
  </ul>

  <p>There are many changes to existing terminal descriptions. Some
  were updates to several descriptions:</p>

  <ul>
    <li>
      <p>make description-fields distinct</p>
    </li>

    <li>
      <p>fix errata in description fields</p>
    </li>

    <li>
      <p>add/use several building-blocks:</p>

      <ul>
        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-aixterm_sl"><tt>aixterm+sl</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-ansi_cpr"><tt>ansi+cpr</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-apollo_vt132"><tt>apollo+vt132</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-decid_cpr"><tt>decid+cpr</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-ncr260vp_sl"><tt>ncr260vp+sl</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-wyse_sl"><tt>wyse+sl</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-x10term_sl"><tt>x10term+sl</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_acs"><tt>xterm+acs</tt></a></li>

        <li><a href=
        "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm_alt47"><tt>xterm+alt47</tt></a></li>
      </ul>
    </li>
  </ul>

  <p>while others affected specific descriptions. These were
  retested, to take into account changes by their developers:</p>

  <ul>
    <li>
      <p><tt><a href=
      "https://invisible-island.net/ncurses/terminfo.src.html#tic-kitty">kitty</a></tt>
      </p>
    </li>

    <li>
      <p><tt><a href=
      "https://invisible-island.net/ncurses/terminfo.src.html#tic-teken">teken</a></tt>
      </p>
    </li>
  </ul>

  <p>while these are specific fixes based on reviewing
  documentation, user reports, or warnings from <span class=
  "part-name">tic</span>:</p>

  <dl>
    <dt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-att610_cvis0">att610+cvis0</a>
    </dt>

    <dd>amended note as per documentation for att610, att620,
    att730</dd>

    <dt><a href="https://invisible-island.net/ncurses/terminfo.src.html#tic-kon">kon</a>,
    kon2, jfbterm</dt>

    <dd>revise to undo "linux2.6" change to smacs/rmacs/enacs</dd>

    <dt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-st-0_6">st-0.6</a>
    </dt>

    <dd>add dim, ecma+strikeout</dd>

    <dt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-foot_base">foot+base</a>
    </dt>

    <dd>add xterm+sl-alt</dd>

    <dt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-dec_sl">dec+sl</a>
    </dt>

    <dd>correct dsl in dec+sl</dd>

    <dt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-mintty">mintty</a> and
    tmux</dt>

    <dd>correct setal in mintty/tmux entries, add to vte-2018</dd>

    <dt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-nsterm">nsterm</a>
    </dt>

    <dd>modify nsterm to use xterm+alt1049</dd>

    <dt><a href="https://invisible-island.net/ncurses/terminfo.src.html#tic-putty">putty</a>
    </dt>

    <dd>modify putty to use xterm+alt1049</dd>

    <dt><a href=
    "https://invisible-island.net/ncurses/terminfo.src.html#tic-vte-2018">vte-2018</a>
    </dt>

    <dd>add blink and setal</dd>
  </dl>

  <p>A few entries use extensions (user-defined terminal
  capabilities):</p>

  <ul>
    <li>
      <p>use <tt>ansi+enq</tt> and <tt>decid+cpr</tt> in cases
      where the terminal probably supported the u6-u9 extension</p>
    </li>

    <li>
      <p>remove u6-u9 from teken-2018</p>
    </li>

    <li>
      <p>use <tt>NQ</tt> to flag entries where the terminal does
      not support query and response</p>
    </li>

    <li>
      <p>add/use <a href=
      "https://invisible-island.net/ncurses/terminfo.src.html#tic-bracketed_paste"><tt>bracketed+paste</tt></a>
      to help identify terminals supporting this xterm feature</p>
    </li>

    <li>
      <p>modify samples for xterm mouse 1002/1003 modes to use 1006
      mode, and also provide for focus in/out responses</p>
    </li>

    <li>
      <p>xterm patch #371 supports DEC-compatible status-line. add
      <tt>dec+sl</tt> to xterm-new, per xterm #371, add <a href=
      "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-p371"><tt>xterm-p371</tt></a>,
      add <a href=
      "https://invisible-island.net/ncurses/terminfo.src.html#tic-xterm-p370"><tt>xterm-p370</tt></a>,
      for use in older terminals, and set &ldquo;xterm-new&rdquo;
      to &ldquo;xterm-p370&rdquo; (to ease adoption).</p>
    </li>
  </ul>

  <h3><a name="h3-documentation" id=
  "h3-documentation">Documentation</a></h3>

  <p>As usual, this release</p>

  <ul>
    <li>
      <p>improves documentation by describing new features,</p>
    </li>

    <li>
      <p>attempts to improve the description of features which
      users have found confusing</p>
    </li>

    <li>
      <p>fills in overlooked descriptions of features which were
      described in the <a href="https://invisible-island.net/ncurses/NEWS.html">NEWS</a> file
      but treated sketchily in manual pages.</p>
    </li>
  </ul>

  <p>In addition to providing background information to explain
  these features and show how they evolved, there are corrections,
  clarifications, etc.:</p>

  <ul>
    <li>
      <p>Corrections:</p>

      <ul>
        <li>
          <p>remove a stray '/' from description of <tt>%g</tt> in
          <a href=
          "https://invisible-island.net/ncurses/man/terminfo.5.html#h3-Parameterized-Strings">
          terminfo(5)</a>.</p>
        </li>

        <li>
          <p>correct/improve font-formatting in <a href=
          "https://invisible-island.net/ncurses/man/curs_getch.3x.html">curs_getch.3x</a>, as
          well as other manual pages.</p>
        </li>
      </ul>
    </li>

    <li>
      <p>New/improved history and portability sections:</p>

      <ul>
        <li>
          <p>add portability notes for <a href=
          "https://invisible-island.net/ncurses/man/curs_initscr.3x.html#h2-PORTABILITY">delscreen</a>
          and <a href=
          "https://invisible-island.net/ncurses/man/curs_window.3x.html#h2-PORTABILITY">delwin</a>
          in manual.</p>
        </li>

        <li>
          <p>improve <a href=
          "https://invisible-island.net/ncurses/man/curs_slk.3x.html#h2-EXTENSIONS">curs_slk.3x</a>
          discussion of extensions and portability</p>
        </li>
      </ul>
    </li>

    <li>
      <p>Other improvements:</p>

      <ul>
        <li>
          <p>improve <a href=
          "https://invisible-island.net/ncurses/man/curs_bkgd.3x.html">curs_bkgd.3x</a>,
          explaining that <tt>bkgdset</tt> can affect results for
          <tt>bkgd</tt></p>
        </li>

        <li>
          <p>add note on portable memory-leak checking in <a href=
          "https://invisible-island.net/ncurses/man/curs_memleaks.3x.html#h2-PORTABILITY">curs_memleaks.3x</a></p>
        </li>

        <li>
          <p>expanded description in <a href=
          "https://invisible-island.net/ncurses/man/resizeterm.3x.html">resizeterm.3x</a></p>
        </li>

        <li>
          <p>add section on releasing memory to <a href=
          "https://invisible-island.net/ncurses/man/curs_termcap.3x.html#h3-Releasing-Memory">
          curs_termcap.3x</a> and <a href=
          "https://invisible-island.net/ncurses/man/curs_terminfo.3x.html#h3-Releasing-Memory">
          curs_terminfo.3x</a> manpages.</p>
        </li>

        <li>
          <p>add clarification of the scope of dynamic variables in
          <a href=
          "https://invisible-island.net/ncurses/man/terminfo.5.html">terminfo(5)</a>.</p>
        </li>

        <li>
          <p>improve formatting of <a href=
          "https://invisible-island.net/ncurses/ncurses-intro.html">ncurses-intro.html</a>
          and <a href=
          "https://invisible-island.net/ncurses/hackguide.html">hackguide.html</a></p>
        </li>

        <li>
          <p>improve <a href=
          "https://invisible-island.net/ncurses/man/curs_clear.3x.html">curs_clear.3x</a>
          links to other pages</p>
        </li>

        <li>
          <p>update <a href=
          "https://invisible-island.net/ncurses/howto/NCURSES-Programming-HOWTO.html">ncurses-howto</a>,
          making documentation fixes along with corrections to
          example programs.</p>
        </li>

        <li>
          <p>use newer version 1.36 of gnathtml for generating Ada
          html files.</p>
        </li>

        <li>
          <p>update external links in <a href=
          "https://invisible-island.net/ncurses/Ada95.html">Ada95.html</a></p>
        </li>
      </ul>
    </li>
  </ul>

  <p>There are no new manual pages (all of the manual page updates
  are to existing pages).</p>

  <h3><a name="h3-bug-fixes" id="h3-bug-fixes">Interesting
  bug-fixes</a></h3>

  <p>While there were many bugs fixed during development of ncurses
  6.4, only a few (the reason for this release) were both important
  and interesting. Most of the bug-fixes were for local issues
  which did not affect compatibility across releases. Since those
  are detailed in the <a href=
  "https://invisible-island.net/ncurses/NEWS.html#t20221231">NEWS</a> file no elaboration is
  needed here.</p>

  <p>The interesting bugs were those dealing with memory leaks and
  buffer overflows. Although the utilities are designed for
  <em>text</em> files (which they do properly), some choose to test
  them with <strong>non-</strong><em>text</em> files.</p>

  <ul>
    <li>
      <p>Text files contain no embedded nulls. Also, they end with
      a newline. Feeding <strong>tic</strong> non-text files
      exposed a few cases where the program did not check for those
      issues. As a result, further processing of the input found
      limit-checks whose assumptions were invalid.</p>
    </li>

    <li>
      <p>Fixing the limit-checks (first) found a problem with
      <strong>tic</strong> managing the list of strings in a
      terminal description. In merging two terminal descriptions
      (i.e., the &ldquo;use=&rdquo; feature), <strong>tic</strong>
      was not allocating a complete copy. A quick repair for that
      introduced a memory leak.</p>
    </li>

    <li>
      <p>The checks for non-text files are improved (i.e., embedded
      nulls in the input file will cause <strong>tic</strong> to
      reject it rather than attempting to process it).</p>
    </li>

    <li>
      <p>The string allocations in <strong>tic</strong> are
      likewise improved.</p>
    </li>
  </ul>

  <h3><a name="h3-config-config" id=
  "h3-config-config">Configuration changes</a></h3>

  <h4><a name="h4-config-major" id="h4-config-major">Major
  changes</a></h4>

  <p>There are no major changes. No new options were added. Several
  improvements were made to configure checks.</p>

  <h4><a name="h4-config-options" id=
  "h4-config-options">Configuration options</a></h4>

  <p>There are a few new/modified configure options:</p>

  <dl>
    <dt><tt>--with-abi-version</tt>
    </dt>

    <dd>
      <p>add ABI 7 defaults to configure script.</p>
    </dd>

    <dt><tt>--with-caps</tt>
    </dt>

    <dd>
      <p>add warning in configure script if file specified for
      &ldquo;<tt>--with-caps</tt>&rdquo; does not exist.</p>
    </dd>

    <dt><tt>--with-manpage-format</tt>
    </dt>

    <dd>
      <p>bzip2 and xz compression are now supported</p>
    </dd>

    <dt><tt>--with-xterm-kbs</tt>
    </dt>

    <dd>
      <p>add check/warning in configure script if option
      &ldquo;<tt>--with-xterm-kbs</tt>&rdquo; is missing or
      inconsistent</p>
    </dd>
  </dl>

  <h3><a name="h3-portability" id="h3-portability">Portability</a></h3>

  <p>Many of the portability changes are implemented via the
  configure script:</p>

  <ul>
    <li>
      <p>amend configure option's auto-search to account for
      systems where none of the directories known to
      <em>pkg-config</em> exist</p>
    </li>

    <li>
      <p>corrected regex needed for older <em>pkg-config</em> used
      in Solaris 10</p>
    </li>

    <li>
      <p>improve handling of <tt>--with-pkg-config-libdir</tt>
      option, allowing for the case where either
      <tt>$PKG_CONFIG_LIBDIR</tt> or the option value has a
      colon-separated list of directories</p>
    </li>

    <li>
      <p>if the <tt>--with-pkg-config-libdir</tt> option is not
      given, use <tt>${libdir}/pkgconfig</tt> as a default</p>
    </li>

    <li>
      <p>improve search-path check for <em>pkg-config</em>, e.g.,
      for Debian testing which installs <em>pkg-config</em> with
      architecture-prefixes.</p>
    </li>

    <li>
      <p>build-fix for cross-compiling to MingW, conditionally add
      <tt>-lssp</tt></p>
    </li>

    <li>
      <p>improve configure check for <tt>getttynam</tt></p>
    </li>

    <li>
      <p>fixes to build with <em>dietlibc</em>:</p>

      <ul>
        <li>add configure check for <tt>fpathconf</tt></li>

        <li>add configure check for math sine/cosine, needed in
        test/tclock, and eliminate <tt>pow()</tt> from
        test/hanoi</li>

        <li>use <tt>wcsnlen</tt> as an alternative to
        <tt>wmemchr</tt> if it is not found</li>
      </ul>
    </li>

    <li>
      <p>modify configure macro <tt>CF_BUILD_CC</tt> to check if
      the build-compiler works, rather than that it is different
      from the cross-compiler, e.g., to accommodate a compiler
      which can be used for either purpose with different flags</p>
    </li>

    <li>
      <p>modify configure/scripts to work around interference by
      GNU grep 3.8</p>
    </li>
  </ul>

  <p>Here are some of the other portability fixes:</p>

  <ul>
    <li>
      <p>change <tt>man_db.renames</tt> to template, to handle
      <em>ncurses*-config</em> script with the
      <tt>--extra-suffix</tt> configure option.</p>
    </li>

    <li>
      <p>update <tt>CF_XOPEN_SOURCE</tt> macro, adding variants
      &ldquo;gnueabi" and &ldquo;gnueabihf" to get
      <tt>_DEFAULT_SOURCE</tt> special case, as well as adding GNU
      libc suffixes for &ldquo;abi64&rdquo;, &ldquo;abin32&rdquo;,
      &ldquo;x32&rdquo; to distinguish it from other libc
      flavors.</p>
    </li>

    <li>
      <p>work around <em>musl</em>'s nonstandard use of feature
      test macros by adding a definition for
      <tt>NCURSES_WIDECHAR</tt> to the generated &ldquo;.pc&rdquo;
      and <em><tt>*-config</tt></em> files.</p>
    </li>

    <li>
      <p>use &ldquo;<tt>command -v</tt>&rdquo; rather than
      &ldquo;<tt>type</tt>&rdquo; in <tt>Ada95/gen/Makefile.in</tt>
      to fix a portability issue.</p>
    </li>
  </ul>

  <hr>

  <h2><a name="h2-features" id="h2-features">Features of
  <span class="main-name">ncurses</span></a></h2>

  <p>The <span class="main-name">ncurses</span> package is fully
  upward-compatible with SVr4 (System V Release 4) curses:</p>

  <ul>
    <li>
      <p>All of the SVr4 calls have been implemented (and are
      documented).</p>
    </li>

    <li>
      <p><span class="main-name">ncurses</span> supports all of the
      for SVr4 curses features including keyboard mapping, color,
      forms-drawing with ACS characters, and automatic recognition
      of keypad and function keys.</p>
    </li>

    <li>
      <p><span class="main-name">ncurses</span> provides these SVr4
      add-on libraries (not part of X/Open Curses):</p>

      <ul>
        <li>
          <p>the panels library, supporting a stack of windows with
          backing store.</p>
        </li>

        <li>
          <p>the menus library, supporting a uniform but flexible
          interface for menu programming.</p>
        </li>

        <li>
          <p>the form library, supporting data collection through
          on-screen forms.</p>
        </li>
      </ul>
    </li>

    <li>
      <p><span class="main-name">ncurses</span>'s terminal database
      is fully compatible with that used by SVr4 curses.</p>

      <ul>
        <li>
          <p><span class="main-name">ncurses</span> supports
          user-defined capabilities which it can see, but which are
          hidden from SVr4 curses applications using the
          <em>same</em> terminal database.</p>
        </li>

        <li>
          <p>It can be optionally configured to match the format
          used in related systems such as AIX and Tru64.</p>
        </li>

        <li>
          <p>Alternatively, <span class="main-name">ncurses</span>
          can be configured to use hashed databases rather than the
          directory of files used by SVr4 curses.</p>
        </li>
      </ul>
    </li>

    <li>
      <p>The <span class="main-name">ncurses</span> utilities have
      options to allow you to filter terminfo entries for use with
      less capable <em>curses</em>/<em>terminfo</em> versions such
      as the HP-UX and AIX ports.</p>
    </li>
  </ul>

  <p>The <span class="main-name">ncurses</span> package also has
  many useful extensions over SVr4:</p>

  <ul>
    <li>
      <p>The API is 8-bit clean and base-level conformant with the
      X/OPEN curses specification, XSI curses (that is, it
      implements all <em>BASE</em> level features, and most
      <em>EXTENDED</em> features). It includes many function calls
      not supported under SVr4 curses (but portability of all calls
      is documented so you can use the SVr4 subset only).</p>
    </li>

    <li>
      <p>Unlike SVr3 curses, <span class="main-name">ncurses</span>
      can write to the rightmost-bottommost corner of the screen if
      your terminal has an insert-character capability.</p>
    </li>

    <li>
      <p>Ada95 and C++ bindings.</p>
    </li>

    <li>
      <p>Support for mouse event reporting with X Window xterm and
      FreeBSD and OS/2 console windows.</p>
    </li>

    <li>
      <p>Extended mouse support via Alessandro Rubini's gpm
      package.</p>
    </li>

    <li>
      <p>The function <code>wresize</code> allows you to resize
      windows, preserving their data.</p>
    </li>

    <li>
      <p>The function <code>use_default_colors</code> allows you to
      use the terminal's default colors for the default color pair,
      achieving the effect of transparent colors.</p>
    </li>

    <li>
      <p>The functions <code>keyok</code> and
      <code>define_key</code> allow you to better control the use
      of function keys, e.g., disabling the <span class=
      "main-name">ncurses</span> KEY_MOUSE, or by defining more
      than one control sequence to map to a given key code.</p>
    </li>

    <li>
      <p>Support for direct-color terminals, such as modern
      xterm.</p>
    </li>

    <li>
      <p>Support for 256-color terminals, such as modern xterm.</p>
    </li>

    <li>
      <p>Support for 16-color terminals, such as <em>aixterm</em>
      and <em>modern xterm</em>.</p>
    </li>

    <li>
      <p>Better cursor-movement optimization. The package now
      features a cursor-local-movement computation more efficient
      than either BSD's or System V's.</p>
    </li>

    <li>
      <p>Super hardware scrolling support. The screen-update code
      incorporates a novel, simple, and cheap algorithm that
      enables it to make optimal use of hardware scrolling,
      line-insertion, and line-deletion for screen-line movements.
      This algorithm is more powerful than the 4.4BSD curses
      <code>quickch</code> routine.</p>
    </li>

    <li>
      <p>Real support for terminals with the magic-cookie glitch.
      The screen-update code will refrain from drawing a highlight
      if the magic- cookie unattributed spaces required just before
      the beginning and after the end would step on a non-space
      character. It will automatically shift highlight boundaries
      when doing so would make it possible to draw the highlight
      without changing the visual appearance of the screen.</p>
    </li>

    <li>
      <p>It is possible to generate the library with a list of
      pre-loaded fallback entries linked to it so that it can serve
      those terminal types even when no terminfo tree or termcap
      file is accessible (this may be useful for support of
      screen-oriented programs that must run in single-user
      mode).</p>
    </li>

    <li>
      <p>The <a href="https://invisible-island.net/ncurses/man/tic.1m.html"><span class=
      "part-name">tic</span></a>/<a href=
      "https://invisible-island.net/ncurses/man/captoinfo.1m.html">captoinfo</a> utility
      provided with <span class="main-name">ncurses</span> has the
      ability to translate many termcaps from the XENIX, IBM and
      AT&amp;T extension sets.</p>
    </li>

    <li>
      <p>A BSD-like <a href=
      "https://invisible-island.net/ncurses/man/tset.1.html"><span class=
      "part-name">tset</span></a> utility is provided.</p>
    </li>

    <li>
      <p>The <span class="main-name">ncurses</span> library and
      utilities will automatically read terminfo entries from
      $HOME/.terminfo if it exists, and compile to that directory
      if it exists and the user has no write access to the system
      directory. This feature makes it easier for users to have
      personal terminfo entries without giving up access to the
      system terminfo directory.</p>
    </li>

    <li>
      <p>You may specify a path of directories to search for
      compiled descriptions with the environment variable
      TERMINFO_DIRS (this generalizes the feature provided by
      TERMINFO under stock System V.)</p>
    </li>

    <li>
      <p>In terminfo source files, use capabilities may refer not
      just to other entries in the same source file (as in System
      V) but also to compiled entries in either the system terminfo
      directory or the user's $HOME/.terminfo directory.</p>
    </li>

    <li>
      <p>The table-of-entries utility <a href=
      "https://invisible-island.net/ncurses/man/toe.1m.html"><span class=
      "part-name">toe</span></a> makes it easy for users to see
      exactly what terminal types are available on the system.</p>
    </li>

    <li>
      <p>The library meets the XSI requirement that every macro
      entry point has a corresponding function which may be linked
      (and will be prototype-checked) if the macro definition is
      disabled with <code>#undef</code>.</p>
    </li>

    <li>
      <p>Extensive documentation is provided (see the <em><a href=
      "https://invisible-island.net/ncurses/ncurses.faq.html#additional_reading">Additional
      Reading</a></em> section of the <em><a href=
      "https://invisible-island.net/ncurses/ncurses.faq.html"><span class=
      "main-name">ncurses</span> FAQ</a></em> for online
      documentation).</p>
    </li>
  </ul>

  <h2><a name="h2-who-uses" id="h2-who-uses">Applications using
  <span class="main-name">ncurses</span></a></h2>

  <p>The <span class="main-name">ncurses</span> distribution
  includes a selection of test programs (including a few games).
  These are available separately as <a href=
  "https://invisible-island.net/ncurses/ncurses-examples.html">ncurses-examples</a></p>

  <p>The ncurses library has been tested with a wide variety of
  applications including:</p>

  <blockquote>
    <dl>
      <dt><span class="part-name">aptitude</span>
      </dt>

      <dd>
        <p>FrontEnd to Apt, the debian package manager</p>

        <p><a href=
        "https://wiki.debian.org/Aptitude">https://wiki.debian.org/Aptitude</a></p>
      </dd>

      <dt><span class="part-name">cdk</span>
      </dt>

      <dd>
        <p>Curses Development Kit</p>

        <p><a href="https://invisible-island.net/cdk/">https://invisible-island.net/cdk/</a><br>
        </p>
      </dd>

      <dt><span class="part-name">ded</span>
      </dt>

      <dd>
        <p>directory-editor</p>

        <p><a href="https://invisible-island.net/ded/">https://invisible-island.net/ded/</a></p>
      </dd>

      <dt><span class="part-name">dialog</span>
      </dt>

      <dd>
        <p>the underlying application used in Slackware's setup,
        and the basis for similar install/configure applications on
        many systems.</p>

        <p><a href="https://invisible-island.net/dialog/">https://invisible-island.net/dialog/</a></p>
      </dd>

      <dt><span class="part-name">lynx</span>
      </dt>

      <dd>
        <p>the text WWW browser</p>

        <p><a href=
        "https://lynx.invisible-island.net/">https://lynx.invisible-island.net/</a></p>
      </dd>

      <dt><span class="part-name">mutt</span>
      </dt>

      <dd>
        <p>mail utility</p>

        <p><a href="http://www.mutt.org/">http://www.mutt.org/</a></p>
      </dd>

      <dt><span class="part-name">ncftp</span>
      </dt>

      <dd>
        <p>file-transfer utility</p>

        <p><a href=
        "https://www.ncftp.com/">https://www.ncftp.com/</a></p>
      </dd>

      <dt><span class="part-name">nvi</span>
      </dt>

      <dd>
        <p>New vi uses ncurses.</p>

        <p><a href=
        "https://sites.google.com/a/bostic.com/keithbostic/vi">https://sites.google.com/a/bostic.com/keithbostic/vi</a><br>

        </p>
      </dd>

      <dt><span class="part-name">ranger</span>
      </dt>

      <dd>
        <p>A console file manager with VI key bindings in
        <em>Python</em>.</p>

        <p><a href=
        "https://ranger.github.io/">https://ranger.github.io/</a></p>
      </dd>

      <dt><span class="part-name">tin</span>
      </dt>

      <dd>
        <p>newsreader, supporting color, MIME</p>

        <p><a href="http://www.tin.org/">http://www.tin.org/</a></p>
      </dd>

      <dt><span class="part-name">vifm</span>
      </dt>

      <dd>
        <p>File manager with vi like keybindings</p>

        <p><a href="https://vifm.info/">https://vifm.info/</a></p>
      </dd>
    </dl>
  </blockquote>

  <p>as well as some that use <span class=
  "main-name">ncurses</span> for the terminfo support alone:</p>

  <blockquote>
    <dl>
      <dt><span class="part-name">minicom</span>
      </dt>

      <dd>
        <p>terminal emulator for serial modem connections</p>

        <p><a href=
        "https://alioth.debian.org/projects/minicom/">https://alioth.debian.org/projects/minicom/</a></p>
      </dd>

      <dt><span class="part-name">mosh</span>
      </dt>

      <dd>
        <p>a replacement for <code>ssh</code>.</p>

        <p><a href="https://mosh.org/">https://mosh.org/</a></p>
      </dd>

      <dt><span class="part-name">tack</span>
      </dt>

      <dd>
        <p>terminfo action checker</p>

        <p><a href="https://invisible-island.net/ncurses/tack.html">https://invisible-island.net/ncurses/tack.html</a></p>
      </dd>

      <dt><span class="part-name">tmux</span>
      </dt>

      <dd>
        <p>terminal multiplexor</p>

        <p><a href=
        "https://github.com/tmux/tmux/wiki">https://github.com/tmux/tmux/wiki</a></p>
      </dd>

      <dt><span class="part-name">vile</span>
      </dt>

      <dd>
        <p><em>vi-like-emacs</em> may be built to use the terminfo,
        termcap or curses interfaces.</p>

        <p><a href="https://invisible-island.net/vile/">https://invisible-island.net/vile/</a></p>
      </dd>
    </dl>
  </blockquote>

  <p>and finally, those which use only the termcap interface:</p>

  <blockquote>
    <dl>
      <dt><span class="part-name">emacs</span>
      </dt>

      <dd>
        <p>text editor</p>

        <p><a href=
        "https://www.gnu.org/software/emacs/">https://www.gnu.org/software/emacs/</a></p>
      </dd>

      <dt><span class="part-name">less</span>
      </dt>

      <dd>
        <p>The most commonly used <em>pager</em> (a program that
        displays text files).</p>

        <p><a href=
        "http://www.greenwoodsoftware.com/less/">http://www.greenwoodsoftware.com/less/</a></p>
      </dd>

      <dt><span class="part-name">screen</span>
      </dt>

      <dd>
        <p>terminal multiplexor</p>

        <p><a href=
        "https://www.gnu.org/software/screen/">https://www.gnu.org/software/screen/</a></p>
      </dd>

      <dt><span class="part-name">vim</span>
      </dt>

      <dd>
        <p>text editor</p>

        <p><a href="https://www.vim.org/">https://www.vim.org/</a></p>
      </dd>
    </dl>
  </blockquote>

  <h2><a name="h2-development" id="h2-development">Development
  activities</a></h2>

  <p>Zeyd Ben-Halim started <span class="main-name">ncurses</span>
  from a previous package pcurses, written by Pavel Curtis. Eric S.
  Raymond continued development. J&uuml;rgen Pfeifer wrote most of
  the form and menu libraries.</p>

  <p>Ongoing development work is done by <a href=
  "mailto:dickey@invisible-island.net">Thomas E. Dickey</a>. Thomas
  E. Dickey has acted as the maintainer for the Free Software
  Foundation, which held a <a href=
  "https://invisible-island.net/ncurses/ncurses-license.html">copyright on ncurses</a> for
  releases 4.2 through 6.1. Following the release of ncurses 6.1,
  effective as of release 6.2, copyright for ncurses reverted to
  Thomas E. Dickey (see the <a href=
  "https://invisible-island.net/ncurses/ncurses.faq.html#relicensed">ncurses FAQ</a> for
  additional information).</p>

  <p>Contact the current maintainers at</p>

  <blockquote>
    <a href="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</a>
  </blockquote>

  <p>To join the ncurses mailing list, please write email to</p>

  <blockquote>
    <a href=
    "mailto:bug-ncurses-request@gnu.org">bug-ncurses-request@gnu.org</a>
  </blockquote>
  containing the line:
  <blockquote>
    <p><code>subscribe</code>
    <em>&lt;name&gt;@&lt;host.domain&gt;</em></p>
  </blockquote>

  <p>This list is open to anyone interested in helping with the
  development and testing of this package.</p>

  <p>Beta versions of <span class="main-name">ncurses</span> are
  made available at</p>

  <blockquote>
    <p><a href=
    "https://invisible-island.net/archives/ncurses/current/">https://invisible-island.net/archives/ncurses/current/</a>
    and<br>
    <a href=
    "https://invisible-mirror.net/archives/ncurses/current/">https://invisible-mirror.net/archives/ncurses/current/</a>&nbsp;.</p>
  </blockquote>

  <p>Patches to the current release are made available at</p>

  <blockquote>
    <p><a href=
    "https://invisible-island.net/archives/ncurses/6.3/">https://invisible-island.net/archives/ncurses/6.3/</a>
    and<br>
    <a href=
    "https://invisible-mirror.net/archives/ncurses/6.3/">https://invisible-mirror.net/archives/ncurses/6.3/</a>&nbsp;.</p>
  </blockquote>

  <p>There is an archive of the mailing list here:</p>

  <blockquote>
    <p><a href=
    "http://lists.gnu.org/archive/html/bug-ncurses">http://lists.gnu.org/archive/html/bug-ncurses</a>
    (also <a href=
    "https://lists.gnu.org/archive/html/bug-ncurses">https</a>)</p>
  </blockquote>

  <h2><a name="h2-this-stuff" id="h2-this-stuff">Related
  resources</a></h2>

  <p>The release notes make scattered references to these pages,
  which may be interesting by themselves:</p>

  <ul>
    <li><a href="https://invisible-island.net/ncurses/ncurses-license.html"><span class=
    "main-name">ncurses</span> licensing</a></li>

    <li><a href="https://invisible-island.net/ncurses/ncurses-mapsyms.html">Symbol versioning
    in <span class="main-name">ncurses</span></a></li>

    <li><a href="https://invisible-island.net/ncurses/ncurses-slang.html">Comments on
    <span class="main-name">ncurses</span> versus <span class=
    "main-name">slang</span> (S-Lang)</a></li>

    <li><a href="https://invisible-island.net/ncurses/ncurses-openbsd.html">Comments on
    <span class="main-name">OpenBSD</span></a></li>

    <li><a href="https://invisible-island.net/ncurses/tack.html">tack &ndash; terminfo action
    checker</a></li>

    <li><a href="https://invisible-island.net/ncurses/tctest.html">tctest &ndash; termcap
    library checker</a></li>

    <li><a href=
    "https://invisible-island.net/ncurses/ncurses.html#download_database">Terminal
    Database</a></li>
  </ul>

  <h2><a name="h2-other-stuff" id="h2-other-stuff">Other
  resources</a></h2>

  <p>The distribution provides a newer version of the
  terminfo-format terminal description file once maintained by
  <a href="http://www.catb.org/~esr/terminfo/">Eric
  Raymond</a>&nbsp;. Unlike the older version, the termcap and
  terminfo data are provided in the same file, which also provides
  several user-definable extensions beyond the X/Open
  specification.</p>

  <p>You can find lots of information on terminal-related topics
  not covered in the terminfo file at <a href=
  "http://web.archive.org/web/*/http://www.cs.utk.edu/~shuford/terminal">
  Richard Shuford's archive</a>&nbsp;. The collection of computer
  manuals at <a href=
  "http://www.bitsavers.org/pdf/">bitsavers.org</a> has also been
  useful.</p>

  <div class="nav">
    <ul>
      <li><a href="#h2-overview">Overview</a></li>

      <li>
        <a href="#h2-release-notes">Release Notes</a>
        <ul>
          <li>
            <a href="#h3-library">Library improvements</a>
            <ul>
              <li><a href="#h4-new-library">New features</a></li>

              <li><a href="#h4-fixes-library">Other
              improvements</a></li>
            </ul>
          </li>

          <li>
            <a href="#h3-programs">Program improvements</a>
            <ul>
              <li><a href="#h4-utilities">Utilities</a></li>

              <li><a href="#h4-examples">Examples</a></li>
            </ul>
          </li>

          <li><a href="#h3-database">Terminal database</a></li>

          <li><a href="#h3-documentation">Documentation</a></li>

          <li><a href="#h3-bug-fixes">Interesting bug-fixes</a></li>

          <li>
            <a href="#h3-config-config">Configuration changes</a>
            <ul>
              <li><a href="#h4-config-major">Major changes</a></li>

              <li><a href="#h4-config-options">Configuration
              options</a></li>
            </ul>
          </li>

          <li><a href="#h3-portability">Portability</a></li>
        </ul>
      </li>

      <li><a href="#h2-features">Features of <span class=
      "main-name">ncurses</span></a></li>

      <li><a href="#h2-who-uses">Applications using <span class=
      "main-name">ncurses</span></a></li>

      <li><a href="#h2-development">Development activities</a></li>

      <li><a href="#h2-this-stuff">Related resources</a></li>

      <li><a href="#h2-other-stuff">Other resources</a></li>
    </ul>
  </div>
</body>
</html>
