123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184 |
- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
- <!--
- $Id: Ada95.html,v 1.6 2004/01/18 00:32:47 tom Exp $
- ****************************************************************************
- * Copyright (c) 1998-2003,2004 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: clear.1,v 1.3 2000/07/15 23:59:35 china Exp @
- -->
- <HTML>
- <HEAD>
- <TITLE>Ada95 Binding for ncurses</Title>
- </HEAD>
- <BODY>
- <H1>Ada95 Binding for ncurses</H1>
- by Jürgen Pfeifer.
- <HR SIZE=3 NOSHADE>
- <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><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>
- </UL>
- <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><A HREF="ada/terminal_interface-curses-menus-item_user_data__ads.htm">Item_User_Data</A>
- </UL>
- <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><A HREF="ada/terminal_interface-curses-forms-field_user_data__ads.htm">Field_User_Data</A>
- <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><A HREF="ada/terminal_interface-curses-forms-field_types-alphanumeric__ads.htm">AlphaNumeric</A>
- <LI><A HREF="ada/terminal_interface-curses-forms-field_types-intfield__ads.htm">IntField</A>
- <LI><A HREF="ada/terminal_interface-curses-forms-field_types-numeric__ads.htm">Numeric</A>
- <LI><A HREF="ada/terminal_interface-curses-forms-field_types-regexp__ads.htm">RegExp</A>
- <LI><A HREF="ada/terminal_interface-curses-forms-field_types-ipv4_address__ads.htm">IPV4_Address</A>
- <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>
- </UL>
- <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>
- </UL>
- </UL>
- </UL>
- <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><A HREF="ada/terminal_interface-curses-text_io-float_io__ads.htm">Float_IO</A>
- <LI><A HREF="ada/terminal_interface-curses-text_io-fixed_io__ads.htm">Fixed_IO</A>
- <LI><A HREF="ada/terminal_interface-curses-text_io-decimal_io__ads.htm">Decimal_IO</A>
- <LI><A HREF="ada/terminal_interface-curses-text_io-modular_io__ads.htm">Modular_IO</A>
- <LI><A HREF="ada/terminal_interface-curses-text_io-enumeration_io__ads.htm">Enumeration_IO</A>
- <LI><A HREF="ada/terminal_interface-curses-text_io-complex_io__ads.htm">Complex_IO</A>
- </UL>
- </UL>
- </UL>
- </UL>
- If you want to navigate through the html pages of the package specs, click <A HREF="ada/index.htm">here</A>.
- <H2>Implementation Details</H2>
- <H4>Behind the abstraction</H4>
- 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.
- <H4>Extended ripoffline() usage</H4>
- 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.
- <H4><A NAME="userpointer">How user defined field types work</A></H4>
- TBD
- <H4>Enumeration fields handling</H4>
- 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.
- <H4><A NAME="compiler">Using other Ada compilers</A></H4>
- This should basically not be a problem.
- <H4>Port to other curses implementations</H4>
- 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>
- <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>
- Most likely you will follow a mixed approach. Some features are easy to simulate,
- others will be hard if not impossible.</LI>
- </UL>
- I'm quite sure I forgot something.
- </BODY>
- </HTML>
|