<!--
  $Id: Ada95.html,v 1.14 2013/05/18 21:34:34 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>Ada95 Binding for ncurses</title>
  <link rev="made" href="mailto:bug-ncurses@gnu.org">
  <meta http-equiv="Content-Type" content=
  "text/html; charset=us-ascii">
</head>

<body>
  <h1>Ada95 Binding for ncurses</h1>

  <p>by J&uuml;rgen Pfeifer.</p>
  <hr>

  <h2>General Remarks</h2>

  <ul>
    <li>This document describes Version 01.00 of the binding.</li>

    <li>The functionality is modeled to be compatible with the
    ncurses package, a clone of the SVr4 curses model.<br>
    I did the development on an Intel box running the latest stable
    release of <a href="http://www.linux.org">Linux</a>, ncurses
    and the most recent released <a href="http://www.gnat.com">GNU
    Ada Translator</a> gnat versions. For any older versions of
    ncurses and gnat it is not guaranteed to work.</li>

    <li>You must have the m4 macroprocessor to build this package.
    If you don't have this program, you can get the FSF version
    <a href="ftp://ftp.gnu.org/pub/gnu/">here</a>.</li>

    <li>Ada programs are supposed to be readable. One of my
    favorite methods to make code readable is to use expressive
    names for the identifiers. You can find a list of a mapping of
    the cryptic curses names to the Ada names in this <a href=
    "ada/table.html">table</a>.</li>

    <li>This is not a typical one-to-one interface mapping. It is
    close to one-to-one on the functional level. Each (n)curses
    function has it's counterpart with a more or less similar
    formal parameter list in the binding. It is not one-to-one with
    respect to the datatypes. I tried to make records out of the
    flat chtype and similar structures, so you don't have to do bit
    operations to mark an attributed character as bold. Just make
    the boolean member <strong>bold</strong> of the record true.
    The binding also hides the structures like WINDOW, PANEL, MENU,
    FORM etc. ! It's a pure functional API.</li>

    <li>I try to do as much error checking as possible and feasible
    in the binding. I will raise an Ada exception when something
    went wrong in the low-level curses. This has the effect that -
    at least first time in my life - (n)curses programs have now a
    very rigid error checking, but - thanks to Ada - you don't have
    to code the orgiastic error checking style of C.</li>

    <li>Support for wide characters is currently not in the
    binding, as it is not really in ncurses at this point in
    time.</li>
  </ul>

  <h2>Limitations</h2>

  <ul>
    <li>I provide no SCREEN datatype and functions to set a new
    screen. If you need this (mostly for debugging I guess), write
    a small C routine doing all this and import it into your Ada
    program.</li>

    <li>I provide no functions to switch on/off curses tracing
    options. Same suggestion as above.</li>

    <li>Although Ada95 is an OO Language, this binding doesn't
    provide an OO abstraction of the (n)curses functionality. As
    mentioned above it's a thin binding for the (n)curses
    functions. But without any doubt it would be nice to build on
    top of this an OO abstraction of (n)curses functionality.<br>
    The only exception is the method how fieldtypes are represented
    in this Binding. We provide an abstract tagged type Field_Type
    from which the various fieldtypes are derived.</li>

    <li>I currently do not support the link_fieldtype functionality
    of the forms subsystem.</li>

    <li>The *_IO packages are currently output only.</li>
  </ul>

  <h2>Hierarchy of packages</h2>

  <ul>
    <li>
      <a href=
      "ada/terminal_interface__ads.htm">Terminal_Interface</a>

      <ul>
        <li>
          <a href=
          "ada/terminal_interface-curses__ads.htm">Curses</a>

          <ul>
            <li><a href=
            "ada/terminal_interface-curses-mouse__ads.htm">Mouse</a></li>

            <li>
              <a href=
              "ada/terminal_interface-curses-panels__ads.htm">Panels</a>

              <ul>
                <li><a href=
                "ada/terminal_interface-curses-panels-user_data__ads.htm">
                User_Data</a></li>
              </ul>
            </li>

            <li>
              <a href=
              "ada/terminal_interface-curses-menus__ads.htm">Menus</a>

              <ul>
                <li><a href=
                "ada/terminal_interface-curses-menus-menu_user_data__ads.htm">
                Menu_User_Data</a></li>

                <li><a href=
                "ada/terminal_interface-curses-menus-item_user_data__ads.htm">
                Item_User_Data</a></li>
              </ul>
            </li>

            <li>
              <a href=
              "ada/terminal_interface-curses-forms__ads.htm">Forms</a>

              <ul>
                <li><a href=
                "ada/terminal_interface-curses-forms-form_user_data__ads.htm">
                Form_User_Data</a></li>

                <li><a href=
                "ada/terminal_interface-curses-forms-field_user_data__ads.htm">
                Field_User_Data</a></li>

                <li>
                  <a href=
                  "ada/terminal_interface-curses-forms-field_types__ads.htm">
                  Field_Types</a>

                  <ul>
                    <li><a href=
                    "ada/terminal_interface-curses-forms-field_types-alpha__ads.htm">
                    Alpha</a></li>

                    <li><a href=
                    "ada/terminal_interface-curses-forms-field_types-alphanumeric__ads.htm">
                    AlphaNumeric</a></li>

                    <li><a href=
                    "ada/terminal_interface-curses-forms-field_types-intfield__ads.htm">
                    IntField</a></li>

                    <li><a href=
                    "ada/terminal_interface-curses-forms-field_types-numeric__ads.htm">
                    Numeric</a></li>

                    <li><a href=
                    "ada/terminal_interface-curses-forms-field_types-regexp__ads.htm">
                    RegExp</a></li>

                    <li><a href=
                    "ada/terminal_interface-curses-forms-field_types-ipv4_address__ads.htm">
                    IPV4_Address</a></li>

                    <li>
                      <a href=
                      "ada/terminal_interface-curses-forms-field_types-enumeration__ads.htm">
                      Enumeration</a>

                      <ul>
                        <li><a href=
                        "ada/terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm">
                        Ada</a></li>
                      </ul>
                    </li>

                    <li>
                      <a href=
                      "ada/terminal_interface-curses-forms-field_types-user__ads.htm">
                      User</a>

                      <ul>
                        <li><a href=
                        "ada/terminal_interface-curses-forms-field_types-user-choice__ads.htm">
                        Choice</a></li>
                      </ul>
                    </li>
                  </ul>
                </li>
              </ul>
            </li>

            <li>
              <a href=
              "ada/terminal_interface-curses-text_io__ads.htm">Text_IO</a>

              <ul>
                <li><a href=
                "ada/terminal_interface-curses-text_io-integer_io__ads.htm">
                Integer_IO</a></li>

                <li><a href=
                "ada/terminal_interface-curses-text_io-float_io__ads.htm">
                Float_IO</a></li>

                <li><a href=
                "ada/terminal_interface-curses-text_io-fixed_io__ads.htm">
                Fixed_IO</a></li>

                <li><a href=
                "ada/terminal_interface-curses-text_io-decimal_io__ads.htm">
                Decimal_IO</a></li>

                <li><a href=
                "ada/terminal_interface-curses-text_io-modular_io__ads.htm">
                Modular_IO</a></li>

                <li><a href=
                "ada/terminal_interface-curses-text_io-enumeration_io__ads.htm">
                Enumeration_IO</a></li>

                <li><a href=
                "ada/terminal_interface-curses-text_io-complex_io__ads.htm">
                Complex_IO</a></li>
              </ul>
            </li>
          </ul>
        </li>
      </ul>
    </li>
  </ul>

  <p>If you want to navigate through the html pages of the package
  specs, click <a href="ada/index.htm">here</a>.</p>

  <h2>Implementation Details</h2>

  <h4>Behind the abstraction</h4>

  <p>All the new types like <strong>Window</strong>,
  <strong>Panel</strong>, <strong>Menu</strong>,
  <strong>Form</strong> etc. are just opaque representations of the
  pointers to the corresponding low level (n)curses structures like
  <strong>WINDOW *</strong>, <strong>PANEL *</strong>, <strong>MENU
  *</strong> or <strong>FORM *</strong>. So you can safely pass
  them to C routines that expect a pointer to one of those
  structures.</p>

  <h4>Extended ripoffline() usage</h4>

  <p>The official documentation of (n)curses says, that the line
  parameter determines only whether or not exactly
  <strong>one</strong> line is stolen from the top or bottom of the
  screen. So essentially only the sign of the parameter is
  evaluated. ncurses has internally implemented it in a way, that
  uses the line parameter also to control the amount of lines to
  steal. This mechanism is used in the
  <strong>Rip_Off_Lines</strong> routine of the binding.</p>

  <h4><a name="userpointer" id="userpointer">How user defined field
  types work</a></h4>

  <p>TBD</p>

  <h4>Enumeration fields handling</h4>

  <p>The (n)curses documentation says, that the String arrays to be
  passed to an TYPE_ENUM fieldtype must not be automatic variables.
  This is not true in this binding, because it is internally
  arranged to safely copy these values.</p>

  <h4><a name="compiler" id="compiler">Using other Ada
  compilers</a></h4>

  <p>This should basically not be a problem.</p>

  <h4>Port to other curses implementations</h4>

  <p>Basically it should not be too hard to make all this run on a
  regular SVr4 implementation of curses. The problems are probably
  these:<br></p>

  <ul>
    <li>ncurses has some additional features which are presented in
    this binding. You have two choices to deal with this:

      <ul>
        <li>Emulate the feature in this binding</li>

        <li>Raise an exception for non implemented features</li>
      </ul>

      <p>Most likely you will follow a mixed approach. Some
      features are easy to simulate, others will be hard if not
      impossible.</p>
    </li>
  </ul>

  <p>I'm quite sure I forgot something.</p>
</body>
</html>
