[net.general] New Curses/Terminfo Package

pavel (07/10/82)

At this past week's USENIX meeting, Mark Horton announced the completion
of a replacement database/interface for the Berkeley 'termcap' setup.  The
new version is called 'terminfo' and has several advantages over termcap:
	- The database is compiled and therefore start-up time for
	  programs using the package is considerably reduced, even 
	  faster than reading a single-entry termcap database.
	- The database is more human-readable and flexible.
	- Many more terminals can be supported due to the addition
	  of several new capabilities, generalised parameter
	  mechanisms (enabling the full use of, for example, the ANSI
	  cursor-forward capability by allowing you to say 'move forward
	  35 spaces' as opposed to 'move forward' 35 times), a fully
	  general yet efficient arithmetic mechanism which should allow
	  the use of \any/ bizarre cursor-addressing scheme which can
	  be computed, etc.
	- A \far/ better set of routines for accessing the database,
	  requiring, for example, only a single call to read in an
	  entire entry, making all of the terminal's capabilities fully
	  available to the calling program.  No more need for 'tgetent',
	  'tgetstr', etc.
Conversion of existing programs from termcap to terminfo is very easy and
usually consists mostly of throwing out all of the garbage needed to read
and store a termcap entry.

As a companion to the change to terminfo, Mark has also completed work on
a re-vamped version of the Curses screen-handling library package.  The new
version has many, many advantages over the previous version, some of which
are listed below:
	- New curses can use insert/delete line/character capabilities
	  in terminals which have them, considerably speeding up many
	  applications
	- It is possible to use the new curses on more than one type of
	  terminal at once
	- All of the video attributes of a terminal (e.g. reverse video,
	  boldface, blinking, etc.) can be used, in tandem if possible
	- New curses handles terminals like the Televideos with the
	  so-called 'magic cookie' glitch which leaves markers on the
	  screen for each change of video attributes
	- The arrow and function keys of terminals can be input just as
	  though they were single characters, even on terminals which use
	  multi-character sequences for these functions.  The new curses
	  does all necessary interpretation, passing back to the program
	  only a defined constant telling which key was pressed.
	- There is a user-accessable scrolling region
	- The use of shell escapes and the csh ^Z job control feature is
	  supported more fully
	- On systems which can support the notion, updates of the screen
	  will abort if a character is typed at the keyboard, thus allowing
	  the application to possibly avoid useless output
	- It should now be possible for most programs to be written very
	  portably to run on most versions of UNIX, including System III,
	  Berkeley UNIX, V7, Bell Labs internal UNIX, etc.  This portability
	  extends to the use of most terminal modes, such as raw mode,
	  echoing, etc.

Now for the bad news.  Mark, being an employee of Bell Labs, cannot release
any of his code.  Estimates currently run as high as 18 months for a Bell
release.  Even then, nothing could be guaranteed as to its price.  As a result,
I have decided to do a public-domain implementation of both terminfo and the
new curses.  They will be compatible with Mark's versions.  I have arranged
for the library/database to be distributed with the next Berkeley Software
Distribution, 4.2BSD, in December of this year.  It will also be made available
for free to any requestor.  I agree with Mark when he says that terminfo is
clearly superior to termcap and deserves to be made a new and lasting standard.

I expect to be able to begin recruiting test sites for both curses and terminfo
by the end of September.

If you have any questions, comments or suggestions, please send them to me, not
the network. 

	Pavel Curtis
	{decvax,allegra,vax135,harpo,...}!cornell!pavel
	Pavel.Cornell@Udel-Relay