mirror of
https://github.com/Aigor44/ncursesw-morphos.git
synced 2024-12-27 07:49:06 +08:00
761e4f0825
+ corrected ifdefs in test/testcurs.c to allow comparison of mouse interface versus pdcurses (cf: 20130316). + add pow() to configure-check for math library, needed since 20121208 for test/hanoi (Debian #708056). + regenerated html manpages. + update doctype used for html documentation.
344 lines
13 KiB
HTML
344 lines
13 KiB
HTML
<!--
|
|
$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ü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>
|