- Announcing ncurses 4.2
+ Announcing ncurses 5.0
- The ncurses (new curses) library is a freeware emulation of System V
- Release 4.0 curses. It uses terminfo format, supports pads and color
- and multiple highlights and forms characters and function-key mapping,
- and has all the other SYSV-curses enhancements over BSD curses.
+ The ncurses (new curses) library is a free software emulation of
+ curses in System V Release 4.0, 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 SYSV-curses
+ enhancements over BSD curses.
In mid-June 1995, the maintainer of 4.4BSD curses declared that he
considered 4.4BSD curses obsolete, and is encouraging the keepers of
Unix releases such as BSD/OS, freeBSD and netBSD to switch over to
ncurses.
- The ncurses code was developed under Linux. It should port easily to
- any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!
+ The ncurses code was developed under GNU/Linux. It should port easily
+ to any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2
+ Warp!
The distribution includes the library and support utilities, including
a terminfo compiler tic(1), a decompiler infocmp(1), clear(1),
manual pages are provided for the library and tools.
The ncurses distribution is available via anonymous FTP at the GNU
- distribution site [1]ftp://prep.ai.mit.edu/pub/gnu. It is also
+ distribution site [1]ftp://ftp.gnu.org/pub/gnu/ncurses. It is also
available at [2]ftp://ftp.clark.net/pub/dickey/ncurses.
- Features of ncurses
+ Release Notes
+
+ We decided to release ncurses as a new whole number release (5.0)
+ because it incorporates several interface changes, including some that
+ would invalidate existing shared libraries. These are the highlights
+ from the change-log since ncurses 4.2 release.
+
+ Interface changes:
+ * The principal source of changes to the interface comes from the
+ release of X/Open Curses in 1997. Earlier versions of ncurses (4.0
+ and before) were based on a draft version of the specification.
+ The release version adds parameters to some functions to support
+ the evolving internationalization of curses. These summarize the
+ impact:
+ + modified several prototypes to correspond with 1997 version
+ of X/Open Curses (affects ABI since developers have used
+ attr_get).
+ + corrected prototypes for slk_* functions, using chtype rather
+ than attr_t.
+ + the slk_attr_{set,off,on} functions need an additional void*
+ parameter according to XSI.
+ + correct macros for wattr_set, wattr_get, separate wattrset
+ macro from these to preserve behavior that allows attributes
+ to be combined with color pair numbers.
+ + reviewed/updated curses.h, term.h against X/Open Curses Issue
+ 4 Version 2. This includes making some parameters
+ NCURSES_CONST rather than const, e.g., in termcap.h.
+ + reviewed/corrected macros in curses.h as per XSI document.
+ + add set_a_attributes and set_pglen_inch to terminfo
+ structure, as per XSI and Solaris 2.5.
+ * The newest version of the X/Open Curses is implemented on Solaris
+ and other vendor's systems. It adds new features to the terminfo
+ descriptions:
+ + implement tparm %l format.
+ + implement tparm printf-style width and precision for %s, %d,
+ %x, %o as per XSI.
+ * We made additional changes to reduce impact by future interface
+ changes:
+ + rename key_names[] array to _nc_key_names since it is not
+ part of the curses interface.
+ + move macro winch to a function, to hide details of struct
+ ldat
+ * modify configure script to embed ABI in shared libraries for HP-UX
+ 10.x (detailed request by Tim Mooney).
+ * modify configuration of shared libraries on Digital Unix so that
+ versioning is embedded in the library, rather than implied by
+ links (patch by Tim Mooney).
+
+ New features:
+ * enable sigwinch handler by default.
+ * turn on hashmap scrolling code by default
+ * improved support for termcap applications
+ + modify tput to accept termcap names as an alternative to
+ terminfo names.
+ + provide support for termcap PC variable by copying it from
+ terminfo data and using it as the padding character in tputs.
+ + provide support for termcap ospeed variable by copying it
+ from the internal cur_term member, and using ospeed as the
+ baudrate reference for the delay_output and tputs functions.
+ + change name-comparisons in lib_termcap to compare no more
+ than 2 characters.
+ + add configure option --enable-tcap-names, which essentially
+ allows users to define new capabilities as in termcap.
+ * add mouse support to ncurses menus.
+ * add mouse and dll support for OS/2 EMX
+ * modify terminfo parsing to accept octal and hexadecimal constants
+ * add configure option --enable-no-padding, to allow environment
+ variable $NCURSES_NO_PADDING to eliminate non-mandatory padding,
+ thereby making terminal emulators (e.g., for vt100) a little more
+ efficient.
+ * modify lib_color.c to eliminate dependency on orig_colors and
+ orig_pair, since SVr4 curses does not require these either, but
+ uses them when they are available.
+ * add -f option to infocmp and tic, which formats the terminfo
+ if/then/else/endif so that they are readable (with newlines and
+ tabs).
+ * modify tic to compile into %'char' form in preference to
+ %{number}, since that is a little more efficient.
+
+ Major bug fixes:
+ * modify lib_tstp.c to block SIGTTOU when handling SIGTSTP, fixes a
+ problem where ncurses applications which were run via a shell
+ script would hang when given a ^Z. Also, check if the terminal's
+ process group is consistent, i.e., a shell has not taken ownership
+ of it, before deciding to save the current terminal settings in
+ the SIGTSTP handler.
+ * suppress sc/rc capabilities from terminal description if they
+ appear in smcup/rmcup. This affects only scrolling optimization,
+ to fix a problem reported by several people with xterm's alternate
+ screen, though the problem is more general.
+ * modify relative_move and tputs to avoid an interaction with the
+ BSD-style padding. The relative_move function could produce a
+ string to replace on the screen which began with a numeric
+ character, which was then interpreted by tputs as padding.
+ * modify setupterm so that cancelled strings are treated the same as
+ absent strings, cancelled and absent booleans false (does not
+ affect tic, infocmp).
+ * modify lib_vidattr.c to allow for terminal types (e.g.,
+ xterm-color) which may reset all attributes in the 'op'
+ capability, so that colors are set before turning on bold and
+ other attributes, but still after turning attributes off.
+ * use 'access()' to check if ncurses library should be permitted to
+ open or modify files with fopen/open/link/unlink/remove calls, in
+ case the calling application is running in setuid mode.
+ * correction to doupdate, for case where terminal does not support
+ insert/delete character. The logic did not check that there was a
+ difference in alignment of changes to old/new screens before
+ repainting the whole non-blank portion of the line. Modified to
+ fall through into logic that reduces by the portion which does not
+ differ.
+
+ Features of Ncurses
The ncurses package is fully compatible with SVr4 (System V Release 4)
curses:
-
* All 257 of the SVr4 calls have been implemented (and are
documented).
* Full support for SVr4 curses features including keyboard mapping,
HP/UX and AIX ports.
The ncurses package also has many useful extensions over SVr4:
-
* The API is 8-bit clean and base-level conformant with the X/OPEN
- curses specification, XSI Curses (that is, it implements all BASE
+ curses specification, XSI curses (that is, it implements all BASE
level features, but not all EXTENDED features). Most
EXTENDED-level features not directly concerned with wide-character
support are implemented, including many function calls not
supported under SVr4 curses (but portability of all calls is
documented so you can use the SVr4 subset only).
- * Unlike SVr4 curses, ncurses can write to the rightmost-bottommost
+ * Unlike SVr3 curses, ncurses can write to the rightmost-bottommost
corner of the screen if your terminal has an insert-character
capability.
- * (PC-clone boxes only) Support for access to the IBM PC ROM
- characters 0-32 through the highlight A_ALTCHARSET.
* Ada95 and C++ bindings.
- * Support for mouse event reporting under xterm.
+ * Support for mouse event reporting with X Window xterm and OS/2
+ console windows.
* Extended mouse support via Alessandro Rubini's gpm package.
* The function wresize() allows you to resize windows, preserving
their data.
and arena corruption by the Purify memory-allocation tester.
The ncurses code has been tested with a wide variety of applications
- including:
+ including (versions starting with those noted):
+ cdk
+ Curses Development Kit [3]Curses Development Kit
+ [4]ftp://ftp.clark.net/pub/dickey/cdk.
+
ded
- directory-editor [3]ftp://ftp.clark.net/pub/dickey/ded.
+ directory-editor [5]ftp://ftp.clark.net/pub/dickey/ded.
dialog
the underlying application used in Slackware's setup, and the
- basis for similar applications on Linux.
+ basis for similar applications on GNU/Linux.
- lynx-2.7
+ lynx
the character-screen WWW browser
Midnight Commander 4.1
file manager
- mutt 0.88
+ mutt
mail utility
- ncftp 2.0
+ ncftp
file-transfer utility
nvi
New vi versions 1.50 are able to use ncurses versions 1.9.7 and
later.
+ tin
+ newsreader, supporting color, MIME
+ [6]ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff.
+
taper
tape archive utility
as well as some that use ncurses for the terminfo support alone:
- minicom-1.75
+ minicom
terminal emulator
- tin-unoff
- tin 1.4 newsreader, supporting color, MIME
- [4]ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff.
-
vile
- vi-like-emacs [5]ftp://ftp.clark.net/pub/dickey/vile.
+ vi-like-emacs [7]ftp://ftp.clark.net/pub/dickey/vile.
The ncurses distribution includes a selection of test programs
(including a few games).
Who's Who and What's What
- The original developers of ncurses are [6]Zeyd Ben-Halim and [7]Eric
- S. Raymond. Ongoing work is being done by [8]Thomas Dickey and
- [9]Jürgen Pfeifer. [10]Florian La Roche acts as the maintainer for the
+ The original developers of ncurses are [8]Zeyd Ben-Halim and [9]Eric
+ S. Raymond. Ongoing work is being done by [10]Thomas Dickey and
+ [11]Jürgen Pfeifer. [12]Thomas Dickey acts as the maintainer for the
Free Software Foundation, which holds the copyright on ncurses.
- Contact the current maintainers at [11]bug-ncurses@gnu.org.
+ Contact the current maintainers at [13]bug-ncurses@gnu.org.
To join the ncurses mailing list, please write email to
bug-ncurses-request@gnu.org containing the line:
and testing of this package.
Beta versions of ncurses and patches to the current release are made
- available at [12]ftp://ftp.clark.net/pub/dickey/ncurses.
+ available at [14]ftp://ftp.clark.net/pub/dickey/ncurses.
Future Plans
The distribution includes and uses a version of the terminfo-format
terminal description file maintained by Eric Raymond.
- [13]http://earthspace.net/~esr/terminfo.
+ [15]http://earthspace.net/~esr/terminfo.
You can find lots of information on terminal-related topics not
- covered in the terminfo file at [14]Richard Shuford's archive.
+ covered in the terminfo file at [16]Richard Shuford's archive.
References
- 1. ftp://prep.ai.mit.edu/pub/gnu
+ 1. ftp://ftp.gnu.org/pub/gnu/ncurses
2. ftp://ftp.clark.net/pub/dickey/ncurses
- 3. ftp://ftp.clark.net/pub/dickey/ded
- 4. ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff
- 5. ftp://ftp.clark.net/pub/dickey/vile
- 6. mailto:zmbenhal@netcom.com
- 7. http://www.ccil.org/~esr/home.html
- 8. mailto:dickey@clark.net
- 9. mailto:Juergen.Pfeifer@T-Online.de
- 10. mailto:florian@gnu.org
- 11. mailto:bug-ncurses@gnu.org
- 12. ftp://ftp.clark.net/pub/dickey/ncurses
- 13. http://earthspace.net/~esr/terminfo
- 14. http://www.cs.utk.edu/~shuford/terminal_index.html
+ 3. http://www.vexus.ca/CDK.html
+ 4. ftp://ftp.clark.net/pub/dickey/cdk
+ 5. ftp://ftp.clark.net/pub/dickey/ded
+ 6. ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff
+ 7. ftp://ftp.clark.net/pub/dickey/vile
+ 8. mailto:zmbenhal@netcom.com
+ 9. http://www.ccil.org/~esr/home.html
+ 10. mailto:dickey@clark.net
+ 11. mailto:juergen.pfeifer@gmx.net
+ 12. mailto:dickey@clark.net
+ 13. mailto:bug-ncurses@gnu.org
+ 14. ftp://ftp.clark.net/pub/dickey/ncurses
+ 15. http://earthspace.net/~esr/terminfo
+ 16. http://www.cs.utk.edu/~shuford/terminal_index.html
# authorization. #
##############################################################################
#
-# Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+# Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
#
# Version Control
-# $Revision: 1.10 $
+# $Revision: 1.12 $
#
SHELL = /bin/sh
THIS = Makefile
SUBDIRS = @ADA_SUBDIRS@
+CF_MFLAGS = @cf_cv_makeflags@
+@SET_MAKE@
+
all \
sources \
install \
uninstall \
uninstall.libs ::
for d in $(SUBDIRS); do \
- (cd $$d ; $(MAKE) $@) ;\
+ (cd $$d ; $(MAKE) $(CF_MFLAGS) $@) ;\
done
clean \
mostlyclean ::
for d in $(SUBDIRS); do \
- (cd $$d ; $(MAKE) $@) ;\
+ (cd $$d ; $(MAKE) $(CF_MFLAGS) $@) ;\
done
distclean \
realclean ::
for d in $(SUBDIRS); do \
- (cd $$d ; $(MAKE) $@) ;\
+ (cd $$d ; $(MAKE) $(CF_MFLAGS) $@) ;\
done
rm -f Makefile
-- authorization. --
-------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
-Caveats:
-
- This is the first delivery of this binding. It has not been
- extensively tested. So I declare this as BETA level software,
- although it is delivered with an official release of ncurses.
-
- You should install the ncurses distribution around this binding
- first before you try to run the sample.
-
- This Binding is currently strictly for the GNAT compiler, because
- in one place I use a GNAT specfic runtime module (see doc.)
-
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
The documentation is provided in HTML format in the ./html
subdirectory. The main document is named index.html
+-- $Id: TODO,v 1.4 1999/10/20 09:18:58 tom Exp $
+
-- Intensive testing
Perhaps the delivery of the Beta will help a bit.
-- Documentation
- Like most WEB pages: under continous construction
+ Like most WEB pages: under continuous construction
-- Style cleanup
Comfort purpose
-- Sample program
- Under continous construction (and it's not a WEB page!!!)
+ Under continuous construction (and it's not a WEB page!!!)
--- Make the binding objects a shared libray
+-- Make the binding objects a shared library
They are rather large, so it would make sense, otherwise Ada95
would look too large, although the generated code is as compact
as C or C++. I'll wait a bit until the GNAT people provide some
+++ /dev/null
-##############################################################################
-# Copyright (c) 1998 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. #
-##############################################################################
-#
-# Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
-#
-# Version Control
-# $Revision: 1.13 $
-#
-.SUFFIXES:
-
-SHELL = /bin/sh
-THIS = Makefile
-
-MODEL = ../../@DFT_OBJ_SUBDIR@
-srcdir = @srcdir@
-prefix = @prefix@
-exec_prefix = @exec_prefix@
-libdir = @libdir@
-includedir = @includedir@
-datadir = @datadir@
-ticdir = $(datadir)/terminfo
-ADA_INCLUDE = @ADA_INCLUDE@
-
-INSTALL = @INSTALL@
-INSTALL_DATA = @INSTALL_DATA@
-
-AWK = @AWK@
-LN_S = @LN_S@
-
-CC = @CC@
-CFLAGS = @CFLAGS@
-
-CPPFLAGS = @ACPPFLAGS@ \
- -DHAVE_CONFIG_H -I$(srcdir)
-
-CCFLAGS = $(CPPFLAGS) $(CFLAGS)
-
-CFLAGS_NORMAL = $(CCFLAGS)
-CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
-CFLAGS_PROFILE = $(CCFLAGS) -pg
-CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
-
-CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
-
-LINK = $(CC)
-LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
-
-RANLIB = @RANLIB@
-################################################################################
-ADA = @cf_ada_compiler@
-ADAFLAGS = @ADAFLAGS@ -I. -I$(srcdir)
-
-ADAMAKE = @cf_ada_make@
-ADAMAKEFLAGS =
-
-CARGS = -cargs $(ADAFLAGS)
-LARGS =
-
-ALIB = @cf_ada_package@
-ABASE = $(ALIB)-curses
-
-ADA_OBJDIR = ../ada_objects
-OBJDIR = ../objects
-
-LIBALIS=$(ADA_OBJDIR)/$(ALIB).ali \
- $(ADA_OBJDIR)/$(ABASE)-aux.ali \
- $(ADA_OBJDIR)/$(ABASE).ali \
- $(ADA_OBJDIR)/$(ABASE)-mouse.ali \
- $(ADA_OBJDIR)/$(ABASE)-panels.ali \
- $(ADA_OBJDIR)/$(ABASE)-menus.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-alpha.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-alphanumeric.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-intfield.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-numeric.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-regexp.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-ipv4_address.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-user.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-user-choice.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-aux.ali
-
-# Ada Library files for generic packages. Since gnat 3.10 they are
-# also compiled
-GENALIS=$(ADA_OBJDIR)/$(ABASE)-menus-menu_user_data.ali \
- $(ADA_OBJDIR)/$(ABASE)-menus-item_user_data.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-form_user_data.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_user_data.ali \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration-ada.ali \
- $(ADA_OBJDIR)/$(ABASE)-panels-user_data.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-integer_io.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-float_io.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-fixed_io.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-decimal_io.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-enumeration_io.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-modular_io.ali \
- $(ADA_OBJDIR)/$(ABASE)-text_io-complex_io.ali
-
-LIBOBJS=$(ADA_OBJDIR)/$(ALIB).o \
- $(ADA_OBJDIR)/$(ABASE)-aux.o \
- $(ADA_OBJDIR)/$(ABASE).o \
- $(ADA_OBJDIR)/$(ABASE)-mouse.o \
- $(ADA_OBJDIR)/$(ABASE)-panels.o \
- $(ADA_OBJDIR)/$(ABASE)-menus.o \
- $(ADA_OBJDIR)/$(ABASE)-forms.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-alpha.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-alphanumeric.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-intfield.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-numeric.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-regexp.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-ipv4_address.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-user.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-user-choice.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-aux.o
-
-# Ada object files for generic packages. Since gnat 3.10 they are
-# also compiled
-GENOBJS=$(ADA_OBJDIR)/$(ABASE)-menus-menu_user_data.o \
- $(ADA_OBJDIR)/$(ABASE)-menus-item_user_data.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-form_user_data.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_user_data.o \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration-ada.o \
- $(ADA_OBJDIR)/$(ABASE)-panels-user_data.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-integer_io.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-float_io.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-fixed_io.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-decimal_io.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-enumeration_io.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-modular_io.o \
- $(ADA_OBJDIR)/$(ABASE)-text_io-complex_io.o
-
-
-all :: $(LIBALIS) @cf_compile_generics@
- @echo done
-
-sources :
- @
-
-install ::
-install.libs ::
-uninstall ::
-uninstall.libs ::
-
-generics: $(GENALIS)
- @
-
-mostlyclean ::
- rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] *.a
-
-clean :: mostlyclean
- rm -f $(LIBALIS) $(LIBOBJS)
-
-distclean :: clean
- rm -f Makefile
-
-realclean :: distclean
-
-BASEDEPS=$(ABASE).ads $(srcdir)/$(ABASE)-aux.ads
-
-$(ADA_OBJDIR)/$(ALIB).o: $(srcdir)/$(ALIB).ads
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ALIB).ads
-
-$(ADA_OBJDIR)/$(ALIB).ali: $(ADA_OBJDIR)/$(ALIB).o
- if [ -f $(ALIB).ali ]; then \
- ln -f $(ALIB).ali $@ ;\
- rm -f $(ALIB).ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-aux.o: $(srcdir)/$(ABASE)-aux.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-aux.adb
-
-$(ADA_OBJDIR)/$(ABASE)-aux.ali: $(ADA_OBJDIR)/$(ABASE)-aux.o
- if [ -f $(ABASE)-aux.ali ]; then \
- ln -f $(ABASE)-aux.ali $@ ;\
- rm -f $(ABASE)-aux.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE).o: $(srcdir)/$(ABASE).adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE).adb
-
-$(ADA_OBJDIR)/$(ABASE).ali: $(ADA_OBJDIR)/$(ABASE).o
- if [ -f $(ABASE).ali ]; then \
- ln -f $(ABASE).ali $@ ;\
- rm -f $(ABASE).ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-mouse.o: \
- $(ABASE)-mouse.ads \
- $(srcdir)/$(ABASE)-mouse.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-mouse.adb
-
-$(ADA_OBJDIR)/$(ABASE)-mouse.ali: $(ADA_OBJDIR)/$(ABASE)-mouse.o
- if [ -f $(ABASE)-mouse.ali ]; then \
- ln -f $(ABASE)-mouse.ali $@ ;\
- rm -f $(ABASE)-mouse.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-panels.o: \
- $(ABASE)-panels.ads \
- $(srcdir)/$(ABASE)-panels.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-panels.adb
-
-$(ADA_OBJDIR)/$(ABASE)-panels.ali: $(ADA_OBJDIR)/$(ABASE)-panels.o
- if [ -f $(ABASE)-panels.ali ]; then \
- ln -f $(ABASE)-panels.ali $@ ;\
- rm -f $(ABASE)-panels.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-menus.o: \
- $(ABASE)-menus.ads \
- $(srcdir)/$(ABASE)-menus.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-menus.adb
-
-$(ADA_OBJDIR)/$(ABASE)-menus.ali: $(ADA_OBJDIR)/$(ABASE)-menus.o
- if [ -f $(ABASE)-menus.ali ]; then \
- ln -f $(ABASE)-menus.ali $@ ;\
- rm -f $(ABASE)-menus.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms.o: \
- $(ABASE)-forms.ads \
- $(srcdir)/$(ABASE)-forms.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms.ali: $(ADA_OBJDIR)/$(ABASE)-forms.o
- if [ -f $(ABASE)-forms.ali ]; then \
- ln -f $(ABASE)-forms.ali $@ ;\
- rm -f $(ABASE)-forms.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types.o: \
- $(ABASE)-forms-field_types.ads \
- $(srcdir)/$(ABASE)-forms-field_types.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types.o
- if [ -f $(ABASE)-forms-field_types.ali ]; then \
- ln -f $(ABASE)-forms-field_types.ali $@ ;\
- rm -f $(ABASE)-forms-field_types.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-alpha.o: \
- $(srcdir)/$(ABASE)-forms-field_types-alpha.ads \
- $(srcdir)/$(ABASE)-forms-field_types-alpha.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-alpha.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-alpha.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-alpha.o
- if [ -f $(ABASE)-forms-field_types-alpha.ali ]; then \
- ln -f $(ABASE)-forms-field_types-alpha.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-alpha.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-alphanumeric.o: \
- $(srcdir)/$(ABASE)-forms-field_types-alphanumeric.ads \
- $(srcdir)/$(ABASE)-forms-field_types-alphanumeric.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-alphanumeric.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-alphanumeric.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-alphanumeric.o
- if [ -f $(ABASE)-forms-field_types-alphanumeric.ali ]; then \
- ln -f $(ABASE)-forms-field_types-alphanumeric.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-alphanumeric.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-intfield.o: \
- $(srcdir)/$(ABASE)-forms-field_types-intfield.ads \
- $(srcdir)/$(ABASE)-forms-field_types-intfield.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-intfield.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-intfield.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-intfield.o
- if [ -f $(ABASE)-forms-field_types-intfield.ali ]; then \
- ln -f $(ABASE)-forms-field_types-intfield.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-intfield.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-numeric.o: \
- $(srcdir)/$(ABASE)-forms-field_types-numeric.ads \
- $(srcdir)/$(ABASE)-forms-field_types-numeric.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-numeric.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-numeric.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-numeric.o
- if [ -f $(ABASE)-forms-field_types-numeric.ali ]; then \
- ln -f $(ABASE)-forms-field_types-numeric.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-numeric.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-regexp.o: \
- $(srcdir)/$(ABASE)-forms-field_types-regexp.ads \
- $(srcdir)/$(ABASE)-forms-field_types-regexp.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-regexp.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-regexp.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-regexp.o
- if [ -f $(ABASE)-forms-field_types-regexp.ali ]; then \
- ln -f $(ABASE)-forms-field_types-regexp.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-regexp.ali ;\
- fi
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration.o: \
- $(srcdir)/$(ABASE)-forms-field_types-enumeration.ads \
- $(srcdir)/$(ABASE)-forms-field_types-enumeration.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-enumeration.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration.o
- if [ -f $(ABASE)-forms-field_types-enumeration.ali ]; then \
- ln -f $(ABASE)-forms-field_types-enumeration.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-enumeration.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-ipv4_address.o: \
- $(srcdir)/$(ABASE)-forms-field_types-ipv4_address.ads \
- $(srcdir)/$(ABASE)-forms-field_types-ipv4_address.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-ipv4_address.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-ipv4_address.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-ipv4_address.o
- if [ -f $(ABASE)-forms-field_types-ipv4_address.ali ]; then \
- ln -f $(ABASE)-forms-field_types-ipv4_address.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-ipv4_address.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-user.o: \
- $(srcdir)/$(ABASE)-forms-field_types-user.ads \
- $(srcdir)/$(ABASE)-forms-field_types-user.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-user.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-user.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-user.o
- if [ -f $(ABASE)-forms-field_types-user.ali ]; then \
- ln -f $(ABASE)-forms-field_types-user.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-user.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-user-choice.o: \
- $(srcdir)/$(ABASE)-forms-field_types-user-choice.ads \
- $(srcdir)/$(ABASE)-forms-field_types-user-choice.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-user-choice.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-user-choice.ali: $(ADA_OBJDIR)/$(ABASE)-forms-field_types-user-choice.o
- if [ -f $(ABASE)-forms-field_types-user-choice.ali ]; then \
- ln -f $(ABASE)-forms-field_types-user-choice.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-user-choice.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io.o: \
- $(srcdir)/$(ABASE)-text_io.ads \
- $(srcdir)/$(ABASE)-text_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io.ali: $(ADA_OBJDIR)/$(ABASE)-text_io.o
- if [ -f $(ABASE)-text_io.ali ]; then \
- ln -f $(ABASE)-text_io.ali $@ ;\
- rm -f $(ABASE)-text_io.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-aux.o: \
- $(srcdir)/$(ABASE)-text_io-aux.ads \
- $(srcdir)/$(ABASE)-text_io-aux.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-aux.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-aux.ali: $(ADA_OBJDIR)/$(ABASE)-text_io-aux.o
- if [ -f $(ABASE)-text_io-aux.ali ]; then \
- ln -f $(ABASE)-text_io-aux.ali $@ ;\
- rm -f $(ABASE)-text_io-aux.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-menus-menu_user_data.o: \
- $(ABASE)-menus-menu_user_data.ads \
- $(srcdir)/$(ABASE)-menus-menu_user_data.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-menus-menu_user_data.adb
-
-$(ADA_OBJDIR)/$(ABASE)-menus-menu_user_data.ali: \
- $(ADA_OBJDIR)/$(ABASE)-menus-menu_user_data.o
- if [ -f $(ABASE)-menus-menu_user_data.ali ]; then \
- ln -f $(ABASE)-menus-menu_user_data.ali $@ ;\
- rm -f $(ABASE)-menus-menu_user_data.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-menus-item_user_data.o: \
- $(ABASE)-menus-item_user_data.ads \
- $(srcdir)/$(ABASE)-menus-item_user_data.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-menus-item_user_data.adb
-
-$(ADA_OBJDIR)/$(ABASE)-menus-item_user_data.ali: \
- $(ADA_OBJDIR)/$(ABASE)-menus-item_user_data.o
- if [ -f $(ABASE)-menus-item_user_data.ali ]; then \
- ln -f $(ABASE)-menus-item_user_data.ali $@ ;\
- rm -f $(ABASE)-menus-item_user_data.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-form_user_data.o: \
- $(ABASE)-forms-form_user_data.ads \
- $(srcdir)/$(ABASE)-forms-form_user_data.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-form_user_data.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-form_user_data.ali: \
- $(ADA_OBJDIR)/$(ABASE)-forms-form_user_data.o
- if [ -f $(ABASE)-forms-form_user_data.ali ]; then \
- ln -f $(ABASE)-forms-form_user_data.ali $@ ;\
- rm -f $(ABASE)-forms-form_user_data.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_user_data.o: \
- $(ABASE)-forms-field_user_data.ads \
- $(srcdir)/$(ABASE)-forms-field_user_data.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_user_data.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_user_data.ali: \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_user_data.o
- if [ -f $(ABASE)-forms-field_user_data.ali ]; then \
- ln -f $(ABASE)-forms-field_user_data.ali $@ ;\
- rm -f $(ABASE)-forms-field_user_data.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration-ada.o: \
- $(srcdir)/$(ABASE)-forms-field_types-enumeration-ada.ads \
- $(srcdir)/$(ABASE)-forms-field_types-enumeration-ada.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-enumeration-ada.adb
-
-$(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration-ada.ali: \
- $(ADA_OBJDIR)/$(ABASE)-forms-field_types-enumeration-ada.o
- if [ -f $(ABASE)-forms-field_types-enumeration-ada.ali ]; then \
- ln -f $(ABASE)-forms-field_types-enumeration-ada.ali $@ ;\
- rm -f $(ABASE)-forms-field_types-enumeration-ada.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-panels-user_data.o: \
- $(ABASE)-panels-user_data.ads \
- $(srcdir)/$(ABASE)-panels-user_data.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-panels-user_data.adb
-
-$(ADA_OBJDIR)/$(ABASE)-panels-user_data.ali: \
- $(ADA_OBJDIR)/$(ABASE)-panels-user_data.o
- if [ -f $(ABASE)-panels-user_data.ali ]; then \
- ln -f $(ABASE)-panels-user_data.ali $@ ;\
- rm -f $(ABASE)-panels-user_data.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-integer_io.o: \
- $(srcdir)/$(ABASE)-text_io-integer_io.ads \
- $(srcdir)/$(ABASE)-text_io-integer_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-integer_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-integer_io.ali: \
- $(ADA_OBJDIR)/$(ABASE)-text_io-integer_io.o
- if [ -f $(ABASE)-text_io-integer_io.ali ]; then \
- ln -f $(ABASE)-text_io-integer_io.ali $@ ;\
- rm -f $(ABASE)-text_io-integer_io.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-float_io.o: \
- $(srcdir)/$(ABASE)-text_io-float_io.ads \
- $(srcdir)/$(ABASE)-text_io-float_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-float_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-float_io.ali: \
- $(ADA_OBJDIR)/$(ABASE)-text_io-float_io.o
- if [ -f $(ABASE)-text_io-float_io.ali ]; then \
- ln -f $(ABASE)-text_io-float_io.ali $@ ;\
- rm -f $(ABASE)-text_io-float_io.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-fixed_io.o: \
- $(srcdir)/$(ABASE)-text_io-fixed_io.ads \
- $(srcdir)/$(ABASE)-text_io-fixed_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-fixed_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-fixed_io.ali: \
- $(ADA_OBJDIR)/$(ABASE)-text_io-fixed_io.o
- if [ -f $(ABASE)-text_io-fixed_io.ali ]; then \
- ln -f $(ABASE)-text_io-fixed_io.ali $@ ;\
- rm -f $(ABASE)-text_io-fixed_io.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-decimal_io.o: \
- $(srcdir)/$(ABASE)-text_io-decimal_io.ads \
- $(srcdir)/$(ABASE)-text_io-decimal_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-decimal_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-decimal_io.ali: \
- $(ADA_OBJDIR)/$(ABASE)-text_io-decimal_io.o
- if [ -f $(ABASE)-text_io-decimal_io.ali ]; then \
- ln -f $(ABASE)-text_io-decimal_io.ali $@ ;\
- rm -f $(ABASE)-text_io-decimal_io.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-enumeration_io.o: \
- $(srcdir)/$(ABASE)-text_io-enumeration_io.ads \
- $(srcdir)/$(ABASE)-text_io-enumeration_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-enumeration_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-enumeration_io.ali: \
- $(ADA_OBJDIR)/$(ABASE)-text_io-enumeration_io.o
- if [ -f $(ABASE)-text_io-enumeration_io.ali ]; then \
- ln -f $(ABASE)-text_io-enumeration_io.ali $@ ;\
- rm -f $(ABASE)-text_io-enumeration_io.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-modular_io.o: \
- $(srcdir)/$(ABASE)-text_io-modular_io.ads \
- $(srcdir)/$(ABASE)-text_io-modular_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-modular_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-modular_io.ali: \
- $(ADA_OBJDIR)/$(ABASE)-text_io-modular_io.o
- if [ -f $(ABASE)-text_io-modular_io.ali ]; then \
- ln -f $(ABASE)-text_io-modular_io.ali $@ ;\
- rm -f $(ABASE)-text_io-modular_io.ali ;\
- fi
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-complex_io.o: \
- $(srcdir)/$(ABASE)-text_io-complex_io.ads \
- $(srcdir)/$(ABASE)-text_io-complex_io.adb $(BASEDEPS)
- $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-complex_io.adb
-
-$(ADA_OBJDIR)/$(ABASE)-text_io-complex_io.ali: \
- $(ADA_OBJDIR)/$(ABASE)-text_io-complex_io.o
- if [ -f $(ABASE)-text_io-complex_io.ali ]; then \
- ln -f $(ABASE)-text_io-complex_io.ali $@ ;\
- rm -f $(ABASE)-text_io-complex_io.ali ;\
- fi
# authorization. #
##############################################################################
#
-# Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+# Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
#
# Version Control
-# $Revision: 1.18 $
+# $Revision: 1.27 $
#
.SUFFIXES:
-DHAVE_CONFIG_H -I$(srcdir)
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
-
CFLAGS_NORMAL = $(CCFLAGS)
CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
CFLAGS_PROFILE = $(CCFLAGS) -pg
RANLIB = @RANLIB@
-LIB_CURSES = -L ../../lib -lncurses
+LIB_CURSES = -L../../lib -lncurses
M4 = m4
M4FLAGS =
+GENERATE = ./gen '@DFT_ARG_SUFFIX@'
DEL_ADAMODE = sed -e '/^\-\-\ \ \-\*\-\ ada\ \-\*\-.*/d'
################################################################################
ALIB = @cf_ada_package@
ABASE = $(ALIB)-curses
-ADA_SRCDIR = ../ada_include
-ADA_OBJDIR = ../ada_objects
+ADA_SRCDIR = ../src
GEN_FILES0 = Base_Defs
ACS_Map \
Linker_Options \
Base_Defs \
+ Window_Offsets \
Version_Info
GEN_FILES2 = Menu_Opt_Rep \
GEN_FILES4 = Mouse_Base_Defs \
Mouse_Event_Rep \
+ Mouse_Events \
Panel_Linker_Options
+GEN_FILES5 = Chtype_Def \
+ Eti_Defs
+
GEN_TARGETS = $(ADA_SRCDIR)/$(ABASE).ads \
+ $(ADA_SRCDIR)/$(ABASE)-aux.ads \
$(ADA_SRCDIR)/$(ABASE)-menus.ads \
$(ADA_SRCDIR)/$(ABASE)-forms.ads \
$(ADA_SRCDIR)/$(ABASE)-mouse.ads \
$(ADA_SRCDIR)/$(ABASE)-panels-user_data.ads
GEN_SRC = $(srcdir)/$(ABASE).ads.m4 \
+ $(srcdir)/$(ABASE)-aux.ads.m4 \
$(srcdir)/$(ABASE)-menus.ads.m4 \
$(srcdir)/$(ABASE)-forms.ads.m4 \
$(srcdir)/$(ABASE)-mouse.ads.m4 \
$(srcdir)/$(ABASE)-panels-user_data.ads.m4
-all: $(ADA_OBJDIR) $(GEN_TARGETS)
+all: $(GEN_TARGETS)
@
sources:
-$(ADA_OBJDIR) \
$(ADA_INCLUDE) \
$(ADA_OBJECTS) :
- $(top_srcdir)/mkinstalldirs $@
+ $(top_srcdir)/mkinstalldirs $(INSTALL_PREFIX)$@
install \
install.libs :: $(ADA_INCLUDE)
- @echo installing package $(ABASE) in $(ADA_INCLUDE)
- @$(top_srcdir)/tar-copy.sh '$(ABASE)[-.]*' $(ADA_SRCDIR) $(ADA_INCLUDE)
- @test $(srcdir) != ./ && $(top_srcdir)/tar-copy.sh '$(ABASE)[-.]*' $(srcdir)/../ada_include $(ADA_INCLUDE)
+ @echo installing package $(ALIB) in $(INSTALL_PREFIX)$(ADA_INCLUDE)
+ @$(top_srcdir)/tar-copy.sh '$(ALIB)[-.]*.ad?' $(ADA_SRCDIR) $(INSTALL_PREFIX)$(ADA_INCLUDE)
+ @test $(srcdir) != ./ && $(top_srcdir)/tar-copy.sh '$(ALIB)[-.]*.ad?' $(srcdir)/../src $(INSTALL_PREFIX)$(ADA_INCLUDE)
install \
install.libs :: $(ADA_OBJECTS)
- @echo installing package $(ABASE) in $(ADA_OBJECTS)
- @$(top_srcdir)/tar-copy.sh '$(ABASE)[-.]*' $(ADA_OBJDIR) $(ADA_OBJECTS)
+ @echo installing package $(ALIB) in $(INSTALL_PREFIX)$(ADA_OBJECTS)
+ @chmod a-wx $(ADA_SRCDIR)/*.ali
+ @$(top_srcdir)/tar-copy.sh '$(ALIB)[-.]*.ali' $(ADA_SRCDIR) $(INSTALL_PREFIX)$(ADA_OBJECTS)
+ @chmod u+x $(ADA_SRCDIR)/*.ali
uninstall \
uninstall.libs ::
- @echo removing package $(ABASE) from $(ADA_INCLUDE)
- -@cd $(ADA_INCLUDE) && rm -f $(ABASE)[-.]*
+ @echo removing package $(ALIB) from $(INSTALL_PREFIX)$(ADA_INCLUDE)
+ -@cd $(INSTALL_PREFIX)$(ADA_INCLUDE) && rm -f $(ALIB)[-.]*
uninstall \
uninstall.libs ::
- @echo removing package $(ABASE) from $(ADA_OBJECTS)
- -@cd $(ADA_OBJECTS) && rm -f $(ABASE)[-.]*
+ @echo removing package $(ALIB) from $(INSTALL_PREFIX)$(ADA_OBJECTS)
+ -@cd $(INSTALL_PREFIX)$(ADA_OBJECTS) && rm -f $(ALIB)[-.]*
gen: gen.o
@ECHO_LINK@ $(LINK) $(CFLAGS_NORMAL) gen.o $(LD_FLAGS) -o $@ $(LIB_CURSES)
$(CC) $(CFLAGS_NORMAL) -c -o $@ $(srcdir)/gen.c
Character_Attribute_Set_Rep: gen
- ./gen B A >$@
+ $(GENERATE) B A >$@
Base_Defs: gen
- ./gen B B >$@
+ $(GENERATE) B B >$@
Color_Defs: gen
- ./gen B C >$@
+ $(GENERATE) B C >$@
Key_Definitions: gen
- ./gen B K >$@
+ $(GENERATE) B K >$@
Old_Keys: gen
- ./gen B O >$@
+ $(GENERATE) B O >$@
ACS_Map: gen
- ./gen B M >$@
+ $(GENERATE) B M >$@
AC_Rep: gen
- ./gen B R >$@
+ $(GENERATE) B R >$@
Linker_Options: gen
- ./gen B L >$@
+ $(GENERATE) B L >$@
Version_Info: gen
- ./gen B V >$@
+ $(GENERATE) B V >$@
+
+Window_Offsets: gen
+ $(GENERATE) B D >$@
Menu_Opt_Rep: gen
- ./gen M R >$@
+ $(GENERATE) M R >$@
Menu_Base_Defs: gen
- ./gen M B >$@
+ $(GENERATE) M B >$@
Menu_Linker_Options: gen
- ./gen M L >$@
+ $(GENERATE) M L >$@
Item_Rep: gen
- ./gen M I >$@
+ $(GENERATE) M I >$@
Form_Opt_Rep: gen
- ./gen F R >$@
+ $(GENERATE) F R >$@
Form_Base_Defs: gen
- ./gen F B >$@
+ $(GENERATE) F B >$@
Form_Linker_Options: gen
- ./gen F L >$@
+ $(GENERATE) F L >$@
Field_Rep: gen
- ./gen F I >$@
+ $(GENERATE) F I >$@
Mouse_Base_Defs: gen
- ./gen P B >$@
+ $(GENERATE) P B >$@
Mouse_Event_Rep: gen
- ./gen P M >$@
+ $(GENERATE) P M >$@
+
+Mouse_Events: gen
+ $(GENERATE) B E >$@
Panel_Linker_Options: gen
- ./gen P L >$@
+ $(GENERATE) P L >$@
+
+Chtype_Def: gen
+ $(GENERATE) E C >$@
+
+Eti_Defs: gen
+ $(GENERATE) E E >$@
$(ADA_SRCDIR)/$(ABASE).ads: $(srcdir)/$(ABASE).ads.m4 \
$(GEN_FILES1) $(srcdir)/normal.m4
$(srcdir)/$(ABASE).ads.m4 |\
$(DEL_ADAMODE) >$@
+$(ADA_SRCDIR)/$(ABASE)-aux.ads: $(srcdir)/$(ABASE)-aux.ads.m4 \
+ $(GEN_FILES5) $(srcdir)/normal.m4
+ $(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
+ $(srcdir)/$(ABASE)-aux.ads.m4 |\
+ $(DEL_ADAMODE) >$@
+
$(ADA_SRCDIR)/$(ABASE)-menus.ads: $(srcdir)/$(ABASE)-menus.ads.m4 \
$(GEN_FILES2) $(srcdir)/normal.m4
$(M4) $(M4FLAGS) -DM4MACRO=$(srcdir)/normal.m4 \
-rm -f $(GEN_FILES2)
-rm -f $(GEN_FILES3)
-rm -f $(GEN_FILES4)
+ -rm -f $(GEN_FILES5)
clean :: mostlyclean
-rm -f $(GEN_TARGETS)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996 *
****************************************************************************/
/*
Version Control
- $Revision: 1.14 $
+ $Revision: 1.29 $
--------------------------------------------------------------------------*/
/*
This program generates various record structures and constants from the
to produce the real source.
*/
+#include <stdlib.h>
+#include <stddef.h>
#include <string.h>
#include <assert.h>
#include <ctype.h>
#define RES_NAME "Reserved"
+static const char *model = "";
static int little_endian = 0;
typedef struct {
const char *name;
- unsigned int attr;
+ unsigned long attr;
} name_attribute_pair;
static int find_pos (char *s, unsigned len, int *low, int *high)
{
- unsigned int i,j;
+ unsigned int i,j;
int l = 0;
*high = -1;
* We are only dealing with record types which are of 32 or 16
* bit size, i.e. they fit into an (u)int or a (u)short.
*/
-static void gen_reps
+static void
+gen_reps
(const name_attribute_pair *nap, /* array of name_attribute_pair records */
const char *name, /* name of the represented record type */
- int len) /* size of the record in bytes */
+ int len, /* size of the record in bytes */
+ int bias)
{
- int i,l,cnt = 0,low,high;
- int width = strlen(RES_NAME);
- int bias = 0;
- unsigned int a;
- unsigned int mask = 0;
- char *suffix;
+ int i,n,l,cnt = 0,low,high;
+ int width = strlen(RES_NAME) + 3;
+ unsigned long a;
+ unsigned long mask = 0;
- assert (nap);
-
- if (len == sizeof(int)/2)
- {
- bias = little_endian ? 8 * len : 0;
- suffix = " / 2";
- }
- else
- {
- assert(len==sizeof(int));
- suffix = "";
- }
+ assert (nap!=NULL);
for (i=0; nap[i].name != (char *)0; i++)
{
for (i=0; nap[i].name != (char *)0; i++)
{
printf(" %-*s : Boolean;\n",width,nap[i].name);
- }
- if (cnt != 8*len)
- {
- printf(" %-*s : Boolean;\n",width,RES_NAME);
}
printf(" end record;\n");
printf(" pragma Pack (%s);\n",name);
mask |= a;
l = find_pos( (char *)&a,sizeof(a),&low,&high );
if (l>=0)
- printf(" %-*s at 0 range %2d .. %2d;\n",width,nap[i].name,low-bias,high-bias);
- }
- if (cnt != 8*len)
- {
- mask = ~mask;
- assert(mask);
- if (little_endian)
- l = 8*len - 1;
- else
- l = 0;
- printf(" %-*s at 0 range %2d .. %2d;\n",width,RES_NAME,l,l);
+ printf(" %-*s at 0 range %2d .. %2d;\n",width,nap[i].name,
+ low-bias,high-bias);
}
+ i = 1; n = cnt;
printf(" end record;\n");
- printf(" for %s'Size use Interfaces.C.int'Size%s;\n", name, suffix);
+ printf(" for %s'Size use %d;\n", name, 8*len);
printf(" -- Please note: this rep. clause is generated and may be\n");
printf(" -- different on your system.");
}
-static void chtype_rep (const char *name, int mask)
+static void chtype_rep (const char *name, attr_t mask)
{
- int x = -1;
- int t = x & mask;
+ attr_t x = -1;
+ attr_t t = x & mask;
int low, high;
int l = find_pos ((char *)&t, sizeof(t), &low, &high);
if (l>=0)
- printf(" %-5s at 0 range %2d .. %2d;\n",name,low,high);
+ printf(" %-5s at 0 range %2d .. %2d;\n",name,low,high);
}
static void gen_chtype_rep(const char *name)
chtype_rep("Ch",A_CHARTEXT);
chtype_rep("Color",A_COLOR);
chtype_rep("Attr",(A_ATTRIBUTES&~A_COLOR));
- printf(" end record;\n for %s'Size use Interfaces.C.int'Size;\n",name);
+ printf(" end record;\n for %s'Size use %d;\n",name,8*sizeof(chtype));
printf(" -- Please note: this rep. clause is generated and may be\n");
printf(" -- different on your system.\n");
}
int low, high;
int l = find_pos((char *)rec, sizeof(MEVENT), &low, &high);
if (l>=0)
- printf(" %-7s at 0 range %3d .. %3d;\n",name,low,high);
+ printf(" %-7s at 0 range %3d .. %3d;\n",name,low,high);
}
#endif
{(char *)0, 0}
};
- gen_reps (nap, name, sizeof(int)/2);
+ chtype attr = A_ATTRIBUTES & ~A_COLOR;
+ int start=-1, len=0, i, set;
+ for(i=0;i<(int)(8*sizeof(chtype));i++) {
+ set = attr&1;
+ if (set) {
+ if (start<0)
+ start = i;
+ if (start>=0) {
+ len++;
+ }
+ }
+ attr = attr >> 1;
+ }
+ gen_reps (nap, name, (len+7)/8, little_endian?start:0);
}
static void gen_menu_opt_rep(const char *name)
#endif
{(char *)0, 0}
};
- gen_reps (nap, name, sizeof(int));
+ gen_reps (nap, name, sizeof(int),0);
}
static void gen_item_opt_rep(const char *name)
{"Selectable", O_SELECTABLE},
#endif
{(char *)0 , 0}
- };
- gen_reps (nap, name, sizeof(int));
+ };
+ gen_reps (nap, name, sizeof(int),0);
}
static void gen_form_opt_rep(const char *name)
#endif
{(char *)0 , 0}
};
- gen_reps (nap, name, sizeof(int));
+ gen_reps (nap, name, sizeof(int),0);
}
/*
#endif
{(char *)0, 0}
};
- gen_reps (nap, name, sizeof(int));
+ gen_reps (nap, name, sizeof(int),0);
}
/*
printf(" %-16s : Special_Key_Code renames %s;\n",old_name,name);
}
}
-
+
/*
* Generate constants for the key codes. When called with mode==0, a
* complete list with nice constant names in proper casing style will
#endif
#ifdef KEY_MOUSE
keydef("Key_Mouse","KEY_MOUSE",KEY_MOUSE,mode);
-#endif
+#endif
#ifdef KEY_RESIZE
keydef("Key_Resize","KEY_RESIZE",KEY_RESIZE,mode);
-#endif
+#endif
}
/*
#endif
}
+
+#define GEN_EVENT(name,value) \
+ printf(" %-25s : constant Event_Mask := 8#%011lo#;\n", \
+ #name, value)
+
+#define GEN_MEVENT(name) \
+ printf(" %-25s : constant Event_Mask := 8#%011lo#;\n", \
+ #name, name)
+
+static
+void gen_mouse_events(void)
+{
+ mmask_t all1 = 0;
+ mmask_t all2 = 0;
+ mmask_t all3 = 0;
+ mmask_t all4 = 0;
+
+#ifdef BUTTON1_RELEASED
+ GEN_MEVENT(BUTTON1_RELEASED);
+ all1 |= BUTTON1_RELEASED;
+#endif
+#ifdef BUTTON1_PRESSED
+ GEN_MEVENT(BUTTON1_PRESSED);
+ all1 |= BUTTON1_PRESSED;
+#endif
+#ifdef BUTTON1_CLICKED
+ GEN_MEVENT(BUTTON1_CLICKED);
+ all1 |= BUTTON1_CLICKED;
+#endif
+#ifdef BUTTON1_DOUBLE_CLICKED
+ GEN_MEVENT(BUTTON1_DOUBLE_CLICKED);
+ all1 |= BUTTON1_DOUBLE_CLICKED;
+#endif
+#ifdef BUTTON1_TRIPLE_CLICKED
+ GEN_MEVENT(BUTTON1_TRIPLE_CLICKED);
+ all1 |= BUTTON1_TRIPLE_CLICKED;
+#endif
+#ifdef BUTTON1_RESERVED_EVENT
+ GEN_MEVENT(BUTTON1_RESERVED_EVENT);
+ all1 |= BUTTON1_RESERVED_EVENT;
+#endif
+#ifdef BUTTON2_RELEASED
+ GEN_MEVENT(BUTTON2_RELEASED);
+ all2 |= BUTTON2_RELEASED;
+#endif
+#ifdef BUTTON2_PRESSED
+ GEN_MEVENT(BUTTON2_PRESSED);
+ all2 |= BUTTON2_PRESSED;
+#endif
+#ifdef BUTTON2_CLICKED
+ GEN_MEVENT(BUTTON2_CLICKED);
+ all2 |= BUTTON2_CLICKED;
+#endif
+#ifdef BUTTON2_DOUBLE_CLICKED
+ GEN_MEVENT(BUTTON2_DOUBLE_CLICKED);
+ all2 |= BUTTON2_DOUBLE_CLICKED;
+#endif
+#ifdef BUTTON2_TRIPLE_CLICKED
+ GEN_MEVENT(BUTTON2_TRIPLE_CLICKED);
+ all2 |= BUTTON2_TRIPLE_CLICKED;
+#endif
+#ifdef BUTTON2_RESERVED_EVENT
+ GEN_MEVENT(BUTTON2_RESERVED_EVENT);
+ all2 |= BUTTON2_RESERVED_EVENT;
+#endif
+#ifdef BUTTON3_RELEASED
+ GEN_MEVENT(BUTTON3_RELEASED);
+ all3 |= BUTTON3_RELEASED;
+#endif
+#ifdef BUTTON3_PRESSED
+ GEN_MEVENT(BUTTON3_PRESSED);
+ all3 |= BUTTON3_PRESSED;
+#endif
+#ifdef BUTTON3_CLICKED
+ GEN_MEVENT(BUTTON3_CLICKED);
+ all3 |= BUTTON3_CLICKED;
+#endif
+#ifdef BUTTON3_DOUBLE_CLICKED
+ GEN_MEVENT(BUTTON3_DOUBLE_CLICKED);
+ all3 |= BUTTON3_DOUBLE_CLICKED;
+#endif
+#ifdef BUTTON3_TRIPLE_CLICKED
+ GEN_MEVENT(BUTTON3_TRIPLE_CLICKED);
+ all3 |= BUTTON3_TRIPLE_CLICKED;
+#endif
+#ifdef BUTTON3_RESERVED_EVENT
+ GEN_MEVENT(BUTTON3_RESERVED_EVENT);
+ all3 |= BUTTON3_RESERVED_EVENT;
+#endif
+#ifdef BUTTON4_RELEASED
+ GEN_MEVENT(BUTTON4_RELEASED);
+ all4 |= BUTTON4_RELEASED;
+#endif
+#ifdef BUTTON4_PRESSED
+ GEN_MEVENT(BUTTON4_PRESSED);
+ all4 |= BUTTON4_PRESSED;
+#endif
+#ifdef BUTTON4_CLICKED
+ GEN_MEVENT(BUTTON4_CLICKED);
+ all4 |= BUTTON4_CLICKED;
+#endif
+#ifdef BUTTON4_DOUBLE_CLICKED
+ GEN_MEVENT(BUTTON4_DOUBLE_CLICKED);
+ all4 |= BUTTON4_DOUBLE_CLICKED;
+#endif
+#ifdef BUTTON4_TRIPLE_CLICKED
+ GEN_MEVENT(BUTTON4_TRIPLE_CLICKED);
+ all4 |= BUTTON4_TRIPLE_CLICKED;
+#endif
+#ifdef BUTTON4_RESERVED_EVENT
+ GEN_MEVENT(BUTTON4_RESERVED_EVENT);
+ all4 |= BUTTON4_RESERVED_EVENT;
+#endif
+#ifdef BUTTON_CTRL
+ GEN_MEVENT(BUTTON_CTRL);
+#endif
+#ifdef BUTTON_SHIFT
+ GEN_MEVENT(BUTTON_SHIFT);
+#endif
+#ifdef BUTTON_ALT
+ GEN_MEVENT(BUTTON_ALT);
+#endif
+#ifdef ALL_MOUSE_EVENTS
+ GEN_MEVENT(ALL_MOUSE_EVENTS);
+#endif
+
+GEN_EVENT(BUTTON1_EVENTS,all1);
+GEN_EVENT(BUTTON2_EVENTS,all2);
+GEN_EVENT(BUTTON3_EVENTS,all3);
+GEN_EVENT(BUTTON4_EVENTS,all4);
+}
+
/*
* Output some comment lines indicating that the file is generated.
* The name parameter is the name of the facility to be used in
printf("-- This module is generated. Please don't change it manually!\n");
printf("-- Run the generator instead.\n-- |");
- printf("define(`M4_BIT_ORDER',`%s_Order_First')",little_endian ? "Low":"High");
+ printf("define(`M4_BIT_ORDER',`%s_Order_First')",
+ little_endian ? "Low":"High");
}
/*
*/
static void gen_linkopts (void)
{
- printf(" pragma Linker_Options (\"-lncurses\");\n");
+ printf(" pragma Linker_Options (\"-lAdaCurses%s\");\n", model);
+ printf(" pragma Linker_Options (\"-lncurses%s\");\n", model);
}
/*
*/
static void gen_menu_linkopts (void)
{
- printf(" pragma Linker_Options (\"-lmenu\");\n");
+ printf(" pragma Linker_Options (\"-lmenu%s\");\n", model);
}
/*
*/
static void gen_form_linkopts (void)
{
- printf(" pragma Linker_Options (\"-lform\");\n");
+ printf(" pragma Linker_Options (\"-lform%s\");\n", model);
}
/*
*/
static void gen_panel_linkopts (void)
{
- printf(" pragma Linker_Options (\"-lpanel\");\n");
+ printf(" pragma Linker_Options (\"-lpanel%s\");\n", model);
}
static void gen_version_info (void)
{
- printf(" NC_Major_Version : constant := %d; -- Major version of ncurses library\n", NCURSES_VERSION_MAJOR);
- printf(" NC_Minor_Version : constant := %d; -- Minor version of ncurses library\n", NCURSES_VERSION_MINOR);
- printf(" NC_Version : constant String := %c%d.%d%c; -- Version of ncurses library\n", '"',NCURSES_VERSION_MAJOR,NCURSES_VERSION_MINOR,'"');
+ static const char* v1 =
+ " NC_Major_Version : constant := %d; -- Major version of the library\n";
+ static const char* v2 =
+ " NC_Minor_Version : constant := %d; -- Minor version of the library\n";
+ static const char* v3 =
+ " NC_Version : constant String := %c%d.%d%c; -- Version of library\n";
+
+ printf(v1, NCURSES_VERSION_MAJOR);
+ printf(v2, NCURSES_VERSION_MINOR);
+ printf(v3, '"',NCURSES_VERSION_MAJOR,NCURSES_VERSION_MINOR,'"');
+}
+
+static int
+eti_gen(char*buf, int code, const char* name, int* etimin, int* etimax)
+{
+ sprintf(buf," E_%-16s : constant Eti_Error := %d;\n",name,code);
+ if (code < *etimin)
+ *etimin = code;
+ if (code > *etimax)
+ *etimax = code;
+ return strlen(buf);
+}
+
+#define GEN_OFFSET(member,itype) \
+ if (sizeof(((WINDOW*)0)->member)==sizeof(itype)) { \
+ o = offsetof(WINDOW, member); \
+ if ((o%sizeof(itype) == 0)) { \
+ printf(" Offset%-*s : constant Natural := %2d; -- %s\n", \
+ 8, #member, o/sizeof(itype),#itype); \
+ } \
+ }
+
+static void
+gen_offsets(void)
+{
+ int o;
+ const char* s_bool = "";
+
+ GEN_OFFSET(_maxy,short);
+ GEN_OFFSET(_maxx,short);
+ GEN_OFFSET(_begy,short);
+ GEN_OFFSET(_begx,short);
+ GEN_OFFSET(_cury,short);
+ GEN_OFFSET(_curx,short);
+ GEN_OFFSET(_yoffset,short);
+ GEN_OFFSET(_pary,int);
+ GEN_OFFSET(_parx,int);
+ if (sizeof(bool) == sizeof(char)) {
+ GEN_OFFSET(_scroll,char);
+ s_bool = "char";
+ } else if (sizeof(bool) == sizeof(short)) {
+ GEN_OFFSET(_scroll,short);
+ s_bool = "short";
+ } else if (sizeof(bool) == sizeof(int)) {
+ GEN_OFFSET(_scroll,int);
+ s_bool = "int";
+ }
+ printf(" Sizeof%-*s : constant Natural := %2d; -- %s\n",
+ 8, "_bool",sizeof(bool),"bool");
+ /* In ncurses _maxy and _maxx needs an offset for the "public"
+ * value
+ */
+ printf(" Offset%-*s : constant Natural := %2d; -- %s\n",
+ 8, "_XY",1,"int");
+ printf("\n");
+ printf(" type Curses_Bool is mod 2 ** Interfaces.C.%s'Size;\n",s_bool);
}
/*
* M - Menus
* F - Forms
* P - Pointer Device (Mouse)
+ * E - ETI base definitions
*
* The second character then denotes the specific output that should be
* generated for the selected facility.
if (*s == 0x78)
little_endian = 1;
- if (argc!=3)
+ if (argc!=4)
exit(1);
+ model = *++argv;
switch(argv[1][0])
{
+ /* ---------------------------------------------------------------*/
case 'B': /* The Base facility */
switch(argv[2][0])
{
case 'C': /* generate color constants */
gen_color();
break;
+ case 'D': /* generate displacements of fields in WINDOW struct. */
+ gen_offsets();
+ break;
+ case 'E': /* generate Mouse Event codes */
+ gen_mouse_events();
+ break;
case 'M': /* generate constants for the ACS characters */
gen_acs();
break;
break;
}
break;
+ /* ---------------------------------------------------------------*/
case 'M': /* The Menu facility */
switch(argv[2][0])
{
break;
}
break;
+ /* ---------------------------------------------------------------*/
case 'F': /* The Form facility */
switch(argv[2][0])
{
break;
}
break;
+ /* ---------------------------------------------------------------*/
case 'P': /* The Pointer(=Mouse) facility */
- switch(argv[2][0])
- {
+ switch(argv[2][0]) {
case 'B': /* write some initial comment lines */
mouse_basedefs();
break;
break;
}
break;
+ /* ---------------------------------------------------------------*/
+ case 'E' : /* chtype size detection */
+ switch(argv[2][0]) {
+ case 'C':
+ {
+ const char* fmt = " type C_Chtype is new %s;\n";
+ const char* afmt = " type C_AttrType is new %s;\n";
+
+ if (sizeof(chtype)==sizeof(int)) {
+ if (sizeof(int)==sizeof(long))
+ printf(fmt,"C_ULong");
+ else
+ printf(fmt,"C_UInt");
+ }
+ else if (sizeof(chtype)==sizeof(long)) {
+ printf(fmt,"C_ULong");
+ }
+ else
+ printf("Error\n");
+
+ if (sizeof(attr_t)==sizeof(int)) {
+ if (sizeof(int)==sizeof(long))
+ printf(afmt,"C_ULong");
+ else
+ printf(afmt,"C_UInt");
+ }
+ else if (sizeof(attr_t)==sizeof(long)) {
+ printf(afmt,"C_ULong");
+ }
+ else
+ printf("Error\n");
+
+ printf("define(`CF_CURSES_OK',`%d')",OK);
+ printf("define(`CF_CURSES_ERR',`%d')",ERR);
+ printf("define(`CF_CURSES_TRUE',`%d')",TRUE);
+ printf("define(`CF_CURSES_FALSE',`%d')",FALSE);
+ }
+ break;
+ case 'E':
+ {
+ char* buf = (char*)malloc(2048);
+ char* p = buf;
+ int etimin = E_OK;
+ int etimax = E_OK;
+ if (p) {
+ p += eti_gen(p, E_OK, "Ok", &etimin, &etimax);
+ p += eti_gen(p, E_SYSTEM_ERROR,"System_Error", &etimin, &etimax);
+ p += eti_gen(p, E_BAD_ARGUMENT, "Bad_Argument", &etimin, &etimax);
+ p += eti_gen(p, E_POSTED, "Posted", &etimin, &etimax);
+ p += eti_gen(p, E_CONNECTED, "Connected", &etimin, &etimax);
+ p += eti_gen(p, E_BAD_STATE, "Bad_State", &etimin, &etimax);
+ p += eti_gen(p, E_NO_ROOM, "No_Room", &etimin, &etimax);
+ p += eti_gen(p, E_NOT_POSTED, "Not_Posted", &etimin, &etimax);
+ p += eti_gen(p, E_UNKNOWN_COMMAND,
+ "Unknown_Command", &etimin, &etimax);
+ p += eti_gen(p, E_NO_MATCH, "No_Match", &etimin, &etimax);
+ p += eti_gen(p, E_NOT_SELECTABLE,
+ "Not_Selectable", &etimin, &etimax);
+ p += eti_gen(p, E_NOT_CONNECTED,
+ "Not_Connected", &etimin, &etimax);
+ p += eti_gen(p, E_REQUEST_DENIED,
+ "Request_Denied", &etimin, &etimax);
+ p += eti_gen(p, E_INVALID_FIELD,
+ "Invalid_Field", &etimin, &etimax);
+ p += eti_gen(p, E_CURRENT,
+ "Current", &etimin, &etimax);
+ }
+ printf(" subtype Eti_Error is C_Int range %d .. %d;\n\n",
+ etimin,etimax);
+ printf(buf);
+ }
+ break;
+ default:
+ break;
+ }
+ break;
+ /* ---------------------------------------------------------------*/
+ case 'V' : /* plain version dump */
+ {
+ switch(argv[2][0]) {
+ case '1': /* major version */
+#ifdef NCURSES_VERSION_MAJOR
+ printf("%d",NCURSES_VERSION_MAJOR);
+#endif
+ break;
+ case '2': /* minor version */
+#ifdef NCURSES_VERSION_MINOR
+ printf("%d",NCURSES_VERSION_MINOR);
+#endif
+ break;
+ case '3': /* patch level */
+#ifdef NCURSES_VERSION_PATCH
+ printf("%d",NCURSES_VERSION_PATCH);
+#endif
+ break;
+ default:
+ break;
+ }
+ }
+ break;
+ /* ---------------------------------------------------------------*/
default:
break;
}
return 0;
}
+
-------------------------------------------------------------------------------
+-- -*- ada -*-
+define(`HTMLNAME',`terminal_interface-curses-aux__ads.htm')dnl
+include(M4MACRO)------------------------------------------------------------------------------
-- --
-- GNAT ncurses Binding --
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.13 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
+include(`Base_Defs')
with System;
with Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
with Unchecked_Conversion;
package Terminal_Interface.Curses.Aux is
- pragma Preelaborate (Aux);
+ pragma Preelaborate (Terminal_Interface.Curses.Aux);
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
- subtype C_Int is Interfaces.C.Int;
- subtype C_Short is Interfaces.C.Short;
- subtype C_Long_Int is Interfaces.C.Long;
- subtype C_Size_T is Interfaces.C.Size_T;
- subtype C_Char_Ptr is Interfaces.C.Strings.Chars_Ptr;
+ subtype C_Int is Interfaces.C.int;
+ subtype C_Short is Interfaces.C.short;
+ subtype C_Long_Int is Interfaces.C.long;
+ subtype C_Size_T is Interfaces.C.size_t;
+ subtype C_UInt is Interfaces.C.unsigned;
+ subtype C_ULong is Interfaces.C.unsigned_long;
+ subtype C_Char_Ptr is Interfaces.C.Strings.chars_ptr;
type C_Void_Ptr is new System.Address;
-
+include(`Chtype_Def')
-- This is how those constants are defined in ncurses. I see them also
-- exactly like this in all ETI implementations I ever tested. So it
-- could be that this is quite general, but please check with your curses.
-- This is critical, because curses sometime mixes boolean returns with
-- returning an error status.
- Curses_Ok : constant C_Int := 0;
- Curses_Err : constant C_Int := -1;
-
- Curses_True : constant C_Int := 1;
- Curses_False : constant C_Int := 0;
-
- subtype Eti_Error is C_Int range -14 .. 0;
- -- Type for error codes returned by the menu and forms subsystem
+ Curses_Ok : constant C_Int := CF_CURSES_OK;
+ Curses_Err : constant C_Int := CF_CURSES_ERR;
- E_Ok : constant Eti_Error := 0;
- E_System_Error : constant Eti_Error := -1;
- E_Bad_Argument : constant Eti_Error := -2;
- E_Posted : constant Eti_Error := -3;
- E_Connected : constant Eti_Error := -4;
- E_Bad_State : constant Eti_Error := -5;
- E_No_Room : constant Eti_Error := -6;
- E_Not_Posted : constant Eti_Error := -7;
- E_Unknown_Command : constant Eti_Error := -8;
- E_No_Match : constant Eti_Error := -9;
- E_Not_Selectable : constant Eti_Error := -10;
- E_Not_Connected : constant Eti_Error := -11;
- E_Request_Denied : constant Eti_Error := -12;
- E_Invalid_Field : constant Eti_Error := -13;
- E_Current : constant Eti_Error := -14;
+ Curses_True : constant C_Int := CF_CURSES_TRUE;
+ Curses_False : constant C_Int := CF_CURSES_FALSE;
+ -- Eti_Error: type for error codes returned by the menu and form subsystem
+include(`Eti_Defs')
procedure Eti_Exception (Code : Eti_Error);
-- Dispatch the error code and raise the appropriate exception
--
--
-- Some helpers
- function CInt_To_Chtype is new
- Unchecked_Conversion (Source => C_Int,
+ function Chtype_To_AttrChar is new
+ Unchecked_Conversion (Source => C_Chtype,
Target => Attributed_Character);
- function Chtype_To_CInt is new
+ function AttrChar_To_Chtype is new
Unchecked_Conversion (Source => Attributed_Character,
- Target => C_Int);
+ Target => C_Chtype);
+
+ function AttrChar_To_AttrType is new
+ Unchecked_Conversion (Source => Attributed_Character,
+ Target => C_AttrType);
+
+ function AttrType_To_AttrChar is new
+ Unchecked_Conversion (Source => C_AttrType,
+ Target => Attributed_Character);
procedure Fill_String (Cp : in chars_ptr;
Str : out String);
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-forms-field_user_data_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-forms-field_user_data__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.12 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-with Terminal_Interface.Curses.Aux;
+with Interfaces.C;
package Terminal_Interface.Curses.Forms.Field_Types is
- pragma Preelaborate (Field_Types);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types);
+ use type Interfaces.C.int;
+ subtype C_Int is Interfaces.C.int;
-- MANPAGE(`form_fieldtype.3x')
-- | Most of this is used by the implementations of the child packages.
-- |
private
- use Terminal_Interface.Curses.Aux;
-
type Makearg_Function is access
function (Args : System.Address) return System.Address;
pragma Convention (C, Makearg_Function);
-- |
type Low_Level_Field_Type is
record
- Status : C_Short;
- Ref_Count : C_Long_Int;
+ Status : Interfaces.C.short;
+ Ref_Count : Interfaces.C.long;
Left, Right : System.Address;
Makearg : Makearg_Function;
Copyarg : Copyarg_Function;
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-forms-field_user_data_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-forms-field_user_data__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.13 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type User is limited private;
type User_Access is access User;
package Terminal_Interface.Curses.Forms.Field_User_Data is
- pragma Preelaborate (Field_User_Data);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_User_Data);
-- MANPAGE(`form_field_userptr.3x')
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-forms-form_user_data_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-forms-form_user_data__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.12 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type User is limited private;
type User_Access is access User;
package Terminal_Interface.Curses.Forms.Form_User_Data is
- pragma Preelaborate (Form_User_Data);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Form_User_Data);
-- MANPAGE(`form_userptr.3x')
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-forms_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-forms__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.14 $
--- Binding Version 00.93
+-- $Revision: 1.23 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
include(`Form_Base_Defs')
with System;
with Interfaces.C;
package Terminal_Interface.Curses.Forms is
- pragma Preelaborate (Forms);
-include(`Form_Linker_Options')
-
+ pragma Preelaborate (Terminal_Interface.Curses.Forms);
+include(`Form_Linker_Options')dnl
+include(`Linker_Options')
Space : Character renames Ada.Characters.Latin_1.Space;
type Field is private;
Center,
Right);
-include(`Field_Rep')
+ pragma Warnings (Off);
+include(`Field_Rep')Dnl
+
+ pragma Warnings (On);
function Default_Field_Options return Field_Option_Set;
-- The initial defaults for the field options.
pragma Inline (Default_Field_Options);
-include(`Form_Opt_Rep')
+ pragma Warnings (Off);
+include(`Form_Opt_Rep')Dnl
+
+ pragma Warnings (On);
function Default_Form_Options return Form_Option_Set;
-- The initial defaults for the form options.
------------------------------------------------------------------------------
private
+ type Field is new System.Storage_Elements.Integer_Address;
+ type Form is new System.Storage_Elements.Integer_Address;
- type Field is new System.Address;
- type Form is new System.Address;
-
- Null_Field : constant Field := Field (System.Null_Address);
- Null_Form : constant Form := Form (System.Null_Address);
+ Null_Field : constant Field := 0;
+ Null_Form : constant Form := 0;
end Terminal_Interface.Curses.Forms;
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-menus-item_user_data_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-menus-item_user_data__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.12 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type User is limited private;
type User_Access is access User;
package Terminal_Interface.Curses.Menus.Item_User_Data is
- pragma Preelaborate (Item_User_Data);
+ pragma Preelaborate (Terminal_Interface.Curses.Menus.Item_User_Data);
-- The binding uses the same user pointer for menu items
-- as the low level C implementation. So you can safely
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-menus-menu_user_data_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-menus-menu_user_data__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.12 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type User is limited private;
type User_Access is access User;
package Terminal_Interface.Curses.Menus.Menu_User_Data is
- pragma Preelaborate (Menu_User_Data);
+ pragma Preelaborate (Terminal_Interface.Curses.Menus.Menu_User_Data);
-- MANPAGE(`menu_userptr.3x')
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-menus_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-menus__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.12 $
--- Binding Version 00.93
+-- $Revision: 1.20 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
include(`Menu_Base_Defs')
with System;
with Ada.Characters.Latin_1;
package Terminal_Interface.Curses.Menus is
- pragma Preelaborate (Menus);
-include(`Menu_Linker_Options')
-
-
+ pragma Preelaborate (Terminal_Interface.Curses.Menus);
+include(`Menu_Linker_Options')dnl
+include(`Linker_Options')
Space : Character renames Ada.Characters.Latin_1.Space;
type Item is private;
--
-- Menu options
--
+ pragma Warnings (Off);
+include(`Menu_Opt_Rep')dnl
-include(`Menu_Opt_Rep')
+ pragma Warnings (On);
function Default_Menu_Options return Menu_Option_Set;
-- Initial default options for a menu.
--
-- Item options
--
-include(`Item_Rep')
+ pragma Warnings (Off);
+include(`Item_Rep')dnl
+
+ pragma Warnings (On);
function Default_Item_Options return Item_Option_Set;
-- Initial default options for an item.
-------------------------------------------------------------------------------
private
- type Item is new System.Address;
- type Menu is new System.Address;
+ type Item is new System.Storage_Elements.Integer_Address;
+ type Menu is new System.Storage_Elements.Integer_Address;
- Null_Item : constant Item := Item (System.Null_Address);
- Null_Menu : constant Menu := Menu (System.Null_Address);
+ Null_Item : constant Item := 0;
+ Null_Menu : constant Menu := 0;
end Terminal_Interface.Curses.Menus;
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-mouse_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-mouse__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.12 $
--- Binding Version 00.93
+-- $Revision: 1.19 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
include(`Mouse_Base_Defs')
with System;
package Terminal_Interface.Curses.Mouse is
- pragma Preelaborate (Mouse);
+ pragma Preelaborate (Terminal_Interface.Curses.Mouse);
-- MANPAGE(`curs_mouse.3x')
-- Please note, that in ncurses-1.9.9e documentation mouse support
Shift, -- Shift Key
Alt); -- ALT Key
+ subtype Real_Buttons is Mouse_Button range Left .. Button4;
+ subtype Modifier_Keys is Mouse_Button range Control .. Alt;
+
type Button_State is (Released,
Pressed,
Clicked,
Double_Clicked,
Triple_Clicked);
+ type Button_States is array (Button_State) of Boolean;
+ pragma Pack (Button_States);
+
+ All_Clicks : constant Button_States := (Clicked .. Triple_Clicked => True,
+ others => False);
+ All_States : constant Button_States := (others => True);
+
type Mouse_Event is private;
-- MANPAGE(`curs_mouse.3x')
-- Return true if a mouse device is supported, false otherwise.
procedure Register_Reportable_Event
- (B : in Mouse_Button;
- S : in Button_State;
- Mask : in out Event_Mask);
+ (Button : in Mouse_Button;
+ State : in Button_State;
+ Mask : in out Event_Mask);
-- Stores the event described by the button and the state in the mask.
-- Before you call this the first time, you should init the mask
-- with the Empty_Mask constant
pragma Inline (Register_Reportable_Event);
+ procedure Register_Reportable_Events
+ (Button : in Mouse_Button;
+ State : in Button_States;
+ Mask : in out Event_Mask);
+ -- Register all events described by the Button and the State bitmap.
+ -- Before you call this the first time, you should init the mask
+ -- with the Empty_Mask constant
+
-- ANCHOR(`mousemask()',`Start_Mouse')
+ -- There is one difference to mousmask(): we return the value of the
+ -- old mask, that means the event mask value before this call.
function Start_Mouse (Mask : Event_Mask := All_Events)
return Event_Mask;
-- AKA
pragma Inline (Start_Mouse);
- procedure End_Mouse;
- -- Terminates the mouse
+ procedure End_Mouse (Mask : in Event_Mask := No_Events);
+ -- Terminates the mouse, restores the specified event mask
pragma Inline (End_Mouse);
-- ANCHOR(`getmouse()',`Get_Mouse')
pragma Inline (Mouse_Interval);
private
- type Event_Mask is new Interfaces.C.int;
- No_Events : constant Event_Mask := 0;
- All_Events : constant Event_Mask := -1;
+ type Event_Mask is new Interfaces.C.unsigned_long;
type Mouse_Event is
record
Id : Integer range Integer (Interfaces.C.short'First) ..
- Integer (Interfaces.C.Short'Last);
+ Integer (Interfaces.C.short'Last);
X, Y, Z : Integer range Integer (Interfaces.C.int'First) ..
Integer (Interfaces.C.int'Last);
Bstate : Event_Mask;
Generation_Bit_Order : constant System.Bit_Order := System.M4_BIT_ORDER;
-- This constant may be different on your system.
+include(`Mouse_Events')
+
+ No_Events : constant Event_Mask := 0;
+ All_Events : constant Event_Mask := ALL_MOUSE_EVENTS;
+
end Terminal_Interface.Curses.Mouse;
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-panels-user_data_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-panels-user_data__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.12 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type User is limited private;
type User_Access is access all User;
package Terminal_Interface.Curses.Panels.User_Data is
- pragma Preelaborate (User_Data);
+ pragma Preelaborate (Terminal_Interface.Curses.Panels.User_Data);
-- MANPAGE(`panel.3x')
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses-panels_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses-panels__ads.htm')dnl
include(M4MACRO)dnl
------------------------------------------------------------------------------
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.14 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with System;
package Terminal_Interface.Curses.Panels is
- pragma Preelaborate (Panels);
-include(`Panel_Linker_Options')
-
+ pragma Preelaborate (Terminal_Interface.Curses.Panels);
+include(`Panel_Linker_Options')dnl
+include(`Linker_Options')
type Panel is private;
---------------------------
pragma Inline (Delete);
private
- type Panel is new System.Address;
- Null_Panel : constant Panel := Panel (System.Null_Address);
+ type Panel is new System.Storage_Elements.Integer_Address;
+ Null_Panel : constant Panel := 0;
end Terminal_Interface.Curses.Panels;
-- -*- ada -*-
-define(`HTMLNAME',`terminal_interface-curses_s.html')dnl
+define(`HTMLNAME',`terminal_interface-curses__ads.htm')dnl
include(M4MACRO)------------------------------------------------------------------------------
-- --
-- GNAT ncurses Binding --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.15 $
--- Binding Version 00.93
+-- $Revision: 1.26 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
include(`Base_Defs')
-with System;
+with System.Storage_Elements;
with Interfaces.C; -- We need this for some assertions.
package Terminal_Interface.Curses is
- pragma Preelaborate (Curses);
+ pragma Preelaborate (Terminal_Interface.Curses);
include(`Linker_Options')
include(`Version_Info')
type Window is private;
-- For those who like to use the original key names we produce them were
-- they differ from the original. Please note that they may differ in
-- lower/upper case.
-include(`Old_Keys')
+include(`Old_Keys')dnl
------------------------------------------------------------------------------
-- predefined (see below), although they may not really exist.
include(`Color_Defs')
- type RGB_Value is range 0 .. Integer (Interfaces.C.Short'Last);
+ type RGB_Value is range 0 .. Integer (Interfaces.C.short'Last);
for RGB_Value'Size use Interfaces.C.short'Size;
-- Some system may allow to redefine a color by setting RGB values.
-- the other for the background
include(`Character_Attribute_Set_Rep')
- -- (n)curses uses half of an integer for attributes.
+ -- (n)curses uses all but the lowes 16 Bits for Attributes.
Normal_Video : constant Character_Attribute_Set := (others => False);
type Attributed_Character is
record
- Attr : Character_Attribute_Set := Normal_Video;
- Color : Color_Pair := 0;
- Ch : Character := ' ';
+ Attr : Character_Attribute_Set;
+ Color : Color_Pair;
+ Ch : Character;
end record;
pragma Convention (C, Attributed_Character);
-- This is the counterpart for the chtype in C.
Default_Character : constant Attributed_Character
:= (Ch => Character'First,
Color => Color_Pair'First,
- Attr => Normal_Video);
+ Attr => (others => False)); -- preelaboratable Normal_Video
type Attributed_String is array (Positive range <>) of Attributed_Character;
pragma Pack (Attributed_String);
-- You must use this constants as indices into the ACS_Map array
-- to get the corresponding attributed character at runtime.
--
-include(`ACS_Map')
+include(`ACS_Map')dnl
-- MANPAGE(`curs_initscr.3x')
-- | Not implemented: newterm, set_term, delscreen
-- AKA
pragma Inline (Get_Character_Attribute);
+ -- ANCHOR(`wcolor_set()',`Set_Color')
+ procedure Set_Color (Win : in Window := Standard_Window;
+ Pair : in Color_Pair);
+ -- AKA
+ pragma Inline (Set_Color);
+
-- ANCHOR(`wchgat()',`Change_Attributes')
procedure Change_Attributes
(Win : in Window := Standard_Window;
-- AKA
pragma Inline (Get_Soft_Label_Key_Attributes);
+ -- ANCHOR(`slk_color()',`Set_Soft_Label_Key_Color')
+ procedure Set_Soft_Label_Key_Color (Pair : in Color_Pair);
+ -- AKA
+ pragma Inline (Set_Soft_Label_Key_Color);
+
-- MANPAGE(`keyok.3x')
-- ANCHOR(`keyok()',`Enable_Key')
-- We don't inline this procedure
private
- type Window is new System.Address;
- Null_Window : constant Window := Window (System.Null_Address);
+ type Window is new System.Storage_Elements.Integer_Address;
+ Null_Window : constant Window := 0;
+
+ -- The next constants are generated and may be different on your
+ -- architecture.
+ --
+include(`Window_Offsets')dnl
+ Curses_Bool_False : constant Curses_Bool := 0;
end Terminal_Interface.Curses;
--- /dev/null
+<HEAD><TITLE></TITLE></HEAD>
+<BODY>
+<H2 ALIGN=CENTER>Files</H2>
+<A HREF=files/T.htm>[T]</A>
+</BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>T</TITLE></HEAD>
+<BODY>
+<H2>Files - T</H2>
+<A HREF=../files.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-alpha__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-alpha.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-alphanumeric__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-alphanumeric.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-enumeration-ada.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-enumeration.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-intfield__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-intfield.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-ipv4_address__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-ipv4_address.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-numeric__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-numeric.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-regexp__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-regexp.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-user-choice__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-user-choice.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm TARGET=main>terminal_interface-curses-forms-field_types-user.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_types__ads.htm TARGET=main>terminal_interface-curses-forms-field_types.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-field_user_data__ads.htm TARGET=main>terminal_interface-curses-forms-field_user_data.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms-form_user_data__ads.htm TARGET=main>terminal_interface-curses-forms-form_user_data.ads</A>
+<LI><A HREF=../terminal_interface-curses-forms__ads.htm TARGET=main>terminal_interface-curses-forms.ads</A>
+<LI><A HREF=../terminal_interface-curses-menus-item_user_data__ads.htm TARGET=main>terminal_interface-curses-menus-item_user_data.ads</A>
+<LI><A HREF=../terminal_interface-curses-menus-menu_user_data__ads.htm TARGET=main>terminal_interface-curses-menus-menu_user_data.ads</A>
+<LI><A HREF=../terminal_interface-curses-menus__ads.htm TARGET=main>terminal_interface-curses-menus.ads</A>
+<LI><A HREF=../terminal_interface-curses-mouse__ads.htm TARGET=main>terminal_interface-curses-mouse.ads</A>
+<LI><A HREF=../terminal_interface-curses-panels-user_data__ads.htm TARGET=main>terminal_interface-curses-panels-user_data.ads</A>
+<LI><A HREF=../terminal_interface-curses-panels__ads.htm TARGET=main>terminal_interface-curses-panels.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io-complex_io__ads.htm TARGET=main>terminal_interface-curses-text_io-complex_io.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io-decimal_io__ads.htm TARGET=main>terminal_interface-curses-text_io-decimal_io.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io-enumeration_io__ads.htm TARGET=main>terminal_interface-curses-text_io-enumeration_io.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io-fixed_io__ads.htm TARGET=main>terminal_interface-curses-text_io-fixed_io.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io-float_io__ads.htm TARGET=main>terminal_interface-curses-text_io-float_io.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io-integer_io__ads.htm TARGET=main>terminal_interface-curses-text_io-integer_io.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io-modular_io__ads.htm TARGET=main>terminal_interface-curses-text_io-modular_io.ads</A>
+<LI><A HREF=../terminal_interface-curses-text_io__ads.htm TARGET=main>terminal_interface-curses-text_io.ads</A>
+<LI><A HREF=../terminal_interface-curses__ads.htm TARGET=main>terminal_interface-curses.ads</A>
+<LI><A HREF=../terminal_interface__ads.htm TARGET=main>terminal_interface.ads</A>
+</UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE></TITLE></HEAD>
+<BODY>
+<H2 ALIGN=CENTER>Functions/Procedures</H2>
+<A HREF=funcs/A.htm>[A]</A>
+<A HREF=funcs/C.htm>[C]</A>
+<A HREF=funcs/E.htm>[E]</A>
+<A HREF=funcs/F.htm>[F]</A>
+<A HREF=funcs/G.htm>[G]</A>
+<A HREF=funcs/I.htm>[I]</A>
+<A HREF=funcs/L.htm>[L]</A>
+<A HREF=funcs/M.htm>[M]</A>
+<A HREF=funcs/N.htm>[N]</A>
+<A HREF=funcs/P.htm>[P]</A>
+<A HREF=funcs/R.htm>[R]</A>
+<A HREF=funcs/S.htm>[S]</A>
+<A HREF=funcs/T.htm>[T]</A>
+<A HREF=funcs/U.htm>[U]</A>
+<A HREF=funcs/V.htm>[V]</A>
+</BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>A</TITLE></HEAD>
+<BODY>
+<H2>Functions - A</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-alpha__ads.htm#41_53 TARGET=main>Alpha</A><LI><A HREF=../terminal_interface-curses-forms-field_types-alphanumeric__ads.htm#41_53 TARGET=main>AlphaNumeric</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>C</TITLE></HEAD>
+<BODY>
+<H2>Functions - C</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm#63_13 TARGET=main>Character_Check</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user-choice__ads.htm#43_58 TARGET=main>Choice</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#98_13 TARGET=main>Col - terminal_interface-curses-text_io.ads:98</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#99_13 TARGET=main>Col - terminal_interface-curses-text_io.ads:99</A><LI><A HREF=../terminal_interface-curses-text_io-complex_io__ads.htm#44_17 TARGET=main>Complex_Types</A><LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm#48_13 TARGET=main>Create - terminal_interface-curses-forms-field_types-enumeration-ada.ads:48</A><LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration__ads.htm#64_13 TARGET=main>Create - terminal_interface-curses-forms-field_types-enumeration.ads:64</A><LI><A HREF=../terminal_interface-curses-forms-field_types__ads.htm#149_13 TARGET=main>C_Builtin_Router</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user-choice__ads.htm#80_13 TARGET=main>C_Generic_Choice</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm#81_13 TARGET=main>C_Generic_Type</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>E</TITLE></HEAD>
+<BODY>
+<H2>Functions - E</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration__ads.htm#43_53 TARGET=main>Enumeration</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>F</TITLE></HEAD>
+<BODY>
+<H2>Functions - F</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm#56_13 TARGET=main>Field_Check</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#65_14 TARGET=main>Flush - terminal_interface-curses-text_io.ads:65</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#66_14 TARGET=main>Flush - terminal_interface-curses-text_io.ads:66</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>G</TITLE></HEAD>
+<BODY>
+<H2>Functions - G</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm#90_13 TARGET=main>Generic_Char_Check</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm#83_13 TARGET=main>Generic_Field_Check</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user-choice__ads.htm#82_13 TARGET=main>Generic_Next</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user-choice__ads.htm#89_13 TARGET=main>Generic_Prev</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#62_13 TARGET=main>Get_Window</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>I</TITLE></HEAD>
+<BODY>
+<H2>Functions - I</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-intfield__ads.htm#41_53 TARGET=main>IntField</A><LI><A HREF=../terminal_interface-curses-forms-field_types-ipv4_address__ads.htm#41_53 TARGET=main>IPV4_Address</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>L</TITLE></HEAD>
+<BODY>
+<H2>Functions - L</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-text_io__ads.htm#101_13 TARGET=main>Line - terminal_interface-curses-text_io.ads:101</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#102_13 TARGET=main>Line - terminal_interface-curses-text_io.ads:102</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#77_13 TARGET=main>Line_Length - terminal_interface-curses-text_io.ads:77</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#78_13 TARGET=main>Line_Length - terminal_interface-curses-text_io.ads:78</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>M</TITLE></HEAD>
+<BODY>
+<H2>Functions - M</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration__ads.htm#73_13 TARGET=main>Make_Enumeration_Type</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>N</TITLE></HEAD>
+<BODY>
+<H2>Functions - N</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-text_io__ads.htm#86_14 TARGET=main>New_Line - terminal_interface-curses-text_io.ads:86</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#87_14 TARGET=main>New_Line - terminal_interface-curses-text_io.ads:87</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#89_14 TARGET=main>New_Page - terminal_interface-curses-text_io.ads:89</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#90_14 TARGET=main>New_Page - terminal_interface-curses-text_io.ads:90</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user-choice__ads.htm#60_13 TARGET=main>Next</A><LI><A HREF=../terminal_interface-curses-forms-field_types-numeric__ads.htm#41_53 TARGET=main>Numeric</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>P</TITLE></HEAD>
+<BODY>
+<H2>Functions - P</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-text_io__ads.htm#80_13 TARGET=main>Page_Length - terminal_interface-curses-text_io.ads:80</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#81_13 TARGET=main>Page_Length - terminal_interface-curses-text_io.ads:81</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user-choice__ads.htm#67_13 TARGET=main>Previous</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#108_14 TARGET=main>Put - terminal_interface-curses-text_io.ads:108</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#109_14 TARGET=main>Put - terminal_interface-curses-text_io.ads:109</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#115_14 TARGET=main>Put - terminal_interface-curses-text_io.ads:115</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#116_14 TARGET=main>Put - terminal_interface-curses-text_io.ads:116</A><LI><A HREF=../terminal_interface-curses-text_io-complex_io__ads.htm#54_14 TARGET=main>Put - terminal_interface-curses-text_io-complex_io.ads:54</A><LI><A HREF=../terminal_interface-curses-text_io-complex_io__ads.htm#61_14 TARGET=main>Put - terminal_interface-curses-text_io-complex_io.ads:61</A><LI><A HREF=../terminal_interface-curses-text_io-decimal_io__ads.htm#50_14 TARGET=main>Put - terminal_interface-curses-text_io-decimal_io.ads:50</A><LI><A HREF=../terminal_interface-curses-text_io-decimal_io__ads.htm#57_14 TARGET=main>Put - terminal_interface-curses-text_io-decimal_io.ads:57</A><LI><A HREF=../terminal_interface-curses-text_io-enumeration_io__ads.htm#49_14 TARGET=main>Put - terminal_interface-curses-text_io-enumeration_io.ads:49</A><LI><A HREF=../terminal_interface-curses-text_io-enumeration_io__ads.htm#55_14 TARGET=main>Put - terminal_interface-curses-text_io-enumeration_io.ads:55</A><LI><A HREF=../terminal_interface-curses-text_io-fixed_io__ads.htm#50_14 TARGET=main>Put - terminal_interface-curses-text_io-fixed_io.ads:50</A><LI><A HREF=../terminal_interface-curses-text_io-fixed_io__ads.htm#57_14 TARGET=main>Put - terminal_interface-curses-text_io-fixed_io.ads:57</A><LI><A HREF=../terminal_interface-curses-text_io-float_io__ads.htm#50_14 TARGET=main>Put - terminal_interface-curses-text_io-float_io.ads:50</A><LI><A HREF=../terminal_interface-curses-text_io-float_io__ads.htm#57_14 TARGET=main>Put - terminal_interface-curses-text_io-float_io.ads:57</A><LI><A HREF=../terminal_interface-curses-text_io-integer_io__ads.htm#49_14 TARGET=main>Put - terminal_interface-curses-text_io-integer_io.ads:49</A><LI><A HREF=../terminal_interface-curses-text_io-integer_io__ads.htm#55_14 TARGET=main>Put - terminal_interface-curses-text_io-integer_io.ads:55</A><LI><A HREF=../terminal_interface-curses-text_io-modular_io__ads.htm#49_14 TARGET=main>Put - terminal_interface-curses-text_io-modular_io.ads:49</A><LI><A HREF=../terminal_interface-curses-text_io-modular_io__ads.htm#55_14 TARGET=main>Put - terminal_interface-curses-text_io-modular_io.ads:55</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#118_14 TARGET=main>Put_Line - terminal_interface-curses-text_io.ads:118</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#122_14 TARGET=main>Put_Line - terminal_interface-curses-text_io.ads:122</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>R</TITLE></HEAD>
+<BODY>
+<H2>Functions - R</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-regexp__ads.htm#41_53 TARGET=main>RegExp</A><LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration__ads.htm#77_14 TARGET=main>Release</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>S</TITLE></HEAD>
+<BODY>
+<H2>Functions - S</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-text_io__ads.htm#92_14 TARGET=main>Set_Col - terminal_interface-curses-text_io.ads:92</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#93_14 TARGET=main>Set_Col - terminal_interface-curses-text_io.ads:93</A><LI><A HREF=../terminal_interface-curses-forms-field_types-alpha__ads.htm#49_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-alpha.ads:49</A><LI><A HREF=../terminal_interface-curses-forms-field_types-alphanumeric__ads.htm#50_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-alphanumeric.ads:50</A><LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration__ads.htm#84_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-enumeration.ads:84</A><LI><A HREF=../terminal_interface-curses-forms-field_types-intfield__ads.htm#51_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-intfield.ads:51</A><LI><A HREF=../terminal_interface-curses-forms-field_types-ipv4_address__ads.htm#47_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-ipv4_address.ads:47</A><LI><A HREF=../terminal_interface-curses-forms-field_types-numeric__ads.htm#51_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-numeric.ads:51</A><LI><A HREF=../terminal_interface-curses-forms-field_types-regexp__ads.htm#51_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-regexp.ads:51</A><LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm#70_14 TARGET=main>Set_Field_Type - terminal_interface-curses-forms-field_types-user.ads:70</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#95_14 TARGET=main>Set_Line - terminal_interface-curses-text_io.ads:95</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#96_14 TARGET=main>Set_Line - terminal_interface-curses-text_io.ads:96</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#59_14 TARGET=main>Set_Window</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>T</TITLE></HEAD>
+<BODY>
+<H2>Functions - T</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface__ads.htm#41_9 TARGET=main>Terminal_Interface</A><LI><A HREF=../terminal_interface-curses-text_io__ads.htm#44_35 TARGET=main>Text_IO</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>U</TITLE></HEAD>
+<BODY>
+<H2>Functions - U</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-user__ads.htm#43_53 TARGET=main>User</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML><HEAD><TITLE>V</TITLE></HEAD>
+<BODY>
+<H2>Functions - V</H2>
+<A HREF=../funcs.htm TARGET=_self>[index]</A>
+<UL COMPACT TYPE=DISC>
+<LI><A HREF=../terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm#53_13 TARGET=main>Value</A></UL></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HTML>
+<HEAD><TITLE>Source Browser</TITLE></HEAD>
+<FRAMESET COLS='250,*'>
+<NOFRAME>
+<H2 ALIGN=CENTER>Files</H2>
+<A HREF=files/T.htm>[T]</A>
+</UL>
+<HR>
+<H2 ALIGN=CENTER>Functions/Procedures</H2>
+<A HREF=funcs/A.htm>[A]</A>
+<A HREF=funcs/C.htm>[C]</A>
+<A HREF=funcs/E.htm>[E]</A>
+<A HREF=funcs/F.htm>[F]</A>
+<A HREF=funcs/G.htm>[G]</A>
+<A HREF=funcs/I.htm>[I]</A>
+<A HREF=funcs/L.htm>[L]</A>
+<A HREF=funcs/M.htm>[M]</A>
+<A HREF=funcs/N.htm>[N]</A>
+<A HREF=funcs/P.htm>[P]</A>
+<A HREF=funcs/R.htm>[R]</A>
+<A HREF=funcs/S.htm>[S]</A>
+<A HREF=funcs/T.htm>[T]</A>
+<A HREF=funcs/U.htm>[U]</A>
+<A HREF=funcs/V.htm>[V]</A>
+</UL>
+</NOFRAME>
+<FRAMESET ROWS='50%,50%'>
+<FRAME NAME=files SRC=files.htm>
+<FRAME NAME=funcs SRC=funcs.htm>
+</FRAMESET>
+<FRAME NAME=main SRC=main.htm>
+</FRAMESET>
+</HTML>
--- /dev/null
+<HEAD><TITLE></TITLE></HEAD>
+<BODY>
+<P ALIGN=right><A HREF=main.htm TARGET=_top>[No frame version is here]</A><P><H2 ALIGN=CENTER>Files</H2>
+<A HREF=files/T.htm>[T]</A>
+</UL>
+<HR><H2 ALIGN=CENTER>Functions/Procedures</H2>
+<A HREF=funcs/A.htm>[A]</A>
+<A HREF=funcs/C.htm>[C]</A>
+<A HREF=funcs/E.htm>[E]</A>
+<A HREF=funcs/F.htm>[F]</A>
+<A HREF=funcs/G.htm>[G]</A>
+<A HREF=funcs/I.htm>[I]</A>
+<A HREF=funcs/L.htm>[L]</A>
+<A HREF=funcs/M.htm>[M]</A>
+<A HREF=funcs/N.htm>[N]</A>
+<A HREF=funcs/P.htm>[P]</A>
+<A HREF=funcs/R.htm>[R]</A>
+<A HREF=funcs/S.htm>[S]</A>
+<A HREF=funcs/T.htm>[T]</A>
+<A HREF=funcs/U.htm>[U]</A>
+<A HREF=funcs/V.htm>[V]</A>
+</UL>
+</BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-alpha.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-alpha.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.Alpha --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-alpha__adb.htm#44_58">Alpha</A><FONT COLOR=red><A NAME="41_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-alpha__ads.htm#41_53">Alpha</A>);
+
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">Alpha_Field</A></FONT> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A>
+ <b>with</b> <b>record</b>
+ Minimum_Field_Width : Natural := 0;
+ <b>end</b> <b>record</b>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-alpha__adb.htm#48_14">Set_Field_Type</A><FONT COLOR=red><A NAME="49_14"></A></FONT> (<FONT COLOR=red><A NAME="49_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-alpha__ads.htm#44_9">Alpha_Field</A>);
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-forms-field_types-alpha__ads.htm#49_14">Set_Field_Type</A>);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.Alpha;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-alphanumeric.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-alphanumeric.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-alphanumeric__adb.htm#44_58">AlphaNumeric</A><FONT COLOR=red><A NAME="41_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate
+ (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-alphanumeric__ads.htm#41_53">AlphaNumeric</A>);
+
+ <b>type</b> <FONT COLOR=red><A NAME="45_9">AlphaNumeric_Field</A></FONT> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A>
+ <b>with</b> <b>record</b>
+ Minimum_Field_Width : Natural := 0;
+ <b>end</b> <b>record</b>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-alphanumeric__adb.htm#48_14">Set_Field_Type</A><FONT COLOR=red><A NAME="50_14"></A></FONT> (<FONT COLOR=red><A NAME="50_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-alphanumeric__ads.htm#45_9">AlphaNumeric_Field</A>);
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-forms-field_types-alphanumeric__ads.htm#50_14">Set_Field_Type</A>);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-enumeration-ada.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-enumeration-ada.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.8 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="42_9">T</A></FONT> <b>is</b> (<>);
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#43_53">Enumeration</A>.<FONT COLOR=red><A NAME="44_65">Ada</A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate
+ (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#43_53">Enumeration</A>.<A HREF="terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm#44_65">Ada</A>);
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration-ada__adb.htm#45_13">Create</A><FONT COLOR=red><A NAME="48_13"></A></FONT> (Set : <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#50_9">Type_Set</A> := <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#50_46">Mixed_Case</A>;
+ Case_Sensitive : Boolean := False;
+ Must_Be_Unique : Boolean := False)
+ <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#62_9">Enumeration_Field</A>;
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration-ada__adb.htm#73_13">Value</A><FONT COLOR=red><A NAME="53_13"></A></FONT> (<FONT COLOR=red><A NAME="53_20">Fld</A></FONT> : <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Buf : <A HREF="terminal_interface-curses-forms__ads.htm#132_9">Buffer_Number</A> := <A HREF="terminal_interface-curses-forms__ads.htm#132_9">Buffer_Number</A>'First) <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm#42_9">T</A>;
+ <FONT COLOR=green><EM>-- Translate the content of the fields buffer - indicated by the</EM></FONT>
+ <FONT COLOR=green><EM>-- buffer number - into an enumeration value. If the buffer is empty</EM></FONT>
+ <FONT COLOR=green><EM>-- or the content is invalid, a Constraint_Error is raises.</EM></FONT>
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-enumeration.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-enumeration.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.Enumeration --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>with</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-cstrin__ads.htm#20_22">Strings</A>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-enumeration__adb.htm#46_58">Enumeration</A><FONT COLOR=red><A NAME="43_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate
+ (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#43_53">Enumeration</A>);
+
+ <b>type</b> <FONT COLOR=red><A NAME="47_9">String_Access</A></FONT> <b>is</b> <b>access</b> String;
+
+ <FONT COLOR=green><EM>-- Type_Set is used by the child package Ada</EM></FONT>
+ <b>type</b> <FONT COLOR=red><A NAME="50_9">Type_Set</A></FONT> <b>is</b> (Lower_Case, Upper_Case, Mixed_Case);
+
+ <b>type</b> <FONT COLOR=red><A NAME="52_9">Enum_Array</A></FONT> <b>is</b> <b>array</b> (Positive <b>range</b> <>)
+ <b>of</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#47_9">String_Access</A>;
+
+ <b>type</b> <FONT COLOR=red><A NAME="55_9">Enumeration_Info</A></FONT> (C : Positive) <b>is</b>
+ <b>record</b>
+ Names : <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#52_9">Enum_Array</A> (1 .. C);
+ Case_Sensitive : Boolean := False;
+ Match_Must_Be_Unique : Boolean := False;
+ <b>end</b> <b>record</b>;
+
+ <b>type</b> <FONT COLOR=red><A NAME="62_9">Enumeration_Field</A></FONT> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A> <b>with</b> <b>private</b>;
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__adb.htm#48_13">Create</A><FONT COLOR=red><A NAME="64_13"></A></FONT> (Info : <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#55_9">Enumeration_Info</A>;
+ Auto_Release_Names : Boolean := False)
+ <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#62_9">Enumeration_Field</A>;
+ <FONT COLOR=green><EM>-- Make an fieldtype from the info. Enumerations are special, because</EM></FONT>
+ <FONT COLOR=green><EM>-- they normally don't copy the enum values into a private store, so</EM></FONT>
+ <FONT COLOR=green><EM>-- we have to care for the lifetime of the info we provide.</EM></FONT>
+ <FONT COLOR=green><EM>-- The Auto_Release_Names flag may be used to automatically releases</EM></FONT>
+ <FONT COLOR=green><EM>-- the strings in the Names array of the Enumeration_Info.</EM></FONT>
+
+ <b>function</b> <FONT COLOR=red><A NAME="73_13">Make_Enumeration_Type</A></FONT> (Info : <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#55_9">Enumeration_Info</A>;
+ Auto_Release_Names : Boolean := False)
+ <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#62_9">Enumeration_Field</A> <b>renames</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#64_13">Create</A>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__adb.htm#76_14">Release</A><FONT COLOR=red><A NAME="77_14"></A></FONT> (Enum : <b>in</b> <b>out</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#62_9">Enumeration_Field</A>);
+ <FONT COLOR=green><EM>-- But we may want to release the field to release the memory allocated</EM></FONT>
+ <FONT COLOR=green><EM>-- by it internally. After that the Enumeration field is no longer usable.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- The next type defintions are all ncurses extensions. They are typically</EM></FONT>
+ <FONT COLOR=green><EM>-- not available in other curses implementations.</EM></FONT>
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__adb.htm#91_14">Set_Field_Type</A><FONT COLOR=red><A NAME="84_14"></A></FONT> (<FONT COLOR=red><A NAME="84_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#62_9">Enumeration_Field</A>);
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#84_14">Set_Field_Type</A>);
+
+<b>private</b>
+ <b>type</b> <FONT COLOR=red><A NAME="89_9">CPA_Access</A></FONT> <b>is</b> <b>access</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-cstrin__ads.htm#20_22">Strings</A>.<A HREF="i-cstrin__ads.htm#27_9">chars_ptr_array</A>;
+
+ <b>type</b> <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#62_9">Enumeration_Field</A> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A> <b>with</b>
+ <b>record</b>
+ Case_Sensitive : Boolean := False;
+ Match_Must_Be_Unique : Boolean := False;
+ Arr : <A HREF="terminal_interface-curses-forms-field_types-enumeration__ads.htm#89_9">CPA_Access</A> := <b>null</b>;
+ <b>end</b> <b>record</b>;
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.Enumeration;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-intfield.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-intfield.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.IntField --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-intfield__adb.htm#44_58">IntField</A><FONT COLOR=red><A NAME="41_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-intfield__ads.htm#41_53">IntField</A>);
+
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">Integer_Field</A></FONT> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A> <b>with</b>
+ <b>record</b>
+ Precision : Natural;
+ Lower_Limit : Integer;
+ Upper_Limit : Integer;
+ <b>end</b> <b>record</b>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-intfield__adb.htm#48_14">Set_Field_Type</A><FONT COLOR=red><A NAME="51_14"></A></FONT> (<FONT COLOR=red><A NAME="51_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-intfield__ads.htm#44_9">Integer_Field</A>);
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-forms-field_types-intfield__ads.htm#51_14">Set_Field_Type</A>);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.IntField;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-ipv4_address.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-ipv4_address.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-ipv4_address__adb.htm#44_58">IPV4_Address</A><FONT COLOR=red><A NAME="41_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate
+ (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-ipv4_address__ads.htm#41_53">IPV4_Address</A>);
+
+ <b>type</b> <FONT COLOR=red><A NAME="45_9">Internet_V4_Address_Field</A></FONT> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A> <b>with</b> <b>null</b> <b>record</b>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-ipv4_address__adb.htm#48_14">Set_Field_Type</A><FONT COLOR=red><A NAME="47_14"></A></FONT> (<FONT COLOR=red><A NAME="47_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-ipv4_address__ads.htm#45_9">Internet_V4_Address_Field</A>);
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-forms-field_types-ipv4_address__ads.htm#47_14">Set_Field_Type</A>);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-numeric.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-numeric.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.Numeric --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-numeric__adb.htm#44_58">Numeric</A><FONT COLOR=red><A NAME="41_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-numeric__ads.htm#41_53">Numeric</A>);
+
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">Numeric_Field</A></FONT> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A> <b>with</b>
+ <b>record</b>
+ Precision : Natural;
+ Lower_Limit : Float;
+ Upper_Limit : Float;
+ <b>end</b> <b>record</b>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-numeric__adb.htm#48_14">Set_Field_Type</A><FONT COLOR=red><A NAME="51_14"></A></FONT> (<FONT COLOR=red><A NAME="51_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-numeric__ads.htm#44_9">Numeric_Field</A>);
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-forms-field_types-numeric__ads.htm#51_14">Set_Field_Type</A>);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.Numeric;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-regexp.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-regexp.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.RegExp --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-regexp__adb.htm#44_58">RegExp</A><FONT COLOR=red><A NAME="41_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-regexp__ads.htm#41_53">RegExp</A>);
+
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">String_Access</A></FONT> <b>is</b> <b>access</b> String;
+
+ <b>type</b> <FONT COLOR=red><A NAME="46_9">Regular_Expression_Field</A></FONT> <b>is</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A> <b>with</b>
+ <b>record</b>
+ Regular_Expression : <A HREF="terminal_interface-curses-forms-field_types-regexp__ads.htm#44_9">String_Access</A>;
+ <b>end</b> <b>record</b>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-regexp__adb.htm#46_14">Set_Field_Type</A><FONT COLOR=red><A NAME="51_14"></A></FONT> (<FONT COLOR=red><A NAME="51_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-regexp__ads.htm#46_9">Regular_Expression_Field</A>);
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-forms-field_types-regexp__ads.htm#51_14">Set_Field_Type</A>);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.RegExp;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-user-choice.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-user-choice.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.User.Choice --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>with</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#43_53">User</A>.<A HREF="terminal_interface-curses-forms-field_types-user-choice__adb.htm#45_63">Choice</A><FONT COLOR=red><A NAME="43_58"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate
+ (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#43_53">User</A>.<A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#43_58">Choice</A>);
+
+ <b>use</b> <b>type</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-c__ads.htm#35_9">int</A>;
+ <b>subtype</b> <FONT COLOR=red><A NAME="48_12">C_Int</A></FONT> <b>is</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-c__ads.htm#35_9">int</A>;
+
+ <b>type</b> <FONT COLOR=red><A NAME="50_9">User_Defined_Field_Type_With_Choice</A></FONT> <b>is</b> <b>abstract</b> <b>new</b>
+ <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#48_9">User_Defined_Field_Type</A> <b>with</b> <b>null</b> <b>record</b>;
+ <FONT COLOR=green><EM>-- This is the root of the mechanism we use to create field types in</EM></FONT>
+ <FONT COLOR=green><EM>-- Ada95 that allow the prev/next mechanism. You should your own type</EM></FONT>
+ <FONT COLOR=green><EM>-- derive from this one and implement the Field_Check, Character_Check</EM></FONT>
+ <FONT COLOR=green><EM>-- Next and Previous functions for your own type.</EM></FONT>
+
+ <b>type</b> User_Defined_Field_Type_With_Choice_Access <b>is</b> <b>access</b> <b>all</b>
+ <A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#50_9">User_Defined_Field_Type_With_Choice</A>'Class;
+
+ <b>function</b> <FONT COLOR=red><A NAME="60_13">Next</A></FONT>
+ (<FONT COLOR=red><A NAME="61_7">Fld</A></FONT> : <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#50_9">User_Defined_Field_Type_With_Choice</A>) <b>return</b> Boolean
+ <b>is</b> <b>abstract</b>;
+ <FONT COLOR=green><EM>-- If True is returned, the function successfully generated a next</EM></FONT>
+ <FONT COLOR=green><EM>-- value into the fields buffer.</EM></FONT>
+
+ <b>function</b> <FONT COLOR=red><A NAME="67_13">Previous</A></FONT>
+ (<FONT COLOR=red><A NAME="68_7">Fld</A></FONT> : <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#50_9">User_Defined_Field_Type_With_Choice</A>) <b>return</b> Boolean
+ <b>is</b> <b>abstract</b>;
+ <FONT COLOR=green><EM>-- If True is returned, the function successfully generated a previous</EM></FONT>
+ <FONT COLOR=green><EM>-- value into the fields buffer.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- +----------------------------------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- | Private Part.</EM></FONT>
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+<b>private</b>
+ <b>use</b> <b>type</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-c__ads.htm#35_9">int</A>;
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-user-choice__adb.htm#78_13">C_Generic_Choice</A><FONT COLOR=red><A NAME="80_13"></A></FONT> <b>return</b> C_Field_Type;
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-user-choice__adb.htm#52_13">Generic_Next</A><FONT COLOR=red><A NAME="82_13"></A></FONT> (<FONT COLOR=red><A NAME="82_27">Fld</A></FONT> : <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ <FONT COLOR=red><A NAME="83_27">Usr</A></FONT> : <A HREF="system__ads.htm#23_9">System</A>.<A HREF="system__ads.htm#49_9">Address</A>) <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#48_12">C_Int</A>;
+ <b>pragma</b> Convention (C, <A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#82_13">Generic_Next</A>);
+ <FONT COLOR=green><EM>-- This is the generic next Choice_Function for the low-level fieldtype</EM></FONT>
+ <FONT COLOR=green><EM>-- representing all the User_Defined_Field_Type derivates. It routes</EM></FONT>
+ <FONT COLOR=green><EM>-- the call to the Next implementation for the type.</EM></FONT>
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-user-choice__adb.htm#64_13">Generic_Prev</A><FONT COLOR=red><A NAME="89_13"></A></FONT> (<FONT COLOR=red><A NAME="89_27">Fld</A></FONT> : <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ <FONT COLOR=red><A NAME="90_27">Usr</A></FONT> : <A HREF="system__ads.htm#23_9">System</A>.<A HREF="system__ads.htm#49_9">Address</A>) <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#48_12">C_Int</A>;
+ <b>pragma</b> Convention (C, <A HREF="terminal_interface-curses-forms-field_types-user-choice__ads.htm#89_13">Generic_Prev</A>);
+ <FONT COLOR=green><EM>-- This is the generic prev Choice_Function for the low-level fieldtype</EM></FONT>
+ <FONT COLOR=green><EM>-- representing all the User_Defined_Field_Type derivates. It routes</EM></FONT>
+ <FONT COLOR=green><EM>-- the call to the Previous implementation for the type.</EM></FONT>
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.User.Choice;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types-user.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types-user.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types.User --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>with</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-user__adb.htm#45_58">User</A><FONT COLOR=red><A NAME="43_53"></A></FONT> <b>is</b>
+ <b>pragma</b> Preelaborate (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-forms__ads.htm#49_35">Forms</A>.<A HREF="terminal_interface-curses-forms-field_types__ads.htm#43_41">Field_Types</A>.<A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#43_53">User</A>);
+ <b>use</b> <b>type</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-c__ads.htm#35_9">int</A>;
+ <b>subtype</b> <FONT COLOR=red><A NAME="46_12">C_Int</A></FONT> <b>is</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-c__ads.htm#35_9">int</A>;
+
+ <b>type</b> <FONT COLOR=red><A NAME="48_9">User_Defined_Field_Type</A></FONT> <b>is</b> <b>abstract</b> <b>new</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field_Type</A> <b>with</b> <b>null</b> <b>record</b>;
+ <FONT COLOR=green><EM>-- This is the root of the mechanism we use to create field types in</EM></FONT>
+ <FONT COLOR=green><EM>-- Ada95. You should your own type derive from this one and implement</EM></FONT>
+ <FONT COLOR=green><EM>-- the Field_Check and Character_Check functions for your own type.</EM></FONT>
+
+ <b>type</b> User_Defined_Field_Type_Access <b>is</b> <b>access</b> <b>all</b>
+ <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#48_9">User_Defined_Field_Type</A>'Class;
+
+ <b>function</b> <FONT COLOR=red><A NAME="56_13">Field_Check</A></FONT>
+ (<FONT COLOR=red><A NAME="57_7">Fld</A></FONT> : <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#48_9">User_Defined_Field_Type</A>) <b>return</b> Boolean
+ <b>is</b> <b>abstract</b>;
+ <FONT COLOR=green><EM>-- If True is returned, the field is considered valid, otherwise it is</EM></FONT>
+ <FONT COLOR=green><EM>-- invalid.</EM></FONT>
+
+ <b>function</b> <FONT COLOR=red><A NAME="63_13">Character_Check</A></FONT>
+ (Ch : Character;
+ Typ : <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#48_9">User_Defined_Field_Type</A>) <b>return</b> Boolean
+ <b>is</b> <b>abstract</b>;
+ <FONT COLOR=green><EM>-- If True is returned, the character is considered as valid for the</EM></FONT>
+ <FONT COLOR=green><EM>-- field, otherwise as invalid.</EM></FONT>
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-forms-field_types-user__adb.htm#49_14">Set_Field_Type</A><FONT COLOR=red><A NAME="70_14"></A></FONT> (<FONT COLOR=red><A NAME="70_30">Fld</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ Typ : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#48_9">User_Defined_Field_Type</A>);
+ <FONT COLOR=green><EM>-- This should work for all types derived from User_Defined_Field_Type.</EM></FONT>
+ <FONT COLOR=green><EM>-- No need to reimplement it for your derived type.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- +----------------------------------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- | Private Part.</EM></FONT>
+ <FONT COLOR=green><EM>-- | Used by the Choice child package.</EM></FONT>
+<b>private</b>
+ <b>use</b> <b>type</b> <A HREF="interfac__ads.htm#23_9">Interfaces</A>.<A HREF="i-c__ads.htm#20_20">C</A>.<A HREF="i-c__ads.htm#35_9">int</A>;
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-user__adb.htm#107_13">C_Generic_Type</A><FONT COLOR=red><A NAME="81_13"></A></FONT> <b>return</b> C_Field_Type;
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-user__adb.htm#83_13">Generic_Field_Check</A><FONT COLOR=red><A NAME="83_13"></A></FONT> (<FONT COLOR=red><A NAME="83_34">Fld</A></FONT> : <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Field</A>;
+ <FONT COLOR=red><A NAME="84_34">Usr</A></FONT> : <A HREF="system__ads.htm#23_9">System</A>.<A HREF="system__ads.htm#49_9">Address</A>) <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#46_12">C_Int</A>;
+ <b>pragma</b> Convention (C, <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#83_13">Generic_Field_Check</A>);
+ <FONT COLOR=green><EM>-- This is the generic Field_Check_Function for the low-level fieldtype</EM></FONT>
+ <FONT COLOR=green><EM>-- representing all the User_Defined_Field_Type derivates. It routes</EM></FONT>
+ <FONT COLOR=green><EM>-- the call to the Field_Check implementation for the type.</EM></FONT>
+
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types-user__adb.htm#94_13">Generic_Char_Check</A><FONT COLOR=red><A NAME="90_13"></A></FONT> (Ch : <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#46_12">C_Int</A>;
+ <FONT COLOR=red><A NAME="91_33">Usr</A></FONT> : <A HREF="system__ads.htm#23_9">System</A>.<A HREF="system__ads.htm#49_9">Address</A>) <b>return</b> <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#46_12">C_Int</A>;
+ <b>pragma</b> Convention (C, <A HREF="terminal_interface-curses-forms-field_types-user__ads.htm#90_13">Generic_Char_Check</A>);
+ <FONT COLOR=green><EM>-- This is the generic Char_Check_Function for the low-level fieldtype</EM></FONT>
+ <FONT COLOR=green><EM>-- representing all the User_Defined_Field_Type derivates. It routes</EM></FONT>
+ <FONT COLOR=green><EM>-- the call to the Character_Check implementation for the type.</EM></FONT>
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types.User;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_types.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_types.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_Types --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.11 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>with</b> Interfaces.C;
+
+<b>package</b> Terminal_Interface.Curses.Forms.Field_Types <b>is</b>
+ <b>pragma</b> Preelaborate <A HREF="i-c__ads.htm>0_20">(</A>Terminal_Interface.Curses.Forms.Field_Types);
+ <b>use</b> <b>type</b><FONT COLOR=red><A NAME="46_12"> </A></FONT>Interfaces.C.int;
+ <b>subtype</b> C_Int <b>is</b> Interfaces.C.int;
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_fieldtype.3x.html">form_fieldtype.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>type</b> Field_Type <b>is</b> <b>abstract</b> <b>tagged</b> <b>null</b> <b>record</b>;
+ <FONT COLOR=green><EM>-- Abstract base type for all field types. A concrete field type</EM></FONT>
+ <FONT COLOR=green><EM>-- is an extension that adds some data elements describing formats or</EM></FONT>
+ <FONT COLOR=green><EM>-- boundary values for the type and validation routines.</EM></FONT>
+ <FONT COLOR=green><EM>-- For the builtin low-level fieldtypes, the validation routines are</EM></FONT>
+ <FONT COLOR=green><EM>-- already defined by the low-level C library.</EM></FONT>
+ <FONT COLOR=green><EM>-- The builtin types like Alpha or AlphaNumeric etc. are defined in</EM></FONT>
+ <FONT COLOR=green><EM>-- child packages of this package. You may use one of them as example</EM></FONT>
+ <FONT COLOR=green><EM>-- how to create you own child packages for low-level field types that</EM></FONT>
+ <FONT COLOR=green><EM>-- you may have already written in C.</EM></FONT>
+
+ <b>type</b> Field_Type_Access <b>is</b> <b>access</b> <b>all</b> Field_Type'Class;
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>procedure</b> Set_Field_Type (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field</A>;
+ Fld_Type : <b>in</b> Field_Type) <b>is</b> <b>abstract</b>;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_fieldtype.3x.html">set_field_type()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- But: we hide the vararg mechanism of the C interface. You always</EM></FONT>
+ <FONT COLOR=green><EM>-- have to pass a single Field_Type parameter.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- ---------------------------------------------------------------------</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_validation.3x.html">form_field_validation.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>function</b> Get_Type (Fld : <b>in</b> Field) <b>return</b> Field_Type_Access;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_validation.3x.html">field_type()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: field_arg()</EM></FONT>
+ <FONT COLOR=green><EM>-- In Ada95 we can combine these. If you try to retrieve the field type</EM></FONT>
+ <FONT COLOR=green><EM>-- that is not defined as extension of the abstract tagged type above,</EM></FONT>
+ <FONT COLOR=green><EM>-- you will raise a Form_Exception.</EM></FONT>
+ <FONT COLOR=green><EM>-- This is not inlined</EM></FONT>
+
+ <FONT COLOR=green><EM>-- +----------------------------------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- | Private Part.</EM></FONT>
+ <FONT COLOR=green><EM>-- | Most of this is used by the implementations of the child packages.</EM></FONT>
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+<b>private</b>
+ <b>type</b> Makearg_Function <b>is</b> <b>access</b>
+ <b>function</b> (Args : System.Address) <b>return</b> System.Address;
+ <b>pragma</b> Convention (C, Makearg_Function);
+
+ <b>type</b> Copyarg_Function <b>is</b> <b>access</b>
+ <b>function</b> (Usr : System.Address) <b>return</b> System.Address;
+ <b>pragma</b> Convention (C, Copyarg_Function);
+
+ <b>type</b> Freearg_Function <b>is</b> <b>access</b>
+ <b>procedure</b> (Usr : System.Address);
+ <b>pragma</b> Convention (C, Freearg_Function);
+
+ <b>type</b> Field_Check_Function<FONT COLOR=red><A NAME="105_29"> </A></FONT><b>is</b> <b>access</b>
+ <b>function</b> (Fld : Field; Usr : System.Address) <b>return</b> C_Int;
+ <b>pragma</b> Convention (C, Field_Check_Function);
+
+ <b>type</b> Char_Check_Function<FONT COLOR=red><A NAME="109_28"> </A></FONT><b>is</b> <b>access</b>
+ <b>function</b> (Ch : C_Int<A HREF="terminal_interface-curses-forms-field_types__ads.htm<08_9">;</A> Usr : System.Address) <b>return</b> C_Int;
+ <b>pragma</b> Convention (C, Char_Check_Function);
+
+ <b>type</b> Choice_Function <b>is</b> <b>access</b>
+ <b>function</b> (Fld : Field; Usr : System.Address) <b>return</b> C_Int;
+ <b>pragma</b> Convention (C, Choice_Function);
+
+ <FONT COLOR=green><EM>-- +----------------------------------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- | This must be in sync with the FIELDTYPE structure in form.h</EM></FONT>
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+ <b>type</b> Low_Level_Field_Type <b>is</b>
+ <b>record</b>
+ Status : <A HREF="interfac__ads.htm>3_9">Interfaces</A>.<A HREF="i-c__ads.htm>0_20">C</A>.<A HREF="i-c__ads.htm#37_9">short</A>;
+ <FONT COLOR=red><A NAME="123_10">Ref_Count</A></FONT> : <A HREF="system__ads.htm>3_9">Interfaces</A>.C.long;
+ Left, Right : <A HREF="terminal_interface-curses-forms-field_types__ads.htm#92_9">System</A>.Address;
+ Makearg : <A HREF="terminal_interface-curses-forms-field_types__ads.htm#96_9">Makearg_Function</A>;
+ Copyarg : <A HREF="terminal_interface-curses-forms-field_types__ads.htm<00_9">Copyarg_Function</A>;
+ Freearg : <A HREF="terminal_interface-curses-forms-field_types__ads.htm<04_9">Freearg_Function</A>;
+ Fcheck : <A HREF="terminal_interface-curses-forms-field_types__ads.htm<08_9">Field_Check_Function</A>;
+ Ccheck : <A HREF="terminal_interface-curses-forms-field_types__ads.htm<12_9">Char_Check_Function</A>;
+ Next, Prev : Choice_Function;
+ <b>end</b> <b>record</b>;
+ <b>pragma</b> Convention (C, Low_Level_Field_Type);
+ <b>type</b> C_Field_Type <b>is</b> <b>access</b> <b>all</b> Low_Level_Field_Type;
+
+ Null_Field_Type : <b>constant</b> C_Field_Type := <b>null</b>;
+
+ <FONT COLOR=green><EM>-- +----------------------------------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- | This four low-level fieldtypes are the ones associated with</EM></FONT>
+ <FONT COLOR=green><EM>-- | fieldtypes handled by this binding. Any other low-level fieldtype</EM></FONT>
+ <FONT COLOR=green><EM>-- | will result in a Form_Exception is function Get_Type.</EM></FONT>
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+ M_Generic_Type : C_Field_Type := <b>null</b>;
+ M_Generic_Choice : C_Field_Type := <b>null</b>;
+ M_Builtin_Router : C_Field_Type := <b>null</b>;
+ M_Choice_Router : C_Field_Type := <b>null</b>;
+
+ <FONT COLOR=green><EM>-- Two wrapper functions to access those low-level fieldtypes defined</EM></FONT>
+ <FONT COLOR=green><EM>-- in this package.</EM></FONT>
+ <b>function</b> <A HREF="terminal_interface-curses-forms-field_types__adb.htm>64_13">C_Builtin_Router</A><FONT COLOR=red><A NAME="149_13"></A></FONT> <b>return</b> C_Field_Type;
+ <b>function</b> C_Choice_Router <b>return</b> C_Field_Type;
+
+ <b>procedure</b> Wrap_Builtin (Fld : <A HREF="terminal_interface-curses-forms-field_types__ads.htm#52_9">Field</A>;
+ Typ : Field_Type'Class<A HREF="terminal_interface-curses-forms-field_types__ads.htm<48_13">;</A>
+ Cft : C_Field_Type := C_Builtin_Router);
+ <FONT COLOR=green><EM>-- This procedure has to be called by the Set_Field_Type implementation</EM></FONT>
+ <FONT COLOR=green><EM>-- for builtin low-level fieldtypes to replace it by an Ada95</EM></FONT>
+ <FONT COLOR=green><EM>-- conformant Field_Type object.</EM></FONT>
+ <FONT COLOR=green><EM>-- The parameter Cft must be C_Builtin_Router for regular low-level</EM></FONT>
+ <FONT COLOR=green><EM>-- fieldtypes (like TYP_ALPHA or TYP_ALNUM) and C_Choice_Router for</EM></FONT>
+ <FONT COLOR=green><EM>-- low-level fieldtypes witch choice functions (like TYP_ENUM).</EM></FONT>
+ <FONT COLOR=green><EM>-- Any other value will raise a Form_Exception.</EM></FONT>
+
+ <b>function</b> Make_Arg (Args : System.Address) <b>return</b> System.Address;
+ <b>pragma</b> Convention (C, Make_Arg);
+ <FONT COLOR=green><EM>-- This is the Makearg_Function for the internal low-level types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced by this binding.</EM></FONT>
+
+ <b>function</b> Copy_Arg (Usr<A HREF="terminal_interface-curses-forms-field_types__ads.htm<67_13"> </A>: System.Address) <b>return</b> System.Address;
+ <b>pragma</b> Convention (C, Copy_Arg);
+ <FONT COLOR=green><EM>-- This is the Copyarg_Function for the internal low-level types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced by this binding.</EM></FONT>
+
+ <b>procedure</b> Free_Arg (Usr : System.Address);
+ <b>pragma</b> Convention (C, Free_Arg);
+ <FONT COLOR=green><EM>-- This is the Freearg_Function for the internal low-level types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced by this binding.</EM></FONT>
+
+ <b>function</b> Field_Check_Router (<FONT COLOR=red><A NAME="178_33">Fld</A></FONT> : <A HREF="system__ads.htm>3_9">Field</A>;
+ <A HREF="terminal_interface-curses-forms-field_types__ads.htm<77_13"> </A> Usr : System.Address) <b>return</b> C_Int;
+ <b>pragma</b> Convention (C, Field_Check_Router);
+ <FONT COLOR=green><EM>-- This is the Field_Check_Function for the internal low-level types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced to wrap the low-level types by a Field_Type derived</EM></FONT>
+ <FONT COLOR=green><EM>-- type. It routes the call to the corresponding low-level validation</EM></FONT>
+ <FONT COLOR=green><EM>-- function.</EM></FONT>
+
+ <b>function</b> Char_Check_Router (<FONT COLOR=red><A NAME="186_32">Ch</A></FONT> : C_Int;
+ <A HREF="terminal_interface-curses-forms-field_types__ads.htm<85_13"> </A> Usr : System.Address) <b>return</b> C_Int;
+ <b>pragma</b> Convention (C, Char_Check_Router);
+ <FONT COLOR=green><EM>-- This is the Char_Check_Function for the internal low-level types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced to wrap the low-level types by a Field_Type derived</EM></FONT>
+ <FONT COLOR=green><EM>-- type. It routes the call to the corresponding low-level validation</EM></FONT>
+ <FONT COLOR=green><EM>-- function.</EM></FONT>
+
+ <b>function</b> Next_Router (<FONT COLOR=red><A NAME="194_26">Fld</A></FONT> : <A HREF="system__ads.htm>3_9">Field</A>;
+ <A HREF="terminal_interface-curses-forms-field_types__ads.htm<93_13">Usr</A> : System.Address) <b>return</b> C_Int;
+ <b>pragma</b> Convention (C, Next_Router);
+ <FONT COLOR=green><EM>-- This is the Choice_Function for the internal low-level types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced to wrap the low-level types by a Field_Type derived</EM></FONT>
+ <FONT COLOR=green><EM>-- type. It routes the call to the corresponding low-level next_choice</EM></FONT>
+ <FONT COLOR=green><EM>-- function.</EM></FONT>
+
+ <b>function</b> Prev_Router (<FONT COLOR=red><A NAME="202_26">Fld</A></FONT> : <A HREF="system__ads.htm>3_9">Field</A>;
+ <A HREF="terminal_interface-curses-forms-field_types__ads.htm>01_13">Usr</A> : System.Address) <b>return</b> C_Int;
+ <b>pragma</b> Convention (C, Prev_Router);
+ <FONT COLOR=green><EM>-- This is the Choice_Function for the internal low-level types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced to wrap the low-level types by a Field_Type derived</EM></FONT>
+ <FONT COLOR=green><EM>-- type. It routes the call to the corresponding low-level prev_choice</EM></FONT>
+ <FONT COLOR=green><EM>-- function.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- This is the Argument structure maintained by all low-level field types</EM></FONT>
+ <FONT COLOR=green><EM>-- introduced by this binding.</EM></FONT>
+ <b>type</b> Argument <b>is</b> <b>record</b>
+ <FONT COLOR=red><A NAME="213_7">Typ</A></FONT> : <A HREF="system__ads.htm>3_9">Field_Type_Access</A>; <FONT COLOR=green><EM>-- the Field_Type creating this record</EM></FONT>
+ Usr : System.Address; <FONT COLOR=green><EM>-- original arg for builtin low-level types</EM></FONT>
+ Cft : C_Field_Type; <FONT COLOR=green><EM>-- the original low-level type</EM></FONT>
+ <b>end</b> <b>record</b>;
+ <b>type</b> Argument_Access <b>is</b> <b>access</b> <b>all</b> Argument;
+
+ <FONT COLOR=green><EM>-- +----------------------------------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+ <FONT COLOR=green><EM>-- | Some Imports of libform routines to deal with low-level fieldtypes.</EM></FONT>
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+ <b>function</b> New_Fieldtype (Fcheck : <A HREF="terminal_interface-curses-forms-field_types__ads.htm<08_9">Field_Check_Function</A>;
+ Ccheck : Char_Check_Function)
+ <b>return</b> C_Field_Type;
+ <b>pragma</b> Import (C, New_Fieldtype, "new_fieldtype");
+
+ <b>function</b> Set_Fieldtype_Arg (Cft : <A HREF="terminal_interface-curses-forms-field_types__ads.htm#92_9">C_Field_Type</A>;
+ Mak : <A HREF="terminal_interface-curses-forms-field_types__ads.htm#96_9">Makearg_Function</A> := <A HREF="terminal_interface-curses-forms-field_types__ads.htm<67_13">Make_Arg</A>'<b>Access</b>;
+ Cop : <A HREF="terminal_interface-curses-forms-field_types__ads.htm<00_9">Copyarg_Function</A> := <A HREF="terminal_interface-curses-forms-field_types__ads.htm<72_14">Copy_Arg</A>'<b>Access</b>;
+ <A HREF="terminal_interface-curses-forms-field_types__ads.htm#46_12"> </A> Fre : Freearg_Function := Free_Arg'<b>Access</b>)
+ <b>return</b> C_Int;
+ <b>pragma</b> Import (C, Set_Fieldtype_Arg, "set_fieldtype_arg");
+
+ <b>function</b> Set_Fieldtype_Choice (Cft : C_Field_Type;
+ <A HREF="terminal_interface-curses-forms-field_types__ads.htm#46_12"> </A> Next, Prev : Choice_Function)
+ <b>return</b> C_Int;
+ <b>pragma</b> Import (C, Set_Fieldtype_Choice, "set_fieldtype_choice");
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_Types;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-field_user_data.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-field_user_data.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Field_User_Data --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.12 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">User</A></FONT> <b>is</b> <b>limited</b> <b>private</b>;
+ <b>type</b> <A HREF="terminal_interface__ads.htm#41_9">User_Access</A> <b>is</b> <b>access</b> User<A HREF="terminal_interface-curses-forms__ads.htm#49_35">;</A>
+<b>package</b> Terminal_Interface.Curses.Forms.Field_User_Data <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Forms.Field_User_Data);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_userptr.3x.html">form_field_userptr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>procedure</b> Set_User_Data (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms-field_user_data__ads.htm#44_9">Field</A>;
+ Data : <b>in</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_userptr.3x.html">set_field_userptr</A></EM></FONT>
+ <b>pragma</b> Inline (Set_User_Data);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>procedure</b> Get_User_Data (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms-field_user_data__ads.htm#44_9">Field</A>;
+ Data : <b>out</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_userptr.3x.html">field_userptr</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>function</b> Get_User_Data (Fld : <b>in</b> Field) <b>return</b> User_Access;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_userptr.3x.html">field_userptr</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Sama as function</EM></FONT>
+ <b>pragma</b> Inline (Get_User_Data);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Field_User_Data;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms-form_user_data.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms-form_user_data.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Forms.Form_User_Data --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.11 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">User</A></FONT> <b>is</b> <b>limited</b> <b>private</b>;
+ <b>type</b> <A HREF="terminal_interface__ads.htm#41_9">User_Access</A> <b>is</b> <b>access</b> User<A HREF="terminal_interface-curses-forms__ads.htm#49_35">;</A>
+<b>package</b> Terminal_Interface.Curses.Forms.Form_User_Data <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Forms.Form_User_Data);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_userptr.3x.html">form_userptr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>procedure</b> Set_User_Data (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms-form_user_data__ads.htm#44_9">Form</A>;
+ Data : <b>in</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_userptr.3x.html">set_form_userptr</A></EM></FONT>
+ <b>pragma</b> Inline (Set_User_Data);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>procedure</b> Get_User_Data (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms-form_user_data__ads.htm#44_9">Form</A>;
+ Data : <b>out</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_userptr.3x.html">form_userptr</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>function</b> Get_User_Data (Frm : <b>in</b> Form) <b>return</b> User_Access;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_userptr.3x.html">form_userptr</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Get_User_Data);
+
+<b>end</b> Terminal_Interface.Curses.Forms.Form_User_Data;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-forms.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-forms.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Form --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.20 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- form binding.</EM></FONT>
+<FONT COLOR=green><EM>-- This module is generated. Please don't change it manually!</EM></FONT>
+<FONT COLOR=green><EM>-- Run the generator instead.</EM></FONT>
+<FONT COLOR=green><EM>-- |</EM></FONT>
+<b>with</b> <A HREF="ada__ads.htm<8_9">System</A>;
+<b>with</b> <A HREF="interfac__ads.htm>3_9">Ada</A>.Characters.Latin_1;
+<b>with</b> Interfaces.C;
+
+<b>package</b> Terminal_Interface.Curses.Forms <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Forms);
+ <b>pragma</b> Linker_Options ("-lform");
+ <b>pragma</b> Linker_Options ("-lAdaCurses");
+ <b>pragma</b> Linker_Options ("-lncurses");
+
+ Space : Character <b>renames</b> Ada.Characters.Latin_1.Space;
+
+ <b>type</b> <FONT COLOR=red><A NAME="58_9">Field</A></FONT> <b>is</b> <b>private</b>;
+ <b>type</b> Form <b>is</b> <b>private</b>;
+
+ <FONT COLOR=red><A NAME="61_4">Null_Field</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm#58_9">Field</A>;
+ Null_Form : <b>constant</b> Form;
+
+ <b>type</b> Field_Justification <b>is</b> (None,
+ Left,
+ Center,
+ Right);
+
+ <b>pragma</b> Warnings (Off);
+ <b>type</b> Field_Option_Set <b>is</b>
+ <b>record</b>
+ Visible : Boolean;
+ Active : Boolean;
+ Public : Boolean;
+ Edit : Boolean;
+ Wrap : Boolean;
+ Blank : Boolean;
+ Auto_Skip : Boolean;
+ Null_Ok : Boolean;
+ Pass_Ok : Boolean;
+ Static : Boolean;
+ <b>end</b> <b>record</b><A HREF="terminal_interface-curses-forms__ads.htm#69_9">;</A>
+ <b>pragma</b> Pack (Field_Option_Set);
+ <b>pragma</b> Convention (C, Field_Option_Set);
+
+ <b>for</b> Field_Option_Set <b>use</b>
+ <b>record</b>
+ Visible <b>at</b> 0 <b>range</b> 0 .. 0;
+ Active <b>at</b> 0 <b>range</b> 1 .. 1;
+ Public <b>at</b> 0 <b>range</b> 2 .. 2;
+ Edit <b>at</b> 0 <b>range</b> 3 .. 3;
+ Wrap <b>at</b> 0 <b>range</b> 4 .. 4;
+ Blank <b>at</b> 0 <b>range</b> 5 .. 5;
+ Auto_Skip <b>at</b> 0 <b>range</b> 6 .. 6;
+ Null_Ok <b>at</b> 0 <b>range</b> 7 .. 7;
+ Pass_Ok <b>at</b> 0 <b>range</b> 8 .. 8;
+ Static <b>at</b> 0 <b>range</b> 9 .. 9;
+ <b>end</b> <b>record</b>;
+ <b>for</b> Field_Option_Set'Size <b>use</b> 32;
+ <FONT COLOR=green><EM>-- Please note: this rep. clause is generated and may be</EM></FONT>
+ <FONT COLOR=green><EM>-- different on your system.Dnl</EM></FONT>
+
+ <b>pragma</b> Warnings (On);
+
+ <b>function</b> Default_Field_Options <b>return</b> Field_Option_Set;
+ <FONT COLOR=green><EM>-- The initial defaults for the field options.</EM></FONT>
+ <b>pragma</b> Inline (Default_Field_Options);
+
+ <b>pragma</b> Warnings (Off);
+ <b>type</b> Form_Option_Set <b>is</b>
+ <b>record</b>
+ NL_Overload : Boolean;
+ BS_Overload : Boolean;
+ <b>end</b> <b>record</b><A HREF="terminal_interface-curses-forms__ads.htm<09_9">;</A>
+ <b>pragma</b> Pack (Form_Option_Set);
+ <b>pragma</b> Convention (C, Form_Option_Set);
+
+ <b>for</b> Form_Option_Set <b>use</b>
+ <b>record</b>
+ NL_Overload <b>at</b> 0 <b>range</b> 0 .. 0;
+ BS_Overload <b>at</b> 0 <b>range</b> 1 .. 1;
+ <b>end</b> <b>record</b>;
+ <b>for</b> Form_Option_Set'Size <b>use</b> 32;
+ <FONT COLOR=green><EM>-- Please note: this rep. clause is generated and may be</EM></FONT>
+ <FONT COLOR=green><EM>-- different on your system.Dnl</EM></FONT>
+
+ <b>pragma</b> Warnings (On);
+
+ <b>function</b> Default_Form_Options <b>return</b> Form_Option_Set;
+ <FONT COLOR=green><EM>-- The initial defaults for the form options.</EM></FONT>
+ <b>pragma</b> Inline (Default_Form_Options);
+
+ <b>type</b> Buffer_Number <b>is</b> <b>new</b> Natural;
+
+ <b>type</b> Field_Array <b>is</b> <b>array</b> (Positive <b>range</b> <>) <b>of</b> <b>aliased</b> Field;
+ <b>pragma</b> Convention (C, Field_Array);
+
+ <b>type</b> Field_Array_Access <b>is</b> <b>access</b> Field_Array;
+
+ <b>procedure</b> Free (FA : <b>in</b> <b>out</b> Field_Array_Access;
+ Free_Fields : <b>in</b> Boolean := False);
+ <FONT COLOR=green><EM>-- Release the memory for an allocated field array</EM></FONT>
+ <FONT COLOR=green><EM>-- If Free_Fields is True, call Delete() for all the fields in</EM></FONT>
+ <FONT COLOR=green><EM>-- the array.</EM></FONT>
+
+ <b>subtype</b> Form_Request_Code <b>is</b> Key_Code <b>range</b> (Key_Max + 1) .. (Key_Max + 57);
+
+ <FONT COLOR=green><EM>-- The prefix F_ stands for "Form Request"</EM></FONT>
+ F_Next_Page : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 1;
+ F_Previous_Page : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 2;
+ F_First_Page : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 3;
+ F_Last_Page : <b>constant</b> Form_Request_Code := Key_Max + 4;
+
+ F_Next_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 5;
+ F_Previous_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 6;
+ F_First_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 7;
+ F_Last_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 8;
+ F_Sorted_Next_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 9;
+ F_Sorted_Previous_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 10;
+ F_Sorted_First_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 11;
+ F_Sorted_Last_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 12;
+ F_Left_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 13;
+ F_Right_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 14;
+ F_Up_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 15;
+ F_Down_Field : <b>constant</b> Form_Request_Code := Key_Max + 16;
+
+ F_Next_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 17;
+ F_Previous_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 18;
+ F_Next_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 19;
+ F_Previous_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 20;
+ F_Next_Word : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 21;
+ F_Previous_Word : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 22;
+ F_Begin_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 23;
+ F_End_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 24;
+ F_Begin_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 25;
+ F_End_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 26;
+ F_Left_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 27;
+ F_Right_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 28;
+ F_Up_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 29;
+ F_Down_Char : <b>constant</b> Form_Request_Code := Key_Max + 30;
+
+ F_New_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 31;
+ F_Insert_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 32;
+ F_Insert_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 33;
+ F_Delete_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 34;
+ F_Delete_Previous : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 35;
+ F_Delete_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 36;
+ F_Delete_Word : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 37;
+ F_Clear_EOL : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 38;
+ F_Clear_EOF : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 39;
+ F_Clear_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 40;
+ F_Overlay_Mode : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 41;
+ F_Insert_Mode : <b>constant</b> Form_Request_Code := Key_Max + 42;
+
+ <FONT COLOR=green><EM>-- Vertical Scrolling</EM></FONT>
+ F_ScrollForward_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 43;
+ F_ScrollBackward_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 44;
+ F_ScrollForward_Page : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 45;
+ F_ScrollBackward_Page : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 46;
+ F_ScrollForward_HalfPage : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 47;
+ F_ScrollBackward_HalfPage : <b>constant</b> Form_Request_Code := Key_Max + 48;
+
+ <FONT COLOR=green><EM>-- Horizontal Scrolling</EM></FONT>
+ F_HScrollForward_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 49;
+ F_HScrollBackward_Char : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 50;
+ F_HScrollForward_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 51;
+ F_HScrollBackward_Line : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 52;
+ F_HScrollForward_HalfLine : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 53;
+ F_HScrollBackward_HalfLine : <b>constant</b> Form_Request_Code := Key_Max + 54;
+
+ F_Validate_Field : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 55;
+ F_Next_Choice : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> := Key_Max + 56;
+ F_Previous_Choice : <b>constant</b> Form_Request_Code := Key_Max + 57;
+
+ <FONT COLOR=green><EM>-- For those who like the old 'C' style request names</EM></FONT>
+ REQ_NEXT_PAGE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Next_Page;
+ REQ_PREV_PAGE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Previous_Page;
+ REQ_FIRST_PAGE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_First_Page;
+ REQ_LAST_PAGE : Form_Request_Code <b>renames</b> F_Last_Page;
+
+ REQ_NEXT_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Next_Field;
+ REQ_PREV_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Previous_Field;
+ REQ_FIRST_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_First_Field;
+ REQ_LAST_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Last_Field;
+ REQ_SNEXT_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Sorted_Next_Field;
+ REQ_SPREV_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Sorted_Previous_Field;
+ REQ_SFIRST_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Sorted_First_Field;
+ REQ_SLAST_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Sorted_Last_Field;
+ REQ_LEFT_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Left_Field;
+ REQ_RIGHT_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Right_Field;
+ REQ_UP_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Up_Field;
+ REQ_DOWN_FIELD : Form_Request_Code <b>renames</b> F_Down_Field;
+
+ REQ_NEXT_CHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Next_Char;
+ REQ_PREV_CHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Previous_Char;
+ REQ_NEXT_LINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Next_Line;
+ REQ_PREV_LINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Previous_Line;
+ REQ_NEXT_WORD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Next_Word;
+ REQ_PREV_WORD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Previous_Word;
+ REQ_BEG_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Begin_Field;
+ REQ_END_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_End_Field;
+ REQ_BEG_LINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Begin_Line;
+ REQ_END_LINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_End_Line;
+ REQ_LEFT_CHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Left_Char;
+ REQ_RIGHT_CHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Right_Char;
+ REQ_UP_CHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Up_Char;
+ REQ_DOWN_CHAR : Form_Request_Code <b>renames</b> F_Down_Char;
+
+ REQ_NEW_LINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_New_Line;
+ REQ_INS_CHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Insert_Char;
+ REQ_INS_LINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Insert_Line;
+ REQ_DEL_CHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Delete_Char;
+ REQ_DEL_PREV : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Delete_Previous;
+ REQ_DEL_LINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Delete_Line;
+ REQ_DEL_WORD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Delete_Word;
+ REQ_CLR_EOL : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Clear_EOL;
+ REQ_CLR_EOF : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Clear_EOF;
+ REQ_CLR_FIELD : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Clear_Field;
+ REQ_OVL_MODE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Overlay_Mode;
+ REQ_INS_MODE : Form_Request_Code <b>renames</b> F_Insert_Mode;
+
+ REQ_SCR_FLINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_ScrollForward_Line;
+ REQ_SCR_BLINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_ScrollBackward_Line;
+ REQ_SCR_FPAGE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_ScrollForward_Page;
+ REQ_SCR_BPAGE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_ScrollBackward_Page;
+ REQ_SCR_FHPAGE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_ScrollForward_HalfPage;
+ REQ_SCR_BHPAGE : Form_Request_Code <b>renames</b> F_ScrollBackward_HalfPage;
+
+ REQ_SCR_FCHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_HScrollForward_Char;
+ REQ_SCR_BCHAR : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_HScrollBackward_Char;
+ REQ_SCR_HFLINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_HScrollForward_Line;
+ REQ_SCR_HBLINE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_HScrollBackward_Line;
+ REQ_SCR_HFHALF : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_HScrollForward_HalfLine;
+ REQ_SCR_HBHALF : Form_Request_Code <b>renames</b> F_HScrollBackward_HalfLine;
+
+ REQ_VALIDATION : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Validate_Field;
+ REQ_NEXT_CHOICE : <A HREF="terminal_interface-curses-forms__ads.htm<45_12">Form_Request_Code</A> <b>renames</b> F_Next_Choice;
+ REQ_PREV_CHOICE : Form_Request_Code <b>renames</b> F_Previous_Choice;
+
+
+ <b>procedure</b> Request_Name (Key : <b>in</b> Form_Request_Code;
+ Name : <b>out</b> String);
+
+ <b>function</b> Request_Name (Key : Form_Request_Code) <b>return</b> String;
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Request_Name);
+
+ <FONT COLOR=green><EM>------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Exceptions --</EM></FONT>
+ <FONT COLOR=green><EM>------------------</EM></FONT>
+ Form_Exception : <b>exception</b>;
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_new.3x.html">form_field_new.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>function</b> Create (Height : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Width : <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ Top : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Left : Column_Position;
+ Off_Screen : <A HREF="terminal_interface-curses-forms__ads.htm<32_9">Natural</A> := 0;
+ More_Buffers : Buffer_Number := Buffer_Number'First)
+ <b>return</b> Field;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_new.3x.html">new_field()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded Create is defined later. Pragma Inline appears there.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>function</b> New_Field (Height : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Width : <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ Top : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Left : Column_Position;
+ Off_Screen : <A HREF="terminal_interface-curses-forms__ads.htm<32_9">Natural</A> := 0;
+ More_Buffers : Buffer_Number := Buffer_Number'First)
+ <b>return</b> Field <b>renames</b> Create;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_new.3x.html">new_field()</A></EM></FONT>
+ <b>pragma</b> Inline (New_Field);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>procedure</b> Delete (Fld : <b>in</b> <b>out</b> Field);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_new.3x.html">free_field()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Reset Fld to Null_Field</EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded Delete is defined later. Pragma Inline appears there.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_4">|</EM></FONT>
+ <b>function</b> Duplicate (Fld : <A HREF="terminal_interface-curses__ads.htm#60_9">Field</A>;
+ Top : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Left : Column_Position) <b>return</b> Field;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_new.3x.html">dup_field()</A></EM></FONT>
+ <b>pragma</b> Inline (Duplicate);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_5">|</EM></FONT>
+ <b>function</b> Link (Fld : <A HREF="terminal_interface-curses__ads.htm#60_9">Field</A>;
+ Top : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Left : Column_Position) <b>return</b> Field;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_new.3x.html">link_field()</A></EM></FONT>
+ <b>pragma</b> Inline (Link);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_just.3x.html">form_field_just.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_6">|</EM></FONT>
+ <b>procedure</b> Set_Justification (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#63_9">Field</A>;
+ Just : <b>in</b> Field_Justification := None);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_just.3x.html">set_field_just()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Justification);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_7">|</EM></FONT>
+ <b>function</b> Get_Justification (Fld : Field) <b>return</b> Field_Justification;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_just.3x.html">field_just()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Justification);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_buffer.3x.html">form_field_buffer.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_8">|</EM></FONT>
+ <b>procedure</b> Set_Buffer
+ (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<32_9">Field</A>;
+ Buffer : <b>in</b> Buffer_Number := Buffer_Number'First;
+ Str : <b>in</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_buffer.3x.html">set_field_buffer()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Not inlined</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_9">|</EM></FONT>
+ <b>procedure</b> Get_Buffer
+ (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<32_9">Field</A>;
+ Buffer : <b>in</b> Buffer_Number := Buffer_Number'First;
+ Str : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_buffer.3x.html">field_buffer()</A></EM></FONT>
+
+ <b>function</b> Get_Buffer
+ (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<32_9">Field</A>;
+ Buffer : <b>in</b> Buffer_Number := Buffer_Number'First) <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_buffer.3x.html">field_buffer()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same but as function</EM></FONT>
+ <b>pragma</b> Inline (Get_Buffer);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_10">|</EM></FONT>
+ <b>procedure</b> Set_Status (Fld : <b>in</b> Field;
+ Status : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_buffer.3x.html">set_field_status()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Status);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_11">|</EM></FONT>
+ <b>function</b> Changed (Fld : Field) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_buffer.3x.html">field_status()</A></EM></FONT>
+ <b>pragma</b> Inline (Changed);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_12">|</EM></FONT>
+ <b>procedure</b> Set_Maximum_Size (Fld : <b>in</b> Field;
+ Max : <b>in</b> Natural := 0);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_buffer.3x.html">set_field_max()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Maximum_Size);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_opts.3x.html">form_field_opts.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_13">|</EM></FONT>
+ <b>procedure</b> Set_Options (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#69_9">Field</A>;
+ Options : <b>in</b> Field_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_opts.3x.html">set_field_opts()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded version is defined later. Pragma Inline appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_14">|</EM></FONT>
+ <b>procedure</b> Switch_Options (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#69_9">Field</A>;
+ Options : <b>in</b> Field_Option_Set;
+ On : Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_opts.3x.html">field_opts_on()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: field_opts_off()</EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded version is defined later. Pragma Inline appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_15">|</EM></FONT>
+ <b>procedure</b> Get_Options (Fld : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#69_9">Field</A>;
+ Options : <b>out</b> Field_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_opts.3x.html">field_opts()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_16">|</EM></FONT>
+ <b>function</b> Get_Options (Fld : Field := Null_Field)
+ <b>return</b> Field_Option_Set;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_opts.3x.html">field_opts()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded version is defined later. Pragma Inline appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_attributes.3x.html">form_field_attributes.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_17">|</EM></FONT>
+ <b>procedure</b> Set_Foreground
+ (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Field</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">set_field_fore()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Foreground);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_18">|</EM></FONT>
+ <b>procedure</b> Foreground (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Field</A>;
+ Fore : <b>out</b> Character_Attribute_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">field_fore()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_19">|</EM></FONT>
+ <b>procedure</b> Foreground (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Field</A>;
+ Fore : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A>;
+ Color : <b>out</b> Color_Pair);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">field_fore()</A></EM></FONT>
+ <b>pragma</b> Inline (Foreground);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_20">|</EM></FONT>
+ <b>procedure</b> Set_Background
+ (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Field</A>;
+ Back : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">set_field_back()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Background);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_21">|</EM></FONT>
+ <b>procedure</b> Background (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Field</A>;
+ Back : <b>out</b> Character_Attribute_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">field_back()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_22">|</EM></FONT>
+ <b>procedure</b> Background (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Field</A>;
+ Back : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A>;
+ Color : <b>out</b> Color_Pair);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">field_back()</A></EM></FONT>
+ <b>pragma</b> Inline (Background);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_23">|</EM></FONT>
+ <b>procedure</b> Set_Pad_Character (Fld : <b>in</b> Field;
+ Pad : <b>in</b> Character := Space);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">set_field_pad()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Pad_Character);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_24">|</EM></FONT>
+ <b>procedure</b> Pad_Character (Fld : <b>in</b> Field;
+ Pad : <b>out</b> Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_attributes.3x.html">field_pad()</A></EM></FONT>
+ <b>pragma</b> Inline (Pad_Character);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field_info.3x.html">form_field_info.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_25">|</EM></FONT>
+ <b>procedure</b> Info (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#63_12">Field</A>;
+ Lines : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Columns : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ First_Row : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ First_Column : <b>out</b> Column_Position;
+ Off_Screen : <b>out</b> <A HREF="terminal_interface-curses-forms__ads.htm<32_9">Natural</A>;
+ Additional_Buffers : <b>out</b> Buffer_Number);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_info.3x.html">field_info()</A></EM></FONT>
+ <b>pragma</b> Inline (Info);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_26">|</EM></FONT>
+ <b>procedure</b> Dynamic_Info (Fld : <b>in</b> Field;
+ Lines : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Columns : <b>out</b> Column_Count;
+ Max : <b>out</b> Natural);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field_info.3x.html">dynamic_field_info()</A></EM></FONT>
+ <b>pragma</b> Inline (Dynamic_Info);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_win.3x.html">form_win.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_27">|</EM></FONT>
+ <b>procedure</b> Set_Window (<FONT COLOR=red><A NAME="510_26">Frm</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Form</A>;
+ Win : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_win.3x.html">set_form_win()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_28">|</EM></FONT>
+ <b>function</b> Get_Window (Frm : Form) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_win.3x.html">form_win()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_29">|</EM></FONT>
+ <b>procedure</b> Set_Sub_Window (<FONT COLOR=red><A NAME="521_30">Frm</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Form</A>;
+ Win : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_win.3x.html">set_form_sub()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Sub_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_30">|</EM></FONT>
+ <b>function</b> Get_Sub_Window (Frm : Form) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_win.3x.html">form_sub()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Sub_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_31">|</EM></FONT>
+ <b>procedure</b> Scale (Frm : <b>in</b> Form;
+ Lines : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Columns : <b>out</b> Column_Count);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_win.3x.html">scale_form()</A></EM></FONT>
+ <b>pragma</b> Inline (Scale);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_hook.3x.html">form_hook.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>type</b> Form_Hook_Function <b>is</b> <b>access</b> <b>procedure</b> (Frm : <b>in</b> Form);
+ <b>pragma</b> Convention (C, Form_Hook_Function);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_32">|</EM></FONT>
+ <b>procedure</b> Set_Field_Init_Hook (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#541_9">Form</A>;
+ Proc : <b>in</b> Form_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">set_field_init()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Field_Init_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_33">|</EM></FONT>
+ <b>procedure</b> Set_Field_Term_Hook (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#541_9">Form</A>;
+ Proc : <b>in</b> Form_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">set_field_term()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Field_Term_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_34">|</EM></FONT>
+ <b>procedure</b> Set_Form_Init_Hook (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#541_9">Form</A>;
+ Proc : <b>in</b> Form_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">set_form_init()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Form_Init_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_35">|</EM></FONT>
+ <b>procedure</b> Set_Form_Term_Hook (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#541_9">Form</A>;
+ Proc : <b>in</b> Form_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">set_form_term()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Form_Term_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_36">|</EM></FONT>
+ <b>function</b> Get_Field_Init_Hook (Frm : Form) <b>return</b> Form_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">field_init()</A></EM></FONT>
+ <b>pragma</b> Import (C, Get_Field_Init_Hook, "field_init");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_37">|</EM></FONT>
+ <b>function</b> Get_Field_Term_Hook (Frm : Form) <b>return</b> Form_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">field_term()</A></EM></FONT>
+ <b>pragma</b> Import (C, Get_Field_Term_Hook, "field_term");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_38">|</EM></FONT>
+ <b>function</b> Get_Form_Init_Hook (Frm : Form) <b>return</b> Form_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">form_init()</A></EM></FONT>
+ <b>pragma</b> Import (C, Get_Form_Init_Hook, "form_init");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_39">|</EM></FONT>
+ <b>function</b> Get_Form_Term_Hook (Frm : Form) <b>return</b> Form_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_hook.3x.html">form_term()</A></EM></FONT>
+ <b>pragma</b> Import (C, Get_Form_Term_Hook, "form_term");
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_field.3x.html">form_field.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_40">|</EM></FONT>
+ <b>procedure</b> Redefine (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<37_9">Form</A>;
+ Flds : <b>in</b> Field_Array_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field.3x.html">set_form_fields()</A></EM></FONT>
+ <b>pragma</b> Inline (Redefine);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_41">|</EM></FONT>
+ <b>procedure</b> Set_Fields (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<37_9">Form</A>;
+ Flds : <b>in</b> Field_Array_Access) <b>renames</b> Redefine;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field.3x.html">set_form_fields()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Fields);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_42">|</EM></FONT>
+ <b>function</b> Fields (Frm : Form;
+ Index : Positive) <b>return</b> Field;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field.3x.html">form_fields()</A></EM></FONT>
+ <b>pragma</b> Inline (Fields);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_43">|</EM></FONT>
+ <b>function</b> Field_Count (Frm : Form) <b>return</b> Natural;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field.3x.html">field_count()</A></EM></FONT>
+ <b>pragma</b> Inline (Field_Count);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_44">|</EM></FONT>
+ <b>procedure</b> Move (Fld : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Field</A>;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_field.3x.html">move_field()</A></EM></FONT>
+ <b>pragma</b> Inline (Move);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_new.3x.html">form_new.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_45">|</EM></FONT>
+ <b>function</b> Create (Fields : Field_Array_Access) <b>return</b> Form;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_new.3x.html">new_form()</A></EM></FONT>
+ <b>pragma</b> Inline (Create);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_46">|</EM></FONT>
+ <b>function</b> New_Form (Fields : Field_Array_Access) <b>return</b> Form
+ <b>renames</b> Create;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_new.3x.html">new_form()</A></EM></FONT>
+ <b>pragma</b> Inline (New_Form);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_47">|</EM></FONT>
+ <b>procedure</b> Delete (Frm : <b>in</b> <b>out</b> Form);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_new.3x.html">free_form()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Reset Frm to Null_Form</EM></FONT>
+ <b>pragma</b> Inline (Delete);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_opts.3x.html">form_opts.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_48">|</EM></FONT>
+ <b>procedure</b> Set_Options (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<09_9">Form</A>;
+ Options : <b>in</b> Form_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_opts.3x.html">set_form_opts()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Options);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_49">|</EM></FONT>
+ <b>procedure</b> Switch_Options (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<09_9">Form</A>;
+ Options : <b>in</b> Form_Option_Set;
+ On : Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_opts.3x.html">form_opts_on()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: form_opts_off()</EM></FONT>
+ <b>pragma</b> Inline (Switch_Options);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_50">|</EM></FONT>
+ <b>procedure</b> Get_Options (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm<09_9">Form</A>;
+ Options : <b>out</b> Form_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_opts.3x.html">form_opts()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_51">|</EM></FONT>
+ <b>function</b> Get_Options (Frm : Form := Null_Form) <b>return</b> Form_Option_Set;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_opts.3x.html">form_opts()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Options);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_post.3x.html">form_post.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_52">|</EM></FONT>
+ <b>procedure</b> Post (Frm : <b>in</b> Form;
+ Post : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_post.3x.html">post_form()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: unpost_form()</EM></FONT>
+ <b>pragma</b> Inline (Post);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_cursor.3x.html">form_cursor.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_53">|</EM></FONT>
+ <b>procedure</b> Position_Cursor (Frm : Form);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_cursor.3x.html">pos_form_cursor()</A></EM></FONT>
+ <b>pragma</b> Inline (Position_Cursor);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_data.3x.html">form_data.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_54">|</EM></FONT>
+ <b>function</b> Data_Ahead (Frm : Form) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_data.3x.html">data_ahead()</A></EM></FONT>
+ <b>pragma</b> Inline (Data_Ahead);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_55">|</EM></FONT>
+ <b>function</b> Data_Behind (Frm : Form) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_data.3x.html">data_behind()</A></EM></FONT>
+ <b>pragma</b> Inline (Data_Behind);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_driver.3x.html">form_driver.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>type</b> Driver_Result <b>is</b> (<FONT COLOR=red><A NAME="710_27">Form_Ok</A></FONT>,
+ <FONT COLOR=red><A NAME="711_27">Request_Denied</A></FONT>,
+ <FONT COLOR=red><A NAME="712_27">Unknown_Request</A></FONT>,
+ Invalid_Field);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_56">|</EM></FONT>
+ <b>function</b> Driver (Frm : <A HREF="terminal_interface-curses__ads.htm#68_9">Form</A>;
+ Key : Key_Code) <b>return</b> Driver_Result;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_driver.3x.html">form_driver()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Driver not inlined</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_page.3x.html">form_page.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>type</b> Page_Number <b>is</b> <b>new</b> Natural;
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_57">|</EM></FONT>
+ <b>procedure</b> Set_Current (<FONT COLOR=red><A NAME="728_27">Frm</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#57_9">Form</A>;
+ Fld : <b>in</b> Field);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_page.3x.html">set_current_field()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Current);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_58">|</EM></FONT>
+ <b>function</b> Current (Frm : <b>in</b> Form) <b>return</b> Field;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_page.3x.html">current_field()</A></EM></FONT>
+ <b>pragma</b> Inline (Current);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_59">|</EM></FONT>
+ <b>procedure</b> Set_Page (Frm : <b>in</b> <A HREF="terminal_interface-curses-forms__ads.htm#724_9">Form</A>;
+ Page : <b>in</b> Page_Number := Page_Number'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_page.3x.html">set_form_page()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Page);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_60">|</EM></FONT>
+ <b>function</b> Page (Frm : Form) <b>return</b> Page_Number;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_page.3x.html">form_page()</A></EM></FONT>
+ <b>pragma</b> Inline (Page);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_61">|</EM></FONT>
+ <b>function</b> Get_Index (Fld : Field) <b>return</b> Positive;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_page.3x.html">field_index()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Please note that in this binding we start the numbering of fields</EM></FONT>
+ <FONT COLOR=green><EM>-- with 1. So this is number is one more than you get from the low</EM></FONT>
+ <FONT COLOR=green><EM>-- level call.</EM></FONT>
+ <b>pragma</b> Inline (Get_Index);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/form_new_page.3x.html">form_new_page.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_62">|</EM></FONT>
+ <b>procedure</b> Set_New_Page (Fld : <b>in</b> Field;
+ New_Page : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_new_page.3x.html">set_new_page()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_New_Page);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_63">|</EM></FONT>
+ <b>function</b> Is_New_Page (Fld : Field) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/form_new_page.3x.html">new_page()</A></EM></FONT>
+ <b>pragma</b> Inline (Is_New_Page);
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>private</b>
+ <b>type</b> <A HREF="terminal_interface-curses-forms__ads.htm#58_9">Field</A> <b>is</b> <b>new</b> <A HREF="system__ads.htm>3_9">System</A>.<A HREF="s-stoele__ads.htm>2_16">Storage_Elements</A>.<A HREF="s-stoele__ads.htm#70_9">Integer_Address</A>;
+ <b>type</b> Form <b>is</b> <b>new</b> System.Storage_Elements.Integer_Address;
+
+ <A HREF="terminal_interface-curses-forms__ads.htm#61_4">Null_Field</A> : <b>constant</b> <A HREF="terminal_interface-curses-forms__ads.htm#58_9">Field</A> := 0;
+ Null_Form : <b>constant</b> Form := 0;
+
+<b>end</b> Terminal_Interface.Curses.Forms;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-menus-item_user_data.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-menus-item_user_data.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Menus.Item_User_Data --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.11 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">User</A></FONT> <b>is</b> <b>limited</b> <b>private</b>;
+ <b>type</b> <A HREF="terminal_interface__ads.htm#41_9">User_Access</A> <b>is</b> <b>access</b> User<A HREF="terminal_interface-curses-menus__ads.htm#49_35">;</A>
+<b>package</b> Terminal_Interface.Curses.Menus.Item_User_Data <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Menus.Item_User_Data);
+
+ <FONT COLOR=green><EM>-- The binding uses the same user pointer for menu items</EM></FONT>
+ <FONT COLOR=green><EM>-- as the low level C implementation. So you can safely</EM></FONT>
+ <FONT COLOR=green><EM>-- read or write the user pointer also with the C routines</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/mitem_userptr.3x.html">mitem_userptr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>procedure</b> Set_User_Data (Itm : <b>in</b> <A HREF="terminal_interface-curses-menus-item_user_data__ads.htm#44_9">Item</A>;
+ Data : <b>in</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_userptr.3x.html">set_item_userptr</A></EM></FONT>
+ <b>pragma</b> Inline (Set_User_Data);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>procedure</b> Get_User_Data (Itm : <b>in</b> <A HREF="terminal_interface-curses-menus-item_user_data__ads.htm#44_9">Item</A>;
+ Data : <b>out</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_userptr.3x.html">item_userptr</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>function</b> Get_User_Data (Itm : <b>in</b> Item) <b>return</b> User_Access;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_userptr.3x.html">item_userptr</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Get_User_Data);
+
+<b>end</b> Terminal_Interface.Curses.Menus.Item_User_Data;
+
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-menus-menu_user_data.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-menus-menu_user_data.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Menus.Menu_User_Data --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.11 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="44_9">User</A></FONT> <b>is</b> <b>limited</b> <b>private</b>;
+ <b>type</b> <A HREF="terminal_interface__ads.htm#41_9">User_Access</A> <b>is</b> <b>access</b> User<A HREF="terminal_interface-curses-menus__ads.htm#49_35">;</A>
+<b>package</b> Terminal_Interface.Curses.Menus.Menu_User_Data <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Menus.Menu_User_Data);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_userptr.3x.html">menu_userptr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>procedure</b> Set_User_Data (Men : <b>in</b> <A HREF="terminal_interface-curses-menus-menu_user_data__ads.htm#44_9">Menu</A>;
+ Data : <b>in</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_userptr.3x.html">set_menu_userptr</A></EM></FONT>
+ <b>pragma</b> Inline (Set_User_Data);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>procedure</b> Get_User_Data (Men : <b>in</b> <A HREF="terminal_interface-curses-menus-menu_user_data__ads.htm#44_9">Menu</A>;
+ Data : <b>out</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_userptr.3x.html">menu_userptr</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>function</b> Get_User_Data (Men : <b>in</b> Menu) <b>return</b> User_Access;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_userptr.3x.html">menu_userptr</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Get_User_Data);
+
+<b>end</b> Terminal_Interface.Curses.Menus.Menu_User_Data;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-menus.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-menus.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Menu --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.19 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- menu binding.</EM></FONT>
+<FONT COLOR=green><EM>-- This module is generated. Please don't change it manually!</EM></FONT>
+<FONT COLOR=green><EM>-- Run the generator instead.</EM></FONT>
+<FONT COLOR=green><EM>-- |</EM></FONT>
+<b>with</b> <A HREF="interfac__ads.htm>3_9">System</A>;
+<b>with</b> <A HREF="ada__ads.htm<8_9">Interfaces</A>.C;
+<b>with</b> Ada.Characters.Latin_1;
+
+<b>package</b> Terminal_Interface.Curses.Menus <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Menus);
+ <b>pragma</b> Linker_Options ("-lmenu");
+ <b>pragma</b> Linker_Options ("-lAdaCurses");
+ <b>pragma</b> Linker_Options ("-lncurses");
+
+ Space : Character <b>renames</b> Ada.Characters.Latin_1.Space;
+
+ <b>type</b> <FONT COLOR=red><A NAME="58_9">Item</A></FONT> <b>is</b> <b>private</b>;
+ <b>type</b> Menu <b>is</b> <b>private</b>;
+
+ <FONT COLOR=green><EM>---------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Interface constants --</EM></FONT>
+ <FONT COLOR=green><EM>---------------------------</EM></FONT>
+ <FONT COLOR=red><A NAME="64_4">Null_Item</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#58_9">Item</A>;
+ Null_Menu : <b>constant</b> Menu;
+
+ <b>subtype</b> Menu_Request_Code <b>is</b> Key_Code
+ <b>range</b> (Key_Max + 1) .. (Key_Max + 17);
+
+ <FONT COLOR=green><EM>-- The prefix M_ stands for "Menu Request"</EM></FONT>
+ M_Left_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 1;
+ M_Right_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 2;
+ M_Up_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 3;
+ M_Down_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 4;
+ M_ScrollUp_Line : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 5;
+ M_ScrollDown_Line : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 6;
+ M_ScrollDown_Page : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 7;
+ M_ScrollUp_Page : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 8;
+ M_First_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 9;
+ M_Last_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 10;
+ M_Next_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 11;
+ M_Previous_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 12;
+ M_Toggle_Item : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 13;
+ M_Clear_Pattern : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 14;
+ M_Back_Pattern : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 15;
+ M_Next_Match : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> := Key_Max + 16;
+ M_Previous_Match : <b>constant</b> Menu_Request_Code := Key_Max + 17;
+
+ <FONT COLOR=green><EM>-- For those who like the old 'C' names for the request codes</EM></FONT>
+ REQ_LEFT_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Left_Item;
+ REQ_RIGHT_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Right_Item;
+ REQ_UP_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Up_Item;
+ REQ_DOWN_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Down_Item;
+ REQ_SCR_ULINE : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_ScrollUp_Line;
+ REQ_SCR_DLINE : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_ScrollDown_Line;
+ REQ_SCR_DPAGE : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_ScrollDown_Page;
+ REQ_SCR_UPAGE : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_ScrollUp_Page;
+ REQ_FIRST_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_First_Item;
+ REQ_LAST_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Last_Item;
+ REQ_NEXT_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Next_Item;
+ REQ_PREV_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Previous_Item;
+ REQ_TOGGLE_ITEM : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Toggle_Item;
+ REQ_CLEAR_PATTERN : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Clear_Pattern;
+ REQ_BACK_PATTERN : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Back_Pattern;
+ REQ_NEXT_MATCH : <A HREF="terminal_interface-curses-menus__ads.htm#66_12">Menu_Request_Code</A> <b>renames</b> M_Next_Match;
+ REQ_PREV_MATCH : Menu_Request_Code <b>renames</b> M_Previous_Match;
+
+ <b>procedure</b> Request_Name (Key : <b>in</b> Menu_Request_Code;
+ Name : <b>out</b> String);
+
+ <b>function</b> Request_Name (Key : Menu_Request_Code) <b>return</b> String;
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+
+ <FONT COLOR=green><EM>------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Exceptions --</EM></FONT>
+ <FONT COLOR=green><EM>------------------</EM></FONT>
+
+ Menu_Exception : <b>exception</b>;
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>-- Menu options</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <b>pragma</b> Warnings (Off);
+ <b>type</b> Menu_Option_Set <b>is</b>
+ <b>record</b>
+ One_Valued : Boolean;
+ Show_Descriptions : Boolean;
+ Row_Major_Order : Boolean;
+ Ignore_Case : Boolean;
+ Show_Matches : Boolean;
+ Non_Cyclic : Boolean;
+ <b>end</b> <b>record</b><A HREF="terminal_interface-curses-menus__ads.htm<22_9">;</A>
+ <b>pragma</b> Pack (Menu_Option_Set);
+ <b>pragma</b> Convention (C, Menu_Option_Set);
+
+ <b>for</b> Menu_Option_Set <b>use</b>
+ <b>record</b>
+ One_Valued <b>at</b> 0 <b>range</b> 0 .. 0;
+ Show_Descriptions <b>at</b> 0 <b>range</b> 1 .. 1;
+ Row_Major_Order <b>at</b> 0 <b>range</b> 2 .. 2;
+ Ignore_Case <b>at</b> 0 <b>range</b> 3 .. 3;
+ Show_Matches <b>at</b> 0 <b>range</b> 4 .. 4;
+ Non_Cyclic <b>at</b> 0 <b>range</b> 5 .. 5;
+ <b>end</b> <b>record</b>;
+ <b>for</b> Menu_Option_Set'Size <b>use</b> 32;
+ <FONT COLOR=green><EM>-- Please note: this rep. clause is generated and may be</EM></FONT>
+ <FONT COLOR=green><EM>-- different on your system.</EM></FONT>
+ <b>pragma</b> Warnings (On);
+
+ <b>function</b> Default_Menu_Options <b>return</b> Menu_Option_Set;
+ <FONT COLOR=green><EM>-- Initial default options for a menu.</EM></FONT>
+ <b>pragma</b> Inline (Default_Menu_Options);
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>-- Item options</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <b>pragma</b> Warnings (Off);
+ <b>type</b> Item_Option_Set <b>is</b>
+ <b>record</b>
+ Selectable : Boolean;
+ <b>end</b> <b>record</b><A HREF="terminal_interface-curses-menus__ads.htm<55_9">;</A>
+ <b>pragma</b> Pack (Item_Option_Set);
+ <b>pragma</b> Convention (C, Item_Option_Set);
+
+ <b>for</b> Item_Option_Set <b>use</b>
+ <b>record</b>
+ Selectable <b>at</b> 0 <b>range</b> 0 .. 0;
+ <b>end</b> <b>record</b>;
+ <b>for</b> Item_Option_Set'Size <b>use</b> 32;
+ <FONT COLOR=green><EM>-- Please note: this rep. clause is generated and may be</EM></FONT>
+ <FONT COLOR=green><EM>-- different on your system.</EM></FONT>
+ <b>pragma</b> Warnings (On);
+
+ <b>function</b> Default_Item_Options <b>return</b> Item_Option_Set;
+ <FONT COLOR=green><EM>-- Initial default options for an item.</EM></FONT>
+ <b>pragma</b> Inline (Default_Item_Options);
+
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>-- Item Array</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <b>type</b> Item_Array <b>is</b> <b>array</b> (Positive <b>range</b> <>) <b>of</b> <b>aliased</b> Item;
+ <b>pragma</b> Convention (C, Item_Array);
+
+ <b>type</b> Item_Array_Access <b>is</b> <b>access</b> Item_Array;
+
+ <b>procedure</b> Free (IA : <b>in</b> <b>out</b> Item_Array_Access;
+ Free_Items : Boolean := False);
+ <FONT COLOR=green><EM>-- Release the memory for an allocated item array</EM></FONT>
+ <FONT COLOR=green><EM>-- If Free_Items is True, call Delete() for all the items in</EM></FONT>
+ <FONT COLOR=green><EM>-- the array.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/mitem_new.3x.html">mitem_new.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>function</b> Create (Name : String;
+ Description : String := "") <b>return</b> Item;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_new.3x.html">new_item()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Not inlined.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>function</b> New_Item (Name : String;
+ <A HREF="terminal_interface-curses-menus__ads.htm<94_13"> </A> Description : String := "") <b>return</b> Item
+ <b>renames</b> Create;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_new.3x.html">new_item()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>procedure</b> Delete (Itm : <b>in</b> <b>out</b> Item);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_new.3x.html">free_item()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Resets Itm to Null_Item</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/mitem_value.3x.html">mitem_value.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_4">|</EM></FONT>
+ <b>procedure</b> Set_Value (Itm : <b>in</b> Item;
+ Value : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_value.3x.html">set_item_value()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Value);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_5">|</EM></FONT>
+ <b>function</b> Value (Itm : Item) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_value.3x.html">item_value()</A></EM></FONT>
+ <b>pragma</b> Inline (Value);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/mitem_visible.3x.html">mitem_visible.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_6">|</EM></FONT>
+ <b>function</b> Visible (Itm : Item) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_visible.3x.html">item_visible()</A></EM></FONT>
+ <b>pragma</b> Inline (Visible);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/mitem_opts.3x.html">mitem_opts.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_7">|</EM></FONT>
+ <b>procedure</b> Set_Options (Itm : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<55_9">Item</A>;
+ Options : <b>in</b> Item_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_opts.3x.html">set_item_opts()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded Set_Options is defined later. Pragma Inline appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_8">|</EM></FONT>
+ <b>procedure</b> Switch_Options (Itm : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<55_9">Item</A>;
+ Options : <b>in</b> Item_Option_Set;
+ On : Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_opts.3x.html">item_opts_on()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: item_opts_off()</EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded Switch_Options is defined later.</EM></FONT>
+ <FONT COLOR=green><EM>-- Pragma Inline appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_9">|</EM></FONT>
+ <b>procedure</b> Get_Options (Itm : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<55_9">Item</A>;
+ Options : <b>out</b> Item_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_opts.3x.html">item_opts()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_10">|</EM></FONT>
+ <b>function</b> Get_Options (Itm : Item := Null_Item) <b>return</b> Item_Option_Set;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_opts.3x.html">item_opts()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- An overloaded Get_Options is defined later. Pragma Inline appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/mitem_name.3x.html">mitem_name.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_11">|</EM></FONT>
+ <b>procedure</b> Name (Itm : <b>in</b> Item;
+ Name : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_name.3x.html">item_name()</A></EM></FONT>
+ <b>function</b> Name (Itm : Item) <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_name.3x.html">item_name()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Implemented as function</EM></FONT>
+ <b>pragma</b> Inline (Name);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_12">|</EM></FONT>
+ <b>procedure</b> Description (Itm : <b>in</b> Item;
+ Description : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_name.3x.html">item_description();</A></EM></FONT>
+
+ <b>function</b> Description (Itm : Item) <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_name.3x.html">item_description();</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Implemented as function</EM></FONT>
+ <b>pragma</b> Inline (Description);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/mitem_current.3x.html">mitem_current.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_13">|</EM></FONT>
+ <b>procedure</b> Set_Current (<FONT COLOR=red><A NAME="292_27">Men</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm#57_9">Menu</A>;
+ Itm : <b>in</b> Item);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_current.3x.html">set_current_item()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Current);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_14">|</EM></FONT>
+ <b>function</b> Current (Men : Menu) <b>return</b> Item;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_current.3x.html">current_item()</A></EM></FONT>
+ <b>pragma</b> Inline (Current);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_15">|</EM></FONT>
+ <b>procedure</b> Set_Top_Row (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Menu</A>;
+ Line : <b>in</b> Line_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_current.3x.html">set_top_row()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Top_Row);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_16">|</EM></FONT>
+ <b>function</b> Top_Row (Men : Menu) <b>return</b> Line_Position;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_current.3x.html">top_row()</A></EM></FONT>
+ <b>pragma</b> Inline (Top_Row);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_17">|</EM></FONT>
+ <b>function</b> Get_Index (Itm : Item) <b>return</b> Positive;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/mitem_current.3x.html">item_index()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Please note that in this binding we start the numbering of items</EM></FONT>
+ <FONT COLOR=green><EM>-- with 1. So this is number is one more than you get from the low</EM></FONT>
+ <FONT COLOR=green><EM>-- level call.</EM></FONT>
+ <b>pragma</b> Inline (Get_Index);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_post.3x.html">menu_post.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_18">|</EM></FONT>
+ <b>procedure</b> Post (Men : <b>in</b> Menu;
+ Post : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_post.3x.html">post_menu()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: unpost_menu()</EM></FONT>
+ <b>pragma</b> Inline (Post);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_opts.3x.html">menu_opts.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_19">|</EM></FONT>
+ <b>procedure</b> Set_Options (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<22_9">Menu</A>;
+ Options : <b>in</b> Menu_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_opts.3x.html">set_menu_opts()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Options);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_20">|</EM></FONT>
+ <b>procedure</b> Switch_Options (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<22_9">Menu</A>;
+ Options : <b>in</b> Menu_Option_Set;
+ On : Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_opts.3x.html">menu_opts_on()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: menu_opts_off()</EM></FONT>
+ <b>pragma</b> Inline (Switch_Options);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_21">|</EM></FONT>
+ <b>procedure</b> Get_Options (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<22_9">Menu</A>;
+ Options : <b>out</b> Menu_Option_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_opts.3x.html">menu_opts()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_22">|</EM></FONT>
+ <b>function</b> Get_Options (Men : Menu := Null_Menu) <b>return</b> Menu_Option_Set;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_opts.3x.html">menu_opts()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Options);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_win.3x.html">menu_win.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_23">|</EM></FONT>
+ <b>procedure</b> Set_Window (<FONT COLOR=red><A NAME="365_26">Men</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Menu</A>;
+ Win : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_win.3x.html">set_menu_win()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_24">|</EM></FONT>
+ <b>function</b> Get_Window (Men : Menu) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_win.3x.html">menu_win()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_25">|</EM></FONT>
+ <b>procedure</b> Set_Sub_Window (<FONT COLOR=red><A NAME="376_30">Men</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Menu</A>;
+ Win : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_win.3x.html">set_menu_sub()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Sub_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_26">|</EM></FONT>
+ <b>function</b> Get_Sub_Window (Men : Menu) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_win.3x.html">menu_sub()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Sub_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_27">|</EM></FONT>
+ <b>procedure</b> Scale (Men : <b>in</b> Menu;
+ Lines : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Columns : <b>out</b> Column_Count);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_win.3x.html">scale_menu()</A></EM></FONT>
+ <b>pragma</b> Inline (Scale);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_cursor.3x.html">menu_cursor.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_28">|</EM></FONT>
+ <b>procedure</b> Position_Cursor (Men : Menu);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_cursor.3x.html">pos_menu_cursor()</A></EM></FONT>
+ <b>pragma</b> Inline (Position_Cursor);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_mark.3x.html">menu_mark.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_29">|</EM></FONT>
+ <b>procedure</b> Set_Mark (Men : <b>in</b> Menu;
+ Mark : <b>in</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_mark.3x.html">set_menu_mark()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Mark);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_30">|</EM></FONT>
+ <b>procedure</b> Mark (Men : <b>in</b> Menu;
+ Mark : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_mark.3x.html">menu_mark()</A></EM></FONT>
+
+ <b>function</b> Mark (Men : Menu) <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_mark.3x.html">menu_mark()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Implemented as function</EM></FONT>
+ <b>pragma</b> Inline (Mark);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_attribs.3x.html">menu_attribs.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_31">|</EM></FONT>
+ <b>procedure</b> Set_Foreground
+ (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">set_menu_fore()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Foreground);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_32">|</EM></FONT>
+ <b>procedure</b> Foreground (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Fore : <b>out</b> Character_Attribute_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">menu_fore()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_33">|</EM></FONT>
+ <b>procedure</b> Foreground (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Fore : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A>;
+ Color : <b>out</b> Color_Pair);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">menu_fore()</A></EM></FONT>
+ <b>pragma</b> Inline (Foreground);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_34">|</EM></FONT>
+ <b>procedure</b> Set_Background
+ (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Back : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">set_menu_back()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Background);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_35">|</EM></FONT>
+ <b>procedure</b> Background (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Back : <b>out</b> Character_Attribute_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">menu_back()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- <A NAME="AFU_36">|</EM></FONT>
+
+ <b>procedure</b> Background (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Back : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A>;
+ Color : <b>out</b> Color_Pair);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">menu_back()</A></EM></FONT>
+ <b>pragma</b> Inline (Background);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_37">|</EM></FONT>
+ <b>procedure</b> Set_Grey
+ (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Grey : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">set_menu_grey()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Grey);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_38">|</EM></FONT>
+ <b>procedure</b> Grey (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Grey : <b>out</b> Character_Attribute_Set);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">menu_grey()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_39">|</EM></FONT>
+ <b>procedure</b> Grey
+ (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Menu</A>;
+ Grey : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A>;
+ Color : <b>out</b> Color_Pair);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">menu_grey()</A></EM></FONT>
+ <b>pragma</b> Inline (Grey);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_40">|</EM></FONT>
+ <b>procedure</b> Set_Pad_Character (Men : <b>in</b> Menu;
+ Pad : <b>in</b> Character := Space);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">set_menu_pad()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Pad_Character);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_41">|</EM></FONT>
+ <b>procedure</b> Pad_Character (Men : <b>in</b> Menu;
+ Pad : <b>out</b> Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_attribs.3x.html">menu_pad()</A></EM></FONT>
+ <b>pragma</b> Inline (Pad_Character);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_spacing.3x.html">menu_spacing.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_42">|</EM></FONT>
+ <b>procedure</b> Set_Spacing (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Menu</A>;
+ Descr : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A> := 0;
+ Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A> := 0;
+ Col : <b>in</b> Column_Position := 0);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_spacing.3x.html">set_menu_spacing()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Spacing);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_43">|</EM></FONT>
+ <b>procedure</b> Spacing (Men : <b>in</b> Menu;
+ Descr : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A>;
+ Row : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Col : <b>out</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_spacing.3x.html">menu_spacing()</A></EM></FONT>
+ <b>pragma</b> Inline (Spacing);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_pattern.3x.html">menu_pattern.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_44">|</EM></FONT>
+ <b>function</b> Set_Pattern (Men : Menu;
+ Text : String) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_pattern.3x.html">set_menu_pattern()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Return TRUE if the pattern matches, FALSE otherwise</EM></FONT>
+ <b>pragma</b> Inline (Set_Pattern);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_45">|</EM></FONT>
+ <b>procedure</b> Pattern (Men : <b>in</b> Menu;
+ Text : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_pattern.3x.html">menu_pattern()</A></EM></FONT>
+ <b>pragma</b> Inline (Pattern);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_format.3x.html">menu_format.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_46">|</EM></FONT>
+ <b>procedure</b> Set_Format (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#63_12">Menu</A>;
+ Lines : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Columns : <b>in</b> Column_Count);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_format.3x.html">set_menu_format()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Format);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_47">|</EM></FONT>
+ <b>procedure</b> Format (Men : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#63_12">Menu</A>;
+ Lines : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Columns : <b>out</b> Column_Count);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_format.3x.html">menu_format()</A></EM></FONT>
+ <b>pragma</b> Inline (Format);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_hook.3x.html">menu_hook.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>type</b> Menu_Hook_Function <b>is</b> <b>access</b> <b>procedure</b> (Men : <b>in</b> Menu);
+ <b>pragma</b> Convention (C, Menu_Hook_Function);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_48">|</EM></FONT>
+ <b>procedure</b> Set_Item_Init_Hook (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm#557_9">Menu</A>;
+ Proc : <b>in</b> Menu_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">set_item_init()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Item_Init_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_49">|</EM></FONT>
+ <b>procedure</b> Set_Item_Term_Hook (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm#557_9">Menu</A>;
+ Proc : <b>in</b> Menu_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">set_item_term()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Item_Term_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_50">|</EM></FONT>
+ <b>procedure</b> Set_Menu_Init_Hook (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm#557_9">Menu</A>;
+ Proc : <b>in</b> Menu_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">set_menu_init()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Menu_Init_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_51">|</EM></FONT>
+ <b>procedure</b> Set_Menu_Term_Hook (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm#557_9">Menu</A>;
+ Proc : <b>in</b> Menu_Hook_Function);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">set_menu_term()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Menu_Term_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_52">|</EM></FONT>
+ <b>function</b> Get_Item_Init_Hook (Men : Menu) <b>return</b> Menu_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">item_init()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Item_Init_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_53">|</EM></FONT>
+ <b>function</b> Get_Item_Term_Hook (Men : Menu) <b>return</b> Menu_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">item_term()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Item_Term_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_54">|</EM></FONT>
+ <b>function</b> Get_Menu_Init_Hook (Men : Menu) <b>return</b> Menu_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">menu_init()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Menu_Init_Hook);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_55">|</EM></FONT>
+ <b>function</b> Get_Menu_Term_Hook (Men : Menu) <b>return</b> Menu_Hook_Function;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_hook.3x.html">menu_term()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Menu_Term_Hook);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_items.3x.html">menu_items.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_56">|</EM></FONT>
+ <b>procedure</b> Redefine (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<81_9">Menu</A>;
+ Items : <b>in</b> Item_Array_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_items.3x.html">set_menu_items()</A></EM></FONT>
+ <b>pragma</b> Inline (Redefine);
+
+ <b>procedure</b> Set_Items (Men : <b>in</b> <A HREF="terminal_interface-curses-menus__ads.htm<81_9">Menu</A>;
+ <A HREF="terminal_interface-curses-menus__ads.htm#614_14"> </A> Items : <b>in</b> Item_Array_Access) <b>renames</b> Redefine;
+ <b>pragma</b> Inline (Set_Items);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_57">|</EM></FONT>
+ <b>function</b> Items (Men : Menu;
+ Index : Positive) <b>return</b> Item;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_items.3x.html">menu_items()</A></EM></FONT>
+ <b>pragma</b> Inline (Items);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_58">|</EM></FONT>
+ <b>function</b> Item_Count (Men : Menu) <b>return</b> Natural;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_items.3x.html">item_count()</A></EM></FONT>
+ <b>pragma</b> Inline (Item_Count);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_new.3x.html">menu_new.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_59">|</EM></FONT>
+ <b>function</b> Create (Items : Item_Array_Access) <b>return</b> Menu;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_new.3x.html">new_menu()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Not inlined</EM></FONT>
+
+ <b>function</b> New_Menu (Items : Item_Array_Access) <b>return</b> Menu <b>renames</b> Create;
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_60">|</EM></FONT>
+ <b>procedure</b> Delete (Men : <b>in</b> <b>out</b> Menu);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_new.3x.html">free_menu()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Reset Men to Null_Menu</EM></FONT>
+ <FONT COLOR=green><EM>-- Not inlined</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/menu_new.3x.html">menu_new.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>type</b> Driver_Result <b>is</b> (<FONT COLOR=red><A NAME="651_27">Menu_Ok</A></FONT>,
+ <FONT COLOR=red><A NAME="652_27">Request_Denied</A></FONT>,
+ <FONT COLOR=red><A NAME="653_27">Unknown_Request</A></FONT>,
+ No_Match);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_61">|</EM></FONT>
+ <b>function</b> Driver (Men : <A HREF="terminal_interface-curses__ads.htm#68_9">Menu</A>;
+ Key : Key_Code) <b>return</b> Driver_Result;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/menu_new.3x.html">menu_driver()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Driver is not inlined</EM></FONT>
+
+<FONT COLOR=green><EM>-------------------------------------------------------------------------------</EM></FONT>
+<b>private</b>
+ <b>type</b> <A HREF="terminal_interface-curses-menus__ads.htm#58_9">Item</A> <b>is</b> <b>new</b> <A HREF="system__ads.htm>3_9">System</A>.<A HREF="s-stoele__ads.htm>2_16">Storage_Elements</A>.<A HREF="s-stoele__ads.htm#70_9">Integer_Address</A>;
+ <b>type</b> Menu <b>is</b> <b>new</b> System.Storage_Elements.Integer_Address;
+
+ <A HREF="terminal_interface-curses-menus__ads.htm#64_4">Null_Item</A> : <b>constant</b> <A HREF="terminal_interface-curses-menus__ads.htm#58_9">Item</A> := 0;
+ Null_Menu : <b>constant</b> Menu := 0;
+
+<b>end</b> Terminal_Interface.Curses.Menus;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-mouse.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-mouse.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Mouse --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.18 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- mouse binding.</EM></FONT>
+<FONT COLOR=green><EM>-- This module is generated. Please don't change it manually!</EM></FONT>
+<FONT COLOR=green><EM>-- Run the generator instead.</EM></FONT>
+<FONT COLOR=green><EM>-- |</EM></FONT>
+<b>with</b> System;
+
+<b>package</b> Terminal_Interface.Curses.Mouse <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Mouse);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_mouse.3x.html">curs_mouse.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- Please note, that in ncurses-1.9.9e documentation mouse support</EM></FONT>
+ <FONT COLOR=green><EM>-- is still marked as experimental. So also this binding will change</EM></FONT>
+ <FONT COLOR=green><EM>-- if the ncurses methods change.</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <b>type</b> Event_Mask <b>is</b> <b>private</b>;
+ <FONT COLOR=red><A NAME="59_4">No_Events</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A>;
+ All_Events : <b>constant</b> Event_Mask;
+
+ <b>type</b> Mouse_Button <b>is</b> (<FONT COLOR=red><A NAME="62_26">Left</A></FONT>, <FONT COLOR=green><EM>-- aka: Button 1</EM></FONT>
+ <FONT COLOR=red><A NAME="63_26">Middle</A></FONT>, <FONT COLOR=green><EM>-- aka: Button 2</EM></FONT>
+ <FONT COLOR=red><A NAME="64_26">Right</A></FONT>, <FONT COLOR=green><EM>-- aka: Button 3</EM></FONT>
+ <FONT COLOR=red><A NAME="65_26">Button4</A></FONT>, <FONT COLOR=green><EM>-- aka: Button 4</EM></FONT>
+ <FONT COLOR=red><A NAME="66_26">Control</A></FONT>, <FONT COLOR=green><EM>-- Control Key</EM></FONT>
+ <FONT COLOR=red><A NAME="67_26">Shift</A></FONT>, <FONT COLOR=green><EM>-- Shift Key</EM></FONT>
+ Alt); <FONT COLOR=green><EM>-- ALT Key</EM></FONT>
+
+ <b>subtype</b> <FONT COLOR=red><A NAME="70_12">Real_Buttons</A></FONT> <b>is</b> <A HREF="terminal_interface-curses-mouse__ads.htm#61_9">Mouse_Button</A> <b>range</b> <A HREF="terminal_interface-curses-mouse__ads.htm#65_26">Left</A> .. Button4;
+ <b>subtype</b> Modifier_Keys <b>is</b> Mouse_Button <b>range</b> Control .. Alt;
+
+ <b>type</b> Button_State <b>is</b> (<FONT COLOR=red><A NAME="73_26">Released</A></FONT>,
+ <FONT COLOR=red><A NAME="74_26">Pressed</A></FONT>,
+ Clicked,
+ <FONT COLOR=red><A NAME="76_26">Double_Clicked</A></FONT>,
+ Triple_Clicked);
+
+ <b>type</b> Button_States <b>is</b> <b>array</b> (Button_State) <b>of</b> Boolean;
+ <b>pragma</b> Pack (Button_States);
+
+ All_Clicks : <b>constant</b> Button_States := (Clicked .. Triple_Clicked => True,
+ <A HREF="terminal_interface-curses-mouse__ads.htm#78_9"> </A> <b>others</b> => False);
+ All_States : <b>constant</b> Button_States := (<b>others</b> => True);
+
+ <b>type</b> Mouse_Event <b>is</b> <b>private</b>;
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_mouse.3x.html">curs_mouse.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>function</b> Has_Mouse <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- Return true if a mouse device is supported, false otherwise.</EM></FONT>
+
+ <b>procedure</b> Register_Reportable_Event
+ (Button : <b>in</b> <A HREF="terminal_interface-curses-mouse__ads.htm#72_9">Mouse_Button</A>;
+ <FONT COLOR=red><A NAME="97_7">State</A></FONT> : <b>in</b> Button_State;
+ Mask : <b>in</b> <b>out</b> Event_Mask);
+ <FONT COLOR=green><EM>-- Stores the event described by the button and the state in the mask.</EM></FONT>
+ <FONT COLOR=green><EM>-- Before you call this the first time, you should init the mask</EM></FONT>
+ <FONT COLOR=green><EM>-- with the Empty_Mask constant</EM></FONT>
+ <b>pragma</b> Inline (Register_Reportable_Event);
+
+ <b>procedure</b> Register_Reportable_Events
+ (Button : <b>in</b> <A HREF="terminal_interface-curses-mouse__ads.htm#78_9">Mouse_Button</A>;
+ <FONT COLOR=red><A NAME="106_7">State</A></FONT> : <b>in</b> Button_States;
+ Mask : <b>in</b> <b>out</b> Event_Mask);
+ <FONT COLOR=green><EM>-- Register all events described by the Button and the State bitmap.</EM></FONT>
+ <FONT COLOR=green><EM>-- Before you call this the first time, you should init the mask</EM></FONT>
+ <FONT COLOR=green><EM>-- with the Empty_Mask constant</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <FONT COLOR=green><EM>-- There is one difference to mousmask(): we return the value of the</EM></FONT>
+ <FONT COLOR=green><EM>-- old mask, that means the event mask value before this call.</EM></FONT>
+ <b>function</b> Start_Mouse (Mask : <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := All_Events)
+ <b>return</b> Event_Mask;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_mouse.3x.html">mousemask()</A></EM></FONT>
+ <b>pragma</b> Inline (Start_Mouse);
+
+ <b>procedure</b> End_Mouse (Mask : <b>in</b> Event_Mask := No_Events);
+ <FONT COLOR=green><EM>-- Terminates the mouse, restores the specified event mask</EM></FONT>
+ <b>pragma</b> Inline (End_Mouse);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>function</b> Get_Mouse <b>return</b> Mouse_Event;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_mouse.3x.html">getmouse()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Mouse);
+
+ <b>procedure</b> Get_Event (Event : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Mouse_Event</A>;
+ Y : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ X : <b>out</b> <A HREF="terminal_interface-curses-mouse__ads.htm#61_9">Column_Position</A>;
+ Button : <b>out</b> <A HREF="terminal_interface-curses-mouse__ads.htm#72_9">Mouse_Button</A>;
+ State : <b>out</b> Button_State);
+ <FONT COLOR=green><EM>-- !!! Warning: X and Y are screen coordinates. Due to ripped of lines they</EM></FONT>
+ <FONT COLOR=green><EM>-- may not be identical to window coordinates.</EM></FONT>
+ <b>pragma</b> Inline (Get_Event);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>procedure</b> Unget_Mouse (Event : <b>in</b> Mouse_Event);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_mouse.3x.html">ungetmouse()</A></EM></FONT>
+ <b>pragma</b> Inline (Unget_Mouse);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_4">|</EM></FONT>
+ <b>function</b> Enclosed_In_Window (<FONT COLOR=red><A NAME="144_33">Win</A></FONT> : <A HREF="terminal_interface-curses-mouse__ads.htm#85_9">Window</A> := Standard_Window;
+ Event : Mouse_Event) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_mouse.3x.html">wenclose()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- But : use event instead of screen coordinates.</EM></FONT>
+ <b>pragma</b> Inline (Enclosed_In_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_5">|</EM></FONT>
+ <b>function</b> Mouse_Interval (Msec : Natural := 200) <b>return</b> Natural;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_mouse.3x.html">mouseinterval()</A></EM></FONT>
+ <b>pragma</b> Inline (Mouse_Interval);
+
+<b>private</b>
+ <b>type</b> Event_Mask <b>is</b> <b>new</b> Interfaces.C.unsigned_long;
+
+ <b>type</b> Mouse_Event <b>is</b>
+ <b>record</b>
+ Id : Integer <b>range</b> Integer (<A HREF="interfac__ads.htm>3_9">Interfaces</A>.<A HREF="i-c__ads.htm>0_20">C</A>.<A HREF="i-c__ads.htm#36_9">short</A>'First) ..
+ Integer (<A HREF="interfac__ads.htm>3_9">Interfaces</A>.<A HREF="i-c__ads.htm>0_20">C</A>.<A HREF="i-c__ads.htm#35_9">short</A>'Last);
+ X, Y, Z : Integer <b>range</b> Integer (<A HREF="interfac__ads.htm>3_9">Interfaces</A>.<A HREF="i-c__ads.htm>0_20">C</A>.<A HREF="i-c__ads.htm#35_9">int</A>'First) ..
+ <FONT COLOR=red><A NAME="163_10"> </A></FONT> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9"> </A> Integer (Interfaces.C.int'Last);
+ Bstate : Event_Mask;
+ <b>end</b> <b>record</b>;
+ <b>pragma</b> Convention (C, Mouse_Event);
+ <b>pragma</b> Pack (Mouse_Event);
+
+ <b>for</b> Mouse_Event <b>use</b>
+ <b>record</b>
+ Id <b>at</b> 0 <b>range</b> 0 .. 15;
+ X <b>at</b> 0 <b>range</b> 32 .. 63;
+ Y <b>at</b> 0 <b>range</b> 64 .. 95;
+ Z <b>at</b> 0 <b>range</b> 96 .. 127;
+ Bstate <b>at</b> 0 <b>range</b> 128 .. 159;
+ <b>end</b> <b>record</b>;
+ <FONT COLOR=green><EM>-- Please note: this rep. clause is generated and may be</EM></FONT>
+ <FONT COLOR=green><EM>-- different on your system.</EM></FONT>
+
+ Generation_Bit_Order : <b>constant</b> System.Bit_Order := System.Low_Order_First;
+ <FONT COLOR=green><EM>-- This constant may be different on your system.</EM></FONT>
+
+ <FONT COLOR=red><A NAME="183_4">BUTTON1_RELEASED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000001#;
+ <FONT COLOR=red><A NAME="184_4">BUTTON1_PRESSED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000002#;
+ <FONT COLOR=red><A NAME="185_4">BUTTON1_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000004#;
+ <FONT COLOR=red><A NAME="186_4">BUTTON1_DOUBLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000010#;
+ <FONT COLOR=red><A NAME="187_4">BUTTON1_TRIPLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000020#;
+ <FONT COLOR=red><A NAME="188_4">BUTTON1_RESERVED_EVENT</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000040#;
+ <FONT COLOR=red><A NAME="189_4">BUTTON2_RELEASED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000100#;
+ <FONT COLOR=red><A NAME="190_4">BUTTON2_PRESSED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000200#;
+ <FONT COLOR=red><A NAME="191_4">BUTTON2_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000400#;
+ <FONT COLOR=red><A NAME="192_4">BUTTON2_DOUBLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000001000#;
+ <FONT COLOR=red><A NAME="193_4">BUTTON2_TRIPLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000002000#;
+ <FONT COLOR=red><A NAME="194_4">BUTTON2_RESERVED_EVENT</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000004000#;
+ <FONT COLOR=red><A NAME="195_4">BUTTON3_RELEASED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000010000#;
+ <FONT COLOR=red><A NAME="196_4">BUTTON3_PRESSED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000020000#;
+ <FONT COLOR=red><A NAME="197_4">BUTTON3_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000040000#;
+ <FONT COLOR=red><A NAME="198_4">BUTTON3_DOUBLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000100000#;
+ <FONT COLOR=red><A NAME="199_4">BUTTON3_TRIPLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000200000#;
+ <FONT COLOR=red><A NAME="200_4">BUTTON3_RESERVED_EVENT</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000400000#;
+ <FONT COLOR=red><A NAME="201_4">BUTTON4_RELEASED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00001000000#;
+ <FONT COLOR=red><A NAME="202_4">BUTTON4_PRESSED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00002000000#;
+ <FONT COLOR=red><A NAME="203_4">BUTTON4_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00004000000#;
+ <FONT COLOR=red><A NAME="204_4">BUTTON4_DOUBLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00010000000#;
+ <FONT COLOR=red><A NAME="205_4">BUTTON4_TRIPLE_CLICKED</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00020000000#;
+ <FONT COLOR=red><A NAME="206_4">BUTTON4_RESERVED_EVENT</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00040000000#;
+ <FONT COLOR=red><A NAME="207_4">BUTTON_CTRL</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00100000000#;
+ <FONT COLOR=red><A NAME="208_4">BUTTON_SHIFT</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00200000000#;
+ <FONT COLOR=red><A NAME="209_4">BUTTON_ALT</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00400000000#;
+ <FONT COLOR=red><A NAME="210_4">ALL_MOUSE_EVENTS</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00777777777#;
+ <FONT COLOR=red><A NAME="211_4">BUTTON1_EVENTS</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000000077#;
+ <FONT COLOR=red><A NAME="212_4">BUTTON2_EVENTS</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000007700#;
+ <FONT COLOR=red><A NAME="213_4">BUTTON3_EVENTS</A></FONT> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := 8#00000770000#;
+ BUTTON4_EVENTS : <b>constant</b> Event_Mask := 8#00077000000#;
+
+
+ <A HREF="terminal_interface-curses-mouse__ads.htm#59_4">No_Events</A> : <b>constant</b> <A HREF="terminal_interface-curses-mouse__ads.htm#57_9">Event_Mask</A> := <A HREF="terminal_interface-curses-mouse__ads.htm>09_4">0</A>;
+ All_Events : <b>constant</b> Event_Mask := ALL_MOUSE_EVENTS;
+
+<b>end</b> Terminal_Interface.Curses.Mouse;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-panels-user_data.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-panels-user_data.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Panels.User_Data --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.11 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+
+<b>generic</b>
+ <b>type</b> User <b>is</b> <b>limited</b> <b>private</b>;
+ <b>type</b> <A HREF="terminal_interface__ads.htm#41_9">User_Access</A> <b>is</b> <b>access</b> <b>all</b> <A HREF="terminal_interface-curses-panels__ads.htm#43_35">User</A>;
+<b>package</b> Terminal_Interface.Curses.Panels.User_Data<A HREF="terminal_interface-curses-panels__ads.htm#43_35"> </A><b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Panels.User_Data);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/panel.3x.html">panel.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>procedure</b> Set_User_Data (Pan : <b>in</b> Panel;
+ Data : <b>in</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">set_panel_userptr</A></EM></FONT>
+ <b>pragma</b> Inline (Set_User_Data);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>procedure</b> Get_User_Data (Pan : <b>in</b> Panel;
+ Data : <b>out</b> User_Access);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">panel_userptr</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>function</b> Get_User_Data (Pan : <b>in</b> Panel) <b>return</b> User_Access;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">panel_userptr</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Get_User_Data);
+
+<b>end</b> Terminal_Interface.Curses.Panels.User_Data;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-panels.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-panels.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Panels --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.13 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>with</b> System;
+
+<b>package</b> Terminal_Interface.Curses.Panels <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses.Panels);
+ <b>pragma</b> Linker_Options ("-lpanel");
+ <b>pragma</b> Linker_Options ("-lAdaCurses");
+ <b>pragma</b> Linker_Options ("-lncurses");
+
+ <b>type</b> Panel <b>is</b> <b>private</b>;
+
+ <FONT COLOR=green><EM>---------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Interface constants --</EM></FONT>
+ <FONT COLOR=green><EM>---------------------------</EM></FONT>
+ Null_Panel : <b>constant</b> Panel;
+
+ <FONT COLOR=green><EM>-------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Exceptions --</EM></FONT>
+ <FONT COLOR=green><EM>-------------------</EM></FONT>
+
+ Panel_Exception : <b>exception</b>;
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/panel.3x.html">panel.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>function</b> Create (Win : Window) <b>return</b> Panel;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">new_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Create);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>function</b> New_Panel (Win : Window) <b>return</b> Panel <b>renames</b> Create;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">new_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (New_Panel);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>procedure</b> Bottom (Pan : <b>in</b> Panel);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">bottom_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Bottom);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_4">|</EM></FONT>
+ <b>procedure</b> Top (Pan : <b>in</b> Panel);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">top_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Top);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_5">|</EM></FONT>
+ <b>procedure</b> Show (Pan : <b>in</b> Panel);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">show_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Show);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_6">|</EM></FONT>
+ <b>procedure</b> Update_Panels;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">update_panels()</A></EM></FONT>
+ <b>pragma</b> Import (C, Update_Panels, "update_panels");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_7">|</EM></FONT>
+ <b>procedure</b> Hide (Pan : <b>in</b> Panel);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">hide_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Hide);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_8">|</EM></FONT>
+ <b>function</b> Get_Window (Pan : Panel) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">panel_window()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_9">|</EM></FONT>
+ <b>function</b> Panel_Window (Pan : Panel) <b>return</b> Window <b>renames</b> Get_Window;
+ <b>pragma</b> Inline (Panel_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_10">|</EM></FONT>
+ <b>procedure</b> Replace (<FONT COLOR=red><A NAME="112_23">Pan</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Panel</A>;
+ Win : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">replace_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Replace);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_11">|</EM></FONT>
+ <b>procedure</b> Move (Pan : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Panel</A>;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">move_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Move);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_12">|</EM></FONT>
+ <b>function</b> Is_Hidden (Pan : Panel) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">panel_hidden()</A></EM></FONT>
+ <b>pragma</b> Inline (Is_Hidden);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_13">|</EM></FONT>
+ <b>function</b> Above (Pan : Panel) <b>return</b> Panel;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">panel_above()</A></EM></FONT>
+ <b>pragma</b> Import (C, Above, "panel_above");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_14">|</EM></FONT>
+ <b>function</b> Below (Pan : Panel) <b>return</b> Panel;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">panel_below()</A></EM></FONT>
+ <b>pragma</b> Import (C, Below, "panel_below");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_15">|</EM></FONT>
+ <b>procedure</b> Delete (Pan : <b>in</b> <b>out</b> Panel);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/panel.3x.html">del_panel()</A></EM></FONT>
+ <b>pragma</b> Inline (Delete);
+
+ <b>private</b>
+ <b>type</b> Panel <b>is</b> <b>new</b> System.Storage_Elements.Integer_Address;
+ Null_Panel : <b>constant</b> Panel := 0;
+
+<b>end</b> Terminal_Interface.Curses.Panels;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io-complex_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io-complex_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO.Complex_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.8 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>with</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-numeri__ads.htm#19_13">Numerics</A>.<A HREF="a-ngcoty__ads.htm#43_22">Generic_Complex_Types</A>;
+
+<b>generic</b>
+ <b>with</b> <b>package</b> <FONT COLOR=red><A NAME="44_17">Complex_Types</A></FONT> <b>is</b> <b>new</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-numeri__ads.htm#19_13">Numerics</A>.<A HREF="a-ngcoty__ads.htm#43_22">Generic_Complex_Types</A> (<>);
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__ads.htm#44_35">Text_IO</A>.<FONT COLOR=red><A NAME="46_43">Complex_IO</A></FONT> <b>is</b>
+
+ <b>use</b> <A HREF="terminal_interface-curses-text_io-complex_io__ads.htm#44_17">Complex_Types</A>;
+
+ Default_Fore : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := 2;
+ Default_Aft : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="a-ngcoty__ads.htm#41_9">Real</A>'<b>Digits</b> - 1;
+ Default_Exp : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := 3;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-complex_io__adb.htm#48_14">Put</A><FONT COLOR=red><A NAME="54_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="55_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> <A HREF="a-ngcoty__ads.htm#47_9">Complex</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-complex_io__adb.htm#63_14">Put</A><FONT COLOR=red><A NAME="61_14"></A></FONT>
+ (Item : <b>in</b> <A HREF="a-ngcoty__ads.htm#47_9">Complex</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+<b>private</b>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-text_io-complex_io__ads.htm#61_14">Put</A>);
+
+<b>end</b> Terminal_Interface.Curses.Text_IO.Complex_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io-decimal_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io-decimal_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO.Decimal_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="42_9">Num</A></FONT> <b>is</b> <b>delta</b> <> <b>digits</b> <>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__ads.htm#44_35">Text_IO</A>.<FONT COLOR=red><A NAME="44_43">Decimal_IO</A></FONT> <b>is</b>
+
+ Default_Fore : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="terminal_interface-curses-text_io-decimal_io__ads.htm#42_9">Num</A>'Fore;
+ Default_Aft : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="terminal_interface-curses-text_io-decimal_io__ads.htm#42_9">Num</A>'Aft;
+ Default_Exp : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := 0;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-decimal_io__adb.htm#49_14">Put</A><FONT COLOR=red><A NAME="50_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="51_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-decimal_io__ads.htm#42_9">Num</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-decimal_io__adb.htm#66_14">Put</A><FONT COLOR=red><A NAME="57_14"></A></FONT>
+ (Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-decimal_io__ads.htm#42_9">Num</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+<b>private</b>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-text_io-decimal_io__ads.htm#57_14">Put</A>);
+
+<b>end</b> Terminal_Interface.Curses.Text_IO.Decimal_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io-enumeration_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io-enumeration_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO.Enumeration_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="42_9">Enum</A></FONT> <b>is</b> (<>);
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__ads.htm#44_35">Text_IO</A>.<FONT COLOR=red><A NAME="44_43">Enumeration_IO</A></FONT> <b>is</b>
+
+ Default_Width : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := 0;
+ Default_Setting : <A HREF="terminal_interface-curses-text_io__ads.htm#53_9">Type_Set</A> := <A HREF="terminal_interface-curses-text_io__ads.htm#53_46">Mixed_Case</A>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-enumeration_io__adb.htm#50_14">Put</A><FONT COLOR=red><A NAME="49_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="50_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-enumeration_io__ads.htm#42_9">Enum</A>;
+ Width : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Width;
+ Set : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#53_9">Type_Set</A> := Default_Setting);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-enumeration_io__adb.htm#71_14">Put</A><FONT COLOR=red><A NAME="55_14"></A></FONT>
+ (Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-enumeration_io__ads.htm#42_9">Enum</A>;
+ Width : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Width;
+ Set : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#53_9">Type_Set</A> := Default_Setting);
+
+<b>private</b>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-text_io-enumeration_io__ads.htm#55_14">Put</A>);
+
+<b>end</b> Terminal_Interface.Curses.Text_IO.Enumeration_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io-fixed_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io-fixed_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO.Fixed_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="42_9">Num</A></FONT> <b>is</b> <b>delta</b> <>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__ads.htm#44_35">Text_IO</A>.<FONT COLOR=red><A NAME="44_43">Fixed_IO</A></FONT> <b>is</b>
+
+ Default_Fore : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="terminal_interface-curses-text_io-fixed_io__ads.htm#42_9">Num</A>'Fore;
+ Default_Aft : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="terminal_interface-curses-text_io-fixed_io__ads.htm#42_9">Num</A>'Aft;
+ Default_Exp : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := 0;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-fixed_io__adb.htm#49_14">Put</A><FONT COLOR=red><A NAME="50_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="51_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-fixed_io__ads.htm#42_9">Num</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-fixed_io__adb.htm#66_14">Put</A><FONT COLOR=red><A NAME="57_14"></A></FONT>
+ (Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-fixed_io__ads.htm#42_9">Num</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+<b>private</b>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-text_io-fixed_io__ads.htm#57_14">Put</A>);
+
+<b>end</b> Terminal_Interface.Curses.Text_IO.Fixed_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io-float_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io-float_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO.Float_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="42_9">Num</A></FONT> <b>is</b> <b>digits</b> <>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__ads.htm#44_35">Text_IO</A>.<FONT COLOR=red><A NAME="44_43">Float_IO</A></FONT> <b>is</b>
+
+ Default_Fore : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := 2;
+ Default_Aft : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="terminal_interface-curses-text_io-float_io__ads.htm#42_9">Num</A>'<b>Digits</b> - 1;
+ Default_Exp : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := 3;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-float_io__adb.htm#49_14">Put</A><FONT COLOR=red><A NAME="50_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="51_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-float_io__ads.htm#42_9">Num</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-float_io__adb.htm#66_14">Put</A><FONT COLOR=red><A NAME="57_14"></A></FONT>
+ (Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-float_io__ads.htm#42_9">Num</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Fore;
+ Aft : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Aft;
+ Exp : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Exp);
+
+<b>private</b>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-text_io-float_io__ads.htm#57_14">Put</A>);
+
+<b>end</b> Terminal_Interface.Curses.Text_IO.Float_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io-integer_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io-integer_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO.Integer_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="42_9">Num</A></FONT> <b>is</b> <b>range</b> <>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__ads.htm#44_35">Text_IO</A>.<FONT COLOR=red><A NAME="44_43">Integer_IO</A></FONT> <b>is</b>
+
+ Default_Width : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="terminal_interface-curses-text_io-integer_io__ads.htm#42_9">Num</A>'Width;
+ Default_Base : <A HREF="terminal_interface-curses-text_io__ads.htm#51_12">Number_Base</A> := 10;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-integer_io__adb.htm#49_14">Put</A><FONT COLOR=red><A NAME="49_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="50_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-integer_io__ads.htm#42_9">Num</A>;
+ Width : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Width;
+ Base : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#51_12">Number_Base</A> := Default_Base);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-integer_io__adb.htm#61_14">Put</A><FONT COLOR=red><A NAME="55_14"></A></FONT>
+ (Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-integer_io__ads.htm#42_9">Num</A>;
+ Width : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Width;
+ Base : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#51_12">Number_Base</A> := Default_Base);
+
+<b>private</b>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-text_io-integer_io__ads.htm#55_14">Put</A>);
+
+<b>end</b> Terminal_Interface.Curses.Text_IO.Integer_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io-modular_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io-modular_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO.Modular_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.9 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>generic</b>
+ <b>type</b> <FONT COLOR=red><A NAME="42_9">Num</A></FONT> <b>is</b> <b>mod</b> <>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__ads.htm#44_35">Text_IO</A>.<FONT COLOR=red><A NAME="44_43">Modular_IO</A></FONT> <b>is</b>
+
+ Default_Width : <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := <A HREF="terminal_interface-curses-text_io-modular_io__ads.htm#42_9">Num</A>'Width;
+ Default_Base : <A HREF="terminal_interface-curses-text_io__ads.htm#51_12">Number_Base</A> := 10;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-modular_io__adb.htm#49_14">Put</A><FONT COLOR=red><A NAME="49_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="50_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-modular_io__ads.htm#42_9">Num</A>;
+ Width : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Width;
+ Base : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#51_12">Number_Base</A> := Default_Base);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io-modular_io__adb.htm#61_14">Put</A><FONT COLOR=red><A NAME="55_14"></A></FONT>
+ (Item : <b>in</b> <A HREF="terminal_interface-curses-text_io-modular_io__ads.htm#42_9">Num</A>;
+ Width : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#50_12">Field</A> := Default_Width;
+ Base : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#51_12">Number_Base</A> := Default_Base);
+
+<b>private</b>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses-text_io-modular_io__ads.htm#55_14">Put</A>);
+
+<b>end</b> Terminal_Interface.Curses.Text_IO.Modular_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses-text_io.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses-text_io.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses.Text_IO --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.11 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>with</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-textio__ads.htm#51_13">Text_IO</A>;
+<b>with</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>;
+
+<b>package</b> <A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>.<A HREF="terminal_interface-curses__ads.htm#48_28">Curses</A>.<A HREF="terminal_interface-curses-text_io__adb.htm#41_40">Text_IO</A><FONT COLOR=red><A NAME="44_35"></A></FONT> <b>is</b>
+
+ <b>use</b> <b>type</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-textio__ads.htm#51_13">Text_IO</A>.<A HREF="a-textio__ads.htm#66_9">Count</A>;
+ <b>subtype</b> <FONT COLOR=red><A NAME="47_12">Count</A></FONT> <b>is</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-textio__ads.htm#51_13">Text_IO</A>.<A HREF="a-textio__ads.htm#66_9">Count</A>;
+ <b>subtype</b> <FONT COLOR=red><A NAME="48_12">Positive_Count</A></FONT> <b>is</b> <A HREF="terminal_interface-curses-text_io__ads.htm#47_12">Count</A> <b>range</b> 1 .. <A HREF="terminal_interface-curses-text_io__ads.htm#47_12">Count</A>'Last;
+
+ <b>subtype</b> <FONT COLOR=red><A NAME="50_12">Field</A></FONT> <b>is</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-textio__ads.htm#51_13">Text_IO</A>.<A HREF="a-textio__ads.htm#76_12">Field</A>;
+ <b>subtype</b> <FONT COLOR=red><A NAME="51_12">Number_Base</A></FONT> <b>is</b> Integer <b>range</b> 2 .. 16;
+
+ <b>type</b> <FONT COLOR=red><A NAME="53_9">Type_Set</A></FONT> <b>is</b> (Lower_Case, Upper_Case, Mixed_Case);
+
+ <FONT COLOR=green><EM>-- For most of the routines you will see a version without a Window</EM></FONT>
+ <FONT COLOR=green><EM>-- type parameter. They will operate on a default window, which can</EM></FONT>
+ <FONT COLOR=green><EM>-- be set by the user. It is initially equal to Standard_Window.</EM></FONT>
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#45_14">Set_Window</A><FONT COLOR=red><A NAME="59_14"></A></FONT> (<FONT COLOR=red><A NAME="59_26">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>);
+ <FONT COLOR=green><EM>-- Set Win as the default window</EM></FONT>
+
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#51_13">Get_Window</A><FONT COLOR=red><A NAME="62_13"></A></FONT> <b>return</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ <FONT COLOR=green><EM>-- Get the current default window</EM></FONT>
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#62_14">Flush</A><FONT COLOR=red><A NAME="65_14"></A></FONT> (<FONT COLOR=red><A NAME="65_21">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>);
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#68_14">Flush</A><FONT COLOR=red><A NAME="66_14"></A></FONT>;
+
+ <FONT COLOR=green><EM>--------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Specification of line and page lengths --</EM></FONT>
+ <FONT COLOR=green><EM>--------------------------------------------</EM></FONT>
+
+ <FONT COLOR=green><EM>-- There are no set routines in this package. I assume, that you allocate</EM></FONT>
+ <FONT COLOR=green><EM>-- the window with an appropriate size.</EM></FONT>
+ <FONT COLOR=green><EM>-- A scroll-window is interpreted as an page with unbounded page length,</EM></FONT>
+ <FONT COLOR=green><EM>-- i.e. it returns the conventional 0 as page length.</EM></FONT>
+
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#83_13">Line_Length</A><FONT COLOR=red><A NAME="77_13"></A></FONT> (<FONT COLOR=red><A NAME="77_26">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>) <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#47_12">Count</A>;
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#95_13">Line_Length</A><FONT COLOR=red><A NAME="78_13"></A></FONT> <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#47_12">Count</A>;
+
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#101_13">Page_Length</A><FONT COLOR=red><A NAME="80_13"></A></FONT> (<FONT COLOR=red><A NAME="80_26">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>) <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#47_12">Count</A>;
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#117_13">Page_Length</A><FONT COLOR=red><A NAME="81_13"></A></FONT> <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#47_12">Count</A>;
+
+ <FONT COLOR=green><EM>------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Column, Line, and Page Control --</EM></FONT>
+ <FONT COLOR=green><EM>------------------------------------</EM></FONT>
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#126_14">New_Line</A><FONT COLOR=red><A NAME="86_14"></A></FONT> (<FONT COLOR=red><A NAME="86_24">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>; Spacing : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A> := 1);
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#143_14">New_Line</A><FONT COLOR=red><A NAME="87_14"></A></FONT> (Spacing : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A> := 1);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#149_14">New_Page</A><FONT COLOR=red><A NAME="89_14"></A></FONT> (<FONT COLOR=red><A NAME="89_24">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>);
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#155_14">New_Page</A><FONT COLOR=red><A NAME="90_14"></A></FONT>;
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#161_14">Set_Col</A><FONT COLOR=red><A NAME="92_14"></A></FONT> (<FONT COLOR=red><A NAME="92_23">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>; To : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>);
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#189_14">Set_Col</A><FONT COLOR=red><A NAME="93_14"></A></FONT> (To : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#195_14">Set_Line</A><FONT COLOR=red><A NAME="95_14"></A></FONT> (<FONT COLOR=red><A NAME="95_24">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>; To : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>);
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#218_14">Set_Line</A><FONT COLOR=red><A NAME="96_14"></A></FONT> (To : <b>in</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>);
+
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#224_13">Col</A><FONT COLOR=red><A NAME="98_13"></A></FONT> (<FONT COLOR=red><A NAME="98_18">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>) <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>;
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#238_13">Col</A><FONT COLOR=red><A NAME="99_13"></A></FONT> <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>;
+
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#244_13">Line</A><FONT COLOR=red><A NAME="101_13"></A></FONT> (<FONT COLOR=red><A NAME="101_19">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>) <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>;
+ <b>function</b> <A HREF="terminal_interface-curses-text_io__adb.htm#258_13">Line</A><FONT COLOR=red><A NAME="102_13"></A></FONT> <b>return</b> <A HREF="terminal_interface-curses-text_io__ads.htm#48_12">Positive_Count</A>;
+
+ <FONT COLOR=green><EM>-----------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Characters-Output --</EM></FONT>
+ <FONT COLOR=green><EM>-----------------------</EM></FONT>
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#268_14">Put</A><FONT COLOR=red><A NAME="108_14"></A></FONT> (<FONT COLOR=red><A NAME="108_19">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>; Item : <b>in</b> Character);
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#286_14">Put</A><FONT COLOR=red><A NAME="109_14"></A></FONT> (Item : <b>in</b> Character);
+
+ <FONT COLOR=green><EM>--------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Strings-Output --</EM></FONT>
+ <FONT COLOR=green><EM>--------------------</EM></FONT>
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#296_14">Put</A><FONT COLOR=red><A NAME="115_14"></A></FONT> (<FONT COLOR=red><A NAME="115_19">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>; Item : <b>in</b> String);
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#314_14">Put</A><FONT COLOR=red><A NAME="116_14"></A></FONT> (Item : <b>in</b> String);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#320_14">Put_Line</A><FONT COLOR=red><A NAME="118_14"></A></FONT>
+ (<FONT COLOR=red><A NAME="119_7">Win</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Item : <b>in</b> String);
+
+ <b>procedure</b> <A HREF="terminal_interface-curses-text_io__adb.htm#329_14">Put_Line</A><FONT COLOR=red><A NAME="122_14"></A></FONT>
+ (Item : <b>in</b> String);
+
+ <FONT COLOR=green><EM>-- Exceptions</EM></FONT>
+
+ <FONT COLOR=red><A NAME="127_4">Status_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#21_4">Status_Error</A>;
+ <FONT COLOR=red><A NAME="128_4">Mode_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#22_4">Mode_Error</A>;
+ <FONT COLOR=red><A NAME="129_4">Name_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#23_4">Name_Error</A>;
+ <FONT COLOR=red><A NAME="130_4">Use_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#24_4">Use_Error</A>;
+ <FONT COLOR=red><A NAME="131_4">Device_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#25_4">Device_Error</A>;
+ <FONT COLOR=red><A NAME="132_4">End_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#26_4">End_Error</A>;
+ <FONT COLOR=red><A NAME="133_4">Data_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#27_4">Data_Error</A>;
+ <FONT COLOR=red><A NAME="134_4">Layout_Error</A></FONT> : <b>exception</b> <b>renames</b> <A HREF="ada__ads.htm#18_9">Ada</A>.<A HREF="a-ioexce__ads.htm#18_13">IO_Exceptions</A>.<A HREF="a-ioexce__ads.htm#28_4">Layout_Error</A>;
+
+<b>end</b> Terminal_Interface.Curses.Text_IO;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface-curses.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface-curses.ads </H1></DIV><HR>
+<PRE>
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface.Curses --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A> (<A HREF="mailto:juergen.pfeifer@gmx.net">juergen.pfeifer@gmx.net</A>) 1996 --</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- @Revision: 1.24 @</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 00.93</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- curses binding.</EM></FONT>
+<FONT COLOR=green><EM>-- This module is generated. Please don't change it manually!</EM></FONT>
+<FONT COLOR=green><EM>-- Run the generator instead.</EM></FONT>
+<FONT COLOR=green><EM>-- |</EM></FONT>
+<b>with</b> <A HREF="interfac__ads.htm>3_9">System</A>.Storage_Elements;
+<b>with</b> Interfaces.C; <FONT COLOR=green><EM>-- We need this for some assertions.</EM></FONT>
+
+<b>package</b> Terminal_Interface.Curses <b>is</b>
+ <b>pragma</b> Preelaborate (Terminal_Interface.Curses);
+ <b>pragma</b> Linker_Options ("-lAdaCurses");
+ <b>pragma</b> Linker_Options ("-lncurses");
+
+ <FONT COLOR=red><A NAME="54_4">NC_Major_Version</A></FONT> : <b>constant</b> := 5;<FONT COLOR=green><EM>-- Major version of the library</EM></FONT>
+ NC_Minor_Version : <b>constant</b> := 0;<FONT COLOR=green><EM>-- Minor version of the library</EM></FONT>
+ NC_Version : <b>constant</b> String := "5.0"; <FONT COLOR=green><EM>-- Version of library</EM></FONT>
+
+ <b>type</b> Window <b>is</b> <b>private</b>;
+ Null_Window : <b>constant</b> Window;
+
+ <b>type</b> <FONT COLOR=red><A NAME="61_9">Line_Position</A></FONT> <b>is</b> <b>new</b> Natural;<FONT COLOR=green><EM>-- line coordinate</EM></FONT>
+ <b>type</b> Column_Position <b>is</b> <b>new</b> Natural;<FONT COLOR=green><EM>-- column coordinate</EM></FONT>
+
+ <b>subtype</b> Line_Count <b>is</b> Line_Position <b>range</b> 1 .. Line_Position'Last;
+ <FONT COLOR=green><EM>-- Type to count lines. We do not allow null windows, so must be positive</EM></FONT>
+ <b>subtype</b> Column_Count <b>is</b> Column_Position <b>range</b> 1 .. Column_Position'Last;
+ <FONT COLOR=green><EM>-- Type to count columns. We do not allow null windows, so must be positive</EM></FONT>
+
+ <b>type</b> Key_Code <b>is</b> <b>new</b> Natural;
+ <FONT COLOR=green><EM>-- That is anything including real characters, special keys and logical</EM></FONT>
+ <FONT COLOR=green><EM>-- request codes.</EM></FONT>
+
+ <b>subtype</b> Real_Key_Code <b>is</b> Key_Code <b>range</b> 0 .. 8#777#;
+ <FONT COLOR=green><EM>-- This are the codes that potentially represent a real keystroke.</EM></FONT>
+ <FONT COLOR=green><EM>-- Not all codes may be possible on a specific terminal. To check the</EM></FONT>
+ <FONT COLOR=green><EM>-- availability of a special key, the Has_Key function is provided.</EM></FONT>
+
+ <b>subtype</b> Special_Key_Code <b>is</b> Real_Key_Code
+ <b>range</b> 8#400# .. Real_Key_Code'Last;
+ <FONT COLOR=green><EM>-- Type for a function- or special key number</EM></FONT>
+
+ <b>subtype</b> Normal_Key_Code <b>is</b> Real_Key_Code <b>range</b>
+ Character'Pos (Character'First) .. Character'Pos (Character'Last);
+ <FONT COLOR=green><EM>-- This are the codes for regular (incl. non-graphical) characters.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- Constants for function- and special keys</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ Key_None : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#400#;
+ Key_Code_Yes : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#400#;
+ Key_Min : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#401#;
+ Key_Break : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#401#;
+ Key_Cursor_Down : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#402#;
+ Key_Cursor_Up : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#403#;
+ Key_Cursor_Left : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#404#;
+ Key_Cursor_Right : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#405#;
+ Key_Home : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#406#;
+ Key_Backspace : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#407#;
+ Key_F0 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#410#;
+ Key_F1 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#411#;
+ Key_F2 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#412#;
+ Key_F3 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#413#;
+ Key_F4 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#414#;
+ Key_F5 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#415#;
+ Key_F6 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#416#;
+ Key_F7 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#417#;
+ Key_F8 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#420#;
+ Key_F9 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#421#;
+ Key_F10 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#422#;
+ Key_F11 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#423#;
+ Key_F12 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#424#;
+ Key_F13 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#425#;
+ Key_F14 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#426#;
+ Key_F15 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#427#;
+ Key_F16 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#430#;
+ Key_F17 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#431#;
+ Key_F18 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#432#;
+ Key_F19 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#433#;
+ Key_F20 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#434#;
+ Key_F21 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#435#;
+ Key_F22 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#436#;
+ Key_F23 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#437#;
+ Key_F24 : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#440#;
+ Key_Delete_Line : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#510#;
+ Key_Insert_Line : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#511#;
+ Key_Delete_Char : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#512#;
+ Key_Insert_Char : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#513#;
+ Key_Exit_Insert_Mode : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#514#;
+ Key_Clear_Screen : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#515#;
+ Key_Clear_End_Of_Screen : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#516#;
+ Key_Clear_End_Of_Line : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#517#;
+ Key_Scroll_1_Forward : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#520#;
+ Key_Scroll_1_Backward : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#521#;
+ Key_Next_Page : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#522#;
+ Key_Previous_Page : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#523#;
+ Key_Set_Tab : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#524#;
+ Key_Clear_Tab : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#525#;
+ Key_Clear_All_Tabs : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#526#;
+ Key_Enter_Or_Send : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#527#;
+ Key_Soft_Reset : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#530#;
+ Key_Reset : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#531#;
+ Key_Print : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#532#;
+ Key_Bottom : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#533#;
+ Key_Upper_Left_Of_Keypad : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#534#;
+ Key_Upper_Right_Of_Keypad : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#535#;
+ Key_Center_Of_Keypad : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#536#;
+ Key_Lower_Left_Of_Keypad : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#537#;
+ Key_Lower_Right_Of_Keypad : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#540#;
+ Key_Back_Tab : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#541#;
+ Key_Beginning : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#542#;
+ Key_Cancel : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#543#;
+ Key_Close : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#544#;
+ Key_Command : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#545#;
+ Key_Copy : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#546#;
+ Key_Create : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#547#;
+ Key_End : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#550#;
+ Key_Exit : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#551#;
+ Key_Find : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#552#;
+ Key_Help : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#553#;
+ Key_Mark : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#554#;
+ Key_Message : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#555#;
+ Key_Move : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#556#;
+ Key_Next : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#557#;
+ Key_Open : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#560#;
+ Key_Options : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#561#;
+ Key_Previous : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#562#;
+ Key_Redo : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#563#;
+ Key_Reference : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#564#;
+ Key_Refresh : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#565#;
+ Key_Replace : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#566#;
+ Key_Restart : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#567#;
+ Key_Resume : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#570#;
+ Key_Save : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#571#;
+ Key_Shift_Begin : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#572#;
+ Key_Shift_Cancel : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#573#;
+ Key_Shift_Command : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#574#;
+ Key_Shift_Copy : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#575#;
+ Key_Shift_Create : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#576#;
+ Key_Shift_Delete_Char : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#577#;
+ Key_Shift_Delete_Line : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#600#;
+ Key_Select : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#601#;
+ Key_Shift_End : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#602#;
+ Key_Shift_Clear_End_Of_Line : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#603#;
+ Key_Shift_Exit : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#604#;
+ Key_Shift_Find : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#605#;
+ Key_Shift_Help : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#606#;
+ Key_Shift_Home : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#607#;
+ Key_Shift_Insert_Char : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#610#;
+ Key_Shift_Cursor_Left : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#611#;
+ Key_Shift_Message : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#612#;
+ Key_Shift_Move : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#613#;
+ Key_Shift_Next_Page : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#614#;
+ Key_Shift_Options : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#615#;
+ Key_Shift_Previous_Page : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#616#;
+ Key_Shift_Print : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#617#;
+ Key_Shift_Redo : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#620#;
+ Key_Shift_Replace : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#621#;
+ Key_Shift_Cursor_Right : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#622#;
+ Key_Shift_Resume : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#623#;
+ Key_Shift_Save : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#624#;
+ Key_Shift_Suspend : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#625#;
+ Key_Shift_Undo : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#626#;
+ Key_Suspend : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#627#;
+ Key_Undo : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#630#;
+ Key_Mouse : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> := 8#631#;
+ Key_Resize : <b>constant</b> Special_Key_Code := 8#632#;
+
+ Key_Max : <b>constant</b> Special_Key_Code
+ := Special_Key_Code'Last;
+
+ <b>subtype</b> User_Key_Code <b>is</b> Key_Code
+ <b>range</b> (Key_Max + 129) .. Key_Code'Last;
+ <FONT COLOR=green><EM>-- This is reserved for user defined key codes. The range between Key_Max</EM></FONT>
+ <FONT COLOR=green><EM>-- and the first user code is reserved for subsystems like menu and forms.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- For those who like to use the original key names we produce them were</EM></FONT>
+ <FONT COLOR=green><EM>-- they differ from the original. Please note that they may differ in</EM></FONT>
+ <FONT COLOR=green><EM>-- lower/upper case.</EM></FONT>
+ KEY_DOWN : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Cursor_Down;
+ KEY_UP : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Cursor_Up;
+ KEY_LEFT : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Cursor_Left;
+ KEY_RIGHT : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Cursor_Right;
+ KEY_DL : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Delete_Line;
+ KEY_IL : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Insert_Line;
+ KEY_DC : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Delete_Char;
+ KEY_IC : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Insert_Char;
+ KEY_EIC : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Exit_Insert_Mode;
+ KEY_CLEAR : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Clear_Screen;
+ KEY_EOS : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Clear_End_Of_Screen;
+ KEY_EOL : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Clear_End_Of_Line;
+ KEY_SF : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Scroll_1_Forward;
+ KEY_SR : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Scroll_1_Backward;
+ KEY_NPAGE : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Next_Page;
+ KEY_PPAGE : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Previous_Page;
+ KEY_STAB : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Set_Tab;
+ KEY_CTAB : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Clear_Tab;
+ KEY_CATAB : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Clear_All_Tabs;
+ KEY_ENTER : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Enter_Or_Send;
+ KEY_SRESET : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Soft_Reset;
+ KEY_LL : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Bottom;
+ KEY_A1 : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Upper_Left_Of_Keypad;
+ KEY_A3 : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Upper_Right_Of_Keypad;
+ KEY_B2 : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Center_Of_Keypad;
+ KEY_C1 : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Lower_Left_Of_Keypad;
+ KEY_C3 : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Lower_Right_Of_Keypad;
+ KEY_BTAB : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Back_Tab;
+ KEY_BEG : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Beginning;
+ KEY_SBEG : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Begin;
+ KEY_SCANCEL : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Cancel;
+ KEY_SCOMMAND : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Command;
+ KEY_SCOPY : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Copy;
+ KEY_SCREATE : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Create;
+ KEY_SDC : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Delete_Char;
+ KEY_SDL : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Delete_Line;
+ KEY_SEND : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_End;
+ KEY_SEOL : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Clear_End_Of_Line;
+ KEY_SEXIT : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Exit;
+ KEY_SFIND : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Find;
+ KEY_SHELP : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Help;
+ KEY_SHOME : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Home;
+ KEY_SIC : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Insert_Char;
+ KEY_SLEFT : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Cursor_Left;
+ KEY_SMESSAGE : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Message;
+ KEY_SMOVE : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Move;
+ KEY_SNEXT : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Next_Page;
+ KEY_SOPTIONS : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Options;
+ KEY_SPREVIOUS : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Previous_Page;
+ KEY_SPRINT : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Print;
+ KEY_SREDO : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Redo;
+ KEY_SREPLACE : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Replace;
+ KEY_SRIGHT : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Cursor_Right;
+ KEY_SRSUME : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Resume;
+ KEY_SSAVE : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Save;
+ KEY_SSUSPEND : <A HREF="terminal_interface-curses__ads.htm#77_12">Special_Key_Code</A> <b>renames</b> Key_Shift_Suspend;
+ KEY_SUNDO : Special_Key_Code <b>renames</b> Key_Shift_Undo;
+
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+
+ <b>type</b><A HREF="terminal_interface-curses__ads.htm>77_9"> </A>Color_Number <b>is</b> <b>range</b><A HREF="interfac__ads.htm>3_9"> </A>0 .. Integer<A HREF="i-c__ads.htm#36_9"> </A>(Interfaces.C.short'Last);
+ <b>for</b> Color_Number'Size <b>use</b> Interfaces.C.short'Size;
+ <FONT COLOR=green><EM>-- (n)curses uses a short for the color index</EM></FONT>
+ <FONT COLOR=green><EM>-- The model is, that a Color_Number is an index into an array of</EM></FONT>
+ <FONT COLOR=green><EM>-- (potentially) definable colors. Some of those indices are</EM></FONT>
+ <FONT COLOR=green><EM>-- predefined (see below), although they may not really exist.</EM></FONT>
+
+ Black : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A> := 0;
+ Red : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A> := 1;
+ Green : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A> := 2;
+ Yellow : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A> := 3;
+ Blue : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A> := 4;
+ Magenta : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A> := 5;
+ Cyan : <b>constant</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A> := 6;
+ White : <b>constant</b> Color_Number := 7;
+
+ <b>type</b><A HREF="terminal_interface-curses__ads.htm>93_9"> </A>RGB_Value <b>is</b> <b>range</b><A HREF="interfac__ads.htm>3_9"> </A>0 .. Integer<A HREF="i-c__ads.htm#36_9"> </A>(Interfaces.C.short'Last);
+ <b>for</b> RGB_Value'Size <b>use</b> Interfaces.C.short'Size;
+ <FONT COLOR=green><EM>-- Some system may allow to redefine a color by setting RGB values.</EM></FONT>
+
+ <b>type</b><A HREF="terminal_interface-curses__ads.htm>97_9"> </A>Color_Pair <b>is</b> <b>range</b> 0 .. 255;
+ <b>for</b> Color_Pair'Size <b>use</b> 8;
+ <b>subtype</b> Redefinable_Color_Pair <b>is</b> Color_Pair <b>range</b> 1 .. 255;
+ <FONT COLOR=green><EM>-- (n)curses reserves 1 Byte for the color-pair number. Color Pair 0</EM></FONT>
+ <FONT COLOR=green><EM>-- is fixed (Black & White). A color pair is simply a combination of</EM></FONT>
+ <FONT COLOR=green><EM>-- two colors described by Color_Numbers, one for the foreground and</EM></FONT>
+ <FONT COLOR=green><EM>-- the other for the background</EM></FONT>
+
+ <b>type</b> Character_Attribute_Set <b>is</b>
+ <b>record</b>
+ Stand_Out : Boolean;
+ Under_Line : Boolean;
+ Reverse_Video : Boolean;
+ Blink : Boolean;
+ Dim_Character : Boolean;
+ Bold_Character : Boolean;
+ Alternate_Character_Set : Boolean;
+ Invisible_Character : Boolean;
+ Protected_Character : Boolean;
+ Horizontal : Boolean;
+ Left : Boolean;
+ Low : Boolean;
+ Right : Boolean;
+ Top : Boolean;
+ Vertical : Boolean;
+ <b>end</b> <b>record</b><A HREF="terminal_interface-curses__ads.htm#305_9">;</A>
+ <b>pragma</b> Pack (Character_Attribute_Set);
+ <b>pragma</b> Convention (C, Character_Attribute_Set);
+
+ <b>for</b> Character_Attribute_Set <b>use</b>
+ <b>record</b>
+ Stand_Out <b>at</b> 0 <b>range</b> 0 .. 0;
+ Under_Line <b>at</b> 0 <b>range</b> 1 .. 1;
+ Reverse_Video <b>at</b> 0 <b>range</b> 2 .. 2;
+ Blink <b>at</b> 0 <b>range</b> 3 .. 3;
+ Dim_Character <b>at</b> 0 <b>range</b> 4 .. 4;
+ Bold_Character <b>at</b> 0 <b>range</b> 5 .. 5;
+ Alternate_Character_Set <b>at</b> 0 <b>range</b> 6 .. 6;
+ Invisible_Character <b>at</b> 0 <b>range</b> 7 .. 7;
+ Protected_Character <b>at</b> 0 <b>range</b> 8 .. 8;
+ Horizontal <b>at</b> 0 <b>range</b> 9 .. 9;
+ Left <b>at</b> 0 <b>range</b> 10 .. 10;
+ Low <b>at</b> 0 <b>range</b> 11 .. 11;
+ Right <b>at</b> 0 <b>range</b> 12 .. 12;
+ Top <b>at</b> 0 <b>range</b> 13 .. 13;
+ Vertical <b>at</b> 0 <b>range</b> 14 .. 14;
+ <b>end</b> <b>record</b>;
+ <b>for</b> Character_Attribute_Set'Size <b>use</b> 16;
+ <FONT COLOR=green><EM>-- Please note: this rep. clause is generated and may be</EM></FONT>
+ <FONT COLOR=green><EM>-- different on your system.</EM></FONT>
+ <FONT COLOR=green><EM>-- (n)curses uses all but the lowes 16 Bits for Attributes.</EM></FONT>
+
+ Normal_Video : <b>constant</b> Character_Attribute_Set := (<b>others</b> => False);
+
+ <b>type</b> Attributed_Character <b>is</b>
+ <b>record</b>
+ Attr : <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A>;
+ Color : Color_Pair;
+ Ch : Character;
+ <b>end</b> <b>record</b>;
+ <b>pragma</b> Convention (C, Attributed_Character);
+ <FONT COLOR=green><EM>-- This is the counterpart for the chtype in C.</EM></FONT>
+
+ <b>for</b> Attributed_Character <b>use</b>
+ <b>record</b>
+ Ch <b>at</b> 0 <b>range</b> 0 .. 7;
+ Color <b>at</b> 0 <b>range</b> 8 .. 15;
+ Attr <b>at</b> 0 <b>range</b> 16 .. 31;
+ <b>end</b> <b>record</b>;
+ <b>for</b> Attributed_Character'Size <b>use</b> 32;
+ <FONT COLOR=green><EM>-- Please note: this rep. clause is generated and may be</EM></FONT>
+ <FONT COLOR=green><EM>-- different on your system.</EM></FONT>
+
+ Default_Character : <b>constant</b> Attributed_Character
+ := (Ch => <A HREF="terminal_interface-curses__ads.htm>97_9">Character</A>'First,
+ Color => Color_Pair'First,
+ Attr => (<b>others</b> => False)); <FONT COLOR=green><EM>-- preelaboratable Normal_Video</EM></FONT>
+
+ <b>type</b> Attributed_String <b>is</b> <b>array</b> (Positive <b>range</b> <>) <b>of</b> Attributed_Character;
+ <b>pragma</b> Pack (Attributed_String);
+ <FONT COLOR=green><EM>-- In this binding we allow strings of attributed characters.</EM></FONT>
+
+ <FONT COLOR=green><EM>------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- Exceptions --</EM></FONT>
+ <FONT COLOR=green><EM>------------------</EM></FONT>
+ <FONT COLOR=red><A NAME="383_4">Curses_Exception</A></FONT> : <b>exception</b>;
+ Wrong_Curses_Version : <b>exception</b>;
+
+ <FONT COLOR=green><EM>-- Those exceptions are raised by the ETI (Extended Terminal Interface)</EM></FONT>
+ <FONT COLOR=green><EM>-- subpackets for Menu and Forms handling.</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=red><A NAME="389_4">Eti_System_Error</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="390_4">Eti_Bad_Argument</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="391_4">Eti_Posted</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="392_4">Eti_Connected</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="393_4">Eti_Bad_State</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="394_4">Eti_No_Room</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="395_4">Eti_Not_Posted</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="396_4">Eti_Unknown_Command</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="397_4">Eti_No_Match</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="398_4">Eti_Not_Selectable</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="399_4">Eti_Not_Connected</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="400_4">Eti_Request_Denied</A></FONT> : <b>exception</b>;
+ <FONT COLOR=red><A NAME="401_4">Eti_Invalid_Field</A></FONT> : <b>exception</b>;
+ Eti_Current : <b>exception</b>;
+
+ <FONT COLOR=green><EM>--------------------------------------------------------------------------</EM></FONT>
+ <FONT COLOR=green><EM>-- External C variables</EM></FONT>
+ <FONT COLOR=green><EM>-- Conceptually even in C this are kind of constants, but they are</EM></FONT>
+ <FONT COLOR=green><EM>-- initialized and sometimes changed by the library routines at runtime</EM></FONT>
+ <FONT COLOR=green><EM>-- depending on the type of terminal. I believe the best way to model</EM></FONT>
+ <FONT COLOR=green><EM>-- this is to use functions.</EM></FONT>
+ <FONT COLOR=green><EM>--------------------------------------------------------------------------</EM></FONT>
+
+ <b>function</b> Lines <A HREF="terminal_interface-curses__ads.htm#411_13"> </A> <b>return</b> Line_Count;
+ <b>pragma</b> Inline (Lines);
+
+ <b>function</b> Columns <b>return</b> Column_Count;
+ <b>pragma</b> Inline (Columns);
+
+ <b>function</b> Tab_Size <b>return</b> Natural;
+ <b>pragma</b> Inline (Tab_Size);
+
+ <b>function</b> Number_Of_Colors <b>return</b> Natural;
+ <b>pragma</b> Inline (Number_Of_Colors);
+
+ <b>function</b> Number_Of_Color_Pairs <b>return</b> Natural;
+ <b>pragma</b> Inline (Number_Of_Color_Pairs);
+
+ ACS_Map : <b>array</b> (Character'Val (0) .. Character'Val (127)) <b>of</b>
+ Attributed_Character;
+ <b>pragma</b> Import (C, ACS_Map, "acs_map");
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>-- Constants for several symbols from the Alternate Character Set</EM></FONT>
+ <FONT COLOR=green><EM>-- You must use this constants as indices into the ACS_Map array</EM></FONT>
+ <FONT COLOR=green><EM>-- to get the corresponding attributed character at runtime.</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ ACS_Upper_Left_Corner : <b>constant</b> Character := 'l';
+ ACS_Lower_Left_Corner : <b>constant</b> Character := 'm';
+ ACS_Upper_Right_Corner : <b>constant</b> Character := 'k';
+ ACS_Lower_Right_Corner : <b>constant</b> Character := 'j';
+ ACS_Left_Tee : <b>constant</b> Character := 't';
+ ACS_Right_Tee : <b>constant</b> Character := 'u';
+ ACS_Bottom_Tee : <b>constant</b> Character := 'v';
+ ACS_Top_Tee : <b>constant</b> Character := 'w';
+ ACS_Horizontal_Line : <b>constant</b> Character := 'q';
+ ACS_Vertical_Line : <b>constant</b> Character := 'x';
+ ACS_Plus_Symbol : <b>constant</b> Character := 'n';
+ ACS_Scan_Line_1 : <b>constant</b> Character := 'o';
+ ACS_Scan_Line_9 : <b>constant</b> Character := 's';
+ ACS_Diamond : <b>constant</b> Character := Character'Val (96);
+ ACS_Checker_Board : <b>constant</b> Character := 'a';
+ ACS_Degree : <b>constant</b> Character := 'f';
+ ACS_Plus_Minus : <b>constant</b> Character := 'g';
+ ACS_Bullet : <b>constant</b> Character := '~';
+ ACS_Left_Arrow : <b>constant</b> Character := ',';
+ ACS_Right_Arrow : <b>constant</b> Character := '+';
+ ACS_Down_Arrow : <b>constant</b> Character := '.';
+ ACS_Up_Arrow : <b>constant</b> Character := '-';
+ ACS_Board_Of_Squares : <b>constant</b> Character := 'h';
+ ACS_Lantern : <b>constant</b> Character := 'i';
+ ACS_Solid_Block : <b>constant</b> Character := '0';
+ ACS_Scan_Line_3 : <b>constant</b> Character := 'p';
+ ACS_Scan_Line_7 : <b>constant</b> Character := 'r';
+ ACS_Less_Or_Equal : <b>constant</b> Character := 'y';
+ ACS_Greater_Or_Equal : <b>constant</b> Character := 'z';
+ ACS_PI : <b>constant</b> Character := '{';
+ ACS_Not_Equal : <b>constant</b> Character := '|';
+ ACS_Sterling : <b>constant</b> Character := '}';
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_initscr.3x.html">curs_initscr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Not implemented: newterm, set_term, delscreen</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_1">|</EM></FONT>
+ <b>function</b> Standard_Window <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_initscr.3x.html">stdscr</A></EM></FONT>
+ <b>pragma</b> Inline (Standard_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_2">|</EM></FONT>
+ <b>procedure</b> Init_Screen;
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_3">|</EM></FONT>
+ <b>procedure</b> Init_Windows <b>renames</b> Init_Screen;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_initscr.3x.html">initscr()</A></EM></FONT>
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses__ads.htm#482_14">Init_Screen</A>);
+ <b>pragma</b> Inline (Init_Windows);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_4">|</EM></FONT>
+ <b>procedure</b> End_Windows;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_initscr.3x.html">endwin()</A></EM></FONT>
+ <b>procedure</b> End_Screen <b>renames</b> End_Windows;
+ <b>pragma</b> Inline (<A HREF="terminal_interface-curses__ads.htm#490_14">End_Windows</A>);
+ <b>pragma</b> Inline (End_Screen);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_5">|</EM></FONT>
+ <b>function</b> Is_End_Window <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_initscr.3x.html">isendwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Is_End_Window);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_move.3x.html">curs_move.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_6">|</EM></FONT>
+ <b>procedure</b> Move_Cursor (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_move.3x.html">wmove()</A></EM></FONT>
+ <b>pragma</b> Inline (Move_Cursor);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_addch.3x.html">curs_addch.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_7">|</EM></FONT>
+ <b>procedure</b> Add (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A> := Standard_Window;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_addch.3x.html">waddch()</A></EM></FONT>
+
+ <b>procedure</b> Add (Win : <b>in</b> Window := Standard_Window;
+ Ch : <b>in</b> Character);
+ <FONT COLOR=green><EM>-- Add a single character at the current logical cursor position to</EM></FONT>
+ <FONT COLOR=green><EM>-- the window. Use the current windows attributes.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_8">|</EM></FONT>
+ <b>procedure</b> Add
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Column_Position</A>;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_addch.3x.html">mvwaddch()</A></EM></FONT>
+
+ <b>procedure</b> Add
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position;
+ Ch : <b>in</b> Character);
+ <FONT COLOR=green><EM>-- Move to the position and add a single character into the window</EM></FONT>
+ <FONT COLOR=green><EM>-- There are more Add routines, so the Inline pragma follows later</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_9">|</EM></FONT>
+ <b>procedure</b> Add_With_Immediate_Echo
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A> := Standard_Window;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_addch.3x.html">wechochar()</A></EM></FONT>
+
+ <b>procedure</b> Add_With_Immediate_Echo
+ (Win : <b>in</b> Window := Standard_Window;
+ Ch : <b>in</b> Character);
+ <FONT COLOR=green><EM>-- Add a character and do an immediate resfresh of the screen.</EM></FONT>
+ <b>pragma</b> Inline (Add_With_Immediate_Echo);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_window.3x.html">curs_window.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_10">|</EM></FONT>
+ <b>function</b> Create
+ (Number_Of_Lines : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Number_Of_Columns : <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ First_Line_Position : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ First_Column_Position : Column_Position) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">newwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Create);
+
+ <b>function</b> New_Window
+ (Number_Of_Lines : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Number_Of_Columns : <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ First_Line_Position : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ First_Column_Position : Column_Position) <b>return</b> Window
+ <b>renames</b> Create;
+ <b>pragma</b> Inline (New_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_11">|</EM></FONT>
+ <b>procedure</b> Delete (Win : <b>in</b> <b>out</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">delwin()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Reset Win to Null_Window</EM></FONT>
+ <b>pragma</b> Inline (Delete);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_12">|</EM></FONT>
+ <b>function</b> Sub_Window
+ (Win : <A HREF="terminal_interface-curses__ads.htm#63_12">Window</A> := Standard_Window;
+ Number_Of_Lines : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Number_Of_Columns : <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ First_Line_Position : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ First_Column_Position : Column_Position) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">subwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Sub_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_13">|</EM></FONT>
+ <b>function</b> Derived_Window
+ (Win : <A HREF="terminal_interface-curses__ads.htm#63_12">Window</A> := Standard_Window;
+ Number_Of_Lines : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Number_Of_Columns : <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ First_Line_Position : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ First_Column_Position : Column_Position) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">derwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Derived_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_14">|</EM></FONT>
+ <b>function</b> Duplicate (Win : Window) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">dupwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Duplicate);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_15">|</EM></FONT>
+ <b>procedure</b> Move_Window (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A>;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">mvwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Move_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_16">|</EM></FONT>
+ <b>procedure</b> Move_Derived_Window (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A>;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">mvderwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Move_Derived_Window);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_17">|</EM></FONT>
+ <b>procedure</b> Synchronize_Upwards (Win : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">wsyncup()</A></EM></FONT>
+ <b>pragma</b> Import (C, Synchronize_Upwards, "wsyncup");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_18">|</EM></FONT>
+ <b>procedure</b> Synchronize_Downwards (Win : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">wsyncdown()</A></EM></FONT>
+ <b>pragma</b> Import (C, Synchronize_Downwards, "wsyncdown");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_19">|</EM></FONT>
+ <b>procedure</b> Set_Synch_Mode (Win : <b>in</b> Window := Standard_Window;
+ Mode : <b>in</b> Boolean := False);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_window.3x.html">syncok()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Synch_Mode);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_addstr.3x.html">curs_addstr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_20">|</EM></FONT>
+ <b>procedure</b> Add (Win : <b>in</b> Window := Standard_Window;
+ Str : <b>in</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_addstr.3x.html">waddnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: waddstr()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_21">|</EM></FONT>
+ <b>procedure</b> Add (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position;
+ Str : <b>in</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_addstr.3x.html">mvwaddnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: mvwaddstr()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_addchstr.3x.html">curs_addchstr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_22">|</EM></FONT>
+ <b>procedure</b> Add (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#375_9">Window</A> := Standard_Window;
+ Str : <b>in</b> Attributed_String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_addchstr.3x.html">waddchnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: waddchstr()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_23">|</EM></FONT>
+ <b>procedure</b> Add (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#375_9">Column_Position</A>;
+ Str : <b>in</b> Attributed_String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_addchstr.3x.html">mvwaddchnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: mvwaddchstr()</EM></FONT>
+ <b>pragma</b> Inline (Add);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_border.3x.html">curs_border.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_24">|</EM></FONT>
+ <b>procedure</b> Border
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A> := Standard_Window;
+ Left_Side_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Right_Side_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Top_Side_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Bottom_Side_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Upper_Left_Corner_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Upper_Right_Corner_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Lower_Left_Corner_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Lower_Right_Corner_Symbol : <b>in</b> Attributed_Character := Default_Character
+ );
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_border.3x.html">wborder()</A></EM></FONT>
+ <b>pragma</b> Inline (Border);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_25">|</EM></FONT>
+ <b>procedure</b> Box
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A> := Standard_Window;
+ Vertical_Symbol : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Attributed_Character</A> := Default_Character;
+ Horizontal_Symbol : <b>in</b> Attributed_Character := Default_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_border.3x.html">box()</A></EM></FONT>
+ <b>pragma</b> Inline (Box);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_26">|</EM></FONT>
+ <b>procedure</b> Horizontal_Line
+ (Win : <b>in</b> Window := Standard_Window;
+ Line_Size : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Natural</A>;
+ Line_Symbol : <b>in</b> Attributed_Character := Default_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_border.3x.html">whline()</A></EM></FONT>
+ <b>pragma</b> Inline (Horizontal_Line);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_27">|</EM></FONT>
+ <b>procedure</b> Vertical_Line
+ (Win : <b>in</b> Window := Standard_Window;
+ Line_Size : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Natural</A>;
+ Line_Symbol : <b>in</b> Attributed_Character := Default_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_border.3x.html">wvline()</A></EM></FONT>
+ <b>pragma</b> Inline (Vertical_Line);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_getch.3x.html">curs_getch.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_28">|</EM></FONT>
+ <b>function</b> Get_Keystroke (Win : Window := Standard_Window)
+ <b>return</b> Real_Key_Code;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getch.3x.html">wgetch()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Get a character from the keyboard and echo it - if enabled - to the</EM></FONT>
+ <FONT COLOR=green><EM>-- window.</EM></FONT>
+ <FONT COLOR=green><EM>-- If for any reason (i.e. a timeout) we couldn't get a character the</EM></FONT>
+ <FONT COLOR=green><EM>-- returned keycode is Key_None.</EM></FONT>
+ <b>pragma</b> Inline (Get_Keystroke);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_29">|</EM></FONT>
+ <b>procedure</b> Undo_Keystroke (Key : <b>in</b> Real_Key_Code);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getch.3x.html">ungetch()</A></EM></FONT>
+ <b>pragma</b> Inline (Undo_Keystroke);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_30">|</EM></FONT>
+ <b>function</b> Has_Key (Key : Special_Key_Code) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getch.3x.html">has_key()</A></EM></FONT>
+ <b>pragma</b> Inline (Has_Key);
+
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+ <FONT COLOR=green><EM>-- | Some helper functions</EM></FONT>
+ <FONT COLOR=green><EM>-- |</EM></FONT>
+ <b>function</b> Is_Function_Key (Key : Special_Key_Code) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- Return True if the Key is a function key (i.e. one of F0 .. F63)</EM></FONT>
+ <b>pragma</b> Inline (Is_Function_Key);
+
+ <b>subtype</b> Function_Key_Number <b>is</b> Integer <b>range</b> 0 .. 63;
+ <FONT COLOR=green><EM>-- (n)curses allows for 64 function keys.</EM></FONT>
+
+ <b>function</b> Function_Key (Key : Real_Key_Code) <b>return</b> Function_Key_Number;
+ <FONT COLOR=green><EM>-- Return the number of the function key. If the code is not a</EM></FONT>
+ <FONT COLOR=green><EM>-- function key, a CONSTRAINT_ERROR will be raised.</EM></FONT>
+ <b>pragma</b> Inline (Function_Key);
+
+ <b>function</b> Function_Key_Code (Key : Function_Key_Number) <b>return</b> Real_Key_Code;
+ <FONT COLOR=green><EM>-- Return the key code for a given functionkey number.</EM></FONT>
+ <b>pragma</b> Inline (Function_Key_Code);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_attr.3x.html">curs_attr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_31">|</EM></FONT>
+ <b>procedure</b> Switch_Character_Attribute
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Window</A> := Standard_Window;
+ Attr : <b>in</b> Character_Attribute_Set := Normal_Video;
+ On : <b>in</b> Boolean := True);<FONT COLOR=green><EM>-- if False we switch Off.</EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_attr.3x.html">wattron()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: wattroff()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_32">|</EM></FONT>
+ <b>procedure</b> Set_Character_Attributes
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Window</A> := Standard_Window;
+ Attr : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_attr.3x.html">wattrset()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Character_Attributes);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_33">|</EM></FONT>
+ <b>function</b> Get_Character_Attribute
+ (Win : <b>in</b> Window := Standard_Window) <b>return</b> Character_Attribute_Set;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_attr.3x.html">wattr_get()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_34">|</EM></FONT>
+ <b>function</b> Get_Character_Attribute
+ (Win : <b>in</b> Window := Standard_Window) <b>return</b> Color_Pair;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_attr.3x.html">wattr_get()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Character_Attribute);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_35">|</EM></FONT>
+ <b>procedure</b> Set_Color (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Window</A> := Standard_Window;
+ Pair : <b>in</b> Color_Pair);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_attr.3x.html">wcolor_set()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Color);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_36">|</EM></FONT>
+ <b>procedure</b> Change_Attributes
+ (Win : <b>in</b> Window := Standard_Window;
+ Count : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Integer</A> := -1;
+ Attr : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_attr.3x.html">wchgat()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_37">|</EM></FONT>
+ <b>procedure</b> Change_Attributes
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A> := Line_Position'First;
+ Column : <b>in</b> Column_Position := Column_Position'First;
+ Count : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#305_9">Integer</A> := -1;
+ Attr : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_attr.3x.html">mvwchgat()</A></EM></FONT>
+ <b>pragma</b> Inline (Change_Attributes);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_beep.3x.html">curs_beep.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_38">|</EM></FONT>
+ <b>procedure</b> Beep;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_beep.3x.html">beep()</A></EM></FONT>
+ <b>pragma</b> Inline (Beep);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_39">|</EM></FONT>
+ <b>procedure</b> Flash_Screen;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_beep.3x.html">flash()</A></EM></FONT>
+ <b>pragma</b> Inline (Flash_Screen);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_inopts.3x.html">curs_inopts.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- | Not implemented : typeahead</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>-- <A NAME="AFU_40">|</EM></FONT>
+ <b>procedure</b> Set_Cbreak_Mode (SwitchOn : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">cbreak()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: nocbreak()</EM></FONT>
+ <b>pragma</b> Inline (Set_Cbreak_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_41">|</EM></FONT>
+ <b>procedure</b> Set_Raw_Mode (SwitchOn : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">raw()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: noraw()</EM></FONT>
+ <b>pragma</b> Inline (Set_Raw_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_42">|</EM></FONT>
+ <b>procedure</b> Set_Echo_Mode (SwitchOn : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">echo()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: noecho()</EM></FONT>
+ <b>pragma</b> Inline (Set_Echo_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_43">|</EM></FONT>
+ <b>procedure</b> Set_Meta_Mode (Win : <b>in</b> Window := Standard_Window;
+ SwitchOn : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">meta()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Meta_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_44">|</EM></FONT>
+ <b>procedure</b> Set_KeyPad_Mode (Win : <b>in</b> Window := Standard_Window;
+ SwitchOn : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">keypad()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_KeyPad_Mode);
+
+ <b>type</b> Half_Delay_Amount <b>is</b> <b>range</b> 1 .. 255;
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_45">|</EM></FONT>
+ <b>procedure</b> Half_Delay (Amount : <b>in</b> Half_Delay_Amount);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">halfdelay()</A></EM></FONT>
+ <b>pragma</b> Inline (Half_Delay);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_46">|</EM></FONT>
+ <b>procedure</b> Set_Flush_On_Interrupt_Mode
+ (Win : <b>in</b> Window := Standard_Window;
+ Mode : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">intrflush()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Flush_On_Interrupt_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_47">|</EM></FONT>
+ <b>procedure</b> Set_Queue_Interrupt_Mode
+ (Win : <b>in</b> Window := Standard_Window;
+ Flush : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">qiflush()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: noqiflush()</EM></FONT>
+ <b>pragma</b> Inline (Set_Queue_Interrupt_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_48">|</EM></FONT>
+ <b>procedure</b> Set_NoDelay_Mode
+ (Win : <b>in</b> Window := Standard_Window;
+ Mode : <b>in</b> Boolean := False);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">nodelay()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_NoDelay_Mode);
+
+ <b>type</b> Timeout_Mode <b>is</b> (Blocking, Non_Blocking, Delayed);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_49">|</EM></FONT>
+ <b>procedure</b> Set_Timeout_Mode (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#896_9">Window</A> := Standard_Window;
+ Mode : <b>in</b> Timeout_Mode;
+ Amount : <b>in</b> Natural);<FONT COLOR=green><EM>-- in Miliseconds</EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">wtimeout()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Instead of overloading the semantic of the sign of amount, we</EM></FONT>
+ <FONT COLOR=green><EM>-- introduce the Timeout_Mode parameter. This should improve</EM></FONT>
+ <FONT COLOR=green><EM>-- readability. For Blocking and Non_Blocking, the Amount is not</EM></FONT>
+ <FONT COLOR=green><EM>-- evaluated.</EM></FONT>
+ <FONT COLOR=green><EM>-- We don't inline this procedure.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_50">|</EM></FONT>
+ <b>procedure</b> Set_Escape_Timer_Mode
+ (Win : <b>in</b> Window := Standard_Window;
+ Timer_Off : <b>in</b> Boolean := False);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inopts.3x.html">notimeout()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Escape_Timer_Mode);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_outopts.3x.html">curs_outopts.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_51">|</EM></FONT>
+ <b>procedure</b> Set_NL_Mode (SwitchOn : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">nl()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: nonl()</EM></FONT>
+ <b>pragma</b> Inline (Set_NL_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_52">|</EM></FONT>
+ <b>procedure</b> Clear_On_Next_Update
+ (Win : <b>in</b> Window := Standard_Window;
+ Do_Clear : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">clearok()</A></EM></FONT>
+ <b>pragma</b> Inline (Clear_On_Next_Update);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_53">|</EM></FONT>
+ <b>procedure</b> Use_Insert_Delete_Line
+ (Win : <b>in</b> Window := Standard_Window;
+ Do_Idl : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">idlok()</A></EM></FONT>
+ <b>pragma</b> Inline (Use_Insert_Delete_Line);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_54">|</EM></FONT>
+ <b>procedure</b> Use_Insert_Delete_Character
+ (Win : <b>in</b> Window := Standard_Window;
+ Do_Idc : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">idcok()</A></EM></FONT>
+ <b>pragma</b> Inline (Use_Insert_Delete_Character);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_55">|</EM></FONT>
+ <b>procedure</b> Leave_Cursor_After_Update
+ (Win : <b>in</b> Window := Standard_Window;
+ Do_Leave : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">leaveok()</A></EM></FONT>
+ <b>pragma</b> Inline (Leave_Cursor_After_Update);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_56">|</EM></FONT>
+ <b>procedure</b> Immediate_Update_Mode
+ (Win : <b>in</b> Window := Standard_Window;
+ Mode : <b>in</b> Boolean := False);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">immedok()</A></EM></FONT>
+ <b>pragma</b> Inline (Immediate_Update_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_57">|</EM></FONT>
+ <b>procedure</b> Allow_Scrolling
+ (Win : <b>in</b> Window := Standard_Window;
+ Mode : <b>in</b> Boolean := False);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">scrollok()</A></EM></FONT>
+ <b>pragma</b> Inline (Allow_Scrolling);
+
+ <b>function</b> Scrolling_Allowed (Win : Window := Standard_Window) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- There is no such function in the C interface.</EM></FONT>
+ <b>pragma</b> Inline (Scrolling_Allowed);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_58">|</EM></FONT>
+ <b>procedure</b> Set_Scroll_Region
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Top_Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Line_Position</A>;
+ Bottom_Line : <b>in</b> Line_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_outopts.3x.html">wsetscrreg()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Scroll_Region);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_refresh.3x.html">curs_refresh.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_59">|</EM></FONT>
+ <b>procedure</b> Update_Screen;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_refresh.3x.html">doupdate()</A></EM></FONT>
+ <b>pragma</b> Inline (Update_Screen);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_60">|</EM></FONT>
+ <b>procedure</b> Refresh (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_refresh.3x.html">wrefresh()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- There is an overloaded Refresh for Pads.</EM></FONT>
+ <FONT COLOR=green><EM>-- The Inline pragma appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_61">|</EM></FONT>
+ <b>procedure</b> Refresh_Without_Update
+ (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_refresh.3x.html">wnoutrefresh()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- There is an overloaded Refresh_Without_Update for Pads.</EM></FONT>
+ <FONT COLOR=green><EM>-- The Inline pragma appears there</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_62">|</EM></FONT>
+ <b>procedure</b> Redraw (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_refresh.3x.html">redrawwin()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_63">|</EM></FONT>
+ <b>procedure</b> Redraw (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Begin_Line : <b>in</b> Line_Position;
+ Line_Count : <b>in</b> Positive);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_refresh.3x.html">wredrawln()</A></EM></FONT>
+ <b>pragma</b> Inline (Redraw);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_clear.3x.html">curs_clear.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_64">|</EM></FONT>
+ <b>procedure</b> Erase (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_clear.3x.html">werase()</A></EM></FONT>
+ <b>pragma</b> Inline (Erase);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_65">|</EM></FONT>
+ <b>procedure</b> Clear
+ (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_clear.3x.html">wclear()</A></EM></FONT>
+ <b>pragma</b> Inline (Clear);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_66">|</EM></FONT>
+ <b>procedure</b> Clear_To_End_Of_Screen
+ (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_clear.3x.html">wclrtobot()</A></EM></FONT>
+ <b>pragma</b> Inline (Clear_To_End_Of_Screen);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_67">|</EM></FONT>
+ <b>procedure</b> Clear_To_End_Of_Line
+ (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_clear.3x.html">wclrtoeol()</A></EM></FONT>
+ <b>pragma</b> Inline (Clear_To_End_Of_Line);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_bkgd.3x.html">curs_bkgd.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_68">|</EM></FONT>
+ <b>procedure</b> Set_Background
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A> := Standard_Window;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_bkgd.3x.html">wbkgdset()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Background);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_69">|</EM></FONT>
+ <b>procedure</b> Change_Background
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A> := Standard_Window;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_bkgd.3x.html">wbkgd()</A></EM></FONT>
+ <b>pragma</b> Inline (Change_Background);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_70">|</EM></FONT>
+ <b>function</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Get_Background</A> (Win : Window := Standard_Window)
+ <b>return</b> Attributed_Character;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_bkgd.3x.html">wbkgdget()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Background);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_touch.3x.html">curs_touch.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_71">|</EM></FONT>
+ <b>procedure</b> Untouch (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_touch.3x.html">untouchwin()</A></EM></FONT>
+ <b>pragma</b> Inline (Untouch);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_72">|</EM></FONT>
+ <b>procedure</b> Touch (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_touch.3x.html">touchwin()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_73">|</EM></FONT>
+ <b>procedure</b> Touch (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Start : <b>in</b> Line_Position;
+ Count : <b>in</b> Positive);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_touch.3x.html">touchline()</A></EM></FONT>
+ <b>pragma</b> Inline (Touch);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_74">|</EM></FONT>
+ <b>procedure</b> Change_Lines_Status (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Start : <b>in</b> Line_Position;
+ Count : <b>in</b> Positive;
+ State : <b>in</b> Boolean);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_touch.3x.html">wtouchln()</A></EM></FONT>
+ <b>pragma</b> Inline (Change_Lines_Status);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_75">|</EM></FONT>
+ <b>function</b> Is_Touched (Win : <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : Line_Position) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_touch.3x.html">is_linetouched()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_76">|</EM></FONT>
+ <b>function</b> Is_Touched (Win : Window := Standard_Window) <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_touch.3x.html">is_wintouched()</A></EM></FONT>
+ <b>pragma</b> Inline (Is_Touched);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_overlay.3x.html">curs_overlay.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_77">|</EM></FONT>
+ <b>procedure</b> Copy
+ (<FONT COLOR=red><A NAME="1109_7">Source_Window</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Destination_Window : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A>;
+ Source_Top_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Source_Left_Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A>;
+ Destination_Top_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Destination_Left_Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A>;
+ Destination_Bottom_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Destination_Right_Column : <b>in</b> Column_Position;
+ Non_Destructive_Mode : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_overlay.3x.html">copywin()</A></EM></FONT>
+ <b>pragma</b> Inline (Copy);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_78">|</EM></FONT>
+ <b>procedure</b> Overwrite (<FONT COLOR=red><A NAME="1122_25">Source_Window</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Destination_Window : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_overlay.3x.html">overwrite()</A></EM></FONT>
+ <b>pragma</b> Inline (Overwrite);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_79">|</EM></FONT>
+ <b>procedure</b> Overlay (<FONT COLOR=red><A NAME="1128_23">Source_Window</A></FONT> : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#57_9">Window</A>;
+ Destination_Window : <b>in</b> Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_overlay.3x.html">overlay()</A></EM></FONT>
+ <b>pragma</b> Inline (Overlay);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_deleteln.3x.html">curs_deleteln.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_80">|</EM></FONT>
+ <b>procedure</b> Insert_Delete_Lines
+ (Win : <b>in</b> Window := Standard_Window;
+ Lines : <b>in</b> Integer := 1);<FONT COLOR=green><EM>-- default is to insert one line above</EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_deleteln.3x.html">winsdelln()</A></EM></FONT>
+ <b>pragma</b> Inline (Insert_Delete_Lines);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_81">|</EM></FONT>
+ <b>procedure</b> Delete_Line (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_deleteln.3x.html">wdeleteln()</A></EM></FONT>
+ <b>pragma</b> Inline (Delete_Line);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_82">|</EM></FONT>
+ <b>procedure</b> Insert_Line (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_deleteln.3x.html">winsertln()</A></EM></FONT>
+ <b>pragma</b> Inline (Insert_Line);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_getyx.3x.html">curs_getyx.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_83">|</EM></FONT>
+ <b>procedure</b> Get_Size
+ (Win : <b>in</b> Window := Standard_Window;
+ Number_Of_Lines : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Number_Of_Columns : <b>out</b> Column_Count);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getyx.3x.html">getmaxyx()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Size);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_84">|</EM></FONT>
+ <b>procedure</b> Get_Window_Position
+ (Win : <b>in</b> Window := Standard_Window;
+ Top_Left_Line : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Top_Left_Column : <b>out</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getyx.3x.html">getbegyx()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Window_Position);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_85">|</EM></FONT>
+ <b>procedure</b> Get_Cursor_Position
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>out</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getyx.3x.html">getyx()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Cursor_Position);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_86">|</EM></FONT>
+ <b>procedure</b> Get_Origin_Relative_To_Parent
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A>;
+ Top_Left_Line : <b>out</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Top_Left_Column : <b>out</b> Column_Position;
+ Is_Not_A_Subwindow : <b>out</b> Boolean);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getyx.3x.html">getparyx()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Instead of placing -1 in the coordinates as return, we use a boolean</EM></FONT>
+ <FONT COLOR=green><EM>-- to return the info that the window has no parent.</EM></FONT>
+ <b>pragma</b> Inline (Get_Origin_Relative_To_Parent);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_pad.3x.html">curs_pad.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_87">|</EM></FONT>
+ <b>function</b> New_Pad (Lines : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Columns : Column_Count) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_pad.3x.html">newpad()</A></EM></FONT>
+ <b>pragma</b> Inline (New_Pad);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_88">|</EM></FONT>
+ <b>function</b> Sub_Pad
+ (Pad : <A HREF="terminal_interface-curses__ads.htm#63_12">Window</A>;
+ Number_Of_Lines : <A HREF="terminal_interface-curses__ads.htm#65_12">Line_Count</A>;
+ Number_Of_Columns : <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Count</A>;
+ First_Line_Position : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ First_Column_Position : Column_Position) <b>return</b> Window;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_pad.3x.html">subpad()</A></EM></FONT>
+ <b>pragma</b> Inline (Sub_Pad);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_89">|</EM></FONT>
+ <b>procedure</b> Refresh
+ (Pad : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A>;
+ Source_Top_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Source_Left_Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A>;
+ Destination_Top_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Destination_Left_Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A>;
+ Destination_Bottom_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Destination_Right_Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_pad.3x.html">prefresh()</A></EM></FONT>
+ <b>pragma</b> Inline (Refresh);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_90">|</EM></FONT>
+ <b>procedure</b> Refresh_Without_Update
+ (Pad : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A>;
+ Source_Top_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Source_Left_Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A>;
+ Destination_Top_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Destination_Left_Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Column_Position</A>;
+ Destination_Bottom_Row : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Destination_Right_Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_pad.3x.html">pnoutrefresh()</A></EM></FONT>
+ <b>pragma</b> Inline (Refresh_Without_Update);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_91">|</EM></FONT>
+ <b>procedure</b> Add_Character_To_Pad_And_Echo_It
+ (Pad : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A>;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_pad.3x.html">pechochar()</A></EM></FONT>
+
+ <b>procedure</b> Add_Character_To_Pad_And_Echo_It
+ (Pad : <b>in</b> Window;
+ Ch : <b>in</b> Character);
+ <b>pragma</b> Inline (Add_Character_To_Pad_And_Echo_It);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_scroll.3x.html">curs_scroll.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_92">|</EM></FONT>
+ <b>procedure</b> Scroll (Win : <b>in</b> Window := Standard_Window;
+ Amount : <b>in</b> Integer := 1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_scroll.3x.html">wscrl()</A></EM></FONT>
+ <b>pragma</b> Inline (Scroll);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_delch.3x.html">curs_delch.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_93">|</EM></FONT>
+ <b>procedure</b> Delete_Character (Win : <b>in</b> Window := Standard_Window);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_delch.3x.html">wdelch()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_94">|</EM></FONT>
+ <b>procedure</b> Delete_Character
+ (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_delch.3x.html">mvwdelch()</A></EM></FONT>
+ <b>pragma</b> Inline (Delete_Character);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_inch.3x.html">curs_inch.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_95">|</EM></FONT>
+ <b>function</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Peek</A> (Win : Window := Standard_Window)
+ <b>return</b> Attributed_Character;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inch.3x.html">winch()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_96">|</EM></FONT>
+ <b>function</b> Peek
+ (Win : <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : Column_Position) <b>return</b> Attributed_Character;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inch.3x.html">mvwinch()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- More Peek's follow, pragma Inline appears later.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_winch.3x.html">curs_winch.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_97">|</EM></FONT>
+ <b>procedure</b> Insert (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Window</A> := Standard_Window;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_winch.3x.html">winsch()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_98">|</EM></FONT>
+ <b>procedure</b> Insert (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#351_9">Column_Position</A>;
+ Ch : <b>in</b> Attributed_Character);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_winch.3x.html">mvwinsch()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_winch.3x.html">curs_winch.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_99">|</EM></FONT>
+ <b>procedure</b> Insert (Win : <b>in</b> Window := Standard_Window;
+ Str : <b>in</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_winch.3x.html">winsnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: winsstr()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_100">|</EM></FONT>
+ <b>procedure</b> Insert (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position;
+ Str : <b>in</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_winch.3x.html">mvwinsnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: mvwinsstr()</EM></FONT>
+ <b>pragma</b> Inline (Insert);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_instr.3x.html">curs_instr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_101">|</EM></FONT>
+ <b>procedure</b> Peek (Win : <b>in</b> Window := Standard_Window;
+ Str : <b>out</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_instr.3x.html">winnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: winstr()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_102">|</EM></FONT>
+ <b>procedure</b> Peek (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position;
+ Str : <b>out</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_instr.3x.html">mvwinnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: mvwinstr()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_inchstr.3x.html">curs_inchstr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_103">|</EM></FONT>
+ <b>procedure</b> Peek (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#375_9">Window</A> := Standard_Window;
+ Str : <b>out</b> Attributed_String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inchstr.3x.html">winchnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: winchstr()</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_104">|</EM></FONT>
+ <b>procedure</b> Peek (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#375_9">Column_Position</A>;
+ Str : <b>out</b> Attributed_String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_inchstr.3x.html">mvwinchnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: mvwinchstr()</EM></FONT>
+ <FONT COLOR=green><EM>-- We don't inline the Peek procedures</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_getstr.3x.html">curs_getstr.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_105">|</EM></FONT>
+ <b>procedure</b> Get (Win : <b>in</b> Window := Standard_Window;
+ Str : <b>out</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getstr.3x.html">wgetnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: wgetstr()</EM></FONT>
+
+ <b>procedure</b> Get (Win : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#60_9">Window</A> := Standard_Window;
+ Line : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> Column_Position;
+ Str : <b>out</b> String;
+ Len : <b>in</b> Integer := -1);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_getstr.3x.html">wgetnstr()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- not specified in ncurses, should be: mvwgetnstr()</EM></FONT>
+ <FONT COLOR=green><EM>-- and mvwgetstr() (which exists)</EM></FONT>
+ <FONT COLOR=green><EM>-- Get is not inlined</EM></FONT>
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_slk.3x.html">curs_slk.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <b>type</b> Soft_Label_Key_Format <b>is</b> (Three_Two_Three,
+ Four_Four,
+ PC_Style, <FONT COLOR=green><EM>-- ncurses specific</EM></FONT>
+ <FONT COLOR=red><A NAME="1397_9"> </A></FONT> PC_Style_With_Index); <FONT COLOR=green><EM>-- "</EM></FONT>
+ <b>type</b> <FONT COLOR=red><A NAME="1398_9">Label_Number</A></FONT> <b>is</b> <b>new</b> Positive <b>range</b> 1 .. 12;
+ <b>type</b> Label_Justification <b>is</b> (Left, Centered, Right);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_106">|</EM></FONT>
+ <b>procedure</b> Init_Soft_Label_Keys
+ (Format : <b>in</b> Soft_Label_Key_Format := Three_Two_Three);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_init()</A></EM></FONT>
+ <b>pragma</b> Inline (Init_Soft_Label_Keys);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_107">|</EM></FONT>
+ <b>procedure</b> Set_Soft_Label_Key (Label : <b>in</b> Label_Number;
+ Text : <b>in</b> <A HREF="terminal_interface-curses__ads.htm<398_9">String</A>;
+ Fmt : <b>in</b> Label_Justification := Left);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_set()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- We don't inline this procedure</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_108">|</EM></FONT>
+ <b>procedure</b> Refresh_Soft_Label_Keys;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_refresh()</A></EM></FONT>
+ <b>pragma</b> Inline (Refresh_Soft_Label_Keys);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_109">|</EM></FONT>
+ <b>procedure</b> Refresh_Soft_Label_Keys_Without_Update;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_noutrefresh()</A></EM></FONT>
+ <b>pragma</b> Inline (Refresh_Soft_Label_Keys_Without_Update);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_110">|</EM></FONT>
+ <b>procedure</b> Get_Soft_Label_Key (Label : <b>in</b> Label_Number;
+ Text : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_label()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_111">|</EM></FONT>
+ <b>function</b> Get_Soft_Label_Key (Label : <b>in</b> Label_Number) <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_label()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Get_Soft_Label_Key);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_112">|</EM></FONT>
+ <b>procedure</b> Clear_Soft_Label_Keys;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_clear()</A></EM></FONT>
+ <b>pragma</b> Inline (Clear_Soft_Label_Keys);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_113">|</EM></FONT>
+ <b>procedure</b> Restore_Soft_Label_Keys;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_restore()</A></EM></FONT>
+ <b>pragma</b> Inline (Restore_Soft_Label_Keys);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_114">|</EM></FONT>
+ <b>procedure</b> Touch_Soft_Label_Keys;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_touch()</A></EM></FONT>
+ <b>pragma</b> Inline (Touch_Soft_Label_Keys);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_115">|</EM></FONT>
+ <b>procedure</b> Switch_Soft_Label_Key_Attributes
+ (Attr : <b>in</b> Character_Attribute_Set;
+ On : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_attron()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: slk_attroff()</EM></FONT>
+ <b>pragma</b> Inline (Switch_Soft_Label_Key_Attributes);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_116">|</EM></FONT>
+ <b>procedure</b> Set_Soft_Label_Key_Attributes
+ (Attr : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>97_9">Character_Attribute_Set</A> := Normal_Video;
+ Color : <b>in</b> Color_Pair := Color_Pair'First);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_attrset()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Soft_Label_Key_Attributes);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_117">|</EM></FONT>
+ <b>function</b> Get_Soft_Label_Key_Attributes <b>return</b> Character_Attribute_Set;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_attr()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_118">|</EM></FONT>
+ <b>function</b> Get_Soft_Label_Key_Attributes <b>return</b> Color_Pair;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_attr()</A></EM></FONT>
+ <b>pragma</b> Inline (Get_Soft_Label_Key_Attributes);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_119">|</EM></FONT>
+ <b>procedure</b> Set_Soft_Label_Key_Color (Pair : <b>in</b> Color_Pair);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_slk.3x.html">slk_color()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Soft_Label_Key_Color);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/keyok.3x.html">keyok.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_120">|</EM></FONT>
+ <b>procedure</b> Enable_Key (Key : <b>in</b> Special_Key_Code;
+ Enable : <b>in</b> Boolean := True);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/keyok.3x.html">keyok()</A></EM></FONT>
+ <b>pragma</b> Inline (Enable_Key);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/define_key.3x.html">define_key.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_121">|</EM></FONT>
+ <b>procedure</b> Define_Key (Definition : <b>in</b> <A HREF="terminal_interface-curses__ads.htm#77_12">String</A>;
+ Key : <b>in</b> Special_Key_Code);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/define_key.3x.html">define_key()</A></EM></FONT>
+ <b>pragma</b> Inline (Define_Key);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_util.3x.html">curs_util.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- | Not implemented : filter, use_env, putwin, getwin</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <FONT COLOR=green><EM>-- <A NAME="AFU_122">|</EM></FONT>
+ <b>procedure</b> Key_Name (Key : <b>in</b> Real_Key_Code;
+ Name : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_util.3x.html">keyname()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- The external name for a real keystroke.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_123">|</EM></FONT>
+ <b>function</b> Key_Name (Key : <b>in</b> Real_Key_Code) <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_util.3x.html">keyname()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <FONT COLOR=green><EM>-- We don't inline this routine</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_124">|</EM></FONT>
+ <b>procedure</b> Un_Control (Ch : <b>in</b> Attributed_Character;
+ Str : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_util.3x.html">unctrl()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_125">|</EM></FONT>
+ <b>function</b> Un_Control (Ch : <b>in</b> Attributed_Character) <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_util.3x.html">unctrl()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Un_Control);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_126">|</EM></FONT>
+ <b>procedure</b> Delay_Output (Msecs : <b>in</b> Natural);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_util.3x.html">delay_output()</A></EM></FONT>
+ <b>pragma</b> Inline (Delay_Output);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_127">|</EM></FONT>
+ <b>procedure</b> Flush_Input;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_util.3x.html">flushinp()</A></EM></FONT>
+ <b>pragma</b> Inline (Flush_Input);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_termattrs.3x.html">curs_termattrs.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_128">|</EM></FONT>
+ <b>function</b> Baudrate <b>return</b> Natural;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">baudrate()</A></EM></FONT>
+ <b>pragma</b> Inline (Baudrate);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_129">|</EM></FONT>
+ <b>function</b> Erase_Character <b>return</b> Character;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">erasechar()</A></EM></FONT>
+ <b>pragma</b> Inline (Erase_Character);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_130">|</EM></FONT>
+ <b>function</b> Kill_Character <b>return</b> Character;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">killchar()</A></EM></FONT>
+ <b>pragma</b> Inline (Kill_Character);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_131">|</EM></FONT>
+ <b>function</b> Has_Insert_Character <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">has_ic()</A></EM></FONT>
+ <b>pragma</b> Inline (Has_Insert_Character);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_132">|</EM></FONT>
+ <b>function</b> Has_Insert_Line <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">has_il()</A></EM></FONT>
+ <b>pragma</b> Inline (Has_Insert_Line);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_133">|</EM></FONT>
+ <b>function</b> Supported_Attributes <b>return</b> Character_Attribute_Set;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">termattrs()</A></EM></FONT>
+ <b>pragma</b> Inline (Supported_Attributes);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_134">|</EM></FONT>
+ <b>procedure</b> Long_Name (Name : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">longname()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_135">|</EM></FONT>
+ <b>function</b> Long_Name <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">longname()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Long_Name);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_136">|</EM></FONT>
+ <b>procedure</b> Terminal_Name (Name : <b>out</b> String);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">termname()</A></EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_137">|</EM></FONT>
+ <b>function</b> Terminal_Name <b>return</b> String;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_termattrs.3x.html">termname()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- Same as function</EM></FONT>
+ <b>pragma</b> Inline (Terminal_Name);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_color.3x.html">curs_color.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_138">|</EM></FONT>
+ <b>procedure</b> Start_Color;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_color.3x.html">start_clolor()</A></EM></FONT>
+ <b>pragma</b> Import (C, Start_Color, "start_color");
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_139">|</EM></FONT>
+ <b>procedure</b> Init_Pair (Pair : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Redefinable_Color_Pair</A>;
+ Fore : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A>;
+ Back : <b>in</b> Color_Number);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_color.3x.html">init_pair()</A></EM></FONT>
+ <b>pragma</b> Inline (Init_Pair);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_140">|</EM></FONT>
+ <b>procedure</b> Pair_Content (Pair : <b>in</b> Color_Pair;
+ Fore : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>77_9">Color_Number</A>;
+ Back : <b>out</b> Color_Number);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_color.3x.html">pair_content()</A></EM></FONT>
+ <b>pragma</b> Inline (Pair_Content);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_141">|</EM></FONT>
+ <b>function</b> Has_Colors <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_color.3x.html">has_colors()</A></EM></FONT>
+ <b>pragma</b> Inline (Has_Colors);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_142">|</EM></FONT>
+ <b>procedure</b> Init_Color (Color : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>93_9">Color_Number</A>;
+ Red : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>93_9">RGB_Value</A>;
+ Green : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>93_9">RGB_Value</A>;
+ Blue : <b>in</b> RGB_Value);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_color.3x.html">init_color()</A></EM></FONT>
+ <b>pragma</b> Inline (Init_Color);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_143">|</EM></FONT>
+ <b>function</b> Can_Change_Color <b>return</b> Boolean;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_color.3x.html">can_change_color()</A></EM></FONT>
+ <b>pragma</b> Inline (Can_Change_Color);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_144">|</EM></FONT>
+ <b>procedure</b> Color_Content (Color : <b>in</b> <A HREF="terminal_interface-curses__ads.htm>93_9">Color_Number</A>;
+ Red : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>93_9">RGB_Value</A>;
+ Green : <b>out</b> <A HREF="terminal_interface-curses__ads.htm>93_9">RGB_Value</A>;
+ Blue : <b>out</b> RGB_Value);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_color.3x.html">color_content()</A></EM></FONT>
+ <b>pragma</b> Inline (Color_Content);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Man page <A HREF="../man/curs_kernel.3x.html">curs_kernel.3x</A></EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+
+ <FONT COLOR=green><EM>-- | Not implemented: getsyx, setsyx</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ <b>type</b> Curses_Mode <b>is</b> (Curses, Shell);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_145">|</EM></FONT>
+ <b>procedure</b> Save_Curses_Mode (Mode : <b>in</b> Curses_Mode);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_kernel.3x.html">def_prog_mode()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: def_shell_mode()</EM></FONT>
+ <b>pragma</b> Inline (Save_Curses_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_146">|</EM></FONT>
+ <b>procedure</b> Reset_Curses_Mode (Mode : <b>in</b> Curses_Mode);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_kernel.3x.html">reset_prog_mode()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- AKA: reset_shell_mode()</EM></FONT>
+ <b>pragma</b> Inline (Reset_Curses_Mode);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_147">|</EM></FONT>
+ <b>procedure</b> Save_Terminal_State;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_kernel.3x.html">savetty()</A></EM></FONT>
+ <b>pragma</b> Inline (Save_Terminal_State);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_148">|</EM></FONT>
+ <b>procedure</b> Reset_Terminal_State;
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_kernel.3x.html">resetty();</A></EM></FONT>
+ <b>pragma</b> Inline (Reset_Terminal_State);
+
+ <b>type</b> Stdscr_Init_Proc <b>is</b> <b>access</b>
+ <b>function</b> (Win : <A HREF="terminal_interface-curses__ads.htm#65_12">Window</A>;
+ Columns :<A HREF="terminal_interface-curses__ads.htm<670_9"> </A>Column_Count) <b>return</b> Integer;
+ <b>pragma</b> Convention (C, Stdscr_Init_Proc);
+ <FONT COLOR=green><EM>-- N.B.: the return value is actually ignored, but it seems to be</EM></FONT>
+ <FONT COLOR=green><EM>-- a good practice to return 0 if you think all went fine</EM></FONT>
+ <FONT COLOR=green><EM>-- and -1 otherwise.</EM></FONT>
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_149">|</EM></FONT>
+ <b>procedure</b> Rip_Off_Lines (Lines : <b>in</b> <A HREF="terminal_interface-curses__ads.htm<670_9">Integer</A>;
+ Proc : <b>in</b> Stdscr_Init_Proc);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_kernel.3x.html">ripoffline()</A></EM></FONT>
+ <FONT COLOR=green><EM>-- N.B.: to be more precise, this uses a ncurses specific enhancement of</EM></FONT>
+ <FONT COLOR=green><EM>-- ripoffline(), in which the Lines argument absolute value is the</EM></FONT>
+ <FONT COLOR=green><EM>-- number of lines to be ripped of. The official ripoffline() only</EM></FONT>
+ <FONT COLOR=green><EM>-- uses the sign of Lines to rip of a single line from bottom or top.</EM></FONT>
+ <b>pragma</b> Inline (Rip_Off_Lines);
+
+ <b>type</b> Cursor_Visibility <b>is</b> (Invisible, Normal, Very_Visible);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_150">|</EM></FONT>
+ <b>procedure</b> Set_Cursor_Visibility (Visibility : <b>in</b> <b>out</b> Cursor_Visibility);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_kernel.3x.html">curs_set()</A></EM></FONT>
+ <b>pragma</b> Inline (Set_Cursor_Visibility);
+
+ <FONT COLOR=green><EM>-- <A NAME="AFU_151">|</EM></FONT>
+ <b>procedure</b> Nap_Milli_Seconds (Ms : <b>in</b> Natural);
+ <FONT COLOR=green><EM>-- AKA: <A HREF="../man/curs_kernel.3x.html">napms()</A></EM></FONT>
+ <b>pragma</b> Inline (Nap_Milli_Seconds);
+
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <FONT COLOR=green><EM>-- | Some usefull helpers.</EM></FONT>
+ <FONT COLOR=green><EM>-- |=====================================================================</EM></FONT>
+ <b>type</b> Transform_Direction <b>is</b> (From_Screen, To_Screen);
+ <b>procedure</b> Transform_Coordinates
+ (W : <b>in</b> Window := Standard_Window;
+ Line : <b>in</b> <b>out</b> <A HREF="terminal_interface-curses__ads.htm#61_9">Line_Position</A>;
+ Column : <b>in</b> <b>out</b> Column_Position;
+ Dir : <b>in</b> Transform_Direction := From_Screen);
+ <FONT COLOR=green><EM>-- This procedure transforms screen coordinates into coordinates relative</EM></FONT>
+ <FONT COLOR=green><EM>-- to the window and vice versa, depending on the Dir parmeter.</EM></FONT>
+ <FONT COLOR=green><EM>-- Screen coordinates are the position informations on the physical device.</EM></FONT>
+ <FONT COLOR=green><EM>-- An Curses_Exception will be raised if Line and Column are not in the</EM></FONT>
+ <FONT COLOR=green><EM>-- Window or if you pass the Null_Window as argument.</EM></FONT>
+ <FONT COLOR=green><EM>-- We don't inline this procedure</EM></FONT>
+
+<b>private</b>
+ <b>type</b> Window <b>is</b> <b>new</b> System.Storage_Elements.Integer_Address;
+ Null_Window : <b>constant</b> Window := 0;
+
+ <FONT COLOR=green><EM>-- The next constants are generated and may be different on your</EM></FONT>
+ <FONT COLOR=green><EM>-- architecture.</EM></FONT>
+ <FONT COLOR=green><EM>--</EM></FONT>
+ Offset_maxy : <b>constant</b> Natural := 2;<FONT COLOR=green><EM>-- short</EM></FONT>
+ Offset_maxx : <b>constant</b> Natural := 3;<FONT COLOR=green><EM>-- short</EM></FONT>
+ Offset_begy : <b>constant</b> Natural := 4;<FONT COLOR=green><EM>-- short</EM></FONT>
+ Offset_begx : <b>constant</b> Natural := 5;<FONT COLOR=green><EM>-- short</EM></FONT>
+ Offset_cury : <b>constant</b> Natural := 0;<FONT COLOR=green><EM>-- short</EM></FONT>
+ Offset_curx : <b>constant</b> Natural := 1;<FONT COLOR=green><EM>-- short</EM></FONT>
+ Offset_yoffset : <b>constant</b> Natural := 36;<FONT COLOR=green><EM>-- short</EM></FONT>
+ Offset_pary : <b>constant</b> Natural := 13;<FONT COLOR=green><EM>-- int</EM></FONT>
+ Offset_parx : <b>constant</b> Natural := 12;<FONT COLOR=green><EM>-- int</EM></FONT>
+ Offset_scroll : <b>constant</b> Natural := 27;<FONT COLOR=green><EM>-- char</EM></FONT>
+ Sizeof_bool : <b>constant</b> Natural := 1;<FONT COLOR=green><EM>-- bool</EM></FONT>
+ Offset_XY : <b>constant</b> Natural := 1;<FONT COLOR=green><EM>-- int</EM></FONT>
+
+
+<b>end</b> Terminal_Interface.Curses;
+</PRE></BODY></HTML>
\ No newline at end of file
--- /dev/null
+<HEAD><TITLE>terminal_interface.ads</TITLE></HEAD>
+<BODY>
+<HR><DIV ALIGN="center"><H1> File : terminal_interface.ads </H1></DIV><HR>
+<PRE>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- GNAT ncurses Binding --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Terminal_Interface --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- S P E C --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Copyright (c) 1998 Free Software Foundation, Inc. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Permission is hereby granted, free of charge, to any person obtaining a --</EM></FONT>
+<FONT COLOR=green><EM>-- copy of this software and associated documentation files (the --</EM></FONT>
+<FONT COLOR=green><EM>-- "Software"), to deal in the Software without restriction, including --</EM></FONT>
+<FONT COLOR=green><EM>-- without limitation the rights to use, copy, modify, merge, publish, --</EM></FONT>
+<FONT COLOR=green><EM>-- distribute, distribute with modifications, sublicense, and/or sell --</EM></FONT>
+<FONT COLOR=green><EM>-- copies of the Software, and to permit persons to whom the Software is --</EM></FONT>
+<FONT COLOR=green><EM>-- furnished to do so, subject to the following conditions: --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- The above copyright notice and this permission notice shall be included --</EM></FONT>
+<FONT COLOR=green><EM>-- in all copies or substantial portions of the Software. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</EM></FONT>
+<FONT COLOR=green><EM>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</EM></FONT>
+<FONT COLOR=green><EM>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</EM></FONT>
+<FONT COLOR=green><EM>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</EM></FONT>
+<FONT COLOR=green><EM>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</EM></FONT>
+<FONT COLOR=green><EM>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</EM></FONT>
+<FONT COLOR=green><EM>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</EM></FONT>
+<FONT COLOR=green><EM>-- --</EM></FONT>
+<FONT COLOR=green><EM>-- Except as contained in this notice, the name(s) of the above copyright --</EM></FONT>
+<FONT COLOR=green><EM>-- holders shall not be used in advertising or otherwise to promote the --</EM></FONT>
+<FONT COLOR=green><EM>-- sale, use or other dealings in this Software without prior written --</EM></FONT>
+<FONT COLOR=green><EM>-- authorization. --</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<FONT COLOR=green><EM>-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996</EM></FONT>
+<FONT COLOR=green><EM>-- Version Control:</EM></FONT>
+<FONT COLOR=green><EM>-- $Revision: 1.10 $</EM></FONT>
+<FONT COLOR=green><EM>-- Binding Version 01.00</EM></FONT>
+<FONT COLOR=green><EM>------------------------------------------------------------------------------</EM></FONT>
+<b>package</b> <FONT COLOR=red><A NAME="41_9">Terminal_Interface</A></FONT> <b>is</b>
+ <b>pragma</b> Pure (<A HREF="terminal_interface__ads.htm#41_9">Terminal_Interface</A>);
+<FONT COLOR=green><EM>--</EM></FONT>
+<FONT COLOR=green><EM>-- Everything is in the child units</EM></FONT>
+<FONT COLOR=green><EM>--</EM></FONT>
+<b>end</b> Terminal_Interface;
+
+
+</PRE></BODY></HTML>
\ No newline at end of file
+++ /dev/null
-<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
- <STRONG>addch</STRONG>, <STRONG>waddch</STRONG>, <STRONG>mvaddch</STRONG>, <STRONG>mvwaddch</STRONG>, <STRONG>echochar</STRONG>, <STRONG>wechochar</STRONG> -
- add a character (with attributes) to a <STRONG>curses</STRONG> window, then
- advance the cursor
-
-
-</PRE>
-<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
-
- <STRONG>int</STRONG> <STRONG>addch(chtype</STRONG> <STRONG>ch);</STRONG>
- <STRONG>int</STRONG> <STRONG>waddch(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
- <STRONG>int</STRONG> <STRONG>mvaddch(int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
- <STRONG>int</STRONG> <STRONG>mvwaddch(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
- <STRONG>int</STRONG> <STRONG>echochar(chtype</STRONG> <STRONG>ch);</STRONG>
- <STRONG>int</STRONG> <STRONG>wechochar(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
-
-
-</PRE>
-<H2>DESCRIPTION</H2><PRE>
- The <STRONG>addch</STRONG>, <STRONG>waddch</STRONG>, <STRONG>mvaddch</STRONG> and <STRONG>mvwaddch</STRONG> routines put the
- character <EM>ch</EM> into the given window at its current window
- position, which is then advanced. They are analogous to
- <STRONG>putchar</STRONG> in <STRONG><A HREF="stdio.3.html">stdio(3)</A></STRONG>. If the advance is at the right mar-
- gin, the cursor automatically wraps to the beginning of
- the next line. At the bottom of the current scrolling
- region, if <STRONG>scrollok</STRONG> is enabled, the scrolling region is
- scrolled up one line.
-
- If <EM>ch</EM> is a tab, newline, or backspace, the cursor is moved
- appropriately within the window. Backspace moves the cur-
- sor one character left; at the left edge of a window it
- does nothing. Newline does a <STRONG>clrtoeol</STRONG>, then moves the
- cursor to the window left margin on the next line,
- scrolling the window if on the last line). Tabs are con-
- sidered to be at every eighth column.
-
- If <EM>ch</EM> is any control character other than tab, newline, or
- backspace, it is drawn in <STRONG>^</STRONG><EM>X</EM> notation. Calling <STRONG>winch</STRONG>
- after adding a control character does not return the char-
- acter itself, but instead returns the ^-representation of
- the control character. (To emit control characters liter-
- ally, use <STRONG>echochar</STRONG>.)
-
- Video attributes can be combined with a character argument
- passed to <STRONG>addch</STRONG> or related functions by logical-ORing them
- into the character. (Thus, text, including attributes,
- can be copied from one place to another using <STRONG>inch</STRONG> and
- <STRONG>addch</STRONG>.). See the <STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> page for values of prede-
- fined video attribute constants that can be usefully OR'ed
- into characters.
-
- The <STRONG>echochar</STRONG> and <STRONG>wechochar</STRONG> routines are equivalent to a
- call to <STRONG>addch</STRONG> followed by a call to <STRONG>refresh</STRONG>, or a call to
- <STRONG>waddch</STRONG> followed by a call to <STRONG>wrefresh</STRONG>. The knowledge that
- only a single character is being output is used and, for
- non-control characters, a considerable performance gain
-
- <STRONG>Line</STRONG> <STRONG>Graphics</STRONG>
- The following variables may be used to add line drawing
- characters to the screen with routines of the <STRONG>addch</STRONG> fam-
- ily. The default character listed below is used if the
- <STRONG>acsc</STRONG> capability doesn't define a terminal-specific
- replacement for it (but see the EXTENSIONS section below).
- The names are taken from VT100 nomenclature.
-
- l l l _ _ _ l l l. <EM>Name</EM> <EM>Default</EM> <EM>Description</EM>
- ACS_ULCORNER + upper left-hand corner
- ACS_LLCORNER + lower left-hand corner
- ACS_URCORNER + upper right-hand corner
- ACS_LRCORNER + lower right-hand corner
- ACS_RTEE + right tee ACS_LTEE + left tee
- ACS_BTEE + bottom tee ACS_TTEE + top tee
- ACS_HLINE - horizontal line ACS_VLINE | vertical
- line ACS_PLUS + plus ACS_S1 - scan line 1
- ACS_S9 _ scan line 9 ACS_DIAMOND + diamond
- ACS_CKBOARD : checker board (stipple)
- ACS_DEGREE ' degree symbol
- ACS_PLMINUS # plus/minus ACS_BULLET o bullet
- ACS_LARROW < arrow pointing left
- ACS_RARROW > arrow pointing right
- ACS_DARROW v arrow pointing down
- ACS_UARROW ^ arrow pointing up ACS_BOARD # board
- of squares ACS_LANTERN # lantern symbol
- ACS_BLOCK # solid square block ACS_S3 - scan line
- 3 ACS_S7 - scan line 7 ACS_LEQUAL < less-
- than-or-equal-to ACS_GEQUAL > greater-than-or-
- equal-to ACS_PI * greek pi ACS_NEQUAL ! not-
- equal ACS_STERLING f pound-sterling symbol
-
-
-
-</PRE>
-<H2>RETURN VALUE</H2><PRE>
- All routines return the integer <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG> on
- success (the SVr4 manuals specify only "an integer value
- other than <STRONG>ERR</STRONG>") upon successful completion, unless other-
- wise noted in the preceding routine descriptions.
-
-
-</PRE>
-<H2>NOTES</H2><PRE>
- Note that <STRONG>addch</STRONG>, <STRONG>mvaddch</STRONG>, <STRONG>mvwaddch</STRONG>, and <STRONG>echochar</STRONG> may be
- macros.
-
-
-</PRE>
-<H2>EXTENSIONS</H2><PRE>
- The following extended <STRONG>curses</STRONG> features are available only
- on PC-clone consoles and compatible terminals obeying the
- ANSI.SYS de-facto standard for terminal control sequences.
- They are not part of XSI curses.
-
- The attribute A_ALTCHARSET actually forces literal display
- of PC ROM characters including the high-half graphics.
- the card-suit characters, up and down-arrow, and most oth-
- ers in the range 0-32. (In a terminfo entry designed for
- use with <STRONG>ncurses</STRONG>, the high-half characters are obtained
- using this attribute with an <STRONG>acsc</STRONG> string in which the sec-
- ond of each pair is a high-half character.)
-
- Giving <STRONG>wechochar</STRONG> an argument with its high bit set will
- produce the corresponding high-half ASCII graphic (SVr4
- curses also has this feature but does not document it). A
- control-character argument, however, will not typically
- produce the corresponding graphic; characters such as CR,
- NL, FF and TAB are typically interpreted by the console
- driver itself, and ESC will be interpreted as the leader
- of a control sequence.
-
-
-</PRE>
-<H2>PORTABILITY</H2><PRE>
- All these functions are described in the XSI Curses stan-
- dard, Issue 4. The defaults specified for forms-drawing
- characters apply in the POSIX locale.
-
- The seven ACS symbols starting with <STRONG>ACS_S3</STRONG> were not docu-
- mented in any publicly released System V. However, many
- publicly available terminfos include <STRONG>acsc</STRONG> strings in which
- their key characters (pryz{|}) are embedded, and a second-
- hand list of their character descriptions has come to
- light. The ACS-prefixed names for them were invented for
- <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>.
-
-
-</PRE>
-<H2>SEE ALSO</H2><PRE>
- <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>, <STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>, <STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG>,
- <STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>, <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>, <STRONG><A HREF="putc.3s.html">putc(3S)</A></STRONG>.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</PRE>
-</BODY>
-</HTML>
+++ /dev/null
-<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
- <STRONG>getmouse</STRONG>, <STRONG>ungetmouse</STRONG>, <STRONG>mousemask</STRONG> - mouse interface through
- curses
-
-
-</PRE>
-<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
-
- <STRONG>typedef</STRONG> <STRONG>unsigned</STRONG> <STRONG>long</STRONG> <STRONG>mmask_t;</STRONG>
-
- <STRONG>typedef</STRONG> <STRONG>struct</STRONG>
- <STRONG>{</STRONG>
- <STRONG>short</STRONG> <STRONG>id;</STRONG> <EM>/*</EM> <EM>ID</EM> <EM>to</EM> <EM>distinguish</EM> <EM>multiple</EM> <EM>devices</EM> <EM>*/</EM>
- <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>y,</STRONG> <STRONG>z;</STRONG> <EM>/*</EM> <EM>event</EM> <EM>coordinates</EM> <EM>*/</EM>
- <STRONG>mmask_t</STRONG> <STRONG>bstate;</STRONG> <EM>/*</EM> <EM>button</EM> <EM>state</EM> <EM>bits</EM> <EM>*/</EM>
- <STRONG>}</STRONG>
- <STRONG>MEVENT;</STRONG>
- <STRONG>int</STRONG> <STRONG>getmouse(MEVENT</STRONG> <STRONG>*event);</STRONG>
- <STRONG>int</STRONG> <STRONG>ungetmouse(MEVENT</STRONG> <STRONG>*event);</STRONG>
- <STRONG>mmask_t</STRONG> <STRONG>mousemask(mmask_t</STRONG> <STRONG>newmask,</STRONG> <STRONG>mmask_t</STRONG> <STRONG>*oldmask);</STRONG>
- <STRONG>bool</STRONG> <STRONG>wenclose(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x)</STRONG>
- <STRONG>int</STRONG> <STRONG>mouseinterval(int</STRONG> <STRONG>erval)</STRONG>
-
-
-</PRE>
-<H2>DESCRIPTION</H2><PRE>
- These functions provide an interface to mouse events from
- <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>. Mouse events are represented by <STRONG>KEY_MOUSE</STRONG>
- pseudo-key values in the <STRONG>wgetch</STRONG> input stream.
-
- To make mouse events visible, use the <STRONG>mousemask</STRONG> function.
- This will set the mouse events to be reported. By
- default, no mouse events are reported. The function will
- return a mask to indicate which of the specified mouse
- events can be reported; on complete failure it returns 0.
- If oldmask is non-NULL, this function fills the indicated
- location with the previous value of the given window's
- mouse event mask.
-
- As a side effect, setting a zero mousemask may turn off
- the mouse pointer; setting a nonzero mask may turn it on.
- Whether this happens is device-dependent.
-
- Here are the mouse event type masks:
-
- l l _ _ l l. <EM>Name</EM> <EM>Description</EM> BUTTON1_PRESSED mouse
- button 1 down BUTTON1_RELEASED mouse button 1 up
- BUTTON1_CLICKED mouse button 1 clicked
- BUTTON1_DOUBLE_CLICKED mouse button 1 double clicked
- BUTTON1_TRIPLE_CLICKED mouse button 1 triple clicked
- BUTTON2_PRESSED mouse button 2 down
- BUTTON2_RELEASED mouse button 2 up
- BUTTON2_CLICKED mouse button 2 clicked
- BUTTON2_DOUBLE_CLICKED mouse button 2 double clicked
- BUTTON2_TRIPLE_CLICKED mouse button 2 triple clicked
- BUTTON3_PRESSED mouse button 3 down
- BUTTON3_DOUBLE_CLICKED mouse button 3 double clicked
- BUTTON3_TRIPLE_CLICKED mouse button 3 triple clicked
- BUTTON4_PRESSED mouse button 4 down
- BUTTON4_RELEASED mouse button 4 up
- BUTTON4_CLICKED mouse button 4 clicked
- BUTTON4_DOUBLE_CLICKED mouse button 4 double clicked
- BUTTON4_TRIPLE_CLICKED mouse button 4 triple clicked
- BUTTON_SHIFT shift was down during button state change
- BUTTON_CTRL control was down during button state change
- BUTTON_ALT alt was down during button state change
- ALL_MOUSE_EVENTS report all button state changes
- REPORT_MOUSE_POSITION report mouse movement
-
- Once a class of mouse events have been made visible in a
- window, calling the <STRONG>wgetch</STRONG> function on that window may
- return <STRONG>KEY_MOUSE</STRONG> as an indicator that a mouse event has
- been queued. To read the event data and pop the event off
- the queue, call <STRONG>getmouse</STRONG>. This function will return <STRONG>OK</STRONG> if
- a mouse event is actually visible in the given window, <STRONG>ERR</STRONG>
- otherwise. When <STRONG>getmouse</STRONG> returns <STRONG>OK</STRONG>, the data deposited
- as y and x in the event structure coordinates will be
- screen-relative character-cell coordinates. The returned
- state mask will have exactly one bit set to indicate the
- event type.
-
- The <STRONG>ungetmouse</STRONG> function behaves analogously to <STRONG>ungetch</STRONG>.
- It pushes a <STRONG>KEY_MOUSE</STRONG> event onto the input queue, and
- associates with that event the given state data and
- screen-relative character-cell coordinates.
-
- The <STRONG>wenclose</STRONG> function tests whether a given pair of
- screen-relative character-cell coordinates is enclosed by
- a given window, returning TRUE if it is and FALSE other-
- wise. It is useful for determining what subset of the
- screen windows enclose the location of a mouse event.
-
- The <STRONG>mouseinterval</STRONG> function sets the maximum time (in thou-
- sands of a second) that can elapse between press and
- release events in order for them to be recognized as a
- click. This function returns the previous interval value.
- The default is one fifth of a second.
-
- Note that mouse events will be ignored when input is in
- cooked mode, and will cause an error beep when cooked mode
- is being simulated in a window by a function such as <STRONG>get-</STRONG>
- <STRONG>str</STRONG> that expects a linefeed for input-loop termination.
-
-
-
-</PRE>
-<H2>RETURN VALUE</H2><PRE>
- All routines return the integer <STRONG>ERR</STRONG> upon failure or <STRONG>OK</STRONG>
- upon successful completion.
-
- These calls were designed for <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>, and are not
- found in SVr4 curses, 4.4BSD curses, or any other previous
- version of curses.
-
- The feature macro <STRONG>NCURSES_MOUSE_VERSION</STRONG> is provided so the
- preprocessor can be used to test whether these features
- are present (its value is 1). NOTE: THIS INTERFACE IS
- EXPERIMENTAL AND IS SUBJECT TO CHANGE WITHOUT NOTICE! If
- the interface is changed, the value of <STRONG>NCURSES_MOUSE_VER-</STRONG>
- <STRONG>SION</STRONG> will be incremented.
-
- The order of the <STRONG>MEVENT</STRONG> structure members is not guaran-
- teed. Additional fields may be added to the structure in
- the future.
-
- Under <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>, these calls are implemented using
- either xterm's built-in mouse-tracking API or Alessandro
- Rubini's gpm server. If you are using something other
- than xterm there is no gpm daemon running on your machine,
- mouse events will not be visible to <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG> (and the
- <STRONG>wmousemask</STRONG> function will always return <STRONG>0</STRONG>).
-
- The z member in the event structure is not presently used.
- It is intended for use with touch screens (which may be
- pressure-sensitive) or with 3D-mice/trackballs/power
- gloves.
-
-
-</PRE>
-<H2>BUGS</H2><PRE>
- Mouse events under xterm will not in fact be ignored dur-
- ing cooked mode, if they have been enabled by <STRONG>wmousemask</STRONG>.
- Instead, the xterm mouse report sequence will appear in
- the string read.
-
- Mouse events under xterm will not be detected correctly in
- a window with its keypad bit off.
-
-
-</PRE>
-<H2>SEE ALSO</H2><PRE>
- <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</PRE>
-</BODY>
-</HTML>
</HEAD>
<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
<H1>Ada95 Binding for ncurses</H1>
-The ncurses Ada95 binding is © 1996 by
-<A HREF="mailto:Juergen.Pfeifer@T-Online.de">Jürgen Pfeifer</A>.
+The ncurses Ada95 binding is © 1996-1999 by
+<A HREF="mailto:juergen.pfeifer@gmx.net">Jürgen Pfeifer</A>.
<P>
Permission is hereby granted to reproduce and distribute this
<HR SIZE=3 NOSHADE>
<H2>General Remarks</H2>
<UL>
-<LI>This document describes Version 00.93 of the binding.</LI>
+<LI>This document describes Version 01.00 of the binding.</LI>
<LI>The functionality is modelled to be compatible with the ncurses
package, a clone of the SVr4 curses model.<BR>
I did the development on an Intel box running
-<A HREF="http://www.linux.org">Linux</A> 1.3.x and 2.0,
+<A HREF="http://www.linux.org">Linux</A> 1.3.x, 2.0, 2.2
ncurses-4.x and the
<A HREF="http://www.gnat.com">GNU Ada Translator</A>
-gnat-3.09. For any older versions of ncurses and gnat
+gnat versions 3.10p to 3.11p. 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
<H2>Hierarchy of packages</H2>
<UL>
-<LI><A HREF="terminal_interface_s.html">Terminal_Interface</A>
- <UL><LI><A HREF="terminal_interface-curses_s.html">Curses</A>
- <UL><LI><A HREF="terminal_interface-curses-mouse_s.html">Mouse</A>
- <LI><A HREF="terminal_interface-curses-panels_s.html">Panels</A>
- <UL><LI><A HREF="terminal_interface-curses-panels-user_data_s.html">User_Data</A>
+<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="terminal_interface-curses-menus_s.html">Menus</A>
- <UL><LI><A HREF="terminal_interface-curses-menus-menu_user_data_s.html">Menu_User_Data</A>
- <LI><A HREF="terminal_interface-curses-menus-item_user_data_s.html">Item_User_Data</A>
+ <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="terminal_interface-curses-forms_s.html">Forms</A>
- <UL><LI><A HREF="terminal_interface-curses-forms-form_user_data_s.html">Form_User_Data</A>
- <LI><A HREF="terminal_interface-curses-forms-field_user_data_s.html">Field_User_Data</A>
- <LI><A HREF="terminal_interface-curses-forms-field_types_s.html">Field_Types</A>
- <UL><LI><A HREF="terminal_interface-curses-forms-field_types-alpha_s.html">Alpha</A>
- <LI><A HREF="terminal_interface-curses-forms-field_types-alphanumeric_s.html">AlphaNumeric</A>
- <LI><A HREF="terminal_interface-curses-forms-field_types-intfield_s.html">IntField</A>
- <LI><A HREF="terminal_interface-curses-forms-field_types-numeric_s.html">Numeric</A>
- <LI><A HREF="terminal_interface-curses-forms-field_types-regexp_s.html">RegExp</A>
- <LI><A HREF="terminal_interface-curses-forms-field_types-ipv4_address_s.html">IPV4_Address</A>
- <LI><A HREF="terminal_interface-curses-forms-field_types-enumeration_s.html">Enumeration</A>
- <UL><LI><A HREF="terminal_interface-curses-forms-field_types-enumeration-ada_s.html">Ada</A>
+ <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="terminal_interface-curses-forms-field_types-user_s.html">User</A>
- <UL><LI><A HREF="terminal_interface-curses-forms-field_types-user-choice_s.html">Choice</A>
+ <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="terminal_interface-curses-text_io_s.html">Text_IO</A>
- <UL><LI><A HREF="terminal_interface-curses-text_io-integer_io_s.html">Integer_IO</A>
- <LI><A HREF="terminal_interface-curses-text_io-float_io_s.html">Float_IO</A>
- <LI><A HREF="terminal_interface-curses-text_io-fixed_io_s.html">Fixed_IO</A>
- <LI><A HREF="terminal_interface-curses-text_io-decimal_io_s.html">Decimal_IO</A>
- <LI><A HREF="terminal_interface-curses-text_io-modular_io_s.html">Modular_IO</A>
- <LI><A HREF="terminal_interface-curses-text_io-enumeration_io_s.html">Enumeration_IO</A>
- <LI><A HREF="terminal_interface-curses-text_io-complex_io_s.html">Complex_IO</A>
+ <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>,
--- /dev/null
+<HTML>
+<BODY>
+<PRE>
+ <STRONG>addch</STRONG>, <STRONG>waddch</STRONG>, <STRONG>mvaddch</STRONG>, <STRONG>mvwaddch</STRONG>, <STRONG>echochar</STRONG>, <STRONG>wechochar</STRONG> -
+ add a character (with attributes) to a <STRONG>curses</STRONG> window, then
+ advance the cursor
+
+
+</PRE>
+<H2>SYNOPSIS</H2><PRE>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+
+ <STRONG>int</STRONG> <STRONG>addch(chtype</STRONG> <STRONG>ch);</STRONG>
+ <STRONG>int</STRONG> <STRONG>waddch(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
+ <STRONG>int</STRONG> <STRONG>mvaddch(int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
+ <STRONG>int</STRONG> <STRONG>mvwaddch(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
+ <STRONG>int</STRONG> <STRONG>echochar(chtype</STRONG> <STRONG>ch);</STRONG>
+ <STRONG>int</STRONG> <STRONG>wechochar(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
+
+
+</PRE>
+<H2>DESCRIPTION</H2><PRE>
+ The <STRONG>addch</STRONG>, <STRONG>waddch</STRONG>, <STRONG>mvaddch</STRONG> and <STRONG>mvwaddch</STRONG> routines put the
+ character <EM>ch</EM> into the given window at its current window
+ position, which is then advanced. They are analogous to
+ <STRONG>putchar</STRONG> in <STRONG><A HREF="stdio.3.html">stdio(3)</A></STRONG>. If the advance is at the right mar-
+ gin, the cursor automatically wraps to the beginning of
+ the next line. At the bottom of the current scrolling
+ region, if <STRONG>scrollok</STRONG> is enabled, the scrolling region is
+ scrolled up one line.
+
+ If <EM>ch</EM> is a tab, newline, or backspace, the cursor is moved
+ appropriately within the window. Backspace moves the cur-
+ sor one character left; at the left edge of a window it
+ does nothing. Newline does a <STRONG>clrtoeol</STRONG>, then moves the
+ cursor to the window left margin on the next line,
+ scrolling the window if on the last line). Tabs are con-
+ sidered to be at every eighth column.
+
+ If <EM>ch</EM> is any control character other than tab, newline, or
+ backspace, it is drawn in <STRONG>^</STRONG><EM>X</EM> notation. Calling <STRONG>winch</STRONG>
+ after adding a control character does not return the char-
+ acter itself, but instead returns the ^-representation of
+ the control character.
+
+ Video attributes can be combined with a character argument
+ passed to <STRONG>addch</STRONG> or related functions by logical-ORing them
+ into the character. (Thus, text, including attributes,
+ can be copied from one place to another using <STRONG>inch</STRONG> and
+ <STRONG>addch</STRONG>.). See the <STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> page for values of prede-
+ fined video attribute constants that can be usefully OR'ed
+ into characters.
+
+ The <STRONG>echochar</STRONG> and <STRONG>wechochar</STRONG> routines are equivalent to a
+ call to <STRONG>addch</STRONG> followed by a call to <STRONG>refresh</STRONG>, or a call to
+ <STRONG>waddch</STRONG> followed by a call to <STRONG>wrefresh</STRONG>. The knowledge that
+ only a single character is being output is used and, for
+ non-control characters, a considerable performance gain
+ may be seen by using these routines instead of their
+ The following variables may be used to add line drawing
+ characters to the screen with routines of the <STRONG>addch</STRONG> fam-
+ ily. The default character listed below is used if the
+ <STRONG>acsc</STRONG> capability doesn't define a terminal-specific
+ replacement for it (but see the EXTENSIONS section below).
+ The names are taken from VT100 nomenclature.
+
+ l l l _ _ _ l l l. <EM>Name</EM> <EM>Default</EM> <EM>Description</EM>
+ ACS_BLOCK # solid square block ACS_BOARD # board of
+ squares ACS_BTEE + bottom tee ACS_BULLET o bul-
+ let ACS_CKBOARD : checker board (stipple)
+ ACS_DARROW v arrow pointing down
+ ACS_DEGREE ' degree symbol ACS_DIAMOND + dia-
+ mond ACS_GEQUAL > greater-than-or-equal-to
+ ACS_HLINE - horizontal line ACS_LANTERN # lantern
+ symbol ACS_LARROW < arrow pointing left
+ ACS_LEQUAL < less-than-or-equal-to
+ ACS_LLCORNER + lower left-hand corner
+ ACS_LRCORNER + lower right-hand corner
+ ACS_LTEE + left tee ACS_NEQUAL ! not-equal
+ ACS_PI * greek pi ACS_PLMINUS # plus/minus
+ ACS_PLUS + plus ACS_RARROW > arrow pointing
+ right ACS_RTEE + right tee ACS_S1 - scan line 1
+ ACS_S3 - scan line 3 ACS_S7 - scan line 7
+ ACS_S9 _ scan line 9 ACS_STERLING f pound-ster-
+ ling symbol ACS_TTEE + top tee
+ ACS_UARROW ^ arrow pointing up
+ ACS_ULCORNER + upper left-hand corner
+ ACS_URCORNER + upper right-hand corner
+ ACS_VLINE | vertical line
+
+
+
+</PRE>
+<H2>RETURN VALUE</H2><PRE>
+ All routines return the integer <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG> on
+ success (the SVr4 manuals specify only "an integer value
+ other than <STRONG>ERR</STRONG>") upon successful completion, unless other-
+ wise noted in the preceding routine descriptions.
+
+
+</PRE>
+<H2>NOTES</H2><PRE>
+ Note that <STRONG>addch</STRONG>, <STRONG>mvaddch</STRONG>, <STRONG>mvwaddch</STRONG>, and <STRONG>echochar</STRONG> may be
+ macros.
+
+
+</PRE>
+<H2>PORTABILITY</H2><PRE>
+ All these functions are described in the XSI Curses stan-
+ dard, Issue 4. The defaults specified for forms-drawing
+ characters apply in the POSIX locale.
+
+ Some ACS symbols (ACS_S3, ACS_S7, ACS_LEQUAL, ACS_GEQUAL,
+ ACS_PI, ACS_NEQUAL, ACS_STERLING) were not documented in
+ any publicly released System V. However, many publicly
+ available terminfos include <STRONG>acsc</STRONG> strings in which their
+ key characters (pryz{|}) are embedded, and a second-hand
+ <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>.
+
+
+</PRE>
+<H2>SEE ALSO</H2><PRE>
+ <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>, <STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>, <STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG>,
+ <STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>, <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>, <STRONG><A HREF="putc.3s.html">putc(3S)</A></STRONG>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</PRE>
+</BODY>
+</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>addchstr</STRONG>, <STRONG>addchnstr</STRONG>, <STRONG>waddchstr</STRONG>, <STRONG>waddchnstr</STRONG>, <STRONG>mvaddchstr</STRONG>,
<STRONG>mvaddchnstr</STRONG>, <STRONG>mvwaddchstr</STRONG>, <STRONG>mvwaddchnstr</STRONG> - add a string of
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>addchstr(const</STRONG> <STRONG>chtype</STRONG> <STRONG>*chstr);</STRONG>
<STRONG>int</STRONG> <STRONG>addchnstr(const</STRONG> <STRONG>chtype</STRONG> <STRONG>*chstr,</STRONG> <STRONG>int</STRONG> <STRONG>n);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>addstr</STRONG>, <STRONG>addnstr</STRONG>, <STRONG>waddstr</STRONG>, <STRONG>waddnstr</STRONG>, <STRONG>mvaddstr</STRONG>, <STRONG>mvaddnstr</STRONG>,
<STRONG>mvwaddstr</STRONG>, <STRONG>mvwaddnstr</STRONG> - add a string of characters to a
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>addstr(const</STRONG> <STRONG>char</STRONG> <STRONG>*str);</STRONG>
<STRONG>int</STRONG> <STRONG>addnstr(const</STRONG> <STRONG>char</STRONG> <STRONG>*str,</STRONG> <STRONG>int</STRONG> <STRONG>n);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>attroff</STRONG>, <STRONG>wattroff</STRONG>, <STRONG>attron</STRONG>, <STRONG>wattron</STRONG>, <STRONG>attrset</STRONG>, <STRONG>wattrset</STRONG>,
- <STRONG>standend</STRONG>, <STRONG>wstandend</STRONG>, <STRONG>standout</STRONG>, <STRONG>wstandout</STRONG> - <STRONG>curses</STRONG> charac-
- ter and window attribute control routines
+ <STRONG>color_set</STRONG>, <STRONG>wcolor_set</STRONG>, <STRONG>standend</STRONG>, <STRONG>wstandend</STRONG>, <STRONG>standout</STRONG>,
+ <STRONG>wstandout</STRONG> - <STRONG>curses</STRONG> character and window attribute control
+ routines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>attroff(int</STRONG> <STRONG>attrs);</STRONG>
<STRONG>int</STRONG> <STRONG>wattroff(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>attrs);</STRONG>
<STRONG>int</STRONG> <STRONG>attron(int</STRONG> <STRONG>attrs);</STRONG>
<STRONG>int</STRONG> <STRONG>wattron(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>attrs);</STRONG>
<STRONG>int</STRONG> <STRONG>attrset(int</STRONG> <STRONG>attrs);</STRONG>
<STRONG>int</STRONG> <STRONG>wattrset(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>attrs);</STRONG>
+ <STRONG>int</STRONG> <STRONG>color_set(short</STRONG> <STRONG>color_pair_number,</STRONG> <STRONG>void*</STRONG> <STRONG>opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>wcolor_set(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>short</STRONG> <STRONG>color_pair_number,</STRONG>
+ <STRONG>void*</STRONG> <STRONG>opts);</STRONG>
<STRONG>int</STRONG> <STRONG>standend(void);</STRONG>
<STRONG>int</STRONG> <STRONG>wstandend(WINDOW</STRONG> <STRONG>*win);</STRONG>
<STRONG>int</STRONG> <STRONG>standout(void);</STRONG>
<STRONG>int</STRONG> <STRONG>wstandout(WINDOW</STRONG> <STRONG>*win);</STRONG>
- <STRONG>attr_t</STRONG> <STRONG>attr_get(void);</STRONG>
- <STRONG>attr_t</STRONG> <STRONG>wattr_get(WINDOW</STRONG> <STRONG>*);</STRONG>
- <STRONG>int</STRONG> <STRONG>attr_off(attr_t</STRONG> <STRONG>attrs);</STRONG>
- <STRONG>int</STRONG> <STRONG>wattr_off(WINDOW</STRONG> <STRONG>*,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attrs);</STRONG>
- <STRONG>int</STRONG> <STRONG>attr_on(attr_t</STRONG> <STRONG>attrs);</STRONG>
- <STRONG>int</STRONG> <STRONG>wattr_on(WINDOW</STRONG> <STRONG>*,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attrs);</STRONG>
- <STRONG>int</STRONG> <STRONG>attr_set(attr_t</STRONG> <STRONG>attrs);</STRONG>
- <STRONG>int</STRONG> <STRONG>wattr_set(WINDOW</STRONG> <STRONG>*,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attrs);</STRONG>
- <STRONG>int</STRONG> <STRONG>chgat(int</STRONG> <STRONG>n,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attr,</STRONG> <STRONG>short</STRONG> <STRONG>color,</STRONG> <STRONG>const</STRONG> <STRONG>void</STRONG>
- <STRONG>*opts)</STRONG>
- <STRONG>int</STRONG> <STRONG>wchgat(WINDOW</STRONG> <STRONG>*,</STRONG> <STRONG>int</STRONG> <STRONG>n,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attr,</STRONG>
+ <STRONG>int</STRONG> <STRONG>attr_get(attr_t</STRONG> <STRONG>*attrs,</STRONG> <STRONG>short</STRONG> <STRONG>*pair,</STRONG> <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>wattr_get(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>attr_t</STRONG> <STRONG>*attrs,</STRONG> <STRONG>short</STRONG> <STRONG>*pair,</STRONG>
+ <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>attr_off(attr_t</STRONG> <STRONG>attrs,</STRONG> <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>wattr_off(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attrs,</STRONG> <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>attr_on(attr_t</STRONG> <STRONG>attrs,</STRONG> <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>wattr_on(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attrs,</STRONG> <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>attr_set(attr_t</STRONG> <STRONG>attrs,</STRONG> <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>wattr_set(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attrs,</STRONG> <STRONG>void</STRONG> <STRONG>*opts);</STRONG>
+ <STRONG>int</STRONG> <STRONG>chgat(int</STRONG> <STRONG>n,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attr,</STRONG> <STRONG>short</STRONG> <STRONG>color,</STRONG>
+ <STRONG>const</STRONG> <STRONG>void</STRONG> <STRONG>*opts)</STRONG>
+ <STRONG>int</STRONG> <STRONG>wchgat(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>n,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attr,</STRONG>
<STRONG>short</STRONG> <STRONG>color,</STRONG> <STRONG>const</STRONG> <STRONG>void</STRONG> <STRONG>*opts)</STRONG>
<STRONG>int</STRONG> <STRONG>mvchgat(int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>int</STRONG> <STRONG>n,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attr,</STRONG>
<STRONG>short</STRONG> <STRONG>color,</STRONG> <STRONG>const</STRONG> <STRONG>void</STRONG> <STRONG>*opts)</STRONG>
- <STRONG>int</STRONG> <STRONG>mvwchgat(WINDOW</STRONG> <STRONG>*,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>int</STRONG> <STRONG>n,</STRONG> <STRONG>attr_t</STRONG> <STRONG>attr,</STRONG>
- <STRONG>short</STRONG> <STRONG>color,</STRONG> <STRONG>const</STRONG> <STRONG>void</STRONG> <STRONG>*opts)</STRONG>
+ <STRONG>int</STRONG> <STRONG>mvwchgat(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>int</STRONG> <STRONG>n,</STRONG>
+ <STRONG>attr_t</STRONG> <STRONG>attr,</STRONG> <STRONG>short</STRONG> <STRONG>color,</STRONG> <STRONG>const</STRONG> <STRONG>void</STRONG> <STRONG>*opts)</STRONG>
</PRE>
The routine <STRONG>attrset</STRONG> sets the current attributes of the
given window to <EM>attrs</EM>. The routine <STRONG>attroff</STRONG> turns off the
named attributes without turning any other attributes on
- or off. The routine <STRONG>attron</STRONG> turns on the named attributes
- without affecting any others. The routine <STRONG>standout</STRONG> is the
same as <STRONG>attron(A_STANDOUT)</STRONG>. The routine <STRONG>standend</STRONG> is the
same as <STRONG>attrset(A_NORMAL)</STRONG> or <STRONG>attrset(0)</STRONG>, that is, it turns
off all attributes.
- the given window; <STRONG>attr_get</STRONG> returns the current attribute
- for <STRONG>stdscr</STRONG>. The remaining <STRONG>attr_</STRONG>* functions operate
- exactly like the corresponding <STRONG>attr</STRONG>* functions, except
- that they take arguments of type <STRONG>attr_t</STRONG> rather than <STRONG>int</STRONG>.
+
+ The routine <STRONG>color_set</STRONG> sets the current color of the given
+ window to the foreground/background combination described
+ by the color_pair_number. The parameter opts is reserved
+ for future use, applications must supply a null pointer.
+
+ The routine <STRONG>wattr_get</STRONG> returns the current attribute and
+ color pair for the given window; <STRONG>attr_get</STRONG> returns the cur-
+ rent attribute and color pair for <STRONG>stdscr</STRONG>. The remaining
+ <STRONG>attr_</STRONG>* functions operate exactly like the corresponding
+ <STRONG>attr</STRONG>* functions, except that they take arguments of type
+ <STRONG>attr_t</STRONG> rather than <STRONG>int</STRONG>.
The routine <STRONG>chgat</STRONG> changes the attributes of a given number
of characters starting at the current cursor location of
future (leave it <STRONG>NULL</STRONG>).
<STRONG>Attributes</STRONG>
- The following video attributes, defined in <STRONG><curses.h></STRONG>, can
+ The following video attributes, defined in <STRONG><curses.h></STRONG>, can
be passed to the routines <STRONG>attron</STRONG>, <STRONG>attroff</STRONG>, and <STRONG>attrset</STRONG>, or
OR'ed with the characters passed to <STRONG>addch</STRONG>.
ingful (they are implemented as macro-expanded assignments
and simply return their argument). The SVr4 manual page
claims (falsely) that these routines always return <STRONG>1</STRONG>.
-
-
-
-</PRE>
-<H2>NOTES</H2><PRE>
Note that <STRONG>attroff</STRONG>, <STRONG>wattroff</STRONG>, <STRONG>attron</STRONG>, <STRONG>wattron</STRONG>, <STRONG>attrset</STRONG>,
<STRONG>wattrset</STRONG>, <STRONG>standend</STRONG> and <STRONG>standout</STRONG> may be macros.
dard, Issue 4. The standard defined the dedicated type
for highlights, <STRONG>attr_t</STRONG>, which is not defined in SVr4
curses. The functions taking <STRONG>attr_t</STRONG> arguments are not sup-
+ ported under SVr4.
+
+ The XSI Curses standard states that whether the tradi-
tional functions <STRONG>attron</STRONG>/<STRONG>attroff</STRONG>/<STRONG>attrset</STRONG> can manipulate
attributes other than <STRONG>A_BLINK</STRONG>, <STRONG>A_BOLD</STRONG>, <STRONG>A_DIM</STRONG>, <STRONG>A_REVERSE</STRONG>,
<STRONG>A_STANDOUT</STRONG>, or <STRONG>A_UNDERLINE</STRONG> is "unspecified". Under this
-
-
-
-
-
-
-
-
-
-
-
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>beep</STRONG>, <STRONG>flash</STRONG> - <STRONG>curses</STRONG> bell and screen flash routines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>beep(void);</STRONG>
<STRONG>int</STRONG> <STRONG>flash(void);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>bkgdset</STRONG>, <STRONG>wbkgdset</STRONG>, <STRONG>bkgd</STRONG>, <STRONG>wbkgd</STRONG> - <STRONG>curses</STRONG> window background
manipulation routines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>void</STRONG> <STRONG>bkgdset(const</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
<STRONG>void</STRONG> <STRONG>wbkgdset(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>const</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>border</STRONG>, <STRONG>wborder</STRONG>, <STRONG>box</STRONG>, <STRONG>hline</STRONG>, <STRONG>whline</STRONG>, <STRONG>vline</STRONG>, <STRONG>wvline</STRONG> - cre-
ate <STRONG>curses</STRONG> borders, horizontal and vertical lines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>border(chtype</STRONG> <STRONG>ls,</STRONG> <STRONG>chtype</STRONG> <STRONG>rs,</STRONG> <STRONG>chtype</STRONG> <STRONG>ts,</STRONG> <STRONG>chtype</STRONG> <STRONG>bs,</STRONG>
<STRONG>chtype</STRONG> <STRONG>tl,</STRONG> <STRONG>chtype</STRONG> <STRONG>tr,</STRONG> <STRONG>chtype</STRONG> <STRONG>bl,</STRONG> <STRONG>chtype</STRONG> <STRONG>br);</STRONG>
<STRONG>int</STRONG> <STRONG>wborder(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>chtype</STRONG> <STRONG>ls,</STRONG> <STRONG>chtype</STRONG> <STRONG>rs,</STRONG>
any of these arguments is zero, then the following default
values (defined in <STRONG>curses.h</STRONG>) are used instead: <STRONG>ACS_VLINE</STRONG>,
<STRONG>ACS_VLINE</STRONG>, <STRONG>ACS_HLINE</STRONG>, <STRONG>ACS_HLINE</STRONG>, <STRONG>ACS_ULCORNER</STRONG>,
- <STRONG>ACS_URCORNER</STRONG>, <STRONG>ACS_BLCORNER</STRONG>, <STRONG>ACS_BRCORNER</STRONG>.
+ <STRONG>ACS_URCORNER</STRONG>, <STRONG>ACS_LLCORNER</STRONG>, <STRONG>ACS_LRCORNER</STRONG>.
<STRONG>box(</STRONG><EM>win</EM><STRONG>,</STRONG> <EM>verch</EM><STRONG>,</STRONG> <EM>horch</EM><STRONG>)</STRONG> is a shorthand for the following
call: <STRONG>wborder(</STRONG><EM>win</EM><STRONG>,</STRONG> <EM>verch</EM><STRONG>,</STRONG> <EM>verch</EM><STRONG>,</STRONG> <EM>horch</EM><STRONG>,</STRONG> <EM>horch</EM><STRONG>,</STRONG> <STRONG>0,</STRONG> <STRONG>0,</STRONG> <STRONG>0,</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>erase</STRONG>, <STRONG>werase</STRONG>, <STRONG>clear</STRONG>, <STRONG>wclear</STRONG>, <STRONG>clrtobot</STRONG>, <STRONG>wclrtobot</STRONG>, <STRONG>clr-</STRONG>
<STRONG>toeol</STRONG>, <STRONG>wclrtoeol</STRONG> - clear all or part of a <STRONG>curses</STRONG> window
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#</STRONG> <STRONG>include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#</STRONG> <STRONG>include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>erase(void);</STRONG>
<STRONG>int</STRONG> <STRONG>werase(WINDOW</STRONG> <STRONG>*win);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>start_color</STRONG>, <STRONG>init_pair</STRONG>, <STRONG>init_color</STRONG>, <STRONG>has_colors</STRONG>,
<STRONG>can_change_color</STRONG>, <STRONG>color_content</STRONG>, <STRONG>pair_content</STRONG> - <STRONG>curses</STRONG>
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#</STRONG> <STRONG>include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#</STRONG> <STRONG>include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>start_color(void);</STRONG>
<STRONG>int</STRONG> <STRONG>init_pair(short</STRONG> <STRONG>pair,</STRONG> <STRONG>short</STRONG> <STRONG>f,</STRONG> <STRONG>short</STRONG> <STRONG>b);</STRONG>
<STRONG>int</STRONG> <STRONG>init_color(short</STRONG> <STRONG>color,</STRONG> <STRONG>short</STRONG> <STRONG>r,</STRONG> <STRONG>short</STRONG> <STRONG>g,</STRONG> <STRONG>short</STRONG> <STRONG>b);</STRONG>
background color (for the blank field on which the charac-
ters are displayed). A programmer initializes a color-
pair with the routine <STRONG>init_pair</STRONG>. After it has been ini-
- tialized, <STRONG>COLOR_PAIR</STRONG>(<EM>n</EM>), a macro defined in <STRONG><curses.h></STRONG>,
+ tialized, <STRONG>COLOR_PAIR</STRONG>(<EM>n</EM>), a macro defined in <STRONG><curses.h></STRONG>,
can be used as a new video attribute.
If a terminal is capable of redefining colors, the pro-
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>delch</STRONG>, <STRONG>wdelch</STRONG>, <STRONG>mvdelch</STRONG>, <STRONG>mvwdelch</STRONG> - delete character under
the cursor in a <STRONG>curses</STRONG> window
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>delch(void);</STRONG>
<STRONG>int</STRONG> <STRONG>wdelch(WINDOW</STRONG> <STRONG>*win);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>deleteln</STRONG>, <STRONG>wdeleteln</STRONG>, <STRONG>insdelln</STRONG>, <STRONG>winsdelln</STRONG>, <STRONG>insertln</STRONG>, <STRONG>win-</STRONG>
<STRONG>sertln</STRONG> - delete and insert lines in a <STRONG>curses</STRONG> window
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>deleteln(void);</STRONG>
<STRONG>int</STRONG> <STRONG>wdeleteln(WINDOW</STRONG> <STRONG>*win);</STRONG>
</PRE>
<H2>NOTES</H2><PRE>
- Note that all but <STRONG>winsdelln</STRONG> may be a macros.
+ Note that all but <STRONG>winsdelln</STRONG> may be macros.
These routines do not require a hardware line delete or
insert feature in the terminal. In fact, they won't use
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>getch</STRONG>, <STRONG>wgetch</STRONG>, <STRONG>mvgetch</STRONG>, <STRONG>mvwgetch</STRONG>, <STRONG>ungetch</STRONG> - get (or push
back) characters from <STRONG>curses</STRONG> terminal keyboard
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>getch(void);</STRONG>
<STRONG>int</STRONG> <STRONG>wgetch(WINDOW</STRONG> <STRONG>*win);</STRONG>
If <STRONG>keypad</STRONG> is <STRONG>TRUE</STRONG>, and a function key is pressed, the
token for that function key is returned instead of the raw
characters. Possible function keys are defined in
- <STRONG><curses.h></STRONG> as macros with values outside the range of
+ <STRONG><curses.h></STRONG> as macros with values outside the range of
8-bit characters whose names begin with <STRONG>KEY_.</STRONG> Thus, a
variable intended to hold the return value of a function
key must be of short size or larger.
<STRONG>Function</STRONG> <STRONG>Keys</STRONG>
- The following function keys, defined in <STRONG><curses.h></STRONG>, might
+ The following function keys, defined in <STRONG><curses.h></STRONG>, might
be returned by <STRONG>getch</STRONG> if <STRONG>keypad</STRONG> has been enabled. Note
that not all of these are necessarily supported on any
particular terminal.
KEY_BREAK/Break key KEY_DOWN/The four arrow keys ...
KEY_UP KEY_LEFT KEY_RIGHT KEY_HOME/Home key (upward+left
arrow) KEY_BACKSPACE/Backspace KEY_F0/T{ Function keys;
- space for 64 keys is reserved. T} KEY_F(<EM>n</EM>)/T{ For 0 <= <EM>n</EM>
- <= 63 T} KEY_DL/Delete line KEY_IL/Insert line
+ space for 64 keys is reserved. T} KEY_F(<EM>n</EM>)/T{ For 0 <= <EM>n</EM>
+ <= 63 T} KEY_DL/Delete line KEY_IL/Insert line
KEY_DC/Delete character KEY_IC/Insert char or enter insert
mode KEY_EIC/Exit insert char mode KEY_CLEAR/Clear screen
KEY_EOS/Clear to end of screen KEY_EOL/Clear to end of
Note that <STRONG>getch</STRONG>, <STRONG>mvgetch</STRONG>, and <STRONG>mvwgetch</STRONG> may be macros.
Historically, the set of keypad macros was largely defined
- by the extremely function-key-rich keyboard of the AT&T
+ by the extremely function-key-rich keyboard of the AT&T
7300, aka 3B1, aka Safari 4. Modern personal computers
usually have only a small subset of these. IBM PC-style
consoles typically support little more than <STRONG>KEY_UP</STRONG>,
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>getstr</STRONG>, <STRONG>wgetstr</STRONG>, <STRONG>mvgetstr</STRONG>, <STRONG>mvwgetstr</STRONG>, <STRONG>wgetnstr</STRONG> - accept
character strings from <STRONG>curses</STRONG> terminal keyboard
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>getstr(char</STRONG> <STRONG>*str);</STRONG>
<STRONG>int</STRONG> <STRONG>getnstr(char</STRONG> <STRONG>*str,</STRONG> <STRONG>int</STRONG> <STRONG>n);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>getyx</STRONG>, <STRONG>getparyx</STRONG>, <STRONG>getbegyx</STRONG>, <STRONG>getmaxyx</STRONG> - get <STRONG>curses</STRONG> cursor
and window coordinates
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>void</STRONG> <STRONG>getyx(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x);</STRONG>
<STRONG>void</STRONG> <STRONG>getparyx(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x);</STRONG>
</PRE>
<H2>NOTES</H2><PRE>
- All of these interfaces are macros and that "<STRONG>&</STRONG>" is not
+ All of these interfaces are macros and that "<STRONG>&</STRONG>" is not
necessary before the variables <EM>y</EM> and <EM>x</EM>.
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>inch</STRONG>, <STRONG>winch</STRONG>, <STRONG>mvinch</STRONG>, <STRONG>mvwinch</STRONG> - get a character and
attributes from a <STRONG>curses</STRONG> window
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>chtype</STRONG> <STRONG>inch(void);</STRONG>
<STRONG>chtype</STRONG> <STRONG>winch(WINDOW</STRONG> <STRONG>*win);</STRONG>
the current position in the named window. If any
attributes are set for that position, their values are
OR'ed into the value returned. Constants defined in
- <STRONG><curses.h></STRONG> can be used with the <STRONG>&</STRONG> (logical AND) operator
+ <STRONG><curses.h></STRONG> can be used with the <STRONG>&</STRONG> (logical AND) operator
to extract the character or attributes alone.
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>inchstr</STRONG>, <STRONG>inchnstr</STRONG>, <STRONG>winchstr</STRONG>, <STRONG>winchnstr</STRONG>, <STRONG>mvinchstr</STRONG>,
<STRONG>mvinchnstr</STRONG>, <STRONG>mvwinchstr</STRONG>, <STRONG>mvwinchnstr</STRONG> - get a string of
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>inchstr(chtype</STRONG> <STRONG>*chstr);</STRONG>
<STRONG>int</STRONG> <STRONG>inchnstr(chtype</STRONG> <STRONG>*chstr,</STRONG> <STRONG>int</STRONG> <STRONG>n);</STRONG>
named window and ending at the right margin of the window.
The four functions with <EM>n</EM> as the last argument, return a
leading substring at most <EM>n</EM> characters long (exclusive of
- the trailing (chtype)0). Constants defined in <STRONG><curses.h></STRONG>
- can be used with the <STRONG>&</STRONG> (logical AND) operator to extract
+ the trailing (chtype)0). Constants defined in <STRONG><curses.h></STRONG>
+ can be used with the <STRONG>&</STRONG> (logical AND) operator to extract
the character or the attribute alone from any position in
the <EM>chstr</EM> [see <STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG>].
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>initscr</STRONG>, <STRONG>newterm</STRONG>, <STRONG>endwin</STRONG>, <STRONG>isendwin</STRONG>, <STRONG>set_term</STRONG>, <STRONG>delscreen</STRONG> -
<STRONG>curses</STRONG> screen initialization and manipulation routines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>WINDOW</STRONG> <STRONG>*initscr(void);</STRONG>
<STRONG>int</STRONG> <STRONG>endwin(void);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>cbreak</STRONG>, <STRONG>nocbreak</STRONG>, <STRONG>echo</STRONG>, <STRONG>noecho</STRONG>, <STRONG>halfdelay</STRONG>, <STRONG>intrflush</STRONG>, <STRONG>key-</STRONG>
<STRONG>pad</STRONG>, <STRONG>meta</STRONG>, <STRONG>nodelay</STRONG>, <STRONG>notimeout</STRONG>, <STRONG>raw</STRONG>, <STRONG>noraw</STRONG>, <STRONG>noqiflush</STRONG>,
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>cbreak(void);</STRONG>
<STRONG>int</STRONG> <STRONG>nocbreak(void);</STRONG>
Issue 4.
The ncurses library obeys the XPG4 standard and the his-
- torical practice of the AT&T curses implementations, in
+ torical practice of the AT&T curses implementations, in
that the echo bit is cleared when curses initializes the
terminal state. BSD curses differed from this slightly;
ity, set echo or noecho explicitly just after initializa-
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>insch</STRONG>, <STRONG>winsch</STRONG>, <STRONG>mvinsch</STRONG>, <STRONG>mvwinsch</STRONG> - insert a character
before cursor in a <STRONG>curses</STRONG> window
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>insch(chtype</STRONG> <STRONG>ch);</STRONG>
<STRONG>int</STRONG> <STRONG>winsch(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>chtype</STRONG> <STRONG>ch);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>insstr</STRONG>, <STRONG>insnstr</STRONG>, <STRONG>winsstr</STRONG>, <STRONG>winsnstr</STRONG>, <STRONG>mvinsstr</STRONG>, <STRONG>mvinsnstr</STRONG>,
<STRONG>mvwinsstr</STRONG>, <STRONG>mvwinsnstr</STRONG> - insert string before cursor in a
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>insstr(const</STRONG> <STRONG>char</STRONG> <STRONG>*str);</STRONG>
<STRONG>int</STRONG> <STRONG>insnstr(const</STRONG> <STRONG>char</STRONG> <STRONG>*str,</STRONG> <STRONG>int</STRONG> <STRONG>n);</STRONG>
<STRONG>int</STRONG> <STRONG>winsstr(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*str);</STRONG>
acters on the line being lost. The cursor position does
not change (after moving to <EM>y</EM>, <EM>x</EM>, if specified). The four
routines with <EM>n</EM> as the last argument insert a leading sub-
- string of at most <EM>n</EM> characters. If <EM>n</EM><=0, then the entire
+ string of at most <EM>n</EM> characters. If <EM>n</EM><=0, then the entire
string is inserted.
If a character in <EM>str</EM> is a tab, newline, carriage return
in the <STRONG>^</STRONG><EM>X</EM> notation. Calling <STRONG>winch</STRONG> after adding a control
character (and moving to it, if necessary) does not return
the control character, but instead returns a character in
- the the ^-representation of the control character.
+ the ^-representation of the control character.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>instr</STRONG>, <STRONG>innstr</STRONG>, <STRONG>winstr</STRONG>, <STRONG>winnstr</STRONG>, <STRONG>mvinstr</STRONG>, <STRONG>mvinnstr</STRONG>, <STRONG>mvwin-</STRONG>
<STRONG>str</STRONG>, <STRONG>mvwinnstr</STRONG> - get a string of characters from a <STRONG>curses</STRONG>
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>instr(char</STRONG> <STRONG>*str);</STRONG>
<STRONG>int</STRONG> <STRONG>innstr(char</STRONG> <STRONG>*str,</STRONG> <STRONG>int</STRONG> <STRONG>n);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>def_prog_mode</STRONG>, <STRONG>def_shell_mode</STRONG>, <STRONG>reset_prog_mode</STRONG>,
<STRONG>reset_shell_mode</STRONG>, <STRONG>resetty</STRONG>, <STRONG>savetty</STRONG>, <STRONG>getsyx</STRONG>, <STRONG>setsyx</STRONG>, <STRONG>ripof-</STRONG>
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>def_prog_mode(void);</STRONG>
<STRONG>int</STRONG> <STRONG>def_shell_mode(void);</STRONG>
dow that has been allocated and an integer with the number
of columns in the window. Inside this initialization rou-
tine, the integer variables <STRONG>LINES</STRONG> and <STRONG>COLS</STRONG> (defined in
- <STRONG><curses.h></STRONG>) are not guaranteed to be accurate and <STRONG>wrefresh</STRONG>
+ <STRONG><curses.h></STRONG>) are not guaranteed to be accurate and <STRONG>wrefresh</STRONG>
or <STRONG>doupdate</STRONG> must not be called. It is allowable to call
<STRONG>wnoutrefresh</STRONG> during the initialization routine.
</PRE>
<H2>NOTES</H2><PRE>
- Note that <STRONG>getsyx</STRONG> is a macro, so <STRONG>&</STRONG> is not necessary before
+ Note that <STRONG>getsyx</STRONG> is a macro, so <STRONG>&</STRONG> is not necessary before
the variables <EM>y</EM> and <EM>x</EM>.
- The SVr4 man pages warn that the return value of <STRONG>curs_set</STRONG>
- "is currently incorrect". This implementation gets it
- right, but it may be unwise to count on the correctness of
- the return value anywhere else.
+ Older SVr4 man pages warn that the return value of
+ <STRONG>curs_set</STRONG> "is currently incorrect". This implementation
+ gets it right, but it may be unwise to count on the cor-
+ rectness of the return value anywhere else.
</PRE>
--- /dev/null
+<HTML>
+<BODY>
+<PRE>
+ <STRONG>getmouse</STRONG>, <STRONG>ungetmouse</STRONG>, <STRONG>mousemask</STRONG>, <STRONG>wenclose</STRONG>, <STRONG>wmouse_trafo</STRONG>,
+ <STRONG>mouseinterval</STRONG> - mouse interface through curses
+
+
+</PRE>
+<H2>SYNOPSIS</H2><PRE>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+
+ <STRONG>typedef</STRONG> <STRONG>unsigned</STRONG> <STRONG>long</STRONG> <STRONG>mmask_t;</STRONG>
+
+ <STRONG>typedef</STRONG> <STRONG>struct</STRONG>
+ <STRONG>{</STRONG>
+ <STRONG>short</STRONG> <STRONG>id;</STRONG> <EM>/*</EM> <EM>ID</EM> <EM>to</EM> <EM>distinguish</EM> <EM>multiple</EM> <EM>devices</EM> <EM>*/</EM>
+ <STRONG>int</STRONG> <STRONG>x,</STRONG> <STRONG>y,</STRONG> <STRONG>z;</STRONG> <EM>/*</EM> <EM>event</EM> <EM>coordinates</EM> <EM>*/</EM>
+ <STRONG>mmask_t</STRONG> <STRONG>bstate;</STRONG> <EM>/*</EM> <EM>button</EM> <EM>state</EM> <EM>bits</EM> <EM>*/</EM>
+ <STRONG>}</STRONG>
+ <STRONG>MEVENT;</STRONG>
+ <STRONG>int</STRONG> <STRONG>getmouse(MEVENT</STRONG> <STRONG>*event);</STRONG>
+ <STRONG>int</STRONG> <STRONG>ungetmouse(MEVENT</STRONG> <STRONG>*event);</STRONG>
+ <STRONG>mmask_t</STRONG> <STRONG>mousemask(mmask_t</STRONG> <STRONG>newmask,</STRONG> <STRONG>mmask_t</STRONG> <STRONG>*oldmask);</STRONG>
+ <STRONG>bool</STRONG> <STRONG>wenclose(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x);</STRONG>
+ <STRONG>bool</STRONG> <STRONG>wmouse_trafo(const</STRONG> <STRONG>WINDOW*</STRONG> <STRONG>win,</STRONG> <STRONG>int*</STRONG> <STRONG>pY,</STRONG> <STRONG>int*</STRONG> <STRONG>pX,</STRONG>
+ <STRONG>bool</STRONG> <STRONG>to_screen);</STRONG>
+ <STRONG>int</STRONG> <STRONG>mouseinterval(int</STRONG> <STRONG>erval);</STRONG>
+
+
+</PRE>
+<H2>DESCRIPTION</H2><PRE>
+ These functions provide an interface to mouse events from
+ <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>. Mouse events are represented by <STRONG>KEY_MOUSE</STRONG>
+ pseudo-key values in the <STRONG>wgetch</STRONG> input stream.
+
+ To make mouse events visible, use the <STRONG>mousemask</STRONG> function.
+ This will set the mouse events to be reported. By
+ default, no mouse events are reported. The function will
+ return a mask to indicate which of the specified mouse
+ events can be reported; on complete failure it returns 0.
+ If oldmask is non-NULL, this function fills the indicated
+ location with the previous value of the given window's
+ mouse event mask.
+
+ As a side effect, setting a zero mousemask may turn off
+ the mouse pointer; setting a nonzero mask may turn it on.
+ Whether this happens is device-dependent.
+
+ Here are the mouse event type masks:
+
+ l l _ _ l l. <EM>Name</EM> <EM>Description</EM> BUTTON1_PRESSED mouse
+ button 1 down BUTTON1_RELEASED mouse button 1 up
+ BUTTON1_CLICKED mouse button 1 clicked
+ BUTTON1_DOUBLE_CLICKED mouse button 1 double clicked
+ BUTTON1_TRIPLE_CLICKED mouse button 1 triple clicked
+ BUTTON2_PRESSED mouse button 2 down
+ BUTTON2_RELEASED mouse button 2 up
+ BUTTON2_CLICKED mouse button 2 clicked
+ BUTTON2_DOUBLE_CLICKED mouse button 2 double clicked
+ BUTTON3_RELEASED mouse button 3 up
+ BUTTON3_CLICKED mouse button 3 clicked
+ BUTTON3_DOUBLE_CLICKED mouse button 3 double clicked
+ BUTTON3_TRIPLE_CLICKED mouse button 3 triple clicked
+ BUTTON4_PRESSED mouse button 4 down
+ BUTTON4_RELEASED mouse button 4 up
+ BUTTON4_CLICKED mouse button 4 clicked
+ BUTTON4_DOUBLE_CLICKED mouse button 4 double clicked
+ BUTTON4_TRIPLE_CLICKED mouse button 4 triple clicked
+ BUTTON_SHIFT shift was down during button state change
+ BUTTON_CTRL control was down during button state change
+ BUTTON_ALT alt was down during button state change
+ ALL_MOUSE_EVENTS report all button state changes
+ REPORT_MOUSE_POSITION report mouse movement
+
+ Once a class of mouse events have been made visible in a
+ window, calling the <STRONG>wgetch</STRONG> function on that window may
+ return <STRONG>KEY_MOUSE</STRONG> as an indicator that a mouse event has
+ been queued. To read the event data and pop the event off
+ the queue, call <STRONG>getmouse</STRONG>. This function will return <STRONG>OK</STRONG> if
+ a mouse event is actually visible in the given window, <STRONG>ERR</STRONG>
+ otherwise. When <STRONG>getmouse</STRONG> returns <STRONG>OK</STRONG>, the data deposited
+ as y and x in the event structure coordinates will be
+ screen-relative character-cell coordinates. The returned
+ state mask will have exactly one bit set to indicate the
+ event type.
+
+ The <STRONG>ungetmouse</STRONG> function behaves analogously to <STRONG>ungetch</STRONG>.
+ It pushes a <STRONG>KEY_MOUSE</STRONG> event onto the input queue, and
+ associates with that event the given state data and
+ screen-relative character-cell coordinates.
+
+ The <STRONG>wenclose</STRONG> function tests whether a given pair of
+ screen-relative character-cell coordinates is enclosed by
+ a given window, returning TRUE if it is and FALSE other-
+ wise. It is useful for determining what subset of the
+ screen windows enclose the location of a mouse event.
+
+ The <STRONG>wmouse_trafo</STRONG> function transforms a given pair of coor-
+ dinates from stdscr-relative coordinates to screen-rela-
+ tive coordinates or vice versa. Please remember, that
+ stdscr-relative coordinates are not always identical to
+ screen-relative coordinates due to the mechanism to
+ reserve lines on top or bottom of the screen for other
+ purposes (ripoff() call, see also slk_... functions). If
+ the parameter <STRONG>to_screen</STRONG> is <STRONG>TRUE</STRONG>, the pointers <STRONG>pY,</STRONG> <STRONG>pX</STRONG> must
+ reference the coordinates of a location inside the window
+ <STRONG>win</STRONG>. They are converted to screen-relative coordinates and
+ returned through the pointers. If the conversion was suc-
+ cessful, the function returns <STRONG>TRUE</STRONG>. If one of the parame-
+ ters was NULL or the location is not inside the window,
+ <STRONG>FALSE</STRONG> is returned. If <STRONG>to_screen</STRONG> is <STRONG>FALSE</STRONG>, the pointers <STRONG>pY,</STRONG>
+ encloses this point. In this case the function returns
+ <STRONG>TRUE</STRONG>. If one of the parameters is NULL or the point is not
+ inside the window, <STRONG>FALSE</STRONG> is returned. Please notice, that
+ the referenced coordinates are only replaced by the con-
+ verted coordinates if the transformation was successful.
+
+ The <STRONG>mouseinterval</STRONG> function sets the maximum time (in thou-
+ sands of a second) that can elapse between press and
+ release events in order for them to be recognized as a
+ click. This function returns the previous interval value.
+ The default is one fifth of a second.
+
+ Note that mouse events will be ignored when input is in
+ cooked mode, and will cause an error beep when cooked mode
+ is being simulated in a window by a function such as <STRONG>get-</STRONG>
+ <STRONG>str</STRONG> that expects a linefeed for input-loop termination.
+
+
+
+</PRE>
+<H2>RETURN VALUE</H2><PRE>
+ <STRONG>getmouse</STRONG>, <STRONG>ungetmouse</STRONG> and <STRONG>mouseinterval</STRONG> return the integer
+ <STRONG>ERR</STRONG> upon failure or <STRONG>OK</STRONG> upon successful completion. <STRONG>mouse-</STRONG>
+ <STRONG>mask</STRONG> returns the mask of reportable events. <STRONG>wenclose</STRONG> and
+ <STRONG>wmouse_trafo</STRONG> are boolean functions returning <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG>
+ depending on their test result.
+
+
+</PRE>
+<H2>PORTABILITY</H2><PRE>
+ These calls were designed for <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>, and are not
+ found in SVr4 curses, 4.4BSD curses, or any other previous
+ version of curses.
+
+ The feature macro <STRONG>NCURSES_MOUSE_VERSION</STRONG> is provided so the
+ preprocessor can be used to test whether these features
+ are present (its value is 1). NOTE: THIS INTERFACE IS
+ EXPERIMENTAL AND IS SUBJECT TO CHANGE WITHOUT NOTICE! If
+ the interface is changed, the value of <STRONG>NCURSES_MOUSE_VER-</STRONG>
+ <STRONG>SION</STRONG> will be incremented.
+
+ The order of the <STRONG>MEVENT</STRONG> structure members is not guaran-
+ teed. Additional fields may be added to the structure in
+ the future.
+
+ Under <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG>, these calls are implemented using
+ either xterm's built-in mouse-tracking API or Alessandro
+ Rubini's gpm server. If you are using something other
+ than xterm there is no gpm daemon running on your machine,
+ mouse events will not be visible to <STRONG><A HREF="ncurses.3x.html">ncurses(3X)</A></STRONG> (and the
+ <STRONG>wmousemask</STRONG> function will always return <STRONG>0</STRONG>).
+
+ The z member in the event structure is not presently used.
+ It is intended for use with touch screens (which may be
+ pressure-sensitive) or with 3D-mice/trackballs/power
+ gloves.
+ Mouse events under xterm will not in fact be ignored dur-
+ ing cooked mode, if they have been enabled by <STRONG>wmousemask</STRONG>.
+ Instead, the xterm mouse report sequence will appear in
+ the string read.
+
+ Mouse events under xterm will not be detected correctly in
+ a window with its keypad bit off.
+
+
+</PRE>
+<H2>SEE ALSO</H2><PRE>
+ <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</PRE>
+</BODY>
+</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>move</STRONG>, <STRONG>wmove</STRONG> - move <STRONG>curses</STRONG> window cursor
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>move(int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x);</STRONG>
<STRONG>int</STRONG> <STRONG>wmove(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>clearok</STRONG>, <STRONG>idlok</STRONG>, <STRONG>idcok</STRONG> <STRONG>immedok</STRONG>, <STRONG>leaveok</STRONG>, <STRONG>setscrreg</STRONG>,
<STRONG>wsetscrreg</STRONG>, <STRONG>scrollok</STRONG>, <STRONG>nl</STRONG>, <STRONG>nonl</STRONG> - <STRONG>curses</STRONG> output options
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>clearok(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>bool</STRONG> <STRONG>bf);</STRONG>
<STRONG>int</STRONG> <STRONG>idlok(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>bool</STRONG> <STRONG>bf);</STRONG>
The <STRONG>nl</STRONG> and <STRONG>nonl</STRONG> routines control whether the underlying
display device translates the return key into newline on
input, and whether it translates newline into return and
- line-feed on output (in either case, the call <STRONG>addch('0)</STRONG>
+ line-feed on output (in either case, the call <STRONG>addch('\n')</STRONG>
does the equivalent of return and line feed on the virtual
screen). Initially, these translations do occur. If you
disable them using <STRONG>nonl</STRONG>, <STRONG>curses</STRONG> will be able to make bet-
The XSI Curses standard is ambiguous on the question of
whether <STRONG>raw</STRONG>() should disable the CRLF translations con-
trolled by <STRONG>nl</STRONG>() and <STRONG>nonl</STRONG>(). BSD curses did turn off these
- translations; AT&T curses (at least as late as SVr1) did
+ translations; AT&T curses (at least as late as SVr1) did
not. We choose to do so, on the theory that a programmer
requesting raw input wants a clean (ideally 8-bit clean)
connection that the operating system does not mess with.
The XSI Curses standard does not mention that the cursor
should be made invisible as a side-effect of <STRONG>leaveok</STRONG>.
- SVr4 curses does this.
+ SVr4 curses documentation does this, but the code does
+ not.
</PRE>
<H2>NOTES</H2><PRE>
- Note that <STRONG>clearok</STRONG>, <STRONG>leaveok</STRONG>, <STRONG>scrollok</STRONG>, <STRONG>idcok</STRONG>, <STRONG>nl</STRONG>, <STRONG>nonl</STRONG> and
+ Note that <STRONG>clearok</STRONG>, <STRONG>leaveok</STRONG>, <STRONG>scrollok</STRONG>, <STRONG>idcok</STRONG>, <STRONG>nl</STRONG>, <STRONG>nonl</STRONG> and
<STRONG>setscrreg</STRONG> may be macros.
The <STRONG>immedok</STRONG> routine is useful for windows that are used as
</PRE>
<H2>SEE ALSO</H2><PRE>
- <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG>, <STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>,
+ <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG>, <STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>,
<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>, <STRONG><A HREF="curs_scroll.3x.html">curs_scroll(3X)</A></STRONG>, <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>
-
</PRE>
</BODY>
</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>overlay</STRONG>, <STRONG>overwrite</STRONG>, <STRONG>copywin</STRONG> - overlay and manipulate over-
lapped <STRONG>curses</STRONG> windows
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>overlay(const</STRONG> <STRONG>WINDOW</STRONG> <STRONG>*srcwin,</STRONG> <STRONG>WINDOW</STRONG> <STRONG>*dstwin);</STRONG>
<STRONG>int</STRONG> <STRONG>overwrite(const</STRONG> <STRONG>WINDOW</STRONG> <STRONG>*srcwin,</STRONG> <STRONG>WINDOW</STRONG> <STRONG>*dstwin);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>newpad</STRONG>, <STRONG>subpad</STRONG>, <STRONG>prefresh</STRONG>, <STRONG>pnoutrefresh</STRONG>, <STRONG>pechochar</STRONG> - create
and display <STRONG>curses</STRONG> pads
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>WINDOW</STRONG> <STRONG>*newpad(int</STRONG> <STRONG>nlines,</STRONG> <STRONG>int</STRONG> <STRONG>ncols);</STRONG>
<STRONG>WINDOW</STRONG> <STRONG>*subpad(WINDOW</STRONG> <STRONG>*orig,</STRONG> <STRONG>int</STRONG> <STRONG>nlines,</STRONG> <STRONG>int</STRONG> <STRONG>ncols,</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mcprint</STRONG> - ship binary data to printer
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>mcprint(char</STRONG> <STRONG>*data,</STRONG> <STRONG>int</STRONG> <STRONG>len);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>printw</STRONG>, <STRONG>wprintw</STRONG>, <STRONG>mvprintw</STRONG>, <STRONG>mvwprintw</STRONG>, <STRONG>vwprintw</STRONG> - print
formatted output in <STRONG>curses</STRONG> windows
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>printw(char</STRONG> <STRONG>*fmt</STRONG> [<STRONG>,</STRONG> <STRONG>arg</STRONG>] <STRONG>...);</STRONG>
<STRONG>int</STRONG> <STRONG>wprintw(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>char</STRONG> <STRONG>*fmt</STRONG> [<STRONG>,</STRONG> <STRONG>arg</STRONG>] <STRONG>...);</STRONG>
<STRONG>int</STRONG> <STRONG>mvwprintw(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x,</STRONG>
<STRONG>char</STRONG> <STRONG>*fmt</STRONG> [<STRONG>,</STRONG> <STRONG>arg]</STRONG> ...);
- <STRONG>#include</STRONG> <STRONG><varargs.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><varargs.h></STRONG>
<STRONG>int</STRONG> <STRONG>vwprintw(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>char</STRONG> <STRONG>*fmt,</STRONG> <STRONG>varglist);</STRONG>
The <STRONG>vwprintw</STRONG> routine is analogous to <STRONG>vprintf</STRONG> [see
<STRONG><A HREF="printf.3s.html">printf(3S)</A></STRONG>] and performs a <STRONG>wprintw</STRONG> using a variable argu-
ment list. The third argument is a <STRONG>va_list</STRONG>, a pointer to
- a list of arguments, as defined in <STRONG><varargs.h></STRONG>.
+ a list of arguments, as defined in <STRONG><varargs.h></STRONG>.
</PRE>
The XSI Curses standard, Issue 4 describes these func-
tions. The function <STRONG>vwprintw</STRONG> is marked TO BE WITHDRAWN,
and is to be replaced by a function <STRONG>vw_printw</STRONG> using the
- <STRONG><stdarg.h></STRONG> interface.
+ <STRONG><stdarg.h></STRONG> interface.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>refresh</STRONG>, <STRONG>wrefresh</STRONG>, <STRONG>wnoutrefresh</STRONG>, <STRONG>doupdate</STRONG>, <STRONG>redrawwin</STRONG>, <STRONG>wre-</STRONG>
<STRONG>drawln</STRONG> - refresh <STRONG>curses</STRONG> windows and lines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>refresh(void);</STRONG>
<STRONG>int</STRONG> <STRONG>wrefresh(WINDOW</STRONG> <STRONG>*win);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>scanw</STRONG>, <STRONG>wscanw</STRONG>, <STRONG>mvscanw</STRONG>, <STRONG>mvwscanw</STRONG>, <STRONG>vwscanw</STRONG> - convert for-
matted input from a <STRONG>curses</STRONG> widow
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>scanw(char</STRONG> <STRONG>*fmt</STRONG> [<STRONG>,</STRONG> <STRONG>arg</STRONG>] <STRONG>...);</STRONG>
<STRONG>int</STRONG> <STRONG>wscanw(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>char</STRONG> <STRONG>*fmt</STRONG> [<STRONG>,</STRONG> <STRONG>arg</STRONG>] <STRONG>...);</STRONG>
The <STRONG>vwscanw</STRONG> routine is similar to <STRONG>vwprintw</STRONG> in that it per-
forms a <STRONG>wscanw</STRONG> using a variable argument list. The third
argument is a <EM>va</EM>_<EM>list</EM>, a pointer to a list of arguments,
- as defined in <STRONG><varargs.h></STRONG>.
+ as defined in <STRONG><varargs.h></STRONG>.
</PRE>
The XSI Curses standard, Issue 4 describes these func-
tions. The function <STRONG>vwscanw</STRONG> is marked TO BE WITHDRAWN,
and is to be replaced by a function <STRONG>vw_scanw</STRONG> using the
- <STRONG><stdarg.h></STRONG> interface.
+ <STRONG><stdarg.h></STRONG> interface.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>scr_dump</STRONG>, <STRONG>scr_restore</STRONG>, <STRONG>scr_init</STRONG>, <STRONG>scr_set</STRONG> - read (write) a
<STRONG>curses</STRONG> screen from (to) a file
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>scr_dump(const</STRONG> <STRONG>char</STRONG> <STRONG>*filename);</STRONG>
<STRONG>int</STRONG> <STRONG>scr_restore(const</STRONG> <STRONG>char</STRONG> <STRONG>*filename);</STRONG>
--- /dev/null
+<HTML>
+<BODY>
+<PRE>
+ <STRONG>scr_dump</STRONG>, <STRONG>scr_restore</STRONG>, <STRONG>scr_init</STRONG>, <STRONG>scr_set</STRONG> - read (write) a
+ <STRONG>curses</STRONG> screen from (to) a file
+
+
+</PRE>
+<H2>SYNOPSIS</H2><PRE>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+
+ <STRONG>int</STRONG> <STRONG>scr_dump(const</STRONG> <STRONG>char</STRONG> <STRONG>*filename);</STRONG>
+ <STRONG>int</STRONG> <STRONG>scr_restore(const</STRONG> <STRONG>char</STRONG> <STRONG>*filename);</STRONG>
+ <STRONG>int</STRONG> <STRONG>scr_init(const</STRONG> <STRONG>char</STRONG> <STRONG>*filename);</STRONG>
+ <STRONG>int</STRONG> <STRONG>scr_set(const</STRONG> <STRONG>char</STRONG> <STRONG>*filename);</STRONG>
+
+
+</PRE>
+<H2>DESCRIPTION</H2><PRE>
+ The <STRONG>scr_dump</STRONG> routine dumps the current contents of the
+ virtual screen to the file <EM>filename</EM>.
+
+ The <STRONG>scr_restore</STRONG> routine sets the virtual screen to the
+ contents of <EM>filename</EM>, which must have been written using
+ <STRONG>scr_dump</STRONG>. The next call to <STRONG>doupdate</STRONG> restores the screen
+ to the way it looked in the dump file.
+
+ The <STRONG>scr_init</STRONG> routine reads in the contents of <EM>filename</EM> and
+ uses them to initialize the <STRONG>curses</STRONG> data structures about
+ what the terminal currently has on its screen. If the
+ data is determined to be valid, <STRONG>curses</STRONG> bases its next
+ update of the screen on this information rather than
+ clearing the screen and starting from scratch. <STRONG>scr_init</STRONG>
+ is used after <STRONG>initscr</STRONG> or a <STRONG>system</STRONG> [see <STRONG>system</STRONG>(BA_LIB)]
+ call to share the screen with another process which has
+ done a <STRONG>scr_dump</STRONG> after its <STRONG>endwin</STRONG> call. The data is
+ declared invalid if the terminfo capabilities <STRONG>rmcup</STRONG> and
+ <STRONG>nrrmc</STRONG> exist; also if the terminal has been written to
+ since the preceding <STRONG>scr_dump</STRONG> call.
+
+ The <STRONG>scr_set</STRONG> routine is a combination of <STRONG>scr_restore</STRONG> and
+ <STRONG>scr_init</STRONG>. It tells the program that the information in
+ <EM>filename</EM> is what is currently on the screen, and also what
+ the program wants on the screen. This can be thought of
+ as a screen inheritance function.
+
+ To read (write) a window from (to) a file, use the <STRONG>getwin</STRONG>
+ and <STRONG>putwin</STRONG> routines [see <STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>].
+
+
+</PRE>
+<H2>RETURN VALUE</H2><PRE>
+ All routines return the integer <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG>
+ upon success.
+
+
+</PRE>
+<H2>NOTES</H2><PRE>
+ Note that <STRONG>scr_init</STRONG>, <STRONG>scr_set</STRONG>, and <STRONG>scr_restore</STRONG> may be
+ macros.
+
+
+</PRE>
+<H2>PORTABILITY</H2><PRE>
+ The XSI Curses standard, Issue 4, describes these func-
+ is also considered invalid "if the time-stamp of the tty
+ is old" but don't define "old".
+
+
+</PRE>
+<H2>SEE ALSO</H2><PRE>
+ <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>, <STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>,
+ <STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>, <STRONG><A HREF="system.3s.html">system(3S)</A></STRONG>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</PRE>
+</BODY>
+</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>scroll</STRONG>, <STRONG>srcl</STRONG>, <STRONG>wscrl</STRONG> - scroll a <STRONG>curses</STRONG> window
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>scroll(WINDOW</STRONG> <STRONG>*win);</STRONG>
<STRONG>int</STRONG> <STRONG>scrl(int</STRONG> <STRONG>n);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>slk_init</STRONG>, <STRONG>slk_set</STRONG>, <STRONG>slk_refresh</STRONG>, <STRONG>slk_noutrefresh</STRONG>,
<STRONG>slk_label</STRONG>, <STRONG>slk_clear</STRONG>, <STRONG>slk_restore</STRONG>, <STRONG>slk_touch</STRONG>, <STRONG>slk_attron</STRONG>,
- <STRONG>slk_attrset</STRONG>, <STRONG>slk_attroff</STRONG> - <STRONG>curses</STRONG> soft label routines
+ <STRONG>slk_attrset</STRONG>, <STRONG>slk_attroff</STRONG>, <STRONG>slk_color</STRONG> - <STRONG>curses</STRONG> soft label
+ routines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>slk_init(int</STRONG> <STRONG>fmt);</STRONG>
<STRONG>int</STRONG> <STRONG>slk_set(int</STRONG> <STRONG>labnum,</STRONG> <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*label,</STRONG> <STRONG>int</STRONG> <STRONG>fmt);</STRONG>
<STRONG>int</STRONG> <STRONG>slk_clear(void);</STRONG>
<STRONG>int</STRONG> <STRONG>slk_restore(void);</STRONG>
<STRONG>int</STRONG> <STRONG>slk_touch(void);</STRONG>
- <STRONG>int</STRONG> <STRONG>slk_attron(attr_t</STRONG> <STRONG>attrs);</STRONG>
- <STRONG>int</STRONG> <STRONG>slk_attrset(attr_t</STRONG> <STRONG>attrs);</STRONG>
+ <STRONG>int</STRONG> <STRONG>slk_attron(const</STRONG> <STRONG>chtype</STRONG> <STRONG>attrs);</STRONG>
+ <STRONG>int</STRONG> <STRONG>slk_attrset(const</STRONG> <STRONG>chtype</STRONG> <STRONG>attrs);</STRONG>
<STRONG>attr_t</STRONG> <STRONG>slk_attr(void);</STRONG>
- <STRONG>int</STRONG> <STRONG>slk_attroff(attr_t</STRONG> <STRONG>attrs);</STRONG>
+ <STRONG>int</STRONG> <STRONG>slk_attroff(const</STRONG> <STRONG>chtype</STRONG> <STRONG>attrs);</STRONG>
+ <STRONG>int</STRONG> <STRONG>slk_color(short</STRONG> <STRONG>color_pair_number);</STRONG>
</PRE>
<H2>DESCRIPTION</H2><PRE>
The slk* functions manipulate the set of soft function-key
- labels that exist on many terminals. For those terminals
+ labels that exist on many terminals. For those terminals
that do not have soft labels, <STRONG>curses</STRONG> takes over the bottom
- line of <STRONG>stdscr</STRONG>, reducing the size of <STRONG>stdscr</STRONG> and the vari-
- able <STRONG>LINES</STRONG>. <STRONG>curses</STRONG> standardizes on eight labels of up to
- eight characters each. In addition to this, the ncurses
- implementation supports a mode where it simulates 12
- labels of up to five characters each. This is most common
- for todays PC like enduser devices. Please note that
+ line of <STRONG>stdscr</STRONG>, reducing the size of <STRONG>stdscr</STRONG> and the vari-
+ able <STRONG>LINES</STRONG>. <STRONG>curses</STRONG> standardizes on eight labels of up to
+ eight characters each. In addition to this, the ncurses
+ implementation supports a mode where it simulates 12
+ labels of up to five characters each. This is most common
+ for todays PC like enduser devices. Please note that
ncurses simulates this mode by taking over up to two lines
- at the bottom of the screen, it doesn't try to use any
+ at the bottom of the screen, it doesn't try to use any
hardware support for this mode.
- The <STRONG>slk_init</STRONG> routine must be called before <STRONG>initscr</STRONG> or
+ The <STRONG>slk_init</STRONG> routine must be called before <STRONG>initscr</STRONG> or
<STRONG>newterm</STRONG> is called. If <STRONG>initscr</STRONG> eventually uses a line from
<STRONG>stdscr</STRONG> to emulate the soft labels, then <EM>fmt</EM> determines how
- the labels are arranged on the screen. Setting <EM>fmt</EM> to <STRONG>0</STRONG>
+ the labels are arranged on the screen. Setting <EM>fmt</EM> to <STRONG>0</STRONG>
indicates a 3-2-3 arrangement of the labels, <STRONG>1</STRONG> indicates a
4-4 arrangement and <STRONG>2</STRONG> indicates the PC like 4-4-4 mode. If
- <STRONG>fmt</STRONG> is set to <STRONG>3</STRONG>, it is again the PC like 4-4-4 mode, but
- in addition an index line is generated, helping the user
+ <STRONG>fmt</STRONG> is set to <STRONG>3</STRONG>, it is again the PC like 4-4-4 mode, but
+ in addition an index line is generated, helping the user
to identify the key numbers easily.
- The <STRONG>slk_set</STRONG> routine requires <EM>labnum</EM> to be a label number,
+ The <STRONG>slk_set</STRONG> routine requires <EM>labnum</EM> to be a label number,
from <STRONG>1</STRONG> to <STRONG>8</STRONG> (resp. <STRONG>12</STRONG>); <EM>label</EM> must be the string to be put
- on the label, up to eight (resp. five) characters in
- length. A null string or a null pointer sets up a blank
- label. <EM>fmt</EM> is either <STRONG>0</STRONG>, <STRONG>1</STRONG>, or <STRONG>2</STRONG>, indicating whether the
- label is to be left-justified, centered, or right-justi-
- fied, respectively, within the label.
+ on the label, up to eight (resp. five) characters in
+ length. A null string or a null pointer sets up a blank
+ label. <EM>fmt</EM> is either <STRONG>0</STRONG>, <STRONG>1</STRONG>, or <STRONG>2</STRONG>, indicating whether the
+ label is to be left-justified, centered, or right-justi-
+ the <STRONG>wrefresh</STRONG> and <STRONG>wnoutrefresh</STRONG> routines.
+ The <STRONG>slk_label</STRONG> routine returns the current label for label
+ number <EM>labnum</EM>, with leading and trailing blanks stripped.
- The <STRONG>slk_label</STRONG> routine returns the current label for label
- number <EM>labnum</EM>, with leading and trailing blanks stripped.
-
- The <STRONG>slk_clear</STRONG> routine clears the soft labels from the
+ The <STRONG>slk_clear</STRONG> routine clears the soft labels from the
screen.
- The <STRONG>slk_restore</STRONG> routine, restores the soft labels to the
+ The <STRONG>slk_restore</STRONG> routine, restores the soft labels to the
screen after a <STRONG>slk_clear</STRONG> has been performed.
- The <STRONG>slk_touch</STRONG> routine forces all the soft labels to be
+ The <STRONG>slk_touch</STRONG> routine forces all the soft labels to be
output the next time a <STRONG>slk_noutrefresh</STRONG> is performed.
The <STRONG>slk_attron</STRONG>, <STRONG>slk_attrset</STRONG>, <STRONG>slk_attroff</STRONG> and <STRONG>slk_attr</STRONG> rou-
tines correspond to <STRONG>attron</STRONG>, <STRONG>attrset</STRONG>, <STRONG>attroff</STRONG> and <STRONG>attr_get</STRONG>.
- They have an effect only if soft labels are simulated on
- the bottom line of the screen. The default highlight for
+ They have an effect only if soft labels are simulated on
+ the bottom line of the screen. The default highlight for
soft keys is A_STANDOUT (as in System V curses, which does
not document this fact).
+ The <STRONG>slk_color</STRONG> routine corresponds to <STRONG>color_set</STRONG>. It has an
+ effect only if soft labels are simulated on the bottom
+ line of the screen.
+
+
</PRE>
<H2>RETURN VALUE</H2><PRE>
These routines return <STRONG>ERR</STRONG> upon failure and OK (SVr4 speci-
fies only "an integer value other than <STRONG>ERR</STRONG>") upon success-
- ful completion. <STRONG>slk_attr</STRONG> returns the attribute used for
+ ful completion. <STRONG>slk_attr</STRONG> returns the attribute used for
the soft keys.
<STRONG>slk_label</STRONG> returns <STRONG>NULL</STRONG> on error.
</PRE>
<H2>PORTABILITY</H2><PRE>
- The XSI Curses standard, Issue 4, describes these func-
- tions. It changes the argument type of the attribute-
- manipulation functions <STRONG>slk_attron</STRONG>, <STRONG>slk_attroff</STRONG>,
- <STRONG>slk_attrset</STRONG> to be <STRONG>attr_t</STRONG>, and adds <STRONG>const</STRONG> qualifiers. The
- format codes <STRONG>2</STRONG> and <STRONG>3</STRONG> for <STRONG>slk_init()</STRONG> and the function
+ The XSI Curses standard, Issue 4, describes these func-
+ tions. It changes the argument type of the attribute-
+ manipulation functions <STRONG>slk_attron</STRONG>, <STRONG>slk_attroff</STRONG>,
+ <STRONG>slk_attrset</STRONG> to be <STRONG>attr_t</STRONG>, and adds <STRONG>const</STRONG> qualifiers. The
+ format codes <STRONG>2</STRONG> and <STRONG>3</STRONG> for <STRONG>slk_init()</STRONG> and the function
<STRONG>slk_attr</STRONG> are specific to ncurses.
-
-
-
-
-
-
</PRE>
</BODY>
</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>baudrate</STRONG>, <STRONG>erasechar</STRONG>, <STRONG>has_ic</STRONG>, <STRONG>has_il</STRONG>, <STRONG>killchar</STRONG>, <STRONG>longname</STRONG>,
<STRONG>termattrs</STRONG>, <STRONG>termname</STRONG> - <STRONG>curses</STRONG> environment query routines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>baudrate(void);</STRONG>
<STRONG>char</STRONG> <STRONG>erasechar(void);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>tgetent</STRONG>, <STRONG>tgetflag</STRONG>, <STRONG>tgetnum</STRONG>, <STRONG>tgetstr</STRONG>, <STRONG>tgoto</STRONG>, <STRONG>tputs</STRONG> - direct
<STRONG>curses</STRONG> interface to the terminfo capability database
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
- <STRONG>#include</STRONG> <STRONG><term.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><term.h></STRONG>
<STRONG>int</STRONG> <STRONG>tgetent(const</STRONG> <STRONG>char</STRONG> <STRONG>*bp,</STRONG> <STRONG>char</STRONG> <STRONG>*name);</STRONG>
<STRONG>int</STRONG> <STRONG>tgetflag(const</STRONG> <STRONG>char</STRONG> <STRONG>*id);</STRONG>
<STRONG>int</STRONG> <STRONG>tgetnum(const</STRONG> <STRONG>char</STRONG> <STRONG>*id);</STRONG>
terminfo database could not be found. The emulation
ignores the buffer pointer <EM>bp</EM>.
- The <STRONG>tgetflag</STRONG> routine gets the boolean entry for <EM>id</EM>.
+ The <STRONG>tgetflag</STRONG> routine gets the boolean entry for <EM>id</EM>, or
+ zero if it is not available.
- The <STRONG>tgetnum</STRONG> routine gets the numeric entry for <EM>id</EM>.
+ The <STRONG>tgetnum</STRONG> routine gets the numeric entry for <EM>id</EM>, or -1
+ if it is not available.
- The <STRONG>tgetstr</STRONG> routine returns the string entry for <EM>id</EM>. Use
- <STRONG>tputs</STRONG> to output the returned string.
+ The <STRONG>tgetstr</STRONG> routine returns the string entry for <EM>id</EM>, or
+ zero if it is not available. Use <STRONG>tputs</STRONG> to output the
+ returned string.
- The <STRONG>tgoto</STRONG> routine instantiates the parameters into the
- given capability. The output from this routine is to be
+ The <STRONG>tgoto</STRONG> routine instantiates the parameters into the
+ given capability. The output from this routine is to be
passed to <STRONG>tputs</STRONG>.
- The <STRONG>tputs</STRONG> routine is described on the <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ The <STRONG>tputs</STRONG> routine is described on the <STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
manual page. It can retrieve capabilities by either term-
cap or terminfo name.
</PRE>
<H2>RETURN VALUE</H2><PRE>
- Except where explicitly noted, routines that return an
- integer return <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG> (SVr4 only speci-
- fies "an integer value other than <STRONG>ERR</STRONG>") upon successful
+ Except where explicitly noted, routines that return an
+ integer return <STRONG>ERR</STRONG> upon failure and <STRONG>OK</STRONG> (SVr4 only speci-
+ fies "an integer value other than <STRONG>ERR</STRONG>") upon successful
completion.
Routines that return pointers return <STRONG>NULL</STRONG> on error.
-
-
-</PRE>
-<H2>BUGS</H2><PRE>
If you call <STRONG>tgetstr</STRONG> to fetch <STRONG>ca</STRONG> or any other parameterized
+ string, be aware that it will be returned in terminfo
+ notation, not the older and not-quite-compatible termcap
notation. This won't cause problems if all you do with it
- is call <STRONG>tgoto</STRONG> or <STRONG>tparm</STRONG>, which both expand terminfo-style.
+ is call <STRONG>tgoto</STRONG> or <STRONG>tparm</STRONG>, which both expand terminfo-style.
- Because terminfo conventions for representing padding in
- string capabilities differ from termcap's, <STRONG>tputs("50");</STRONG>
- will put out a literal "50" rather than busy-waiting for
+ Because terminfo conventions for representing padding in
+ string capabilities differ from termcap's, <STRONG>tputs("50");</STRONG>
+ will put out a literal "50" rather than busy-waiting for
50 milliseconds. Cope with it.
</PRE>
<H2>PORTABILITY</H2><PRE>
- The XSI Curses standard, Issue 4 describes these func-
- tions. However, they are marked TO BE WITHDRAWN and may
+ The XSI Curses standard, Issue 4 describes these func-
+ tions. However, they are marked TO BE WITHDRAWN and may
be removed in future versions.
- Neither the XSI Curses standard nor the SVr4 man pages
- documented the return values of <STRONG>tgetent</STRONG> correctly, though
+ Neither the XSI Curses standard nor the SVr4 man pages
+ documented the return values of <STRONG>tgetent</STRONG> correctly, though
all three were in fact returned ever since SVr1.
-
-
-
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>setupterm</STRONG>, <STRONG>setterm</STRONG>, <STRONG>set_curterm</STRONG>, <STRONG>del_curterm</STRONG>, <STRONG>restartterm</STRONG>,
<STRONG>tparm</STRONG>, <STRONG>tputs</STRONG>, <STRONG>putp</STRONG>, <STRONG>vidputs</STRONG>, <STRONG>vidattr</STRONG>, <STRONG>mvcur</STRONG>, <STRONG>tigetflag</STRONG>,
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
- <STRONG>#include</STRONG> <STRONG><term.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><term.h></STRONG>
<STRONG>int</STRONG> <STRONG>setupterm(const</STRONG> <STRONG>char</STRONG> <STRONG>*term,</STRONG> <STRONG>int</STRONG> <STRONG>fildes,</STRONG> <STRONG>int</STRONG> <STRONG>*errret);</STRONG>
<STRONG>int</STRONG> <STRONG>setterm(const</STRONG> <STRONG>char</STRONG> <STRONG>*term);</STRONG>
<EM>name</EM> passed to them, such as <STRONG>xenl</STRONG>.
The <STRONG>tigetflag</STRONG> routine returns the value <STRONG>-1</STRONG> if <EM>capname</EM> is
- not a boolean capability.
+ not a boolean capability, or <STRONG>0</STRONG> if it is cancelled or
+ absent from the terminal description.
- The <STRONG>tigetnum</STRONG> routine returns the value <STRONG>-2</STRONG> if <EM>capname</EM> is
- not a numeric capability.
+ The <STRONG>tigetnum</STRONG> routine returns the value <STRONG>-2</STRONG> if <EM>capname</EM> is
+ not a numeric capability, or <STRONG>-1</STRONG> if it is cancelled or
+ absent from the terminal description.
The <STRONG>tigetstr</STRONG> routine returns the value <STRONG>(char</STRONG> <STRONG>*)-1</STRONG> if <EM>cap-</EM>
- <EM>name</EM> is not a string capability.
+ <EM>name</EM> is not a string capability, or <STRONG>0</STRONG> if it is cancelled
+ or absent from the terminal description.
The <EM>capname</EM> for each capability is given in the table col-
- umn entitled <EM>capname</EM> code in the capabilities section of
+ umn entitled <EM>capname</EM> code in the capabilities section of
<STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>.
<STRONG>char</STRONG> <STRONG>*boolnames</STRONG>, <STRONG>*boolcodes</STRONG>, <STRONG>*boolfnames</STRONG>
- <STRONG>char</STRONG> <STRONG>*numnames</STRONG>, <STRONG>*numcodes</STRONG>, <STRONG>*numfnames</STRONG>
- <STRONG>char</STRONG> <STRONG>*strnames</STRONG>, <STRONG>*strcodes</STRONG>, <STRONG>*strfnames</STRONG>
- <STRONG>termcap</STRONG> codes, and the full C names, for each of the <STRONG>ter-</STRONG>
+ These null-terminated arrays contain the <EM>capnames</EM>, the
+ <STRONG>termcap</STRONG> codes, and the full C names, for each of the <STRONG>ter-</STRONG>
<STRONG>minfo</STRONG> variables.
</PRE>
<H2>RETURN VALUE</H2><PRE>
- Routines that return an integer return <STRONG>ERR</STRONG> upon failure
- and <STRONG>OK</STRONG> (SVr4 only specifies "an integer value other than
- <STRONG>ERR</STRONG>") upon successful completion, unless otherwise noted
+ Routines that return an integer return <STRONG>ERR</STRONG> upon failure
+ and <STRONG>OK</STRONG> (SVr4 only specifies "an integer value other than
+ <STRONG>ERR</STRONG>") upon successful completion, unless otherwise noted
in the preceding routine descriptions.
Routines that return pointers always return <STRONG>NULL</STRONG> on error.
</PRE>
<H2>NOTES</H2><PRE>
- The <STRONG>setupterm</STRONG> routine should be used in place of <STRONG>setterm</STRONG>.
- It may be useful when you want to test for terminal capa-
- bilities without committing to the allocation of storage
+ The <STRONG>setupterm</STRONG> routine should be used in place of <STRONG>setterm</STRONG>.
+ It may be useful when you want to test for terminal capa-
+ bilities without committing to the allocation of storage
involved in <STRONG>initscr</STRONG>.
Note that <STRONG>vidattr</STRONG> and <STRONG>vidputs</STRONG> may be macros.
</PRE>
<H2>PORTABILITY</H2><PRE>
- The function <STRONG>setterm</STRONG> is not described in the XSI Curses
- standard and must be considered non-portable. All other
+ The function <STRONG>setterm</STRONG> is not described in the XSI Curses
+ standard and must be considered non-portable. All other
functions are as described in the XSI curses standard.
- In System V Release 4, <STRONG>set_curterm</STRONG> has an <STRONG>int</STRONG> return type
- and returns <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>. We have chosen to implement the
+ In System V Release 4, <STRONG>set_curterm</STRONG> has an <STRONG>int</STRONG> return type
+ and returns <STRONG>OK</STRONG> or <STRONG>ERR</STRONG>. We have chosen to implement the
XSI Curses semantics.
In System V Release 4, the third argument of <STRONG>tputs</STRONG> has the
</PRE>
<H2>SEE ALSO</H2><PRE>
- <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>, <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>, <STRONG>curs_term-</STRONG>
+ <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>, <STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>, <STRONG>curs_term-</STRONG>
<STRONG><A HREF="cap.3x.html">cap(3X)</A></STRONG>, <STRONG><A HREF="putc.3s.html">putc(3S)</A></STRONG>, <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG>
-
-
</PRE>
</BODY>
</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>touchwin</STRONG>, <STRONG>touchline</STRONG>, <STRONG>untouchwin</STRONG>, <STRONG>wtouchln</STRONG>, <STRONG>is_linetouched</STRONG>,
<STRONG>is_wintouched</STRONG> - <STRONG>curses</STRONG> refresh control routines
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>touchwin(WINDOW</STRONG> <STRONG>*win);</STRONG>
<STRONG>int</STRONG> <STRONG>touchline(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>start,</STRONG> <STRONG>int</STRONG> <STRONG>count);</STRONG>
<STRONG>int</STRONG> <STRONG>untouchwin(WINDOW</STRONG> <STRONG>*win);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>unctrl</STRONG>, <STRONG>keyname</STRONG>, <STRONG>filter</STRONG>, <STRONG>use_env</STRONG>, <STRONG>putwin</STRONG>, <STRONG>getwin</STRONG>,
<STRONG>delay_output</STRONG>, <STRONG>flushinp</STRONG> - miscellaneous <STRONG>curses</STRONG> utility rou-
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>char</STRONG> <STRONG>*unctrl(chtype</STRONG> <STRONG>c);</STRONG>
<STRONG>char</STRONG> <STRONG>*keyname(int</STRONG> <STRONG>c);</STRONG>
</PRE>
<H2>NOTES</H2><PRE>
- Note that <STRONG>unctrl</STRONG> is a macro, which is defined in <<STRONG>unc-</STRONG>
- <STRONG>trl.h</STRONG>>.
+ Note that <STRONG>unctrl</STRONG> is a macro, which is defined in <<STRONG>unc-</STRONG>
+ <STRONG>trl.h</STRONG>>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>newwin</STRONG>, <STRONG>delwin</STRONG>, <STRONG>mvwin</STRONG>, <STRONG>subwin</STRONG>, <STRONG>derwin</STRONG>, <STRONG>mvderwin</STRONG>, <STRONG>dupwin</STRONG>,
<STRONG>wsyncup</STRONG>, <STRONG>syncok</STRONG>, <STRONG>wcursyncup</STRONG>, <STRONG>wsyncdown</STRONG> - create <STRONG>curses</STRONG>
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>WINDOW</STRONG> <STRONG>*newwin(int</STRONG> <STRONG>nlines,</STRONG> <STRONG>int</STRONG> <STRONG>ncols,</STRONG> <STRONG>int</STRONG> <STRONG>begin_y,</STRONG>
- <STRONG>intbegin_x);</STRONG>
+ <STRONG>int</STRONG> <STRONG>begin_x);</STRONG>
<STRONG>int</STRONG> <STRONG>delwin(WINDOW</STRONG> <STRONG>*win);</STRONG>
<STRONG>int</STRONG> <STRONG>mvwin(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>y,</STRONG> <STRONG>int</STRONG> <STRONG>x);</STRONG>
<STRONG>WINDOW</STRONG> <STRONG>*subwin(WINDOW</STRONG> <STRONG>*orig,</STRONG> <STRONG>int</STRONG> <STRONG>nlines,</STRONG> <STRONG>int</STRONG> <STRONG>ncols,</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>define_key</STRONG> - define a keycode
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>define_key(char</STRONG> <STRONG>*definition,</STRONG> <STRONG>int</STRONG> <STRONG>keycode);</STRONG>
terminfo database.
If the given string is null, any existing definition for
- the keycode is removed.
+ the keycode is removed. Similarly, if the given keycode
+ is negative or zero, any existing string for the given
+ definition is removed.
</PRE>
-
-
</PRE>
</BODY>
</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>dft_fgbg</STRONG> - use terminal's default colors
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>use_default_colors(void);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form</STRONG> - curses extension for programming forms
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
</PRE>
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- files <STRONG><curses.h></STRONG> and <STRONG><eti.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ files <STRONG><curses.h></STRONG> and <STRONG><eti.h></STRONG>.
In your library list, libform.a should be before libn-
curses.a; that is, you want to say `-lform -lncurses', not
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_cursor</STRONG> - position a form window cursor
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int pos_form_cursor(FORM *form);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
- <STRONG>form_data</STRONG> -
+ <STRONG>form_data</STRONG> - test for off-screen data in given forms
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
bool data_ahead(const FORM *form);
bool data_behind(const FORM *form);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_driver</STRONG> - command-processing loop of the form system
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int form_driver(FORM *form, int c);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- files <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ files <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field</STRONG> - make and break connections between fields and
forms
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_form_fields(FORM *form, FIELD **fields);
FIELD **form_fields(const FORM *form);
int field_count(const FORM *form);
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_attributes</STRONG> - color and attribute control for
form fields
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_field_fore(FIELD *field, chtype attr);
chtype field_fore(const FIELD *field);
int set_field_back(FIELD *field, chtype attr);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_buffer</STRONG> - field buffer control
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_field_buffer(FIELD *field, int buf, const char
*value);
char *field_buffer(const FIELD *field, int buffer);
may be allocated by applications through the <STRONG>nbuf</STRONG> argument
of (see <STRONG><A HREF="form_field_new.3x.html">form_field_new(3X)</A></STRONG>) but are not manipulated by the
forms library. The function <STRONG>field_buffer</STRONG> returns the
- foreground attribute.
+ address of the buffer.
The function <STRONG>set_field_status</STRONG> sets the associated status
flag of <EM>field</EM>; <STRONG>field_status</STRONG> gets the current value. The
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
These routines emulate the System V forms library. They
were not supported on Version 7 or BSD versions.
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_info</STRONG> - retrieve field characteristics
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int field_info(const FIELD *field, int *rows, int *cols,
int *frow, int *fcol, int *nrow, int *nbuf);
int dynamic_field_info(const FIELD *field, int *rows, int
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_just</STRONG> - retrieve field characteristics
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_field_just(FIELD *field, int justification);
int field_just(const FIELD *field);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_new</STRONG> - create and destroy form fields
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
FIELD *new_field(int height, int width,
int toprow, int leftcol,
int offscreen, int nbuffers);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
These routines emulate the System V forms library. They
were not supported on Version 7 or BSD versions.
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_opts</STRONG> - set and get field options
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_field_opts(FIELD *field, OPTIONS opts);
int field_opts_on(FIELD *field, OPTIONS opts);
int field_opts_off(FIELD *field, OPTIONS opts);
<STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="form.3x.html">form(3X)</A></STRONG>.
- <STRONG>NOTES</STRONG> The header file <STRONG><form.h></STRONG> automatically includes the
- header file <STRONG><curses.h></STRONG>.
+ <STRONG>NOTES</STRONG> The header file <STRONG><form.h></STRONG> automatically includes the
+ header file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_userptr</STRONG> - associate application data with a
form field
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_field_userptr(FIELD *field, void*userptr);
void *field_userptr(const FIELD *field);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_field_validation</STRONG> - data type validation for fields
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_field_type(FIELD *field, FIELDTYPE *type, ...);
FIELDTYPE *field_type(const FIELD *field);
void *field_arg(const FIELD *field);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_fieldtype</STRONG> - define validation-field types
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
FIELDTYPE *new_fieldtype(
bool (* const field_check)(FIELD *, const void *),
bool (* const char_check)(int, const void *));
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
All of the <STRONG>(char</STRONG> <STRONG>*)</STRONG> arguments of these functions should
actually be <STRONG>(void</STRONG> <STRONG>*)</STRONG>. The type has been left uncorrected
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_hook</STRONG> - set hooks for automatic invocation by applica-
tions
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_field_init(FORM *form, void (*func)(FORM *));
void (*)(FORM *) field_init(const FORM *form);
int set_field_term(FORM *form, void (*func)(FORM *));
any (<STRONG>NULL</STRONG> if there is no such hook).
The function <STRONG>set_form_term</STRONG> sets a hook to be called at
- form-unpost time and just before a page change change once
- it is posted. <STRONG>form_init</STRONG> returns the current form term
- hook, if any (<STRONG>NULL</STRONG> if there is no such hook).
+ form-unpost time and just before a page change once it is
+ posted. <STRONG>form_init</STRONG> returns the current form term hook, if
+ any (<STRONG>NULL</STRONG> if there is no such hook).
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_new</STRONG> - create and destroy forms
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
FORM *new_form(FIELD **fields);
int free_form(FORM *form);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_new_page</STRONG> - form pagination functions
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_new_page(FIELD *field, bool new_page_flag);
bool new_page(const FIELD *field);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_opts</STRONG> - set and get form options
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_form_opts(FORM *form, OPTIONS opts);
int form_opts_on(FORM *form, OPTIONS opts);
int form_opts_off(FORM *form, OPTIONS opts);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_page</STRONG> - set and get form page number
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_current_field(FORM *form, FIELD *field);
FIELD *current_field(const FORM *);
int set_form_page(FORM *form, int n);
<H2>SEE ALSO</H2><PRE>
<STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="form.3x.html">form(3X)</A></STRONG>.
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_post</STRONG> - write or erase forms from associated subwin-
dows
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int post_form(FORM *form);
int unpost_form(FORM *form);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
These routines emulate the System V forms library. They
were not supported on Version 7 or BSD versions.
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_requestname</STRONG> - handle printable form request names
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
const char *form_request_name(int request);
int form_request_by_name(const char *name);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_userptr</STRONG> - associate application data with a form item
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_form_userptr(FORM *form, void *userptr);
void* form_userptr(const FORM *form);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>form_win</STRONG> - make and break form window and subwindow asso-
ciations
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><form.h></STRONG>
int set_form_win(FORM *form, WINDOW *win);
WINDOW *form_win(const FORM *form);
int set_form_sub(FORM *form, WINDOW *sub);
treated as a request to change the system default form
window or subwindow.
- The function <STRONG>scale_window</STRONG> returns the minimum size
- required for the subwindow of <EM>form</EM>.
+ The function <STRONG>scale_form</STRONG> returns the minimum size required
+ for the subwindow of <EM>form</EM>.
</PRE>
<H2>SEE ALSO</H2><PRE>
<STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="form.3x.html">form(3X)</A></STRONG>.
- The header file <STRONG><form.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><form.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>keyok</STRONG> - enable or disable a keycode
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>keyok(int</STRONG> <STRONG>keycode,</STRONG> <STRONG>bool</STRONG> <STRONG>enable);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu</STRONG> - curses extension for programming menus
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
</PRE>
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- files <STRONG><curses.h></STRONG> and <STRONG><eti.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ files <STRONG><curses.h></STRONG> and <STRONG><eti.h></STRONG>.
In your library list, libmenu.a should be before libn-
curses.a; that is, you want to say `-lmenu -lncurses', not
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_attributes</STRONG> - color and attribute control for menus
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_fore(MENU *menu, chtype attr);
chtype menu_fore(const MENU *menu);
int set_menu_back(MENU *menu, chtype attr);
<STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG> and 3X pages whose names begin "menu_" for
detailed descriptions of the entry points.
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_cursor</STRONG> - position a menu's cursor
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int pos_menu_cursor(const MENU *menu);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_driver</STRONG> - command-processing loop of the menu system
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int menu_driver(MENU *menu, int c);
<H2>DESCRIPTION</H2><PRE>
Once a menu has been posted (displayed), you should funnel
input events to it through <STRONG>menu_driver</STRONG>. This routine has
- two major input cases; either the input is a menu naviga-
- tion request or it's a printable ASCII character. The
- menu driver requests are as follows:
+ three major input cases; either the input is a menu navi-
+ gation request, it's a printable ASCII character or it is
+ the KEY_MOUSE special key associated with an mouse event.
+ The menu driver requests are as follows:
REQ_LEFT_ITEM
Move left to an item.
REQ_TOGGLE_ITEM
Select/deselect an item.
-
Clear the menu pattern buffer.
REQ_BACK_PATTERN
- Delete the previous character from the pattern
+ Delete the previous character from the pattern
buffer.
REQ_NEXT_MATCH
such match, <STRONG>menu_driver</STRONG> returns <STRONG>E_NO_MATCH</STRONG> and deletes the
appended character from the buffer.
- If the second argument is one of the above pre-defined
+ If the second argument is one of the above pre-defined
requests, the corresponding action is performed.
- If the second argument is neither printable ASCII nor one
- of the above pre-defined menu requests, the drive assumes
- it is an application-specific command and returns
- <STRONG>E_UNKNOWN_COMMAND</STRONG>. Application-defined commands should be
- defined relative to <STRONG>MAX_COMMAND</STRONG>, the maximum value of
- these pre-defined requests.
-
+ If the second argument is the KEY_MOUSE special key, the
+ associated mouse event is translated into one of the above
+ pre-defined requests. Currently only clicks in the user
+ window (e.g. inside the menu display area or the decora-
+ tion window) are handled. If you click above the display
+ region of the menu, a REQ_SCR_ULINE is generated, if you
+ doubleclick a REQ_SCR_UPAGE is generated and if you
+ tripleclick a REQ_FIRST_ITEM is generated. If you click
+ below the display region of the menu, a REQ_SCR_DLINE is
+ generated, if you doubleclick a REQ_SCR_DPAGE is generated
+ and if you tripleclick a REQ_LAST_ITEM is generated. If
+ you click at an item inside the display area of the menu,
+ the menu cursor is positioned to that item. If you double-
+ click at an item a REQ_TOGGLE_ITEM is generated and
+ <STRONG>E_UNKNOWN_COMMAND</STRONG> is returned. This return value makes
+ sense, because a double click usually means that an item-
+ specific action should be returned. It's exactly the pur-
+ pose of this return value to signal that an application
+ specific command should be executed. If a translation into
+ a request was done, <STRONG>menu_driver</STRONG> returns the result of this
+ request. If you clicked outside the user window or the
+ mouse event couldn't be translated into a menu request an
+ <STRONG>E_REQUEST_DENIED</STRONG> is returned.
+
+ If the second argument is neither printable ASCII nor one
+ of the above pre-defined menu requests or KEY_MOUSE, the
+ drive assumes it is an application-specific command and
+ returns <STRONG>E_UNKNOWN_COMMAND</STRONG>. Application-defined commands
+ should be defined relative to <STRONG>MAX_COMMAND</STRONG>, the maximum
+ value of these pre-defined requests.
-</PRE>
-<H2>RETURN VALUE</H2><PRE>
<STRONG>menu_driver</STRONG> return one of the following error codes:
<STRONG>E_OK</STRONG> The routine succeeded.
System error occurred (see <STRONG>errno</STRONG>).
<STRONG>E_BAD_ARGUMENT</STRONG>
- Routine detected an incorrect or out-of-range argu-
+ Routine detected an incorrect or out-of-range argu-
ment.
<STRONG>E_BAD_STATE</STRONG>
<STRONG>E_NO_MATCH</STRONG>
Character failed to match.
+
+ <STRONG>E_REQUEST_DENIED</STRONG>
The menu driver could not process the request.
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- files <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ files <STRONG><curses.h></STRONG>.
</PRE>
<H2>PORTABILITY</H2><PRE>
- These routines emulate the System V menu library. They
- were not supported on Version 7 or BSD versions.
+ These routines emulate the System V menu library. They
+ were not supported on Version 7 or BSD versions. The sup-
+ port for mouse events is ncurses specific.
</PRE>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
</PRE>
</BODY>
</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_format</STRONG> - set and get menu sizes
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_format(MENU *menu, int rows, int cols);
int menu_format(const MENU *menu, int *rows, int *cols);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_hook</STRONG> - set hooks for automatic invocation by applica-
tions
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_item_init(MENU *menu, void (*func)(MENU *));
void (*)(MENU *) item_init(const MENU *menu);
int set_item_term(MENU *menu, void (*func)(MENU *));
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_items</STRONG> - make and break connections between items and
menus
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_items(MENU *menu, ITEM **items);
ITEM **menu_items(const MENU *menu);
int item_count(const MENU *menu);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_mark</STRONG> - get and set the menu mark string
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_mark(MENU *menu, const char *mark);
const char *menu_mark(const MENU *menu);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_new</STRONG> - create and destroy menus
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
MENU *new_menu(ITEM **items);
int free_menu(MENU *menu);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_opts</STRONG> - set and get menu options
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_opts(MENU *menu, OPTIONS opts);
int menu_opts_on(MENU *menu, OPTIONS opts);
int menu_opts_off(MENU *menu, OPTIONS opts);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_pattern</STRONG> - get and set a menu's pattern buffer
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_pattern(MENU *menu, const char *pattern);
char *menu_pattern(const MENU *menu);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_post</STRONG> - write or erase menus from associated subwin-
dows
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int post_menu(MENU *menu);
int unpost_menu(MENU *menu);
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_requestname</STRONG> - handle printable menu request names
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
const char *menu_request_name(int request);
int menu_request_by_name(const char *name);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_spacing</STRONG> - Control spacing between menu items.
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_spacing(MENU *menu,
int spc_description
int spc_rows,
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_userptr</STRONG> - associate application data with a menu item
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_userptr(MENU *menu, void *userptr);
void *menu_userptr(const MENU *menu);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>menu_win</STRONG> - make and break menu window and subwindow asso-
ciations
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_menu_win(MENU *menu, WINDOW *win);
WINDOW *menu_win(const MENU *menu);
int set_menu_sub(MENU *menu, WINDOW *sub);
<H2>SEE ALSO</H2><PRE>
<STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG>, <STRONG><A HREF="menu.3x.html">menu(3X)</A></STRONG>.
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mitem_current</STRONG> - set and get current_menu_item
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_current_item(MENU *menu, const ITEM *item);
ITEM *current_item(const MENU *menu);
int set_top_row(MENU *menu, int row);
<STRONG>current_item</STRONG> returns <STRONG>NULL</STRONG> on error.
<STRONG>top_row</STRONG> and <STRONG>item_index</STRONG> return <STRONG>ERR</STRONG> (the general <STRONG>curses</STRONG>
- <STRONG>error</STRONG> <STRONG>value)</STRONG> <STRONG>on</STRONG> <STRONG>error.</STRONG>
+ error value) on error.
<STRONG>set_current_item</STRONG> and <STRONG>set_top_row</STRONG> return one of the follow-
ing:
</PRE>
<H2>SEE ALSO</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mitem_name</STRONG> - get menu item name and description fields
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
const char *item_name(const ITEM *item);
const char *item_description(const ITEM *item);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mitem_new</STRONG> - create and destroy menu items
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
ITEM *new_item(const char *name, const char *description);
int free_item(ITEM *item);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mitem_opts</STRONG> - set and get menu item options
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_item_opts(ITEM *item, OPTIONS opts);
int item_opts_on(ITEM *item, OPTIONS opts);
int item_opts_off(ITEM *item, OPTIONS opts);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mitem_userptr</STRONG> - associate application data with a menu
item
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_item_userptr(ITEM *item, void *userptr);
void *item_userptr(const ITEM *item);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mitem_value</STRONG> - set and get menu item values
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
int set_item_value(ITEM *item, bool value);
bool item_value(const ITEM *item);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>mitem_visible</STRONG> - check visibility of a menu item
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><menu.h></STRONG>
bool item_visible(const ITEM *item);
</PRE>
<H2>NOTES</H2><PRE>
- The header file <STRONG><menu.h></STRONG> automatically includes the header
- file <STRONG><curses.h></STRONG>.
+ The header file <STRONG><menu.h></STRONG> automatically includes the header
+ file <STRONG><curses.h></STRONG>.
</PRE>
--- /dev/null
+<HTML>
+<BODY>
+<PRE>
+ <STRONG>ncurses</STRONG> - CRT screen handling and optimization package
+
+
+</PRE>
+<H2>SYNOPSIS</H2><PRE>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+
+
+</PRE>
+<H2>DESCRIPTION</H2><PRE>
+ The <STRONG>ncurses</STRONG> library routines give the user a terminal-
+ independent method of updating character screens with
+ reasonable optimization. This implementation is ``new
+ curses'' (ncurses) and is the approved replacement for
+ 4.4BSD classic curses, which has been discontinued.
+
+ The <STRONG>ncurses</STRONG> routines emulate the <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG> library of
+ System V Release 4 UNIX, and the XPG4 curses standard (XSI
+ curses) but the <STRONG>ncurses</STRONG> library is freely redistributable
+ in source form. Differences from the SVr4 curses are
+ summarized under the EXTENSIONS and BUGS sections below
+ and described in detail in the EXTENSIONS and BUGS
+ sections of individual man pages.
+
+ A program using these routines must be linked with the
+ <STRONG>-lncurses</STRONG> option, or (if it has been generated) with the
+ debugging library <STRONG>-lncurses_g</STRONG>. (Your system integrator
+ may also have installed these libraries under the names
+ <STRONG>-lcurses</STRONG> and <STRONG>-lcurses_g</STRONG>.) The ncurses_g library generates
+ trace logs (in a file called 'trace' in the current
+ directory) that describe curses actions.
+
+ The <STRONG>ncurses</STRONG> package supports: overall screen, window and
+ pad manipulation; output to windows and pads; reading
+ terminal input; control over terminal and <STRONG>curses</STRONG> input and
+ output options; environment query routines; color
+ manipulation; use of soft label keys; terminfo
+ capabilities; and access to low-level terminal-
+ manipulation routines.
+
+ To initialize the routines, the routine <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>
+ must be called before any of the other routines that deal
+ with windows and screens are used. The routine <STRONG>endwin</STRONG>
+ must be called before exiting. To get character-at-a-time
+ input without echoing (most interactive, screen oriented
+ programs want this), the following sequence should be
+ used:
+
+ <STRONG>initscr();</STRONG> <STRONG>cbreak();</STRONG> <STRONG>noecho();</STRONG>
+
+ Most programs would additionally use the sequence:
+
+ <STRONG>nonl();</STRONG>
+ <STRONG>intrflush(stdscr,</STRONG> <STRONG>FALSE);</STRONG>
+ <STRONG>keypad(stdscr,</STRONG> <STRONG>TRUE);</STRONG>
+
+ defined, must be output. This can be done by executing
+ the <STRONG>tput</STRONG> <STRONG>init</STRONG> command after the shell environment variable
+ <STRONG>TERM</STRONG> has been exported. <STRONG>tset(1)</STRONG> is usually responsible
+ for doing this. [See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for further details.]
+
+ The <STRONG>ncurses</STRONG> library permits manipulation of data
+ structures, called <EM>windows</EM>, which can be thought of as
+ two-dimensional arrays of characters representing all or
+ part of a CRT screen. A default window called <STRONG>stdscr</STRONG>,
+ which is the size of the terminal screen, is supplied.
+ Others may be created with <STRONG>newwin</STRONG>.
+
+ Note that <STRONG>curses</STRONG> does not handle overlapping windows,
+ that's done by the <STRONG><A HREF="panel.3x.html">panel(3X)</A></STRONG> library. This means that you
+ can either use <STRONG>stdscr</STRONG> or divide the screen into tiled
+ windows and not using <STRONG>stdscr</STRONG> at all. Mixing the two will
+ result in unpredictable, and undesired, effects.
+
+ Windows are referred to by variables declared as <STRONG>WINDOW</STRONG> <STRONG>*</STRONG>.
+ These data structures are manipulated with routines
+ described here and elsewhere in the <STRONG>ncurses</STRONG> manual pages.
+ Among which the most basic routines are <STRONG>move</STRONG> and <STRONG>addch</STRONG>.
+ More general versions of these routines are included with
+ names beginning with <STRONG>w</STRONG>, allowing the user to specify a
+ window. The routines not beginning with <STRONG>w</STRONG> affect <STRONG>stdscr</STRONG>.)
+
+ After using routines to manipulate a window, <STRONG>refresh</STRONG> is
+ called, telling <STRONG>curses</STRONG> to make the user's CRT screen look
+ like <STRONG>stdscr</STRONG>. The characters in a window are actually of
+ type <STRONG>chtype</STRONG>, (character and attribute data) so that other
+ information about the character may also be stored with
+ each character.
+
+ Special windows called <EM>pads</EM> may also be manipulated.
+ These are windows which are not constrained to the size of
+ the screen and whose contents need not be completely
+ displayed. See <STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> for more information.
+
+ In addition to drawing characters on the screen, video
+ attributes and colors may be supported, causing the
+ characters to show up in such modes as underlined, in
+ reverse video, or in color on terminals that support such
+ display enhancements. Line drawing characters may be
+ specified to be output. On input, <STRONG>curses</STRONG> is also able to
+ translate arrow and function keys that transmit escape
+ sequences into single values. The video attributes, line
+ drawing characters, and input values use names, defined in
+ <STRONG><curses.h></STRONG>, such as <STRONG>A_REVERSE</STRONG>, <STRONG>ACS_HLINE</STRONG>, and <STRONG>KEY_LEFT</STRONG>.
+
+ If the environment variables <STRONG>LINES</STRONG> and <STRONG>COLUMNS</STRONG> are set, or
+ if the program is executing in a window environment, line
+ and column information in the environment will override
+ of a screen is changeable (see <STRONG>ENVIRONMENT</STRONG>).
+
+ If the environment variable <STRONG>TERMINFO</STRONG> is defined, any
+ program using <STRONG>curses</STRONG> checks for a local terminal
+ definition before checking in the standard place. For
+ example, if <STRONG>TERM</STRONG> is set to <STRONG>att4424</STRONG>, then the compiled
+ terminal definition is found in
+
+ <STRONG>@DATADIR@/terminfo/a/att4424</STRONG>.
+
+ (The <STRONG>a</STRONG> is copied from the first letter of <STRONG>att4424</STRONG> to avoid
+ creation of huge directories.) However, if <STRONG>TERMINFO</STRONG> is
+ set to <STRONG>$HOME/myterms</STRONG>, <STRONG>curses</STRONG> first checks
+
+ <STRONG>$HOME/myterms/a/att4424</STRONG>,
+
+ and if that fails, it then checks
+
+ <STRONG>@DATADIR@/terminfo/a/att4424</STRONG>.
+
+ This is useful for developing experimental definitions or
+ when write permission in <STRONG>@DATADIR@/terminfo</STRONG> is not
+ available.
+
+ The integer variables <STRONG>LINES</STRONG> and <STRONG>COLS</STRONG> are defined in
+ <STRONG><curses.h></STRONG> and will be filled in by <STRONG>initscr</STRONG> with the size
+ of the screen. The constants <STRONG>TRUE</STRONG> and <STRONG>FALSE</STRONG> have the
+ values <STRONG>1</STRONG> and <STRONG>0</STRONG>, respectively.
+
+ The <STRONG>curses</STRONG> routines also define the <STRONG>WINDOW</STRONG> <STRONG>*</STRONG> variable
+ <STRONG>curscr</STRONG> which is used for certain low-level operations like
+ clearing and redrawing a screen containing garbage. The
+ <STRONG>curscr</STRONG> can be used in only a few routines.
+
+
+ <STRONG>Routine</STRONG> <STRONG>and</STRONG> <STRONG>Argument</STRONG> <STRONG>Names</STRONG>
+ Many <STRONG>curses</STRONG> routines have two or more versions. The
+ routines prefixed with <STRONG>w</STRONG> require a window argument. The
+ routines prefixed with <STRONG>p</STRONG> require a pad argument. Those
+ without a prefix generally use <STRONG>stdscr</STRONG>.
+
+ The routines prefixed with <STRONG>mv</STRONG> require a <EM>y</EM> and <EM>x</EM> coordinate
+ to move to before performing the appropriate action. The
+ <STRONG>mv</STRONG> routines imply a call to <STRONG>move</STRONG> before the call to the
+ other routine. The coordinate <EM>y</EM> always refers to the row
+ (of the window), and <EM>x</EM> always refers to the column. The
+ upper left-hand corner is always (0,0), not (1,1).
+
+ The routines prefixed with <STRONG>mvw</STRONG> take both a window argument
+ and <EM>x</EM> and <EM>y</EM> coordinates. The window argument is always
+ specified before the coordinates.
+
+ <STRONG>WINDOW</STRONG>.
+
+ Option setting routines require a Boolean flag <EM>bf</EM> with the
+ value <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG>; <EM>bf</EM> is always of type <STRONG>bool</STRONG>. The
+ variables <EM>ch</EM> and <EM>attrs</EM> below are always of type <STRONG>chtype</STRONG>.
+ The types <STRONG>WINDOW</STRONG>, <STRONG>SCREEN</STRONG>, <STRONG>bool</STRONG>, and <STRONG>chtype</STRONG> are defined in
+ <STRONG><curses.h></STRONG>. The type <STRONG>TERMINAL</STRONG> is defined in <STRONG><term.h></STRONG>.
+ All other arguments are integers.
+
+
+ <STRONG>Routine</STRONG> <STRONG>Name</STRONG> <STRONG>Index</STRONG>
+ The following table lists each <STRONG>curses</STRONG> routine and the name
+ of the manual page on which it is described. Routines
+ flagged with `*' are ncurses-specific, not described by
+ XPG4 or present in SVr4.
+
+ center tab(/); l l l l . <STRONG>curses</STRONG> Routine Name/Manual Page
+ Name = addch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> addchnstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG>
+ addchstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> addnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
+ addstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> attr_get/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ attr_off/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> attr_on/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ attr_set/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> attroff/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ attron/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> attrset/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ baudrate/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> beep/<STRONG><A HREF="curs_beep.3x.html">curs_beep(3X)</A></STRONG>
+ bkgd/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG> bkgdset/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG>
+ border/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG> box/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
+ can_change_color/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG> cbreak/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
+ chgat/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> clear/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>
+ clearok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> clrtobot/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>
+ clrtoeol/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> color_content/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG>
+ color_set/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> copywin/<STRONG><A HREF="curs_overlay.3x.html">curs_overlay(3X)</A></STRONG>
+ curs_set/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> def_prog_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
+ def_shell_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> define_key/<STRONG><A HREF="define_key.3x.html">define_key(3X)</A></STRONG>*
+ del_curterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> delay_output/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>
+ delch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG> deleteln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG>
+ delscreen/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG> delwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
+ derwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> doupdate/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>
+ dupwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> echo/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
+ echochar/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> endwin/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>
+ erase/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> erasechar/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
+ filter/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> flash/<STRONG><A HREF="curs_beep.3x.html">curs_beep(3X)</A></STRONG>
+ flushinp/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> getbegyx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG>
+ getbkgd/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG> getch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG>
+ getmaxyx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG> getmouse/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>*
+ getnstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> getparyx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG>
+ getstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> getsyx/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
+ getwin/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> getyx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG>
+ halfdelay/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> has_colors/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG>
+ has_ic/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> has_il/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
+ has_key/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG>* hline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
+ idcok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> idlok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
+ immedok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> inch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG>
+ initscr/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG> innstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ insch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> insdelln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG>
+ insertln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> insnstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG>
+ insstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> instr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ intrflush/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> is_linetouched/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG>
+ is_wintouched/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG> isendwin/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>
+ keyname/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> keyok/<STRONG><A HREF="keyok.3x.html">keyok(3X)</A></STRONG>*
+ keypad/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> killchar/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
+ leaveok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> longname/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
+ mcprint/<STRONG><A HREF="curs_print.3x.html">curs_print(3X)</A></STRONG>* meta/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
+ mouseinterval/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>* mousemask/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>*
+ move/<STRONG><A HREF="curs_move.3x.html">curs_move(3X)</A></STRONG> mvaddch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG>
+ mvaddchnstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> mvaddchstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG>
+ mvaddnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> mvaddstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
+ mvchgat/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> mvcur/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ mvdelch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG> mvderwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
+ mvgetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> mvgetnstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG>
+ mvgetstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> mvhline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
+ mvinch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG> mvinchnstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG>
+ mvinchstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> mvinnstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ mvinsch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> mvinsnstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG>
+ mvinsstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> mvinstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ mvprintw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> mvscanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG>
+ mvwaddch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> mvwaddchnstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG>
+ mvwaddchstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> mvwaddnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
+ mvwaddstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> mvwchgat/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ mvwdelch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG> mvwgetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG>
+ mvwgetnstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> mvwgetstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG>
+ mvwhline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG> mvwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
+ mvwinch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG> mvwinchnstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG>
+ mvwinchstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> mvwinnstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ mvwinsch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> mvwinsnstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG>
+ mvwinsstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> mvwinstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ mvwprintw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> mvwscanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG>
+ mvwvline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG> napms/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
+ newpad/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> newterm/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>
+ newwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> nl/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
+ nocbreak/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> nodelay/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
+ noecho/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> nonl/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
+ noqiflush/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> noraw/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
+ notimeout/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> overlay/<STRONG><A HREF="curs_overlay.3x.html">curs_overlay(3X)</A></STRONG>
+ overwrite/<STRONG><A HREF="curs_overlay.3x.html">curs_overlay(3X)</A></STRONG> pair_content/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG>
+ pechochar/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> pnoutrefresh/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG>
+ prefresh/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> printw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG>
+ putp/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> putwin/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>
+ qiflush/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> raw/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
+ redrawwin/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG> refresh/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>
+ reset_prog_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
+ reset_shell_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> resetty/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
+ resizeterm/<STRONG><A HREF="resizeterm.3x.html">resizeterm(3X)</A></STRONG>* restartterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ ripoffline/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> savetty/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
+ scanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG> scr_dump/<STRONG><A HREF="curs_scr_dump.3x.html">curs_scr_dump(3X)</A></STRONG>
+ scroll/<STRONG><A HREF="curs_scroll.3x.html">curs_scroll(3X)</A></STRONG> scrollok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
+ set_curterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> set_term/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>
+ setscrreg/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> setsyx/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
+ setterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> setupterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ slk_attr/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>* slk_attr_off/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ slk_attr_on/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_attr_set/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ slk_attroff/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_attron/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ slk_attrset/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_clear/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ slk_color/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_init/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ slk_label/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_noutrefresh/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ slk_refresh/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_restore/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ slk_set/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_touch/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
+ standend/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> standout/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ start_color/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG> subpad/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG>
+ subwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> syncok/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
+ termattrs/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> termname/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
+ tgetent/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tgetflag/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG>
+ tgetnum/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tgetstr/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG>
+ tgoto/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tigetflag/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ tigetnum/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> tigetstr/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ timeout/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> touchline/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG>
+ touchwin/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG> tparm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ tputs/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tputs/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ typeahead/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> unctrl/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>
+ ungetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> ungetmouse/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>*
+ untouchwin/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG> use_default_colors/<STRONG><A HREF="dft_fgbg.3x.html">dft_fgbg(3X)</A></STRONG>*
+ use_env/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> vidattr/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
+ vidputs/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> vline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
+ vw_printw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> vw_scanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG>
+ vwprintw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> vwscanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG>
+ waddch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> waddchnstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG>
+ waddchstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> waddnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
+ waddstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> wattr_get/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ wattr_off/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wattr_on/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ wattr_set/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wattroff/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ wattron/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wattrset/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ wbkgd/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG> wbkgdset/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG>
+ wborder/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG> wchgat/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ wclear/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> wclrtobot/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>
+ wclrtoeol/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> wcolor_set/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ wcursyncup/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> wdelch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG>
+ wdeleteln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> wechochar/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG>
+ wenclose/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>* werase/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>
+ wgetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> wgetnstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG>
+ wgetstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> whline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
+ winch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG> winchnstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG>
+ winchstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> winnstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ winsch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> winsdelln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG>
+ winsertln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> winsnstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG>
+ winsstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> winstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
+ wmouse_trafo/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG> wmove/<STRONG><A HREF="curs_move.3x.html">curs_move(3X)</A></STRONG>
+ wnoutrefresh/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG> wprintw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG>
+ wscrl/<STRONG><A HREF="curs_scroll.3x.html">curs_scroll(3X)</A></STRONG> wsetscrreg/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
+ wstandend/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wstandout/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
+ wsyncdown/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> wsyncup/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
+ wtimeout/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> wtouchln/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG>
+ wvline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
+
+
+</PRE>
+<H2>RETURN VALUE</H2><PRE>
+ Routines that return an integer return <STRONG>ERR</STRONG> upon failure
+ and an integer value other than <STRONG>ERR</STRONG> upon successful
+ completion, unless otherwise noted in the routine
+ descriptions.
+
+ All macros return the value of the <STRONG>w</STRONG> version, except
+ <STRONG>setscrreg</STRONG>, <STRONG>wsetscrreg</STRONG>, <STRONG>getyx</STRONG>, <STRONG>getbegyx</STRONG>, <STRONG>getmaxyx</STRONG>. The
+ return values of <STRONG>setscrreg</STRONG>, <STRONG>wsetscrreg</STRONG>, <STRONG>getyx</STRONG>, <STRONG>getbegyx</STRONG>,
+ and <STRONG>getmaxyx</STRONG> are undefined (<EM>i</EM>.<EM>e</EM>., these should not be used
+ as the right-hand side of assignment statements).
+
+ Routines that return pointers return <STRONG>NULL</STRONG> on error.
+
+
+</PRE>
+<H2>ENVIRONMENT</H2><PRE>
+ The following environment symbols are useful for
+ customizing the runtime behavior of the <STRONG>ncurses</STRONG> library.
+ The most important ones have been already discussed in
+ detail.
+
+ BAUDRATE
+ The debugging library checks this environment symbol
+ when the application has redirected output to a file.
+ The symbol's numeric value is used for the baudrate.
+ If no value is found <STRONG>ncurses</STRONG> uses 9600. This allows
+ testers to construct repeatable test-cases that take
+ into account costs that depend on baudrate.
+
+ CC When set, change occurrences of the command_character
+ (i.e., the <STRONG>cmdch</STRONG> capability) of the loaded terminfo
+ entries to the value of this symbol. Very few
+ terminfo entries provide this feature.
+
+ COLUMNS
+ Specify the width of the screen in characters.
+ Applications running in a windowing environment
+ usually are able to obtain the width of the window in
+ which they are executing. If neither the $COLUMNS
+ value nor the terminal's screen size is available,
+ <STRONG>ncurses</STRONG> uses the size which may be specified in the
+ terminfo database (i.e., the <STRONG>cols</STRONG> capability).
+
+ It is important that your application use a correct
+ size for the screen. However, this is not always
+ possible because your application may be running on a
+ host which does not honor NAWS (Negotiations About
+
+ Either COLUMNS or LINES symbols may be specified
+ independently. This is mainly useful to circumvent
+ legacy misfeatures of terminal descriptions, e.g.,
+ xterm which commonly specifies a 65 line screen. For
+ best results, <STRONG>lines</STRONG> and <STRONG>cols</STRONG> should not be specified
+ in a terminal description for terminals which are run
+ as emulations.
+
+ Use the <STRONG>use_env</STRONG> function to disable this feature.
+
+ ESCDELAY
+ Specifies the total time, in milliseconds, for which
+ ncurses will await a character sequence, e.g., a
+ function key. The default value, 1000 milliseconds,
+ is enough for most uses. However, it is made a
+ variable to accommodate unusual applications.
+
+ The most common instance where you may wish to change
+ this value is to work with slow hosts, e.g., running
+ on a network. If the host cannot read characters
+ rapidly enough, it will have the same effect as if
+ the terminal did not send characters rapidly enough.
+ The library will still see a timeout.
+
+ Note that xterm mouse events are built up from
+ character sequences received from the xterm. If your
+ application makes heavy use of multiple-clicking, you
+ may wish to lengthen this default value because the
+ timeout applies to the composed multi-click event as
+ well as the individual clicks.
+
+ HOME Tells <STRONG>ncurses</STRONG> where your home directory is. That is
+ where it may read and write auxiliary terminal
+ descriptions:
+
+ $HOME/.termcap
+ $HOME/.terminfo
+
+ LINES
+ Like COLUMNS, specify the height of the screen in
+ characters. See COLUMNS for a detailed description.
+
+ MOUSE_BUTTONS_123
+ This applies only to the OS/2 EMX port. It specifies
+ the order of buttons on the mouse. OS/2 numbers a
+ 3-button mouse inconsistently from other platforms:
+
+ 1 = left
+ 2 = right
+ 3 = middle.
+
+ 123 or 321. If it is not specified, <STRONG>ncurses</STRONG> uses
+ 132.
+
+ NCURSES_NO_PADDING
+ Most of the terminal descriptions in the terminfo
+ database are written for real "hardware" terminals.
+ Many people use terminal emulators which run in a
+ windowing environment and use curses-based
+ applications. Terminal emulators can duplicate all
+ of the important aspects of a hardware terminal, but
+ they do not have the same limitations. The chief
+ limitation of a hardware terminal from the standpoint
+ of your application is the management of dataflow,
+ i.e., timing. Unless a hardware terminal is
+ interfaced into a terminal concentrator (which does
+ flow control), it (or your application) must manage
+ dataflow, preventing overruns. The cheapest solution
+ (no hardware cost) is for your program to do this by
+ pausing after operations that the terminal does
+ slowly, such as clearing the display.
+
+ As a result, many terminal descriptions (including
+ the vt100) have delay times embedded. You may wish
+ to use these descriptions, but not want to pay the
+ performance penalty.
+
+ Set the NCURSES_NO_PADDING symbol to disable all but
+ mandatory padding. Mandatory padding is used as a
+ part of special control sequences such as <EM>flash</EM>.
+
+ NCURSES_NO_SETBUF
+ Normally <STRONG>ncurses</STRONG> enables buffered output during
+ terminal initialization. This is done (as in SVr4
+ curses) for performance reasons. For testing
+ purposes, both of <STRONG>ncurses</STRONG> and certain applications,
+ this feature is made optional. Setting the
+ NCURSES_NO_SETBUF variable disables output buffering,
+ leaving the output in the original (usually line
+ buffered) mode.
+
+ NCURSES_TRACE
+ During initialization, the <STRONG>ncurses</STRONG> debugging library
+ checks the NCURSES_TRACE symbol. If it is defined,
+ to a numeric value, <STRONG>ncurses</STRONG> calls the <STRONG>trace</STRONG> function,
+ using that value as the argument.
+
+ The argument values, which are defined in <STRONG>curses.h</STRONG>,
+ provide several types of information. When running
+ with traces enabled, your application will write the
+ file <STRONG>trace</STRONG> to the current directory.
+
+ TERM Denotes your terminal type. Each terminal type is
+ If the <STRONG>ncurses</STRONG> library has been configured with
+ <EM>termcap</EM> support, <STRONG>ncurses</STRONG> will check for a terminal's
+ description in termcap form if it is not available in
+ the terminfo database.
+
+ The TERMCAP symbol contains either a terminal
+ description (with newlines stripped out), or a file
+ name telling where the information denoted by the
+ TERM symbol exists. In either case, setting it
+ directs <STRONG>ncurses</STRONG> to ignore the usual place for this
+ information, e.g., /etc/termcap.
+
+ TERMINFO
+ Overrides the directory in which <STRONG>ncurses</STRONG> searches for
+ your terminal description. This is the simplest, but
+ not the only way to change the list of directories.
+ The complete list of directories in order follows:
+
+ - the last directory to which <STRONG>ncurses</STRONG> wrote, if any,
+ is searched first.
+
+ - the directory specified by the TERMINFO symbol
+
+ - $HOME/.terminfo
+
+ - directories listed in the TERMINFO_DIRS symbol
+
+ - one or more directories whose names are configured
+ and compiled into the ncurses library, e.g.,
+ @DATADIR@/terminfo
+
+ TERMINFO_DIRS
+ Specifies a list of directories to search for
+ terminal descriptions. The list is separated by
+ colons (i.e., ":"). All of the terminal descriptions
+ are in terminfo form, which makes a subdirectory
+ named for the first letter of the terminal names
+ therein.
+
+ TERMPATH
+ If TERMCAP does not hold a file name then <STRONG>ncurses</STRONG>
+ checks the TERMPATH symbol. This is a list of
+ filenames separated by colons (i.e., ":"). If the
+ TERMPATH symbol is not set, <STRONG>ncurses</STRONG> looks in the
+ files /etc/termcap, /usr/share/misc/termcap and
+ $HOME/.termcap, in that order.
+
+
+</PRE>
+<H2>FILES</H2><PRE>
+ @DATADIR@/tabset
+ directory containing initialization files for the
+ terminal capability database @DATADIR@/terminfo
+ terminal capability database
+
+ <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> and 3X pages whose names begin "curs_" for
+ detailed routine descriptions.
+
+
+</PRE>
+<H2>EXTENSIONS</H2><PRE>
+ The <STRONG>ncurses</STRONG> library can be compiled with an option
+ (<STRONG>-DUSE_GETCAP</STRONG>) that falls back to the old-style
+ /etc/termcap file if the terminal setup code cannot find a
+ terminfo entry corresponding to <STRONG>TERM</STRONG>. Use of this feature
+ is not recommended, as it essentially includes an entire
+ termcap compiler in the <STRONG>ncurses</STRONG> startup code, at
+ significant cost in core and startup cycles.
+
+ The <STRONG>ncurses</STRONG> library includes facilities for capturing
+ mouse events on certain terminals (including xterm). See
+ the <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG> manual page for details.
+
+ The <STRONG>ncurses</STRONG> library includes facilities for responding to
+ window resizing events, e.g., when running in an xterm.
+ See the <STRONG><A HREF="resizeterm.3x.html">resizeterm(3X)</A></STRONG> and <STRONG><A HREF="wresize.3x.html">wresize(3X)</A></STRONG> manual pages for
+ details. In addition, the library may be configured with
+ a SIGWINCH handler.
+
+ The <STRONG>ncurses</STRONG> library extends the fixed set of function key
+ capabilities of terminals by allowing the application
+ designer to define additional key sequences at runtime.
+ See the <STRONG><A HREF="define_key.3x.html">define_key(3X)</A></STRONG> and <STRONG><A HREF="keyok.3x.html">keyok(3X)</A></STRONG> manual pages for
+ details.
+
+ The <STRONG>ncurses</STRONG> library can exploit the capabilities of
+ terminals which implement the ISO-6429 SGR 39 and SGR 49
+ controls, which allow an application to reset the terminal
+ to its original foreground and background colors. From
+ the users' perspective, the application is able to draw
+ colored text on a background whose color is set
+ independently, providing better control over color
+ contrasts. See the <STRONG><A HREF="use_default_colors.3x.html">use_default_colors(3X)</A></STRONG> manual page for
+ details.
+
+ The <STRONG>ncurses</STRONG> library includes a function for directing
+ application output to a printer attached to the terminal
+ device. See the <STRONG><A HREF="curs_print.3x.html">curs_print(3X)</A></STRONG> manual page for details.
+
+
+</PRE>
+<H2>PORTABILITY</H2><PRE>
+ The <STRONG>ncurses</STRONG> library is intended to be BASE-level
+ conformant with the XSI Curses standard. Certain portions
+ of the EXTENDED XSI Curses functionality (including color
+ support) are supported. The following EXTENDED XSI Curses
+ calls in support of wide (multibyte) characters are not
+ yet implemented: <STRONG>add_wch</STRONG>, <STRONG>add_wchnstr</STRONG>, <STRONG>add_wchstr</STRONG>,
+ <STRONG>addnwstr</STRONG>, <STRONG>addwstr</STRONG>, <STRONG>bkgrnd</STRONG>, <STRONG>bkgrndset</STRONG>, <STRONG>border_set</STRONG>, <STRONG>box_set</STRONG>,
+ <STRONG>echo_wchar</STRONG>, <STRONG>erasewchar</STRONG>, <STRONG>get_wch</STRONG>, <STRONG>get_wstr</STRONG>, <STRONG>getbkgrnd</STRONG>,
+ <STRONG>getcchar</STRONG>, <STRONG>getn_wstr</STRONG>, <STRONG>getwchtype</STRONG>, <STRONG>hline_set</STRONG>, <STRONG>in_wch</STRONG>,
+ <STRONG>killwchar</STRONG>, <STRONG>mvadd_wch</STRONG>, <STRONG>mvadd_wchnstr</STRONG>, <STRONG>mvadd_wchstr</STRONG>,
+ <STRONG>mvaddnwstr</STRONG>, <STRONG>mvaddwstr</STRONG>, <STRONG>mvget_wch</STRONG>, <STRONG>mvget_wstr</STRONG>, <STRONG>mvgetn_wstr</STRONG>,
+ <STRONG>mvhline_set</STRONG>, <STRONG>mvin_wch</STRONG>, <STRONG>mvinnwstr</STRONG>, <STRONG>mvins_nwstr</STRONG>, <STRONG>mvins_wch</STRONG>,
+ <STRONG>mvins_wstr</STRONG>, <STRONG>mvinwchnstr</STRONG>, <STRONG>mvinwchstr</STRONG>, <STRONG>mvinwchstr</STRONG>, <STRONG>mvinwstr</STRONG>,
+ <STRONG>mvvline_set</STRONG>, <STRONG>mvwadd_wch</STRONG>, <STRONG>mvwadd_wchnstr</STRONG>, <STRONG>mvwadd_wchstr</STRONG>,
+ <STRONG>mvwaddnwstr</STRONG>, <STRONG>mvwaddwstr</STRONG>, <STRONG>mvwget_ch</STRONG>, <STRONG>mvwget_wch</STRONG>,
+ <STRONG>mvwget_wstr</STRONG>, <STRONG>mvwgetn_wstr</STRONG>, <STRONG>mvwhline_set</STRONG>, <STRONG>mvwin_wch</STRONG>,
+ <STRONG>mvwin_wchnstr</STRONG>, <STRONG>mvwin_wchstr</STRONG>, <STRONG>mvwinnwstr</STRONG>, <STRONG>mvwins_nwstr</STRONG>,
+ <STRONG>mvwins_wch</STRONG>, <STRONG>mvwins_wstr</STRONG>, <STRONG>mvwinwchnstr</STRONG>. <STRONG>mvwinwstr</STRONG>,
+ <STRONG>mvwvline_set</STRONG>, <STRONG>pecho_wchar</STRONG>, <STRONG>setcchar</STRONG>, <STRONG>slk_wset</STRONG>, <STRONG>term_attrs</STRONG>,
+ <STRONG>unget_wch</STRONG>, <STRONG>vhline_set</STRONG>, <STRONG>vid_attr</STRONG>, <STRONG>vid_puts</STRONG>, <STRONG>vline_set</STRONG>,
+ <STRONG>wadd_wch</STRONG>, <STRONG>wadd_wchnstr</STRONG>, <STRONG>wadd_wchstr</STRONG>, <STRONG>waddnwstr</STRONG>, <STRONG>waddwstr</STRONG>,
+ <STRONG>waddwstr</STRONG>, <STRONG>wbkgrnd</STRONG>, <STRONG>wbkgrndset</STRONG>, <STRONG>wbkgrndset</STRONG>, <STRONG>wborder_set</STRONG>,
+ <STRONG>wecho_wchar</STRONG>, <STRONG>wecho_wchar</STRONG>, <STRONG>wget_wch</STRONG>, <STRONG>wget_wstr</STRONG>, <STRONG>wgetbkgrnd</STRONG>,
+ <STRONG>wgetn_wstr</STRONG>, <STRONG>whline_set</STRONG>, <STRONG>win_wch</STRONG>, <STRONG>win_wchnstr</STRONG>, <STRONG>win_wchstr</STRONG>,
+ <STRONG>winnwstr</STRONG>, <STRONG>wins_nwstr</STRONG>, <STRONG>wins_wch</STRONG>, <STRONG>wins_wstr</STRONG>, <STRONG>winwchnstr</STRONG>,
+ <STRONG>winwchstr</STRONG>, <STRONG>winwstr</STRONG>, <STRONG>wunctrl</STRONG>, <STRONG>wvline_set</STRONG>,
+
+ A small number of local differences (that is, individual
+ differences between the XSI Curses and <STRONG>ncurses</STRONG> calls) are
+ described in <STRONG>PORTABILITY</STRONG> sections of the library man
+ pages.
+
+ The routine <STRONG>has_key</STRONG> is not part of XPG4, nor is it present
+ in SVr4. See the <STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> manual page for details.
+
+ The routine <STRONG>slk_attr</STRONG> is not part of XPG4, nor is it
+ present in SVr4. See the <STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> manual page for
+ details.
+
+ The routines <STRONG>getmouse</STRONG>, <STRONG>mousemask</STRONG>, <STRONG>ungetmouse</STRONG>,
+ <STRONG>mouseinterval</STRONG>, and <STRONG>wenclose</STRONG> relating to mouse interfacing
+ are not part of XPG4, nor are they present in SVr4. See
+ the <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG> manual page for details.
+
+ The routine <STRONG>mcprint</STRONG> was not present in any previous curses
+ implementation. See the <STRONG><A HREF="curs_print.3x.html">curs_print(3X)</A></STRONG> manual page for
+ details.
+
+ The routine <STRONG>wresize</STRONG> is not part of XPG4, nor is it present
+ in SVr4. See the <STRONG><A HREF="wresize.3x.html">wresize(3X)</A></STRONG> manual page for details.
+
+ In historic curses versions, delays embedded in the
+ capabilities <STRONG>cr</STRONG>, <STRONG>ind</STRONG>, <STRONG>cub1</STRONG>, <STRONG>ff</STRONG> and <STRONG>tab</STRONG> activated
+ corresponding delay bits in the UNIX tty driver. In this
+ implementation, all padding is done by NUL sends. This
+ method is slightly more expensive, but narrows the
+ interface to the UNIX kernel significantly and increases
+ the package's portability correspondingly.
+
+ In the XSI standard and SVr4 manual pages, many entry
+ points have prototype arguments of the for <STRONG>char</STRONG> <STRONG>*const</STRONG> (or
+ (see section 3.5.4.1), these declarations are either (a)
+ meaningless, or (b) meaningless and illegal. The
+ declaration <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*x</STRONG> is a modifiable pointer to
+ unmodifiable data, but <STRONG>char</STRONG> <STRONG>*const</STRONG> <STRONG>x</STRONG>' is an unmodifiable
+ pointer to modifiable data. Given that C passes arguments
+ by value, <STRONG><type></STRONG> <STRONG>*const</STRONG> as a formal type is at best
+ dubious. Some compilers choke on the prototypes.
+ Therefore, in this implementation, they have been changed
+ to <STRONG>const</STRONG> <STRONG><type></STRONG> <STRONG>*</STRONG> globally.
+
+
+</PRE>
+<H2>NOTES</H2><PRE>
+ The header file <STRONG><curses.h></STRONG> automatically includes the
+ header files <STRONG><stdio.h></STRONG> and <STRONG><unctrl.h></STRONG>.
+
+ If standard output from a <STRONG>ncurses</STRONG> program is re-directed
+ to something which is not a tty, screen updates will be
+ directed to standard error. This was an undocumented
+ feature of AT&T System V Release 3 curses.
+
+
+</PRE>
+<H2>AUTHORS</H2><PRE>
+ Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
+ Based on pcurses by Pavel Curtis.
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+</PRE>
+</BODY>
+</HTML>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
panel - panel stack extension for curses
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><panel.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><panel.h></STRONG>
<STRONG>cc</STRONG> <STRONG>[flags]</STRONG> <STRONG>sourcefiles</STRONG> <STRONG>-lpanel</STRONG> <STRONG>-lncurses</STRONG>
</PRE>
<H2>AUTHOR</H2><PRE>
- Originally written by Warren Tucker <wht@n4hgf.mt-
- park.ga.us>, primarily to assist in porting u386mon to
+ Originally written by Warren Tucker <wht@n4hgf.mt-
+ park.ga.us>, primarily to assist in porting u386mon to
systems without a native panels library. Repackaged for
ncurses by Zeyd ben-Halim.
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>resizeterm</STRONG> - change the curses terminal size
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>resizeterm(int</STRONG> <STRONG>lines,</STRONG> <STRONG>int</STRONG> <STRONG>columns);</STRONG>
<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<PRE>
<STRONG>wresize</STRONG> - resize a curses window
</PRE>
<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
+ <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
<STRONG>int</STRONG> <STRONG>wresize(WINDOW</STRONG> <STRONG>*win,</STRONG> <STRONG>int</STRONG> <STRONG>lines,</STRONG> <STRONG>int</STRONG> <STRONG>columns);</STRONG>
+++ /dev/null
-<HTML>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
- <STRONG>ncurses</STRONG> - CRT screen handling and optimization package
-
-
-</PRE>
-<H2>SYNOPSIS</H2><PRE>
- <STRONG>#include</STRONG> <STRONG><curses.h></STRONG>
-
-
-</PRE>
-<H2>DESCRIPTION</H2><PRE>
- The <STRONG>curses</STRONG> library routines give the user a terminal-inde-
- pendent method of updating character screens with reason-
- able optimization. This implementation is ``new curses''
- (ncurses) and is the approved replacement for 4.4BSD clas-
- sic curses, which has been discontinued.
-
- The <STRONG>ncurses</STRONG> routines emulate the <STRONG><A HREF="ncurses.3x.html">curses(3X)</A></STRONG> library of
- System V Release 4 UNIX, and the XPG4 curses standard (XSI
- curses) but the <STRONG>ncurses</STRONG> library is freely redistributable
- in source form. Differences from the SVr4 curses are sum-
- marized under the EXTENSIONS and BUGS sections below and
- described in detail in the EXTENSIONS and BUGS sections of
- individual man pages.
-
- A program using these routines must be linked with the
- <STRONG>-lncurses</STRONG> option, or (if it has been generated) with the
- debugging library <STRONG>-lncurses_g</STRONG>. (Your system integrator
- may also have installed these libraries under the names
- <STRONG>-lcurses</STRONG> and <STRONG>-lcurses_g</STRONG>.) The ncurses_g library generates
- trace logs (in a file called 'trace' in the current direc-
- tory) that describe curses actions.
-
- The <STRONG>ncurses</STRONG> package supports: overall screen, window and
- pad manipulation; output to windows and pads; reading ter-
- minal input; control over terminal and <STRONG>curses</STRONG> input and
- output options; environment query routines; color manipu-
- lation; use of soft label keys; terminfo capabilities; and
- access to low-level terminal-manipulation routines.
-
- To initialize the routines, the routine <STRONG>initscr</STRONG> or <STRONG>newterm</STRONG>
- must be called before any of the other routines that deal
- with windows and screens are used. The routine <STRONG>endwin</STRONG>
- must be called before exiting. To get character-at-a-time
- input without echoing (most interactive, screen oriented
- programs want this), the following sequence should be
- used:
-
- <STRONG>initscr();</STRONG> <STRONG>cbreak();</STRONG> <STRONG>noecho();</STRONG>
-
- Most programs would additionally use the sequence:
-
- <STRONG>nonl();</STRONG>
- <STRONG>intrflush(stdscr,</STRONG> <STRONG>FALSE);</STRONG>
- <STRONG>keypad(stdscr,</STRONG> <STRONG>TRUE);</STRONG>
-
- Before a <STRONG>curses</STRONG> program is run, the tab stops of the ter-
- the <STRONG>tput</STRONG> <STRONG>init</STRONG> command after the shell environment variable
- <STRONG>TERM</STRONG> has been exported. <STRONG>tset(1)</STRONG> is usually responsible
- for doing this. [See <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> for further details.]
-
- The <STRONG>curses</STRONG> library permits manipulation of data struc-
- tures, called <EM>windows</EM>, which can be thought of as two-
- dimensional arrays of characters representing all or part
- of a CRT screen. A default window called <STRONG>stdscr</STRONG>, which is
- the size of the terminal screen, is supplied. Others may
- be created with <STRONG>newwin</STRONG>.
-
- Note that <STRONG>curses</STRONG> does not handle overlapping windows,
- that's done by the <STRONG><A HREF="panel.3x.html">panel(3X)</A></STRONG> library. This means that you
- can either use <STRONG>stdscr</STRONG> or divide the screen into tiled win-
- dows and not using <STRONG>stdscr</STRONG> at all. Mixing the two will
- result in unpredictable, and undesired, effects.
-
- Windows are referred to by variables declared as <STRONG>WINDOW</STRONG> <STRONG>*</STRONG>.
- These data structures are manipulated with routines
- described here and elsewhere in the <STRONG>ncurses</STRONG> manual pages.
- Among which the most basic routines are <STRONG>move</STRONG> and <STRONG>addch</STRONG>.
- More general versions of these routines are included with
- names beginning with <STRONG>w</STRONG>, allowing the user to specify a
- window. The routines not beginning with <STRONG>w</STRONG> affect <STRONG>stdscr</STRONG>.)
-
- After using routines to manipulate a window, <STRONG>refresh</STRONG> is
- called, telling <STRONG>curses</STRONG> to make the user's CRT screen look
- like <STRONG>stdscr</STRONG>. The characters in a window are actually of
- type <STRONG>chtype</STRONG>, (character and attribute data) so that other
- information about the character may also be stored with
- each character.
-
- Special windows called <EM>pads</EM> may also be manipulated.
- These are windows which are not constrained to the size of
- the screen and whose contents need not be completely dis-
- played. See <STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> for more information.
-
- In addition to drawing characters on the screen, video
- attributes and colors may be supported, causing the char-
- acters to show up in such modes as underlined, in reverse
- video, or in color on terminals that support such display
- enhancements. Line drawing characters may be specified to
- be output. On input, <STRONG>curses</STRONG> is also able to translate
- arrow and function keys that transmit escape sequences
- into single values. The video attributes, line drawing
- characters, and input values use names, defined in
- <STRONG><curses.h></STRONG>, such as <STRONG>A_REVERSE</STRONG>, <STRONG>ACS_HLINE</STRONG>, and <STRONG>KEY_LEFT</STRONG>.
-
- If the environment variables <STRONG>LINES</STRONG> and <STRONG>COLUMNS</STRONG> are set, or
- if the program is executing in a window environment, line
- and column information in the environment will override
- information read by <EM>terminfo</EM>. This would effect a program
-
- If the environment variable <STRONG>TERMINFO</STRONG> is defined, any pro-
- gram using <STRONG>curses</STRONG> checks for a local terminal definition
- before checking in the standard place. For example, if
- <STRONG>TERM</STRONG> is set to <STRONG>att4424</STRONG>, then the compiled terminal defini-
- tion is found in
-
- <STRONG>@DATADIR@/terminfo/a/att4424</STRONG>.
-
- (The <STRONG>a</STRONG> is copied from the first letter of <STRONG>att4424</STRONG> to avoid
- creation of huge directories.) However, if <STRONG>TERMINFO</STRONG> is
- set to <STRONG>$HOME/myterms</STRONG>, <STRONG>curses</STRONG> first checks
-
- <STRONG>$HOME/myterms/a/att4424</STRONG>,
-
- and if that fails, it then checks
-
- <STRONG>@DATADIR@/terminfo/a/att4424</STRONG>.
-
- This is useful for developing experimental definitions or
- when write permission in <STRONG>@DATADIR@/terminfo</STRONG> is not avail-
- able.
-
- The integer variables <STRONG>LINES</STRONG> and <STRONG>COLS</STRONG> are defined in
- <STRONG><curses.h></STRONG> and will be filled in by <STRONG>initscr</STRONG> with the size
- of the screen. The constants <STRONG>TRUE</STRONG> and <STRONG>FALSE</STRONG> have the val-
- ues <STRONG>1</STRONG> and <STRONG>0</STRONG>, respectively.
-
- The <STRONG>curses</STRONG> routines also define the <STRONG>WINDOW</STRONG> <STRONG>*</STRONG> variable
- <STRONG>curscr</STRONG> which is used for certain low-level operations like
- clearing and redrawing a screen containing garbage. The
- <STRONG>curscr</STRONG> can be used in only a few routines.
-
-
- <STRONG>Routine</STRONG> <STRONG>and</STRONG> <STRONG>Argument</STRONG> <STRONG>Names</STRONG>
- Many <STRONG>curses</STRONG> routines have two or more versions. The rou-
- tines prefixed with <STRONG>w</STRONG> require a window argument. The rou-
- tines prefixed with <STRONG>p</STRONG> require a pad argument. Those with-
- out a prefix generally use <STRONG>stdscr</STRONG>.
-
- The routines prefixed with <STRONG>mv</STRONG> require a <EM>y</EM> and <EM>x</EM> coordinate
- to move to before performing the appropriate action. The
- <STRONG>mv</STRONG> routines imply a call to <STRONG>move</STRONG> before the call to the
- other routine. The coordinate <EM>y</EM> always refers to the row
- (of the window), and <EM>x</EM> always refers to the column. The
- upper left-hand corner is always (0,0), not (1,1).
-
- The routines prefixed with <STRONG>mvw</STRONG> take both a window argument
- and <EM>x</EM> and <EM>y</EM> coordinates. The window argument is always
- specified before the coordinates.
-
- In each case, <EM>win</EM> is the window affected, and <EM>pad</EM> is the
-
- Option setting routines require a Boolean flag <EM>bf</EM> with the
- value <STRONG>TRUE</STRONG> or <STRONG>FALSE</STRONG>; <EM>bf</EM> is always of type <STRONG>bool</STRONG>. The vari-
- ables <EM>ch</EM> and <EM>attrs</EM> below are always of type <STRONG>chtype</STRONG>. The
- types <STRONG>WINDOW</STRONG>, <STRONG>SCREEN</STRONG>, <STRONG>bool</STRONG>, and <STRONG>chtype</STRONG> are defined in
- <STRONG><curses.h></STRONG>. The type <STRONG>TERMINAL</STRONG> is defined in <STRONG><term.h></STRONG>.
- All other arguments are integers.
-
-
- <STRONG>Routine</STRONG> <STRONG>Name</STRONG> <STRONG>Index</STRONG>
- The following table lists each <STRONG>curses</STRONG> routine and the name
- of the manual page on which it is described. Routines
- flagged with `*' are ncurses-specific, not described by
- XPG4 or present in SVr4.
-
- center tab(/); l l l l . <STRONG>curses</STRONG> Routine Name/Manual Page
- Name = addch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> addchnstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG>
- addchstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> addnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
- addstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> attroff/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
- attron/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> attrset/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> bau-
- drate/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> beep/<STRONG><A HREF="curs_beep.3x.html">curs_beep(3X)</A></STRONG>
- bkgd/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG> bkgdset/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG> border/<STRONG>curs_bor-</STRONG>
- <STRONG><A HREF="der.3x.html">der(3X)</A></STRONG> box/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
- can_change_color/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG> cbreak/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
- clear/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> clearok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> clrto-
- bot/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> clrtoeol/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> color_con-
- tent/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG> copywin/<STRONG><A HREF="curs_overlay.3x.html">curs_overlay(3X)</A></STRONG>
- curs_set/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> def_prog_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
- def_shell_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> del_curterm/<STRONG>curs_ter-</STRONG>
- <STRONG><A HREF="minfo.3x.html">minfo(3X)</A></STRONG> delay_output/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> delch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG>
- deleteln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> delscreen/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG> del-
- win/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> derwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> doup-
- date/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG> dupwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
- echo/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> echochar/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> end-
- win/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG> erase/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>
- erasechar/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> filter/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>
- flash/<STRONG><A HREF="curs_beep.3x.html">curs_beep(3X)</A></STRONG> flushinp/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> getbe-
- gyx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG> getch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> get-
- maxyx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG> getmouse/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>* get-
- paryx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG> getstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> get-
- syx/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> getwin/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>
- getyx/<STRONG><A HREF="curs_getyx.3x.html">curs_getyx(3X)</A></STRONG> halfdelay/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> has_col-
- ors/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG> has_ic/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
- has_il/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> has_key/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG>*
- hline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG> idcok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
- idlok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> immedok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
- inch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG> inchnstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> inch-
- str/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> init_color/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG>
- init_pair/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG> initscr/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>
- innstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG> insch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> ins-
- delln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> insertln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG>
- insnstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> insstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG>
- isendwin/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG> keyname/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> key-
- pad/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> killchar/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
- leaveok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> longname/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG>
- mcprint/<STRONG><A HREF="curs_print.3x.html">curs_print(3X)</A></STRONG>* meta/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> mouseinter-
- val/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>* mousemask/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>*
- move/<STRONG><A HREF="curs_move.3x.html">curs_move(3X)</A></STRONG> mvaddch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> mvaddchn-
- str/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> mvaddchstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG>
- mvaddnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> mvaddstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
- mvcur/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> mvdelch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG> mvder-
- win/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> mvgetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> mvget-
- str/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> mvinch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG> mvinchn-
- str/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> mvinchstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG>
- mvinnstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG> mvinsch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> mvin-
- snstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> mvinsstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> mvin-
- str/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG> mvprintw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> mvs-
- canw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG> mvwaddch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> mvwaddchn-
- str/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> mvwaddchstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG>
- mvwaddnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> mvwaddstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
- mvwdelch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG> mvwgetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> mvwget-
- str/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> mvwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
- mvwinch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG> mvwinchnstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG>
- mvwinchstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> mvwinnstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
- mvwinsch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> mvwinsnstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG>
- mvwinsstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> mvwinstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG> mvw-
- printw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> mvwscanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG>
- napms/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> newpad/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG>
- newterm/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG> newwin/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG>
- nl/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> nocbreak/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> node-
- lay/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> noecho/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> nonl/<STRONG>curs_out-</STRONG>
- <STRONG><A HREF="opts.3x.html">opts(3X)</A></STRONG> noqiflush/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> noraw/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
- notimeout/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> overlay/<STRONG><A HREF="curs_overlay.3x.html">curs_overlay(3X)</A></STRONG> over-
- write/<STRONG><A HREF="curs_overlay.3x.html">curs_overlay(3X)</A></STRONG> pair_content/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG>
- pechochar/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> pnoutrefresh/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> pre-
- fresh/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> printw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> putp/<STRONG>curs_ter-</STRONG>
- <STRONG><A HREF="minfo.3x.html">minfo(3X)</A></STRONG> putwin/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> qiflush/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
- raw/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> redrawwin/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>
- refresh/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG> reset_prog_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
- reset_shell_mode/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> resetty/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
- resizeterm/<STRONG><A HREF="resizeterm.3x.html">resizeterm(3X)</A></STRONG>* restartterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
- ripoffline/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> savetty/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG>
- scanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG> scr_dump/<STRONG><A HREF="curs_scr_dump.3x.html">curs_scr_dump(3X)</A></STRONG>
- scr_init/<STRONG><A HREF="curs_scr_dump.3x.html">curs_scr_dump(3X)</A></STRONG> scr_restore/<STRONG><A HREF="curs_scr_dump.3x.html">curs_scr_dump(3X)</A></STRONG>
- scr_set/<STRONG><A HREF="curs_scr_dump.3x.html">curs_scr_dump(3X)</A></STRONG> scrl/<STRONG><A HREF="curs_scroll.3x.html">curs_scroll(3X)</A></STRONG>
- scroll/<STRONG><A HREF="curs_scroll.3x.html">curs_scroll(3X)</A></STRONG> scrollok/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG>
- set_curterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> set_term/<STRONG><A HREF="curs_initscr.3x.html">curs_initscr(3X)</A></STRONG>
- setscrreg/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> setsyx/<STRONG><A HREF="curs_kernel.3x.html">curs_kernel(3X)</A></STRONG> set-
- term/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> setupterm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
- slk_attr/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>* slk_attroff/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
- slk_attron/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_attrset/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
- slk_clear/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_init/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
- slk_label/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_noutrefresh/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
- slk_refresh/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> slk_restore/<STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG>
- start_color/<STRONG><A HREF="curs_color.3x.html">curs_color(3X)</A></STRONG> subpad/<STRONG><A HREF="curs_pad.3x.html">curs_pad(3X)</A></STRONG> sub-
- win/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> syncok/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> termat-
- trs/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> termname/<STRONG><A HREF="curs_termattrs.3x.html">curs_termattrs(3X)</A></STRONG> tge-
- tent/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tgetflag/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tget-
- num/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tgetstr/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG>
- tgoto/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tigetflag/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> tiget-
- num/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> tigetstr/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> time-
- out/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> touchline/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG> touch-
- win/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG> tparm/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG>
- tputs/<STRONG><A HREF="curs_termcap.3x.html">curs_termcap(3X)</A></STRONG> tputs/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> typea-
- head/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG> unctrl/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG>
- ungetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> ungetmouse/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>* untouch-
- win/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG> use_env/<STRONG><A HREF="curs_util.3x.html">curs_util(3X)</A></STRONG> vidattr/<STRONG>curs_ter-</STRONG>
- <STRONG><A HREF="minfo.3x.html">minfo(3X)</A></STRONG> vidputs/<STRONG><A HREF="curs_terminfo.3x.html">curs_terminfo(3X)</A></STRONG> vline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
- vwprintw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> vwscanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG> wad-
- dch/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> waddchnstr/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> waddch-
- str/<STRONG><A HREF="curs_addchstr.3x.html">curs_addchstr(3X)</A></STRONG> waddnstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG>
- waddstr/<STRONG><A HREF="curs_addstr.3x.html">curs_addstr(3X)</A></STRONG> wattroff/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wat-
- tron/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wattrset/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>
- wbkgd/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG> wbkgdset/<STRONG><A HREF="curs_bkgd.3x.html">curs_bkgd(3X)</A></STRONG> wbor-
- der/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG> wclear/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> wclrto-
- bot/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> wclrtoeol/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG> wcursyn-
- cup/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> wdelch/<STRONG><A HREF="curs_delch.3x.html">curs_delch(3X)</A></STRONG>
- wdeleteln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> wechochar/<STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> wen-
- close/<STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG>* werase/<STRONG><A HREF="curs_clear.3x.html">curs_clear(3X)</A></STRONG>
- wgetch/<STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> wgetnstr/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> wget-
- str/<STRONG><A HREF="curs_getstr.3x.html">curs_getstr(3X)</A></STRONG> whline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
- winch/<STRONG><A HREF="curs_inch.3x.html">curs_inch(3X)</A></STRONG> winchnstr/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> winch-
- str/<STRONG><A HREF="curs_inchstr.3x.html">curs_inchstr(3X)</A></STRONG> winnstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG> win-
- sch/<STRONG><A HREF="curs_insch.3x.html">curs_insch(3X)</A></STRONG> winsdelln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> win-
- sertln/<STRONG><A HREF="curs_deleteln.3x.html">curs_deleteln(3X)</A></STRONG> winsnstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG>
- winsstr/<STRONG><A HREF="curs_insstr.3x.html">curs_insstr(3X)</A></STRONG> winstr/<STRONG><A HREF="curs_instr.3x.html">curs_instr(3X)</A></STRONG>
- wmove/<STRONG><A HREF="curs_move.3x.html">curs_move(3X)</A></STRONG> wnoutrefresh/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG>
- wprintw/<STRONG><A HREF="curs_printw.3x.html">curs_printw(3X)</A></STRONG> wredrawln/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG> wre-
- fresh/<STRONG><A HREF="curs_refresh.3x.html">curs_refresh(3X)</A></STRONG> wresize/<STRONG><A HREF="wresize.3x.html">wresize(3X)</A></STRONG>*
- wscanw/<STRONG><A HREF="curs_scanw.3x.html">curs_scanw(3X)</A></STRONG> wscrl/<STRONG><A HREF="curs_scroll.3x.html">curs_scroll(3X)</A></STRONG> wsetscr-
- reg/<STRONG><A HREF="curs_outopts.3x.html">curs_outopts(3X)</A></STRONG> wstandend/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wstand-
- out/<STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG> wsyncdown/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> wsyn-
- cup/<STRONG><A HREF="curs_window.3x.html">curs_window(3X)</A></STRONG> wtimeout/<STRONG><A HREF="curs_inopts.3x.html">curs_inopts(3X)</A></STRONG>
- wtouchln/<STRONG><A HREF="curs_touch.3x.html">curs_touch(3X)</A></STRONG> wvline/<STRONG><A HREF="curs_border.3x.html">curs_border(3X)</A></STRONG>
-
-
-</PRE>
-<H2>RETURN VALUE</H2><PRE>
- Routines that return an integer return <STRONG>ERR</STRONG> upon failure
- and an integer value other than <STRONG>ERR</STRONG> upon successful com-
- pletion, unless otherwise noted in the routine descrip-
- tions.
-
- All macros return the value of the <STRONG>w</STRONG> version, except
- <STRONG>setscrreg</STRONG>, <STRONG>wsetscrreg</STRONG>, <STRONG>getyx</STRONG>, <STRONG>getbegyx</STRONG>, <STRONG>getmaxyx</STRONG>. The
- return values of <STRONG>setscrreg</STRONG>, <STRONG>wsetscrreg</STRONG>, <STRONG>getyx</STRONG>, <STRONG>getbegyx</STRONG>,
- and <STRONG>getmaxyx</STRONG> are undefined (<EM>i</EM>.<EM>e</EM>., these should not be used
- as the right-hand side of assignment statements).
-
-
-</PRE>
-<H2>SEE ALSO</H2><PRE>
- <STRONG><A HREF="terminfo.5.html">terminfo(5)</A></STRONG> and 3X pages whose names begin "curs_" for
- detailed routine descriptions.
-
-
-</PRE>
-<H2>EXTENSIONS</H2><PRE>
- The <STRONG>curses</STRONG> library can be compiled with an option (<STRONG>-DTERM-</STRONG>
- <STRONG>CAP_FILE</STRONG>) that falls back to the old-style /etc/termcap
- file if the terminal setup code cannot find a terminfo
- entry corresponding to <STRONG>TERM</STRONG>. Use of this feature is not
- recommended, as it essentially includes an entire termcap
- compiler in the <STRONG>curses</STRONG> startup code, at significant cost
- in core and startup cycles.
-
- Compiling with <STRONG>-DTERMCAP_FILE</STRONG> changes the library's ini-
- tialization sequence in a way intended to mimic the behav-
- ior of 4.4BSD curses. If there is no local or system ter-
- minfo entry matching <STRONG>TERM</STRONG>, then the library looks for
- termcap entries in the following places: (1) if <STRONG>TERMINFO</STRONG>
- is undefined, in the file named by <STRONG>TERMCAP_FILE</STRONG>; (2) if
- <STRONG>TERMINFO</STRONG> is defined and begins with a slash, it is inter-
- preted as the name of a termcap file to search for <STRONG>TERM</STRONG>;
- (3) otherwise, if <STRONG>TERMINFO</STRONG> has a leading string that looks
- like a terminal entry name list, and it matches <STRONG>TERM</STRONG>, the
- contents of <STRONG>TERMINFO</STRONG> is interpreted as a termcap; (4) if
- <STRONG>TERMINFO</STRONG> looks like a termcap but doesn't match <STRONG>TERM</STRONG>, the
- termcap file is searched for among the colon-separated
- paths in the environment variable <STRONG>TERMPATHS</STRONG> if that is
- defined, and in ~/.termcap and the file value of <STRONG>TERM-</STRONG>
- <STRONG>CAP_FILE</STRONG> otherwise.
-
- Versions of <STRONG>curses</STRONG> compiled on PC clones support display
- of the PC ROM characters (including ROM characters 0-31,
- which stock SVr4 curses cannot display). See the EXTEN-
- SIONS sections of <STRONG><A HREF="curs_addch.3x.html">curs_addch(3X)</A></STRONG> and <STRONG><A HREF="curs_attr.3x.html">curs_attr(3X)</A></STRONG>.
-
- The <STRONG>curses</STRONG> library includes facilities for capturing mouse
- events on certain terminals (including xterm). See the
- <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG> manual page for details.
-
- The <STRONG>curses</STRONG> library includes a function for directing
- application output to a printer attached to the terminal
- device. See the <STRONG><A HREF="curs_print.3x.html">curs_print(3X)</A></STRONG> manual page for details.
-
-
-</PRE>
-<H2>PORTABILITY</H2><PRE>
- The <STRONG>curses</STRONG> library is intended to be BASE-level conformant
- with the XSI Curses standard. Certain portions of the
- EXTENDED XSI Curses functionality (including color sup-
- port) are supported. The following EXTENDED XSI Curses
- calls in support of wide (multibyte) characters are not
- yet implemented: <STRONG>addnwstr,</STRONG> <STRONG>addwstr,</STRONG> <STRONG>mvaddnwstr,</STRONG> <STRONG>mvwaddnw-</STRONG>
- <STRONG>str,</STRONG> <STRONG>mvaddwstr,</STRONG> <STRONG>waddnwstr,</STRONG> <STRONG>waddwstr,</STRONG> <STRONG>add_wch,</STRONG> <STRONG>wadd_wch,</STRONG>
- <STRONG>mvwadd_wchnstr,</STRONG> <STRONG>mvwadd_wchstr,</STRONG> <STRONG>bkgrndset,</STRONG> <STRONG>bkgrnd,</STRONG> <STRONG>get-</STRONG>
- <STRONG>bkgrnd,</STRONG> <STRONG>wbkgrnd,</STRONG> <STRONG>wbkgrndset,</STRONG> <STRONG>wgetbkgrnd,</STRONG> <STRONG>border_set,</STRONG> <STRONG>wbor-</STRONG>
- <STRONG>der_set,</STRONG> <STRONG>box_set,</STRONG> <STRONG>hline_set,</STRONG> <STRONG>mvhline_set,</STRONG> <STRONG>mvvline_set,</STRONG>
- <STRONG>mvwhline_set,</STRONG> <STRONG>mvwvline_set,</STRONG> <STRONG>whline_set,</STRONG> <STRONG>vhline_set,</STRONG>
- <STRONG>wvline_set,</STRONG> <STRONG>echo_wchar,</STRONG> <STRONG>wecho_wchar,</STRONG> <STRONG>erasewchar,</STRONG> <STRONG>kill-</STRONG>
- <STRONG>wchar,</STRONG> <STRONG>get_wch,</STRONG> <STRONG>mvget_wch,</STRONG> <STRONG>mvwget_ch,</STRONG> <STRONG>wget_wch,</STRONG>
- <STRONG>getwchtype,</STRONG> <STRONG>get_wstr,</STRONG> <STRONG>getn_wstr,</STRONG> <STRONG>wget_wstr,</STRONG> <STRONG>wgetn_wstr,</STRONG>
- <STRONG>mvget_wstr,</STRONG> <STRONG>mvgetn_wstr,</STRONG> <STRONG>mvwget_wstr,</STRONG> <STRONG>mvwgetn_wstr,</STRONG> <STRONG>innw-</STRONG>
- <STRONG>str,</STRONG> <STRONG>inwstr,</STRONG> <STRONG>winnwstr,</STRONG> <STRONG>winwstr,</STRONG> <STRONG>mvinnwstr,</STRONG> <STRONG>mvinwstr,</STRONG>
- <STRONG>mvwinnwstr,</STRONG> <STRONG>mvwinwstr,</STRONG> <STRONG>ins_nwstr,</STRONG> <STRONG>ins_wstr,</STRONG> <STRONG>mvins_nwstr,</STRONG>
- <STRONG>mvins_wstr,</STRONG> <STRONG>mvwins_nwstr,</STRONG> <STRONG>mvwins_wstr,</STRONG> <STRONG>wins_nwstr,</STRONG>
- <STRONG>wins_wstr,</STRONG> <STRONG>ins_wch,</STRONG> <STRONG>wins_wch,</STRONG> <STRONG>mvins_wch,</STRONG> <STRONG>mvwins_wch,</STRONG>
- <STRONG>in_wch,</STRONG> <STRONG>win_wch,</STRONG> <STRONG>mvin_wch,</STRONG> <STRONG>mvwin_wch,</STRONG> <STRONG>inwchstr,</STRONG> <STRONG>inwchnstr,</STRONG>
- <STRONG>winwchstr,</STRONG> <STRONG>winwchnstr,</STRONG> <STRONG>mvinwchstr,</STRONG> <STRONG>mvinwchnstr,</STRONG> <STRONG>mvinwch-</STRONG>
- <STRONG>str,</STRONG> <STRONG>mvwinwchnstr.</STRONG>
-
- A small number of local differences (that is, individual
- differences between the XSI Curses and <STRONG>curses</STRONG> calls) are
- described in <STRONG>PORTABILITY</STRONG> sections of the library man
- pages.
-
- The routine <STRONG>has_key</STRONG> is not part of XPG4, nor is it present
- in SVr4. See the <STRONG><A HREF="curs_getch.3x.html">curs_getch(3X)</A></STRONG> manual page for details.
-
- The routine <STRONG>slk_attr</STRONG> is not part of XPG4, nor is it pre-
- sent in SVr4. See the <STRONG><A HREF="curs_slk.3x.html">curs_slk(3X)</A></STRONG> manual page for
- details.
-
- The routines <STRONG>getmouse</STRONG>, <STRONG>mousemask</STRONG>, <STRONG>ungetmouse</STRONG>, <STRONG>mouseinter-</STRONG>
- <STRONG>val</STRONG>, and <STRONG>wenclose</STRONG> relating to mouse interfacing are not
- part of XPG4, nor are they present in SVr4. See the
- <STRONG><A HREF="curs_mouse.3x.html">curs_mouse(3X)</A></STRONG> manual page for details.
-
- The routine <STRONG>mcprint</STRONG> was not present in any previous curses
- implementation. See the <STRONG><A HREF="curs_print.3x.html">curs_print(3X)</A></STRONG> manual page for
- details.
-
- The routine <STRONG>wresize</STRONG> is not part of XPG4, nor is it present
- in SVr4. See the <STRONG><A HREF="wresize.3x.html">wresize(3X)</A></STRONG> manual page for details.
-
- In historic curses versions, delays embedded in the capa-
- bilities <STRONG>cr</STRONG>, <STRONG>ind</STRONG>, <STRONG>cub1</STRONG>, <STRONG>ff</STRONG> and <STRONG>tab</STRONG> activated corresponding
- delay bits in the UNIX tty driver. In this implementa-
- tion, all padding is done by NUL sends. This method is
- slightly more expensive, but narrows the interface to the
- UNIX kernel significantly and increases the package's
- portability correspondingly.
-
- In the XSI standard and SVr4 manual pages, many entry
- points have prototype arguments of the for <STRONG>char</STRONG> <STRONG>*const</STRONG> (or
- <STRONG>cchar_t</STRONG> <STRONG>*const</STRONG>, or <STRONG>wchar_t</STRONG> <STRONG>*const</STRONG>, or <STRONG>void</STRONG> <STRONG>*const</STRONG>).
- Depending on one's interpretation of the ANSI C standard
- tion <STRONG>const</STRONG> <STRONG>char</STRONG> <STRONG>*x</STRONG> is a modifiable pointer to unmodifiable
- data, but <STRONG>char</STRONG> <STRONG>*const</STRONG> <STRONG>x</STRONG>' is an unmodifiable pointer to
- modifiable data. Given that C passes arguments by value,
- <STRONG><type></STRONG> <STRONG>*const</STRONG> as a formal type is at best dubious. Some
- compilers choke on the prototypes. Therefore, in this
- implementation, they have been changed to <STRONG>const</STRONG> <STRONG><type></STRONG> <STRONG>*</STRONG>
- globally.
-
-
-</PRE>
-<H2>NOTES</H2><PRE>
- The header file <STRONG><curses.h></STRONG> automatically includes the
- header files <STRONG><stdio.h></STRONG> and <STRONG><unctrl.h></STRONG>.
-
- If standard output from a <STRONG>curses</STRONG> program is re-directed to
- something which is not a tty, screen updates will be
- directed to standard error. This was an undocumented fea-
- ture of AT&T System V Release 3 curses.
-
-
-</PRE>
-<H2>AUTHORS</H2><PRE>
- Zeyd M. Ben-Halim, Eric S. Raymond. Descends from the
- original pcurses by Pavel Curtis.
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-</PRE>
-</BODY>
-</HTML>
<HEAD>
<TITLE>Correspondence between ncurses C and Ada functions</TITLE>
</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
+<BODY>
<H1>Correspondence between ncurses C and Ada functions</H1>
<H2>Sorted by C function name</H2>
<TABLE ALIGN=CENTER BORDER>
<TR ALIGN=LEFT>
<TH>C name</TH><TH>Ada name</TH><TH>man page</TH></TR>
-<TR><TD>baudrate()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_123">Baudrate</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>beep()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_37">Beep</A></TD><TD><A HREF="curs_beep.3x.html">curs_beep.3x</A></TD></TR>
-<TR><TD>bottom_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_3">Bottom</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>box()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_25">Box</A></TD><TD><A HREF="curs_border.3x.html">curs_border.3x</A></TD></TR>
-<TR><TD>can_change_color()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_136">Can_Change_Color</A></TD><TD><A HREF="curs_color.3x.html">curs_color.3x</A></TD></TR>
-<TR><TD>cbreak()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_39">Set_Cbreak_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>clearok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_51">Clear_On_Next_Update</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>color_content()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_137">Color_Content</A></TD><TD><A HREF="curs_color.3x.html">curs_color.3x</A></TD></TR>
-<TR><TD>copywin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_76">Copy</A></TD><TD><A HREF="curs_overlay.3x.html">curs_overlay.3x</A></TD></TR>
-<TR><TD>current_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_58">Current</A></TD><TD><A HREF="form_page.3x.html">form_page.3x</A></TD></TR>
-<TR><TD>current_item()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_14">Current</A></TD><TD><A HREF="mitem_current.3x.html">mitem_current.3x</A></TD></TR>
-<TR><TD>curs_set()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_143">Set_Cursor_Visibility</A></TD><TD><A HREF="curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
-<TR><TD>data_ahead()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_54">Data_Ahead</A></TD><TD><A HREF="form_data.3x.html">form_data.3x</A></TD></TR>
-<TR><TD>data_behind()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_55">Data_Behind</A></TD><TD><A HREF="form_data.3x.html">form_data.3x</A></TD></TR>
-<TR><TD>def_prog_mode()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_138">Save_Curses_Mode</A></TD><TD><A HREF="curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
-<TR><TD>define_key()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_118">Define_Key</A></TD><TD><A HREF="define_key.3x.html">define_key.3x</A></TD></TR>
-<TR><TD>del_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_15">Delete</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>delay_output()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_121">Delay_Output</A></TD><TD><A HREF="curs_util.3x.html">curs_util.3x</A></TD></TR>
-<TR><TD>delwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_11">Delete</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>derwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_13">Derived_Window</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>doupdate()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_58">Update_Screen</A></TD><TD><A HREF="curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
-<TR><TD>dup_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_4">Duplicate</A></TD><TD><A HREF="form_field_new.3x.html">form_field_new.3x</A></TD></TR>
-<TR><TD>dupwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_14">Duplicate</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>dynamic_field_info()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_26">Dynamic_Info</A></TD><TD><A HREF="form_field_info.3x.html">form_field_info.3x</A></TD></TR>
-<TR><TD>echo()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_41">Set_Echo_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>endwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_4">End_Windows</A></TD><TD><A HREF="curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
-<TR><TD>erasechar()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_124">Erase_Character</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>field_back()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_21">Background</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>field_back()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_22">Background</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>field_buffer()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_9">Get_Buffer</A></TD><TD><A HREF="form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
-<TR><TD>field_count()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_43">Field_Count</A></TD><TD><A HREF="form_field.3x.html">form_field.3x</A></TD></TR>
-<TR><TD>field_fore()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_18">Foreground</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>field_fore()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_19">Foreground</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>field_index()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_61">Get_Index</A></TD><TD><A HREF="form_page.3x.html">form_page.3x</A></TD></TR>
-<TR><TD>field_info()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_25">Info</A></TD><TD><A HREF="form_field_info.3x.html">form_field_info.3x</A></TD></TR>
-<TR><TD>field_init()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_36">Get_Field_Init_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>field_just()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_7">Get_Justification</A></TD><TD><A HREF="form_field_just.3x.html">form_field_just.3x</A></TD></TR>
-<TR><TD>field_opts()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_15">Get_Options</A></TD><TD><A HREF="form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
-<TR><TD>field_opts()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_16">Get_Options</A></TD><TD><A HREF="form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
-<TR><TD>field_opts_on()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_14">Switch_Options</A></TD><TD><A HREF="form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
-<TR><TD>field_pad()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_24">Pad_Character</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>field_status()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_11">Changed</A></TD><TD><A HREF="form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
-<TR><TD>field_term()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_37">Get_Field_Term_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>field_type()</TD><TD><A HREF="terminal_interface-curses-forms-field_user_data_s.html#AFU_2">Get_Type</A></TD><TD><A HREF="form_field_validation.3x.html">form_field_validation.3x</A></TD></TR>
-<TR><TD>field_userptr</TD><TD><A HREF="terminal_interface-curses-forms-field_user_data_s.html#AFU_2">Get_User_Data</A></TD><TD><A HREF="form_field_userptr.3x.html">form_field_userptr.3x</A></TD></TR>
-<TR><TD>flash()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_38">Flash_Screen</A></TD><TD><A HREF="curs_beep.3x.html">curs_beep.3x</A></TD></TR>
-<TR><TD>flushinp()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_122">Flush_Input</A></TD><TD><A HREF="curs_util.3x.html">curs_util.3x</A></TD></TR>
-<TR><TD>form_driver()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_56">Driver</A></TD><TD><A HREF="form_driver.3x.html">form_driver.3x</A></TD></TR>
-<TR><TD>form_fields()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_42">Fields</A></TD><TD><A HREF="form_field.3x.html">form_field.3x</A></TD></TR>
-<TR><TD>form_init()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_38">Get_Form_Init_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>form_opts()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_50">Get_Options</A></TD><TD><A HREF="form_opts.3x.html">form_opts.3x</A></TD></TR>
-<TR><TD>form_opts()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_51">Get_Options</A></TD><TD><A HREF="form_opts.3x.html">form_opts.3x</A></TD></TR>
-<TR><TD>form_opts_on()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_49">Switch_Options</A></TD><TD><A HREF="form_opts.3x.html">form_opts.3x</A></TD></TR>
-<TR><TD>form_page()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_60">Page</A></TD><TD><A HREF="form_page.3x.html">form_page.3x</A></TD></TR>
-<TR><TD>form_sub()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_30">Get_Sub_Window</A></TD><TD><A HREF="form_win.3x.html">form_win.3x</A></TD></TR>
-<TR><TD>form_term()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_39">Get_Form_Term_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>form_userptr</TD><TD><A HREF="terminal_interface-curses-forms-form_user_data_s.html#AFU_2">Get_User_Data</A></TD><TD><A HREF="form_userptr.3x.html">form_userptr.3x</A></TD></TR>
-<TR><TD>form_win()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_28">Get_Window</A></TD><TD><A HREF="form_win.3x.html">form_win.3x</A></TD></TR>
-<TR><TD>free_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_3">Delete</A></TD><TD><A HREF="form_field_new.3x.html">form_field_new.3x</A></TD></TR>
-<TR><TD>free_form()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_47">Delete</A></TD><TD><A HREF="form_new.3x.html">form_new.3x</A></TD></TR>
-<TR><TD>free_item()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_3">Delete</A></TD><TD><A HREF="mitem_new.3x.html">mitem_new.3x</A></TD></TR>
-<TR><TD>free_menu()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_60">Delete</A></TD><TD><A HREF="menu_new.3x.html">menu_new.3x</A></TD></TR>
-<TR><TD>getbegyx()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_83">Get_Window_Position</A></TD><TD><A HREF="curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
-<TR><TD>getmaxyx()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_82">Get_Size</A></TD><TD><A HREF="curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
-<TR><TD>getmouse()</TD><TD><A HREF="terminal_interface-curses-mouse_s.html#AFU_2">Get_Mouse</A></TD><TD><A HREF="curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
-<TR><TD>getparyx()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_85">Get_Origin_Relative_To_Parent</A></TD><TD><A HREF="curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
-<TR><TD>getyx()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_84">Get_Cursor_Position</A></TD><TD><A HREF="curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
-<TR><TD>halfdelay()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_44">Half_Delay</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>has_colors()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_134">Has_Colors</A></TD><TD><A HREF="curs_color.3x.html">curs_color.3x</A></TD></TR>
-<TR><TD>has_ic()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_126">Has_Insert_Character</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>has_il()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_127">Has_Insert_Line</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>has_key()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_30">Has_Key</A></TD><TD><A HREF="curs_getch.3x.html">curs_getch.3x</A></TD></TR>
-<TR><TD>hide_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_7">Hide</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>idcok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_53">Use_Insert_Delete_Character</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>idlok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_52">Use_Insert_Delete_Line</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>immedok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_55">Immediate_Update_Mode</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>init_color()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_135">Init_Color</A></TD><TD><A HREF="curs_color.3x.html">curs_color.3x</A></TD></TR>
-<TR><TD>init_pair()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_132">Init_Pair</A></TD><TD><A HREF="curs_color.3x.html">curs_color.3x</A></TD></TR>
-<TR><TD>initscr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_2">Init_Screen</A></TD><TD><A HREF="curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
-<TR><TD>initscr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_3">Init_Windows</A></TD><TD><A HREF="curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
-<TR><TD>intrflush()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_45">Set_Flush_On_Interrupt_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>is_linetouched()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_74">Is_Touched</A></TD><TD><A HREF="curs_touch.3x.html">curs_touch.3x</A></TD></TR>
-<TR><TD>is_wintouched()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_75">Is_Touched</A></TD><TD><A HREF="curs_touch.3x.html">curs_touch.3x</A></TD></TR>
-<TR><TD>isendwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_5">Is_End_Window</A></TD><TD><A HREF="curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
-<TR><TD>item_count()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_58">Item_Count</A></TD><TD><A HREF="menu_items.3x.html">menu_items.3x</A></TD></TR>
-<TR><TD>item_description();</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_12">Description</A></TD><TD><A HREF="mitem_name.3x.html">mitem_name.3x</A></TD></TR>
-<TR><TD>item_index()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_17">Get_Index</A></TD><TD><A HREF="mitem_current.3x.html">mitem_current.3x</A></TD></TR>
-<TR><TD>item_init()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_52">Get_Item_Init_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>item_name()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_11">Name</A></TD><TD><A HREF="mitem_name.3x.html">mitem_name.3x</A></TD></TR>
-<TR><TD>item_opts()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_10">Get_Options</A></TD><TD><A HREF="mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
-<TR><TD>item_opts()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_9">Get_Options</A></TD><TD><A HREF="mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
-<TR><TD>item_opts_on()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_8">Switch_Options</A></TD><TD><A HREF="mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
-<TR><TD>item_term()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_53">Get_Item_Term_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>item_userptr</TD><TD><A HREF="terminal_interface-curses-menus-item_user_data_s.html#AFU_2">Get_User_Data</A></TD><TD><A HREF="mitem_userptr.3x.html">mitem_userptr.3x</A></TD></TR>
-<TR><TD>item_value()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_5">Value</A></TD><TD><A HREF="mitem_value.3x.html">mitem_value.3x</A></TD></TR>
-<TR><TD>item_visible()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_6">Visible</A></TD><TD><A HREF="mitem_visible.3x.html">mitem_visible.3x</A></TD></TR>
-<TR><TD>keyname()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_119">Key_Name</A></TD><TD><A HREF="curs_util.3x.html">curs_util.3x</A></TD></TR>
-<TR><TD>keyok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_117">Enable_Key</A></TD><TD><A HREF="keyok.3x.html">keyok.3x</A></TD></TR>
-<TR><TD>keypad()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_43">Set_KeyPad_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>killchar()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_125">Kill_Character</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>leaveok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_54">Leave_Cursor_After_Update</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>link_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_5">Link</A></TD><TD><A HREF="form_field_new.3x.html">form_field_new.3x</A></TD></TR>
-<TR><TD>longname()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_129">Long_Name</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>menu_back()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_35">Background</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>menu_back()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_36">Background</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>menu_driver()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_61">Driver</A></TD><TD><A HREF="menu_new.3x.html">menu_new.3x</A></TD></TR>
-<TR><TD>menu_fore()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_32">Foreground</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>menu_fore()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_33">Foreground</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>menu_format()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_47">Format</A></TD><TD><A HREF="menu_format.3x.html">menu_format.3x</A></TD></TR>
-<TR><TD>menu_grey()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_38">Grey</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>menu_grey()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_39">Grey</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>menu_init()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_54">Get_Menu_Init_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>menu_items()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_57">Items</A></TD><TD><A HREF="menu_items.3x.html">menu_items.3x</A></TD></TR>
-<TR><TD>menu_mark()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_30">Mark</A></TD><TD><A HREF="menu_mark.3x.html">menu_mark.3x</A></TD></TR>
-<TR><TD>menu_opts()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_21">Get_Options</A></TD><TD><A HREF="menu_opts.3x.html">menu_opts.3x</A></TD></TR>
-<TR><TD>menu_opts()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_22">Get_Options</A></TD><TD><A HREF="menu_opts.3x.html">menu_opts.3x</A></TD></TR>
-<TR><TD>menu_opts_on()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_20">Switch_Options</A></TD><TD><A HREF="menu_opts.3x.html">menu_opts.3x</A></TD></TR>
-<TR><TD>menu_pad()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_41">Pad_Character</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>menu_pattern()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_45">Pattern</A></TD><TD><A HREF="menu_pattern.3x.html">menu_pattern.3x</A></TD></TR>
-<TR><TD>menu_spacing()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_43">Spacing</A></TD><TD><A HREF="menu_spacing.3x.html">menu_spacing.3x</A></TD></TR>
-<TR><TD>menu_sub()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_26">Get_Sub_Window</A></TD><TD><A HREF="menu_win.3x.html">menu_win.3x</A></TD></TR>
-<TR><TD>menu_term()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_55">Get_Menu_Term_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>menu_userptr</TD><TD><A HREF="terminal_interface-curses-menus-menu_user_data_s.html#AFU_2">Get_User_Data</A></TD><TD><A HREF="menu_userptr.3x.html">menu_userptr.3x</A></TD></TR>
-<TR><TD>menu_win()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_24">Get_Window</A></TD><TD><A HREF="menu_win.3x.html">menu_win.3x</A></TD></TR>
-<TR><TD>meta()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_42">Set_Meta_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>mouseinterval()</TD><TD><A HREF="terminal_interface-curses-mouse_s.html#AFU_5">Mouse_Interval</A></TD><TD><A HREF="curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
-<TR><TD>mousemask()</TD><TD><A HREF="terminal_interface-curses-mouse_s.html#AFU_1">Start_Mouse</A></TD><TD><A HREF="curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
-<TR><TD>move_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_44">Move</A></TD><TD><A HREF="form_field.3x.html">form_field.3x</A></TD></TR>
-<TR><TD>move_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_11">Move</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>mvderwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_16">Move_Derived_Window</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>mvwaddch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_8">Add</A></TD><TD><A HREF="curs_addch.3x.html">curs_addch.3x</A></TD></TR>
-<TR><TD>mvwaddchnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_23">Add</A></TD><TD><A HREF="curs_addchstr.3x.html">curs_addchstr.3x</A></TD></TR>
-<TR><TD>mvwaddnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_21">Add</A></TD><TD><A HREF="curs_addstr.3x.html">curs_addstr.3x</A></TD></TR>
-<TR><TD>mvwchgat()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_36">Change_Attributes</A></TD><TD><A HREF="curs_attr.3x.html">curs_attr.3x</A></TD></TR>
-<TR><TD>mvwdelch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_93">Delete_Character</A></TD><TD><A HREF="curs_delch.3x.html">curs_delch.3x</A></TD></TR>
-<TR><TD>mvwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_15">Move_Window</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>mvwinch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_95">Peek</A></TD><TD><A HREF="curs_inch.3x.html">curs_inch.3x</A></TD></TR>
-<TR><TD>mvwinchnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_103">Peek</A></TD><TD><A HREF="curs_inchstr.3x.html">curs_inchstr.3x</A></TD></TR>
-<TR><TD>mvwinnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_101">Peek</A></TD><TD><A HREF="curs_instr.3x.html">curs_instr.3x</A></TD></TR>
-<TR><TD>mvwinsch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_97">Insert</A></TD><TD><A HREF="curs_winch.3x.html">curs_winch.3x</A></TD></TR>
-<TR><TD>mvwinsnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_99">Insert</A></TD><TD><A HREF="curs_winch.3x.html">curs_winch.3x</A></TD></TR>
-<TR><TD>napms()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_144">Nap_Milli_Seconds</A></TD><TD><A HREF="curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
-<TR><TD>new_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_1">Create</A></TD><TD><A HREF="form_field_new.3x.html">form_field_new.3x</A></TD></TR>
-<TR><TD>new_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_2">New_Field</A></TD><TD><A HREF="form_field_new.3x.html">form_field_new.3x</A></TD></TR>
-<TR><TD>new_form()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_45">Create</A></TD><TD><A HREF="form_new.3x.html">form_new.3x</A></TD></TR>
-<TR><TD>new_form()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_46">New_Form</A></TD><TD><A HREF="form_new.3x.html">form_new.3x</A></TD></TR>
-<TR><TD>new_item()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_1">Create</A></TD><TD><A HREF="mitem_new.3x.html">mitem_new.3x</A></TD></TR>
-<TR><TD>new_item()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_2">New_Item</A></TD><TD><A HREF="mitem_new.3x.html">mitem_new.3x</A></TD></TR>
-<TR><TD>new_menu()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_59">Create</A></TD><TD><A HREF="menu_new.3x.html">menu_new.3x</A></TD></TR>
-<TR><TD>new_page()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_63">Is_New_Page</A></TD><TD><A HREF="form_new_page.3x.html">form_new_page.3x</A></TD></TR>
-<TR><TD>new_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_1">Create</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>new_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_2">New_Panel</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>newpad()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_86">New_Pad</A></TD><TD><A HREF="curs_pad.3x.html">curs_pad.3x</A></TD></TR>
-<TR><TD>newwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_10">Create</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>nl()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_50">Set_NL_Mode</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>nodelay()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_47">Set_NoDelay_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>notimeout()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_49">Set_Escape_Time_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>overlay()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_78">Overlay</A></TD><TD><A HREF="curs_overlay.3x.html">curs_overlay.3x</A></TD></TR>
-<TR><TD>overwrite()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_77">Overwrite</A></TD><TD><A HREF="curs_overlay.3x.html">curs_overlay.3x</A></TD></TR>
-<TR><TD>pair_content()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_133">Pair_Content</A></TD><TD><A HREF="curs_color.3x.html">curs_color.3x</A></TD></TR>
-<TR><TD>panel_above()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_13">Above</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>panel_below()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_14">Below</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>panel_hidden()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_12">Is_Hidden</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>panel_userptr</TD><TD><A HREF="terminal_interface-curses-panels-user_data_s.html#AFU_2">Get_User_Data</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>panel_window()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_8">Get_Window</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>panel_window()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_9">Panel_Window</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>pechochar()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_90">Add_Character_To_Pad_And_Echo_It</A></TD><TD><A HREF="curs_pad.3x.html">curs_pad.3x</A></TD></TR>
-<TR><TD>pnoutrefresh()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_89">Refresh_Without_Update</A></TD><TD><A HREF="curs_pad.3x.html">curs_pad.3x</A></TD></TR>
-<TR><TD>pos_form_cursor()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_53">Position_Cursor</A></TD><TD><A HREF="form_cursor.3x.html">form_cursor.3x</A></TD></TR>
-<TR><TD>pos_menu_cursor()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_28">Position_Cursor</A></TD><TD><A HREF="menu_cursor.3x.html">menu_cursor.3x</A></TD></TR>
-<TR><TD>post_form()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_52">Post</A></TD><TD><A HREF="form_post.3x.html">form_post.3x</A></TD></TR>
-<TR><TD>post_menu()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_18">Post</A></TD><TD><A HREF="menu_post.3x.html">menu_post.3x</A></TD></TR>
-<TR><TD>prefresh()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_88">Refresh</A></TD><TD><A HREF="curs_pad.3x.html">curs_pad.3x</A></TD></TR>
-<TR><TD>qiflush()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_46">Set_Queue_Interrupt_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>raw()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_40">Set_Raw_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>redrawwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_61">Redraw</A></TD><TD><A HREF="curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
-<TR><TD>replace_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_10">Replace</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>reset_prog_mode()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_139">Reset_Curses_Mode</A></TD><TD><A HREF="curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
-<TR><TD>resetty();</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_141">Reset_Terminal_State</A></TD><TD><A HREF="curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
-<TR><TD>ripoffline()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_142">Rip_Off_Lines</A></TD><TD><A HREF="curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
-<TR><TD>savetty()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_140">Save_Terminal_State</A></TD><TD><A HREF="curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
-<TR><TD>scale_form()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_31">Scale</A></TD><TD><A HREF="form_win.3x.html">form_win.3x</A></TD></TR>
-<TR><TD>scale_menu()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_27">Scale</A></TD><TD><A HREF="menu_win.3x.html">menu_win.3x</A></TD></TR>
-<TR><TD>scrollok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_56">Allow_Scrolling</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>set_current_field()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_57">Set_Current</A></TD><TD><A HREF="form_page.3x.html">form_page.3x</A></TD></TR>
-<TR><TD>set_current_item()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_13">Set_Current</A></TD><TD><A HREF="mitem_current.3x.html">mitem_current.3x</A></TD></TR>
-<TR><TD>set_field_back()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_20">Set_Background</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>set_field_buffer()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_8">Set_Buffer</A></TD><TD><A HREF="form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
-<TR><TD>set_field_fore()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_17">Set_Foreground</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>set_field_init()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_32">Set_Field_Init_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>set_field_just()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_6">Set_Justification</A></TD><TD><A HREF="form_field_just.3x.html">form_field_just.3x</A></TD></TR>
-<TR><TD>set_field_max()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_12">Set_Maximum_Size</A></TD><TD><A HREF="form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
-<TR><TD>set_field_opts()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_13">Set_Options</A></TD><TD><A HREF="form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
-<TR><TD>set_field_pad()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_23">Set_Pad_Character</A></TD><TD><A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
-<TR><TD>set_field_status()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_10">Set_Status</A></TD><TD><A HREF="form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
-<TR><TD>set_field_term()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_33">Set_Field_Term_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>set_field_type()</TD><TD><A HREF="terminal_interface-curses-forms-field_user_data_s.html#AFU_1">Set_Type</A></TD><TD><A HREF="form_fieldtype.3x.html">form_fieldtype.3x</A></TD></TR>
-<TR><TD>set_field_userptr</TD><TD><A HREF="terminal_interface-curses-forms-field_user_data_s.html#AFU_1">Set_User_Data</A></TD><TD><A HREF="form_field_userptr.3x.html">form_field_userptr.3x</A></TD></TR>
-<TR><TD>set_form_fields()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_40">Redefine</A></TD><TD><A HREF="form_field.3x.html">form_field.3x</A></TD></TR>
-<TR><TD>set_form_fields()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_41">Set_Fields</A></TD><TD><A HREF="form_field.3x.html">form_field.3x</A></TD></TR>
-<TR><TD>set_form_init()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_34">Set_Form_Init_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>set_form_opts()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_48">Set_Options</A></TD><TD><A HREF="form_opts.3x.html">form_opts.3x</A></TD></TR>
-<TR><TD>set_form_page()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_59">Set_Page</A></TD><TD><A HREF="form_page.3x.html">form_page.3x</A></TD></TR>
-<TR><TD>set_form_sub()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_29">Set_Sub_Window</A></TD><TD><A HREF="form_win.3x.html">form_win.3x</A></TD></TR>
-<TR><TD>set_form_term()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_35">Set_Form_Term_Hook</A></TD><TD><A HREF="form_hook.3x.html">form_hook.3x</A></TD></TR>
-<TR><TD>set_form_userptr</TD><TD><A HREF="terminal_interface-curses-forms-form_user_data_s.html#AFU_1">Set_User_Data</A></TD><TD><A HREF="form_userptr.3x.html">form_userptr.3x</A></TD></TR>
-<TR><TD>set_form_win()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_27">Set_Window</A></TD><TD><A HREF="form_win.3x.html">form_win.3x</A></TD></TR>
-<TR><TD>set_item_init()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_48">Set_Item_Init_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>set_item_opts()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_7">Set_Options</A></TD><TD><A HREF="mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
-<TR><TD>set_item_term()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_49">Set_Item_Term_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>set_item_userptr</TD><TD><A HREF="terminal_interface-curses-menus-item_user_data_s.html#AFU_1">Set_User_Data</A></TD><TD><A HREF="mitem_userptr.3x.html">mitem_userptr.3x</A></TD></TR>
-<TR><TD>set_item_value()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_4">Set_Value</A></TD><TD><A HREF="mitem_value.3x.html">mitem_value.3x</A></TD></TR>
-<TR><TD>set_menu_back()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_34">Set_Background</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>set_menu_fore()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_31">Set_Foreground</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>set_menu_format()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_46">Set_Format</A></TD><TD><A HREF="menu_format.3x.html">menu_format.3x</A></TD></TR>
-<TR><TD>set_menu_grey()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_37">Set_Grey</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>set_menu_init()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_50">Set_Menu_Init_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>set_menu_items()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_56">Redefine</A></TD><TD><A HREF="menu_items.3x.html">menu_items.3x</A></TD></TR>
-<TR><TD>set_menu_mark()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_29">Set_Mark</A></TD><TD><A HREF="menu_mark.3x.html">menu_mark.3x</A></TD></TR>
-<TR><TD>set_menu_opts()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_19">Set_Options</A></TD><TD><A HREF="menu_opts.3x.html">menu_opts.3x</A></TD></TR>
-<TR><TD>set_menu_pad()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_40">Set_Pad_Character</A></TD><TD><A HREF="menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
-<TR><TD>set_menu_pattern()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_44">Set_Pattern</A></TD><TD><A HREF="menu_pattern.3x.html">menu_pattern.3x</A></TD></TR>
-<TR><TD>set_menu_spacing()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_42">Set_Spacing</A></TD><TD><A HREF="menu_spacing.3x.html">menu_spacing.3x</A></TD></TR>
-<TR><TD>set_menu_sub()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_25">Set_Sub_Window</A></TD><TD><A HREF="menu_win.3x.html">menu_win.3x</A></TD></TR>
-<TR><TD>set_menu_term()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_51">Set_Menu_Term_Hook</A></TD><TD><A HREF="menu_hook.3x.html">menu_hook.3x</A></TD></TR>
-<TR><TD>set_menu_userptr</TD><TD><A HREF="terminal_interface-curses-menus-menu_user_data_s.html#AFU_1">Set_User_Data</A></TD><TD><A HREF="menu_userptr.3x.html">menu_userptr.3x</A></TD></TR>
-<TR><TD>set_menu_win()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_23">Set_Window</A></TD><TD><A HREF="menu_win.3x.html">menu_win.3x</A></TD></TR>
-<TR><TD>set_new_page()</TD><TD><A HREF="terminal_interface-curses-forms_s.html#AFU_62">Set_New_Page</A></TD><TD><A HREF="form_new_page.3x.html">form_new_page.3x</A></TD></TR>
-<TR><TD>set_panel_userptr</TD><TD><A HREF="terminal_interface-curses-panels-user_data_s.html#AFU_1">Set_User_Data</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>set_top_row()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_15">Set_Top_Row</A></TD><TD><A HREF="mitem_current.3x.html">mitem_current.3x</A></TD></TR>
-<TR><TD>show_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_5">Show</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>slk_attr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_115">Get_Soft_Label_Key_Attributes</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_attr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_116">Get_Soft_Label_Key_Attributes</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_attron()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_113">Switch_Soft_Label_Key_Attributes</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_attrset()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_114">Set_Soft_Label_Key_Attributes</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_clear()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_110">Clear_Soft_Label_Keys</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_init()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_105">Init_Soft_Label_Keys</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_label()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_109">Get_Soft_Label_Key</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_noutrefresh()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_108">Refresh_Soft_Label_Keys_Without_Update</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_refresh()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_107">Refresh_Soft_Label_Key</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_restore()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_111">Restore_Soft_Label_Keys</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_set()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_106">Set_Soft_Label_Key</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>slk_touch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_112">Touch_Soft_Label_Keys</A></TD><TD><A HREF="curs_slk.3x.html">curs_slk.3x</A></TD></TR>
-<TR><TD>start_clolor()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_131">Start_Color</A></TD><TD><A HREF="curs_color.3x.html">curs_color.3x</A></TD></TR>
-<TR><TD>stdscr</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_1">Standard_Window</A></TD><TD><A HREF="curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
-<TR><TD>subpad()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_87">Sub_Pad</A></TD><TD><A HREF="curs_pad.3x.html">curs_pad.3x</A></TD></TR>
-<TR><TD>subwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_12">Sub_Window</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>syncok()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_19">Set_Synch_Mode</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>termattrs()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_128">Supported_Attributes</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>termname()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_130">Terminal_Name</A></TD><TD><A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
-<TR><TD>top_panel()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_4">Top</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>top_row()</TD><TD><A HREF="terminal_interface-curses-menus_s.html#AFU_16">Top_Row</A></TD><TD><A HREF="mitem_current.3x.html">mitem_current.3x</A></TD></TR>
-<TR><TD>touchline()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_72">Touch</A></TD><TD><A HREF="curs_touch.3x.html">curs_touch.3x</A></TD></TR>
-<TR><TD>touchwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_70">Touch</A></TD><TD><A HREF="curs_touch.3x.html">curs_touch.3x</A></TD></TR>
-<TR><TD>unctrl()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_120">Un_Control</A></TD><TD><A HREF="curs_util.3x.html">curs_util.3x</A></TD></TR>
-<TR><TD>ungetch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_29">Undo_Keystroke</A></TD><TD><A HREF="curs_getch.3x.html">curs_getch.3x</A></TD></TR>
-<TR><TD>ungetmouse()</TD><TD><A HREF="terminal_interface-curses-mouse_s.html#AFU_3">Unget_Mouse</A></TD><TD><A HREF="curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
-<TR><TD>untouchwin()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_71">Untouch</A></TD><TD><A HREF="curs_touch.3x.html">curs_touch.3x</A></TD></TR>
-<TR><TD>update_panels()</TD><TD><A HREF="terminal_interface-curses-panels_s.html#AFU_6">Update_Panels</A></TD><TD><A HREF="panel.3x.html">panel.3x</A></TD></TR>
-<TR><TD>waddch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_7">Add</A></TD><TD><A HREF="curs_addch.3x.html">curs_addch.3x</A></TD></TR>
-<TR><TD>waddchnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_22">Add</A></TD><TD><A HREF="curs_addchstr.3x.html">curs_addchstr.3x</A></TD></TR>
-<TR><TD>waddnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_20">Add</A></TD><TD><A HREF="curs_addstr.3x.html">curs_addstr.3x</A></TD></TR>
-<TR><TD>wattr_get()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_33">Get_Character_Attribute</A></TD><TD><A HREF="curs_attr.3x.html">curs_attr.3x</A></TD></TR>
-<TR><TD>wattr_get()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_34">Get_Character_Attribute</A></TD><TD><A HREF="curs_attr.3x.html">curs_attr.3x</A></TD></TR>
-<TR><TD>wattron()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_31">Switch_Character_Attribute</A></TD><TD><A HREF="curs_attr.3x.html">curs_attr.3x</A></TD></TR>
-<TR><TD>wattrset()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_32">Set_Character_Attributes</A></TD><TD><A HREF="curs_attr.3x.html">curs_attr.3x</A></TD></TR>
-<TR><TD>wbkgd()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_68">Change_Background</A></TD><TD><A HREF="curs_bkgd.3x.html">curs_bkgd.3x</A></TD></TR>
-<TR><TD>wbkgdget()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_69">Get_Background</A></TD><TD><A HREF="curs_bkgd.3x.html">curs_bkgd.3x</A></TD></TR>
-<TR><TD>wbkgdset()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_67">Set_Background</A></TD><TD><A HREF="curs_bkgd.3x.html">curs_bkgd.3x</A></TD></TR>
-<TR><TD>wborder()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_24">Border</A></TD><TD><A HREF="curs_border.3x.html">curs_border.3x</A></TD></TR>
-<TR><TD>wchgat()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_35">Change_Attributes</A></TD><TD><A HREF="curs_attr.3x.html">curs_attr.3x</A></TD></TR>
-<TR><TD>wclear()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_64">Clear</A></TD><TD><A HREF="curs_clear.3x.html">curs_clear.3x</A></TD></TR>
-<TR><TD>wclrtobot()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_65">Clear_To_End_Of_Screen</A></TD><TD><A HREF="curs_clear.3x.html">curs_clear.3x</A></TD></TR>
-<TR><TD>wclrtoeol()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_66">Clear_To_End_Of_Line</A></TD><TD><A HREF="curs_clear.3x.html">curs_clear.3x</A></TD></TR>
-<TR><TD>wdelch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_92">Delete_Character</A></TD><TD><A HREF="curs_delch.3x.html">curs_delch.3x</A></TD></TR>
-<TR><TD>wdeleteln()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_80">Delete_Line</A></TD><TD><A HREF="curs_deleteln.3x.html">curs_deleteln.3x</A></TD></TR>
-<TR><TD>wechochar()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_9">Add_With_Immediate_Echo</A></TD><TD><A HREF="curs_addch.3x.html">curs_addch.3x</A></TD></TR>
-<TR><TD>wenclose()</TD><TD><A HREF="terminal_interface-curses-mouse_s.html#AFU_4">Enclosed_In_Window</A></TD><TD><A HREF="curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
-<TR><TD>werase()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_63">Erase</A></TD><TD><A HREF="curs_clear.3x.html">curs_clear.3x</A></TD></TR>
-<TR><TD>wgetch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_28">Get_Keystroke</A></TD><TD><A HREF="curs_getch.3x.html">curs_getch.3x</A></TD></TR>
-<TR><TD>wgetnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_104">Get</A></TD><TD><A HREF="curs_getstr.3x.html">curs_getstr.3x</A></TD></TR>
-<TR><TD>whline()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_26">Horizontal_Line</A></TD><TD><A HREF="curs_border.3x.html">curs_border.3x</A></TD></TR>
-<TR><TD>winch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_94">Peek</A></TD><TD><A HREF="curs_inch.3x.html">curs_inch.3x</A></TD></TR>
-<TR><TD>winchnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_102">Peek</A></TD><TD><A HREF="curs_inchstr.3x.html">curs_inchstr.3x</A></TD></TR>
-<TR><TD>winnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_100">Peek</A></TD><TD><A HREF="curs_instr.3x.html">curs_instr.3x</A></TD></TR>
-<TR><TD>winsch()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_96">Insert</A></TD><TD><A HREF="curs_winch.3x.html">curs_winch.3x</A></TD></TR>
-<TR><TD>winsdelln()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_79">Insert_Delete_Lines</A></TD><TD><A HREF="curs_deleteln.3x.html">curs_deleteln.3x</A></TD></TR>
-<TR><TD>winsertln()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_81">Insert_Line</A></TD><TD><A HREF="curs_deleteln.3x.html">curs_deleteln.3x</A></TD></TR>
-<TR><TD>winsnstr()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_98">Insert</A></TD><TD><A HREF="curs_winch.3x.html">curs_winch.3x</A></TD></TR>
-<TR><TD>wmove()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_6">Move_Cursor</A></TD><TD><A HREF="curs_move.3x.html">curs_move.3x</A></TD></TR>
-<TR><TD>wnoutrefresh()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_60">Refresh_Without_Update</A></TD><TD><A HREF="curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
-<TR><TD>wredrawln()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_62">Redraw</A></TD><TD><A HREF="curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
-<TR><TD>wrefresh()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_59">Refresh</A></TD><TD><A HREF="curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
-<TR><TD>wscrl()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_91">Scroll</A></TD><TD><A HREF="curs_scroll.3x.html">curs_scroll.3x</A></TD></TR>
-<TR><TD>wsetscrreg()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_57">Set_Scroll_Region</A></TD><TD><A HREF="curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
-<TR><TD>wsyncdown()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_18">Synchronize_Downwards</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>wsyncup()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_17">Synchronize_Upwards</A></TD><TD><A HREF="curs_window.3x.html">curs_window.3x</A></TD></TR>
-<TR><TD>wtimeout()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_48">Set_Timeout_Mode</A></TD><TD><A HREF="curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
-<TR><TD>wtouchln()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_73">Change_Line_Status</A></TD><TD><A HREF="curs_touch.3x.html">curs_touch.3x</A></TD></TR>
-<TR><TD>wvline()</TD><TD><A HREF="terminal_interface-curses_s.html#AFU_27">Vertical_Line</A></TD><TD><A HREF="curs_border.3x.html">curs_border.3x</A></TD></TR>
+<TR><TD>baudrate()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_128">Baudrate</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>beep()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_38">Beep</A></TD><TD><A HREF="man/curs_beep.3x.html">curs_beep.3x</A></TD></TR>
+<TR><TD>bottom_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_3">Bottom</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>box()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_25">Box</A></TD><TD><A HREF="man/curs_border.3x.html">curs_border.3x</A></TD></TR>
+<TR><TD>can_change_color()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_143">Can_Change_Color</A></TD><TD><A HREF="man/curs_color.3x.html">curs_color.3x</A></TD></TR>
+<TR><TD>cbreak()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_40">Set_Cbreak_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>clearok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_52">Clear_On_Next_Update</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>color_content()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_144">Color_Content</A></TD><TD><A HREF="man/curs_color.3x.html">curs_color.3x</A></TD></TR>
+<TR><TD>copywin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_77">Copy</A></TD><TD><A HREF="man/curs_overlay.3x.html">curs_overlay.3x</A></TD></TR>
+<TR><TD>current_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_58">Current</A></TD><TD><A HREF="man/form_page.3x.html">form_page.3x</A></TD></TR>
+<TR><TD>current_item()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_14">Current</A></TD><TD><A HREF="man/mitem_current.3x.html">mitem_current.3x</A></TD></TR>
+<TR><TD>curs_set()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_150">Set_Cursor_Visibility</A></TD><TD><A HREF="man/curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
+<TR><TD>data_ahead()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_54">Data_Ahead</A></TD><TD><A HREF="man/form_data.3x.html">form_data.3x</A></TD></TR>
+<TR><TD>data_behind()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_55">Data_Behind</A></TD><TD><A HREF="man/form_data.3x.html">form_data.3x</A></TD></TR>
+<TR><TD>def_prog_mode()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_145">Save_Curses_Mode</A></TD><TD><A HREF="man/curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
+<TR><TD>define_key()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_121">Define_Key</A></TD><TD><A HREF="man/define_key.3x.html">define_key.3x</A></TD></TR>
+<TR><TD>del_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_15">Delete</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>delay_output()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_126">Delay_Output</A></TD><TD><A HREF="man/curs_util.3x.html">curs_util.3x</A></TD></TR>
+<TR><TD>delwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_11">Delete</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>derwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_13">Derived_Window</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>doupdate()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_59">Update_Screen</A></TD><TD><A HREF="man/curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
+<TR><TD>dup_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_4">Duplicate</A></TD><TD><A HREF="man/form_field_new.3x.html">form_field_new.3x</A></TD></TR>
+<TR><TD>dupwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_14">Duplicate</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>dynamic_field_info()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_26">Dynamic_Info</A></TD><TD><A HREF="man/form_field_info.3x.html">form_field_info.3x</A></TD></TR>
+<TR><TD>echo()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_42">Set_Echo_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>endwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_4">End_Windows</A></TD><TD><A HREF="man/curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
+<TR><TD>erasechar()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_129">Erase_Character</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>field_back()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_21">Background</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>field_back()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_22">Background</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>field_buffer()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_9">Get_Buffer</A></TD><TD><A HREF="man/form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
+<TR><TD>field_count()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_43">Field_Count</A></TD><TD><A HREF="man/form_field.3x.html">form_field.3x</A></TD></TR>
+<TR><TD>field_fore()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_18">Foreground</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>field_fore()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_19">Foreground</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>field_index()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_61">Get_Index</A></TD><TD><A HREF="man/form_page.3x.html">form_page.3x</A></TD></TR>
+<TR><TD>field_info()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_25">Info</A></TD><TD><A HREF="man/form_field_info.3x.html">form_field_info.3x</A></TD></TR>
+<TR><TD>field_init()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_36">Get_Field_Init_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>field_just()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_7">Get_Justification</A></TD><TD><A HREF="man/form_field_just.3x.html">form_field_just.3x</A></TD></TR>
+<TR><TD>field_opts()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_15">Get_Options</A></TD><TD><A HREF="man/form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
+<TR><TD>field_opts()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_16">Get_Options</A></TD><TD><A HREF="man/form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
+<TR><TD>field_opts_on()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_14">Switch_Options</A></TD><TD><A HREF="man/form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
+<TR><TD>field_pad()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_24">Pad_Character</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>field_status()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_11">Changed</A></TD><TD><A HREF="man/form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
+<TR><TD>field_term()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_37">Get_Field_Term_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>field_type()</TD><TD><A HREF="ada/terminal_interface-curses-forms-field_user_data__ads.htm#AFU_2">Get_Type</A></TD><TD><A HREF="man/form_field_validation.3x.html">form_field_validation.3x</A></TD></TR>
+<TR><TD>field_userptr</TD><TD><A HREF="ada/terminal_interface-curses-forms-field_user_data__ads.htm#AFU_2">Get_User_Data</A></TD><TD><A HREF="man/form_field_userptr.3x.html">form_field_userptr.3x</A></TD></TR>
+<TR><TD>field_userptr</TD><TD><A HREF="ada/terminal_interface-curses-forms-field_user_data__ads.htm#AFU_3">Get_User_Data</A></TD><TD><A HREF="man/form_field_userptr.3x.html">form_field_userptr.3x</A></TD></TR>
+<TR><TD>flash()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_39">Flash_Screen</A></TD><TD><A HREF="man/curs_beep.3x.html">curs_beep.3x</A></TD></TR>
+<TR><TD>flushinp()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_127">Flush_Input</A></TD><TD><A HREF="man/curs_util.3x.html">curs_util.3x</A></TD></TR>
+<TR><TD>form_driver()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_56">Driver</A></TD><TD><A HREF="man/form_driver.3x.html">form_driver.3x</A></TD></TR>
+<TR><TD>form_fields()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_42">Fields</A></TD><TD><A HREF="man/form_field.3x.html">form_field.3x</A></TD></TR>
+<TR><TD>form_init()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_38">Get_Form_Init_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>form_opts()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_50">Get_Options</A></TD><TD><A HREF="man/form_opts.3x.html">form_opts.3x</A></TD></TR>
+<TR><TD>form_opts()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_51">Get_Options</A></TD><TD><A HREF="man/form_opts.3x.html">form_opts.3x</A></TD></TR>
+<TR><TD>form_opts_on()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_49">Switch_Options</A></TD><TD><A HREF="man/form_opts.3x.html">form_opts.3x</A></TD></TR>
+<TR><TD>form_page()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_60">Page</A></TD><TD><A HREF="man/form_page.3x.html">form_page.3x</A></TD></TR>
+<TR><TD>form_sub()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_30">Get_Sub_Window</A></TD><TD><A HREF="man/form_win.3x.html">form_win.3x</A></TD></TR>
+<TR><TD>form_term()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_39">Get_Form_Term_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>form_userptr</TD><TD><A HREF="ada/terminal_interface-curses-forms-form_user_data__ads.htm#AFU_2">Get_User_Data</A></TD><TD><A HREF="man/form_userptr.3x.html">form_userptr.3x</A></TD></TR>
+<TR><TD>form_userptr</TD><TD><A HREF="ada/terminal_interface-curses-forms-form_user_data__ads.htm#AFU_3">Get_User_Data</A></TD><TD><A HREF="man/form_userptr.3x.html">form_userptr.3x</A></TD></TR>
+<TR><TD>form_win()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_28">Get_Window</A></TD><TD><A HREF="man/form_win.3x.html">form_win.3x</A></TD></TR>
+<TR><TD>free_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_3">Delete</A></TD><TD><A HREF="man/form_field_new.3x.html">form_field_new.3x</A></TD></TR>
+<TR><TD>free_form()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_47">Delete</A></TD><TD><A HREF="man/form_new.3x.html">form_new.3x</A></TD></TR>
+<TR><TD>free_item()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_3">Delete</A></TD><TD><A HREF="man/mitem_new.3x.html">mitem_new.3x</A></TD></TR>
+<TR><TD>free_menu()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_60">Delete</A></TD><TD><A HREF="man/menu_new.3x.html">menu_new.3x</A></TD></TR>
+<TR><TD>getbegyx()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_84">Get_Window_Position</A></TD><TD><A HREF="man/curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
+<TR><TD>getmaxyx()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_83">Get_Size</A></TD><TD><A HREF="man/curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
+<TR><TD>getmouse()</TD><TD><A HREF="ada/terminal_interface-curses-mouse__ads.htm#AFU_2">Get_Mouse</A></TD><TD><A HREF="man/curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
+<TR><TD>getparyx()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_86">Get_Origin_Relative_To_Parent</A></TD><TD><A HREF="man/curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
+<TR><TD>getyx()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_85">Get_Cursor_Position</A></TD><TD><A HREF="man/curs_getyx.3x.html">curs_getyx.3x</A></TD></TR>
+<TR><TD>halfdelay()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_45">Half_Delay</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>has_colors()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_141">Has_Colors</A></TD><TD><A HREF="man/curs_color.3x.html">curs_color.3x</A></TD></TR>
+<TR><TD>has_ic()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_131">Has_Insert_Character</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>has_il()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_132">Has_Insert_Line</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>has_key()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_30">Has_Key</A></TD><TD><A HREF="man/curs_getch.3x.html">curs_getch.3x</A></TD></TR>
+<TR><TD>hide_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_7">Hide</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>idcok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_54">Use_Insert_Delete_Character</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>idlok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_53">Use_Insert_Delete_Line</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>immedok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_56">Immediate_Update_Mode</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>init_color()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_142">Init_Color</A></TD><TD><A HREF="man/curs_color.3x.html">curs_color.3x</A></TD></TR>
+<TR><TD>init_pair()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_139">Init_Pair</A></TD><TD><A HREF="man/curs_color.3x.html">curs_color.3x</A></TD></TR>
+<TR><TD>initscr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_2">Init_Screen</A></TD><TD><A HREF="man/curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
+<TR><TD>initscr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_3">Init_Windows</A></TD><TD><A HREF="man/curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
+<TR><TD>intrflush()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_46">Set_Flush_On_Interrupt_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>is_linetouched()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_75">Is_Touched</A></TD><TD><A HREF="man/curs_touch.3x.html">curs_touch.3x</A></TD></TR>
+<TR><TD>is_wintouched()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_76">Is_Touched</A></TD><TD><A HREF="man/curs_touch.3x.html">curs_touch.3x</A></TD></TR>
+<TR><TD>isendwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_5">Is_End_Window</A></TD><TD><A HREF="man/curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
+<TR><TD>item_count()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_58">Item_Count</A></TD><TD><A HREF="man/menu_items.3x.html">menu_items.3x</A></TD></TR>
+<TR><TD>item_description();</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_12">Description</A></TD><TD><A HREF="man/mitem_name.3x.html">mitem_name.3x</A></TD></TR>
+<TR><TD>item_index()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_17">Get_Index</A></TD><TD><A HREF="man/mitem_current.3x.html">mitem_current.3x</A></TD></TR>
+<TR><TD>item_init()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_52">Get_Item_Init_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>item_name()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_11">Name</A></TD><TD><A HREF="man/mitem_name.3x.html">mitem_name.3x</A></TD></TR>
+<TR><TD>item_opts()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_10">Get_Options</A></TD><TD><A HREF="man/mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
+<TR><TD>item_opts()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_9">Get_Options</A></TD><TD><A HREF="man/mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
+<TR><TD>item_opts_on()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_8">Switch_Options</A></TD><TD><A HREF="man/mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
+<TR><TD>item_term()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_53">Get_Item_Term_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>item_userptr</TD><TD><A HREF="ada/terminal_interface-curses-menus-item_user_data__ads.htm#AFU_2">Get_User_Data</A></TD><TD><A HREF="man/mitem_userptr.3x.html">mitem_userptr.3x</A></TD></TR>
+<TR><TD>item_userptr</TD><TD><A HREF="ada/terminal_interface-curses-menus-item_user_data__ads.htm#AFU_3">Get_User_Data</A></TD><TD><A HREF="man/mitem_userptr.3x.html">mitem_userptr.3x</A></TD></TR>
+<TR><TD>item_value()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_5">Value</A></TD><TD><A HREF="man/mitem_value.3x.html">mitem_value.3x</A></TD></TR>
+<TR><TD>item_visible()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_6">Visible</A></TD><TD><A HREF="man/mitem_visible.3x.html">mitem_visible.3x</A></TD></TR>
+<TR><TD>keyname()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_122">Key_Name</A></TD><TD><A HREF="man/curs_util.3x.html">curs_util.3x</A></TD></TR>
+<TR><TD>keyname()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_123">Key_Name</A></TD><TD><A HREF="man/curs_util.3x.html">curs_util.3x</A></TD></TR>
+<TR><TD>keyok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_120">Enable_Key</A></TD><TD><A HREF="man/keyok.3x.html">keyok.3x</A></TD></TR>
+<TR><TD>keypad()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_44">Set_KeyPad_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>killchar()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_130">Kill_Character</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>leaveok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_55">Leave_Cursor_After_Update</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>link_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_5">Link</A></TD><TD><A HREF="man/form_field_new.3x.html">form_field_new.3x</A></TD></TR>
+<TR><TD>longname()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_134">Long_Name</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>longname()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_135">Long_Name</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>menu_back()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_35">Background</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>menu_back()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_36">Background</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>menu_driver()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_61">Driver</A></TD><TD><A HREF="man/menu_new.3x.html">menu_new.3x</A></TD></TR>
+<TR><TD>menu_fore()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_32">Foreground</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>menu_fore()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_33">Foreground</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>menu_format()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_47">Format</A></TD><TD><A HREF="man/menu_format.3x.html">menu_format.3x</A></TD></TR>
+<TR><TD>menu_grey()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_38">Grey</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>menu_grey()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_39">Grey</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>menu_init()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_54">Get_Menu_Init_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>menu_items()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_57">Items</A></TD><TD><A HREF="man/menu_items.3x.html">menu_items.3x</A></TD></TR>
+<TR><TD>menu_mark()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_30">Mark</A></TD><TD><A HREF="man/menu_mark.3x.html">menu_mark.3x</A></TD></TR>
+<TR><TD>menu_opts()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_21">Get_Options</A></TD><TD><A HREF="man/menu_opts.3x.html">menu_opts.3x</A></TD></TR>
+<TR><TD>menu_opts()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_22">Get_Options</A></TD><TD><A HREF="man/menu_opts.3x.html">menu_opts.3x</A></TD></TR>
+<TR><TD>menu_opts_on()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_20">Switch_Options</A></TD><TD><A HREF="man/menu_opts.3x.html">menu_opts.3x</A></TD></TR>
+<TR><TD>menu_pad()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_41">Pad_Character</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>menu_pattern()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_45">Pattern</A></TD><TD><A HREF="man/menu_pattern.3x.html">menu_pattern.3x</A></TD></TR>
+<TR><TD>menu_spacing()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_43">Spacing</A></TD><TD><A HREF="man/menu_spacing.3x.html">menu_spacing.3x</A></TD></TR>
+<TR><TD>menu_sub()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_26">Get_Sub_Window</A></TD><TD><A HREF="man/menu_win.3x.html">menu_win.3x</A></TD></TR>
+<TR><TD>menu_term()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_55">Get_Menu_Term_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>menu_userptr</TD><TD><A HREF="ada/terminal_interface-curses-menus-menu_user_data__ads.htm#AFU_2">Get_User_Data</A></TD><TD><A HREF="man/menu_userptr.3x.html">menu_userptr.3x</A></TD></TR>
+<TR><TD>menu_userptr</TD><TD><A HREF="ada/terminal_interface-curses-menus-menu_user_data__ads.htm#AFU_3">Get_User_Data</A></TD><TD><A HREF="man/menu_userptr.3x.html">menu_userptr.3x</A></TD></TR>
+<TR><TD>menu_win()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_24">Get_Window</A></TD><TD><A HREF="man/menu_win.3x.html">menu_win.3x</A></TD></TR>
+<TR><TD>meta()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_43">Set_Meta_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>mouseinterval()</TD><TD><A HREF="ada/terminal_interface-curses-mouse__ads.htm#AFU_5">Mouse_Interval</A></TD><TD><A HREF="man/curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
+<TR><TD>mousemask()</TD><TD><A HREF="ada/terminal_interface-curses-mouse__ads.htm#AFU_1">Start_Mouse</A></TD><TD><A HREF="man/curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
+<TR><TD>move_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_44">Move</A></TD><TD><A HREF="man/form_field.3x.html">form_field.3x</A></TD></TR>
+<TR><TD>move_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_11">Move</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>mvderwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_16">Move_Derived_Window</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>mvwaddch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_8">Add</A></TD><TD><A HREF="man/curs_addch.3x.html">curs_addch.3x</A></TD></TR>
+<TR><TD>mvwaddchnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_23">Add</A></TD><TD><A HREF="man/curs_addchstr.3x.html">curs_addchstr.3x</A></TD></TR>
+<TR><TD>mvwaddnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_21">Add</A></TD><TD><A HREF="man/curs_addstr.3x.html">curs_addstr.3x</A></TD></TR>
+<TR><TD>mvwchgat()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_37">Change_Attributes</A></TD><TD><A HREF="man/curs_attr.3x.html">curs_attr.3x</A></TD></TR>
+<TR><TD>mvwdelch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_94">Delete_Character</A></TD><TD><A HREF="man/curs_delch.3x.html">curs_delch.3x</A></TD></TR>
+<TR><TD>mvwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_15">Move_Window</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>mvwinch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_96">Peek</A></TD><TD><A HREF="man/curs_inch.3x.html">curs_inch.3x</A></TD></TR>
+<TR><TD>mvwinchnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_104">Peek</A></TD><TD><A HREF="man/curs_inchstr.3x.html">curs_inchstr.3x</A></TD></TR>
+<TR><TD>mvwinnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_102">Peek</A></TD><TD><A HREF="man/curs_instr.3x.html">curs_instr.3x</A></TD></TR>
+<TR><TD>mvwinsch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_98">Insert</A></TD><TD><A HREF="man/curs_winch.3x.html">curs_winch.3x</A></TD></TR>
+<TR><TD>mvwinsnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_100">Insert</A></TD><TD><A HREF="man/curs_winch.3x.html">curs_winch.3x</A></TD></TR>
+<TR><TD>napms()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_151">Nap_Milli_Seconds</A></TD><TD><A HREF="man/curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
+<TR><TD>new_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_1">Create</A></TD><TD><A HREF="man/form_field_new.3x.html">form_field_new.3x</A></TD></TR>
+<TR><TD>new_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_2">New_Field</A></TD><TD><A HREF="man/form_field_new.3x.html">form_field_new.3x</A></TD></TR>
+<TR><TD>new_form()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_45">Create</A></TD><TD><A HREF="man/form_new.3x.html">form_new.3x</A></TD></TR>
+<TR><TD>new_form()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_46">New_Form</A></TD><TD><A HREF="man/form_new.3x.html">form_new.3x</A></TD></TR>
+<TR><TD>new_item()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_1">Create</A></TD><TD><A HREF="man/mitem_new.3x.html">mitem_new.3x</A></TD></TR>
+<TR><TD>new_item()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_2">New_Item</A></TD><TD><A HREF="man/mitem_new.3x.html">mitem_new.3x</A></TD></TR>
+<TR><TD>new_menu()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_59">Create</A></TD><TD><A HREF="man/menu_new.3x.html">menu_new.3x</A></TD></TR>
+<TR><TD>new_page()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_63">Is_New_Page</A></TD><TD><A HREF="man/form_new_page.3x.html">form_new_page.3x</A></TD></TR>
+<TR><TD>new_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_1">Create</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>new_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_2">New_Panel</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>newpad()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_87">New_Pad</A></TD><TD><A HREF="man/curs_pad.3x.html">curs_pad.3x</A></TD></TR>
+<TR><TD>newwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_10">Create</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>nl()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_51">Set_NL_Mode</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>nodelay()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_48">Set_NoDelay_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>notimeout()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_50">Set_Escape_Time_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>overlay()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_79">Overlay</A></TD><TD><A HREF="man/curs_overlay.3x.html">curs_overlay.3x</A></TD></TR>
+<TR><TD>overwrite()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_78">Overwrite</A></TD><TD><A HREF="man/curs_overlay.3x.html">curs_overlay.3x</A></TD></TR>
+<TR><TD>pair_content()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_140">Pair_Content</A></TD><TD><A HREF="man/curs_color.3x.html">curs_color.3x</A></TD></TR>
+<TR><TD>panel_above()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_13">Above</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>panel_below()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_14">Below</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>panel_hidden()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_12">Is_Hidden</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>panel_userptr</TD><TD><A HREF="ada/terminal_interface-curses-panels-user_data__ads.htm#AFU_2">Get_User_Data</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>panel_userptr</TD><TD><A HREF="ada/terminal_interface-curses-panels-user_data__ads.htm#AFU_3">Get_User_Data</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>panel_window()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_8">Get_Window</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>panel_window()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_9">Panel_Window</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>pechochar()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_91">Add_Character_To_Pad_And_Echo_It</A></TD><TD><A HREF="man/curs_pad.3x.html">curs_pad.3x</A></TD></TR>
+<TR><TD>pnoutrefresh()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_90">Refresh_Without_Update</A></TD><TD><A HREF="man/curs_pad.3x.html">curs_pad.3x</A></TD></TR>
+<TR><TD>pos_form_cursor()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_53">Position_Cursor</A></TD><TD><A HREF="man/form_cursor.3x.html">form_cursor.3x</A></TD></TR>
+<TR><TD>pos_menu_cursor()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_28">Position_Cursor</A></TD><TD><A HREF="man/menu_cursor.3x.html">menu_cursor.3x</A></TD></TR>
+<TR><TD>post_form()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_52">Post</A></TD><TD><A HREF="man/form_post.3x.html">form_post.3x</A></TD></TR>
+<TR><TD>post_menu()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_18">Post</A></TD><TD><A HREF="man/menu_post.3x.html">menu_post.3x</A></TD></TR>
+<TR><TD>prefresh()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_89">Refresh</A></TD><TD><A HREF="man/curs_pad.3x.html">curs_pad.3x</A></TD></TR>
+<TR><TD>qiflush()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_47">Set_Queue_Interrupt_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>raw()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_41">Set_Raw_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>redrawwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_62">Redraw</A></TD><TD><A HREF="man/curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
+<TR><TD>replace_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_10">Replace</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>reset_prog_mode()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_146">Reset_Curses_Mode</A></TD><TD><A HREF="man/curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
+<TR><TD>resetty();</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_148">Reset_Terminal_State</A></TD><TD><A HREF="man/curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
+<TR><TD>ripoffline()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_149">Rip_Off_Lines</A></TD><TD><A HREF="man/curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
+<TR><TD>savetty()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_147">Save_Terminal_State</A></TD><TD><A HREF="man/curs_kernel.3x.html">curs_kernel.3x</A></TD></TR>
+<TR><TD>scale_form()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_31">Scale</A></TD><TD><A HREF="man/form_win.3x.html">form_win.3x</A></TD></TR>
+<TR><TD>scale_menu()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_27">Scale</A></TD><TD><A HREF="man/menu_win.3x.html">menu_win.3x</A></TD></TR>
+<TR><TD>scrollok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_57">Allow_Scrolling</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>set_current_field()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_57">Set_Current</A></TD><TD><A HREF="man/form_page.3x.html">form_page.3x</A></TD></TR>
+<TR><TD>set_current_item()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_13">Set_Current</A></TD><TD><A HREF="man/mitem_current.3x.html">mitem_current.3x</A></TD></TR>
+<TR><TD>set_field_back()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_20">Set_Background</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>set_field_buffer()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_8">Set_Buffer</A></TD><TD><A HREF="man/form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
+<TR><TD>set_field_fore()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_17">Set_Foreground</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>set_field_init()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_32">Set_Field_Init_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>set_field_just()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_6">Set_Justification</A></TD><TD><A HREF="man/form_field_just.3x.html">form_field_just.3x</A></TD></TR>
+<TR><TD>set_field_max()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_12">Set_Maximum_Size</A></TD><TD><A HREF="man/form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
+<TR><TD>set_field_opts()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_13">Set_Options</A></TD><TD><A HREF="man/form_field_opts.3x.html">form_field_opts.3x</A></TD></TR>
+<TR><TD>set_field_pad()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_23">Set_Pad_Character</A></TD><TD><A HREF="man/form_field_attributes.3x.html">form_field_attributes.3x</A></TD></TR>
+<TR><TD>set_field_status()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_10">Set_Status</A></TD><TD><A HREF="man/form_field_buffer.3x.html">form_field_buffer.3x</A></TD></TR>
+<TR><TD>set_field_term()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_33">Set_Field_Term_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>set_field_type()</TD><TD><A HREF="ada/terminal_interface-curses-forms-field_user_data__ads.htm#AFU_1">Set_Type</A></TD><TD><A HREF="man/form_fieldtype.3x.html">form_fieldtype.3x</A></TD></TR>
+<TR><TD>set_field_userptr</TD><TD><A HREF="ada/terminal_interface-curses-forms-field_user_data__ads.htm#AFU_1">Set_User_Data</A></TD><TD><A HREF="man/form_field_userptr.3x.html">form_field_userptr.3x</A></TD></TR>
+<TR><TD>set_form_fields()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_40">Redefine</A></TD><TD><A HREF="man/form_field.3x.html">form_field.3x</A></TD></TR>
+<TR><TD>set_form_fields()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_41">Set_Fields</A></TD><TD><A HREF="man/form_field.3x.html">form_field.3x</A></TD></TR>
+<TR><TD>set_form_init()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_34">Set_Form_Init_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>set_form_opts()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_48">Set_Options</A></TD><TD><A HREF="man/form_opts.3x.html">form_opts.3x</A></TD></TR>
+<TR><TD>set_form_page()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_59">Set_Page</A></TD><TD><A HREF="man/form_page.3x.html">form_page.3x</A></TD></TR>
+<TR><TD>set_form_sub()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_29">Set_Sub_Window</A></TD><TD><A HREF="man/form_win.3x.html">form_win.3x</A></TD></TR>
+<TR><TD>set_form_term()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_35">Set_Form_Term_Hook</A></TD><TD><A HREF="man/form_hook.3x.html">form_hook.3x</A></TD></TR>
+<TR><TD>set_form_userptr</TD><TD><A HREF="ada/terminal_interface-curses-forms-form_user_data__ads.htm#AFU_1">Set_User_Data</A></TD><TD><A HREF="man/form_userptr.3x.html">form_userptr.3x</A></TD></TR>
+<TR><TD>set_form_win()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_27">Set_Window</A></TD><TD><A HREF="man/form_win.3x.html">form_win.3x</A></TD></TR>
+<TR><TD>set_item_init()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_48">Set_Item_Init_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>set_item_opts()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_7">Set_Options</A></TD><TD><A HREF="man/mitem_opts.3x.html">mitem_opts.3x</A></TD></TR>
+<TR><TD>set_item_term()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_49">Set_Item_Term_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>set_item_userptr</TD><TD><A HREF="ada/terminal_interface-curses-menus-item_user_data__ads.htm#AFU_1">Set_User_Data</A></TD><TD><A HREF="man/mitem_userptr.3x.html">mitem_userptr.3x</A></TD></TR>
+<TR><TD>set_item_value()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_4">Set_Value</A></TD><TD><A HREF="man/mitem_value.3x.html">mitem_value.3x</A></TD></TR>
+<TR><TD>set_menu_back()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_34">Set_Background</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>set_menu_fore()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_31">Set_Foreground</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>set_menu_format()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_46">Set_Format</A></TD><TD><A HREF="man/menu_format.3x.html">menu_format.3x</A></TD></TR>
+<TR><TD>set_menu_grey()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_37">Set_Grey</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>set_menu_init()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_50">Set_Menu_Init_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>set_menu_items()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_56">Redefine</A></TD><TD><A HREF="man/menu_items.3x.html">menu_items.3x</A></TD></TR>
+<TR><TD>set_menu_mark()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_29">Set_Mark</A></TD><TD><A HREF="man/menu_mark.3x.html">menu_mark.3x</A></TD></TR>
+<TR><TD>set_menu_opts()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_19">Set_Options</A></TD><TD><A HREF="man/menu_opts.3x.html">menu_opts.3x</A></TD></TR>
+<TR><TD>set_menu_pad()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_40">Set_Pad_Character</A></TD><TD><A HREF="man/menu_attribs.3x.html">menu_attribs.3x</A></TD></TR>
+<TR><TD>set_menu_pattern()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_44">Set_Pattern</A></TD><TD><A HREF="man/menu_pattern.3x.html">menu_pattern.3x</A></TD></TR>
+<TR><TD>set_menu_spacing()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_42">Set_Spacing</A></TD><TD><A HREF="man/menu_spacing.3x.html">menu_spacing.3x</A></TD></TR>
+<TR><TD>set_menu_sub()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_25">Set_Sub_Window</A></TD><TD><A HREF="man/menu_win.3x.html">menu_win.3x</A></TD></TR>
+<TR><TD>set_menu_term()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_51">Set_Menu_Term_Hook</A></TD><TD><A HREF="man/menu_hook.3x.html">menu_hook.3x</A></TD></TR>
+<TR><TD>set_menu_userptr</TD><TD><A HREF="ada/terminal_interface-curses-menus-menu_user_data__ads.htm#AFU_1">Set_User_Data</A></TD><TD><A HREF="man/menu_userptr.3x.html">menu_userptr.3x</A></TD></TR>
+<TR><TD>set_menu_win()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_23">Set_Window</A></TD><TD><A HREF="man/menu_win.3x.html">menu_win.3x</A></TD></TR>
+<TR><TD>set_new_page()</TD><TD><A HREF="ada/terminal_interface-curses-forms__ads.htm#AFU_62">Set_New_Page</A></TD><TD><A HREF="man/form_new_page.3x.html">form_new_page.3x</A></TD></TR>
+<TR><TD>set_panel_userptr</TD><TD><A HREF="ada/terminal_interface-curses-panels-user_data__ads.htm#AFU_1">Set_User_Data</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>set_top_row()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_15">Set_Top_Row</A></TD><TD><A HREF="man/mitem_current.3x.html">mitem_current.3x</A></TD></TR>
+<TR><TD>show_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_5">Show</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>slk_attr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_117">Get_Soft_Label_Key_Attributes</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_attr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_118">Get_Soft_Label_Key_Attributes</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_attron()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_115">Switch_Soft_Label_Key_Attributes</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_attrset()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_116">Set_Soft_Label_Key_Attributes</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_clear()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_112">Clear_Soft_Label_Keys</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_color()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_119">Set_Soft_Label_Key_Color</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_init()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_106">Init_Soft_Label_Keys</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_label()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_110">Get_Soft_Label_Key</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_label()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_111">Get_Soft_Label_Key</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_noutrefresh()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_109">Refresh_Soft_Label_Keys_Without_Update</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_refresh()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_108">Refresh_Soft_Label_Key</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_restore()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_113">Restore_Soft_Label_Keys</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_set()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_107">Set_Soft_Label_Key</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>slk_touch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_114">Touch_Soft_Label_Keys</A></TD><TD><A HREF="man/curs_slk.3x.html">curs_slk.3x</A></TD></TR>
+<TR><TD>start_clolor()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_138">Start_Color</A></TD><TD><A HREF="man/curs_color.3x.html">curs_color.3x</A></TD></TR>
+<TR><TD>stdscr</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_1">Standard_Window</A></TD><TD><A HREF="man/curs_initscr.3x.html">curs_initscr.3x</A></TD></TR>
+<TR><TD>subpad()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_88">Sub_Pad</A></TD><TD><A HREF="man/curs_pad.3x.html">curs_pad.3x</A></TD></TR>
+<TR><TD>subwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_12">Sub_Window</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>syncok()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_19">Set_Synch_Mode</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>termattrs()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_133">Supported_Attributes</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>termname()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_136">Terminal_Name</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>termname()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_137">Terminal_Name</A></TD><TD><A HREF="man/curs_termattrs.3x.html">curs_termattrs.3x</A></TD></TR>
+<TR><TD>top_panel()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_4">Top</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>top_row()</TD><TD><A HREF="ada/terminal_interface-curses-menus__ads.htm#AFU_16">Top_Row</A></TD><TD><A HREF="man/mitem_current.3x.html">mitem_current.3x</A></TD></TR>
+<TR><TD>touchline()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_73">Touch</A></TD><TD><A HREF="man/curs_touch.3x.html">curs_touch.3x</A></TD></TR>
+<TR><TD>touchwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_72">Touch</A></TD><TD><A HREF="man/curs_touch.3x.html">curs_touch.3x</A></TD></TR>
+<TR><TD>unctrl()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_124">Un_Control</A></TD><TD><A HREF="man/curs_util.3x.html">curs_util.3x</A></TD></TR>
+<TR><TD>unctrl()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_125">Un_Control</A></TD><TD><A HREF="man/curs_util.3x.html">curs_util.3x</A></TD></TR>
+<TR><TD>ungetch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_29">Undo_Keystroke</A></TD><TD><A HREF="man/curs_getch.3x.html">curs_getch.3x</A></TD></TR>
+<TR><TD>ungetmouse()</TD><TD><A HREF="ada/terminal_interface-curses-mouse__ads.htm#AFU_3">Unget_Mouse</A></TD><TD><A HREF="man/curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
+<TR><TD>untouchwin()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_71">Untouch</A></TD><TD><A HREF="man/curs_touch.3x.html">curs_touch.3x</A></TD></TR>
+<TR><TD>update_panels()</TD><TD><A HREF="ada/terminal_interface-curses-panels__ads.htm#AFU_6">Update_Panels</A></TD><TD><A HREF="man/panel.3x.html">panel.3x</A></TD></TR>
+<TR><TD>waddch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_7">Add</A></TD><TD><A HREF="man/curs_addch.3x.html">curs_addch.3x</A></TD></TR>
+<TR><TD>waddchnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_22">Add</A></TD><TD><A HREF="man/curs_addchstr.3x.html">curs_addchstr.3x</A></TD></TR>
+<TR><TD>waddnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_20">Add</A></TD><TD><A HREF="man/curs_addstr.3x.html">curs_addstr.3x</A></TD></TR>
+<TR><TD>wattr_get()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_33">Get_Character_Attributes</A></TD><TD><A HREF="man/curs_attr.3x.html">curs_attr.3x</A></TD></TR>
+<TR><TD>wattr_get()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_34">Get_Character_Attribute</A></TD><TD><A HREF="man/curs_attr.3x.html">curs_attr.3x</A></TD></TR>
+<TR><TD>wattron()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_31">Switch_Character_Attribute</A></TD><TD><A HREF="man/curs_attr.3x.html">curs_attr.3x</A></TD></TR>
+<TR><TD>wattrset()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_32">Set_Character_Attributes</A></TD><TD><A HREF="man/curs_attr.3x.html">curs_attr.3x</A></TD></TR>
+<TR><TD>wbkgd()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_69">Change_Background</A></TD><TD><A HREF="man/curs_bkgd.3x.html">curs_bkgd.3x</A></TD></TR>
+<TR><TD>wbkgdget()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_70">Get_Background</A></TD><TD><A HREF="man/curs_bkgd.3x.html">curs_bkgd.3x</A></TD></TR>
+<TR><TD>wbkgdset()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_68">Set_Background</A></TD><TD><A HREF="man/curs_bkgd.3x.html">curs_bkgd.3x</A></TD></TR>
+<TR><TD>wborder()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_24">Border</A></TD><TD><A HREF="man/curs_border.3x.html">curs_border.3x</A></TD></TR>
+<TR><TD>wchgat()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_36">Change_Attributes</A></TD><TD><A HREF="man/curs_attr.3x.html">curs_attr.3x</A></TD></TR>
+<TR><TD>wclear()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_65">Clear</A></TD><TD><A HREF="man/curs_clear.3x.html">curs_clear.3x</A></TD></TR>
+<TR><TD>wclrtobot()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_66">Clear_To_End_Of_Screen</A></TD><TD><A HREF="man/curs_clear.3x.html">curs_clear.3x</A></TD></TR>
+<TR><TD>wclrtoeol()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_67">Clear_To_End_Of_Line</A></TD><TD><A HREF="man/curs_clear.3x.html">curs_clear.3x</A></TD></TR>
+<TR><TD>wcolor_set()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_35">Set_Color</A></TD><TD><A HREF="man/curs_attr.3x.html">curs_attr.3x</A></TD></TR>
+<TR><TD>wdelch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_93">Delete_Character</A></TD><TD><A HREF="man/curs_delch.3x.html">curs_delch.3x</A></TD></TR>
+<TR><TD>wdeleteln()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_81">Delete_Line</A></TD><TD><A HREF="man/curs_deleteln.3x.html">curs_deleteln.3x</A></TD></TR>
+<TR><TD>wechochar()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_9">Add_With_Immediate_Echo</A></TD><TD><A HREF="man/curs_addch.3x.html">curs_addch.3x</A></TD></TR>
+<TR><TD>wenclose()</TD><TD><A HREF="ada/terminal_interface-curses-mouse__ads.htm#AFU_4">Enclosed_In_Window</A></TD><TD><A HREF="man/curs_mouse.3x.html">curs_mouse.3x</A></TD></TR>
+<TR><TD>werase()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_64">Erase</A></TD><TD><A HREF="man/curs_clear.3x.html">curs_clear.3x</A></TD></TR>
+<TR><TD>wgetch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_28">Get_Keystroke</A></TD><TD><A HREF="man/curs_getch.3x.html">curs_getch.3x</A></TD></TR>
+<TR><TD>wgetnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_105">Get</A></TD><TD><A HREF="man/curs_getstr.3x.html">curs_getstr.3x</A></TD></TR>
+<TR><TD>whline()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_26">Horizontal_Line</A></TD><TD><A HREF="man/curs_border.3x.html">curs_border.3x</A></TD></TR>
+<TR><TD>winch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_95">Peek</A></TD><TD><A HREF="man/curs_inch.3x.html">curs_inch.3x</A></TD></TR>
+<TR><TD>winchnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_103">Peek</A></TD><TD><A HREF="man/curs_inchstr.3x.html">curs_inchstr.3x</A></TD></TR>
+<TR><TD>winnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_101">Peek</A></TD><TD><A HREF="man/curs_instr.3x.html">curs_instr.3x</A></TD></TR>
+<TR><TD>winsch()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_97">Insert</A></TD><TD><A HREF="man/curs_winch.3x.html">curs_winch.3x</A></TD></TR>
+<TR><TD>winsdelln()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_80">Insert_Delete_Lines</A></TD><TD><A HREF="man/curs_deleteln.3x.html">curs_deleteln.3x</A></TD></TR>
+<TR><TD>winsertln()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_82">Insert_Line</A></TD><TD><A HREF="man/curs_deleteln.3x.html">curs_deleteln.3x</A></TD></TR>
+<TR><TD>winsnstr()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_99">Insert</A></TD><TD><A HREF="man/curs_winch.3x.html">curs_winch.3x</A></TD></TR>
+<TR><TD>wmove()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_6">Move_Cursor</A></TD><TD><A HREF="man/curs_move.3x.html">curs_move.3x</A></TD></TR>
+<TR><TD>wnoutrefresh()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_61">Refresh_Without_Update</A></TD><TD><A HREF="man/curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
+<TR><TD>wredrawln()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_63">Redraw</A></TD><TD><A HREF="man/curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
+<TR><TD>wrefresh()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_60">Refresh</A></TD><TD><A HREF="man/curs_refresh.3x.html">curs_refresh.3x</A></TD></TR>
+<TR><TD>wscrl()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_92">Scroll</A></TD><TD><A HREF="man/curs_scroll.3x.html">curs_scroll.3x</A></TD></TR>
+<TR><TD>wsetscrreg()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_58">Set_Scroll_Region</A></TD><TD><A HREF="man/curs_outopts.3x.html">curs_outopts.3x</A></TD></TR>
+<TR><TD>wsyncdown()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_18">Synchronize_Downwards</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>wsyncup()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_17">Synchronize_Upwards</A></TD><TD><A HREF="man/curs_window.3x.html">curs_window.3x</A></TD></TR>
+<TR><TD>wtimeout()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_49">Set_Timeout_Mode</A></TD><TD><A HREF="man/curs_inopts.3x.html">curs_inopts.3x</A></TD></TR>
+<TR><TD>wtouchln()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_74">Change_Line_Status</A></TD><TD><A HREF="man/curs_touch.3x.html">curs_touch.3x</A></TD></TR>
+<TR><TD>wvline()</TD><TD><A HREF="ada/terminal_interface-curses__ads.htm#AFU_27">Vertical_Line</A></TD><TD><A HREF="man/curs_border.3x.html">curs_border.3x</A></TD></TR>
</TABLE></BODY></HTML>
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.Alpha --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.Alpha <B>is</B>
-
- type Alpha_Field <B>is</B> <B>new</B> Field_Type
- <B>with</B> <B>record</B>
- Minimum_Field_Width : Natural := 0;
- <B>end</B> <B>record</B>;
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> Alpha_Field);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.Alpha;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric <B>is</B>
-
- type AlphaNumeric_Field <B>is</B> <B>new</B> Field_Type
- <B>with</B> <B>record</B>
- Minimum_Field_Width : Natural := 0;
- <B>end</B> <B>record</B>;
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> AlphaNumeric_Field);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>generic</B>
- type T <B>is</B> (<>);
-
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada <B>is</B>
-
- <B>function</B> Create (Set : Type_Set := Mixed_Case;
- Case_Sensitive : Boolean := False;
- Must_Be_Unique : Boolean := False)
- <B>return</B> Enumeration_Field;
-
- <B>function</B> Value (Fld : Field;
- Buf : Buffer_Number := Buffer_Number'First) <B>return</B> T;
- <I>-- Translate the content of the fields buffer - indicated by the</I>
- <I>-- buffer number - into an enumeration value. If the buffer is empty</I>
- <I>-- or the content is invalid, a Constraint_Error is raises.</I>
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.Enumeration --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>with</B> Interfaces.C.Strings;
-
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.Enumeration <B>is</B>
-
- type String_Access <B>is</B> <B>access</B> String;
-
- <I>-- Type_Set is used by the child package Ada</I>
- type Type_Set <B>is</B> (Lower_Case, Upper_Case, Mixed_Case);
-
- type Enum_Array <B>is</B> <B>array</B> (Positive <B>range</B> <>)
- <B>of</B> String_Access;
-
- type Enumeration_Info (C : Positive) <B>is</B>
- <B>record</B>
- Names : Enum_Array (1 .. C);
- Case_Sensitive : Boolean := False;
- Match_Must_Be_Unique : Boolean := False;
- <B>end</B> <B>record</B>;
-
- type Enumeration_Field <B>is</B> <B>new</B> Field_Type <B>with</B> <B>private</B>;
-
- <B>function</B> Create (Info : Enumeration_Info;
- Auto_Release_Names : Boolean := False)
- <B>return</B> Enumeration_Field;
- <I>-- Make an fieldtype from the info. Enumerations are special, because</I>
- <I>-- they normally don't copy the enum values into a private store, so</I>
- <I>-- we have to care for the lifetime of the info we provide.</I>
- <I>-- The Auto_Release_Names flag may be used to automatically releases</I>
- <I>-- the strings in the Names array of the Enumeration_Info.</I>
-
- <B>function</B> Make_Enumeration_Type (Info : Enumeration_Info;
- Auto_Release_Names : Boolean := False)
- <B>return</B> Enumeration_Field <B>renames</B> Create;
-
- <B>procedure</B> Release (Enum : <B>in</B> <B>out</B> Enumeration_Field);
- <I>-- But we may want to release the field to release the memory allocated</I>
- <I>-- by it internally. After that the Enumeration field is no longer usable.</I>
-
- <I>-- The next type defintions are all ncurses extensions. They are typically</I>
- <I>-- not available in other curses implementations.</I>
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> Enumeration_Field);
-
-<B>private</B>
- type CPA_Access <B>is</B> <B>access</B> Interfaces.C.Strings.chars_ptr_array;
-
- type Enumeration_Field <B>is</B> <B>new</B> Field_Type <B>with</B>
- <B>record</B>
- Case_Sensitive : Boolean := False;
- Match_Must_Be_Unique : Boolean := False;
- Arr : CPA_Access := <B>null</B>;
- <B>end</B> <B>record</B>;
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.Enumeration;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.IntField --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.IntField <B>is</B>
-
- type Integer_Field <B>is</B> <B>new</B> Field_Type <B>with</B>
- <B>record</B>
- Precision : Natural;
- Lower_Limit : Integer;
- Upper_Limit : Integer;
- <B>end</B> <B>record</B>;
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> Integer_Field);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.IntField;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address <B>is</B>
-
- type Internet_V4_Address_Field <B>is</B> <B>new</B> Field_Type <B>with</B> <B>null</B> <B>record</B>;
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> Internet_V4_Address_Field);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.Numeric --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.Numeric <B>is</B>
-
- type Numeric_Field <B>is</B> <B>new</B> Field_Type <B>with</B>
- <B>record</B>
- Precision : Natural;
- Lower_Limit : Float;
- Upper_Limit : Float;
- <B>end</B> <B>record</B>;
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> Numeric_Field);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.Numeric;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.RegExp --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.RegExp <B>is</B>
-
- type String_Access <B>is</B> <B>access</B> String;
-
- type Regular_Expression_Field <B>is</B> <B>new</B> Field_Type <B>with</B>
- <B>record</B>
- Regular_Expression : String_Access;
- <B>end</B> <B>record</B>;
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> Regular_Expression_Field);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.RegExp;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.User.Choice --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>with</B> Ada.Unchecked_Deallocation;
-<B>with</B> Terminal_Interface.Curses.<A HREF="terminal_interface-curses-aux_s.html#32:35">Aux</A>;
-
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.User.Choice <B>is</B>
-
- type User_Defined_Field_Type_With_Choice <B>is</B> <B>abstract</B> <B>new</B>
- User_Defined_Field_Type <B>with</B> <B>null</B> <B>record</B>;
- <I>-- This is the root of the mechanism we use to create field types in</I>
- <I>-- Ada95 that allow the prev/next mechanism. You should your own type</I>
- <I>-- derive from this one and implement the Field_Check, Character_Check</I>
- <I>-- Next and Previous functions for your own type.</I>
-
- type User_Defined_Field_Type_With_Choice_Access <B>is</B> <B>access</B> <B>all</B>
- User_Defined_Field_Type_With_Choice'Class;
-
- <B>function</B> Next
- (Fld : Field;
- Typ : User_Defined_Field_Type_With_Choice) <B>return</B> Boolean
- <B>is</B> <B>abstract</B>;
- <I>-- If True is returned, the function successfully generated a next</I>
- <I>-- value into the fields buffer.</I>
-
- <B>function</B> Previous
- (Fld : Field;
- Typ : User_Defined_Field_Type_With_Choice) <B>return</B> Boolean
- <B>is</B> <B>abstract</B>;
- <I>-- If True is returned, the function successfully generated a previous</I>
- <I>-- value into the fields buffer.</I>
-
- <I>-- +----------------------------------------------------------------------</I>
- <I>-- | Private Part.</I>
- <I>-- |</I>
-<B>private</B>
- <B>use</B> type Interfaces.C.Int;
-
- <B>function</B> Generic_Next (Fld : Field;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Generic_Next);
- <I>-- This is the generic next Choice_Function for the low-level fieldtype</I>
- <I>-- representing all the User_Defined_Field_Type derivates. It routes</I>
- <I>-- the call to the Next implementation for the type.</I>
-
- <B>function</B> Generic_Prev (Fld : Field;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Generic_Prev);
- <I>-- This is the generic prev Choice_Function for the low-level fieldtype</I>
- <I>-- representing all the User_Defined_Field_Type derivates. It routes</I>
- <I>-- the call to the Previous implementation for the type.</I>
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.User.Choice;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types.User --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>with</B> Ada.Unchecked_Deallocation;
-<B>with</B> Terminal_Interface.Curses.<A HREF="terminal_interface-curses-aux_s.html#32:35">Aux</A>;
-
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types.User <B>is</B>
-
- type User_Defined_Field_Type <B>is</B> <B>abstract</B> <B>new</B> Field_Type <B>with</B> <B>null</B> <B>record</B>;
- <I>-- This is the root of the mechanism we use to create field types in</I>
- <I>-- Ada95. You should your own type derive from this one and implement</I>
- <I>-- the Field_Check and Character_Check functions for your own type.</I>
-
- type User_Defined_Field_Type_Access <B>is</B> <B>access</B> <B>all</B>
- User_Defined_Field_Type'Class;
-
- <B>function</B> Field_Check
- (Fld : Field;
- Typ : User_Defined_Field_Type) <B>return</B> Boolean
- <B>is</B> <B>abstract</B>;
- <I>-- If True is returned, the field is considered valid, otherwise it is</I>
- <I>-- invalid.</I>
-
- <B>function</B> Character_Check
- (Ch : Character;
- Typ : User_Defined_Field_Type) <B>return</B> Boolean
- <B>is</B> <B>abstract</B>;
- <I>-- If True is returned, the character is considered as valid for the</I>
- <I>-- field, otherwise as invalid.</I>
-
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Typ : <B>in</B> User_Defined_Field_Type);
- <I>-- This should work for all types derived from User_Defined_Field_Type.</I>
- <I>-- No need to reimplement it for your derived type.</I>
-
- <I>-- +----------------------------------------------------------------------</I>
- <I>-- | Private Part.</I>
- <I>-- | Used by the Choice child package.</I>
-<B>private</B>
- <B>use</B> type Interfaces.C.Int;
-
- <B>function</B> Generic_Field_Check (Fld : Field;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Generic_Field_Check);
- <I>-- This is the generic Field_Check_Function for the low-level fieldtype</I>
- <I>-- representing all the User_Defined_Field_Type derivates. It routes</I>
- <I>-- the call to the Field_Check implementation for the type.</I>
-
- <B>function</B> Generic_Char_Check (Ch : <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Generic_Char_Check);
- <I>-- This is the generic Char_Check_Function for the low-level fieldtype</I>
- <I>-- representing all the User_Defined_Field_Type derivates. It routes</I>
- <I>-- the call to the Character_Check implementation for the type.</I>
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types.User;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_Types --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.1 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>with</B> Terminal_Interface.Curses.<A HREF="terminal_interface-curses-aux_s.html#32:35">Aux</A>;
-
-<B>package</B> Terminal_Interface.Curses.Forms.Field_Types <B>is</B>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_fieldtype.3x.html">form_fieldtype.3x</A></I>
- <I>-- |=====================================================================</I>
-
- type Field_Type <B>is</B> <B>abstract</B> <B>tagged</B> <B>null</B> <B>record</B>;
- <I>-- Abstract base type for all field types. A concrete field type</I>
- <I>-- is an extension that adds some data elements describing formats or</I>
- <I>-- boundary values for the type and validation routines.</I>
- <I>-- For the builtin low-level fieldtypes, the validation routines are</I>
- <I>-- already defined by the low-level C library.</I>
- <I>-- The builtin types like Alpha or AlphaNumeric etc. are defined in</I>
- <I>-- child packages of this package. You may use one of them as example</I>
- <I>-- how to create you own child packages for low-level field types that</I>
- <I>-- you may have already written in C.</I>
-
- type Field_Type_Access <B>is</B> <B>access</B> <B>all</B> Field_Type'Class;
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>procedure</B> Set_Field_Type (Fld : <B>in</B> Field;
- Fld_Type : <B>in</B> Field_Type) <B>is</B> <B>abstract</B>;
- <I>-- AKA: <A HREF="form_fieldtype.3x.html">set_field_type()</A></I>
- <I>-- But: we hide the vararg mechanism of the C interface. You always</I>
- <I>-- have to pass a single Field_Type parameter.</I>
-
- <I>-- ---------------------------------------------------------------------</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_validation.3x.html">form_field_validation.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>function</B> Get_Type (Fld : <B>in</B> Field) <B>return</B> Field_Type_Access;
- <I>-- AKA: <A HREF="form_field_validation.3x.html">field_type()</A></I>
- <I>-- AKA: field_arg()</I>
- <I>-- In Ada95 we can combine these. If you try to retrieve the field type</I>
- <I>-- that is not defined as extension of the abstract tagged type above,</I>
- <I>-- you will raise a Form_Exception.</I>
-
- <I>-- +----------------------------------------------------------------------</I>
- <I>-- | Private Part.</I>
- <I>-- | Most of this is used by the implementations of the child packages.</I>
- <I>-- |</I>
-<B>private</B>
- <B>use</B> Terminal_Interface.Curses.<A HREF="terminal_interface-curses-aux_s.html#32:35">Aux</A>;
-
- type Makearg_Function <B>is</B> <B>access</B>
- <B>function</B> (Args : System.Address) <B>return</B> System.Address;
- <B>pragma</B> Convention (C, Makearg_Function);
-
- type Copyarg_Function <B>is</B> <B>access</B>
- <B>function</B> (Usr : System.Address) <B>return</B> System.Address;
- <B>pragma</B> Convention (C, Copyarg_Function);
-
- type Freearg_Function <B>is</B> <B>access</B>
- <B>procedure</B> (Usr : System.Address);
- <B>pragma</B> Convention (C, Freearg_Function);
-
- type Field_Check_Function <B>is</B> <B>access</B>
- <B>function</B> (Fld : Field; Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Field_Check_Function);
-
- type Char_Check_Function <B>is</B> <B>access</B>
- <B>function</B> (Ch : <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>; Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Char_Check_Function);
-
- type Choice_Function <B>is</B> <B>access</B>
- <B>function</B> (Fld : Field; Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Choice_Function);
-
- <I>-- +----------------------------------------------------------------------</I>
- <I>-- | This must be in sync with the FIELDTYPE structure in form.h</I>
- <I>-- |</I>
- type Low_Level_Field_Type <B>is</B>
- <B>record</B>
- Status : <A HREF="terminal_interface-curses-aux_s.html#37:12">C_Short</A>;
- Ref_Count : <A HREF="terminal_interface-curses-aux_s.html#38:12">C_Long_Int</A>;
- Left, Right : System.Address;
- Makearg : Makearg_Function;
- Copyarg : Copyarg_Function;
- Freearg : Freearg_Function;
- Fcheck : Field_Check_Function;
- Ccheck : Char_Check_Function;
- Next, Prev : Choice_Function;
- <B>end</B> <B>record</B>;
- <B>pragma</B> Convention (C, Low_Level_Field_Type);
- type C_Field_Type <B>is</B> <B>access</B> <B>all</B> Low_Level_Field_Type;
-
- Null_Field_Type : <B>constant</B> C_Field_Type := <B>null</B>;
-
- <I>-- +----------------------------------------------------------------------</I>
- <I>-- | This four low-level fieldtypes are the ones associated with</I>
- <I>-- | fieldtypes handled by this binding. Any other low-level fieldtype</I>
- <I>-- | will result in a Form_Exception is function Get_Type.</I>
- <I>-- |</I>
- C_Generic_Type : C_Field_Type := Null_Field_Type;
- C_Generic_Choice : C_Field_Type := Null_Field_Type;
- C_Builtin_Router : C_Field_Type := Null_Field_Type;
- C_Choice_Router : C_Field_Type := Null_Field_Type;
-
- <B>procedure</B> Wrap_Builtin (Fld : Field;
- Typ : Field_Type'Class;
- Cft : C_Field_Type := C_Builtin_Router);
- <I>-- This procedure has to be called by the Set_Field_Type implementation</I>
- <I>-- for builtin low-level fieldtypes to replace it by an Ada95</I>
- <I>-- conformant Field_Type object.</I>
- <I>-- The parameter Cft must be C_Builtin_Router for regular low-level</I>
- <I>-- fieldtypes (like TYP_ALPHA or TYP_ALNUM) and C_Choice_Router for</I>
- <I>-- low-level fieldtypes witch choice functions (like TYP_ENUM).</I>
- <I>-- Any other value will raise a Form_Exception.</I>
-
- <B>function</B> Make_Arg (Args : System.Address) <B>return</B> System.Address;
- <B>pragma</B> Convention (C, Make_Arg);
- <I>-- This is the Makearg_Function for the internal low-level types</I>
- <I>-- introduced by this binding.</I>
-
- <B>function</B> Copy_Arg (Usr : System.Address) <B>return</B> System.Address;
- <B>pragma</B> Convention (C, Copy_Arg);
- <I>-- This is the Copyarg_Function for the internal low-level types</I>
- <I>-- introduced by this binding.</I>
-
- <B>procedure</B> Free_Arg (Usr : System.Address);
- <B>pragma</B> Convention (C, Free_Arg);
- <I>-- This is the Freearg_Function for the internal low-level types</I>
- <I>-- introduced by this binding.</I>
-
- <B>function</B> Field_Check_Router (Fld : Field;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Field_Check_Router);
- <I>-- This is the Field_Check_Function for the internal low-level types</I>
- <I>-- introduced to wrap the low-level types by a Field_Type derived</I>
- <I>-- type. It routes the call to the corresponding low-level validation</I>
- <I>-- function.</I>
-
- <B>function</B> Char_Check_Router (Ch : <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Char_Check_Router);
- <I>-- This is the Char_Check_Function for the internal low-level types</I>
- <I>-- introduced to wrap the low-level types by a Field_Type derived</I>
- <I>-- type. It routes the call to the corresponding low-level validation</I>
- <I>-- function.</I>
-
- <B>function</B> Next_Router (Fld : Field;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Next_Router);
- <I>-- This is the Choice_Function for the internal low-level types</I>
- <I>-- introduced to wrap the low-level types by a Field_Type derived</I>
- <I>-- type. It routes the call to the corresponding low-level next_choice</I>
- <I>-- function.</I>
-
- <B>function</B> Prev_Router (Fld : Field;
- Usr : System.Address) <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Convention (C, Prev_Router);
- <I>-- This is the Choice_Function for the internal low-level types</I>
- <I>-- introduced to wrap the low-level types by a Field_Type derived</I>
- <I>-- type. It routes the call to the corresponding low-level prev_choice</I>
- <I>-- function.</I>
-
- <I>-- This is the Argument structure maintained by all low-level field types</I>
- <I>-- introduced by this binding.</I>
- type Argument <B>is</B> <B>record</B>
- Typ : Field_Type_Access; <I>-- the Field_Type creating this record</I>
- Usr : System.Address; <I>-- original arg for builtin low-level types</I>
- Cft : C_Field_Type; <I>-- the original low-level type</I>
- <B>end</B> <B>record</B>;
- type Argument_Access <B>is</B> <B>access</B> <B>all</B> Argument;
-
- <I>-- +----------------------------------------------------------------------</I>
- <I>-- |</I>
- <I>-- | Some Imports of libform routines to deal with low-level fieldtypes.</I>
- <I>-- |</I>
- <B>function</B> New_Fieldtype (Fcheck : Field_Check_Function;
- Ccheck : Char_Check_Function)
- <B>return</B> C_Field_Type;
- <B>pragma</B> Import (C, New_Fieldtype, "new_fieldtype");
-
- <B>function</B> Set_Fieldtype_Arg (Cft : C_Field_Type;
- Mak : Makearg_Function := Make_Arg'<B>Access</B>;
- Cop : Copyarg_Function := Copy_Arg'<B>Access</B>;
- Fre : Freearg_Function := Free_Arg'<B>Access</B>)
- <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Import (C, Set_Fieldtype_Arg, "set_fieldtype_arg");
-
- <B>function</B> Set_Fieldtype_Choice (Cft : C_Field_Type;
- Next, Prev : Choice_Function)
- <B>return</B> <A HREF="terminal_interface-curses-aux_s.html#36:12">C_Int</A>;
- <B>pragma</B> Import (C, Set_Fieldtype_Choice, "set_fieldtype_choice");
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_Types;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Field_User_Data --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.4 @</I>
-<I>------------------------------------------------------------------------------</I>
-
-<B>generic</B>
- type User <B>is</B> <B>limited</B> <B>private</B>;
- type User_Access <B>is</B> <B>access</B> User;
-<B>package</B> Terminal_Interface.Curses.Forms.Field_User_Data <B>is</B>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_userptr.3x.html">form_field_userptr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>procedure</B> Set_User_Data (Fld : <B>in</B> Field;
- Data : <B>in</B> User_Access);
- <I>-- AKA: <A HREF="form_field_userptr.3x.html">set_field_userptr</A></I>
- <B>pragma</B> Inline (Set_User_Data);
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>procedure</B> Get_User_Data (Fld : <B>in</B> Field;
- Data : <B>out</B> User_Access);
- <I>-- AKA: <A HREF="form_field_userptr.3x.html">field_userptr</A></I>
- <B>pragma</B> Inline (Get_User_Data);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Field_User_Data;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Forms.Form_User_Data --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.4 @</I>
-<I>------------------------------------------------------------------------------</I>
-
-<B>generic</B>
- type User <B>is</B> <B>limited</B> <B>private</B>;
- type User_Access <B>is</B> <B>access</B> User;
-<B>package</B> Terminal_Interface.Curses.Forms.Form_User_Data <B>is</B>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_userptr.3x.html">form_userptr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>procedure</B> Set_User_Data (Frm : <B>in</B> Form;
- Data : <B>in</B> User_Access);
- <I>-- AKA: <A HREF="form_userptr.3x.html">set_form_userptr</A></I>
- <B>pragma</B> Inline (Set_User_Data);
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>procedure</B> Get_User_Data (Frm : <B>in</B> Form;
- Data : <B>out</B> User_Access);
- <I>-- AKA: <A HREF="form_userptr.3x.html">form_userptr</A></I>
- <B>pragma</B> Inline (Get_User_Data);
-
-<B>end</B> Terminal_Interface.Curses.Forms.Form_User_Data;
-
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Form --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.10 @</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- form binding.</I>
-<I>-- This module is generated. Please don't change it manually!</I>
-<I>-- Run the generator instead.</I>
-<I>-- |</I>
-<B>with</B> System;
-<B>with</B> Ada.Characters.Latin_1;
-<B>with</B> Interfaces.C;
-
-<B>package</B> Terminal_Interface.Curses.Forms <B>is</B>
-
- <B>pragma</B> Linker_Options ("-lform");
-
-
- Space : Character <B>renames</B> Ada.Characters.Latin_1.Space;
-
- type Field <B>is</B> <B>private</B>;
- type Form <B>is</B> <B>private</B>;
-
- Null_Field : <B>constant</B> Field;
- Null_Form : <B>constant</B> Form;
-
- type Field_Justification <B>is</B> (None,
- Left,
- Center,
- Right);
-
- type Field_Option_Set <B>is</B>
- <B>record</B>
- Visible : Boolean;
- Active : Boolean;
- Public : Boolean;
- Edit : Boolean;
- Wrap : Boolean;
- Blank : Boolean;
- Auto_Skip : Boolean;
- Null_Ok : Boolean;
- Pass_Ok : Boolean;
- Static : Boolean;
- Reserved : Boolean;
- <B>end</B> <B>record</B>;
- <B>pragma</B> Pack (Field_Option_Set);
- <B>pragma</B> Convention (C, Field_Option_Set);
-
- <B>for</B> Field_Option_Set <B>use</B>
- <B>record</B>
- Visible <B>at</B> 0 <B>range</B> 0 .. 0;
- Active <B>at</B> 0 <B>range</B> 1 .. 1;
- Public <B>at</B> 0 <B>range</B> 2 .. 2;
- Edit <B>at</B> 0 <B>range</B> 3 .. 3;
- Wrap <B>at</B> 0 <B>range</B> 4 .. 4;
- Blank <B>at</B> 0 <B>range</B> 5 .. 5;
- Auto_Skip <B>at</B> 0 <B>range</B> 6 .. 6;
- Null_Ok <B>at</B> 0 <B>range</B> 7 .. 7;
- Pass_Ok <B>at</B> 0 <B>range</B> 8 .. 8;
- Static <B>at</B> 0 <B>range</B> 9 .. 9;
- Reserved <B>at</B> 0 <B>range</B> 31 .. 31;
- <B>end</B> <B>record</B>;
- <B>for</B> Field_Option_Set'Size <B>use</B> Interfaces.C.int'Size;
- <I>-- Please note: this rep. clause is generated and may be</I>
- <I>-- different on your system.</I>
-
- Default_Field_Options : Field_Option_Set;
- <I>-- The initial defaults for the field options.</I>
-
- type Form_Option_Set <B>is</B>
- <B>record</B>
- NL_Overload : Boolean;
- BS_Overload : Boolean;
- Reserved : Boolean;
- <B>end</B> <B>record</B>;
- <B>pragma</B> Pack (Form_Option_Set);
- <B>pragma</B> Convention (C, Form_Option_Set);
-
- <B>for</B> Form_Option_Set <B>use</B>
- <B>record</B>
- NL_Overload <B>at</B> 0 <B>range</B> 0 .. 0;
- BS_Overload <B>at</B> 0 <B>range</B> 1 .. 1;
- Reserved <B>at</B> 0 <B>range</B> 31 .. 31;
- <B>end</B> <B>record</B>;
- <B>for</B> Form_Option_Set'Size <B>use</B> Interfaces.C.int'Size;
- <I>-- Please note: this rep. clause is generated and may be</I>
- <I>-- different on your system.</I>
-
- Default_Form_Options : Form_Option_Set;
- <I>-- The initial defaults for the form options.</I>
-
- type Buffer_Number <B>is</B> <B>new</B> Natural;
-
- type Field_Array <B>is</B> <B>array</B> (Positive <B>range</B> <>) <B>of</B> <B>aliased</B> Field;
- <B>pragma</B> Convention (C, Field_Array);
-
- type Field_Array_Access <B>is</B> <B>access</B> Field_Array;
-
- <B>procedure</B> Free (FA : <B>in</B> <B>out</B> Field_Array_Access;
- Free_Fields : <B>in</B> Boolean := False);
- <I>-- Release the memory for an allocated field array</I>
- <I>-- If Free_Fields is True, call Delete() for all the fields in</I>
- <I>-- the array.</I>
-
- <B>subtype</B> Form_Request_Code <B>is</B> Key_Code <B>range</B> (Key_Max + 1) .. (Key_Max + 57);
-
- <I>-- The prefix F_ stands for "Form Request"</I>
- F_Next_Page : <B>constant</B> Form_Request_Code := Key_Max + 1;
- F_Previous_Page : <B>constant</B> Form_Request_Code := Key_Max + 2;
- F_First_Page : <B>constant</B> Form_Request_Code := Key_Max + 3;
- F_Last_Page : <B>constant</B> Form_Request_Code := Key_Max + 4;
-
- F_Next_Field : <B>constant</B> Form_Request_Code := Key_Max + 5;
- F_Previous_Field : <B>constant</B> Form_Request_Code := Key_Max + 6;
- F_First_Field : <B>constant</B> Form_Request_Code := Key_Max + 7;
- F_Last_Field : <B>constant</B> Form_Request_Code := Key_Max + 8;
- F_Sorted_Next_Field : <B>constant</B> Form_Request_Code := Key_Max + 9;
- F_Sorted_Previous_Field : <B>constant</B> Form_Request_Code := Key_Max + 10;
- F_Sorted_First_Field : <B>constant</B> Form_Request_Code := Key_Max + 11;
- F_Sorted_Last_Field : <B>constant</B> Form_Request_Code := Key_Max + 12;
- F_Left_Field : <B>constant</B> Form_Request_Code := Key_Max + 13;
- F_Right_Field : <B>constant</B> Form_Request_Code := Key_Max + 14;
- F_Up_Field : <B>constant</B> Form_Request_Code := Key_Max + 15;
- F_Down_Field : <B>constant</B> Form_Request_Code := Key_Max + 16;
-
- F_Next_Char : <B>constant</B> Form_Request_Code := Key_Max + 17;
- F_Previous_Char : <B>constant</B> Form_Request_Code := Key_Max + 18;
- F_Next_Line : <B>constant</B> Form_Request_Code := Key_Max + 19;
- F_Previous_Line : <B>constant</B> Form_Request_Code := Key_Max + 20;
- F_Next_Word : <B>constant</B> Form_Request_Code := Key_Max + 21;
- F_Previous_Word : <B>constant</B> Form_Request_Code := Key_Max + 22;
- F_Begin_Field : <B>constant</B> Form_Request_Code := Key_Max + 23;
- F_End_Field : <B>constant</B> Form_Request_Code := Key_Max + 24;
- F_Begin_Line : <B>constant</B> Form_Request_Code := Key_Max + 25;
- F_End_Line : <B>constant</B> Form_Request_Code := Key_Max + 26;
- F_Left_Char : <B>constant</B> Form_Request_Code := Key_Max + 27;
- F_Right_Char : <B>constant</B> Form_Request_Code := Key_Max + 28;
- F_Up_Char : <B>constant</B> Form_Request_Code := Key_Max + 29;
- F_Down_Char : <B>constant</B> Form_Request_Code := Key_Max + 30;
-
- F_New_Line : <B>constant</B> Form_Request_Code := Key_Max + 31;
- F_Insert_Char : <B>constant</B> Form_Request_Code := Key_Max + 32;
- F_Insert_Line : <B>constant</B> Form_Request_Code := Key_Max + 33;
- F_Delete_Char : <B>constant</B> Form_Request_Code := Key_Max + 34;
- F_Delete_Previous : <B>constant</B> Form_Request_Code := Key_Max + 35;
- F_Delete_Line : <B>constant</B> Form_Request_Code := Key_Max + 36;
- F_Delete_Word : <B>constant</B> Form_Request_Code := Key_Max + 37;
- F_Clear_EOL : <B>constant</B> Form_Request_Code := Key_Max + 38;
- F_Clear_EOF : <B>constant</B> Form_Request_Code := Key_Max + 39;
- F_Clear_Field : <B>constant</B> Form_Request_Code := Key_Max + 40;
- F_Overlay_Mode : <B>constant</B> Form_Request_Code := Key_Max + 41;
- F_Insert_Mode : <B>constant</B> Form_Request_Code := Key_Max + 42;
-
- <I>-- Vertical Scrolling</I>
- F_ScrollForward_Line : <B>constant</B> Form_Request_Code := Key_Max + 43;
- F_ScrollBackward_Line : <B>constant</B> Form_Request_Code := Key_Max + 44;
- F_ScrollForward_Page : <B>constant</B> Form_Request_Code := Key_Max + 45;
- F_ScrollBackward_Page : <B>constant</B> Form_Request_Code := Key_Max + 46;
- F_ScrollForward_HalfPage : <B>constant</B> Form_Request_Code := Key_Max + 47;
- F_ScrollBackward_HalfPage : <B>constant</B> Form_Request_Code := Key_Max + 48;
-
- <I>-- Horizontal Scrolling</I>
- F_HScrollForward_Char : <B>constant</B> Form_Request_Code := Key_Max + 49;
- F_HScrollBackward_Char : <B>constant</B> Form_Request_Code := Key_Max + 50;
- F_HScrollForward_Line : <B>constant</B> Form_Request_Code := Key_Max + 51;
- F_HScrollBackward_Line : <B>constant</B> Form_Request_Code := Key_Max + 52;
- F_HScrollForward_HalfLine : <B>constant</B> Form_Request_Code := Key_Max + 53;
- F_HScrollBackward_HalfLine : <B>constant</B> Form_Request_Code := Key_Max + 54;
-
- F_Validate_Field : <B>constant</B> Form_Request_Code := Key_Max + 55;
- F_Next_Choice : <B>constant</B> Form_Request_Code := Key_Max + 56;
- F_Previous_Choice : <B>constant</B> Form_Request_Code := Key_Max + 57;
-
- <I>-- For those who like the old 'C' style request names</I>
- REQ_NEXT_PAGE : Form_Request_Code <B>renames</B> F_Next_Page;
- REQ_PREV_PAGE : Form_Request_Code <B>renames</B> F_Previous_Page;
- REQ_FIRST_PAGE : Form_Request_Code <B>renames</B> F_First_Page;
- REQ_LAST_PAGE : Form_Request_Code <B>renames</B> F_Last_Page;
-
- REQ_NEXT_FIELD : Form_Request_Code <B>renames</B> F_Next_Field;
- REQ_PREV_FIELD : Form_Request_Code <B>renames</B> F_Previous_Field;
- REQ_FIRST_FIELD : Form_Request_Code <B>renames</B> F_First_Field;
- REQ_LAST_FIELD : Form_Request_Code <B>renames</B> F_Last_Field;
- REQ_SNEXT_FIELD : Form_Request_Code <B>renames</B> F_Sorted_Next_Field;
- REQ_SPREV_FIELD : Form_Request_Code <B>renames</B> F_Sorted_Previous_Field;
- REQ_SFIRST_FIELD : Form_Request_Code <B>renames</B> F_Sorted_First_Field;
- REQ_SLAST_FIELD : Form_Request_Code <B>renames</B> F_Sorted_Last_Field;
- REQ_LEFT_FIELD : Form_Request_Code <B>renames</B> F_Left_Field;
- REQ_RIGHT_FIELD : Form_Request_Code <B>renames</B> F_Right_Field;
- REQ_UP_FIELD : Form_Request_Code <B>renames</B> F_Up_Field;
- REQ_DOWN_FIELD : Form_Request_Code <B>renames</B> F_Down_Field;
-
- REQ_NEXT_CHAR : Form_Request_Code <B>renames</B> F_Next_Char;
- REQ_PREV_CHAR : Form_Request_Code <B>renames</B> F_Previous_Char;
- REQ_NEXT_LINE : Form_Request_Code <B>renames</B> F_Next_Line;
- REQ_PREV_LINE : Form_Request_Code <B>renames</B> F_Previous_Line;
- REQ_NEXT_WORD : Form_Request_Code <B>renames</B> F_Next_Word;
- REQ_PREV_WORD : Form_Request_Code <B>renames</B> F_Previous_Word;
- REQ_BEG_FIELD : Form_Request_Code <B>renames</B> F_Begin_Field;
- REQ_END_FIELD : Form_Request_Code <B>renames</B> F_End_Field;
- REQ_BEG_LINE : Form_Request_Code <B>renames</B> F_Begin_Line;
- REQ_END_LINE : Form_Request_Code <B>renames</B> F_End_Line;
- REQ_LEFT_CHAR : Form_Request_Code <B>renames</B> F_Left_Char;
- REQ_RIGHT_CHAR : Form_Request_Code <B>renames</B> F_Right_Char;
- REQ_UP_CHAR : Form_Request_Code <B>renames</B> F_Up_Char;
- REQ_DOWN_CHAR : Form_Request_Code <B>renames</B> F_Down_Char;
-
- REQ_NEW_LINE : Form_Request_Code <B>renames</B> F_New_Line;
- REQ_INS_CHAR : Form_Request_Code <B>renames</B> F_Insert_Char;
- REQ_INS_LINE : Form_Request_Code <B>renames</B> F_Insert_Line;
- REQ_DEL_CHAR : Form_Request_Code <B>renames</B> F_Delete_Char;
- REQ_DEL_PREV : Form_Request_Code <B>renames</B> F_Delete_Previous;
- REQ_DEL_LINE : Form_Request_Code <B>renames</B> F_Delete_Line;
- REQ_DEL_WORD : Form_Request_Code <B>renames</B> F_Delete_Word;
- REQ_CLR_EOL : Form_Request_Code <B>renames</B> F_Clear_EOL;
- REQ_CLR_EOF : Form_Request_Code <B>renames</B> F_Clear_EOF;
- REQ_CLR_FIELD : Form_Request_Code <B>renames</B> F_Clear_Field;
- REQ_OVL_MODE : Form_Request_Code <B>renames</B> F_Overlay_Mode;
- REQ_INS_MODE : Form_Request_Code <B>renames</B> F_Insert_Mode;
-
- REQ_SCR_FLINE : Form_Request_Code <B>renames</B> F_ScrollForward_Line;
- REQ_SCR_BLINE : Form_Request_Code <B>renames</B> F_ScrollBackward_Line;
- REQ_SCR_FPAGE : Form_Request_Code <B>renames</B> F_ScrollForward_Page;
- REQ_SCR_BPAGE : Form_Request_Code <B>renames</B> F_ScrollBackward_Page;
- REQ_SCR_FHPAGE : Form_Request_Code <B>renames</B> F_ScrollForward_HalfPage;
- REQ_SCR_BHPAGE : Form_Request_Code <B>renames</B> F_ScrollBackward_HalfPage;
-
- REQ_SCR_FCHAR : Form_Request_Code <B>renames</B> F_HScrollForward_Char;
- REQ_SCR_BCHAR : Form_Request_Code <B>renames</B> F_HScrollBackward_Char;
- REQ_SCR_HFLINE : Form_Request_Code <B>renames</B> F_HScrollForward_Line;
- REQ_SCR_HBLINE : Form_Request_Code <B>renames</B> F_HScrollBackward_Line;
- REQ_SCR_HFHALF : Form_Request_Code <B>renames</B> F_HScrollForward_HalfLine;
- REQ_SCR_HBHALF : Form_Request_Code <B>renames</B> F_HScrollBackward_HalfLine;
-
- REQ_VALIDATION : Form_Request_Code <B>renames</B> F_Validate_Field;
- REQ_NEXT_CHOICE : Form_Request_Code <B>renames</B> F_Next_Choice;
- REQ_PREV_CHOICE : Form_Request_Code <B>renames</B> F_Previous_Choice;
-
-
- <B>procedure</B> Request_Name (Key : <B>in</B> Form_Request_Code;
- Name : <B>out</B> String);
-
- <B>function</B> Request_Name (Key : Form_Request_Code) <B>return</B> String;
- <I>-- Same as function</I>
- <B>pragma</B> Inline (Request_Name);
-
- <I>------------------</I>
- <I>-- Exceptions --</I>
- <I>------------------</I>
- Form_Exception : <B>exception</B>;
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_new.3x.html">form_field_new.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>function</B> Create (Height : Line_Count;
- Width : Column_Count;
- Top : Line_Position;
- Left : Column_Position;
- Off_Screen : Natural := 0;
- More_Buffers : Buffer_Number := Buffer_Number'First)
- <B>return</B> Field;
- <I>-- AKA: <A HREF="form_field_new.3x.html">new_field()</A></I>
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>function</B> New_Field (Height : Line_Count;
- Width : Column_Count;
- Top : Line_Position;
- Left : Column_Position;
- Off_Screen : Natural := 0;
- More_Buffers : Buffer_Number := Buffer_Number'First)
- <B>return</B> Field <B>renames</B> Create;
- <I>-- AKA: <A HREF="form_field_new.3x.html">new_field()</A></I>
-
- <I>-- <A NAME="AFU_3">|</I>
- <B>procedure</B> Delete (Fld : <B>in</B> <B>out</B> Field);
- <I>-- AKA: <A HREF="form_field_new.3x.html">free_field()</A></I>
- <I>-- Reset Fld to Null_Field</I>
-
- <I>-- <A NAME="AFU_4">|</I>
- <B>function</B> Duplicate (Fld : Field;
- Top : Line_Position;
- Left : Column_Position) <B>return</B> Field;
- <I>-- AKA: <A HREF="form_field_new.3x.html">dup_field()</A></I>
-
- <I>-- <A NAME="AFU_5">|</I>
- <B>function</B> Link (Fld : Field;
- Top : Line_Position;
- Left : Column_Position) <B>return</B> Field;
- <I>-- AKA: <A HREF="form_field_new.3x.html">link_field()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_just.3x.html">form_field_just.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_6">|</I>
- <B>procedure</B> Set_Justification (Fld : <B>in</B> Field;
- Just : <B>in</B> Field_Justification := None);
- <I>-- AKA: <A HREF="form_field_just.3x.html">set_field_just()</A></I>
-
- <I>-- <A NAME="AFU_7">|</I>
- <B>function</B> Get_Justification (Fld : Field) <B>return</B> Field_Justification;
- <I>-- AKA: <A HREF="form_field_just.3x.html">field_just()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_buffer.3x.html">form_field_buffer.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_8">|</I>
- <B>procedure</B> Set_Buffer
- (Fld : <B>in</B> Field;
- Buffer : <B>in</B> Buffer_Number := Buffer_Number'First;
- Str : <B>in</B> String);
- <I>-- AKA: <A HREF="form_field_buffer.3x.html">set_field_buffer()</A></I>
-
- <I>-- <A NAME="AFU_9">|</I>
- <B>procedure</B> Get_Buffer
- (Fld : <B>in</B> Field;
- Buffer : <B>in</B> Buffer_Number := Buffer_Number'First;
- Str : <B>out</B> String);
- <I>-- AKA: <A HREF="form_field_buffer.3x.html">field_buffer()</A></I>
-
- <B>function</B> Get_Buffer
- (Fld : <B>in</B> Field;
- Buffer : <B>in</B> Buffer_Number := Buffer_Number'First) <B>return</B> String;
- <I>-- AKA: <A HREF="form_field_buffer.3x.html">field_buffer()</A></I>
- <I>-- Same but as function</I>
-
- <I>-- <A NAME="AFU_10">|</I>
- <B>procedure</B> Set_Status (Fld : <B>in</B> Field;
- Status : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="form_field_buffer.3x.html">set_field_status()</A></I>
-
- <I>-- <A NAME="AFU_11">|</I>
- <B>function</B> Changed (Fld : Field) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="form_field_buffer.3x.html">field_status()</A></I>
-
- <I>-- <A NAME="AFU_12">|</I>
- <B>procedure</B> Set_Maximum_Size (Fld : <B>in</B> Field;
- Max : <B>in</B> Natural := 0);
- <I>-- AKA: <A HREF="form_field_buffer.3x.html">set_field_max()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_opts.3x.html">form_field_opts.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_13">|</I>
- <B>procedure</B> Set_Options (Fld : <B>in</B> Field;
- Options : <B>in</B> Field_Option_Set);
- <I>-- AKA: <A HREF="form_field_opts.3x.html">set_field_opts()</A></I>
-
- <I>-- <A NAME="AFU_14">|</I>
- <B>procedure</B> Switch_Options (Fld : <B>in</B> Field;
- Options : <B>in</B> Field_Option_Set;
- On : Boolean := True);
- <I>-- AKA: <A HREF="form_field_opts.3x.html">field_opts_on()</A></I>
- <I>-- AKA: field_opts_off()</I>
-
- <I>-- <A NAME="AFU_15">|</I>
- <B>procedure</B> Get_Options (Fld : <B>in</B> Field;
- Options : <B>out</B> Field_Option_Set);
- <I>-- AKA: <A HREF="form_field_opts.3x.html">field_opts()</A></I>
-
- <I>-- <A NAME="AFU_16">|</I>
- <B>function</B> Get_Options (Fld : Field := Null_Field)
- <B>return</B> Field_Option_Set;
- <I>-- AKA: <A HREF="form_field_opts.3x.html">field_opts()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_attributes.3x.html">form_field_attributes.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_17">|</I>
- <B>procedure</B> Set_Foreground
- (Fld : <B>in</B> Field;
- Fore : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">set_field_fore()</A></I>
-
- <I>-- <A NAME="AFU_18">|</I>
- <B>procedure</B> Foreground (Fld : <B>in</B> Field;
- Fore : <B>out</B> Character_Attribute_Set);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">field_fore()</A></I>
-
- <I>-- <A NAME="AFU_19">|</I>
- <B>procedure</B> Foreground (Fld : <B>in</B> Field;
- Fore : <B>out</B> Character_Attribute_Set;
- Color : <B>out</B> Color_Pair);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">field_fore()</A></I>
-
- <I>-- <A NAME="AFU_20">|</I>
- <B>procedure</B> Set_Background
- (Fld : <B>in</B> Field;
- Back : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">set_field_back()</A></I>
-
- <I>-- <A NAME="AFU_21">|</I>
- <B>procedure</B> Background (Fld : <B>in</B> Field;
- Back : <B>out</B> Character_Attribute_Set);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">field_back()</A></I>
-
- <I>-- <A NAME="AFU_22">|</I>
- <B>procedure</B> Background (Fld : <B>in</B> Field;
- Back : <B>out</B> Character_Attribute_Set;
- Color : <B>out</B> Color_Pair);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">field_back()</A></I>
-
- <I>-- <A NAME="AFU_23">|</I>
- <B>procedure</B> Set_Pad_Character (Fld : <B>in</B> Field;
- Pad : <B>in</B> Character := Space);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">set_field_pad()</A></I>
-
- <I>-- <A NAME="AFU_24">|</I>
- <B>procedure</B> Pad_Character (Fld : <B>in</B> Field;
- Pad : <B>out</B> Character);
- <I>-- AKA: <A HREF="form_field_attributes.3x.html">field_pad()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field_info.3x.html">form_field_info.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_25">|</I>
- <B>procedure</B> Info (Fld : <B>in</B> Field;
- Lines : <B>out</B> Line_Count;
- Columns : <B>out</B> Column_Count;
- First_Row : <B>out</B> Line_Position;
- First_Column : <B>out</B> Column_Position;
- Off_Screen : <B>out</B> Natural;
- Additional_Buffers : <B>out</B> Buffer_Number);
- <I>-- AKA: <A HREF="form_field_info.3x.html">field_info()</A></I>
-
- <I>-- <A NAME="AFU_26">|</I>
- <B>procedure</B> Dynamic_Info (Fld : <B>in</B> Field;
- Lines : <B>out</B> Line_Count;
- Columns : <B>out</B> Column_Count;
- Max : <B>out</B> Natural);
- <I>-- AKA: <A HREF="form_field_info.3x.html">dynamic_field_info()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_win.3x.html">form_win.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_27">|</I>
- <B>procedure</B> Set_Window (Frm : <B>in</B> Form;
- Win : <B>in</B> Window);
- <I>-- AKA: <A HREF="form_win.3x.html">set_form_win()</A></I>
-
- <I>-- <A NAME="AFU_28">|</I>
- <B>function</B> Get_Window (Frm : Form) <B>return</B> Window;
- <I>-- AKA: <A HREF="form_win.3x.html">form_win()</A></I>
-
- <I>-- <A NAME="AFU_29">|</I>
- <B>procedure</B> Set_Sub_Window (Frm : <B>in</B> Form;
- Win : <B>in</B> Window);
- <I>-- AKA: <A HREF="form_win.3x.html">set_form_sub()</A></I>
-
- <I>-- <A NAME="AFU_30">|</I>
- <B>function</B> Get_Sub_Window (Frm : Form) <B>return</B> Window;
- <I>-- AKA: <A HREF="form_win.3x.html">form_sub()</A></I>
-
- <I>-- <A NAME="AFU_31">|</I>
- <B>procedure</B> Scale (Frm : <B>in</B> Form;
- Lines : <B>out</B> Line_Count;
- Columns : <B>out</B> Column_Count);
- <I>-- AKA: <A HREF="form_win.3x.html">scale_form()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_hook.3x.html">form_hook.3x</A></I>
- <I>-- |=====================================================================</I>
-
- type Form_Hook_Function <B>is</B> <B>access</B> <B>procedure</B> (Frm : <B>in</B> Form);
- <B>pragma</B> Convention (C, Form_Hook_Function);
-
- <I>-- <A NAME="AFU_32">|</I>
- <B>procedure</B> Set_Field_Init_Hook (Frm : <B>in</B> Form;
- Proc : <B>in</B> Form_Hook_Function);
- <I>-- AKA: <A HREF="form_hook.3x.html">set_field_init()</A></I>
-
- <I>-- <A NAME="AFU_33">|</I>
- <B>procedure</B> Set_Field_Term_Hook (Frm : <B>in</B> Form;
- Proc : <B>in</B> Form_Hook_Function);
- <I>-- AKA: <A HREF="form_hook.3x.html">set_field_term()</A></I>
-
- <I>-- <A NAME="AFU_34">|</I>
- <B>procedure</B> Set_Form_Init_Hook (Frm : <B>in</B> Form;
- Proc : <B>in</B> Form_Hook_Function);
- <I>-- AKA: <A HREF="form_hook.3x.html">set_form_init()</A></I>
-
- <I>-- <A NAME="AFU_35">|</I>
- <B>procedure</B> Set_Form_Term_Hook (Frm : <B>in</B> Form;
- Proc : <B>in</B> Form_Hook_Function);
- <I>-- AKA: <A HREF="form_hook.3x.html">set_form_term()</A></I>
-
- <I>-- <A NAME="AFU_36">|</I>
- <B>function</B> Get_Field_Init_Hook (Frm : Form) <B>return</B> Form_Hook_Function;
- <I>-- AKA: <A HREF="form_hook.3x.html">field_init()</A></I>
- <B>pragma</B> Import (C, Get_Field_Init_Hook, "field_init");
-
- <I>-- <A NAME="AFU_37">|</I>
- <B>function</B> Get_Field_Term_Hook (Frm : Form) <B>return</B> Form_Hook_Function;
- <I>-- AKA: <A HREF="form_hook.3x.html">field_term()</A></I>
- <B>pragma</B> Import (C, Get_Field_Term_Hook, "field_term");
-
- <I>-- <A NAME="AFU_38">|</I>
- <B>function</B> Get_Form_Init_Hook (Frm : Form) <B>return</B> Form_Hook_Function;
- <I>-- AKA: <A HREF="form_hook.3x.html">form_init()</A></I>
- <B>pragma</B> Import (C, Get_Form_Init_Hook, "form_init");
-
- <I>-- <A NAME="AFU_39">|</I>
- <B>function</B> Get_Form_Term_Hook (Frm : Form) <B>return</B> Form_Hook_Function;
- <I>-- AKA: <A HREF="form_hook.3x.html">form_term()</A></I>
- <B>pragma</B> Import (C, Get_Form_Term_Hook, "form_term");
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_field.3x.html">form_field.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_40">|</I>
- <B>procedure</B> Redefine (Frm : <B>in</B> Form;
- Flds : <B>in</B> Field_Array_Access);
- <I>-- AKA: <A HREF="form_field.3x.html">set_form_fields()</A></I>
-
- <I>-- <A NAME="AFU_41">|</I>
- <B>procedure</B> Set_Fields (Frm : <B>in</B> Form;
- Flds : <B>in</B> Field_Array_Access) <B>renames</B> Redefine;
- <I>-- AKA: <A HREF="form_field.3x.html">set_form_fields()</A></I>
-
- <I>-- <A NAME="AFU_42">|</I>
- <B>function</B> Fields (Frm : Form;
- Index : Positive) <B>return</B> Field;
- <I>-- AKA: <A HREF="form_field.3x.html">form_fields()</A></I>
-
- <I>-- <A NAME="AFU_43">|</I>
- <B>function</B> Field_Count (Frm : Form) <B>return</B> Natural;
- <I>-- AKA: <A HREF="form_field.3x.html">field_count()</A></I>
-
- <I>-- <A NAME="AFU_44">|</I>
- <B>procedure</B> Move (Fld : <B>in</B> Field;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="form_field.3x.html">move_field()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_new.3x.html">form_new.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_45">|</I>
- <B>function</B> Create (Fields : Field_Array_Access) <B>return</B> Form;
- <I>-- AKA: <A HREF="form_new.3x.html">new_form()</A></I>
-
- <I>-- <A NAME="AFU_46">|</I>
- <B>function</B> New_Form (Fields : Field_Array_Access) <B>return</B> Form
- <B>renames</B> Create;
- <I>-- AKA: <A HREF="form_new.3x.html">new_form()</A></I>
-
- <I>-- <A NAME="AFU_47">|</I>
- <B>procedure</B> Delete (Frm : <B>in</B> <B>out</B> Form);
- <I>-- AKA: <A HREF="form_new.3x.html">free_form()</A></I>
- <I>-- Reset Frm to Null_Form</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_opts.3x.html">form_opts.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_48">|</I>
- <B>procedure</B> Set_Options (Frm : <B>in</B> Form;
- Options : <B>in</B> Form_Option_Set);
- <I>-- AKA: <A HREF="form_opts.3x.html">set_form_opts()</A></I>
-
- <I>-- <A NAME="AFU_49">|</I>
- <B>procedure</B> Switch_Options (Frm : <B>in</B> Form;
- Options : <B>in</B> Form_Option_Set;
- On : Boolean := True);
- <I>-- AKA: <A HREF="form_opts.3x.html">form_opts_on()</A></I>
- <I>-- AKA: form_opts_off()</I>
-
- <I>-- <A NAME="AFU_50">|</I>
- <B>procedure</B> Get_Options (Frm : <B>in</B> Form;
- Options : <B>out</B> Form_Option_Set);
- <I>-- AKA: <A HREF="form_opts.3x.html">form_opts()</A></I>
-
- <I>-- <A NAME="AFU_51">|</I>
- <B>function</B> Get_Options (Frm : Form := Null_Form) <B>return</B> Form_Option_Set;
- <I>-- AKA: <A HREF="form_opts.3x.html">form_opts()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_post.3x.html">form_post.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_52">|</I>
- <B>procedure</B> Post (Frm : <B>in</B> Form;
- Post : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="form_post.3x.html">post_form()</A></I>
- <I>-- AKA: unpost_form()</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_cursor.3x.html">form_cursor.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_53">|</I>
- <B>procedure</B> Position_Cursor (Frm : Form);
- <I>-- AKA: <A HREF="form_cursor.3x.html">pos_form_cursor()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_data.3x.html">form_data.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_54">|</I>
- <B>function</B> Data_Ahead (Frm : Form) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="form_data.3x.html">data_ahead()</A></I>
-
- <I>-- <A NAME="AFU_55">|</I>
- <B>function</B> Data_Behind (Frm : Form) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="form_data.3x.html">data_behind()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_driver.3x.html">form_driver.3x</A></I>
- <I>-- |=====================================================================</I>
-
- type Driver_Result <B>is</B> (Form_Ok,
- Request_Denied,
- Unknown_Request,
- Invalid_Field);
-
- <I>-- <A NAME="AFU_56">|</I>
- <B>function</B> Driver (Frm : Form;
- Key : Key_Code) <B>return</B> Driver_Result;
- <I>-- AKA: <A HREF="form_driver.3x.html">form_driver()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_page.3x.html">form_page.3x</A></I>
- <I>-- |=====================================================================</I>
-
- type Page_Number <B>is</B> <B>new</B> Natural;
-
- <I>-- <A NAME="AFU_57">|</I>
- <B>procedure</B> Set_Current (Frm : <B>in</B> Form;
- Fld : <B>in</B> Field);
- <I>-- AKA: <A HREF="form_page.3x.html">set_current_field()</A></I>
-
- <I>-- <A NAME="AFU_58">|</I>
- <B>function</B> Current (Frm : <B>in</B> Form) <B>return</B> Field;
- <I>-- AKA: <A HREF="form_page.3x.html">current_field()</A></I>
-
- <I>-- <A NAME="AFU_59">|</I>
- <B>procedure</B> Set_Page (Frm : <B>in</B> Form;
- Page : <B>in</B> Page_Number := Page_Number'First);
- <I>-- AKA: <A HREF="form_page.3x.html">set_form_page()</A></I>
-
- <I>-- <A NAME="AFU_60">|</I>
- <B>function</B> Page (Frm : Form) <B>return</B> Page_Number;
- <I>-- AKA: <A HREF="form_page.3x.html">form_page()</A></I>
-
- <I>-- <A NAME="AFU_61">|</I>
- <B>function</B> Get_Index (Fld : Field) <B>return</B> Positive;
- <I>-- AKA: <A HREF="form_page.3x.html">field_index()</A></I>
- <I>-- Please note that in this binding we start the numbering of fields</I>
- <I>-- with 1. So this is number is one more than you get from the low</I>
- <I>-- level call.</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="form_new_page.3x.html">form_new_page.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_62">|</I>
- <B>procedure</B> Set_New_Page (Fld : <B>in</B> Field;
- New_Page : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="form_new_page.3x.html">set_new_page()</A></I>
-
- <I>-- <A NAME="AFU_63">|</I>
- <B>function</B> Is_New_Page (Fld : Field) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="form_new_page.3x.html">new_page()</A></I>
-
-
-<I>------------------------------------------------------------------------------</I>
-<B>private</B>
-
- type Field <B>is</B> <B>new</B> System.Address;
- type Form <B>is</B> <B>new</B> System.Address;
-
- Null_Field : <B>constant</B> Field := Field (System.Null_Address);
- Null_Form : <B>constant</B> Form := Form (System.Null_Address);
-
- Generation_Bit_Order : <B>constant</B> System.Bit_Order := System.Low_Order_First;
- <I>-- This constant may be different on your system.</I>
-
-<B>end</B> Terminal_Interface.Curses.Forms;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Menus.Item_User_Data --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.3 @</I>
-<I>------------------------------------------------------------------------------</I>
-
-<B>generic</B>
- type User <B>is</B> <B>limited</B> <B>private</B>;
- type User_Access <B>is</B> <B>access</B> User;
-<B>package</B> Terminal_Interface.Curses.Menus.Item_User_Data <B>is</B>
-
- <I>-- The binding uses the same user pointer for menu items</I>
- <I>-- as the low level C implementation. So you can safely</I>
- <I>-- read or write the user pointer also with the C routines</I>
- <I>--</I>
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="mitem_userptr.3x.html">mitem_userptr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>procedure</B> Set_User_Data (Itm : <B>in</B> Item;
- Data : <B>in</B> User_Access);
- <I>-- AKA: <A HREF="mitem_userptr.3x.html">set_item_userptr</A></I>
- <B>pragma</B> Inline (Set_User_Data);
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>procedure</B> Get_User_Data (Itm : <B>in</B> Item;
- Data : <B>out</B> User_Access);
- <I>-- AKA: <A HREF="mitem_userptr.3x.html">item_userptr</A></I>
- <B>pragma</B> Inline (Get_User_Data);
-
-<B>end</B> Terminal_Interface.Curses.Menus.Item_User_Data;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Menus.Menu_User_Data --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.3 @</I>
-<I>------------------------------------------------------------------------------</I>
-
-<B>generic</B>
- type User <B>is</B> <B>limited</B> <B>private</B>;
- type User_Access <B>is</B> <B>access</B> User;
-<B>package</B> Terminal_Interface.Curses.Menus.Menu_User_Data <B>is</B>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_userptr.3x.html">menu_userptr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>procedure</B> Set_User_Data (Men : <B>in</B> Menu;
- Data : <B>in</B> User_Access);
- <I>-- AKA: <A HREF="menu_userptr.3x.html">set_menu_userptr</A></I>
- <B>pragma</B> Inline (Set_User_Data);
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>procedure</B> Get_User_Data (Men : <B>in</B> Menu;
- Data : <B>out</B> User_Access);
- <I>-- AKA: <A HREF="menu_userptr.3x.html">menu_userptr</A></I>
- <B>pragma</B> Inline (Get_User_Data);
-
-<B>end</B> Terminal_Interface.Curses.Menus.Menu_User_Data;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Menu --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.8 @</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- menu binding.</I>
-<I>-- This module is generated. Please don't change it manually!</I>
-<I>-- Run the generator instead.</I>
-<I>-- |</I>
-<B>with</B> System;
-<B>with</B> Interfaces.C;
-<B>with</B> Ada.Characters.Latin_1;
-
-<B>package</B> Terminal_Interface.Curses.Menus <B>is</B>
-
- <B>pragma</B> Linker_Options ("-lmenu");
-
-
-
- Space : Character <B>renames</B> Ada.Characters.Latin_1.Space;
-
- type Item <B>is</B> <B>private</B>;
- type Menu <B>is</B> <B>private</B>;
-
- <I>---------------------------</I>
- <I>-- Interface constants --</I>
- <I>---------------------------</I>
- Null_Item : <B>constant</B> Item;
- Null_Menu : <B>constant</B> Menu;
-
- <B>subtype</B> Menu_Request_Code <B>is</B> Key_Code
- <B>range</B> (Key_Max + 1) .. (Key_Max + 17);
-
- <I>-- The prefix M_ stands for "Menu Request"</I>
- M_Left_Item : <B>constant</B> Menu_Request_Code := Key_Max + 1;
- M_Right_Item : <B>constant</B> Menu_Request_Code := Key_Max + 2;
- M_Up_Item : <B>constant</B> Menu_Request_Code := Key_Max + 3;
- M_Down_Item : <B>constant</B> Menu_Request_Code := Key_Max + 4;
- M_ScrollUp_Line : <B>constant</B> Menu_Request_Code := Key_Max + 5;
- M_ScrollDown_Line : <B>constant</B> Menu_Request_Code := Key_Max + 6;
- M_ScrollDown_Page : <B>constant</B> Menu_Request_Code := Key_Max + 7;
- M_ScrollUp_Page : <B>constant</B> Menu_Request_Code := Key_Max + 8;
- M_First_Item : <B>constant</B> Menu_Request_Code := Key_Max + 9;
- M_Last_Item : <B>constant</B> Menu_Request_Code := Key_Max + 10;
- M_Next_Item : <B>constant</B> Menu_Request_Code := Key_Max + 11;
- M_Previous_Item : <B>constant</B> Menu_Request_Code := Key_Max + 12;
- M_Toggle_Item : <B>constant</B> Menu_Request_Code := Key_Max + 13;
- M_Clear_Pattern : <B>constant</B> Menu_Request_Code := Key_Max + 14;
- M_Back_Pattern : <B>constant</B> Menu_Request_Code := Key_Max + 15;
- M_Next_Match : <B>constant</B> Menu_Request_Code := Key_Max + 16;
- M_Previous_Match : <B>constant</B> Menu_Request_Code := Key_Max + 17;
-
- <I>-- For those who like the old 'C' names for the request codes</I>
- REQ_LEFT_ITEM : Menu_Request_Code <B>renames</B> M_Left_Item;
- REQ_RIGHT_ITEM : Menu_Request_Code <B>renames</B> M_Right_Item;
- REQ_UP_ITEM : Menu_Request_Code <B>renames</B> M_Up_Item;
- REQ_DOWN_ITEM : Menu_Request_Code <B>renames</B> M_Down_Item;
- REQ_SCR_ULINE : Menu_Request_Code <B>renames</B> M_ScrollUp_Line;
- REQ_SCR_DLINE : Menu_Request_Code <B>renames</B> M_ScrollDown_Line;
- REQ_SCR_DPAGE : Menu_Request_Code <B>renames</B> M_ScrollDown_Page;
- REQ_SCR_UPAGE : Menu_Request_Code <B>renames</B> M_ScrollUp_Page;
- REQ_FIRST_ITEM : Menu_Request_Code <B>renames</B> M_First_Item;
- REQ_LAST_ITEM : Menu_Request_Code <B>renames</B> M_Last_Item;
- REQ_NEXT_ITEM : Menu_Request_Code <B>renames</B> M_Next_Item;
- REQ_PREV_ITEM : Menu_Request_Code <B>renames</B> M_Previous_Item;
- REQ_TOGGLE_ITEM : Menu_Request_Code <B>renames</B> M_Toggle_Item;
- REQ_CLEAR_PATTERN : Menu_Request_Code <B>renames</B> M_Clear_Pattern;
- REQ_BACK_PATTERN : Menu_Request_Code <B>renames</B> M_Back_Pattern;
- REQ_NEXT_MATCH : Menu_Request_Code <B>renames</B> M_Next_Match;
- REQ_PREV_MATCH : Menu_Request_Code <B>renames</B> M_Previous_Match;
-
- <B>procedure</B> Request_Name (Key : <B>in</B> Menu_Request_Code;
- Name : <B>out</B> String);
-
- <B>function</B> Request_Name (Key : Menu_Request_Code) <B>return</B> String;
- <I>-- Same as function</I>
-
- <I>------------------</I>
- <I>-- Exceptions --</I>
- <I>------------------</I>
-
- Menu_Exception : <B>exception</B>;
- <I>--</I>
- <I>-- Menu options</I>
- <I>--</I>
-
- type Menu_Option_Set <B>is</B>
- <B>record</B>
- One_Valued : Boolean;
- Show_Descriptions : Boolean;
- Row_Major_Order : Boolean;
- Ignore_Case : Boolean;
- Show_Matches : Boolean;
- Non_Cyclic : Boolean;
- Reserved : Boolean;
- <B>end</B> <B>record</B>;
- <B>pragma</B> Pack (Menu_Option_Set);
- <B>pragma</B> Convention (C, Menu_Option_Set);
-
- <B>for</B> Menu_Option_Set <B>use</B>
- <B>record</B>
- One_Valued <B>at</B> 0 <B>range</B> 0 .. 0;
- Show_Descriptions <B>at</B> 0 <B>range</B> 1 .. 1;
- Row_Major_Order <B>at</B> 0 <B>range</B> 2 .. 2;
- Ignore_Case <B>at</B> 0 <B>range</B> 3 .. 3;
- Show_Matches <B>at</B> 0 <B>range</B> 4 .. 4;
- Non_Cyclic <B>at</B> 0 <B>range</B> 5 .. 5;
- Reserved <B>at</B> 0 <B>range</B> 31 .. 31;
- <B>end</B> <B>record</B>;
- <B>for</B> Menu_Option_Set'Size <B>use</B> Interfaces.C.int'Size;
- <I>-- Please note: this rep. clause is generated and may be</I>
- <I>-- different on your system.</I>
-
- Default_Menu_Options : Menu_Option_Set;
- <I>-- Initial default options for a menu.</I>
-
- <I>--</I>
- <I>-- Item options</I>
- <I>--</I>
- type Item_Option_Set <B>is</B>
- <B>record</B>
- Selectable : Boolean;
- Reserved : Boolean;
- <B>end</B> <B>record</B>;
- <B>pragma</B> Pack (Item_Option_Set);
- <B>pragma</B> Convention (C, Item_Option_Set);
-
- <B>for</B> Item_Option_Set <B>use</B>
- <B>record</B>
- Selectable <B>at</B> 0 <B>range</B> 0 .. 0;
- Reserved <B>at</B> 0 <B>range</B> 31 .. 31;
- <B>end</B> <B>record</B>;
- <B>for</B> Item_Option_Set'Size <B>use</B> Interfaces.C.int'Size;
- <I>-- Please note: this rep. clause is generated and may be</I>
- <I>-- different on your system.</I>
-
- Default_Item_Options : Item_Option_Set;
- <I>-- Initial default options for an item.</I>
-
- <I>--</I>
- <I>-- Item Array</I>
- <I>--</I>
- type Item_Array <B>is</B> <B>array</B> (Positive <B>range</B> <>) <B>of</B> <B>aliased</B> Item;
- <B>pragma</B> Convention (C, Item_Array);
-
- type Item_Array_Access <B>is</B> <B>access</B> Item_Array;
-
- <B>procedure</B> Free (IA : <B>in</B> <B>out</B> Item_Array_Access;
- Free_Items : Boolean := False);
- <I>-- Release the memory for an allocated item array</I>
- <I>-- If Free_Items is True, call Delete() for all the items in</I>
- <I>-- the array.</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="mitem_new.3x.html">mitem_new.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>function</B> Create (Name : String;
- Description : String := "") return Item;
- <I>-- AKA: <A HREF="mitem_new.3x.html">new_item()</A></I>
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>function</B> New_Item (Name : String;
- Description : String := "") return Item
- <B>renames</B> Create;
- <I>-- AKA: <A HREF="mitem_new.3x.html">new_item()</A></I>
-
- <I>-- <A NAME="AFU_3">|</I>
- <B>procedure</B> Delete (Itm : <B>in</B> <B>out</B> Item);
- <I>-- AKA: <A HREF="mitem_new.3x.html">free_item()</A></I>
- <I>-- Resets Itm to Null_Item</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="mitem_value.3x.html">mitem_value.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_4">|</I>
- <B>procedure</B> Set_Value (Itm : <B>in</B> Item;
- Value : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="mitem_value.3x.html">set_item_value()</A></I>
-
- <I>-- <A NAME="AFU_5">|</I>
- <B>function</B> Value (Itm : Item) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="mitem_value.3x.html">item_value()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="mitem_visible.3x.html">mitem_visible.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_6">|</I>
- <B>function</B> Visible (Itm : Item) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="mitem_visible.3x.html">item_visible()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="mitem_opts.3x.html">mitem_opts.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_7">|</I>
- <B>procedure</B> Set_Options (Itm : <B>in</B> Item;
- Options : <B>in</B> Item_Option_Set);
- <I>-- AKA: <A HREF="mitem_opts.3x.html">set_item_opts()</A></I>
-
- <I>-- <A NAME="AFU_8">|</I>
- <B>procedure</B> Switch_Options (Itm : <B>in</B> Item;
- Options : <B>in</B> Item_Option_Set;
- On : Boolean := True);
- <I>-- AKA: <A HREF="mitem_opts.3x.html">item_opts_on()</A></I>
- <I>-- AKA: item_opts_off()</I>
-
- <I>-- <A NAME="AFU_9">|</I>
- <B>procedure</B> Get_Options (Itm : <B>in</B> Item;
- Options : <B>out</B> Item_Option_Set);
- <I>-- AKA: <A HREF="mitem_opts.3x.html">item_opts()</A></I>
-
- <I>-- <A NAME="AFU_10">|</I>
- <B>function</B> Get_Options (Itm : Item := Null_Item) <B>return</B> Item_Option_Set;
- <I>-- AKA: <A HREF="mitem_opts.3x.html">item_opts()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="mitem_name.3x.html">mitem_name.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_11">|</I>
- <B>procedure</B> Name (Itm : <B>in</B> Item;
- Name : <B>out</B> String);
- <I>-- AKA: <A HREF="mitem_name.3x.html">item_name()</A></I>
- <B>function</B> Name (Itm : Item) <B>return</B> String;
- <I>-- AKA: <A HREF="mitem_name.3x.html">item_name()</A></I>
- <I>-- Implemented as function</I>
-
- <I>-- <A NAME="AFU_12">|</I>
- <B>procedure</B> Description (Itm : <B>in</B> Item;
- Description : <B>out</B> String);
- <I>-- AKA: <A HREF="mitem_name.3x.html">item_description();</A></I>
-
- <B>function</B> Description (Itm : Item) <B>return</B> String;
- <I>-- AKA: <A HREF="mitem_name.3x.html">item_description();</A></I>
- <I>-- Implemented as function</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="mitem_current.3x.html">mitem_current.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_13">|</I>
- <B>procedure</B> Set_Current (Men : <B>in</B> Menu;
- Itm : <B>in</B> Item);
- <I>-- AKA: <A HREF="mitem_current.3x.html">set_current_item()</A></I>
-
- <I>-- <A NAME="AFU_14">|</I>
- <B>function</B> Current (Men : Menu) <B>return</B> Item;
- <I>-- AKA: <A HREF="mitem_current.3x.html">current_item()</A></I>
-
- <I>-- <A NAME="AFU_15">|</I>
- <B>procedure</B> Set_Top_Row (Men : <B>in</B> Menu;
- Line : <B>in</B> Line_Position);
- <I>-- AKA: <A HREF="mitem_current.3x.html">set_top_row()</A></I>
-
- <I>-- <A NAME="AFU_16">|</I>
- <B>function</B> Top_Row (Men : Menu) <B>return</B> Line_Position;
- <I>-- AKA: <A HREF="mitem_current.3x.html">top_row()</A></I>
-
- <I>-- <A NAME="AFU_17">|</I>
- <B>function</B> Get_Index (Itm : Item) <B>return</B> Positive;
- <I>-- AKA: <A HREF="mitem_current.3x.html">item_index()</A></I>
- <I>-- Please note that in this binding we start the numbering of items</I>
- <I>-- with 1. So this is number is one more than you get from the low</I>
- <I>-- level call.</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_post.3x.html">menu_post.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_18">|</I>
- <B>procedure</B> Post (Men : <B>in</B> Menu;
- Post : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="menu_post.3x.html">post_menu()</A></I>
- <I>-- AKA: unpost_menu()</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_opts.3x.html">menu_opts.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_19">|</I>
- <B>procedure</B> Set_Options (Men : <B>in</B> Menu;
- Options : <B>in</B> Menu_Option_Set);
- <I>-- AKA: <A HREF="menu_opts.3x.html">set_menu_opts()</A></I>
-
- <I>-- <A NAME="AFU_20">|</I>
- <B>procedure</B> Switch_Options (Men : <B>in</B> Menu;
- Options : <B>in</B> Menu_Option_Set;
- On : Boolean := True);
- <I>-- AKA: <A HREF="menu_opts.3x.html">menu_opts_on()</A></I>
- <I>-- AKA: menu_opts_off()</I>
-
- <I>-- <A NAME="AFU_21">|</I>
- <B>procedure</B> Get_Options (Men : <B>in</B> Menu;
- Options : <B>out</B> Menu_Option_Set);
- <I>-- AKA: <A HREF="menu_opts.3x.html">menu_opts()</A></I>
-
- <I>-- <A NAME="AFU_22">|</I>
- <B>function</B> Get_Options (Men : Menu := Null_Menu) <B>return</B> Menu_Option_Set;
- <I>-- AKA: <A HREF="menu_opts.3x.html">menu_opts()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_win.3x.html">menu_win.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_23">|</I>
- <B>procedure</B> Set_Window (Men : <B>in</B> Menu;
- Win : <B>in</B> Window);
- <I>-- AKA: <A HREF="menu_win.3x.html">set_menu_win()</A></I>
-
- <I>-- <A NAME="AFU_24">|</I>
- <B>function</B> Get_Window (Men : Menu) <B>return</B> Window;
- <I>-- AKA: <A HREF="menu_win.3x.html">menu_win()</A></I>
-
- <I>-- <A NAME="AFU_25">|</I>
- <B>procedure</B> Set_Sub_Window (Men : <B>in</B> Menu;
- Win : <B>in</B> Window);
- <I>-- AKA: <A HREF="menu_win.3x.html">set_menu_sub()</A></I>
-
- <I>-- <A NAME="AFU_26">|</I>
- <B>function</B> Get_Sub_Window (Men : Menu) <B>return</B> Window;
- <I>-- AKA: <A HREF="menu_win.3x.html">menu_sub()</A></I>
-
- <I>-- <A NAME="AFU_27">|</I>
- <B>procedure</B> Scale (Men : <B>in</B> Menu;
- Lines : <B>out</B> Line_Count;
- Columns : <B>out</B> Column_Count);
- <I>-- AKA: <A HREF="menu_win.3x.html">scale_menu()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_cursor.3x.html">menu_cursor.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_28">|</I>
- <B>procedure</B> Position_Cursor (Men : Menu);
- <I>-- AKA: <A HREF="menu_cursor.3x.html">pos_menu_cursor()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_mark.3x.html">menu_mark.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_29">|</I>
- <B>procedure</B> Set_Mark (Men : <B>in</B> Menu;
- Mark : <B>in</B> String);
- <I>-- AKA: <A HREF="menu_mark.3x.html">set_menu_mark()</A></I>
-
- <I>-- <A NAME="AFU_30">|</I>
- <B>procedure</B> Mark (Men : <B>in</B> Menu;
- Mark : <B>out</B> String);
- <I>-- AKA: <A HREF="menu_mark.3x.html">menu_mark()</A></I>
-
- <B>function</B> Mark (Men : Menu) <B>return</B> String;
- <I>-- AKA: <A HREF="menu_mark.3x.html">menu_mark()</A></I>
- <I>-- Implemented as function</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_attribs.3x.html">menu_attribs.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_31">|</I>
- <B>procedure</B> Set_Foreground
- (Men : <B>in</B> Menu;
- Fore : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">set_menu_fore()</A></I>
-
- <I>-- <A NAME="AFU_32">|</I>
- <B>procedure</B> Foreground (Men : <B>in</B> Menu;
- Fore : <B>out</B> Character_Attribute_Set);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">menu_fore()</A></I>
-
- <I>-- <A NAME="AFU_33">|</I>
- <B>procedure</B> Foreground (Men : <B>in</B> Menu;
- Fore : <B>out</B> Character_Attribute_Set;
- Color : <B>out</B> Color_Pair);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">menu_fore()</A></I>
-
- <I>-- <A NAME="AFU_34">|</I>
- <B>procedure</B> Set_Background
- (Men : <B>in</B> Menu;
- Back : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">set_menu_back()</A></I>
-
- <I>-- <A NAME="AFU_35">|</I>
- <B>procedure</B> Background (Men : <B>in</B> Menu;
- Back : <B>out</B> Character_Attribute_Set);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">menu_back()</A></I>
- <I>-- <A NAME="AFU_36">|</I>
-
- <B>procedure</B> Background (Men : <B>in</B> Menu;
- Back : <B>out</B> Character_Attribute_Set;
- Color : <B>out</B> Color_Pair);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">menu_back()</A></I>
-
- <I>-- <A NAME="AFU_37">|</I>
- <B>procedure</B> Set_Grey
- (Men : <B>in</B> Menu;
- Grey : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">set_menu_grey()</A></I>
-
- <I>-- <A NAME="AFU_38">|</I>
- <B>procedure</B> Grey (Men : <B>in</B> Menu;
- Grey : <B>out</B> Character_Attribute_Set);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">menu_grey()</A></I>
-
- <I>-- <A NAME="AFU_39">|</I>
- <B>procedure</B> Grey
- (Men : <B>in</B> Menu;
- Grey : <B>out</B> Character_Attribute_Set;
- Color : <B>out</B> Color_Pair);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">menu_grey()</A></I>
-
- <I>-- <A NAME="AFU_40">|</I>
- <B>procedure</B> Set_Pad_Character (Men : <B>in</B> Menu;
- Pad : <B>in</B> Character := Space);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">set_menu_pad()</A></I>
-
- <I>-- <A NAME="AFU_41">|</I>
- <B>procedure</B> Pad_Character (Men : <B>in</B> Menu;
- Pad : <B>out</B> Character);
- <I>-- AKA: <A HREF="menu_attribs.3x.html">menu_pad()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_spacing.3x.html">menu_spacing.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_42">|</I>
- <B>procedure</B> Set_Spacing (Men : <B>in</B> Menu;
- Descr : <B>in</B> Column_Position := 0;
- Row : <B>in</B> Line_Position := 0;
- Col : <B>in</B> Column_Position := 0);
- <I>-- AKA: <A HREF="menu_spacing.3x.html">set_menu_spacing()</A></I>
-
- <I>-- <A NAME="AFU_43">|</I>
- <B>procedure</B> Spacing (Men : <B>in</B> Menu;
- Descr : <B>out</B> Column_Position;
- Row : <B>out</B> Line_Position;
- Col : <B>out</B> Column_Position);
- <I>-- AKA: <A HREF="menu_spacing.3x.html">menu_spacing()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_pattern.3x.html">menu_pattern.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_44">|</I>
- <B>function</B> Set_Pattern (Men : Menu;
- Text : String) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="menu_pattern.3x.html">set_menu_pattern()</A></I>
- <I>-- Return TRUE if the pattern matches, FALSE otherwise</I>
-
- <I>-- <A NAME="AFU_45">|</I>
- <B>procedure</B> Pattern (Men : <B>in</B> Menu;
- Text : <B>out</B> String);
- <I>-- AKA: <A HREF="menu_pattern.3x.html">menu_pattern()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_format.3x.html">menu_format.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_46">|</I>
- <B>procedure</B> Set_Format (Men : <B>in</B> Menu;
- Lines : <B>in</B> Line_Count;
- Columns : <B>in</B> Column_Count);
- <I>-- AKA: <A HREF="menu_format.3x.html">set_menu_format()</A></I>
-
- <I>-- <A NAME="AFU_47">|</I>
- <B>procedure</B> Format (Men : <B>in</B> Menu;
- Lines : <B>out</B> Line_Count;
- Columns : <B>out</B> Column_Count);
- <I>-- AKA: <A HREF="menu_format.3x.html">menu_format()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_hook.3x.html">menu_hook.3x</A></I>
- <I>-- |=====================================================================</I>
-
- type Menu_Hook_Function <B>is</B> <B>access</B> <B>procedure</B> (Men : <B>in</B> Menu);
- <B>pragma</B> Convention (C, Menu_Hook_Function);
-
- <I>-- <A NAME="AFU_48">|</I>
- <B>procedure</B> Set_Item_Init_Hook (Men : <B>in</B> Menu;
- Proc : <B>in</B> Menu_Hook_Function);
- <I>-- AKA: <A HREF="menu_hook.3x.html">set_item_init()</A></I>
-
- <I>-- <A NAME="AFU_49">|</I>
- <B>procedure</B> Set_Item_Term_Hook (Men : <B>in</B> Menu;
- Proc : <B>in</B> Menu_Hook_Function);
- <I>-- AKA: <A HREF="menu_hook.3x.html">set_item_term()</A></I>
-
- <I>-- <A NAME="AFU_50">|</I>
- <B>procedure</B> Set_Menu_Init_Hook (Men : <B>in</B> Menu;
- Proc : <B>in</B> Menu_Hook_Function);
- <I>-- AKA: <A HREF="menu_hook.3x.html">set_menu_init()</A></I>
-
- <I>-- <A NAME="AFU_51">|</I>
- <B>procedure</B> Set_Menu_Term_Hook (Men : <B>in</B> Menu;
- Proc : <B>in</B> Menu_Hook_Function);
- <I>-- AKA: <A HREF="menu_hook.3x.html">set_menu_term()</A></I>
-
- <I>-- <A NAME="AFU_52">|</I>
- <B>function</B> Get_Item_Init_Hook (Men : Menu) <B>return</B> Menu_Hook_Function;
- <I>-- AKA: <A HREF="menu_hook.3x.html">item_init()</A></I>
-
- <I>-- <A NAME="AFU_53">|</I>
- <B>function</B> Get_Item_Term_Hook (Men : Menu) <B>return</B> Menu_Hook_Function;
- <I>-- AKA: <A HREF="menu_hook.3x.html">item_term()</A></I>
-
- <I>-- <A NAME="AFU_54">|</I>
- <B>function</B> Get_Menu_Init_Hook (Men : Menu) <B>return</B> Menu_Hook_Function;
- <I>-- AKA: <A HREF="menu_hook.3x.html">menu_init()</A></I>
-
- <I>-- <A NAME="AFU_55">|</I>
- <B>function</B> Get_Menu_Term_Hook (Men : Menu) <B>return</B> Menu_Hook_Function;
- <I>-- AKA: <A HREF="menu_hook.3x.html">menu_term()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_items.3x.html">menu_items.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_56">|</I>
- <B>procedure</B> Redefine (Men : <B>in</B> Menu;
- Items : <B>in</B> Item_Array_Access);
- <I>-- AKA: <A HREF="menu_items.3x.html">set_menu_items()</A></I>
-
- <B>procedure</B> Set_Items (Men : <B>in</B> Menu;
- Items : <B>in</B> Item_Array_Access) <B>renames</B> Redefine;
-
- <I>-- <A NAME="AFU_57">|</I>
- <B>function</B> Items (Men : Menu;
- Index : Positive) <B>return</B> Item;
- <I>-- AKA: <A HREF="menu_items.3x.html">menu_items()</A></I>
-
- <I>-- <A NAME="AFU_58">|</I>
- <B>function</B> Item_Count (Men : Menu) <B>return</B> Natural;
- <I>-- AKA: <A HREF="menu_items.3x.html">item_count()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_new.3x.html">menu_new.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_59">|</I>
- <B>function</B> Create (Items : Item_Array_Access) <B>return</B> Menu;
- <I>-- AKA: <A HREF="menu_new.3x.html">new_menu()</A></I>
-
- <B>function</B> New_Menu (Items : Item_Array_Access) <B>return</B> Menu <B>renames</B> Create;
-
- <I>-- <A NAME="AFU_60">|</I>
- <B>procedure</B> Delete (Men : <B>in</B> <B>out</B> Menu);
- <I>-- AKA: <A HREF="menu_new.3x.html">free_menu()</A></I>
- <I>-- Reset Men to Null_Menu</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="menu_new.3x.html">menu_new.3x</A></I>
- <I>-- |=====================================================================</I>
-
- type Driver_Result <B>is</B> (Menu_Ok,
- Request_Denied,
- Unknown_Request,
- No_Match);
-
- <I>-- <A NAME="AFU_61">|</I>
- <B>function</B> Driver (Men : Menu;
- Key : Key_Code) <B>return</B> Driver_Result;
- <I>-- AKA: <A HREF="menu_new.3x.html">menu_driver()</A></I>
-
-<I>-------------------------------------------------------------------------------</I>
-<B>private</B>
- type Item <B>is</B> <B>new</B> System.Address;
- type Menu <B>is</B> <B>new</B> System.Address;
-
- Null_Item : <B>constant</B> Item := Item (System.Null_Address);
- Null_Menu : <B>constant</B> Menu := Menu (System.Null_Address);
-
- Generation_Bit_Order : <B>constant</B> System.Bit_Order := System.Low_Order_First;
- <I>-- This constant may be different on your system.</I>
-
-<B>end</B> Terminal_Interface.Curses.Menus;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Mouse --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.8 @</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- mouse binding.</I>
-<I>-- This module is generated. Please don't change it manually!</I>
-<I>-- Run the generator instead.</I>
-<I>-- |</I>
-<B>with</B> System;
-
-<B>package</B> Terminal_Interface.Curses.Mouse <B>is</B>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_mouse.3x.html">curs_mouse.3x</A></I>
- <I>-- |=====================================================================</I>
- <I>-- Please note, that in ncurses-1.9.9e documentation mouse support</I>
- <I>-- is still marked as experimental. So also this binding will change</I>
- <I>-- if the ncurses methods change.</I>
- <I>--</I>
- type Event_Mask <B>is</B> <B>private</B>;
- No_Events : <B>constant</B> Event_Mask;
- All_Events : <B>constant</B> Event_Mask;
-
- type Mouse_Button <B>is</B> (Left, <I>-- aka: Button 1</I>
- Middle, <I>-- aka: Button 2</I>
- Right, <I>-- aka: Button 3</I>
- Button4, <I>-- aka: Button 4</I>
- Control, <I>-- Control Key</I>
- Shift, <I>-- Shift Key</I>
- Alt); <I>-- ALT Key</I>
-
- type Button_State <B>is</B> (Released,
- Pressed,
- Clicked,
- Double_Clicked,
- Triple_Clicked);
-
- type Mouse_Event <B>is</B> <B>private</B>;
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_mouse.3x.html">curs_mouse.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <B>function</B> Has_Mouse <B>return</B> Boolean;
- <I>-- Return true if a mouse device is supported, false otherwise.</I>
-
- <B>procedure</B> Register_Reportable_Event
- (B : <B>in</B> Mouse_Button;
- S : <B>in</B> Button_State;
- Mask : <B>in</B> <B>out</B> Event_Mask);
- <I>-- Stores the event described by the button and the state in the mask.</I>
- <I>-- Before you call this the first time, you should init the mask</I>
- <I>-- with the Empty_Mask constant</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>function</B> Start_Mouse (Mask : Event_Mask := All_Events)
- <B>return</B> Event_Mask;
- <I>-- AKA: <A HREF="curs_mouse.3x.html">mousemask()</A></I>
-
- <B>procedure</B> End_Mouse;
- <I>-- Terminates the mouse</I>
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>function</B> Get_Mouse <B>return</B> Mouse_Event;
- <I>-- AKA: <A HREF="curs_mouse.3x.html">getmouse()</A></I>
-
- <B>procedure</B> Get_Event (Event : <B>in</B> Mouse_Event;
- Y : <B>out</B> Line_Position;
- X : <B>out</B> Column_Position;
- Button : <B>out</B> Mouse_Button;
- State : <B>out</B> Button_State);
- <I>-- !!! Warning: X and Y are screen coordinates. Due to ripped of lines they</I>
- <I>-- may not be identical to window coordinates.</I>
-
- <I>-- <A NAME="AFU_3">|</I>
- <B>procedure</B> Unget_Mouse (Event : <B>in</B> Mouse_Event);
- <I>-- AKA: <A HREF="curs_mouse.3x.html">ungetmouse()</A></I>
-
- <I>-- <A NAME="AFU_4">|</I>
- <B>function</B> Enclosed_In_Window (Win : Window := Standard_Window;
- Event : Mouse_Event) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_mouse.3x.html">wenclose()</A></I>
- <I>-- But : use event instead of screen coordinates.</I>
-
- <I>-- <A NAME="AFU_5">|</I>
- <B>function</B> Mouse_Interval (Msec : Natural := 200) <B>return</B> Natural;
- <I>-- AKA: <A HREF="curs_mouse.3x.html">mouseinterval()</A></I>
-
-<B>private</B>
- type Event_Mask <B>is</B> <B>new</B> Interfaces.C.int;
- No_Events : <B>constant</B> Event_Mask := 0;
- All_Events : <B>constant</B> Event_Mask := -1;
-
- type Mouse_Event <B>is</B>
- <B>record</B>
- Id : Integer <B>range</B> Integer (Interfaces.C.short'First) ..
- Integer (Interfaces.C.Short'Last);
- X, Y, Z : Integer <B>range</B> Integer (Interfaces.C.int'First) ..
- Integer (Interfaces.C.int'Last);
- Bstate : Event_Mask;
- <B>end</B> <B>record</B>;
- <B>pragma</B> Convention (C, Mouse_Event);
- <B>pragma</B> Pack (Mouse_Event);
-
- <B>for</B> Mouse_Event <B>use</B>
- <B>record</B>
- Id <B>at</B> 0 <B>range</B> 0 .. 15;
- X <B>at</B> 0 <B>range</B> 32 .. 63;
- Y <B>at</B> 0 <B>range</B> 64 .. 95;
- Z <B>at</B> 0 <B>range</B> 96 .. 127;
- Bstate <B>at</B> 0 <B>range</B> 128 .. 159;
- <B>end</B> <B>record</B>;
- <I>-- Please note: this rep. clause is generated and may be</I>
- <I>-- different on your system.</I>
-
- Generation_Bit_Order : <B>constant</B> System.Bit_Order := System.Low_Order_First;
- <I>-- This constant may be different on your system.</I>
-
-<B>end</B> Terminal_Interface.Curses.Mouse;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Panels.User_Data --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.3 @</I>
-<I>------------------------------------------------------------------------------</I>
-
-<B>generic</B>
- type User <B>is</B> <B>limited</B> <B>private</B>;
- type User_Access <B>is</B> <B>access</B> <B>all</B> User;
-<B>package</B> Terminal_Interface.Curses.Panels.User_Data <B>is</B>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="panel.3x.html">panel.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>procedure</B> Set_User_Data (Pan : <B>in</B> Panel;
- Data : <B>in</B> User_Access);
- <I>-- AKA: <A HREF="panel.3x.html">set_panel_userptr</A></I>
- <B>pragma</B> Convention (C, Set_User_Data);
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>procedure</B> Get_User_Data (Pan : <B>in</B> Panel;
- Data : <B>out</B> User_Access);
- <I>-- AKA: <A HREF="panel.3x.html">panel_userptr</A></I>
- <B>pragma</B> Convention (C, Get_User_Data);
-
-<B>end</B> Terminal_Interface.Curses.Panels.User_Data;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Panels --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.3 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>with</B> System;
-
-<B>package</B> Terminal_Interface.Curses.Panels <B>is</B>
-
- <B>pragma</B> Linker_Options ("-lpanel");
-
-
- type Panel <B>is</B> <B>private</B>;
-
- <I>---------------------------</I>
- <I>-- Interface constants --</I>
- <I>---------------------------</I>
- Null_Panel : <B>constant</B> Panel;
-
- <I>-------------------</I>
- <I>-- Exceptions --</I>
- <I>-------------------</I>
-
- Panel_Exception : <B>exception</B>;
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="panel.3x.html">panel.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>function</B> Create (Win : Window) <B>return</B> Panel;
- <I>-- AKA: <A HREF="panel.3x.html">new_panel()</A></I>
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>function</B> New_Panel (Win : Window) <B>return</B> Panel <B>renames</B> Create;
- <I>-- AKA: <A HREF="panel.3x.html">new_panel()</A></I>
-
- <I>-- <A NAME="AFU_3">|</I>
- <B>procedure</B> Bottom (Pan : <B>in</B> Panel);
- <I>-- AKA: <A HREF="panel.3x.html">bottom_panel()</A></I>
-
- <I>-- <A NAME="AFU_4">|</I>
- <B>procedure</B> Top (Pan : <B>in</B> Panel);
- <I>-- AKA: <A HREF="panel.3x.html">top_panel()</A></I>
-
- <I>-- <A NAME="AFU_5">|</I>
- <B>procedure</B> Show (Pan : <B>in</B> Panel);
- <I>-- AKA: <A HREF="panel.3x.html">show_panel()</A></I>
-
- <I>-- <A NAME="AFU_6">|</I>
- <B>procedure</B> Update_Panels;
- <I>-- AKA: <A HREF="panel.3x.html">update_panels()</A></I>
- <B>pragma</B> Import (C, Update_Panels, "update_panels");
-
- <I>-- <A NAME="AFU_7">|</I>
- <B>procedure</B> Hide (Pan : <B>in</B> Panel);
- <I>-- AKA: <A HREF="panel.3x.html">hide_panel()</A></I>
-
- <I>-- <A NAME="AFU_8">|</I>
- <B>function</B> Get_Window (Pan : Panel) <B>return</B> Window;
- <I>-- AKA: <A HREF="panel.3x.html">panel_window()</A></I>
-
- <I>-- <A NAME="AFU_9">|</I>
- <B>function</B> Panel_Window (Pan : Panel) <B>return</B> Window <B>renames</B> Get_Window;
-
- <I>-- <A NAME="AFU_10">|</I>
- <B>procedure</B> Replace (Pan : <B>in</B> Panel;
- Win : <B>in</B> Window);
- <I>-- AKA: <A HREF="panel.3x.html">replace_panel()</A></I>
-
- <I>-- <A NAME="AFU_11">|</I>
- <B>procedure</B> Move (Pan : <B>in</B> Panel;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="panel.3x.html">move_panel()</A></I>
-
- <I>-- <A NAME="AFU_12">|</I>
- <B>function</B> Is_Hidden (Pan : Panel) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="panel.3x.html">panel_hidden()</A></I>
-
- <I>-- <A NAME="AFU_13">|</I>
- <B>function</B> Above (Pan : Panel) <B>return</B> Panel;
- <I>-- AKA: <A HREF="panel.3x.html">panel_above()</A></I>
- <B>pragma</B> Import (C, Above, "panel_above");
-
- <I>-- <A NAME="AFU_14">|</I>
- <B>function</B> Below (Pan : Panel) <B>return</B> Panel;
- <I>-- AKA: <A HREF="panel.3x.html">panel_below()</A></I>
- <B>pragma</B> Import (C, Below, "panel_below");
-
- <I>-- <A NAME="AFU_15">|</I>
- <B>procedure</B> Delete (Pan : <B>in</B> <B>out</B> Panel);
- <I>-- AKA: <A HREF="panel.3x.html">del_panel()</A></I>
-
- <B>private</B>
- type Panel <B>is</B> <B>new</B> System.Address;
- Null_Panel : <B>constant</B> Panel := Panel (System.Null_Address);
-
-<B>end</B> Terminal_Interface.Curses.Panels;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO.Complex_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.4 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>with</B> Ada.Numerics.Generic_Complex_Types;
-
-<B>generic</B>
- <B>with</B> <B>package</B> Complex_Types <B>is</B> <B>new</B> Ada.Numerics.Generic_Complex_Types (<>);
-
-<B>package</B> Terminal_Interface.Curses.Text_IO.Complex_IO <B>is</B>
-
- <B>use</B> Complex_Types;
-
- Default_Fore : Field := 2;
- Default_Aft : Field := Real'<B>Digits</B> - 1;
- Default_Exp : Field := 3;
-
- <B>procedure</B> Put
- (Win : <B>in</B> Window;
- Item : <B>in</B> Complex;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
- <B>procedure</B> Put
- (Item : <B>in</B> Complex;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
-<B>private</B>
- <B>pragma</B> Inline (Put);
-
-<B>end</B> Terminal_Interface.Curses.Text_IO.Complex_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO.Decimal_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.5 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>generic</B>
- type Num <B>is</B> <B>delta</B> <> <B>digits</B> <>;
-
-<B>package</B> Terminal_Interface.Curses.Text_IO.Decimal_IO <B>is</B>
-
- Default_Fore : Field := Num'Fore;
- Default_Aft : Field := Num'Aft;
- Default_Exp : Field := 0;
-
- <B>procedure</B> Put
- (Win : <B>in</B> Window;
- Item : <B>in</B> Num;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
- <B>procedure</B> Put
- (Item : <B>in</B> Num;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
-<B>private</B>
- <B>pragma</B> Inline (Put);
-
-<B>end</B> Terminal_Interface.Curses.Text_IO.Decimal_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO.Enumeration_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.5 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>generic</B>
- type Enum <B>is</B> (<>);
-
-<B>package</B> Terminal_Interface.Curses.Text_IO.Enumeration_IO <B>is</B>
-
- Default_Width : Field := 0;
- Default_Setting : Type_Set := Mixed_Case;
-
- <B>procedure</B> Put
- (Win : <B>in</B> Window;
- Item : <B>in</B> Enum;
- Width : <B>in</B> Field := Default_Width;
- Set : <B>in</B> Type_Set := Default_Setting);
-
- <B>procedure</B> Put
- (Item : <B>in</B> Enum;
- Width : <B>in</B> Field := Default_Width;
- Set : <B>in</B> Type_Set := Default_Setting);
-
-<B>private</B>
- <B>pragma</B> Inline (Put);
-
-<B>end</B> Terminal_Interface.Curses.Text_IO.Enumeration_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO.Fixed_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.5 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>generic</B>
- type Num <B>is</B> <B>delta</B> <>;
-
-<B>package</B> Terminal_Interface.Curses.Text_IO.Fixed_IO <B>is</B>
-
- Default_Fore : Field := Num'Fore;
- Default_Aft : Field := Num'Aft;
- Default_Exp : Field := 0;
-
- <B>procedure</B> Put
- (Win : <B>in</B> Window;
- Item : <B>in</B> Num;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
- <B>procedure</B> Put
- (Item : <B>in</B> Num;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
-<B>private</B>
- <B>pragma</B> Inline (Put);
-
-<B>end</B> Terminal_Interface.Curses.Text_IO.Fixed_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO.Float_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.5 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>generic</B>
- type Num <B>is</B> <B>digits</B> <>;
-
-<B>package</B> Terminal_Interface.Curses.Text_IO.Float_IO <B>is</B>
-
- Default_Fore : Field := 2;
- Default_Aft : Field := Num'<B>Digits</B> - 1;
- Default_Exp : Field := 3;
-
- <B>procedure</B> Put
- (Win : <B>in</B> Window;
- Item : <B>in</B> Num;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
- <B>procedure</B> Put
- (Item : <B>in</B> Num;
- Fore : <B>in</B> Field := Default_Fore;
- Aft : <B>in</B> Field := Default_Aft;
- Exp : <B>in</B> Field := Default_Exp);
-
-<B>private</B>
- <B>pragma</B> Inline (Put);
-
-<B>end</B> Terminal_Interface.Curses.Text_IO.Float_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO.Integer_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.5 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>generic</B>
- type Num <B>is</B> <B>range</B> <>;
-
-<B>package</B> Terminal_Interface.Curses.Text_IO.Integer_IO <B>is</B>
-
- Default_Width : Field := Num'Width;
- Default_Base : Number_Base := 10;
-
- <B>procedure</B> Put
- (Win : <B>in</B> Window;
- Item : <B>in</B> Num;
- Width : <B>in</B> Field := Default_Width;
- Base : <B>in</B> Number_Base := Default_Base);
-
- <B>procedure</B> Put
- (Item : <B>in</B> Num;
- Width : <B>in</B> Field := Default_Width;
- Base : <B>in</B> Number_Base := Default_Base);
-
-<B>private</B>
- <B>pragma</B> Inline (Put);
-
-<B>end</B> Terminal_Interface.Curses.Text_IO.Integer_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO.Modular_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.5 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>generic</B>
- type Num <B>is</B> <B>mod</B> <>;
-
-<B>package</B> Terminal_Interface.Curses.Text_IO.Modular_IO <B>is</B>
-
- Default_Width : Field := Num'Width;
- Default_Base : Number_Base := 10;
-
- <B>procedure</B> Put
- (Win : <B>in</B> Window;
- Item : <B>in</B> Num;
- Width : <B>in</B> Field := Default_Width;
- Base : <B>in</B> Number_Base := Default_Base);
-
- <B>procedure</B> Put
- (Item : <B>in</B> Num;
- Width : <B>in</B> Field := Default_Width;
- Base : <B>in</B> Number_Base := Default_Base);
-
-<B>private</B>
- <B>pragma</B> Inline (Put);
-
-<B>end</B> Terminal_Interface.Curses.Text_IO.Modular_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses.Text_IO --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.6 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>with</B> System;
-<B>with</B> System.Parameters;
-<B>with</B> Ada.Text_IO;
-<B>with</B> Ada.IO_Exceptions;
-
-<B>package</B> Terminal_Interface.Curses.Text_IO <B>is</B>
-
- <B>use</B> type Ada.Text_IO.Count;
- <B>subtype</B> Count <B>is</B> Ada.Text_IO.Count;
- <B>subtype</B> Positive_Count <B>is</B> Count <B>range</B> 1 .. Count'Last;
-
- <B>subtype</B> Field <B>is</B> Integer <B>range</B> 0 .. System.Parameters.Field_Max;
- <B>subtype</B> Number_Base <B>is</B> Integer <B>range</B> 2 .. 16;
-
- type Type_Set <B>is</B> (Lower_Case, Upper_Case, Mixed_Case);
-
- <I>-- For most of the routines you will see a version without a Window</I>
- <I>-- type parameter. They will operate on a default window, which can</I>
- <I>-- be set by the user. It is initially equal to Standard_Window.</I>
-
- <B>procedure</B> Set_Window (Win : <B>in</B> Window);
- <I>-- Set Win as the default window</I>
-
- <B>function</B> Get_Window <B>return</B> Window;
- <I>-- Get the current default window</I>
-
- <B>procedure</B> Flush (Win : <B>in</B> Window);
- <B>procedure</B> Flush;
-
- <I>--------------------------------------------</I>
- <I>-- Specification of line and page lengths --</I>
- <I>--------------------------------------------</I>
-
- <I>-- There are no set routines in this package. I assume, that you allocate</I>
- <I>-- the window with an appropriate size.</I>
- <I>-- A scroll-window is interpreted as an page with unbounded page length,</I>
- <I>-- i.e. it returns the conventional 0 as page length.</I>
-
- <B>function</B> Line_Length (Win : <B>in</B> Window) <B>return</B> Count;
- <B>function</B> Line_Length <B>return</B> Count;
-
- <B>function</B> Page_Length (Win : <B>in</B> Window) <B>return</B> Count;
- <B>function</B> Page_Length <B>return</B> Count;
-
- <I>------------------------------------</I>
- <I>-- Column, Line, and Page Control --</I>
- <I>------------------------------------</I>
- <B>procedure</B> New_Line (Win : <B>in</B> Window; Spacing : <B>in</B> Positive_Count := 1);
- <B>procedure</B> New_Line (Spacing : <B>in</B> Positive_Count := 1);
-
- <B>procedure</B> New_Page (Win : <B>in</B> Window);
- <B>procedure</B> New_Page;
-
- <B>procedure</B> Set_Col (Win : <B>in</B> Window; To : <B>in</B> Positive_Count);
- <B>procedure</B> Set_Col (To : <B>in</B> Positive_Count);
-
- <B>procedure</B> Set_Line (Win : <B>in</B> Window; To : <B>in</B> Positive_Count);
- <B>procedure</B> Set_Line (To : <B>in</B> Positive_Count);
-
- <B>function</B> Col (Win : <B>in</B> Window) <B>return</B> Positive_Count;
- <B>function</B> Col <B>return</B> Positive_Count;
-
- <B>function</B> Line (Win : <B>in</B> Window) <B>return</B> Positive_Count;
- <B>function</B> Line <B>return</B> Positive_Count;
-
- <I>-----------------------</I>
- <I>-- Characters-Output --</I>
- <I>-----------------------</I>
-
- <B>procedure</B> Put (Win : <B>in</B> Window; Item : <B>in</B> Character);
- <B>procedure</B> Put (Item : <B>in</B> Character);
-
- <I>--------------------</I>
- <I>-- Strings-Output --</I>
- <I>--------------------</I>
-
- <B>procedure</B> Put (Win : <B>in</B> Window; Item : <B>in</B> String);
- <B>procedure</B> Put (Item : <B>in</B> String);
-
- <B>procedure</B> Put_Line
- (Win : <B>in</B> Window;
- Item : <B>in</B> String);
-
- <B>procedure</B> Put_Line
- (Item : <B>in</B> String);
-
- <I>-- Exceptions</I>
-
- Status_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.Status_Error;
- Mode_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.Mode_Error;
- Name_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.Name_Error;
- Use_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.Use_Error;
- Device_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.Device_Error;
- End_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.End_Error;
- Data_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.Data_Error;
- Layout_Error : <B>exception</B> <B>renames</B> Ada.IO_Exceptions.Layout_Error;
-
-<B>end</B> Terminal_Interface.Curses.Text_IO;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<B></B><P><HR><P>
-<PRE>
-
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface.Curses --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.9 @</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- curses binding.</I>
-<I>-- This module is generated. Please don't change it manually!</I>
-<I>-- Run the generator instead.</I>
-<I>-- |</I>
-<B>with</B> System;
-<B>with</B> Interfaces.C; <I>-- We need this for some assertions.</I>
-
-<B>package</B> Terminal_Interface.Curses <B>is</B>
-
- <B>pragma</B> Linker_Options ("-lncurses");
-
- type Window <B>is</B> <B>private</B>;
- Null_Window : <B>constant</B> Window;
-
- type Line_Position <B>is</B> <B>new</B> Natural; <I>-- line coordinate</I>
- type Column_Position <B>is</B> <B>new</B> Natural; <I>-- column coordinate</I>
-
- <B>subtype</B> Line_Count <B>is</B> Line_Position <B>range</B> 1 .. Line_Position'Last;
- <I>-- Type to count lines. We do not allow null windows, so must be positive</I>
- <B>subtype</B> Column_Count <B>is</B> Column_Position <B>range</B> 1 .. Column_Position'Last;
- <I>-- Type to count columns. We do not allow null windows, so must be positive</I>
-
- type Key_Code <B>is</B> <B>new</B> Natural;
- <I>-- That is anything including real characters, special keys and logical</I>
- <I>-- request codes.</I>
-
- <B>subtype</B> Real_Key_Code <B>is</B> Key_Code <B>range</B> 0 .. 8#777#;
- <I>-- This are the codes that potentially represent a real keystroke.</I>
- <I>-- Not all codes may be possible on a specific terminal. To check the</I>
- <I>-- availability of a special key, the Has_Key function is provided.</I>
-
- <B>subtype</B> Special_Key_Code <B>is</B> Real_Key_Code
- <B>range</B> 8#400# .. Real_Key_Code'Last;
- <I>-- Type for a function- or special key number</I>
-
- <B>subtype</B> Normal_Key_Code <B>is</B> Real_Key_Code <B>range</B>
- Character'Pos (Character'First) .. Character'Pos (Character'Last);
- <I>-- This are the codes for regular (incl. non-graphical) characters.</I>
-
- <I>-- Constants for function- and special keys</I>
- <I>--</I>
- Key_None : <B>constant</B> Special_Key_Code := 8#400#;
- Key_Code_Yes : <B>constant</B> Special_Key_Code := 8#400#;
- Key_Min : <B>constant</B> Special_Key_Code := 8#401#;
- Key_Break : <B>constant</B> Special_Key_Code := 8#401#;
- Key_Cursor_Down : <B>constant</B> Special_Key_Code := 8#402#;
- Key_Cursor_Up : <B>constant</B> Special_Key_Code := 8#403#;
- Key_Cursor_Left : <B>constant</B> Special_Key_Code := 8#404#;
- Key_Cursor_Right : <B>constant</B> Special_Key_Code := 8#405#;
- Key_Home : <B>constant</B> Special_Key_Code := 8#406#;
- Key_Backspace : <B>constant</B> Special_Key_Code := 8#407#;
- Key_F0 : <B>constant</B> Special_Key_Code := 8#410#;
- Key_F1 : <B>constant</B> Special_Key_Code := 8#411#;
- Key_F2 : <B>constant</B> Special_Key_Code := 8#412#;
- Key_F3 : <B>constant</B> Special_Key_Code := 8#413#;
- Key_F4 : <B>constant</B> Special_Key_Code := 8#414#;
- Key_F5 : <B>constant</B> Special_Key_Code := 8#415#;
- Key_F6 : <B>constant</B> Special_Key_Code := 8#416#;
- Key_F7 : <B>constant</B> Special_Key_Code := 8#417#;
- Key_F8 : <B>constant</B> Special_Key_Code := 8#420#;
- Key_F9 : <B>constant</B> Special_Key_Code := 8#421#;
- Key_F10 : <B>constant</B> Special_Key_Code := 8#422#;
- Key_F11 : <B>constant</B> Special_Key_Code := 8#423#;
- Key_F12 : <B>constant</B> Special_Key_Code := 8#424#;
- Key_F13 : <B>constant</B> Special_Key_Code := 8#425#;
- Key_F14 : <B>constant</B> Special_Key_Code := 8#426#;
- Key_F15 : <B>constant</B> Special_Key_Code := 8#427#;
- Key_F16 : <B>constant</B> Special_Key_Code := 8#430#;
- Key_F17 : <B>constant</B> Special_Key_Code := 8#431#;
- Key_F18 : <B>constant</B> Special_Key_Code := 8#432#;
- Key_F19 : <B>constant</B> Special_Key_Code := 8#433#;
- Key_F20 : <B>constant</B> Special_Key_Code := 8#434#;
- Key_F21 : <B>constant</B> Special_Key_Code := 8#435#;
- Key_F22 : <B>constant</B> Special_Key_Code := 8#436#;
- Key_F23 : <B>constant</B> Special_Key_Code := 8#437#;
- Key_F24 : <B>constant</B> Special_Key_Code := 8#440#;
- Key_Delete_Line : <B>constant</B> Special_Key_Code := 8#510#;
- Key_Insert_Line : <B>constant</B> Special_Key_Code := 8#511#;
- Key_Delete_Char : <B>constant</B> Special_Key_Code := 8#512#;
- Key_Insert_Char : <B>constant</B> Special_Key_Code := 8#513#;
- Key_Exit_Insert_Mode : <B>constant</B> Special_Key_Code := 8#514#;
- Key_Clear_Screen : <B>constant</B> Special_Key_Code := 8#515#;
- Key_Clear_End_Of_Screen : <B>constant</B> Special_Key_Code := 8#516#;
- Key_Clear_End_Of_Line : <B>constant</B> Special_Key_Code := 8#517#;
- Key_Scroll_1_Forward : <B>constant</B> Special_Key_Code := 8#520#;
- Key_Scroll_1_Backward : <B>constant</B> Special_Key_Code := 8#521#;
- Key_Next_Page : <B>constant</B> Special_Key_Code := 8#522#;
- Key_Previous_Page : <B>constant</B> Special_Key_Code := 8#523#;
- Key_Set_Tab : <B>constant</B> Special_Key_Code := 8#524#;
- Key_Clear_Tab : <B>constant</B> Special_Key_Code := 8#525#;
- Key_Clear_All_Tabs : <B>constant</B> Special_Key_Code := 8#526#;
- Key_Enter_Or_Send : <B>constant</B> Special_Key_Code := 8#527#;
- Key_Soft_Reset : <B>constant</B> Special_Key_Code := 8#530#;
- Key_Reset : <B>constant</B> Special_Key_Code := 8#531#;
- Key_Print : <B>constant</B> Special_Key_Code := 8#532#;
- Key_Bottom : <B>constant</B> Special_Key_Code := 8#533#;
- Key_Upper_Left_Of_Keypad : <B>constant</B> Special_Key_Code := 8#534#;
- Key_Upper_Right_Of_Keypad : <B>constant</B> Special_Key_Code := 8#535#;
- Key_Center_Of_Keypad : <B>constant</B> Special_Key_Code := 8#536#;
- Key_Lower_Left_Of_Keypad : <B>constant</B> Special_Key_Code := 8#537#;
- Key_Lower_Right_Of_Keypad : <B>constant</B> Special_Key_Code := 8#540#;
- Key_Back_Tab : <B>constant</B> Special_Key_Code := 8#541#;
- Key_Beginning : <B>constant</B> Special_Key_Code := 8#542#;
- Key_Cancel : <B>constant</B> Special_Key_Code := 8#543#;
- Key_Close : <B>constant</B> Special_Key_Code := 8#544#;
- Key_Command : <B>constant</B> Special_Key_Code := 8#545#;
- Key_Copy : <B>constant</B> Special_Key_Code := 8#546#;
- Key_Create : <B>constant</B> Special_Key_Code := 8#547#;
- Key_End : <B>constant</B> Special_Key_Code := 8#550#;
- Key_Exit : <B>constant</B> Special_Key_Code := 8#551#;
- Key_Find : <B>constant</B> Special_Key_Code := 8#552#;
- Key_Help : <B>constant</B> Special_Key_Code := 8#553#;
- Key_Mark : <B>constant</B> Special_Key_Code := 8#554#;
- Key_Message : <B>constant</B> Special_Key_Code := 8#555#;
- Key_Move : <B>constant</B> Special_Key_Code := 8#556#;
- Key_Next : <B>constant</B> Special_Key_Code := 8#557#;
- Key_Open : <B>constant</B> Special_Key_Code := 8#560#;
- Key_Options : <B>constant</B> Special_Key_Code := 8#561#;
- Key_Previous : <B>constant</B> Special_Key_Code := 8#562#;
- Key_Redo : <B>constant</B> Special_Key_Code := 8#563#;
- Key_Reference : <B>constant</B> Special_Key_Code := 8#564#;
- Key_Refresh : <B>constant</B> Special_Key_Code := 8#565#;
- Key_Replace : <B>constant</B> Special_Key_Code := 8#566#;
- Key_Restart : <B>constant</B> Special_Key_Code := 8#567#;
- Key_Resume : <B>constant</B> Special_Key_Code := 8#570#;
- Key_Save : <B>constant</B> Special_Key_Code := 8#571#;
- Key_Shift_Begin : <B>constant</B> Special_Key_Code := 8#572#;
- Key_Shift_Cancel : <B>constant</B> Special_Key_Code := 8#573#;
- Key_Shift_Command : <B>constant</B> Special_Key_Code := 8#574#;
- Key_Shift_Copy : <B>constant</B> Special_Key_Code := 8#575#;
- Key_Shift_Create : <B>constant</B> Special_Key_Code := 8#576#;
- Key_Shift_Delete_Char : <B>constant</B> Special_Key_Code := 8#577#;
- Key_Shift_Delete_Line : <B>constant</B> Special_Key_Code := 8#600#;
- Key_Select : <B>constant</B> Special_Key_Code := 8#601#;
- Key_Shift_End : <B>constant</B> Special_Key_Code := 8#602#;
- Key_Shift_Clear_End_Of_Line : <B>constant</B> Special_Key_Code := 8#603#;
- Key_Shift_Exit : <B>constant</B> Special_Key_Code := 8#604#;
- Key_Shift_Find : <B>constant</B> Special_Key_Code := 8#605#;
- Key_Shift_Help : <B>constant</B> Special_Key_Code := 8#606#;
- Key_Shift_Home : <B>constant</B> Special_Key_Code := 8#607#;
- Key_Shift_Insert_Char : <B>constant</B> Special_Key_Code := 8#610#;
- Key_Shift_Cursor_Left : <B>constant</B> Special_Key_Code := 8#611#;
- Key_Shift_Message : <B>constant</B> Special_Key_Code := 8#612#;
- Key_Shift_Move : <B>constant</B> Special_Key_Code := 8#613#;
- Key_Shift_Next_Page : <B>constant</B> Special_Key_Code := 8#614#;
- Key_Shift_Options : <B>constant</B> Special_Key_Code := 8#615#;
- Key_Shift_Previous_Page : <B>constant</B> Special_Key_Code := 8#616#;
- Key_Shift_Print : <B>constant</B> Special_Key_Code := 8#617#;
- Key_Shift_Redo : <B>constant</B> Special_Key_Code := 8#620#;
- Key_Shift_Replace : <B>constant</B> Special_Key_Code := 8#621#;
- Key_Shift_Cursor_Right : <B>constant</B> Special_Key_Code := 8#622#;
- Key_Shift_Resume : <B>constant</B> Special_Key_Code := 8#623#;
- Key_Shift_Save : <B>constant</B> Special_Key_Code := 8#624#;
- Key_Shift_Suspend : <B>constant</B> Special_Key_Code := 8#625#;
- Key_Shift_Undo : <B>constant</B> Special_Key_Code := 8#626#;
- Key_Suspend : <B>constant</B> Special_Key_Code := 8#627#;
- Key_Undo : <B>constant</B> Special_Key_Code := 8#630#;
- Key_Mouse : <B>constant</B> Special_Key_Code := 8#631#;
- Key_Resize : <B>constant</B> Special_Key_Code := 8#632#;
-
- Key_Max : <B>constant</B> Special_Key_Code
- := Special_Key_Code'Last;
-
- <B>subtype</B> User_Key_Code <B>is</B> Key_Code
- <B>range</B> (Key_Max + 129) .. Key_Code'Last;
- <I>-- This is reserved for user defined key codes. The range between Key_Max</I>
- <I>-- and the first user code is reserved for subsystems like menu and forms.</I>
-
- <I>-- For those who like to use the original key names we produce them were</I>
- <I>-- they differ from the original. Please note that they may differ in</I>
- <I>-- lower/upper case.</I>
- KEY_DOWN : Special_Key_Code <B>renames</B> Key_Cursor_Down;
- KEY_UP : Special_Key_Code <B>renames</B> Key_Cursor_Up;
- KEY_LEFT : Special_Key_Code <B>renames</B> Key_Cursor_Left;
- KEY_RIGHT : Special_Key_Code <B>renames</B> Key_Cursor_Right;
- KEY_DL : Special_Key_Code <B>renames</B> Key_Delete_Line;
- KEY_IL : Special_Key_Code <B>renames</B> Key_Insert_Line;
- KEY_DC : Special_Key_Code <B>renames</B> Key_Delete_Char;
- KEY_IC : Special_Key_Code <B>renames</B> Key_Insert_Char;
- KEY_EIC : Special_Key_Code <B>renames</B> Key_Exit_Insert_Mode;
- KEY_CLEAR : Special_Key_Code <B>renames</B> Key_Clear_Screen;
- KEY_EOS : Special_Key_Code <B>renames</B> Key_Clear_End_Of_Screen;
- KEY_EOL : Special_Key_Code <B>renames</B> Key_Clear_End_Of_Line;
- KEY_SF : Special_Key_Code <B>renames</B> Key_Scroll_1_Forward;
- KEY_SR : Special_Key_Code <B>renames</B> Key_Scroll_1_Backward;
- KEY_NPAGE : Special_Key_Code <B>renames</B> Key_Next_Page;
- KEY_PPAGE : Special_Key_Code <B>renames</B> Key_Previous_Page;
- KEY_STAB : Special_Key_Code <B>renames</B> Key_Set_Tab;
- KEY_CTAB : Special_Key_Code <B>renames</B> Key_Clear_Tab;
- KEY_CATAB : Special_Key_Code <B>renames</B> Key_Clear_All_Tabs;
- KEY_ENTER : Special_Key_Code <B>renames</B> Key_Enter_Or_Send;
- KEY_SRESET : Special_Key_Code <B>renames</B> Key_Soft_Reset;
- KEY_LL : Special_Key_Code <B>renames</B> Key_Bottom;
- KEY_A1 : Special_Key_Code <B>renames</B> Key_Upper_Left_Of_Keypad;
- KEY_A3 : Special_Key_Code <B>renames</B> Key_Upper_Right_Of_Keypad;
- KEY_B2 : Special_Key_Code <B>renames</B> Key_Center_Of_Keypad;
- KEY_C1 : Special_Key_Code <B>renames</B> Key_Lower_Left_Of_Keypad;
- KEY_C3 : Special_Key_Code <B>renames</B> Key_Lower_Right_Of_Keypad;
- KEY_BTAB : Special_Key_Code <B>renames</B> Key_Back_Tab;
- KEY_BEG : Special_Key_Code <B>renames</B> Key_Beginning;
- KEY_SBEG : Special_Key_Code <B>renames</B> Key_Shift_Begin;
- KEY_SCANCEL : Special_Key_Code <B>renames</B> Key_Shift_Cancel;
- KEY_SCOMMAND : Special_Key_Code <B>renames</B> Key_Shift_Command;
- KEY_SCOPY : Special_Key_Code <B>renames</B> Key_Shift_Copy;
- KEY_SCREATE : Special_Key_Code <B>renames</B> Key_Shift_Create;
- KEY_SDC : Special_Key_Code <B>renames</B> Key_Shift_Delete_Char;
- KEY_SDL : Special_Key_Code <B>renames</B> Key_Shift_Delete_Line;
- KEY_SEND : Special_Key_Code <B>renames</B> Key_Shift_End;
- KEY_SEOL : Special_Key_Code <B>renames</B> Key_Shift_Clear_End_Of_Line;
- KEY_SEXIT : Special_Key_Code <B>renames</B> Key_Shift_Exit;
- KEY_SFIND : Special_Key_Code <B>renames</B> Key_Shift_Find;
- KEY_SHELP : Special_Key_Code <B>renames</B> Key_Shift_Help;
- KEY_SHOME : Special_Key_Code <B>renames</B> Key_Shift_Home;
- KEY_SIC : Special_Key_Code <B>renames</B> Key_Shift_Insert_Char;
- KEY_SLEFT : Special_Key_Code <B>renames</B> Key_Shift_Cursor_Left;
- KEY_SMESSAGE : Special_Key_Code <B>renames</B> Key_Shift_Message;
- KEY_SMOVE : Special_Key_Code <B>renames</B> Key_Shift_Move;
- KEY_SNEXT : Special_Key_Code <B>renames</B> Key_Shift_Next_Page;
- KEY_SOPTIONS : Special_Key_Code <B>renames</B> Key_Shift_Options;
- KEY_SPREVIOUS : Special_Key_Code <B>renames</B> Key_Shift_Previous_Page;
- KEY_SPRINT : Special_Key_Code <B>renames</B> Key_Shift_Print;
- KEY_SREDO : Special_Key_Code <B>renames</B> Key_Shift_Redo;
- KEY_SREPLACE : Special_Key_Code <B>renames</B> Key_Shift_Replace;
- KEY_SRIGHT : Special_Key_Code <B>renames</B> Key_Shift_Cursor_Right;
- KEY_SRSUME : Special_Key_Code <B>renames</B> Key_Shift_Resume;
- KEY_SSAVE : Special_Key_Code <B>renames</B> Key_Shift_Save;
- KEY_SSUSPEND : Special_Key_Code <B>renames</B> Key_Shift_Suspend;
- KEY_SUNDO : Special_Key_Code <B>renames</B> Key_Shift_Undo;
-
-
-<I>------------------------------------------------------------------------------</I>
-
- type Color_Number <B>is</B> <B>range</B> 0 .. Integer (Interfaces.C.short'Last);
- <B>for</B> Color_Number'Size <B>use</B> Interfaces.C.short'Size;
- <I>-- (n)curses uses a short for the color index</I>
- <I>-- The model is, that a Color_Number is an index into an array of</I>
- <I>-- (potentially) definable colors. Some of those indices are</I>
- <I>-- predefined (see below), although they may not really exist.</I>
-
- Black : <B>constant</B> Color_Number := 0;
- Red : <B>constant</B> Color_Number := 1;
- Green : <B>constant</B> Color_Number := 2;
- Yellow : <B>constant</B> Color_Number := 3;
- Blue : <B>constant</B> Color_Number := 4;
- Magenta : <B>constant</B> Color_Number := 5;
- Cyan : <B>constant</B> Color_Number := 6;
- White : <B>constant</B> Color_Number := 7;
-
- type RGB_Value <B>is</B> <B>range</B> 0 .. Integer (Interfaces.C.Short'Last);
- <B>for</B> RGB_Value'Size <B>use</B> Interfaces.C.short'Size;
- <I>-- Some system may allow to redefine a color by setting RGB values.</I>
-
- type Color_Pair <B>is</B> <B>range</B> 0 .. 255;
- <B>for</B> Color_Pair'Size <B>use</B> 8;
- <B>subtype</B> Redefinable_Color_Pair <B>is</B> Color_Pair <B>range</B> 1 .. 255;
- <I>-- (n)curses reserves 1 Byte for the color-pair number. Color Pair 0</I>
- <I>-- is fixed (Black & White). A color pair is simply a combination of</I>
- <I>-- two colors described by Color_Numbers, one for the foreground and</I>
- <I>-- the other for the background</I>
-
- type Character_Attribute_Set <B>is</B>
- <B>record</B>
- Stand_Out : Boolean;
- Under_Line : Boolean;
- Reverse_Video : Boolean;
- Blink : Boolean;
- Dim_Character : Boolean;
- Bold_Character : Boolean;
- Alternate_Character_Set : Boolean;
- Invisible_Character : Boolean;
- Protected_Character : Boolean;
- Horizontal : Boolean;
- Left : Boolean;
- Low : Boolean;
- Right : Boolean;
- Top : Boolean;
- Vertical : Boolean;
- Reserved : Boolean;
- <B>end</B> <B>record</B>;
- <B>pragma</B> Pack (Character_Attribute_Set);
- <B>pragma</B> Convention (C, Character_Attribute_Set);
-
- <B>for</B> Character_Attribute_Set <B>use</B>
- <B>record</B>
- Stand_Out <B>at</B> 0 <B>range</B> 0 .. 0;
- Under_Line <B>at</B> 0 <B>range</B> 1 .. 1;
- Reverse_Video <B>at</B> 0 <B>range</B> 2 .. 2;
- Blink <B>at</B> 0 <B>range</B> 3 .. 3;
- Dim_Character <B>at</B> 0 <B>range</B> 4 .. 4;
- Bold_Character <B>at</B> 0 <B>range</B> 5 .. 5;
- Alternate_Character_Set <B>at</B> 0 <B>range</B> 6 .. 6;
- Invisible_Character <B>at</B> 0 <B>range</B> 7 .. 7;
- Protected_Character <B>at</B> 0 <B>range</B> 8 .. 8;
- Horizontal <B>at</B> 0 <B>range</B> 9 .. 9;
- Left <B>at</B> 0 <B>range</B> 10 .. 10;
- Low <B>at</B> 0 <B>range</B> 11 .. 11;
- Right <B>at</B> 0 <B>range</B> 12 .. 12;
- Top <B>at</B> 0 <B>range</B> 13 .. 13;
- Vertical <B>at</B> 0 <B>range</B> 14 .. 14;
- Reserved <B>at</B> 0 <B>range</B> 15 .. 15;
- <B>end</B> <B>record</B>;
- <B>for</B> Character_Attribute_Set'Size <B>use</B> Interfaces.C.int'Size / 2;
- <I>-- Please note: this rep. clause is generated and may be</I>
- <I>-- different on your system.</I>
- <I>-- (n)curses uses half of an integer for attributes.</I>
-
- Normal_Video : <B>constant</B> Character_Attribute_Set := (<B>others</B> => False);
-
- type Attributed_Character <B>is</B>
- <B>record</B>
- Attr : Character_Attribute_Set := Normal_Video;
- Color : Color_Pair := 0;
- Ch : Character := ' ';
- <B>end</B> <B>record</B>;
- <B>pragma</B> Convention (C, Attributed_Character);
- <I>-- This is the counterpart for the chtype in C.</I>
-
- <B>for</B> Attributed_Character <B>use</B>
- <B>record</B>
- Ch <B>at</B> 0 <B>range</B> 0 .. 7;
- Color <B>at</B> 0 <B>range</B> 8 .. 15;
- Attr <B>at</B> 0 <B>range</B> 16 .. 31;
- <B>end</B> <B>record</B>;
- <B>for</B> Attributed_Character'Size <B>use</B> Interfaces.C.int'Size;
- <I>-- Please note: this rep. clause is generated and may be</I>
- <I>-- different on your system.</I>
-
- Default_Character : <B>constant</B> Attributed_Character
- := (Ch => Character'First,
- Color => Color_Pair'First,
- Attr => Normal_Video);
-
- type Attributed_String <B>is</B> <B>array</B> (Positive <B>range</B> <>) <B>of</B> Attributed_Character;
- <B>pragma</B> Pack (Attributed_String);
- <I>-- In this binding we allow strings of attributed characters.</I>
-
- <I>------------------</I>
- <I>-- Exceptions --</I>
- <I>------------------</I>
- Curses_Exception : <B>exception</B>;
-
- <I>-- Those exceptions are raised by the ETI (Extended Terminal Interface)</I>
- <I>-- subpackets for Menu and Forms handling.</I>
- <I>--</I>
- Eti_System_Error : <B>exception</B>;
- Eti_Bad_Argument : <B>exception</B>;
- Eti_Posted : <B>exception</B>;
- Eti_Connected : <B>exception</B>;
- Eti_Bad_State : <B>exception</B>;
- Eti_No_Room : <B>exception</B>;
- Eti_Not_Posted : <B>exception</B>;
- Eti_Unknown_Command : <B>exception</B>;
- Eti_No_Match : <B>exception</B>;
- Eti_Not_Selectable : <B>exception</B>;
- Eti_Not_Connected : <B>exception</B>;
- Eti_Request_Denied : <B>exception</B>;
- Eti_Invalid_Field : <B>exception</B>;
- Eti_Current : <B>exception</B>;
-
- <I>--------------------------------------------------------------------------</I>
- <I>-- External C variables</I>
- <I>-- Conceptually even in C this are kind of constants, but they are</I>
- <I>-- initialized and sometimes changed by the library routines at runtime</I>
- <I>-- depending on the type of terminal. I believe the best way to model</I>
- <I>-- this is to use functions.</I>
- <I>--------------------------------------------------------------------------</I>
-
- <B>function</B> Lines <B>return</B> Line_Count;
- <B>pragma</B> Inline (Lines);
-
- <B>function</B> Columns <B>return</B> Column_Count;
- <B>pragma</B> Inline (Columns);
-
- <B>function</B> Tab_Size <B>return</B> Natural;
- <B>pragma</B> Inline (Tab_Size);
-
- <B>function</B> Number_Of_Colors <B>return</B> Natural;
- <B>pragma</B> Inline (Number_Of_Colors);
-
- <B>function</B> Number_Of_Color_Pairs <B>return</B> Natural;
- <B>pragma</B> Inline (Number_Of_Color_Pairs);
-
- ACS_Map : <B>array</B> (Character'Val (0) .. Character'Val (127)) <B>of</B>
- Attributed_Character;
- <B>pragma</B> Import (C, ACS_Map, "acs_map");
- <I>--</I>
- <I>--</I>
- <I>-- Constants for several symbols from the Alternate Character Set</I>
- <I>-- You must use this constants as indices into the ACS_Map array</I>
- <I>-- to get the corresponding attributed character at runtime.</I>
- <I>--</I>
- ACS_Upper_Left_Corner : <B>constant</B> Character := 'l';
- ACS_Lower_Left_Corner : <B>constant</B> Character := 'm';
- ACS_Upper_Right_Corner : <B>constant</B> Character := 'k';
- ACS_Lower_Right_Corner : <B>constant</B> Character := 'j';
- ACS_Left_Tee : <B>constant</B> Character := 't';
- ACS_Right_Tee : <B>constant</B> Character := 'u';
- ACS_Bottom_Tee : <B>constant</B> Character := 'v';
- ACS_Top_Tee : <B>constant</B> Character := 'w';
- ACS_Horizontal_Line : <B>constant</B> Character := 'q';
- ACS_Vertical_Line : <B>constant</B> Character := 'x';
- ACS_Plus_Symbol : <B>constant</B> Character := 'n';
- ACS_Scan_Line_1 : <B>constant</B> Character := 'o';
- ACS_Scan_Line_9 : <B>constant</B> Character := 's';
- ACS_Diamond : <B>constant</B> Character := Character'Val (96);
- ACS_Checker_Board : <B>constant</B> Character := 'a';
- ACS_Degree : <B>constant</B> Character := 'f';
- ACS_Plus_Minus : <B>constant</B> Character := 'g';
- ACS_Bullet : <B>constant</B> Character := '~';
- ACS_Left_Arrow : <B>constant</B> Character := ',';
- ACS_Right_Arrow : <B>constant</B> Character := '+';
- ACS_Down_Arrow : <B>constant</B> Character := '.';
- ACS_Up_Arrow : <B>constant</B> Character := '-';
- ACS_Board_Of_Squares : <B>constant</B> Character := 'h';
- ACS_Lantern : <B>constant</B> Character := 'i';
- ACS_Solid_Block : <B>constant</B> Character := '0';
- ACS_Scan_Line_3 : <B>constant</B> Character := 'p';
- ACS_Scan_Line_7 : <B>constant</B> Character := 'r';
- ACS_Less_Or_Equal : <B>constant</B> Character := 'y';
- ACS_Greater_Or_Equal : <B>constant</B> Character := 'z';
- ACS_PI : <B>constant</B> Character := '{';
- ACS_Not_Equal : <B>constant</B> Character := '|';
- ACS_Sterling : <B>constant</B> Character := '}';
-
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_initscr.3x.html">curs_initscr.3x</A></I>
- <I>-- |=====================================================================</I>
- <I>-- | Not implemented: newterm, set_term, delscreen</I>
-
- <I>-- <A NAME="AFU_1">|</I>
- <B>function</B> Standard_Window <B>return</B> Window;
- <I>-- AKA: <A HREF="curs_initscr.3x.html">stdscr</A></I>
- <B>pragma</B> Inline (Standard_Window);
-
- <I>-- <A NAME="AFU_2">|</I>
- <B>procedure</B> Init_Screen;
-
- <I>-- <A NAME="AFU_3">|</I>
- <B>procedure</B> Init_Windows <B>renames</B> Init_Screen;
- <I>-- AKA: <A HREF="curs_initscr.3x.html">initscr()</A></I>
-
- <I>-- <A NAME="AFU_4">|</I>
- <B>procedure</B> End_Windows;
- <I>-- AKA: <A HREF="curs_initscr.3x.html">endwin()</A></I>
- <B>procedure</B> End_Screen <B>renames</B> End_Windows;
-
- <I>-- <A NAME="AFU_5">|</I>
- <B>function</B> Is_End_Window <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_initscr.3x.html">isendwin()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_move.3x.html">curs_move.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_6">|</I>
- <B>procedure</B> Move_Cursor (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="curs_move.3x.html">wmove()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_addch.3x.html">curs_addch.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_7">|</I>
- <B>procedure</B> Add (Win : <B>in</B> Window := Standard_Window;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_addch.3x.html">waddch()</A></I>
-
- <B>procedure</B> Add (Win : <B>in</B> Window := Standard_Window;
- Ch : <B>in</B> Character);
- <I>-- Add a single character at the current logical cursor position to</I>
- <I>-- the window. Use the current windows attributes.</I>
-
- <I>-- <A NAME="AFU_8">|</I>
- <B>procedure</B> Add
- (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_addch.3x.html">mvwaddch()</A></I>
-
- <B>procedure</B> Add
- (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Ch : <B>in</B> Character);
- <I>-- Move to the position and add a single character into the window</I>
-
- <I>-- <A NAME="AFU_9">|</I>
- <B>procedure</B> Add_With_Immediate_Echo
- (Win : <B>in</B> Window := Standard_Window;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_addch.3x.html">wechochar()</A></I>
-
- <B>procedure</B> Add_With_Immediate_Echo
- (Win : <B>in</B> Window := Standard_Window;
- Ch : <B>in</B> Character);
- <I>-- Add a character and do an immediate resfresh of the screen.</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_window.3x.html">curs_window.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_10">|</I>
- <B>function</B> Create
- (Number_Of_Lines : Line_Count;
- Number_Of_Columns : Column_Count;
- First_Line_Position : Line_Position;
- First_Column_Position : Column_Position) <B>return</B> Window;
- <I>-- AKA: <A HREF="curs_window.3x.html">newwin()</A></I>
-
- <B>function</B> New_Window
- (Number_Of_Lines : Line_Count;
- Number_Of_Columns : Column_Count;
- First_Line_Position : Line_Position;
- First_Column_Position : Column_Position) <B>return</B> Window
- <B>renames</B> Create;
-
- <I>-- <A NAME="AFU_11">|</I>
- <B>procedure</B> Delete (Win : <B>in</B> <B>out</B> Window);
- <I>-- AKA: <A HREF="curs_window.3x.html">delwin()</A></I>
- <I>-- Reset Win to Null_Window</I>
-
- <I>-- <A NAME="AFU_12">|</I>
- <B>function</B> Sub_Window
- (Win : Window := Standard_Window;
- Number_Of_Lines : Line_Count;
- Number_Of_Columns : Column_Count;
- First_Line_Position : Line_Position;
- First_Column_Position : Column_Position) <B>return</B> Window;
- <I>-- AKA: <A HREF="curs_window.3x.html">subwin()</A></I>
-
- <I>-- <A NAME="AFU_13">|</I>
- <B>function</B> Derived_Window
- (Win : Window := Standard_Window;
- Number_Of_Lines : Line_Count;
- Number_Of_Columns : Column_Count;
- First_Line_Position : Line_Position;
- First_Column_Position : Column_Position) <B>return</B> Window;
- <I>-- AKA: <A HREF="curs_window.3x.html">derwin()</A></I>
-
- <I>-- <A NAME="AFU_14">|</I>
- <B>function</B> Duplicate (Win : Window) <B>return</B> Window;
- <I>-- AKA: <A HREF="curs_window.3x.html">dupwin()</A></I>
-
- <I>-- <A NAME="AFU_15">|</I>
- <B>procedure</B> Move_Window (Win : <B>in</B> Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="curs_window.3x.html">mvwin()</A></I>
-
- <I>-- <A NAME="AFU_16">|</I>
- <B>procedure</B> Move_Derived_Window (Win : <B>in</B> Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="curs_window.3x.html">mvderwin()</A></I>
-
- <I>-- <A NAME="AFU_17">|</I>
- <B>procedure</B> Synchronize_Upwards (Win : <B>in</B> Window);
- <I>-- AKA: <A HREF="curs_window.3x.html">wsyncup()</A></I>
- <B>pragma</B> Import (C, Synchronize_Upwards, "wsyncup");
-
- <I>-- <A NAME="AFU_18">|</I>
- <B>procedure</B> Synchronize_Downwards (Win : <B>in</B> Window);
- <I>-- AKA: <A HREF="curs_window.3x.html">wsyncdown()</A></I>
- <B>pragma</B> Import (C, Synchronize_Downwards, "wsyncdown");
-
- <I>-- <A NAME="AFU_19">|</I>
- <B>procedure</B> Set_Synch_Mode (Win : <B>in</B> Window := Standard_Window;
- Mode : <B>in</B> Boolean := False);
- <I>-- AKA: <A HREF="curs_window.3x.html">syncok()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_addstr.3x.html">curs_addstr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_20">|</I>
- <B>procedure</B> Add (Win : <B>in</B> Window := Standard_Window;
- Str : <B>in</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_addstr.3x.html">waddnstr()</A></I>
- <I>-- AKA: waddstr()</I>
-
- <I>-- <A NAME="AFU_21">|</I>
- <B>procedure</B> Add (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Str : <B>in</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_addstr.3x.html">mvwaddnstr()</A></I>
- <I>-- AKA: mvwaddstr()</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_addchstr.3x.html">curs_addchstr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_22">|</I>
- <B>procedure</B> Add (Win : <B>in</B> Window := Standard_Window;
- Str : <B>in</B> Attributed_String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_addchstr.3x.html">waddchnstr()</A></I>
- <I>-- AKA: waddchstr()</I>
-
- <I>-- <A NAME="AFU_23">|</I>
- <B>procedure</B> Add (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Str : <B>in</B> Attributed_String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_addchstr.3x.html">mvwaddchnstr()</A></I>
- <I>-- AKA: mvwaddchstr()</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_border.3x.html">curs_border.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_24">|</I>
- <B>procedure</B> Border
- (Win : <B>in</B> Window := Standard_Window;
- Left_Side_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Right_Side_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Top_Side_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Bottom_Side_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Upper_Left_Corner_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Upper_Right_Corner_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Lower_Left_Corner_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Lower_Right_Corner_Symbol : <B>in</B> Attributed_Character := Default_Character
- );
- <I>-- AKA: <A HREF="curs_border.3x.html">wborder()</A></I>
-
- <I>-- <A NAME="AFU_25">|</I>
- <B>procedure</B> Box
- (Win : <B>in</B> Window := Standard_Window;
- Vertical_Symbol : <B>in</B> Attributed_Character := Default_Character;
- Horizontal_Symbol : <B>in</B> Attributed_Character := Default_Character);
- <I>-- AKA: <A HREF="curs_border.3x.html">box()</A></I>
-
- <I>-- <A NAME="AFU_26">|</I>
- <B>procedure</B> Horizontal_Line
- (Win : <B>in</B> Window := Standard_Window;
- Line_Size : <B>in</B> Natural;
- Line_Symbol : <B>in</B> Attributed_Character := Default_Character);
- <I>-- AKA: <A HREF="curs_border.3x.html">whline()</A></I>
-
- <I>-- <A NAME="AFU_27">|</I>
- <B>procedure</B> Vertical_Line
- (Win : <B>in</B> Window := Standard_Window;
- Line_Size : <B>in</B> Natural;
- Line_Symbol : <B>in</B> Attributed_Character := Default_Character);
- <I>-- AKA: <A HREF="curs_border.3x.html">wvline()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_getch.3x.html">curs_getch.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_28">|</I>
- <B>function</B> Get_Keystroke (Win : Window := Standard_Window)
- <B>return</B> Real_Key_Code;
- <I>-- AKA: <A HREF="curs_getch.3x.html">wgetch()</A></I>
- <I>-- Get a character from the keyboard and echo it - if enabled - to the</I>
- <I>-- window.</I>
- <I>-- If for any reason (i.e. a timeout) we couldn't get a character the</I>
- <I>-- returned keycode is Key_None.</I>
-
- <I>-- <A NAME="AFU_29">|</I>
- <B>procedure</B> Undo_Keystroke (Key : <B>in</B> Real_Key_Code);
- <I>-- AKA: <A HREF="curs_getch.3x.html">ungetch()</A></I>
-
- <I>-- <A NAME="AFU_30">|</I>
- <B>function</B> Has_Key (Key : Special_Key_Code) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_getch.3x.html">has_key()</A></I>
- <I>-- |</I>
- <I>-- | Some helper functions</I>
- <I>-- |</I>
- <B>function</B> Is_Function_Key (Key : Special_Key_Code) <B>return</B> Boolean;
- <I>-- Return True if the Key is a function key (i.e. one of F0 .. F63)</I>
-
- <B>subtype</B> Function_Key_Number <B>is</B> Integer <B>range</B> 0 .. 63;
- <I>-- (n)curses allows for 64 function keys.</I>
-
- <B>function</B> Function_Key (Key : Real_Key_Code) <B>return</B> Function_Key_Number;
- <I>-- Return the number of the function key. If the code is not a</I>
- <I>-- function key, a CONSTRAINT_ERROR will be raised.</I>
-
- <B>function</B> Function_Key_Code (Key : Function_Key_Number) <B>return</B> Real_Key_Code;
- <I>-- Return the key code for a given functionkey number.</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_attr.3x.html">curs_attr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_31">|</I>
- <B>procedure</B> Switch_Character_Attribute
- (Win : <B>in</B> Window := Standard_Window;
- Attr : <B>in</B> Character_Attribute_Set := Normal_Video;
- On : <B>in</B> Boolean := True); <I>-- if False we switch Off.</I>
- <I>-- AKA: <A HREF="curs_attr.3x.html">wattron()</A></I>
- <I>-- AKA: wattroff()</I>
-
- <I>-- <A NAME="AFU_32">|</I>
- <B>procedure</B> Set_Character_Attributes
- (Win : <B>in</B> Window := Standard_Window;
- Attr : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="curs_attr.3x.html">wattrset()</A></I>
-
- <I>-- <A NAME="AFU_33">|</I>
- <B>function</B> Get_Character_Attribute
- (Win : <B>in</B> Window := Standard_Window) <B>return</B> Character_Attribute_Set;
- <I>-- AKA: <A HREF="curs_attr.3x.html">wattr_get()</A></I>
-
- <I>-- <A NAME="AFU_34">|</I>
- <B>function</B> Get_Character_Attribute
- (Win : <B>in</B> Window := Standard_Window) <B>return</B> Color_Pair;
- <I>-- AKA: <A HREF="curs_attr.3x.html">wattr_get()</A></I>
-
- <I>-- <A NAME="AFU_35">|</I>
- <B>procedure</B> Change_Attributes
- (Win : <B>in</B> Window := Standard_Window;
- Count : <B>in</B> Integer := -1;
- Attr : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="curs_attr.3x.html">wchgat()</A></I>
-
- <I>-- <A NAME="AFU_36">|</I>
- <B>procedure</B> Change_Attributes
- (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position := Line_Position'First;
- Column : <B>in</B> Column_Position := Column_Position'First;
- Count : <B>in</B> Integer := -1;
- Attr : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="curs_attr.3x.html">mvwchgat()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_beep.3x.html">curs_beep.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_37">|</I>
- <B>procedure</B> Beep;
- <I>-- AKA: <A HREF="curs_beep.3x.html">beep()</A></I>
-
- <I>-- <A NAME="AFU_38">|</I>
- <B>procedure</B> Flash_Screen;
- <I>-- AKA: <A HREF="curs_beep.3x.html">flash()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_inopts.3x.html">curs_inopts.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- | Not implemented : typeahead</I>
- <I>--</I>
- <I>-- <A NAME="AFU_39">|</I>
- <B>procedure</B> Set_Cbreak_Mode (SwitchOn : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">cbreak()</A></I>
- <I>-- AKA: nocbreak()</I>
-
- <I>-- <A NAME="AFU_40">|</I>
- <B>procedure</B> Set_Raw_Mode (SwitchOn : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">raw()</A></I>
- <I>-- AKA: noraw()</I>
-
- <I>-- <A NAME="AFU_41">|</I>
- <B>procedure</B> Set_Echo_Mode (SwitchOn : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">echo()</A></I>
- <I>-- AKA: noecho()</I>
-
- <I>-- <A NAME="AFU_42">|</I>
- <B>procedure</B> Set_Meta_Mode (Win : <B>in</B> Window := Standard_Window;
- SwitchOn : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">meta()</A></I>
-
- <I>-- <A NAME="AFU_43">|</I>
- <B>procedure</B> Set_KeyPad_Mode (Win : <B>in</B> Window := Standard_Window;
- SwitchOn : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">keypad()</A></I>
-
- type Half_Delay_Amount <B>is</B> <B>range</B> 1 .. 255;
-
- <I>-- <A NAME="AFU_44">|</I>
- <B>procedure</B> Half_Delay (Amount : <B>in</B> Half_Delay_Amount);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">halfdelay()</A></I>
-
- <I>-- <A NAME="AFU_45">|</I>
- <B>procedure</B> Set_Flush_On_Interrupt_Mode
- (Win : <B>in</B> Window := Standard_Window;
- Mode : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">intrflush()</A></I>
-
- <I>-- <A NAME="AFU_46">|</I>
- <B>procedure</B> Set_Queue_Interrupt_Mode
- (Win : <B>in</B> Window := Standard_Window;
- Flush : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">qiflush()</A></I>
- <I>-- AKA: noqiflush()</I>
-
- <I>-- <A NAME="AFU_47">|</I>
- <B>procedure</B> Set_NoDelay_Mode
- (Win : <B>in</B> Window := Standard_Window;
- Mode : <B>in</B> Boolean := False);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">nodelay()</A></I>
-
- type Timeout_Mode <B>is</B> (Blocking, Non_Blocking, Delayed);
-
- <I>-- <A NAME="AFU_48">|</I>
- <B>procedure</B> Set_Timeout_Mode (Win : <B>in</B> Window := Standard_Window;
- Mode : <B>in</B> Timeout_Mode;
- Amount : <B>in</B> Natural); <I>-- in Miliseconds</I>
- <I>-- AKA: <A HREF="curs_inopts.3x.html">wtimeout()</A></I>
- <I>-- Instead of overloading the semantic of the sign of amount, we</I>
- <I>-- introduce the Timeout_Mode parameter. This should improve</I>
- <I>-- readability. For Blocking and Non_Blocking, the Amount is not</I>
- <I>-- evaluated.</I>
-
- <I>-- <A NAME="AFU_49">|</I>
- <B>procedure</B> Set_Escape_Timer_Mode
- (Win : <B>in</B> Window := Standard_Window;
- Timer_Off : <B>in</B> Boolean := False);
- <I>-- AKA: <A HREF="curs_inopts.3x.html">notimeout()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_outopts.3x.html">curs_outopts.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_50">|</I>
- <B>procedure</B> Set_NL_Mode (SwitchOn : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">nl()</A></I>
- <I>-- AKA: nonl()</I>
-
- <I>-- <A NAME="AFU_51">|</I>
- <B>procedure</B> Clear_On_Next_Update
- (Win : <B>in</B> Window := Standard_Window;
- Do_Clear : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">clearok()</A></I>
-
- <I>-- <A NAME="AFU_52">|</I>
- <B>procedure</B> Use_Insert_Delete_Line
- (Win : <B>in</B> Window := Standard_Window;
- Do_Idl : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">idlok()</A></I>
-
- <I>-- <A NAME="AFU_53">|</I>
- <B>procedure</B> Use_Insert_Delete_Character
- (Win : <B>in</B> Window := Standard_Window;
- Do_Idc : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">idcok()</A></I>
-
- <I>-- <A NAME="AFU_54">|</I>
- <B>procedure</B> Leave_Cursor_After_Update
- (Win : <B>in</B> Window := Standard_Window;
- Do_Leave : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">leaveok()</A></I>
-
- <I>-- <A NAME="AFU_55">|</I>
- <B>procedure</B> Immediate_Update_Mode
- (Win : <B>in</B> Window := Standard_Window;
- Mode : <B>in</B> Boolean := False);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">immedok()</A></I>
-
- <I>-- <A NAME="AFU_56">|</I>
- <B>procedure</B> Allow_Scrolling
- (Win : <B>in</B> Window := Standard_Window;
- Mode : <B>in</B> Boolean := False);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">scrollok()</A></I>
-
- <B>function</B> Scrolling_Allowed (Win : Window := Standard_Window) <B>return</B> Boolean;
- <I>-- There is no such function in the C interface.</I>
-
- <I>-- <A NAME="AFU_57">|</I>
- <B>procedure</B> Set_Scroll_Region
- (Win : <B>in</B> Window := Standard_Window;
- Top_Line : <B>in</B> Line_Position;
- Bottom_Line : <B>in</B> Line_Position);
- <I>-- AKA: <A HREF="curs_outopts.3x.html">wsetscrreg()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_refresh.3x.html">curs_refresh.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_58">|</I>
- <B>procedure</B> Update_Screen;
- <I>-- AKA: <A HREF="curs_refresh.3x.html">doupdate()</A></I>
-
- <I>-- <A NAME="AFU_59">|</I>
- <B>procedure</B> Refresh (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_refresh.3x.html">wrefresh()</A></I>
-
- <I>-- <A NAME="AFU_60">|</I>
- <B>procedure</B> Refresh_Without_Update
- (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_refresh.3x.html">wnoutrefresh()</A></I>
-
- <I>-- <A NAME="AFU_61">|</I>
- <B>procedure</B> Redraw (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_refresh.3x.html">redrawwin()</A></I>
-
- <I>-- <A NAME="AFU_62">|</I>
- <B>procedure</B> Redraw (Win : <B>in</B> Window := Standard_Window;
- Begin_Line : <B>in</B> Line_Position;
- Line_Count : <B>in</B> Positive);
- <I>-- AKA: <A HREF="curs_refresh.3x.html">wredrawln()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_clear.3x.html">curs_clear.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_63">|</I>
- <B>procedure</B> Erase (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_clear.3x.html">werase()</A></I>
-
- <I>-- <A NAME="AFU_64">|</I>
- <B>procedure</B> Clear
- (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_clear.3x.html">wclear()</A></I>
-
- <I>-- <A NAME="AFU_65">|</I>
- <B>procedure</B> Clear_To_End_Of_Screen
- (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_clear.3x.html">wclrtobot()</A></I>
-
- <I>-- <A NAME="AFU_66">|</I>
- <B>procedure</B> Clear_To_End_Of_Line
- (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_clear.3x.html">wclrtoeol()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_bkgd.3x.html">curs_bkgd.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_67">|</I>
- <B>procedure</B> Set_Background
- (Win : <B>in</B> Window := Standard_Window;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_bkgd.3x.html">wbkgdset()</A></I>
-
- <I>-- <A NAME="AFU_68">|</I>
- <B>procedure</B> Change_Background
- (Win : <B>in</B> Window := Standard_Window;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_bkgd.3x.html">wbkgd()</A></I>
-
- <I>-- <A NAME="AFU_69">|</I>
- <B>function</B> Get_Background (Win : Window := Standard_Window)
- <B>return</B> Attributed_Character;
- <I>-- AKA: <A HREF="curs_bkgd.3x.html">wbkgdget()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_touch.3x.html">curs_touch.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_70">|</I>
- <B>procedure</B> Touch (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_touch.3x.html">touchwin()</A></I>
-
- <I>-- <A NAME="AFU_71">|</I>
- <B>procedure</B> Untouch (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_touch.3x.html">untouchwin()</A></I>
-
- <I>-- <A NAME="AFU_72">|</I>
- <B>procedure</B> Touch (Win : <B>in</B> Window := Standard_Window;
- Start : <B>in</B> Line_Position;
- Count : <B>in</B> Positive);
- <I>-- AKA: <A HREF="curs_touch.3x.html">touchline()</A></I>
-
- <I>-- <A NAME="AFU_73">|</I>
- <B>procedure</B> Change_Lines_Status (Win : <B>in</B> Window := Standard_Window;
- Start : <B>in</B> Line_Position;
- Count : <B>in</B> Positive;
- State : <B>in</B> Boolean);
- <I>-- AKA: <A HREF="curs_touch.3x.html">wtouchln()</A></I>
-
- <I>-- <A NAME="AFU_74">|</I>
- <B>function</B> Is_Touched (Win : Window := Standard_Window;
- Line : Line_Position) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_touch.3x.html">is_linetouched()</A></I>
-
- <I>-- <A NAME="AFU_75">|</I>
- <B>function</B> Is_Touched (Win : Window := Standard_Window) <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_touch.3x.html">is_wintouched()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_overlay.3x.html">curs_overlay.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_76">|</I>
- <B>procedure</B> Copy
- (Source_Window : <B>in</B> Window;
- Destination_Window : <B>in</B> Window;
- Source_Top_Row : <B>in</B> Line_Position;
- Source_Left_Column : <B>in</B> Column_Position;
- Destination_Top_Row : <B>in</B> Line_Position;
- Destination_Left_Column : <B>in</B> Column_Position;
- Destination_Bottom_Row : <B>in</B> Line_Position;
- Destination_Right_Column : <B>in</B> Column_Position;
- Non_Destructive_Mode : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_overlay.3x.html">copywin()</A></I>
-
- <I>-- <A NAME="AFU_77">|</I>
- <B>procedure</B> Overwrite (Source_Window : <B>in</B> Window;
- Destination_Window : <B>in</B> Window);
- <I>-- AKA: <A HREF="curs_overlay.3x.html">overwrite()</A></I>
-
- <I>-- <A NAME="AFU_78">|</I>
- <B>procedure</B> Overlay (Source_Window : <B>in</B> Window;
- Destination_Window : <B>in</B> Window);
- <I>-- AKA: <A HREF="curs_overlay.3x.html">overlay()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_deleteln.3x.html">curs_deleteln.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_79">|</I>
- <B>procedure</B> Insert_Delete_Lines
- (Win : <B>in</B> Window := Standard_Window;
- Lines : <B>in</B> Integer := 1); <I>-- default is to insert one line above</I>
- <I>-- AKA: <A HREF="curs_deleteln.3x.html">winsdelln()</A></I>
-
- <I>-- <A NAME="AFU_80">|</I>
- <B>procedure</B> Delete_Line (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_deleteln.3x.html">wdeleteln()</A></I>
-
- <I>-- <A NAME="AFU_81">|</I>
- <B>procedure</B> Insert_Line (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_deleteln.3x.html">winsertln()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_getyx.3x.html">curs_getyx.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_82">|</I>
- <B>procedure</B> Get_Size
- (Win : <B>in</B> Window := Standard_Window;
- Number_Of_Lines : <B>out</B> Line_Count;
- Number_Of_Columns : <B>out</B> Column_Count);
- <I>-- AKA: <A HREF="curs_getyx.3x.html">getmaxyx()</A></I>
-
- <I>-- <A NAME="AFU_83">|</I>
- <B>procedure</B> Get_Window_Position
- (Win : <B>in</B> Window := Standard_Window;
- Top_Left_Line : <B>out</B> Line_Position;
- Top_Left_Column : <B>out</B> Column_Position);
- <I>-- AKA: <A HREF="curs_getyx.3x.html">getbegyx()</A></I>
-
- <I>-- <A NAME="AFU_84">|</I>
- <B>procedure</B> Get_Cursor_Position
- (Win : <B>in</B> Window := Standard_Window;
- Line : <B>out</B> Line_Position;
- Column : <B>out</B> Column_Position);
- <I>-- AKA: <A HREF="curs_getyx.3x.html">getyx()</A></I>
-
- <I>-- <A NAME="AFU_85">|</I>
- <B>procedure</B> Get_Origin_Relative_To_Parent
- (Win : <B>in</B> Window;
- Top_Left_Line : <B>out</B> Line_Position;
- Top_Left_Column : <B>out</B> Column_Position;
- Is_Not_A_Subwindow : <B>out</B> Boolean);
- <I>-- AKA: <A HREF="curs_getyx.3x.html">getparyx()</A></I>
- <I>-- Instead of placing -1 in the coordinates as return, we use a boolean</I>
- <I>-- to return the info that the window has no parent.</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_pad.3x.html">curs_pad.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_86">|</I>
- <B>function</B> New_Pad (Lines : Line_Count;
- Columns : Column_Count) <B>return</B> Window;
- <I>-- AKA: <A HREF="curs_pad.3x.html">newpad()</A></I>
-
- <I>-- <A NAME="AFU_87">|</I>
- <B>function</B> Sub_Pad
- (Pad : Window;
- Number_Of_Lines : Line_Count;
- Number_Of_Columns : Column_Count;
- First_Line_Position : Line_Position;
- First_Column_Position : Column_Position) <B>return</B> Window;
- <I>-- AKA: <A HREF="curs_pad.3x.html">subpad()</A></I>
-
- <I>-- <A NAME="AFU_88">|</I>
- <B>procedure</B> Refresh
- (Pad : <B>in</B> Window;
- Source_Top_Row : <B>in</B> Line_Position;
- Source_Left_Column : <B>in</B> Column_Position;
- Destination_Top_Row : <B>in</B> Line_Position;
- Destination_Left_Column : <B>in</B> Column_Position;
- Destination_Bottom_Row : <B>in</B> Line_Position;
- Destination_Right_Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="curs_pad.3x.html">prefresh()</A></I>
-
- <I>-- <A NAME="AFU_89">|</I>
- <B>procedure</B> Refresh_Without_Update
- (Pad : <B>in</B> Window;
- Source_Top_Row : <B>in</B> Line_Position;
- Source_Left_Column : <B>in</B> Column_Position;
- Destination_Top_Row : <B>in</B> Line_Position;
- Destination_Left_Column : <B>in</B> Column_Position;
- Destination_Bottom_Row : <B>in</B> Line_Position;
- Destination_Right_Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="curs_pad.3x.html">pnoutrefresh()</A></I>
-
- <I>-- <A NAME="AFU_90">|</I>
- <B>procedure</B> Add_Character_To_Pad_And_Echo_It
- (Pad : <B>in</B> Window;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_pad.3x.html">pechochar()</A></I>
-
- <B>procedure</B> Add_Character_To_Pad_And_Echo_It
- (Pad : <B>in</B> Window;
- Ch : <B>in</B> Character);
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_scroll.3x.html">curs_scroll.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_91">|</I>
- <B>procedure</B> Scroll (Win : <B>in</B> Window := Standard_Window;
- Amount : <B>in</B> Integer := 1);
- <I>-- AKA: <A HREF="curs_scroll.3x.html">wscrl()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_delch.3x.html">curs_delch.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_92">|</I>
- <B>procedure</B> Delete_Character (Win : <B>in</B> Window := Standard_Window);
- <I>-- AKA: <A HREF="curs_delch.3x.html">wdelch()</A></I>
-
- <I>-- <A NAME="AFU_93">|</I>
- <B>procedure</B> Delete_Character
- (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position);
- <I>-- AKA: <A HREF="curs_delch.3x.html">mvwdelch()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_inch.3x.html">curs_inch.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_94">|</I>
- <B>function</B> Peek (Win : Window := Standard_Window)
- <B>return</B> Attributed_Character;
- <I>-- AKA: <A HREF="curs_inch.3x.html">winch()</A></I>
-
- <I>-- <A NAME="AFU_95">|</I>
- <B>function</B> Peek
- (Win : Window := Standard_Window;
- Line : Line_Position;
- Column : Column_Position) <B>return</B> Attributed_Character;
- <I>-- AKA: <A HREF="curs_inch.3x.html">mvwinch()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_winch.3x.html">curs_winch.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_96">|</I>
- <B>procedure</B> Insert (Win : <B>in</B> Window := Standard_Window;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_winch.3x.html">winsch()</A></I>
-
- <I>-- <A NAME="AFU_97">|</I>
- <B>procedure</B> Insert (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Ch : <B>in</B> Attributed_Character);
- <I>-- AKA: <A HREF="curs_winch.3x.html">mvwinsch()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_winch.3x.html">curs_winch.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_98">|</I>
- <B>procedure</B> Insert (Win : <B>in</B> Window := Standard_Window;
- Str : <B>in</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_winch.3x.html">winsnstr()</A></I>
- <I>-- AKA: winsstr()</I>
-
- <I>-- <A NAME="AFU_99">|</I>
- <B>procedure</B> Insert (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Str : <B>in</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_winch.3x.html">mvwinsnstr()</A></I>
- <I>-- AKA: mvwinsstr()</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_instr.3x.html">curs_instr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_100">|</I>
- <B>procedure</B> Peek (Win : <B>in</B> Window := Standard_Window;
- Str : <B>out</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_instr.3x.html">winnstr()</A></I>
- <I>-- AKA: winstr()</I>
-
- <I>-- <A NAME="AFU_101">|</I>
- <B>procedure</B> Peek (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Str : <B>out</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_instr.3x.html">mvwinnstr()</A></I>
- <I>-- AKA: mvwinstr()</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_inchstr.3x.html">curs_inchstr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_102">|</I>
- <B>procedure</B> Peek (Win : <B>in</B> Window := Standard_Window;
- Str : <B>out</B> Attributed_String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_inchstr.3x.html">winchnstr()</A></I>
- <I>-- AKA: winchstr()</I>
-
- <I>-- <A NAME="AFU_103">|</I>
- <B>procedure</B> Peek (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Str : <B>out</B> Attributed_String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_inchstr.3x.html">mvwinchnstr()</A></I>
- <I>-- AKA: mvwinchstr()</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_getstr.3x.html">curs_getstr.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_104">|</I>
- <B>procedure</B> Get (Win : <B>in</B> Window := Standard_Window;
- Str : <B>out</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_getstr.3x.html">wgetnstr()</A></I>
- <I>-- AKA: wgetstr()</I>
-
- <B>procedure</B> Get (Win : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> Line_Position;
- Column : <B>in</B> Column_Position;
- Str : <B>out</B> String;
- Len : <B>in</B> Integer := -1);
- <I>-- AKA: <A HREF="curs_getstr.3x.html">wgetnstr()</A>: not specified in ncurses, should be: mvwgetnstr()</I>
- <I>-- and mvwgetstr() (which exists)</I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_slk.3x.html">curs_slk.3x</A></I>
- <I>-- |=====================================================================</I>
-
- type Soft_Label_Key_Format <B>is</B> (Three_Two_Three,
- Four_Four,
- PC_Style, <I>-- ncurses specific</I>
- PC_Style_With_Index); <I>-- "</I>
- type Label_Number <B>is</B> <B>new</B> Positive <B>range</B> 1 .. 12;
- type Label_Justification <B>is</B> (Left, Centered, Right);
-
- <I>-- <A NAME="AFU_105">|</I>
- <B>procedure</B> Init_Soft_Label_Keys
- (Format : <B>in</B> Soft_Label_Key_Format := Three_Two_Three);
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_init()</A></I>
-
- <I>-- <A NAME="AFU_106">|</I>
- <B>procedure</B> Set_Soft_Label_Key (Label : <B>in</B> Label_Number;
- Text : <B>in</B> String;
- Fmt : <B>in</B> Label_Justification := Left);
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_set()</A></I>
-
- <I>-- <A NAME="AFU_107">|</I>
- <B>procedure</B> Refresh_Soft_Label_Keys;
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_refresh()</A></I>
-
- <I>-- <A NAME="AFU_108">|</I>
- <B>procedure</B> Refresh_Soft_Label_Keys_Without_Update;
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_noutrefresh()</A></I>
-
- <I>-- <A NAME="AFU_109">|</I>
- <B>procedure</B> Get_Soft_Label_Key (Label : <B>in</B> Label_Number;
- Text : <B>out</B> String);
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_label()</A></I>
-
- <I>-- <A NAME="AFU_110">|</I>
- <B>procedure</B> Clear_Soft_Label_Keys;
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_clear()</A></I>
-
- <I>-- <A NAME="AFU_111">|</I>
- <B>procedure</B> Restore_Soft_Label_Keys;
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_restore()</A></I>
-
- <I>-- <A NAME="AFU_112">|</I>
- <B>procedure</B> Touch_Soft_Label_Keys;
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_touch()</A></I>
-
- <I>-- <A NAME="AFU_113">|</I>
- <B>procedure</B> Switch_Soft_Label_Key_Attributes
- (Attr : <B>in</B> Character_Attribute_Set;
- On : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_attron()</A></I>
- <I>-- AKA: slk_attroff()</I>
-
- <I>-- <A NAME="AFU_114">|</I>
- <B>procedure</B> Set_Soft_Label_Key_Attributes
- (Attr : <B>in</B> Character_Attribute_Set := Normal_Video;
- Color : <B>in</B> Color_Pair := Color_Pair'First);
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_attrset()</A></I>
-
- <I>-- <A NAME="AFU_115">|</I>
- <B>function</B> Get_Soft_Label_Key_Attributes <B>return</B> Character_Attribute_Set;
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_attr()</A></I>
-
- <I>-- <A NAME="AFU_116">|</I>
- <B>function</B> Get_Soft_Label_Key_Attributes <B>return</B> Color_Pair;
- <I>-- AKA: <A HREF="curs_slk.3x.html">slk_attr()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="keyok.3x.html">keyok.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_117">|</I>
- <B>procedure</B> Enable_Key (Key : <B>in</B> Special_Key_Code;
- Enable : <B>in</B> Boolean := True);
- <I>-- AKA: <A HREF="keyok.3x.html">keyok()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="define_key.3x.html">define_key.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_118">|</I>
- <B>procedure</B> Define_Key (Definition : <B>in</B> String;
- Key : <B>in</B> Special_Key_Code);
- <I>-- AKA: <A HREF="define_key.3x.html">define_key()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_util.3x.html">curs_util.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- | Not implemented : filter, use_env, putwin, getwin</I>
- <I>--</I>
- <I>-- <A NAME="AFU_119">|</I>
- <B>procedure</B> Key_Name (Key : <B>in</B> Real_Key_Code;
- Name : <B>out</B> String);
- <I>-- AKA: <A HREF="curs_util.3x.html">keyname()</A></I>
- <I>-- The external name for a real keystroke.</I>
-
- <I>-- <A NAME="AFU_120">|</I>
- <B>procedure</B> Un_Control (Ch : <B>in</B> Attributed_Character;
- Str : <B>out</B> String);
- <I>-- AKA: <A HREF="curs_util.3x.html">unctrl()</A></I>
-
- <I>-- <A NAME="AFU_121">|</I>
- <B>procedure</B> Delay_Output (Msecs : <B>in</B> Natural);
- <I>-- AKA: <A HREF="curs_util.3x.html">delay_output()</A></I>
-
- <I>-- <A NAME="AFU_122">|</I>
- <B>procedure</B> Flush_Input;
- <I>-- AKA: <A HREF="curs_util.3x.html">flushinp()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_termattrs.3x.html">curs_termattrs.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_123">|</I>
- <B>function</B> Baudrate <B>return</B> Natural;
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">baudrate()</A></I>
-
- <I>-- <A NAME="AFU_124">|</I>
- <B>function</B> Erase_Character <B>return</B> Character;
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">erasechar()</A></I>
-
- <I>-- <A NAME="AFU_125">|</I>
- <B>function</B> Kill_Character <B>return</B> Character;
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">killchar()</A></I>
-
- <I>-- <A NAME="AFU_126">|</I>
- <B>function</B> Has_Insert_Character <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">has_ic()</A></I>
-
- <I>-- <A NAME="AFU_127">|</I>
- <B>function</B> Has_Insert_Line <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">has_il()</A></I>
-
- <I>-- <A NAME="AFU_128">|</I>
- <B>function</B> Supported_Attributes <B>return</B> Character_Attribute_Set;
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">termattrs()</A></I>
-
- <I>-- <A NAME="AFU_129">|</I>
- <B>procedure</B> Long_Name (Name : <B>out</B> String);
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">longname()</A></I>
-
- <I>-- <A NAME="AFU_130">|</I>
- <B>procedure</B> Terminal_Name (Name : <B>out</B> String);
- <I>-- AKA: <A HREF="curs_termattrs.3x.html">termname()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_color.3x.html">curs_color.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- <A NAME="AFU_131">|</I>
- <B>procedure</B> Start_Color;
- <I>-- AKA: <A HREF="curs_color.3x.html">start_clolor()</A></I>
- <B>pragma</B> Import (C, Start_Color, "start_color");
-
- <I>-- <A NAME="AFU_132">|</I>
- <B>procedure</B> Init_Pair (Pair : <B>in</B> Redefinable_Color_Pair;
- Fore : <B>in</B> Color_Number;
- Back : <B>in</B> Color_Number);
- <I>-- AKA: <A HREF="curs_color.3x.html">init_pair()</A></I>
-
- <I>-- <A NAME="AFU_133">|</I>
- <B>procedure</B> Pair_Content (Pair : <B>in</B> Color_Pair;
- Fore : <B>out</B> Color_Number;
- Back : <B>out</B> Color_Number);
- <I>-- AKA: <A HREF="curs_color.3x.html">pair_content()</A></I>
-
- <I>-- <A NAME="AFU_134">|</I>
- <B>function</B> Has_Colors <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_color.3x.html">has_colors()</A></I>
-
- <I>-- <A NAME="AFU_135">|</I>
- <B>procedure</B> Init_Color (Color : <B>in</B> Color_Number;
- Red : <B>in</B> RGB_Value;
- Green : <B>in</B> RGB_Value;
- Blue : <B>in</B> RGB_Value);
- <I>-- AKA: <A HREF="curs_color.3x.html">init_color()</A></I>
-
- <I>-- <A NAME="AFU_136">|</I>
- <B>function</B> Can_Change_Color <B>return</B> Boolean;
- <I>-- AKA: <A HREF="curs_color.3x.html">can_change_color()</A></I>
-
- <I>-- <A NAME="AFU_137">|</I>
- <B>procedure</B> Color_Content (Color : <B>in</B> Color_Number;
- Red : <B>out</B> RGB_Value;
- Green : <B>out</B> RGB_Value;
- Blue : <B>out</B> RGB_Value);
- <I>-- AKA: <A HREF="curs_color.3x.html">color_content()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Man page <A HREF="curs_kernel.3x.html">curs_kernel.3x</A></I>
- <I>-- |=====================================================================</I>
-
- <I>-- | Not implemented: getsyx, setsyx</I>
- <I>--</I>
- type Curses_Mode <B>is</B> (Curses, Shell);
-
- <I>-- <A NAME="AFU_138">|</I>
- <B>procedure</B> Save_Curses_Mode (Mode : <B>in</B> Curses_Mode);
- <I>-- AKA: <A HREF="curs_kernel.3x.html">def_prog_mode()</A></I>
- <I>-- AKA: def_shell_mode()</I>
-
- <I>-- <A NAME="AFU_139">|</I>
- <B>procedure</B> Reset_Curses_Mode (Mode : <B>in</B> Curses_Mode);
- <I>-- AKA: <A HREF="curs_kernel.3x.html">reset_prog_mode()</A></I>
- <I>-- AKA: reset_shell_mode()</I>
-
- <I>-- <A NAME="AFU_140">|</I>
- <B>procedure</B> Save_Terminal_State;
- <I>-- AKA: <A HREF="curs_kernel.3x.html">savetty()</A></I>
-
- <I>-- <A NAME="AFU_141">|</I>
- <B>procedure</B> Reset_Terminal_State;
- <I>-- AKA: <A HREF="curs_kernel.3x.html">resetty();</A></I>
-
- type Stdscr_Init_Proc <B>is</B> <B>access</B>
- <B>function</B> (Win : Window;
- Columns : Column_Count) <B>return</B> Integer;
- <B>pragma</B> Convention (C, Stdscr_Init_Proc);
- <I>-- N.B.: the return value is actually ignored, but it seems to be</I>
- <I>-- a good practice to return 0 if you think all went fine</I>
- <I>-- and -1 otherwise.</I>
-
- <I>-- <A NAME="AFU_142">|</I>
- <B>procedure</B> Rip_Off_Lines (Lines : <B>in</B> Integer;
- Proc : <B>in</B> Stdscr_Init_Proc);
- <I>-- AKA: <A HREF="curs_kernel.3x.html">ripoffline()</A></I>
- <I>-- N.B.: to be more precise, this uses a ncurses specific enhancement of</I>
- <I>-- ripoffline(), in which the Lines argument absolute value is the</I>
- <I>-- number of lines to be ripped of. The official ripoffline() only</I>
- <I>-- uses the sign of Lines to rip of a single line from bottom or top.</I>
-
- type Cursor_Visibility <B>is</B> (Invisible, Normal, Very_Visible);
-
- <I>-- <A NAME="AFU_143">|</I>
- <B>procedure</B> Set_Cursor_Visibility (Visibility : <B>in</B> <B>out</B> Cursor_Visibility);
- <I>-- AKA: <A HREF="curs_kernel.3x.html">curs_set()</A></I>
-
- <I>-- <A NAME="AFU_144">|</I>
- <B>procedure</B> Nap_Milli_Seconds (Ms : <B>in</B> Natural);
- <I>-- AKA: <A HREF="curs_kernel.3x.html">napms()</A></I>
-
- <I>-- |=====================================================================</I>
- <I>-- | Some usefull helpers.</I>
- <I>-- |=====================================================================</I>
- type Transform_Direction <B>is</B> (From_Screen, To_Screen);
- <B>procedure</B> Transform_Coordinates
- (W : <B>in</B> Window := Standard_Window;
- Line : <B>in</B> <B>out</B> Line_Position;
- Column : <B>in</B> <B>out</B> Column_Position;
- Dir : <B>in</B> Transform_Direction := From_Screen);
- <I>-- This procedure transforms screen coordinates into coordinates relative</I>
- <I>-- to the window and vice versa, depending on the Dir parmeter.</I>
- <I>-- Screen coordinates are the position informations on the physical device.</I>
- <I>-- An Curses_Exception will be raised if Line and Column are not in the</I>
- <I>-- Window or if you pass the Null_Window as argument.</I>
-
-<B>private</B>
- type Window <B>is</B> <B>new</B> System.Address;
- Null_Window : <B>constant</B> Window := Window (System.Null_Address);
-
- Generation_Bit_Order : <B>constant</B> System.Bit_Order := System.Low_Order_First;
- <I>-- This constant may be different on your system.</I>
-
-<B>end</B> Terminal_Interface.Curses;
-
-</PRE>
-
-<P><HR><P>
-This is BETA software. The interface is subject to change without notice.
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
+++ /dev/null
-<HTML>
-<HEAD>
-<TITLE></TITLE>
-</HEAD>
-<BODY BGCOLOR="#99ccbb" TEXT="#000000" LINK="#4060b0" VLINK="#000080" ALINK="#ff4040">
-<PRE>
-<I>------------------------------------------------------------------------------</I>
-<I>-- --</I>
-<I>-- <A HREF="http://www.gnat.com">GNAT</A> ncurses Binding --</I>
-<I>-- --</I>
-<I>-- Terminal_Interface --</I>
-<I>-- --</I>
-<I>-- S P E C --</I>
-<I>-- --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- Copyright (c) 1998 Free Software Foundation, Inc. --</I>
-<I>-- --</I>
-<I>-- Permission is hereby granted, free of charge, to any person obtaining a --</I>
-<I>-- copy of this software and associated documentation files (the --</I>
-<I>-- "Software"), to deal in the Software without restriction, including --</I>
-<I>-- without limitation the rights to use, copy, modify, merge, publish, --</I>
-<I>-- distribute, distribute with modifications, sublicense, and/or sell --</I>
-<I>-- copies of the Software, and to permit persons to whom the Software is --</I>
-<I>-- furnished to do so, subject to the following conditions: --</I>
-<I>-- --</I>
-<I>-- The above copyright notice and this permission notice shall be included --</I>
-<I>-- in all copies or substantial portions of the Software. --</I>
-<I>-- --</I>
-<I>-- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS --</I>
-<I>-- OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF --</I>
-<I>-- MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. --</I>
-<I>-- IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, --</I>
-<I>-- DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR --</I>
-<I>-- OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR --</I>
-<I>-- THE USE OR OTHER DEALINGS IN THE SOFTWARE. --</I>
-<I>-- --</I>
-<I>-- Except as contained in this notice, the name(s) of the above copyright --</I>
-<I>-- holders shall not be used in advertising or otherwise to promote the --</I>
-<I>-- sale, use or other dealings in this Software without prior written --</I>
-<I>-- authorization. --</I>
-<I>------------------------------------------------------------------------------</I>
-<I>-- <A HREF="http://home.t-online.de/home/Juergen.Pfeifer">Jürgen Pfeifer</A>, Email: <A HREF="mailto:Juergen.Pfeifer@T-Online.de">Juergen.Pfeifer@T-Online.de</A> --</I>
-<I>-- Version Control:</I>
-<I>-- @Revision: 1.4 @</I>
-<I>------------------------------------------------------------------------------</I>
-<B>package</B> Terminal_Interface <B>is</B>
-<I>--</I>
-<I>-- Everything is in the child units</I>
-<I>--</I>
-<B>end</B> Terminal_Interface;
-
-</PRE>
-
-<P><HR><P>
-<P>
-This is BETA software. The interface is subject to change without notice.<P>
-<!-- Do NOT delete my name or the tool name from below; -->
-<!-- giving me credit is a condition of use of ada2html -->
-<P><I>This hypertext format was generated by <A HREF="http://www.adahome.com/Tutorials/Lovelace/dwheeler.htm">David A. Wheeler</A>'s <A HREF="http://www.adahome.com/Resources/Tools/ada2html/ada2html.htm">ada2html</A></I>
-</BODY>
-</HTML>
-
# authorization. #
##############################################################################
#
-# Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+# Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
#
# Version Control
-# $Revision: 1.16 $
+# $Revision: 1.21 $
#
.SUFFIXES:
exec_prefix = @exec_prefix@
libdir = @libdir@
includedir = @includedir@
-datadir = @datadir@
-ticdir = $(datadir)/terminfo
INSTALL = @INSTALL@
INSTALL_DATA = @INSTALL_DATA@
RANLIB = @RANLIB@
################################################################################
-ada_srcdir=../ada_include
-ada_objdir=../ada_objects
+ada_srcdir=../src
LD_FLAGS = @LD_MODEL@ $(LOCAL_LIBS) @LDFLAGS@ @LIBS@ @LOCAL_LDFLAGS2@ $(LDFLAGS)
ADAFLAGS = @ADAFLAGS@ -I$(srcdir)
ADAMAKE = @cf_ada_make@
-ADAMAKEFLAGS = -aI$(srcdir) -aI$(ada_srcdir) -aI$(srcdir)/$(ada_srcdir) -aO$(ada_objdir)
+ADAMAKEFLAGS = -a -A$(srcdir) -A$(ada_srcdir) -A$(srcdir)/$(ada_srcdir)
ALIB = @cf_ada_package@
ABASE = $(ALIB)-curses
CARGS =-cargs $(ADAFLAGS)
-LARGS =-largs -L../../lib $(LD_FLAGS)
+LARGS =-largs -L../../lib $(LD_FLAGS) -lncurses
PROGS = tour rain
------------------------------------------------------------------------------
-- Author: Laurent Pautet <pautet@gnat.com> 1997 (modified by J.Pfeifer)
-- Version Control
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.4 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-- --
with Ada.Numerics.Float_Random; use Ada.Numerics.Float_Random;
------------------------------------------------------------------------------
-- Author: Laurent Pautet <pautet@gnat.com> 1997 (modified by J.Pfeifer)
-- Version Control
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.4 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-- --
procedure Rain;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels;
with Sample.Manifest; use Sample.Manifest;
-with Sample.Helpers; use Sample.Helpers;
with Sample.Function_Key_Setting; use Sample.Function_Key_Setting;
with Sample.Keyboard_Handler; use Sample.Keyboard_Handler;
-with Sample.Header_Handler; use Sample.Header_Handler;
with Sample.Explanation; use Sample.Explanation;
-with Sample.Menu_Demo.Handler;
-with Sample.Curses_Demo.Mouse;
-
package body Sample.Curses_Demo.Attributes is
procedure Demo
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Sample.Curses_Demo.Attributes is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.11 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels;
Msg : Window;
Ctl : Controls;
Pan : Panel;
- N : constant Natural := Ctl'Length;
K : Real_Key_Code;
V : Cursor_Visibility := Invisible;
W : Window;
Delete (Frame);
Set_Cursor_Visibility (V);
- End_Mouse;
+ End_Mouse (Mask);
Pop_Environment;
Update_Panels; Update_Screen;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Sample.Curses_Demo.Mouse is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Menus; use Terminal_Interface.Curses.Menus;
with Sample.Manifest; use Sample.Manifest;
with Sample.Helpers; use Sample.Helpers;
with Sample.Function_Key_Setting; use Sample.Function_Key_Setting;
-with Sample.Keyboard_Handler; use Sample.Keyboard_Handler;
-with Sample.Header_Handler; use Sample.Header_Handler;
+
with Sample.Explanation; use Sample.Explanation;
with Sample.Menu_Demo.Handler;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Sample.Curses_Demo is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.9 $
--- Binding Version 00.93
+-- $Revision: 1.12 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-- Poor mans help system. This scans a sequential file for key lines and
-- then reads the lines up to the next key. Those lines are presented in
Root : Help_Line_Access := null;
Current : Help_Line_Access;
Tail : Help_Line_Access := null;
- Save : String_Access;
function Next_Line return Boolean;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-- Poor mans help system. This scans a sequential file for key lines and
-- then reads the lines up to the next key. Those lines are presented in
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.9 $
--- Binding Version 00.93
+-- $Revision: 1.11 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
with Sample.Form_Demo.Aux;
-with Sample.Explanation; use Sample.Explanation;
package body Sample.Form_Demo.Handler is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses;
use Terminal_Interface.Curses;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
-with Ada.Strings.Unbounded; use Ada.Strings.Unbounded;
-
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
-with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels;
with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms;
with Terminal_Interface.Curses.Forms.Field_User_Data;
with Terminal_Interface.Curses.Forms.Form_User_Data;
-with Sample.Keyboard_Handler; use Sample.Keyboard_Handler;
with Sample.My_Field_Type; use Sample.My_Field_Type;
-with Sample.Manifest; use Sample.Manifest;
with Sample.Explanation; use Sample.Explanation;
with Sample.Form_Demo.Aux; use Sample.Form_Demo.Aux;
with Sample.Function_Key_Setting; use Sample.Function_Key_Setting;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Sample.Form_Demo is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Deallocation;
with Sample.Manifest; use Sample.Manifest;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Calendar; use Ada.Calendar;
with Terminal_Interface.Curses.Text_IO.Integer_IO;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Strings; use Ada.Strings;
with Ada.Strings.Fixed; use Ada.Strings.Fixed;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Sample.Menu_Demo.Aux;
-with Sample.Explanation; use Sample.Explanation;
with Sample.Manifest; use Sample.Manifest;
+with Terminal_Interface.Curses.Mouse; use Terminal_Interface.Curses.Mouse;
package body Sample.Menu_Demo.Handler is
Col : in Column_Position;
Title : in String := "")
is
- Pan : Panel := Aux.Create (M, Title, Lin, Col);
- V : Cursor_Visibility := Invisible;
+ Mask : Event_Mask := No_Events;
+ Old : Event_Mask;
+ Pan : Panel := Aux.Create (M, Title, Lin, Col);
+ V : Cursor_Visibility := Invisible;
begin
+ -- We are only interested in Clicks with the left button
+ Register_Reportable_Events (Left, All_Clicks, Mask);
+ Old := Start_Mouse (Mask);
Set_Cursor_Visibility (V);
loop
declare
I : constant Item := Current (M);
O : Item_Option_Set;
begin
+ if K = Key_Mouse then
+ K := SELECT_ITEM;
+ end if;
Get_Options (I, O);
if K = SELECT_ITEM and then not O.Selectable then
Beep;
end case;
end;
end loop;
- Set_Cursor_Visibility (V);
+ End_Mouse (Old);
Aux.Destroy (M, Pan);
end Drive_Me;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses;
use Terminal_Interface.Curses;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.11 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Panels; use Terminal_Interface.Curses.Panels;
with Terminal_Interface.Curses.Menus.Menu_User_Data;
with Terminal_Interface.Curses.Menus.Item_User_Data;
-with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
-
with Sample.Manifest; use Sample.Manifest;
with Sample.Function_Key_Setting; use Sample.Function_Key_Setting;
-with Sample.Keyboard_Handler; use Sample.Keyboard_Handler;
with Sample.Menu_Demo.Handler;
with Sample.Helpers; use Sample.Helpers;
with Sample.Explanation; use Sample.Explanation;
Flip_State := True;
Pop_Environment;
+ pragma Assert (Get_Index (Items (M, 1)) = Get_Index (I (1)));
Delete (M);
Free (I, True);
end Spacing_Test;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Sample.Menu_Demo is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Forms; use Terminal_Interface.Curses.Forms;
with Terminal_Interface.Curses.Forms.Field_Types.User;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Numerics.Generic_Elementary_Functions;
with Ada.Numerics.Complex_Types;
with Terminal_Interface.Curses.Text_IO.Modular_IO;
with Sample.Manifest; use Sample.Manifest;
-with Sample.Helpers; use Sample.Helpers;
with Sample.Function_Key_Setting; use Sample.Function_Key_Setting;
with Sample.Keyboard_Handler; use Sample.Keyboard_Handler;
with Sample.Explanation; use Sample.Explanation;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Sample.Text_IO_Demo is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.11 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Text_IO;
-with Ada.Characters.Latin_1; use Ada.Characters.Latin_1;
with Ada.Exceptions; use Ada.Exceptions;
with Terminal_Interface.Curses; use Terminal_Interface.Curses;
with Terminal_Interface.Curses.Menus.Item_User_Data;
with Sample.Manifest; use Sample.Manifest;
-with Sample.Helpers; use Sample.Helpers;
with Sample.Function_Key_Setting; use Sample.Function_Key_Setting;
with Sample.Keyboard_Handler; use Sample.Keyboard_Handler;
with Sample.Header_Handler; use Sample.Header_Handler;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Sample is
procedure Whow;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.5 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-- This package has been contributed by Laurent Pautet <pautet@gnat.com> --
-- --
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-- This package has been contributed by Laurent Pautet <pautet@gnat.com> --
-- --
package Status is
+ pragma Warnings (Off); -- the next pragma exists since 3.11p
+ pragma Unreserve_All_Interrupts;
+ pragma Warnings (On);
+
protected Process is
procedure Stop;
function Continue return Boolean;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Sample; use Sample;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
procedure Tour;
--- /dev/null
+##############################################################################
+# Copyright (c) 1998 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. #
+##############################################################################
+#
+# Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
+#
+# Version Control
+# $Revision: 1.19 $
+#
+.SUFFIXES:
+
+SHELL = /bin/sh
+THIS = Makefile
+
+MODEL = ../../@DFT_OBJ_SUBDIR@
+srcdir = @srcdir@
+prefix = @prefix@
+exec_prefix = @exec_prefix@
+libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
+ticdir = $(datadir)/terminfo
+ADA_INCLUDE = @ADA_INCLUDE@
+
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+AR = @AR@
+AR_OPTS = @AR_OPTS@
+AWK = @AWK@
+LN_S = @LN_S@
+
+CC = @CC@
+CFLAGS = @CFLAGS@
+
+CPPFLAGS = @ACPPFLAGS@ \
+ -DHAVE_CONFIG_H -I$(srcdir)
+
+CCFLAGS = $(CPPFLAGS) $(CFLAGS)
+
+CFLAGS_NORMAL = $(CCFLAGS)
+CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
+CFLAGS_PROFILE = $(CCFLAGS) -pg
+CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
+
+CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
+
+LINK = $(CC)
+LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
+
+RANLIB = @RANLIB@
+################################################################################
+ADA = @cf_ada_compiler@
+ADAFLAGS = @ADAFLAGS@ -I. -I$(srcdir)
+
+ADAMAKE = @cf_ada_make@
+ADAMAKEFLAGS =
+
+CARGS = -cargs $(ADAFLAGS)
+LARGS =
+
+ALIB = @cf_ada_package@
+ABASE = $(ALIB)-curses
+
+LIBALIS=$(ALIB).ali \
+ $(ABASE)-aux.ali \
+ $(ABASE).ali \
+ $(ABASE)-mouse.ali \
+ $(ABASE)-panels.ali \
+ $(ABASE)-menus.ali \
+ $(ABASE)-forms.ali \
+ $(ABASE)-forms-field_types.ali \
+ $(ABASE)-forms-field_types-alpha.ali \
+ $(ABASE)-forms-field_types-alphanumeric.ali \
+ $(ABASE)-forms-field_types-intfield.ali \
+ $(ABASE)-forms-field_types-numeric.ali \
+ $(ABASE)-forms-field_types-regexp.ali \
+ $(ABASE)-forms-field_types-enumeration.ali \
+ $(ABASE)-forms-field_types-ipv4_address.ali \
+ $(ABASE)-forms-field_types-user.ali \
+ $(ABASE)-forms-field_types-user-choice.ali \
+ $(ABASE)-text_io.ali \
+ $(ABASE)-text_io-aux.ali
+
+# Ada Library files for generic packages. Since gnat 3.10 they are
+# also compiled
+GENALIS=$(ABASE)-menus-menu_user_data.ali \
+ $(ABASE)-menus-item_user_data.ali \
+ $(ABASE)-forms-form_user_data.ali \
+ $(ABASE)-forms-field_user_data.ali \
+ $(ABASE)-forms-field_types-enumeration-ada.ali \
+ $(ABASE)-panels-user_data.ali \
+ $(ABASE)-text_io-integer_io.ali \
+ $(ABASE)-text_io-float_io.ali \
+ $(ABASE)-text_io-fixed_io.ali \
+ $(ABASE)-text_io-decimal_io.ali \
+ $(ABASE)-text_io-enumeration_io.ali \
+ $(ABASE)-text_io-modular_io.ali \
+ $(ABASE)-text_io-complex_io.ali
+
+LIBOBJS=$(ALIB).o \
+ $(ABASE)-aux.o \
+ $(ABASE).o \
+ $(ABASE)-mouse.o \
+ $(ABASE)-panels.o \
+ $(ABASE)-menus.o \
+ $(ABASE)-forms.o \
+ $(ABASE)-forms-field_types.o \
+ $(ABASE)-forms-field_types-alpha.o \
+ $(ABASE)-forms-field_types-alphanumeric.o \
+ $(ABASE)-forms-field_types-intfield.o \
+ $(ABASE)-forms-field_types-numeric.o \
+ $(ABASE)-forms-field_types-regexp.o \
+ $(ABASE)-forms-field_types-enumeration.o \
+ $(ABASE)-forms-field_types-ipv4_address.o \
+ $(ABASE)-forms-field_types-user.o \
+ $(ABASE)-forms-field_types-user-choice.o \
+ $(ABASE)-text_io.o \
+ $(ABASE)-text_io-aux.o
+
+# Ada object files for generic packages. Since gnat 3.10 they are
+# also compiled
+GENOBJS=$(ABASE)-menus-menu_user_data.o \
+ $(ABASE)-menus-item_user_data.o \
+ $(ABASE)-forms-form_user_data.o \
+ $(ABASE)-forms-field_user_data.o \
+ $(ABASE)-forms-field_types-enumeration-ada.o \
+ $(ABASE)-panels-user_data.o \
+ $(ABASE)-text_io-integer_io.o \
+ $(ABASE)-text_io-float_io.o \
+ $(ABASE)-text_io-fixed_io.o \
+ $(ABASE)-text_io-decimal_io.o \
+ $(ABASE)-text_io-enumeration_io.o \
+ $(ABASE)-text_io-modular_io.o \
+ $(ABASE)-text_io-complex_io.o
+
+
+all :: libAdaCurses.a
+ @echo done
+
+libAdaCurses.a :: dotouch $(LIBOBJS) @cf_generic_objects@
+ $(AR) $(AR_OPTS) $@ $(LIBOBJS) @cf_generic_objects@
+
+dotouch :
+ @sh -c 'for f in $(LIBALIS) $(GENALIS); do test -f $$f || touch $$f; done'
+
+sources :
+ @
+
+install ::
+install.libs ::
+uninstall ::
+uninstall.libs ::
+
+generics: $(GENALIS)
+ @
+
+mostlyclean ::
+ rm -f *.o *.ali b_t*.* *.s $(PROGS) a.out core b_*_test.c *.xr[bs] *.a
+
+clean :: mostlyclean
+ rm -f $(LIBALIS) $(GENALIS) $(LIBOBJS) $(GENOBJS)
+
+distclean :: clean
+ rm -f Makefile
+
+realclean :: distclean
+
+BASEDEPS=$(ABASE).ads $(srcdir)/$(ABASE)-aux.ads $(srcdir)/$(ABASE).adb
+
+$(ALIB).o: $(srcdir)/$(ALIB).ads
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ALIB).ads
+
+
+$(ABASE)-aux.o: $(srcdir)/$(ABASE)-aux.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-aux.adb
+
+
+$(ABASE).o: $(srcdir)/$(ABASE).adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE).adb
+
+
+$(ABASE)-mouse.o: \
+ $(ABASE)-mouse.ads \
+ $(srcdir)/$(ABASE)-mouse.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-mouse.adb
+
+
+$(ABASE)-panels.o: \
+ $(ABASE)-panels.ads \
+ $(srcdir)/$(ABASE)-panels.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-panels.adb
+
+
+$(ABASE)-menus.o: \
+ $(ABASE)-menus.ads \
+ $(srcdir)/$(ABASE)-menus.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-menus.adb
+
+
+$(ABASE)-forms.o: \
+ $(ABASE)-forms.ads \
+ $(srcdir)/$(ABASE)-forms.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms.adb
+
+$(ABASE)-forms-field_types.o: \
+ $(ABASE)-forms-field_types.ads \
+ $(srcdir)/$(ABASE)-forms-field_types.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types.adb
+
+$(ABASE)-forms-field_types-alpha.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-alpha.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-alpha.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-alpha.adb
+
+$(ABASE)-forms-field_types-alphanumeric.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-alphanumeric.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-alphanumeric.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-alphanumeric.adb
+
+$(ABASE)-forms-field_types-intfield.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-intfield.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-intfield.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-intfield.adb
+
+$(ABASE)-forms-field_types-numeric.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-numeric.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-numeric.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-numeric.adb
+
+$(ABASE)-forms-field_types-regexp.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-regexp.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-regexp.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-regexp.adb
+
+$(ABASE)-forms-field_types-enumeration.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-enumeration.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-enumeration.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-enumeration.adb
+
+$(ABASE)-forms-field_types-ipv4_address.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-ipv4_address.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-ipv4_address.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-ipv4_address.adb
+
+$(ABASE)-forms-field_types-user.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-user.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-user.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-user.adb
+
+$(ABASE)-forms-field_types-user-choice.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-user-choice.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-user-choice.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-user-choice.adb
+
+$(ABASE)-text_io.o: \
+ $(srcdir)/$(ABASE)-text_io.ads \
+ $(srcdir)/$(ABASE)-text_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io.adb
+
+$(ABASE)-text_io-aux.o: \
+ $(srcdir)/$(ABASE)-text_io-aux.ads \
+ $(srcdir)/$(ABASE)-text_io-aux.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-aux.adb
+
+$(ABASE)-menus-menu_user_data.o: \
+ $(ABASE)-menus-menu_user_data.ads \
+ $(srcdir)/$(ABASE)-menus-menu_user_data.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-menus-menu_user_data.adb
+
+$(ABASE)-menus-item_user_data.o: \
+ $(ABASE)-menus-item_user_data.ads \
+ $(srcdir)/$(ABASE)-menus-item_user_data.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-menus-item_user_data.adb
+
+$(ABASE)-forms-form_user_data.o: \
+ $(ABASE)-forms-form_user_data.ads \
+ $(srcdir)/$(ABASE)-forms-form_user_data.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-form_user_data.adb
+
+$(ABASE)-forms-field_user_data.o: \
+ $(ABASE)-forms-field_user_data.ads \
+ $(srcdir)/$(ABASE)-forms-field_user_data.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_user_data.adb
+
+$(ABASE)-forms-field_types-enumeration-ada.o: \
+ $(srcdir)/$(ABASE)-forms-field_types-enumeration-ada.ads \
+ $(srcdir)/$(ABASE)-forms-field_types-enumeration-ada.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-forms-field_types-enumeration-ada.adb
+
+$(ABASE)-panels-user_data.o: \
+ $(ABASE)-panels-user_data.ads \
+ $(srcdir)/$(ABASE)-panels-user_data.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-panels-user_data.adb
+
+$(ABASE)-text_io-integer_io.o: \
+ $(srcdir)/$(ABASE)-text_io-integer_io.ads \
+ $(srcdir)/$(ABASE)-text_io-integer_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-integer_io.adb
+
+$(ABASE)-text_io-float_io.o: \
+ $(srcdir)/$(ABASE)-text_io-float_io.ads \
+ $(srcdir)/$(ABASE)-text_io-float_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-float_io.adb
+
+$(ABASE)-text_io-fixed_io.o: \
+ $(srcdir)/$(ABASE)-text_io-fixed_io.ads \
+ $(srcdir)/$(ABASE)-text_io-fixed_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-fixed_io.adb
+
+$(ABASE)-text_io-decimal_io.o: \
+ $(srcdir)/$(ABASE)-text_io-decimal_io.ads \
+ $(srcdir)/$(ABASE)-text_io-decimal_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-decimal_io.adb
+
+$(ABASE)-text_io-enumeration_io.o: \
+ $(srcdir)/$(ABASE)-text_io-enumeration_io.ads \
+ $(srcdir)/$(ABASE)-text_io-enumeration_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-enumeration_io.adb
+
+$(ABASE)-text_io-modular_io.o: \
+ $(srcdir)/$(ABASE)-text_io-modular_io.ads \
+ $(srcdir)/$(ABASE)-text_io-modular_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-modular_io.adb
+
+$(ABASE)-text_io-complex_io.o: \
+ $(srcdir)/$(ABASE)-text_io-complex_io.ads \
+ $(srcdir)/$(ABASE)-text_io-complex_io.adb $(BASEDEPS)
+ $(ADA) $(ADAFLAGS) -c -o $@ $(srcdir)/$(ABASE)-text_io-complex_io.adb
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package body Terminal_Interface.Curses.Aux is
--
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.6 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms.Field_Types.Alpha is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_Field_Type (Fld : in Field;
Typ : in Alpha_Field)
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.Alpha is
- pragma Preelaborate (Alpha);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Alpha);
type Alpha_Field is new Field_Type
with record
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.6 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_Field_Type (Fld : in Field;
Typ : in AlphaNumeric_Field)
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric is
- pragma Preelaborate (AlphaNumeric);
+ pragma Preelaborate
+ (Terminal_Interface.Curses.Forms.Field_Types.AlphaNumeric);
type AlphaNumeric_Field is new Field_Type
with record
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.5 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Characters.Handling; use Ada.Characters.Handling;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.4 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type T is (<>);
package Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada is
- pragma Preelaborate (Enumeration.Ada);
+ pragma Preelaborate
+ (Terminal_Interface.Curses.Forms.Field_Types.Enumeration.Ada);
function Create (Set : Type_Set := Mixed_Case;
Case_Sensitive : Boolean := False;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.5 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Deallocation;
with Interfaces.C; use Interfaces.C;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C.Strings;
package Terminal_Interface.Curses.Forms.Field_Types.Enumeration is
- pragma Preelaborate (Enumeration);
+ pragma Preelaborate
+ (Terminal_Interface.Curses.Forms.Field_Types.Enumeration);
type String_Access is access String;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.6 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms.Field_Types.IntField is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_Field_Type (Fld : in Field;
Typ : in Integer_Field)
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.IntField is
- pragma Preelaborate (IntField);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.IntField);
type Integer_Field is new Field_Type with
record
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.6 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_Field_Type (Fld : in Field;
Typ : in Internet_V4_Address_Field)
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address is
- pragma Preelaborate (IPV4_Address);
+ pragma Preelaborate
+ (Terminal_Interface.Curses.Forms.Field_Types.IPV4_Address);
type Internet_V4_Address_Field is new Field_Type with null record;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.7 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms.Field_Types.Numeric is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_Field_Type (Fld : in Field;
Typ : in Numeric_Field)
is
type Double is new Interfaces.C.double;
- C_Numeric_Field_Type : C_Field_Type;
- pragma Import (C, C_Numeric_Field_Type, "TYPE_NUMERIC");
+ C_Numeric_Field_Type : C_Field_Type;
+ pragma Import (C, C_Numeric_Field_Type, "TYPE_NUMERIC");
- function Set_Fld_Type (F : Field := Fld;
- Cft : C_Field_Type := C_Numeric_Field_Type;
- Arg1 : C_Int;
- Arg2 : Double;
- Arg3 : Double) return C_Int;
- pragma Import (C, Set_Fld_Type, "set_field_type");
+ function Set_Fld_Type (F : Field := Fld;
+ Cft : C_Field_Type := C_Numeric_Field_Type;
+ Arg1 : C_Int;
+ Arg2 : Double;
+ Arg3 : Double) return C_Int;
+ pragma Import (C, Set_Fld_Type, "set_field_type");
- Res : Eti_Error;
+ Res : Eti_Error;
begin
Res := Set_Fld_Type (Arg1 => C_Int (Typ.Precision),
Arg2 => Double (Typ.Lower_Limit),
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.Numeric is
- pragma Preelaborate (Numeric);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.Numeric);
type Numeric_Field is new Field_Type with
record
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.3 $
--- Binding Version 00.93
+-- $Revision: 1.6 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C; use Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
procedure Set_Field_Type (Fld : in Field;
Typ : in Regular_Expression_Field)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
C_Regexp_Field_Type : C_Field_Type;
pragma Import (C, C_Regexp_Field_Type, "TYPE_REGEXP");
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.5 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface.Curses.Forms.Field_Types.RegExp is
- pragma Preelaborate (RegExp);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.RegExp);
type String_Access is access String;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.4 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Conversion;
with Interfaces.C;
+with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms.Field_Types.User.Choice is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
function To_Argument_Access is new Ada.Unchecked_Conversion
(System.Address, Argument_Access);
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.4 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-with Ada.Unchecked_Deallocation;
-with Terminal_Interface.Curses.Aux;
+with Interfaces.C;
package Terminal_Interface.Curses.Forms.Field_Types.User.Choice is
- pragma Preelaborate (Choice);
+ pragma Preelaborate
+ (Terminal_Interface.Curses.Forms.Field_Types.User.Choice);
+
+ use type Interfaces.C.int;
+ subtype C_Int is Interfaces.C.int;
type User_Defined_Field_Type_With_Choice is abstract new
User_Defined_Field_Type with null record;
-- | Private Part.
-- |
private
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
function C_Generic_Choice return C_Field_Type;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.4 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Conversion;
with Interfaces.C;
+with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms.Field_Types.User is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_Field_Type (Fld : in Field;
Typ : in User_Defined_Field_Type)
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.4 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-with Ada.Unchecked_Deallocation;
-with Terminal_Interface.Curses.Aux;
+with Interfaces.C;
package Terminal_Interface.Curses.Forms.Field_Types.User is
- pragma Preelaborate (User);
+ pragma Preelaborate (Terminal_Interface.Curses.Forms.Field_Types.User);
+ use type Interfaces.C.int;
+ subtype C_Int is Interfaces.C.int;
type User_Defined_Field_Type is abstract new Field_Type with null record;
-- This is the root of the mechanism we use to create field types in
-- | Private Part.
-- | Used by the Choice child package.
private
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
function C_Generic_Type return C_Field_Type;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.12 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Ada.Unchecked_Deallocation;
with Ada.Unchecked_Conversion;
-with Terminal_Interface.Curses.Forms.Field_Types.User;
-with Terminal_Interface.Curses.Forms.Field_Types.User.Choice;
-- |
-- |=====================================================================
-- | man page form_fieldtype.3x
function Make_Arg (Args : System.Address) return System.Address
is
- function Getarg (Arg : System.Address := Args)
- return System.Address;
- pragma Import (C, Getarg, "_nc_ada_getvarg");
+ -- Actually args is a double indirected pointer to the arguments
+ -- of a C variable argument list. In theory it is now quite
+ -- complicated to write portable routine that reads the arguments,
+ -- because one has to know the growth direction of the stack and
+ -- the sizes of the individual arguments.
+ -- Fortunately we are only interested in the first argument (#0),
+ -- we know its size and for the first arg we don't care about
+ -- into which stack direction we have to proceed. We simply
+ -- resolve the double indirection and thats it.
+ type V is access all System.Address;
+ function To_Access is new Ada.Unchecked_Conversion (System.Address,
+ V);
begin
- return Getarg;
+ return To_Access (To_Access (Args).all).all;
end Make_Arg;
function Copy_Arg (Usr : System.Address) return System.Address
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
-- |
-- |
-- |
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_User_Data (Fld : in Field;
Data : in User_Access)
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-- |
-- |=====================================================================
package body Terminal_Interface.Curses.Forms.Form_User_Data is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
-- |
-- |
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.13 $
--- Binding Version 00.93
+-- $Revision: 1.20 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Deallocation;
-with Unchecked_Conversion;
+with Ada.Unchecked_Conversion;
with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
+with Interfaces.C.Pointers;
-with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
+with Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Forms is
+ use Terminal_Interface.Curses.Aux;
+
+ type C_Field_Array is array (Natural range <>) of aliased Field;
+ package F_Array is new
+ Interfaces.C.Pointers (Natural, Field, C_Field_Array, Null_Field);
+
------------------------------------------------------------------------------
-- |
-- |
-- subtype chars_ptr is Interfaces.C.Strings.chars_ptr;
function FOS_2_CInt is new
- Unchecked_Conversion (Field_Option_Set,
- C_Int);
+ Ada.Unchecked_Conversion (Field_Option_Set,
+ C_Int);
function CInt_2_FOS is new
- Unchecked_Conversion (C_Int,
- Field_Option_Set);
+ Ada.Unchecked_Conversion (C_Int,
+ Field_Option_Set);
function FrmOS_2_CInt is new
- Unchecked_Conversion (Form_Option_Set,
- C_Int);
+ Ada.Unchecked_Conversion (Form_Option_Set,
+ C_Int);
function CInt_2_FrmOS is new
- Unchecked_Conversion (C_Int,
- Form_Option_Set);
+ Ada.Unchecked_Conversion (C_Int,
+ Form_Option_Set);
procedure Request_Name (Key : in Form_Request_Code;
Name : out String)
Buffer : in Buffer_Number := Buffer_Number'First;
Str : in String)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Set_Fld_Buffer (Fld : Field;
Bufnum : C_Int;
S : Char_Ptr)
-- |
-- |
-- |
- procedure Normalize_Field_Options (Options : in out C_Int);
- pragma Import (C, Normalize_Field_Options, "_nc_ada_normalize_field_opts");
-
procedure Set_Options (Fld : in Field;
Options : in Field_Option_Set)
is
Opt : C_Int := FOS_2_CInt (Options);
Res : Eti_Error;
begin
- Normalize_Field_Options (Opt);
Res := Set_Field_Opts (Fld, Opt);
if Res /= E_Ok then
Eti_Exception (Res);
Err : Eti_Error;
Opt : C_Int := FOS_2_CInt (Options);
begin
- Normalize_Field_Options (Opt);
if On then
Err := Field_Opts_On (Fld, Opt);
else
Res : C_Int := Field_Opts (Fld);
begin
- Normalize_Field_Options (Res);
Options := CInt_2_FOS (Res);
end Get_Options;
-- |
Color : in Color_Pair := Color_Pair'First)
is
function Set_Field_Fore (Fld : Field;
- Attr : C_Int) return C_Int;
+ Attr : C_Chtype) return C_Int;
pragma Import (C, Set_Field_Fore, "set_field_fore");
Ch : constant Attributed_Character := (Ch => Character'First,
Color => Color,
Attr => Fore);
- Res : constant Eti_Error := Set_Field_Fore (Fld, Chtype_To_CInt (Ch));
+ Res : constant Eti_Error :=
+ Set_Field_Fore (Fld, AttrChar_To_Chtype (Ch));
begin
if Res /= E_Ok then
Eti_Exception (Res);
procedure Foreground (Fld : in Field;
Fore : out Character_Attribute_Set)
is
- function Field_Fore (Fld : Field) return C_Int;
+ function Field_Fore (Fld : Field) return C_Chtype;
pragma Import (C, Field_Fore, "field_fore");
begin
- Fore := CInt_To_Chtype (Field_Fore (Fld)).Attr;
+ Fore := Chtype_To_AttrChar (Field_Fore (Fld)).Attr;
end Foreground;
procedure Foreground (Fld : in Field;
Fore : out Character_Attribute_Set;
Color : out Color_Pair)
is
- function Field_Fore (Fld : Field) return C_Int;
+ function Field_Fore (Fld : Field) return C_Chtype;
pragma Import (C, Field_Fore, "field_fore");
begin
- Fore := CInt_To_Chtype (Field_Fore (Fld)).Attr;
- Color := CInt_To_Chtype (Field_Fore (Fld)).Color;
+ Fore := Chtype_To_AttrChar (Field_Fore (Fld)).Attr;
+ Color := Chtype_To_AttrChar (Field_Fore (Fld)).Color;
end Foreground;
-- |
-- |
Color : in Color_Pair := Color_Pair'First)
is
function Set_Field_Back (Fld : Field;
- Attr : C_Int) return C_Int;
+ Attr : C_Chtype) return C_Int;
pragma Import (C, Set_Field_Back, "set_field_back");
Ch : constant Attributed_Character := (Ch => Character'First,
Color => Color,
Attr => Back);
- Res : constant Eti_Error := Set_Field_Back (Fld, Chtype_To_CInt (Ch));
+ Res : constant Eti_Error :=
+ Set_Field_Back (Fld, AttrChar_To_Chtype (Ch));
begin
if Res /= E_Ok then
Eti_Exception (Res);
procedure Background (Fld : in Field;
Back : out Character_Attribute_Set)
is
- function Field_Back (Fld : Field) return C_Int;
+ function Field_Back (Fld : Field) return C_Chtype;
pragma Import (C, Field_Back, "field_back");
begin
- Back := CInt_To_Chtype (Field_Back (Fld)).Attr;
+ Back := Chtype_To_AttrChar (Field_Back (Fld)).Attr;
end Background;
procedure Background (Fld : in Field;
Back : out Character_Attribute_Set;
Color : out Color_Pair)
is
- function Field_Back (Fld : Field) return C_Int;
+ function Field_Back (Fld : Field) return C_Chtype;
pragma Import (C, Field_Back, "field_back");
begin
- Back := CInt_To_Chtype (Field_Back (Fld)).Attr;
- Color := CInt_To_Chtype (Field_Back (Fld)).Color;
+ Back := Chtype_To_AttrChar (Field_Back (Fld)).Attr;
+ Color := Chtype_To_AttrChar (Field_Back (Fld)).Color;
end Background;
-- |
-- |
function Fields (Frm : Form;
Index : Positive) return Field
is
- function F_Fields (Frm : Form;
- Idx : C_Int) return Field;
- pragma Import (C, F_Fields, "_nc_get_field");
+ use F_Array;
+
+ function C_Fields (Frm : Form) return Pointer;
+ pragma Import (C, C_Fields, "form_fields");
+
+ P : Pointer := C_Fields (Frm);
begin
- if Frm = Null_Form or else Index not in 1 .. Field_Count (Frm) then
+ if P = null or else Index not in 1 .. Field_Count (Frm) then
raise Form_Exception;
else
- return F_Fields (Frm, C_Int (Index) - 1);
+ P := P + ptrdiff_t (C_Int (Index) - 1);
+ return P.all;
end if;
end Fields;
-- |
-- |
-- |
-- |
- procedure Normalize_Form_Options (Options : in out C_Int);
- pragma Import (C, Normalize_Form_Options, "_nc_ada_normalize_form_opts");
-
procedure Set_Options (Frm : in Form;
Options : in Form_Option_Set)
is
Opt : C_Int := FrmOS_2_CInt (Options);
Res : Eti_Error;
begin
- Normalize_Form_Options (Opt);
Res := Set_Form_Opts (Frm, Opt);
if Res /= E_Ok then
Eti_Exception (Res);
Err : Eti_Error;
Opt : C_Int := FrmOS_2_CInt (Options);
begin
- Normalize_Form_Options (Opt);
if On then
Err := Form_Opts_On (Frm, Opt);
else
Res : C_Int := Form_Opts (Frm);
begin
- Normalize_Form_Options (Res);
Options := CInt_2_FrmOS (Res);
end Get_Options;
-- |
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
package body Terminal_Interface.Curses.Menus.Menu_User_Data is
- use type Interfaces.C.Int;
+ use type Interfaces.C.int;
procedure Set_User_Data (Men : in Menu;
Data : in User_Access)
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.13 $
--- Binding Version 00.93
+-- $Revision: 1.20 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Unchecked_Deallocation;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
-with Terminal_Interface.Curses;
+with Interfaces.C.Pointers;
-with Unchecked_Conversion;
+with Ada.Unchecked_Conversion;
package body Terminal_Interface.Curses.Menus is
+ type C_Item_Array is array (Natural range <>) of aliased Item;
+ package I_Array is new
+ Interfaces.C.Pointers (Natural, Item, C_Item_Array, Null_Item);
+
use type System.Bit_Order;
subtype chars_ptr is Interfaces.C.Strings.chars_ptr;
function MOS_2_CInt is new
- Unchecked_Conversion (Menu_Option_Set,
- C_Int);
+ Ada.Unchecked_Conversion (Menu_Option_Set,
+ C_Int);
function CInt_2_MOS is new
- Unchecked_Conversion (C_Int,
- Menu_Option_Set);
+ Ada.Unchecked_Conversion (C_Int,
+ Menu_Option_Set);
function IOS_2_CInt is new
- Unchecked_Conversion (Item_Option_Set,
- C_Int);
+ Ada.Unchecked_Conversion (Item_Option_Set,
+ C_Int);
function CInt_2_IOS is new
- Unchecked_Conversion (C_Int,
- Item_Option_Set);
+ Ada.Unchecked_Conversion (C_Int,
+ Item_Option_Set);
------------------------------------------------------------------------------
procedure Request_Name (Key : in Menu_Request_Code;
function Create (Name : String;
Description : String := "") return Item
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Newitem (Name, Desc : Char_Ptr) return Item;
pragma Import (C, Newitem, "new_item");
end if;
end Visible;
-------------------------------------------------------------------------------
- procedure Normalize_Item_Options (Options : in out C_Int);
- pragma Import (C, Normalize_Item_Options, "_nc_ada_normalize_item_opts");
-
procedure Set_Options (Itm : in Item;
Options : in Item_Option_Set)
is
Opt : C_Int := IOS_2_CInt (Options);
Res : Eti_Error;
begin
- Normalize_Item_Options (Opt);
Res := Set_Item_Opts (Itm, Opt);
if Res /= E_Ok then
Eti_Exception (Res);
Opt : C_Int := IOS_2_CInt (Options);
Err : Eti_Error;
begin
- Normalize_Item_Options (Opt);
if On then
Err := Item_Opts_On (Itm, Opt);
else
Res : C_Int := Item_Opts (Itm);
begin
- Normalize_Item_Options (Res);
Options := CInt_2_IOS (Res);
end Get_Options;
end if;
end Post;
-------------------------------------------------------------------------------
- procedure Normalize_Menu_Options (Options : in out C_Int);
- pragma Import (C, Normalize_Menu_Options, "_nc_ada_normalize_menu_opts");
-
procedure Set_Options (Men : in Menu;
Options : in Menu_Option_Set)
is
Opt : C_Int := MOS_2_CInt (Options);
Res : Eti_Error;
begin
- Normalize_Menu_Options (Opt);
Res := Set_Menu_Opts (Men, Opt);
if Res /= E_Ok then
Eti_Exception (Res);
Opt : C_Int := MOS_2_CInt (Options);
Err : Eti_Error;
begin
- Normalize_Menu_Options (Opt);
if On then
Err := Menu_Opts_On (Men, Opt);
else
Res : C_Int := Menu_Opts (Men);
begin
- Normalize_Menu_Options (Res);
Options := CInt_2_MOS (Res);
end Get_Options;
procedure Set_Mark (Men : in Menu;
Mark : in String)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Set_Mark (Men : Menu;
Mark : Char_Ptr) return C_Int;
pragma Import (C, Set_Mark, "set_menu_mark");
Color : in Color_Pair := Color_Pair'First)
is
function Set_Menu_Fore (Men : Menu;
- Attr : C_Int) return C_Int;
+ Attr : C_Chtype) return C_Int;
pragma Import (C, Set_Menu_Fore, "set_menu_fore");
Ch : constant Attributed_Character := (Ch => Character'First,
Color => Color,
Attr => Fore);
- Res : constant Eti_Error := Set_Menu_Fore (Men, Chtype_To_CInt (Ch));
+ Res : constant Eti_Error := Set_Menu_Fore (Men, AttrChar_To_Chtype (Ch));
begin
if Res /= E_Ok then
Eti_Exception (Res);
procedure Foreground (Men : in Menu;
Fore : out Character_Attribute_Set)
is
- function Menu_Fore (Men : Menu) return C_Int;
+ function Menu_Fore (Men : Menu) return C_Chtype;
pragma Import (C, Menu_Fore, "menu_fore");
begin
- Fore := CInt_To_Chtype (Menu_Fore (Men)).Attr;
+ Fore := Chtype_To_AttrChar (Menu_Fore (Men)).Attr;
end Foreground;
procedure Foreground (Men : in Menu;
Fore : out Character_Attribute_Set;
Color : out Color_Pair)
is
- function Menu_Fore (Men : Menu) return C_Int;
+ function Menu_Fore (Men : Menu) return C_Chtype;
pragma Import (C, Menu_Fore, "menu_fore");
begin
- Fore := CInt_To_Chtype (Menu_Fore (Men)).Attr;
- Color := CInt_To_Chtype (Menu_Fore (Men)).Color;
+ Fore := Chtype_To_AttrChar (Menu_Fore (Men)).Attr;
+ Color := Chtype_To_AttrChar (Menu_Fore (Men)).Color;
end Foreground;
procedure Set_Background
Color : in Color_Pair := Color_Pair'First)
is
function Set_Menu_Back (Men : Menu;
- Attr : C_Int) return C_Int;
+ Attr : C_Chtype) return C_Int;
pragma Import (C, Set_Menu_Back, "set_menu_back");
Ch : constant Attributed_Character := (Ch => Character'First,
Color => Color,
Attr => Back);
- Res : constant Eti_Error := Set_Menu_Back (Men, Chtype_To_CInt (Ch));
+ Res : constant Eti_Error := Set_Menu_Back (Men, AttrChar_To_Chtype (Ch));
begin
if Res /= E_Ok then
Eti_Exception (Res);
procedure Background (Men : in Menu;
Back : out Character_Attribute_Set)
is
- function Menu_Back (Men : Menu) return C_Int;
+ function Menu_Back (Men : Menu) return C_Chtype;
pragma Import (C, Menu_Back, "menu_back");
begin
- Back := CInt_To_Chtype (Menu_Back (Men)).Attr;
+ Back := Chtype_To_AttrChar (Menu_Back (Men)).Attr;
end Background;
procedure Background (Men : in Menu;
Back : out Character_Attribute_Set;
Color : out Color_Pair)
is
- function Menu_Back (Men : Menu) return C_Int;
+ function Menu_Back (Men : Menu) return C_Chtype;
pragma Import (C, Menu_Back, "menu_back");
begin
- Back := CInt_To_Chtype (Menu_Back (Men)).Attr;
- Color := CInt_To_Chtype (Menu_Back (Men)).Color;
+ Back := Chtype_To_AttrChar (Menu_Back (Men)).Attr;
+ Color := Chtype_To_AttrChar (Menu_Back (Men)).Color;
end Background;
procedure Set_Grey (Men : in Menu;
Color : in Color_Pair := Color_Pair'First)
is
function Set_Menu_Grey (Men : Menu;
- Attr : C_Int) return C_Int;
+ Attr : C_Chtype) return C_Int;
pragma Import (C, Set_Menu_Grey, "set_menu_grey");
Ch : constant Attributed_Character := (Ch => Character'First,
Color => Color,
Attr => Grey);
- Res : constant Eti_Error := Set_Menu_Grey (Men, Chtype_To_CInt (Ch));
+ Res : constant Eti_Error := Set_Menu_Grey (Men, AttrChar_To_Chtype (Ch));
begin
if Res /= E_Ok then
Eti_Exception (Res);
procedure Grey (Men : in Menu;
Grey : out Character_Attribute_Set)
is
- function Menu_Grey (Men : Menu) return C_Int;
+ function Menu_Grey (Men : Menu) return C_Chtype;
pragma Import (C, Menu_Grey, "menu_grey");
begin
- Grey := CInt_To_Chtype (Menu_Grey (Men)).Attr;
+ Grey := Chtype_To_AttrChar (Menu_Grey (Men)).Attr;
end Grey;
procedure Grey (Men : in Menu;
Grey : out Character_Attribute_Set;
Color : out Color_Pair)
is
- function Menu_Grey (Men : Menu) return C_Int;
+ function Menu_Grey (Men : Menu) return C_Chtype;
pragma Import (C, Menu_Grey, "menu_grey");
begin
- Grey := CInt_To_Chtype (Menu_Grey (Men)).Attr;
- Color := CInt_To_Chtype (Menu_Grey (Men)).Color;
+ Grey := Chtype_To_AttrChar (Menu_Grey (Men)).Attr;
+ Color := Chtype_To_AttrChar (Menu_Grey (Men)).Color;
end Grey;
procedure Set_Pad_Character (Men : in Menu;
function Set_Pattern (Men : Menu;
Text : String) return Boolean
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Set_Pattern (Men : Menu;
Pattern : Char_Ptr) return C_Int;
pragma Import (C, Set_Pattern, "set_menu_pattern");
if Items (Items'Last) /= Null_Item then
raise Menu_Exception;
else
- Res := Set_Items (Men, Items (Items'First)'Address);
+ Res := Set_Items (Men, Items.all'Address);
if Res /= E_Ok then
Eti_Exception (Res);
end if;
function Items (Men : Menu;
Index : Positive) return Item
is
- function M_Items (Men : Menu;
- Idx : C_Int) return Item;
- pragma Import (C, M_Items, "_nc_get_item");
+ use I_Array;
+
+ function C_Mitems (Men : Menu) return Pointer;
+ pragma Import (C, C_Mitems, "menu_items");
+
+ P : Pointer := C_Mitems (Men);
begin
- if Men = Null_Menu or else Index not in 1 .. Item_Count (Men) then
+ if P = null or else Index not in 1 .. Item_Count (Men) then
raise Menu_Exception;
else
- return M_Items (Men, C_Int (Index) - 1);
+ P := P + ptrdiff_t (C_Int (Index) - 1);
+ return P.all;
end if;
end Items;
pragma Import (C, Newmenu, "new_menu");
M : Menu;
- I : Item_Array_Access;
begin
pragma Assert (Items (Items'Last) = Null_Item);
if Items (Items'Last) /= Null_Item then
raise Menu_Exception;
else
- M := Newmenu (Items (Items'First)'Address);
+ M := Newmenu (Items.all'Address);
if M = Null_Menu then
raise Menu_Exception;
end if;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.9 $
--- Binding Version 00.93
+-- $Revision: 1.16 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with System;
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
-with Interfaces;
-with Interfaces.C;
-with Unchecked_Conversion;
+with Interfaces.C; use Interfaces.C;
+use Interfaces;
package body Terminal_Interface.Curses.Mouse is
use type System.Bit_Order;
use type Interfaces.C.int;
- function CInt_To_Mask is new
- Unchecked_Conversion (Source => C_Int,
- Target => Event_Mask);
-
- function Mask_To_CInt is new
- Unchecked_Conversion (Source => Event_Mask,
- Target => C_Int);
-
function Has_Mouse return Boolean
is
function Mouse_Avail return C_Int;
return Event;
end Get_Mouse;
- procedure Register_Reportable_Event (B : in Mouse_Button;
- S : in Button_State;
- Mask : in out Event_Mask)
+ procedure Register_Reportable_Event (Button : in Mouse_Button;
+ State : in Button_State;
+ Mask : in out Event_Mask)
is
- type Evt_Access is access all Event_Mask;
- function Register (B : C_Int;
- S : C_Int;
- M : Evt_Access) return C_Int;
- pragma Import (C, Register, "_nc_ada_mouse_mask");
-
- T : aliased Event_Mask := Mask;
- M : Evt_Access := T'Access;
- R : constant C_Int := Register (C_Int (Mouse_Button'Pos (B)),
- C_Int (Button_State'Pos (S)),
- M);
+ Button_Nr : constant Natural := Mouse_Button'Pos (Button);
+ State_Nr : constant Natural := Button_State'Pos (State);
begin
- if R = Curses_Err then
+ if Button in Modifier_Keys and then State /= Pressed then
raise Curses_Exception;
+ else
+ if Button in Real_Buttons then
+ Mask := Mask or ((2 ** (6 * Button_Nr)) ** State_Nr);
+ else
+ Mask := Mask or (BUTTON_CTRL ** (Button_Nr - 4));
+ end if;
end if;
- Mask := T;
end Register_Reportable_Event;
+ procedure Register_Reportable_Events (Button : in Mouse_Button;
+ State : in Button_States;
+ Mask : in out Event_Mask)
+ is
+ begin
+ for S in Button_States'Range loop
+ if State (S) then
+ Register_Reportable_Event (Button, S, Mask);
+ end if;
+ end loop;
+ end Register_Reportable_Events;
+
function Start_Mouse (Mask : Event_Mask := All_Events)
return Event_Mask
is
- type Int_Access is access all C_Int;
- function MMask (M : C_Int; O : Int_Access := null) return C_Int;
+ function MMask (M : Event_Mask;
+ O : access Event_Mask) return Event_Mask;
pragma Import (C, MMask, "mousemask");
- R : C_Int;
+ R : Event_Mask;
+ Old : aliased Event_Mask;
begin
- R := MMask (Mask_To_CInt (Mask));
- return CInt_To_Mask (R);
+ R := MMask (Mask, Old'Access);
+ return Old;
end Start_Mouse;
- procedure End_Mouse
+ procedure End_Mouse (Mask : in Event_Mask := No_Events)
is
- Old : constant Event_Mask := Start_Mouse (No_Events);
begin
null;
end End_Mouse;
+ procedure Dispatch_Event (Mask : in Event_Mask;
+ Button : out Mouse_Button;
+ State : out Button_State);
+
+ procedure Dispatch_Event (Mask : in Event_Mask;
+ Button : out Mouse_Button;
+ State : out Button_State) is
+ L : Event_Mask;
+ begin
+ Button := Alt; -- preset to non real button;
+ if (Mask and BUTTON1_EVENTS) /= 0 then
+ Button := Left;
+ elsif (Mask and BUTTON2_EVENTS) /= 0 then
+ Button := Middle;
+ elsif (Mask and BUTTON3_EVENTS) /= 0 then
+ Button := Right;
+ elsif (Mask and BUTTON4_EVENTS) /= 0 then
+ Button := Button4;
+ end if;
+ if Button in Real_Buttons then
+ L := 2 ** (6 * Mouse_Button'Pos (Button));
+ for I in Button_State'Range loop
+ if (Mask and L) /= 0 then
+ State := I;
+ exit;
+ end if;
+ L := 2 * L;
+ end loop;
+ else
+ State := Pressed;
+ if (Mask and BUTTON_CTRL) /= 0 then
+ Button := Control;
+ elsif (Mask and BUTTON_SHIFT) /= 0 then
+ Button := Shift;
+ elsif (Mask and BUTTON_ALT) /= 0 then
+ Button := Alt;
+ end if;
+ end if;
+ end Dispatch_Event;
+
procedure Get_Event (Event : in Mouse_Event;
Y : out Line_Position;
X : out Column_Position;
Button : out Mouse_Button;
State : out Button_State)
is
- procedure Dispatch_Event (M : in C_Int;
- B : out C_Int;
- S : out C_Int);
- pragma Import (C, Dispatch_Event, "_nc_ada_mouse_event");
-
- Mask : constant Interfaces.C.int := Mask_To_CInt (Event.Bstate);
- B, S : C_Int;
+ Mask : constant Event_Mask := Event.Bstate;
begin
X := Column_Position (Event.X);
Y := Line_Position (Event.Y);
- Dispatch_Event (Mask, B, S);
- Button := Mouse_Button'Val (B);
- State := Button_State'Val (S);
+ Dispatch_Event (Mask, Button, State);
end Get_Event;
procedure Unget_Mouse (Event : in Mouse_Event)
function Enclosed_In_Window (Win : Window := Standard_Window;
Event : Mouse_Event) return Boolean
is
- function Wenclose (Win : Window; Y : C_Int; X : C_Int) return C_Int;
+ function Wenclose (Win : Window; Y : C_Int; X : C_Int)
+ return Curses_Bool;
pragma Import (C, Wenclose, "wenclose");
begin
- if Wenclose (Win, C_Int (Event.Y), C_Int (Event.X)) = Curses_False then
+ if Wenclose (Win, C_Int (Event.Y), C_Int (Event.X))
+ = Curses_Bool_False then
return False;
else
return True;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Interfaces.C;
with Terminal_Interface.Curses.Aux;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
with Interfaces.C;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package body Terminal_Interface.Curses.Text_IO.Aux is
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
private package Terminal_Interface.Curses.Text_IO.Aux is
-- pragma Preelaborate (Aux);
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Terminal_Interface.Curses.Text_IO.Float_IO;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Numerics.Generic_Complex_Types;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type Num is delta <> digits <>;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Ada.Characters.Handling; use Ada.Characters.Handling;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type Enum is (<>);
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type Num is delta <>;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type Num is digits <>;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type Num is range <>;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.6 $
--- Binding Version 00.93
+-- $Revision: 1.8 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with Ada.Text_IO;
with Terminal_Interface.Curses.Text_IO.Aux;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.7 $
--- Binding Version 00.93
+-- $Revision: 1.9 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
generic
type Num is mod <>;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.11 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-with System;
-
package body Terminal_Interface.Curses.Text_IO is
Default_Window : Window := Null_Window;
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.11 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
-with System;
-with System.Parameters;
with Ada.Text_IO;
with Ada.IO_Exceptions;
subtype Count is Ada.Text_IO.Count;
subtype Positive_Count is Count range 1 .. Count'Last;
- subtype Field is Integer range 0 .. System.Parameters.Field_Max;
+ subtype Field is Ada.Text_IO.Field;
subtype Number_Base is Integer range 2 .. 16;
type Type_Set is (Lower_Case, Upper_Case, Mixed_Case);
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.15 $
--- Binding Version 00.93
+-- $Revision: 1.25 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
with System;
-with Terminal_Interface.Curses.Aux; use Terminal_Interface.Curses.Aux;
+with Terminal_Interface.Curses.Aux;
with Interfaces.C; use Interfaces.C;
with Interfaces.C.Strings; use Interfaces.C.Strings;
+with Interfaces.C.Pointers;
with Ada.Characters.Handling; use Ada.Characters.Handling;
with Ada.Strings.Fixed;
-with Unchecked_Conversion;
+with Ada.Unchecked_Conversion;
package body Terminal_Interface.Curses is
+ use Aux;
use type System.Bit_Order;
package ASF renames Ada.Strings.Fixed;
of aliased Attributed_Character;
pragma Convention (C, chtype_array);
+------------------------------------------------------------------------------
+ generic
+ type Element is (<>);
+ function W_Get_Element (Win : in Window;
+ Offset : in Natural) return Element;
+
+ function W_Get_Element (Win : in Window;
+ Offset : in Natural) return Element is
+ type E_Array is array (Natural range <>) of aliased Element;
+ package C_E_Array is new
+ Interfaces.C.Pointers (Natural, Element, E_Array, Element'Val (0));
+ use C_E_Array;
+
+ function To_Pointer is new
+ Ada.Unchecked_Conversion (Window, Pointer);
+
+ P : Pointer := To_Pointer (Win);
+ begin
+ if Win = Null_Window then
+ raise Curses_Exception;
+ else
+ P := P + ptrdiff_t (Offset);
+ return P.all;
+ end if;
+ end W_Get_Element;
+
+ function W_Get_Int is new W_Get_Element (C_Int);
+ function W_Get_Short is new W_Get_Element (C_Short);
+ function W_Get_Byte is new W_Get_Element (Interfaces.C.unsigned_char);
+
------------------------------------------------------------------------------
function Key_Name (Key : in Real_Key_Code) return String
is
function Initscr return Window;
pragma Import (C, Initscr, "initscr");
- function Check_Version (Major, Minor : C_Int) return C_Int;
- pragma Import (C, Check_Version, "_nc_ada_vcheck");
-
W : Window;
begin
- if (Check_Version (NC_Major_Version, NC_Minor_Version) = 0) then
- raise Wrong_Curses_Version;
- else
- W := Initscr;
- if W = Null_Window then
- raise Curses_Exception;
- end if;
+ W := Initscr;
+ if W = Null_Window then
+ raise Curses_Exception;
end if;
end Init_Screen;
function Is_End_Window return Boolean
is
- function Isendwin return C_Int;
+ function Isendwin return Curses_Bool;
pragma Import (C, Isendwin, "isendwin");
begin
- if Isendwin = Curses_False then
+ if Isendwin = Curses_Bool_False then
return False;
else
return True;
Ch : in Attributed_Character)
is
function Waddch (W : Window;
- Ch : C_Int) return C_Int;
+ Ch : C_Chtype) return C_Int;
pragma Import (C, Waddch, "waddch");
begin
- if Waddch (Win, Chtype_To_Cint (Ch)) = Curses_Err then
+ if Waddch (Win, AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Add;
function mvwaddch (W : Window;
Y : C_Int;
X : C_Int;
- Ch : C_Int) return C_Int;
+ Ch : C_Chtype) return C_Int;
pragma Import (C, mvwaddch, "mvwaddch");
begin
if mvwaddch (Win, C_Int (Line),
C_Int (Column),
- Chtype_To_CInt (Ch)) = Curses_Err then
+ AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Add;
Ch : in Attributed_Character)
is
function Wechochar (W : Window;
- Ch : C_Int) return C_Int;
+ Ch : C_Chtype) return C_Int;
pragma Import (C, Wechochar, "wechochar");
begin
- if Wechochar (Win, Chtype_To_CInt (Ch)) = Curses_Err then
+ if Wechochar (Win, AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Add_With_Immediate_Echo;
Mode : in Boolean := False)
is
function Syncok (Win : Window;
- Mode : C_Int) return C_Int;
+ Mode : Curses_Bool) return C_Int;
pragma Import (C, Syncok, "syncok");
begin
- if Syncok (Win, Boolean'Pos (Mode)) = Curses_Err then
+ if Syncok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
raise Curses_Exception;
end if;
end Set_Synch_Mode;
Str : in String;
Len : in Integer := -1)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Waddnstr (Win : Window;
Str : Char_Ptr;
Len : C_Int := -1) return C_Int;
Lower_Right_Corner_Symbol : in Attributed_Character := Default_Character)
is
function Wborder (W : Window;
- LS : C_Int;
- RS : C_Int;
- TS : C_Int;
- BS : C_Int;
- ULC : C_Int;
- URC : C_Int;
- LLC : C_Int;
- LRC : C_Int) return C_Int;
+ LS : C_Chtype;
+ RS : C_Chtype;
+ TS : C_Chtype;
+ BS : C_Chtype;
+ ULC : C_Chtype;
+ URC : C_Chtype;
+ LLC : C_Chtype;
+ LRC : C_Chtype) return C_Int;
pragma Import (C, Wborder, "wborder");
begin
if Wborder (Win,
- Chtype_To_CInt (Left_Side_Symbol),
- Chtype_To_CInt (Right_Side_Symbol),
- Chtype_To_CInt (Top_Side_Symbol),
- Chtype_To_CInt (Bottom_Side_Symbol),
- Chtype_To_CInt (Upper_Left_Corner_Symbol),
- Chtype_To_CInt (Upper_Right_Corner_Symbol),
- Chtype_To_CInt (Lower_Left_Corner_Symbol),
- Chtype_To_CInt (Lower_Right_Corner_Symbol)
+ AttrChar_To_Chtype (Left_Side_Symbol),
+ AttrChar_To_Chtype (Right_Side_Symbol),
+ AttrChar_To_Chtype (Top_Side_Symbol),
+ AttrChar_To_Chtype (Bottom_Side_Symbol),
+ AttrChar_To_Chtype (Upper_Left_Corner_Symbol),
+ AttrChar_To_Chtype (Upper_Right_Corner_Symbol),
+ AttrChar_To_Chtype (Lower_Left_Corner_Symbol),
+ AttrChar_To_Chtype (Lower_Right_Corner_Symbol)
) = Curses_Err
then
raise Curses_Exception;
Line_Symbol : in Attributed_Character := Default_Character)
is
function Whline (W : Window;
- Ch : C_Int;
+ Ch : C_Chtype;
Len : C_Int) return C_Int;
pragma Import (C, Whline, "whline");
begin
if Whline (Win,
- Chtype_To_CInt (Line_Symbol),
+ AttrChar_To_Chtype (Line_Symbol),
C_Int (Line_Size)) = Curses_Err then
raise Curses_Exception;
end if;
Line_Symbol : in Attributed_Character := Default_Character)
is
function Wvline (W : Window;
- Ch : C_Int;
+ Ch : C_Chtype;
Len : C_Int) return C_Int;
pragma Import (C, Wvline, "wvline");
begin
if Wvline (Win,
- Chtype_To_CInt (Line_Symbol),
+ AttrChar_To_Chtype (Line_Symbol),
C_Int (Line_Size)) = Curses_Err then
raise Curses_Exception;
end if;
On : in Boolean := True)
is
function Wattron (Win : Window;
- C_Attr : C_Int) return C_Int;
+ C_Attr : C_AttrType) return C_Int;
pragma Import (C, Wattron, "wattr_on");
function Wattroff (Win : Window;
- C_Attr : C_Int) return C_Int;
+ C_Attr : C_AttrType) return C_Int;
pragma Import (C, Wattroff, "wattr_off");
-- In Ada we use the On Boolean to control whether or not we want to
-- switch on or off the attributes in the set.
Attr => Attr);
begin
if On then
- Err := Wattron (Win, Chtype_To_CInt (AC));
+ Err := Wattron (Win, AttrChar_To_AttrType (AC));
else
- Err := Wattroff (Win, Chtype_To_CInt (AC));
+ Err := Wattroff (Win, AttrChar_To_AttrType (AC));
end if;
if Err = Curses_Err then
raise Curses_Exception;
Color : in Color_Pair := Color_Pair'First)
is
function Wattrset (Win : Window;
- C_Attr : C_Int) return C_Int;
+ C_Attr : C_AttrType) return C_Int;
pragma Import (C, Wattrset, "wattrset"); -- ??? wattr_set
begin
if Wattrset (Win,
- Chtype_To_CInt (Attributed_Character'
- (Ch => Character'First,
- Color => Color,
- Attr => Attr))) = Curses_Err then
+ AttrChar_To_AttrType (Attributed_Character'
+ (Ch => Character'First,
+ Color => Color,
+ Attr => Attr))) = Curses_Err then
raise Curses_Exception;
end if;
end Set_Character_Attributes;
function Get_Character_Attribute (Win : Window := Standard_Window)
return Character_Attribute_Set
is
- function Wattrget (Win : Window) return C_Int;
+ function Wattrget (Win : Window;
+ Atr : access C_AttrType;
+ Col : access C_Short;
+ Opt : System.Address) return C_Int;
pragma Import (C, Wattrget, "wattr_get");
- Ch : Attributed_Character := CInt_To_Chtype (Wattrget (Win));
+ Attr : aliased C_AttrType;
+ Col : aliased C_Short;
+ Res : constant C_Int := Wattrget (Win, Attr'Access, Col'Access,
+ System.Null_Address);
+ Ch : Attributed_Character;
begin
- return Ch.Attr;
+ if Res = Curses_Ok then
+ Ch := AttrType_To_AttrChar (Attr);
+ return Ch.Attr;
+ else
+ raise Curses_Exception;
+ end if;
end Get_Character_Attribute;
function Get_Character_Attribute (Win : Window := Standard_Window)
return Color_Pair
is
- function Wattrget (Win : Window) return C_Int;
+ function Wattrget (Win : Window;
+ Atr : access C_AttrType;
+ Col : access C_Short;
+ Opt : System.Address) return C_Int;
pragma Import (C, Wattrget, "wattr_get");
- Ch : Attributed_Character := CInt_To_Chtype (Wattrget (Win));
+ Attr : aliased C_AttrType;
+ Col : aliased C_Short;
+ Res : constant C_Int := Wattrget (Win, Attr'Access, Col'Access,
+ System.Null_Address);
+ Ch : Attributed_Character;
begin
- return Ch.Color;
+ if Res = Curses_Ok then
+ Ch := AttrType_To_AttrChar (Attr);
+ return Ch.Color;
+ else
+ raise Curses_Exception;
+ end if;
end Get_Character_Attribute;
+ procedure Set_Color (Win : in Window := Standard_Window;
+ Pair : in Color_Pair)
+ is
+ function Wset_Color (Win : Window;
+ Color : C_Short;
+ Opts : C_Void_Ptr) return C_Int;
+ pragma Import (C, Wset_Color, "wcolor_set");
+ begin
+ if Wset_Color (Win,
+ C_Short (Pair),
+ C_Void_Ptr (System.Null_Address)) = Curses_Err then
+ raise Curses_Exception;
+ end if;
+ end Set_Color;
+
procedure Change_Attributes
(Win : in Window := Standard_Window;
Count : in Integer := -1;
is
function Wchgat (Win : Window;
Cnt : C_Int;
- Attr : C_Int;
+ Attr : C_AttrType;
Color : C_Short;
Opts : System.Address := System.Null_Address)
return C_Int;
Ch : constant Attributed_Character :=
(Ch => Character'First, Color => Color_Pair'First, Attr => Attr);
begin
- if Wchgat (Win, C_Int (Count), Chtype_To_CInt (Ch),
+ if Wchgat (Win, C_Int (Count), AttrChar_To_AttrType (Ch),
C_Short (Color)) = Curses_Err then
raise Curses_Exception;
end if;
procedure Set_Meta_Mode (Win : in Window := Standard_Window;
SwitchOn : in Boolean := True)
is
- function Meta (W : Window; Mode : C_Int) return C_Int;
+ function Meta (W : Window; Mode : Curses_Bool) return C_Int;
pragma Import (C, Meta, "meta");
begin
- if Meta (Win, Boolean'Pos (SwitchOn)) = Curses_Err then
+ if Meta (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then
raise Curses_Exception;
end if;
end Set_Meta_Mode;
procedure Set_KeyPad_Mode (Win : in Window := Standard_Window;
SwitchOn : in Boolean := True)
is
- function Keypad (W : Window; Mode : C_Int) return C_Int;
+ function Keypad (W : Window; Mode : Curses_Bool) return C_Int;
pragma Import (C, Keypad, "keypad");
begin
- if Keypad (Win, Boolean'Pos (SwitchOn)) = Curses_Err then
+ if Keypad (Win, Curses_Bool (Boolean'Pos (SwitchOn))) = Curses_Err then
raise Curses_Exception;
end if;
end Set_KeyPad_Mode;
(Win : in Window := Standard_Window;
Mode : in Boolean := True)
is
- function Intrflush (Win : Window; Mode : C_Int) return C_Int;
+ function Intrflush (Win : Window; Mode : Curses_Bool) return C_Int;
pragma Import (C, Intrflush, "intrflush");
begin
- if Intrflush (Win, Boolean'Pos (Mode)) = Curses_Err then
+ if Intrflush (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
raise Curses_Exception;
end if;
end Set_Flush_On_Interrupt_Mode;
(Win : in Window := Standard_Window;
Mode : in Boolean := False)
is
- function Nodelay (Win : Window; Mode : C_Int) return C_Int;
+ function Nodelay (Win : Window; Mode : Curses_Bool) return C_Int;
pragma Import (C, Nodelay, "nodelay");
begin
- if Nodelay (Win, Boolean'Pos (Mode)) = Curses_Err then
+ if Nodelay (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
raise Curses_Exception;
end if;
end Set_NoDelay_Mode;
(Win : in Window := Standard_Window;
Timer_Off : in Boolean := False)
is
- function Notimeout (Win : Window; Mode : C_Int) return C_Int;
+ function Notimeout (Win : Window; Mode : Curses_Bool) return C_Int;
pragma Import (C, Notimeout, "notimeout");
begin
- if Notimeout (Win, Boolean'Pos (Timer_Off)) = Curses_Err then
+ if Notimeout (Win, Curses_Bool (Boolean'Pos (Timer_Off)))
+ = Curses_Err then
raise Curses_Exception;
end if;
end Set_Escape_Timer_Mode;
(Win : in Window := Standard_Window;
Do_Clear : in Boolean := True)
is
- function Clear_Ok (W : Window; Flag : C_Int) return C_Int;
+ function Clear_Ok (W : Window; Flag : Curses_Bool) return C_Int;
pragma Import (C, Clear_Ok, "clearok");
begin
- if Clear_Ok (Win, Boolean'Pos (Do_Clear)) = Curses_Err then
+ if Clear_Ok (Win, Curses_Bool (Boolean'Pos (Do_Clear))) = Curses_Err then
raise Curses_Exception;
end if;
end Clear_On_Next_Update;
(Win : in Window := Standard_Window;
Do_Idl : in Boolean := True)
is
- function IDL_Ok (W : Window; Flag : C_Int) return C_Int;
+ function IDL_Ok (W : Window; Flag : Curses_Bool) return C_Int;
pragma Import (C, IDL_Ok, "idlok");
begin
- if IDL_Ok (Win, Boolean'Pos (Do_Idl)) = Curses_Err then
+ if IDL_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idl))) = Curses_Err then
raise Curses_Exception;
end if;
end Use_Insert_Delete_Line;
(Win : in Window := Standard_Window;
Do_Idc : in Boolean := True)
is
- function IDC_Ok (W : Window; Flag : C_Int) return C_Int;
+ function IDC_Ok (W : Window; Flag : Curses_Bool) return C_Int;
pragma Import (C, IDC_Ok, "idcok");
begin
- if IDC_Ok (Win, Boolean'Pos (Do_Idc)) = Curses_Err then
+ if IDC_Ok (Win, Curses_Bool (Boolean'Pos (Do_Idc))) = Curses_Err then
raise Curses_Exception;
end if;
end Use_Insert_Delete_Character;
(Win : in Window := Standard_Window;
Do_Leave : in Boolean := True)
is
- function Leave_Ok (W : Window; Flag : C_Int) return C_Int;
+ function Leave_Ok (W : Window; Flag : Curses_Bool) return C_Int;
pragma Import (C, Leave_Ok, "leaveok");
begin
- if Leave_Ok (Win, Boolean'Pos (Do_Leave)) = Curses_Err then
+ if Leave_Ok (Win, Curses_Bool (Boolean'Pos (Do_Leave))) = Curses_Err then
raise Curses_Exception;
end if;
end Leave_Cursor_After_Update;
(Win : in Window := Standard_Window;
Mode : in Boolean := False)
is
- function Immedok (Win : Window; Mode : C_Int) return C_Int;
+ function Immedok (Win : Window; Mode : Curses_Bool) return C_Int;
pragma Import (C, Immedok, "immedok");
begin
- if Immedok (Win, Boolean'Pos (Mode)) = Curses_Err then
+ if Immedok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
raise Curses_Exception;
end if;
end Immediate_Update_Mode;
(Win : in Window := Standard_Window;
Mode : in Boolean := False)
is
- function Scrollok (Win : Window; Mode : C_Int) return C_Int;
+ function Scrollok (Win : Window; Mode : Curses_Bool) return C_Int;
pragma Import (C, Scrollok, "scrollok");
begin
- if Scrollok (Win, Boolean'Pos (Mode)) = Curses_Err then
+ if Scrollok (Win, Curses_Bool (Boolean'Pos (Mode))) = Curses_Err then
raise Curses_Exception;
end if;
end Allow_Scrolling;
function Scrolling_Allowed (Win : Window := Standard_Window) return Boolean
is
- function Is_Scroll (Win : Window) return C_Int;
- pragma Import (C, Is_Scroll, "_nc_ada_isscroll");
-
- Res : constant C_Int := Is_Scroll (Win);
+ Res : C_Int;
begin
+ case Sizeof_bool is
+ when 1 => Res := C_Int (W_Get_Byte (Win, Offset_scroll));
+ when 2 => Res := C_Int (W_Get_Short (Win, Offset_scroll));
+ when 4 => Res := C_Int (W_Get_Int (Win, Offset_scroll));
+ when others => raise Curses_Exception;
+ end case;
+
case Res is
- when Curses_True => return True;
- when Curses_False => return False;
- when others => raise Curses_Exception;
+ when 0 => return False;
+ when others => return True;
end case;
end Scrolling_Allowed;
(Win : in Window := Standard_Window;
Ch : in Attributed_Character)
is
- procedure WBackground (W : in Window; Ch : in C_Int);
+ procedure WBackground (W : in Window; Ch : in C_Chtype);
pragma Import (C, WBackground, "wbkgdset");
begin
- WBackground (Win, Chtype_To_CInt (Ch));
+ WBackground (Win, AttrChar_To_Chtype (Ch));
end Set_Background;
procedure Change_Background
(Win : in Window := Standard_Window;
Ch : in Attributed_Character)
is
- function WChangeBkgd (W : Window; Ch : C_Int)
- return C_Int;
+ function WChangeBkgd (W : Window; Ch : C_Chtype) return C_Int;
pragma Import (C, WChangeBkgd, "wbkgd");
begin
- if WChangeBkgd (Win, Chtype_To_CInt (Ch)) = Curses_Err then
+ if WChangeBkgd (Win, AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Change_Background;
function Get_Background (Win : Window := Standard_Window)
return Attributed_Character
is
- function Wgetbkgd (Win : Window) return C_Int;
+ function Wgetbkgd (Win : Window) return C_Chtype;
pragma Import (C, Wgetbkgd, "getbkgd");
begin
- return CInt_To_Chtype (Wgetbkgd (Win));
+ return Chtype_To_AttrChar (Wgetbkgd (Win));
end Get_Background;
------------------------------------------------------------------------------
procedure Change_Lines_Status (Win : in Window := Standard_Window;
(Win : Window := Standard_Window;
Line : Line_Position) return Boolean
is
- function WLineTouched (W : Window; L : C_Int) return C_Int;
+ function WLineTouched (W : Window; L : C_Int) return Curses_Bool;
pragma Import (C, WLineTouched, "is_linetouched");
begin
- if WLineTouched (Win, C_Int (Line)) = Curses_False then
+ if WLineTouched (Win, C_Int (Line)) = Curses_Bool_False then
return False;
else
return True;
function Is_Touched
(Win : Window := Standard_Window) return Boolean
is
- function WWinTouched (W : Window) return C_Int;
+ function WWinTouched (W : Window) return Curses_Bool;
pragma Import (C, WWinTouched, "is_wintouched");
begin
- if WWinTouched (Win) = Curses_False then
+ if WWinTouched (Win) = Curses_Bool_False then
return False;
else
return True;
Insert_Delete_Lines (Win, 1);
end Insert_Line;
------------------------------------------------------------------------------
+
+
procedure Get_Size
(Win : in Window := Standard_Window;
Number_Of_Lines : out Line_Count;
Number_Of_Columns : out Column_Count)
is
- type Int_Access is access all C_Int;
- function Getmaxyx (W : Window; Y, X : Int_Access) return C_Int;
- pragma Import (C, Getmaxyx, "_nc_ada_getmaxyx");
-
- Y, X : aliased C_Int;
- Err : constant C_Int := Getmaxyx (Win, Y'Access, X'Access);
+ -- Please note: in ncurses they are one off.
+ -- This might be different in other implementations of curses
+ Y : C_Int := C_Int (W_Get_Short (Win, Offset_maxy)) + C_Int (Offset_XY);
+ X : C_Int := C_Int (W_Get_Short (Win, Offset_maxx)) + C_Int (Offset_XY);
begin
- if Err = Curses_Err then
- raise Curses_Exception;
- else
- Number_Of_Lines := Line_Count (Y);
- Number_Of_Columns := Column_Count (X);
- end if;
+ Number_Of_Lines := Line_Count (Y);
+ Number_Of_Columns := Column_Count (X);
end Get_Size;
procedure Get_Window_Position
Top_Left_Line : out Line_Position;
Top_Left_Column : out Column_Position)
is
- type Int_Access is access all C_Int;
- function Getbegyx (W : Window; Y, X : Int_Access) return C_Int;
- pragma Import (C, Getbegyx, "_nc_ada_getbegyx");
-
- Y, X : aliased C_Int;
- Err : constant C_Int := Getbegyx (Win, Y'Access, X'Access);
+ Y : C_Short := W_Get_Short (Win, Offset_begy);
+ X : C_Short := W_Get_Short (Win, Offset_begx);
begin
- if Err = Curses_Err then
- raise Curses_Exception;
- else
- Top_Left_Line := Line_Position (Y);
- Top_Left_Column := Column_Position (X);
- end if;
+ Top_Left_Line := Line_Position (Y);
+ Top_Left_Column := Column_Position (X);
end Get_Window_Position;
procedure Get_Cursor_Position
Line : out Line_Position;
Column : out Column_Position)
is
- type Int_Access is access all C_Int;
- function Getyx (W : Window; Y, X : Int_Access) return C_Int;
- pragma Import (C, Getyx, "_nc_ada_getyx");
-
- Y, X : aliased C_Int;
- Err : constant C_Int := Getyx (Win, Y'Access, X'Access);
+ Y : C_Short := W_Get_Short (Win, Offset_cury);
+ X : C_Short := W_Get_Short (Win, Offset_curx);
begin
- if Err = Curses_Err then
- raise Curses_Exception;
- else
- Line := Line_Position (Y);
- Column := Column_Position (X);
- end if;
+ Line := Line_Position (Y);
+ Column := Column_Position (X);
end Get_Cursor_Position;
procedure Get_Origin_Relative_To_Parent
Top_Left_Column : out Column_Position;
Is_Not_A_Subwindow : out Boolean)
is
- type Int_Access is access all C_Int;
- function Getparyx (W : Window; Y, X : Int_Access) return C_Int;
- pragma Import (C, Getparyx, "_nc_ada_getparyx");
-
- Y, X : aliased C_Int;
- Err : constant C_Int := Getparyx (Win, Y'Access, X'Access);
+ Y : C_Int := W_Get_Int (Win, Offset_pary);
+ X : C_Int := W_Get_Int (Win, Offset_parx);
begin
- if Err = Curses_Err then
- raise Curses_Exception;
+ if Y = -1 then
+ Top_Left_Line := Line_Position'Last;
+ Top_Left_Column := Column_Position'Last;
+ Is_Not_A_Subwindow := True;
else
- if Y = -1 then
- Top_Left_Line := Line_Position'Last;
- Top_Left_Column := Column_Position'Last;
- Is_Not_A_Subwindow := True;
- else
- Top_Left_Line := Line_Position (Y);
- Top_Left_Column := Column_Position (X);
- Is_Not_A_Subwindow := False;
- end if;
+ Top_Left_Line := Line_Position (Y);
+ Top_Left_Column := Column_Position (X);
+ Is_Not_A_Subwindow := False;
end if;
end Get_Origin_Relative_To_Parent;
------------------------------------------------------------------------------
(Pad : in Window;
Ch : in Attributed_Character)
is
- function Pechochar (Pad : Window; Ch : C_Int)
+ function Pechochar (Pad : Window; Ch : C_Chtype)
return C_Int;
pragma Import (C, Pechochar, "pechochar");
begin
- if Pechochar (Pad, Chtype_To_CInt (Ch)) = Curses_Err then
+ if Pechochar (Pad, AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Add_Character_To_Pad_And_Echo_It;
function Peek (Win : Window := Standard_Window)
return Attributed_Character
is
- function Winch (Win : Window) return C_Int;
+ function Winch (Win : Window) return C_Chtype;
pragma Import (C, Winch, "winch");
begin
- return CInt_To_Chtype (Winch (Win));
+ return Chtype_To_AttrChar (Winch (Win));
end Peek;
function Peek
is
function Mvwinch (Win : Window;
Lin : C_Int;
- Col : C_Int) return C_Int;
+ Col : C_Int) return C_Chtype;
pragma Import (C, Mvwinch, "mvwinch");
begin
- return CInt_To_Chtype (Mvwinch (Win, C_Int (Line), C_Int (Column)));
+ return Chtype_To_AttrChar (Mvwinch (Win, C_Int (Line), C_Int (Column)));
end Peek;
------------------------------------------------------------------------------
procedure Insert (Win : in Window := Standard_Window;
Ch : in Attributed_Character)
is
- function Winsch (Win : Window; Ch : C_Int) return C_Int;
+ function Winsch (Win : Window; Ch : C_Chtype) return C_Int;
pragma Import (C, Winsch, "winsch");
begin
- if Winsch (Win, Chtype_To_CInt (Ch)) = Curses_Err then
+ if Winsch (Win, AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Insert;
function Mvwinsch (Win : Window;
Lin : C_Int;
Col : C_Int;
- Ch : C_Int) return C_Int;
+ Ch : C_Chtype) return C_Int;
pragma Import (C, Mvwinsch, "mvwinsch");
begin
if Mvwinsch (Win,
C_Int (Line),
C_Int (Column),
- Chtype_To_CInt (Ch)) = Curses_Err then
+ AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Insert;
Str : in String;
Len : in Integer := -1)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Winsnstr (Win : Window;
Str : Char_Ptr;
Len : Integer := -1) return C_Int;
Str : in String;
Len : in Integer := -1)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Mvwinsnstr (Win : Window;
Line : C_Int;
Column : C_Int;
Text : in String;
Fmt : in Label_Justification := Left)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Slk_Set (Label : C_Int;
Txt : Char_Ptr;
Fmt : C_Int) return C_Int;
(Attr : in Character_Attribute_Set;
On : in Boolean := True)
is
- function Slk_Attron (Ch : C_Int) return C_Int;
+ function Slk_Attron (Ch : C_Chtype) return C_Int;
pragma Import (C, Slk_Attron, "slk_attron");
- function Slk_Attroff (Ch : C_Int) return C_Int;
+ function Slk_Attroff (Ch : C_Chtype) return C_Int;
pragma Import (C, Slk_Attroff, "slk_attroff");
Err : C_Int;
Color => Color_Pair'First);
begin
if On then
- Err := Slk_Attron (Chtype_To_CInt (Ch));
+ Err := Slk_Attron (AttrChar_To_Chtype (Ch));
else
- Err := Slk_Attroff (Chtype_To_CInt (Ch));
+ Err := Slk_Attroff (AttrChar_To_Chtype (Ch));
end if;
if Err = Curses_Err then
raise Curses_Exception;
(Attr : in Character_Attribute_Set := Normal_Video;
Color : in Color_Pair := Color_Pair'First)
is
- function Slk_Attrset (Ch : C_Int) return C_Int;
+ function Slk_Attrset (Ch : C_Chtype) return C_Int;
pragma Import (C, Slk_Attrset, "slk_attrset");
Ch : constant Attributed_Character := (Ch => Character'First,
Attr => Attr,
Color => Color);
begin
- if Slk_Attrset (Chtype_To_CInt (Ch)) = Curses_Err then
+ if Slk_Attrset (AttrChar_To_Chtype (Ch)) = Curses_Err then
raise Curses_Exception;
end if;
end Set_Soft_Label_Key_Attributes;
function Get_Soft_Label_Key_Attributes return Character_Attribute_Set
is
- function Slk_Attr return C_Int;
+ function Slk_Attr return C_Chtype;
pragma Import (C, Slk_Attr, "slk_attr");
- Attr : constant C_Int := Slk_Attr;
+ Attr : constant C_Chtype := Slk_Attr;
begin
- return CInt_To_Chtype (Attr).Attr;
+ return Chtype_To_AttrChar (Attr).Attr;
end Get_Soft_Label_Key_Attributes;
function Get_Soft_Label_Key_Attributes return Color_Pair
is
- function Slk_Attr return C_Int;
+ function Slk_Attr return C_Chtype;
pragma Import (C, Slk_Attr, "slk_attr");
- Attr : constant C_Int := Slk_Attr;
+ Attr : constant C_Chtype := Slk_Attr;
begin
- return CInt_To_Chtype (Attr).Color;
+ return Chtype_To_AttrChar (Attr).Color;
end Get_Soft_Label_Key_Attributes;
+
+ procedure Set_Soft_Label_Key_Color (Pair : in Color_Pair)
+ is
+ function Slk_Color (Color : in C_Short) return C_Int;
+ pragma Import (C, Slk_Color, "slk_color");
+ begin
+ if Slk_Color (C_Short (Pair)) = Curses_Err then
+ raise Curses_Exception;
+ end if;
+ end Set_Soft_Label_Key_Color;
+
------------------------------------------------------------------------------
procedure Enable_Key (Key : in Special_Key_Code;
Enable : in Boolean := True)
is
function Keyok (Keycode : C_Int;
- On_Off : C_Int) return C_Int;
+ On_Off : Curses_Bool) return C_Int;
pragma Import (C, Keyok, "keyok");
begin
- if Keyok (C_Int (Key), Boolean'Pos (Enable)) = Curses_Err then
+ if Keyok (C_Int (Key), Curses_Bool (Boolean'Pos (Enable)))
+ = Curses_Err then
raise Curses_Exception;
end if;
end Enable_Key;
procedure Define_Key (Definition : in String;
Key : in Special_Key_Code)
is
- type Char_Ptr is access all Interfaces.C.Char;
+ type Char_Ptr is access all Interfaces.C.char;
function Defkey (Def : Char_Ptr;
Key : C_Int) return C_Int;
pragma Import (C, Defkey, "define_key");
procedure Un_Control (Ch : in Attributed_Character;
Str : out String)
is
- function Unctrl (Ch : C_Int) return chars_ptr;
+ function Unctrl (Ch : C_Chtype) return chars_ptr;
pragma Import (C, Unctrl, "unctrl");
begin
- Fill_String (Unctrl (Chtype_To_CInt (Ch)), Str);
+ Fill_String (Unctrl (AttrChar_To_Chtype (Ch)), Str);
end Un_Control;
function Un_Control (Ch : in Attributed_Character) return String
is
- function Unctrl (Ch : C_Int) return chars_ptr;
+ function Unctrl (Ch : C_Chtype) return chars_ptr;
pragma Import (C, Unctrl, "unctrl");
begin
- return Fill_String (Unctrl (Chtype_To_CInt (Ch)));
+ return Fill_String (Unctrl (AttrChar_To_Chtype (Ch)));
end Un_Control;
procedure Delay_Output (Msecs : in Natural)
function Has_Insert_Character return Boolean
is
- function Has_Ic return C_Int;
+ function Has_Ic return Curses_Bool;
pragma Import (C, Has_Ic, "has_ic");
begin
- if Has_Ic = Curses_False then
+ if Has_Ic = Curses_Bool_False then
return False;
else
return True;
function Has_Insert_Line return Boolean
is
- function Has_Il return C_Int;
+ function Has_Il return Curses_Bool;
pragma Import (C, Has_Il, "has_il");
begin
- if Has_Il = Curses_False then
+ if Has_Il = Curses_Bool_False then
return False;
else
return True;
function Supported_Attributes return Character_Attribute_Set
is
- function Termattrs return C_Int;
+ function Termattrs return C_Chtype;
pragma Import (C, Termattrs, "termattrs");
- Ch : constant Attributed_Character := CInt_To_Chtype (Termattrs);
+ Ch : constant Attributed_Character := Chtype_To_AttrChar (Termattrs);
begin
return Ch.Attr;
end Supported_Attributes;
function Has_Colors return Boolean
is
- function Hascolors return C_Int;
+ function Hascolors return Curses_Bool;
pragma Import (C, Hascolors, "has_colors");
begin
- if Hascolors = Curses_False then
+ if Hascolors = Curses_Bool_False then
return False;
else
return True;
function Can_Change_Color return Boolean
is
- function Canchangecolor return C_Int;
+ function Canchangecolor return Curses_Bool;
pragma Import (C, Canchangecolor, "can_change_color");
begin
- if Canchangecolor = Curses_False then
+ if Canchangecolor = Curses_Bool_False then
return False;
else
return True;
type Int_Access is access all C_Int;
function Transform (W : Window;
Y, X : Int_Access;
- Dir : C_Int) return C_Int;
- pragma Import (C, Transform, "_nc_ada_coord_transform");
+ Dir : Curses_Bool) return C_Int;
+ pragma Import (C, Transform, "wmouse_trafo");
X : aliased C_Int := C_Int (Column);
Y : aliased C_Int := C_Int (Line);
- D : C_Int := 0;
+ D : Curses_Bool := Curses_Bool_False;
R : C_Int;
begin
if Dir = To_Screen then
-- sale, use or other dealings in this Software without prior written --
-- authorization. --
------------------------------------------------------------------------------
--- Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996
+-- Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1996
-- Version Control:
--- $Revision: 1.8 $
--- Binding Version 00.93
+-- $Revision: 1.10 $
+-- Binding Version 01.00
------------------------------------------------------------------------------
package Terminal_Interface is
pragma Pure (Terminal_Interface);
--- $Id: INSTALL,v 1.28 1998/02/12 23:43:24 tom Exp $
+-- $Id: INSTALL,v 1.33 1999/09/18 23:04:36 tom Exp $
---------------------------------------------------------------------
How to install Ncurses/Terminfo on your system
---------------------------------------------------------------------
See the BSD CONVERSION NOTES section below for a few more details.
6. The c++ directory has C++ classes that are built on top of ncurses and
- panels. You need to have c++ (and its libraries) installed before you can
+ panels. You must have c++ (and its libraries) installed before you can
compile and run the demo.
- If you do not have C++, you must use the --without-cxx option to tell
- the configure script to not attempt to build the C++ bindings.
+ Use --without-cxx-binding to tell configure to not build the C++ bindings
+ and demo.
+ If you do not have C++, you must use the --without-cxx option to tell
+ the configure script to not attempt to determine the type of 'bool'
+ which may be supported by C++. IF YOU USE THIS OPTION, BE ADVISED THAT
+ YOU MAY NOT BE ABLE TO COMPILE (OR RUN) NCURSES APPLICATIONS WITH C++.
+
7. If you're running an older Linux, you must either (a) tell Linux that the
console terminal type is `linux' or (b) make a link to or copy of the
linux entry in the appropriate place under your terminfo directory, named
wish to use the --enable-getcap option. This option speeds up
termcap-based startups, at the expense of not allowing personal
termcap entries to reference the terminfo tree. See the code in
- ncurses/read_termcap.c for details.
+ ncurses/tinfo/read_termcap.c for details.
+
+ Note that if you have $TERMCAP set, ncurses will use that value
+ to locate termcap data. In particular, running from xterm will
+ set $TERMCAP to the contents of the xterm's termcap entry.
+ If ncurses sees that, it will not examine /etc/termcap.
Keyboard Mapping:
term(7) manual page included with this distribution for more on
conventions for choosing type names.
- Here are our recommended primary console names for the most important
- freeware UNIX distributions:
+ Here are some recommended primary console names:
linux -- Linux console driver
freebsd -- FreeBSD
earlier X11R5 entry (xterm-r5) is provided as well.
If you are running XFree86 version 3.2 (actually 3.1.2F and up), you
- should consider using the xterm-xf86-v32 entry, which adds ANSI color
+ should consider using the xterm-xf86-v32 (or later, the most recent
+ version is always named "xterm-xfree86") entry, which adds ANSI color
and the VT220 capabilities which have been added in XFree86. If you
are running a mixed network, however, where this terminal description
may be used on an older xterm, you may have problems, since
BUGS:
Send any feedback to the ncurses mailing list at
- ncurses@bsdi.com. To subscribe send mail to
- ncurses-request@mailgate.bsdi.com with body that reads:
+ bug-ncurses@gnu.org. To subscribe send mail to
+ bug-ncurses-request@gnu.org with body that reads:
subscribe ncurses <your-email-address-here>
The Hacker's Guide in the misc directory includes some guidelines
./Ada95/Makefile.in
./Ada95/README
./Ada95/TODO
-./Ada95/ada_include/Makefile.in
-./Ada95/ada_include/terminal_interface-curses-aux.adb
-./Ada95/ada_include/terminal_interface-curses-aux.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-alpha.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-alpha.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-alphanumeric.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-alphanumeric.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-enumeration-ada.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-enumeration-ada.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-enumeration.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-enumeration.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-intfield.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-intfield.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-ipv4_address.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-ipv4_address.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-numeric.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-numeric.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-regexp.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-regexp.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-user-choice.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-user-choice.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-user.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_types-user.ads
-./Ada95/ada_include/terminal_interface-curses-forms-field_types.adb
-./Ada95/ada_include/terminal_interface-curses-forms-field_user_data.adb
-./Ada95/ada_include/terminal_interface-curses-forms-form_user_data.adb
-./Ada95/ada_include/terminal_interface-curses-forms.adb
-./Ada95/ada_include/terminal_interface-curses-menus-item_user_data.adb
-./Ada95/ada_include/terminal_interface-curses-menus-menu_user_data.adb
-./Ada95/ada_include/terminal_interface-curses-menus.adb
-./Ada95/ada_include/terminal_interface-curses-mouse.adb
-./Ada95/ada_include/terminal_interface-curses-panels-user_data.adb
-./Ada95/ada_include/terminal_interface-curses-panels.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-aux.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-aux.ads
-./Ada95/ada_include/terminal_interface-curses-text_io-complex_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-complex_io.ads
-./Ada95/ada_include/terminal_interface-curses-text_io-decimal_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-decimal_io.ads
-./Ada95/ada_include/terminal_interface-curses-text_io-enumeration_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-enumeration_io.ads
-./Ada95/ada_include/terminal_interface-curses-text_io-fixed_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-fixed_io.ads
-./Ada95/ada_include/terminal_interface-curses-text_io-float_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-float_io.ads
-./Ada95/ada_include/terminal_interface-curses-text_io-integer_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-integer_io.ads
-./Ada95/ada_include/terminal_interface-curses-text_io-modular_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io-modular_io.ads
-./Ada95/ada_include/terminal_interface-curses-text_io.adb
-./Ada95/ada_include/terminal_interface-curses-text_io.ads
-./Ada95/ada_include/terminal_interface-curses.adb
-./Ada95/ada_include/terminal_interface.ads
./Ada95/gen/Makefile.in
./Ada95/gen/gen.c
./Ada95/gen/normal.m4
+./Ada95/gen/terminal_interface-curses-aux.ads.m4
./Ada95/gen/terminal_interface-curses-forms-field_types.ads.m4
./Ada95/gen/terminal_interface-curses-forms-field_user_data.ads.m4
./Ada95/gen/terminal_interface-curses-forms-form_user_data.ads.m4
./Ada95/gen/terminal_interface-curses-panels-user_data.ads.m4
./Ada95/gen/terminal_interface-curses-panels.ads.m4
./Ada95/gen/terminal_interface-curses.ads.m4
-./Ada95/html/curs_addch.3x.html
-./Ada95/html/curs_addchstr.3x.html
-./Ada95/html/curs_addstr.3x.html
-./Ada95/html/curs_attr.3x.html
-./Ada95/html/curs_beep.3x.html
-./Ada95/html/curs_bkgd.3x.html
-./Ada95/html/curs_border.3x.html
-./Ada95/html/curs_clear.3x.html
-./Ada95/html/curs_color.3x.html
-./Ada95/html/curs_delch.3x.html
-./Ada95/html/curs_deleteln.3x.html
-./Ada95/html/curs_getch.3x.html
-./Ada95/html/curs_getstr.3x.html
-./Ada95/html/curs_getyx.3x.html
-./Ada95/html/curs_inch.3x.html
-./Ada95/html/curs_inchstr.3x.html
-./Ada95/html/curs_initscr.3x.html
-./Ada95/html/curs_inopts.3x.html
-./Ada95/html/curs_insch.3x.html
-./Ada95/html/curs_insstr.3x.html
-./Ada95/html/curs_instr.3x.html
-./Ada95/html/curs_kernel.3x.html
-./Ada95/html/curs_mouse.3x.html
-./Ada95/html/curs_move.3x.html
-./Ada95/html/curs_outopts.3x.html
-./Ada95/html/curs_overlay.3x.html
-./Ada95/html/curs_pad.3x.html
-./Ada95/html/curs_print.3x.html
-./Ada95/html/curs_printw.3x.html
-./Ada95/html/curs_refresh.3x.html
-./Ada95/html/curs_scanw.3x.html
-./Ada95/html/curs_scr_dmp.3x.html
-./Ada95/html/curs_scroll.3x.html
-./Ada95/html/curs_slk.3x.html
-./Ada95/html/curs_termattrs.3x.html
-./Ada95/html/curs_termcap.3x.html
-./Ada95/html/curs_terminfo.3x.html
-./Ada95/html/curs_touch.3x.html
-./Ada95/html/curs_util.3x.html
-./Ada95/html/curs_window.3x.html
-./Ada95/html/define_key.3x.html
-./Ada95/html/dft_fgbg.3x.html
-./Ada95/html/form.3x.html
-./Ada95/html/form_cursor.3x.html
-./Ada95/html/form_data.3x.html
-./Ada95/html/form_driver.3x.html
-./Ada95/html/form_field.3x.html
-./Ada95/html/form_field_attributes.3x.html
-./Ada95/html/form_field_buffer.3x.html
-./Ada95/html/form_field_info.3x.html
-./Ada95/html/form_field_just.3x.html
-./Ada95/html/form_field_new.3x.html
-./Ada95/html/form_field_opts.3x.html
-./Ada95/html/form_field_userptr.3x.html
-./Ada95/html/form_field_validation.3x.html
-./Ada95/html/form_fieldtype.3x.html
-./Ada95/html/form_hook.3x.html
-./Ada95/html/form_new.3x.html
-./Ada95/html/form_new_page.3x.html
-./Ada95/html/form_opts.3x.html
-./Ada95/html/form_page.3x.html
-./Ada95/html/form_post.3x.html
-./Ada95/html/form_requestname.3x.html
-./Ada95/html/form_userptr.3x.html
-./Ada95/html/form_win.3x.html
+./Ada95/html/ada/files.htm
+./Ada95/html/ada/files/T.htm
+./Ada95/html/ada/funcs.htm
+./Ada95/html/ada/funcs/A.htm
+./Ada95/html/ada/funcs/C.htm
+./Ada95/html/ada/funcs/E.htm
+./Ada95/html/ada/funcs/F.htm
+./Ada95/html/ada/funcs/G.htm
+./Ada95/html/ada/funcs/I.htm
+./Ada95/html/ada/funcs/L.htm
+./Ada95/html/ada/funcs/M.htm
+./Ada95/html/ada/funcs/N.htm
+./Ada95/html/ada/funcs/P.htm
+./Ada95/html/ada/funcs/R.htm
+./Ada95/html/ada/funcs/S.htm
+./Ada95/html/ada/funcs/T.htm
+./Ada95/html/ada/funcs/U.htm
+./Ada95/html/ada/funcs/V.htm
+./Ada95/html/ada/index.htm
+./Ada95/html/ada/main.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-alpha__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-alphanumeric__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-enumeration-ada__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-enumeration__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-intfield__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-ipv4_address__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-numeric__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-regexp__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-user-choice__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types-user__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_types__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-field_user_data__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms-form_user_data__ads.htm
+./Ada95/html/ada/terminal_interface-curses-forms__ads.htm
+./Ada95/html/ada/terminal_interface-curses-menus-item_user_data__ads.htm
+./Ada95/html/ada/terminal_interface-curses-menus-menu_user_data__ads.htm
+./Ada95/html/ada/terminal_interface-curses-menus__ads.htm
+./Ada95/html/ada/terminal_interface-curses-mouse__ads.htm
+./Ada95/html/ada/terminal_interface-curses-panels-user_data__ads.htm
+./Ada95/html/ada/terminal_interface-curses-panels__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io-complex_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io-decimal_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io-enumeration_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io-fixed_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io-float_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io-integer_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io-modular_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses-text_io__ads.htm
+./Ada95/html/ada/terminal_interface-curses__ads.htm
+./Ada95/html/ada/terminal_interface__ads.htm
./Ada95/html/index.html
-./Ada95/html/keyok.3x.html
-./Ada95/html/menu.3x.html
-./Ada95/html/menu_attribs.3x.html
-./Ada95/html/menu_cursor.3x.html
-./Ada95/html/menu_driver.3x.html
-./Ada95/html/menu_format.3x.html
-./Ada95/html/menu_hook.3x.html
-./Ada95/html/menu_items.3x.html
-./Ada95/html/menu_mark.3x.html
-./Ada95/html/menu_new.3x.html
-./Ada95/html/menu_opts.3x.html
-./Ada95/html/menu_pattern.3x.html
-./Ada95/html/menu_post.3x.html
-./Ada95/html/menu_requestname.3x.html
-./Ada95/html/menu_spacing.3x.html
-./Ada95/html/menu_userptr.3x.html
-./Ada95/html/menu_win.3x.html
-./Ada95/html/mitem_current.3x.html
-./Ada95/html/mitem_name.3x.html
-./Ada95/html/mitem_new.3x.html
-./Ada95/html/mitem_opts.3x.html
-./Ada95/html/mitem_userptr.3x.html
-./Ada95/html/mitem_value.3x.html
-./Ada95/html/mitem_visible.3x.html
-./Ada95/html/ncurses.3x.html
-./Ada95/html/panel.3x.html
-./Ada95/html/resizeterm.3x.html
+./Ada95/html/man/curs_addch.3x.html
+./Ada95/html/man/curs_addchstr.3x.html
+./Ada95/html/man/curs_addstr.3x.html
+./Ada95/html/man/curs_attr.3x.html
+./Ada95/html/man/curs_beep.3x.html
+./Ada95/html/man/curs_bkgd.3x.html
+./Ada95/html/man/curs_border.3x.html
+./Ada95/html/man/curs_clear.3x.html
+./Ada95/html/man/curs_color.3x.html
+./Ada95/html/man/curs_delch.3x.html
+./Ada95/html/man/curs_deleteln.3x.html
+./Ada95/html/man/curs_getch.3x.html
+./Ada95/html/man/curs_getstr.3x.html
+./Ada95/html/man/curs_getyx.3x.html
+./Ada95/html/man/curs_inch.3x.html
+./Ada95/html/man/curs_inchstr.3x.html
+./Ada95/html/man/curs_initscr.3x.html
+./Ada95/html/man/curs_inopts.3x.html
+./Ada95/html/man/curs_insch.3x.html
+./Ada95/html/man/curs_insstr.3x.html
+./Ada95/html/man/curs_instr.3x.html
+./Ada95/html/man/curs_kernel.3x.html
+./Ada95/html/man/curs_mouse.3x.html
+./Ada95/html/man/curs_move.3x.html
+./Ada95/html/man/curs_outopts.3x.html
+./Ada95/html/man/curs_overlay.3x.html
+./Ada95/html/man/curs_pad.3x.html
+./Ada95/html/man/curs_print.3x.html
+./Ada95/html/man/curs_printw.3x.html
+./Ada95/html/man/curs_refresh.3x.html
+./Ada95/html/man/curs_scanw.3x.html
+./Ada95/html/man/curs_scr_dmp.3x.html
+./Ada95/html/man/curs_scr_dump.3x.html
+./Ada95/html/man/curs_scroll.3x.html
+./Ada95/html/man/curs_slk.3x.html
+./Ada95/html/man/curs_termattrs.3x.html
+./Ada95/html/man/curs_termcap.3x.html
+./Ada95/html/man/curs_terminfo.3x.html
+./Ada95/html/man/curs_touch.3x.html
+./Ada95/html/man/curs_util.3x.html
+./Ada95/html/man/curs_window.3x.html
+./Ada95/html/man/define_key.3x.html
+./Ada95/html/man/dft_fgbg.3x.html
+./Ada95/html/man/form.3x.html
+./Ada95/html/man/form_cursor.3x.html
+./Ada95/html/man/form_data.3x.html
+./Ada95/html/man/form_driver.3x.html
+./Ada95/html/man/form_field.3x.html
+./Ada95/html/man/form_field_attributes.3x.html
+./Ada95/html/man/form_field_buffer.3x.html
+./Ada95/html/man/form_field_info.3x.html
+./Ada95/html/man/form_field_just.3x.html
+./Ada95/html/man/form_field_new.3x.html
+./Ada95/html/man/form_field_opts.3x.html
+./Ada95/html/man/form_field_userptr.3x.html
+./Ada95/html/man/form_field_validation.3x.html
+./Ada95/html/man/form_fieldtype.3x.html
+./Ada95/html/man/form_hook.3x.html
+./Ada95/html/man/form_new.3x.html
+./Ada95/html/man/form_new_page.3x.html
+./Ada95/html/man/form_opts.3x.html
+./Ada95/html/man/form_page.3x.html
+./Ada95/html/man/form_post.3x.html
+./Ada95/html/man/form_requestname.3x.html
+./Ada95/html/man/form_userptr.3x.html
+./Ada95/html/man/form_win.3x.html
+./Ada95/html/man/keyok.3x.html
+./Ada95/html/man/menu.3x.html
+./Ada95/html/man/menu_attribs.3x.html
+./Ada95/html/man/menu_cursor.3x.html
+./Ada95/html/man/menu_driver.3x.html
+./Ada95/html/man/menu_format.3x.html
+./Ada95/html/man/menu_hook.3x.html
+./Ada95/html/man/menu_items.3x.html
+./Ada95/html/man/menu_mark.3x.html
+./Ada95/html/man/menu_new.3x.html
+./Ada95/html/man/menu_opts.3x.html
+./Ada95/html/man/menu_pattern.3x.html
+./Ada95/html/man/menu_post.3x.html
+./Ada95/html/man/menu_requestname.3x.html
+./Ada95/html/man/menu_spacing.3x.html
+./Ada95/html/man/menu_userptr.3x.html
+./Ada95/html/man/menu_win.3x.html
+./Ada95/html/man/mitem_current.3x.html
+./Ada95/html/man/mitem_name.3x.html
+./Ada95/html/man/mitem_new.3x.html
+./Ada95/html/man/mitem_opts.3x.html
+./Ada95/html/man/mitem_userptr.3x.html
+./Ada95/html/man/mitem_value.3x.html
+./Ada95/html/man/mitem_visible.3x.html
+./Ada95/html/man/ncurses.3x.html
+./Ada95/html/man/panel.3x.html
+./Ada95/html/man/resizeterm.3x.html
+./Ada95/html/man/wresize.3x.html
./Ada95/html/table.html
-./Ada95/html/terminal_interface-curses-forms-field_types-alpha_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-alphanumeric_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-enumeration-ada_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-enumeration_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-intfield_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-ipv4_address_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-numeric_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-regexp_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-user-choice_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types-user_s.html
-./Ada95/html/terminal_interface-curses-forms-field_types_s.html
-./Ada95/html/terminal_interface-curses-forms-field_user_data_s.html
-./Ada95/html/terminal_interface-curses-forms-form_user_data_s.html
-./Ada95/html/terminal_interface-curses-forms_s.html
-./Ada95/html/terminal_interface-curses-menus-item_user_data_s.html
-./Ada95/html/terminal_interface-curses-menus-menu_user_data_s.html
-./Ada95/html/terminal_interface-curses-menus_s.html
-./Ada95/html/terminal_interface-curses-mouse_s.html
-./Ada95/html/terminal_interface-curses-panels-user_data_s.html
-./Ada95/html/terminal_interface-curses-panels_s.html
-./Ada95/html/terminal_interface-curses-text_io-complex_io_s.html
-./Ada95/html/terminal_interface-curses-text_io-decimal_io_s.html
-./Ada95/html/terminal_interface-curses-text_io-enumeration_io_s.html
-./Ada95/html/terminal_interface-curses-text_io-fixed_io_s.html
-./Ada95/html/terminal_interface-curses-text_io-float_io_s.html
-./Ada95/html/terminal_interface-curses-text_io-integer_io_s.html
-./Ada95/html/terminal_interface-curses-text_io-modular_io_s.html
-./Ada95/html/terminal_interface-curses-text_io_s.html
-./Ada95/html/terminal_interface-curses_s.html
-./Ada95/html/terminal_interface_s.html
-./Ada95/html/wresize.3x.html
./Ada95/samples/Makefile.in
./Ada95/samples/README
./Ada95/samples/explain.txt
./Ada95/samples/status.ads
./Ada95/samples/tour.adb
./Ada95/samples/tour.ads
+./Ada95/src/Makefile.in
+./Ada95/src/terminal_interface-curses-aux.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-alpha.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-alpha.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-alphanumeric.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-enumeration-ada.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-enumeration.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-enumeration.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-intfield.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-intfield.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-ipv4_address.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-numeric.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-numeric.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-regexp.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-regexp.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-user-choice.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-user-choice.ads
+./Ada95/src/terminal_interface-curses-forms-field_types-user.adb
+./Ada95/src/terminal_interface-curses-forms-field_types-user.ads
+./Ada95/src/terminal_interface-curses-forms-field_types.adb
+./Ada95/src/terminal_interface-curses-forms-field_user_data.adb
+./Ada95/src/terminal_interface-curses-forms-form_user_data.adb
+./Ada95/src/terminal_interface-curses-forms.adb
+./Ada95/src/terminal_interface-curses-menus-item_user_data.adb
+./Ada95/src/terminal_interface-curses-menus-menu_user_data.adb
+./Ada95/src/terminal_interface-curses-menus.adb
+./Ada95/src/terminal_interface-curses-mouse.adb
+./Ada95/src/terminal_interface-curses-panels-user_data.adb
+./Ada95/src/terminal_interface-curses-panels.adb
+./Ada95/src/terminal_interface-curses-text_io-aux.adb
+./Ada95/src/terminal_interface-curses-text_io-aux.ads
+./Ada95/src/terminal_interface-curses-text_io-complex_io.adb
+./Ada95/src/terminal_interface-curses-text_io-complex_io.ads
+./Ada95/src/terminal_interface-curses-text_io-decimal_io.adb
+./Ada95/src/terminal_interface-curses-text_io-decimal_io.ads
+./Ada95/src/terminal_interface-curses-text_io-enumeration_io.adb
+./Ada95/src/terminal_interface-curses-text_io-enumeration_io.ads
+./Ada95/src/terminal_interface-curses-text_io-fixed_io.adb
+./Ada95/src/terminal_interface-curses-text_io-fixed_io.ads
+./Ada95/src/terminal_interface-curses-text_io-float_io.adb
+./Ada95/src/terminal_interface-curses-text_io-float_io.ads
+./Ada95/src/terminal_interface-curses-text_io-integer_io.adb
+./Ada95/src/terminal_interface-curses-text_io-integer_io.ads
+./Ada95/src/terminal_interface-curses-text_io-modular_io.adb
+./Ada95/src/terminal_interface-curses-text_io-modular_io.ads
+./Ada95/src/terminal_interface-curses-text_io.adb
+./Ada95/src/terminal_interface-curses-text_io.ads
+./Ada95/src/terminal_interface-curses.adb
+./Ada95/src/terminal_interface.ads
./INSTALL
./MANIFEST
./Makefile.glibc
./Makefile.in
+./Makefile.os2
./NEWS
./README
+./README.emx
./README.glibc
./TO-DO
./aclocal.m4
./c++/cursesmain.cc
./c++/cursesp.cc
./c++/cursesp.h
+./c++/cursespad.cc
./c++/cursesw.cc
./c++/cursesw.h
./c++/cursslk.cc
./config.sub
./configure
./configure.in
+./convert_configure.pl
./dist.mk
./form/Makefile.in
./form/READ.ME
./form/fld_user.c
./form/form.h
./form/form.priv.h
-./form/frm_adabind.c
./form/frm_cursor.c
./form/frm_data.c
./form/frm_def.c
./man/curs_printw.3x
./man/curs_refresh.3x
./man/curs_scanw.3x
-./man/curs_scr_dmp.3x
+./man/curs_scr_dump.3x
./man/curs_scroll.3x
./man/curs_slk.3x
./man/curs_termattrs.3x
./man/form_userptr.3x
./man/form_win.3x
./man/infocmp.1m
+./man/keybound.3x
./man/keyok.3x
./man/make_sed.sh
./man/man_db.renames
./menu/eti.h
./menu/headers
./menu/llib-lmenu
-./menu/m_adabind.c
./menu/m_attribs.c
./menu/m_cursor.c
./menu/m_driver.c
./menu/mf_common.h
./menu/modules
./misc/Makefile.in
+./misc/chkdef.cmd
+./misc/cleantic.cmd
+./misc/cmpdef.cmd
./misc/emx.src
+./misc/form.def
+./misc/form.ref
./misc/hackguide.doc
./misc/hackguide.html
+./misc/makedef.cmd
./misc/makellib
+./misc/menu.def
+./misc/menu.ref
./misc/ncurses-intro.doc
./misc/ncurses-intro.html
+./misc/ncurses.def
+./misc/ncurses.ref
+./misc/panel.def
+./misc/panel.ref
./misc/run_tic.sh
./misc/shlib
./misc/tabset/std
./mk-1st.awk
./mk-2nd.awk
./mkinstalldirs
-./ncurses/MKcaptab.awk
-./ncurses/MKexpanded.sh
-./ncurses/MKfallback.sh
-./ncurses/MKkeyname.awk
-./ncurses/MKlib_gen.sh
-./ncurses/MKnames.awk
-./ncurses/MKunctrl.awk
./ncurses/Makefile.in
./ncurses/README
./ncurses/SigAction.h
-./ncurses/alloc_entry.c
-./ncurses/captoinfo.c
-./ncurses/comp_error.c
-./ncurses/comp_expand.c
-./ncurses/comp_hash.c
-./ncurses/comp_parse.c
-./ncurses/comp_scan.c
+./ncurses/base/MKkeyname.awk
+./ncurses/base/MKlib_gen.sh
+./ncurses/base/MKunctrl.awk
+./ncurses/base/README
+./ncurses/base/define_key.c
+./ncurses/base/keybound.c
+./ncurses/base/keyok.c
+./ncurses/base/lib_addch.c
+./ncurses/base/lib_addstr.c
+./ncurses/base/lib_beep.c
+./ncurses/base/lib_bkgd.c
+./ncurses/base/lib_box.c
+./ncurses/base/lib_chgat.c
+./ncurses/base/lib_clear.c
+./ncurses/base/lib_clearok.c
+./ncurses/base/lib_clrbot.c
+./ncurses/base/lib_clreol.c
+./ncurses/base/lib_color.c
+./ncurses/base/lib_colorset.c
+./ncurses/base/lib_delch.c
+./ncurses/base/lib_delwin.c
+./ncurses/base/lib_dft_fgbg.c
+./ncurses/base/lib_echo.c
+./ncurses/base/lib_endwin.c
+./ncurses/base/lib_erase.c
+./ncurses/base/lib_flash.c
+./ncurses/base/lib_freeall.c
+./ncurses/base/lib_getch.c
+./ncurses/base/lib_getstr.c
+./ncurses/base/lib_hline.c
+./ncurses/base/lib_immedok.c
+./ncurses/base/lib_inchstr.c
+./ncurses/base/lib_initscr.c
+./ncurses/base/lib_insch.c
+./ncurses/base/lib_insdel.c
+./ncurses/base/lib_insstr.c
+./ncurses/base/lib_instr.c
+./ncurses/base/lib_isendwin.c
+./ncurses/base/lib_leaveok.c
+./ncurses/base/lib_mouse.c
+./ncurses/base/lib_move.c
+./ncurses/base/lib_mvwin.c
+./ncurses/base/lib_newterm.c
+./ncurses/base/lib_newwin.c
+./ncurses/base/lib_nl.c
+./ncurses/base/lib_overlay.c
+./ncurses/base/lib_pad.c
+./ncurses/base/lib_printw.c
+./ncurses/base/lib_redrawln.c
+./ncurses/base/lib_refresh.c
+./ncurses/base/lib_restart.c
+./ncurses/base/lib_scanw.c
+./ncurses/base/lib_screen.c
+./ncurses/base/lib_scroll.c
+./ncurses/base/lib_scrollok.c
+./ncurses/base/lib_scrreg.c
+./ncurses/base/lib_set_term.c
+./ncurses/base/lib_slk.c
+./ncurses/base/lib_slkatr_set.c
+./ncurses/base/lib_slkatrof.c
+./ncurses/base/lib_slkatron.c
+./ncurses/base/lib_slkatrset.c
+./ncurses/base/lib_slkattr.c
+./ncurses/base/lib_slkclear.c
+./ncurses/base/lib_slkcolor.c
+./ncurses/base/lib_slkinit.c
+./ncurses/base/lib_slklab.c
+./ncurses/base/lib_slkrefr.c
+./ncurses/base/lib_slkset.c
+./ncurses/base/lib_slktouch.c
+./ncurses/base/lib_touch.c
+./ncurses/base/lib_ungetch.c
+./ncurses/base/lib_vline.c
+./ncurses/base/lib_wattroff.c
+./ncurses/base/lib_wattron.c
+./ncurses/base/lib_winch.c
+./ncurses/base/lib_window.c
+./ncurses/base/memmove.c
+./ncurses/base/nc_panel.c
+./ncurses/base/resizeterm.c
+./ncurses/base/safe_sprintf.c
+./ncurses/base/sigaction.c
+./ncurses/base/tries.c
+./ncurses/base/version.c
+./ncurses/base/vsscanf.c
+./ncurses/base/wresize.c
./ncurses/curses.priv.h
-./ncurses/define_key.c
./ncurses/fifo_defs.h
-./ncurses/hardscroll.c
-./ncurses/hashmap.c
-./ncurses/keyok.c
-./ncurses/keys.list
-./ncurses/lib_acs.c
-./ncurses/lib_adabind.c
-./ncurses/lib_addch.c
-./ncurses/lib_addstr.c
-./ncurses/lib_baudrate.c
-./ncurses/lib_beep.c
-./ncurses/lib_bkgd.c
-./ncurses/lib_box.c
-./ncurses/lib_chgat.c
-./ncurses/lib_clear.c
-./ncurses/lib_clearok.c
-./ncurses/lib_clrbot.c
-./ncurses/lib_clreol.c
-./ncurses/lib_color.c
-./ncurses/lib_cur_term.c
-./ncurses/lib_data.c
-./ncurses/lib_delch.c
-./ncurses/lib_delwin.c
-./ncurses/lib_dft_fgbg.c
-./ncurses/lib_doupdate.c
-./ncurses/lib_echo.c
-./ncurses/lib_endwin.c
-./ncurses/lib_erase.c
-./ncurses/lib_flash.c
-./ncurses/lib_freeall.c
-./ncurses/lib_getch.c
-./ncurses/lib_getstr.c
-./ncurses/lib_hline.c
-./ncurses/lib_immedok.c
-./ncurses/lib_inchstr.c
-./ncurses/lib_initscr.c
-./ncurses/lib_insch.c
-./ncurses/lib_insdel.c
-./ncurses/lib_insstr.c
-./ncurses/lib_instr.c
-./ncurses/lib_isendwin.c
-./ncurses/lib_kernel.c
-./ncurses/lib_leaveok.c
-./ncurses/lib_longname.c
-./ncurses/lib_mouse.c
-./ncurses/lib_move.c
-./ncurses/lib_mvcur.c
-./ncurses/lib_mvwin.c
-./ncurses/lib_napms.c
-./ncurses/lib_newterm.c
-./ncurses/lib_newwin.c
-./ncurses/lib_nl.c
-./ncurses/lib_options.c
-./ncurses/lib_overlay.c
-./ncurses/lib_pad.c
-./ncurses/lib_print.c
-./ncurses/lib_printw.c
-./ncurses/lib_raw.c
-./ncurses/lib_redrawln.c
-./ncurses/lib_refresh.c
-./ncurses/lib_restart.c
-./ncurses/lib_scanw.c
-./ncurses/lib_screen.c
-./ncurses/lib_scroll.c
-./ncurses/lib_scrollok.c
-./ncurses/lib_scrreg.c
-./ncurses/lib_set_term.c
-./ncurses/lib_setup.c
-./ncurses/lib_slk.c
-./ncurses/lib_slkatrof.c
-./ncurses/lib_slkatron.c
-./ncurses/lib_slkatrset.c
-./ncurses/lib_slkattr.c
-./ncurses/lib_slkclear.c
-./ncurses/lib_slkinit.c
-./ncurses/lib_slklab.c
-./ncurses/lib_slkrefr.c
-./ncurses/lib_slkset.c
-./ncurses/lib_slktouch.c
-./ncurses/lib_termcap.c
-./ncurses/lib_ti.c
-./ncurses/lib_touch.c
-./ncurses/lib_tparm.c
-./ncurses/lib_tputs.c
-./ncurses/lib_trace.c
-./ncurses/lib_traceatr.c
-./ncurses/lib_tracechr.c
-./ncurses/lib_tracedmp.c
-./ncurses/lib_tracemse.c
-./ncurses/lib_tstp.c
-./ncurses/lib_twait.c
-./ncurses/lib_ungetch.c
-./ncurses/lib_vidattr.c
-./ncurses/lib_vline.c
-./ncurses/lib_wattroff.c
-./ncurses/lib_wattron.c
-./ncurses/lib_window.c
./ncurses/llib-lncurses
-./ncurses/make_keys.c
./ncurses/modules
-./ncurses/name_match.c
-./ncurses/nc_panel.c
-./ncurses/parse_entry.c
-./ncurses/read_entry.c
-./ncurses/read_termcap.c
-./ncurses/resizeterm.c
-./ncurses/safe_sprintf.c
-./ncurses/sigaction.c
-./ncurses/softscroll.c
-./ncurses/trace_buf.c
-./ncurses/tries.c
-./ncurses/vsscanf.c
-./ncurses/wresize.c
-./ncurses/write_entry.c
+./ncurses/tinfo/MKcaptab.awk
+./ncurses/tinfo/MKfallback.sh
+./ncurses/tinfo/MKnames.awk
+./ncurses/tinfo/README
+./ncurses/tinfo/access.c
+./ncurses/tinfo/add_tries.c
+./ncurses/tinfo/alloc_entry.c
+./ncurses/tinfo/alloc_ttype.c
+./ncurses/tinfo/captoinfo.c
+./ncurses/tinfo/comp_error.c
+./ncurses/tinfo/comp_expand.c
+./ncurses/tinfo/comp_hash.c
+./ncurses/tinfo/comp_parse.c
+./ncurses/tinfo/comp_scan.c
+./ncurses/tinfo/doalloc.c
+./ncurses/tinfo/free_ttype.c
+./ncurses/tinfo/getenv_num.c
+./ncurses/tinfo/home_terminfo.c
+./ncurses/tinfo/init_keytry.c
+./ncurses/tinfo/keys.list
+./ncurses/tinfo/lib_acs.c
+./ncurses/tinfo/lib_baudrate.c
+./ncurses/tinfo/lib_cur_term.c
+./ncurses/tinfo/lib_data.c
+./ncurses/tinfo/lib_has_cap.c
+./ncurses/tinfo/lib_kernel.c
+./ncurses/tinfo/lib_longname.c
+./ncurses/tinfo/lib_napms.c
+./ncurses/tinfo/lib_options.c
+./ncurses/tinfo/lib_print.c
+./ncurses/tinfo/lib_raw.c
+./ncurses/tinfo/lib_setup.c
+./ncurses/tinfo/lib_termcap.c
+./ncurses/tinfo/lib_termname.c
+./ncurses/tinfo/lib_ti.c
+./ncurses/tinfo/lib_tparm.c
+./ncurses/tinfo/lib_tputs.c
+./ncurses/tinfo/lib_ttyflags.c
+./ncurses/tinfo/make_keys.c
+./ncurses/tinfo/name_match.c
+./ncurses/tinfo/parse_entry.c
+./ncurses/tinfo/read_entry.c
+./ncurses/tinfo/read_termcap.c
+./ncurses/tinfo/setbuf.c
+./ncurses/tinfo/write_entry.c
+./ncurses/trace/README
+./ncurses/trace/lib_trace.c
+./ncurses/trace/lib_traceatr.c
+./ncurses/trace/lib_tracebits.c
+./ncurses/trace/lib_tracechr.c
+./ncurses/trace/lib_tracedmp.c
+./ncurses/trace/lib_tracemse.c
+./ncurses/trace/trace_buf.c
+./ncurses/trace/trace_tries.c
+./ncurses/trace/trace_xnames.c
+./ncurses/tty/MKexpanded.sh
+./ncurses/tty/hardscroll.c
+./ncurses/tty/hashmap.c
+./ncurses/tty/lib_mvcur.c
+./ncurses/tty/lib_tstp.c
+./ncurses/tty/lib_twait.c
+./ncurses/tty/lib_vidattr.c
+./ncurses/tty/tty_display.h
+./ncurses/tty/tty_input.h
+./ncurses/tty/tty_update.c
./panel/Makefile.in
./panel/headers
./panel/llib-lpanel
./sysdeps/unix/sysv/linux/edit_man.sed
./sysdeps/unix/sysv/linux/edit_man.sh
./sysdeps/unix/sysv/linux/run_tic.sh
+./tack/COPYING
+./tack/HISTORY
./tack/Makefile.in
+./tack/README
+./tack/ansi.c
+./tack/charset.c
+./tack/color.c
+./tack/control.c
+./tack/crum.c
+./tack/edit.c
+./tack/fun.c
+./tack/init.c
+./tack/menu.c
+./tack/modes.c
./tack/modules
+./tack/output.c
+./tack/pad.c
+./tack/scan.c
+./tack/sync.c
+./tack/sysdep.c
+./tack/tack.1
+./tack/tack.c
+./tack/tack.h
./tar-copy.sh
./test/Makefile.in
./test/README
./test/blue.c
./test/bs.6
./test/bs.c
+./test/cardfile.c
+./test/cardfile.dat
+./test/configure
./test/configure.in
+./test/ditto.c
+./test/dots.c
+./test/filter.c
./test/firework.c
./test/firstlast.c
./test/gdc.6
-# Copyright (C) 1997 Free Software Foundation, Inc.
+# Copyright (C) 1997,1998 Free Software Foundation, Inc.
# This file is part of the GNU C Library.
# The GNU C Library is free software; you can redistribute it and/or
fld_stat \
fld_type \
fld_user \
- frm_adabind \
frm_cursor \
frm_data \
frm_def \
fty_regex
libncurses-routines = \
- alloc_entry \
- captoinfo \
+ base/define_key \
+ base/keybound \
+ base/keyok \
+ base/lib_addch \
+ base/lib_addstr \
+ base/lib_beep \
+ base/lib_bkgd \
+ base/lib_box \
+ base/lib_chgat \
+ base/lib_clear \
+ base/lib_clearok \
+ base/lib_clrbot \
+ base/lib_clreol \
+ base/lib_color \
+ base/lib_colorset \
+ base/lib_delch \
+ base/lib_delwin \
+ base/lib_dft_fgbg \
+ base/lib_echo \
+ base/lib_endwin \
+ base/lib_erase \
+ base/lib_flash \
+ base/lib_freeall \
+ base/lib_getch \
+ base/lib_getstr \
+ base/lib_hline \
+ base/lib_immedok \
+ base/lib_inchstr \
+ base/lib_initscr \
+ base/lib_insch \
+ base/lib_insdel \
+ base/lib_insstr \
+ base/lib_instr \
+ base/lib_isendwin \
+ base/lib_leaveok \
+ base/lib_mouse \
+ base/lib_move \
+ base/lib_mvwin \
+ base/lib_newterm \
+ base/lib_newwin \
+ base/lib_nl \
+ base/lib_overlay \
+ base/lib_pad \
+ base/lib_printw \
+ base/lib_redrawln \
+ base/lib_refresh \
+ base/lib_restart \
+ base/lib_scanw \
+ base/lib_screen \
+ base/lib_scroll \
+ base/lib_scrollok \
+ base/lib_scrreg \
+ base/lib_set_term \
+ base/lib_slk \
+ base/lib_slkatr_set \
+ base/lib_slkatrof \
+ base/lib_slkatron \
+ base/lib_slkatrset \
+ base/lib_slkattr \
+ base/lib_slkclear \
+ base/lib_slkcolor \
+ base/lib_slkinit \
+ base/lib_slklab \
+ base/lib_slkrefr \
+ base/lib_slkset \
+ base/lib_slktouch \
+ base/lib_touch \
+ base/lib_ungetch \
+ base/lib_vline \
+ base/lib_wattroff \
+ base/lib_wattron \
+ base/lib_winch \
+ base/lib_window \
+ base/memmove \
+ base/nc_panel \
+ base/resizeterm \
+ base/safe_sprintf \
+ base/sigaction \
+ base/tries \
+ base/version \
+ base/vsscanf \
+ base/wresize \
codes \
comp_captab \
- comp_error \
- comp_expand \
- comp_hash \
- comp_parse \
- comp_scan \
- define_key \
expanded \
fallback \
- hardscroll \
- hashmap \
- keyok \
- lib_acs \
- lib_adabind \
- lib_addch \
- lib_addstr \
- lib_baudrate \
- lib_beep \
- lib_bkgd \
- lib_box \
- lib_chgat \
- lib_clear \
- lib_clearok \
- lib_clrbot \
- lib_clreol \
- lib_color \
- lib_cur_term \
- lib_data \
- lib_delch \
- lib_delwin \
- lib_dft_fgbg \
- lib_doupdate \
- lib_echo \
- lib_endwin \
- lib_erase \
- lib_flash \
- lib_freeall \
lib_gen \
- lib_getch \
- lib_getstr \
- lib_hline \
- lib_immedok \
- lib_inchstr \
- lib_initscr \
- lib_insch \
- lib_insdel \
- lib_insstr \
- lib_instr \
- lib_isendwin \
- lib_kernel \
lib_keyname \
- lib_leaveok \
- lib_longname \
- lib_mouse \
- lib_move \
- lib_mvcur \
- lib_mvwin \
- lib_napms \
- lib_newterm \
- lib_newwin \
- lib_nl \
- lib_options \
- lib_overlay \
- lib_pad \
- lib_print \
- lib_printw \
- lib_raw \
- lib_redrawln \
- lib_refresh \
- lib_restart \
- lib_scanw \
- lib_screen \
- lib_scroll \
- lib_scrollok \
- lib_scrreg \
- lib_set_term \
- lib_setup \
- lib_slk \
- lib_slkatrof \
- lib_slkatron \
- lib_slkatrset \
- lib_slkattr \
- lib_slkclear \
- lib_slkinit \
- lib_slklab \
- lib_slkrefr \
- lib_slkset \
- lib_slktouch \
- lib_termcap \
- lib_ti \
- lib_touch \
- lib_tparm \
- lib_tputs \
- lib_trace \
- lib_traceatr \
- lib_tracechr \
- lib_tracedmp \
- lib_tracemse \
- lib_tstp \
- lib_twait \
- lib_ungetch \
- lib_vidattr \
- lib_vline \
- lib_wattroff \
- lib_wattron \
- lib_window \
- name_match \
names \
- nc_panel \
- parse_entry \
- read_entry \
- read_termcap \
- resizeterm \
- safe_sprintf \
- softscroll \
- trace_buf \
- tries \
- unctrl \
- wresize \
- write_entry
+ tinfo/access \
+ tinfo/add_tries \
+ tinfo/alloc_entry \
+ tinfo/alloc_ttype \
+ tinfo/captoinfo \
+ tinfo/comp_error \
+ tinfo/comp_expand \
+ tinfo/comp_hash \
+ tinfo/comp_parse \
+ tinfo/comp_scan \
+ tinfo/doalloc \
+ tinfo/free_ttype \
+ tinfo/getenv_num \
+ tinfo/home_terminfo \
+ tinfo/init_keytry \
+ tinfo/lib_acs \
+ tinfo/lib_baudrate \
+ tinfo/lib_cur_term \
+ tinfo/lib_data \
+ tinfo/lib_has_cap \
+ tinfo/lib_kernel \
+ tinfo/lib_longname \
+ tinfo/lib_napms \
+ tinfo/lib_options \
+ tinfo/lib_print \
+ tinfo/lib_raw \
+ tinfo/lib_setup \
+ tinfo/lib_termcap \
+ tinfo/lib_termname \
+ tinfo/lib_ti \
+ tinfo/lib_tparm \
+ tinfo/lib_tputs \
+ tinfo/lib_ttyflags \
+ tinfo/name_match \
+ tinfo/parse_entry \
+ tinfo/read_entry \
+ tinfo/read_termcap \
+ tinfo/setbuf \
+ tinfo/write_entry \
+ trace/lib_trace \
+ trace/lib_traceatr \
+ trace/lib_tracebits \
+ trace/lib_tracechr \
+ trace/lib_tracedmp \
+ trace/lib_tracemse \
+ trace/trace_buf \
+ trace/trace_tries \
+ trace/trace_xnames \
+ tty/hardscroll \
+ tty/hashmap \
+ tty/lib_mvcur \
+ tty/lib_tstp \
+ tty/lib_vidattr \
+ tty/lib_twait \
+ tty/tty_update \
+ unctrl
libmenu-routines = \
- m_adabind \
m_attribs \
m_cursor \
m_driver \
extra-objs = $(tic-objs) $(toe-objs) $(infocmp-objs) $(clear-objs) \
$(tput-objs) $(tset-objs)
-# mvcur won't compile
-test-srcs = tctest thardscroll thashmap \
- blue bs firework firstlast gdc hanoi hashtest knight \
+test-srcs = blue bs cardfile ditto firework firstlast gdc hanoi hashtest knight \
lrtest ncurses newdemo rain tclock testaddch testcurs \
testscanw view worm xmas
-mvcur-objs = mvcur.o dump_entry.o
-tctest-objs = tctest.o
-thardscroll-objs = thardscroll.o
-thashmap-objs = thashmap.o hhardscroll.o
include ../Rules
LDLIBS-tclock = math/libm
-tests: $(test-srcs:%=$(objpfx)%)
-
-$(objpfx)mvcur.d: ncurses/lib_mvcur.c
- $(CC) -M $(CFLAGS) $(CPPFLAGS) -DTRACE -DMAIN $? | \
- sed -e 's/^lib_mvcur.o/mvcur.o/' > $@
-
-$(objpfx)mvcur.o: ncurses/lib_mvcur.c
- $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -DTRACE -DMAIN $?
-
-$(objpfx)tctest.d: ncurses/captoinfo.c
- $(CC) -M $(CFLAGS) $(CPPFLAGS) -DTRACE -DMAIN $? | \
- sed -e 's/^captoinfo.o/tctest.o/' > $@
-
-$(objpfx)tctest.o: ncurses/captoinfo.c
- $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -DTRACE -DMAIN $?
-
-$(objpfx)thardscroll.d: ncurses/hardscroll.c
- $(CC) -M $(CFLAGS) $(CPPFLAGS) -DTRACE -DSCROLLDEBUG $? | \
- sed -e 's/^hardscroll.o/thardscroll.o/' > $@
-
-$(objpfx)thardscroll.o: ncurses/hardscroll.c
- $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -DTRACE -DSCROLLDEBUG $?
-
-$(objpfx)thashmap.d: ncurses/hashmap.c
- $(CC) -M $(CFLAGS) $(CPPFLAGS) -DTRACE -DHASHDEBUG $? | \
- sed -e 's/^hashmap.o/thashmap.o/' > $@
-
-$(objpfx)thashmap.o: ncurses/hashmap.c
- $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -DTRACE -DHASHDEBUG $?
-
-$(objpfx)hhardscroll.o: ncurses/hardscroll.c
- $(CC) -c -o $@ $(CFLAGS) $(CPPFLAGS) -DTRACE -DHASHDEBUG $?
-
-$(objpfx)mvcur: $(addprefix $(objpfx),$(mvcur-objs))
-$(objpfx)tctest: $(addprefix $(objpfx),$(tctest-objs))
-$(objpfx)thardscroll: $(addprefix $(objpfx),$(thardscroll-objs))
-$(objpfx)thashmap: $(addprefix $(objpfx),$(thashmap-objs))
+tests: $(test-srcs:%=$(objpfx)%)
$(objpfx)clear: $(addprefix $(objpfx),$(clear-objs))
$(objpfx)infocmp: $(addprefix $(objpfx),$(infocmp-objs))
echo installing $$f; \
$(INSTALL_DATA) $$f $(inst_tabsetdir); \
done
-
+
ifeq (no,$(cross-compiling))
subdir_install: $(inst_terminfodir)/v/vt100
-# $Id: Makefile.in,v 1.15 1998/02/11 12:13:39 tom Exp $
+# $Id: Makefile.in,v 1.18 1998/08/22 23:45:00 tom Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
libdir = @libdir@
mandir = @mandir@
-DIRS_TO_MAKE = @DIRS_TO_MAKE@
+INSTALL = @INSTALL@
+INSTALL_DATA = @INSTALL_DATA@
+
+DIRS_TO_MAKE = @DIRS_TO_MAKE@
all :: $(DIRS_TO_MAKE)
@ echo ' man directory: '$(mandir)
@ echo ' terminfo directory: '$(datadir)/terminfo
@ echo ''
- @ if test "$(includedir)" != "$(prefix)/include" ; then \
- echo '** Include-directory is not in a standard location'; fi
+ @ test "$(includedir)" = "$(prefix)/include" || \
+ echo '** Include-directory is not in a standard location'
+ @ test ! -f $(includedir)/termcap.h || \
+ fgrep NCURSES_VERSION $(includedir)/termcap.h >/dev/null || \
+ echo '** Will overwrite non-ncurses termcap.h'
+ @ test ! -f $(includedir)/curses.h || \
+ fgrep NCURSES_VERSION $(includedir)/curses.h >/dev/null || \
+ echo '** Will overwrite non-ncurses curses.h'
# Put the common rules here so that we can easily construct the list of
# directories to visit.
--- /dev/null
+################################################################################
+# Wrapper Makefile for ncurses library under OS/2.
+################################################################################
+# $Id: Makefile.os2,v 1.8 1998/12/13 02:23:13 tom Exp $
+#
+# Author: Juan Jose Garcia Ripoll <worm@arrakis.es>.
+# Webpage: http://www.arrakis.es/~worm/
+################################################################################
+#
+# Notes (from I Zakharevich)
+# ~~~~~~~~~~~~~~~~~~~~~~~~~~
+# I could build the library with the following sequence of commands:
+#
+# touch Makefile
+# make -f Makefile.os2 config
+# make -f Makefile.os2 CC=gcc HOSTCC=gcc
+# make -f Makefile.os2 CC=gcc HOSTCC=gcc
+#
+# Ignoring the following errors:
+# Invalid configuration `os2'...
+# ... ac_maketemp="make": not found
+# ... syntax error: `done' unexpected
+# No rule to make target `lib/ncurses4.dll'
+#
+# You may need to run
+#
+# rm make.defs
+# make -f Makefile.os2 make.defs
+#
+# if the build of misc/panel.def fails.
+#
+# If you do not have perl, the configuration will fail. Use autoconf to
+# generate the EMX-specific configure script (see README.emx), and run the
+# configure script to generate the makefiles. Then, run
+#
+# make -f Makefile.os2 make.dlls
+#
+# Notes (from J J G Ripoll)
+# ~~~~~~~~~~~~~~~~~~~~~~~~~
+# The `make.defs' rule creates the new '.def' files and outputs a diagnostic
+# about symbols that disappear from one release to the other, as well as
+# checks about the new '.def' consistency. If there were no problems, the
+# maintainer is free to replace the `.ref' files with the newer ones using the
+# `save.defs' rule. So, the only tough work is ensuring that the symbols that
+# disappear are not essential.
+#
+# I first thought about killing '_nc_*' symbols, but it seems that some of
+# them --_nc_panel_hook, _nc_ada*, etc-- are needed outside ncurses.dll.
+# However, the whole size of the export table will not be larger than 1k or
+# so.
+#
+# [installation]
+#
+# The way things are handled in misc/Makefile is not well suited for OS/2,
+# where only emx.src is needed. Thus, I've written a few wrapper rules in
+# Makefile.os2 that handle installation/deinstallation.
+#
+# [distribution]
+#
+# There's also a new rule that configures and builds a sort of binary
+# distribution, much like the one I prepared for 1.9.9e. It's `os2dist'.
+#
+################################################################################
+
+all :: config
+
+# This is for configuring
+
+# What is a useful value for this?
+CONFIG_OPTS = --enable-termcap
+WWWGET = lynx -source
+MV_F = mv -f
+DLL_LN_OPTS = -Zcrtdll -Zdll -Zomf -Zmt
+
+config: config.cache
+
+config.cache: configure.cmd configure
+ -$(MV_F) $@ $@.ref
+ configure.cmd $(CONFIG_OPTS)
+
+configure.cmd: configure convert_configure.pl
+ perl convert_configure.pl configure > $@
+
+convert_configure.pl:
+ $(WWWGET) ftp://ftp.math.ohio-state.edu/pub/users/ilya/os2/$@ > $@
+
+install ::
+ echo ***
+ echo *** Do not use this command. Use install.os2 instead.
+ echo ***
+ exit 2
+
+install.os2 : install.emxdata install.libs install.progs
+
+include ./Makefile
+
+all :: make.dlls
+
+#
+# DLLs and that stuff
+#
+
+LIBRARIES = ncurses form menu panel
+
+DLL_TAG = $(NCURSES_MAJOR)
+LIB_TAG = _s
+
+DLL_ROOTS = $(addsuffix $(DLL_TAG), $(LIBRARIES))
+DLLS = $(addsuffix .dll, $(addprefix ./lib/, $(DLL_ROOTS)))
+
+LIB_ROOTS = $(addsuffix $(LIB_TAG), $(LIBRARIES))
+LIBS = $(addsuffix .lib, $(addprefix ./lib/, $(LIB_ROOTS)))
+
+LIBS_AOUT = $(addsuffix .a, $(addprefix ./lib/, $(LIB_ROOTS)))
+
+DEFS = $(addsuffix .def, $(addprefix ./misc/, $(LIBRARIES)))
+
+DLL_SIGNATURE = NCurses-$(NCURSES_MAJOR)-$(NCURSES_MINOR)-$(NCURSES_PATCH)
+
+./lib/%$(LIB_TAG).lib : ./misc/%.def
+ emximp -o $@ $<
+
+./lib/%$(LIB_TAG).a : ./misc/%.def
+ emximp -o $@ $<
+
+./lib/%$(DLL_TAG).dll : ./lib/%.a
+ emxomf -o ./lib/$*$(DLL_TAG).lib $<
+ if [ "$*" = "ncurses" ]; then \
+ gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \
+ ./misc/$*.def -o $@; \
+ else \
+ gcc $(LDFLAGS) $(DLL_LN_OPTS) ./lib/$*$(DLL_TAG).lib \
+ ./lib/ncurses$(LIB_TAG).lib ./misc/$*.def -o $@; \
+ fi
+ -rm -f ./lib/$*$(DLL_TAG).lib
+
+make.dlls : $(DEFS) $(LIBS) $(DLLS) $(LIBS_AOUT)
+
+$(DEFS) : make.defs
+
+LIBDIR = $(INSTALL_PREFIX)$(libdir)
+$(LIBDIR) :
+ mkdir -p $@
+
+install.libs :: $(LIBS) $(DLLS) $(LIBDIR)
+ @for i in $(DLL_ROOTS); do \
+ echo installing ./lib/$$i.dll as $(LIBDIR)/$$i.dll; \
+ $(INSTALL_DATA) ./lib/$$i.dll $(LIBDIR)/$$i.dll; done
+ @for i in $(LIB_ROOTS); do \
+ echo installing ./lib/$$i.lib as $(LIBDIR)/$$i.lib; \
+ $(INSTALL_DATA) ./lib/$$i.lib $(LIBDIR)/$$i.lib; done
+
+uninstall.libs ::
+ -@for i in $(DLL_ROOTS); do \
+ echo uninstalling $(LIBDIR)/$$i.dll; \
+ rm -f $(LIBDIR)/$$i.dll; done
+ -@for i in $(LIB_ROOTS); do \
+ echo uninstalling $(LIBDIR)/$$i.lib; \
+ rm -f $(LIBDIR)/$$i.lib; done
+
+make.defs :
+ for i in $(LIBRARIES); do \
+ echo LIBRARY $${i}$(DLL_TAG) INITINSTANCE TERMINSTANCE > ./misc/$$i.def; \
+ echo DESCRIPTION \"$(DLL_SIGNATURE), module $$i\" >> ./misc/$$i.def; \
+ echo CODE LOADONCALL >> ./misc/$$i.def; \
+ echo DATA LOADONCALL NONSHARED MULTIPLE >> ./misc/$$i.def; \
+ echo EXPORTS >> ./misc/$$i.def; \
+ echo Creating $$i.def; \
+ (cmd /C ".\\misc\\makedef.cmd ./lib/$$i.a ./misc/$$i.ref >> ./misc/$$i.def" \
+ && cmd /C ".\\misc\\chkdef.cmd ./misc/$$i.def") \
+ || exit 1; \
+ done
+ touch make.defs
+
+save.defs :
+ for i in $(LIBRARIES); do \
+ test -f ./misc/$$i.def && cp ./misc/$$i.def ./misc/$$i.ref; \
+ done
+
+clean \
+os2clean ::
+ -rm -f $(DLLS) $(LIBS)
+
+realclean ::
+ -rm -f $(addprefix ./misc/, $(addsuffix .def, $(LIBRARIES)))
+
+#
+# This is a simplified version of misc/Makefile
+#
+
+TICDIR = $(INSTALL_PREFIX)$(datadir)/terminfo
+TABSETDIR = $(INSTALL_PREFIX)$(datadir)/tabset
+
+$(TICDIR) :
+ mkdir -p $@
+
+install \
+install.emxdata :: $(TICDIR)
+ -@rm -fr $(TICDIR)/*
+ echo Building terminfo database, please wait...
+ set TERMINFO=$(TICDIR); ./progs/tic ./misc/emx.src
+ echo Installing the terminfo cleaner and the sources...
+ cp ./misc/emx.src ./misc/cleantic.cmd $(TICDIR)
+ ./misc/cleantic.cmd $(TICDIR)
+
+uninstall \
+uninstall.emxdata ::
+ -cd $(TICDIR) && rm -rf *
+ -cd $(TABSETDIR) && rm -rf *
+
+#
+# This is for preparing binary distributions
+#
+
+OS2NAME=ncurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-emx
+
+#
+# FIXME: this assumes that we can rerun the configure script, changing only
+# the install-prefix. That means we cannot provide "interesting" options
+# when building.
+#
+os2dist :
+ $(MAKE) -f Makefile.os2 os2clean
+ ./configure --without-debug --with-install-prefix=`pwd|sed -e 's@^.:@@'`/$(OS2NAME)
+ $(MAKE) -f Makefile.os2 $(CF_MFLAGS) install.os2
+ -rm -f $(OS2NAME).zip
+ echo NCurses-$(NCURSES_MAJOR).$(NCURSES_MINOR)-$(NCURSES_PATCH) for emx > $(OS2NAME)/FILE_ID.DIZ
+ echo Binary release. >> $(OS2NAME)/FILE_ID.DIZ
+ zip -r $(OS2NAME).zip ./$(OS2NAME)
+
+clean \
+os2clean ::
+ -rm -rf $(OS2NAME)
+ -rm -f $(OS2NAME).zip
+
--- $Id: NEWS,v 1.316 1998/02/28 23:10:26 tom Exp $
+-- $Id: NEWS,v 1.504 1999/10/24 00:31:05 tom Exp $
This is a log of changes that ncurses has gone through since Zeyd started
working with Pavel Curtis' original work, pcurses, in 1992.
Changes through 1.9.9e are recorded by Zeyd M. Ben-Halim.
Changes since 1.9.9e are recorded by Thomas Dickey.
+19991023 5.0 release for upload to ftp.gnu.org
+ + effective with release of 5.0, change NCURSES_VERSION_PATCH to
+ 4-digit year.
+ + add function curses_version(), to return ncurses library version
+ (request by Bob van der Poel).
+ + remove rmam, smam from cygwin terminfo entry.
+ + modify FreeBSD cons25 terminfo entry to add cnorm and cvvis, as well
+ as update ncv to indicate that 'dim' conflicts with colors.
+ + modify configure script to use symbolic links for FreeBSD shared
+ libraries by default.
+ + correct ranf() function in rain and worm programs to ensure it does
+ not return 1.0
+ + hide the cursor in hanoi.c if it is running automatically.
+ + amend lrtest.c to account for optimizations that exploit margin
+ wrapping.
+ + add a simple terminfo demo, dots.c
+ + modify SIGINT/SIGQUIT handler to set a flag used in _nc_outch() to
+ tell it to use write() rather than putc(), since the latter is not
+ safe in a signal handler according to POSIX.
+ + add/use internal macros _nc_flush() and NC_OUTPUT to hide details
+ of output-file pointer in ncurses library.
+ + uncomment CC_SHARED_OPTS (see 971115), since they are needed for SCO
+ OpenServer.
+ + correct CC_SHARED_OPTS for building shared libraries for SCO
+ OpenServer.
+ + remove usleep() from alternatives in napms(), since it may interact
+ with alarm(), causing a process to be interrupted by SIGALRM (with
+ advice from Bela Lubkin).
+ + modify terminal_interface-curses-forms.ads.m4 to build/work with
+ GNAT 3.10 (patch by Juergen Pfeifer).
+ + remove part of CF_GPP_LIBRARY configure-script macro, which did not
+ work with gcc 2.7.2.3
+ + minor fix to test/tclock.c to avoid beeping more than once per second
+ + add 's' and ' ' decoding to test/rain.c
+
+991016 pre-release
+ + corrected BeOS code for lib_twait.c, making nodelay() function work.
+
+991009 pre-release
+ + correct ncurses' value for cursor-column in PutCharLR(), which was
+ off-by-one in one case (patch by Ilya Zakharevich).
+ + fix some minor errors in position_check() debugging code, found while
+ using this to validate the PutCharLR() patch.
+ + modify firework, lrtest, worm examples to be resizable, and to
+ recognize 'q' for quit, 's' for single-step and ' ' for resume.
+ + restore reverted change to terminal_interface-curses-forms.ads.m4,
+ add a note on building with gnat 3.10p to Ada95/TODO.
+ + add a copy of the standalone configure script for the test-directory
+ to simplify testing on SCO and Solaris.
+
+991002 pre-release
+ + minor fixes for _nc_msec_cost(), color_content(), pair_content(),
+ _nc_freewin(), ClrBottom() and onscreen_mvcur() (analysis by Philippe
+ Blain, comments by Alexander Lukyanov).
+ + simplify definition of PANEL and eliminate internal functions
+ _nc_calculate_obscure(), _nc_free_obscure() and _nc_override(),
+ (patch by Juergen Pfeifer, based on analysis by Philippe Blain
+ <bledp@voila.fr>)).
+ + change renaming of dft_fgbg.3x to use_default_colors.3ncurses in
+ man_db.renames, since Debian is not concerned with 14-character
+ filename limitation (from Debian bug report by Josip Rodin
+ <joy@cibalia.gkvk.hr>).
+ + corrected scoansi terminfo entry by testing with scoterm and console.
+ + revert change from 990614 to terminal_interface-curses-forms.ads.m4,
+ since this does not work for gnat 3.10p
+ + modify tclock example to be resizable (if ncurses' sigwinch handler
+ is used), and in color.
+ + use $(CC) rather than 'gcc' in MK_SHARED_LIB symbols, used for Linux
+ shared library rules.
+
+990925 pre-release
+ + add newer NetBSD console terminfo entries
+ + add amiga-8bit terminfo entry (from Henning 'Faroul' Peters
+ <Faroul@beyond.kn-bremen.de>)
+ + remove -lcurses -ltermcap from configure script's check for the gpm
+ library, since they are not really necessary (a properly configured
+ gpm library has no dependency on any curses library), and if the
+ curses library is not installed, this would cause the test to fail.
+ + modify tic's -C option so that terminfo "use=" clauses are translated
+ to "tc=" clauses even when running it as captoinfo.
+ + modify CF_STDCPP_LIBRARY configure macro to perform its check only
+ for GNU C++, since that library conflicts with SGI's libC on IRIX-6.2
+ + modify CF_SHARED_OPTS configure macro to support build on NetBSD with
+ ELF libraries (patch by Bernd Ernesti <bernd@arresum.inka.de>).
+ + correct a problem in libpanel, where the _nc_top_panel variable was
+ not set properly when bottom_panel() is called to hide a panel which
+ is the only one on the stack (report/analysis by Michael Andres
+ <ma@suse.de>, patch by Juergen Pfeifer).
+
+990918 pre-release
+ + add acsc string to HP 70092 terminfo entry (patch by Joerg Wunsch
+ <j@interface-business.de>).
+ + add top-level uninstall.data and uninstall.man makefile rules.
+ + correct logic of CF_LINK_FUNCS configure script, from BeOS changes so
+ that hard-links work on Unix again.
+ + change default value of cf_cv_builtin_bool to 1 as suggested by
+ Jeremy Buhler, making it less likely that a conflicting declaration
+ of bool will be seen when compiling with C++.
+
+990911 pre-release
+ + improved configure checks for builtin.h
+ + minor changes to C++ binding (remove static initializations, and make
+ configure-test for parameter initializations) for features not
+ allowed by vendor's C++ compilers (reported by Martin Mokrejs, this
+ applies to SGI, though I found SCO has the same characteristics).
+ + corrected quoting of ETIP_xxx definitions which support old versions
+ of g++, e.g., those using -lg++
+ + remove 'L' code from safe_sprintf.c, since 'long double' is not
+ widely portable. safe_sprintf.c is experimental, however, and
+ exists mainly as a fallback for systems without snprintf (reported
+ by Martin Mokrejs <mmokrejs@natur.cuni.cz>, for IRIX 6.2)
+ + modify definition of _nc_tinfo_fkeys in broken-linker configuration
+ so that it is not unnecessarily made extern (Jeffrey C Honig).
+
+990904 pre-release
+ + move definition for builtin.h in configure tests to specific check
+ for libg++, since qt uses the same filename incompatibly.
+ + correct logic of lib_termcap.c tgetstr function, which did not copy
+ the result to the buffer parameter. Testing shows Solaris does
+ update this, though of course tgetent's buffer is untouched (from
+ mpc.lists.freebsd.current newsgroup item by Peter Edwards
+ <peter.edwards@ireland.com>).
+ + corrected beterm terminfo entry, which lists some capabilities which
+ are not actually provided by the BeOS Terminal.
+ + add special logic to replace select() calls on BeOS, whose select()
+ function works only for sockets.
+ + correct missing escape in mkterm.h.awk.in, which caused part
+ of the copyright noticed to be omitted (reported by Peter
+ Wemm <peter@netplex.com.au>).
+ > several small changes to make the c++ binding and demo work on OS/2
+ EMX (related to a clean reinstall of EMX):
+ + correct library-prefix for c++ binding; none is needed.
+ + add $x suffix to make_hash and make_keys so 'make distclean' works.
+ + correct missing $x suffix for tack, c++ demo executables.
+ + split CF_CXX_LIBRARY into CF_GPP_LIBRARY (for -lg++) and
+ CF_STDCPP_LIBRARY (for -lstdc++)
+
+990828 pre-release
+ + add cygwin terminfo entry -TD
+ + modify CF_PROG_EXT configure macro to set .exe extension for cygwin.
+ + add configure option --without-cxx-binding, modifying the existing
+ --without-cxx option to check only for the C++ compiler
+ characteristics. Whether or not the C++ binding is needed, the
+ configure script checks for the size/type of bool, to make ncurses
+ match. Otherwise C++ applications cannot use ncurses.
+
+990821 pre-release
+ + updated configure macros CF_MAKEFLAGS, CF_CHECK_ERRNO
+ + minor corrections to beterm terminfo entry.
+ + modify lib_setup.c to reject values of $TERM which have a '/' in them.
+ + add ifdef's to guard against CS5, CS6, CS7, CS8 being zero, as more
+ than one is on BeOS. That would break a switch statement.
+ + add configure macro CF_LINK_FUNCS to detect and work around BeOS's
+ nonfunctional link().
+ + improved configure macros CF_BOOL_DECL and CF_BOOL_SIZE to detect
+ BeOS's bool, which is declared as an unsigned char.
+
+990814 pre-release
+ + add ms-vt100 terminfo entry -TD
+ + minor fixes for misc/emx.src, based on testing with tack.
+ + minor fix for test/ncurses.c, test 'a', in case ncv is not set.
+
+990731 pre-release
+ + minor correction for 'screen' terminfo entry.
+ + clarify description of errret values for setupterm in manpage.
+ + modify tput to allow it to emit capabilities for hardcopy terminals
+ (patch by Goran Uddeborg <goeran@uddeborg.pp.se>).
+ + modify the 'o' (panel) test in ncurses.c to show the panels in color
+ or at least in bold, to test Juergen's change to wrefresh().
+ > patches by Juergen Pfeifer:
+ + Fixes a problem using wbkgdset() with panels. It has actually
+ nothing to with panels but is a problem in the implementation of
+ wrefresh(). Whenever a window changes its background attribute to
+ something different than newscr's background attribute, the whole
+ window is touched to force a copy to newscr. This is an unwanted
+ side-effect of wrefresh() and it is actually not necessary. A changed
+ background attribute affects only further outputs of background it
+ doesn't mean anything to the current content of the window. So there
+ is no need to force a copy. (reported by Frank Heckenbach
+ <frank@g-n-u.de>).
+ + an upward compatible enhancement of the NCursesPad class in the C++
+ binding. It allows one to add a "viewport" window to a pad and then
+ to use panning to view the pad through the viewport window.
+
+990724 pre-release
+ + suppress a call to def_prog_mode() in the SIGTSTP handler if the
+ signal was received while not in curses mode, e.g., endwin() was
+ called in preparation for spawning a shell command (reported by Frank
+ Heckenbach <frank@g-n-u.de>)
+ + corrected/enhanced xterm-r5, xterm+sl, xterm+sl-twm terminfo entries.
+ + change test for xterm mouse capability: it now checks only if the
+ user's $DISPLAY variable is set in conjunction with the kmous
+ capability being present in the terminfo. Before, it checked if any
+ of "xterm", "rxvt" or "kterm" were substrings of the terminal name.
+ However, some emulators which are incompatible with xterm in other
+ ways do support the xterm mouse capability.
+ + reviewed and made minor changes in ncurses to quiet g++ warnings
+ about shadowed or uninitialized variables. g++ incorrectly warns
+ about uninitialized variables because it does not take into account
+ short-circuit expression evaluation.
+ + change ncurses 'b' test to start in color pair 0 and to show in the
+ right margin those attributes which are suppressed by no_color_video,
+ i.e., "(NCV)".
+ + modify ifdef's in curses.h so that __attribute__ is not redefined
+ when compiling with g++, but instead disabled the macros derived for
+ __attribute__ since g++ does not consistently recognize the same
+ keywords as gcc (reported by Stephan K Zitz <zitz@erf.net>).
+ + update dependencies for term.h in ncurses/modules (reported by
+ Ilya Zakharevich).
+
+990710 pre-release
+ + modify the form demo in ncurses.c to illustrate how to manipulate the
+ field appearance, e.g, for highlighting or translating the field
+ contents.
+ + correct logic in write_entry from split-out of home_terminfo in
+ 980919, which prevented update of $HOME/.terminfo (reported by Philip
+ Spencer <pspencer@fields.utoronto.ca>).
+
+990703 pre-release
+ + modify linux terminfo description to make use of kernel 2.2.x mods
+ that support cursor style, e.g., to implement cvvis (patch by Frank
+ Heckenbach <frank@g-n-u.de>)
+ + add special-case in setupterm to retain previously-saved terminal
+ settings in cur_term, which happens when curses and termcap calls are
+ mixed (from report by Bjorn Helgaas <helgaas@dhc.net>).
+ + suppress initialization of key-tries in _nc_keypad() if we are only
+ disabling keypad mode, e.g., in endwin() called when keypad() was not.
+ + modify the Ada95 makefile to ensure that always the Ada files from
+ the development tree are used for building and not the eventually
+ installed ones (patch by Juergen Pfeifer).
+
+990626 pre-release
+ + use TTY definition in tack/sysdep.c rather than struct termios
+ (reported by Philippe De Muyter).
+ + add a fallback for strstr, used in lib_mvcur.c and tack/edit.c,
+ not present on sysV68 (reported by Philippe De Muyter).
+ + correct definition in comp_hash.c to build with configure
+ --with-rcs-ids option.
+
+990619 pre-release
+ + modified ifdef's for sigaction and sigvec to ensure we do not try to
+ handle SIGTSTP if neither is available (from report by Philippe De
+ Muyter).
+ > patch by Philippe De Muyter:
+ + in tic.c, use `unlink' if `remove' is not available.
+ + use only `unsigned' as fallback value for `speed_t'. Some files used
+ `short' instead.
+
+990616 pre-release
+ + fix some compiler warnings in tack.
+ + add a check for predefined bool type in CC, based on report that
+ BeOS predefines a bool type.
+ + correct logic for infocmp -e option (i.e., the configure
+ --with-fallbacks option), which I'd not updated when implementing
+ extended names (cf: 990301). The new implementation adds a -E
+ option to infocmp.
+ > patch by Juergen Pfeifer:
+ + introduce the private type Curses_Bool in the Ada95 binding
+ implementation. This is to clearly represent the use of "bool" also
+ in the binding. It should have no effect on the generated code.
+ + improve the man page for field_buffer() to tell the people, that the
+ whole buffer including leading/trailing spaces is returned. This is
+ a common source of confusion, so it's better to document it clearly.
+
+990614 pre-release
+ > patch by Juergen Pfeifer:
+ + use pragma PreElaborate in several places.
+ + change a few System.Address uses to more specific types.
+ + change interface version-number to 1.0
+ + regenerate Ada95 HTML files.
+
+990612 pre-release
+ + modify lib_endwin.c to avoid calling reset_shell_mode(), return ERR
+ if it appears that curses was never initialized, e.g., by initscr().
+ For instance, this guards against setting the terminal modes to
+ strange values if endwin() is called after setupterm(). In the same
+ context, Solaris curses will dump core.
+ + modify logic that avoids a conflict in lib_vidattr.c between sgr0 and
+ equivalent values in rmso or rmul by ensuring we do not modify the
+ data which would be returned by the terminfo or termcap interfaces
+ (reported by Brad Pepers <brad@linuxcanada.com>, cf: 960706).
+ + add a null-pointer check for SP in lib_vidattr.c to logic that checks
+ for magic cookies.
+ + improve fallback declaration of 'bool' when the --without-cxx option
+ is given, by using a 'char' on i386 and related hosts (from discussion
+ with Alexander Lukyanov).
+
+990605 pre-release
+ + include time.h in lib_napms.c if nanosleep is used (patch by
+ R Lindsay Todd <toddr@rpi.edu>).
+ + add an "#undef bool" to curses.h, in case someone tries to define it,
+ e.g., perl.
+ + add check to tparm to guard against divide by zero (reported by Aaron
+ Campbell <aaron@ug.cs.dal.ca>).
+
+990516 pre-release
+ + minor fix to build tack on CLIX (mismatched const).
+ > patch by Juergen Pfeifer:
+ + change Juergen's old email address with new one in the files where it
+ is referenced. The Ada95 HTML pages are regenerated.
+ + update MANIFEST to list the tack files.
+
+990509 pre-release
+ + minor fixes to make 'tack' build/link on NeXT (reported by Francisco
+ A. Tomei Torres).
+
+990417 pre-release
+ + add 'tack' program (which is GPL'd), updating it to work with the
+ modified TERMTYPE struct and making a fix to support setaf/setab
+ capabilities. Note that the tack program is not part of the
+ ncurses libraries, but an application which can be distributed with
+ ncurses. The configure script will ignore the directory if it is
+ omitted, however.
+ + modify gpm mouse support so that buttons 2 and 3 are used for
+ select/paste only when shift key is pressed, making them available
+ for use by an application (patch by Klaus Weide).
+ + add complete list of function keys to scoansi terminfo entry - TD
+
+990410 pre-release
+ + add a simple test program cardfile.c to illustrate how to read form
+ fields, and showing forms within panels.
+ + change shared-library versioning for the Hurd to be like Linux rather
+ than *BSD (patch by Mark Kettenis <kettenis@wins.uva.nl>).
+ + add linux-lat terminfo entry.
+ + back-out _nc_access check in read_termcap.c (both incorrect and
+ unnecessary, except to guard against a small window where the file's
+ ownership may change).
+
+990403 pre-release
+ + remove conflicting _nc_free_termtype() function from test module
+ lib_freeall.c
+ + use _nc_access check in read_termcap.c for termpaths[] array (noted
+ by Jeremy Buhler, indicating that Alan Cox made a similar patch).
+ > patch by Juergen Pfeifer:
+ + modify menu creation to not inherit status flag from the default menu
+ which says that the associated marker string has been allocated and
+ should be freed (bug reported by Marek Paliwoda" <paliwoda@kki.net.pl>)
+
+990327 pre-release (alpha.gnu.org:/gnu/ncurses-5.0-beta1.tar.gz)
+ + minor fixes to xterm-xfree86 terminfo entry - TD.
+ + split up an expression in configure script check for ldconfig to
+ workaround limitation of BSD/OS sh (reported by Jeff Haas
+ <jmh@mail.msen.com>).
+ + correct a typo in man/form_hook.3x (Todd Miller).
+
+990318 pre-release
+ + parenthesize and undef 'index' symbol in c++ binding and demo, to
+ accommodate its definition on NeXT (reported by Francisco A. Tomei
+ Torres).
+ + add sigismember() to base/sigaction.c compatibility to link on NeXT
+ (reported by Francisco A. Tomei Torres).
+ + further refinements to inequality in hashmap.c to cover a case with
+ ^U in nvi (patch by Alexander Lukyanov).
+
+990316 pre-release
+ + add fallback definition for getcwd, to link on NeXT.
+ + add a copy of cur_term to tic.c to make it link properly on NeXT
+ (reported by Francisco A. Tomei Torres).
+ + change inequality in hashmap.c which checks the distance traveled by
+ a chunk so that ^D command in nvi (scrolls 1/2 screen) will use
+ scrolling logic (patch by Alexander Lukyanov, reported by Jeffrey
+ C Honig).
+
+990314 pre-release
+ + modify lib_color.c to handle a special case where the curscr
+ attributes have been made obsolete (patch by Alexander Lukyanov).
+ + update BSD/OS console terminfo entries to use klone+sgr and
+ klone+color (patch by Jeffrey C Honig).
+ + update glibc addon configure script for extended capabilities.
+ + correct a couple of warnings in the --enable-const configuration.
+ + make comp_hash build properly with _nc_strdup(), on NeXT (reported by
+ Francisco A. Tomei Torres <francisco.tomei@cwix.com>).
+
+990313 pre-release
+ + correct typos in linux-c initc string - TD
+ + add 'crt' terminfo entry, update xterm-xfree86 entry - TD
+ + remove a spurious argument to tparm() in lib_sklrefr.c (patch by
+ Alexander Lukyanov).
+
+990307 pre-release
+ + back-out change to wgetch because it causes a problem with ^Z
+ handling in lynx (reported by Kim DeVaughn).
+
+990306 pre-release
+ + add -G option to tic and infocmp, to reverse the -g option.
+ + recode functions in name_match.c to avoid use of strncpy, which
+ caused a 4-fold slowdown in tic (cf: 980530).
+ + correct a few warnings about sign-extension in recent changes.
+ > patch by Juergen Pfeifer:
+ + fixes suggested by Jeff Bradbury <jibradbury@lucent.com>:
+ + improved parameter checking in new_fieldtype().
+ + fixed a typo in wgetch() timeout handling.
+ + allow slk_init() to be called per newterm call. The internal SLK
+ state is stored in the SCREEN struct after every newterm() and then
+ reset for the next newterm.
+ + fix the problem that a slk_refresh() refreshes stdscr if the
+ terminal has true SLKs.
+ + update HTML documentation for Ada binding.
+
+990301 pre-release
+ + remove 'bool' casts from definitions of TRUE/FALSE so that statements
+ such as "#if TRUE" work. This was originally done to allow for a C++
+ compiler which would warn of implicit conversions between enum and
+ int, but is not needed for g++ (reported by Kim DeVaughn).
+ + add use_extended_names() function to allow applications to suppress
+ read of the extended capabilities.
+ + add configure option --enable-tcap-names to support logic which
+ allows ncurses' tic to define new (i.e., extended) terminal
+ capabilities. This is activated by the tic -x switch. The infocmp
+ program automatically shows or compares extended capabilities.
+ Note: This changes the Strings and similar arrays in the TERMTYPE
+ struct so that applications which manipulate it must be recompiled.
+ + use macros typeMalloc, typeCalloc and typeRealloc consistently
+ throughout ncurses library.
+ + add _nc_strdup() to doalloc.c.
+ + modify define_key() to allow multiple strings to be bound to the
+ same keycode.
+ + correct logic error in _nc_remove_string, from 990220.
+ > patch by Juergen Pfeifer, for Ada95 binding:
+ + regenerate some of the html documentation
+ + minor cleanup in terminal_interface-curses.adb
+
+990220 pre-release
+ + resolve ambiguity of kend/kll/kslt and khome/kfnd/kich1 strings in
+ xterm and ncsa terminfo entries by removing the unneeded ones. Note
+ that some entries will return kend & khome versus kslt and kfnd, for
+ PC-style keyboards versus strict vt220 compatiblity - TD
+ + add function keybound(), which returns the definition associated with
+ a given keycode.
+ + modify define_key() to undefine the given string when no keycode is
+ given.
+ + modify keyok() so it works properly if there is more than one string
+ defined for a keycode.
+ + add check to tic to warn about terminfo descriptions that contain
+ more than one key assigned to the same string. This is shown only if
+ the verbose (-v) option is given. Moved related logic (tic -v) from
+ comp_parse.c into the tic program.
+ + add/use _nc_trace_tries() to show the function keys that will be
+ recognized.
+ + rename init_acs to _nc_init_acs (request by Alexander Lukyanov).
+ > patch by Juergen Pfeifer, for Ada95 binding:
+ + remove all the *_adabind.c from ncurses, menu and form projects.
+ Those little helper routines have all been implemented in Ada and are
+ no longer required.
+ + The option handling routines in menu and form have been made more
+ save. They now make sure that the unused bits in options are always
+ zero.
+ + modify configuration scripts to
+ + use gnatmake as default compiler name. This is a safer choice than
+ gcc, because some GNAT implementations use other names for the
+ compilerdriver to avoid conflicts.
+ + use new default installation locations for the Ada files according
+ to the proposed GNU Ada filesystem standard (for Linux).
+ + simplify the Makefiles for the Ada binding
+ + rename ada_include directory to src.
+
+990213
+ + enable sigwinch handler by default.
+ + disable logic that allows setbuf to be turned off/on, because some
+ implementations will overrun the buffer after it has been disabled
+ once.
+
+990206
+ + suppress sc/rc capabilities from terminal description if they appear
+ in smcup/rmcup. This affects only scrolling optimization, to fix a
+ problem reported by several people with xterm's alternate screen,
+ though the problem is more general.
+ > patch by Juergen Pfeifer, for Ada95 binding:
+ + removed all pragma Preelaborate() stuff, because the just released
+ gnat-3.11p complains on some constructs.
+ + fixed some upper/lower case notations because gnat-3.11p found
+ inconsistent use.
+ + used a new method to generate the HTML documentation of the Ada95
+ binding. This invalidates nearly the whole ./Ada95/html subtree.
+ Nearly all current files in this subtree are removed
+
+990130
+ + cache last result from _nc_baudrate, for performance (suggested by
+ Alexander Lukyanov).
+ + modify ClrUpdate() function to workaround a problem in nvi, which
+ uses redrawwin in SIGTSTP handling. Jeffrey C Honig reported that
+ ncurses repainted the screen with nulls before resuming normal
+ operation (patch by Alexander Lukyanov).
+ + generalize is_xterm() function a little by letting xterm/rxvt/kterm
+ be any substring rather than the prefix.
+ + modify lib_data.c to initialize SP. Some linkers, e.g., IBM's, will
+ not link a module if the only symbols exported from the module are
+ uninitialized ones (patch by Ilya Zakharevich, who says that he has
+ seen messages claiming this behaviour conforms to the standard.)
+ + move call on _nc_signal_handler past _nc_initscr, to avoid a small
+ window where Nttyb hasn't yet been filled (reported by Klaus Weide).
+ + modify lib_tstp.c to block SIGTTOU when handling SIGTSTP, fixes a
+ problem where ncurses applications which were run via a shell script
+ would hang when given a ^Z. Also, check if the terminal's process
+ group is consistent, i.e., a shell has not taken ownership of it,
+ before deciding to save the current terminal settings in the SIGTSTP
+ handler (patch by Klaus Weide).
+ + correct spelling of ACS_ names in curs_border.3x (reported by Bob van
+ der Poel <bvdpoel@kootenay.com>).
+ + correct a couple of typos in the macros supporting the configure
+ --with-shlib-version option.
+
+990123
+ + modify fty_regex.c to compile on HAVE_REGEXPR_H_FUNCS machine (patch
+ by Kimio Ishii <ishii@csl.sony.co.jp>).
+ + rename BSDI console terminfo entries: bsdos to bsdos-pc-nobold, and
+ bsdos-bold to bsdos-pc (patch by Jeffrey C Honig).
+ + modify tput to accept termcap names as an alternative to terminfo
+ names (patch by Jeffrey C Honig).
+ + correct a typo in term.7 (Todd Miller).
+ + add configure --with-shlib-version option to allow installing shared
+ libraries named according to release or ABI versions. This
+ parameterizes some existing logic in the configure script, and is
+ intended for compatiblity upgrades on Digital Unix, which used
+ versioned libraries in ncurses 4.2, but no longer does (cf: 980425).
+ + resync configure script against autoconf 2.13 + patches
+ + minor improvements for teraterm terminfo entry based on the program's
+ source distribution.
+
+990116
+ + change default for configure --enable-big-core to assume machines do
+ have enough memory to resolve terminfo.src in-memory.
+ + correct name of ncurses library in TEST_ARGS when configuring with
+ debug library.
+ + minor fixes to compile ncurses library with broken-linker with g++.
+ + add --enable-broken-linker configure option, default to environment
+ variable $BROKEN_LINKER (request by Jeffrey C Honig).
+ + change key_names[] array to static since it is not part of the curses
+ interface (reported by Jeffrey C Honig <jch@bsdi.com>).
+
+990110
+ + add Tera Term terminfo entry - TD
+
+990109
+ + reviewed/corrected macros in curses.h as per XSI document.
+ + provide support for termcap PC variable by copying it from terminfo
+ data and using it as the padding character in tputs (reported by
+ Alexander Lukyanov).
+ + corrected iris-ansi and iris-ansi-ap terminfo entries for kent and
+ kf9-kf12 capabilities, as well as adding kcbt.
+ + document the mouse handling mechanism in menu_driver and make a small
+ change in menu_driver's return codes to provide more consistency
+ (patch by Juergen Pfeifer).
+ + add fallback definition for NCURSES_CONST to termcap.h.in (reported
+ by Uchiyama Yasushi <uch@nop.or.jp>).
+ + move lib_restart.c to ncurses/base, since it uses curses functions
+ directly, and therefore cannot be used in libtinfo.so
+ + rename micro_char_size to micro_col_size, adding #define to retain
+ old name.
+ + add set_a_attributes and set_pglen_inch to terminfo structure, as per
+ XSI and Solaris 2.5.
+ + minor makefile files to build ncurses test_progs
+ + update html files in misc directory to reflect changes since 4.2
+
+990102
+ + disable scroll hints when hashmap is enabled (patch by Alexander
+ Lukyanov).
+ + move logic for tic's verify of -e option versus -I and -C so that the
+ terminfo data is not processed if we cannot handle -e (reported by
+ Steven Schwartz <steves@unitrends.com>.
+ + add test-driver traces to terminfo and termcap functions.
+ + provide support for termcap ospeed variable by copying it from the
+ internal cur_term member, and using ospeed as the baudrate reference
+ for the delay_output and tputs functions. If an application does not
+ set ospeed, the library behaves as before, except that _nc_timed_wait
+ is no longer used, or needed, since ospeed always has a value. But
+ the application can modify ospeed to adjust the output of padding
+ characters (from a bug report for screen 3.7.6 and email from Michael
+ Schroeder <Michael.Schroeder@informatik.uni-erlangen.de>).
+ + removed some unused ifdef's as part of Alexander's restructuring.
+ + reviewed/updated curses.h, term.h against X/Open Curses Issue 4
+ Version 2. This includes making some parameters NCURSES_CONST
+ rather than const, e.g., in termcap.h.
+ + change linux terminfo entry to use ncv#2, since underline does not
+ work with color
+
+981226
+ + miscellaneous corrections for curses.h to match XSI.
+ + change --enable-no-padding configure option to be normally enabled.
+ + add section to ncurses manpage for environment variables.
+ + investigated Debian bug report that pertains to screen 3.7.4/3.7.6
+ changes, found no sign of problems on Linux (or on SunOS, Solaris)
+ running screen built with ncurses.
+ + check if tmp_fp is opened in tic.c before closing it (patch by Pavel
+ Roskin <pavel_roskin@geocities.com>).
+ + correct several font specification typos in man-pages.
+
+981220
+ + correct default value for BUILD_CC (reported by Larry Virden).
+
+981219
+ + modify _nc_set_writedir() to set a flag in _nc_tic_dir() to prevent
+ it from changing the terminfo directory after chdir'ing to it.
+ Otherwise, a relative path in $TERMINFO would confuse tic (from a
+ Debian bug report).
+ + correct/update ncsa terminfo entry (report by Larry Virden).
+ + update xterm-xfree86 terminfo to current (patch 90), smcur/rmcur changes
+ + add Mathew Vernon's mach console entries to terminfo.src
+ + more changes, moving functions, as part of Alexander's restructuring.
+ + modify configure script for GNU/Hurd share-library support, introduce
+ BUILD_CC variable for cross compiling (patch by Uchiyama Yasushi
+ <uch@nop.or.jp>)
+
+981212
+ + add environment variable NCURSES_NO_SETBUF to allow disabling the
+ setbuf feature, for testing purposes.
+ + correct ifdef's for termcap.h versus term.h that suppress redundant
+ declarations of prototypes (reported by H.J.Lu).
+ + modify Makefile.os2 to add linker flags which allow multiple copies
+ of an application to coexist (reported by Ilya Zakharevich).
+ + update Makefile.glibc and associated configure script so that ncurses
+ builds as a glibc add-on with the new directory configuration
+ (reported by H.J.Lu).
+
+981205
+ + modify gen_reps() function in gen.c to work properly on SunOS
+ (sparc), which is a left-to-right architecture.
+ + modify relative_move and tputs to avoid an interaction with the
+ BSD-style padding. The relative_move function could produce a string
+ to replace on the screen which began with a numeric character, which
+ was then interpreted by tputs as padding. Now relative_move will not
+ generate a string with a leading digit in that case (overwrite).
+ Also, tputs will only interpret padding if the string begins with a
+ digit; as coded it permitted a string to begin with a decimal point
+ or asterisk (reported by Larry Virden).
+ > patches by Juergen Pfeifer:
+ + fix a typo in m_driver.c mouse handling and improves the error
+ handling.
+ + fix broken mouse handling in the Ada95 binding
+ + make the Ada95 sample application menus work with the new menu mouse
+ support
+ + improve the mouse handling introduced by Ilya; it now handles menus
+ with spacing.
+ + repair a minor bug in the menu_driver code discovered during this
+ rework.
+ + add new function wmouse_trafo() to hide implementation details of
+ _yoffset member of WINDOW struct needed for mouse coordinate
+ transformation.
+
+981128
+ + modify Ada95/gen/gen.c to avoid using return-value of sprintf, since
+ some older implementations (e.g., SunOS 4.x) return the buffer
+ address rather than its length.
+ > patch by Rick Ohnemus:
+ + modify demo.cc to get it to compile with newer versions of egcs.
+ + trim a space that appears at the end of the table preprocessor lines
+ ('\" t). This space prevents some versions of man from displaying
+ the pages - changed to remove all trailing whitespace (TD)
+ + finally, 'make clean' does not remove panel objects.
+ > patches by Ilya Zakharevich:
+ + allow remapping of OS/2 mouse buttons using environment variable
+ MOUSE_BUTTONS_123 with the default value 132.
+ + add mouse support to ncurses menus.
+
+981121
+ + modify misc/makedef.cmd to report old-style .def file symbols, and to
+ generate the .def files sorted by increasing names rather than the
+ reverse.
+ + add misc/*.ref which are J.J.G.Ripoll's dll definition files (renamed
+ from misc/*.old), and updated based on the entrypoint coding he used
+ for an older version of ncurses.
+ + add README.emx, to document how to build on OS/2 EMX.
+ + updates for config.guess, config.sub from Lynx
+ > patches by Ilya Zakharevich:
+ + minor fixes for mouse handling mode:
+ a) Do not initialize mouse if the request is to have no mouse;
+ b) Allow switching of OS/2 VIO mouse on and off.
+ + modify Makefile.os2 to support alternative means of generating
+ configure script, by translating Unix script with Perl.
+ > patches by Juergen Pfeifer:
+ + Updates MANIFEST to reflect changes in source structure
+ + Eliminates a problem introduced with my last patch for the C++
+ binding in the panels code. It removes the update() call done in the
+ panel destructor.
+ + Changes in the Ada95 binding to better support systems where
+ sizeof(chtype)!=sizeof(int) (e.g. DEC Alpha).
+
+981114
+ + modify install-script for manpages to skip over .orig and .rej files
+ (request by Larry Virden).
+ > patches/discussion by Alexander Lukyanov:
+ + move base-library sources into ncurses/base and tty (serial terminal)
+ sources into ncurses/tty, as part of Alexander Lukyanov's proposed
+ changes to ncurses library.
+ + copy _tracemouse() into ncurses.c so that lib_tracemse.c need not
+ be linked into the normal ncurses library.
+ + move macro winch to a function, to hide details of struct ldat
+ > patches by Juergen Pfeifer:
+ + fix a potential compile problem in cursesw.cc
+ + some Ada95 cosmetics
+ + fix a gen.c problem when compiling on 64-Bit machines
+ + fix Ada95/gen/Makefile.in "-L" linker switch
+ + modify Ada95 makefiles to use the INSTALL_PREFIX setting.
+
+981107
+ + ifdef'd out lib_freeall.c when not configured.
+ + rename _tracebits() to _nc_tracebits().
+ + move terminfo-library sources into ncurses/tinfo, and trace-support
+ functions into ncurses/trace as part of Alexander Lukyanov's proposed
+ changes to ncurses library.
+ + modify generated term.h to always specify its own definitions for
+ HAVE_TERMIOS_H, etc., to guard against inclusion by programs with
+ broken configure scripts.
+
+981031
+ + modify terminfo parsing to accept octal and hexadecimal constants,
+ like Solaris.
+ + remove an autoconf 2.10 artifact from the configure script's check
+ for "-g" compiler options. (Though harmless, this confused someone
+ at Debian, who recently issued a patch that results in the opposite
+ effect).
+ + add configure option --with-ada-compiler to accommodate installations
+ that do not use gcc as the driver for GNAT (patch by Juergen
+ Pfeifer).
+
+981017
+ + ensure ./man exists in configure script, needed when configuring
+ with --srcdir option.
+ + modify infocmp "-r" option to remove limit on formatted termcap
+ output, which makes it more like Solaris' version.
+ + modify captoinfo to treat no-argument case more like Solaris' version,
+ which uses the contents of $TERMCAP as the entry to format.
+ + modify mk-2nd.awk to handle subdirectories, e.g., ncurses/tty
+ (patch by Alexander V Lukyanov).
+
+981010
+ + modify --with-terminfo-dirs option so that the default value is the
+ ${datadir} value, unless $TERMINFO_DIRS is already set. This gets
+ rid of a hardcoded list of candidate directories in the configure
+ script.
+ + add some error-checking to _nc_read_file_entry() to ensure that
+ strings are properly terminated (Todd Miller).
+ + rename manpage file curs_scr_dmp.3x to curs_scr_dump.3x, to
+ correspond with contents (reported by Neil Zanella
+ <nzanella@cs.mun.ca>).
+ + remove redundant configure check for C++ which did not work when $CXX
+ was specified with a full pathname (reported by Andreas Jaeger).
+ + corrected bcopy/memmove check; the macro was not standalone.
+
+981003
+ + remove unnecessary portion of OS/2 EMX mouse change from
+ check_pending() (reported by Alexander V Lukyanov).
+
+980926
+ + implement mouse support for OS/2 EMX (adapted from patch against
+ 4.2(?) by Ilya Zakharevich).
+ + add configure-check for bcopy/memmove, for 980919 changes to hashmap.
+ + merge Data General terminfo from Hasufin <hasufin@vidnet.net> - TD
+ + merge AIX 3.2.5 terminfo descriptions for IBM terminals, replaces
+ some older entries - TD
+ + modify tic to compile into %'char' form in preference to %{number},
+ since that is a little more efficient.
+ + minor correction to infocmp to avoid displaying "difference" between
+ two capabilities that are rendered in equivalent forms.
+ + add -g option to tic/infocmp to force character constants to be
+ displayed in quoted form. Otherwise their decimal values are shown.
+ + modify setupterm so that cancelled strings are treated the same as
+ absent strings, cancelled and absent booleans false (does not affect
+ tic, infocmp).
+ + modify tic, infocmp to discard redundant i3, r3 strings when output
+ to termcap format.
+ > patch by Alexander V Lukyanov:
+ + improve performance of tparm, now it takes 19% instead of 25% when
+ profiling worm.
+ + rename maxlen/minlen to prec/width for better readability.
+ + use format string for printing strings.
+ + use len argument correctly in save_text, and pass it to save_number.
+
+980919
+ + make test_progs compile (but hashmap does not function).
+ + correct NC_BUFFERED macro, used in lib_mvcur test-driver, modify
+ associated logic to avoid freeing the SP->_setbuf data.
+ + add modules home_terminfo and getenv_num to libtinfo.
+ + move write_entry to libtinfo, to work with termcap caching.
+ + minor fixes to blue.c to build with atac.
+ + remove softscroll.c module; no longer needed for testing.
+ > patches by Todd C Miller:
+ + use strtol(3) instead of atoi(3) when parsing env variables so we can
+ detect a bogus (non-numeric) value.
+ + check for terminal names > MAX_NAME_SIZE in a few more places when
+ dealing with env variables again.
+ + fix a MAX_NAME_SIZE that should be MAX_NAME_SIZE+1
+ + use sizeof instead of strlen(3) on PRIVATE_INFO since it is a fixed
+ string #define (compile time vs runtime).
+ + when setting errno to ENOMEM, set it right before the return, not
+ before code that could, possibly, set errno to a different value.
+ > patches by Alexander V Lukyanov:
+ + use default background in update_cost_from_blank()
+ + disable scroll-hints when hashmap is configured.
+ + improve integration of hashmap scrolling code, by adding oldhash and
+ newhash data to SP struct.
+ + invoke del_curterm from delscreen.
+ + modify del_curterm to set cur_term to null if it matches the function's
+ parameter which is deleted.
+ + modify lib_doupdate to prefer parm_ich to the enter_insert_mode and
+ exit_insert_mode combination, adjusting InsCharCost to check
+ enter_insert_mode, exit_insert_mode and insert_padding. Add
+ insert_padding in insert mode after each char. This adds new costs
+ to the SP struct.
+
+980912
+ + modify test-driver in lib_mvcur.s to use _nc_setbuffer, for consistent
+ treatment.
+ + modify ncurses to restore output to unbuffered on endwin, and resume
+ buffering in refresh (see lib_set_term.c and NC_BUFFERED macro).
+ + corrected HTML version numbers (according to the W3C validator, they
+ never were HTML 2.0-compliant, but are acceptable 3.0).
+
+980905
+ + modify MKterminfo.sh to generate terminfo.5 with tables sorted by
+ capability name, as in SVr4.
+ + modified term.h, termcap.h headers to avoid redundant declarations.
+ + change 'u_int' type in tset.c to unsigned, making this compile on
+ Sequent PRX 4.1 (reported by Michael Sterrett <msterret@coat.com>).
+
+980829
+ + corrections to mailing addresses, and moving the magic line that
+ causes the man program to invoke tbl to the first line of each
+ manpage (patch by Rick Ohnemus <rick@ecompcon.com>).
+ + add Makefile.os2 and supporting scripts to generate dll's on OS/2 EMX
+ (from J.J.G.Ripoll, with further integration by TD).
+ + correct a typo in icl6404 terminfo entry.
+ + add xtermm and xtermc terminfo entries.
+ > from esr's terminfo version:
+ + Added Francesco Potorti's tuned Wyse 99 entries.
+ + dtterm enacs correction from Alexander V Lukyanov.
+ + Add ncsa-ns, ncsa-m-ns and ncsa-m entries from esr version.
+
+980822
+ + document AT&T acs characters in terminfo.5 manpage.
+ + use EMX _scrsize() function if terminfo and environment do not
+ declare the screen size (reported by Ilya Zakharevich
+ <ilya@math.ohio-state.edu>).
+ + remove spurious '\' characters from eterm and osborne terminfo
+ entries (prompted by an old Debian bug report).
+ + correct reversed malloc/realloc calls in _nc_doalloc (reported by
+ Hans-Joachim Widmaier <hjwidmai@foxboro.com>).
+ + correct misplaced parenthesis which caused file-descriptor from
+ opening termcap to be lost, from 980725 changes (reported by Andreas
+ Jaeger).
+
+980815
+ + modify lib_setup.c to eliminate unneeded include of <sys/ioctl.h> when
+ termios is not used (patch by Todd C Miller).
+ + add function _nc_doalloc, to ensure that failed realloc calls do not
+ leak memory (reported by Todd C Miller).
+ + improved ncsa-telnet terminfo entry.
+
+980809
+ + correct missing braces around a trace statement in read_entry.c,
+ from 980808 (reported by Kim DeVaughn <kimdv@best.com> and Liviu
+ Daia).
+
+980808
+ + fix missing include <errno.h> in ditto.c (reported by Bernhard
+ Rosenkraenzer <bero@k5.sucks.eu.org>)
+ + add NCSA telnet terminfo entries from Francesco Potorti
+ <F.Potorti@cnuce.cnr.it>, from Debian bug reports.
+ + make handling of $LINES and $COLUMNS variables more compatible with
+ Solaris by allowing them to individually override the window size
+ as obtained via ioctl.
+
+980801
+ + modify lib_vidattr.c to allow for terminal types (e.g., xterm-color)
+ which may reset all attributes in the 'op' capability, so that colors
+ are set before turning on bold and other attributes, but still after
+ turning attributes off.
+ + add 'ditto.c' to test directory to illustrate use of newterm for
+ initializing multiple screens.
+ + modify _nc_write_entry() to recover from failed attempt to link alias
+ for a terminfo on a filesystem which does not preserve character case
+ (reported by Peter L Jordan <PJordan@chla.usc.edu>).
+
+980725
+ + updated versions of config.guess and config.sub based on automake 1.3
+ + change name-comparisons in lib_termcap to compare no more than 2
+ characters (gleaned from Debian distribution of 1.9.9g-8.8, verified
+ with Solaris curses).
+ + fix typo in curs_insstr.3x (patch by Todd C Miller)
+ + use 'access()' to check if ncurses library should be permitted to
+ open or modify files with fopen/open/link/unlink/remove calls, in
+ case the calling application is running in setuid mode (request by
+ Cristian Gafton <gafton@redhat.com>, responding to Duncan Simpson
+ <dps@io.stargate.co.uk>).
+ + arm100 terminfo entries from Dave Millen <dmill@globalnet.co.uk>).
+ + qnxt2 and minitel terminfo entries from esr's version.
+
+980718
+ + use -R option with ldconfig on FreeBSD because otherwise it resets
+ the search path to /usr/lib (reported by Dan Nelson).
+ + add -soname option when building shared libraries on OpenBSD 2.x
+ (request by QingLong).
+ + add configure options --with-manpage-format and --with-manpage-renames
+ (request by QingLong).
+ + correct conversion of CANCELLED_NUMERIC in write_object(), which was
+ omitting the high-order byte, producing a 254 in the compiled
+ terminfo.
+ + modify return-values of tgetflag, tgetnum, tgetstr, tigetflag,
+ tigetnum and tigetstr to be compatible with Solaris (gleaned from
+ Debian distribution of 1.9.9g-8.8).
+ + modify _nc_syserr_abort to abort only when compiled for debugging,
+ otherwise simply exit with an error.
+
+980711
+ + modify Ada95 'gen' program to use appropriate library suffix (e.g.,
+ "_g" for a debug build).
+ + update Ada95 'make clean' rule to include generics .ali files
+ + add a configure test to ensure that if GNAT is found, that it can
+ compile/link working Ada95 program.
+ + flush output in beep and flash functions, fixing a problem with
+ getstr (patch by Alexander V Lukyanov)
+ + fix egcs 1.0.2 warning for etip.h (patch by Chris Johns).
+ + correct ifdef/brace nesting in lib_sprintf.c (patch by Bernhard
+ Rosenkraenzer <bero@Pool.Informatik.RWTH-Aachen.DE>).
+ + correct typo in wattr_get macro from 980509 fixes (patch by Dan
+ Nelson).
+
+980704
+ + merge changes from current XFree86 xterm terminfo descriptions.
+ + add configure option '--without-ada'.
+ + add a smart-default for termcap 'ac' to terminfo 'acs_chars' which
+ corresponds to vt100.
+ + change translation for termcap 'rs' to terminfo 'rs2', which is
+ the documented equivalent, rather than 'rs1'.
+
+980627
+ + slow 'worm' down a little, for very fast machines.
+ + corrected firstchar/lastchar computation in lib_hline.c
+ + simplify some expressions with CHANGED_CELL, CHANGED_RANGE and
+ CHANGED_TO_EOL macros.
+ + modify init_pair so that if a color-pair is reinitialized, we will
+ repaint the areas of the screen whose color changes, like SVr4 curses
+ (reported by Christian Maurer <maurer@inf.fu-berlin.de>).
+ + modify getsyx/setsyx macros to comply with SVr4 man-page which
+ says that leaveok() affects their behavior (report by Darryl Miles,
+ patch by Alexander V Lukyanov).
+
+980620
+ + review terminfo.5 against Solaris 2.6 curses version, corrected
+ several minor errors/omissions.
+ + implement tparm %l format.
+ + implement tparm printf-style width and precision for %s, %d, %x, %o
+ as per XSI.
+ + implement tparm dynamic variables (reported by Xiaodan Tang).
+
+980613
+ + update man-page for for wattr_set, wattr_get (cf: 980509)
+ + correct limits in hashtest, which would cause nonprinting characters
+ to be written to large screens.
+ + correct configure script, when --without-cxx was specified: the
+ wrong variable was used for cf_cv_type_of_bool. Compilers up to gcc
+ 2.8 tolerated the missing 'int'.
+ + remove the hardcoded name "gcc" for the GNU Ada compiler. The
+ compiler's name might be something like "egcs" (patch by Juergen
+ Pfeifer).
+ + correct curs_addch.3x, which implied that echochar could directly
+ display control characters (patch by Alexander V Lukyanov).
+ + fix typos in ncurses-intro.html (patch by Sidik Isani
+ <isani@cfht.hawaii.edu>)
+
+980606
+ + add configure test for conflicting use of exception in math.h and
+ other headers.
+ + minor optimization to 'hash()' function in hashmap.c, reduces its
+ time by 10%.
+ + correct form of LD_SHARED_OPTS for HP-UX 10.x (patch by Tim Mooney).
+ + fix missing quotes for 'print' in MKunctrl.awk script (reported by
+ Mihai Budiu <mihaib@gs41.sp.cs.cmu.edu>).
+ > patch by Alexander V Lukyanov:
+ + correct problem on Solaris (with poll() function) where getch could
+ hang indefinitely even if timeout(x) was called. This turned out to
+ be because milliseconds was not updated before 'goto retry' in
+ _nc_timed_wait.
+ + simplified the function _nc_timed_wait and fixed another bug, which
+ was the assumption of !GOOD_SELECT && HAVE_GETTIMEOFDAY in *timeleft
+ assignment.
+ + removed the cycle on EINTR, as it seems to be useless.
+
+980530
+ + add makefile-rule for test/keynames
+ + modify run_tic.sh and shlib to ensure that user's .profile does not
+ override the $PATH used to run tic (patch by Tim Mooney).
+ + restore LD_SHARED_OPTS to $(LD_SHARED_FLAGS) when linking programs,
+ needed for HP-UX shared-library path (recommended by Tim Mooney).
+ + remove special case of HP-UX -L options, use +b options to embed
+ $(libdir) in the shared libraries (recommended by Tim Mooney).
+ + add checks for some possible buffer overflows and unchecked
+ malloc/realloc/calloc/strdup return values (patch by Todd C Miller
+ <Todd.Miller@courtesan.com>)
+
+980523
+ + correct maxx/maxy expression for num_columns/num_lines in derwin
+ (patch by Alexander V Lukyanov).
+ + add /usr/share/lib/terminfo and /usr/lib/terminfo as compatibilty
+ fallbacks to _nc_read_entry(), along with --with-terminfo-dirs
+ configure option (suggested by Mike Hopkirk).
+ + modify config.guess to recognize Unixware 2.1 and 7 (patch by Mike
+ Hopkirk <hops@sco.com>).
+ + suppress definition of CC_SHARED_OPTS in LDFLAGS_SHARED in c++
+ Makefile.in, since this conflicts when g++ is used with HP-UX
+ compiler (reported by Tim Mooney).
+ + parenthesize 'strcpy' calls in c++ binding to workaround redefinition
+ in some C++ implementations (reported by several people running
+ egcs with glibc 2.0.93, analysis by Andreas Jaeger.
+
+980516
+ + modify write_entry.c so that it will not attempt to link aliases
+ with embedded '/', but give only a warning.
+ + put -L$(libdir) first when linking programs, except for HP-UX.
+ + modify comp_scan.c to handle SVr4 terminfo description for att477,
+ which contains a colon in the description field.
+ + modify configure script to support SCO osr5.0.5 shared libraries
+ (from comp.unix.sco.programmer newsgroup item by Mike Hopkirk
+ <hops@sco.com>).
+ + eliminate extra GoTo call in lib_doupdate.c (patch by Alexander V.
+ Lukyanov).
+ + minor adjustments of const/NCURSES_CONST from IRIX compile.
+ + add updates based on esr's 980509 version of terminfo.src.
+
+980509
+ + correct macros for wattr_set, wattr_get, separate wattrset macro from
+ these to preserve behavior that allows attributes to be combined with
+ color pair numbers.
+ + add configure option --enable-no-padding, to allow environment
+ variable $NCURSES_NO_PADDING to eliminate non-mandatory padding,
+ thereby making terminal emulators (e.g., for vt100) a little more
+ efficient (request by Daniel Eisenbud <eisenbud@cs.swarthmore.edu>).
+ + modify configure script to embed ABI in shared libraries for HP-UX
+ 10.x (detailed request by Tim Mooney).
+ + add test/example of the 'filter()' function.
+ + add nxterm and xterm-color terminfo description (request by Cristian
+ Gafton <gafton@redhat.com>).
+ + modify rxvt terminfo description to clear alternate screen before
+ switching back to normal screen, for compatibility with applications
+ which use xterm (reported by Manoj Kasichainula <manojk@io.com>).
+ + modify linux terminfo description to reset color palette (reported
+ by Telford Tendys <telford@eng.uts.edu.au>).
+ + correction to doupdate, for case where terminal does not support
+ insert/delete character. The logic did not check that there was a
+ difference in alignment of changes to old/new screens before
+ repainting the whole non-blank portion of the line. Modified to fall
+ through into logic that reduces by the portion which does not differ
+ (reported by Daniel Eisenbud <eisenbud@cs.swarthmore.edu>).
+ + minor performance improvement to wnoutrefresh by moving some
+ comparisons out of inner loop.
+
+980425
+ + modify configure script to substitute NCURSES_CONST in curses.h
+ + updated terminfo entries for xterm-xf86-v40, xterm-16color,
+ xterm-8bit to correspond to XFree86 3.9Ag.
+ + remove restriction that forces ncurses to use setaf/setab if the
+ number of colors is greater than 8. (see 970524 for xterm-16color).
+ + change order of -L options (so that $(libdir) is searched first) when
+ linking tic and other programs, to workaround HP's linker.
+ Otherwise, the -L../lib is embedded when linking against shared
+ libraries and the installed program does not run (reported by Ralf
+ Hildebrandt).
+ + modify configuration of shared libraries on Digital Unix so that
+ versioning is embedded in the library, rather than implied by
+ links (patch by Tim Mooney).
+
+980418
+ + modify etip.h to avoid conflict with math.h on HP-UX 9.03 with gcc
+ 2.8.1 which redefines 'exception' (reported by Ralf Hildebrandt
+ <R.Hildebrandt@tu-bs.de>).
+ + correct configure tests in CF_SHARED_OPTS which used $CC value to
+ check for gcc, rather than autoconf's $GCC value. This did not
+ work properly if the full pathname of the compiler were given
+ (reported by Michael Yount <yount@csf.Colorado.edu>).
+ + revise check for compiler options to force ANSI mode since repeating
+ an option such as -Aa causes HP's compiler to fail on its own headers
+ (reported by Clint Olsen <olsenc@ichips.intel.com>).
+
+980411
+ + ifdef'd has_key() and mcprint() as extended functions.
+ + modified several prototypes to correspond with 1997 version of
+ X/Open Curses (affects ABI since developers have used attr_get).
+ + remove spurious trailing blanks in glibc addon-scripts (patch by
+ H.J.Lu).
+ + insert a few braces at locations where gcc-2.8.x asks to use them to
+ avoid ambigous else's, use -fpic rather than -fPIC for Linux (patch
+ by Juergen Pfeifer).
+
+980404
+ + split SHLIB_LIST into SHLIB_DIRS/SHLIB_LIST to keep -L options
+ before -l to accommodate Solaris' linker (reported by Larry Virden).
+
+980328
+ + modify lib_color.c to eliminate dependency on orig_colors and
+ orig_pair, since SVr4 curses does not require these either, but
+ uses them when they are available.
+ + add detailed usage-message to infocmp.
+ + correct a typo in att6386 entry (a "%?" which was "?").
+ + add -f option to infocmp and tic, which formats the terminfo
+ if/then/else/endif so that they are readable (with newlines and
+ tabs).
+ + fixes for glibc addon scripts (patch by H.J.Lu).
+
+980321
+ + revise configure macro CF_SPEED_TYPE so that termcap.h has speed_t
+ declared (from Adam J. Richter <adam@yggdrasil.com>)
+ + remove spurious curs_set() call from leaveok() (J.T.Conklin).
+ + corrected handling leaveok() in doupdate() (patch by Alexander V.
+ Lukyanov).
+ + improved version of wredrawln (patch by Alexander V. Lukyanov).
+ + correct c++/Makefile.in so install target do not have embedded ../lib
+ to confuse it (patch by Thomas Graf <graf@essi.fr>).
+ + add warning to preinstall rule which checks if the installer would
+ overwrite a curses.h or termcap.h that is not derived from ncurses.
+ (The recommended configuration for developers who need both is to
+ use --disable-overwrite).
+ + modify preinstall rule in top-level Makefile to avoid implicit
+ use of 'sh', to accommodate Ultrix 4.4 (reported by Joao Palhoto
+ Matos <jmatos@math.ist.utl.pt>, patch by Thomas Esser
+ <te@informatik.uni-hannover.de>)
+ + refine ifdef's for TRACE so that libncurses has fewer dependencies
+ on libtinfo when TRACE is disabled.
+ + modify configure script so that if the --with-termlib option is used
+ to generate a separate terminfo library, we chain it to the ncurses
+ library with a "-l" option (reported by Darryl Miles and Ian T.
+ Zimmerman).
+
+980314
+ + correct limits and window in wredrawln function (reported/analysis by
+ Alexander V. Lukyanov).
+ + correct sed expression in configure script for --with-fallback
+ option (patch by Jesse Thilo).
+ + correct some places in configure script where $enableval was used
+ rather than $withval (patch by Darryl Miles <dlm@g7led.demon.co.uk>).
+ + modify some man-pages so no '.' or '..' falls between TH and SH
+ macros, to accommodate man_db program (reported by Ian T. Zimmerman
+ <itz@rahul.net>).
+ + terminfo.src 10.2.1 from Eric's webpage.
+ > several changes by Juergen Pfeifer:
+ + add copyright notices (and rcs id's) on remaining man-pages.
+ + corrected prototypes for slk_* functions, using chtype rather than
+ attr_t.
+ + implemented the wcolor_set() and slk_color() functions
+ + the slk_attr_{set,off,on} functions need an additional void*
+ parameter according to XSI.
+ + fix the C++ and Ada95 binding as well as the man pages to
+ reflect above enhancements.
+
+980307
+ + use 'stat()' rather than 'access()' in toe.c to check for the
+ existence of $HOME/.terminfo, since it may be a file.
+ + suppress configure CF_CXX_LIBRARY check if we are not using g++
+ 2.7.x, since this is not needed with g++ 2.8 or egcs (patch by
+ Juergen Pfeifer).
+ + turn on hashmap scrolling code by default, intend to remedy defects
+ by 4.3 release.
+ + minor corrections to terminfo.src changelog.
+
+980302 4.2 release for upload to prep.ai.mit.edu
+ + correct Florian's email address in ncurses-intro.html
+ + terminfo.src 10.2.0 from Eric.
+
980228 pre-release
+ add linux-koi8r replace linux-koi8, which is not KOI8 (patch by
QingLong <qinglong@Bolizm.ihep.su>).
+ remove sgr string from qnx terminfo entry since it is reported to
turn off attributes inconsistently.
-980124
+980124
+ add f/F/b/B commands to ncurses 'b' test to toggle colors, providing
test for no_color_video.
+ adjusted emx.src to use no_color_video, now works with ncurses 'b'
--- $Id: README,v 1.17 1998/02/15 01:26:47 tom Exp $
+-- $Id: README,v 1.19 1999/10/23 20:39:24 tom Exp $
-------------------------------------------------------------------------------
README file for the ncurses package
is the current version number (see the dist.mk file in this directory for
that). There should be a number of subdirectories, including `c++', `form',
`man', `menu', `misc', `ncurses', `panel', `progs', `test', 'tack' and `Ada95'.
-(The 'tack' program is distributed separately).
+(The 'tack' program may be distributed separately).
A full build/install of this package typically installs several libraries, a
handful of utilities, and a database hierarchy. Here is an inventory of the
Zeyd M. Ben-Halim:
port of original to Linux and many enhancements.
-Thomas Dickey (maintainer since 1.9.9e):
+Thomas Dickey (maintainer for 1.9.9g through 4.1, resuming with FSF's 5.0):
configuration scripts, porting, mods to adhere to XSI Curses in the
areas of background color, terminal modes. Also memory leak testing,
the wresize, default colors and key definition extensions and numerous
--- /dev/null
+-- $Id: README.emx,v 1.1 1998/11/21 20:13:05 tom Exp $
+-- Author: Thomas Dickey <dickey@clark.net>
+-------------------------------------------------------------------------------
+
+You can build ncurses on OS/2 in the EMX environment. But you must build and
+acquire tools. Not all of the tools distributed with EMX work properly, and
+some additional ones are required.
+
+First, the configure script distributed with ncurses will not run as-is in EMX.
+You can generate a new one if you have autoconf built for EMX. You will need
+the EMX development tools, of course. Get these programs to start:
+
+ GNU m4 program (version 1.4)
+ GNU autoconf (version 2.12).
+ GNU patch (version 2.5)
+
+Apply the autoconf patches from
+
+ http://www.clark.net/pub/dickey/autoconf
+ ftp://ftp.clark.net/pub/dickey/autoconf
+
+These are ordered by date:
+
+ autoconf-2.12-970309.patch
+ autoconf-2.12-970429.patch
+ autoconf-2.12-971222-emx.patch
+ autoconf-2.12-971222.patch
+ autoconf-2.12-971230.patch
+
+I built my development environment for ncurses using EMX 0.9c at the end of
+1997. Much of the EMX patch for autoconf was done originally by J.J.G.Ripoll,
+using a similar environment (he prefers using the 'ash' shell). Newer versions
+may fix these problems:
+
+ + The pdksh program distributed at Hobbes and Leo (with a 1996 date) is
+ defective. It does not process "here documents" correctly (which
+ renders it useless for running the autoconf script). I built my own
+ copy of pdksh 5.2.13, which does have the bug corrected (documented
+ in the change log for pdksh).
+
+ + I also built from sources (because the distributed binaries did not
+ work) the cmp, diff programs.
+
+ Other required utilities such as ar, cat, chmod, cp, gawk, grep, mv,
+ ls, rm, mkdir, sed, sort and tr worked.
+
+Once you have autoconf patched and installed, run 'autoconf' from the top-level
+directory of ncurses to generate the EMX-specific configure script.
--- $Id: TO-DO,v 1.38 1997/10/11 14:47:42 tom Exp $
+-- $Id: TO-DO,v 1.39 1998/07/12 00:25:39 tom Exp $
SHORT-TERM TO-DO ITEMS:
Known Problems:
+* GNAT does not put libraries in the correct order, so a build only links
+ properly if you use shared libraries since -lncurses is first.
+
* XPG4 specifies that the enhanced features are not available unless the
_XOPEN_SOURCE_EXTENDED test macro is defined by the application. Ncurses uses
this macro (incorrectly) to address a dependency upon wchar_t. The functions
dnl***************************************************************************
-dnl Copyright (c) 1998 Free Software Foundation, Inc. *
+dnl Copyright (c) 1998,1999 Free Software Foundation, Inc. *
dnl *
dnl Permission is hereby granted, free of charge, to any person obtaining a *
dnl copy of this software and associated documentation files (the *
dnl
dnl Author: Thomas E. Dickey <dickey@clark.net> 1996,1997,1998
dnl
-dnl $Id: aclocal.m4,v 1.121 1998/02/11 12:13:40 tom Exp $
+dnl $Id: aclocal.m4,v 1.179 1999/10/23 21:49:25 tom Exp $
dnl Macros used in NCURSES auto-configuration script.
dnl
dnl ---------------------------------------------------------------------------
AC_SUBST(ACPPFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
+dnl This is adapted from the macros 'fp_PROG_CC_STDC' and 'fp_C_PROTOTYPES'
+dnl in the sharutils 4.2 distribution.
+AC_DEFUN([CF_ANSI_CC_CHECK],
+[
+AC_MSG_CHECKING(for ${CC-cc} option to accept ANSI C)
+AC_CACHE_VAL(cf_cv_ansi_cc,[
+cf_cv_ansi_cc=no
+cf_save_CFLAGS="$CFLAGS"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX -Aa -D_HPUX_SOURCE
+# SVR4 -Xc
+# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
+for cf_arg in "-DCC_HAS_PROTOS" \
+ "" \
+ -qlanglvl=ansi \
+ -std1 \
+ "-Aa -D_HPUX_SOURCE +e" \
+ "-Aa -D_HPUX_SOURCE" \
+ -Xc
+do
+ CFLAGS="$cf_save_CFLAGS $cf_arg"
+ AC_TRY_COMPILE(
+[
+#ifndef CC_HAS_PROTOS
+#if !defined(__STDC__) || (__STDC__ != 1)
+choke me
+#endif
+#endif
+],[
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};],
+ [cf_cv_ansi_cc="$cf_arg"; break])
+done
+CFLAGS="$cf_save_CFLAGS"
+])
+AC_MSG_RESULT($cf_cv_ansi_cc)
+
+if test "$cf_cv_ansi_cc" != "no"; then
+if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
+ CFLAGS="$CFLAGS $cf_cv_ansi_cc"
+else
+ AC_DEFINE(CC_HAS_PROTOS)
+fi
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl For programs that must use an ANSI compiler, obtain compiler options that
+dnl will make it recognize prototypes. We'll do preprocessor checks in other
+dnl macros, since tools such as unproto can fake prototypes, but only part of
+dnl the preprocessor.
+AC_DEFUN([CF_ANSI_CC_REQD],
+[AC_REQUIRE([CF_ANSI_CC_CHECK])
+if test "$cf_cv_ansi_cc" = "no"; then
+ AC_ERROR(
+[Your compiler does not appear to recognize prototypes.
+You have the following choices:
+ a. adjust your compiler options
+ b. get an up-to-date compiler
+ c. use a wrapper such as unproto])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Test if 'bool' is a builtin type in the configured C++ compiler. Some
dnl older compilers (e.g., gcc 2.5.8) don't support 'bool' directly; gcc
dnl 2.6.3 does, in anticipation of the ANSI C++ standard.
dnl substituting its value (i.e., 1/0).
AC_DEFUN([CF_BOOL_DECL],
[
-AC_MSG_CHECKING([for builtin c++ bool type])
-AC_CACHE_VAL(cf_cv_builtin_bool,[
- AC_TRY_COMPILE([],[bool x = false],
- [cf_cv_builtin_bool=1],
- [cf_cv_builtin_bool=0])
+AC_MSG_CHECKING([for builtin ifelse(AC_LANG,[C],$CC,$CXX) bool type])
+AC_CACHE_VAL(ifelse($1,,cf_cv_builtin_bool,[$1]),[
+ AC_TRY_COMPILE([
+#include <stdio.h>
+#include <sys/types.h>
+],[bool x = false],
+ [ifelse($1,,cf_cv_builtin_bool,[$1])=1],
+ [ifelse($1,,cf_cv_builtin_bool,[$1])=0])
])
-if test $cf_cv_builtin_bool = 1
+if test $ifelse($1,,cf_cv_builtin_bool,[$1]) = 1
then AC_MSG_RESULT(yes)
else AC_MSG_RESULT(no)
fi
dnl Don't bother looking for bool.h, since it's been deprecated.
AC_DEFUN([CF_BOOL_SIZE],
[
-AC_MSG_CHECKING([for size of c++ bool])
+AC_MSG_CHECKING([for size of ifelse(AC_LANG,[C],$CC,$CXX) bool])
AC_CACHE_VAL(cf_cv_type_of_bool,[
rm -f cf_test.out
AC_TRY_RUN([
#include <stdlib.h>
#include <stdio.h>
-#if HAVE_BUILTIN_H
+#if HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
#include <builtin.h>
#endif
main()
FILE *fp = fopen("cf_test.out", "w");
if (fp != 0) {
bool x = true;
- if ((-x) >= 0)
+ if ((bool)(-x) >= 0)
fputs("unsigned ", fp);
if (sizeof(x) == sizeof(int)) fputs("int", fp);
else if (sizeof(x) == sizeof(char)) fputs("char", fp);
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl Check for data that is usually declared in <stdio.h> or <errno.h>
-dnl $1 = the name to check
-AC_DEFUN([CF_CHECK_ERRNO],
-[
-AC_MSG_CHECKING([declaration of $1])
-AC_CACHE_VAL(cf_cv_dcl_$1,[
- AC_TRY_COMPILE([
-#include <stdio.h>
-#include <sys/types.h>
-#include <errno.h> ],
- [long x = (long) $1],
- [eval 'cf_cv_dcl_'$1'=yes'],
- [eval 'cf_cv_dcl_'$1'=no]')])
-eval 'cf_result=$cf_cv_dcl_'$1
-AC_MSG_RESULT($cf_result)
-
-# It's possible (for near-UNIX clones) that the data doesn't exist
-AC_CACHE_VAL(cf_cv_have_$1,[
-if test $cf_result = no ; then
- eval 'cf_result=DECL_'$1
- CF_UPPER(cf_result,$cf_result)
- AC_DEFINE_UNQUOTED($cf_result)
- AC_MSG_CHECKING([existence of $1])
- AC_TRY_LINK([
-#undef $1
-extern long $1;
-],
- [$1 = 2],
- [eval 'cf_cv_have_'$1'=yes'],
- [eval 'cf_cv_have_'$1'=no'])
- eval 'cf_result=$cf_cv_have_'$1
- AC_MSG_RESULT($cf_result)
-else
- eval 'cf_cv_have_'$1'=yes'
-fi
-])
-eval 'cf_result=HAVE_'$1
-CF_UPPER(cf_result,$cf_result)
-eval 'test $cf_cv_have_'$1' = yes && AC_DEFINE_UNQUOTED($cf_result)'
-])dnl
-dnl ---------------------------------------------------------------------------
dnl Check if the terminal-capability database functions are available. If not,
dnl ncurses has a much-reduced version.
AC_DEFUN([CF_CGETENT],[
dnl Derive the system name, as a check for reusing the autoconf cache.
dnl
dnl If we've packaged config.guess and config.sub, run that (since it does a
-dnl better job than uname).
+dnl better job than uname).
AC_DEFUN([CF_CHECK_CACHE],
[
if test -f $srcdir/config.guess ; then
fi
])dnl
dnl ---------------------------------------------------------------------------
-dnl If we're trying to use g++, test if libg++ is installed (a rather common
-dnl problem :-). If we have the compiler but no library, we'll be able to
-dnl configure, but won't be able to build the c++ demo program.
-AC_DEFUN([CF_CXX_LIBRARY],
+dnl Check for data that is usually declared in <stdio.h> or <errno.h>, e.g.,
+dnl the 'errno' variable. Define a DECL_xxx symbol if we must declare it
+dnl ourselves.
+dnl
+dnl (I would use AC_CACHE_CHECK here, but it will not work when called in a
+dnl loop from CF_SYS_ERRLIST).
+dnl
+dnl $1 = the name to check
+AC_DEFUN([CF_CHECK_ERRNO],
[
-cf_cxx_library=unknown
-if test $ac_cv_prog_gxx = yes; then
- AC_MSG_CHECKING([for libg++])
- cf_save="$LIBS"
- LIBS="$LIBS -lg++ -lm"
- AC_TRY_LINK([
-#include <builtin.h>
- ],
- [float foo=abs(1.0)],
- [cf_cxx_library=yes
- CXXLIBS="$CXXLIBS -lg++ -lm"],
- [cf_cxx_library=no])
- LIBS="$cf_save"
- AC_MSG_RESULT($cf_cxx_library)
+AC_MSG_CHECKING(if external $1 is declared)
+AC_CACHE_VAL(cf_cv_dcl_$1,[
+ AC_TRY_COMPILE([
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
+#include <stdio.h>
+#include <sys/types.h>
+#include <errno.h> ],
+ [long x = (long) $1],
+ [eval 'cf_cv_dcl_'$1'=yes'],
+ [eval 'cf_cv_dcl_'$1'=no]')
+])
+
+eval 'cf_result=$cf_cv_dcl_'$1
+AC_MSG_RESULT($cf_result)
+
+if test "$cf_result" = no ; then
+ eval 'cf_result=DECL_'$1
+ CF_UPPER(cf_result,$cf_result)
+ AC_DEFINE_UNQUOTED($cf_result)
+fi
+
+# It's possible (for near-UNIX clones) that the data doesn't exist
+CF_CHECK_EXTERN_DATA($1,int)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check for existence of external data in the current set of libraries. If
+dnl we can modify it, it's real enough.
+dnl $1 = the name to check
+dnl $2 = its type
+AC_DEFUN([CF_CHECK_EXTERN_DATA],
+[
+AC_MSG_CHECKING(if external $1 exists)
+AC_CACHE_VAL(cf_cv_have_$1,[
+ AC_TRY_LINK([
+#undef $1
+extern $2 $1;
+],
+ [$1 = 2],
+ [eval 'cf_cv_have_'$1'=yes'],
+ [eval 'cf_cv_have_'$1'=no'])])
+
+eval 'cf_result=$cf_cv_have_'$1
+AC_MSG_RESULT($cf_result)
+
+if test "$cf_result" = yes ; then
+ eval 'cf_result=HAVE_'$1
+ CF_UPPER(cf_result,$cf_result)
+ AC_DEFINE_UNQUOTED($cf_result)
+fi
+
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Check if the C++ compiler accepts duplicate parameter initialization. This
+dnl is a late feature for the standard and is not in some recent compilers
+dnl (1999/9/11).
+AC_DEFUN([CF_CPP_PARAM_INIT],
+[
+if test -n "$CXX" ; then
+AC_CACHE_CHECK(if $CXX accepts parameter initialization,cf_cv_cpp_param_init,[
+ AC_LANG_CPLUSPLUS
+ AC_TRY_RUN([
+class TEST {
+private:
+ int value;
+public:
+ TEST(int x = 1);
+ ~TEST();
+};
+
+TEST::TEST(int x = 1) // some compilers do not like second initializer
+{
+ value = x;
+}
+void main() { }
+],
+ [cf_cv_cpp_param_init=yes],
+ [cf_cv_cpp_param_init=no],
+ [cf_cv_cpp_param_init=unknown])
+])
fi
+test "$cf_cv_cpp_param_init" = yes && AC_DEFINE(CPP_HAS_PARAM_INIT)
])dnl
dnl ---------------------------------------------------------------------------
AC_DEFUN([CF_DIRS_TO_MAKE],
CF_CHECK_ERRNO(errno)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Test for conflicting definitions of exception in gcc 2.8.0, etc., between
+dnl math.h and builtin.h, only for ncurses
+AC_DEFUN([CF_ETIP_DEFINES],
+[
+AC_MSG_CHECKING(for special defines needed for etip.h)
+cf_save_CXXFLAGS="$CXXFLAGS"
+cf_result="none"
+for cf_math in "" MATH_H
+do
+for cf_excp in "" MATH_EXCEPTION
+do
+ CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu"
+ test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}"
+ test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}"
+AC_TRY_COMPILE([
+#include <etip.h.in>
+],[],[
+ test -n "$cf_math" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_math})
+ test -n "$cf_excp" && AC_DEFINE_UNQUOTED(ETIP_NEEDS_${cf_excp})
+ cf_result="$cf_math $cf_excp"
+ break
+],[])
+done
+done
+AC_MSG_RESULT($cf_result)
+CXXFLAGS="$cf_save_CXXFLAGS"
+])
+dnl ---------------------------------------------------------------------------
+dnl Check for memmove, or a bcopy that can handle overlapping copy. If neither
+dnl is found, add our own version of memmove to the list of objects.
+AC_DEFUN([CF_FUNC_MEMMOVE],
+[
+AC_CHECK_FUNC(memmove,,[
+AC_CHECK_FUNC(bcopy,[
+ AC_CACHE_CHECK(if bcopy does overlapping moves,cf_cv_good_bcopy,[
+ AC_TRY_RUN([
+int main() {
+ static char data[] = "abcdefghijklmnopqrstuwwxyz";
+ char temp[40];
+ bcopy(data, temp, sizeof(data));
+ bcopy(temp+10, temp, 15);
+ bcopy(temp+5, temp+15, 10);
+ exit (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
+}
+ ],
+ [cf_cv_good_bcopy=yes],
+ [cf_cv_good_bcopy=no],
+ [cf_cv_good_bcopy=unknown])
+ ])
+ ],[cf_cv_good_bcopy=no])
+ if test $cf_cv_good_bcopy = yes ; then
+ AC_DEFINE(USE_OK_BCOPY)
+ else
+ AC_DEFINE(USE_MY_MEMMOVE)
+ fi
+])])dnl
+dnl ---------------------------------------------------------------------------
dnl Test for availability of useful gcc __attribute__ directives to quiet
dnl compiler warnings. Though useful, not all are supported -- and contrary
dnl to documentation, unrecognized directives cause older compilers to barf.
EOF
if test -n "$GCC"
then
- AC_CHECKING([for gcc __attribute__ directives])
+ AC_CHECKING([for $CC __attribute__ directives])
changequote(,)dnl
cat > conftest.$ac_ext <<EOF
#line __oline__ "configure"
do
CF_UPPER(CF_ATTRIBUTE,$cf_attribute)
cf_directive="__attribute__(($cf_attribute))"
- echo "checking for gcc $cf_directive" 1>&AC_FD_CC
+ echo "checking for $CC $cf_directive" 1>&AC_FD_CC
case $cf_attribute in
scanf|printf)
cat >conftest.h <<EOF
changequote(,)dnl
cat > conftest.$ac_ext <<EOF
#line __oline__ "configure"
-int main(int argc, char *argv[]) { return argv[argc-1] == 0; }
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
EOF
changequote([,])dnl
- AC_CHECKING([for gcc warning options])
+ AC_CHECKING([for $CC warning options])
cf_save_CFLAGS="$CFLAGS"
EXTRA_CFLAGS="-W -Wall"
cf_warn_CONST=""
AC_SUBST(EXTRA_CFLAGS)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Verify that a test program compiles and runs with GNAT
+dnl $cf_ada_make is set to the program that compiles/links
+AC_DEFUN([CF_GNAT_TRY_RUN],
+[
+rm -f conftest*
+cat >>conftest.ads <<CF_EOF
+$1
+CF_EOF
+cat >>conftest.adb <<CF_EOF
+$2
+CF_EOF
+if ( $cf_ada_make conftest 1>&AC_FD_CC 2>&1 ) ; then
+ if ( ./conftest 1>&AC_FD_CC 2>&1 ) ; then
+ifelse($3,, :,[ $3])
+ifelse($4,,,[ else
+ $4])
+ fi
+ifelse($4,,,[else
+ $4])
+fi
+rm -f conftest*
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Verify Version of GNAT.
AC_DEFUN([CF_GNAT_VERSION],
[
sed -e 's/[^0-9 \.]//g' | $AWK '{print $<<1>>;}'`
case $cf_cv_gnat_version in
3.[1-9]*|[4-9].*)
- ac_cv_prog_gnat_correct=yes
+ cf_cv_prog_gnat_correct=yes
;;
*) echo Unsupported GNAT version $cf_cv_gnat_version. Required is 3.10 or better. Disabling Ada95 binding.
- ac_cv_prog_gnat_correct=no
+ cf_cv_prog_gnat_correct=no
;;
esac
case $cf_cv_gnat_version in
3.1*|[4-9].*)
cf_compile_generics=generics
+ cf_generic_objects="\$(GENOBJS)"
;;
*) cf_compile_generics=
+ cf_generic_objects=
;;
esac
changequote([, ])dnl
])
dnl ---------------------------------------------------------------------------
+dnl If we're trying to use g++, test if libg++ is installed (a rather common
+dnl problem :-). If we have the compiler but no library, we'll be able to
+dnl configure, but won't be able to build the c++ demo program.
+AC_DEFUN([CF_GPP_LIBRARY],
+[
+cf_cxx_library=unknown
+case $cf_cv_system_name in #(vi
+os2*) #(vi
+ cf_gpp_libname=gpp
+ ;;
+*)
+ cf_gpp_libname=g++
+ ;;
+esac
+if test $ac_cv_prog_gxx = yes; then
+ AC_MSG_CHECKING([for lib$cf_gpp_libname])
+ cf_save="$LIBS"
+ LIBS="$LIBS -l$cf_gpp_libname -lm"
+ AC_TRY_LINK([
+#include <$cf_gpp_libname/builtin.h>
+ ],
+ [//float foo=abs(1.0);
+ two_arg_error_handler_t foo2 = lib_error_handler],
+ [cf_cxx_library=yes
+ CXXLIBS="$CXXLIBS -l$cf_gpp_libname -lm"
+ if test "$cf_gpp_libname" = cpp ; then
+ AC_DEFINE(HAVE_GPP_BUILTIN_H)
+ else
+ AC_DEFINE(HAVE_GXX_BUILTIN_H)
+ fi],
+ [AC_TRY_LINK([
+#include <builtin.h>
+ ],
+ [//float foo=abs(1.0);
+ two_arg_error_handler_t foo2 = lib_error_handler],
+ [cf_cxx_library=yes
+ CXXLIBS="$CXXLIBS -l$cf_gpp_libname -lm"
+ AC_DEFINE(HAVE_BUILTIN_H)],
+ [cf_cxx_library=no])])
+ LIBS="$cf_save"
+ AC_MSG_RESULT($cf_cxx_library)
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Insert text into the help-message, for readability, from AC_ARG_WITH.
AC_DEFUN([CF_HELP_MESSAGE],
[AC_DIVERT_HELP([$1])dnl
test $cf_cv_have_isascii = yes && AC_DEFINE(HAVE_ISASCII)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Compute the library-prefix for the given host system
+dnl $1 = variable to set
+AC_DEFUN([CF_LIB_PREFIX],
+[
+ case $cf_cv_system_name in
+ os2) $1='' ;;
+ *) $1='lib' ;;
+ esac
+ LIB_PREFIX=[$]$1
+ AC_SUBST(LIB_PREFIX)
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Append definitions and rules for the given models to the subdirectory
dnl Makefiles, and the recursion rule for the top-level Makefile. If the
dnl subdirectory is a library-source directory, modify the LIBRARIES list in
;;
*) #(vi
cf_item=`echo $cf_libs_to_make |sed -e s/$LIB_NAME/$TINFO_NAME/g`
- cf_libs_to_make="$cf_libs_to_make $cf_item"
+ cf_libs_to_make="$cf_item $cf_libs_to_make"
;;
esac
fi
cat >> Makefile <<CF_EOF
-install.data ::
+install.data \
+uninstall.data ::
cd misc && \$(MAKE) \$(CF_MFLAGS) \[$]@
-install.man ::
+install.man \
+uninstall.man ::
cd man && \$(MAKE) \$(CF_MFLAGS) \[$]@
distclean ::
fi
done
-])dnl
-dnl ---------------------------------------------------------------------------
-dnl Compute the library-prefix for the given host system
-dnl $1 = variable to set
-AC_DEFUN([CF_LIB_PREFIX],
-[
- case $cf_cv_system_name in
- os2) $1='' ;;
- *) $1='lib' ;;
- esac
])dnl
dnl ---------------------------------------------------------------------------
dnl Compute the library-suffix from the given model name
profile) $2='_p.a' ;;
shared)
case $cf_cv_system_name in
- openbsd*|netbsd*|freebsd*)
+ openbsd*|freebsd*)
$2='.so.$(REL_VERSION)' ;;
+ netbsd*)
+ if test -f /usr/libexec/ld.elf_so; then
+ $2='.so'
+ else
+ $2='.so.$(REL_VERSION)'
+ fi
+ ;;
hpux*) $2='.sl' ;;
*) $2='.so' ;;
esac
test $cf_cv_link_dataonly = no && AC_DEFINE(BROKEN_LINKER)
])dnl
dnl ---------------------------------------------------------------------------
+dnl Most Unix systems have both link and symlink, a few don't have symlink.
+dnl A few non-Unix systems implement symlink, but not link.
+dnl A few non-systems implement neither (or have nonfunctional versions).
+AC_DEFUN([CF_LINK_FUNCS],
+[
+AC_CHECK_FUNCS( \
+ remove \
+ unlink )
+
+if test "$ac_cv_prog_cc_cross" = yes ; then
+ AC_CHECK_FUNCS( \
+ link \
+ symlink )
+else
+ AC_CACHE_CHECK(if link/symlink functions work,cf_cv_link_funcs,[
+ cf_cv_link_funcs=
+ for cf_func in link symlink ; do
+ AC_TRY_RUN([
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+int main()
+{
+ int fail = 0;
+ char *src = "config.log";
+ char *dst = "conftest.chk";
+ struct stat src_sb;
+ struct stat dst_sb;
+
+ stat(src, &src_sb);
+ fail = ($cf_func("config.log", "conftest.chk") < 0)
+ || (stat(dst, &dst_sb) < 0)
+ || (dst_sb.st_mtime != src_sb.st_mtime);
+#ifdef HAVE_UNLINK
+ unlink(dst);
+#else
+ remove(dst);
+#endif
+ exit (fail);
+}
+ ],[
+ cf_cv_link_funcs="$cf_cv_link_funcs $cf_func"
+ eval 'ac_cv_func_'$cf_func'=yes'
+ CF_UPPER(cf_FUNC,$cf_func)
+ AC_DEFINE_UNQUOTED(HAVE_$cf_FUNC)],[
+ eval 'ac_cv_func_'$cf_func'=no'],[
+ eval 'ac_cv_func_'$cf_func'=error'])
+ done
+ test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no
+ ])
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Some 'make' programs support $(MAKEFLAGS), some $(MFLAGS), to pass 'make'
dnl options to lower-levels. It's very useful for "make -n" -- if we have it.
-dnl (GNU 'make' does both :-)
+dnl (GNU 'make' does both, something POSIX 'make', which happens to make the
+dnl $(MAKEFLAGS) variable incompatible because it adds the assignments :-)
AC_DEFUN([CF_MAKEFLAGS],
[
AC_MSG_CHECKING([for makeflags variable])
AC_CACHE_VAL(cf_cv_makeflags,[
cf_cv_makeflags=''
- for cf_option in '$(MFLAGS)' '-$(MAKEFLAGS)'
+ for cf_option in '-$(MAKEFLAGS)' '$(MFLAGS)'
do
cat >cf_makeflags.tmp <<CF_EOF
all :
- echo '.$cf_option'
+ @ echo '.$cf_option'
CF_EOF
- set cf_result=`${MAKE-make} -f cf_makeflags.tmp 2>/dev/null`
- if test "$cf_result" != "."
- then
- cf_cv_makeflags=$cf_option
+ cf_result=`${MAKE-make} -k -f cf_makeflags.tmp 2>/dev/null`
+ case "$cf_result" in
+ .*k)
+ cf_result=`${MAKE-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`
+ case "$cf_result" in
+ .*CC=*) cf_cv_makeflags=
+ ;;
+ *) cf_cv_makeflags=$cf_option
+ ;;
+ esac
break
- fi
+ ;;
+ *) echo no match "$cf_result"
+ ;;
+ esac
done
rm -f cf_makeflags.tmp])
AC_MSG_RESULT($cf_cv_makeflags)
AC_SUBST(cf_cv_makeflags)
])dnl
dnl ---------------------------------------------------------------------------
-dnl Try to determine if the man-pages on the system are compressed, and if
-dnl so, what format is used. Use this information to construct a script that
-dnl will install man-pages.
-AC_DEFUN([CF_MAN_PAGES],
-[AC_MSG_CHECKING(format of man-pages)
+dnl Option to allow user to override automatic configuration of manpage format.
+dnl There are several special cases.
+AC_DEFUN([CF_MANPAGE_FORMAT],
+[ AC_MSG_CHECKING(format of man-pages)
+
+AC_ARG_WITH(manpage-format,
+ [ --with-manpage-format specify manpage-format: gzip/compress/BSDI/normal and
+ optionally formatted, e.g., gzip,formatted],
+ [cf_manpage_form=$withval],
+ [cf_manpage_form=unknown])
+
+case ".$cf_manpage_form" in
+.gzip|.compress|.BSDI|.normal|.formatted) # (vi
+ ;;
+.unknown|.) # (vi
if test -z "$MANPATH" ; then
MANPATH="/usr/man:/usr/share/man"
fi
# look for the 'date' man-page (it's most likely to be installed!)
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- cf_form=unknown
+ cf_manpage_form=unknown
for cf_dir in $MANPATH; do
test -z "$cf_dir" && cf_dir=/usr/man
- cf_rename=""
- cf_format=no
changequote({{,}})dnl
for cf_name in $cf_dir/*/date.[01]* $cf_dir/*/date
changequote([,])dnl
cf_test=`echo $cf_name | sed -e 's/*//'`
if test "x$cf_test" = "x$cf_name" ; then
case "$cf_name" in
- *.gz) cf_form=gzip; cf_name=`basename $cf_name .gz`;;
- *.Z) cf_form=compress; cf_name=`basename $cf_name .Z`;;
- *.0) cf_form=BSDI; cf_format=yes;;
- *) cf_form=cat;;
+ *.gz) cf_manpage_form=gzip;;
+ *.Z) cf_manpage_form=compress;;
+ *.0) cf_manpage_form=BSDI,formatted;;
+ *) cf_manpage_form=normal;;
esac
break
fi
done
- if test "$cf_form" != "unknown" ; then
+ if test "$cf_manpage_form" != "unknown" ; then
break
fi
done
IFS="$ac_save_ifs"
- if test "$prefix" = "NONE" ; then
- cf_prefix="$ac_default_prefix"
+ ;;
+.*) # (vi
+ AC_MSG_WARN(Unexpected manpage-format)
+ ;;
+esac
+
+AC_MSG_RESULT($cf_manpage_form)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl The Debian people have their own naming convention for manpages. This
+dnl option lets us override the name of the file containing renaming, or
+dnl disable it altogether.
+AC_DEFUN([CF_MANPAGE_RENAMES],
+[
+AC_MSG_CHECKING(for manpage renaming)
+
+AC_ARG_WITH(manpage-renames,
+ [ --with-manpage-renames specify manpage-renaming],
+ [cf_manpage_renames=$withval],
+ [cf_manpage_renames=yes])
+
+case ".$cf_manpage_renames" in #(vi
+.no) #(vi
+ ;;
+.|.yes)
+ # Debian 'man' program?
+ if test -f /etc/debian_version ; then
+ cf_manpage_renames=`cd $srcdir && pwd`/man/man_db.renames
else
- cf_prefix="$prefix"
+ cf_manpage_renames=no
fi
+ ;;
+esac
- # Debian 'man' program?
- test -f /etc/debian_version && \
- cf_rename=`cd $srcdir && pwd`/man/man_db.renames
+if test "$cf_manpage_renames" != no ; then
+ if test ! -f $cf_manpage_renames ; then
+ AC_MSG_ERROR(not a filename: $cf_manpage_renames)
+ fi
test ! -d man && mkdir man
# Construct a sed-script to perform renaming within man-pages
- if test -n "$cf_rename" ; then
- $srcdir/man/make_sed.sh $cf_rename >man/edit_man.sed
+ if test -n "$cf_manpage_renames" ; then
+ test ! -d man && mkdir man
+ $srcdir/man/make_sed.sh $cf_manpage_renames >man/edit_man.sed
fi
- if test $cf_format = yes ; then
- cf_subdir='$mandir/cat'
+fi
+
+AC_MSG_RESULT($cf_manpage_renames)
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Try to determine if the man-pages on the system are compressed, and if
+dnl so, what format is used. Use this information to construct a script that
+dnl will install man-pages.
+AC_DEFUN([CF_MAN_PAGES],
+[
+CF_HELP_MESSAGE(Options to Specify How Manpages are Installed:)
+CF_MANPAGE_FORMAT
+CF_MANPAGE_RENAMES
+
+ if test "$prefix" = "NONE" ; then
+ cf_prefix="$ac_default_prefix"
else
- cf_subdir='$mandir/man'
+ cf_prefix="$prefix"
fi
+ case "$cf_manpage_form" in # (vi
+ *formatted*) # (vi
+ cf_subdir='$mandir/cat'
+ cf_format=yes
+ ;;
+ *)
+ cf_subdir='$mandir/man'
+ cf_format=no
+ ;;
+ esac
+
+test ! -d man && mkdir man
cat >man/edit_man.sh <<CF_EOF
changequote({{,}})dnl
#! /bin/sh
mandir=\{{$}}1
shift
-for i in \{{$}}*
-do
-case \$i in
+for i in \{{$}}* ; do
+case \$i in #(vi
+*.orig|*.rej) ;; #(vi
*.[0-9]*)
section=\`expr "\$i" : '.*\\.\\([0-9]\\)[xm]*'\`;
if test \$verb = installing ; then
fi
source=\`basename \$i\`
CF_EOF
-if test -z "$cf_rename" ; then
+if test "$cf_manpage_renames" = no ; then
cat >>man/edit_man.sh <<CF_EOF
target=$cf_subdir\${section}/\$source
sed -e "s,@DATADIR@,\$datadir," < \$i >\$TMP
CF_EOF
else
cat >>man/edit_man.sh <<CF_EOF
- target=\`grep "^\$source" $cf_rename | $AWK '{print \{{$}}2}'\`
+ target=\`grep "^\$source" $cf_manpage_renames | $AWK '{print \{{$}}2}'\`
if test -z "\$target" ; then
echo '? missing rename for '\$source
target="\$source"
test \$verb = installing && sed -e "s,@DATADIR@,\$datadir," < \$i | sed -f edit_man.sed >\$TMP
CF_EOF
fi
-if test \$verb = installing ; then
if test $cf_format = yes ; then
cat >>man/edit_man.sh <<CF_EOF
nroff -man \$TMP >\$TMP.out
mv \$TMP.out \$TMP
CF_EOF
fi
-fi
-case "$cf_form" in
-compress)
+case "$cf_manpage_form" in #(vi
+*compress*) #(vi
cat >>man/edit_man.sh <<CF_EOF
if test \$verb = installing ; then
if ( compress -f \$TMP )
target="\$target.Z"
CF_EOF
;;
-gzip)
+*gzip*) #(vi
cat >>man/edit_man.sh <<CF_EOF
if test \$verb = installing ; then
if ( gzip -f \$TMP )
target="\$target.gz"
CF_EOF
;;
-BSDI)
+*BSDI*)
cat >>man/edit_man.sh <<CF_EOF
# BSDI installs only .0 suffixes in the cat directories
target="\`echo \$target|sed -e 's/\.[1-9]\+.\?/.0/'\`"
fi
;;
esac
-done
+done
CF_EOF
changequote([,])dnl
chmod 755 man/edit_man.sh
-AC_MSG_RESULT($cf_form)
+
])dnl
dnl ---------------------------------------------------------------------------
dnl Compute the object-directory name from the given model name
esac
])dnl
dnl ---------------------------------------------------------------------------
-dnl Within AC_OUTPUT, check if the given file differs from the target, and
-dnl update it if so. Otherwise, remove the generated file.
-dnl
-dnl Parameters:
-dnl $1 = input, which configure has done substitutions upon
-dnl $2 = target file
-dnl
-AC_DEFUN([CF_OUTPUT_IF_CHANGED],[
-if ( cmp -s $1 $2 2>/dev/null )
-then
- echo "$2 is unchanged"
- rm -f $1
-else
- echo "creating $2"
- rm -f $2
- mv $1 $2
-fi
+dnl Check the argument to see that it looks like a pathname. Rewrite it if it
+dnl begins with one of the prefix/exec_prefix variables, and then again if the
+dnl result begins with 'NONE'. This is necessary to workaround autoconf's
+dnl delayed evaluation of those symbols.
+AC_DEFUN([CF_PATH_SYNTAX],[
+case ".[$]$1" in #(vi
+./*) #(vi
+ ;;
+.\[$]{*prefix}*) #(vi
+ eval $1="[$]$1"
+ case ".[$]$1" in #(vi
+ .NONE/*)
+ $1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@`
+ ;;
+ esac
+ ;; #(vi
+.NONE/*)
+ $1=`echo [$]$1 | sed -e s@NONE@$ac_default_prefix@`
+ ;;
+*)
+ AC_ERROR(expected a pathname)
+ ;;
+esac
+])dnl
+dnl ---------------------------------------------------------------------------
+dnl Compute $PROG_EXT, used for non-Unix ports, such as OS/2 EMX.
+AC_DEFUN([CF_PROG_EXT],
+[
+AC_REQUIRE([CF_CHECK_CACHE])
+PROG_EXT=
+case $cf_cv_system_name in
+os2*)
+ # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@
+ CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__"
+ CXXFLAGS="$CXXFLAGS -Zmt -D__ST_MT_ERRNO__"
+ LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"`
+ PROG_EXT=".exe"
+ ;;
+cygwin*)
+ PROG_EXT=".exe"
+ ;;
+esac
+AC_SUBST(PROG_EXT)
])dnl
dnl ---------------------------------------------------------------------------
dnl Force $INSTALL to be an absolute-path. Otherwise, edit_man.sh and the
esac
])dnl
dnl ---------------------------------------------------------------------------
-dnl This bypasses the normal autoconf process because we're generating an
-dnl arbitrary number of NEED_xxxx definitions with the CF_HAVE_FUNCS macro.
-dnl Rather than populate an aclocal.h file with all of those definitions, we do
-dnl it here.
-dnl
-dnl Parameters:
-dnl $1 = input, which configure has done substitutions upon (will delete)
-dnl $2 = target file
-dnl $3 = preamble, if any (a 'here' document)
-dnl $4 = trailer, if any (a 'here' document)
-dnl
-AC_DEFUN([CF_SED_CONFIG_H],[
-cf_config_h=conf$$
-rm -f $cf_config_h
-## PREAMBLE
-ifelse($3,,[
-echo '/* generated by configure-script */' >$cf_config_h
-],[cat >$cf_config_h <<CF_EOF
-$3[]dnl
-CF_EOF])
-## DEFINITIONS
-if test -n "$ac_cv_path_TD_CONFIG" ; then
- $ac_cv_path_TD_CONFIG $1 |egrep -v '^#' >$cf_config_h
- $ac_cv_path_TD_CONFIG $1 |egrep '^#' | sort >>$cf_config_h
-else
-grep -v '^ -D' $1 >>$cf_config_h
-changequote(,)dnl
-sed -e '/^ -D/!d' \
- -e '/^# /d' \
- -e 's/ -D/\
-#define /g' \
- -e 's/\(#define [A-Za-z_][A-Za-z0-9_]*\)=/\1 /g' \
- -e 's@\\@@g' \
- $1 | sort >>$cf_config_h
-changequote([,])dnl
-fi
-## TRAILER
-ifelse($4,,,
-[cat >>$cf_config_h <<CF_EOF
-$4[]dnl
-CF_EOF])
-CF_OUTPUT_IF_CHANGED($cf_config_h,$2)
-rm -f $1 $cf_config_h
-])dnl
-dnl ---------------------------------------------------------------------------
dnl Attempt to determine the appropriate CC/LD options for creating a shared
dnl library.
dnl
-dnl Note: $(LOCAL_LDFLAGS) is used to link executables that will run within the
+dnl Note: $(LOCAL_LDFLAGS) is used to link executables that will run within the
dnl build-tree, i.e., by making use of the libraries that are compiled in ../lib
dnl We avoid compiling-in a ../lib path for the shared library since that can
dnl lead to unexpected results at runtime.
dnl The variable 'cf_cv_do_symlinks' is used to control whether we configure
dnl to install symbolic links to the rel/abi versions of shared libraries.
dnl
+dnl The variable 'cf_cv_shlib_version' controls whether we use the rel or abi
+dnl version when making symbolic links.
+dnl
dnl Some loaders leave 'so_locations' lying around. It's nice to clean up.
AC_DEFUN([CF_SHARED_OPTS],
[
INSTALL_LIB="-m 644"
cf_cv_do_symlinks=no
+
+ AC_MSG_CHECKING(if release/abi version should be used for shared libs)
+ AC_ARG_WITH(shlib-version,
+ [ --with-shlib-version=X Specify rel or abi version for shared libs],
+ [test -z "$withval" && withval=auto
+ case $withval in #(vi
+ yes) #(vi
+ cf_cv_shlib_version=auto
+ ;;
+ rel|abi|auto|no) #(vi
+ cf_cv_shlib_version=$withval
+ ;;
+ *)
+ AC_ERROR([option value must be one of: rel, abi, auto or no])
+ ;;
+ esac
+ ],[cf_cv_shlib_version=auto])
+ AC_MSG_RESULT($cf_cv_shlib_version)
+
cf_cv_rm_so_locs=no
case $cf_cv_system_name in
+ hpux10.*)
+ # (tested with gcc 2.7.2 -- I don't have c89)
+ if test -n "$GCC"; then
+ CC_SHARED_OPTS='-fPIC'
+ LD_SHARED_OPTS='-Xlinker +b -Xlinker $(libdir)'
+ else
+ CC_SHARED_OPTS='+Z'
+ LD_SHARED_OPTS='-Wl,+b,$(libdir)'
+ fi
+ MK_SHARED_LIB='$(LD) +b $(libdir) -b +h `basename $[@]` -o $[@]'
+ # HP-UX shared libraries must be executable, and should be
+ # readonly to exploit a quirk in the memory manager.
+ INSTALL_LIB="-m 555"
+ cf_cv_do_symlinks=reverse
+ ;;
hpux*)
# (tested with gcc 2.7.2 -- I don't have c89)
- if test "${CC}" = "gcc"; then
+ if test -n "$GCC"; then
CC_SHARED_OPTS='-fPIC'
LD_SHARED_OPTS='-Xlinker +b -Xlinker $(libdir)'
else
CC_SHARED_OPTS='+Z'
- LD_SHARED_OPTS='+b $(libdir)'
+ LD_SHARED_OPTS='-Wl,+b,$(libdir)'
fi
- MK_SHARED_LIB='$(LD) -b -o $[@]'
+ MK_SHARED_LIB='$(LD) +b $(libdir) -b -o $[@]'
# HP-UX shared libraries must be executable, and should be
# readonly to exploit a quirk in the memory manager.
INSTALL_LIB="-m 555"
;;
irix*)
# tested with IRIX 5.2 and 'cc'.
- if test "${CC}" = "gcc"; then
+ if test -n "$GCC"; then
CC_SHARED_OPTS='-fPIC'
else
CC_SHARED_OPTS='-KPIC'
MK_SHARED_LIB='$(LD) -shared -rdata_shared -soname `basename $[@]` -o $[@]'
cf_cv_rm_so_locs=yes
;;
- linux*)
+ linux*|gnu*)
# tested with Linux 2.0.29 and gcc 2.7.2 (ELF)
- CC_SHARED_OPTS='-fPIC'
- MK_SHARED_LIB='gcc -o $[@].$(REL_VERSION) -L../lib -L\$(libdir) -shared -Wl,-soname,`basename $[@].$(ABI_VERSION)`,-stats,$(SHLIB_LIST)-lc'
+ CC_SHARED_OPTS='-fpic'
test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-Wl,-rpath,"
if test $DFT_LWR_MODEL = "shared" ; then
LOCAL_LDFLAGS='-Wl,-rpath,../lib'
LOCAL_LDFLAGS2='-Wl,-rpath,../../lib'
fi
- cf_cv_do_symlinks=yes
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ if test $cf_cv_shlib_version = no ; then
+ MK_SHARED_LIB='$(CC) -shared -Wl,-stats,-lc -o $[@]'
+ else
+ MK_SHARED_LIB='$(CC) -shared -Wl,-soname,`basename $[@].$(ABI_VERSION)`,-stats,-lc -o $[@]'
+ fi
+ ;;
+ openbsd2*)
+ CC_SHARED_OPTS='-fpic -DPIC'
+ MK_SHARED_LIB='$(LD) -Bshareable -soname,`basename $[@].$(ABI_VERSION)` -o $[@]'
;;
- openbsd*|netbsd*|freebsd*)
+ openbsd*|freebsd*)
CC_SHARED_OPTS='-fpic -DPIC'
MK_SHARED_LIB='$(LD) -Bshareable -o $[@]'
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ ;;
+ netbsd*)
+ CC_SHARED_OPTS='-fpic -DPIC'
+ test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-Wl,-rpath,"
+ if test $DFT_LWR_MODEL = "shared" && test $cf_cv_ld_rpath = yes ; then
+ LOCAL_LDFLAGS='-Wl,-rpath,../lib'
+ LOCAL_LDFLAGS2='-Wl,-rpath,../../lib'
+ EXTRA_LDFLAGS="-Wl,-rpath,\$(libdir) $EXTRA_LDFLAGS"
+ MK_SHARED_LIB='$(CC) -shared -Wl,-soname,`basename $[@].$(ABI_VERSION)` -o $[@]'
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ else
+ MK_SHARED_LIB='$(LD) -Bshareable -o $[@]'
+ fi
;;
osf*|mls+*)
# tested with OSF/1 V3.2 and 'cc'
# tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't
# link with shared libs).
CC_SHARED_OPTS=''
- MK_SHARED_LIB='$(LD) -o $[@].$(REL_VERSION) -set_version $(ABI_VERSION):$(REL_VERSION) -expect_unresolved "*" -shared -soname `basename $[@].$(ABI_VERSION)`'
+ MK_SHARED_LIB='$(LD) -set_version $(REL_VERSION):$(ABI_VERSION) -expect_unresolved "*" -shared -soname `basename $[@]`'
test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-rpath"
case $host_os in
osf4*)
MK_SHARED_LIB="${MK_SHARED_LIB} -msym"
;;
esac
+ MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $[@]'
if test $DFT_LWR_MODEL = "shared" ; then
LOCAL_LDFLAGS='-Wl,-rpath,../lib'
LOCAL_LDFLAGS2='-Wl,-rpath,../../lib'
fi
- cf_cv_do_symlinks=yes
cf_cv_rm_so_locs=yes
;;
+ sco3.2v5*) # (also uw2* and UW7) hops 13-Apr-98
+ # tested with osr5.0.5
+ if test $ac_cv_prog_gcc = yes; then
+ CC_SHARED_OPTS='-fpic'
+ else
+ CC_SHARED_OPTS='-belf -KPIC'
+ fi
+ MK_SHARED_LIB='$(LD) -dy -G -h `basename [$]@.$(ABI_VERSION)` -o [$]@'
+ if test $cf_cv_ld_rpath = yes ; then
+ # only way is to set LD_RUN_PATH but no switch for it
+ RUN_PATH=$libdir
+ fi
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ LINK_PROGS='LD_RUN_PATH=$(libdir)'
+ LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib'
+ ;;
sunos4*)
# tested with SunOS 4.1.1 and gcc 2.7.0
if test $ac_cv_prog_gcc = yes; then
else
CC_SHARED_OPTS='-KPIC'
fi
- MK_SHARED_LIB='$(LD) -assert pure-text -o $[@].$(REL_VERSION)'
- cf_cv_do_symlinks=yes
+ MK_SHARED_LIB='$(LD) -assert pure-text -o $[@]'
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
;;
solaris2*)
# tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2
else
CC_SHARED_OPTS='-KPIC'
fi
- MK_SHARED_LIB='$(LD) -dy -G -h `basename $[@].$(ABI_VERSION)` -o $[@].$(REL_VERSION)'
+ MK_SHARED_LIB='$(LD) -dy -G -h `basename $[@].$(ABI_VERSION)` -o $[@]'
if test $cf_cv_ld_rpath = yes ; then
cf_ld_rpath_opt="-R"
EXTRA_LDFLAGS="-R ../lib:\$(libdir) $EXTRA_LDFLAGS"
fi
- cf_cv_do_symlinks=yes
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
;;
unix_sv*)
# tested with UnixWare 1.1.2
;;
esac
+ # This works if the last tokens in $MK_SHARED_LIB are the -o target.
+ case "$cf_cv_shlib_version" in #(vi
+ rel|abi)
+ case "$MK_SHARED_LIB" in #(vi
+ *'-o $[@]')
+ if test "$cf_cv_do_symlinks" = reverse ; then
+ AC_ERROR(cannot use --with-shlib-version with this platform)
+ fi
+ if test "$cf_cv_shlib_version" = rel ; then
+ MK_SHARED_LIB="$MK_SHARED_LIB"'.$(REL_VERSION)'
+ else
+ MK_SHARED_LIB="$MK_SHARED_LIB"'.$(ABI_VERSION)'
+ fi
+ cf_cv_do_symlinks=yes
+ ;;
+ *)
+ AC_MSG_WARN(ignored --with-shlib-version)
+ ;;
+ esac
+ ;;
+ esac
+
if test -n "$cf_ld_rpath_opt" ; then
AC_MSG_CHECKING(if we need a space after rpath option)
cf_save_LIBS="$LIBS"
AC_SUBST(CC_SHARED_OPTS)
AC_SUBST(LD_SHARED_OPTS)
AC_SUBST(MK_SHARED_LIB)
+ AC_SUBST(LINK_PROGS)
+ AC_SUBST(LINK_TESTS)
AC_SUBST(EXTRA_LDFLAGS)
AC_SUBST(LOCAL_LDFLAGS)
AC_SUBST(LOCAL_LDFLAGS2)
dnl sys/types.h or termios.h
AC_DEFUN([CF_SPEED_TYPE],
[
-AC_MSG_CHECKING([for speed_t])
-AC_CACHE_VAL(cf_cv_type_speed_t,[
- AC_TRY_COMPILE([
-#include <sys/types.h>
-#if HAVE_TERMIOS_H
-#include <termios.h>
-#endif],
- [speed_t x = 0],
- [cf_cv_type_speed_t=yes],
- [cf_cv_type_speed_t=no])
- ])
-AC_MSG_RESULT($cf_cv_type_speed_t)
-test $cf_cv_type_speed_t != yes && AC_DEFINE(speed_t,unsigned)
+AC_MSG_CHECKING(for speed_t)
+OSPEED_INCLUDES=
+AC_TRY_COMPILE([#include <sys/types.h>],
+ [speed_t some_variable = 0],
+ [OSPEED_TYPE=speed_t],
+ [OSPEED_TYPE=unsigned])
+AC_TRY_COMPILE([#include <termios.h>],
+ [speed_t some_variable = 0],
+ [OSPEED_TYPE=speed_t
+ OSPEED_INCLUDES="#include <termios.h>"],[])
+AC_SUBST(OSPEED_TYPE)
+AC_SUBST(OSPEED_INCLUDES)
+if test "$OSPEED_TYPE" = "unsigned" ; then
+ AC_MSG_RESULT(no)
+ AC_DEFINE(speed_t,unsigned)
+else
+ AC_MSG_RESULT(yes)
+fi
])dnl
dnl ---------------------------------------------------------------------------
dnl For each parameter, test if the source-directory exists, and if it contains
SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir"
done
SRC_SUBDIRS="$SRC_SUBDIRS misc test"
-test $cf_cxx_library != no && SRC_SUBDIRS="$SRC_SUBDIRS c++"
+test $cf_with_cxx_binding != no && SRC_SUBDIRS="$SRC_SUBDIRS c++"
ADA_SUBDIRS=
-if test "$ac_cv_prog_gnat_correct" = yes && test -d $srcdir/Ada95; then
+if test "$cf_cv_prog_gnat_correct" = yes && test -d $srcdir/Ada95; then
SRC_SUBDIRS="$SRC_SUBDIRS Ada95"
- ADA_SUBDIRS="gen ada_include samples"
+ ADA_SUBDIRS="gen src samples"
fi
SUB_MAKEFILES=
if test -n "$ADA_SUBDIRS"; then
for cf_dir in $ADA_SUBDIRS
- do
+ do
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/$cf_dir/Makefile"
done
AC_SUBST(ADA_SUBDIRS)
fi
])dnl
dnl ---------------------------------------------------------------------------
+dnl Check for -lstdc++, which is GNU's standard C++ library.
+AC_DEFUN([CF_STDCPP_LIBRARY],
+[
+if test -n "$GXX" ; then
+case $cf_cv_system_name in #(vi
+os2*) #(vi
+ cf_stdcpp_libname=stdcpp
+ ;;
+*)
+ cf_stdcpp_libname=stdc++
+ ;;
+esac
+AC_CACHE_CHECK(for library $cf_stdcpp_libname,cf_cv_libstdcpp,[
+ cf_save="$LIBS"
+ LIBS="$LIBS -l$cf_stdcpp_libname -lm"
+AC_TRY_LINK([
+#include <strstream.h>],[
+char buf[80];
+strstreambuf foo(buf, sizeof(buf))
+//destroy foo
+],
+ [cf_cv_libstdcpp=yes],
+ [cf_cv_libstdcpp=no])
+ LIBS="$cf_save"
+])
+test $cf_cv_libstdcpp = yes && CXXLIBS="$CXXLIBS -l$cf_stdcpp_libname"
+fi
+])dnl
+dnl ---------------------------------------------------------------------------
dnl Remove "-g" option from the compiler options
AC_DEFUN([CF_STRIP_G_OPT],
[$1=`echo ${$1} | sed -e 's/-g //' -e 's/-g$//'`])dnl
dnl We need these values in the generated makefiles
AC_SUBST(cf_cv_rel_version)
AC_SUBST(cf_cv_abi_version)
+AC_SUBST(cf_cv_cc_bool_type)
AC_SUBST(cf_cv_builtin_bool)
-AC_SUBST(cf_cv_type_of_bool)
+AC_SUBST(cf_cv_type_of_bool)dnl
])dnl
dnl ---------------------------------------------------------------------------
dnl Check if we can include <sys/time.h> with <sys/select.h>; this breaks on
AC_DEFUN([CF_WITH_PATH],
[AC_ARG_WITH($1,[$2 ](default: ifelse($4,,empty,$4)),,
ifelse($4,,[withval="${$3}"],[withval="${$3-ifelse($5,,$4,$5)}"]))dnl
-case ".$withval" in #(vi
-./*) #(vi
- ;;
-.\[$]{*prefix}*) #(vi
- eval withval="$withval"
- case ".$withval" in #(vi
- .NONE/*)
- withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
- ;;
- esac
- ;; #(vi
-.NONE/*)
- withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
- ;;
-*)
- AC_ERROR(expected a pathname for $1)
- ;;
-esac
+CF_PATH_SYNTAX(withval)
eval $3="$withval"
AC_SUBST($3)dnl
])dnl
+dnl ---------------------------------------------------------------------------
+dnl Process an option specifying a list of colon-separated paths.
+dnl
+dnl $1 = option name
+dnl $2 = help-text
+dnl $3 = environment variable to set
+dnl $4 = default value, shown in the help-message, must be a constant
+dnl $5 = default value, if it's an expression & cannot be in the help-message
+dnl
+AC_DEFUN([CF_WITH_PATHLIST],[
+AC_ARG_WITH($1,[$2 ](default: ifelse($4,,empty,$4)),,
+ifelse($4,,[withval="${$3}"],[withval="${$3-ifelse($5,,$4,$5)}"]))dnl
+
+IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+cf_dst_path=
+for cf_src_path in $withval
+do
+ CF_PATH_SYNTAX(cf_src_path)
+ test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}:"
+ cf_dst_path="${cf_dst_path}${cf_src_path}"
+done
+IFS="$ac_save_ifs"
+
+eval $3="$cf_dst_path"
+AC_SUBST($3)dnl
+])dnl
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<!--
- $Id: announce.html,v 1.23 1998/02/28 23:21:12 tom Exp $
+ $Id: announce.html,v 1.34 1999/10/23 21:13:11 tom Exp $
-->
<HTML>
<HEAD>
-<TITLE>Announcing ncurses 4.2</TITLE>
+<TITLE>Announcing ncurses 5.0</TITLE>
<link rev=made href="mailto:bug-ncurses@gnu.org">
</HEAD>
<BODY>
-<H1>Announcing ncurses 4.2</H1>
+<H1>Announcing ncurses 5.0</H1>
-The ncurses (new curses) library is a freeware emulation of System V
-Release 4.0 curses. It uses terminfo format, supports pads and color
+The ncurses (new curses) library is a free software emulation of
+curses in System V Release 4.0, 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 SYSV-curses enhancements over BSD curses.<P>
Unix releases such as BSD/OS, freeBSD and netBSD to switch over to
ncurses.<P>
-The ncurses code was developed under Linux. It should port easily to
+The ncurses code was developed under GNU/Linux. It should port easily to
any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!<P>
The distribution includes the library and support utilities, including a
The ncurses distribution is available via anonymous FTP at
the GNU distribution site
-<A HREF="ftp://prep.ai.mit.edu/pub/gnu">ftp://prep.ai.mit.edu/pub/gnu</A>.
+<A HREF="ftp://ftp.gnu.org/pub/gnu/ncurses">ftp://ftp.gnu.org/pub/gnu/ncurses</A>.
It is also available at
<A HREF="ftp://ftp.clark.net/pub/dickey/ncurses">ftp://ftp.clark.net/pub/dickey/ncurses</A>.
-<H1>Features of ncurses</H1>
+<H1>Release Notes</H1>
-The ncurses package is fully compatible with SVr4 (System V Release 4) curses:<P>
+We decided to release ncurses as a new whole number release (5.0) because it
+incorporates several interface changes, including some that would invalidate
+existing shared libraries. These are the highlights from the change-log
+since ncurses 4.2 release.
+<p>
+Interface changes:
+<ul>
+ <li>The principal source of changes to the interface comes from the
+ release of X/Open Curses in 1997. Earlier versions of ncurses (4.0
+ and before) were based on a draft version of the specification. The
+ release version adds parameters to some functions to support the
+ evolving internationalization of curses. These summarize the impact:
+<ul>
+ <li>modified several prototypes to correspond with 1997 version of
+ X/Open Curses (affects ABI since developers have used attr_get).
+
+ <li>corrected prototypes for slk_* functions, using chtype rather than
+ attr_t.
+
+ <li>the slk_attr_{set,off,on} functions need an additional void*
+ parameter according to XSI.
+
+ <li>correct macros for wattr_set, wattr_get, separate wattrset macro from
+ these to preserve behavior that allows attributes to be combined with
+ color pair numbers.
+
+ <li>reviewed/updated curses.h, term.h against X/Open Curses Issue 4
+ Version 2. This includes making some parameters NCURSES_CONST
+ rather than const, e.g., in termcap.h.
+
+ <li>reviewed/corrected macros in curses.h as per XSI document.
+
+ <li>add set_a_attributes and set_pglen_inch to terminfo structure, as per
+ XSI and Solaris 2.5.
+</ul>
+ <li>The newest version of the X/Open Curses is implemented on Solaris
+ and other vendor's systems. It adds new features to the terminfo
+ descriptions:
+<ul>
+ <li>implement tparm %l format.
+
+ <li>implement tparm printf-style width and precision for %s, %d, %x, %o
+ as per XSI.
+</ul>
+ <li>We made additional changes to reduce impact by future interface
+ changes:
+<ul>
+ <li>rename key_names[] array to _nc_key_names since it is not part of
+ the curses interface.
+
+ <li>move macro winch to a function, to hide details of struct ldat
+</ul>
+ <li>modify configure script to embed ABI in shared libraries for HP-UX
+ 10.x (detailed request by Tim Mooney).
+
+ <li>modify configuration of shared libraries on Digital Unix so that
+ versioning is embedded in the library, rather than implied by
+ links (patch by Tim Mooney).
+</ul>
+New features:
+<ul>
+ <li>enable sigwinch handler by default.
+
+ <li>turn on hashmap scrolling code by default
+
+ <li>improved support for termcap applications
+<ul>
+ <li>modify tput to accept termcap names as an alternative to terminfo
+ names.
+
+ <li>provide support for termcap PC variable by copying it from terminfo
+ data and using it as the padding character in tputs.
+
+ <li>provide support for termcap ospeed variable by copying it from the
+ internal cur_term member, and using ospeed as the baudrate
+ reference for the delay_output and tputs functions.
+
+ <li>change name-comparisons in lib_termcap to compare no more than 2
+ characters.
+
+ <li>add configure option --enable-tcap-names, which essentially
+ allows users to define new capabilities as in termcap.
+</ul>
+ <li>add mouse support to ncurses menus.
+
+ <li>add mouse and dll support for OS/2 EMX
+
+ <li>modify terminfo parsing to accept octal and hexadecimal constants
+
+ <li>add configure option --enable-no-padding, to allow environment
+ variable $NCURSES_NO_PADDING to eliminate non-mandatory padding,
+ thereby making terminal emulators (e.g., for vt100) a little more
+ efficient.
+
+ <li>modify lib_color.c to eliminate dependency on orig_colors and
+ orig_pair, since SVr4 curses does not require these either, but
+ uses them when they are available.
+
+ <li>add -f option to infocmp and tic, which formats the terminfo
+ if/then/else/endif so that they are readable (with newlines and
+ tabs).
+
+ <li>modify tic to compile into %'char' form in preference to %{number},
+ since that is a little more efficient.
+</ul>
+Major bug fixes:
+<ul>
+ <li>modify lib_tstp.c to block SIGTTOU when handling SIGTSTP, fixes a
+ problem where ncurses applications which were run via a shell script
+ would hang when given a ^Z. Also, check if the terminal's process
+ group is consistent, i.e., a shell has not taken ownership of it,
+ before deciding to save the current terminal settings in the SIGTSTP
+ handler.
+
+ <li>suppress sc/rc capabilities from terminal description if they appear
+ in smcup/rmcup. This affects only scrolling optimization, to fix a
+ problem reported by several people with xterm's alternate screen,
+ though the problem is more general.
+
+ <li>modify relative_move and tputs to avoid an interaction with the
+ BSD-style padding. The relative_move function could produce a string
+ to replace on the screen which began with a numeric character, which
+ was then interpreted by tputs as padding.
+
+ <li>modify setupterm so that cancelled strings are treated the same as
+ absent strings, cancelled and absent booleans false (does not affect
+ tic, infocmp).
+
+ <li>modify lib_vidattr.c to allow for terminal types (e.g., xterm-color)
+ which may reset all attributes in the 'op' capability, so that colors
+ are set before turning on bold and other attributes, but still after
+ turning attributes off.
+
+ <li>use 'access()' to check if ncurses library should be permitted to
+ open or modify files with fopen/open/link/unlink/remove calls, in
+ case the calling application is running in setuid mode.
+
+ <li>correction to doupdate, for case where terminal does not support
+ insert/delete character. The logic did not check that there was a
+ difference in alignment of changes to old/new screens before
+ repainting the whole non-blank portion of the line. Modified to fall
+ through into logic that reduces by the portion which does not differ.
+</ul>
+
+<H1>Features of Ncurses</H1>
+
+The ncurses package is fully compatible with SVr4 (System V Release 4) curses:
<UL>
<LI>All 257 of the SVr4 calls have been implemented (and are documented).
<LI>Full support for SVr4 curses features including keyboard mapping, color,
forms-drawing with ACS characters, and automatic recognition of keypad
and function keys.
-<LI>An emulation of the SVr4 panels library, supporting
+<LI>An emulation of the SVr4 panels library, supporting
a stack of windows with backing store, is included.
-<LI>An emulation of the SVr4 menus library, supporting
+<LI>An emulation of the SVr4 menus library, supporting
a uniform but flexible interface for menu programming, is included.
-<LI>An emulation of the SVr4 form library, supporting
+<LI>An emulation of the SVr4 form library, supporting
data collection through on-screen forms, is included.
<LI>Binary terminfo entries generated by the ncurses tic(1) implementation
are bit-for-bit-compatible with the entry format SVr4 curses uses.
entries for use with less capable <STRONG>curses</STRONG>/<STRONG>terminfo</STRONG>
versions such as the HP/UX and AIX ports.</UL>
-The ncurses package also has many useful extensions over SVr4:<P>
+The ncurses package also has many useful extensions over SVr4:
<UL>
<LI>The API is 8-bit clean and base-level conformant with the X/OPEN curses
-specification, XSI Curses (that is, it implements all BASE level features,
+specification, XSI curses (that is, it implements all BASE level features,
but not all EXTENDED features). Most EXTENDED-level features not directly
concerned with wide-character support are implemented, including many
function calls not supported under SVr4 curses (but portability of all
calls is documented so you can use the SVr4 subset only).
-<LI>Unlike SVr4 curses, ncurses can write to the rightmost-bottommost corner
+<LI>Unlike SVr3 curses, ncurses can write to the rightmost-bottommost corner
of the screen if your terminal has an insert-character capability.
-<LI>(PC-clone boxes only) Support for access to the IBM PC ROM characters
-0-32 through the highlight A_ALTCHARSET.
<LI>Ada95 and C++ bindings.
-<LI>Support for mouse event reporting under xterm.
+<LI>Support for mouse event reporting with X Window xterm and OS/2 console windows.
<LI>Extended mouse support via Alessandro Rubini's gpm package.
<LI>The function <CODE>wresize()</CODE> allows you to resize windows, preserving
their data.
automatically shift highlight boundaries when doing so would make it
possible to draw the highlight without changing the visual appearance
of the screen.
-<LI>It is possible to generate the library with a list of pre-loaded
+<LI>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).
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.
-<LI>You may specify a path of directories to search for compiled
+<LI>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.)
<LI>In terminfo source files, use capabilities may refer not just to
<H1>State of the Package</H1>
Numerous bugs present in earlier versions have been fixed; the
-library is far more reliable than it used to be. Bounds checking in many
-`dangerous' entry points has been improved. The code is now type-safe
+library is far more reliable than it used to be. Bounds checking in many
+`dangerous' entry points has been improved. The code is now type-safe
according to gcc -Wall. The library has been checked for malloc leaks and
arena corruption by the Purify memory-allocation tester.<P>
The ncurses code has been tested with a wide variety of applications
-including:<P>
+including (versions starting with those noted):
<DL>
+<DT> cdk
+<DD> Curses Development Kit
+<A HREF="http://www.vexus.ca/CDK.html">Curses Development Kit</a>
+<A HREF="ftp://ftp.clark.net/pub/dickey/cdk">ftp://ftp.clark.net/pub/dickey/cdk</A>.
<DT> ded
<DD> directory-editor
<A HREF="ftp://ftp.clark.net/pub/dickey/ded">ftp://ftp.clark.net/pub/dickey/ded</A>.
<DT> dialog
<DD> the underlying application used in Slackware's setup, and the basis
-for similar applications on Linux.
-<DT> lynx-2.7
+for similar applications on GNU/Linux.
+<DT> lynx
<DD> the character-screen WWW browser
<DT> Midnight Commander 4.1
<DD> file manager
-<DT> mutt 0.88
+<DT> mutt
<DD> mail utility
-<DT> ncftp 2.0
+<DT> ncftp
<DD> file-transfer utility
<DT> nvi
<DD> New vi versions 1.50 are able to use ncurses versions 1.9.7 and later.
+<DT> tin
+<DD> newsreader, supporting color, MIME
+<A HREF="ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff">ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff</A>.
<DT> taper
<DD> tape archive utility
<DT> vh-1.6
</DL>
as well as some that use ncurses for the terminfo support alone:
<DL>
-<DT> minicom-1.75
+<DT> minicom
<DD> terminal emulator
-<DT> tin-unoff
-<DD> tin 1.4 newsreader, supporting color, MIME
-<A HREF="ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff">ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff</A>.
<DT> vile
<DD> vi-like-emacs
<A HREF="ftp://ftp.clark.net/pub/dickey/vile">ftp://ftp.clark.net/pub/dickey/vile</A>.
Ongoing work is being done by
<A HREF="mailto:dickey@clark.net">Thomas Dickey</A>
and
-<A HREF="mailto:Juergen.Pfeifer@T-Online.de">Jürgen Pfeifer</A>.
-<A HREF="mailto:florian@gnu.org">Florian La Roche</A>
+<A HREF="mailto:juergen.pfeifer@gmx.net">Jürgen Pfeifer</A>.
+<A HREF="mailto:dickey@clark.net">Thomas Dickey</A>
acts as the maintainer for the Free Software Foundation, which holds the
copyright on ncurses.
Contact the current maintainers at
<LI>Extended-level XPG4 conformance, with internationalization support.
<LI>Ports to more systems, including DOS and Windows.
</UL>
-We need people to help with these projects. If you are interested in working
+We need people to help with these projects. If you are interested in working
on them, please join the ncurses list.
<H2>Other Related Resources</H2>
archive</A>.
</BODY>
</HTML>
-<!--
+<!--
# The following sets edit modes for GNU EMACS
# Local Variables:
# mode:html
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<!--
- $Id: announce.html.in,v 1.24 1998/02/28 23:16:48 tom Exp $
+ $Id: announce.html.in,v 1.34 1999/10/23 20:52:29 tom Exp $
-->
<HTML>
<HEAD>
<H1>Announcing ncurses @VERSION@</H1>
-The ncurses (new curses) library is a freeware emulation of System V
-Release 4.0 curses. It uses terminfo format, supports pads and color
+The ncurses (new curses) library is a free software emulation of
+curses in System V Release 4.0, 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 SYSV-curses enhancements over BSD curses.<P>
Unix releases such as BSD/OS, freeBSD and netBSD to switch over to
ncurses.<P>
-The ncurses code was developed under Linux. It should port easily to
+The ncurses code was developed under GNU/Linux. It should port easily to
any ANSI/POSIX-conforming UNIX. It has even been ported to OS/2 Warp!<P>
The distribution includes the library and support utilities, including a
The ncurses distribution is available via anonymous FTP at
the GNU distribution site
-<A HREF="ftp://prep.ai.mit.edu/pub/gnu">ftp://prep.ai.mit.edu/pub/gnu</A>.
+<A HREF="ftp://ftp.gnu.org/pub/gnu/ncurses">ftp://ftp.gnu.org/pub/gnu/ncurses</A>.
It is also available at
<A HREF="ftp://ftp.clark.net/pub/dickey/ncurses">ftp://ftp.clark.net/pub/dickey/ncurses</A>.
-<H1>Features of ncurses</H1>
+<H1>Release Notes</H1>
-The ncurses package is fully compatible with SVr4 (System V Release 4) curses:<P>
+We decided to release ncurses as a new whole number release (5.0) because it
+incorporates several interface changes, including some that would invalidate
+existing shared libraries. These are the highlights from the change-log
+since ncurses 4.2 release.
+<p>
+Interface changes:
+<ul>
+ <li>The principal source of changes to the interface comes from the
+ release of X/Open Curses in 1997. Earlier versions of ncurses (4.0
+ and before) were based on a draft version of the specification. The
+ release version adds parameters to some functions to support the
+ evolving internationalization of curses. These summarize the impact:
+<ul>
+ <li>modified several prototypes to correspond with 1997 version of
+ X/Open Curses (affects ABI since developers have used attr_get).
+
+ <li>corrected prototypes for slk_* functions, using chtype rather than
+ attr_t.
+
+ <li>the slk_attr_{set,off,on} functions need an additional void*
+ parameter according to XSI.
+
+ <li>correct macros for wattr_set, wattr_get, separate wattrset macro from
+ these to preserve behavior that allows attributes to be combined with
+ color pair numbers.
+
+ <li>reviewed/updated curses.h, term.h against X/Open Curses Issue 4
+ Version 2. This includes making some parameters NCURSES_CONST
+ rather than const, e.g., in termcap.h.
+
+ <li>reviewed/corrected macros in curses.h as per XSI document.
+
+ <li>add set_a_attributes and set_pglen_inch to terminfo structure, as per
+ XSI and Solaris 2.5.
+</ul>
+ <li>The newest version of the X/Open Curses is implemented on Solaris
+ and other vendor's systems. It adds new features to the terminfo
+ descriptions:
+<ul>
+ <li>implement tparm %l format.
+
+ <li>implement tparm printf-style width and precision for %s, %d, %x, %o
+ as per XSI.
+</ul>
+ <li>We made additional changes to reduce impact by future interface
+ changes:
+<ul>
+ <li>rename key_names[] array to _nc_key_names since it is not part of
+ the curses interface.
+
+ <li>move macro winch to a function, to hide details of struct ldat
+</ul>
+ <li>modify configure script to embed ABI in shared libraries for HP-UX
+ 10.x (detailed request by Tim Mooney).
+
+ <li>modify configuration of shared libraries on Digital Unix so that
+ versioning is embedded in the library, rather than implied by
+ links (patch by Tim Mooney).
+</ul>
+New features:
+<ul>
+ <li>enable sigwinch handler by default.
+
+ <li>turn on hashmap scrolling code by default
+
+ <li>improved support for termcap applications
+<ul>
+ <li>modify tput to accept termcap names as an alternative to terminfo
+ names.
+
+ <li>provide support for termcap PC variable by copying it from terminfo
+ data and using it as the padding character in tputs.
+
+ <li>provide support for termcap ospeed variable by copying it from the
+ internal cur_term member, and using ospeed as the baudrate
+ reference for the delay_output and tputs functions.
+
+ <li>change name-comparisons in lib_termcap to compare no more than 2
+ characters.
+
+ <li>add configure option --enable-tcap-names, which essentially
+ allows users to define new capabilities as in termcap.
+</ul>
+ <li>add mouse support to ncurses menus.
+
+ <li>add mouse and dll support for OS/2 EMX
+
+ <li>modify terminfo parsing to accept octal and hexadecimal constants
+
+ <li>add configure option --enable-no-padding, to allow environment
+ variable $NCURSES_NO_PADDING to eliminate non-mandatory padding,
+ thereby making terminal emulators (e.g., for vt100) a little more
+ efficient.
+
+ <li>modify lib_color.c to eliminate dependency on orig_colors and
+ orig_pair, since SVr4 curses does not require these either, but
+ uses them when they are available.
+
+ <li>add -f option to infocmp and tic, which formats the terminfo
+ if/then/else/endif so that they are readable (with newlines and
+ tabs).
+
+ <li>modify tic to compile into %'char' form in preference to %{number},
+ since that is a little more efficient.
+</ul>
+Major bug fixes:
+<ul>
+ <li>modify lib_tstp.c to block SIGTTOU when handling SIGTSTP, fixes a
+ problem where ncurses applications which were run via a shell script
+ would hang when given a ^Z. Also, check if the terminal's process
+ group is consistent, i.e., a shell has not taken ownership of it,
+ before deciding to save the current terminal settings in the SIGTSTP
+ handler.
+
+ <li>suppress sc/rc capabilities from terminal description if they appear
+ in smcup/rmcup. This affects only scrolling optimization, to fix a
+ problem reported by several people with xterm's alternate screen,
+ though the problem is more general.
+
+ <li>modify relative_move and tputs to avoid an interaction with the
+ BSD-style padding. The relative_move function could produce a string
+ to replace on the screen which began with a numeric character, which
+ was then interpreted by tputs as padding.
+
+ <li>modify setupterm so that cancelled strings are treated the same as
+ absent strings, cancelled and absent booleans false (does not affect
+ tic, infocmp).
+
+ <li>modify lib_vidattr.c to allow for terminal types (e.g., xterm-color)
+ which may reset all attributes in the 'op' capability, so that colors
+ are set before turning on bold and other attributes, but still after
+ turning attributes off.
+
+ <li>use 'access()' to check if ncurses library should be permitted to
+ open or modify files with fopen/open/link/unlink/remove calls, in
+ case the calling application is running in setuid mode.
+
+ <li>correction to doupdate, for case where terminal does not support
+ insert/delete character. The logic did not check that there was a
+ difference in alignment of changes to old/new screens before
+ repainting the whole non-blank portion of the line. Modified to fall
+ through into logic that reduces by the portion which does not differ.
+</ul>
+
+<H1>Features of Ncurses</H1>
+
+The ncurses package is fully compatible with SVr4 (System V Release 4) curses:
<UL>
<LI>All 257 of the SVr4 calls have been implemented (and are documented).
<LI>Full support for SVr4 curses features including keyboard mapping, color,
forms-drawing with ACS characters, and automatic recognition of keypad
and function keys.
-<LI>An emulation of the SVr4 panels library, supporting
+<LI>An emulation of the SVr4 panels library, supporting
a stack of windows with backing store, is included.
-<LI>An emulation of the SVr4 menus library, supporting
+<LI>An emulation of the SVr4 menus library, supporting
a uniform but flexible interface for menu programming, is included.
-<LI>An emulation of the SVr4 form library, supporting
+<LI>An emulation of the SVr4 form library, supporting
data collection through on-screen forms, is included.
<LI>Binary terminfo entries generated by the ncurses tic(1) implementation
are bit-for-bit-compatible with the entry format SVr4 curses uses.
entries for use with less capable <STRONG>curses</STRONG>/<STRONG>terminfo</STRONG>
versions such as the HP/UX and AIX ports.</UL>
-The ncurses package also has many useful extensions over SVr4:<P>
+The ncurses package also has many useful extensions over SVr4:
<UL>
<LI>The API is 8-bit clean and base-level conformant with the X/OPEN curses
-specification, XSI Curses (that is, it implements all BASE level features,
+specification, XSI curses (that is, it implements all BASE level features,
but not all EXTENDED features). Most EXTENDED-level features not directly
concerned with wide-character support are implemented, including many
function calls not supported under SVr4 curses (but portability of all
calls is documented so you can use the SVr4 subset only).
-<LI>Unlike SVr4 curses, ncurses can write to the rightmost-bottommost corner
+<LI>Unlike SVr3 curses, ncurses can write to the rightmost-bottommost corner
of the screen if your terminal has an insert-character capability.
-<LI>(PC-clone boxes only) Support for access to the IBM PC ROM characters
-0-32 through the highlight A_ALTCHARSET.
<LI>Ada95 and C++ bindings.
-<LI>Support for mouse event reporting under xterm.
+<LI>Support for mouse event reporting with X Window xterm and OS/2 console windows.
<LI>Extended mouse support via Alessandro Rubini's gpm package.
<LI>The function <CODE>wresize()</CODE> allows you to resize windows, preserving
their data.
automatically shift highlight boundaries when doing so would make it
possible to draw the highlight without changing the visual appearance
of the screen.
-<LI>It is possible to generate the library with a list of pre-loaded
+<LI>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).
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.
-<LI>You may specify a path of directories to search for compiled
+<LI>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.)
<LI>In terminfo source files, use capabilities may refer not just to
<H1>State of the Package</H1>
Numerous bugs present in earlier versions have been fixed; the
-library is far more reliable than it used to be. Bounds checking in many
-`dangerous' entry points has been improved. The code is now type-safe
+library is far more reliable than it used to be. Bounds checking in many
+`dangerous' entry points has been improved. The code is now type-safe
according to gcc -Wall. The library has been checked for malloc leaks and
arena corruption by the Purify memory-allocation tester.<P>
The ncurses code has been tested with a wide variety of applications
-including:<P>
+including (versions starting with those noted):
<DL>
+<DT> cdk
+<DD> Curses Development Kit
+<A HREF="http://www.vexus.ca/CDK.html">Curses Development Kit</a>
+<A HREF="ftp://ftp.clark.net/pub/dickey/cdk">ftp://ftp.clark.net/pub/dickey/cdk</A>.
<DT> ded
<DD> directory-editor
<A HREF="ftp://ftp.clark.net/pub/dickey/ded">ftp://ftp.clark.net/pub/dickey/ded</A>.
<DT> dialog
<DD> the underlying application used in Slackware's setup, and the basis
-for similar applications on Linux.
-<DT> lynx-2.7
+for similar applications on GNU/Linux.
+<DT> lynx
<DD> the character-screen WWW browser
<DT> Midnight Commander 4.1
<DD> file manager
-<DT> mutt 0.88
+<DT> mutt
<DD> mail utility
-<DT> ncftp 2.0
+<DT> ncftp
<DD> file-transfer utility
<DT> nvi
<DD> New vi versions 1.50 are able to use ncurses versions 1.9.7 and later.
+<DT> tin
+<DD> newsreader, supporting color, MIME
+<A HREF="ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff">ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff</A>.
<DT> taper
<DD> tape archive utility
<DT> vh-1.6
</DL>
as well as some that use ncurses for the terminfo support alone:
<DL>
-<DT> minicom-1.75
+<DT> minicom
<DD> terminal emulator
-<DT> tin-unoff
-<DD> tin 1.4 newsreader, supporting color, MIME
-<A HREF="ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff">ftp://ftp.akk.uni-karlsruhe.de/pub/news/clients/tin-unoff</A>.
<DT> vile
<DD> vi-like-emacs
<A HREF="ftp://ftp.clark.net/pub/dickey/vile">ftp://ftp.clark.net/pub/dickey/vile</A>.
Ongoing work is being done by
<A HREF="mailto:dickey@clark.net">Thomas Dickey</A>
and
-<A HREF="mailto:Juergen.Pfeifer@T-Online.de">Jürgen Pfeifer</A>.
-<A HREF="mailto:florian@gnu.org">Florian La Roche</A>
+<A HREF="mailto:juergen.pfeifer@gmx.net">Jürgen Pfeifer</A>.
+<A HREF="mailto:dickey@clark.net">Thomas Dickey</A>
acts as the maintainer for the Free Software Foundation, which holds the
copyright on ncurses.
Contact the current maintainers at
<LI>Extended-level XPG4 conformance, with internationalization support.
<LI>Ports to more systems, including DOS and Windows.
</UL>
-We need people to help with these projects. If you are interested in working
+We need people to help with these projects. If you are interested in working
on them, please join the ncurses list.
<H2>Other Related Resources</H2>
archive</A>.
</BODY>
</HTML>
-<!--
+<!--
# The following sets edit modes for GNU EMACS
# Local Variables:
# mode:html
-# $Id: Makefile.in,v 1.42 1998/02/19 16:54:54 florian Exp $
+# $Id: Makefile.in,v 1.51 1999/10/23 20:13:02 tom Exp $
##############################################################################
-# Copyright (c) 1998 Free Software Foundation, Inc. #
+# Copyright (c) 1998,1999 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"), #
SHELL = /bin/sh
+CF_MFLAGS = @cf_cv_makeflags@
+@SET_MAKE@
+x = @PROG_EXT@
+
MODEL = ../@DFT_OBJ_SUBDIR@
INSTALL_PREFIX = @INSTALL_PREFIX@
srcdir = @srcdir@
CXXLIBS = @CXXLIBS@
INCDIR = ../include
-CPPFLAGS = -I../c++ -I$(INCDIR) -I$(srcdir) -DHAVE_CONFIG_H @CPPFLAGS@
+CPPFLAGS = -I../c++ -I$(INCDIR) -I$(srcdir) -DHAVE_CONFIG_H @CPPFLAGS@
CCFLAGS = $(CPPFLAGS) $(CXXFLAGS)
CFLAGS_NORMAL = $(CCFLAGS)
CFLAGS_DEBUG = $(CCFLAGS) @CXX_G_OPT@ -DTRACE
CFLAGS_PROFILE = $(CCFLAGS) -pg
-CFLAGS_SHARED = $(CCFLAGS) # @CC_SHARED_OPTS@
+CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
-LINK = $(CXX)
+LINK = @LINK_PROGS@ $(CXX) @CXXLDFLAGS@
LIBROOT = ncurses++
-LIBNAME = ../lib/lib$(LIBROOT).a
+LIBNAME = @LIB_PREFIX@$(LIBROOT).a
LDFLAGS = @EXTRA_LDFLAGS@ -L../lib -L$(libdir) \
-l$(LIBROOT) \
LDFLAGS_NORMAL = $(LDFLAGS)
LDFLAGS_DEBUG = $(LDFLAGS) @CC_G_OPT@
LDFLAGS_PROFILE = $(LDFLAGS) -pg
-LDFLAGS_SHARED = $(LDFLAGS) @CC_SHARED_OPTS@ # @LD_SHARED_OPTS@
+LDFLAGS_SHARED = $(LDFLAGS) @LD_SHARED_OPTS@
LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@)
AUTO_SRC = \
etip.h
-all: $(AUTO_SRC) $(LIBNAME) demo
+all: $(AUTO_SRC) ../lib/$(LIBNAME) demo$x
sources : $(AUTO_SRC)
$(MODEL)/cursesf.o \
$(MODEL)/cursesm.o \
$(MODEL)/cursesw.o \
+ $(MODEL)/cursespad.o \
$(MODEL)/cursesp.o \
$(MODEL)/cursslk.o \
$(MODEL)/cursesapp.o \
$(MODEL)/cursesmain.o
-$(LIBNAME) : $(LIB_OBJS)
+../lib/$(LIBNAME) : $(LIB_OBJS)
$(AR) $(AR_OPTS) $@ $?
$(RANLIB) $@
$(MODEL)/demo.o : $(srcdir)/demo.cc \
$(cursesf_h) $(cursesm_h) $(cursesapp_h)
-demo: $(OBJS_DEMO) \
- $(LIBNAME) \
+demo$x: $(OBJS_DEMO) \
+ ../lib/$(LIBNAME) \
@TEST_DEPS@
@ECHO_LINK@ $(LINK) -o $@ $(OBJS_DEMO) $(LDFLAGS_DEFAULT)
$(srcdir)/../mkinstalldirs $@
install \
-install.libs:: $(LIBNAME) $(INSTALL_PREFIX)$(libdir)
- $(INSTALL) $(LIBNAME) $(INSTALL_PREFIX)$(libdir)/$(LIBNAME)
+install.libs:: ../lib/$(LIBNAME) $(INSTALL_PREFIX)$(libdir)
+ $(INSTALL) ../lib/$(LIBNAME) $(INSTALL_PREFIX)$(libdir)/$(LIBNAME)
uninstall \
uninstall.libs::
-rm -f core tags TAGS *~ *.ln *.atac trace
clean :: mostlyclean
- -rm -f demo $(AUTO_SRC) $(LIBNAME) $(LIB_OBJS) $(OBJS_DEMO)
+ -rm -f demo$x $(AUTO_SRC) ../lib/$(LIBNAME) $(LIB_OBJS) $(OBJS_DEMO)
distclean :: clean
-rm -f Makefile
through starting with the integration of menu and forms integration
into the binding.
+990731 + Improve support for pads. A viewport window may now be added to
+ a pad. It will then be possible to use a builtin panning mechanism
+ to view the pad.
+
970908 + Improve NCursesWindow class: added additional methods to
cover more ncurses functionality. Make refresh() and
noutrefresh() virtual members to allow different implementation
and Anatoly Ivasyuk <anatoly@nick.csh.rit.edu>
Author of this release:
- Juergen Pfeifer <Juergen.Pfeifer@T-Online.de>
+ Juergen Pfeifer <juergen.pfeifer@gmx.net>
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
#include "cursesapp.h"
#include "internal.h"
-MODULE_ID("$Id: cursesapp.cc,v 1.2 1998/02/11 12:13:41 tom Exp $")
+MODULE_ID("$Id: cursesapp.cc,v 1.4 1999/05/16 17:31:11 juergen Exp $")
void
NCursesApplication::init(bool bColors) {
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
-// $Id: cursesapp.h,v 1.3 1998/02/11 12:13:41 tom Exp $
+// $Id: cursesapp.h,v 1.5 1999/05/16 17:29:59 juergen Exp $
#ifndef _CURSESAPP_H
#define _CURSESAPP_H
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
#include "cursesf.h"
#include "cursesapp.h"
#include "internal.h"
-MODULE_ID("$Id: cursesf.cc,v 1.7 1998/02/11 12:13:41 tom Exp $")
+MODULE_ID("$Id: cursesf.cc,v 1.9 1999/05/16 17:29:36 juergen Exp $")
NCursesFormField::~NCursesFormField () {
if (field)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
-// $Id: cursesf.h,v 1.6 1998/02/11 12:13:41 tom Exp $
+// $Id: cursesf.h,v 1.10 1999/05/16 17:31:42 juergen Exp $
#ifndef _CURSESF_H
#define _CURSESF_H
// Return the index of the field in the field array of a form
// or -1 if the field is not associated to a form
- inline int index() const {
+ inline int (index)() const {
return ::field_index(field);
}
Regular_Expression_Field(const char *expr)
: NCursesFieldType(TYPE_REGEXP) {
regex = new char[1+::strlen(expr)];
- strcpy(regex,expr);
+ (strcpy)(regex,expr);
}
~Regular_Expression_Field() {
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
#include "cursesm.h"
#include "cursesapp.h"
#include "internal.h"
-MODULE_ID("$Id: cursesm.cc,v 1.8 1998/02/11 12:13:40 tom Exp $")
+MODULE_ID("$Id: cursesm.cc,v 1.11 1999/07/31 09:45:23 juergen Exp $")
NCursesMenuItem::~NCursesMenuItem() {
if (item)
NCursesMenuItem* itm = current_item();
assert(itm);
if (itm->options() & O_SELECTABLE)
- b_action = itm->action();
+ {
+ b_action = itm->action();
+ refresh();
+ }
else
On_Not_Selectable(c);
}
NCursesMenuItem* itm = my_items[i];
if (itm->value()) {
b_action |= itm->action();
+ refresh();
}
}
}
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
-// $Id: cursesm.h,v 1.9 1998/02/11 12:13:41 tom Exp $
+// $Id: cursesm.h,v 1.12 1999/05/16 17:30:27 juergen Exp $
#ifndef _CURSESM_H
#define _CURSESM_H
}
// Description of the item
- inline int index (void) const {
+ inline int (index) (void) const {
return ::item_index (item);
}
// Index of the item in an item array (or -1)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
#include "cursesapp.h"
#include "internal.h"
-MODULE_ID("$Id: cursesmain.cc,v 1.3 1998/02/11 12:13:41 tom Exp $")
+MODULE_ID("$Id: cursesmain.cc,v 1.5 1999/05/16 17:31:22 juergen Exp $")
/* This is the default implementation of main() for a NCursesApplication.
* You only have to instantiate a static NCursesApplication object in your
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1993,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1993,1997 *
****************************************************************************/
#include "cursesp.h"
#include "internal.h"
-MODULE_ID("$Id: cursesp.cc,v 1.11 1998/02/17 09:04:12 juergen Exp $")
+MODULE_ID("$Id: cursesp.cc,v 1.14 1999/05/16 17:30:51 juergen Exp $")
NCursesPanel* NCursesPanel::dummy = (NCursesPanel*)0;
delete hook;
::del_panel(p);
::update_panels();
- ::doupdate();
}
void
#ifndef _CURSESP_H
#define _CURSESP_H
-// $Id: cursesp.h,v 1.10 1998/02/17 09:01:28 juergen Exp $
+// $Id: cursesp.h,v 1.11 1999/07/31 09:46:05 juergen Exp $
#include <cursesw.h>
// N.B.: The panel associated with ::stdscr is always on the bottom. So
// actually bottom() makes the panel the first above ::stdscr.
- inline int mvwin(int y, int x) {
+ virtual int mvwin(int y, int x) {
OnError(::move_panel(p, y, x));
return OK;
}
// Those two are rewrites of the corresponding virtual members of
// NCursesWindow
- int refresh();
+ virtual int refresh();
// Propagate all panel changes to the virtual screen and update the
// physical screen.
- int noutrefresh();
+ virtual int noutrefresh();
// Propagate all panel changes to the virtual screen.
static void redraw();
--- /dev/null
+// * this is for making emacs happy: -*-Mode: C++;-*-
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1999 *
+ ****************************************************************************/
+
+#include "etip.h"
+#include "cursesw.h"
+#include "internal.h"
+
+MODULE_ID("$Id: cursespad.cc,v 1.2 1999/09/11 23:25:54 tom Exp $")
+
+NCursesPad::NCursesPad(int lines, int cols)
+ : NCursesWindow(),
+ viewWin((NCursesWindow*)0),
+ viewSub((NCursesWindow*)0),
+ h_gridsize(0), v_gridsize(0),
+ min_row(0), min_col(0)
+{
+ w = ::newpad(lines,cols);
+ if ((WINDOW*)0==w) {
+ count--;
+ err_handler("Cannot construct window");
+ }
+ alloced = TRUE;
+}
+
+
+int NCursesPad::driver (int key) {
+ // Default implementation
+ switch(key) {
+ case KEY_UP:
+ // =======
+ return REQ_PAD_UP;
+ case KEY_DOWN:
+ // =========
+ return REQ_PAD_DOWN;
+ case KEY_LEFT:
+ // =========
+ return REQ_PAD_LEFT;
+ case KEY_RIGHT:
+ // ==========
+ return REQ_PAD_RIGHT;
+ case KEY_EXIT:
+ // =========
+ case CTRL('X'):
+ // ==========
+ return REQ_PAD_EXIT;
+
+ default: return(key);
+ }
+}
+
+
+void NCursesPad::operator()(void) {
+ NCursesWindow* W = Win();
+
+ if ((NCursesWindow*)0 != W) {
+ int Width = W->width();
+ int Height = W->height();
+
+ int req = REQ_PAD_REFRESH;
+
+ W->keypad(TRUE);
+ W->meta(TRUE);
+ refresh();
+
+ do {
+ bool changed = FALSE;
+
+ switch (req) {
+ case REQ_PAD_REFRESH:
+ // ================
+ changed = TRUE;
+ break;
+ case REQ_PAD_LEFT:
+ // =============
+ if (min_col > 0) {
+ changed = TRUE;
+ if (min_col < h_gridsize)
+ min_col = 0;
+ else
+ min_col -= h_gridsize;
+ }
+ else
+ OnNavigationError(req);
+ break;
+ case REQ_PAD_RIGHT:
+ // ==============
+ if (min_col < (width() - Width - 1)) {
+ changed = TRUE;
+ if (min_col > (width() - Width - h_gridsize - 1))
+ min_col = width() - Width - 1;
+ else
+ min_col += h_gridsize;
+ }
+ else
+ OnNavigationError(req);
+ break;
+ case REQ_PAD_UP:
+ // ===========
+ if (min_row > 0) {
+ changed = TRUE;
+ if (min_row < v_gridsize)
+ min_row = 0;
+ else
+ min_row -= v_gridsize;
+ }
+ else
+ OnNavigationError(req);
+ break;
+ case REQ_PAD_DOWN:
+ // =============
+ if (min_row < (height() - Height - 1)) {
+ changed = TRUE;
+ if (min_row > (height() - Height - v_gridsize - 1))
+ min_row = height() - Height - 1;
+ else
+ min_row += v_gridsize;
+ }
+ else
+ OnNavigationError(req);
+ break;
+
+ default:
+ OnUnknownOperation(req);
+ }
+
+ if (changed) {
+ noutrefresh();
+ W->syncup();
+ OnOperation(req);
+ viewWin->refresh();
+ }
+ } while( (req=driver(W->getch())) != REQ_PAD_EXIT );
+ }
+}
+
+
+int NCursesPad::refresh() {
+ int res = noutrefresh();
+ if (res==OK && ((NCursesWindow*)0 != viewWin)) {
+ res = (viewWin->refresh());
+ }
+ return(res);
+}
+
+int NCursesPad::noutrefresh() {
+ int res = OK;
+ NCursesWindow* W = Win();
+ if ((NCursesWindow*)0 != W) {
+ res = copywin(*W,min_row,min_col,
+ 0,0,W->maxy(),W->maxx(),
+ FALSE);
+ if (res==OK) {
+ W->syncup();
+ res = viewWin->noutrefresh();
+ }
+ }
+ return (res);
+}
+
+void NCursesPad::setWindow(NCursesWindow& view,
+ int v_grid NCURSES_PARAM_INIT(1),
+ int h_grid NCURSES_PARAM_INIT(1))
+{
+ viewWin = &view;
+ min_row = min_col = 0;
+ if (h_grid <=0 || v_grid <= 0)
+ err_handler("Illegal Gridsize");
+ else {
+ h_gridsize = h_grid;
+ v_gridsize = v_grid;
+ }
+}
+
+void NCursesPad::setSubWindow(NCursesWindow& sub)
+{
+ if ((NCursesWindow*)0 == viewWin)
+ err_handler("Pad has no viewport");
+ if (!viewWin->isDescendant(sub))
+ THROW(new NCursesException("NCursesFramePad", E_SYSTEM_ERROR));
+ viewSub = ⊂
+}
+
+void NCursesFramedPad::OnOperation(int pad_req) {
+ NCursesWindow* W = Win();
+ NCursesWindow* Win = getWindow();
+
+ if (((NCursesWindow*)0 != W) && ((NCursesWindow*)0 != Win)) {
+ int Width = W->width();
+ int Height = W->height();
+ int i, row, col, h_len, v_len;
+
+ h_len = (Width*Width + width() - 1)/width();
+ if (h_len==0)
+ h_len = 1;
+ if (h_len > Width)
+ h_len = Width;
+
+ v_len = (Height*Height + height() - 1)/height();
+ if (v_len==0)
+ v_len = 1;
+ if (v_len > Height)
+ v_len = Height;
+
+ col = (min_col * Width + width() - 1) / width();
+ if (col + h_len > Width)
+ col = Width - h_len;
+
+ row = (min_row * Height + height() - 1) / height();
+ if (row + v_len > Height)
+ row = Height - v_len;
+
+ Win->vline(1,Width+1,Height);
+ Win->attron(A_REVERSE);
+ if (v_len>=2) {
+ Win->addch(row+1,Width+1,ACS_UARROW);
+ for(i=2;i<v_len;i++)
+ Win->addch(row+i,Width+1,' ');
+ Win->addch(row+v_len,Width+1,ACS_DARROW);
+ }
+ else {
+ for(i=1;i<=v_len;i++)
+ Win->addch(row+i,Width+1,' ');
+ }
+ Win->attroff(A_REVERSE);
+
+ Win->hline(Height+1,1,Width);
+ Win->attron(A_REVERSE);
+ if (h_len >= 2) {
+ Win->addch(Height+1,col+1,ACS_LARROW);
+ for(i=2;i<h_len;i++)
+ Win->addch(Height+1,col+i,' ');
+ Win->addch(Height+1,col+h_len,ACS_RARROW);
+ }
+ else {
+ for(i=1;i<=h_len;i++)
+ Win->addch(Height+1,col+i,' ');
+ }
+ Win->attroff(A_REVERSE);
+ }
+}
modified by Ulrich Drepper (drepper@karlsruhe.gmd.de)
and Anatoly Ivasyuk (anatoly@nick.csh.rit.edu)
- modified by Juergen Pfeifer (Juergen.Pfeifer@T-Online.de)
+ modified by Juergen Pfeifer (juergen.pfeifer@gmx.net)
*/
#include "cursesw.h"
#include "internal.h"
-MODULE_ID("$Id: cursesw.cc,v 1.10 1997/10/20 21:26:35 juergen Exp $")
+MODULE_ID("$Id: cursesw.cc,v 1.15 1999/09/11 23:26:29 tom Exp $")
#define COLORS_NEED_INITIALIZATION -1
#define COLORS_NOT_INITIALIZED 0
long NCursesWindow::count = 0L;
bool NCursesWindow::b_initialized = FALSE;
+#if defined(__GNUG__)
+# ifndef _IO_va_list
+# define _IO_va_list char *
+# endif
+#endif
+
int
NCursesWindow::scanw(const char* fmt, ...)
{
char buf[BUFSIZ];
int result = wgetstr(w, buf);
if (result == OK) {
- strstreambuf ss(buf, BUFSIZ);
- result = ss.vscan(fmt, args);
+ strstreambuf ss(buf, sizeof(buf));
+ result = ss.vscan(fmt, (_IO_va_list)args);
}
va_end(args);
return result;
if (result == OK) {
result = wgetstr(w, buf);
if (result == OK) {
- strstreambuf ss(buf, BUFSIZ);
- result = ss.vscan(fmt, args);
+ strstreambuf ss(buf, sizeof(buf));
+ result = ss.vscan(fmt, (_IO_va_list)args);
}
}
va_end(args);
NCursesWindow::NCursesWindow() {
if (!b_initialized)
initialize();
-
+
w = (WINDOW *)0;
init();
alloced = FALSE;
{
if (!b_initialized)
initialize();
-
+
w = window;
init();
alloced = FALSE;
NCursesWindow::NCursesWindow(NCursesWindow& win, int l, int c,
int begin_y, int begin_x, char absrel)
{
- if (absrel == 'a') { // absolute origin
+ if (absrel == 'a') { // absolute origin
begin_y -= win.begy();
begin_x -= win.begx();
}
alloced = TRUE;
count++;
}
-
+
+NCursesWindow::NCursesWindow(NCursesWindow& win,
+ bool do_box NCURSES_PARAM_INIT(TRUE))
+{
+ w = :: derwin(win.w,win.height()-2,win.width()-2,1,1);
+ if (w == 0) {
+ err_handler("Cannot construct subwindow");
+ }
+
+ par = &win;
+ sib = win.subwins;
+ win.subwins = this;
+ subwins = 0;
+ alloced = TRUE;
+ count++;
+
+ if (do_box) {
+ win.box();
+ win.touchwin();
+ }
+}
+
NCursesWindow NCursesWindow::Clone() {
WINDOW *d = ::dupwin(w);
NCursesWindow W(d);
void
NCursesWindow::useColors(void)
{
- if (colorInitialized == COLORS_NOT_INITIALIZED) {
+ if (colorInitialized == COLORS_NOT_INITIALIZED) {
if (b_initialized) {
if (::has_colors()) {
::start_color();
}
short
-NCursesWindow::getcolor(int getback) const
+NCursesWindow::getcolor(int getback) const
{
short fore, back;
if (colorInitialized==COLORS_ARE_REALLY_THERE) {
- if (pair_content(PAIR_NUMBER(w->_attrs), &fore, &back))
+ if (pair_content((short)PAIR_NUMBER(w->_attrs), &fore, &back))
err_handler("Can't get color pair");
}
else {
}
short
-NCursesWindow::getcolor() const
+NCursesWindow::getcolor() const
{
if (colorInitialized==COLORS_ARE_REALLY_THERE)
return PAIR_NUMBER(w->_attrs);
NCursesWindow::setpalette(short fore, short back)
{
if (colorInitialized==COLORS_ARE_REALLY_THERE)
- return setpalette(fore, back, PAIR_NUMBER(w->_attrs));
+ return setpalette(fore, back, (short)PAIR_NUMBER(w->_attrs));
else
return OK;
}
if (colorInitialized==COLORS_ARE_REALLY_THERE) {
if ((pair < 1) || (pair > COLOR_PAIRS))
err_handler("Can't set color pair");
-
+
attroff(A_COLOR);
attrset(COLOR_PAIR(pair));
}
extern "C" int _nc_has_mouse(void);
bool NCursesWindow::has_mouse() const {
- return ((::has_key(KEY_MOUSE) || ::_nc_has_mouse())
+ return ((::has_key(KEY_MOUSE) || ::_nc_has_mouse())
? TRUE : FALSE);
}
-
-NCursesPad::NCursesPad(int lines, int cols) : NCursesWindow() {
- w = ::newpad(lines,cols);
- if (w==(WINDOW*)0) {
- count--;
- err_handler("Cannot construct window");
- }
- alloced = TRUE;
-}
#ifndef _CURSESW_H
#define _CURSESW_H
-// $Id: cursesw.h,v 1.13 1998/01/20 16:53:50 Fred.Fish Exp $
+// $Id: cursesw.h,v 1.18 1999/10/23 15:16:53 tom Exp $
#include <etip.h>
#include <stdio.h>
#define attrset UNDEF(attrset)
#endif
+#ifdef color_set
+inline chtype UNDEF(color_set)(short p,void* opts) { return color_set(p,opts); }
+#undef color_set
+#define color_set UNDEF(color_set)
+#endif
+
#ifdef border
inline int UNDEF(border)(chtype ls, chtype rs, chtype ts, chtype bs, chtype tl, chtype tr, chtype bl, chtype br)
{ return border(ls,rs,ts,bs,tl,tr,bl,br); }
#endif
#ifdef timeout
-inline int UNDEF(timeout)(int delay) { return timeout(delay); }
+inline void UNDEF(timeout)(int delay) { timeout(delay); }
#undef timeout
#define timeout UNDEF(timeout)
#endif
char absrel = 'a');// if `a', by & bx are
// absolute screen pos, else if `r', they are relative to par origin
+ NCursesWindow(NCursesWindow& par,// parent window
+ bool do_box = TRUE);
+ // this is the very common case that we want to create the subwindow that
+ // is two lines and two columns smaller and begins at (1,1).
+ // We may automatically request the box around it.
+
virtual ~NCursesWindow();
NCursesWindow Clone();
// position.
int insch(int y, int x, chtype ch) {
- return ::mvwinsch(w,y,x,ch); }
+ return ::mvwinsch(w,y,x,(char)ch); }
// Move cursor to requested position and then insert the attributed
// character before that position.
int attron (chtype at) { return ::wattron (w, at); }
// Switch on the window attributes;
- int attroff(chtype at) { return ::wattroff(w, at); }
+ int attroff(chtype at) { return ::wattroff(w, (int) at); }
// Switch off the window attributes;
- int attrset(chtype at) { return ::wattrset(w, at); }
+ int attrset(chtype at) { return ::wattrset(w, (int) at); }
// Set the window attributes;
+ int color_set(short color_pair_number, void* opts=NULL) {
+ return ::wcolor_set(w, color_pair_number, opts); }
+ // Set the window color attribute;
+
int chgat(int n,attr_t attr, short color, const void *opts=NULL) {
return ::wchgat(w,n,attr,color,opts); }
// Change the attributes of the next n characters in the current line. If
useColors(); }
};
+// These enum definitions really belong inside the NCursesPad class, but only
+// recent compilers support that feature.
+
+ typedef enum {
+ REQ_PAD_REFRESH = KEY_MAX + 1,
+ REQ_PAD_UP,
+ REQ_PAD_DOWN,
+ REQ_PAD_LEFT,
+ REQ_PAD_RIGHT,
+ REQ_PAD_EXIT
+ } Pad_Request;
+
+ const Pad_Request PAD_LOW = REQ_PAD_REFRESH; // lowest op-code
+ const Pad_Request PAD_HIGH = REQ_PAD_EXIT; // highest op-code
+
+// -------------------------------------------------------------------------
+// Pad Support. We allow an association of a pad with a "real" window
+// through which the pad may be viewed.
+// -------------------------------------------------------------------------
class NCursesPad : public NCursesWindow {
+private:
+ NCursesWindow* viewWin; // the "viewport" window
+ NCursesWindow* viewSub; // the "viewport" subwindow
+
+ int h_gridsize, v_gridsize;
+
+protected:
+ int min_row, min_col; // top left row/col of the pads display area
+
+ NCursesWindow* Win(void) const {
+ // Get the window into which the pad should be copied (if any)
+ return (viewSub?viewSub:(viewWin?viewWin:0));
+ }
+
+ NCursesWindow* getWindow(void) const {
+ return viewWin;
+ }
+
+ NCursesWindow* getSubWindow(void) const {
+ return viewSub;
+ }
+
+ virtual int driver (int key); // Virtualize keystroke key
+ // The driver translates the keystroke c into an Pad_Request
+
+ virtual void OnUnknownOperation(int pad_req) {
+ ::beep();
+ }
+ // This is called if the driver returns an unknown op-code
+
+ virtual void OnNavigationError(int pad_req) {
+ ::beep();
+ }
+ // This is called if a navigation request couldn't be satisfied
+
+ virtual void OnOperation(int pad_req) {
+ };
+ // OnOperation is called if a Pad_Operation was executed and just before
+ // the refresh() operation is done.
+
public:
NCursesPad(int lines, int cols);
+ // create a pad with the given size
+
+ virtual ~NCursesPad() {}
int echochar(const chtype ch) { return ::pechochar(w,ch); }
// Put the attributed character onto the pad and immediately do a
// prefresh().
- // For Pad's we reimplement refresh() and noutrefresh() to do nothing.
- // You should call the versions with the argument list that are specific
- // for Pad's.
- int refresh() { return OK; };
- int noutrefresh() { return OK; };
+ int refresh();
+ // If a viewport is defined the pad is displayed in this window, otherwise
+ // this is a noop.
int refresh(int pminrow, int pmincol,
int sminrow, int smincol,
// on the screen. <b>refresh</b> copies a rectangle of this size beginning
// with top left corner pminrow,pmincol onto the screen and calls doupdate().
+ int noutrefresh();
+ // If a viewport is defined the pad is displayed in this window, otherwise
+ // this is a noop.
+
int noutrefresh(int pminrow, int pmincol,
int sminrow, int smincol,
int smaxrow, int smaxcol) {
sminrow,smincol,smaxrow,smaxcol);
}
// Does the same like refresh() but without calling doupdate().
+
+ virtual void setWindow(NCursesWindow& view, int v_grid = 1, int h_grid = 1);
+ // Add the window "view" as viewing window to the pad.
+
+ virtual void setSubWindow(NCursesWindow& sub);
+ // Use the subwindow "sub" of the viewport window for the actual viewing.
+ // The full viewport window is usually used to provide some decorations
+ // like frames, titles etc.
+
+ virtual void operator() (void);
+ // Perform Pad's operation
+};
+
+// A FramedPad is constructed always with a viewport window. This viewport
+// will be framed (by a box() command) and the interior of the box is the
+// viewport subwindow. On the frame we display scrollbar sliders.
+class NCursesFramedPad : public NCursesPad {
+protected:
+ virtual void OnOperation(int pad_req);
+
+public:
+ NCursesFramedPad(NCursesWindow& win, int lines, int cols,
+ int v_grid = 1, int h_grid = 1)
+ : NCursesPad(lines,cols) {
+ NCursesPad::setWindow(win,v_grid,h_grid);
+ NCursesPad::setSubWindow(*(new NCursesWindow(win)));
+ }
+ // Construct the FramedPad with the given Window win as viewport.
+
+ virtual ~NCursesFramedPad() {
+ delete getSubWindow();
+ }
+
+ void setWindow(NCursesWindow& view, int v_grid = 1, int h_grid = 1) {
+ err_handler("Operation not allowed");
+ }
+ // Disable this call; the viewport is already defined
+
+ void setSubWindow(NCursesWindow& sub) {
+ err_handler("Operation not allowed");
+ }
+ // Disable this call; the viewport subwindow is already defined
+
};
#endif // _CURSESW_H
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
#include "cursslk.h"
#include "cursesapp.h"
#include "internal.h"
-MODULE_ID("$Id: cursslk.cc,v 1.2 1998/02/11 12:13:41 tom Exp $")
+MODULE_ID("$Id: cursslk.cc,v 1.5 1999/05/16 17:31:01 juergen Exp $")
void Soft_Label_Key_Set::Soft_Label_Key::operator=(char *text) {
delete[] label;
label = new char[1 + ::strlen(text)];
- ::strcpy(label,text);
+ (strcpy)(label,text);
}
long Soft_Label_Key_Set::count = 0L;
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
-// $Id: cursslk.h,v 1.2 1998/02/11 12:13:41 tom Exp $
+// $Id: cursslk.h,v 1.5 1999/05/16 17:30:08 juergen Exp $
#ifndef _CURSSLK_H
#define _CURSSLK_H
Error("slk_attrset");
}
+ inline void color(short color_pair_number) {
+ if (ERR==::slk_color(color_pair_number))
+ Error("slk_color");
+ }
+
inline attr_t attr() const {
return ::slk_attr();
}
* written by Anatoly Ivasyuk (anatoly@nick.csh.rit.edu)
*
* Demo code for NCursesMenu and NCursesForm written by
- * Juergen Pfeifer <Juergen.Pfeifer@T-Online.de>
+ * Juergen Pfeifer <juergen.pfeifer@gmx.net>
*
- * $Id: demo.cc,v 1.13 1998/02/19 16:54:54 florian Exp $
+ * $Id: demo.cc,v 1.18 1999/09/11 18:57:54 tom Exp $
*/
#include "cursesapp.h"
extern "C" unsigned int sleep(unsigned int);
+#undef index // needed for NeXT
+
//
// -------------------------------------------------------------------------
//
-class SillyDemo
+class SillyDemo
{
public:
void run(int sleeptime) {
private:
int u;
public:
- UserData(int x) : u(x) {}
- int sleeptime() const { return u; }
+ UserData(int x) : u(x) {}
+ int sleeptime() const { return u; }
};
//
// -------------------------------------------------------------------------
bool action() {
SillyDemo a;
- a.run(UserData()->sleeptime());
+ a.run(NCursesUserItem<T>::UserData()->sleeptime());
return FALSE;
}
};
class Label : public NCursesFormField
{
public:
- Label(const char*title,
+ Label(const char* title,
int row, int col)
: NCursesFormField(1,(int)::strlen(title),row,col) {
set_value(title);
Enumeration_Field *eft;
static char *weekdays[];
-
+
public:
TestForm() : NCursesForm(13,51,(lines()-15)/2,(cols()-53)/2) {
-
+
F = new NCursesFormField*[10];
mft = new MyFieldType('X');
ift = new Integer_Field(0,1,10);
F[7] = new NCursesFormField(1,12,3,35);
F[8] = new NCursesFormField(4,46,6,1,2);
F[9] = new NCursesFormField();
-
+
InitForm(F,TRUE,TRUE);
boldframe();
-
+
F[5]->set_fieldtype(*eft);
F[6]->set_fieldtype(*ift);
return FALSE;
}
};
+//
+// -------------------------------------------------------------------------
+//
+class PadAction : public NCursesMenuItem
+{
+public:
+ PadAction(const char* s) : NCursesMenuItem(s) {
+ }
+
+ bool action() {
+ const int GRIDSIZE = 3;
+ const int PADSIZE = 200;
+ unsigned gridcount = 0;
+
+ NCursesPanel std;
+ NCursesPanel P(std.lines()-2,std.cols()-2,1,1);
+ NCursesFramedPad FP(P,PADSIZE,PADSIZE);
+
+ for (int i=0; i < PADSIZE; i++) {
+ for (int j=0; j < PADSIZE; j++) {
+ if (i % GRIDSIZE == 0 && j % GRIDSIZE == 0) {
+ if (i==0 || j==0)
+ FP.addch('+');
+ else
+ FP.addch((chtype)('A' + (gridcount++ % 26)));
+ }
+ else if (i % GRIDSIZE == 0)
+ FP.addch('-');
+ else if (j % GRIDSIZE == 0)
+ FP.addch('|');
+ else
+ FP.addch(' ');
+ }
+ }
+
+ P.label("Pad Demo",NULL);
+ FP();
+ P.clear();
+ return FALSE;
+ }
+};
+
//
// -------------------------------------------------------------------------
//
NCursesPanel* P;
NCursesMenuItem** I;
UserData *u;
+ #define n_items 7
public:
- MyMenu ()
- : NCursesMenu (8, 8, (lines()-10)/2, (cols()-10)/2)
+ MyMenu ()
+ : NCursesMenu (n_items+2, 8, (lines()-10)/2, (cols()-10)/2)
{
u = new UserData(1);
- I = new NCursesMenuItem*[7];
+ I = new NCursesMenuItem*[1+n_items];
I[0] = new PassiveItem("One");
I[1] = new PassiveItem("Two");
I[2] = new MyAction<UserData> ("Silly", u);
I[3] = new FormAction("Form");
- I[4] = new PassiveItem("Five");
- I[5] = new QuitItem();
- I[6] = new NCursesMenuItem(); // Terminating empty item
+ I[4] = new PadAction("Pad");
+ I[5] = new PassiveItem("Six");
+ I[6] = new QuitItem();
+ I[7] = new NCursesMenuItem(); // Terminating empty item
InitMenu(I,TRUE,TRUE);
-
- P = new NCursesPanel(1,6,LINES-1,1);
+
+ P = new NCursesPanel(1,n_items,LINES-1,1);
boldframe("Demo","Silly");
P->show();
}
titleWindow->bkgd(screen_titles());
titleWindow->addstr(0,(titleWindow->cols()-len)/2,title);
- titleWindow->noutrefresh();
+ titleWindow->noutrefresh();
}
#!/bin/sh
-# $Id: edit_cfg.sh,v 1.4 1998/02/11 12:13:41 tom Exp $
+# $Id: edit_cfg.sh,v 1.7 1999/09/12 02:00:14 tom Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
# $2 = etip.h
#
for name in \
+ CPP_HAS_PARAM_INIT \
+ ETIP_NEEDS_MATH_EXCEPTION \
+ ETIP_NEEDS_MATH_H \
HAVE_BUILTIN_H \
+ HAVE_GXX_BUILTIN_H \
+ HAVE_GPP_BUILTIN_H \
HAVE_TYPEINFO \
HAVE_VALUES_H
do
// * This makes emacs happy -*-Mode: C++;-*-
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
-// $Id: etip.h.in,v 1.4 1998/02/17 09:01:38 juergen Exp $
+// $Id: etip.h.in,v 1.13 1999/09/12 02:01:59 tom Exp $
#ifndef _ETIP_H
#define _ETIP_H
#define HAVE_BUILTIN_H 0
#endif
+#ifndef HAVE_GXX_BUILTIN_H
+#define HAVE_GXX_BUILTIN_H 0
+#endif
+
+#ifndef HAVE_GPP_BUILTIN_H
+#define HAVE_GPP_BUILTIN_H 0
+#endif
+
#ifndef HAVE_TYPEINFO
#define HAVE_TYPEINFO 0
#endif
#define HAVE_VALUES_H 0
#endif
+#ifndef ETIP_NEEDS_MATH_H
+#define ETIP_NEEDS_MATH_H 0
+#endif
+
+#ifndef ETIP_NEEDS_MATH_EXCEPTION
+#define ETIP_NEEDS_MATH_EXCEPTION 0
+#endif
+
+#ifndef CPP_HAS_PARAM_INIT
+#define CPP_HAS_PARAM_INIT 0
+#endif
+
#ifdef __GNUG__
# if ((__GNUG__ <= 2) && (__GNUC_MINOR__ < 8))
# if HAVE_TYPEINFO
#endif
#if defined(__GNUG__)
-# if HAVE_BUILTIN_H
+# if HAVE_BUILTIN_H || HAVE_GXX_BUILTIN_H || HAVE_GPP_BUILTIN_H
+# if ETIP_NEEDS_MATH_H
+# if ETIP_NEEDS_MATH_EXCEPTION
+# undef exception
+# define exception math_exception
+# endif
+# include <math.h>
+# endif
+# undef exception
# define exception builtin_exception
-# include <builtin.h>
+# if HAVE_GPP_BUILTIN_H
+# include <gpp/builtin.h>
+# elif HAVE_GXX_BUILTIN_H
+# include <g++/builtin.h>
+# else
+# include <builtin.h>
+# endif
# undef exception
# endif
#elif defined (__SUNPRO_CC)
#include <errno.h>
}
+// Language features
+#if CPP_HAS_PARAM_INIT
+#define NCURSES_PARAM_INIT(value) = value
+#else
+#define NCURSES_PARAM_INIT(value) /*nothing*/
+#endif
+
// Forward Declarations
class NCursesPanel;
class NCursesMenu;
class NCursesException
{
public:
- int errorno;
const char *message;
+ int errorno;
NCursesException (const char* msg, int err)
: message(msg), errorno (err)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1997 *
****************************************************************************/
-// $Id: internal.h,v 1.3 1998/02/11 12:13:40 tom Exp $
+// $Id: internal.h,v 1.5 1999/05/16 17:29:25 juergen Exp $
#ifndef _CPLUS_INTERNAL_H
#define _CPLUS_INTERNAL_H 1
# Program modules
-# $Id: modules,v 1.5 1998/02/11 12:13:41 tom Exp $
+# $Id: modules,v 1.6 1999/07/31 09:46:54 juergen Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
cursesm c++ $(srcdir) $(cursesm_h) $(cursesapp_h)
cursesp c++ $(srcdir) $(cursesp_h)
cursesw c++ $(srcdir) $(cursesw_h)
+cursespad c++ $(srcdir) $(cursesw_h)
cursslk c++ $(srcdir) $(cursslk_h) $(cursesapp_h)
cursesapp c++ $(srcdir) $(cursesapp_h)
cursesmain c++ $(srcdir) $(cursesapp_h)
#! /bin/sh
# Attempt to guess a canonical system name.
-# Copyright (C) 1992, 93, 94, 95, 1996 Free Software Foundation, Inc.
+# Copyright (C) 1992, 93, 94, 95, 96, 97, 1998 Free Software Foundation, Inc.
#
# This file is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License as published by
case "${UNAME_MACHINE}:${UNAME_SYSTEM}:${UNAME_RELEASE}:${UNAME_VERSION}" in
alpha:OSF1:*:*)
+ if test $UNAME_RELEASE = "V4.0"; then
+ UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'`
+ fi
# A Vn.n version is a released version.
# A Tn.n version is a released field test version.
# A Xn.n version is an unreleased experimental baselevel.
# 1.2 uses "1.2" for uname -r.
- echo alpha-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//'`
+ cat <<EOF >dummy.s
+ .globl main
+ .ent main
+main:
+ .frame \$30,0,\$26,0
+ .prologue 0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
+ ret \$31,(\$26),1
+ .end main
+EOF
+ ${CC-cc} dummy.s -o dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ ./dummy
+ case "$?" in
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 14)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ esac
+ fi
+ rm -f dummy.s dummy
+ echo ${UNAME_MACHINE}-dec-osf`echo ${UNAME_RELEASE} | sed -e 's/^[VTX]//' | tr [[A-Z]] [[a-z]]`
exit 0 ;;
21064:Windows_NT:50:3)
echo alpha-dec-winnt3.5
echo m68k-cbm-netbsd${UNAME_RELEASE}
exit 0 ;;
amiga:OpenBSD:*:*)
- echo m68k-cbm-openbsd${UNAME_RELEASE}
- exit 0 ;;
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ *:[Aa]miga[Oo][Ss]:*:*)
+ echo ${UNAME_MACHINE}-unknown-amigaos
+ exit 0 ;;
+ arc64:OpenBSD:*:*)
+ echo mips64el-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ arc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ hkmips:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ pmax:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sgi:OpenBSD:*:*)
+ echo mips-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ wgrisc:OpenBSD:*:*)
+ echo mipsel-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*)
echo arm-acorn-riscix${UNAME_RELEASE}
exit 0;;
- Pyramid*:OSx*:*:*|MIS*:OSx*:*:*)
+ arm32:NetBSD:*:*)
+ echo arm-unknown-netbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
+ exit 0 ;;
+ SR2?01:HI-UX/MPP:*:*)
+ echo hppa1.1-hitachi-hiuxmpp
+ exit 0;;
+ Pyramid*:OSx*:*:*|MIS*:OSx*:*:*|MIS*:SMP_DC-OSx*:*:*)
# akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE.
if test "`(/bin/universe) 2>/dev/null`" = att ; then
echo pyramid-pyramid-sysv3
NILE:*:*:dcosx)
echo pyramid-pyramid-svr4
exit 0 ;;
+ sun4H:SunOS:5.*:*)
+ echo sparc-hal-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
+ exit 0 ;;
sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*)
echo sparc-sun-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
sun3*:SunOS:*:*)
echo m68k-sun-sunos${UNAME_RELEASE}
exit 0 ;;
+ sun*:*:4.2BSD:*)
+ UNAME_RELEASE=`(head -1 /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null`
+ test "x${UNAME_RELEASE}" = "x" && UNAME_RELEASE=3
+ case "`/bin/arch`" in
+ sun3)
+ echo m68k-sun-sunos${UNAME_RELEASE}
+ ;;
+ sun4)
+ echo sparc-sun-sunos${UNAME_RELEASE}
+ ;;
+ esac
+ exit 0 ;;
aushp:SunOS:*:*)
echo sparc-auspex-sunos${UNAME_RELEASE}
exit 0 ;;
echo m68k-atari-netbsd${UNAME_RELEASE}
exit 0 ;;
atari*:OpenBSD:*:*)
- echo m68k-atari-openbsd${UNAME_RELEASE}
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
sun3*:NetBSD:*:*)
echo m68k-sun-netbsd${UNAME_RELEASE}
exit 0 ;;
sun3*:OpenBSD:*:*)
- echo m68k-sun-openbsd${UNAME_RELEASE}
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
mac68k:NetBSD:*:*)
echo m68k-apple-netbsd${UNAME_RELEASE}
exit 0 ;;
mac68k:OpenBSD:*:*)
- echo m68k-apple-openbsd${UNAME_RELEASE}
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme68k:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ mvme88k:OpenBSD:*:*)
+ echo m88k-unknown-openbsd${UNAME_RELEASE}
exit 0 ;;
powerpc:machten:*:*)
echo powerpc-apple-machten${UNAME_RELEASE}
exit 0 ;;
+ macppc:NetBSD:*:*)
+ echo powerpc-apple-netbsd${UNAME_RELEASE}
+ exit 0 ;;
RISC*:Mach:*:*)
echo mips-dec-mach_bsd4.3
exit 0 ;;
VAX*:ULTRIX*:*:*)
echo vax-dec-ultrix${UNAME_RELEASE}
exit 0 ;;
- 2020:CLIX:*:*)
+ 2020:CLIX:*:* | 2430:CLIX:*:*)
echo clipper-intergraph-clix${UNAME_RELEASE}
exit 0 ;;
mips:*:*:UMIPS | mips:*:*:RISCos)
i?86:AIX:*:*)
echo i386-ibm-aix
exit 0 ;;
+ *:MVS:*:* | *:OS390:*:*|*:OS/390:*:*)
+ # uname -m gives a processor model number /* S/390 -- gil -- 1389 */
+ echo s390-ibm-os390 # on R1 and R2, uname -s reports OS390
+ exit 0 ;; # on R3, uname -s reports OS/390
*:AIX:2:3)
if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then
sed 's/^ //' << EOF >dummy.c
fi
exit 0 ;;
*:AIX:*:4)
- if /usr/sbin/lsattr -EHl proc0 | grep POWER >/dev/null 2>&1; then
+ IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | head -1 | awk '{ print $1 }'`
+ if /usr/sbin/lsattr -EHl ${IBM_CPU_ID} | grep POWER >/dev/null 2>&1; then
IBM_ARCH=rs6000
else
IBM_ARCH=powerpc
hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*)
echo m68k-hp-bsd4.4
exit 0 ;;
- 9000/[3478]??:HP-UX:*:*)
+ 9000/[34678]??:HP-UX:*:*)
case "${UNAME_MACHINE}" in
9000/31? ) HP_ARCH=m68000 ;;
9000/[34]?? ) HP_ARCH=m68k ;;
- 9000/7?? | 9000/8?[1679] ) HP_ARCH=hppa1.1 ;;
- 9000/8?? ) HP_ARCH=hppa1.0 ;;
+ 9000/6?? | 9000/7?? | 9000/80[024] | 9000/8?[13679] | 9000/892 )
+ sed 's/^ //' << EOF >dummy.c
+ #include <stdlib.h>
+ #include <unistd.h>
+
+ int main ()
+ {
+ #if defined(_SC_KERNEL_BITS)
+ long bits = sysconf(_SC_KERNEL_BITS);
+ #endif
+ long cpu = sysconf (_SC_CPU_VERSION);
+
+ switch (cpu)
+ {
+ case CPU_PA_RISC1_0: puts ("hppa1.0"); break;
+ case CPU_PA_RISC1_1: puts ("hppa1.1"); break;
+ case CPU_PA_RISC2_0:
+ #if defined(_SC_KERNEL_BITS)
+ switch (bits)
+ {
+ case 64: puts ("hppa2.0w"); break;
+ case 32: puts ("hppa2.0n"); break;
+ default: puts ("hppa2.0"); break;
+ } break;
+ #else /* !defined(_SC_KERNEL_BITS) */
+ puts ("hppa2.0"); break;
+ #endif
+ default: puts ("hppa1.0"); break;
+ }
+ exit (0);
+ }
+EOF
+ (${CC-cc} dummy.c -o dummy 2>/dev/null ) && HP_ARCH=`./dummy`
+ rm -f dummy.c dummy
esac
HPUX_REV=`echo ${UNAME_RELEASE}|sed -e 's/[^.]*.[0B]*//'`
echo ${HP_ARCH}-hp-hpux${HPUX_REV}
hp3[0-9][05]:NetBSD:*:*)
echo m68k-hp-netbsd${UNAME_RELEASE}
exit 0 ;;
- hp3[0-9][05]:OpenBSD:*:*)
- echo m68k-hp-openbsd${UNAME_RELEASE}
+ hp300:OpenBSD:*:*)
+ echo m68k-unknown-openbsd${UNAME_RELEASE}
+ exit 0 ;;
+ sparc*:BSD/OS:*:*)
+ echo sparc-unknown-bsdi${UNAME_RELEASE}
exit 0 ;;
i?86:BSD/386:*:* | *:BSD/OS:*:*)
echo ${UNAME_MACHINE}-pc-bsdi${UNAME_RELEASE}
echo ${UNAME_MACHINE}-unknown-openbsd`echo ${UNAME_RELEASE}|sed -e 's/[-_].*/\./'`
exit 0 ;;
i*:CYGWIN*:*)
- echo i386-pc-cygwin32
+ echo ${UNAME_MACHINE}-pc-cygwin
+ exit 0 ;;
+ i*:MINGW*:*)
+ echo ${UNAME_MACHINE}-pc-mingw32
exit 0 ;;
p*:CYGWIN*:*)
- echo powerpcle-unknown-cygwin32
+ echo powerpcle-unknown-cygwin
exit 0 ;;
prep*:SunOS:5.*:*)
echo powerpcle-unknown-solaris2`echo ${UNAME_RELEASE}|sed -e 's/[^.]*//'`
exit 0 ;;
*:GNU:*:*)
- echo `echo ${UNAME_MACHINE}|sed -e 's,/.*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
+ echo `echo ${UNAME_MACHINE}|sed -e 's,[-/].*$,,'`-unknown-gnu`echo ${UNAME_RELEASE}|sed -e 's,/.*$,,'`
exit 0 ;;
*:Linux:*:*)
+ # uname on the ARM produces all sorts of strangeness, and we need to
+ # filter it out.
+ case "$UNAME_MACHINE" in
+ arm* | sa110*) UNAME_MACHINE="arm" ;;
+ esac
+
# The BFD linker knows what the default object file format is, so
# first see if it will tell us.
ld_help_string=`ld --help 2>&1`
- if echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf_i.86"; then
- echo "${UNAME_MACHINE}-pc-linux-gnu" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86linux"; then
- echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: i.86coff"; then
- echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68kelf"; then
- echo "${UNAME_MACHINE}-unknown-linux-gnu" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: m68klinux"; then
- echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0
- elif echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations: elf32ppc"; then
- echo "powerpc-unknown-linux-gnu" ; exit 0
- elif test "${UNAME_MACHINE}" = "alpha" ; then
- echo alpha-unknown-linux-gnu ; exit 0
- elif test "${UNAME_MACHINE}" = "sparc" ; then
- echo sparc-unknown-linux-gnu ; exit 0
+ ld_supported_emulations=`echo $ld_help_string \
+ | sed -ne '/supported emulations:/!d
+ s/[ ][ ]*/ /g
+ s/.*supported emulations: *//
+ s/ .*//
+ p'`
+ case "$ld_supported_emulations" in
+ i?86linux) echo "${UNAME_MACHINE}-pc-linux-gnuaout" ; exit 0 ;;
+ i?86coff) echo "${UNAME_MACHINE}-pc-linux-gnucoff" ; exit 0 ;;
+ sparclinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ armlinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ m68klinux) echo "${UNAME_MACHINE}-unknown-linux-gnuaout" ; exit 0 ;;
+ elf32ppc) echo "powerpc-unknown-linux-gnu" ; exit 0 ;;
+ esac
+
+ if test "${UNAME_MACHINE}" = "alpha" ; then
+ sed 's/^ //' <<EOF >dummy.s
+ .globl main
+ .ent main
+ main:
+ .frame \$30,0,\$26,0
+ .prologue 0
+ .long 0x47e03d80 # implver $0
+ lda \$2,259
+ .long 0x47e20c21 # amask $2,$1
+ srl \$1,8,\$2
+ sll \$2,2,\$2
+ sll \$0,3,\$0
+ addl \$1,\$0,\$0
+ addl \$2,\$0,\$0
+ ret \$31,(\$26),1
+ .end main
+EOF
+ LIBC=""
+ ${CC-cc} dummy.s -o dummy 2>/dev/null
+ if test "$?" = 0 ; then
+ ./dummy
+ case "$?" in
+ 7)
+ UNAME_MACHINE="alpha"
+ ;;
+ 15)
+ UNAME_MACHINE="alphaev5"
+ ;;
+ 14)
+ UNAME_MACHINE="alphaev56"
+ ;;
+ 10)
+ UNAME_MACHINE="alphapca56"
+ ;;
+ 16)
+ UNAME_MACHINE="alphaev6"
+ ;;
+ esac
+
+ objdump --private-headers dummy | \
+ grep ld.so.1 > /dev/null
+ if test "$?" = 0 ; then
+ LIBC="libc1"
+ fi
+ fi
+ rm -f dummy.s dummy
+ echo ${UNAME_MACHINE}-unknown-linux-gnu${LIBC} ; exit 0
+ elif test "${UNAME_MACHINE}" = "mips" ; then
+ cat >dummy.c <<EOF
+main(argc, argv)
+ int argc;
+ char *argv[];
+{
+#ifdef __MIPSEB__
+ printf ("%s-unknown-linux-gnu\n", argv[1]);
+#endif
+#ifdef __MIPSEL__
+ printf ("%sel-unknown-linux-gnu\n", argv[1]);
+#endif
+ return 0;
+}
+EOF
+ ${CC-cc} dummy.c -o dummy 2>/dev/null && ./dummy "${UNAME_MACHINE}" && rm dummy.c dummy && exit 0
+ rm -f dummy.c dummy
else
- # Either a pre-BFD a.out linker (linux-gnuoldld) or one that does not give us
- # useful --help. Gcc wants to distinguish between linux-gnuoldld and linux-gnuaout.
- test ! -d /usr/lib/ldscripts/. \
- && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+ # Either a pre-BFD a.out linker (linux-gnuoldld)
+ # or one that does not give us useful --help.
+ # GCC wants to distinguish between linux-gnuoldld and linux-gnuaout.
+ # If ld does not provide *any* "supported emulations:"
+ # that means it is gnuoldld.
+ echo "$ld_help_string" | grep >/dev/null 2>&1 "supported emulations:"
+ test $? != 0 && echo "${UNAME_MACHINE}-pc-linux-gnuoldld" && exit 0
+
+ case "${UNAME_MACHINE}" in
+ i?86)
+ VENDOR=pc;
+ ;;
+ *)
+ VENDOR=unknown;
+ ;;
+ esac
# Determine whether the default compiler is a.out or elf
cat >dummy.c <<EOF
+#include <features.h>
main(argc, argv)
-int argc;
-char *argv[];
+ int argc;
+ char *argv[];
{
#ifdef __ELF__
- printf ("%s-pc-linux-gnu\n", argv[1]);
+# ifdef __GLIBC__
+# if (__GLIBC__ >= 2)
+ printf ("%s-${VENDOR}-linux-gnu\n", argv[1]);
+# else
+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
+# else
+ printf ("%s-${VENDOR}-linux-gnulibc1\n", argv[1]);
+# endif
#else
- printf ("%s-pc-linux-gnuaout\n", argv[1]);
+ printf ("%s-${VENDOR}-linux-gnuaout\n", argv[1]);
#endif
return 0;
}
i?86:DYNIX/ptx:4*:*)
echo i386-sequent-sysv4
exit 0 ;;
+ i?86:UNIX_SV:4.2MP:2.*)
+ # Unixware is an offshoot of SVR4, but it has its own version
+ # number series starting with 2...
+ # I am not positive that other SVR4 systems won't match this,
+ # I just have to hope. -- rms.
+ # Use sysv4.2uw... so that sysv4* matches it.
+ echo ${UNAME_MACHINE}-pc-sysv4.2uw${UNAME_VERSION}
+ exit 0 ;;
+ # SysVr5/Unixware7
+ i?86:*:5*:* | i?86:SYSTEM_V:5*:*)
+ if uname -a | grep SCO >/dev/null 2>/dev/null ; then
+ (/bin/uname -s|egrep UnixWare >/dev/null) && UNAME_VER=uw${UNAME_VERSION}
+ if /bin/uname -X 2>/dev/null >/dev/null ; then
+ (/bin/uname -X|egrep i80486 >/dev/null) && UNAME_MACHINE=i486
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ fi
+ echo ${UNAME_MACHINE}-sco-sysv${UNAME_RELEASE}${UNAME_VER}
+ else
+ echo ${UNAME_MACHINE}-unknown-sysv${UNAME_RELEASE}
+ fi
+ exit 0 ;;
i?86:*:4.*:* | i?86:SYSTEM_V:4.*:*)
if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then
- echo ${UNAME_MACHINE}-univel-sysv${UNAME_RELEASE}
+ echo ${UNAME_MACHINE}-univel-sysv4.2uw${UNAME_VERSION}
else
echo ${UNAME_MACHINE}-pc-sysv${UNAME_RELEASE}
fi
echo ${UNAME_MACHINE}-pc-sysv32
fi
exit 0 ;;
+ i?86:UnixWare:*:*)
+ if /bin/uname -X 2>/dev/null >/dev/null ; then
+ (/bin/uname -X|egrep '^Machine.*Pentium' >/dev/null) \
+ && UNAME_MACHINE=i586
+ fi
+ echo ${UNAME_MACHINE}-unixware-${UNAME_RELEASE}-${UNAME_VERSION}
+ exit 0 ;;
+ pc:*:*:*)
+ # uname -m prints for DJGPP always 'pc', but it prints nothing about
+ # the processor, so we play safe by assuming i386.
+ echo i386-pc-msdosdjgpp
+ exit 0 ;;
Intel:Mach:3*:*)
echo i386-pc-mach3
exit 0 ;;
echo ns32k-sni-sysv
fi
exit 0 ;;
+ PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
+ # says <Richard.M.Bartel@ccMail.Census.GOV>
+ echo i586-unisys-sysv4
+ exit 0 ;;
*:UNIX_System_V:4*:FTX*)
# From Gerald Hewes <hewes@openmarket.com>.
# How about differentiating between stratus architectures? -djm
mc68*:A/UX:*:*)
echo m68k-apple-aux${UNAME_RELEASE}
exit 0 ;;
- R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:*)
+ news*:NEWS-OS:*:6*)
+ echo mips-sony-newsos6
+ exit 0 ;;
+ R3000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R4000:UNIX_SV:*:*)
if [ -d /usr/nec ]; then
echo mips-nec-sysv${UNAME_RELEASE}
else
echo mips-unknown-sysv${UNAME_RELEASE}
fi
exit 0 ;;
- PENTIUM:CPunix:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort
- # says <Richard.M.Bartel@ccMail.Census.GOV>
- echo i586-unisys-sysv4
- exit 0 ;;
+ BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only.
+ echo powerpc-be-beos
+ exit 0 ;;
+ BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only.
+ echo powerpc-apple-beos
+ exit 0 ;;
+ BePC:BeOS:*:*) # BeOS running on Intel PC compatible.
+ echo i586-pc-beos
+ exit 0 ;;
esac
#echo '(No uname command or uname output not recognized.)' 1>&2
#! /bin/sh
# Configuration validation subroutine script, version 1.1.
-# Copyright (C) 1991, 92, 93, 94, 95, 1996 Free Software Foundation, Inc.
+# Copyright (C) 1991, 92-97, 1998 Free Software Foundation, Inc.
# This file is (in principle) common to ALL GNU software.
# The presence of a machine in this file suggests that SOME GNU software
# can handle that machine. It does not imply ALL GNU software can.
case $basic_machine in
# Recognize the basic CPU types without company name.
# Some are omitted here because they have special meanings below.
- tahoe | i860 | m68k | m68000 | m88k | ns32k | arm \
- | arme[lb] | pyramid \
- | tron | a29k | 580 | i960 | h8300 | hppa | hppa1.0 | hppa1.1 \
- | alpha | we32k | ns16k | clipper | i370 | sh \
- | powerpc | powerpcle | 1750a | dsp16xx | mips64 | mipsel \
- | pdp11 | mips64el | mips64orion | mips64orionel \
- | sparc | sparclet | sparclite | sparc64)
+ tahoe | i860 | m32r | m68k | m68000 | m88k | ns32k | arc | arm \
+ | arme[lb] | pyramid | mn10200 | mn10300 | tron | a29k \
+ | 580 | i960 | h8300 \
+ | hppa | hppa1.0 | hppa1.1 | hppa2.0 | hppa2.0w \
+ | alpha | alphaev5 | alphaev56 | we32k | ns16k | clipper \
+ | i370 | sh | powerpc | powerpcle | 1750a | dsp16xx | pdp11 \
+ | mips64 | mipsel | mips64el | mips64orion | mips64orionel \
+ | mipstx39 | mipstx39el \
+ | sparc | sparclet | sparclite | sparc64 | v850)
basic_machine=$basic_machine-unknown
;;
# We use `pc' rather than `unknown'
# because (1) that's what they normally are, and
# (2) the word "unknown" tends to confuse beginning users.
- i[3456]86)
+ i[34567]86)
basic_machine=$basic_machine-pc
;;
# Object if more than one company name word.
exit 1
;;
# Recognize the basic CPU types with company name.
- vax-* | tahoe-* | i[3456]86-* | i860-* | m68k-* | m68000-* | m88k-* \
- | sparc-* | ns32k-* | fx80-* | arm-* | c[123]* \
- | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* | power-* \
- | none-* | 580-* | cray2-* | h8300-* | i960-* | xmp-* | ymp-* \
- | hppa-* | hppa1.0-* | hppa1.1-* | alpha-* | we32k-* | cydra-* | ns16k-* \
- | pn-* | np1-* | xps100-* | clipper-* | orion-* | sparclite-* \
- | pdp11-* | sh-* | powerpc-* | powerpcle-* | sparc64-* | mips64-* | mipsel-* \
- | mips64el-* | mips64orion-* | mips64orionel-* | f301-*)
+ vax-* | tahoe-* | i[34567]86-* | i860-* | m32r-* | m68k-* | m68000-* \
+ | m88k-* | sparc-* | ns32k-* | fx80-* | arc-* | arm-* | c[123]* \
+ | mips-* | pyramid-* | tron-* | a29k-* | romp-* | rs6000-* \
+ | power-* | none-* | 580-* | cray2-* | h8300-* | i960-* \
+ | xmp-* | ymp-* \
+ | hppa-* | hppa1.0-* | hppa1.1-* | hppa2.0-* | hppa2.0w-* \
+ | alpha-* | alphaev5-* | alphaev56-* | we32k-* | cydra-* \
+ | ns16k-* | pn-* | np1-* | xps100-* | clipper-* | orion-* \
+ | sparclite-* | pdp11-* | sh-* | powerpc-* | powerpcle-* \
+ | sparc64-* | mips64-* | mipsel-* \
+ | mips64el-* | mips64orion-* | mips64orionel-* \
+ | mipstx39-* | mipstx39el-* \
+ | f301-*)
;;
# Recognize the various machine names and aliases which stand
# for a CPU type and a company and sometimes even an OS.
amiga | amiga-*)
basic_machine=m68k-cbm
;;
- amigados)
+ amigaos | amigados)
basic_machine=m68k-cbm
- os=-amigados
+ os=-amigaos
;;
amigaunix | amix)
basic_machine=m68k-cbm
basic_machine=i370-ibm
os=-mvs
;;
+ s390 | s390-ibm*)
+# OS/390 support after:
+# Linkname: Mortice Kern Systems (MKS) Inc. - OS/390 OpenEdition -- GNU Utilities Downloads
+# URL: http://www.mks.com/s390/gnu/download.htm#autoconf
+ basic_machine=s390-ibm # /* S/390 -- gil -- 1419 */
+ os=-os390
+ ;;
# I'm not sure what "Sysv32" means. Should this be sysv3.2?
- i[3456]86v32)
+ i[34567]86v32)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv32
;;
- i[3456]86v4*)
+ i[34567]86v4*)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv4
;;
- i[3456]86v)
+ i[34567]86v)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-sysv
;;
- i[3456]86sol2)
+ i[34567]86sol2)
basic_machine=`echo $1 | sed -e 's/86.*/86-pc/'`
os=-solaris2
;;
miniframe)
basic_machine=m68000-convergent
;;
+ mipsel*-linux*)
+ basic_machine=mipsel-unknown
+ os=-linux-gnu
+ ;;
+ mips*-linux*)
+ basic_machine=mips-unknown
+ os=-linux-gnu
+ ;;
mips3*-*)
basic_machine=`echo $basic_machine | sed -e 's/mips3/mips64/'`
;;
pc532 | pc532-*)
basic_machine=ns32k-pc532
;;
- pentium | p5)
- basic_machine=i586-intel
+ pentium | p5 | k5 | nexen)
+ basic_machine=i586-pc
;;
- pentiumpro | p6)
- basic_machine=i686-intel
+ pentiumpro | p6 | k6 | 6x86)
+ basic_machine=i686-pc
;;
- pentium-* | p5-*)
+ pentiumii | pentium2)
+ basic_machine=i786-pc
+ ;;
+ pentium-* | p5-* | k5-* | nexen-*)
basic_machine=i586-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- pentiumpro-* | p6-*)
+ pentiumpro-* | p6-* | k6-* | 6x86-*)
basic_machine=i686-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
- k5)
- # We don't have specific support for AMD's K5 yet, so just call it a Pentium
- basic_machine=i586-amd
- ;;
- nexen)
- # We don't have specific support for Nexgen yet, so just call it a Pentium
- basic_machine=i586-nexgen
+ pentiumii-* | pentium2-*)
+ basic_machine=i786-`echo $basic_machine | sed 's/^[^-]*-//'`
;;
pn)
basic_machine=pn-gould
basic_machine=i386-sequent
os=-dynix
;;
+ tx39)
+ basic_machine=mipstx39-unknown
+ ;;
+ tx39el)
+ basic_machine=mipstx39el-unknown
+ ;;
tower | tower-32)
basic_machine=m68k-ncr
;;
basic_machine=vax-dec
os=-vms
;;
- vpp*|vx|vx-*)
+ vpp*|vx|vx-*)
basic_machine=f301-fujitsu
;;
vxworks960)
# Here we handle the default manufacturer of certain CPU types. It is in
# some cases the only manufacturer, in others, it is the most popular.
mips)
- basic_machine=mips-mips
+ if [ x$os = x-linux-gnu ]; then
+ basic_machine=mips-unknown
+ else
+ basic_machine=mips-mips
+ fi
;;
romp)
basic_machine=romp-ibm
-solaris)
os=-solaris2
;;
- -unixware* | svr4*)
+ -svr4*)
os=-sysv4
;;
+ -unixware*)
+ os=-sysv4.2uw
+ ;;
-gnu/linux*)
os=`echo $os | sed -e 's|gnu/linux|linux-gnu|'`
;;
-gnu* | -bsd* | -mach* | -minix* | -genix* | -ultrix* | -irix* \
| -*vms* | -sco* | -esix* | -isc* | -aix* | -sunos | -sunos[34]*\
| -hpux* | -unos* | -osf* | -luna* | -dgux* | -solaris* | -sym* \
- | -amigados* | -msdos* | -newsos* | -unicos* | -aof* | -aos* \
- | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* \
+ | -amigaos* | -amigados* | -msdos* | -newsos* | -unicos* | -aof* \
+ | -aos* \
+ | -nindy* | -vxsim* | -vxworks* | -ebmon* | -hms* | -mvs* | -os390* \
| -clix* | -riscos* | -uniplus* | -iris* | -rtu* | -xenix* \
| -hiux* | -386bsd* | -netbsd* | -openbsd* | -freebsd* | -riscix* \
| -lynxos* | -bosx* | -nextstep* | -cxux* | -aout* | -elf* \
| -ptx* | -coff* | -ecoff* | -winnt* | -domain* | -vsta* \
| -udi* | -eabi* | -lites* | -ieee* | -go32* | -aux* \
- | -cygwin32* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
- | -linux-gnu* | -uxpv*)
+ | -cygwin* | -pe* | -psos* | -moss* | -proelf* | -rtems* \
+ | -mingw32* | -linux-gnu* | -uxpv* | -beos*)
# Remember, each alternative MUST END IN *, to match a version number.
;;
-linux*)
sparc-* | *-sun)
os=-sunos4.1.1
;;
+ *-be)
+ os=-beos
+ ;;
+ s390-ibm)
+ os=-os390 # /* S/390 -- gil -- 1451 */
+ ;;
*-ibm)
os=-aix
;;
os=-sysv
;;
*-cbm)
- os=-amigados
+ os=-amigaos
;;
*-dg)
os=-dgux
#! /bin/sh
-# From configure.in Revision: 1.126
+# From configure.in Revision: 1.179
+
# Guess values for system-dependent variables and create Makefiles.
-# Generated automatically using autoconf version 2.12.971230
+# Generated automatically using autoconf version 2.13.19990117
# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
#
# This configure script is free software; the Free Software Foundation
# Initialize some other variables.
subdirs=
MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
# Maximum number of lines to put in a shell here document.
ac_max_here_lines=12
--enable and --with options recognized:
--with-system-type=XXX test: override derived host system-type
--enable-add-ons=DIR... used to check if we are a glibc add-on.
- --without-cxx suppress check for C++, don't build demo
+ --without-cxx do not adjust ncurses bool to match C++
+ --without-cxx-binding do not build C++ binding and demo
+ --without-ada suppress check for Ada95, don't build demo
--without-progs suppress build with programs (e.g., tic)
--with-install-prefix prefixes actual install-location
+Options to Specify How Manpages are Installed:
+ --with-manpage-format specify manpage-format: gzip/compress/BSDI/normal and
+ optionally formatted, e.g., gzip,formatted
+ --with-manpage-renames specify manpage-renaming
Options to Specify the Libraries Built/Used:
--with-shared generate shared-libraries
--with-normal generate normal-libraries (default)
+EOF
+cat <<EOF
--with-debug generate debug-libraries (default)
--with-profile generate profile-libraries
--with-termlib generate separate terminfo library
--with-dbmalloc test: use Conor Cahill's dbmalloc library
--with-dmalloc test: use Gray Watson's dmalloc library
-EOF
-cat <<EOF
--with-gpm use Alessandro Rubini's GPM library
--enable-rpath use rpath option when generating shared libraries
+ --with-shlib-version=X Specify rel or abi version for shared libs
Fine-Tuning Your Configuration:
--disable-overwrite leave out the link to -lcurses
--disable-database use only built-in data
--disable-ext-funcs disable function-extensions
+EOF
+cat <<EOF
--with-fallbacks=XXX specify list of fallback terminal descriptions
- --enable-big-core assume machine has lots of memory
+ --with-terminfo-dirs=XXX specify list of terminfo directories (default: DATADIR/terminfo)
+ --disable-big-core assume machine has little memory
--enable-termcap compile in termcap fallback support
--enable-getcap fast termcap load, no xrefs to terminfo
--enable-getcap-cache cache translated termcaps in ~/.terminfo
--enable-symlinks make tic use symbolic links not hard links
-EOF
-cat <<EOF
--enable-bsdpad recognize BSD-style prefix padding
--enable-const compile with extra/non-standard const
--with-rcs-ids compile-in RCS identifiers
Experimental Code:
--with-develop enable all experimental options for testing
+EOF
+cat <<EOF
+ --enable-broken_linker compile with broken-linker support code
--enable-hard-tabs compile with experimental hard-tabs code
--enable-hashmap compile with experimental hashmap code
- --disable-safe-sprintf compile with experimental safe-sprintf code
+ --enable-no-padding compile with experimental no-padding code
+ --enable-safe-sprintf compile with experimental safe-sprintf code
--disable-scroll-hints compile hashmap without scroll-hints code
+ --enable-tcap-names compile with experimental definable-name code
--enable-sigwinch compile with experimental SIGWINCH handler
--enable-widec compile with experimental wide-char code
--enable-xmc-glitch compile with experimental xmc code
-EOF
-cat <<EOF
Testing/development Options:
--enable-echo build: display "compiling" commands (default)
+EOF
+cat <<EOF
--enable-warnings build: turn on GCC compiler warnings
--enable-assertions test: turn on generation of assertion code
--disable-leaks test: suppress permanent memory-leaks
--enable-expanded test: generate functions for certain macros
--disable-macros test: use functions rather than macros
Ada95 Binding Options:
- --with-ada-include=DIR Ada includes are in DIR (default: EPREFIX/ada_include)
- --with-ada-objects=DIR Ada objects are in DIR (default: EPREFIX/ada_objects)
+ --with-ada-compiler=CMD Specify Ada95 compiler command (default gnatmake)
+ --with-ada-include=DIR Ada includes are in DIR (default: PREFIX/lib/gnu-Ada/adainclude)
+ --with-ada-objects=DIR Ada objects are in DIR (default: PREFIX/lib/gnu-Ada/adalib)
EOF
exit 0 ;;
verbose=yes ;;
-version | --version | --versio | --versi | --vers)
- echo "configure generated by autoconf version 2.12.971230"
+ echo "configure generated by autoconf version 2.13.19990117"
exit 0 ;;
-with-* | --with-*)
# A filename unique to this package, relative to the directory that
# configure is in, which we can look for to find out if srcdir is correct.
-ac_unique_file=ncurses/lib_initscr.c
+ac_unique_file=ncurses/base/lib_initscr.c
# Find the source files, if location was not specified.
if test -z "$srcdir"; then
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
+ac_exeext=
+ac_objext=o
if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
# Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
if test -f $srcdir/config.guess ; then
# Make sure we can run config.sub.
-if $ac_config_sub sun4 >/dev/null 2>&1; then :
+if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then :
else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; }
fi
echo $ac_n "checking host system type""... $ac_c" 1>&6
-echo "configure:622: checking host system type" >&5
+echo "configure:640: checking host system type" >&5
host_alias=$host
case "$host_alias" in
NONE)
case $nonopt in
NONE)
- if host_alias=`$ac_config_guess`; then :
+ if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then :
else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; }
fi ;;
*) host_alias=$nonopt ;;
esac ;;
esac
-host=`$ac_config_sub $host_alias`
+host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias`
host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'`
host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'`
host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'`
### Default install-location
echo $ac_n "checking for prefix""... $ac_c" 1>&6
-echo "configure:713: checking for prefix" >&5
+echo "configure:731: checking for prefix" >&5
if test "x$prefix" = "xNONE" ; then
case "$cf_cv_system_name" in
# non-vendor systems don't have a conflict
if test "x$prefix" = "xNONE" ; then
echo $ac_n "checking for default include-directory""... $ac_c" 1>&6
-echo "configure:728: checking for default include-directory" >&5
+echo "configure:746: checking for default include-directory" >&5
test -n "$verbose" && echo 1>&6
for cf_symbol in \
$includedir \
# Extract the first word of "gcc", so it can be a program name with args.
set dummy gcc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:758: checking for $ac_word" >&5
+echo "configure:776: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CC="gcc"
# Extract the first word of "cc", so it can be a program name with args.
set dummy cc; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:787: checking for $ac_word" >&5
+echo "configure:806: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CC"; then
ac_cv_prog_CC="$CC" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
ac_prog_rejected=no
- for ac_dir in $PATH; do
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
echo "$ac_t""no" 1>&6
fi
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:857: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:835: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+echo "configure:889: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
ac_ext=c
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
-cat > conftest.$ac_ext <<EOF
-#line 845 "configure"
+cat > conftest.$ac_ext << EOF
+
+#line 900 "configure"
#include "confdefs.h"
+
main(){return(0);}
EOF
-if { (eval echo configure:849: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:905: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cc_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
ac_cv_prog_cc_works=no
fi
rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
if test $ac_cv_prog_cc_works = no; then
{ echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:869: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:931: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
-echo "configure:874: checking whether we are using GNU C" >&5
+echo "configure:936: checking whether we are using GNU C" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
yes;
#endif
EOF
-if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:883: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:945: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gcc=yes
else
ac_cv_prog_gcc=no
if test $ac_cv_prog_gcc = yes; then
GCC=yes
- ac_test_CFLAGS="${CFLAGS+set}"
- ac_save_CFLAGS="$CFLAGS"
- CFLAGS=
- echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
-echo "configure:898: checking whether ${CC-cc} accepts -g" >&5
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:964: checking whether ${CC-cc} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
- if test "$ac_test_CFLAGS" = set; then
- CFLAGS="$ac_save_CFLAGS"
- elif test $ac_cv_prog_cc_g = yes; then
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
CFLAGS="-g -O2"
else
- CFLAGS="-O2"
+ CFLAGS="-g"
fi
else
- GCC=
- test "${CFLAGS+set}" = set || CFLAGS="-g"
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
fi
if test -n "$GCC" ; then
echo $ac_n "checking version of gcc""... $ac_c" 1>&6
-echo "configure:927: checking version of gcc" >&5
+echo "configure:997: checking version of gcc" >&5
eval "$CC --version"
+fi
+if test $host != $build; then
+ for ac_prog in $CC gcc cc
+do
+# Extract the first word of "$ac_prog", so it can be a program name with args.
+set dummy $ac_prog; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:1006: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_BUILD_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$BUILD_CC"; then
+ ac_cv_prog_BUILD_CC="$BUILD_CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_BUILD_CC="$ac_prog"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+BUILD_CC="$ac_cv_prog_BUILD_CC"
+if test -n "$BUILD_CC"; then
+ echo "$ac_t""$BUILD_CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+test -n "$BUILD_CC" && break
+done
+
fi
echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
-echo "configure:931: checking how to run the C preprocessor" >&5
+echo "configure:1037: checking how to run the C preprocessor" >&5
# On Suns, sometimes $CPP names a directory.
if test -n "$CPP" && test -d "$CPP"; then
CPP=
# On the NeXT, cc -E runs the code through the compiler's parser,
# not just through cpp.
cat > conftest.$ac_ext <<EOF
-#line 946 "configure"
+#line 1052 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:952: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:1058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
rm -rf conftest*
CPP="${CC-cc} -E -traditional-cpp"
cat > conftest.$ac_ext <<EOF
-#line 963 "configure"
+#line 1069 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1075: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+#line 1086 "configure"
#include "confdefs.h"
#include <assert.h>
Syntax Error
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:969: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:1092: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
fi
rm -f conftest*
fi
+rm -f conftest*
+fi
rm -f conftest*
ac_cv_prog_CPP="$CPP"
fi
if test $ac_cv_prog_gcc = yes; then
echo $ac_n "checking whether ${CC-cc} needs -traditional""... $ac_c" 1>&6
-echo "configure:993: checking whether ${CC-cc} needs -traditional" >&5
+echo "configure:1118: checking whether ${CC-cc} needs -traditional" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gcc_traditional'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_pattern="Autoconf.*'x'"
cat > conftest.$ac_ext <<EOF
-#line 999 "configure"
+#line 1124 "configure"
#include "confdefs.h"
#include <sgtty.h>
Autoconf TIOCGETP
if test $ac_cv_prog_gcc_traditional = no; then
cat > conftest.$ac_ext <<EOF
-#line 1017 "configure"
+#line 1142 "configure"
#include "confdefs.h"
#include <termio.h>
Autoconf TCGETA
fi
echo $ac_n "checking for POSIXized ISC""... $ac_c" 1>&6
-echo "configure:1039: checking for POSIXized ISC" >&5
+echo "configure:1164: checking for POSIXized ISC" >&5
if test -d /etc/conf/kconfig.d &&
grep _POSIX_VERSION /usr/include/sys/unistd.h >/dev/null 2>&1
then
ISC=
fi
-# Extract the first word of "ldconfig", so it can be a program name with args.
+
+echo $ac_n "checking for ${CC-cc} option to accept ANSI C""... $ac_c" 1>&6
+echo "configure:1186: checking for ${CC-cc} option to accept ANSI C" >&5
+if eval "test \"`echo '$''{'cf_cv_ansi_cc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cf_cv_ansi_cc=no
+cf_save_CFLAGS="$CFLAGS"
+# Don't try gcc -ansi; that turns off useful extensions and
+# breaks some systems' header files.
+# AIX -qlanglvl=ansi
+# Ultrix and OSF/1 -std1
+# HP-UX -Aa -D_HPUX_SOURCE
+# SVR4 -Xc
+# UnixWare 1.2 (cannot use -Xc, since ANSI/POSIX clashes)
+for cf_arg in "-DCC_HAS_PROTOS" \
+ "" \
+ -qlanglvl=ansi \
+ -std1 \
+ "-Aa -D_HPUX_SOURCE +e" \
+ "-Aa -D_HPUX_SOURCE" \
+ -Xc
+do
+ CFLAGS="$cf_save_CFLAGS $cf_arg"
+ cat > conftest.$ac_ext <<EOF
+#line 1210 "configure"
+#include "confdefs.h"
+
+#ifndef CC_HAS_PROTOS
+#if !defined(__STDC__) || (__STDC__ != 1)
+choke me
+#endif
+#endif
+
+int main() {
+
+ int test (int i, double x);
+ struct s1 {int (*f) (int a);};
+ struct s2 {int (*f) (double a);};
+; return 0; }
+EOF
+if { (eval echo configure:1226: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_ansi_cc="$cf_arg"; break
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+fi
+rm -f conftest*
+done
+CFLAGS="$cf_save_CFLAGS"
+
+fi
+
+echo "$ac_t""$cf_cv_ansi_cc" 1>&6
+
+if test "$cf_cv_ansi_cc" != "no"; then
+if test ".$cf_cv_ansi_cc" != ".-DCC_HAS_PROTOS"; then
+ CFLAGS="$CFLAGS $cf_cv_ansi_cc"
+else
+ cat >> confdefs.h <<\EOF
+#define CC_HAS_PROTOS 1
+EOF
+
+fi
+fi
+
+
+if test "$cf_cv_ansi_cc" = "no"; then
+ { echo "configure: error: Your compiler does not appear to recognize prototypes.
+You have the following choices:
+ a. adjust your compiler options
+ b. get an up-to-date compiler
+ c. use a wrapper such as unproto" 1>&2; exit 1; }
+fi
+
+
+
+PROG_EXT=
+case $cf_cv_system_name in
+os2*)
+ # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@
+ CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__"
+ CXXFLAGS="$CXXFLAGS -Zmt -D__ST_MT_ERRNO__"
+ LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"`
+ PROG_EXT=".exe"
+ ;;
+cygwin*)
+ PROG_EXT=".exe"
+ ;;
+esac
+
+
+
+case "$cf_cv_system_name" in
+freebsd*) #(vi
+ test -z "$LDCONFIG" && LDCONFIG="/sbin/ldconfig -R"
+ ;;
+*) LDPATH=$PATH:/sbin:/usr/sbin
+ # Extract the first word of "ldconfig", so it can be a program name with args.
set dummy ldconfig; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1062: checking for $ac_word" >&5
+echo "configure:1287: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_path_LDCONFIG'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
/*)
ac_cv_path_LDCONFIG="$LDCONFIG" # Let the user override the test with a path.
;;
+ ?:/*)
+ ac_cv_path_LDCONFIG="$LDCONFIG" # Let the user override the test with a dos path.
+ ;;
*)
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH:/sbin:/usr/sbin$ac_dummy; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$LDPATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_path_LDCONFIG="$ac_dir/$ac_word"
echo "$ac_t""no" 1>&6
fi
+ ;;
+esac
-echo $ac_n "checking if you want to build with C++""... $ac_c" 1>&6
-echo "configure:1092: checking if you want to build with C++" >&5
+
+echo $ac_n "checking if you want to ensure bool is consistent with C++""... $ac_c" 1>&6
+echo "configure:1324: checking if you want to ensure bool is consistent with C++" >&5
# Check whether --with-cxx or --without-cxx was given.
if test "${with_cxx+set}" = set; then
fi
echo "$ac_t""$cf_with_cxx" 1>&6
-if test "X$cf_with_cxx" != Xno ; then
-for ac_prog in $CCC c++ g++ gcc CC cxx cc++
+if test "X$cf_with_cxx" = Xno ; then
+ CXX=""
+ GXX=""
+else
+ for ac_prog in $CCC c++ g++ gcc CC cxx cc++ cl
do
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1109: checking for $ac_word" >&5
+echo "configure:1344: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_CXX'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$CXX"; then
ac_cv_prog_CXX="$CXX" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_CXX="$ac_prog"
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works""... $ac_c" 1>&6
-echo "configure:1140: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
+echo "configure:1376: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) works" >&5
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
-cat > conftest.$ac_ext <<EOF
-#line 1150 "configure"
+cat > conftest.$ac_ext << EOF
+
+#line 1387 "configure"
#include "confdefs.h"
-main(){return(0);}
+
+int main(){return(0);}
EOF
-if { (eval echo configure:1154: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:1392: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
ac_cv_prog_cxx_works=yes
# If we can't run a trivial program, we are probably using a cross compiler.
if (./conftest; exit) 2>/dev/null; then
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo "$ac_t""$ac_cv_prog_cxx_works" 1>&6
{ echo "configure: error: installation or configuration problem: C++ compiler cannot create executables." 1>&2; exit 1; }
fi
echo $ac_n "checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
-echo "configure:1180: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "configure:1418: checking whether the C++ compiler ($CXX $CXXFLAGS $LDFLAGS) is a cross-compiler" >&5
echo "$ac_t""$ac_cv_prog_cxx_cross" 1>&6
cross_compiling=$ac_cv_prog_cxx_cross
echo $ac_n "checking whether we are using GNU C++""... $ac_c" 1>&6
-echo "configure:1185: checking whether we are using GNU C++" >&5
+echo "configure:1423: checking whether we are using GNU C++" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gxx'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
yes;
#endif
EOF
-if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1194: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+if { ac_try='${CXX-g++} -E conftest.C'; { (eval echo configure:1432: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
ac_cv_prog_gxx=yes
else
ac_cv_prog_gxx=no
if test $ac_cv_prog_gxx = yes; then
GXX=yes
- ac_test_CXXFLAGS="${CXXFLAGS+set}"
- ac_save_CXXFLAGS="$CXXFLAGS"
- CXXFLAGS=
- echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
-echo "configure:1209: checking whether ${CXX-g++} accepts -g" >&5
+else
+ GXX=
+fi
+
+ac_test_CXXFLAGS="${CXXFLAGS+set}"
+ac_save_CXXFLAGS="$CXXFLAGS"
+CXXFLAGS=
+echo $ac_n "checking whether ${CXX-g++} accepts -g""... $ac_c" 1>&6
+echo "configure:1451: checking whether ${CXX-g++} accepts -g" >&5
if eval "test \"`echo '$''{'ac_cv_prog_cxx_g'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo "$ac_t""$ac_cv_prog_cxx_g" 1>&6
- if test "$ac_test_CXXFLAGS" = set; then
- CXXFLAGS="$ac_save_CXXFLAGS"
- elif test $ac_cv_prog_cxx_g = yes; then
+if test "$ac_test_CXXFLAGS" = set; then
+ CXXFLAGS="$ac_save_CXXFLAGS"
+elif test $ac_cv_prog_cxx_g = yes; then
+ if test "$GXX" = yes; then
CXXFLAGS="-g -O2"
else
- CXXFLAGS="-O2"
+ CXXFLAGS="-g"
fi
else
- GXX=
- test "${CXXFLAGS+set}" = set || CXXFLAGS="-g"
+ if test "$GXX" = yes; then
+ CXXFLAGS="-O2"
+ else
+ CXXFLAGS=
+ fi
fi
fi
if test -n "$GXX" ; then case "`${CXX-g++} --version`" in 1*|2.[0-6]*) GXX=""; CXX=""; ac_cv_prog_gxx=no; cf_cxx_library=no ; echo No: templates do not work;; esac; fi
+echo $ac_n "checking if you want to build C++ binding and demo""... $ac_c" 1>&6
+echo "configure:1486: checking if you want to build C++ binding and demo" >&5
+
+# Check whether --with-cxx-binding or --without-cxx-binding was given.
+if test "${with_cxx_binding+set}" = set; then
+ withval="$with_cxx_binding"
+ cf_with_cxx_binding=$withval
+else
+ cf_with_cxx_binding=$cf_with_cxx
+fi
+
+echo "$ac_t""$cf_with_cxx_binding" 1>&6
+
+echo $ac_n "checking if you want to build with Ada95""... $ac_c" 1>&6
+echo "configure:1499: checking if you want to build with Ada95" >&5
+
+# Check whether --with-ada or --without-ada was given.
+if test "${with_ada+set}" = set; then
+ withval="$with_ada"
+ cf_with_ada=$withval
+else
+ cf_with_ada=yes
+fi
+
+echo "$ac_t""$cf_with_ada" 1>&6
+
echo $ac_n "checking if you want to build programs such as tic""... $ac_c" 1>&6
-echo "configure:1240: checking if you want to build programs such as tic" >&5
+echo "configure:1512: checking if you want to build programs such as tic" >&5
# Check whether --with-progs or --without-progs was given.
if test "${with_progs+set}" = set; then
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1263: checking for $ac_word" >&5
+echo "configure:1535: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_AWK'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$AWK"; then
ac_cv_prog_AWK="$AWK" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_AWK="$ac_prog"
done
echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6
-echo "configure:1292: checking whether ${MAKE-make} sets \${MAKE}" >&5
+echo "configure:1565: checking whether ${MAKE-make} sets \${MAKE}" >&5
set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
# SunOS /usr/etc/install
# IRIX /sbin/install
# AIX /bin/install
+# AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag
# AFS /usr/afsws/bin/install, which mishandles nonexistent args
# SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff"
# ./install, which can be erroneously created by make from ./install.sh.
echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6
-echo "configure:1329: checking for a BSD compatible install" >&5
+echo "configure:1603: checking for a BSD compatible install" >&5
if test -z "$INSTALL"; then
if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS="${IFS}:"
+ IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":"
for ac_dir in $PATH; do
# Account for people who put trailing slashes in PATH elements.
case "$ac_dir/" in
/|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;;
*)
# OSF1 and SCO ODT 3.0 have their own names for install.
- for ac_prog in ginstall installbsd scoinst install; do
+ # Don't use installbsd from OSF since it installs stuff as root
+ # by default.
+ for ac_prog in ginstall scoinst install; do
if test -f $ac_dir/$ac_prog; then
if test $ac_prog = install &&
grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then
# AIX install. It has an incompatible calling convention.
- # OSF/1 installbsd also uses dspmsg, but is usable.
:
else
ac_cv_path_install="$ac_dir/$ac_prog -c"
# It thinks the first close brace ends the variable substitution.
test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}'
+test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}'
+
test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644'
case $INSTALL in
esac
echo $ac_n "checking for long file names""... $ac_c" 1>&6
-echo "configure:1389: checking for long file names" >&5
+echo "configure:1666: checking for long file names" >&5
if eval "test \"`echo '$''{'ac_cv_sys_long_file_names'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
fi
echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6
-echo "configure:1433: checking whether ln -s works" >&5
+echo "configure:1710: checking whether ln -s works" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
# Extract the first word of "ranlib", so it can be a program name with args.
set dummy ranlib; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1456: checking for $ac_word" >&5
+echo "configure:1733: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$RANLIB"; then
ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_RANLIB="ranlib"
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1487: checking for $ac_word" >&5
+echo "configure:1765: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_LINT'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$LINT"; then
ac_cv_prog_LINT="$LINT" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_LINT="$ac_prog"
# Extract the first word of "$ac_prog", so it can be a program name with args.
set dummy $ac_prog; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:1520: checking for $ac_word" >&5
+echo "configure:1799: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_MAN'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$MAN"; then
ac_cv_prog_MAN="$MAN" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_MAN="$ac_prog"
else
echo $ac_n "checking for loader (symbol LD)""... $ac_c" 1>&6
-echo "configure:1555: checking for loader (symbol LD)" >&5
+echo "configure:1835: checking for loader (symbol LD)" >&5
test -z "$LD" && LD=ld
echo "$ac_t""$LD" 1>&6
else
echo $ac_n "checking for archiver (symbol AR)""... $ac_c" 1>&6
-echo "configure:1569: checking for archiver (symbol AR)" >&5
+echo "configure:1849: checking for archiver (symbol AR)" >&5
test -z "$AR" && AR=ar
echo "$ac_t""$AR" 1>&6
else
echo $ac_n "checking for archiver options (symbol AR_OPTS)""... $ac_c" 1>&6
-echo "configure:1583: checking for archiver options (symbol AR_OPTS)" >&5
+echo "configure:1863: checking for archiver options (symbol AR_OPTS)" >&5
test -z "$AR_OPTS" && AR_OPTS=rv
echo "$ac_t""$AR_OPTS" 1>&6
echo $ac_n "checking for makeflags variable""... $ac_c" 1>&6
-echo "configure:1595: checking for makeflags variable" >&5
+echo "configure:1875: checking for makeflags variable" >&5
if eval "test \"`echo '$''{'cf_cv_makeflags'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cf_cv_makeflags=''
- for cf_option in '$(MFLAGS)' '-$(MAKEFLAGS)'
+ for cf_option in '-$(MAKEFLAGS)' '$(MFLAGS)'
do
cat >cf_makeflags.tmp <<CF_EOF
all :
- echo '.$cf_option'
+ @ echo '.$cf_option'
CF_EOF
- set cf_result=`${MAKE-make} -f cf_makeflags.tmp 2>/dev/null`
- if test "$cf_result" != "."
- then
- cf_cv_makeflags=$cf_option
+ cf_result=`${MAKE-make} -k -f cf_makeflags.tmp 2>/dev/null`
+ case "$cf_result" in
+ .*k)
+ cf_result=`${MAKE-make} -k -f cf_makeflags.tmp CC=cc 2>/dev/null`
+ case "$cf_result" in
+ .*CC=*) cf_cv_makeflags=
+ ;;
+ *) cf_cv_makeflags=$cf_option
+ ;;
+ esac
break
- fi
+ ;;
+ *) echo no match "$cf_result"
+ ;;
+ esac
done
rm -f cf_makeflags.tmp
fi
echo "$ac_t""$cf_cv_makeflags" 1>&6
-echo $ac_n "checking format of man-pages""... $ac_c" 1>&6
-echo "configure:1621: checking format of man-pages" >&5
+
+echo $ac_n "checking if you have specified an install-prefix""... $ac_c" 1>&6
+echo "configure:1911: checking if you have specified an install-prefix" >&5
+
+# Check whether --with-install-prefix or --without-install-prefix was given.
+if test "${with_install_prefix+set}" = set; then
+ withval="$with_install_prefix"
+ case "$withval" in #(vi
+ yes|no) #(vi
+ ;;
+ *) INSTALL_PREFIX="$withval"
+ ;;
+ esac
+fi
+
+echo "$ac_t""$INSTALL_PREFIX" 1>&6
+
+
+###############################################################################
+
+
+ echo $ac_n "checking format of man-pages""... $ac_c" 1>&6
+echo "configure:1931: checking format of man-pages" >&5
+
+
+# Check whether --with-manpage-format or --without-manpage-format was given.
+if test "${with_manpage_format+set}" = set; then
+ withval="$with_manpage_format"
+ cf_manpage_form=$withval
+else
+ cf_manpage_form=unknown
+fi
+
+
+case ".$cf_manpage_form" in
+.gzip|.compress|.BSDI|.normal|.formatted) # (vi
+ ;;
+.unknown|.) # (vi
if test -z "$MANPATH" ; then
MANPATH="/usr/man:/usr/share/man"
fi
# look for the 'date' man-page (it's most likely to be installed!)
IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- cf_form=unknown
+ cf_manpage_form=unknown
for cf_dir in $MANPATH; do
test -z "$cf_dir" && cf_dir=/usr/man
- cf_rename=""
- cf_format=no
for cf_name in $cf_dir/*/date.[01]* $cf_dir/*/date
do
cf_test=`echo $cf_name | sed -e 's/*//'`
if test "x$cf_test" = "x$cf_name" ; then
case "$cf_name" in
- *.gz) cf_form=gzip; cf_name=`basename $cf_name .gz`;;
- *.Z) cf_form=compress; cf_name=`basename $cf_name .Z`;;
- *.0) cf_form=BSDI; cf_format=yes;;
- *) cf_form=cat;;
+ *.gz) cf_manpage_form=gzip;;
+ *.Z) cf_manpage_form=compress;;
+ *.0) cf_manpage_form=BSDI,formatted;;
+ *) cf_manpage_form=normal;;
esac
break
fi
done
- if test "$cf_form" != "unknown" ; then
+ if test "$cf_manpage_form" != "unknown" ; then
break
fi
done
IFS="$ac_save_ifs"
- if test "$prefix" = "NONE" ; then
- cf_prefix="$ac_default_prefix"
+ ;;
+.*) # (vi
+ echo "configure: warning: Unexpected manpage-format" 1>&2
+ ;;
+esac
+
+echo "$ac_t""$cf_manpage_form" 1>&6
+
+
+echo $ac_n "checking for manpage renaming""... $ac_c" 1>&6
+echo "configure:1983: checking for manpage renaming" >&5
+
+
+# Check whether --with-manpage-renames or --without-manpage-renames was given.
+if test "${with_manpage_renames+set}" = set; then
+ withval="$with_manpage_renames"
+ cf_manpage_renames=$withval
+else
+ cf_manpage_renames=yes
+fi
+
+
+case ".$cf_manpage_renames" in #(vi
+.no) #(vi
+ ;;
+.|.yes)
+ # Debian 'man' program?
+ if test -f /etc/debian_version ; then
+ cf_manpage_renames=`cd $srcdir && pwd`/man/man_db.renames
else
- cf_prefix="$prefix"
+ cf_manpage_renames=no
fi
+ ;;
+esac
- # Debian 'man' program?
- test -f /etc/debian_version && \
- cf_rename=`cd $srcdir && pwd`/man/man_db.renames
+if test "$cf_manpage_renames" != no ; then
+ if test ! -f $cf_manpage_renames ; then
+ { echo "configure: error: not a filename: $cf_manpage_renames" 1>&2; exit 1; }
+ fi
test ! -d man && mkdir man
# Construct a sed-script to perform renaming within man-pages
- if test -n "$cf_rename" ; then
- $srcdir/man/make_sed.sh $cf_rename >man/edit_man.sed
- fi
- if test $cf_format = yes ; then
- cf_subdir='$mandir/cat'
- else
- cf_subdir='$mandir/man'
+ if test -n "$cf_manpage_renames" ; then
+ test ! -d man && mkdir man
+ $srcdir/man/make_sed.sh $cf_manpage_renames >man/edit_man.sed
fi
+fi
-cat >man/edit_man.sh <<CF_EOF
+echo "$ac_t""$cf_manpage_renames" 1>&6
+
+
+ if test "$prefix" = "NONE" ; then
+ cf_prefix="$ac_default_prefix"
+ else
+ cf_prefix="$prefix"
+ fi
+
+ case "$cf_manpage_form" in # (vi
+ *formatted*) # (vi
+ cf_subdir='$mandir/cat'
+ cf_format=yes
+ ;;
+ *)
+ cf_subdir='$mandir/man'
+ cf_format=no
+ ;;
+ esac
+
+test ! -d man && mkdir man
+cat >man/edit_man.sh <<CF_EOF
#! /bin/sh
# this script is generated by the configure-script
prefix="$cf_prefix"
mandir=\$1
shift
-for i in \$*
-do
-case \$i in
+for i in \$* ; do
+case \$i in #(vi
+*.orig|*.rej) ;; #(vi
*.[0-9]*)
section=\`expr "\$i" : '.*\\.\\([0-9]\\)[xm]*'\`;
if test \$verb = installing ; then
fi
source=\`basename \$i\`
CF_EOF
-if test -z "$cf_rename" ; then
+if test "$cf_manpage_renames" = no ; then
cat >>man/edit_man.sh <<CF_EOF
target=$cf_subdir\${section}/\$source
sed -e "s,@DATADIR@,\$datadir," < \$i >\$TMP
CF_EOF
else
cat >>man/edit_man.sh <<CF_EOF
- target=\`grep "^\$source" $cf_rename | $AWK '{print \$2}'\`
+ target=\`grep "^\$source" $cf_manpage_renames | $AWK '{print \$2}'\`
if test -z "\$target" ; then
echo '? missing rename for '\$source
target="\$source"
test \$verb = installing && sed -e "s,@DATADIR@,\$datadir," < \$i | sed -f edit_man.sed >\$TMP
CF_EOF
fi
-if test \$verb = installing ; then
if test $cf_format = yes ; then
cat >>man/edit_man.sh <<CF_EOF
nroff -man \$TMP >\$TMP.out
mv \$TMP.out \$TMP
CF_EOF
fi
-fi
-case "$cf_form" in
-compress)
+case "$cf_manpage_form" in #(vi
+*compress*) #(vi
cat >>man/edit_man.sh <<CF_EOF
if test \$verb = installing ; then
if ( compress -f \$TMP )
target="\$target.Z"
CF_EOF
;;
-gzip)
+*gzip*) #(vi
cat >>man/edit_man.sh <<CF_EOF
if test \$verb = installing ; then
if ( gzip -f \$TMP )
target="\$target.gz"
CF_EOF
;;
-BSDI)
+*BSDI*)
cat >>man/edit_man.sh <<CF_EOF
# BSDI installs only .0 suffixes in the cat directories
target="\`echo \$target|sed -e 's/\.[1-9]\+.\?/.0/'\`"
fi
;;
esac
-done
+done
CF_EOF
chmod 755 man/edit_man.sh
-echo "$ac_t""$cf_form" 1>&6
-
-
-echo $ac_n "checking if you have specified an install-prefix""... $ac_c" 1>&6
-echo "configure:1771: checking if you have specified an install-prefix" >&5
-
-# Check whether --with-install-prefix or --without-install-prefix was given.
-if test "${with_install_prefix+set}" = set; then
- withval="$with_install_prefix"
- case "$withval" in #(vi
- yes|no) #(vi
- ;;
- *) INSTALL_PREFIX="$withval"
- ;;
- esac
-fi
-echo "$ac_t""$INSTALL_PREFIX" 1>&6
###############################################################################
cf_list_models=""
echo $ac_n "checking if you want to build shared libraries""... $ac_c" 1>&6
-echo "configure:1796: checking if you want to build shared libraries" >&5
+echo "configure:2148: checking if you want to build shared libraries" >&5
# Check whether --with-shared or --without-shared was given.
if test "${with_shared+set}" = set; then
test "$with_shared" = "yes" && cf_list_models="$cf_list_models shared"
echo $ac_n "checking if you want to build static libraries""... $ac_c" 1>&6
-echo "configure:1810: checking if you want to build static libraries" >&5
+echo "configure:2162: checking if you want to build static libraries" >&5
# Check whether --with-normal or --without-normal was given.
if test "${with_normal+set}" = set; then
test "$with_normal" = "yes" && cf_list_models="$cf_list_models normal"
echo $ac_n "checking if you want to build debug libraries""... $ac_c" 1>&6
-echo "configure:1824: checking if you want to build debug libraries" >&5
+echo "configure:2176: checking if you want to build debug libraries" >&5
# Check whether --with-debug or --without-debug was given.
if test "${with_debug+set}" = set; then
test "$with_debug" = "yes" && cf_list_models="$cf_list_models debug"
echo $ac_n "checking if you want to build profiling libraries""... $ac_c" 1>&6
-echo "configure:1838: checking if you want to build profiling libraries" >&5
+echo "configure:2190: checking if you want to build profiling libraries" >&5
# Check whether --with-profile or --without-profile was given.
if test "${with_profile+set}" = set; then
test "$with_profile" = "yes" && cf_list_models="$cf_list_models profile"
echo $ac_n "checking if you want to build a separate terminfo library""... $ac_c" 1>&6
-echo "configure:1852: checking if you want to build a separate terminfo library" >&5
+echo "configure:2204: checking if you want to build a separate terminfo library" >&5
# Check whether --with-termlib or --without-termlib was given.
if test "${with_termlib+set}" = set; then
### Checks for special libraries, must be done up-front.
echo $ac_n "checking if you want to link with dbmalloc for testing""... $ac_c" 1>&6
-echo "configure:1866: checking if you want to link with dbmalloc for testing" >&5
+echo "configure:2218: checking if you want to link with dbmalloc for testing" >&5
# Check whether --with-dbmalloc or --without-dbmalloc was given.
if test "${with_dbmalloc+set}" = set; then
withval="$with_dbmalloc"
- with_dbmalloc=yes
+ with_dbmalloc=$withval
else
with_dbmalloc=no
fi
echo "$ac_t""$with_dbmalloc" 1>&6
if test $with_dbmalloc = yes ; then
echo $ac_n "checking for debug_malloc in -ldbmalloc""... $ac_c" 1>&6
-echo "configure:1879: checking for debug_malloc in -ldbmalloc" >&5
+echo "configure:2231: checking for debug_malloc in -ldbmalloc" >&5
ac_lib_var=`echo dbmalloc'_'debug_malloc | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-ldbmalloc $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1887 "configure"
+#line 2239 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
debug_malloc()
; return 0; }
EOF
-if { (eval echo configure:1898: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2250: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking if you want to link with dmalloc for testing""... $ac_c" 1>&6
-echo "configure:1928: checking if you want to link with dmalloc for testing" >&5
+echo "configure:2280: checking if you want to link with dmalloc for testing" >&5
# Check whether --with-dmalloc or --without-dmalloc was given.
if test "${with_dmalloc+set}" = set; then
withval="$with_dmalloc"
- with_dmalloc=yes
+ with_dmalloc=$withval
else
with_dmalloc=no
fi
echo "$ac_t""$with_dmalloc" 1>&6
if test $with_dmalloc = yes ; then
echo $ac_n "checking for dmalloc_debug in -ldmalloc""... $ac_c" 1>&6
-echo "configure:1941: checking for dmalloc_debug in -ldmalloc" >&5
+echo "configure:2293: checking for dmalloc_debug in -ldmalloc" >&5
ac_lib_var=`echo dmalloc'_'dmalloc_debug | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-ldmalloc $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 1949 "configure"
+#line 2301 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
dmalloc_debug()
; return 0; }
EOF
-if { (eval echo configure:1960: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2312: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
+SHLIB_LIST=""
echo $ac_n "checking if you want to link with the gpm mouse library""... $ac_c" 1>&6
-echo "configure:1990: checking if you want to link with the gpm mouse library" >&5
+echo "configure:2343: checking if you want to link with the gpm mouse library" >&5
# Check whether --with-gpm or --without-gpm was given.
if test "${with_gpm+set}" = set; then
withval="$with_gpm"
- with_gpm=yes
+ with_gpm=$withval
else
with_gpm=no
fi
echo "$ac_t""$with_gpm" 1>&6
if test $with_gpm = yes ; then
echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
-echo "configure:2003: checking for Gpm_Open in -lgpm" >&5
+echo "configure:2356: checking for Gpm_Open in -lgpm" >&5
ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_save_LIBS="$LIBS"
-LIBS="-lgpm -lcurses -ltermcap $LIBS"
+LIBS="-lgpm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 2011 "configure"
+#line 2364 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
Gpm_Open()
; return 0; }
EOF
-if { (eval echo configure:2022: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2375: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
echo "$ac_t""yes" 1>&6
- EXTRA_LIBS="$EXTRA_LIBS -lgpm -lncurses"
- SHLIB_LIST="$SHLIB_DEPS -lgpm "
+ EXTRA_LIBS="-lgpm -lncurses $EXTRA_LIBS"
+ SHLIB_LIST="-lgpm $SHLIB_LIST"
cat >> confdefs.h <<\EOF
#define HAVE_LIBGPM 1
EOF
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:2048: checking for $ac_hdr" >&5
+echo "configure:2401: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2053 "configure"
+#line 2406 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:2058: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:2411: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
else
echo "$ac_t""no" 1>&6
+echo "configure: warning: Cannot link with gpm library - read the FAQ" 1>&2
fi
fi
+TINFO_LIST="$SHLIB_LIST"
+test $with_termlib = yes && SHLIB_LIST="$SHLIB_LIST -ltinfo"
+
+
echo $ac_n "checking for specified models""... $ac_c" 1>&6
-echo "configure:2095: checking for specified models" >&5
+echo "configure:2453: checking for specified models" >&5
test -z "$cf_list_models" && cf_list_models=normal
echo "$ac_t""$cf_list_models" 1>&6
profile) DFT_DEP_SUFFIX='_p.a' ;;
shared)
case $cf_cv_system_name in
- openbsd*|netbsd*|freebsd*)
+ openbsd*|freebsd*)
DFT_DEP_SUFFIX='.so.$(REL_VERSION)' ;;
+ netbsd*)
+ if test -f /usr/libexec/ld.elf_so; then
+ DFT_DEP_SUFFIX='.so'
+ else
+ DFT_DEP_SUFFIX='.so.$(REL_VERSION)'
+ fi
+ ;;
hpux*) DFT_DEP_SUFFIX='.sl' ;;
*) DFT_DEP_SUFFIX='.so' ;;
esac
os2) cf_prefix='' ;;
*) cf_prefix='lib' ;;
esac
+ LIB_PREFIX=$cf_prefix
+
LIB_PREFIX=$LIB_DIR/$cf_prefix
if test X"$CC_G_OPT" = X"" ; then
CC_G_OPT='-g'
- test -n "$GCC" && test "${ac_cv_prog_cc_g}${ac_cv_prog_gcc_g}" != yes && CC_G_OPT=''
+ test -n "$GCC" && test "${ac_cv_prog_cc_g}" != yes && CC_G_OPT=''
fi
if test X"$CXX_G_OPT" = X"" ; then
CXX_G_OPT='-g'
- test -n "$GXX" && test "${ac_cv_prog_cxx_g}${ac_cv_prog_gxx_g}" != yes && CXX_G_OPT=''
+ test -n "$GXX" && test "${ac_cv_prog_cxx_g}" != yes && CXX_G_OPT=''
fi
esac
echo $ac_n "checking if rpath option should be used""... $ac_c" 1>&6
-echo "configure:2170: checking if rpath option should be used" >&5
+echo "configure:2537: checking if rpath option should be used" >&5
# Check whether --enable-rpath or --disable-rpath was given.
if test "${enable_rpath+set}" = set; then
INSTALL_LIB="-m 644"
cf_cv_do_symlinks=no
+
+ echo $ac_n "checking if release/abi version should be used for shared libs""... $ac_c" 1>&6
+echo "configure:2559: checking if release/abi version should be used for shared libs" >&5
+
+# Check whether --with-shlib-version or --without-shlib-version was given.
+if test "${with_shlib_version+set}" = set; then
+ withval="$with_shlib_version"
+ test -z "$withval" && withval=auto
+ case $withval in #(vi
+ yes) #(vi
+ cf_cv_shlib_version=auto
+ ;;
+ rel|abi|auto|no) #(vi
+ cf_cv_shlib_version=$withval
+ ;;
+ *)
+ { echo "configure: error: option value must be one of: rel, abi, auto or no" 1>&2; exit 1; }
+ ;;
+ esac
+
+else
+ cf_cv_shlib_version=auto
+fi
+
+ echo "$ac_t""$cf_cv_shlib_version" 1>&6
+
cf_cv_rm_so_locs=no
case $cf_cv_system_name in
+ hpux10.*)
+ # (tested with gcc 2.7.2 -- I don't have c89)
+ if test -n "$GCC"; then
+ CC_SHARED_OPTS='-fPIC'
+ LD_SHARED_OPTS='-Xlinker +b -Xlinker $(libdir)'
+ else
+ CC_SHARED_OPTS='+Z'
+ LD_SHARED_OPTS='-Wl,+b,$(libdir)'
+ fi
+ MK_SHARED_LIB='$(LD) +b $(libdir) -b +h `basename $@` -o $@'
+ # HP-UX shared libraries must be executable, and should be
+ # readonly to exploit a quirk in the memory manager.
+ INSTALL_LIB="-m 555"
+ cf_cv_do_symlinks=reverse
+ ;;
hpux*)
# (tested with gcc 2.7.2 -- I don't have c89)
- if test "${CC}" = "gcc"; then
+ if test -n "$GCC"; then
CC_SHARED_OPTS='-fPIC'
LD_SHARED_OPTS='-Xlinker +b -Xlinker $(libdir)'
else
CC_SHARED_OPTS='+Z'
- LD_SHARED_OPTS='+b $(libdir)'
+ LD_SHARED_OPTS='-Wl,+b,$(libdir)'
fi
- MK_SHARED_LIB='$(LD) -b -o $@'
+ MK_SHARED_LIB='$(LD) +b $(libdir) -b -o $@'
# HP-UX shared libraries must be executable, and should be
# readonly to exploit a quirk in the memory manager.
INSTALL_LIB="-m 555"
;;
irix*)
# tested with IRIX 5.2 and 'cc'.
- if test "${CC}" = "gcc"; then
+ if test -n "$GCC"; then
CC_SHARED_OPTS='-fPIC'
else
CC_SHARED_OPTS='-KPIC'
MK_SHARED_LIB='$(LD) -shared -rdata_shared -soname `basename $@` -o $@'
cf_cv_rm_so_locs=yes
;;
- linux*)
+ linux*|gnu*)
# tested with Linux 2.0.29 and gcc 2.7.2 (ELF)
- CC_SHARED_OPTS='-fPIC'
- MK_SHARED_LIB='gcc -o $@.$(REL_VERSION) -L../lib -L\$(libdir) -shared -Wl,-soname,`basename $@.$(ABI_VERSION)`,-stats,$(SHLIB_LIST)-lc'
+ CC_SHARED_OPTS='-fpic'
test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-Wl,-rpath,"
if test $DFT_LWR_MODEL = "shared" ; then
LOCAL_LDFLAGS='-Wl,-rpath,../lib'
LOCAL_LDFLAGS2='-Wl,-rpath,../../lib'
fi
- cf_cv_do_symlinks=yes
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ if test $cf_cv_shlib_version = no ; then
+ MK_SHARED_LIB='$(CC) -shared -Wl,-stats,-lc -o $@'
+ else
+ MK_SHARED_LIB='$(CC) -shared -Wl,-soname,`basename $@.$(ABI_VERSION)`,-stats,-lc -o $@'
+ fi
+ ;;
+ openbsd2*)
+ CC_SHARED_OPTS='-fpic -DPIC'
+ MK_SHARED_LIB='$(LD) -Bshareable -soname,`basename $@.$(ABI_VERSION)` -o $@'
;;
- openbsd*|netbsd*|freebsd*)
+ openbsd*|freebsd*)
CC_SHARED_OPTS='-fpic -DPIC'
MK_SHARED_LIB='$(LD) -Bshareable -o $@'
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ ;;
+ netbsd*)
+ CC_SHARED_OPTS='-fpic -DPIC'
+ test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-Wl,-rpath,"
+ if test $DFT_LWR_MODEL = "shared" && test $cf_cv_ld_rpath = yes ; then
+ LOCAL_LDFLAGS='-Wl,-rpath,../lib'
+ LOCAL_LDFLAGS2='-Wl,-rpath,../../lib'
+ EXTRA_LDFLAGS="-Wl,-rpath,\$(libdir) $EXTRA_LDFLAGS"
+ MK_SHARED_LIB='$(CC) -shared -Wl,-soname,`basename $@.$(ABI_VERSION)` -o $@'
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ else
+ MK_SHARED_LIB='$(LD) -Bshareable -o $@'
+ fi
;;
osf*|mls+*)
# tested with OSF/1 V3.2 and 'cc'
# tested with OSF/1 V3.2 and gcc 2.6.3 (but the c++ demo didn't
# link with shared libs).
CC_SHARED_OPTS=''
- MK_SHARED_LIB='$(LD) -o $@.$(REL_VERSION) -set_version $(ABI_VERSION):$(REL_VERSION) -expect_unresolved "*" -shared -soname `basename $@.$(ABI_VERSION)`'
+ MK_SHARED_LIB='$(LD) -set_version $(REL_VERSION):$(ABI_VERSION) -expect_unresolved "*" -shared -soname `basename $@`'
test $cf_cv_ld_rpath = yes && cf_ld_rpath_opt="-rpath"
case $host_os in
osf4*)
MK_SHARED_LIB="${MK_SHARED_LIB} -msym"
;;
esac
+ MK_SHARED_LIB="${MK_SHARED_LIB}"' -o $@'
if test $DFT_LWR_MODEL = "shared" ; then
LOCAL_LDFLAGS='-Wl,-rpath,../lib'
LOCAL_LDFLAGS2='-Wl,-rpath,../../lib'
fi
- cf_cv_do_symlinks=yes
cf_cv_rm_so_locs=yes
;;
+ sco3.2v5*) # (also uw2* and UW7) hops 13-Apr-98
+ # tested with osr5.0.5
+ if test $ac_cv_prog_gcc = yes; then
+ CC_SHARED_OPTS='-fpic'
+ else
+ CC_SHARED_OPTS='-belf -KPIC'
+ fi
+ MK_SHARED_LIB='$(LD) -dy -G -h `basename $@.$(ABI_VERSION)` -o $@'
+ if test $cf_cv_ld_rpath = yes ; then
+ # only way is to set LD_RUN_PATH but no switch for it
+ RUN_PATH=$libdir
+ fi
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
+ LINK_PROGS='LD_RUN_PATH=$(libdir)'
+ LINK_TESTS='Pwd=`pwd`;LD_RUN_PATH=`dirname $${Pwd}`/lib'
+ ;;
sunos4*)
# tested with SunOS 4.1.1 and gcc 2.7.0
if test $ac_cv_prog_gcc = yes; then
else
CC_SHARED_OPTS='-KPIC'
fi
- MK_SHARED_LIB='$(LD) -assert pure-text -o $@.$(REL_VERSION)'
- cf_cv_do_symlinks=yes
+ MK_SHARED_LIB='$(LD) -assert pure-text -o $@'
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
;;
solaris2*)
# tested with SunOS 5.5.1 (solaris 2.5.1) and gcc 2.7.2
else
CC_SHARED_OPTS='-KPIC'
fi
- MK_SHARED_LIB='$(LD) -dy -G -h `basename $@.$(ABI_VERSION)` -o $@.$(REL_VERSION)'
+ MK_SHARED_LIB='$(LD) -dy -G -h `basename $@.$(ABI_VERSION)` -o $@'
if test $cf_cv_ld_rpath = yes ; then
cf_ld_rpath_opt="-R"
EXTRA_LDFLAGS="-R ../lib:\$(libdir) $EXTRA_LDFLAGS"
fi
- cf_cv_do_symlinks=yes
+ test $cf_cv_shlib_version = auto && cf_cv_shlib_version=rel
;;
unix_sv*)
# tested with UnixWare 1.1.2
;;
esac
+ # This works if the last tokens in $MK_SHARED_LIB are the -o target.
+ case "$cf_cv_shlib_version" in #(vi
+ rel|abi)
+ case "$MK_SHARED_LIB" in #(vi
+ *'-o $@')
+ if test "$cf_cv_do_symlinks" = reverse ; then
+ { echo "configure: error: cannot use --with-shlib-version with this platform" 1>&2; exit 1; }
+ fi
+ if test "$cf_cv_shlib_version" = rel ; then
+ MK_SHARED_LIB="$MK_SHARED_LIB"'.$(REL_VERSION)'
+ else
+ MK_SHARED_LIB="$MK_SHARED_LIB"'.$(ABI_VERSION)'
+ fi
+ cf_cv_do_symlinks=yes
+ ;;
+ *)
+ echo "configure: warning: ignored --with-shlib-version" 1>&2
+ ;;
+ esac
+ ;;
+ esac
+
if test -n "$cf_ld_rpath_opt" ; then
echo $ac_n "checking if we need a space after rpath option""... $ac_c" 1>&6
-echo "configure:2288: checking if we need a space after rpath option" >&5
+echo "configure:2756: checking if we need a space after rpath option" >&5
cf_save_LIBS="$LIBS"
LIBS="$LIBS ${cf_ld_rpath_opt}/usr/lib"
cat > conftest.$ac_ext <<EOF
-#line 2292 "configure"
+#line 2760 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:2299: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:2767: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_rpath_space=no
else
-
+
+
if test "$CC_SHARED_OPTS" = "unknown"; then
for model in $cf_list_models; do
### use option --disable-overwrite to leave out the link to -lcurses
echo $ac_n "checking if you wish to install ncurses overwriting curses""... $ac_c" 1>&6
-echo "configure:2337: checking if you wish to install ncurses overwriting curses" >&5
+echo "configure:2806: checking if you wish to install ncurses overwriting curses" >&5
# Check whether --enable-overwrite or --disable-overwrite was given.
if test "${enable_overwrite+set}" = set; then
echo "$ac_t""$with_overwrite" 1>&6
echo $ac_n "checking where we will install curses.h""... $ac_c" 1>&6
-echo "configure:2353: checking where we will install curses.h" >&5
+echo "configure:2822: checking where we will install curses.h" >&5
echo "$ac_t""$includedir" 1>&6
echo $ac_n "checking if external terminfo-database is used""... $ac_c" 1>&6
-echo "configure:2357: checking if external terminfo-database is used" >&5
+echo "configure:2826: checking if external terminfo-database is used" >&5
# Check whether --enable-database or --disable-database was given.
if test "${enable_database+set}" = set; then
echo $ac_n "checking if you want to build with function extensions""... $ac_c" 1>&6
-echo "configure:2374: checking if you want to build with function extensions" >&5
+echo "configure:2843: checking if you want to build with function extensions" >&5
# Check whether --enable-ext-funcs or --disable-ext-funcs was given.
if test "${enable_ext_funcs+set}" = set; then
echo $ac_n "checking for list of fallback descriptions""... $ac_c" 1>&6
-echo "configure:2391: checking for list of fallback descriptions" >&5
+echo "configure:2860: checking for list of fallback descriptions" >&5
# Check whether --with-fallbacks or --without-fallbacks was given.
if test "${with_fallbacks+set}" = set; then
fi
echo "$ac_t""$with_fallback" 1>&6
-FALLBACK_LIST=`echo $with_fallback|sed -e 's/,/ /'`
+FALLBACK_LIST=`echo $with_fallback|sed -e 's/,/ /g'`
+
+
+echo $ac_n "checking for list of terminfo directories""... $ac_c" 1>&6
+echo "configure:2875: checking for list of terminfo directories" >&5
+
+
+# Check whether --with-terminfo-dirs or --without-terminfo-dirs was given.
+if test "${with_terminfo_dirs+set}" = set; then
+ withval="$with_terminfo_dirs"
+ :
+else
+ withval="${TERMINFO_DIRS-${datadir}/terminfo}"
+fi
+
+IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
+cf_dst_path=
+for cf_src_path in $withval
+do
+
+case ".$cf_src_path" in #(vi
+./*) #(vi
+ ;;
+.\${*prefix}*) #(vi
+ eval cf_src_path="$cf_src_path"
+ case ".$cf_src_path" in #(vi
+ .NONE/*)
+ cf_src_path=`echo $cf_src_path | sed -e s@NONE@$ac_default_prefix@`
+ ;;
+ esac
+ ;; #(vi
+.NONE/*)
+ cf_src_path=`echo $cf_src_path | sed -e s@NONE@$ac_default_prefix@`
+ ;;
+*)
+ { echo "configure: error: expected a pathname" 1>&2; exit 1; }
+ ;;
+esac
+
+ test -n "$cf_dst_path" && cf_dst_path="${cf_dst_path}:"
+ cf_dst_path="${cf_dst_path}${cf_src_path}"
+done
+IFS="$ac_save_ifs"
+
+eval TERMINFO_DIRS="$cf_dst_path"
+
+echo "$ac_t""$TERMINFO_DIRS" 1>&6
+test -n "$TERMINFO_DIRS" && cat >> confdefs.h <<EOF
+#define TERMINFO_DIRS "$TERMINFO_DIRS"
+EOF
if test $with_database = no ; then
fi
fi
-### use option --enable-big-core to make tic run faster on big machines
+### use option --disable-big-core to make tic run on small machines
+### We need 4Mb, check if we can allocate 50% more than that.
echo $ac_n "checking if big-core option selected""... $ac_c" 1>&6
-echo "configure:2413: checking if big-core option selected" >&5
+echo "configure:2932: checking if big-core option selected" >&5
# Check whether --enable-big-core or --disable-big-core was given.
if test "${enable_big_core+set}" = set; then
enableval="$enable_big_core"
with_big_core=$enableval
else
+ if test "$cross_compiling" = yes; then
+ with_big_core=no
+else
+ cat > conftest.$ac_ext <<EOF
+#line 2943 "configure"
+#include "confdefs.h"
+
+#include <stdlib.h>
+#include <string.h>
+int main() { exit(malloc(6000000L) == 0); }
+EOF
+if { (eval echo configure:2950: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ with_big_core=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
with_big_core=no
fi
+rm -fr conftest*
+fi
+
+fi
echo "$ac_t""$with_big_core" 1>&6
test "$with_big_core" = "yes" && cat >> confdefs.h <<\EOF
### use option --enable-termcap to compile in the termcap fallback support
echo $ac_n "checking if you want termcap-fallback support""... $ac_c" 1>&6
-echo "configure:2431: checking if you want termcap-fallback support" >&5
+echo "configure:2972: checking if you want termcap-fallback support" >&5
# Check whether --enable-termcap or --disable-termcap was given.
if test "${enable_termcap+set}" = set; then
### use option --enable-getcap to use a hacked getcap for reading termcaps
echo $ac_n "checking if fast termcap-loader is needed""... $ac_c" 1>&6
-echo "configure:2452: checking if fast termcap-loader is needed" >&5
+echo "configure:2993: checking if fast termcap-loader is needed" >&5
# Check whether --enable-getcap or --disable-getcap was given.
if test "${enable_getcap+set}" = set; then
echo $ac_n "checking if translated termcaps will be cached in ~/.terminfo""... $ac_c" 1>&6
-echo "configure:2469: checking if translated termcaps will be cached in ~/.terminfo" >&5
+echo "configure:3010: checking if translated termcaps will be cached in ~/.terminfo" >&5
# Check whether --enable-getcap-cache or --disable-getcap-cache was given.
if test "${enable_getcap_cache+set}" = set; then
### Use option --enable-symlinks to make tic use symlinks, not hard links
### to reduce storage requirements for the terminfo database.
-###
-### Most Unix systems have both link and symlink, a few don't have symlink.
-### A few non-Unix systems implement symlink, but not link.
-### A few non-systems implement neither.
for ac_func in \
- link \
- symlink
+ remove \
+ unlink
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:3036: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3041 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:3064: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+if test "$ac_cv_prog_cc_cross" = yes ; then
+ for ac_func in \
+ link \
+ symlink
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:2499: checking for $ac_func" >&5
+echo "configure:3095: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 2504 "configure"
+#line 3100 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:2527: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3123: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
fi
done
+else
+ echo $ac_n "checking if link/symlink functions work""... $ac_c" 1>&6
+echo "configure:3149: checking if link/symlink functions work" >&5
+if eval "test \"`echo '$''{'cf_cv_link_funcs'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cf_cv_link_funcs=
+ for cf_func in link symlink ; do
+ if test "$cross_compiling" = yes; then
+
+ eval 'ac_cv_func_'$cf_func'=error'
+else
+ cat > conftest.$ac_ext <<EOF
+#line 3161 "configure"
+#include "confdefs.h"
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#ifdef HAVE_UNISTD_H
+#include <unistd.h>
+#endif
+int main()
+{
+ int fail = 0;
+ char *src = "config.log";
+ char *dst = "conftest.chk";
+ struct stat src_sb;
+ struct stat dst_sb;
+
+ stat(src, &src_sb);
+ fail = ($cf_func("config.log", "conftest.chk") < 0)
+ || (stat(dst, &dst_sb) < 0)
+ || (dst_sb.st_mtime != src_sb.st_mtime);
+#ifdef HAVE_UNLINK
+ unlink(dst);
+#else
+ remove(dst);
+#endif
+ exit (fail);
+}
+
+EOF
+if { (eval echo configure:3190: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+
+ cf_cv_link_funcs="$cf_cv_link_funcs $cf_func"
+ eval 'ac_cv_func_'$cf_func'=yes'
+
+cf_FUNC=`echo $cf_func | tr '[a-z]' '[A-Z]'`
+
+ cat >> confdefs.h <<EOF
+#define HAVE_$cf_FUNC 1
+EOF
+
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+
+ eval 'ac_cv_func_'$cf_func'=no'
+fi
+rm -fr conftest*
+fi
+
+ done
+ test -z "$cf_cv_link_funcs" && cf_cv_link_funcs=no
+
+fi
+
+echo "$ac_t""$cf_cv_link_funcs" 1>&6
+fi
+
with_links=no
with_symlinks=no
if test "$ac_cv_func_link" != yes ; then
echo $ac_n "checking if tic should use symbolic links""... $ac_c" 1>&6
-echo "configure:2557: checking if tic should use symbolic links" >&5
+echo "configure:3226: checking if tic should use symbolic links" >&5
if test "$ac_cv_func_symlink" = yes ; then
with_symlinks=yes
else
echo "$ac_t""$with_symlinks" 1>&6
elif test "$ac_cv_func_symlink" != yes ; then
echo $ac_n "checking if tic should use hard links""... $ac_c" 1>&6
-echo "configure:2566: checking if tic should use hard links" >&5
+echo "configure:3235: checking if tic should use hard links" >&5
if test "$ac_cv_func_link" = yes ; then
with_links=yes
else
echo "$ac_t""$with_links" 1>&6
else
echo $ac_n "checking if tic should use symbolic links""... $ac_c" 1>&6
-echo "configure:2575: checking if tic should use symbolic links" >&5
+echo "configure:3244: checking if tic should use symbolic links" >&5
# Check whether --enable-symlinks or --disable-symlinks was given.
if test "${enable_symlinks+set}" = set; then
### use option --enable-bsdpad to have tputs process BSD-style prefix padding
echo $ac_n "checking if tputs should process BSD-style prefix padding""... $ac_c" 1>&6
-echo "configure:2599: checking if tputs should process BSD-style prefix padding" >&5
+echo "configure:3268: checking if tputs should process BSD-style prefix padding" >&5
# Check whether --enable-bsdpad or --disable-bsdpad was given.
if test "${enable_bsdpad+set}" = set; then
### use option --enable-const to turn on use of const beyond that in XSI.
echo $ac_n "checking for extended use of const keyword""... $ac_c" 1>&6
-echo "configure:2617: checking for extended use of const keyword" >&5
+echo "configure:3286: checking for extended use of const keyword" >&5
# Check whether --enable-const or --disable-const was given.
if test "${enable_const+set}" = set; then
fi
echo "$ac_t""$with_ext_const" 1>&6
-test "$with_ext_const" = yes && cat >> confdefs.h <<\EOF
+NCURSES_CONST=""
+if test "$with_ext_const" = yes ; then
+ cat >> confdefs.h <<\EOF
#define NCURSES_CONST const
EOF
+ NCURSES_CONST=const
+fi
+
### Enable compiling-in rcs id's
echo $ac_n "checking if RCS identifiers should be compiled-in""... $ac_c" 1>&6
-echo "configure:2635: checking if RCS identifiers should be compiled-in" >&5
+echo "configure:3309: checking if RCS identifiers should be compiled-in" >&5
# Check whether --with-rcs-ids or --without-rcs-ids was given.
if test "${with_rcs_ids+set}" = set; then
withval="$with_rcs_ids"
- with_rcs_ids=$enableval
+ with_rcs_ids=$withval
else
with_rcs_ids=no
fi
###############################################################################
echo $ac_n "checking if you want all experimental code""... $ac_c" 1>&6
-echo "configure:2654: checking if you want all experimental code" >&5
+echo "configure:3328: checking if you want all experimental code" >&5
# Check whether --with-develop or --without-develop was given.
if test "${with_develop+set}" = set; then
echo "$ac_t""$with_develop" 1>&6
+### use option --enable-broken-linker to force on use of broken-linker support
+echo $ac_n "checking if you want broken-linker support code""... $ac_c" 1>&6
+echo "configure:3342: checking if you want broken-linker support code" >&5
+
+# Check whether --enable-broken_linker or --disable-broken_linker was given.
+if test "${enable_broken_linker+set}" = set; then
+ enableval="$enable_broken_linker"
+ with_broken_linker=$enableval
+else
+ with_broken_linker=$BROKEN_LINKER
+fi
+
+echo "$ac_t""$with_broken_linker" 1>&6
+test "$with_broken_linker" = yes && cat >> confdefs.h <<\EOF
+#define BROKEN_LINKER 1
+EOF
+
+
### use option --enable-hard-tabs to turn on use of hard-tabs optimize
echo $ac_n "checking if you want experimental hard-tabs code""... $ac_c" 1>&6
-echo "configure:2668: checking if you want experimental hard-tabs code" >&5
+echo "configure:3360: checking if you want experimental hard-tabs code" >&5
# Check whether --enable-hard-tabs or --disable-hard-tabs was given.
if test "${enable_hard_tabs+set}" = set; then
### use option --enable-hashmap to turn on use of hashmap scrolling logic
echo $ac_n "checking if you want experimental hashmap code""... $ac_c" 1>&6
-echo "configure:2686: checking if you want experimental hashmap code" >&5
+echo "configure:3378: checking if you want experimental hashmap code" >&5
# Check whether --enable-hashmap or --disable-hashmap was given.
if test "${enable_hashmap+set}" = set; then
enableval="$enable_hashmap"
with_hashmap=$enableval
else
- with_hashmap=$with_develop
+ with_hashmap=yes
fi
echo "$ac_t""$with_hashmap" 1>&6
EOF
+echo $ac_n "checking if you want experimental no-padding code""... $ac_c" 1>&6
+echo "configure:3395: checking if you want experimental no-padding code" >&5
+
+# Check whether --enable-no-padding or --disable-no-padding was given.
+if test "${enable_no_padding+set}" = set; then
+ enableval="$enable_no_padding"
+ with_no_padding=$enableval
+else
+ with_no_padding=yes
+fi
+
+echo "$ac_t""$with_no_padding" 1>&6
+test "$with_no_padding" = yes && cat >> confdefs.h <<\EOF
+#define NCURSES_NO_PADDING 1
+EOF
+
+
echo $ac_n "checking if you want experimental safe-sprintf code""... $ac_c" 1>&6
-echo "configure:2703: checking if you want experimental safe-sprintf code" >&5
+echo "configure:3412: checking if you want experimental safe-sprintf code" >&5
# Check whether --enable-safe-sprintf or --disable-safe-sprintf was given.
if test "${enable_safe_sprintf+set}" = set; then
### use option --disable-scroll-hints to turn off use of scroll-hints scrolling logic
echo $ac_n "checking if you want to experiment without scrolling-hints code""... $ac_c" 1>&6
-echo "configure:2721: checking if you want to experiment without scrolling-hints code" >&5
+echo "configure:3430: checking if you want to experiment without scrolling-hints code" >&5
# Check whether --enable-scroll-hints or --disable-scroll-hints was given.
if test "${enable_scroll_hints+set}" = set; then
enableval="$enable_scroll_hints"
with_scroll_hints=$enableval
else
- with_scroll_hints=yes
+ with_scroll_hints=yes;
+ # when hashmap is used scroll hints are useless
+ test $with_hashmap = yes && with_scroll_hints=no
fi
echo "$ac_t""$with_scroll_hints" 1>&6
EOF
+### use option --enable-tcap-names to allow user to define new capabilities
+echo $ac_n "checking if you want experimental definable names like termcap""... $ac_c" 1>&6
+echo "configure:3450: checking if you want experimental definable names like termcap" >&5
+
+# Check whether --enable-tcap-names or --disable-tcap-names was given.
+if test "${enable_tcap_names+set}" = set; then
+ enableval="$enable_tcap_names"
+ with_tcap_names=$enableval
+else
+ with_tcap_names=$with_develop
+fi
+
+echo "$ac_t""$with_tcap_names" 1>&6
+NCURSES_XNAMES=0
+test "$with_tcap_names" = yes && NCURSES_XNAMES=1
+
+
### use option --enable-sigwinch to turn on use of SIGWINCH logic
echo $ac_n "checking if you want experimental SIGWINCH handler""... $ac_c" 1>&6
-echo "configure:2739: checking if you want experimental SIGWINCH handler" >&5
+echo "configure:3467: checking if you want experimental SIGWINCH handler" >&5
# Check whether --enable-sigwinch or --disable-sigwinch was given.
if test "${enable_sigwinch+set}" = set; then
enableval="$enable_sigwinch"
with_sigwinch=$enableval
else
- with_sigwinch=$with_develop
+ with_sigwinch=yes
fi
echo "$ac_t""$with_sigwinch" 1>&6
### use option --enable-widec to turn on use of wide-character support
echo $ac_n "checking if you want experimental wide-character code""... $ac_c" 1>&6
-echo "configure:2757: checking if you want experimental wide-character code" >&5
+echo "configure:3485: checking if you want experimental wide-character code" >&5
# Check whether --enable-widec or --disable-widec was given.
if test "${enable_widec+set}" = set; then
### use option --enable-xmc-glitch to turn on use of magic-cookie optimize
echo $ac_n "checking if you want experimental xmc code""... $ac_c" 1>&6
-echo "configure:2775: checking if you want experimental xmc code" >&5
+echo "configure:3503: checking if you want experimental xmc code" >&5
# Check whether --enable-xmc-glitch or --disable-xmc-glitch was given.
if test "${enable_xmc_glitch+set}" = set; then
if test -n "$GCC"
then
cat > conftest.$ac_ext <<EOF
-#line 2825 "configure"
-int main(int argc, char *argv[]) { return argv[argc-1] == 0; }
+#line 3553 "configure"
+int main(int argc, char *argv[]) { return (argv[argc-1] == 0) ; }
EOF
- echo "checking for gcc warning options" 1>&6
-echo "configure:2829: checking for gcc warning options" >&5
+ echo "checking for $CC warning options" 1>&6
+echo "configure:3557: checking for $CC warning options" >&5
cf_save_CFLAGS="$CFLAGS"
EXTRA_CFLAGS="-W -Wall"
cf_warn_CONST=""
Wstrict-prototypes $cf_warn_CONST
do
CFLAGS="$cf_save_CFLAGS $EXTRA_CFLAGS -$cf_opt"
- if { (eval echo configure:2847: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:3575: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
test -n "$verbose" && echo "$ac_t""... -$cf_opt" 1>&6
EXTRA_CFLAGS="$EXTRA_CFLAGS -$cf_opt"
test "$cf_opt" = Wcast-qual && EXTRA_CFLAGS="$EXTRA_CFLAGS -DXTSTRINGDEFINES"
EOF
if test -n "$GCC"
then
- echo "checking for gcc __attribute__ directives" 1>&6
-echo "configure:2879: checking for gcc __attribute__ directives" >&5
+ echo "checking for $CC __attribute__ directives" 1>&6
+echo "configure:3607: checking for $CC __attribute__ directives" >&5
cat > conftest.$ac_ext <<EOF
-#line 2881 "configure"
+#line 3609 "configure"
#include "confdefs.h"
#include "conftest.h"
#include "conftest.i"
CF_ATTRIBUTE=`echo $cf_attribute | tr '[a-z]' '[A-Z]'`
cf_directive="__attribute__(($cf_attribute))"
- echo "checking for gcc $cf_directive" 1>&5
+ echo "checking for $CC $cf_directive" 1>&5
case $cf_attribute in
scanf|printf)
cat >conftest.h <<EOF
EOF
;;
esac
- if { (eval echo configure:2919: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:3647: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
test -n "$verbose" && echo "$ac_t""... $cf_attribute" 1>&6
cat conftest.h >>confdefs.h
# else
### Checks for libraries.
echo $ac_n "checking for gettimeofday""... $ac_c" 1>&6
-echo "configure:2999: checking for gettimeofday" >&5
+echo "configure:3727: checking for gettimeofday" >&5
if eval "test \"`echo '$''{'ac_cv_func_gettimeofday'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3004 "configure"
+#line 3732 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char gettimeofday(); below. */
; return 0; }
EOF
-if { (eval echo configure:3027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3755: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_gettimeofday=yes"
else
echo $ac_n "checking for gettimeofday in -lbsd""... $ac_c" 1>&6
-echo "configure:3050: checking for gettimeofday in -lbsd" >&5
+echo "configure:3778: checking for gettimeofday in -lbsd" >&5
ac_lib_var=`echo bsd'_'gettimeofday | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lbsd $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3058 "configure"
+#line 3786 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
gettimeofday()
; return 0; }
EOF
-if { (eval echo configure:3069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3797: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
MATH_LIB=""
echo $ac_n "checking for sin""... $ac_c" 1>&6
-echo "configure:3097: checking for sin" >&5
+echo "configure:3825: checking for sin" >&5
if eval "test \"`echo '$''{'ac_cv_func_sin'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3102 "configure"
+#line 3830 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char sin(); below. */
; return 0; }
EOF
-if { (eval echo configure:3125: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3853: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_sin=yes"
else
else
echo "$ac_t""no" 1>&6
echo $ac_n "checking for sin in -lm""... $ac_c" 1>&6
-echo "configure:3143: checking for sin in -lm" >&5
+echo "configure:3871: checking for sin in -lm" >&5
ac_lib_var=`echo m'_'sin | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lm $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3151 "configure"
+#line 3879 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
sin()
; return 0; }
EOF
-if { (eval echo configure:3162: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:3890: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
### Checks for header files.
echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
-echo "configure:3188: checking for ANSI C header files" >&5
+echo "configure:3916: checking for ANSI C header files" >&5
if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3193 "configure"
+#line 3921 "configure"
#include "confdefs.h"
#include <stdlib.h>
#include <stdarg.h>
#include <float.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3201: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:3929: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
ac_cv_header_stdc=yes
if test $ac_cv_header_stdc = yes; then
# SunOS 4.x string.h does not declare mem*, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3218 "configure"
+#line 3946 "configure"
#include "confdefs.h"
#include <string.h>
EOF
if test $ac_cv_header_stdc = yes; then
# ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
cat > conftest.$ac_ext <<EOF
-#line 3236 "configure"
+#line 3964 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
:
else
cat > conftest.$ac_ext <<EOF
-#line 3257 "configure"
+#line 3985 "configure"
#include "confdefs.h"
#include <ctype.h>
#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
exit (0); }
EOF
-if { (eval echo configure:3268: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:3996: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
:
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr that defines DIR""... $ac_c" 1>&6
-echo "configure:3296: checking for $ac_hdr that defines DIR" >&5
+echo "configure:4024: checking for $ac_hdr that defines DIR" >&5
if eval "test \"`echo '$''{'ac_cv_header_dirent_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3301 "configure"
+#line 4029 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <$ac_hdr>
DIR *dirp = 0;
; return 0; }
EOF
-if { (eval echo configure:3309: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4037: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval "ac_cv_header_dirent_$ac_safe=yes"
else
# Two versions of opendir et al. are in -ldir and -lx on SCO Xenix.
if test $ac_header_dirent = dirent.h; then
echo $ac_n "checking for opendir in -ldir""... $ac_c" 1>&6
-echo "configure:3334: checking for opendir in -ldir" >&5
+echo "configure:4062: checking for opendir in -ldir" >&5
ac_lib_var=`echo dir'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-ldir $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3342 "configure"
+#line 4070 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
opendir()
; return 0; }
EOF
-if { (eval echo configure:3353: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4081: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
else
echo $ac_n "checking for opendir in -lx""... $ac_c" 1>&6
-echo "configure:3375: checking for opendir in -lx" >&5
+echo "configure:4103: checking for opendir in -lx" >&5
ac_lib_var=`echo x'_'opendir | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lx $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3383 "configure"
+#line 4111 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
opendir()
; return 0; }
EOF
-if { (eval echo configure:3394: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
echo $ac_n "checking for regular-expression headers""... $ac_c" 1>&6
-echo "configure:3418: checking for regular-expression headers" >&5
+echo "configure:4146: checking for regular-expression headers" >&5
if eval "test \"`echo '$''{'cf_cv_regex'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3424 "configure"
+#line 4152 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <regex.h>
; return 0; }
EOF
-if { (eval echo configure:3437: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4165: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_regex="regex.h"
else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 3446 "configure"
+#line 4174 "configure"
#include "confdefs.h"
#include <regexp.h>
int main() {
; return 0; }
EOF
-if { (eval echo configure:3456: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4184: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_regex="regexp.h"
else
cf_save_LIBS="$LIBS"
LIBS="-lgen $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3467 "configure"
+#line 4195 "configure"
#include "confdefs.h"
#include <regexpr.h>
int main() {
; return 0; }
EOF
-if { (eval echo configure:3477: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4205: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_regex="regexpr.h"
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3534: checking for $ac_hdr" >&5
+echo "configure:4262: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3539 "configure"
+#line 4267 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3544: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:4272: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
done
-PROG_EXT=
-case $cf_cv_system_name in
-hpux*)
- # check for HPUX's ANSI compiler
- if test -z "$GCC"; then
- echo $ac_n "checking for HP/UX ANSI compiler""... $ac_c" 1>&6
-echo "configure:3577: checking for HP/UX ANSI compiler" >&5
- cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -Aa"
- cat > conftest.$ac_ext <<EOF
-#line 3581 "configure"
-#include "confdefs.h"
-
-int main() {
-void (*f)(void)=0
-; return 0; }
-EOF
-if { (eval echo configure:3588: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
- rm -rf conftest*
- cf_hpux_cc=yes
-else
- echo "configure: failed program was:" >&5
- cat conftest.$ac_ext >&5
- rm -rf conftest*
- cf_hpux_cc=no
-fi
-rm -f conftest*
- echo "$ac_t""$cf_hpux_cc" 1>&6
- if test $cf_hpux_cc = yes; then
- cat >> confdefs.h <<\EOF
-#define _HPUX_SOURCE 1
-EOF
-
- else
- CFLAGS="$cf_save_CFLAGS"
- fi
- fi
- ;;
-os2*)
- # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@
- CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__"
- LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"`
- PROG_EXT=".exe"
- ;;
-esac
-
-
# check for ISC (this may also define _POSIX_SOURCE)
# Note: even non-Posix ISC needs <sys/bsdtypes.h> to declare fd_set
if test "$ISC" = yes ; then
echo $ac_n "checking for main in -lcposix""... $ac_c" 1>&6
-echo "configure:3622: checking for main in -lcposix" >&5
+echo "configure:4303: checking for main in -lcposix" >&5
ac_lib_var=`echo cposix'_'main | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-lcposix $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3630 "configure"
+#line 4311 "configure"
#include "confdefs.h"
int main() {
main()
; return 0; }
EOF
-if { (eval echo configure:3637: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4318: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
fi
echo $ac_n "checking for bzero in -linet""... $ac_c" 1>&6
-echo "configure:3665: checking for bzero in -linet" >&5
+echo "configure:4346: checking for bzero in -linet" >&5
ac_lib_var=`echo inet'_'bzero | sed 'y%./+-%__p_%'`
if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
ac_save_LIBS="$LIBS"
LIBS="-linet $LIBS"
cat > conftest.$ac_ext <<EOF
-#line 3673 "configure"
+#line 4354 "configure"
#include "confdefs.h"
/* Override any gcc2 internal prototype to avoid an error. */
/* We use char because int might match the return type of a gcc2
bzero()
; return 0; }
EOF
-if { (eval echo configure:3684: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4365: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_lib_$ac_lib_var=yes"
else
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:3707: checking for $ac_hdr" >&5
+echo "configure:4388: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3712 "configure"
+#line 4393 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:3717: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:4398: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
echo $ac_n "checking if sys/time.h works with sys/select.h""... $ac_c" 1>&6
-echo "configure:3747: checking if sys/time.h works with sys/select.h" >&5
+echo "configure:4428: checking if sys/time.h works with sys/select.h" >&5
if eval "test \"`echo '$''{'cf_cv_sys_time_select'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3753 "configure"
+#line 4434 "configure"
#include "confdefs.h"
#include <sys/types.h>
; return 0; }
EOF
-if { (eval echo configure:3768: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4449: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_sys_time_select=yes
else
# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CPP $CPPFLAGS'
ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CC-cc} -o conftest $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cc_cross
echo $ac_n "checking for working const""... $ac_c" 1>&6
-echo "configure:3797: checking for working const" >&5
+echo "configure:4478: checking for working const" >&5
if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3802 "configure"
+#line 4483 "configure"
#include "confdefs.h"
int main() {
; return 0; }
EOF
-if { (eval echo configure:3851: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4532: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_const=yes
else
fi
echo $ac_n "checking for inline""... $ac_c" 1>&6
-echo "configure:3872: checking for inline" >&5
+echo "configure:4553: checking for inline" >&5
if eval "test \"`echo '$''{'ac_cv_c_inline'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
ac_cv_c_inline=no
for ac_kw in inline __inline__ __inline; do
cat > conftest.$ac_ext <<EOF
-#line 3879 "configure"
+#line 4560 "configure"
#include "confdefs.h"
int main() {
} $ac_kw foo() {
; return 0; }
EOF
-if { (eval echo configure:3886: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4567: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_c_inline=$ac_kw; break
else
echo $ac_n "checking if unsigned literals are legal""... $ac_c" 1>&6
-echo "configure:3918: checking if unsigned literals are legal" >&5
+echo "configure:4599: checking if unsigned literals are legal" >&5
if eval "test \"`echo '$''{'cf_cv_unsigned_literals'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 3924 "configure"
+#line 4605 "configure"
#include "confdefs.h"
int main() {
long x = 1L + 1UL + 1U + 1
; return 0; }
EOF
-if { (eval echo configure:3931: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4612: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_unsigned_literals=yes
else
echo $ac_n "checking for type of chtype""... $ac_c" 1>&6
-echo "configure:3949: checking for type of chtype" >&5
+echo "configure:4630: checking for type of chtype" >&5
if eval "test \"`echo '$''{'cf_cv_typeof_chtype'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cf_cv_typeof_chtype=long
else
cat > conftest.$ac_ext <<EOF
-#line 3958 "configure"
+#line 4639 "configure"
#include "confdefs.h"
#if USE_WIDEC_SUPPORT
}
EOF
-if { (eval echo configure:4004: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4685: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
cf_cv_typeof_chtype=`cat cf_test.out`
else
echo $ac_n "checking for number of bits in chtype""... $ac_c" 1>&6
-echo "configure:4037: checking for number of bits in chtype" >&5
+echo "configure:4718: checking for number of bits in chtype" >&5
if eval "test \"`echo '$''{'cf_cv_shift_limit'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cf_cv_shift_limit=32
else
cat > conftest.$ac_ext <<EOF
-#line 4046 "configure"
+#line 4727 "configure"
#include "confdefs.h"
#include <stdio.h>
}
EOF
-if { (eval echo configure:4069: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4750: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
cf_cv_shift_limit=`cat cf_test.out`
else
echo $ac_n "checking for width of character-index""... $ac_c" 1>&6
-echo "configure:4089: checking for width of character-index" >&5
+echo "configure:4770: checking for width of character-index" >&5
if eval "test \"`echo '$''{'cf_cv_widec_shift'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
### Checks for external-data
-echo $ac_n "checking declaration of errno""... $ac_c" 1>&6
-echo "configure:4116: checking declaration of errno" >&5
+echo $ac_n "checking if external errno is declared""... $ac_c" 1>&6
+echo "configure:4797: checking if external errno is declared" >&5
if eval "test \"`echo '$''{'cf_cv_dcl_errno'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4122 "configure"
+#line 4803 "configure"
#include "confdefs.h"
+#if HAVE_STDLIB_H
+#include <stdlib.h>
+#endif
#include <stdio.h>
#include <sys/types.h>
#include <errno.h>
long x = (long) errno
; return 0; }
EOF
-if { (eval echo configure:4132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4816: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
eval 'cf_cv_dcl_'errno'=yes'
else
eval 'cf_cv_dcl_'errno'=no'
fi
rm -f conftest*
+
fi
+
eval 'cf_result=$cf_cv_dcl_'errno
echo "$ac_t""$cf_result" 1>&6
-# It's possible (for near-UNIX clones) that the data doesn't exist
-if eval "test \"`echo '$''{'cf_cv_have_errno'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
-if test $cf_result = no ; then
+if test "$cf_result" = no ; then
eval 'cf_result=DECL_'errno
cf_result=`echo $cf_result | tr '[a-z]' '[A-Z]'`
#define $cf_result 1
EOF
- echo $ac_n "checking existence of errno""... $ac_c" 1>&6
-echo "configure:4162: checking existence of errno" >&5
- cat > conftest.$ac_ext <<EOF
-#line 4164 "configure"
+fi
+
+# It's possible (for near-UNIX clones) that the data doesn't exist
+
+echo $ac_n "checking if external errno exists""... $ac_c" 1>&6
+echo "configure:4847: checking if external errno exists" >&5
+if eval "test \"`echo '$''{'cf_cv_have_errno'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cat > conftest.$ac_ext <<EOF
+#line 4853 "configure"
#include "confdefs.h"
#undef errno
-extern long errno;
+extern int errno;
int main() {
errno = 2
; return 0; }
EOF
-if { (eval echo configure:4174: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:4863: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval 'cf_cv_have_'errno'=yes'
else
eval 'cf_cv_have_'errno'=no'
fi
rm -f conftest*
- eval 'cf_result=$cf_cv_have_'errno
- echo "$ac_t""$cf_result" 1>&6
-else
- eval 'cf_cv_have_'errno'=yes'
fi
-fi
-eval 'cf_result=HAVE_'errno
+eval 'cf_result=$cf_cv_have_'errno
+echo "$ac_t""$cf_result" 1>&6
+if test "$cf_result" = yes ; then
+ eval 'cf_result=HAVE_'errno
+
cf_result=`echo $cf_result | tr '[a-z]' '[A-Z]'`
-eval 'test $cf_cv_have_'errno' = yes && cat >> confdefs.h <<EOF
+ cat >> confdefs.h <<EOF
#define $cf_result 1
EOF
-'
+
+fi
+
+
echo $ac_n "checking if data-only library module links""... $ac_c" 1>&6
-echo "configure:4204: checking if data-only library module links" >&5
+echo "configure:4895: checking if data-only library module links" >&5
if eval "test \"`echo '$''{'cf_cv_link_dataonly'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
rm -f conftest.a
cat >conftest.$ac_ext <<EOF
-#line 4211 "configure"
+#line 4902 "configure"
int testdata[3] = { 123, 456, 789 };
EOF
- if { (eval echo configure:4214: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } ; then
+ if { (eval echo configure:4905: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; } ; then
mv conftest.o data.o && \
( $AR $AR_OPTS conftest.a data.o ) 2>&5 1>/dev/null
fi
rm -f conftest.$ac_ext data.o
cat >conftest.$ac_ext <<EOF
-#line 4220 "configure"
+#line 4911 "configure"
int testfunc()
{
#if defined(NeXT)
#endif
}
EOF
- if { (eval echo configure:4233: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ if { (eval echo configure:4924: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
mv conftest.o func.o && \
( $AR $AR_OPTS conftest.a func.o ) 2>&5 1>/dev/null
fi
cf_cv_link_dataonly=unknown
else
cat > conftest.$ac_ext <<EOF
-#line 4245 "configure"
+#line 4936 "configure"
#include "confdefs.h"
int main()
}
EOF
-if { (eval echo configure:4255: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:4946: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
cf_cv_link_dataonly=yes
else
echo $ac_n "checking for speed_t""... $ac_c" 1>&6
-echo "configure:4279: checking for speed_t" >&5
-if eval "test \"`echo '$''{'cf_cv_type_speed_t'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
-
- cat > conftest.$ac_ext <<EOF
-#line 4285 "configure"
+echo "configure:4970: checking for speed_t" >&5
+OSPEED_INCLUDES=
+cat > conftest.$ac_ext <<EOF
+#line 4973 "configure"
#include "confdefs.h"
-
#include <sys/types.h>
-#if HAVE_TERMIOS_H
-#include <termios.h>
-#endif
int main() {
-speed_t x = 0
+speed_t some_variable = 0
; return 0; }
EOF
-if { (eval echo configure:4296: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:4980: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
- cf_cv_type_speed_t=yes
+ OSPEED_TYPE=speed_t
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
- cf_cv_type_speed_t=no
+ OSPEED_TYPE=unsigned
fi
rm -f conftest*
-
+cat > conftest.$ac_ext <<EOF
+#line 4991 "configure"
+#include "confdefs.h"
+#include <termios.h>
+int main() {
+speed_t some_variable = 0
+; return 0; }
+EOF
+if { (eval echo configure:4998: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ OSPEED_TYPE=speed_t
+ OSPEED_INCLUDES="#include <termios.h>"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
+rm -f conftest*
+
-echo "$ac_t""$cf_cv_type_speed_t" 1>&6
-test $cf_cv_type_speed_t != yes && cat >> confdefs.h <<\EOF
+if test "$OSPEED_TYPE" = "unsigned" ; then
+ echo "$ac_t""no" 1>&6
+ cat >> confdefs.h <<\EOF
#define speed_t unsigned
EOF
+else
+ echo "$ac_t""yes" 1>&6
+fi
### Checks for library functions.
-for ac_func in \
+for ac_func in getcwd \
getttynam \
memccpy \
nanosleep \
sigaction \
sigvec \
strdup \
+strstr \
tcgetattr \
+tcgetpgrp \
times \
-usleep \
vfscanf \
vsnprintf \
vsscanf \
do
echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
-echo "configure:4339: checking for $ac_func" >&5
+echo "configure:5044: checking for $ac_func" >&5
if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4344 "configure"
+#line 5049 "configure"
#include "confdefs.h"
/* System header to define __stub macros and hopefully few prototypes,
which can conflict with char $ac_func(); below. */
; return 0; }
EOF
-if { (eval echo configure:4367: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:5072: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
eval "ac_cv_func_$ac_func=yes"
else
done
+
if test "$with_getcap" = "yes" ; then
echo $ac_n "checking for terminal-capability database functions""... $ac_c" 1>&6
-echo "configure:4395: checking for terminal-capability database functions" >&5
+echo "configure:5101: checking for terminal-capability database functions" >&5
if eval "test \"`echo '$''{'cf_cv_cgetent'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4401 "configure"
+#line 5107 "configure"
#include "confdefs.h"
#include <stdlib.h>
; return 0; }
EOF
-if { (eval echo configure:4416: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:5122: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_cgetent=yes
else
echo $ac_n "checking for isascii""... $ac_c" 1>&6
-echo "configure:4439: checking for isascii" >&5
+echo "configure:5145: checking for isascii" >&5
if eval "test \"`echo '$''{'cf_cv_have_isascii'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4445 "configure"
+#line 5151 "configure"
#include "confdefs.h"
#include <ctype.h>
int main() {
int x = isascii(' ')
; return 0; }
EOF
-if { (eval echo configure:4452: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:5158: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cv_have_isascii=yes
else
if test $ac_cv_func_sigaction = yes; then
echo $ac_n "checking whether sigaction needs _POSIX_SOURCE""... $ac_c" 1>&6
-echo "configure:4473: checking whether sigaction needs _POSIX_SOURCE" >&5
+echo "configure:5179: checking whether sigaction needs _POSIX_SOURCE" >&5
cat > conftest.$ac_ext <<EOF
-#line 4475 "configure"
+#line 5181 "configure"
#include "confdefs.h"
#include <sys/types.h>
struct sigaction act
; return 0; }
EOF
-if { (eval echo configure:4484: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5190: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
sigact_bad=no
else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 4493 "configure"
+#line 5199 "configure"
#include "confdefs.h"
#define _POSIX_SOURCE
struct sigaction act
; return 0; }
EOF
-if { (eval echo configure:4503: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5209: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
sigact_bad=yes
cat >> confdefs.h <<\EOF
esac
if test $termios_bad = maybe ; then
echo $ac_n "checking whether termios.h needs _POSIX_SOURCE""... $ac_c" 1>&6
-echo "configure:4531: checking whether termios.h needs _POSIX_SOURCE" >&5
+echo "configure:5237: checking whether termios.h needs _POSIX_SOURCE" >&5
cat > conftest.$ac_ext <<EOF
-#line 4533 "configure"
+#line 5239 "configure"
#include "confdefs.h"
#include <termios.h>
int main() {
struct termios foo; int x = foo.c_iflag
; return 0; }
EOF
-if { (eval echo configure:4540: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5246: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
termios_bad=no
else
rm -rf conftest*
cat > conftest.$ac_ext <<EOF
-#line 4549 "configure"
+#line 5255 "configure"
#include "confdefs.h"
#define _POSIX_SOURCE
struct termios foo; int x = foo.c_iflag
; return 0; }
EOF
-if { (eval echo configure:4558: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5264: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
termios_bad=unknown
else
echo "configure: warning: cross compiling: assume setvbuf params not reversed" 1>&2
else
echo $ac_n "checking whether setvbuf arguments are reversed""... $ac_c" 1>&6
-echo "configure:4583: checking whether setvbuf arguments are reversed" >&5
+echo "configure:5289: checking whether setvbuf arguments are reversed" >&5
if eval "test \"`echo '$''{'ac_cv_func_setvbuf_reversed'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
{ echo "configure: error: can not run test program while cross compiling" 1>&2; exit 1; }
else
cat > conftest.$ac_ext <<EOF
-#line 4591 "configure"
+#line 5297 "configure"
#include "confdefs.h"
#include <stdio.h>
/* If setvbuf has the reversed format, exit 0. */
exit(0); /* Non-reversed systems segv here. */
}
EOF
-if { (eval echo configure:4605: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5311: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
ac_cv_func_setvbuf_reversed=yes
else
fi
echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
-echo "configure:4630: checking return type of signal handlers" >&5
+echo "configure:5336: checking return type of signal handlers" >&5
if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4635 "configure"
+#line 5341 "configure"
#include "confdefs.h"
#include <sys/types.h>
#include <signal.h>
int i;
; return 0; }
EOF
-if { (eval echo configure:4652: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5358: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
ac_cv_type_signal=void
else
echo $ac_n "checking for type sigaction_t""... $ac_c" 1>&6
-echo "configure:4672: checking for type sigaction_t" >&5
+echo "configure:5378: checking for type sigaction_t" >&5
if eval "test \"`echo '$''{'cf_cv_type_sigaction'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4678 "configure"
+#line 5384 "configure"
#include "confdefs.h"
#include <signal.h>
sigaction_t x
; return 0; }
EOF
-if { (eval echo configure:4686: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5392: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_type_sigaction=yes
else
echo $ac_n "checking declaration of size-change""... $ac_c" 1>&6
-echo "configure:4706: checking declaration of size-change" >&5
+echo "configure:5412: checking declaration of size-change" >&5
if eval "test \"`echo '$''{'cf_cv_sizechange'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
CFLAGS="$cf_save_CFLAGS"
test -n "$cf_opts" && CFLAGS="$CFLAGS -D$cf_opts"
cat > conftest.$ac_ext <<EOF
-#line 4720 "configure"
+#line 5426 "configure"
#include "confdefs.h"
#include <sys/types.h>
#if HAVE_TERMIOS_H
; return 0; }
EOF
-if { (eval echo configure:4759: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5465: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_sizechange=yes
else
-case "$cf_cv_system_name" in
-linux*)
- cat >> confdefs.h <<\EOF
-#define GOOD_SELECT 1
+echo $ac_n "checking for memmove""... $ac_c" 1>&6
+echo "configure:5497: checking for memmove" >&5
+if eval "test \"`echo '$''{'ac_cv_func_memmove'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 5502 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char memmove(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char memmove();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_memmove) || defined (__stub___memmove)
+choke me
+#else
+memmove();
+#endif
+
+; return 0; }
EOF
+if { (eval echo configure:5525: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_memmove=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_memmove=no"
+fi
+rm -f conftest*
+fi
- ;;
-esac
+if eval "test \"`echo '$ac_cv_func_'memmove`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
-if test -z "$cf_user_CFLAGS" ; then
- CFLAGS=`echo ${CFLAGS} | sed -e 's/-g //' -e 's/-g$//'`
- CXXFLAGS=`echo ${CXXFLAGS} | sed -e 's/-g //' -e 's/-g$//'`
+echo $ac_n "checking for bcopy""... $ac_c" 1>&6
+echo "configure:5544: checking for bcopy" >&5
+if eval "test \"`echo '$''{'ac_cv_func_bcopy'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 5549 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char bcopy(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char bcopy();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_bcopy) || defined (__stub___bcopy)
+choke me
+#else
+bcopy();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:5572: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_bcopy=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_bcopy=no"
+fi
+rm -f conftest*
fi
-if test -n "$CXX" ; then
- # Extract the first word of "$CXX", so it can be a program name with args.
-set dummy $CXX; ac_word=$2
-echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:4808: checking for $ac_word" >&5
-if eval "test \"`echo '$''{'ac_cv_prog_CXX_EXISTS'+set}'`\" = set"; then
+if eval "test \"`echo '$ac_cv_func_'bcopy`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+
+ echo $ac_n "checking if bcopy does overlapping moves""... $ac_c" 1>&6
+echo "configure:5588: checking if bcopy does overlapping moves" >&5
+if eval "test \"`echo '$''{'cf_cv_good_bcopy'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- if test -n "$CXX_EXISTS"; then
- ac_cv_prog_CXX_EXISTS="$CXX_EXISTS" # Let the user override the test.
+
+ if test "$cross_compiling" = yes; then
+ cf_cv_good_bcopy=unknown
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
- test -z "$ac_dir" && ac_dir=.
- if test -f $ac_dir/$ac_word; then
- ac_cv_prog_CXX_EXISTS="yes"
- break
- fi
- done
- IFS="$ac_save_ifs"
- test -z "$ac_cv_prog_CXX_EXISTS" && ac_cv_prog_CXX_EXISTS="no"
+ cat > conftest.$ac_ext <<EOF
+#line 5597 "configure"
+#include "confdefs.h"
+
+int main() {
+ static char data[] = "abcdefghijklmnopqrstuwwxyz";
+ char temp[40];
+ bcopy(data, temp, sizeof(data));
+ bcopy(temp+10, temp, 15);
+ bcopy(temp+5, temp+15, 10);
+ exit (strcmp(temp, "klmnopqrstuwwxypqrstuwwxyz"));
+}
+
+EOF
+if { (eval echo configure:5610: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ cf_cv_good_bcopy=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ cf_cv_good_bcopy=no
fi
+rm -fr conftest*
fi
-CXX_EXISTS="$ac_cv_prog_CXX_EXISTS"
-if test -n "$CXX_EXISTS"; then
- echo "$ac_t""$CXX_EXISTS" 1>&6
+
+
+fi
+
+echo "$ac_t""$cf_cv_good_bcopy" 1>&6
+
else
echo "$ac_t""no" 1>&6
+cf_cv_good_bcopy=no
fi
+ if test $cf_cv_good_bcopy = yes ; then
+ cat >> confdefs.h <<\EOF
+#define USE_OK_BCOPY 1
+EOF
+
+ else
+ cat >> confdefs.h <<\EOF
+#define USE_MY_MEMMOVE 1
+EOF
+
+ fi
+
+fi
+
+
+if test -z "$cf_user_CFLAGS" ; then
+ CFLAGS=`echo ${CFLAGS} | sed -e 's/-g //' -e 's/-g$//'`
+ CXXFLAGS=`echo ${CXXFLAGS} | sed -e 's/-g //' -e 's/-g$//'`
+fi
+
+
+echo $ac_n "checking for builtin $CC bool type""... $ac_c" 1>&6
+echo "configure:5654: checking for builtin $CC bool type" >&5
+if eval "test \"`echo '$''{'cf_cv_cc_bool_type'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
else
- ac_cv_prog_CXX_EXISTS=no
+
+ cat > conftest.$ac_ext <<EOF
+#line 5660 "configure"
+#include "confdefs.h"
+
+#include <stdio.h>
+#include <sys/types.h>
+
+int main() {
+bool x = false
+; return 0; }
+EOF
+if { (eval echo configure:5670: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_cc_bool_type=1
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_cc_bool_type=0
+fi
+rm -f conftest*
+
+fi
+
+if test $cf_cv_cc_bool_type = 1
+then echo "$ac_t""yes" 1>&6
+else echo "$ac_t""no" 1>&6
fi
-if test "$ac_cv_prog_CXX_EXISTS" = yes; then
+
+if test -n "$CXX" ; then
ac_ext=C
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
+if test -n "$GXX" ; then
+case $cf_cv_system_name in #(vi
+os2*) #(vi
+ cf_stdcpp_libname=stdcpp
+ ;;
+*)
+ cf_stdcpp_libname=stdc++
+ ;;
+esac
+echo $ac_n "checking for library $cf_stdcpp_libname""... $ac_c" 1>&6
+echo "configure:5707: checking for library $cf_stdcpp_libname" >&5
+if eval "test \"`echo '$''{'cf_cv_libstdcpp'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+ cf_save="$LIBS"
+ LIBS="$LIBS -l$cf_stdcpp_libname -lm"
+cat > conftest.$ac_ext <<EOF
+#line 5715 "configure"
+#include "confdefs.h"
+
+#include <strstream.h>
+int main() {
+
+char buf[80];
+strstreambuf foo(buf, sizeof(buf))
+//destroy foo
+
+; return 0; }
+EOF
+if { (eval echo configure:5727: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cv_libstdcpp=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_libstdcpp=no
+fi
+rm -f conftest*
+ LIBS="$cf_save"
+
+fi
+
+echo "$ac_t""$cf_cv_libstdcpp" 1>&6
+test $cf_cv_libstdcpp = yes && CXXLIBS="$CXXLIBS -l$cf_stdcpp_libname"
+fi
+
+ case "`${CXX-g++} --version`" in
+ 1*|2.0-6*)
+ cf_cxx_library=yes
+ ;;
+ 2.7*)
+
cf_cxx_library=unknown
+case $cf_cv_system_name in #(vi
+os2*) #(vi
+ cf_gpp_libname=gpp
+ ;;
+*)
+ cf_gpp_libname=g++
+ ;;
+esac
if test $ac_cv_prog_gxx = yes; then
- echo $ac_n "checking for libg++""... $ac_c" 1>&6
-echo "configure:4849: checking for libg++" >&5
+ echo $ac_n "checking for lib$cf_gpp_libname""... $ac_c" 1>&6
+echo "configure:5762: checking for lib$cf_gpp_libname" >&5
cf_save="$LIBS"
- LIBS="$LIBS -lg++ -lm"
+ LIBS="$LIBS -l$cf_gpp_libname -lm"
cat > conftest.$ac_ext <<EOF
-#line 4853 "configure"
+#line 5766 "configure"
+#include "confdefs.h"
+
+#include <$cf_gpp_libname/builtin.h>
+
+int main() {
+//float foo=abs(1.0);
+ two_arg_error_handler_t foo2 = lib_error_handler
+; return 0; }
+EOF
+if { (eval echo configure:5776: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ cf_cxx_library=yes
+ CXXLIBS="$CXXLIBS -l$cf_gpp_libname -lm"
+ if test "$cf_gpp_libname" = cpp ; then
+ cat >> confdefs.h <<\EOF
+#define HAVE_GPP_BUILTIN_H 1
+EOF
+
+ else
+ cat >> confdefs.h <<\EOF
+#define HAVE_GXX_BUILTIN_H 1
+EOF
+
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cat > conftest.$ac_ext <<EOF
+#line 5796 "configure"
#include "confdefs.h"
#include <builtin.h>
int main() {
-float foo=abs(1.0)
+//float foo=abs(1.0);
+ two_arg_error_handler_t foo2 = lib_error_handler
; return 0; }
EOF
-if { (eval echo configure:4862: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest; then
+if { (eval echo configure:5806: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
rm -rf conftest*
cf_cxx_library=yes
- CXXLIBS="$CXXLIBS -lg++ -lm"
+ CXXLIBS="$CXXLIBS -l$cf_gpp_libname -lm"
+ cat >> confdefs.h <<\EOF
+#define HAVE_BUILTIN_H 1
+EOF
+
else
echo "configure: failed program was:" >&5
cat conftest.$ac_ext >&5
rm -rf conftest*
cf_cxx_library=no
fi
+rm -f conftest*
+fi
rm -f conftest*
LIBS="$cf_save"
echo "$ac_t""$cf_cxx_library" 1>&6
fi
+ ;;
+ *)
+ cf_cxx_library=no
+ ;;
+ esac
echo $ac_n "checking how to run the C++ preprocessor""... $ac_c" 1>&6
-echo "configure:4878: checking how to run the C++ preprocessor" >&5
+echo "configure:5833: checking how to run the C++ preprocessor" >&5
if test -z "$CXXCPP"; then
if eval "test \"`echo '$''{'ac_cv_prog_CXXCPP'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
ac_cpp='$CXXCPP $CPPFLAGS'
ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
-ac_link='${CXX-g++} -o conftest $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
cross_compiling=$ac_cv_prog_cxx_cross
CXXCPP="${CXX-g++} -E"
cat > conftest.$ac_ext <<EOF
-#line 4891 "configure"
+#line 5846 "configure"
#include "confdefs.h"
#include <stdlib.h>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4896: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:5851: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
:
else
fi
rm -f conftest*
ac_cv_prog_CXXCPP="$CXXCPP"
+ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
fi
fi
CXXCPP="$ac_cv_prog_CXXCPP"
echo "$ac_t""$CXXCPP" 1>&6
-for ac_hdr in builtin.h typeinfo
+for ac_hdr in typeinfo
do
ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
-echo "configure:4918: checking for $ac_hdr" >&5
+echo "configure:5879: checking for $ac_hdr" >&5
if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4923 "configure"
+#line 5884 "configure"
#include "confdefs.h"
#include <$ac_hdr>
EOF
ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
-{ (eval echo configure:4928: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
-ac_err=`grep -v '^ *+' conftest.out`
+{ (eval echo configure:5889: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
if test -z "$ac_err"; then
rm -rf conftest*
eval "ac_cv_header_$ac_safe=yes"
done
-echo $ac_n "checking for builtin c++ bool type""... $ac_c" 1>&6
-echo "configure:4956: checking for builtin c++ bool type" >&5
+echo $ac_n "checking for builtin $CXX bool type""... $ac_c" 1>&6
+echo "configure:5917: checking for builtin $CXX bool type" >&5
if eval "test \"`echo '$''{'cf_cv_builtin_bool'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cat > conftest.$ac_ext <<EOF
-#line 4962 "configure"
+#line 5923 "configure"
#include "confdefs.h"
+#include <stdio.h>
+#include <sys/types.h>
+
int main() {
bool x = false
; return 0; }
EOF
-if { (eval echo configure:4969: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+if { (eval echo configure:5933: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
rm -rf conftest*
cf_cv_builtin_bool=1
else
fi
-echo $ac_n "checking for size of c++ bool""... $ac_c" 1>&6
-echo "configure:4989: checking for size of c++ bool" >&5
+echo $ac_n "checking for size of $CXX bool""... $ac_c" 1>&6
+echo "configure:5953: checking for size of $CXX bool" >&5
if eval "test \"`echo '$''{'cf_cv_type_of_bool'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
cf_cv_type_of_bool=unknown
else
cat > conftest.$ac_ext <<EOF
-#line 4999 "configure"
+#line 5963 "configure"
#include "confdefs.h"
#ifdef __cplusplus
extern "C" void exit(int);
#include <stdlib.h>
#include <stdio.h>
-#if HAVE_BUILTIN_H
+#if HAVE_GXX_BUILTIN_H
+#include <g++/builtin.h>
+#elif HAVE_GPP_BUILTIN_H
+#include <gpp/builtin.h>
+#elif HAVE_BUILTIN_H
#include <builtin.h>
#endif
main()
FILE *fp = fopen("cf_test.out", "w");
if (fp != 0) {
bool x = true;
- if ((-x) >= 0)
+ if ((bool)(-x) >= 0)
fputs("unsigned ", fp);
if (sizeof(x) == sizeof(int)) fputs("int", fp);
else if (sizeof(x) == sizeof(char)) fputs("char", fp);
}
EOF
-if { (eval echo configure:5027: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest && (./conftest; exit) 2>/dev/null
+if { (eval echo configure:5995: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
then
cf_cv_type_of_bool=`cat cf_test.out`
else
cf_cv_type_of_bool=unsigned
fi
+
+echo $ac_n "checking for special defines needed for etip.h""... $ac_c" 1>&6
+echo "configure:6019: checking for special defines needed for etip.h" >&5
+cf_save_CXXFLAGS="$CXXFLAGS"
+cf_result="none"
+for cf_math in "" MATH_H
+do
+for cf_excp in "" MATH_EXCEPTION
+do
+ CXXFLAGS="$cf_save_CXXFLAGS -I${srcdir}/c++ -I${srcdir}/menu"
+ test -n "$cf_math" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_math}"
+ test -n "$cf_excp" && CXXFLAGS="$CXXFLAGS -DETIP_NEEDS_${cf_excp}"
+cat > conftest.$ac_ext <<EOF
+#line 6030 "configure"
+#include "confdefs.h"
+
+#include <etip.h.in>
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:6039: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+
+ test -n "$cf_math" && cat >> confdefs.h <<EOF
+#define ETIP_NEEDS_${cf_math} 1
+EOF
+
+ test -n "$cf_excp" && cat >> confdefs.h <<EOF
+#define ETIP_NEEDS_${cf_excp} 1
+EOF
+
+ cf_result="$cf_math $cf_excp"
+ break
+
else
- cf_cxx_library=no
- if eval "test \"`echo '$''{'cf_cv_builtin_bool'+set}'`\" = set"; then
- echo $ac_n "(cached) $ac_c" 1>&6
-else
- cf_cv_builtin_bool=0
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
fi
+rm -f conftest*
+done
+done
+echo "$ac_t""$cf_result" 1>&6
+CXXFLAGS="$cf_save_CXXFLAGS"
- if eval "test \"`echo '$''{'cf_cv_sizeof_bool'+set}'`\" = set"; then
+
+if test -n "$CXX" ; then
+echo $ac_n "checking if $CXX accepts parameter initialization""... $ac_c" 1>&6
+echo "configure:6066: checking if $CXX accepts parameter initialization" >&5
+if eval "test \"`echo '$''{'cf_cv_cpp_param_init'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
- cf_cv_sizeof_bool=int
+
+ ac_ext=C
+# CXXFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CXXCPP $CPPFLAGS'
+ac_compile='${CXX-g++} -c $CXXFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CXX-g++} -o conftest${ac_exeext} $CXXFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cxx_cross
+
+ if test "$cross_compiling" = yes; then
+ cf_cv_cpp_param_init=unknown
+else
+ cat > conftest.$ac_ext <<EOF
+#line 6082 "configure"
+#include "confdefs.h"
+#ifdef __cplusplus
+extern "C" void exit(int);
+#endif
+
+class TEST {
+private:
+ int value;
+public:
+ TEST(int x = 1);
+ ~TEST();
+};
+
+TEST::TEST(int x = 1) // some compilers do not like second initializer
+{
+ value = x;
+}
+void main() { }
+
+EOF
+if { (eval echo configure:6103: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ cf_cv_cpp_param_init=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ cf_cv_cpp_param_init=no
+fi
+rm -fr conftest*
fi
+
fi
+echo "$ac_t""$cf_cv_cpp_param_init" 1>&6
+fi
+test "$cf_cv_cpp_param_init" = yes && cat >> confdefs.h <<\EOF
+#define CPP_HAS_PARAM_INIT 1
+EOF
+
+
+ case $cf_cv_system_name in #(vi
+ sco3.2v5*)
+ CXXLDFLAGS="-u main"
+ ;;
+ esac
+
+else
+ cf_cxx_library=no
+ cf_cv_builtin_bool=1
+
+ # Just because we are not configuring against C++ right now does not
+ # mean that a user will not want to use C++. Some distributors disable
+ # the C++ portion of this configuration as a shortcut (or just to avoid
+ # compiling the demo in the c++ directory). So we need a reasonable
+ # default for the 'bool' type.
+ #
+ # Caveat: since the storage of the bool type is not standardized, it
+ # may change.
+
+ echo $ac_n "checking for fallback type of bool""... $ac_c" 1>&6
+echo "configure:6145: checking for fallback type of bool" >&5
+ case "$host_cpu" in #(vi
+ i?86) cf_cv_type_of_bool=char ;; #(vi
+ *) cf_cv_type_of_bool=int ;;
+ esac
+ echo "$ac_t""$cf_cv_type_of_bool" 1>&6
+fi
+
+if test "$cf_with_ada" != "no" ; then
cf_ada_make=gnatmake
# Extract the first word of "$cf_ada_make", so it can be a program name with args.
set dummy $cf_ada_make; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5072: checking for $ac_word" >&5
+echo "configure:6161: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_gnat_exists'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$gnat_exists"; then
ac_cv_prog_gnat_exists="$gnat_exists" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_gnat_exists="yes"
sed -e 's/[^0-9 \.]//g' | $AWK '{print $1;}'`
case $cf_cv_gnat_version in
3.[1-9]*|[4-9].*)
- ac_cv_prog_gnat_correct=yes
+ cf_cv_prog_gnat_correct=yes
;;
*) echo Unsupported GNAT version $cf_cv_gnat_version. Required is 3.10 or better. Disabling Ada95 binding.
- ac_cv_prog_gnat_correct=no
+ cf_cv_prog_gnat_correct=no
;;
esac
case $cf_cv_gnat_version in
3.1*|[4-9].*)
cf_compile_generics=generics
+ cf_generic_objects="\$(GENOBJS)"
;;
*) cf_compile_generics=
+ cf_generic_objects=
;;
esac
# Extract the first word of "m4", so it can be a program name with args.
set dummy m4; ac_word=$2
echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
-echo "configure:5123: checking for $ac_word" >&5
+echo "configure:6215: checking for $ac_word" >&5
if eval "test \"`echo '$''{'ac_cv_prog_m4_exists'+set}'`\" = set"; then
echo $ac_n "(cached) $ac_c" 1>&6
else
if test -n "$m4_exists"; then
ac_cv_prog_m4_exists="$m4_exists" # Let the user override the test.
else
- IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:"
- for ac_dir in $PATH; do
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
test -z "$ac_dir" && ac_dir=.
if test -f $ac_dir/$ac_word; then
ac_cv_prog_m4_exists="yes"
fi
if test "$ac_cv_prog_m4_exists" = no; then
- ac_cv_prog_gnat_correct=no
+ cf_cv_prog_gnat_correct=no
echo Ada95 binding required program m4 not found. Ada95 binding disabled.
fi
+ if test "$cf_cv_prog_gnat_correct" = yes; then
+ echo $ac_n "checking if GNAT works""... $ac_c" 1>&6
+echo "configure:6248: checking if GNAT works" >&5
+
+rm -f conftest*
+cat >>conftest.ads <<CF_EOF
+procedure conftest;
+CF_EOF
+cat >>conftest.adb <<CF_EOF
+with Text_IO;
+with GNAT.OS_Lib;
+procedure conftest is
+begin
+ Text_IO.Put ("Hello World");
+ Text_IO.New_Line;
+ GNAT.OS_Lib.OS_Exit (0);
+end conftest;
+CF_EOF
+if ( $cf_ada_make conftest 1>&5 2>&1 ) ; then
+ if ( ./conftest 1>&5 2>&1 ) ; then
+ cf_cv_prog_gnat_correct=yes
+ else
+ cf_cv_prog_gnat_correct=no
+ fi
+else
+ cf_cv_prog_gnat_correct=no
fi
-if test "$ac_cv_prog_gnat_correct" = yes; then
- ADAFLAGS="-O3 $ADAFLAGS"
- cf_ada_compiler=gcc
+rm -f conftest*
+
+ echo "$ac_t""$cf_cv_prog_gnat_correct" 1>&6
+ fi
+fi
+if test "$cf_cv_prog_gnat_correct" = yes; then
+ ADAFLAGS="-O3 -gnatpn $ADAFLAGS"
+
+
+# Check whether --with-ada-compiler or --without-ada-compiler was given.
+if test "${with_ada_compiler+set}" = set; then
+ withval="$with_ada_compiler"
+ cf_ada_compiler=$withval
+else
+ cf_ada_compiler=gnatmake
+fi
+
+
cf_ada_package=terminal_interface
+
# Check whether --with-ada-include or --without-ada-include was given.
withval="$with_ada_include"
:
else
- withval="${ADA_INCLUDE-$exec_prefix/ada_include}"
+ withval="${ADA_INCLUDE-$prefix/lib/gnu-Ada/adainclude}"
fi
+
case ".$withval" in #(vi
./*) #(vi
;;
withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
;;
*)
- { echo "configure: error: expected a pathname for ada-include" 1>&2; exit 1; }
+ { echo "configure: error: expected a pathname" 1>&2; exit 1; }
;;
esac
+
eval ADA_INCLUDE="$withval"
withval="$with_ada_objects"
:
else
- withval="${ADA_OBJECTS-$exec_prefix/ada_objects}"
+ withval="${ADA_OBJECTS-$prefix/lib/gnu-Ada/adalib}"
fi
+
case ".$withval" in #(vi
./*) #(vi
;;
withval=`echo $withval | sed -e s@NONE@$ac_default_prefix@`
;;
*)
- { echo "configure: error: expected a pathname for ada-objects" 1>&2; exit 1; }
+ { echo "configure: error: expected a pathname" 1>&2; exit 1; }
;;
esac
+
eval ADA_OBJECTS="$withval"
+ if test $with_shared = no
+ then
+ echo "configure: warning: Ada95 applications will not link properly with static libraries" 1>&2
+ fi
+fi
fi
### It's not possible to appease gcc 2.6.3's conversion-warnings if we're
if test -n "$GCC"; then
case "`$CC --version`" in
2.6.3)
- if test "$cf_cv_sizeof_bool" != "char"; then
+ if test "$cf_cv_type_of_bool" != "char"; then
EXTRA_CFLAGS="$EXTRA_CFLAGS -Wconversion"
fi
;;
### Construct the library-subsets, if any, from this set of keywords:
### none, base, ext_funcs, termlib.
echo $ac_n "checking for library subsets""... $ac_c" 1>&6
-echo "configure:5248: checking for library subsets" >&5
+echo "configure:6392: checking for library subsets" >&5
if test "$with_termlib" = yes ; then
LIB_SUBSETS="termlib "
else
echo $ac_n "checking for src modules""... $ac_c" 1>&6
-echo "configure:5310: checking for src modules" >&5
+echo "configure:6454: checking for src modules" >&5
# dependencies and linker-arguments for test-programs
TEST_DEPS="${LIB_PREFIX}${LIB_NAME}${DFT_DEP_SUFFIX} $TEST_DEPS"
SRC_SUBDIRS="$SRC_SUBDIRS $cf_dir"
done
SRC_SUBDIRS="$SRC_SUBDIRS misc test"
-test $cf_cxx_library != no && SRC_SUBDIRS="$SRC_SUBDIRS c++"
+test $cf_with_cxx_binding != no && SRC_SUBDIRS="$SRC_SUBDIRS c++"
ADA_SUBDIRS=
-if test "$ac_cv_prog_gnat_correct" = yes && test -d $srcdir/Ada95; then
+if test "$cf_cv_prog_gnat_correct" = yes && test -d $srcdir/Ada95; then
SRC_SUBDIRS="$SRC_SUBDIRS Ada95"
- ADA_SUBDIRS="gen ada_include samples"
+ ADA_SUBDIRS="gen src samples"
fi
SUB_MAKEFILES=
if test -n "$ADA_SUBDIRS"; then
for cf_dir in $ADA_SUBDIRS
- do
+ do
SUB_MAKEFILES="$SUB_MAKEFILES Ada95/$cf_dir/Makefile"
done
# Ultrix sh set writes to stderr and can't be redirected directly,
# and sets the high bit in the cache file unless we assign to the vars.
(set) 2>&1 |
- case `(ac_space=' '; set) 2>&1 | grep '^ac_space='` in
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
*ac_space=\ *)
# `set' does not quote correctly, so add quotes (double-quote substitution
# turns \\\\ into \\, and sed turns \\ into \).
echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
-version | --version | --versio | --versi | --vers | --ver | --ve | --v)
- echo "$CONFIG_STATUS generated by autoconf version 2.12.971230"
+ echo "$CONFIG_STATUS generated by autoconf version 2.13.19990117"
exit 0 ;;
-help | --help | --hel | --he | --h)
echo "\$ac_cs_usage"; exit 0 ;;
s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
$ac_vpsub
$extrasub
+s%@SHELL@%$SHELL%g
s%@CFLAGS@%$CFLAGS%g
s%@CPPFLAGS@%$CPPFLAGS%g
s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
s%@DEFS@%$DEFS%g
s%@LDFLAGS@%$LDFLAGS%g
s%@LIBS@%$LIBS%g
s%@NCURSES_PATCH@%$NCURSES_PATCH%g
s%@cf_cv_rel_version@%$cf_cv_rel_version%g
s%@cf_cv_abi_version@%$cf_cv_abi_version%g
+s%@cf_cv_cc_bool_type@%$cf_cv_cc_bool_type%g
s%@cf_cv_builtin_bool@%$cf_cv_builtin_bool%g
s%@cf_cv_type_of_bool@%$cf_cv_type_of_bool%g
s%@host@%$host%g
s%@host_vendor@%$host_vendor%g
s%@host_os@%$host_os%g
s%@CC@%$CC%g
+s%@BUILD_CC@%$BUILD_CC%g
s%@CPP@%$CPP%g
+s%@PROG_EXT@%$PROG_EXT%g
s%@LDCONFIG@%$LDCONFIG%g
s%@CXX@%$CXX%g
s%@AWK@%$AWK%g
s%@SET_MAKE@%$SET_MAKE%g
s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g
+s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g
s%@INSTALL_DATA@%$INSTALL_DATA%g
s%@LN_S@%$LN_S%g
s%@RANLIB@%$RANLIB%g
s%@cf_cv_makeflags@%$cf_cv_makeflags%g
s%@INSTALL_PREFIX@%$INSTALL_PREFIX%g
s%@EXTRA_LIBS@%$EXTRA_LIBS%g
+s%@TINFO_LIST@%$TINFO_LIST%g
s%@SHLIB_LIST@%$SHLIB_LIST%g
s%@DFT_OBJ_SUBDIR@%$DFT_OBJ_SUBDIR%g
s%@DFT_LWR_MODEL@%$DFT_LWR_MODEL%g
s%@CC_SHARED_OPTS@%$CC_SHARED_OPTS%g
s%@LD_SHARED_OPTS@%$LD_SHARED_OPTS%g
s%@MK_SHARED_LIB@%$MK_SHARED_LIB%g
+s%@LINK_PROGS@%$LINK_PROGS%g
+s%@LINK_TESTS@%$LINK_TESTS%g
s%@EXTRA_LDFLAGS@%$EXTRA_LDFLAGS%g
s%@LOCAL_LDFLAGS@%$LOCAL_LDFLAGS%g
s%@LOCAL_LDFLAGS2@%$LOCAL_LDFLAGS2%g
s%@INSTALL_LIB@%$INSTALL_LIB%g
s%@FALLBACK_LIST@%$FALLBACK_LIST%g
+s%@TERMINFO_DIRS@%$TERMINFO_DIRS%g
+s%@NCURSES_CONST@%$NCURSES_CONST%g
+s%@NCURSES_XNAMES@%$NCURSES_XNAMES%g
s%@ECHO_LINK@%$ECHO_LINK%g
s%@EXTRA_CFLAGS@%$EXTRA_CFLAGS%g
s%@MATH_LIB@%$MATH_LIB%g
-s%@PROG_EXT@%$PROG_EXT%g
s%@cf_cv_typeof_chtype@%$cf_cv_typeof_chtype%g
s%@cf_cv_1UL@%$cf_cv_1UL%g
s%@cf_cv_shift_limit@%$cf_cv_shift_limit%g
s%@cf_cv_widec_shift@%$cf_cv_widec_shift%g
-s%@CXX_EXISTS@%$CXX_EXISTS%g
+s%@OSPEED_TYPE@%$OSPEED_TYPE%g
+s%@OSPEED_INCLUDES@%$OSPEED_INCLUDES%g
s%@CXXCPP@%$CXXCPP%g
+s%@CXXLDFLAGS@%$CXXLDFLAGS%g
s%@CXXLIBS@%$CXXLIBS%g
s%@gnat_exists@%$gnat_exists%g
s%@m4_exists@%$m4_exists%g
s%@cf_ada_package@%$cf_ada_package%g
s%@ADAFLAGS@%$ADAFLAGS%g
s%@cf_compile_generics@%$cf_compile_generics%g
+s%@cf_generic_objects@%$cf_generic_objects%g
s%@ADA_INCLUDE@%$ADA_INCLUDE%g
s%@ADA_OBJECTS@%$ADA_OBJECTS%g
s%@ACPPFLAGS@%$ACPPFLAGS%g
cf_cv_rel_version="$cf_cv_rel_version"
cf_cv_rm_so_locs="$cf_cv_rm_so_locs"
cf_cv_system_name="$cf_cv_system_name"
-cf_cxx_library="$cf_cxx_library"
+cf_with_cxx_binding="$cf_with_cxx_binding"
target="$target"
os2) cf_prefix='' ;;
*) cf_prefix='lib' ;;
esac
+ LIB_PREFIX=$cf_prefix
+
for cf_dir in $SRC_SUBDIRS
profile) cf_suffix='_p.a' ;;
shared)
case $cf_cv_system_name in
- openbsd*|netbsd*|freebsd*)
+ openbsd*|freebsd*)
cf_suffix='.so.$(REL_VERSION)' ;;
+ netbsd*)
+ if test -f /usr/libexec/ld.elf_so; then
+ cf_suffix='.so'
+ else
+ cf_suffix='.so.$(REL_VERSION)'
+ fi
+ ;;
hpux*) cf_suffix='.sl' ;;
*) cf_suffix='.so' ;;
esac
;;
*) #(vi
cf_item=`echo $cf_libs_to_make |sed -e s/$LIB_NAME/$TINFO_NAME/g`
- cf_libs_to_make="$cf_libs_to_make $cf_item"
+ cf_libs_to_make="$cf_item $cf_libs_to_make"
;;
esac
fi
profile) cf_suffix='_p.a' ;;
shared)
case $cf_cv_system_name in
- openbsd*|netbsd*|freebsd*)
+ openbsd*|freebsd*)
cf_suffix='.so.$(REL_VERSION)' ;;
+ netbsd*)
+ if test -f /usr/libexec/ld.elf_so; then
+ cf_suffix='.so'
+ else
+ cf_suffix='.so.$(REL_VERSION)'
+ fi
+ ;;
hpux*) cf_suffix='.sl' ;;
*) cf_suffix='.so' ;;
esac
cat >> Makefile <<CF_EOF
-install.data ::
+install.data \
+uninstall.data ::
cd misc && \$(MAKE) \$(CF_MFLAGS) \$@
-install.man ::
+install.man \
+uninstall.man ::
cd man && \$(MAKE) \$(CF_MFLAGS) \$@
distclean ::
dnl***************************************************************************
-dnl Copyright (c) 1998 Free Software Foundation, Inc. *
+dnl Copyright (c) 1998,1999 Free Software Foundation, Inc. *
dnl *
dnl Permission is hereby granted, free of charge, to any person obtaining a *
dnl copy of this software and associated documentation files (the *
dnl
dnl Author: Thomas E. Dickey <dickey@clark.net> 1996,1997
dnl
-dnl $Id: configure.in,v 1.126 1998/02/12 23:10:43 tom Exp $
+dnl $Id: configure.in,v 1.179 1999/10/24 00:32:42 tom Exp $
dnl Process this file with autoconf to produce a configure script.
AC_PREREQ(2.12.971222)
-AC_REVISION($Revision: 1.126 $)
-AC_INIT(ncurses/lib_initscr.c)
+AC_REVISION($Revision: 1.179 $)
+AC_INIT(ncurses/base/lib_initscr.c)
AC_CONFIG_HEADER(include/ncurses_cfg.h:include/ncurses_cfg.hin)
CF_SUBST_NCURSES_VERSION
AC_MSG_CHECKING(version of gcc)
eval "$CC --version"
fi
+if test $host != $build; then
+ AC_CHECK_PROGS(BUILD_CC, $CC gcc cc)
+fi
AC_PROG_CPP
AC_PROG_GCC_TRADITIONAL
AC_ISC_POSIX
-AC_PATH_PROG(LDCONFIG,ldconfig,,$PATH:/sbin:/usr/sbin)
+CF_ANSI_CC_REQD
+CF_PROG_EXT
+
+case "$cf_cv_system_name" in
+freebsd*) #(vi
+ test -z "$LDCONFIG" && LDCONFIG="/sbin/ldconfig -R"
+ ;;
+*) LDPATH=$PATH:/sbin:/usr/sbin
+ AC_PATH_PROG(LDCONFIG,ldconfig,,$LDPATH)
+ ;;
+esac
+AC_SUBST(LDCONFIG)
dnl DEFECT in autoconf 2.12: an attempt to set policy, this breaks the
dnl configure script by not letting us test if C++
dnl is present, making this option necessary.
-AC_MSG_CHECKING(if you want to build with C++)
+AC_MSG_CHECKING(if you want to ensure bool is consistent with C++)
AC_ARG_WITH(cxx,
- [ --without-cxx suppress check for C++, don't build demo],
+ [ --without-cxx do not adjust ncurses bool to match C++],
[cf_with_cxx=$withval],
[cf_with_cxx=yes])
AC_MSG_RESULT($cf_with_cxx)
-if test "X$cf_with_cxx" != Xno ; then
-AC_PROG_CXX
+if test "X$cf_with_cxx" = Xno ; then
+ CXX=""
+ GXX=""
+else
+ AC_PROG_CXX
fi
changequote(,)dnl
if test -n "$GXX" ; then case "`${CXX-g++} --version`" in 1*|2.[0-6]*) GXX=""; CXX=""; ac_cv_prog_gxx=no; cf_cxx_library=no ; echo No: templates do not work;; esac; fi
changequote([,])dnl
+AC_MSG_CHECKING(if you want to build C++ binding and demo)
+AC_ARG_WITH(cxx-binding,
+ [ --without-cxx-binding do not build C++ binding and demo],
+ [cf_with_cxx_binding=$withval],
+ [cf_with_cxx_binding=$cf_with_cxx])
+AC_MSG_RESULT($cf_with_cxx_binding)
+
+AC_MSG_CHECKING(if you want to build with Ada95)
+AC_ARG_WITH(ada,
+ [ --without-ada suppress check for Ada95, don't build demo],
+ [cf_with_ada=$withval],
+ [cf_with_ada=yes])
+AC_MSG_RESULT($cf_with_ada)
+
AC_MSG_CHECKING(if you want to build programs such as tic)
AC_ARG_WITH(progs,
[ --without-progs suppress build with programs (e.g., tic)],
CF_SUBST(archiver options,AR_OPTS,rv)
CF_MAKEFLAGS
-CF_MAN_PAGES
dnl Special option for use by system-builders: the install-prefix is used to
dnl adjust the location into which the actual install is done, so that an
AC_MSG_RESULT($INSTALL_PREFIX)
AC_SUBST(INSTALL_PREFIX)
+###############################################################################
+CF_MAN_PAGES
+
###############################################################################
CF_HELP_MESSAGE(Options to Specify the Libraries Built/Used:)
AC_MSG_CHECKING(if you want to link with dbmalloc for testing)
AC_ARG_WITH(dbmalloc,
[ --with-dbmalloc test: use Conor Cahill's dbmalloc library],
- [with_dbmalloc=yes],
+ [with_dbmalloc=$withval],
[with_dbmalloc=no])
AC_MSG_RESULT($with_dbmalloc)
if test $with_dbmalloc = yes ; then
AC_MSG_CHECKING(if you want to link with dmalloc for testing)
AC_ARG_WITH(dmalloc,
[ --with-dmalloc test: use Gray Watson's dmalloc library],
- [with_dmalloc=yes],
+ [with_dmalloc=$withval],
[with_dmalloc=no])
AC_MSG_RESULT($with_dmalloc)
if test $with_dmalloc = yes ; then
AC_CHECK_LIB(dmalloc,dmalloc_debug)
fi
+SHLIB_LIST=""
AC_MSG_CHECKING(if you want to link with the gpm mouse library)
AC_ARG_WITH(gpm,
[ --with-gpm use Alessandro Rubini's GPM library],
- [with_gpm=yes],
+ [with_gpm=$withval],
[with_gpm=no])
AC_MSG_RESULT($with_gpm)
if test $with_gpm = yes ; then
AC_CHECK_LIB(gpm,Gpm_Open,[
- EXTRA_LIBS="$EXTRA_LIBS -lgpm -lncurses"
- SHLIB_LIST="$SHLIB_DEPS -lgpm "
+ EXTRA_LIBS="-lgpm -lncurses $EXTRA_LIBS"
+ SHLIB_LIST="-lgpm $SHLIB_LIST"
AC_DEFINE(HAVE_LIBGPM)
AC_CHECK_HEADERS(gpm.h)
- ],,-lcurses -ltermcap)
+ ],AC_MSG_WARN(Cannot link with gpm library - read the FAQ))
fi
+TINFO_LIST="$SHLIB_LIST"
+test $with_termlib = yes && SHLIB_LIST="$SHLIB_LIST -ltinfo"
+
AC_SUBST(EXTRA_LIBS)
+AC_SUBST(TINFO_LIST)
AC_SUBST(SHLIB_LIST)
AC_MSG_CHECKING(for specified models)
AC_SUBST(LIB_PREFIX)
dnl Not all ports of gcc support the -g option
-dnl autoconf 2.12 uses different symbol for -g option than autoconf 2.10, etc.
if test X"$CC_G_OPT" = X"" ; then
CC_G_OPT='-g'
- test -n "$GCC" && test "${ac_cv_prog_cc_g}${ac_cv_prog_gcc_g}" != yes && CC_G_OPT=''
+ test -n "$GCC" && test "${ac_cv_prog_cc_g}" != yes && CC_G_OPT=''
fi
AC_SUBST(CC_G_OPT)
if test X"$CXX_G_OPT" = X"" ; then
CXX_G_OPT='-g'
- test -n "$GXX" && test "${ac_cv_prog_cxx_g}${ac_cv_prog_gxx_g}" != yes && CXX_G_OPT=''
+ test -n "$GXX" && test "${ac_cv_prog_cxx_g}" != yes && CXX_G_OPT=''
fi
AC_SUBST(CXX_G_OPT)
AC_MSG_RESULT($cf_cv_ld_rpath)
CF_SHARED_OPTS
-
if test "$CC_SHARED_OPTS" = "unknown"; then
for model in $cf_list_models; do
if test "$model" = "shared"; then
[with_fallback=$withval],
[with_fallback=])
AC_MSG_RESULT($with_fallback)
-FALLBACK_LIST=`echo $with_fallback|sed -e 's/,/ /'`
+FALLBACK_LIST=`echo $with_fallback|sed -e 's/,/ /g'`
AC_SUBST(FALLBACK_LIST)
+AC_MSG_CHECKING(for list of terminfo directories)
+CF_WITH_PATHLIST(terminfo-dirs,
+ [ --with-terminfo-dirs=XXX specify list of terminfo directories],
+ TERMINFO_DIRS,
+ DATADIR/terminfo,
+ ${datadir}/terminfo)
+AC_MSG_RESULT($TERMINFO_DIRS)
+test -n "$TERMINFO_DIRS" && AC_DEFINE_UNQUOTED(TERMINFO_DIRS,"$TERMINFO_DIRS")
+
if test $with_database = no ; then
if test -z $with_fallback ; then
AC_ERROR(You have disabled the database w/o specifying fallbacks)
fi
fi
-### use option --enable-big-core to make tic run faster on big machines
+### use option --disable-big-core to make tic run on small machines
+### We need 4Mb, check if we can allocate 50% more than that.
AC_MSG_CHECKING(if big-core option selected)
AC_ARG_ENABLE(big-core,
- [ --enable-big-core assume machine has lots of memory],
+ [ --disable-big-core assume machine has little memory],
[with_big_core=$enableval],
- [with_big_core=no])
+ [AC_TRY_RUN([
+#include <stdlib.h>
+#include <string.h>
+int main() { exit(malloc(6000000L) == 0); }],
+ [with_big_core=yes],
+ [with_big_core=no],
+ [with_big_core=no])])
AC_MSG_RESULT($with_big_core)
test "$with_big_core" = "yes" && AC_DEFINE(HAVE_BIG_CORE)
### Use option --enable-symlinks to make tic use symlinks, not hard links
### to reduce storage requirements for the terminfo database.
-###
-### Most Unix systems have both link and symlink, a few don't have symlink.
-### A few non-Unix systems implement symlink, but not link.
-### A few non-systems implement neither.
-
-AC_CHECK_FUNCS( \
- link \
- symlink )
+CF_LINK_FUNCS
with_links=no
with_symlinks=no
[with_ext_const=$enableval],
[with_ext_const=no])
AC_MSG_RESULT($with_ext_const)
-test "$with_ext_const" = yes && AC_DEFINE(NCURSES_CONST,const)
+NCURSES_CONST=""
+if test "$with_ext_const" = yes ; then
+ AC_DEFINE(NCURSES_CONST,const)
+ NCURSES_CONST=const
+fi
+AC_SUBST(NCURSES_CONST)
### Enable compiling-in rcs id's
AC_MSG_CHECKING(if RCS identifiers should be compiled-in)
AC_ARG_WITH(rcs-ids,
[ --with-rcs-ids compile-in RCS identifiers],
- [with_rcs_ids=$enableval],
+ [with_rcs_ids=$withval],
[with_rcs_ids=no])
AC_MSG_RESULT($with_rcs_ids)
test "$with_rcs_ids" = yes && AC_DEFINE(USE_RCS_IDS)
[with_develop=no])
AC_MSG_RESULT($with_develop)
+### use option --enable-broken-linker to force on use of broken-linker support
+AC_MSG_CHECKING(if you want broken-linker support code)
+AC_ARG_ENABLE(broken_linker,
+ [ --enable-broken_linker compile with broken-linker support code],
+ [with_broken_linker=$enableval],
+ [with_broken_linker=$BROKEN_LINKER])
+AC_MSG_RESULT($with_broken_linker)
+test "$with_broken_linker" = yes && AC_DEFINE(BROKEN_LINKER)
+
### use option --enable-hard-tabs to turn on use of hard-tabs optimize
AC_MSG_CHECKING(if you want experimental hard-tabs code)
AC_ARG_ENABLE(hard-tabs,
AC_ARG_ENABLE(hashmap,
[ --enable-hashmap compile with experimental hashmap code],
[with_hashmap=$enableval],
- [with_hashmap=$with_develop])
+ [with_hashmap=yes])
AC_MSG_RESULT($with_hashmap)
test "$with_hashmap" = yes && AC_DEFINE(USE_HASHMAP)
+AC_MSG_CHECKING(if you want experimental no-padding code)
+AC_ARG_ENABLE(no-padding,
+ [ --enable-no-padding compile with experimental no-padding code],
+ [with_no_padding=$enableval],
+ [with_no_padding=yes])
+AC_MSG_RESULT($with_no_padding)
+test "$with_no_padding" = yes && AC_DEFINE(NCURSES_NO_PADDING)
+
AC_MSG_CHECKING(if you want experimental safe-sprintf code)
AC_ARG_ENABLE(safe-sprintf,
- [ --disable-safe-sprintf compile with experimental safe-sprintf code],
+ [ --enable-safe-sprintf compile with experimental safe-sprintf code],
[with_safe_sprintf=$enableval],
[with_safe_sprintf=no])
AC_MSG_RESULT($with_safe_sprintf)
AC_ARG_ENABLE(scroll-hints,
[ --disable-scroll-hints compile hashmap without scroll-hints code],
[with_scroll_hints=$enableval],
- [with_scroll_hints=yes])
+ [with_scroll_hints=yes;
+ # when hashmap is used scroll hints are useless
+ test $with_hashmap = yes && with_scroll_hints=no])
AC_MSG_RESULT($with_scroll_hints)
test "$with_scroll_hints" = yes && AC_DEFINE(USE_SCROLL_HINTS)
+### use option --enable-tcap-names to allow user to define new capabilities
+AC_MSG_CHECKING(if you want experimental definable names like termcap)
+AC_ARG_ENABLE(tcap-names,
+ [ --enable-tcap-names compile with experimental definable-name code],
+ [with_tcap_names=$enableval],
+ [with_tcap_names=$with_develop])
+AC_MSG_RESULT($with_tcap_names)
+NCURSES_XNAMES=0
+test "$with_tcap_names" = yes && NCURSES_XNAMES=1
+AC_SUBST(NCURSES_XNAMES)
+
### use option --enable-sigwinch to turn on use of SIGWINCH logic
AC_MSG_CHECKING(if you want experimental SIGWINCH handler)
AC_ARG_ENABLE(sigwinch,
[ --enable-sigwinch compile with experimental SIGWINCH handler],
[with_sigwinch=$enableval],
- [with_sigwinch=$with_develop])
+ [with_sigwinch=yes])
AC_MSG_RESULT($with_sigwinch)
test "$with_sigwinch" = yes && AC_DEFINE(USE_SIGWINCH)
values.h \
)
-PROG_EXT=
-case $cf_cv_system_name in
-hpux*)
- # check for HPUX's ANSI compiler
- if test -z "$GCC"; then
- AC_MSG_CHECKING([for HP/UX ANSI compiler])
- cf_save_CFLAGS="$CFLAGS"
- CFLAGS="$CFLAGS -Aa"
- AC_TRY_COMPILE([],[void (*f)(void)=0],[cf_hpux_cc=yes],[cf_hpux_cc=no])
- AC_MSG_RESULT($cf_hpux_cc)
- if test $cf_hpux_cc = yes; then
- AC_DEFINE(_HPUX_SOURCE)
- else
- CFLAGS="$cf_save_CFLAGS"
- fi
- fi
- ;;
-os2*)
- # We make sure -Zexe is not used -- it would interfere with @PROG_EXT@
- CFLAGS="$CFLAGS -Zmt -D__ST_MT_ERRNO__"
- LDFLAGS=`echo "$LDFLAGS -Zmt -Zcrtdll" | sed "s/-Zexe//g"`
- PROG_EXT=".exe"
- ;;
-esac
-AC_SUBST(PROG_EXT)
-
# check for ISC (this may also define _POSIX_SOURCE)
# Note: even non-Posix ISC needs <sys/bsdtypes.h> to declare fd_set
if test "$ISC" = yes ; then
CF_SPEED_TYPE
### Checks for library functions.
-AC_CHECK_FUNCS( \
+AC_CHECK_FUNCS( getcwd \
getttynam \
memccpy \
nanosleep \
sigaction \
sigvec \
strdup \
+strstr \
tcgetattr \
+tcgetpgrp \
times \
-usleep \
vfscanf \
vsnprintf \
vsscanf \
)
+
if test "$with_getcap" = "yes" ; then
CF_CGETENT
fi
AC_TYPE_SIGNAL
CF_TYPE_SIGACTION
CF_SIZECHANGE
-
-dnl FIXME checks we don't do (but neither does the old Configure script):
-case "$cf_cv_system_name" in
-linux*)
- AC_DEFINE(GOOD_SELECT)
- ;;
-esac
+CF_FUNC_MEMMOVE
dnl We'll do our own -g libraries, unless the user's overridden via $CFLAGS
if test -z "$cf_user_CFLAGS" ; then
fi
dnl Check for C++ compiler characteristics (and ensure that it's there!)
+CF_BOOL_DECL(cf_cv_cc_bool_type)
if test -n "$CXX" ; then
- AC_CHECK_PROG(CXX_EXISTS, $CXX, yes, no)
-else
- ac_cv_prog_CXX_EXISTS=no
-fi
-if test "$ac_cv_prog_CXX_EXISTS" = yes; then
AC_LANG_CPLUSPLUS
- CF_CXX_LIBRARY
- AC_CHECK_HEADERS(builtin.h typeinfo)
+ CF_STDCPP_LIBRARY
+ case "`${CXX-g++} --version`" in
+ 1*|2.[0-6]*)
+ cf_cxx_library=yes
+ ;;
+ 2.7*)
+ CF_GPP_LIBRARY
+ ;;
+ *)
+ cf_cxx_library=no
+ ;;
+ esac
+ AC_CHECK_HEADERS(typeinfo)
CF_BOOL_DECL
CF_BOOL_SIZE
+ CF_ETIP_DEFINES
+ CF_CPP_PARAM_INIT
+ case $cf_cv_system_name in #(vi
+ sco3.2v5*)
+ CXXLDFLAGS="-u main"
+ ;;
+ esac
+ AC_SUBST(CXXLDFLAGS)
else
cf_cxx_library=no
- AC_CACHE_VAL(cf_cv_builtin_bool,[cf_cv_builtin_bool=0])
- AC_CACHE_VAL(cf_cv_sizeof_bool,[cf_cv_sizeof_bool=int])
+ cf_cv_builtin_bool=1
+
+ # Just because we are not configuring against C++ right now does not
+ # mean that a user will not want to use C++. Some distributors disable
+ # the C++ portion of this configuration as a shortcut (or just to avoid
+ # compiling the demo in the c++ directory). So we need a reasonable
+ # default for the 'bool' type.
+ #
+ # Caveat: since the storage of the bool type is not standardized, it
+ # may change.
+
+ AC_MSG_CHECKING(for fallback type of bool)
+ case "$host_cpu" in #(vi
+ i?86) cf_cv_type_of_bool=char ;; #(vi
+ *) cf_cv_type_of_bool=int ;;
+ esac
+ AC_MSG_RESULT($cf_cv_type_of_bool)
fi
AC_SUBST(CXXLIBS)
dnl Check for availability of GNU Ada Translator (GNAT).
dnl At the moment we support no other Ada95 compiler.
+if test "$cf_with_ada" != "no" ; then
cf_ada_make=gnatmake
AC_CHECK_PROG(gnat_exists, $cf_ada_make, yes, no)
if test "$ac_cv_prog_gnat_exists" = no; then
CF_GNAT_VERSION
AC_CHECK_PROG(m4_exists, m4, yes, no)
if test "$ac_cv_prog_m4_exists" = no; then
- ac_cv_prog_gnat_correct=no
+ cf_cv_prog_gnat_correct=no
echo Ada95 binding required program m4 not found. Ada95 binding disabled.
fi
+ if test "$cf_cv_prog_gnat_correct" = yes; then
+ AC_MSG_CHECKING(if GNAT works)
+ CF_GNAT_TRY_RUN([procedure conftest;],
+[with Text_IO;
+with GNAT.OS_Lib;
+procedure conftest is
+begin
+ Text_IO.Put ("Hello World");
+ Text_IO.New_Line;
+ GNAT.OS_Lib.OS_Exit (0);
+end conftest;],[cf_cv_prog_gnat_correct=yes],[cf_cv_prog_gnat_correct=no])
+ AC_MSG_RESULT($cf_cv_prog_gnat_correct)
+ fi
fi
-if test "$ac_cv_prog_gnat_correct" = yes; then
- ADAFLAGS="-O3 $ADAFLAGS"
- cf_ada_compiler=gcc
+if test "$cf_cv_prog_gnat_correct" = yes; then
+ ADAFLAGS="-O3 -gnatpn $ADAFLAGS"
+
+ AC_ARG_WITH(ada-compiler,
+ [ --with-ada-compiler=CMD Specify Ada95 compiler command (default gnatmake)],
+ [cf_ada_compiler=$withval],
+ [cf_ada_compiler=gnatmake])
+
cf_ada_package=terminal_interface
AC_SUBST(cf_ada_make)
AC_SUBST(cf_ada_package)
AC_SUBST(ADAFLAGS)
AC_SUBST(cf_compile_generics)
+ AC_SUBST(cf_generic_objects)
CF_WITH_PATH(ada-include,
[ --with-ada-include=DIR Ada includes are in DIR],
ADA_INCLUDE,
- EPREFIX/ada_include,
- [$]exec_prefix/ada_include)
+ PREFIX/lib/gnu-Ada/adainclude,
+ [$]prefix/lib/gnu-Ada/adainclude)
AC_SUBST(ADA_INCLUDE)
CF_WITH_PATH(ada-objects,
[ --with-ada-objects=DIR Ada objects are in DIR],
ADA_OBJECTS,
- EPREFIX/ada_objects,
- [$]exec_prefix/ada_objects)
+ PREFIX/lib/gnu-Ada/adalib,
+ [$]prefix/lib/gnu-Ada/adalib)
AC_SUBST(ADA_OBJECTS)
+ if test $with_shared = no
+ then
+ AC_MSG_WARN(Ada95 applications will not link properly with static libraries)
+ fi
+fi
fi
### It's not possible to appease gcc 2.6.3's conversion-warnings if we're
if test -n "$GCC"; then
case "`$CC --version`" in
2.6.3)
- if test "$cf_cv_sizeof_bool" != "char"; then
+ if test "$cf_cv_type_of_bool" != "char"; then
EXTRA_CFLAGS="$EXTRA_CFLAGS -Wconversion"
fi
;;
cf_cv_rel_version="$cf_cv_rel_version"
cf_cv_rm_so_locs="$cf_cv_rm_so_locs"
cf_cv_system_name="$cf_cv_system_name"
-cf_cxx_library="$cf_cxx_library"
+cf_with_cxx_binding="$cf_with_cxx_binding"
target="$target"
],sort)dnl
--- /dev/null
+extproc perl -S -w
+
+# The converted script is written to stdout, so run this script as
+# convert_configure configure > configure.cmd
+#
+# When the converted script runs, it expects that /tmp dir is
+# available (so we create it).
+#
+# run the result like this:
+# .\configure
+;
+
+mkdir '/tmp', 0777 unless -d '/tmp';
+
+print <<EOF;
+extproc sh
+
+# Make sensible defaults:
+CC="gcc -Zexe"
+export CC
+#GCCOPT="$GCCOPT -Zexe"
+#export GCCOPT
+CONFIG_SHELL=sh
+
+EOF
+
+$checking_path = 0;
+
+while (<>) {
+ if (/for\s+(\w+)\s+in\s*\$PATH\s*;/) {
+ $checking_path = 1;
+ $varname = $1;
+ $subst= <<EOS
+$varname="`echo -E \\"\$$varname\\" | tr \\\\\\\\\\\\\\\\ / `"
+EOS
+ }
+ $checking_path = 0 if /^\s*done\s*$/;
+ # We want to create an extra line like this one:
+# ac_dir="`echo -E \"$ac_dir\" | tr \\\\\\\\ / `"
+ s{^((\s*)if\s+test)\s*-f\s*(\$$varname/\S+)\s*;}
+ {$2$subst$1 -f $3 -o -f $3.exe ;}
+ if $checking_path; # Checking for executables
+ s/^host=NONE$/host=os2/; # Make default host
+ s/"\$\{IFS}:"$/"\${IFS};"/; # Fix IFS line
+ s/\btest\s+-s\s+conftest\b/test -f conftest/g; # Fix exe test
+ # This one is needed for curses:
+ s/host=`\$ac_config_sub \$host_alias`/$&\nif test -z "$host"; then host=\$host_alias; fi/;
+ s,/bin/sh(?![/\w]),sh,g;
+ print;
+}
+
+__END__
+
+Changes: 98/11 : support check for executables in ncurses.
-# $Id: dist.mk,v 1.82 1998/02/28 23:10:59 tom Exp $
+# $Id: dist.mk,v 1.172 1999/10/23 12:29:39 tom Exp $
# Makefile for creating ncurses distributions.
#
# This only needs to be used directly as a makefile by developers, but
SHELL = /bin/sh
# These define the major/minor/patch versions of ncurses.
-NCURSES_MAJOR = 4
-NCURSES_MINOR = 2
-NCURSES_PATCH = 980228
+NCURSES_MAJOR = 5
+NCURSES_MINOR = 0
+NCURSES_PATCH = 19991023
# We don't append the patch to the version, since this only applies to releases
VERSION = $(NCURSES_MAJOR).$(NCURSES_MINOR)
-# $Id: Makefile.in,v 1.24 1998/02/11 12:13:44 tom Exp $
+# $Id: Makefile.in,v 1.25 1998/04/04 00:49:55 tom Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
LINK = $(CC)
LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
-SHLIB_LIST = -lncurses @SHLIB_LIST@
+SHLIB_DIRS = -L../lib -L$(libdir)
+SHLIB_LIST = $(SHLIB_DIRS) -lncurses @SHLIB_LIST@
+
MK_SHARED_LIB = @MK_SHARED_LIB@
+
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
Juergen Pfeifer
-eMail: Juergen.Pfeifer@T-Online.de
+eMail: juergen.pfeifer@gmx.net
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_arg.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_arg.c,v 1.4 1999/05/16 17:16:04 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_attr.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_attr.c,v 1.4 1999/05/16 17:16:30 juergen Exp $")
/*----------------------------------------------------------------------------
Field-Attribute manipulation routines
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_current.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_current.c,v 1.4 1999/05/16 17:16:46 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_def.c,v 1.10 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: fld_def.c,v 1.12 1999/05/16 17:37:48 juergen Exp $")
/* this can't be readonly */
static FIELD default_field = {
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_dup.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_dup.c,v 1.4 1999/05/16 17:17:08 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_ftchoice.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_ftchoice.c,v 1.4 1999/05/16 17:17:21 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_ftlink.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_ftlink.c,v 1.4 1999/05/16 17:17:33 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_info.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_info.c,v 1.4 1999/05/16 17:17:52 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_just.c,v 1.3 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_just.c,v 1.5 1999/05/16 17:18:06 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_link.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_link.c,v 1.4 1999/05/16 17:18:18 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_max.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_max.c,v 1.4 1999/05/16 17:18:34 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_move.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_move.c,v 1.4 1999/05/16 17:38:51 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_newftyp.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_newftyp.c,v 1.5 1999/05/16 17:18:54 juergen Exp $")
static FIELDTYPE const default_fieldtype = {
0, /* status */
{
FIELDTYPE *nftyp = (FIELDTYPE *)0;
- if ( (field_check) && (char_check) )
+ if ( (field_check) || (char_check) )
{
nftyp = (FIELDTYPE *)malloc(sizeof(FIELDTYPE));
if (nftyp)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_opts.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_opts.c,v 1.6 1999/05/16 17:19:06 juergen Exp $")
/*----------------------------------------------------------------------------
Field-Options manipulation routines
int set_field_opts(FIELD * field, Field_Options opts)
{
int res = E_BAD_ARGUMENT;
+ opts &= ALL_FIELD_OPTS;
if (!(opts & ~ALL_FIELD_OPTS))
res = _nc_Synchronize_Options( Normalize_Field(field), opts );
RETURN(res);
{
int res = E_BAD_ARGUMENT;
+ opts &= ALL_FIELD_OPTS;
if (!(opts & ~ALL_FIELD_OPTS))
{
Normalize_Field( field );
{
int res = E_BAD_ARGUMENT;
+ opts &= ALL_FIELD_OPTS;
if (!(opts & ~ALL_FIELD_OPTS))
{
Normalize_Field( field );
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_pad.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_pad.c,v 1.4 1999/05/16 17:38:58 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_page.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: fld_page.c,v 1.4 1999/05/16 17:19:37 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_stat.c,v 1.4 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: fld_stat.c,v 1.6 1999/05/16 17:19:48 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_type.c,v 1.7 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: fld_type.c,v 1.9 1999/05/16 17:19:59 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fld_user.c,v 1.6 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: fld_user.c,v 1.8 1999/05/16 17:20:09 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#ifndef FORM_H
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "mf_common.h"
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_cursor.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: frm_cursor.c,v 1.4 1999/05/16 17:20:19 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_data.c,v 1.4 1998/02/11 12:13:42 tom Exp $")
+MODULE_ID("$Id: frm_data.c,v 1.6 1999/05/16 17:20:29 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_def.c,v 1.7 1998/02/11 12:13:42 tom Exp $")
+MODULE_ID("$Id: frm_def.c,v 1.9 1999/05/16 17:20:43 juergen Exp $")
/* this can't be readonly */
static FORM default_form = {
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_driver.c,v 1.31 1998/02/11 12:13:45 tom Exp $")
+MODULE_ID("$Id: frm_driver.c,v 1.35 1999/05/16 17:20:52 juergen Exp $")
/*----------------------------------------------------------------------------
This is the core module of the form library. It contains the majority
if (field->opts & O_VISIBLE)
Set_Field_Window_Attributes(field,win);
else
- wattr_set(win,wattr_get(fwin));
+ wattrset(win,getattrs(fwin));
werase(win);
}
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_hook.c,v 1.6 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: frm_hook.c,v 1.8 1999/05/16 17:21:04 juergen Exp $")
/* "Template" macro to generate function to set application specific hook */
#define GEN_HOOK_SET_FUNCTION( typ, name ) \
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_opts.c,v 1.4 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: frm_opts.c,v 1.8 1999/05/16 17:38:05 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
+--------------------------------------------------------------------------*/
int set_form_opts(FORM * form, Form_Options opts)
{
+ opts &= ALL_FORM_OPTS;
if (opts & ~ALL_FORM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
+--------------------------------------------------------------------------*/
int form_opts_on(FORM * form, Form_Options opts)
{
+ opts &= ALL_FORM_OPTS;
if (opts & ~ALL_FORM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
+--------------------------------------------------------------------------*/
int form_opts_off(FORM * form, Form_Options opts)
{
+ opts &= ALL_FORM_OPTS;
if (opts & ~ALL_FORM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_page.c,v 1.3 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: frm_page.c,v 1.5 1999/05/16 17:21:26 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_post.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: frm_post.c,v 1.4 1999/05/16 17:21:39 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "form.priv.h"
-MODULE_ID("$Id: frm_req_name.c,v 1.5 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: frm_req_name.c,v 1.7 1999/05/16 17:21:53 juergen Exp $")
static const char *request_names[ MAX_FORM_COMMAND - MIN_FORM_COMMAND + 1 ] = {
"NEXT_PAGE" ,
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_scale.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: frm_scale.c,v 1.4 1999/05/16 17:22:02 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_sub.c,v 1.2 1998/02/11 12:13:44 tom Exp $")
+MODULE_ID("$Id: frm_sub.c,v 1.4 1999/05/16 17:22:11 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_user.c,v 1.6 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: frm_user.c,v 1.8 1999/05/16 17:22:21 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: frm_win.c,v 1.6 1998/02/11 12:13:43 tom Exp $")
+MODULE_ID("$Id: frm_win.c,v 1.8 1999/05/16 17:22:32 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnform
*/
/***************************************************************************
* *
-* Author : Juergen Pfeifer, Juergen.Pfeifer@T-Online.de *
+* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_alnum.c,v 1.7 1997/10/18 19:33:55 tom Exp $")
+MODULE_ID("$Id: fty_alnum.c,v 1.9 1999/05/16 17:22:49 juergen Exp $")
typedef struct {
int width;
*/
/***************************************************************************
* *
-* Author : Juergen Pfeifer, Juergen.Pfeifer@T-Online.de *
+* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_alpha.c,v 1.7 1997/10/18 19:33:38 tom Exp $")
+MODULE_ID("$Id: fty_alpha.c,v 1.9 1999/05/16 17:22:58 juergen Exp $")
typedef struct {
int width;
*/
/***************************************************************************
* *
-* Author : Juergen Pfeifer, Juergen.Pfeifer@T-Online.de *
+* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_enum.c,v 1.8 1997/10/18 19:33:20 tom Exp $")
+MODULE_ID("$Id: fty_enum.c,v 1.10 1999/05/16 17:23:14 juergen Exp $")
typedef struct {
char **kwds;
*/
/***************************************************************************
* *
-* Author : Juergen Pfeifer, Juergen.Pfeifer@T-Online.de *
+* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_int.c,v 1.8 1997/10/18 19:32:50 tom Exp $")
+MODULE_ID("$Id: fty_int.c,v 1.10 1999/05/16 17:23:22 juergen Exp $")
typedef struct {
int precision;
*/
/***************************************************************************
* *
-* Author : Juergen Pfeifer, Juergen.Pfeifer@T-Online.de *
+* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_num.c,v 1.11 1997/10/18 19:32:58 tom Exp $")
+MODULE_ID("$Id: fty_num.c,v 1.13 1999/05/16 17:23:30 juergen Exp $")
#if HAVE_LOCALE_H
#include <locale.h>
*/
/***************************************************************************
* *
-* Author : Juergen Pfeifer, Juergen.Pfeifer@T-Online.de *
+* Author : Juergen Pfeifer, juergen.pfeifer@gmx.net *
* *
***************************************************************************/
#include "form.priv.h"
-MODULE_ID("$Id: fty_regex.c,v 1.11 1997/10/18 19:32:35 tom Exp $")
+MODULE_ID("$Id: fty_regex.c,v 1.14 1999/05/16 17:23:38 juergen Exp $")
#if HAVE_REGEX_H_FUNCS /* We prefer POSIX regex */
#include <regex.h>
#endif
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static void *Make_RegularExpression_Type(va_list * ap)
-|
+|
| Description : Allocate structure for regex type argument.
|
| Return Values : Pointer to argument structure or NULL on error
RegExp_Arg *pArg;
pArg = (RegExp_Arg *)malloc(sizeof(RegExp_Arg));
-
+
if (pArg)
{
int blen = RX_INCREMENT;
{
#if HAVE_REGEXP_H_FUNCS
char *last_pos = compile (rx, buf, &buf[blen], '\0');
-#else
- char *last_pos = compile (rx, buf, &buf[blen], '\0');
+#else /* HAVE_REGEXPR_H_FUNCS */
+ char *last_pos = compile (rx, buf, &buf[blen]);
#endif
if (reg_errno)
{
if (reg_errno==50)
blen += RX_INCREMENT;
else
- {
+ {
free(pArg);
pArg = NULL;
break;
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static void *Copy_RegularExpression_Type(
| const void * argp)
-|
-| Description : Copy structure for regex type argument.
+|
+| Description : Copy structure for regex type argument.
|
| Return Values : Pointer to argument structure or NULL on error.
+--------------------------------------------------------------------------*/
{
#if (HAVE_REGEX_H_FUNCS | HAVE_REGEXP_H_FUNCS | HAVE_REGEXPR_H_FUNCS)
const RegExp_Arg *ap = (const RegExp_Arg *)argp;
- const RegExp_Arg *result = (const RegExp_Arg *)0;
-
+ const RegExp_Arg *result = (const RegExp_Arg *)0;
+
if (ap)
{
*(ap->refCount) += 1;
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static void Free_RegularExpression_Type(void * argp)
-|
+|
| Description : Free structure for regex type argument.
|
| Return Values : -
}
/*---------------------------------------------------------------------------
-| Facility : libnform
+| Facility : libnform
| Function : static bool Check_RegularExpression_Field(
| FIELD * field,
| const void * argp)
-|
+|
| Description : Validate buffer content to be a valid regular expression
|
| Return Values : TRUE - field is valid
const FIELD *field)
{ return(*(void **)0); }
-/* ./frm_adabind.c */
-
-#undef _nc_ada_normalize_field_opts
-void _nc_ada_normalize_field_opts(
- int *opt)
- { /* void */ }
-
-#undef _nc_ada_normalize_form_opts
-void _nc_ada_normalize_form_opts(
- int *opt)
- { /* void */ }
-
-#undef _nc_ada_getvarg
-void *_nc_ada_getvarg(
- va_list *ap)
- { return(*(void **)0); }
-
-#undef _nc_get_field
-FIELD *_nc_get_field(
- const FORM *frm,
- int idx)
- { return(*(FIELD **)0); }
-
/* ./frm_cursor.c */
#undef pos_form_cursor
-# $Id: modules,v 1.12 1998/02/11 12:13:44 tom Exp $
+# $Id: modules,v 1.13 1999/02/19 00:27:47 juergen Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
fld_stat lib $(srcdir) $(FORM_PRIV_H)
fld_type lib $(srcdir) $(FORM_PRIV_H)
fld_user lib $(srcdir) $(FORM_PRIV_H)
-frm_adabind lib $(srcdir) $(FORM_PRIV_H)
frm_cursor lib $(srcdir) $(FORM_PRIV_H)
frm_data lib $(srcdir) $(FORM_PRIV_H)
frm_def lib $(srcdir) $(FORM_PRIV_H)
# Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995
# and: Eric S. Raymond <esr@snark.thyrsus.com>
#
-# $Id: Caps,v 1.16 1998/02/11 12:13:45 tom Exp $
+# $Id: Caps,v 1.24 1999/01/17 02:01:44 tom Exp $
#
# This is the master termcap/terminfo capability table.
#
erase_overstrike eo bool eo YBCG- can erase overstrikes with a blank
generic_type gn bool gn YB-G- generic line type
hard_copy hc bool hc YBCG- hardcopy terminal
-has_meta_key km bool km YB-GE Has a meta key, sets msb high
+has_meta_key km bool km YB-GE Has a meta key (shift, sets parity bit)
has_status_line hs bool hs YB-G- has extra status line
insert_null_glitch in bool in YBCGE insert mode distinguishes nulls
memory_above da bool da YBCG- display may be retained above the screen
non_dest_scroll_region ndscr bool ND ----- scrolling region is non-destructive
can_change ccc bool cc ----- terminal can re-define existing colors
back_color_erase bce bool ut ----- screen erased with background color
-hue_lightness_saturation hls bool hl ----- terminal uses only HLS color notation (tektronix)
+hue_lightness_saturation hls bool hl ----- terminal uses only HLS color notation (Tektronix)
col_addr_glitch xhpa bool YA ----- only positive motion for hpa/mhpa caps
cr_cancels_micro_mode crxm bool YB ----- using cr turns off micro mode
has_print_wheel daisy bool YC ----- printer needs operator to change character set
#%lw25 lw6 lw2 lw20.
#%\fBVariable Cap- TCap Description\fR
#%\fBNumeric name Code\fR
-columns cols num co YBCGE number of columns in aline
+columns cols num co YBCGE number of columns in a line
init_tabs it num it YB-G- tabs initially every # spaces
lines lines num li YBCGE number of lines on screen or page
-lines_of_memory lm num lm YB-G- lines of memory if > line. 0 => varies
-magic_cookie_glitch xmc num sg YBCGE number of blank chars left by smso or rmso
+lines_of_memory lm num lm YB-G- lines of memory if > line. 0 means varies
+magic_cookie_glitch xmc num sg YBCGE number of blank characters left by smso or rmso
padding_baud_rate pb num pb YB-GE lowest baud rate where padding needed
virtual_terminal vt num vt YB--- virtual terminal number (CB/unix)
-width_status_line wsl num ws YB-G- columns in status line
+width_status_line wsl num ws YB-G- number of columns in status line
num_labels nlab num Nl ----- number of labels on screen
label_height lh num lh ----- rows in each label
label_width lw num lw ----- columns in each label
max_attributes ma num ma YBC-- maximum combined attributes terminal can handle
-maximum_windows wnum num MW ----- maxumum number of defineable windows
+maximum_windows wnum num MW ----- maximum number of defineable windows
# These came in with SVr4's color support
-max_colors colors num Co ----- maximum numbers of colors on screen
+max_colors colors num Co ----- maximum number of colors on screen
max_pairs pairs num pa ----- maximum number of color-pairs on the screen
no_color_video ncv num NC ----- video attributes that can't be used with colors
#%.TE
dot_horz_spacing spinh num Yc ----- spacing of dots horizontally in dots per inch
max_micro_address maddr num Yd ----- maximum value in micro_..._address
max_micro_jump mjump num Ye ----- maximum value in parm_..._micro
-micro_char_size mcs num Yf ----- character size when in micro mode
-micro_line_size mls num Yg ----- line size when in micro mode
+micro_col_size mcs num Yf ----- character step size when in micro mode
+micro_line_size mls num Yg ----- line step size when in micro mode
number_of_pins npins num Yh ----- numbers of pins in print-head
output_res_char orc num Yi ----- horizontal resolution in units per line
output_res_line orl num Yj ----- vertical resolution in units per line
output_res_horz_inch orhi num Yk ----- horizontal resolution in units per inch
output_res_vert_inch orvi num Yl ----- vertical resolution in units per inch
-print_rate cps num Ym ----- print rate in chars per second
+print_rate cps num Ym ----- print rate in characters per second
wide_char_size widcs num Yn ----- character step size when in double wide mode
buttons btns num BT ----- number of buttons on mouse
-bit_image_entwining bitwin num Yo ----- number of passed for each bit-image row
+bit_image_entwining bitwin num Yo ----- number of passes for each bit-image row
bit_image_type bitype num Yp ----- type of bit-image device
#%.TE
#%.ad
back_tab cbt str bt YBCGE back tab (P)
bell bel str bl YB-GE audible signal (bell) (P)
carriage_return cr str cr YBCGE carriage return (P*) (P*)
-change_scroll_region csr str cs YBCGE change region to line #1 to line #2 (P) (P)
+change_scroll_region csr str cs YBCGE change region to line #1 to line #2 (P)
clear_all_tabs tbc str ct YB-G- clear all tab stops (P)
clear_screen clear str cl YBCGE clear screen and home cursor (P*)
clr_eol el str ce YBCGE clear to end of line (P)
cursor_left cub1 str le YBCGE move left one space
cursor_mem_address mrcup str CM YB-G- memory relative cursor addressing
cursor_normal cnorm str ve YBCGE make cursor appear normal (undo civis/cvvis)
-cursor_right cuf1 str nd YBCGE move right one space
+cursor_right cuf1 str nd YBCGE non-destructive space (move right one space)
cursor_to_ll ll str ll YBCGE last line, first column (if no cup)
cursor_up cuu1 str up YBCGE up one line
cursor_visible cvvis str vs YBCGE make cursor very visible
key_f5 kf5 str k5 YBCGE F5 function key
key_f6 kf6 str k6 YBCGE F6 function key
key_f7 kf7 str k7 YBCGE F7 function key
-key_f8 kf8 str k8 YBCGE F8 fucntion key
+key_f8 kf8 str k8 YBCGE F8 function key
key_f9 kf9 str k9 YBCGE F9 function key
key_home khome str kh YBCGE home key
key_ic kich1 str kI YB-GE insert-character key
key_il kil1 str kA -B-G-* insert-line key
key_left kcub1 str kl YBCGE left-arrow key
-key_ll kll str kH YB-G- last-line key
+key_ll kll str kH YB-G- lower-left key (home down)
key_npage knp str kN YB-GE next-page key
-key_ppage kpp str kP YB-GE prev-page key
+key_ppage kpp str kP YB-GE previous-page key
key_right kcuf1 str kr YBCGE right-arrow key
key_sf kind str kF -B-G-* scroll-forward key
key_sr kri str kR -B-G-* scroll-backward key
lab_f2 lf2 str l2 -B-G-* label on function key f2 if not f2
lab_f3 lf3 str l3 -B-G-* label on function key f3 if not f3
lab_f4 lf4 str l4 -B-G-* label on function key f4 if not f4
-lab_f5 lf5 str l5 -B-G-* lable on function key f5 if not f5
+lab_f5 lf5 str l5 -B-G-* label on function key f5 if not f5
lab_f6 lf6 str l6 -B-G-* label on function key f6 if not f6
lab_f7 lf7 str l7 -B-G-* label on function key f7 if not f7
lab_f8 lf8 str l8 -B-G-* label on function key f8 if not f8
meta_on smm str mm YB-G-* turn on meta mode (8th-bit on)
newline nel str nw YB-G-* newline (behave like cr followed by lf)
pad_char pad str pc YBCGE padding char (instead of null)
-parm_dch dch str DC YB-GE delete #1 chars (P*)
+parm_dch dch str DC YB-GE delete #1 characters (P*)
parm_delete_line dl str DL YBCGE delete #1 lines (P*)
parm_down_cursor cud str DO YBCGE down #1 lines (P*)
-parm_ich ich str IC YB-GE insert #1 chars (P*)
+parm_ich ich str IC YB-GE insert #1 characters (P*)
parm_index indn str SF YBCG- scroll forward #1 lines (P)
parm_insert_line il str AL YBCGE insert #1 lines (P*)
-parm_left_cursor cub str LE YBCGE move #1 chars to the left (P)
-parm_right_cursor cuf str RI YBCGE move #1 chars to the right (P*)
+parm_left_cursor cub str LE YBCGE move #1 characters to the left (P)
+parm_right_cursor cuf str RI YBCGE move #1 characters to the right (P*)
parm_rindex rin str SR YBCG- scroll back #1 lines (P)
parm_up_cursor cuu str UP YBCGE up #1 lines (P*)
pkey_key pfkey str pk -B--- program function key #1 to type string #2
reset_2string rs2 str r2 -B--- reset string
reset_3string rs3 str r3 -B--- reset string
reset_file rf str rf -B--- name of reset file
-restore_cursor rc str rc YBCG- restore cursor to last position of sc
+restore_cursor rc str rc YBCG- restore cursor to position of last save_cursor
row_address vpa str cv -B-GE** vertical position #1 absolute (P)
save_cursor sc str sc YBCG- save current cursor position (P)
scroll_forward ind str sf YBCGE scroll text up (P)
# SVr4 up to this point, but has a different set afterwards.
#
char_padding rmp str rP ----- like ip but when in insert mode
-acs_chars acsc str ac ----- graphics charset pairs - def=vt100
+acs_chars acsc str ac ----- graphics charset pairs, based on vt100
plab_norm pln str pn ----- program label #1 to show string #2
key_btab kcbt str kB ----- back-tab key
enter_xon_mode smxon str SX ----- turn on xon/xoff handshaking
key_save ksav str &6 ----- save key
key_suspend kspd str &7 ----- suspend key
key_undo kund str &8 ----- undo key
-key_sbeg kBEG str &9 ----- shifted key
-key_scancel kCAN str &0 ----- shifted key
-key_scommand kCMD str *1 ----- shifted key
-key_scopy kCPY str *2 ----- shifted key
-key_screate kCRT str *3 ----- shifted key
-key_sdc kDC str *4 ----- shifted key
-key_sdl kDL str *5 ----- shifted key
+key_sbeg kBEG str &9 ----- shifted begin key
+key_scancel kCAN str &0 ----- shifted cancel key
+key_scommand kCMD str *1 ----- shifted command key
+key_scopy kCPY str *2 ----- shifted copy key
+key_screate kCRT str *3 ----- shifted create key
+key_sdc kDC str *4 ----- shifted delete-character key
+key_sdl kDL str *5 ----- shifted delete-line key
key_select kslt str *6 ----- select key
-key_send kEND str *7 ----- shifted key
-key_seol kEOL str *8 ----- shifted key
-key_sexit kEXT str *9 ----- shifted key
-key_sfind kFND str *0 ----- shifted key
-key_shelp kHLP str #1 ----- shifted key
-key_shome kHOM str #2 ----- shifted key
-key_sic kIC str #3 ----- shifted key
-key_sleft kLFT str #4 ----- shifted key
-key_smessage kMSG str %a ----- shifted key
-key_smove kMOV str %b ----- shifted key
-key_snext kNXT str %c ----- shifted key
-key_soptions kOPT str %d ----- shifted key
-key_sprevious kPRV str %e ----- shifted key
-key_sprint kPRT str %f ----- shifted key
-key_sredo kRDO str %g ----- shifted key
-key_sreplace kRPL str %h ----- shifted key
-key_sright kRIT str %i ----- shifted key
-key_srsume kRES str %j ----- shifted key
-key_ssave kSAV str !1 ----- shifted key
-key_ssuspend kSPD str !2 ----- shifted key
-key_sundo kUND str !3 ----- shifted key
+key_send kEND str *7 ----- shifted end key
+key_seol kEOL str *8 ----- shifted clear-to-end-of-line key
+key_sexit kEXT str *9 ----- shifted exit key
+key_sfind kFND str *0 ----- shifted find key
+key_shelp kHLP str #1 ----- shifted help key
+key_shome kHOM str #2 ----- shifted home key
+key_sic kIC str #3 ----- shifted insert-character key
+key_sleft kLFT str #4 ----- shifted left-arrow key
+key_smessage kMSG str %a ----- shifted message key
+key_smove kMOV str %b ----- shifted move key
+key_snext kNXT str %c ----- shifted next key
+key_soptions kOPT str %d ----- shifted options key
+key_sprevious kPRV str %e ----- shifted previous key
+key_sprint kPRT str %f ----- shifted print key
+key_sredo kRDO str %g ----- shifted redo key
+key_sreplace kRPL str %h ----- shifted replace key
+key_sright kRIT str %i ----- shifted right-arrow key
+key_srsume kRES str %j ----- shifted resume key
+key_ssave kSAV str !1 ----- shifted save key
+key_ssuspend kSPD str !2 ----- shifted suspend key
+key_sundo kUND str !3 ----- shifted undo key
req_for_input rfi str RF ----- send next input char (for ptys)
key_f11 kf11 str F1 ----E F11 function key
key_f12 kf12 str F2 ----E F12 function key
key_f63 kf63 str Fr ----E F63 function key
clr_bol el1 str cb ----- Clear to beginning of line
clear_margins mgc str MC ----- clear right and left soft margins
-set_left_margin smgl str ML ----- set left soft margin
-set_right_margin smgr str MR ----- set right soft margin
+set_left_margin smgl str ML ----- set left soft margin at current column
+set_right_margin smgr str MR ----- set right soft margin at current column
label_format fln str Lf ----- label format
set_clock sclk str SC ----- set clock, #1 hrs #2 mins #3 secs
display_clock dclk str DK ----- display clock at (#1,#2)
remove_clock rmclk str RC ----- remove clock
-create_window cwin str CW ----- define a window #1 from #2, #3 to #4, #5
+create_window cwin str CW ----- define a window #1 from #2,#3 to #4,#5
goto_window wingo str WG ----- go to window #1
hangup hup str HU ----- hang-up phone
dial_phone dial str DI ----- dial number #1
quick_dial qdial str QD ----- dial number #1 without checking
tone tone str TO ----- select touch tone dialing
-pulse pulse str PU ----- select pulse dialling
+pulse pulse str PU ----- select pulse dialing
flash_hook hook str fh ----- flash switch hook
fixed_pause pause str PA ----- pause for 2-3 seconds
wait_tone wait str WA ----- wait for dial-tone
enter_leftward_mode slm str ZI ----- Start leftward carriage motion
enter_micro_mode smicm str ZJ ----- Start micro-motion mode
enter_near_letter_quality snlq str ZK ----- Enter NLQ mode
-enter_normal_quality snrmq str ZL ----- Wnter normal-quality mode
+enter_normal_quality snrmq str ZL ----- Enter normal-quality mode
enter_shadow_mode sshm str ZM ----- Enter shadow-print mode
enter_subscript_mode ssubm str ZN ----- Enter subscript mode
enter_superscript_mode ssupm str ZO ----- Enter superscript mode
set_right_margin_parm smgrp str Zn ----- Set right margin at column #1
set_top_margin smgt str Zo ----- Set top margin at current line
set_top_margin_parm smgtp str Zp ----- Set top (bottom) margin at row #1 (#2)
-start_bit_image sbim str Zq ----- Start printing bit image braphics
+start_bit_image sbim str Zq ----- Start printing bit image graphics
start_char_set_def scsd str Zr ----- Start character set definition
stop_bit_image rbim str Zs ----- Stop printing bit image graphics
-stop_char_set_def rcsd str Zt ----- End definition of character aet
+stop_char_set_def rcsd str Zt ----- End definition of character set
subscript_characters subcs str Zu ----- List of subscriptable characters
superscript_characters supcs str Zv ----- List of superscriptable characters
-these_cause_cr docr str Zw ----- Printing any of these chars causes CR
+these_cause_cr docr str Zw ----- Printing any of these characters causes CR
zero_motion zerom str Zx ----- No motion for subsequent character
#%.TE
#%.ad
#%
#%The following string capabilities are present in the SVr4.0 term structure,
-#%but are not documented in the man page.
+#%but were originally not documented in the man page.
#%
#%.na
#%.TS H
mouse_info minfo str Mi ----- Mouse status information
req_mouse_pos reqmp str RQ ----- Request mouse position
get_mouse getm str Gm ----- Curses should get button events
-set_a_foreground setaf str AF ----- Set ANSI foreground color
-set_a_background setab str AB ----- Set ANSI background color
+set_a_foreground setaf str AF ----- Set foreground color using ANSI escape
+set_a_background setab str AB ----- Set background color using ANSI escape
pkey_plab pfxl str xl ----- Program function key #1 to type string #2 and show string #3
device_type devt str dv ----- Indicate language/codeset support
code_set_init csin str ci ----- Init sequence for multiple codesets
#%.ad
#%
#%.in .8i
-#%The XSI Curses standard added these. They are probably in some post-4.1
-#%version of System V curses as well, but because XSI Curses lists them in
-#%strict alphabetical order we don't know if this is the right binary order.
+#%The XSI Curses standard added these. They are some post-4.1
+#%versions of System V curses, e.g., Solaris 2.5 and IRIX 6.x.
#%The \fBncurses\fR termcap names for them are invented; according to the
#%XSI Curses standard, they have no termcap names. If your compiled terminfo
#%entries use these, they may not be binary-compatible with System V terminfo
enter_right_hl_mode erhlm str Xr ----- Enter right highlight mode
enter_top_hl_mode ethlm str Xt ----- Enter top highlight mode
enter_vertical_hl_mode evhlm str Xv ----- Enter vertical highlight mode
+set_a_attributes sgr1 str sA ----- Define second set of video attributes #1-#6
+set_pglen_inch slength str sL ----- YI Set page length to #1 hundredth of an inch
#%.TE
#%.ad
#
#
# This group of codes is not marked obsolete in 4.4BSD, but have no direct
# terminfo equivalents. The rs capability is specially translated to terminfo
-# r1, and vice versa, if an entry does not already have an r1. Similarly,
+# r2, and vice versa, if an entry does not already have an r2. Similarly,
# i2 is translated to r3 if there is no r3 (because SV terminfo maps is to i2).
# The ug capability is thrown away, but assumed to be whatever sg is if the
# latter is nonzero and we're dumping in termcap format.
# University of Waterloo termcap extensions (as described in mytinfo).
# The `xl' termcap file clashes with a terminfo name; this ambiguity cannot
# be resolved by a type check. The descriptions are guesses from what was
-# in the nytinfo tables.
+# in the mytinfo tables.
#
# key_interrupt_char OTki str ki ----- string set by interrupt key (?)
# key_kill_char OTkk str kk ----- string set by kill key (?)
#
# scroll_left OTsl1 str Sl ----- scroll screen leftward
# scroll_right OTsr1 str Sr ----- scroll screen rightward
-# parm_scroll_left OTsl str SL ----- scroll screen leftward #1 chars
-# parm_scroll_right OTsr str SR ----- scroll screen rightward #1 chars
+# parm_scroll_left OTsl str SL ----- scroll screen leftward #1 characters
+# parm_scroll_right OTsr str SR ----- scroll screen rightward #1 characters
#
# The mytinfo capabilities end here.
#
# These extensions follow ptr_non (replacing everything after it) in IBM
# terminfo files.
#
-# The places in the box[12] capabilities correspond to acsc chars, here is
+# The places in the box[12] capabilities correspond to acsc characters, here is
# the mapping:
#
# box1[0] = ACS_ULCORNER
#
# The box2 characters are the double-line versions of these forms graphics.
#
-box_chars_1 box1 str bx ----K box chars primary set
-#box_chars_2 box2 str by ----K box chars secondary set
+box_chars_1 box1 str bx ----K box characters primary set
+#box_chars_2 box2 str by ----K box characters secondary set
#box_attr_1 batt1 str Bx ----K attributes for box1
#box_attr_2 batt2 str By ----K attributes for box2
#color_bg_0 colb0 str d0 ----K background color 0
# WL key_word_left
# WR key_word_right
#
-# If you know what any of the questionmarked ones mean, please tell us.
+# If you know what any of the question-marked ones mean, please tell us.
#
#--------------------------------- Terminfo aliases ------------------------
#
BEGIN {
- print "/****************************************************************************"
- print " * Copyright (c) 1998 Free Software Foundation, Inc. *"
- print " * *"
- print " * Permission is hereby granted, free of charge, to any person obtaining a *"
- print " * copy of this software and associated documentation files (the *"
- print " * "Software"), to deal in the Software without restriction, including *"
- print " * without limitation the rights to use, copy, modify, merge, publish, *"
- print " * distribute, distribute with modifications, sublicense, and/or sell *"
- print " * copies of the Software, and to permit persons to whom the Software is *"
- print " * furnished to do so, subject to the following conditions: *"
- print " * *"
- print " * The above copyright notice and this permission notice shall be included *"
- print " * in all copies or substantial portions of the Software. *"
- print " * *"
- print " * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS *"
- print " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *"
- print " * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *"
- print " * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *"
- print " * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *"
- print " * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *"
- print " * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *"
- print " * *"
- print " * Except as contained in this notice, the name(s) of the above copyright *"
- print " * holders shall not be used in advertising or otherwise to promote the *"
- print " * sale, use or other dealings in this Software without prior written *"
- print " * authorization. *"
- print " ****************************************************************************/"
- print ""
- print "/****************************************************************************/"
- print "/* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 */"
- print "/* and: Eric S. Raymond <esr@snark.thyrsus.com> */"
- print "/****************************************************************************/"
- print ""
- print "/* $Id: MKterm.h.awk.in,v 1.23 1998/02/11 12:13:46 tom Exp $ */"
- print ""
- print "/*"
- print "** term.h -- Definition of struct term"
- print "*/"
- print ""
- print "#ifndef _TERM_H"
- print "#define _TERM_H"
- print ""
- print "#undef NCURSES_VERSION"
- print "#define NCURSES_VERSION \"@NCURSES_MAJOR@.@NCURSES_MINOR@\""
- print ""
- print "#ifdef __cplusplus"
- print "extern \"C\" {"
- print "#endif"
- print ""
- print "/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H"
- print " * and BROKEN_LINKER definition (based on the system for which this was configured)."
- print " */"
- print ""
- print "#ifndef HAVE_TERMIOS_H"
- print "#define HAVE_TERMIOS_H 1/*default*/"
- print "#endif"
- print ""
- print "#ifndef HAVE_TERMIO_H"
- print "#define HAVE_TERMIO_H 0/*default*/"
- print "#endif"
- print ""
- print "#ifndef HAVE_TCGETATTR"
- print "#define HAVE_TCGETATTR 1/*default*/"
- print "#endif"
- print ""
- print "#ifndef BROKEN_LINKER"
- print "#define BROKEN_LINKER 0/*default*/"
- print "#endif"
- print ""
- print "#ifndef NCURSES_CONST"
- print "#define NCURSES_CONST /* nothing */"
- print "#endif"
- print ""
- print "/* Assume Posix termio if we have the header and function */"
- print "#if HAVE_TERMIOS_H && HAVE_TCGETATTR"
- print "#ifndef TERMIOS"
- print "#define TERMIOS 1"
- print "#endif"
- print "#include <termios.h>"
- print "#define TTY struct termios"
- print ""
- print "#else /* !HAVE_TERMIOS_H */"
- print ""
- print "#if HAVE_TERMIO_H"
- print "#ifndef TERMIOS"
- print "#define TERMIOS 1"
- print "#endif"
- print "#include <termio.h>"
- print "#define TTY struct termio"
- print "#define TCSANOW TCSETA"
- print "#define TCSADRAIN TCSETAW"
- print "#define TCSAFLUSH TCSETAF"
- print "#define tcsetattr(fd, cmd, arg) ioctl(fd, cmd, arg)"
- print "#define tcgetattr(fd, arg) ioctl(fd, TCGETA, arg)"
- print "#define cfgetospeed(t) ((t)->c_cflag & CBAUD)"
- print "#define TCIFLUSH 0"
- print "#define TCOFLUSH 1"
- print "#define TCIOFLUSH 2"
- print "#define tcflush(fd, arg) ioctl(fd, TCFLSH, arg)"
- print ""
- print "#else /* !HAVE_TERMIO_H */"
- print ""
- print "#undef TERMIOS"
- print "#include <sgtty.h>"
- print "#include <sys/ioctl.h>"
- print "#define TTY struct sgttyb"
- print ""
- print "#endif /* HAVE_TERMIO_H */"
- print ""
- print "#endif /* HAVE_TERMIOS_H */"
- print ""
- print "#ifdef TERMIOS"
- print "#define GET_TTY(fd, buf) tcgetattr(fd, buf)"
- print "#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)"
- print "#else"
- print "#define GET_TTY(fd, buf) gtty(fd, buf)"
- print "#define SET_TTY(fd, buf) stty(fd, buf)"
- print "#endif"
- print ""
- print "extern char ttytype[];"
- print "#define NAMESIZE 256"
- print ""
- print "#define CUR cur_term->type."
- print ""
+ print "/****************************************************************************"
+ print " * Copyright (c) 1998 Free Software Foundation, Inc. *"
+ print " * *"
+ print " * Permission is hereby granted, free of charge, to any person obtaining a *"
+ print " * copy of this software and associated documentation files (the *"
+ print " * \"Software\"), to deal in the Software without restriction, including *"
+ print " * without limitation the rights to use, copy, modify, merge, publish, *"
+ print " * distribute, distribute with modifications, sublicense, and/or sell *"
+ print " * copies of the Software, and to permit persons to whom the Software is *"
+ print " * furnished to do so, subject to the following conditions: *"
+ print " * *"
+ print " * The above copyright notice and this permission notice shall be included *"
+ print " * in all copies or substantial portions of the Software. *"
+ print " * *"
+ print " * THE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS *"
+ print " * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF *"
+ print " * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. *"
+ print " * IN NO EVENT SHALL THE ABOVE COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, *"
+ print " * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR *"
+ print " * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR *"
+ print " * THE USE OR OTHER DEALINGS IN THE SOFTWARE. *"
+ print " * *"
+ print " * Except as contained in this notice, the name(s) of the above copyright *"
+ print " * holders shall not be used in advertising or otherwise to promote the *"
+ print " * sale, use or other dealings in this Software without prior written *"
+ print " * authorization. *"
+ print " ****************************************************************************/"
+ print ""
+ print "/****************************************************************************/"
+ print "/* Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 */"
+ print "/* and: Eric S. Raymond <esr@snark.thyrsus.com> */"
+ print "/****************************************************************************/"
+ print ""
+ print "/* $Id: MKterm.h.awk.in,v 1.36 1999/09/01 22:36:52 Peter.Wemm Exp $ */"
+ print ""
+ print "/*"
+ print "** term.h -- Definition of struct term"
+ print "*/"
+ print ""
+ print "#ifndef _NCU_TERM_H"
+ print "#define _NCU_TERM_H 1"
+ print ""
+ print "#undef NCURSES_VERSION"
+ print "#define NCURSES_VERSION \"@NCURSES_MAJOR@.@NCURSES_MINOR@\""
+ print ""
+ print "#ifdef __cplusplus"
+ print "extern \"C\" {"
+ print "#endif"
+ print ""
+ print "/* Make this file self-contained by providing defaults for the HAVE_TERMIO[S]_H"
+ print " * and BROKEN_LINKER definition (based on the system for which this was"
+ print " * configured)."
+ print " */"
+ print ""
+ print "#undef HAVE_TERMIOS_H"
+ print "#define HAVE_TERMIOS_H 1/*default*/"
+ print ""
+ print "#undef HAVE_TERMIO_H"
+ print "#define HAVE_TERMIO_H 0/*default*/"
+ print ""
+ print "#undef HAVE_TCGETATTR"
+ print "#define HAVE_TCGETATTR 1/*default*/"
+ print ""
+ print "#undef BROKEN_LINKER"
+ print "#define BROKEN_LINKER 0/*default*/"
+ print ""
+ print "#undef NCURSES_CONST"
+ print "#define NCURSES_CONST @NCURSES_CONST@"
+ print ""
+ print "#undef NCURSES_XNAMES"
+ print "#define NCURSES_XNAMES @NCURSES_XNAMES@"
+ print ""
+ print "/* We will use these symbols to hide differences between"
+ print " * termios/termio/sgttyb interfaces."
+ print " */"
+ print "#undef TTY"
+ print "#undef SET_TTY"
+ print "#undef GET_TTY"
+ print ""
+ print "/* Assume Posix termio if we have the header and function */"
+ print "#if HAVE_TERMIOS_H && HAVE_TCGETATTR"
+ print ""
+ print "#undef TERMIOS"
+ print "#define TERMIOS 1"
+ print ""
+ print "#include <termios.h>"
+ print "#define TTY struct termios"
+ print ""
+ print "#else /* !HAVE_TERMIOS_H */"
+ print ""
+ print "#if HAVE_TERMIO_H"
+ print ""
+ print "#undef TERMIOS"
+ print "#define TERMIOS 1"
+ print ""
+ print "#include <termio.h>"
+ print "#define TTY struct termio"
+ print ""
+ print "/* Add definitions to make termio look like termios."
+ print " * But ifdef it, since there are some implementations"
+ print " * that try to do this for us in a fake <termio.h>."
+ print " */"
+ print "#ifndef TCSANOW"
+ print "#define TCSANOW TCSETA"
+ print "#endif"
+ print "#ifndef TCSADRAIN"
+ print "#define TCSADRAIN TCSETAW"
+ print "#endif"
+ print "#ifndef TCSAFLUSH"
+ print "#define TCSAFLUSH TCSETAF"
+ print "#endif"
+ print "#ifndef tcsetattr"
+ print "#define tcsetattr(fd, cmd, arg) ioctl(fd, cmd, arg)"
+ print "#endif"
+ print "#ifndef tcgetattr"
+ print "#define tcgetattr(fd, arg) ioctl(fd, TCGETA, arg)"
+ print "#endif"
+ print "#ifndef cfgetospeed"
+ print "#define cfgetospeed(t) ((t)->c_cflag & CBAUD)"
+ print "#endif"
+ print "#ifndef TCIFLUSH "
+ print "#define TCIFLUSH 0"
+ print "#endif"
+ print "#ifndef TCOFLUSH "
+ print "#define TCOFLUSH 1"
+ print "#endif"
+ print "#ifndef TCIOFLUSH "
+ print "#define TCIOFLUSH 2"
+ print "#endif"
+ print "#ifndef tcflush"
+ print "#define tcflush(fd, arg) ioctl(fd, TCFLSH, arg)"
+ print "#endif"
+ print ""
+ print "#else /* !HAVE_TERMIO_H */"
+ print ""
+ print "#undef TERMIOS"
+ print "#include <sgtty.h>"
+ print "#include <sys/ioctl.h>"
+ print "#define TTY struct sgttyb"
+ print ""
+ print "#endif /* HAVE_TERMIO_H */"
+ print ""
+ print "#endif /* HAVE_TERMIOS_H */"
+ print ""
+ print "#ifdef TERMIOS"
+ print "#define GET_TTY(fd, buf) tcgetattr(fd, buf)"
+ print "#define SET_TTY(fd, buf) tcsetattr(fd, TCSADRAIN, buf)"
+ print "#else"
+ print "#define GET_TTY(fd, buf) gtty(fd, buf)"
+ print "#define SET_TTY(fd, buf) stty(fd, buf)"
+ print "#endif"
+ print ""
+ print "#define NAMESIZE 256"
+ print ""
+ print "#define CUR cur_term->type."
+ print ""
}
$2 == "%%-STOP-HERE-%%" {
print "/* older synonyms for some capabilities */"
print "#define beehive_glitch no_esc_ctlc"
print "#define teleray_glitch dest_tabs_magic_smso"
- print ""
- print "/* XSI synonyms */"
- print "#define micro_col_size micro_char_size"
+ print "#define micro_char_size micro_col_size"
print ""
print "#ifdef __INTERNAL_CAPS_VISIBLE"
}
print "#endif /* __INTERNAL_CAPS_VISIBLE */"
print ""
print ""
+ print "/*"
+ print " * Predefined terminfo array sizes"
+ print " */"
printf "#define BOOLCOUNT %d\n", BoolCount
printf "#define NUMCOUNT %d\n", NumberCount
printf "#define STRCOUNT %d\n", StringCount
print ""
- print "typedef struct termtype { /* in-core form of terminfo data */"
- print " char *term_names; /* str_table offset of term names */"
- print " char *str_table; /* pointer to string table */"
- print " char Booleans[BOOLCOUNT]; /* array of values */"
- print " short Numbers[NUMCOUNT]; /* array of values */"
- print " char *Strings[STRCOUNT]; /* array of string offsets */"
- print "} TERMTYPE;"
- print ""
- print "typedef struct term { /* describe an actual terminal */"
- print " TERMTYPE type; /* terminal type description */"
- print " short Filedes; /* file description being written to */"
- print " TTY Ottyb, /* original state of the terminal */"
- print " Nttyb; /* current state of the terminal */"
- print " int _baudrate; /* used to compute padding */"
- print "} TERMINAL;"
- print ""
- print "extern TERMINAL *cur_term;"
- print ""
- print ""
- print "#if BROKEN_LINKER"
- print "#define boolnames _nc_boolnames()"
- print "#define boolcodes _nc_boolcodes()"
- print "#define boolfnames _nc_boolfnames()"
- print "#define numnames _nc_numnames()"
- print "#define numcodes _nc_numcodes()"
- print "#define numfnames _nc_numfnames()"
- print "#define strnames _nc_strnames()"
- print "#define strcodes _nc_strcodes()"
- print "#define strfnames _nc_strfnames()"
- print ""
- print "extern NCURSES_CONST char * const *_nc_boolnames(void);"
- print "extern NCURSES_CONST char * const *_nc_boolcodes(void);"
- print "extern NCURSES_CONST char * const *_nc_boolfnames(void);"
- print "extern NCURSES_CONST char * const *_nc_numnames(void);"
- print "extern NCURSES_CONST char * const *_nc_numcodes(void);"
- print "extern NCURSES_CONST char * const *_nc_numfnames(void);"
- print "extern NCURSES_CONST char * const *_nc_strnames(void);"
- print "extern NCURSES_CONST char * const *_nc_strcodes(void);"
- print "extern NCURSES_CONST char * const *_nc_strfnames(void);"
- print ""
- print "#else"
- print ""
- print "extern NCURSES_CONST char *const boolnames[];"
- print "extern NCURSES_CONST char *const boolcodes[];"
- print "extern NCURSES_CONST char *const boolfnames[];"
- print "extern NCURSES_CONST char *const numnames[];"
- print "extern NCURSES_CONST char *const numcodes[];"
- print "extern NCURSES_CONST char *const numfnames[];"
- print "extern NCURSES_CONST char *const strnames[];"
- print "extern NCURSES_CONST char *const strcodes[];"
- print "extern NCURSES_CONST char *const strfnames[];"
- print ""
- print "#endif"
- print ""
- print "/* internals */"
- print "extern int _nc_set_curterm(TTY *buf);"
- print "extern int _nc_get_curterm(TTY *buf);"
- print "extern int _nc_read_entry(const char * const, char * const, TERMTYPE *const);"
- print "extern int _nc_read_file_entry(const char *const, TERMTYPE *);"
- print "extern char *_nc_first_name(const char *const);"
- print "extern int _nc_name_match(const char *const, const char *const, const char *const);"
- print "extern int _nc_read_termcap_entry(const char *const, TERMTYPE *const);"
- print "extern const TERMTYPE *_nc_fallback(const char *);"
+ print "typedef struct termtype { /* in-core form of terminfo data */"
+ print " char *term_names; /* str_table offset of term names */"
+ print " char *str_table; /* pointer to string table */"
+ print " char *Booleans; /* array of boolean values */"
+ print " short *Numbers; /* array of integer values */"
+ print " char **Strings; /* array of string offsets */"
+ print ""
+ print "#if NCURSES_XNAMES"
+ print " char *ext_str_table; /* pointer to extended string table */"
+ print " char **ext_Names; /* corresponding names */"
+ print ""
+ print " unsigned short num_Booleans;/* count total Booleans */"
+ print " unsigned short num_Numbers; /* count total Numbers */"
+ print " unsigned short num_Strings; /* count total Strings */"
+ print ""
+ print " unsigned short ext_Booleans;/* count extensions to Booleans */"
+ print " unsigned short ext_Numbers; /* count extensions to Numbers */"
+ print " unsigned short ext_Strings; /* count extensions to Strings */"
+ print "#endif /* NCURSES_XNAMES */"
+ print ""
+ print "} TERMTYPE;"
+ print ""
+ print "typedef struct term { /* describe an actual terminal */"
+ print " TERMTYPE type; /* terminal type description */"
+ print " short Filedes; /* file description being written to */"
+ print " TTY Ottyb, /* original state of the terminal */"
+ print " Nttyb; /* current state of the terminal */"
+ print " int _baudrate; /* used to compute padding */"
+ print "} TERMINAL;"
+ print ""
+ print "extern TERMINAL *cur_term;"
+ print ""
+ print "#if BROKEN_LINKER"
+ print "#define boolnames _nc_boolnames()"
+ print "#define boolcodes _nc_boolcodes()"
+ print "#define boolfnames _nc_boolfnames()"
+ print "#define numnames _nc_numnames()"
+ print "#define numcodes _nc_numcodes()"
+ print "#define numfnames _nc_numfnames()"
+ print "#define strnames _nc_strnames()"
+ print "#define strcodes _nc_strcodes()"
+ print "#define strfnames _nc_strfnames()"
+ print ""
+ print "extern NCURSES_CONST char * const *_nc_boolnames(void);"
+ print "extern NCURSES_CONST char * const *_nc_boolcodes(void);"
+ print "extern NCURSES_CONST char * const *_nc_boolfnames(void);"
+ print "extern NCURSES_CONST char * const *_nc_numnames(void);"
+ print "extern NCURSES_CONST char * const *_nc_numcodes(void);"
+ print "extern NCURSES_CONST char * const *_nc_numfnames(void);"
+ print "extern NCURSES_CONST char * const *_nc_strnames(void);"
+ print "extern NCURSES_CONST char * const *_nc_strcodes(void);"
+ print "extern NCURSES_CONST char * const *_nc_strfnames(void);"
+ print ""
+ print "#else"
+ print ""
+ print "extern NCURSES_CONST char *const boolnames[];"
+ print "extern NCURSES_CONST char *const boolcodes[];"
+ print "extern NCURSES_CONST char *const boolfnames[];"
+ print "extern NCURSES_CONST char *const numnames[];"
+ print "extern NCURSES_CONST char *const numcodes[];"
+ print "extern NCURSES_CONST char *const numfnames[];"
+ print "extern NCURSES_CONST char *const strnames[];"
+ print "extern NCURSES_CONST char *const strcodes[];"
+ print "extern NCURSES_CONST char *const strfnames[];"
+ print ""
+ print "#endif"
+ print ""
+ print "/* internals */"
+ print "extern int _nc_set_tty_mode(TTY *buf);"
+ print "extern int _nc_get_tty_mode(TTY *buf);"
+ print "extern int _nc_read_entry(const char * const, char * const, TERMTYPE *const);"
+ print "extern int _nc_read_file_entry(const char *const, TERMTYPE *);"
+ print "extern char *_nc_first_name(const char *const);"
+ print "extern int _nc_name_match(const char *const, const char *const, const char *const);"
+ print "extern int _nc_read_termcap_entry(const char *const, TERMTYPE *const);"
+ print "extern const TERMTYPE *_nc_fallback(const char *);"
+ print ""
+ print "/* entry points */"
+ print "extern TERMINAL *set_curterm(TERMINAL *);"
+ print "extern int del_curterm(TERMINAL *);"
+ print ""
+ print "/* miscellaneous entry points */"
+ print "extern int restartterm(NCURSES_CONST char *, int, int *);"
+ print "extern int setupterm(NCURSES_CONST char *,int,int *);"
+ print ""
+ print "/* terminfo entry points, also declared in curses.h */"
+ print "#if !defined(__NCURSES_H)"
+ print "extern char *tigetstr(NCURSES_CONST char *);"
+ print "extern char *tparm(NCURSES_CONST char *, ...);"
+ print "extern char ttytype[];"
+ print "extern int putp(const char *);"
+ print "extern int tigetflag(NCURSES_CONST char *);"
+ print "extern int tigetnum(NCURSES_CONST char *);"
+ print "#endif /* __NCURSES_H */"
print ""
- print "/* entry points */"
- print "extern TERMINAL *set_curterm(TERMINAL *);"
- print "extern int del_curterm(TERMINAL *);"
+ print "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
+ print "#if !defined(_NCU_TERMCAP_H)"
+ print "extern char *tgetstr(NCURSES_CONST char *, char **);"
+ print "extern char *tgoto(const char *, int, int);"
+ print "extern int tgetent(char *, const char *);"
+ print "extern int tgetflag(NCURSES_CONST char *);"
+ print "extern int tgetnum(NCURSES_CONST char *);"
+ print "extern int tputs(const char *, int, int (*)(int));"
+ print "#endif /* _NCU_TERMCAP_H */"
print ""
- print "/* miscellaneous entry points */"
- print "extern int putp(const char *);"
- print "extern int restartterm(const char *, int, int *);"
- print "extern int setupterm(const char *,int,int *);"
- print "extern int tputs(const char *, int, int (*)(int));"
+ print "#ifdef __cplusplus"
+ print "}"
+ print "#endif"
print ""
- print "/* terminfo entry points */"
- print "extern int tigetflag(const char *);"
- print "extern int tigetnum(const char *);"
- print "extern char *tigetstr(const char *);"
- print "extern char *tparm(const char *, ...);"
- print ""
- print "/* termcap database emulation (XPG4 uses const only for 2nd param of tgetent) */"
- print "extern int tgetent(char *, const char *);"
- print "extern int tgetflag(const char *);"
- print "extern int tgetnum(const char *);"
- print "extern char *tgetstr(const char *, char **);"
- print "extern char *tgoto(const char *, int, int);"
- print ""
- print "#ifdef __cplusplus"
- print "}"
- print "#endif"
- print ""
- print "#endif /* TERM_H */"
+ print "#endif /* _NCU_TERM_H */"
}
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
-/* $Id: capdefaults.c,v 1.7 1998/02/11 12:13:45 tom Exp $ */
+/* $Id: capdefaults.c,v 1.8 1998/07/04 22:31:04 tom Exp $ */
/*
* Compute obsolete capabilities. The reason this is an include file
if (!VALID_STRING(termcap_init2) && VALID_STRING(init_3string))
{
termcap_init2 = init_3string;
- init_3string = (char *)NULL;
+ init_3string = (char *)0;
}
if (VALID_STRING(reset_1string)
&& !VALID_STRING(reset_2string)
&& VALID_STRING(reset_3string))
{
- termcap_reset = reset_1string;
- reset_1string = (char *)NULL;
+ termcap_reset = reset_2string;
+ reset_2string = (char *)0;
}
#if USE_XMC_SUPPORT
if (magic_cookie_glitch_ul < 0 && magic_cookie_glitch && VALID_STRING(enter_underline_mode))
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
-/* $Id: curses.h.in,v 1.60 1998/02/11 12:13:46 tom Exp $ */
+/* $Id: curses.h.in,v 1.85 1999/10/23 12:33:54 tom Exp $ */
#ifndef __NCURSES_H
#define __NCURSES_H
#define NCURSES_ATTR_T int
#endif
-#ifndef NCURSES_CONST
-#define NCURSES_CONST /* nothing */
-#endif
+#undef NCURSES_CONST
+#define NCURSES_CONST @NCURSES_CONST@
typedef unsigned @cf_cv_typeof_chtype@ chtype;
/* XSI and SVr4 specify that curses implements 'bool'. However, C++ may also
* implement it. If so, we must use the C++ compiler's type to avoid conflict
* with other interfaces.
- *
- * To simplify use with/without the configuration script, we define the symbols
- * CXX_BUILTIN_BOOL and CXX_TYPE_OF_BOOL; they're edited by the configure
- * script.
*/
#undef TRUE
+#define TRUE 1
+
#undef FALSE
-#define CXX_BUILTIN_BOOL @cf_cv_builtin_bool@
-#define CXX_TYPE_OF_BOOL @cf_cv_type_of_bool@
+#define FALSE 0
-#if defined(__cplusplus) && CXX_BUILTIN_BOOL
-#define TRUE ((CXX_TYPE_OF_BOOL)true)
-#define FALSE ((CXX_TYPE_OF_BOOL)false)
-#else
-typedef CXX_TYPE_OF_BOOL bool;
-#define TRUE ((bool)1)
-#define FALSE ((bool)0)
+#if (!defined(__cplusplus) || !@cf_cv_builtin_bool@) && (!@cf_cv_cc_bool_type@)
+#undef bool
+typedef @cf_cv_type_of_bool@ bool;
#endif
#ifdef __cplusplus
*/
extern int ESCDELAY; /* ESC expire time in milliseconds */
-/* non-XSI extensions (dickey@clark.net) */
+extern char *keybound (int, int);
+extern const char *curses_version (void);
extern int define_key (char *, int);
extern int keyok (int, bool);
extern int resizeterm (int, int);
extern int use_default_colors (void);
+extern int use_extended_names (bool);
extern int wresize (WINDOW *, int, int);
extern char ttytype[]; /* needed for backward compatibility */
* function calls. Just in case '__attribute__' isn't defined, make a dummy.
* G++ doesn't accept it anyway.
*/
-#if defined(__cplusplus) || (!defined(__GNUC__) && !defined(__attribute__))
+#if !defined(__GNUC__) && !defined(__attribute__)
#define __attribute__(p) /* nothing */
#endif
+/*
+ * For g++, turn off our macros that use __attribute__ (g++ recognizes some
+ * of them, but not at the same version levels as gcc).
+ */
+#ifdef __cplusplus
+#undef GCC_NORETURN
+#undef GCC_PRINTF
+#undef GCC_SCANF
+#undef GCC_UNUSED
+#endif
+
/*
* We cannot define these in ncurses_cfg.h, since they require parameters to be
* passed (that's non-portable).
extern int attroff(NCURSES_ATTR_T); /* generated */
extern int attron(NCURSES_ATTR_T); /* generated */
extern int attrset(NCURSES_ATTR_T); /* generated */
-extern int attr_get(void); /* generated */
-extern int attr_off(NCURSES_ATTR_T); /* generated */
-extern int attr_on(NCURSES_ATTR_T); /* generated */
-extern int attr_set(NCURSES_ATTR_T); /* generated */
+extern int attr_get(attr_t *, short *, void *); /* generated */
+extern int attr_off(attr_t, void *); /* generated */
+extern int attr_on(attr_t, void *); /* generated */
+extern int attr_set(attr_t, short, void *); /* generated */
extern int baudrate(void); /* implemented */
extern int beep(void); /* implemented */
extern int bkgd(chtype); /* generated */
extern void bkgdset(chtype); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int bkgrndset(const cchar_t *); /* missing */
+extern void bkgrndset(const cchar_t *); /* missing */
extern int bkgrnd(const cchar_t *); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int border(chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int border_set(cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t); /* missing */
+extern int border_set(const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int box(WINDOW *, chtype, chtype); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int box_set(WINDOW *, cchar_t, cchar_t); /* missing */
+extern int box_set(WINDOW *, const cchar_t *, const cchar_t *); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern bool can_change_color(void); /* implemented */
extern int cbreak(void); /* implemented */
extern int clrtobot(void); /* generated */
extern int clrtoeol(void); /* generated */
extern int color_content(short,short*,short*,short*); /* implemented */
-extern int color_set(short,void*); /* missing */
+extern int color_set(short,void*); /* generated */
extern int COLOR_PAIR(int); /* generated */
extern int copywin(const WINDOW*,WINDOW*,int,int,int,int,int,int,int); /* implemented */
extern int curs_set(int); /* implemented */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int endwin(void); /* implemented */
extern char erasechar(void); /* implemented */
-#ifdef _XOPEN_SOURCE_EXTENDED
-extern int erase_wchar(wchar_t *); /* missing */
-#endif /* _XOPEN_SOURCE_EXTENDED */
extern void filter(void); /* implemented */
extern int flash(void); /* implemented */
extern int flushinp(void); /* implemented */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int halfdelay(int); /* implemented */
extern bool has_colors(void); /* implemented */
-extern int has_ic(void); /* implemented */
-extern int has_il(void); /* implemented */
+extern bool has_ic(void); /* implemented */
+extern bool has_il(void); /* implemented */
extern int hline(chtype, int); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
extern int hline_set(const cchar_t *, int); /* missing */
extern int intrflush(WINDOW *,bool); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
extern int inwstr(wchar_t *); /* missing */
-extern int in_wch(const cchar_t *); /* missing */
-extern int in_wchstr(const cchar_t *); /* missing */
-extern int in_wchntr(const cchar_t *, int); /* missing */
+extern int in_wch(NCURSES_CONST cchar_t *); /* missing */
+extern int in_wchstr(NCURSES_CONST cchar_t *); /* missing */
+extern int in_wchnstr(NCURSES_CONST cchar_t *, int); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int isendwin(void); /* implemented */
-extern int is_linetouched(WINDOW *,int); /* implemented */
-extern int is_wintouched(WINDOW *); /* implemented */
-extern const char *keyname(int); /* implemented */
+extern bool isendwin(void); /* implemented */
+extern bool is_linetouched(WINDOW *,int); /* implemented */
+extern bool is_wintouched(WINDOW *); /* implemented */
+extern NCURSES_CONST char *keyname(int); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int key_name(wchar_t *); /* missing */
+extern char *key_name(wchar_t); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int keypad(WINDOW *,bool); /* implemented */
extern char killchar(void); /* implemented */
extern int mvins_wch(int, int, const cchar_t *); /* missing */
extern int mvins_wstr(int, int, const wchar_t *); /* missing */
extern int mvinwstr(int, int, wchar_t *); /* missing */
-extern int mvin_wch(int, int, const cchar_t *); /* missing */
-extern int mvin_wchstr(int, int, const cchar_t *); /* missing */
-extern int mvin_wchntr(int, int, const cchar_t *, int); /* missing */
+extern int mvin_wch(int, int, NCURSES_CONST cchar_t *); /* missing */
+extern int mvin_wchstr(int, int, NCURSES_CONST cchar_t *); /* missing */
+extern int mvin_wchnstr(int, int, NCURSES_CONST cchar_t *, int); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvprintw(int,int,const char *,...) /* implemented */
+extern int mvprintw(int,int, NCURSES_CONST char *,...) /* implemented */
GCC_PRINTFLIKE(3,4);
-extern int mvscanw(int,int,const char *,...) /* implemented */
+extern int mvscanw(int,int, NCURSES_CONST char *,...) /* implemented */
GCC_SCANFLIKE(3,4);
extern int mvvline(int, int, chtype, int); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
extern int mvwins_wch(WINDOW *, int, int, const cchar_t *); /* missing */
extern int mvwins_wstr(WINDOW *, int, int, const wchar_t *); /* missing */
extern int mvwinwstr(WINDOW *, int, int, wchar_t *); /* missing */
-extern int mvwin_wch(WINDOW *, int, int, const cchar_t *); /* missing */
-extern int mvwin_wchnstr(WINDOW *, int,int,const cchar_t *,int); /* missing */
-extern int mvwin_wchstr(WINDOW *, int, int, const cchar_t *); /* missing */
+extern int mvwin_wch(WINDOW *, int, int, NCURSES_CONST cchar_t *); /* missing */
+extern int mvwin_wchnstr(WINDOW *, int,int, NCURSES_CONST cchar_t *,int); /* missing */
+extern int mvwin_wchstr(WINDOW *, int, int, NCURSES_CONST cchar_t *); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int mvwprintw(WINDOW*,int,int,const char *,...) /* implemented */
+extern int mvwprintw(WINDOW*,int,int, NCURSES_CONST char *,...) /* implemented */
GCC_PRINTFLIKE(4,5);
-extern int mvwscanw(WINDOW *,int,int,const char *,...) /* implemented */
+extern int mvwscanw(WINDOW *,int,int, NCURSES_CONST char *,...) /* implemented */
GCC_SCANFLIKE(4,5);
extern int mvwvline(WINDOW *,int, int, chtype, int); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int napms(int); /* implemented */
extern WINDOW *newpad(int,int); /* implemented */
-extern SCREEN *newterm(const char *,FILE *,FILE *); /* implemented */
+extern SCREEN *newterm(NCURSES_CONST char *,FILE *,FILE *); /* implemented */
extern WINDOW *newwin(int,int,int,int); /* implemented */
extern int nl(void); /* implemented */
extern int nocbreak(void); /* implemented */
extern int nodelay(WINDOW *,bool); /* implemented */
extern int noecho(void); /* implemented */
extern int nonl(void); /* implemented */
-extern int noqiflush(void); /* implemented */
+extern void noqiflush(void); /* implemented */
extern int noraw(void); /* implemented */
extern int notimeout(WINDOW *,bool); /* implemented */
extern int overlay(const WINDOW*,WINDOW *); /* implemented */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int pnoutrefresh(WINDOW*,int,int,int,int,int,int);/* implemented */
extern int prefresh(WINDOW *,int,int,int,int,int,int); /* implemented */
-extern int printw(const char *,...) /* implemented */
+extern int printw(NCURSES_CONST char *,...) /* implemented */
GCC_PRINTFLIKE(1,2);
extern int putp(const char *); /* implemented */
extern int putwin(WINDOW *, FILE *); /* implemented */
-extern int qiflush(void); /* implemented */
+extern void qiflush(void); /* implemented */
extern int raw(void); /* implemented */
extern int redrawwin(WINDOW *); /* generated */
extern int refresh(void); /* generated */
extern int reset_shell_mode(void); /* implemented */
extern int ripoffline(int, int (*init)(WINDOW *, int)); /* implemented */
extern int savetty(void); /* implemented */
-extern int scanw(const char *,...) /* implemented */
+extern int scanw(NCURSES_CONST char *,...) /* implemented */
GCC_SCANFLIKE(1,2);
extern int scr_dump(const char *); /* implemented */
extern int scr_init(const char *); /* implemented */
extern int scr_restore(const char *); /* implemented */
extern int scr_set(const char *); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int setcchar(cchar_t *, wchar_t *, attr_t, short, const void *); /* missing */
+extern int setcchar(cchar_t *, const wchar_t *, const attr_t, short, const void *); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int setscrreg(int,int); /* generated */
extern SCREEN *set_term(SCREEN *); /* implemented */
-extern int slk_attroff(const attr_t); /* implemented */
-extern int slk_attr_off(attr_t); /* generated:WIDEC */
-extern int slk_attron(const attr_t); /* implemented */
-extern int slk_attr_on(attr_t); /* generated:WIDEC */
-extern int slk_attrset(const attr_t); /* implemented */
-extern attr_t slk_attr(void); /* implemented */
-extern int slk_attr_set(attr_t); /* generated:WIDEC */
+extern int slk_attroff(const chtype); /* implemented */
+extern int slk_attr_off(const attr_t, void *); /* generated:WIDEC */
+extern int slk_attron(const chtype); /* implemented */
+extern int slk_attr_on(attr_t,void*); /* generated:WIDEC */
+extern int slk_attrset(const chtype); /* implemented */
+extern attr_t slk_attr(void); /* implemented */
+extern int slk_attr_set(const attr_t,short,void*); /* implemented */
extern int slk_clear(void); /* implemented */
+extern int slk_color(short); /* implemented */
extern int slk_init(int); /* implemented */
extern char *slk_label(int); /* implemented */
extern int slk_noutrefresh(void); /* implemented */
extern int slk_set(int,const char *,int); /* implemented */
extern int slk_touch(void); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int slk_wset(int, wchar_t *, int); /* missing */
+extern int slk_wset(int, const wchar_t *, int); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int standout(void); /* generated */
extern int standend(void); /* generated */
extern chtype termattrs(void); /* implemented */
extern attr_t term_attrs(void); /* missing */
extern char *termname(void); /* implemented */
-extern int tigetflag(const char *); /* implemented */
-extern int tigetnum(const char *); /* implemented */
-extern char *tigetstr(const char *); /* implemented */
-extern int timeout(int); /* generated */
+extern int tigetflag(NCURSES_CONST char *); /* implemented */
+extern int tigetnum(NCURSES_CONST char *); /* implemented */
+extern char *tigetstr(NCURSES_CONST char *); /* implemented */
+extern void timeout(int); /* generated */
+extern char *tparm(NCURSES_CONST char *, ...); /* implemented */
extern int typeahead(int); /* implemented */
extern int ungetch(int); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int unget_wch(const wchar_t *); /* missing */
+extern int unget_wch(const wchar_t); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int untouchwin(WINDOW *); /* generated */
extern void use_env(bool); /* implemented */
extern int vidattr(chtype); /* implemented */
-extern int vid_attr(attr_t); /* generated:WIDEC */
+extern int vid_attr(attr_t, short, void *); /* generated:WIDEC */
extern int vidputs(chtype, int (*)(int)); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int vid_puts(attr_t, int (*)(int)); /* missing */
+extern int vid_puts(attr_t, short, void *, int (*)(int)); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int vline(chtype, int); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
extern int vline_set(const cchar_t *, int); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
-extern int vwprintw(WINDOW *,const char *,va_list); /* implemented */
-extern int vw_printw(WINDOW *,const char *,va_list); /* generated */
-extern int vwscanw(WINDOW *,const char *,va_list); /* implemented */
-extern int vw_scanw(WINDOW *,const char *,va_list); /* generated */
+extern int vwprintw(WINDOW *, NCURSES_CONST char *,va_list); /* implemented */
+extern int vw_printw(WINDOW *, NCURSES_CONST char *,va_list); /* generated */
+extern int vwscanw(WINDOW *, NCURSES_CONST char *,va_list); /* implemented */
+extern int vw_scanw(WINDOW *, NCURSES_CONST char *,va_list); /* generated */
extern int waddch(WINDOW *, const chtype); /* implemented */
extern int waddchnstr(WINDOW *,const chtype *const,int); /* implemented */
extern int waddchstr(WINDOW *,const chtype *); /* generated */
extern int waddstr(WINDOW *,const char *); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
extern int waddwstr(WINDOW *,const wchar_t *); /* missing */
+extern int waddnwstr(WINDOW *,const wchar_t *,int); /* missing */
extern int wadd_wch(WINDOW *,const cchar_t *); /* missing */
extern int wadd_wchnstr(WINDOW *,const cchar_t *,int); /* missing */
extern int wadd_wchstr(WINDOW *,const cchar_t *); /* missing */
extern int wattron(WINDOW *, int); /* generated */
extern int wattroff(WINDOW *, int); /* generated */
extern int wattrset(WINDOW *, int); /* generated */
-extern attr_t wattr_get(WINDOW *); /* generated */
-extern int wattr_on(WINDOW *, const attr_t); /* implemented */
-extern int wattr_off(WINDOW *, const attr_t); /* implemented */
-extern int wattr_set(WINDOW *, attr_t); /* generated */
+extern int wattr_get(WINDOW *, attr_t *, short *, void *); /* generated */
+extern int wattr_on(WINDOW *, NCURSES_CONST attr_t, void *); /* implemented */
+extern int wattr_off(WINDOW *, NCURSES_CONST attr_t, void *); /* implemented */
+extern int wattr_set(WINDOW *, attr_t, short, void *); /* generated */
extern int wbkgd(WINDOW *,const chtype); /* implemented */
extern void wbkgdset(WINDOW *,chtype); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wbkgrndset(WINDOW *,const cchar_t *); /* missing */
+extern void wbkgrndset(WINDOW *,const cchar_t *); /* missing */
extern int wbkgrnd(WINDOW *,const cchar_t *); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int wborder(WINDOW *,chtype,chtype,chtype,chtype,chtype,chtype,chtype,chtype); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern int wborder_set(WINDOW *,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t,cchar_t); /* missing */
+extern int wborder_set(WINDOW *,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*,const cchar_t*); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int wchgat(WINDOW *, int, attr_t, short, const void *);/* implemented */
extern int wclear(WINDOW *); /* implemented */
extern int wclrtobot(WINDOW *); /* implemented */
extern int wclrtoeol(WINDOW *); /* implemented */
-extern int wcolor_set(WINDOW*,short,void*); /* missing */
+extern int wcolor_set(WINDOW*,short,void*); /* implemented */
extern void wcursyncup(WINDOW *); /* implemented */
extern int wdelch(WINDOW *); /* implemented */
extern int wdeleteln(WINDOW *); /* generated */
#ifdef _XOPEN_SOURCE_EXTENDED
extern int whline_set(WINDOW *, const cchar_t *, int); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
-extern chtype winch(WINDOW *); /* generated */
+extern chtype winch(WINDOW *); /* implemented */
extern int winchnstr(WINDOW *, chtype *, int); /* implemented */
extern int winchstr(WINDOW *, chtype *); /* generated */
extern int winnstr(WINDOW *, char *, int); /* implemented */
extern int wins_wch(WINDOW *, const cchar_t *); /* missing */
extern int wins_wstr(WINDOW *, const wchar_t *); /* missing */
extern int winwstr(WINDOW *, wchar_t *); /* missing */
-extern int win_wch(WINDOW *, const cchar_t *); /* missing */
-extern int win_wchnstr(WINDOW *, const cchar_t *, int); /* missing */
-extern int win_wchstr(WINDOW *, const cchar_t *); /* missing */
+extern int win_wch(WINDOW *, NCURSES_CONST cchar_t *); /* missing */
+extern int win_wchnstr(WINDOW *, NCURSES_CONST cchar_t *, int); /* missing */
+extern int win_wchstr(WINDOW *, NCURSES_CONST cchar_t *); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int wmove(WINDOW *,int,int); /* implemented */
extern int wnoutrefresh(WINDOW *); /* implemented */
-extern int wprintw(WINDOW *,const char *,...) /* implemented */
+extern int wprintw(WINDOW *, NCURSES_CONST char *,...) /* implemented */
GCC_PRINTFLIKE(2,3);
extern int wredrawln(WINDOW *,int,int); /* implemented */
extern int wrefresh(WINDOW *); /* implemented */
-extern int wscanw(WINDOW *,const char *,...) /* implemented */
+extern int wscanw(WINDOW *, NCURSES_CONST char *,...) /* implemented */
GCC_SCANFLIKE(2,3);
extern int wscrl(WINDOW *,int); /* implemented */
extern int wsetscrreg(WINDOW *,int,int); /* implemented */
extern int wstandend(WINDOW *); /* generated */
extern void wsyncdown(WINDOW *); /* implemented */
extern void wsyncup(WINDOW *); /* implemented */
-extern int wtimeout(WINDOW *,int); /* implemented */
+extern void wtimeout(WINDOW *,int); /* implemented */
extern int wtouchln(WINDOW *,int,int,int); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
-extern wchar_t wunctrl(cchar_t *); /* missing */
+extern wchar_t *wunctrl(cchar_t *); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
extern int wvline(WINDOW *,chtype,int); /* implemented */
#ifdef _XOPEN_SOURCE_EXTENDED
extern int wvline_set(WINDOW *, const cchar_t *, int); /* missing */
#endif /* _XOPEN_SOURCE_EXTENDED */
+extern bool mouse_trafo(int*, int*, bool); /* generated */
+
/* attributes */
#define NCURSES_BITS(mask,shift) ((mask) << ((shift) + @cf_cv_widec_shift@))
#define getbegyx(win,y,x) (y = (win)?(win)->_begy:ERR, x = (win)?(win)->_begx:ERR)
#define getmaxyx(win,y,x) (y = (win)?((win)->_maxy + 1):ERR, x = (win)?((win)->_maxx + 1):ERR)
#define getparyx(win,y,x) (y = (win)?(win)->_pary:ERR, x = (win)?(win)->_parx:ERR)
-#define getsyx(y,x) getyx(stdscr, y, x)
-#define setsyx(y,x) (stdscr->_cury = y, stdscr->_curx = x)
+#define getsyx(y,x) do { if(newscr->_leaveok) (y)=(x)=-1; \
+ else getyx(newscr,(y),(x)); \
+ } while(0)
+#define setsyx(y,x) do { if((y)==-1 && (x)==-1) newscr->_leaveok=TRUE; \
+ else {newscr->_leaveok=FALSE;wmove(newscr,(y),(x));} \
+ } while(0)
/* It seems older SYSV curses versions define these */
#define getattrs(win) ((win)?(win)->_attrs:A_NORMAL)
#define getparx(win) ((win)?(win)->_parx:ERR)
#define getpary(win) ((win)?(win)->_pary:ERR)
-#define winch(win) ((win)?(win)->_line[(win)->_cury].text[(win)->_curx]:0)
-#define wstandout(win) (wattr_set(win,A_STANDOUT))
-#define wstandend(win) (wattr_set(win,A_NORMAL))
-#define wattr_set(win,at) ((win)?((win)->_attrs = (at)):0)
+#define wstandout(win) (wattrset(win,A_STANDOUT))
+#define wstandend(win) (wattrset(win,A_NORMAL))
+#define wattr_set(win,a,p,opts) ((win)->_attrs = (((a) & ~A_COLOR) | COLOR_PAIR(p)), OK)
-#define wattron(win,at) wattr_on(win, at)
-#define wattroff(win,at) wattr_off(win, at)
-#define wattrset(win,at) wattr_set(win, at)
+#define wattron(win,at) wattr_on(win, at, (void *)0)
+#define wattroff(win,at) wattr_off(win, at, (void *)0)
+#define wattrset(win,at) ((win)->_attrs = (at))
#define scroll(win) wscrl(win,1)
#define clear() wclear(stdscr)
#define clrtobot() wclrtobot(stdscr)
#define clrtoeol() wclrtoeol(stdscr)
+#define color_set(c,o) wcolor_set(stdscr,c,o)
#define delch() wdelch(stdscr)
#define deleteln() winsdelln(stdscr,-1)
#define echochar(c) wechochar(stdscr,c)
* winnwstr(), wins_nwstr(), wins_wch(), win_wch(), win_wchnstr().
* Except for wchgat(), these are not yet implemented. They will be someday.
*/
-#define add_wch(c) wadd_wch(stsdscr,c)
+#define add_wch(c) wadd_wch(stdscr,c)
#define addnwstr(wstr,n) waddnwstr(stdscr,wstr,n)
#define addwstr(wstr,n) waddnwstr(stdscr,wstr,-1)
-#define attr_get() wattr_get(stdscr)
-#define attr_off(a) wattr_off(stdscr,a)
-#define attr_on(a) wattr_on(stdscr,a)
-#define attr_set(a) wattr_set(stdscr,a)
-#define box_set(w,v,h) wborder_set(w,v,v,h,h,0,0,0,9)
+#define attr_get(a,pair,opts) wattr_get(stdscr,a,pair,opts)
+#define attr_off(a,opts) wattr_off(stdscr,a,opts)
+#define attr_on(a,opts) wattr_on(stdscr,a,opts)
+#define attr_set(a,pair,opts) wattr_set(stdscr,a,pair,opts)
+#define box_set(w,v,h) wborder_set(w,v,v,h,h,0,0,0,0)
#define chgat(n,a,c,o) wchgat(stdscr,n,a,c,o)
#define echo_wchar(c) wecho_wchar(stdscr,c)
#define getbkgd(win) ((win)->_bkgd)
#define mvinwstr(y,x,c) mvwinnwstr(stdscr,y,x,c,-1)
#define mvvline_set(y,x,c,n) mvwvline_set(stdscr,y,x,c,n)
-#define mvwadd_wch(y,x,win,c) (wmove(win,y,x) == ERR ? ERR : wadd_wch(stsdscr,c))
-#define mvwaddnwstr(y,x,win,wstr,n) (wmove(win,y,x) == ERR ? ERR : waddnwstr(stdscr,wstr,n))
-#define mvwaddwstr(y,x,win,wstr,n) (wmove(win,y,x) == ERR ? ERR : waddnwstr(stdscr,wstr,-1))
+#define mvwadd_wch(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : wadd_wch(stdscr,c))
+#define mvwaddnwstr(win,y,x,wstr,n) (wmove(win,y,x) == ERR ? ERR : waddnwstr(stdscr,wstr,n))
+#define mvwaddwstr(win,y,x,wstr,n) (wmove(win,y,x) == ERR ? ERR : waddnwstr(stdscr,wstr,-1))
#define mvwchgat(win,y,x,n,a,c,o) (wmove(win,y,x) == ERR ? ERR : wchgat(win,n,a,c,o))
-#define mvwget_wch(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : wget_wch(win,n))
+#define mvwget_wch(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : wget_wch(win,c))
#define mvwget_wstr(win,y,x,t) (wmove(win,y,x) == ERR ? ERR : wgetn_wstr(win,t,-1))
#define mvwgetn_wstr(win,y,x,t,n) (wmove(win,y,x) == ERR ? ERR : wgetn_wstr(win,t,n))
#define mvwhline_set(win,y,x,c,n) (wmove(win,y,x) == ERR ? ERR : whline_set(win,c,n))
#define mvwin_wchstr(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : win_wchnstr(stdscr,c,-1))
#define mvwinnwstr(win,y,x,c,n) (wmove(win,y,x) == ERR ? ERR : winnwstr(stdscr,c,n))
#define mvwins_nwstr(win,y,x,t,n) (wmove(win,y,x) == ERR ? ERR : wins_nwstr(stdscr,t,n))
-#define mvwins_wch(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : wins_wch(c))
+#define mvwins_wch(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : wins_wch(stdscr,c))
#define mvwins_wstr(win,y,x,t) (wmove(win,y,x) == ERR ? ERR : wins_nwstr(stdscr,t,-1))
#define mvwinwstr(win,y,x,c) (wmove(win,y,x) == ERR ? ERR : winnwstr(stdscr,c,-1))
#define mvwvline_set(win,y,x,c,n) (wmove(win,y,x) == ERR ? ERR : wvline_set(win,c,n))
-#define slk_attr_off(a) slk_attroff(a)
-#define slk_attr_on(a) slk_attron(a)
-#define slk_attr_set(a) slk_attrset(a)
-#define vid_attr(a) vidattr(a)
-#define vline_set(c,n) vhline_set(stdscr,c,n)
+#define slk_attr_off(a,v) ((v) ? ERR : slk_attroff(a))
+#define slk_attr_on(a,v) ((v) ? ERR : slk_attron(a))
+
+#define vid_attr(a,pair,opts) vidattr(a)
+#define vline_set(c,n) wvline_set(stdscr,c,n)
#define waddwstr(win,wstr,n) waddnwstr(win,wstr,-1)
-#define wattr_get(win) ((win)->_attrs)
+#define wattr_get(win,a,p,opts) ((void)((a) != 0 && (*(a) = (win)->_attrs)), \
+ (void)((p) != 0 && (*(p) = PAIR_NUMBER((win)->_attrs))), \
+ OK)
#define wget_wstr(w,t) wgetn_wstr(w,t,-1)
#define win_wchstr(w,c) win_wchnstr(w,c,-1)
#define wins_wstr(w,t) wins_nwstr(w,t,-1)
extern mmask_t mousemask(mmask_t, mmask_t *);
extern bool wenclose(const WINDOW *, int, int);
extern int mouseinterval(int);
+extern bool wmouse_trafo(const WINDOW* win,int* y, int* x, bool to_screen);
+
+#define mouse_trafo(y,x,to_screen) wmouse_trafo(stdscr,y,x,to_screen)
/* other non-XSI functions */
extern void _tracedump(const char *, WINDOW *);
extern char *_traceattr(attr_t);
extern char *_traceattr2(int, chtype);
-extern char *_tracebits(void);
+extern char *_nc_tracebits(void);
extern char *_tracechar(const unsigned char);
extern char *_tracechtype(chtype);
extern char *_tracechtype2(int, chtype);
/****************************************************************************
* Author: Thomas E. Dickey <dickey@clark.net> 1996,1997 *
****************************************************************************/
-/* $Id: nc_alloc.h,v 1.5 1998/02/11 12:13:45 tom Exp $ */
+/* $Id: nc_alloc.h,v 1.7 1999/04/03 23:15:13 tom Exp $ */
#ifndef NC_ALLOC_included
#define NC_ALLOC_included 1
#define NO_LEAKS 0
#endif
-#ifndef HAVE_NC_FREEALL
-#define HAVE_NC_FREEALL 0
-#endif
-
-#if HAVE_LIBDBMALLOC || HAVE_LIBDMALLOC || NO_LEAKS || HAVE_NC_FREEALL
+#if HAVE_LIBDBMALLOC || HAVE_LIBDMALLOC || NO_LEAKS
+#define HAVE_NC_FREEALL 1
struct termtype;
extern void _nc_free_and_exit(int) GCC_NORETURN;
extern void _nc_free_tparm(void);
extern void _nc_leaks_dump_entry(void);
-extern void _nc_free_termtype(struct termtype *, int);
#define ExitProgram(code) _nc_free_and_exit(code)
#endif
+#ifndef HAVE_NC_FREEALL
+#define HAVE_NC_FREEALL 0
+#endif
+
#ifndef ExitProgram
#define ExitProgram(code) return code
#endif
#ifndef _TERM_ENTRY_H
#define _TERM_ENTRY_H
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#include <term.h>
+
#define MAX_USES 32
typedef struct entry {
}
ENTRY;
+#if NCURSES_XNAMES
+#define NUM_BOOLEANS(tp) (tp)->num_Booleans
+#define NUM_NUMBERS(tp) (tp)->num_Numbers
+#define NUM_STRINGS(tp) (tp)->num_Strings
+#define EXT_NAMES(tp,i,limit,index,table) (i >= limit) ? tp->ext_Names[index] : table[i]
+#else
+#define NUM_BOOLEANS(tp) BOOLCOUNT
+#define NUM_NUMBERS(tp) NUMCOUNT
+#define NUM_STRINGS(tp) STRCOUNT
+#define EXT_NAMES(tp,i,limit,index,table) table[i]
+#endif
+
+#define NUM_EXT_NAMES(tp) ((tp)->ext_Booleans + (tp)->ext_Numbers + (tp)->ext_Strings)
+
+#define for_each_boolean(n,tp) for(n = 0; n < NUM_BOOLEANS(tp); n++)
+#define for_each_number(n,tp) for(n = 0; n < NUM_NUMBERS(tp); n++)
+#define for_each_string(n,tp) for(n = 0; n < NUM_STRINGS(tp); n++)
+
+#define ExtBoolname(tp,i,names) EXT_NAMES(tp, i, BOOLCOUNT, (i - (tp->num_Booleans - tp->ext_Booleans)), names)
+#define ExtNumname(tp,i,names) EXT_NAMES(tp, i, NUMCOUNT, (i - (tp->num_Numbers - tp->ext_Numbers)) + tp->ext_Booleans, names)
+#define ExtStrname(tp,i,names) EXT_NAMES(tp, i, STRCOUNT, (i - (tp->num_Strings - tp->ext_Strings)) + (tp->ext_Numbers + tp->ext_Booleans), names)
+
extern ENTRY *_nc_head, *_nc_tail;
#define for_entry_list(qp) for (qp = _nc_head; qp; qp = qp->next)
#define NULLHOOK (bool(*)(ENTRY *))0
+/*
+ * Note that WANTED and PRESENT are not simple inverses! If a capability
+ * has been explicitly cancelled, it's not considered WANTED.
+ */
+#define WANTED(s) ((s) == ABSENT_STRING)
+#define PRESENT(s) (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING))
+
+#define ANDMISSING(p,q) \
+ {if (PRESENT(p) && !PRESENT(q)) _nc_warning(#p " but no " #q);}
+
+#define PAIRED(p,q) \
+ { \
+ if (PRESENT(q) && !PRESENT(p)) \
+ _nc_warning(#q " but no " #p); \
+ if (PRESENT(p) && !PRESENT(q)) \
+ _nc_warning(#p " but no " #q); \
+ }
+
/* alloc_entry.c: elementary allocation code */
-extern void _nc_init_entry(TERMTYPE *const);
+extern ENTRY *_nc_copy_entry(ENTRY *oldp);
extern char *_nc_save_str(const char *const);
+extern void _nc_init_entry(TERMTYPE *const);
extern void _nc_merge_entry(TERMTYPE *const, TERMTYPE *const);
extern void _nc_wrap_entry(ENTRY *const);
+/* alloc_ttype.c: elementary allocation code */
+extern void _nc_align_termtype(TERMTYPE *, TERMTYPE *);
+extern void _nc_copy_termtype(TERMTYPE *, TERMTYPE *);
+
+/* free_ttype.c: elementary allocation code */
+extern void _nc_free_termtype(TERMTYPE *);
+
+/* lib_acs.c */
+extern void _nc_init_acs(void); /* corresponds to traditional 'init_acs()' */
+
/* parse_entry.c: entry-parsing code */
+#if NCURSES_XNAMES
+extern bool _nc_user_definable;
+#endif
extern int _nc_parse_entry(ENTRY *, int, bool);
extern int _nc_capcmp(const char *, const char *);
extern bool _nc_entry_match(char *, char *);
extern int _nc_resolve_uses(void);
extern void _nc_free_entries(ENTRY *);
+extern void (*_nc_check_termtype)(TERMTYPE *);
-#endif /* _TERM_ENTRY_H */
+/* trace_xnames.c */
+extern void _nc_trace_xnames(TERMTYPE *);
-/* term_entry.h ends here */
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _TERM_ENTRY_H */
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
-/* $Id: termcap.h.in,v 1.5 1998/02/11 12:13:45 tom Exp $ */
+/* $Id: termcap.h.in,v 1.10 1999/01/09 22:38:04 Uchiyama.Yasushi Exp $ */
-#ifndef _TERMCAP_H
-#define _TERMCAP_H 1
+#ifndef _NCU_TERMCAP_H
+#define _NCU_TERMCAP_H 1
#undef NCURSES_VERSION
#define NCURSES_VERSION "@NCURSES_MAJOR@.@NCURSES_MINOR@"
#endif /* __cplusplus */
#include <sys/types.h>
+@OSPEED_INCLUDES@
+
+#undef NCURSES_CONST
+#define NCURSES_CONST @NCURSES_CONST@
extern char PC;
extern char *UP;
extern char *BC;
-extern short ospeed;
+extern @OSPEED_TYPE@ ospeed;
+#if !defined(_NCU_TERM_H)
+extern char *tgetstr(NCURSES_CONST char *, char **);
+extern char *tgoto(const char *, int, int);
extern int tgetent(char *, const char *);
-extern int tgetflag(const char *);
-extern int tgetnum(const char *);
-extern char *tgetstr(const char *, char **);
-
+extern int tgetflag(NCURSES_CONST char *);
+extern int tgetnum(NCURSES_CONST char *);
extern int tputs(const char *, int, int (*)(int));
-
-extern char *tgoto(const char *, int, int);
+#endif
#ifdef __cplusplus
}
#endif
-#endif /* _TERMCAP_H */
+#endif /* _NCU_TERMCAP_H */
/* location of user's personal info directory */
#define PRIVATE_INFO "%s/.terminfo" /* plug getenv("HOME") into %s */
-#define DEBUG(n, a) if (_nc_tracing & (1 << (n - 1))) _tracef a
+#ifdef TRACE
+#define DEBUG(n, a) if (_nc_tracing & (1 << (n - 1))) _tracef a
+#else
+#define DEBUG(n, a) /*nothing*/
+#endif
+
extern unsigned _nc_tracing;
extern void _nc_tracef(char *, ...) GCC_PRINTFLIKE(1,2);
extern const char *_nc_visbuf(const char *);
extern struct token _nc_curr_token;
+ /*
+ * List of keynames with their corresponding code.
+ */
+struct kn {
+ const char *name;
+ int code;
+};
+
+extern const struct kn _nc_key_names[];
+
+ /*
+ * Offsets to string capabilities, with the corresponding functionkey
+ * codes.
+ */
+struct tinfo_fkeys {
+ unsigned offset;
+ chtype code;
+ };
+
+#ifdef BROKEN_LINKER
+
+#define _nc_tinfo_fkeys _nc_tinfo_fkeysf()
+extern struct tinfo_fkeys *_nc_tinfo_fkeysf(void);
+
+#else
+
+extern struct tinfo_fkeys _nc_tinfo_fkeys[];
+
+#endif
+
/*
* The file comp_captab.c contains an array of these structures, one
* per possible capability. These are indexed by a hash table array of
extern const struct alias _nc_infoalias_table[];
extern const struct name_table_entry *_nc_get_table(bool);
+extern const struct name_table_entry * const *_nc_get_hash_table(bool);
#define NOTFOUND ((struct name_table_entry *) 0)
#define CANCELLED_NUMERIC -2
#define CANCELLED_STRING (char *)-1
+#define VALID_BOOLEAN(s) ((s) >= 0)
+#define VALID_NUMERIC(s) ((s) >= 0)
#define VALID_STRING(s) ((s) != CANCELLED_STRING && (s) != ABSENT_STRING)
/* termcap entries longer than this may break old binaries */
extern bool _nc_suppress_warnings;
/* comp_expand.c: expand string into readable form */
-extern char *_nc_tic_expand(const char *, bool);
+extern char *_nc_tic_expand(const char *, bool, int);
/* comp_scan.c: decode string from readable form */
extern char _nc_trans_string(char *);
#!/bin/sh
+#***************************************************************************
+# Copyright (c) 1998 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: MKterminfo.sh,v 1.5 1998/09/06 00:20:01 tom Exp $
#
# MKterminfo.sh -- generate terminfo.5 from Caps tabular data
#
# This script takes terminfo.head and terminfo.tail and splices in between
-# them a table derived from the Caps master file. Besides avoiding having
+# them a table derived from the Caps data file. Besides avoiding having
# the docs fall out of sync with the table, this also lets us set up tbl
# commands for better formatting of the table.
#
.\" The magic cookie on the first line triggers this under some man programs.
EOF
cat $head
+
+temp=temp$$
+sorted=sorted$$
+unsorted=unsorted$$
+trap "rm -f $sorted $temp $unsorted; exit 99" 1 2 5 15
+
sed -n <$caps "\
/%%-STOP-HERE-%%/q
/^#%/s///p
s/ bool / /p
s/ num / /p
s/ str / /p
-" | tr "\ 5" "\012"
+" |sed -e 's/^$/../' | tr "\134" "\006" >$unsorted
+
+rm -f $sorted
+rm -f $temp
+saved=no
+while true
+do
+ read data
+ test -z "$data" && break
+ case "$data" in #(vi
+ *\ 5*) #(vi
+ echo "$data" >>$temp
+ saved=yes
+ ;;
+ *)
+ if test $saved = yes ; then
+ saved=no
+ sort $temp >>$sorted
+ rm -f $temp
+ fi
+ echo "$data" >>$sorted
+ ;;
+ esac
+done <$unsorted
+test $saved = yes && sort $temp >>$sorted
+
+sed -e 's/^\.\.$//' $sorted | tr "\005\006" "\012\134"
cat $tail
+
+rm -f $sorted $temp $unsorted
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: captoinfo.1m,v 1.13 1998/12/26 19:57:11 tom Exp $
.TH captoinfo 1M ""
.ds n 5
.ds d @DATADIR@/terminfo
.SH NAME
\fBcaptoinfo\fR - convert a \fItermcap\fR description into a \fIterminfo\fR description
.SH SYNOPSIS
-\fBcaptoinfo\fR [\fB-v\fIn\fR \fIwidth\fR] [\fB-V\fR] [\fB-1\fR] [\fB-w\fR \fIwidth\fR] \fIfile\fR . . .
+\fBcaptoinfo\fR [\fB-v\fR\fIn\fR \fIwidth\fR] [\fB-V\fR] [\fB-1\fR] [\fB-w\fR \fIwidth\fR] \fIfile\fR . . .
.SH DESCRIPTION
\fBcaptoinfo\fR looks in \fIfile\fR for \fBtermcap\fR descriptions. For each
one found, an equivalent \fBterminfo\fR description is written to standard
extracted from that file. If the environment variable \fBTERMCAP\fR is not
set, then the file \fB\*d\fR is read.
.TP 5
-\fB-v\fR
+\fB-v\fR
print out tracing information on standard error as the program runs.
.TP 5
\fB-V\fR
CI vi AT&T cursor_invisible
CV ve AT&T cursor_normal
DS mh AT&T enter_dim_mode
-EE me AT&T exit_attribute_mode
+EE me AT&T exit_attribute_mode
FE LF AT&T label_on
FL LO AT&T label_off
XS mk AT&T enter_secure_mode
Additionally, the AIX \fBbox1\fR capability will be automatically translated to
an \fBacsc\fR string.
.PP
-Hewlett-Packard's terminfo library supports two nonstandard terminfo
+Hewlett-Packard's terminfo library supports two nonstandard terminfo
capabilities \fBmeml\fR (memory lock) and \fBmemu\fR (memory unlock).
These will be discarded with a warning message.
.SH NOTES
+.\"***************************************************************************
+.\" Copyright (c) 1998 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.2 1998/03/11 21:12:53 juergen Exp $
.TH clear 1 ""
.ds n 5
.SH NAME
'\" t
-.\" $Id: curs_addch.3x,v 1.10 1997/12/13 22:37:23 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_addch.3x,v 1.16 1999/02/07 03:47:42 tom Exp $
.TH curs_addch 3X ""
.SH NAME
\fBaddch\fR, \fBwaddch\fR, \fBmvaddch\fR, \fBmvwaddch\fR,
If \fIch\fR is any control character other than tab, newline, or backspace, it
is drawn in \fB^\fR\fIX\fR notation. Calling \fBwinch\fR after adding a
control character does not return the character itself, but instead returns
-the ^-representation of the control character. (To emit control characters
-literally, use \fBechochar\fR.)
+the ^-representation of the control character.
Video attributes can be combined with a character argument passed to
\fBaddch\fR or related functions by logical-ORing them into the character.
_ _ _
l l l.
\fIName\fR \fIDefault\fR \fIDescription\fR
-ACS_ULCORNER + upper left-hand corner
-ACS_LLCORNER + lower left-hand corner
-ACS_URCORNER + upper right-hand corner
-ACS_LRCORNER + lower right-hand corner
-ACS_RTEE + right tee
-ACS_LTEE + left tee
+ACS_BLOCK # solid square block
+ACS_BOARD # board of squares
ACS_BTEE + bottom tee
-ACS_TTEE + top tee
-ACS_HLINE - horizontal line
-ACS_VLINE | vertical line
-ACS_PLUS + plus
-ACS_S1 - scan line 1
-ACS_S9 \&_ scan line 9
-ACS_DIAMOND + diamond
+ACS_BULLET o bullet
ACS_CKBOARD : checker board (stipple)
+ACS_DARROW v arrow pointing down
ACS_DEGREE ' degree symbol
-ACS_PLMINUS # plus/minus
-ACS_BULLET o bullet
+ACS_DIAMOND + diamond
+ACS_GEQUAL > greater-than-or-equal-to
+ACS_HLINE - horizontal line
+ACS_LANTERN # lantern symbol
ACS_LARROW < arrow pointing left
+ACS_LEQUAL < less-than-or-equal-to
+ACS_LLCORNER + lower left-hand corner
+ACS_LRCORNER + lower right-hand corner
+ACS_LTEE + left tee
+ACS_NEQUAL ! not-equal
+ACS_PI * greek pi
+ACS_PLMINUS # plus/minus
+ACS_PLUS + plus
ACS_RARROW > arrow pointing right
-ACS_DARROW v arrow pointing down
-ACS_UARROW ^ arrow pointing up
-ACS_BOARD # board of squares
-ACS_LANTERN # lantern symbol
-ACS_BLOCK # solid square block
+ACS_RTEE + right tee
+ACS_S1 - scan line 1
ACS_S3 - scan line 3
ACS_S7 - scan line 7
-ACS_LEQUAL < less-than-or-equal-to
-ACS_GEQUAL > greater-than-or-equal-to
-ACS_PI * greek pi
-ACS_NEQUAL ! not-equal
+ACS_S9 \&_ scan line 9
ACS_STERLING f pound-sterling symbol
+ACS_TTEE + top tee
+ACS_UARROW ^ arrow pointing up
+ACS_ULCORNER + upper left-hand corner
+ACS_URCORNER + upper right-hand corner
+ACS_VLINE | vertical line
.TE
.SH RETURN VALUE
.SH NOTES
Note that \fBaddch\fR, \fBmvaddch\fR, \fBmvwaddch\fR, and
\fBechochar\fR may be macros.
-.SH EXTENSIONS
-The following extended \fBcurses\fR features are available only on PC-clone
-consoles and compatible terminals obeying the ANSI.SYS de-facto standard for
-terminal control sequences. They are not part of XSI curses.
-
-The attribute A_ALTCHARSET actually forces literal display of PC ROM characters
-including the high-half graphics. Your console driver may still capture or
-translate a few (such as ESC) but this feature should give you access to the
-card-suit characters, up and down-arrow, and most others in the range 0-32.
-(In a terminfo entry designed for use with \fBncurses\fR, the high-half
-characters are obtained using this attribute with an \fBacsc\fR string in
-which the second of each pair is a high-half character.)
-
-Giving \fBwechochar\fR an argument with its high bit set will produce the
-corresponding high-half ASCII graphic (SVr4 curses also has this feature but
-does not document it). A control-character argument, however, will not
-typically produce the corresponding graphic; characters such as CR, NL, FF and
-TAB are typically interpreted by the console driver itself, and ESC will be
-interpreted as the leader of a control sequence.
.SH PORTABILITY
All these functions are described in the XSI Curses standard, Issue 4.
The defaults specified for forms-drawing characters apply in the POSIX locale.
-The seven ACS symbols starting with \fBACS_S3\fR were not documented in
+Some ACS symbols
+(ACS_S3,
+ACS_S7,
+ACS_LEQUAL,
+ACS_GEQUAL,
+ACS_PI,
+ACS_NEQUAL,
+ACS_STERLING)
+were not documented in
any publicly released System V. However, many publicly available terminfos
-include \fBacsc\fR strings in which their key characters (pryz{|}) are
+include \fBacsc\fR strings in which their key characters (pryz{|}) are
embedded, and a second-hand list of their character descriptions has come
to light. The ACS-prefixed names for them were invented for \fBncurses\fR(3X).
.SH SEE ALSO
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_addchstr.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_addchstr 3X ""
.SH NAME
\fBaddchstr\fR, \fBaddchnstr\fR, \fBwaddchstr\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_addstr.3x,v 1.8 1998/03/11 21:12:53 juergen Exp $
.TH curs_addstr 3X ""
.SH NAME
\fBaddstr\fR, \fBaddnstr\fR, \fBwaddstr\fR, \fBwaddnstr\fR,
'\" t
-.\" $Id: curs_attr.3x,v 1.14 1997/12/13 22:38:46 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_attr.3x,v 1.19 1998/12/26 19:25:35 tom Exp $
.TH curs_attr 3X ""
.SH NAME
\fBattroff\fR, \fBwattroff\fR, \fBattron\fR, \fBwattron\fR,
-\fBattrset\fR, \fBwattrset\fR, \fBstandend\fR, \fBwstandend\fR, \fBstandout\fR,
+\fBattrset\fR, \fBwattrset\fR, \fBcolor_set\fR, \fBwcolor_set\fR,
+\fBstandend\fR, \fBwstandend\fR, \fBstandout\fR,
\fBwstandout\fR - \fBcurses\fR character and window attribute control routines
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
\fBint wattrset(WINDOW *win, int attrs);\fR
.br
+\fBint color_set(short color_pair_number, void* opts);\fR
+.br
+\fBint wcolor_set(WINDOW *win, short color_pair_number,\fR
+ \fBvoid* opts);\fR
+.br
\fBint standend(void);\fR
.br
\fBint wstandend(WINDOW *win);\fR
.br
\fBint wstandout(WINDOW *win);\fR
.br
-\fBattr_t attr_get(void);\fR
+\fBint attr_get(attr_t *attrs, short *pair, void *opts);\fR
.br
-\fBattr_t wattr_get(WINDOW *);\fR
+\fBint wattr_get(WINDOW *win, attr_t *attrs, short *pair,\fR
+ \fBvoid *opts);\fR
.br
-\fBint attr_off(attr_t attrs);\fR
+\fBint attr_off(attr_t attrs, void *opts);\fR
.br
-\fBint wattr_off(WINDOW *, attr_t attrs);\fR
+\fBint wattr_off(WINDOW *win, attr_t attrs, void *opts);\fR
.br
-\fBint attr_on(attr_t attrs);\fR
+\fBint attr_on(attr_t attrs, void *opts);\fR
.br
-\fBint wattr_on(WINDOW *, attr_t attrs);\fR
+\fBint wattr_on(WINDOW *win, attr_t attrs, void *opts);\fR
.br
-\fBint attr_set(attr_t attrs);\fR
+\fBint attr_set(attr_t attrs, void *opts);\fR
.br
-\fBint wattr_set(WINDOW *, attr_t attrs);\fR
+\fBint wattr_set(WINDOW *win, attr_t attrs, void *opts);\fR
.br
-\fBint chgat(int n, attr_t attr, short color, const void *opts)\fR
+\fBint chgat(int n, attr_t attr, short color,\fR
+ \fBconst void *opts)\fR
.br
-\fBint wchgat(WINDOW *, int n, attr_t attr,
- short color, const void *opts)\fR
+\fBint wchgat(WINDOW *win, int n, attr_t attr,\fR
+ \fBshort color, const void *opts)\fR
.br
-\fBint mvchgat(int y, int x, int n, attr_t attr,
- short color, const void *opts)\fR
+\fBint mvchgat(int y, int x, int n, attr_t attr,\fR
+ \fBshort color, const void *opts)\fR
.br
-\fBint mvwchgat(WINDOW *, int y, int x, int n, attr_t attr,
- short color, const void *opts)\fR
+\fBint mvwchgat(WINDOW *win, int y, int x, int n,\fR
+ \fBattr_t attr, short color, const void *opts)\fR
.br
.SH DESCRIPTION
These routines manipulate the current attributes of the named window. The
as \fBattrset(A_NORMAL)\fR or \fBattrset(0)\fR, that is, it turns off all
attributes.
-The routine \fBwattr_get\fR returns the current attribute for the given
-window; \fBattr_get\fR returns the current attribute for \fBstdscr\fR.
+The routine \fBcolor_set\fR sets the current color of the given window to the
+foreground/background combination described by the color_pair_number. The
+parameter opts is reserved for future use, applications must supply a null
+pointer.
+
+The routine \fBwattr_get\fR returns the current attribute and color pair for
+the given window; \fBattr_get\fR returns the current attribute and color pair
+for \fBstdscr\fR.
The remaining \fBattr_\fR* functions operate exactly like the corresponding
\fBattr\fR* functions, except that they take arguments of type \fBattr_t\fR
rather than \fBint\fR.
The following macro is the reverse of \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR:
.DS C
-\fBPAIR_NUMBER(\fIattrs\fR) Returns the pair number associated
+\fBPAIR_NUMBER(\fR\fIattrs\fR) Returns the pair number associated
with the \fBCOLOR_PAIR(\fR\fIn\fR\fB)\fR attribute.
.DE
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_beep.3x,v 1.7 1998/03/11 21:12:53 juergen Exp $
.TH curs_beep 3X ""
.SH NAME
\fBbeep\fR, \fBflash\fR - \fBcurses\fR bell and screen flash routines
-.\" $Id: curs_bkgd.3x,v 1.10 1996/07/20 23:48:30 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_bkgd.3x,v 1.12 1998/03/14 23:43:31 tom Exp $
.TH curs_bkgd 3X ""
-.
.SH NAME
\fBbkgdset\fR, \fBwbkgdset\fR, \fBbkgd\fR,
\fBwbkgd\fR - \fBcurses\fR window background manipulation routines
-.
+..
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
\fBchtype getbkgd(WINDOW *win);\fR
.br
-.
+..
.SH DESCRIPTION
The \fBbkgdset\fR and \fBwbkgdset\fR routines manipulate the
background of the named window.
The \fBgetbkgd\fR function returns the given window's current background
character/attribute pair.
-.
+..
.SH RETURN VALUE
The routines \fBbkgd\fR and \fBwbkgd\fR return the integer \fBOK\fR.
The SVr4.0 manual says "or a non-negative integer if \fBimmedok\fR is set",
but this appears to be an error.
-.
+..
.SH NOTES
Note that \fBbkgdset\fR and \fBbkgd\fR may be macros.
-.
+..
.SH PORTABILITY
These functions are described in the XSI Curses standard, Issue 4. The draft
does not include \fBconst\fR qualifiers on the arguments. The standard
specifies that \fBbkgd\fR and \fBwbkgd\fR return \fBERR\fR, on failure. but
gives no failure conditions.
-.
+..
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_addch\fR(3X), \fBcurs_outopts\fR(3X)
.\"#
-.\" $Id: curs_border.3x,v 1.8 1996/08/04 00:29:11 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_border.3x,v 1.11 1999/01/30 23:11:47 tom Exp $
.TH curs_border 3X ""
.SH NAME
\fBborder\fR, \fBwborder\fR, \fBbox\fR,
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
-\fBint border(chtype ls, chtype rs, chtype ts, chtype bs,
- chtype tl, chtype tr, chtype bl, chtype br);\fR
+\fBint border(chtype ls, chtype rs, chtype ts, chtype bs,\fR
+ \fBchtype tl, chtype tr, chtype bl, chtype br);\fR
.br
-\fBint wborder(WINDOW *win, chtype ls, chtype rs,
- chtype ts, chtype bs, chtype tl, chtype tr,
- chtype bl, chtype br);\fR
+\fBint wborder(WINDOW *win, chtype ls, chtype rs,\fR
+ \fBchtype ts, chtype bs, chtype tl, chtype tr,\fR
+ \fBchtype bl, chtype br);\fR
.br
\fBint box(WINDOW *win, chtype verch, chtype horch);\fR
.br
right-hand corner. If any of these arguments is zero, then the following
default values (defined in \fBcurses.h\fR) are used instead: \fBACS_VLINE\fR,
\fBACS_VLINE\fR, \fBACS_HLINE\fR, \fBACS_HLINE\fR, \fB\fBACS_ULCORNER\fR,
-\fBACS_URCORNER\fR, \fBACS_BLCORNER\fR, \fBACS_BRCORNER\fR.
+\fBACS_URCORNER\fR, \fBACS_LLCORNER\fR, \fBACS_LRCORNER\fR.
\fBbox(\fR\fIwin\fR\fB, \fR\fIverch\fR\fB, \fR\fIhorch\fR\fB)\fR is a shorthand
for the following call: \fBwborder(\fR\fIwin\fR\fB,\fR \fIverch\fR\fB,\fR
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_clear.3x,v 1.7 1998/03/11 21:12:53 juergen Exp $
.TH curs_clear 3X ""
.SH NAME
\fBerase\fR, \fBwerase\fR, \fBclear\fR,
-.\" $Id: curs_color.3x,v 1.9 1997/12/06 22:06:00 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_color.3x,v 1.10 1998/03/11 21:12:53 juergen Exp $
.TH curs_color 3X ""
.SH NAME
\fBstart_color\fR, \fBinit_pair\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_delch.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_delch 3X ""
.SH NAME
\fBdelch\fR, \fBwdelch\fR, \fBmvdelch\fR, \fBmvwdelch\fR -
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_deleteln.3x,v 1.5 1999/02/07 03:58:20 tom Exp $
.TH curs_deleteln 3X ""
.SH NAME
\fBdeleteln\fR, \fBwdeleteln\fR, \fBinsdelln\fR,
standard specifies that they return \fBERR\fR on failure, but specifies no
error conditions.
.SH NOTES
-Note that all but \fBwinsdelln\fR may be a macros.
+Note that all but \fBwinsdelln\fR may be macros.
These routines do not require a hardware line delete or insert feature in the
terminal. In fact, they won't use hardware line delete/insert unless
'\" t
-.\" $Id: curs_getch.3x,v 1.12 1997/12/13 22:39:05 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_getch.3x,v 1.15 1998/11/29 01:04:26 Rick.Ohnemus Exp $
.TH curs_getch 3X ""
.SH NAME
\fBgetch\fR, \fBwgetch\fR, \fBmvgetch\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_getstr.3x,v 1.7 1998/03/11 21:12:53 juergen Exp $
.TH curs_getstr 3X ""
.SH NAME
\fBgetstr\fR, \fBwgetstr\fR, \fBmvgetstr\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_getyx.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_getyx 3X ""
.SH NAME
\fBgetyx\fR, \fBgetparyx\fR, \fBgetbegyx\fR,
'\" t
-.\" $Id: curs_inch.3x,v 1.8 1997/12/13 22:36:42 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_inch.3x,v 1.11 1998/11/29 01:04:34 Rick.Ohnemus Exp $
.TH curs_inch 3X ""
.SH NAME
\fBinch\fR, \fBwinch\fR, \fBmvinch\fR, \fBmvwinch\fR
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_inchstr.3x,v 1.7 1998/03/11 21:12:53 juergen Exp $
.TH curs_inchstr 3X ""
.SH NAME
\fBinchstr\fR, \fBinchnstr\fR, \fBwinchstr\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_initscr.3x,v 1.8 1999/09/18 23:52:30 tom Exp $
.TH curs_initscr 3X ""
.SH NAME
\fBinitscr\fR, \fBnewterm\fR, \fBendwin\fR,
These functions are described in the XSI Curses standard, Issue 4. It
specifies that portable applications must not call \fBinitscr\fR more than
once.
+
+Old versions of curses, e.g., BSD 4.4, may have returned a null pointer
+from \fBinitscr\fR when an error is detected, rather than exiting.
+It is safe but redundant to check the return value of \fBinitscr\fR
+in XSI Curses.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_kernel\fR(3X), \fBcurs_refresh\fR(3X),
\fBcurs_slk\fR(3X), \fBcurs_util\fR(3X)
-.\" $Id: curs_inopts.3x,v 1.7 1997/12/14 01:12:04 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_inopts.3x,v 1.8 1998/03/11 21:12:53 juergen Exp $
.TH curs_inopts 3X ""
.SH NAME
\fBcbreak\fR, \fBnocbreak\fR, \fBecho\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_insch.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_insch 3X ""
.SH NAME
\fBinsch\fR, \fBwinsch\fR, \fBmvinsch\fR, \fBmvwinsch\fR -
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_insstr.3x,v 1.10 1998/07/25 20:32:57 Todd.Miller Exp $
.TH curs_insstr 3X ""
.SH NAME
\fBinsstr\fR, \fBinsnstr\fR, \fBwinsstr\fR, \fBwinsnstr\fR,
control character, it is drawn in the \fB^\fR\fIX\fR notation.
Calling \fBwinch\fR after adding a control character (and moving to
it, if necessary) does not return the control character, but instead
-returns a character in the the ^-representation of the control character.
+returns a character in the ^-representation of the control character.
.SH RETURN VALUE
All routines that return an integer return \fBERR\fR upon failure and OK (SVr4
specifies only "an integer value other than \fBERR\fR") upon successful
-.\" $Id: curs_instr.3x,v 1.7 1997/03/15 23:25:24 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_instr.3x,v 1.8 1998/03/11 21:12:53 juergen Exp $
.TH curs_instr 3X ""
.SH NAME
\fBinstr\fR, \fBinnstr\fR, \fBwinstr\fR, \fBwinnstr\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_kernel.3x,v 1.11 1998/06/27 21:56:38 tom Exp $
.TH curs_kernel 3X ""
.SH NAME
\fBdef_prog_mode\fR, \fBdef_shell_mode\fR,
Note that \fBgetsyx\fR is a macro, so \fB&\fR is not necessary before
the variables \fIy\fR and \fIx\fR.
-The SVr4 man pages warn that the return value of \fBcurs_set\fR "is currently
+Older SVr4 man pages warn that the return value of \fBcurs_set\fR "is currently
incorrect". This implementation gets it right, but it may be unwise to count
on the correctness of the return value anywhere else.
.SH PORTABILITY
'\" t
-.'" $Id: curs_mouse.3x,v 0.7 1997/12/13 22:36:24 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998,1999 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: curs_mouse.3x,v 1.13 1999/09/11 17:28:28 tom Exp $
.TH curs_mouse 3X ""
.SH NAME
-\fBgetmouse\fR, \fBungetmouse\fR,
-\fBmousemask\fR - mouse interface through curses
+\fBgetmouse\fR, \fBungetmouse\fR,
+\fBmousemask\fR, \fBwenclose\fR,
+\fBwmouse_trafo\fR, \fBmouseinterval\fR - mouse interface through curses
.SH SYNOPSIS
.nf
\fB#include <curses.h>\fR
.br
\fBmmask_t mousemask(mmask_t newmask, mmask_t *oldmask);\fR
.br
-\fBbool wenclose(WINDOW *win, int y, int x)\fR
+\fBbool wenclose(WINDOW *win, int y, int x);\fR
.br
-\fBint mouseinterval(int erval)\fR
+\fBbool wmouse_trafo(const WINDOW* win, int* pY, int* pX, bool to_screen);\fR
+.br
+\fBint mouseinterval(int erval);\fR
.br
.SH DESCRIPTION
These functions provide an interface to mouse events from
_ _
l l.
\fIName\fR \fIDescription\fR
-BUTTON1_PRESSED mouse button 1 down
-BUTTON1_RELEASED mouse button 1 up
+BUTTON1_PRESSED mouse button 1 down
+BUTTON1_RELEASED mouse button 1 up
BUTTON1_CLICKED mouse button 1 clicked
BUTTON1_DOUBLE_CLICKED mouse button 1 double clicked
BUTTON1_TRIPLE_CLICKED mouse button 1 triple clicked
-BUTTON2_PRESSED mouse button 2 down
-BUTTON2_RELEASED mouse button 2 up
+BUTTON2_PRESSED mouse button 2 down
+BUTTON2_RELEASED mouse button 2 up
BUTTON2_CLICKED mouse button 2 clicked
BUTTON2_DOUBLE_CLICKED mouse button 2 double clicked
BUTTON2_TRIPLE_CLICKED mouse button 2 triple clicked
-BUTTON3_PRESSED mouse button 3 down
-BUTTON3_RELEASED mouse button 3 up
+BUTTON3_PRESSED mouse button 3 down
+BUTTON3_RELEASED mouse button 3 up
BUTTON3_CLICKED mouse button 3 clicked
BUTTON3_DOUBLE_CLICKED mouse button 3 double clicked
BUTTON3_TRIPLE_CLICKED mouse button 3 triple clicked
-BUTTON4_PRESSED mouse button 4 down
-BUTTON4_RELEASED mouse button 4 up
+BUTTON4_PRESSED mouse button 4 down
+BUTTON4_RELEASED mouse button 4 up
BUTTON4_CLICKED mouse button 4 clicked
BUTTON4_DOUBLE_CLICKED mouse button 4 double clicked
BUTTON4_TRIPLE_CLICKED mouse button 4 triple clicked
if it is and FALSE otherwise. It is useful for determining what subset of
the screen windows enclose the location of a mouse event.
+The \fBwmouse_trafo\fR function transforms a given pair of coordinates from
+stdscr-relative coordinates to screen-relative coordinates or vice versa.
+Please remember, that stdscr-relative coordinates are not always identical
+to screen-relative coordinates due to the mechanism to reserve lines on top
+or bottom of the screen for other purposes (ripoff() call, see also slk_...
+functions). If the parameter \fBto_screen\fR is \fBTRUE\fR, the pointers
+\fBpY, pX\fR must reference the coordinates of a location inside the window
+\fBwin\fR. They are converted to screen-relative coordinates and returned
+through the pointers. If the conversion was successful, the function
+returns \fBTRUE\fR. If one of the parameters was NULL or the location is
+not inside the window, \fBFALSE\fR is returned. If \fBto_screen\fR is
+\fBFALSE\fR, the pointers \fBpY, pX\fR must reference screen-relative
+coordinates. They are converted to stdscr-relative coordinates if the
+window \fBwin\fR encloses this point. In this case the function returns
+\fBTRUE\fR. If one of the parameters is NULL or the point is not inside the
+window, \fBFALSE\fR is returned. Please notice, that the referenced coordinates
+are only replaced by the converted coordinates if the transformation was
+successful.
+
The \fBmouseinterval\fR function sets the maximum time (in thousands of a
second) that can elapse between press and release events in order for them to
be recognized as a click. This function returns the previous interval value.
termination.
.SH RETURN VALUE
-All routines return the integer \fBERR\fR upon failure or \fBOK\fR
-upon successful completion.
+\fBgetmouse\fR, \fBungetmouse\fR and \fBmouseinterval\fR
+return the integer \fBERR\fR upon failure or \fBOK\fR
+upon successful completion. \fBmousemask\fR returns the
+mask of reportable events. \fBwenclose\fR and \fBwmouse_trafo\fR
+are boolean functions returning \fBTRUE\fR or \fBFALSE\fR depending
+on their test result.
.SH PORTABILITY
These calls were designed for \fBncurses\fR(3X), and are not found in SVr4
curses, 4.4BSD curses, or any other previous version of curses.
The feature macro \fBNCURSES_MOUSE_VERSION\fR is provided so the preprocessor
-can be used to test whether these features are present (its value is 1). NOTE:
-THIS INTERFACE IS EXPERIMENTAL AND IS SUBJECT TO CHANGE WITHOUT NOTICE! If the
-interface is changed, the value of \fBNCURSES_MOUSE_VERSION\fR will be
+can be used to test whether these features are present (its value is 1).
+If the interface is changed, the value of \fBNCURSES_MOUSE_VERSION\fR will be
incremented.
-The order of the \fBMEVENT\fR structure members is not guaranteed.
+The order of the \fBMEVENT\fR structure members is not guaranteed.
Additional fields may be added to the structure in the future.
Under \fBncurses\fR(3X), these calls are implemented using either
xterm's built-in mouse-tracking API or Alessandro Rubini's gpm server.
-If you are using something other than xterm there is no gpm daemon
+If you are using something other than xterm and there is no gpm daemon
running on your machine, mouse events will not be visible to
\fBncurses\fR(3X) (and the \fBwmousemask\fR function will always
return \fB0\fR).
report sequence will appear in the string read.
Mouse events under xterm will not be detected correctly in a window with
-its keypad bit off.
+its keypad bit off, since they are interpreted as a variety of function key.
+Your terminfo description must have \fBkmous\fR set to "\\E[M" (the beginning
+of the response from xterm for mouse clicks).
+
+Because there are no standard terminal responses that would serve to identify
+terminals which support the xterm mouse protocol, \fBncurses\fR assumes that
+if your $DISPLAY environment variable is set, and \fBkmous\fR is defined in
+the terminal description, then the terminal may send mouse events.
.SH SEE ALSO
\fBcurses\fR(3X).
.\"#
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_move.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_move 3X ""
.SH NAME
\fBmove\fR, \fBwmove\fR - move \fBcurses\fR window cursor
-.\" $Id: curs_outopts.3x,v 1.10 1998/02/07 21:56:39 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_outopts.3x,v 1.13 1998/12/26 20:02:04 tom Exp $
.TH curs_outopts 3X ""
.SH NAME
\fBclearok\fR, \fBidlok\fR, \fBidcok immedok\fR,
The \fBnl\fR and \fBnonl\fR routines control whether the underlying display
device translates the return key into newline on input, and whether it
translates newline into return and line-feed on output (in either case, the
-call \fBaddch('\n')\fR does the equivalent of return and line feed on the
+call \fBaddch('\\n')\fR does the equivalent of return and line feed on the
virtual screen). Initially, these translations do occur. If you disable them
using \fBnonl\fR, \fBcurses\fR will be able to make better use of the line-feed
capability, resulting in faster cursor motion. Also, \fBcurses\fR will then be
The XSI Curses standard does not mention that the cursor should be
made invisible as a side-effect of \fBleaveok\fR.
-SVr4 curses does this.
+SVr4 curses documentation does this, but the code does not.
.SH NOTES
Note that \fBclearok\fR, \fBleaveok\fR, \fBscrollok\fR, \fBidcok\fR, \fBnl\fR,
\fBnonl\fR and \fBsetscrreg\fR may be macros.
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_overlay.3x,v 1.8 1998/12/26 20:08:30 tom Exp $
.TH curs_overlay 3X ""
.SH NAME
\fBoverlay\fR, \fBoverwrite\fR, \fBcopywin\fR - overlay and
.br
\fBint overwrite(const WINDOW *srcwin, WINDOW *dstwin);\fR
.br
-\fBint copywin(WINDOW *srcwin, WINDOW *dstwin, int sminrow,
- int smincol, int dminrow, int dmincol, int dmaxrow,
- int dmaxcol, int overlay);\fR
+\fBint copywin(WINDOW *srcwin, WINDOW *dstwin, int sminrow,\fR
+ \fBint smincol, int dminrow, int dmincol, int dmaxrow,\fR
+ \fBint dmaxcol, int overlay);\fR
.SH DESCRIPTION
The \fBoverlay\fR and \fBoverwrite\fR routines overlay \fIsrcwin\fR on
top of \fIdstwin\fR. \fIscrwin\fR and \fIdstwin\fR are not required
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_pad.3x,v 1.8 1998/12/26 20:09:03 tom Exp $
.TH curs_pad 3X ""
.SH NAME
\fBnewpad\fR, \fBsubpad\fR, \fBprefresh\fR,
\fBWINDOW *newpad(int nlines, int ncols);\fR
.br
-\fBWINDOW *subpad(WINDOW *orig, int nlines, int ncols,
- int begin_y, int begin_x);\fR
+\fBWINDOW *subpad(WINDOW *orig, int nlines, int ncols,\fR
+ \fBint begin_y, int begin_x);\fR
.br
-\fBint prefresh(WINDOW *pad, int pminrow, int pmincol,
- int sminrow, int smincol, int smaxrow, int smaxcol);\fR
+\fBint prefresh(WINDOW *pad, int pminrow, int pmincol,\fR
+ \fBint sminrow, int smincol, int smaxrow, int smaxcol);\fR
.br
-\fBint pnoutrefresh(WINDOW *pad, int pminrow, int pmincol,
- int sminrow, int smincol, int smaxrow, int smaxcol);\fR
+\fBint pnoutrefresh(WINDOW *pad, int pminrow, int pmincol,\fR
+ \fBint sminrow, int smincol, int smaxrow, int smaxcol);\fR
.br
\fBint pechochar(WINDOW *pad, chtype ch);\fR
.SH DESCRIPTION
-.'" $Id: curs_print.3x,v 1.2 1997/12/06 22:07:19 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_print.3x,v 1.3 1998/03/11 21:12:53 juergen Exp $
.TH curs_print 3X ""
.SH NAME
\fBmcprint\fR - ship binary data to printer
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_printw.3x,v 1.8 1998/12/26 20:09:36 tom Exp $
.TH curs_printw 3X ""
.SH NAME
\fBprintw\fR, \fBwprintw\fR, \fBmvprintw\fR,
.br
\fBint mvprintw(int y, int x, char *fmt\fR [\fB, arg\fR] \fB...);\fR
.br
-\fBint mvwprintw(WINDOW *win, int y, int x,
+\fBint mvwprintw(WINDOW *win, int y, int x,\fR
\fBchar *fmt\fR [\fB, arg]\fR ...);
\fB#include <varargs.h>\fR
-.\" $Id: curs_refresh.3x,v 1.6 1997/11/29 20:11:26 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_refresh.3x,v 1.7 1998/03/11 21:12:53 juergen Exp $
.TH curs_refresh 3X ""
.SH NAME
\fBrefresh\fR, \fBwrefresh\fR, \fBwnoutrefresh\fR,
-.\" $Id: curs_scanw.3x,v 1.6 1997/12/14 01:04:36 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_scanw.3x,v 1.8 1998/12/26 20:10:12 tom Exp $
.TH curs_scanw 3X ""
.SH NAME
\fBscanw\fR, \fBwscanw\fR, \fBmvscanw\fR,
.br
\fBint mvscanw(int y, int x, char *fmt\fR [\fB, arg\fR] \fB...);\fR
.br
-\fBint mvwscanw(WINDOW *win, int y, int x,
- char *fmt\fR [\fB, arg]\fR \fB...);\fR
+\fBint mvwscanw(WINDOW *win, int y, int x,\fR
+ \fBchar *fmt\fR [\fB, arg]\fR \fB...);\fR
.br
\fBint vwscanw(WINDOW *win, char *fmt, va_list varglist);\fR
.SH DESCRIPTION
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_scr_dump.3x,v 1.1 1998/03/11 21:12:53 tom Exp $
.TH curs_scr_dump 3X ""
.SH NAME
\fBscr_dump\fR, \fBscr_restore\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_scroll.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_scroll 3X ""
.SH NAME
\fBscroll\fR, \fBsrcl\fR, \fBwscrl\fR - scroll a \fBcurses\fR window
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_slk.3x,v 1.9 1998/03/11 21:12:53 juergen Exp $
.TH curs_slk 3X ""
.SH NAME
\fBslk_init\fR, \fBslk_set\fR, \fBslk_refresh\fR,
\fBslk_noutrefresh\fR, \fBslk_label\fR, \fBslk_clear\fR, \fBslk_restore\fR,
-\fBslk_touch\fR, \fBslk_attron\fR, \fBslk_attrset\fR, \fBslk_attroff\fR -
+\fBslk_touch\fR, \fBslk_attron\fR, \fBslk_attrset\fR, \fBslk_attroff\fR, \fBslk_color\fR -
\fBcurses\fR soft label routines
.SH SYNOPSIS
\fB#include <curses.h>\fR
.br
\fBint slk_touch(void);\fR
.br
-\fBint slk_attron(attr_t attrs);\fR
+\fBint slk_attron(const chtype attrs);\fR
.br
-\fBint slk_attrset(attr_t attrs);\fR
+\fBint slk_attrset(const chtype attrs);\fR
.br
\fBattr_t slk_attr(void);\fR
.br
-\fBint slk_attroff(attr_t attrs);\fR
+\fBint slk_attroff(const chtype attrs);\fR
+.br
+\fBint slk_color(short color_pair_number);\fR
.br
.SH DESCRIPTION
The slk* functions manipulate the set of soft function-key labels that exist on
They have an effect only if soft labels are simulated on the bottom line of
the screen. The default highlight for soft keys is A_STANDOUT (as in
System V curses, which does not document this fact).
+
+The \fBslk_color\fR routine corresponds to \fBcolor_set\fR. It has an effect only
+if soft labels are simulated on the bottom line of the screen.
+
.SH RETURN VALUE
These routines return \fBERR\fR upon failure and OK (SVr4 specifies only "an
integer value other than \fBERR\fR") upon successful completion. \fBslk_attr\fR
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_termattrs.3x,v 1.4 1998/03/11 21:12:53 juergen Exp $
.TH curs_termattrs 3X ""
.SH NAME
\fBbaudrate\fR, \fBerasechar\fR, \fBhas_ic\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_termcap.3x,v 1.12 1999/09/05 01:02:07 tom Exp $
.TH curs_termcap 3X ""
.ds n 5
.SH NAME
terminfo database could not be found.
The emulation ignores the buffer pointer \fIbp\fR.
-The \fBtgetflag\fR routine gets the boolean entry for \fIid\fR.
+The \fBtgetflag\fR routine gets the boolean entry for \fIid\fR,
+or zero if it is not available.
-The \fBtgetnum\fR routine gets the numeric entry for \fIid\fR.
+The \fBtgetnum\fR routine gets the numeric entry for \fIid\fR,
+or -1 if it is not available.
-The \fBtgetstr\fR routine returns the string entry for \fIid\fR. Use
-\fBtputs\fR to output the returned string.
+The \fBtgetstr\fR routine returns the string entry for \fIid\fR,
+or zero if it is not available.
+Use \fBtputs\fR to output the returned string.
+The return value will also be copied to the buffer pointed to by \fIarea\fR,
+and the \fIarea\fR value will be updated to point past the null ending
+this value.
The \fBtgoto\fR routine instantiates the parameters into the given capability.
The output from this routine is to be passed to \fBtputs\fR.
-.\" $Id: curs_terminfo.3x,v 1.7 1997/08/30 12:48:49 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1999 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: curs_terminfo.3x,v 1.12 1999/10/17 01:11:59 tom Exp $
.TH curs_terminfo 3X ""
.ds n 5
.SH NAME
initializing the \fBterminfo\fR structures, but does not set up the
output virtualization structures used by \fBcurses\fR. The terminal
type is the character string \fIterm\fR; if \fIterm\fR is null, the
-environment variable \fBTERM\fR is used. All output is to file
-descriptor \fBfildes\fR which is initialized for output. If
-\fIerrret\fR is not null, then \fBsetupterm\fR returns \fBOK\fR or
+environment variable \fBTERM\fR is used.
+All output is to file descriptor \fBfildes\fR which is initialized for output.
+If \fIerrret\fR is not null,
+then \fBsetupterm\fR returns \fBOK\fR or
\fBERR\fR and stores a status value in the integer pointed to by
-\fIerrret\fR. A status of \fB1\fR in \fIerrret\fR is normal, \fB0\fR
-means that the terminal could not be found, and \fB-1\fR means that
-the \fBterminfo\fR database could not be found. If \fIerrret\fR is
+\fIerrret\fR.
+A return value of \fBOK\fR combined with status of \fB1\fR in \fIerrret\fR
+is normal.
+If \fBERR\fR is returned, examine \fIerrret\fR:
+.RS
+.TP 5
+.B 1
+means that the terminal is hardcopy, cannot be used for curses applications.
+.TP 5
+.B 0
+means that the terminal could not be found,
+or that it is a generic type,
+having too little information for curses applications to run.
+.TP 5
+.B -1
+means that the \fBterminfo\fR database could not be found.
+.RE
+.PP
+If \fIerrret\fR is
null, \fBsetupterm\fR prints an error message upon finding an error
and exits. Thus, the simplest call is:
\fIcapname\fR passed to them, such as \fBxenl\fR.
The \fBtigetflag\fR routine returns the value \fB-1\fR if
-\fIcapname\fR is not a boolean capability.
+\fIcapname\fR is not a boolean capability,
+or \fB0\fR if it is canceled or absent from the terminal description.
The \fBtigetnum\fR routine returns the value \fB-2\fR if
-\fIcapname\fR is not a numeric capability.
+\fIcapname\fR is not a numeric capability,
+or \fB-1\fR if it is canceled or absent from the terminal description.
The \fBtigetstr\fR routine returns the value \fB(char *)-1\fR
-if \fIcapname\fR is not a string capability.
+if \fIcapname\fR is not a string capability,
+or \fB0\fR if it is canceled or absent from the terminal description.
The \fIcapname\fR for each capability is given in the table column entitled
\fIcapname\fR code in the capabilities section of \fBterminfo\fR(\*n).
The XSI Curses standard prototypes \fBtparm\fR with a fixed number of parameters,
rather than a variable argument list.
+
+XSI notes that after calling \fBmvcur\fR, the curses state may not match the
+actual terminal state, and that an application should touch and refresh
+the window before resuming normal curses calls.
+Both ncurses and System V Release 4 curses implement \fBmvcur\fR using
+the SCREEN data allocated in either \fBinitscr\fR or \fBnewterm\fR.
+So though it is documented as a terminfo function,
+\fBmvcur\fR is really a curses function which is not well specified.
.SH SEE ALSO
\fBcurses\fR(3X), \fBcurs_initscr\fR(3X), \fBcurs_kernel\fR(3X), \fBcurs_termcap\fR(3X),
\fBputc\fR(3S), \fBterminfo\fR(\*n)
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_touch.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_touch 3X ""
.SH NAME
\fBtouchwin\fR, \fBtouchline\fR, \fBuntouchwin\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_util.3x,v 1.6 1998/03/11 21:12:53 juergen Exp $
.TH curs_util 3X ""
.SH NAME
\fBunctrl\fR, \fBkeyname\fR, \fBfilter\fR,
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: curs_window.3x,v 1.8 1999/03/20 22:38:46 tom Exp $
.TH curs_window 3X ""
.SH NAME
\fBnewwin\fR, \fBdelwin\fR, \fBmvwin\fR,
\fB#include <curses.h>\fR
\fBWINDOW *newwin(int nlines, int ncols, int begin_y,\fR
- \fBintbegin_x);\fR
+ \fBint begin_x);\fR
.br
\fBint delwin(WINDOW *win);\fR
.br
\fBint mvwin(WINDOW *win, int y, int x);\fR
.br
-\fBWINDOW *subwin(WINDOW *orig, int nlines, int ncols,
- int begin_y, int begin_x);\fR
+\fBWINDOW *subwin(WINDOW *orig, int nlines, int ncols,\fR
+ \fBint begin_y, int begin_x);\fR
.br
-\fBWINDOW *derwin(WINDOW *orig, int nlines, int ncols,
- int begin_y, int begin_x);\fR
+\fBWINDOW *derwin(WINDOW *orig, int nlines, int ncols,\fR
+ \fBint begin_y, int begin_x);\fR
.br
\fBint mvderwin(WINDOW *win, int par_y, int par_x);\fR
.br
.\"
.\" Author: Thomas E. Dickey <dickey@clark.net> 1997
.\"
-.\" $Id: define_key.3x,v 1.4 1998/02/11 12:13:48 tom Exp $
+.\" $Id: define_key.3x,v 1.6 1999/02/19 11:43:17 tom Exp $
.TH define_key 3X ""
-.
.SH NAME
\fBdefine_key\fP \- define a keycode
-.
+..
.SH SYNOPSIS
\fB#include <curses.h>\fP
\fBint define_key(char *definition, int keycode);\fP
-.
+..
.SH DESCRIPTION
This is an extension to the curses library.
It permits an application to define keycodes with their corresponding control
.PP
If the given string is null, any existing definition for the keycode is
removed.
-.
+Similarly, if the given keycode is negative or zero, any existing string
+for the given definition is removed.
+..
.SH RETURN VALUE
The keycode must be greater than zero, else ERR is returned.
-.
+..
.SH PORTABILITY
These routines are specific to ncurses. They were not supported on
Version 7, BSD or System V implementations. It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
-.
+..
.SH SEE ALSO
\fBkeyok\fR(3X).
-.
+..
.SH AUTHOR
Thomas Dickey.
.\"#
.\"
.\" Author: Thomas E. Dickey <dickey@clark.net> 1997
.\"
-.\" $Id: dft_fgbg.3x,v 1.5 1998/02/11 12:13:48 tom Exp $
+.\" $Id: dft_fgbg.3x,v 1.6 1998/03/14 23:43:15 tom Exp $
.TH use_default_colors 3X ""
-.
.SH NAME
\fBdft_fgbg\fR \- use terminal's default colors
-.
+..
.SH SYNOPSIS
\fB#include <curses.h>\fP
\fBint use_default_colors(void);\fP
-.
+..
.SH DESCRIPTION
This is an extension to the curses library.
It is used with terminals that support ISO 6429 color, or equivalent.
are not adversely impacted by this type of terminal design.
However, there are applications that are designed to work with
the default background.
-.
+..
.SH RETURN VALUE
The function returns the integer \fBERR\fP upon failure and \fBOK\fP on success.
It will fail if either the terminal does not support
the \fIorig_pair\fP or \fIorig_colors\fP capability.
If the \fIinitialize_pair\fP capability is found, this causes an
error as well.
-.
+..
.SH NOTES
Associated with this extension, the \fBinit_pair\fR(3X) function accepts
negative arguments to specify default foreground or background
colors.
-.
+..
.SH PORTABILITY
These routines are specific to ncurses. They were not supported on
Version 7, BSD or System V implementations. It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
-.
+..
.SH SEE ALSO
\fBcurs_color\fR(3X),
\fBded\fP(1).
-.
+..
.SH AUTHOR
Thomas Dickey (from an analysis of the requirements for color xterm
for XFree86 3.1.2C, February 1996).
'\" t
-.\" $Id: form.3x,v 0.8 1997/12/14 01:44:04 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form.3x,v 1.13 1999/07/10 21:53:03 tom Exp $
.TH form 3X ""
.SH NAME
\fBform\fR - curses extension for programming forms
.SS Current Default Values for Field Attributes
The \fBform\fR library maintains a default value for field attributes. You
-can get or set this default by calling the appropriate \fBget_\fR or \fBset_\fR
+can get or set this default by calling the appropriate \fBset_\fR
+or retrieval
routine with a \fBNULL\fR field pointer. Changing this default with a
\fBset_\fR function affects future field creations, but does not change the
rendering of fields already created.
The following table lists each \fBform\fR routine and the name of
the manual page on which it is described.
-.TS
+.TS
l l
l l .
\fBcurses\fR Routine Name Manual Page Name
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_cursor.3x,v 1.4 1998/11/29 01:05:43 Rick.Ohnemus Exp $
.TH form_cursor 3X ""
.SH NAME
\fBform_cursor\fR - position a form window cursor
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_data.3x,v 1.7 1998/11/29 01:13:22 Rick.Ohnemus Exp $
.TH form_data 3X ""
.SH NAME
-\fBform_data\fR -
+\fBform_data\fR - test for off-screen data in given forms
.SH SYNOPSIS
\fB#include <form.h>\fR
.br
-.'" $Id: form_driver.3x,v 0.5 1997/12/14 01:26:33 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_driver.3x,v 1.7 1999/07/10 23:13:18 tom Exp $
.TH form_driver 3X ""
.SH NAME
\fBform_driver\fR - command-processing loop of the form system
requests listed above, that request is executed.
.PP
If the second argument is neither printable ASCII nor one of the above
-pre-defined form requests, the drive assumes it is an application-specific
+pre-defined form requests, the driver assumes it is an application-specific
command and returns \fBE_UNKNOWN_COMMAND\fR. Application-defined commands
should be defined relative to \fBMAX_COMMAND\fR, the maximum value of these
pre-defined requests.
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field.3x,v 1.5 1998/11/29 01:05:52 Rick.Ohnemus Exp $
.TH form_field 3X ""
.SH NAME
\fBform_field\fR - make and break connections between fields and forms
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_attributes.3x,v 1.5 1998/11/29 01:06:02 Rick.Ohnemus Exp $
.TH form_field_attributes 3X ""
.SH NAME
\fBform_field_attributes\fR - color and attribute control for form fields
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_buffer.3x,v 1.8 1999/06/16 00:37:09 juergen Exp $
.TH form_field_buffer 3X ""
.SH NAME
\fBform_field_buffer\fR - field buffer control
to contain a given string. Buffer 0 is the displayed value of the field; other
numbered buffers may be allocated by applications through the \fBnbuf\fR
argument of (see \fBform_field_new\fR(3X)) but are not manipulated by the forms
-library. The function \fBfield_buffer\fR returns the foreground attribute.
+library. The function \fBfield_buffer\fR returns the address of the buffer.
+Please note that this buffer has always the length of the buffer, that means
+that it may typically contain trailing spaces. If you entered leading spaces
+the buffer may also contain them. If you want the raw data, you must write your
+own routine that copies the value out of the buffer and removes the leading
+and trailing spaces. Please note also, that subsequent operations on the form
+will probably change the content of the buffer. So don't use it for long term
+storage of the entered form data.
-The function \fBset_field_status\fR sets the associated status flag of
-\fIfield\fR; \fBfield_status\fR gets the current value. The status flag
+The function \fBset_field_status\fR sets the associated status flag of
+\fIfield\fR; \fBfield_status\fR gets the current value. The status flag
is set to a nonzero value whenever the field changes.
The function \fBset_max_field\fR sets the maximum size for a dynamic field.
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_info.3x,v 1.5 1998/11/29 01:06:24 Rick.Ohnemus Exp $
.TH form_field_info 3X ""
.SH NAME
\fBform_field_info\fR - retrieve field characteristics
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_just.3x,v 1.5 1998/11/29 01:06:32 Rick.Ohnemus Exp $
.TH form_field_just 3X ""
.SH NAME
\fBform_field_just\fR - retrieve field characteristics
-.'" $Id: form_field_new.3x,v 0.6 1997/12/06 22:07:19 tom Exp $
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_new.3x,v 1.9 1998/11/29 01:06:44 Rick.Ohnemus Exp $
.TH form_field_new 3X ""
.SH NAME
\fBform_field_new\fR - create and destroy form fields
.SH SYNOPSIS
\fB#include <form.h>\fR
.br
-FIELD *new_field(int height, int width,
- int toprow, int leftcol,
+FIELD *new_field(int height, int width,
+ int toprow, int leftcol,
int offscreen, int nbuffers);
.br
FIELD *dup_field(FIELD *field, int toprow, int leftcol);
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_opts.3x,v 1.7 1998/11/29 01:06:54 Rick.Ohnemus Exp $
.TH form_field_opts 3X ""
.SH NAME
\fBform_field_opts\fR - set and get field options
The function \fBfield_opts_off\fR turns off the given option bits, and leaves
others alone.
-The function \fBfield_opts\fR returns the field's current option bits.
+The function \fBfield_opts\fR returns the field's current option bits.
The following options are defined (all are on by default):
.TP 5
O_VISIBLE
The field is displayed. If this option is off, display of the field is
-suppressed,
+suppressed,
.TP 5
O_ACTIVE
The field is visited during processing. If this option is off, the field will
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_userptr.3x,v 1.6 1998/11/29 01:07:05 Rick.Ohnemus Exp $
.TH form_field_userptr 3X ""
.SH NAME
\fBform_field_userptr\fR - associate application data with a form field
(that is, the form-driver code leaves it alone). These functions get and set
that field.
.SH RETURN VALUE
-The function \fBfield_userptr\fR returns \fBNULL\fR on error. The function
+The function \fBfield_userptr\fR returns \fBNULL\fR on error. The function
\fBset_field_userptr\fR returns one of the following:
.TP 5
\fBE_OK\fR
-.'" $Id: form_field_validation.3x,v 0.9 1997/12/06 22:08:27 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_field_validation.3x,v 1.10 1998/03/11 21:12:53 juergen Exp $
.TH form_field_validation 3X ""
.SH NAME
\fBform_field_validation\fR - data type validation for fields
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_fieldtype.3x,v 1.7 1998/11/29 01:07:16 Rick.Ohnemus Exp $
.TH form_field 3X ""
.SH NAME
\fBform_fieldtype\fR - define validation-field types
bool (* const next_choice)(FIELD *, const void *),
bool (* const prev_choice)(FIELD *, const void *));
.br
-FIELDTYPE *link_fieldtype(FIELDTYPE *type1,
+FIELDTYPE *link_fieldtype(FIELDTYPE *type1,
FIELDTYPE *type2);
-.br
+.br
.SH DESCRIPTION
The function \fBnew_fieldtype\fR creates a new field type usable for data
validation. You supply it with \fIfield_check\fR, a predicate to check the
The function \fBfree_fieldtype\fR frees the space allocated for a given
validation type.
-The function \fBset_fieldtype\fR associates three storage-management functions
+The function \fBset_fieldtype\fR associates three storage-management functions
with a field type. The \fImak_arg\fR function is automatically applied to the
list of arguments you give \fBset_field_type\fR when attaching validation
-to a field; its job is to bundle these into an allocated argument-block
+to a field; its job is to bundle these into an allocated argument-block
object which can later be passed to validation predicated. The other two
hook arguments should copy and free argument-block structures. They will
be used by the forms-driver code. You must supply the \fImak_arg\fR function,
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_hook.3x,v 1.6 1999/03/20 22:37:15 Todd.Miller Exp $
.TH form_hook 3X ""
.SH NAME
\fBform_hook\fR - set hooks for automatic invocation by applications
current form init hook, if any (\fBNULL\fR if there is no such hook).
The function \fBset_form_term\fR sets a hook to be called at form-unpost time
-and just before a page change change once it is posted. \fBform_init\fR
+and just before a page change once it is posted. \fBform_init\fR
returns the current form term hook, if any (\fBNULL\fR if there is no such
hook).
.SH RETURN VALUE
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_new.3x,v 1.5 1998/11/29 01:07:37 Rick.Ohnemus Exp $
.TH form_new 3X ""
.SH NAME
\fBform_new\fR - create and destroy forms
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_new_page.3x,v 1.5 1998/11/29 01:07:45 Rick.Ohnemus Exp $
.TH form_new_page 3X ""
.SH NAME
\fBform_new_page\fR - form pagination functions
bool new_page(const FIELD *field);
.br
.SH DESCRIPTION
-The function \fBset_new_page\fR sets or resets a flag marking the given field
+The function \fBset_new_page\fR sets or resets a flag marking the given field
as the beginning of a new page on its form.
The function \fBnew_page\fR is a predicate which tests if a given field marks
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_opts.3x,v 1.6 1998/11/29 01:07:53 Rick.Ohnemus Exp $
.TH form_opts 3X ""
.SH NAME
\fBform_opts\fR - set and get form options
The function \fBform_opts_off\fR turns off the given option bits, and leaves
others alone.
-The function \fBform_opts\fR returns the form's current option bits.
+The function \fBform_opts\fR returns the form's current option bits.
The following options are defined (all are on by default):
.TP 5
O_NL_OVERLOAD
Overload the \fBREQ_NEW_LINE\fR forms driver request so that calling it at the
-end of a field goes to the next field.
+end of a field goes to the next field.
.TP 5
O_BS_OVERLOAD
Overload the \fBREQ_DEL_PREV\fR forms driver request so that calling it at the
-beginning of a field goes to the previous field.
+beginning of a field goes to the previous field.
.SH RETURN VALUE
Except for \fBform_opts\fR, each routine returns one of the following:
.TP 5
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_page.3x,v 1.8 1998/11/29 01:08:02 Rick.Ohnemus Exp $
.TH form_page 3X ""
.SH NAME
\fBform_page\fR - set and get form page number
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_post.3x,v 1.4 1998/11/29 01:08:10 Rick.Ohnemus Exp $
.TH form_post 3X ""
.SH NAME
\fBform_post\fR - write or erase forms from associated subwindows
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_requestname.3x,v 1.6 1998/11/29 01:08:18 Rick.Ohnemus Exp $
.TH form_requestname 3X ""
.SH NAME
\fBform_requestname\fR - handle printable form request names
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_userptr.3x,v 1.9 1998/11/29 01:08:39 Rick.Ohnemus Exp $
.TH form_userptr 3X ""
.SH NAME
\fBform_userptr\fR - associate application data with a form item
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: form_win.3x,v 1.8 1999/04/10 23:36:08 tom Exp $
.TH form_win 3X ""
.SH NAME
\fBform_win\fR - make and break form window and subwindow associations
it were \fBstsdcr\fR. A form argument of \fBNULL\fR is treated as a request
to change the system default form window or subwindow.
-The function \fBscale_window\fR returns the minimum size required for the
-subwindow of \fIform\fR.
+The function \fBscale_form\fR returns the minimum size required for the
+subwindow of \fIform\fR.
.SH RETURN VALUE
Routines that return pointers return \fBNULL\fR on error. Routines that return
an integer return one of the following error codes:
'\" t
-.\" $Id: infocmp.1m,v 1.13 1997/12/06 22:14:28 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: infocmp.1m,v 1.21 1999/06/15 23:12:25 tom Exp $
.TH infocmp 1M ""
.ds n 5
.ds d @DATADIR@/terminfo
.SH NAME
\fBinfocmp\fR - compare or print out \fIterminfo\fR descriptions
.SH SYNOPSIS
-\fBinfocmp\fR [\fB-dcnpILCuV1\fR] [\fB-v\fR \fIn\fR] [\fB-s d\fR| \fBi\fR| \fBl\fR| \fBc\fR]
+\fBinfocmp\fR [\fB-dceEGgnpILCuV1\fR] [\fB-v\fR \fIn\fR] [\fB-s d\fR| \fBi\fR| \fBl\fR| \fBc\fR]
.br
- [\fB-w\fR \fIwidth\fR] [\fB-A\fR \fIdirectory\fR] [\fB-B\fR \fIdirectory\fR] [\fItermname\fR...]
+ [\fB-w\fR\ \fIwidth\fR] [\fB-A\fR\ \fIdirectory\fR] [\fB-B\fR\ \fIdirectory\fR]
+.br
+ [\fItermname\fR...]
.SH DESCRIPTION
\fBinfocmp\fR can be used to compare a binary \fBterminfo\fR entry with other
terminfo entries, rewrite a \fBterminfo\fR description to take advantage of the
binary file (\fBterm\fR) in a variety of formats. In all cases, the boolean
fields will be printed first, followed by the numeric fields, followed by the
string fields.
-
+..
.SS Default Options
If no options are specified and zero or one \fItermnames\fR are specified, the
\fB-I\fR option will be assumed. If more than one \fItermname\fR is specified,
the \fB-d\fR option will be assumed.
-
+..
.SS Comparison Options [-d] [-c] [-n]
\fBinfocmp\fR compares the \fBterminfo\fR description of the first terminal
\fItermname\fR with each of the descriptions given by the entries for the other
entry. If no \fItermnames\fR are given, the environment variable \fBTERM\fR
will be used for both of the \fItermnames\fR. This can be used as a quick
check to see if anything was left out of a description.
-
+..
.SS Source Listing Options [-I] [-L] [-C] [-r]
The \fB-I\fR, \fB-L\fR, and \fB-C\fR options will produce a source listing for
each terminal named.
the compilation time, is specifying extra \fBuse=\fR fields that are
superfluous. \fBinfocmp\fR will flag any other \fItermname use=\fR fields that
were not needed.
-
-.SS Other Options [-s d|i|l|c] [-v] [-V] [-1] [-T] [-w \fIwidth\fR]
+..
+.SS Changing Databases [-A \fIdirectory\fR] [-B \fIdirectory\fR]
+The location of the compiled \fBterminfo\fR database is taken from the
+environment variable \fBTERMINFO\fR . If the variable is not defined, or the
+terminal is not found in that location, the system \fBterminfo\fR database,
+in \fB@DATADIR@/terminfo\fR, will be used. The options \fB-A\fR
+and \fB-B\fR may be used to override this location. The \fB-A\fR option will
+set \fBTERMINFO\fR for the first \fItermname\fR and the \fB-B\fR option will
+set \fBTERMINFO\fR for the other \fItermnames\fR. With this, it is possible to
+compare descriptions for a terminal with the same name located in two different
+databases. This is useful for comparing descriptions for the same terminal
+created by different people.
+..
+.SS Other Options [-s d|i|l|c] [-1FTVefip] [-Rsubset] [-v \fIn\fR] [-w \fIwidth\fR]
The \fB-s\fR option sorts the fields within each type according to the argument
below:
-
+..
.TP 5
\fBd\fR
leave fields in the order that they are stored in the \fIterminfo\fR database.
except in the case of the \fB-C\fR or the \fB-L\fR options, which cause the
sorting to be done by the \fBtermcap\fR name or the long C variable
name, respectively.
-
+.TP 5
+\fB-1\fR
+causes the fields to be printed out one to a line. Otherwise,
+the fields will be printed several to a line to a maximum width
+of 60 characters.
.TP 5
\fB-F\fR
compare terminfo files. This assumes that two following arguments are
The report printed to standard output lists entries with no matches in
the other file, and entries with more than one match. For entries
with exactly one match it includes a difference report.
-.TP 5
-\fB-p\fR
-Ignore padding specifications when comparing strings.
-.TP 5
-\fB-v\fR \fIn\fR
-prints out tracing information on standard error as the program runs.
-Higher values of n induce greater verbosity.
-.TP 5
-\fB-V\fR
-prints out the version of the program in use on standard error and exits.
-.TP 5
-\fB-1\fR
-causes the fields to be printed out one to a line. Otherwise,
-the fields will be printed several to a line to a maximum width
-of 60 characters.
-.TP 5
-\fB-T\fR
-eliminates size-restrictions on the generated text.
-This is mainly useful for testing and analysis, since the compiled
-descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo).
-.TP 5
-\fB-w\fR
-changes the output to \fIwidth\fR characters.
+.TP
+\fB-G\fR
+Display constant literals in decimal form
+rather than their character equivalents.
.TP 5
\fB-R\fR\fIsubset\fR
Restrict output to a given subset. This option is for use with archaic
details. You can also choose the subset "BSD" which selects only capabilities
with termcap equivalents recognized by 4.4BSD.
.TP 5
+\fB-T\fR
+eliminates size-restrictions on the generated text.
+This is mainly useful for testing and analysis, since the compiled
+descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo).
+.TP 5
+\fB-V\fR
+prints out the version of the program in use on standard error and exits.
+.TP 5
\fB-e\fR
Dump the capabilities of the given terminal as a C initializer for a
TERMTYPE structure (the terminal capability structure in the \fB<term.h>\fR).
This option is useful for preparing versions of the curses library hardwired
for a given terminal type.
-.SS Changing Databases [-A \fIdirectory\fR] [-B \fIdirectory\fR]
-The location of the compiled \fBterminfo\fR database is taken from the
-environment variable \fBTERMINFO\fR . If the variable is not defined, or the
-terminal is not found in that location, the system \fBterminfo\fR database,
-in \fB@DATADIR@/terminfo\fR, will be used. The options \fB-A\fR
-and \fB-B\fR may be used to override this location. The \fB-A\fR option will
-set \fBTERMINFO\fR for the first \fItermname\fR and the \fB-B\fR option will
-set \fBTERMINFO\fR for the other \fItermnames\fR. With this, it is possible to
-compare descriptions for a terminal with the same name located in two different
-databases. This is useful for comparing descriptions for the same terminal
-created by different people.
+.TP 5
+\fB-E\fR
+Dump the capabilities of the given terminal as tables, needed in
+the C initializer for a
+TERMTYPE structure (the terminal capability structure in the \fB<term.h>\fR).
+This option is useful for preparing versions of the curses library hardwired
+for a given terminal type.
+The tables are all declared static, and are named according to the type
+and the name of the corresponding terminal entry.
+.sp
+Before ncurses 5.0, the split between the \fB\-e\fP and \fB\-E\fP
+options was not needed; but support for extended names required making
+the arrays of terminal capabilities separate from the TERMTYPE structure.
+.TP
+\fB-f\fR
+Display complex terminfo strings which contain if/then/else/endif expressions
+indented for readability.
+.TP
+\fB-g\fR
+Display constant character literals in quoted form
+rather than their decimal equivalents.
.TP 5
\fB-i\fR
Analyze the initialization (\fBis1\fR, \fBis2\fR, \fBis3\fR), and reset
It also recognizes a SGR action corresponding to ANSI/ISO 6429/ECMA Set
Graphics Rendition, with the values NORMAL, BOLD, UNDERLINE, BLINK, and
REVERSE. All but NORMAL may be prefixed with `+' (turn on) or `-' (turn off).
+
An SGR0 designates an empty highlight sequence (equivalent to {SGR:NORMAL}).
+.TP 5
+\fB-p\fR
+Ignore padding specifications when comparing strings.
+.TP 5
+\fB-v\fR \fIn\fR
+prints out tracing information on standard error as the program runs.
+Higher values of n induce greater verbosity.
+.TP 5
+\fB-w\fR \fIwidth\fR
+changes the output to \fIwidth\fR characters.
+..
.SH FILES
.TP 20
\*d
Compiled terminal description database.
+..
.SH EXTENSIONS
-The \fB-F\fR option is not supported in SVr4 curses. (It is primarily intended
-to help infocmp's author, while wearing his terminfo/termcap maintainer hat,
-merge termcap/terminfo files from various sources into the master.)
-
-The \fB-R\fR, \fB-p\fR, \fB-e\fR, \fB-T\fR and \fB-i\fR options are not
-supported in SVr4 curses.
+The
+\fB-E\fR,
+\fB-F\fR,
+\fB-G\fR,
+\fB-R\fR,
+\fB-T\fR,
+\fB-e\fR,
+\fB-f\fR,
+\fB-g\fR,
+\fB-i\fR, and
+\fB-p\fR
+options are not supported in SVr4 curses.
The \fB-r\fR option's notion of `termcap' capabilities is System V Release 4's.
Actual BSD curses versions will have a more restricted set. To see only the
.SH BUGS
The -F option of \fBinfocmp\fR(1M) should be a \fBtoe\fR(1M) mode.
.SH SEE ALSO
-\fBinfocmp\fR(1M), \fBcaptoinfo\fR(1M), \fBinfotocap\fR(1M),
+\fBinfocmp\fR(1M), \fBcaptoinfo\fR(1M), \fBinfotocap\fR(1M),
\fBtic\fR(1M), \fBtoe\fR(1M),
\fBcurses\fR(3X), \fBterminfo\fR(\*n).
.SH AUTHOR
Eric S. Raymond <esr@snark.thyrsus.com>
+and
+Thomas E. Dickey <dickey@clark.net>
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
--- /dev/null
+.\"***************************************************************************
+.\" Copyright (c) 1999 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. *
+.\"***************************************************************************
+.\"
+.\" Author: Thomas E. Dickey <dickey@clark.net> 1999
+.\"
+.\" $Id: keybound.3x,v 1.1 1999/02/19 11:59:24 tom Exp $
+.TH keyok 3X ""
+.SH NAME
+\fBkeybound\fP \- return definition of keycode
+..
+.SH SYNOPSIS
+\fB#include <curses.h>\fP
+
+\fBint keybound(int keycode, int count);\fP
+..
+.SH DESCRIPTION
+This is an extension to the curses library.
+It permits an application to determine the string which is defined
+in the terminfo for specific keycodes.
+..
+.SH RETURN VALUE
+The keycode must be greater than zero, else NULL is returned.
+If it does not correspond to a defined key, then NULL is returned.
+Otherwise, the function returns a string, which must be freed by the caller.
+..
+.SH PORTABILITY
+These routines are specific to ncurses. They were not supported on
+Version 7, BSD or System V implementations. It is recommended that
+any code depending on them be conditioned using NCURSES_VERSION.
+..
+.SH SEE ALSO
+\fBdefine_key\fR(3X),
+\fBkeyok\fR(3X).
+..
+.SH AUTHOR
+Thomas Dickey.
+.\"#
+.\"# The following sets edit modes for GNU EMACS
+.\"# Local Variables:
+.\"# mode:nroff
+.\"# fill-column:79
+.\"# End:
.\"
.\" Author: Thomas E. Dickey <dickey@clark.net> 1997
.\"
-.\" $Id: keyok.3x,v 1.4 1998/02/11 12:13:47 tom Exp $
+.\" $Id: keyok.3x,v 1.5 1998/03/14 23:43:07 tom Exp $
.TH keyok 3X ""
-.
.SH NAME
\fBkeyok\fP \- enable or disable a keycode
-.
+..
.SH SYNOPSIS
\fB#include <curses.h>\fP
\fBint keyok(int keycode, bool enable);\fP
-.
+..
.SH DESCRIPTION
This is an extension to the curses library.
It permits an application to disable specific keycodes, rather than
use the \fIkeypad\fP function to disable all keycodes.
Keys that have been disabled can be reenabled.
-.
+..
.SH RETURN VALUE
The keycode must be greater than zero, else ERR is returned.
If it does not correspond to a defined key, then ERR is returned.
If the \fIenable\fP parameter is true, then the key must have been disabled,
and vice versa.
Otherwise, the function returns OK.
-.
+..
.SH PORTABILITY
These routines are specific to ncurses. They were not supported on
Version 7, BSD or System V implementations. It is recommended that
any code depending on them be conditioned using NCURSES_VERSION.
-.
+..
.SH SEE ALSO
\fBdefine_key\fR(3X).
-.
+..
.SH AUTHOR
Thomas Dickey.
.\"#
-# $Id: man_db.renames,v 0.10 1997/12/14 00:25:28 tom Exp $
+# $Id: man_db.renames,v 0.15 1999/10/02 23:28:13 tom Exp $
# Manual-page renamings for the man_db program
#
captoinfo.1m captoinfo.1
curs_printw.3x printw.3ncurses
curs_refresh.3x refresh.3ncurses
curs_scanw.3x scanw.3ncurses
-curs_scr_dmp.3x scr_dump.3ncurses
curs_scr_dump.3x scr_dump.3ncurses
curs_scroll.3x scroll.3ncurses
curs_slk.3x slk.3ncurses
curs_window.3x window.3ncurses
curses.3x ncurses.3ncurses
define_key.3x define_key.3ncurses
-dft_fgbg.3x dft_fgbg.3ncurses
+dft_fgbg.3x use_default_colors.3ncurses
form.3x form.3form
form_cursor.3x cursor.3form
form_data.3x data.3form
form_userptr.3x userptr.3form
form_win.3x win.3form
infocmp.1m infocmp.1
+keybound.3x keybound.3ncurses
keyok.3x keyok.3ncurses
menu.3x menu.3menu
menu_attribs.3x attribs.3menu
mitem_visible.3x menu_visible.3menu
ncurses.3x ncurses.3ncurses
panel.3x panel.3curses
+printf.3s printf.3
+putc.3s putc.3
resizeterm.3x resizeterm.3ncurses
+scanf.3s scanf.3
+system.3s system.3
term.5 term.5
term.7 term.7
terminfo.5 terminfo.5
toe.1m toe.1
tput.1 tput.1
tset.1 tset.1
+vprintf.3s vprintf.3
wresize.3x wresize.3ncurses
'\" t
-.\" $Id: menu.3x,v 1.10 1997/12/14 01:45:52 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu.3x,v 1.13 1998/11/29 01:09:07 Rick.Ohnemus Exp $
.TH menu 3X ""
.SH NAME
\fBmenu\fR - curses extension for programming menus
The \fBmenu\fR library uses the \fBcurses\fR libraries, and a curses
initialization routine such as \fBinitscr\fR must be called before using any of
-these functions. To use the \fBmenu\fR library, link with the options
+these functions. To use the \fBmenu\fR library, link with the options
\fB-lmenu -lcurses\fR.
.SS Current Default Values for Item Attributes
The following table lists each \fBmenu\fR routine and the name of
the manual page on which it is described.
-.TS
+.TS
l l .
\fBcurses\fR Routine Name Manual Page Name
=
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_attribs.3x,v 1.6 1998/11/29 01:09:20 Rick.Ohnemus Exp $
.TH menu_attributes 3X ""
.SH NAME
\fBmenu_attributes\fR - color and attribute control for menus
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_cursor.3x,v 1.5 1998/11/29 01:09:30 Rick.Ohnemus Exp $
.TH menu_cursor 3X ""
.SH NAME
\fBmenu_cursor\fR - position a menu's cursor
-.'" $Id: menu_driver.3x,v 1.5 1997/12/14 01:28:42 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_driver.3x,v 1.8 1999/01/09 22:55:18 tom Exp $
.TH menu_driver 3X ""
.SH NAME
\fBmenu_driver\fR - command-processing loop of the menu system
.br
.SH DESCRIPTION
Once a menu has been posted (displayed), you should funnel input events to it
-through \fBmenu_driver\fR. This routine has two major input cases; either
-the input is a menu navigation request or it's a printable ASCII character.
+through \fBmenu_driver\fR. This routine has three major input cases; either
+the input is a menu navigation request, it's a printable ASCII character or it
+is the KEY_MOUSE special key associated with an mouse event.
The menu driver requests are as follows:
.TP 5
REQ_LEFT_ITEM
If the second argument is one of the above pre-defined requests, the
corresponding action is performed.
.PP
+If the second argument is the KEY_MOUSE special key, the associated
+mouse event is translated into one of the above pre-defined requests.
+Currently only clicks in the user window (e.g. inside the menu display
+area or the decoration window) are handled. If you click above the
+display region of the menu, a REQ_SCR_ULINE is generated, if you
+doubleclick a REQ_SCR_UPAGE is generated and if you tripleclick a
+REQ_FIRST_ITEM is generated. If you click below the display region of
+the menu, a REQ_SCR_DLINE is generated, if you doubleclick a REQ_SCR_DPAGE
+is generated and if you tripleclick a REQ_LAST_ITEM is generated. If you
+click at an item inside the display area of the menu, the menu cursor
+is positioned to that item. If you double-click at an item a REQ_TOGGLE_ITEM
+is generated and \fBE_UNKNOWN_COMMAND\fR is returned. This return value makes
+sense, because a double click usually means that an item-specific action should
+be returned. It's exactly the purpose of this return value to signal that an
+application specific command should be executed. If a translation
+into a request was done, \fBmenu_driver\fR returns the result of this request.
+If you clicked outside the user window or the mouse event couldn't be translated
+into a menu request an \fBE_REQUEST_DENIED\fR is returned.
+.PP
If the second argument is neither printable ASCII nor one of the above
-pre-defined menu requests, the drive assumes it is an application-specific
+pre-defined menu requests or KEY_MOUSE, the drive assumes it is an application-specific
command and returns \fBE_UNKNOWN_COMMAND\fR. Application-defined commands
should be defined relative to \fBMAX_COMMAND\fR, the maximum value of these
pre-defined requests.
\fB<curses.h>\fR.
.SH PORTABILITY
These routines emulate the System V menu library. They were not supported on
-Version 7 or BSD versions.
+Version 7 or BSD versions. The support for mouse events is ncurses specific.
.SH AUTHORS
Juergen Pfeifer. Manual pages and adaptation for new curses by Eric
S. Raymond.
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_format.3x,v 1.7 1998/11/29 01:09:39 Rick.Ohnemus Exp $
.TH menu_format 3X ""
.SH NAME
\fBmenu_format\fR - set and get menu sizes
null menu pointer will change this default. A zero row or column argument to
\fBset_menu_format\fR is interpreted as a request not to change the current
value.
-
+
The function \fBmenu_format\fR returns the maximum-size constraints for the
given menu into the storage addressed by \fBrows\fR and \fBcols\fR.
.SH RETURN VALUE
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_hook.3x,v 1.6 1998/11/29 01:09:47 Rick.Ohnemus Exp $
.TH menu_hook 3X ""
.SH NAME
\fBmenu_hook\fR - set hooks for automatic invocation by applications
.br
.SH DESCRIPTION
These functions make it possible to set hook functions to be called at various
-points in the automatic processing of input event codes by \fBmenu_driver\fR.
+points in the automatic processing of input event codes by \fBmenu_driver\fR.
The function \fBset_item_init\fR sets a hook to be called at menu-post time and
each time the selected item changes (after the change). \fBitem_init\fR
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_items.3x,v 1.5 1998/11/29 01:09:56 Rick.Ohnemus Exp $
.TH menu_items 3X ""
.SH NAME
\fBmenu_items\fR - make and break connections between items and menus
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_mark.3x,v 1.6 1998/11/29 01:10:03 Rick.Ohnemus Exp $
.TH menu_mark 3X ""
.SH NAME
\fBmenu_mark\fR - get and set the menu mark string
.SH DESCRIPTION
In order to make menu selections visible on older terminals without
highlighting or color capability, the menu library marks selected items
-in a menu with a prefix string.
+in a menu with a prefix string.
The function \fBset_menu_mark\fR sets the mark string for the given menu.
Calling \fBset_menu_mark\fR with a null menu item will abolish the mark string.
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_new.3x,v 1.7 1998/11/29 01:10:13 Rick.Ohnemus Exp $
.TH menu_new 3X ""
.SH NAME
\fBmenu_new\fR - create and destroy menus
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_opts.3x,v 1.7 1998/11/29 01:10:21 Rick.Ohnemus Exp $
.TH menu_opts 3X ""
.SH NAME
\fBmenu_opts\fR - set and get menu options
The function \fBmenu_opts_off\fR turns off the given option bits, and leaves
others alone.
-The function \fBmenu_opts\fR returns the menu's current option bits.
+The function \fBmenu_opts\fR returns the menu's current option bits.
The following options are defined (all are on by default):
.TP 5
O_SHOWMATCH
Move the cursor to within the item name while pattern-matching.
.TP 5
-O_NONCYCLIC
+O_NONCYCLIC
Don't wrap around next-item and previous-item,
requests to the other end of the menu.
.SH RETURN VALUE
-.'" $Id: menu_pattern.3x,v 1.4 1997/12/06 22:10:02 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_pattern.3x,v 1.5 1998/03/11 21:12:53 juergen Exp $
.TH menu_pattern 3X ""
.SH NAME
\fBmenu_pattern\fR - get and set a menu's pattern buffer
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_post.3x,v 1.7 1998/11/29 01:10:33 Rick.Ohnemus Exp $
.TH menu_post 3X ""
.SH NAME
\fBmenu_post\fR - write or erase menus from associated subwindows
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_requestname.3x,v 1.6 1998/11/29 01:10:40 Rick.Ohnemus Exp $
.TH menu_requestname 3X ""
.SH NAME
\fBmenu_requestname\fR - handle printable menu request names
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_spacing.3x,v 1.5 1998/11/29 01:10:51 Rick.Ohnemus Exp $
.TH menu_spacing 3X ""
.SH NAME
\fBmenu_spacing\fR - Control spacing between menu items.
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_userptr.3x,v 1.6 1998/11/29 01:11:02 Rick.Ohnemus Exp $
.TH menu_userptr 3X ""
.SH NAME
\fBmenu_userptr\fR - associate application data with a menu item
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: menu_win.3x,v 1.6 1998/11/29 01:11:11 Rick.Ohnemus Exp $
.TH menu_win 3X ""
.SH NAME
\fBmenu_win\fR - make and break menu window and subwindow associations
to change the system default menu window or subwindow.
The function \fBscale_menu\fR returns the minimum size required for the
-subwindow of \fImenu\fR.
+subwindow of \fImenu\fR.
.SH RETURN VALUE
Routines that return pointers return \fBNULL\fR on error. Routines that return
an integer return one of the following error codes:
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: mitem_current.3x,v 1.9 1998/12/26 19:52:34 tom Exp $
.TH mitem_current 3X ""
.SH NAME
\fBmitem_current\fR - set and get current_menu_item
.SH RETURN VALUE
\fBcurrent_item\fR returns \fBNULL\fR on error.
-\fBtop_row\fR and \fBitem_index\fR return \fBERR\fR (the general \fBcurses\fB
+\fBtop_row\fR and \fBitem_index\fR return \fBERR\fR (the general \fBcurses\fR
error value) on error.
\fBset_current_item\fR and \fBset_top_row\fR return one of the following:
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: mitem_name.3x,v 1.5 1998/11/29 01:11:29 Rick.Ohnemus Exp $
.TH mitem_name 3X ""
.SH NAME
\fBmitem_name\fR - get menu item name and description fields
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: mitem_new.3x,v 1.7 1998/11/29 01:11:38 Rick.Ohnemus Exp $
.TH mitem_new 3X ""
.SH NAME
\fBmitem_new\fR - create and destroy menu items
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: mitem_opts.3x,v 1.6 1998/11/29 01:12:37 Rick.Ohnemus Exp $
.TH mitem_opts 3X ""
.SH NAME
\fBmitem_opts\fR - set and get menu item options
The function \fBitem_opts_off\fR turns off the given option bits, and leaves
others alone.
-The function \fBitem_opts\fR returns the item's current option bits.
+The function \fBitem_opts\fR returns the item's current option bits.
There is only one defined option bit mask, \fBO_SELECTABLE\fR. When this is
on, the item may be selected during menu processing. This option defaults
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: mitem_userptr.3x,v 1.6 1998/11/29 01:12:47 Rick.Ohnemus Exp $
.TH mitem_userptr 3X ""
.SH NAME
\fBmitem_userptr\fR - associate application data with a menu item
-.'" $Id: mitem_value.3x,v 1.3 1997/12/06 22:07:49 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: mitem_value.3x,v 1.4 1998/03/11 21:12:53 juergen Exp $
.TH mitem_value 3X ""
.SH NAME
\fBmitem_value\fR - set and get menu item values
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: mitem_visible.3x,v 1.5 1998/11/29 01:12:55 Rick.Ohnemus Exp $
.TH mitem_visible 3X ""
.SH NAME
\fBmitem_visible\fR - check visibility of a menu item
'\" t
-.\" $Id: ncurses.3x,v 1.23 1998/02/15 02:05:44 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998,1999 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: ncurses.3x,v 1.35 1999/10/23 19:50:07 tom Exp $
+.hy 0
.TH ncurses 3X ""
.ds n 5
.ds d @DATADIR@/terminfo
\fB#include <curses.h>\fR
.br
.SH DESCRIPTION
-The \fBcurses\fR library routines give the user a terminal-independent method
+The \fBncurses\fR library routines give the user a terminal-independent method
of updating character screens with reasonable optimization. This
implementation is ``new curses'' (ncurses) and is the approved replacement for
4.4BSD classic curses, which has been discontinued.
pages.
A program using these routines must be linked with the \fB-lncurses\fR option,
-or (if it has been generated) with the debugging library \fB-lncurses_g\fR.
+or (if it has been generated) with the debugging library \fB-lncurses_g\fR.
(Your system integrator may also have installed these libraries under
the names \fB-lcurses\fR and \fB-lcurses_g\fR.)
The ncurses_g library generates trace logs (in a file called 'trace' in the
\fBtset(1)\fR is usually responsible for doing this.
[See \fBterminfo\fR(\*n) for further details.]
-The \fBcurses\fR library permits manipulation of data structures,
+The \fBncurses\fR library permits manipulation of data structures,
called \fIwindows\fR, which can be thought of as two-dimensional
arrays of characters representing all or part of a CRT screen. A
default window called \fBstdscr\fR, which is the size of the terminal
program is executing in a window environment, line and column information in
the environment will override information read by \fIterminfo\fR. This would
effect a program running in an AT&T 630 layer, for example, where the size of a
-screen is changeable.
+screen is changeable (see \fBENVIRONMENT\fR).
If the environment variable \fBTERMINFO\fR is defined, any program using
\fBcurses\fR checks for a local terminal definition before checking in the
addchstr/\fBcurs_addchstr\fR(3X)
addnstr/\fBcurs_addstr\fR(3X)
addstr/\fBcurs_addstr\fR(3X)
+attr_get/\fBcurs_attr\fR(3X)
+attr_off/\fBcurs_attr\fR(3X)
+attr_on/\fBcurs_attr\fR(3X)
+attr_set/\fBcurs_attr\fR(3X)
attroff/\fBcurs_attr\fR(3X)
attron/\fBcurs_attr\fR(3X)
attrset/\fBcurs_attr\fR(3X)
box/\fBcurs_border\fR(3X)
can_change_color/\fBcurs_color\fR(3X)
cbreak/\fBcurs_inopts\fR(3X)
+chgat/\fBcurs_attr\fR(3X)
clear/\fBcurs_clear\fR(3X)
clearok/\fBcurs_outopts\fR(3X)
clrtobot/\fBcurs_clear\fR(3X)
clrtoeol/\fBcurs_clear\fR(3X)
color_content/\fBcurs_color\fR(3X)
+color_set/\fBcurs_attr\fR(3X)
copywin/\fBcurs_overlay\fR(3X)
curs_set/\fBcurs_kernel\fR(3X)
def_prog_mode/\fBcurs_kernel\fR(3X)
flash/\fBcurs_beep\fR(3X)
flushinp/\fBcurs_util\fR(3X)
getbegyx/\fBcurs_getyx\fR(3X)
+getbkgd/\fBcurs_bkgd\fR(3X)
getch/\fBcurs_getch\fR(3X)
getmaxyx/\fBcurs_getyx\fR(3X)
getmouse/\fBcurs_mouse\fR(3X)*
+getnstr/\fBcurs_getstr\fR(3X)
getparyx/\fBcurs_getyx\fR(3X)
getstr/\fBcurs_getstr\fR(3X)
getsyx/\fBcurs_kernel\fR(3X)
mvaddchstr/\fBcurs_addchstr\fR(3X)
mvaddnstr/\fBcurs_addstr\fR(3X)
mvaddstr/\fBcurs_addstr\fR(3X)
+mvchgat/\fBcurs_attr\fR(3X)
mvcur/\fBcurs_terminfo\fR(3X)
mvdelch/\fBcurs_delch\fR(3X)
mvderwin/\fBcurs_window\fR(3X)
mvgetch/\fBcurs_getch\fR(3X)
+mvgetnstr/\fBcurs_getstr\fR(3X)
mvgetstr/\fBcurs_getstr\fR(3X)
+mvhline/\fBcurs_border\fR(3X)
mvinch/\fBcurs_inch\fR(3X)
mvinchnstr/\fBcurs_inchstr\fR(3X)
mvinchstr/\fBcurs_inchstr\fR(3X)
mvwaddchstr/\fBcurs_addchstr\fR(3X)
mvwaddnstr/\fBcurs_addstr\fR(3X)
mvwaddstr/\fBcurs_addstr\fR(3X)
+mvwchgat/\fBcurs_attr\fR(3X)
mvwdelch/\fBcurs_delch\fR(3X)
mvwgetch/\fBcurs_getch\fR(3X)
+mvwgetnstr/\fBcurs_getstr\fR(3X)
mvwgetstr/\fBcurs_getstr\fR(3X)
+mvwhline/\fBcurs_border\fR(3X)
mvwin/\fBcurs_window\fR(3X)
mvwinch/\fBcurs_inch\fR(3X)
mvwinchnstr/\fBcurs_inchstr\fR(3X)
mvwinstr/\fBcurs_instr\fR(3X)
mvwprintw/\fBcurs_printw\fR(3X)
mvwscanw/\fBcurs_scanw\fR(3X)
+mvwvline/\fBcurs_border\fR(3X)
napms/\fBcurs_kernel\fR(3X)
newpad/\fBcurs_pad\fR(3X)
newterm/\fBcurs_initscr\fR(3X)
setterm/\fBcurs_terminfo\fR(3X)
setupterm/\fBcurs_terminfo\fR(3X)
slk_attr/\fBcurs_slk\fR(3X)*
+slk_attr_off/\fBcurs_slk\fR(3X)
+slk_attr_on/\fBcurs_slk\fR(3X)
+slk_attr_set/\fBcurs_slk\fR(3X)
slk_attroff/\fBcurs_slk\fR(3X)
slk_attron/\fBcurs_slk\fR(3X)
slk_attrset/\fBcurs_slk\fR(3X)
slk_clear/\fBcurs_slk\fR(3X)
+slk_color/\fBcurs_slk\fR(3X)
slk_init/\fBcurs_slk\fR(3X)
slk_label/\fBcurs_slk\fR(3X)
slk_noutrefresh/\fBcurs_slk\fR(3X)
vidattr/\fBcurs_terminfo\fR(3X)
vidputs/\fBcurs_terminfo\fR(3X)
vline/\fBcurs_border\fR(3X)
+vw_printw/\fBcurs_printw\fR(3X)
+vw_scanw/\fBcurs_scanw\fR(3X)
vwprintw/\fBcurs_printw\fR(3X)
vwscanw/\fBcurs_scanw\fR(3X)
waddch/\fBcurs_addch\fR(3X)
waddchstr/\fBcurs_addchstr\fR(3X)
waddnstr/\fBcurs_addstr\fR(3X)
waddstr/\fBcurs_addstr\fR(3X)
+wattr_get/\fBcurs_attr\fR(3X)
+wattr_off/\fBcurs_attr\fR(3X)
+wattr_on/\fBcurs_attr\fR(3X)
+wattr_set/\fBcurs_attr\fR(3X)
wattroff/\fBcurs_attr\fR(3X)
wattron/\fBcurs_attr\fR(3X)
wattrset/\fBcurs_attr\fR(3X)
wbkgd/\fBcurs_bkgd\fR(3X)
wbkgdset/\fBcurs_bkgd\fR(3X)
wborder/\fBcurs_border\fR(3X)
+wchgat/\fBcurs_attr\fR(3X)
wclear/\fBcurs_clear\fR(3X)
wclrtobot/\fBcurs_clear\fR(3X)
wclrtoeol/\fBcurs_clear\fR(3X)
+wcolor_set/\fBcurs_attr\fR(3X)
wcursyncup/\fBcurs_window\fR(3X)
wdelch/\fBcurs_delch\fR(3X)
wdeleteln/\fBcurs_deleteln\fR(3X)
winsnstr/\fBcurs_insstr\fR(3X)
winsstr/\fBcurs_insstr\fR(3X)
winstr/\fBcurs_instr\fR(3X)
+wmouse_trafo/\fBcurs_mouse\fR(3X)
wmove/\fBcurs_move\fR(3X)
wnoutrefresh/\fBcurs_refresh\fR(3X)
wprintw/\fBcurs_printw\fR(3X)
right-hand side of assignment statements).
Routines that return pointers return \fBNULL\fR on error.
+.SH ENVIRONMENT
+The following environment symbols are useful for customizing the
+runtime behavior of the \fBncurses\fR library. The most important
+ones have been already discussed in detail.
+.TP 5
+BAUDRATE
+The debugging library checks this environment symbol when the application
+has redirected output to a file.
+The symbol's numeric value is used for the baudrate.
+If no value is found \fBncurses\fR uses 9600.
+This allows testers to construct repeatable test-cases
+that take into account costs that depend on baudrate.
+.TP 5
+CC
+When set, change occurrences of the command_character
+(i.e., the \fBcmdch\fP capability)
+of the loaded terminfo entries to the value of this symbol.
+Very few terminfo entries provide this feature.
+.TP 5
+COLUMNS
+Specify the width of the screen in characters.
+Applications running in a windowing environment usually are able to
+obtain the width of the window in which they are executing.
+If neither the $COLUMNS value nor the terminal's screen size is available,
+\fBncurses\fR uses the size which may be specified in the terminfo database
+(i.e., the \fBcols\fR capability).
+
+It is important that your application use a correct size for the screen.
+However, this is not always possible because your application may be
+running on a host which does not honor NAWS (Negotiations About Window
+Size), or because you are temporarily running as another user.
+
+Either COLUMNS or LINES symbols may be specified independently.
+This is mainly useful to circumvent legacy misfeatures of terminal descriptions,
+e.g., xterm which commonly specifies a 65 line screen.
+For best results, \fBlines\fR and \fBcols\fR should not be specified in
+a terminal description for terminals which are run as emulations.
+
+Use the \fBuse_env\fR function to disable this feature.
+.TP 5
+DISPLAY
+Provides a hint to ncurses that your terminal is an X terminal
+emulator such as \fBxterm\fP.
+If the \fBkmous\fP capability is set to the beginning of the xterm
+mouse response, e.g., "kmous=\E[M", then ncurses will send the terminal
+xterm's mouse initialization strings and allow appropriate replies.
+See the \fBcurs_mouse\fR(3X) manual page for programming information.
+.TP 5
+ESCDELAY
+Specifies the total time, in milliseconds, for which ncurses will
+await a character sequence, e.g., a function key.
+The default value, 1000 milliseconds, is enough for most uses.
+However, it is made a variable to accommodate unusual applications.
+
+The most common instance where you may wish to change this value
+is to work with slow hosts, e.g., running on a network.
+If the host cannot read characters rapidly enough, it will have the same
+effect as if the terminal did not send characters rapidly enough.
+The library will still see a timeout.
+
+Note that xterm mouse events are built up from character sequences
+received from the xterm.
+If your application makes heavy use of multiple-clicking, you may
+wish to lengthen this default value because the timeout applies
+to the composed multi-click event as well as the individual clicks.
+.TP 5
+HOME
+Tells \fBncurses\fR where your home directory is.
+That is where it may read and write auxiliary terminal descriptions:
+
+$HOME/.termcap
+.br
+$HOME/.terminfo
+.TP 5
+LINES
+Like COLUMNS, specify the height of the screen in characters.
+See COLUMNS for a detailed description.
+.TP 5
+MOUSE_BUTTONS_123
+This applies only to the OS/2 EMX port.
+It specifies the order of buttons on the mouse.
+OS/2 numbers a 3-button mouse inconsistently from other
+platforms:
+
+1 = left
+.br
+2 = right
+.br
+3 = middle.
+
+This symbol lets you customize the mouse.
+The symbol must be three numeric digits 1-3 in any order, e.g., 123 or 321.
+If it is not specified, \fBncurses\fR uses 132.
+.TP 5
+NCURSES_NO_PADDING
+Most of the terminal descriptions in the terminfo database are written
+for real "hardware" terminals.
+Many people use terminal emulators
+which run in a windowing environment and use curses-based applications.
+Terminal emulators can duplicate
+all of the important aspects of a hardware terminal, but they do not
+have the same limitations.
+The chief limitation of a hardware terminal from the standpoint
+of your application is the management of dataflow, i.e., timing.
+Unless a hardware terminal is interfaced into a terminal concentrator
+(which does flow control),
+it (or your application) must manage dataflow, preventing overruns.
+The cheapest solution (no hardware cost)
+is for your program to do this by pausing after
+operations that the terminal does slowly, such as clearing the display.
+
+As a result, many terminal descriptions (including the vt100)
+have delay times embedded. You may wish to use these descriptions,
+but not want to pay the performance penalty.
+
+Set the NCURSES_NO_PADDING symbol to disable all but mandatory
+padding. Mandatory padding is used as a part of special control
+sequences such as \fIflash\fR.
+.TP 5
+NCURSES_NO_SETBUF
+Normally \fBncurses\fR enables buffered output during terminal initialization.
+This is done (as in SVr4 curses) for performance reasons.
+For testing purposes, both of \fBncurses\fR and certain applications,
+this feature is made optional. Setting the NCURSES_NO_SETBUF variable
+disables output buffering, leaving the output in the original (usually
+line buffered) mode.
+.TP 5
+NCURSES_TRACE
+During initialization, the \fBncurses\fR debugging library
+checks the NCURSES_TRACE symbol.
+If it is defined, to a numeric value, \fBncurses\fR calls the \fBtrace\fR
+function, using that value as the argument.
+
+The argument values, which are defined in \fBcurses.h\fR, provide several
+types of information.
+When running with traces enabled, your application will write the
+file \fBtrace\fR to the current directory.
+.TP 5
+TERM
+Denotes your terminal type.
+Each terminal type is distinct, though many are similar.
+.TP 5
+TERMCAP
+If the \fBncurses\fR library has been configured with \fItermcap\fR
+support, \fBncurses\fR will check for a terminal's description in
+termcap form if it is not available in the terminfo database.
+
+The TERMCAP symbol contains either a terminal description (with
+newlines stripped out),
+or a file name telling where the information denoted by the TERM symbol exists.
+In either case, setting it directs \fBncurses\fR to ignore
+the usual place for this information, e.g., /etc/termcap.
+.TP 5
+TERMINFO
+Overrides the directory in which \fBncurses\fR searches for your terminal
+description.
+This is the simplest, but not the only way to change the list of directories.
+The complete list of directories in order follows:
+.RS
+.TP 3
+-
+the last directory to which \fBncurses\fR wrote, if any, is searched first.
+.TP 3
+-
+the directory specified by the TERMINFO symbol
+.TP 3
+-
+$HOME/.terminfo
+.TP 3
+-
+directories listed in the TERMINFO_DIRS symbol
+.TP 3
+-
+one or more directories whose names are configured and compiled into the
+ncurses library, e.g.,
+@DATADIR@/terminfo
+.RE
+.TP 5
+TERMINFO_DIRS
+Specifies a list of directories to search for terminal descriptions.
+The list is separated by colons (i.e., ":").
+All of the terminal descriptions are in terminfo form, which makes
+a subdirectory named for the first letter of the terminal names therein.
+.TP 5
+TERMPATH
+If TERMCAP does not hold a file name then \fBncurses\fR checks
+the TERMPATH symbol.
+This is a list of filenames separated by colons (i.e., ":").
+If the TERMPATH symbol is not set, \fBncurses\fR looks in the files
+/etc/termcap, /usr/share/misc/termcap and $HOME/.termcap, in that order.
+.SH FILES
+.TP 5
+@DATADIR@/tabset
+directory containing initialization files for the terminal capability database
+@DATADIR@/terminfo
+terminal capability database
.SH SEE ALSO
\fBterminfo\fR(\*n) and 3X pages whose names begin "curs_" for detailed routine
descriptions.
.SH EXTENSIONS
-The \fBcurses\fR library can be compiled with an option (\fB-DTERMCAP_FILE\fR)
+The \fBncurses\fR library can be compiled with an option (\fB-DUSE_GETCAP\fR)
that falls back to the old-style /etc/termcap file if the terminal setup code
cannot find a terminfo entry corresponding to \fBTERM\fR. Use of this feature
is not recommended, as it essentially includes an entire termcap compiler in
-the \fBcurses\fR startup code, at significant cost in core and startup cycles.
-
-Compiling with \fB-DTERMCAP_FILE\fR changes the library's initialization
-sequence in a way intended to mimic the behavior of 4.4BSD curses. If there is
-no local or system terminfo entry matching \fBTERM\fR, then the library looks
-for termcap entries in the following places: (1) if \fBTERMINFO\fR is
-undefined, in the file named by \fBTERMCAP_FILE\fR; (2) if \fBTERMINFO\fR is
-defined and begins with a slash, it is interpreted as the name of a termcap
-file to search for \fBTERM\fR; (3) otherwise, if \fBTERMINFO\fR has a leading
-string that looks like a terminal entry name list, and it matches \fBTERM\fR,
-the contents of \fBTERMINFO\fR is interpreted as a termcap; (4) if
-\fBTERMINFO\fR looks like a termcap but doesn't match \fBTERM\fR, the termcap
-file is searched for among the colon-separated paths in the environment
-variable \fBTERMPATHS\fR if that is defined, and in ~/.termcap and the file
-value of \fBTERMCAP_FILE\fR otherwise.
-
-Versions of \fBcurses\fR compiled on PC clones support display of the PC ROM
-characters (including ROM characters 0-31, which stock SVr4 curses cannot
-display). See the EXTENSIONS sections of \fBcurs_addch\fR(3X) and
-\fBcurs_attr\fR(3X).
-
-The \fBcurses\fR library includes facilities for capturing mouse events on
+the \fBncurses\fR startup code, at significant cost in core and startup cycles.
+
+The \fBncurses\fR library includes facilities for capturing mouse events on
certain terminals (including xterm). See the \fBcurs_mouse\fR(3X)
manual page for details.
-The \fBcurses\fR library includes a function for directing application output
+The \fBncurses\fR library includes facilities for responding to window
+resizing events, e.g., when running in an xterm.
+See the \fBresizeterm\fR(3X)
+and \fBwresize\fR(3X) manual pages for details.
+In addition, the library may be configured with a SIGWINCH handler.
+
+The \fBncurses\fR library extends the fixed set of function key capabilities
+of terminals by allowing the application designer to define additional
+key sequences at runtime.
+See the \fBdefine_key\fR(3X)
+and \fBkeyok\fR(3X) manual pages for details.
+
+The \fBncurses\fR library can exploit the capabilities of terminals which
+implement the ISO-6429 SGR 39 and SGR 49 controls, which allow an application
+to reset the terminal to its original foreground and background colors.
+From the users' perspective, the application is able to draw colored
+text on a background whose color is set independently, providing better
+control over color contrasts.
+See the \fBuse_default_colors\fR(3X) manual page for details.
+
+The \fBncurses\fR library includes a function for directing application output
to a printer attached to the terminal device. See the \fBcurs_print\fR(3X)
manual page for details.
.SH PORTABILITY
-The \fBcurses\fR library is intended to be BASE-level conformant with the XSI
+The \fBncurses\fR library is intended to be BASE-level conformant with the XSI
Curses standard. Certain portions of the EXTENDED XSI Curses functionality
(including color support) are supported. The following EXTENDED XSI Curses
calls in support of wide (multibyte) characters are not yet implemented:
-\fBaddnwstr\fB,
-\fBaddwstr\fB,
-\fBmvaddnwstr\fB,
-\fBmvwaddnwstr\fB,
-\fBmvaddwstr\fB,
-\fBwaddnwstr\fB,
-\fBwaddwstr\fB,
-\fBadd_wch\fB,
-\fBwadd_wch\fB,
-\fBmvadd_wch\fB,
-\fBmvwadd_wch\fB,
-\fBadd_wchnstr\fB,
-\fBadd_wchstr\fB,
-\fBwadd_wchnstr\fB,
-\fBwadd_wchstr\fB,
-\fBmvadd_wchnstr\fB,
-\fBmvadd_wchstr\fB,
-\fBmvwadd_wchnstr\fB,
-\fBmvwadd_wchstr\fB,
-\fBbkgrndset\fB,
-\fBbkgrnd\fB,
-\fBgetbkgrnd\fB,
-\fBwbkgrnd\fB,
-\fBwbkgrndset\fB,
-\fBwgetbkgrnd\fB,
-\fBborder_set\fB,
-\fBwborder_set\fB,
-\fBbox_set\fB,
-\fBhline_set\fB,
-\fBmvhline_set\fB,
-\fBmvvline_set\fB,
-\fBmvwhline_set\fB,
-\fBmvwvline_set\fB,
-\fBwhline_set\fB,
-\fBvhline_set\fB,
-\fBwvline_set\fB,
-\fBecho_wchar\fB,
-\fBwecho_wchar\fB,
-\fBerasewchar\fB,
-\fBkillwchar\fB,
-\fBget_wch\fB,
-\fBmvget_wch\fB,
-\fBmvwget_ch\fB,
-\fBwget_wch\fB,
-\fBgetwchtype\fB,
-\fBget_wstr\fB,
-\fBgetn_wstr\fB,
-\fBwget_wstr\fB,
-\fBwgetn_wstr\fB,
-\fBmvget_wstr\fB,
-\fBmvgetn_wstr\fB,
-\fBmvwget_wstr\fB,
-\fBmvwgetn_wstr\fB,
-\fBinnwstr\fB,
-\fBinwstr\fB,
-\fBwinnwstr\fB,
-\fBwinwstr\fB,
-\fBmvinnwstr\fB,
-\fBmvinwstr\fB,
-\fBmvwinnwstr\fB,
-\fBmvwinwstr\fB,
-\fBins_nwstr\fB,
-\fBins_wstr\fB,
-\fBmvins_nwstr\fB,
-\fBmvins_wstr\fB,
-\fBmvwins_nwstr\fB,
-\fBmvwins_wstr\fB,
-\fBwins_nwstr\fB,
-\fBwins_wstr\fB,
-\fBins_wch\fB,
-\fBwins_wch\fB,
-\fBmvins_wch\fB,
-\fBmvwins_wch\fB,
-\fBin_wch\fB,
-\fBwin_wch\fB,
-\fBmvin_wch\fB,
-\fBmvwin_wch\fB,
-\fBinwchstr\fB,
-\fBinwchnstr\fB,
-\fBwinwchstr\fB,
-\fBwinwchnstr\fB,
-\fBmvinwchstr\fB,
-\fBmvinwchnstr\fB,
-\fBmvinwchstr\fB,
-\fBmvwinwchnstr\fB.
+\fBadd_wch\fP,
+\fBadd_wchnstr\fP,
+\fBadd_wchstr\fP,
+\fBaddnwstr\fP,
+\fBaddwstr\fP,
+\fBbkgrnd\fP,
+\fBbkgrndset\fP,
+\fBborder_set\fP,
+\fBbox_set\fP,
+\fBecho_wchar\fP,
+\fBerasewchar\fP,
+\fBget_wch\fP,
+\fBget_wstr\fP,
+\fBgetbkgrnd\fP,
+\fBgetcchar\fP,
+\fBgetn_wstr\fP,
+\fBgetwchtype\fP,
+\fBhline_set\fP,
+\fBin_wch\fP,
+\fBin_wchnstr\fP,
+\fBin_wchstr\fP,
+\fBinnwstr\fP,
+\fBins_nwstr\fP,
+\fBins_wch\fP,
+\fBins_wstr\fP,
+\fBinwchnstr\fP,
+\fBinwchstr\fP,
+\fBinwstr\fP,
+\fBkey_name\fP,
+\fBkillwchar\fP,
+\fBmvadd_wch\fP,
+\fBmvadd_wchnstr\fP,
+\fBmvadd_wchstr\fP,
+\fBmvaddnwstr\fP,
+\fBmvaddwstr\fP,
+\fBmvget_wch\fP,
+\fBmvget_wstr\fP,
+\fBmvgetn_wstr\fP,
+\fBmvhline_set\fP,
+\fBmvin_wch\fP,
+\fBmvinnwstr\fP,
+\fBmvins_nwstr\fP,
+\fBmvins_wch\fP,
+\fBmvins_wstr\fP,
+\fBmvinwchnstr\fP,
+\fBmvinwchstr\fP,
+\fBmvinwchstr\fP,
+\fBmvinwstr\fP,
+\fBmvvline_set\fP,
+\fBmvwadd_wch\fP,
+\fBmvwadd_wchnstr\fP,
+\fBmvwadd_wchstr\fP,
+\fBmvwaddnwstr\fP,
+\fBmvwaddwstr\fP,
+\fBmvwget_ch\fP,
+\fBmvwget_wch\fP,
+\fBmvwget_wstr\fP,
+\fBmvwgetn_wstr\fP,
+\fBmvwhline_set\fP,
+\fBmvwin_wch\fP,
+\fBmvwin_wchnstr\fP,
+\fBmvwin_wchstr\fP,
+\fBmvwinnwstr\fP,
+\fBmvwins_nwstr\fP,
+\fBmvwins_wch\fP,
+\fBmvwins_wstr\fP,
+\fBmvwinwchnstr\fP.
+\fBmvwinwstr\fP,
+\fBmvwvline_set\fP,
+\fBpecho_wchar\fP,
+\fBsetcchar\fP,
+\fBslk_wset\fP,
+\fBterm_attrs\fP,
+\fBunget_wch\fP,
+\fBvhline_set\fP,
+\fBvid_attr\fP,
+\fBvid_puts\fP,
+\fBvline_set\fP,
+\fBwadd_wch\fP,
+\fBwadd_wchnstr\fP,
+\fBwadd_wchstr\fP,
+\fBwaddnwstr\fP,
+\fBwaddwstr\fP,
+\fBwaddwstr\fP,
+\fBwbkgrnd\fP,
+\fBwbkgrndset\fP,
+\fBwbkgrndset\fP,
+\fBwborder_set\fP,
+\fBwecho_wchar\fP,
+\fBwecho_wchar\fP,
+\fBwget_wch\fP,
+\fBwget_wstr\fP,
+\fBwgetbkgrnd\fP,
+\fBwgetn_wstr\fP,
+\fBwhline_set\fP,
+\fBwin_wch\fP,
+\fBwin_wchnstr\fP,
+\fBwin_wchstr\fP,
+\fBwinnwstr\fP,
+\fBwins_nwstr\fP,
+\fBwins_wch\fP,
+\fBwins_wstr\fP,
+\fBwinwchnstr\fP,
+\fBwinwchstr\fP,
+\fBwinwstr\fP,
+\fBwunctrl\fP,
+\fBwvline_set\fP,
.PP
A small number of local differences (that is, individual differences between
-the XSI Curses and \fBcurses\fR calls) are described in \fBPORTABILITY\fR
+the XSI Curses and \fBncurses\fR calls) are described in \fBPORTABILITY\fR
sections of the library man pages.
.PP
The routine \fBhas_key\fR is not part of XPG4, nor is it present in SVr4. See
correspondingly.
.PP
In the XSI standard and SVr4 manual pages, many entry points have prototype
-arguments of the for \fBchar *const\fR (or \fBcchar_t *const\fR, or \fBwchar_t
-*const\fR, or \fBvoid *const\fR). Depending on one's interpretation of the
+arguments of the for \fBchar *const\fR (or \fBcchar_t *const\fR, or
+\fBwchar_t *const\fR, or \fBvoid *const\fR). Depending on one's interpretation of the
ANSI C standard (see section 3.5.4.1), these declarations are either (a)
-meaningless, or (b) meaningless and illegal. The declaration \fBconst char
-*x\fR is a modifiable pointer to unmodifiable data, but \fBchar *const x\fR' is
+meaningless, or (b) meaningless and illegal. The declaration
+\fBconst char *x\fR is a modifiable pointer to unmodifiable data, but
+\fBchar *const x\fR' is
an unmodifiable pointer to modifiable data. Given that C passes arguments by
value, \fB<type> *const\fR as a formal type is at best dubious. Some compilers
choke on the prototypes. Therefore, in this implementation, they have been
The header file \fB<curses.h>\fR automatically includes the header files
\fB<stdio.h>\fR and \fB<unctrl.h>\fR.
-If standard output from a \fBcurses\fR program is re-directed to something
+If standard output from a \fBncurses\fR program is re-directed to something
which is not a tty, screen updates will be directed to standard error. This
was an undocumented feature of AT&T System V Release 3 curses.
.SH AUTHORS
-Zeyd M. Ben-Halim, Eric S. Raymond. Descends from the original pcurses
-by Pavel Curtis.
+Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
+Based on pcurses by Pavel Curtis.
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
-.\" $Id: panel.3x,v 1.8 1997/12/14 01:49:25 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: panel.3x,v 1.9 1998/03/11 21:12:53 juergen Exp $
.TH panel 3X ""
.ds n 5
.ds d @DATADIR@/terminfo
.\"
.\" Author: Thomas E. Dickey <dickey@clark.net> 1996,1997
.\"
-.\" $Id: resizeterm.3x,v 1.6 1998/02/11 12:13:48 tom Exp $
+.\" $Id: resizeterm.3x,v 1.7 1998/03/14 23:42:52 tom Exp $
.TH resizeterm 3X ""
-.
.SH NAME
\fBresizeterm\fR - change the curses terminal size
-.
+..
.SH SYNOPSIS
\fB#include <curses.h>\fR
\fBint resizeterm(int lines, int columns);\fR
-.
+..
.SH DESCRIPTION
This is an extension to the curses library.
It provides callers with a hook into the \fBncurses\fR data to resize windows,
However, due to the calling convention of pads,
it is not possible to resize these
without additional interaction with the application.
-.
+..
.SH RETURN VALUE
The function returns the integer \fBERR\fR upon failure and \fBOK\fR on success.
It will fail if either of the dimensions less than or equal to zero,
or if an error occurs while (re)allocating memory for the windows.
-.
+..
.SH NOTES
While this function is intended to be used to support a signal handler
(i.e., for SIGWINCH), care should be taken to avoid invoking it in a
context where \fBmalloc\fR or \fBrealloc\fR may have been interrupted,
since it uses those functions.
-.
+..
.PP
If ncurses is configured to supply its own SIGWINCH handler,
the \fBresizeterm\fR function ungetch's a \fBKEY_RESIZE\fR which
This is used to alert an application that the screen size has changed,
and that it should repaint special features such as pads that cannot
be done automatically.
-.
+..
.SH SEE ALSO
\fBwresize\fR(3X).
-.
+..
.SH AUTHOR
Thomas Dickey (from an equivalent function written in 1988 for BSD curses).
.\"#
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: term.5,v 1.9 1998/03/11 21:12:53 juergen Exp $
.TH TERM 5
.ds n 5
.ds d @DATADIR@/terminfo
-.\" $Id: term.7,v 1.7 1997/12/14 01:50:43 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: term.7,v 1.11 1999/01/24 02:35:14 Todd.Miller Exp $
.TH TERM 7
.ds n 5
.ds d @DATADIR@/terminfo
are in fact using a VT100-superset console, terminal, or terminal emulator.)
.PP
In any case, you are free to override the system \fBTERM\fR setting to your
-taste in your shell profile. The \fBtset\fB(1) utility may be of assistance;
+taste in your shell profile. The \fBtset\fP(1) utility may be of assistance;
you can give it a set of rules for deducing or requesting a terminal type based
on the tty device and baud rate.
.PP
which you wish to override the system default type for your line.
.PP
Terminal type descriptions are stored as files of capability data underneath
-\*d. To browse a list of all terminal names recognized by the system, do
+\*d. To browse a list of all terminal names recognized by the system, do
toe | more
where \fIentry-name\fR is the name of the type you wish to examine (and the
name of its capability file the subdirectory of \*d named for its first
letter). This command dumps a capability file in the text format described by
-\fBterminfo\fR(\*n).
+\fBterminfo\fR(\*n).
.PP
The first line of a \fBterminfo\fR(\*n) description gives the names by which
terminfo knows a terminal, separated by `|' (pipe-bar) characters with the last
thus \fBvt100\fR, \fBhp2621\fR, \fBwy50\fR.
.PP
The root name for a PC-Unix console type should be the OS name,
-i.e. \fBlinux\fR, \fBbsdos\fR, \fBfreebsd\fB, \fBnetbsd\fR. It should
+i.e. \fBlinux\fR, \fBbsdos\fR, \fBfreebsd\fR, \fBnetbsd\fR. It should
\fInot\fR be \fBconsole\fR or any other generic that might cause confusion in a
multi-platform environment! If a model number follows, it should indicate
either the OS release level or the console driver release level.
-w
Wide; terminal is in 132 column mode.
.PP
-Conventionally, if your terminal type is a variant intended to specify a
+Conventionally, if your terminal type is a variant intended to specify a
line height, that suffix should go first. So, for a hypothetical FuBarCo
model 2317 terminal in 30-line mode with reverse video, best form would be
\fBfubar-30-rv\fR (rather than, say, `fubar-rv-30').
.PP
Terminal types that are written not as standalone entries, but rather as
-components to be plugged into other entries via \fBuse\fB capabilities,
+components to be plugged into other entries via \fBuse\fP capabilities,
are distinguished by using embedded plus signs rather than dashes.
.PP
Commands which use a terminal type to control display often accept a -T
/etc/ttys
tty line initialization (BSD-like UNIXes).
.SH "SEE ALSO"
-\fBcurses\fR(3X), \fBterminfo\fR(\*n), \fBterm\fR(\*d).
+\fBcurses\fR(3X), \fBterminfo\fR(\*n), \fBterm\fR(\*n).
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
-.\" $Id: terminfo.head,v 1.7 1997/12/14 01:49:17 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: terminfo.head,v 1.8 1998/03/11 21:12:53 juergen Exp $
.TH TERMINFO 5 "" "" "File Formats"
.ds n 5
.ds d @DATADIR@/terminfo
-.\" $Id: terminfo.tail,v 1.15 1997/12/14 01:50:06 tom Exp $
+.\" $Id: terminfo.tail,v 1.29 1999/03/07 02:09:07 tom Exp $
.\" Beginning of terminfo.tail file
.ps +1
.PP
.in -2
.ta .3i
.ft CW
-\s-2ansi|ansi/pc-term compatible with color,
- mc5i,
- colors#8, ncv#3, pairs#64,
- cub=\\E[%p1%dD, cud=\\E[%p1%dB, cuf=\\E[%p1%dC,
- cuu=\\E[%p1%dA, dch=\\E[%p1%dP, dl=\\E[%p1%dM,
- ech=\\E[%p1%dX, el1=\\E[1K, hpa=\\E[%p1%dG, ht=\\E[I,
- ich=\\E[%p1%d@, il=\\E[%p1%dL, indn=\\E[%p1%dS,
- kbs=^H, kcbt=\\E[Z, kcub1=\\E[D, kcud1=\\E[B,
- kcuf1=\\E[C, kcuu1=\\E[A, kf1=\\E[M, kf10=\\E[V,
- kf11=\\E[W, kf12=\\E[X, kf2=\\E[N, kf3=\\E[O, kf4=\\E[P,
- kf5=\\E[Q, kf6=\\E[R, kf7=\\E[S, kf8=\\E[T, kf9=\\E[U,
- kich1=\\E[L, mc4=\\E[4i, mc5=\\E[5i, nel=\\r\\E[S,
- op=\\E[37;40m, rep=%p1%c\\E[%p2%{1}%-%db,
- rin=\\E[%p1%dT, s0ds=\\E(B, s1ds=\\E)B, s2ds=\\E*B,
- s3ds=\\E+B, setab=\\E[4%p1%dm, setaf=\\E[3%p1%dm,
- setb=\\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- setf=\\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- sgr=\\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;12%;m,
- sgr0=\\E[0;10m, tbc=\\E[2g, u6=\\E[%d;%dR, u7=\\E[6n,
+\s-2ansi|ansi/pc-term compatible with color,
+ mc5i,
+ colors#8, ncv#3, pairs#64,
+ cub=\\E[%p1%dD, cud=\\E[%p1%dB, cuf=\\E[%p1%dC,
+ cuu=\\E[%p1%dA, dch=\\E[%p1%dP, dl=\\E[%p1%dM,
+ ech=\\E[%p1%dX, el1=\\E[1K, hpa=\\E[%p1%dG, ht=\\E[I,
+ ich=\\E[%p1%d@, il=\\E[%p1%dL, indn=\\E[%p1%dS, .indn=\\E[%p1%dT,
+ kbs=^H, kcbt=\\E[Z, kcub1=\\E[D, kcud1=\\E[B,
+ kcuf1=\\E[C, kcuu1=\\E[A, kf1=\\E[M, kf10=\\E[V,
+ kf11=\\E[W, kf12=\\E[X, kf2=\\E[N, kf3=\\E[O, kf4=\\E[P,
+ kf5=\\E[Q, kf6=\\E[R, kf7=\\E[S, kf8=\\E[T, kf9=\\E[U,
+ kich1=\\E[L, mc4=\\E[4i, mc5=\\E[5i, nel=\\r\\E[S,
+ op=\\E[37;40m, rep=%p1%c\\E[%p2%{1}%-%db,
+ rin=\\E[%p1%dT, s0ds=\\E(B, s1ds=\\E)B, s2ds=\\E*B,
+ s3ds=\\E+B, setab=\\E[4%p1%dm, setaf=\\E[3%p1%dm,
+ setb=\\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
+ setf=\\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
+ sgr=\\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p8%t;11%;%?%p9%t;12%;m,
+ sgr0=\\E[0;10m, tbc=\\E[2g, u6=\\E[%d;%dR, u7=\\E[6n,
u8=\\E[?%[;0123456789]c, u9=\\E[c, vpa=\\E[%p1%dd,\s+2
.in +2
.fi
(i.e., an automatic return and line-feed
when the end of a line is reached) is indicated by the capability \fBam\fR.
Hence the description of ansi includes \fBam\fR.
-Numeric capabilities are followed by the character `#' and then the value.
+Numeric capabilities are followed by the character `#' and then a positive value.
Thus \fBcols\fR, which indicates the number of columns the terminal has,
gives the value `80' for ansi.
+Values for numeric capabilities may be specified in decimal, octal or hexadecimal,
+using the C programming language conventions (e.g., 255, 0377 and 0xff or 0xFF).
.PP
Finally, string valued capabilities, such as \fBel\fR (clear to end of line
sequence) are given by the two-character code, an `=', and then a string
\fB\e:\fR for \fB:\fR,
and \fB\e0\fR for null.
(\fB\e0\fR will produce \e200, which does not terminate a string but behaves
-as a null character on most terminals.)
+as a null character on most terminals, providing CS7 is specified. See stty(1).)
Finally, characters may be given as three octal digits after a \fB\e\fR.
.PP
A delay in milliseconds may appear anywhere in a string capability, enclosed in
or bugs in the screen-handling code of the test program.
.PP
To get the padding for insert line right (if the terminal manufacturer
-did not document it) a severe test is to edit /etc/passwd at 9600 baud,
+did not document it) a severe test is to edit a large file at 9600 baud,
delete 16 or so lines from the middle of the screen, then hit the `u'
key several times quickly.
If the terminal messes up, more padding is usually needed.
.PP
Cursor addressing and other strings requiring parameters
in the terminal are described by a
-parameterized string capability, with
+parameterized string capability, with
.IR printf (3S)
like escapes \fB%x\fR in it.
For example, to address the cursor, the
.nf
.ta .5i 1.5i
\s-1%% outputs `%'
- %d print pop() as in printf
- %2d print pop() like %2d
- %3d print pop() like %3d
- %02d
- %03d as in printf
- %x print pop() as in printf
- %2x print pop() like %2x
- %3x print pop() like %3x
- %02x
- %03x as in printf
+ %\fI[[\fP:\fI]flags][width[.precision]][\fPdoxXs\fI]\fP
+ as in \fBprintf\fP, flags are [-+#] and space
%c print pop() gives %c
- %s print pop() gives %s
- %p[1-9] push i'th parm
- %P[a-z] set variable [a-z] to pop()
- %g[a-z] get variable [a-z] and push it
- %'c' char constant c
- %{nn} integer constant nn
+ %p[1-9] push \fIi\fP'th parm
+ %P[a-z] set dynamic variable [a-z] to pop()
+ %g[a-z] get dynamic variable [a-z] and push it
+ %P[A-Z] set static variable [a-z] to pop()
+ %g[A-Z] get static variable [a-z] and push it
+ %'\fIc\fP' char constant \fIc\fP
+ %{\fInn\fP} integer constant \fInn\fP
+ %l push strlen(pop)
%+ %- %* %/ %m
arithmetic (%m is mod): push(pop() op pop())
Then the same is done for the second parameter.
More complex arithmetic is possible using the stack.
.PP
+.SS Cursor Motions
+.PP
+If the terminal has a fast way to home the cursor
+(to very upper left corner of screen) then this can be given as
+\fBhome\fR; similarly a fast way of getting to the lower left-hand corner
+can be given as \fBll\fR; this may involve going up with \fBcuu1\fR
+from the home position,
+but a program should never do this itself (unless \fBll\fR does) because it
+can make no assumption about the effect of moving up from the home position.
+Note that the home position is the same as addressing to (0,0):
+to the top left corner of the screen, not of memory.
+(Thus, the \eEH sequence on HP terminals cannot be used for
+.BR home .)
+.PP
If the terminal has row or column absolute cursor addressing,
these can be given as single parameter capabilities
.B hpa
(vertical position absolute).
Sometimes these are shorter than the more general two parameter
sequence (as with the hp2645) and can be used in preference to
-.B cup .
+.BR cup .
If there are parameterized local motions (e.g., move
.I n
spaces to the right) these can be given as
.BR cup ,
such as the \s-1TEKTRONIX\s+1 4025.
.PP
-.SS Cursor Motions
-.PP
-If the terminal has a fast way to home the cursor
-(to very upper left corner of screen) then this can be given as
-\fBhome\fR; similarly a fast way of getting to the lower left-hand corner
-can be given as \fBll\fR; this may involve going up with \fBcuu1\fR
-from the home position,
-but a program should never do this itself (unless \fBll\fR does) because it
-can make no assumption about the effect of moving up from the home position.
-Note that the home position is the same as addressing to (0,0):
-to the top left corner of the screen, not of memory.
-(Thus, the \eEH sequence on HP terminals cannot be used for
-.BR home .)
+If the terminal needs to be in a special mode when running
+a program that uses these capabilities,
+the codes to enter and exit this mode can be given as \fBsmcup\fR and \fBrmcup\fR.
+This arises, for example, from terminals like the Concept with more than
+one page of memory.
+If the terminal has only memory relative cursor addressing and not screen
+relative cursor addressing, a one screen-sized window must be fixed into
+the terminal for cursor addressing to work properly.
+This is also used for the \s-1TEKTRONIX\s+1 4025,
+where
+.B smcup
+sets the command character to be the one used by terminfo.
+If the \fBsmcup\fP sequence will not restore the screen after an
+\fBrmcup\fP sequence is output (to the state prior to outputting
+\fBrmcup\fP), specify \fBnrrmc\fP.
.PP
.SS Area Clears
.PP
If the terminal can clear from the current position to the end of the
line, leaving the cursor where it is, this should be given as \fBel\fR.
+If the terminal can clear from the beginning of the line to the current
+position inclusive, leaving
+the cursor where it is, this should be given as \fBel1\fP.
If the terminal can clear from the current position to the end of the
display, then this should be given as \fBed\fR.
\fBEd\fR is only defined from the first column of a line.
.B il
and
.BR dl .
+.PP
If the terminal has a settable scrolling region (like the vt100)
the command to set this can be described with the
.B csr
.B sc
and
.B rc
-(save and restore cursor) commands may be useful for ensuring that
+(save and restore cursor) commands may be useful for ensuring that
your synthesized insert/delete string does not move the cursor.
(Note that the \fBncurses\fR(3X) library does this synthesis
automatically, so you need not compose insert/delete strings for
.PP
The boolean \fBnon_dest_scroll_region\fR should be set if each scrolling
window is effectively a view port on a screen-sized canvas. To test for
-this capability, create a scrolling region in the middle of the screen,
+this capability, create a scrolling region in the middle of the screen,
write something to the bottom line, move the cursor to the top of the region,
and do \fBri\fR followed by \fBdl1\fR or \fBind\fR. If the data scrolled
off the bottom of the region by the \fBri\fR re-appears, then scrolling
.I n
times.
.PP
+If padding is necessary between characters typed while not
+in insert mode, give this as a number of milliseconds padding in \fBrmp\fP.
+.PP
It is occasionally necessary to move around while in insert mode
to delete characters on the same line (e.g., if there is a tab after
the insertion position). If your terminal allows motion while in
Codes to begin underlining and end underlining can be given as \fBsmul\fR
and \fBrmul\fR respectively.
If the terminal has a code to underline the current character and move
-the cursor one space to the right,
+the cursor one space to the right,
such as the Microterm Mime,
this can be given as \fBuc\fR.
.PP
.B sgr
(set attributes),
taking 9 parameters.
-Each parameter is either 0 or 1, as the corresponding attribute is on or off.
+Each parameter is either 0 or nonzero, as the corresponding attribute is on or off.
The 9 parameters are, in order:
standout, underline, reverse, blink, dim, bold, blank, protect, alternate
character set.
.BR sgr ,
only those for which corresponding separate attribute commands exist.
.PP
+For example, the DEC vt220 supports most of the modes:
+.PP
+.TS
+center;
+l c c
+l c c
+lw28 lw6 lw2 lw20.
+\fBtparm parameter attribute escape sequence\fP
+
+none none \\E[0m
+p1 standout \\E[0;1;7m
+p2 underline \\E[0;4m
+p3 reverse \\E[0;7m
+p4 blink \\E[0;5m
+p5 dim not available
+p6 bold \\E[0;1m
+p7 invis \\E[0;8m
+p8 protect not used
+p9 altcharset ^O (off) ^N (on)
+.TE
+.PP
+We begin each escape sequence by turning off any existing modes, since
+there is no quick way to determine whether they are active.
+Standout is set up to be the combination of reverse and bold.
+The vt220 terminal has a protect mode,
+though it is not commonly used in sgr
+because it protects characters on the screen from the host's erasures.
+The altcharset mode also is different in that it is either ^O or ^N,
+depending on whether it is off or on.
+If all modes are turned on, the resulting sequence is \\E[0;1;4;5;7;8m^N.
+.PP
+Some sequences are common to different modes.
+For example, ;7 is output when either p1 or p3 is true, that is, if
+either standout or reverse modes are turned on.
+.PP
+Writing out the above sequences, along with their dependencies yields
+.PP
+.TS
+center;
+l c c
+l c c
+lw28 lw6 lw2 lw20.
+\fBsequence when to output terminfo translation\fP
+
+\\E[0 always \\E[0
+;1 if p1 or p6 %?%p1%p6%|%t;1%;
+;4 if p2 %?%p2%|%t;4%;
+;5 if p4 %?%p4%|%t;5%;
+;7 if p1 or p3 %?%p1%p3%|%t;7%;
+;8 if p7 %?%p7%|%t;8%;
+m always m
+^N or ^O if p9 ^N, else ^O %?%p9%t^N%e^O%;
+.TE
+.PP
+Putting this all together into the sgr sequence gives:
+.PP
+.nf
+ sgr=\\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;
+ %?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\\016%e\\017%;,
+.fi
+.PP
+Remember that if you specify sgr, you must also specify sgr0.
+.PP
Terminals with the ``magic cookie'' glitch
.RB ( xmc )
deposit special ``cookies'' when they receive mode-setting sequences,
.BR cnorm
should be given which undoes the effects of both of these modes.
.PP
-If the terminal needs to be in a special mode when running
-a program that uses these capabilities,
-the codes to enter and exit this mode can be given as \fBsmcup\fR and \fBrmcup\fR.
-This arises, for example, from terminals like the Concept with more than
-one page of memory.
-If the terminal has only memory relative cursor addressing and not screen
-relative cursor addressing, a one screen-sized window must be fixed into
-the terminal for cursor addressing to work properly.
-This is also used for the \s-1TEKTRONIX\s+1 4025,
-where
-.B smcup
-sets the command character to be the one used by terminfo.
-.PP
If your terminal correctly generates underlined characters
(with no special codes needed)
even though it does not overstrike,
then you should give the capability \fBul\fR.
+If a character overstriking another leaves both characters on the screen,
+specify the capability \fBos\fP.
If overstrikes are erasable with a blank,
then this should be indicated by giving \fBeo\fR.
.PP
-.SS Keypad Handling
+.SS Keypad and Function Keys
.PP
If the terminal has a keypad that transmits codes when the keys are pressed,
this information can be given. Note that it is not possible to handle
give these codes as \fBsmkx\fR and \fBrmkx\fR.
Otherwise the keypad is assumed to always transmit.
The codes sent by the left arrow, right arrow, up arrow, down arrow,
-and home keys can be given as \fBkcub1, kcuf1, kcuu1, kcud1,
-\fRand\fB khome\fR respectively.
+and home keys can be given as
+\fBkcub1, kcuf1, kcuu1, kcud1, \fRand\fB khome\fR respectively.
If there are function keys such as f0, f1, ..., f10, the codes they send
can be given as \fBkf0, kf1, ..., kf10\fR.
If these keys have labels other than the default f0 through f10, the labels
.BR kc3 .
These keys are useful when the effects of a 3 by 3 directional pad are needed.
.PP
+Strings to program function keys can be given as
+.BR pfkey ,
+.BR pfloc ,
+and
+.BR pfx .
+A string to program screen labels should be specified as \fBpln\fP.
+Each of these strings takes two parameters: the function key number to
+program (from 0 to 10) and the string to program it with.
+Function key numbers out of this range may program undefined keys in
+a terminal dependent manner.
+The difference between the capabilities is that
+.B pfkey
+causes pressing the given key to be the same as the user typing the
+given string;
+.B pfloc
+causes the string to be executed by the terminal in local; and
+.B pfx
+causes the string to be transmitted to the computer.
+.PP
+The capabilities \fBnlab\fP, \fBlw\fP and \fBlh\fP
+define the number of programmable
+screen labels and their width and height.
+If there are commands to turn the labels on and off,
+give them in \fBsmln\fP and \fBrmln\fP.
+\fBsmln\fP is normally output after one or more pln
+sequences to make sure that the change becomes visible.
+.PP
.SS Tabs and Initialization
.PP
If the terminal has hardware tabs, the command to advance to the next
tab stop can be given as
.B ht
(usually control I).
-A ``back-tab'' command which moves leftward to the next tab stop can
+A ``back-tab'' command which moves leftward to the preceding tab stop can
be given as
.BR cbt .
By convention, if the teletype modes indicate that tabs are being
These strings are expected to set the terminal into modes consistent
with the rest of the terminfo description.
They are normally sent to the terminal, by the
-.IR tset
+.I init
+option of the
+.IR tput
program, each time the user logs in.
They will be printed in the following order:
+run the program
+.BR iprog ;
+output
.BR is1 ;
.BR is2 ;
-setting tabs using
+set the margins using
+.BR mgc ,
+.BR smgl and
+.BR smgr ;
+set tabs using
.B tbc
and
.BR hts ;
+print the file
.BR if ;
-running the program
-.BR iprog ;
and finally
+output
.BR is3 .
+.PP
Most initialization is done with
.BR is2 .
Special terminal modes can be set up without duplicating strings
.IR reset
program, which is used when the terminal gets into a wedged state.
Commands are normally placed in
-.B rs2
+.BR rs1 ,
+.BR rs2
+.B rs3
and
.B rf
only if they produce annoying effects on the screen and are not
center expand;
c l l c
c l l c
-lw25 lw6 lw2 lw20.
+lw28 lw6 lw2 lw20.
.\".TH
-\fBGlyph ACS Ascii VT100
-Name Name Default Name\fR
-upper left corner ACS_ULCORNER + l
-lower left corner ACS_LLCORNER + m
-upper right corner ACS_URCORNER + k
-lower right corner ACS_LRCORNER + j
-tee pointing right ACS_LTEE + t
-tee pointing left ACS_RTEE + u
-tee pointing up ACS_BTEE + v
-tee pointing down ACS_TTEE + w
-horizontal line ACS_HLINE - q
-vertical line ACS_VLINE | x
-large plus or crossover ACS_PLUS + n
-scan line 1 ACS_S1 ~ o
-scan line 9 ACS_S9 \&_ s
-diamond ACS_DIAMOND + `
-checker board (stipple) ACS_CKBOARD : a
-degree symbol ACS_DEGREE \e f
-plus/minus ACS_PLMINUS # g
-bullet ACS_BULLET o ~
+\fBGlyph ACS Ascii VT100\fR
+\fBName Name Default Name\fR
+UK pound sign ACS_STERLING f }
+arrow pointing down ACS_DARROW v .
arrow pointing left ACS_LARROW < ,
arrow pointing right ACS_RARROW > +
-arrow pointing down ACS_DARROW v .
arrow pointing up ACS_UARROW ^ -
board of squares ACS_BOARD # h
-lantern symbol ACS_LANTERN # I
+bullet ACS_BULLET o ~
+checker board (stipple) ACS_CKBOARD : a
+degree symbol ACS_DEGREE \e f
+diamond ACS_DIAMOND + `
+greater-than-or-equal-to ACS_GEQUAL > z
+greek pi ACS_PI * {
+horizontal line ACS_HLINE - q
+lantern symbol ACS_LANTERN # i
+large plus or crossover ACS_PLUS + n
+less-than-or-equal-to ACS_LEQUAL < y
+lower left corner ACS_LLCORNER + m
+lower right corner ACS_LRCORNER + j
+not-equal ACS_NEQUAL ! |
+plus/minus ACS_PLMINUS # g
+scan line 1 ACS_S1 ~ o
+scan line 3 ACS_S3 - p
+scan line 7 ACS_S7 - r
+scan line 9 ACS_S9 \&_ s
solid square block ACS_BLOCK # 0
+tee pointing down ACS_TTEE + w
+tee pointing left ACS_RTEE + u
+tee pointing right ACS_LTEE + t
+tee pointing up ACS_BTEE + v
+upper left corner ACS_ULCORNER + l
+upper right corner ACS_URCORNER + k
+vertical line ACS_VLINE | x
.TE
.PP
The best way to define a new device's graphics set is to add a column
To change the current foreground or background color on a Tektronix-type
terminal, use \fBsetaf\fR (set ANSI foreground) and \fBsetab\fR (set ANSI
background) or \fBsetf\fR (set foreground) and \fBsetb\fR (set background).
-These take one parameter, the color number. The SVr4 documentation describes
+These take one parameter, the color number. The SVr4 documentation describes
only \fBsetaf\fR/\fBsetab\fR; the XPG4 draft says that "If the terminal
supports ANSI escape sequences to set background and foreground, they should
be coded as \fBsetaf\fR and \fBsetab\fR, respectively. If the terminal
On an HP-like terminal, \fBinitp\fR may give a capability for changing a
color-pair value. It will take seven parameters; a color-pair number (0 to
\fBmax_pairs\fR - 1), and two triples describing first background and then
-foreground colors. These parameters must be (Red, Green, Blue) or
+foreground colors. These parameters must be (Red, Green, Blue) or
(Hue, Lightness, Saturation) depending on \fBhls\fR.
.PP
On some color terminals, colors collide with highlights. You can register
foreground color blue and is not available in color mode. These should have
an \fBncv\fR capability of 2.
.PP
+SVr4 curses does nothing with \fBncv\fR, ncurses recognizes it and optimizes
+the output in favor of colors.
+.PP
.SS Miscellaneous
+If the terminal requires other than a null (zero) character as a pad, then this
+can be given as pad.
+Only the first character of the pad string is used.
+If the terminal does not have a pad character, specify npc.
+Note that ncurses implements the termcap-compatible \fBPC\fR variable;
+though the application may set this value to something other than
+a null, ncurses will test \fBnpc\fR first and use napms if the terminal
+has no pad character.
.PP
If the terminal can move up or down half a line,
this can be indicated with
.B mc5p
is in effect.
.PP
-Strings to program function keys can be given as
-.BR pfkey ,
-.BR pfloc ,
-and
-.BR pfx .
-Each of these strings takes two parameters: the function key number to
-program (from 0 to 10) and the string to program it with.
-Function key numbers out of this range may program undefined keys in
-a terminal dependent manner.
-The difference between the capabilities is that
-.B pfkey
-causes pressing the given key to be the same as the user typing the
-given string;
-.B pfloc
-causes the string to be executed by the terminal in local; and
-.B pfx
-causes the string to be transmitted to the computer.
-.PP
.SS Glitches and Braindamage
.PP
Hazeltine terminals, which do not allow `~' characters to be displayed should
`beehive_glitch'; it is now `no_esc_ctl_c'.
.PP
Other specific terminal problems may be corrected by adding more
-capabilities of the form \fBx\fIx\fR.
+capabilities of the form \fBx\fR\fIx\fR.
.PP
.SS Similar Terminals
.PP
an alternate-character-set mode (such modes may, among other things, map
CR and NL to characters that don't trigger local motions).
The \fBncurses\fR implementation ignores \fBmsgr\fR in \fBALTCHARSET\fR
-mode. This raises the possibility that an XPG4
+mode. This raises the possibility that an XPG4
implementation making the opposite interpretation may need terminfo
entries made for \fBncurses\fR to have \fBmsgr\fR turned off.
.PP
.PP
\fBSVr1, Ultrix\fR --
These support a restricted subset of terminfo capabilities. The booleans
-end with \fBxon_xoff\fR; the numerics with \fBwidth_status_line\fR; and the
+end with \fBxon_xoff\fR; the numerics with \fBwidth_status_line\fR; and the
strings with \fBprtr_non\fR.
.PP
\fBHP/UX\fR --
.SH "SEE ALSO"
\fBtic\fR(1M), \fBcurses\fR(3X), \fBprintf\fR(3S), \fBterm\fR(\*n).
.SH AUTHORS
-Zeyd M. Ben-Halim, Eric S. Raymond. Descends from the original pcurses
-by Pavel Curtis.
+Zeyd M. Ben-Halim, Eric S. Raymond, Thomas E. Dickey.
+Based on pcurses by Pavel Curtis.
.\"#
.\"# The following sets edit modes for GNU EMACS
.\"# Local Variables:
-.\" $Id: tic.1m,v 1.18 1998/01/17 21:11:30 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998,1999 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: tic.1m,v 1.25 1999/03/07 02:07:06 tom Exp $
.TH tic 1M ""
.ds n 5
.ds d @DATADIR@/terminfo
\fBtic\fR - the \fIterminfo\fR entry-description compiler
.SH SYNOPSIS
\fBtic\fR
+[\fB\-\
+1\
+C\
+I\
+N\
+R\
+T\
+c\
+f\
+r\
+s\
+x\
+\fR]
+[\fB-e\fR \fInames\fR]
+[\fB-o\fR \fIdir\fR]
[\fB-v\fR[\fIn\fR]]
[\fB-w\fR[\fIn\fR]]
-[\fB-1hcpICNRrsTu\fR]
-[\fB-e\fR \fInames\fR]
-[\fB-o\fR \fIdir\fR] \fIfile\fR
+\fIfile\fR
.br
.SH DESCRIPTION
The command \fBtic\fR translates a \fBterminfo\fR file from source
directory first, look at \fI$HOME/.terminfo\fR if TERMINFO is not set, and
finally look in \fI\*d\fR.
.TP
-\fB-h\fR
-Print help message and exit.
-.TP
\fB-c\fR
specifies to only check \fIfile\fR for errors, including syntax problems and
bad use links. If you specify \fB-C\fR (\fB-I\fR) with this option, the code
\fB-1\fR
restricts the output to a single column
.TP
-\fB-T\fR
-eliminates size-restrictions on the generated text.
-This is mainly useful for testing and analysis, since the compiled
-descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo).
+\fB-C\fR
+Force source translation to termcap format. Note: this differs from the -C
+option of \fIinfocmp\fR(1M) in that it does not merely translate capability
+names, but also translates terminfo strings to termcap format. Capabilities
+that are not translatable are left in the entry under their terminfo names
+but commented out with two preceding dots.
+.TP
+\fB-G\fR
+Display constant literals in decimal form
+rather than their character equivalents.
.TP
\fB-I\fR
Force source translation to terminfo format.
Force source translation to terminfo format
using the long C variable names listed in <\fBterm.h\fR>
.TP
-\fB-C\fR
-Force source translation to termcap format. Note: this differs from the -C
-option of \fIinfocmp\fR(1M) in that it does not merely translate capability
-names, but also translates terminfo strings to termcap format. Capabilities
-that are not translatable are left in the entry under their terminfo names
-but commented out with two preceding dots.
-.TP
\fB-N\fR
Disable smart defaults.
Normally, when translating from termcap to terminfo, the compiler makes
\fB-R\fR\fIsubset\fR
Restrict output to a given subset. This option is for use with archaic
versions of terminfo like those on SVr1, Ultrix, or HP/UX that don't support
-the full set of SVR4/XSI Curses terminfo; and outright broken ports like AIX
+the full set of SVR4/XSI Curses terminfo; and outright broken ports like AIX 3.x
that have their own extensions incompatible with SVr4/XSI. Available subsets
are "SVr1", "Ultrix", "HP", "BSD" and "AIX"; see \fBterminfo\fR(\*n) for details.
.TP
-\fI-r\fR
+\fB-T\fR
+eliminates size-restrictions on the generated text.
+This is mainly useful for testing and analysis, since the compiled
+descriptions are limited (e.g., 1023 for termcap, 4096 for terminfo).
+.TP
+\fB-r\fR
Force entry resolution (so there are no remaining tc capabilities) even
when doing translation to termcap format. This may be needed if you are
preparing a termcap file for a termcap library (such as GNU termcap up
to version 1.3 or BSD termcap up to 4.3BSD) that doesn't handle multiple
tc capabilities per entry.
.TP
-\fI-s\fR
-Summarize the compile by showing the directory into which entries
-are written, and the number of entries which are compiled.
-.TP
-\fI-e\fR
+\fB-e\fR
Limit writes and translations to the following comma-separated list of
terminals.
If any name or alias of a terminal matches one of the names in
contains a '/'.
(Note: depending on how tic was compiled, this option may require -I or -C.)
.TP
+\fB-f\fR
+Display complex terminfo strings which contain if/then/else/endif expressions
+indented for readability.
+.TP
+\fB-g\fR
+Display constant character literals in quoted form
+rather than their decimal equivalents.
+.TP
+\fB-s\fR
+Summarize the compile by showing the directory into which entries
+are written, and the number of entries which are compiled.
+.TP
+\fB-x\fR
+Treat unknown capabilities as user-defined.
+.TP
\fIfile\fR
contains one or more \fBterminfo\fR terminal descriptions in source
format [see \fBterminfo\fR(\*n)]. Each description in the file
results are placed there instead of \fB\*d\fR.
Total compiled entries cannot exceed 4096 bytes. The name field cannot
-exceed 128 bytes. Terminal names exceeding 14 characters will be
-truncated to 14 characters and a warning message will be printed.
+exceed 512 bytes. Terminal names exceeding the maximum alias length
+(32 characters on systems with long filenames, 14 characters otherwise)
+will be truncated to the maximum alias length and a warning message will be printed.
.SH COMPATIBILITY
There is some evidence that historic \fBtic\fR implementations treated
description fields with no whitespace in them as additional aliases or
The error messages from this \fBtic\fR have the same format as GNU C
error messages, and can be parsed by GNU Emacs's compile facility.
-The -o, -I, -C, -N, -R, -h, -e, -T, -r and -s options
+The
+\fB-o\fR,
+\fB-G\fR,
+\fB-I\fR,
+\fB-C\fR,
+\fB-N\fR,
+\fB-R\fR,
+\fB-e\fR,
+\fB-f\fR,
+\fB-g\fR,
+\fB-T\fR,
+\fB-r\fR,
+\fB-s\fR and
+\fB-x\fR
+options
are not supported under SVr4.
The SVr4 -c mode does not report bad use links.
-.\" $Id: toe.1m,v 0.6 1997/12/06 22:14:57 tom Exp $
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: toe.1m,v 1.7 1998/03/11 21:12:53 juergen Exp $
.TH toe 1M ""
.ds n 5
.ds d @DATADIR@/terminfo
'\" t
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: tput.1,v 1.12 1999/01/24 02:44:26 Jeffrey.C.Honig Exp $
.TH tput 1 ""
.ds d @DATADIR@/terminfo
.ds n 5
(\fB0\fR for TRUE if the terminal has the capability, \fB1\fR for
FALSE if it does not), and produces no output. Before using a value
returned on standard output, the user should test the exit code
-[\fB$?\fR, see \fBsh\fR(1)] to be sure it is \fB0\fR. (See the \fBEXIT
-CODES\fR and \fBDIAGNOSTICS\fR sections.) For a complete list of capabilities
+[\fB$?\fR, see \fBsh\fR(1)] to be sure it is \fB0\fR.
+(See the \fBEXIT CODES\fR and \fBDIAGNOSTICS\fR sections.)
+For a complete list of capabilities
and the \fIcapname\fR associated with each, see \fBterminfo\fR(\*n).
.TP
\fB-T\fR\fItype\fR
indicates the \fItype\fR of terminal. Normally this option is
unnecessary, because the default is taken from the environment
variable \fBTERM\fR. If \fB-T\fR is specified, then the shell
-variables \fBLINES\fR and \fBCOLUMNS\fR will be ignored,and the
+variables \fBLINES\fR and \fBCOLUMNS\fR will be ignored,and the
operating system will not be queried for the actual screen size.
.TP
\fIcapname\fR
-indicates the attribute from the \fBterminfo\fR database.
+indicates the attribute from the \fBterminfo\fR database. When
+\fBtermcap\fR support is compiled in, the \fBtermcap\fR name for
+the attribute is also accepted.
.TP
\fIparms\fR
If the attribute is a string that takes parameters, the arguments
+.\"***************************************************************************
+.\" Copyright (c) 1998 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: tset.1,v 1.8 1998/12/26 01:44:41 tom Exp $
.TH tset 1 ""
.SH NAME
\fBtset\fR - terminal initialization
tset, with a few exceptions specified here.
.PP
The -S option of BSD tset no longer works; it prints an error message to stderr
-and dies. The -s option only sets \fBTERM\fR, not \fBTERMCAP\fB. Both these
+and dies. The -s option only sets \fBTERM\fR, not \fBTERMCAP\fP. Both these
changes are because the \fBTERMCAP\fR variable is no longer supported under
terminfo-based \fBncurses\fR, which makes \fBtset -S\fR useless (we made it die
noisily rather than silently induce lossage).
.\"
.\" Author: Thomas E. Dickey <dickey@clark.net> 1996
.\"
-.\" $Id: wresize.3x,v 1.4 1998/02/11 12:13:48 tom Exp $
+.\" $Id: wresize.3x,v 1.5 1998/03/14 23:42:44 tom Exp $
.TH wresize 3X ""
-.
.SH NAME
\fBwresize\fR - resize a curses window
-.
+..
.SH SYNOPSIS
\fB#include <curses.h>\fR
\fBint wresize(WINDOW *win, int lines, int columns);\fR
-.
+..
.SH DESCRIPTION
The \fBwresize\fR function reallocates storage for an \fBncurses\fR
window to adjust its dimensions to the specified values.
If either dimension is larger than the current values, the
window's data is filled with blanks that have the current background rendition
(as set by \fBwbkgndset\fR) merged into them.
-.
+..
.SH RETURN VALUE
The function returns the integer \fBERR\fR upon failure and \fBOK\fR on success.
It will fail if either of the dimensions less than or equal to zero,
or if an error occurs while (re)allocating memory for the window.
-.
+..
.SH NOTES
The only restriction placed on the dimensions is that they be greater than zero.
The dimensions are not compared to \fBcurses\fR screen dimensions to
simplify the logic of \fBresizeterm\fR.
The caller must ensure that the window's dimensions fit within the
actual screen dimensions.
-.
+..
.SH SEE ALSO
\fBresizeterm\fR(3X).
-.
+..
.SH AUTHOR
Thomas Dickey (from an equivalent function written in 1988 for BSD curses).
.\"#
-# $Id: Makefile.in,v 1.23 1998/02/11 12:13:50 tom Exp $
+# $Id: Makefile.in,v 1.25 1998/11/10 19:08:30 juergen Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
CFLAGS_NORMAL = $(CCFLAGS)
CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
CFLAGS_PROFILE = $(CCFLAGS) -pg
-# Juergen Pfeifer reports:
-# "Unfortunately -O crashes my linker on Linux and -O2 works"
-# If your linker coughs and dies, try uncommenting the -O2
-CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@ # -O2
+
+CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
LINK = $(CC)
LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
-SHLIB_LIST = -lncurses @SHLIB_LIST@
+SHLIB_DIRS = -L../lib -L$(libdir)
+SHLIB_LIST = $(SHLIB_DIRS) -lncurses @SHLIB_LIST@
+
MK_SHARED_LIB = @MK_SHARED_LIB@
+
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
Juergen Pfeifer
-eMail: Juergen.Pfeifer@T-Online.de
+eMail: juergen.pfeifer@gmx.net
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#ifndef _ETI_ERRNO_H_
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1999 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 *
****************************************************************************/
/****************************************************************************
- * Author: Thomas E. Dickey <dickey@clark.net> 1996,1997 *
+ * Author: Thomas E. Dickey <dickey@clark.net> 1996,1997,1999 *
****************************************************************************/
/* LINTLIBRARY */
-/* ./m_adabind.c */
+/* ./m_attribs.c */
#include "menu.priv.h"
-#undef _nc_ada_normalize_menu_opts
-void _nc_ada_normalize_menu_opts(
- int *opt)
- { /* void */ }
-
-#undef _nc_ada_normalize_item_opts
-void _nc_ada_normalize_item_opts(
- int *opt)
- { /* void */ }
-
-#undef _nc_get_item
-ITEM *_nc_get_item(
- const MENU *menu,
- int idx)
- { return(*(ITEM **)0); }
-
-/* ./m_attribs.c */
-
#undef set_menu_fore
int set_menu_fore(
MENU *menu,
/* ./m_cursor.c */
+#undef _nc_menu_cursor_pos
+int _nc_menu_cursor_pos(
+ const MENU *menu,
+ const ITEM *item,
+ int *pY,
+ int *pX)
+ { return(*(int *)0); }
+
#undef pos_menu_cursor
int pos_menu_cursor(
const MENU *menu)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_attribs.c,v 1.6 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_attribs.c,v 1.8 1999/05/16 17:24:24 juergen Exp $")
/* Macro to redraw menu if it is posted and changed */
#define Refresh_Menu(menu) \
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_cursor.c,v 1.9 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_cursor.c,v 1.13 1999/05/16 17:24:43 juergen Exp $")
/*---------------------------------------------------------------------------
-| Facility : libnmenu
-| Function : pos_menu_cursor
-|
-| Description : Position logical cursor to current item in menu
+| Facility : libnmenu
+| Function : _nc_menu_cursor_pos
+|
+| Description : Return position of logical cursor to current item
|
| Return Values : E_OK - success
| E_BAD_ARGUMENT - invalid menu
| E_NOT_POSTED - Menu is not posted
+--------------------------------------------------------------------------*/
-int pos_menu_cursor(const MENU * menu)
+int _nc_menu_cursor_pos(const MENU* menu,
+ const ITEM* item,
+ int* pY, int* pX)
{
- if (!menu)
- RETURN(E_BAD_ARGUMENT);
+ if (!menu || !pX || !pY)
+ return(E_BAD_ARGUMENT);
else
{
- ITEM *item;
- int x, y;
- WINDOW *win, *sub;
-
+ if ((ITEM*)0 == item)
+ item = menu->curitem;
+ assert(item!=(ITEM*)0);
+
if ( !( menu->status & _POSTED ) )
- RETURN(E_NOT_POSTED);
-
- item = menu->curitem;
- assert(item);
-
- x = item->x * (menu->spc_cols + menu->itemlen);
- y = (item->y - menu->toprow) * menu->spc_rows;
+ return(E_NOT_POSTED);
+
+ *pX = item->x * (menu->spc_cols + menu->itemlen);
+ *pY = (item->y - menu->toprow) * menu->spc_rows;
+ }
+ return(E_OK);
+}
+
+/*---------------------------------------------------------------------------
+| Facility : libnmenu
+| Function : pos_menu_cursor
+|
+| Description : Position logical cursor to current item in menu
+|
+| Return Values : E_OK - success
+| E_BAD_ARGUMENT - invalid menu
+| E_NOT_POSTED - Menu is not posted
++--------------------------------------------------------------------------*/
+int pos_menu_cursor(const MENU * menu)
+{
+ WINDOW *win, *sub;
+ int x, y;
+ int err = _nc_menu_cursor_pos(menu,(ITEM*)0,&y,&x);
+
+ if (E_OK==err)
+ {
win = menu->userwin ? menu->userwin : stdscr;
sub = menu->usersub ? menu->usersub : win;
assert(win && sub);
-
+
if ((menu->opt & O_SHOWMATCH) && (menu->pindex > 0))
x += ( menu->pindex + menu->marklen - 1);
-
+
wmove(sub,y,x);
-
+
if ( win != sub )
{
wcursyncup(sub);
wsyncup(sub);
untouchwin(sub);
- }
+ }
}
- RETURN(E_OK);
+ RETURN(err);
}
/* m_cursor.c ends here */
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_driver.c,v 1.10 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_driver.c,v 1.17 1999/05/16 17:24:55 juergen Exp $")
/* Macros */
(menu)->pattern[(menu)->pindex] = '\0'; }
/*---------------------------------------------------------------------------
-| Facility : libnmenu
-| Function : static bool Is_Sub_String(
+| Facility : libnmenu
+| Function : static bool Is_Sub_String(
| bool IgnoreCaseFlag,
| const char *part,
| const char *string)
-|
+|
| Description : Checks whether or not part is a substring of string.
|
| Return Values : TRUE - if it is a substring
}
/*---------------------------------------------------------------------------
-| Facility : libnmenu
+| Facility : libnmenu
| Function : int _nc_Match_Next_Character_In_Item_Name(
| MENU *menu,
| int ch,
| ITEM **item)
-|
+|
| Description : This internal routine is called for a menu positioned
| at an item with three different classes of characters:
| - a printable character; the character is added to
| the item where the search starts. On return - if
| a match was found - it contains a pointer to the
| matching item.
-|
+|
| Return Values : E_OK - an item matching the pattern was found
| E_NO_MATCH - nothing found
+--------------------------------------------------------------------------*/
{
bool found = FALSE, passed = FALSE;
int idx, last;
-
+
assert( menu && item && *item);
idx = (*item)->index;
-
+
if (ch && ch!=BS)
{
/* if we become to long, we need no further checking : there can't be
a match ! */
- if ((menu->pindex+1) > menu->namelen)
+ if ((menu->pindex+1) > menu->namelen)
RETURN(E_NO_MATCH);
-
+
Add_Character_To_Pattern(menu,ch);
/* we artificially position one item back, because in the do...while
loop we start with the next item. This means, that with a new
pattern search we always start the scan with the actual item. If
we do a NEXT_PATTERN oder PREV_PATTERN search, we start with the
one after or before the actual item. */
- if (--idx < 0)
+ if (--idx < 0)
idx = menu->nitems-1;
}
-
+
last = idx; /* this closes the cycle */
-
+
do{
if (ch==BS)
{ /* we have to go backward */
- if (--idx < 0)
+ if (--idx < 0)
idx = menu->nitems-1;
}
else
{ /* otherwise we always go forward */
- if (++idx >= menu->nitems)
+ if (++idx >= menu->nitems)
idx = 0;
}
if (Is_Sub_String((menu->opt & O_IGNORECASE) != 0,
)
found = TRUE;
else
- passed = TRUE;
+ passed = TRUE;
} while (!found && (idx != last));
-
+
if (found)
{
if (!((idx==(*item)->index) && passed))
If we searched with an expanded new pattern, we should never reach
this point, because if the expanded pattern matches also the actual
item we will find it in the first attempt (passed==FALSE) and we
- will never cycle through the whole item array.
+ will never cycle through the whole item array.
*/
assert( ch==0 || ch==BS );
}
/* if we had no match with a new pattern, we have to restore it */
Remove_Character_From_Pattern(menu);
}
- }
+ }
RETURN(E_NO_MATCH);
-}
+}
/*---------------------------------------------------------------------------
-| Facility : libnmenu
+| Facility : libnmenu
| Function : int menu_driver(MENU *menu, int c)
-|
+|
| Description : Central dispatcher for the menu. Translates the logical
| request 'c' into a menu action.
|
int result = E_OK;
ITEM *item;
int my_top_row, rdiff;
-
+
if (!menu)
RETURN(E_BAD_ARGUMENT);
-
+
if ( menu->status & _IN_DRIVER )
RETURN(E_BAD_STATE);
if ( !( menu->status & _POSTED ) )
RETURN(E_NOT_POSTED);
-
- my_top_row = menu->toprow;
- item = menu->curitem;
- assert(item);
-
- if ((c > KEY_MAX) && (c<=MAX_MENU_COMMAND))
- {
- if (!((c==REQ_BACK_PATTERN)
- || (c==REQ_NEXT_MATCH) || (c==REQ_PREV_MATCH)))
- {
- assert( menu->pattern );
- Reset_Pattern(menu);
- }
-
- switch(c)
- {
- case REQ_LEFT_ITEM:
- /*=================*/
- NAVIGATE(left);
- break;
-
- case REQ_RIGHT_ITEM:
- /*==================*/
- NAVIGATE(right);
- break;
-
- case REQ_UP_ITEM:
- /*===============*/
- NAVIGATE(up);
- break;
-
- case REQ_DOWN_ITEM:
- /*=================*/
- NAVIGATE(down);
- break;
-
- case REQ_SCR_ULINE:
- /*=================*/
- if (my_top_row == 0)
- result = E_REQUEST_DENIED;
- else
- {
- --my_top_row;
- item = item->up;
- }
- break;
-
- case REQ_SCR_DLINE:
- /*=================*/
- my_top_row++;
- if ((menu->rows - menu->arows)>0)
- {
- /* only if the menu has less items than rows, we can deny the
- request. Otherwise the epilogue of this routine adjusts the
- top row if necessary */
- my_top_row--;
+
+ item = menu->curitem;
+
+ my_top_row = menu->toprow;
+ assert(item);
+
+ if ((c > KEY_MAX) && (c<=MAX_MENU_COMMAND))
+ {
+ if (!((c==REQ_BACK_PATTERN)
+ || (c==REQ_NEXT_MATCH) || (c==REQ_PREV_MATCH)))
+ {
+ assert( menu->pattern );
+ Reset_Pattern(menu);
+ }
+
+ switch(c)
+ {
+ case REQ_LEFT_ITEM:
+ /*=================*/
+ NAVIGATE(left);
+ break;
+
+ case REQ_RIGHT_ITEM:
+ /*==================*/
+ NAVIGATE(right);
+ break;
+
+ case REQ_UP_ITEM:
+ /*===============*/
+ NAVIGATE(up);
+ break;
+
+ case REQ_DOWN_ITEM:
+ /*=================*/
+ NAVIGATE(down);
+ break;
+
+ case REQ_SCR_ULINE:
+ /*=================*/
+ if (my_top_row == 0 || !(item->up))
result = E_REQUEST_DENIED;
- }
- else
- item = item->down;
- break;
-
- case REQ_SCR_DPAGE:
- /*=================*/
- rdiff = menu->rows - menu->arows - my_top_row;
- if (rdiff > menu->arows)
- rdiff = menu->arows;
- if (rdiff==0)
- result = E_REQUEST_DENIED;
- else
- {
- my_top_row += rdiff;
- while(rdiff-- > 0)
- item = item->down;
- }
- break;
-
- case REQ_SCR_UPAGE:
- /*=================*/
- rdiff = (menu->arows < my_top_row) ?
- menu->arows : my_top_row;
- if (rdiff==0)
- result = E_REQUEST_DENIED;
- else
- {
- my_top_row -= rdiff;
- while(rdiff--)
+ else
+ {
+ --my_top_row;
item = item->up;
- }
- break;
-
- case REQ_FIRST_ITEM:
- /*==================*/
- item = menu->items[0];
- break;
-
- case REQ_LAST_ITEM:
- /*=================*/
- item = menu->items[menu->nitems-1];
- break;
-
- case REQ_NEXT_ITEM:
- /*=================*/
- if ((item->index+1)>=menu->nitems)
- {
- if (menu->opt & O_NONCYCLIC)
+ }
+ break;
+
+ case REQ_SCR_DLINE:
+ /*=================*/
+ if ((my_top_row + menu->arows >= menu->rows) || !(item->down))
+ {
+ /* only if the menu has less items than rows, we can deny the
+ request. Otherwise the epilogue of this routine adjusts the
+ top row if necessary */
result = E_REQUEST_DENIED;
- else
- item = menu->items[0];
- }
- else
- item = menu->items[item->index + 1];
- break;
-
- case REQ_PREV_ITEM:
- /*=================*/
- if (item->index<=0)
- {
- if (menu->opt & O_NONCYCLIC)
+ }
+ else {
+ my_top_row++;
+ item = item->down;
+ }
+ break;
+
+ case REQ_SCR_DPAGE:
+ /*=================*/
+ rdiff = menu->rows - (menu->arows + my_top_row);
+ if (rdiff > menu->arows)
+ rdiff = menu->arows;
+ if (rdiff<=0)
+ result = E_REQUEST_DENIED;
+ else
+ {
+ my_top_row += rdiff;
+ while(rdiff-- > 0 && item!=(ITEM*)0)
+ item = item->down;
+ }
+ break;
+
+ case REQ_SCR_UPAGE:
+ /*=================*/
+ rdiff = (menu->arows < my_top_row) ? menu->arows : my_top_row;
+ if (rdiff<=0)
+ result = E_REQUEST_DENIED;
+ else
+ {
+ my_top_row -= rdiff;
+ while(rdiff-- && item!=(ITEM*)0)
+ item = item->up;
+ }
+ break;
+
+ case REQ_FIRST_ITEM:
+ /*==================*/
+ item = menu->items[0];
+ break;
+
+ case REQ_LAST_ITEM:
+ /*=================*/
+ item = menu->items[menu->nitems-1];
+ break;
+
+ case REQ_NEXT_ITEM:
+ /*=================*/
+ if ((item->index+1)>=menu->nitems)
+ {
+ if (menu->opt & O_NONCYCLIC)
+ result = E_REQUEST_DENIED;
+ else
+ item = menu->items[0];
+ }
+ else
+ item = menu->items[item->index + 1];
+ break;
+
+ case REQ_PREV_ITEM:
+ /*=================*/
+ if (item->index<=0)
+ {
+ if (menu->opt & O_NONCYCLIC)
+ result = E_REQUEST_DENIED;
+ else
+ item = menu->items[menu->nitems-1];
+ }
+ else
+ item = menu->items[item->index - 1];
+ break;
+
+ case REQ_TOGGLE_ITEM:
+ /*===================*/
+ if (menu->opt & O_ONEVALUE)
+ {
result = E_REQUEST_DENIED;
- else
- item = menu->items[menu->nitems-1];
- }
- else
- item = menu->items[item->index - 1];
- break;
-
- case REQ_TOGGLE_ITEM:
- /*===================*/
- if (menu->opt & O_ONEVALUE)
- {
+ }
+ else
+ {
+ if (menu->curitem->opt & O_SELECTABLE)
+ {
+ menu->curitem->value = !menu->curitem->value;
+ Move_And_Post_Item(menu,menu->curitem);
+ _nc_Show_Menu(menu);
+ }
+ else
+ result = E_NOT_SELECTABLE;
+ }
+ break;
+
+ case REQ_CLEAR_PATTERN:
+ /*=====================*/
+ /* already cleared in prologue */
+ break;
+
+ case REQ_BACK_PATTERN:
+ /*====================*/
+ if (menu->pindex>0)
+ {
+ assert(menu->pattern);
+ Remove_Character_From_Pattern(menu);
+ pos_menu_cursor( menu );
+ }
+ else
result = E_REQUEST_DENIED;
- }
- else
- {
- if (menu->curitem->opt & O_SELECTABLE)
- {
- menu->curitem->value = !menu->curitem->value;
- Move_And_Post_Item(menu,menu->curitem);
- _nc_Show_Menu(menu);
- }
- else
- result = E_NOT_SELECTABLE;
- }
- break;
-
- case REQ_CLEAR_PATTERN:
- /*=====================*/
- /* already cleared in prologue */
- break;
-
- case REQ_BACK_PATTERN:
- /*====================*/
- if (menu->pindex>0)
- {
- assert(menu->pattern);
- Remove_Character_From_Pattern(menu);
- pos_menu_cursor( menu );
- }
- else
- result = E_REQUEST_DENIED;
- break;
-
- case REQ_NEXT_MATCH:
- /*==================*/
- assert(menu->pattern);
- if (menu->pattern[0])
- result = _nc_Match_Next_Character_In_Item_Name(menu,0,&item);
- else
- {
- if ((item->index+1)<menu->nitems)
- item=menu->items[item->index+1];
- else
- {
- if (menu->opt & O_NONCYCLIC)
- result = E_REQUEST_DENIED;
- else
- item = menu->items[0];
- }
- }
- break;
-
- case REQ_PREV_MATCH:
- /*==================*/
- assert(menu->pattern);
- if (menu->pattern[0])
- result = _nc_Match_Next_Character_In_Item_Name(menu,BS,&item);
- else
- {
- if (item->index)
- item = menu->items[item->index-1];
- else
- {
- if (menu->opt & O_NONCYCLIC)
- result = E_REQUEST_DENIED;
- else
- item = menu->items[menu->nitems-1];
- }
- }
- break;
-
- default:
- /*======*/
+ break;
+
+ case REQ_NEXT_MATCH:
+ /*==================*/
+ assert(menu->pattern);
+ if (menu->pattern[0])
+ result = _nc_Match_Next_Character_In_Item_Name(menu,0,&item);
+ else
+ {
+ if ((item->index+1)<menu->nitems)
+ item=menu->items[item->index+1];
+ else
+ {
+ if (menu->opt & O_NONCYCLIC)
+ result = E_REQUEST_DENIED;
+ else
+ item = menu->items[0];
+ }
+ }
+ break;
+
+ case REQ_PREV_MATCH:
+ /*==================*/
+ assert(menu->pattern);
+ if (menu->pattern[0])
+ result = _nc_Match_Next_Character_In_Item_Name(menu,BS,&item);
+ else
+ {
+ if (item->index)
+ item = menu->items[item->index-1];
+ else
+ {
+ if (menu->opt & O_NONCYCLIC)
+ result = E_REQUEST_DENIED;
+ else
+ item = menu->items[menu->nitems-1];
+ }
+ }
+ break;
+
+ default:
+ /*======*/
+ result = E_UNKNOWN_COMMAND;
+ break;
+ }
+ }
+ else
+ { /* not a command */
+ if ( !(c & ~((int)MAX_REGULAR_CHARACTER)) && isprint(c) )
+ result = _nc_Match_Next_Character_In_Item_Name( menu, c, &item );
+#ifdef NCURSES_MOUSE_VERSION
+ else if (KEY_MOUSE == c)
+ {
+ MEVENT event;
+ WINDOW* uwin = Get_Menu_UserWin(menu);
+
+ getmouse(&event);
+ if ((event.bstate & (BUTTON1_CLICKED |
+ BUTTON1_DOUBLE_CLICKED |
+ BUTTON1_TRIPLE_CLICKED ))
+ && wenclose(uwin,event.y, event.x))
+ { /* we react only if the click was in the userwin, that means
+ * inside the menu display area or at the decoration window.
+ */
+ WINDOW* sub = Get_Menu_Window(menu);
+ int ry = event.y, rx = event.x; /* screen coordinates */
+
+ result = E_REQUEST_DENIED;
+ if (mouse_trafo(&ry,&rx,FALSE))
+ { /* rx, ry are now "curses" coordinates */
+ if (ry < sub->_begy)
+ { /* we clicked above the display region; this is
+ * interpreted as "scroll up" request
+ */
+ if (event.bstate & BUTTON1_CLICKED)
+ result = menu_driver(menu,REQ_SCR_ULINE);
+ else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
+ result = menu_driver(menu,REQ_SCR_UPAGE);
+ else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
+ result = menu_driver(menu,REQ_FIRST_ITEM);
+ RETURN(result);
+ }
+ else if (ry >= sub->_begy + sub->_maxy)
+ { /* we clicked below the display region; this is
+ * interpreted as "scroll down" request
+ */
+ if (event.bstate & BUTTON1_CLICKED)
+ result = menu_driver(menu,REQ_SCR_DLINE);
+ else if (event.bstate & BUTTON1_DOUBLE_CLICKED)
+ result = menu_driver(menu,REQ_SCR_DPAGE);
+ else if (event.bstate & BUTTON1_TRIPLE_CLICKED)
+ result = menu_driver(menu,REQ_LAST_ITEM);
+ RETURN(result);
+ }
+ else if (wenclose(sub,event.y,event.x))
+ { /* Inside the area we try to find the hit item */
+ int i,x,y,err;
+ ry = event.y; rx = event.x;
+ if (wmouse_trafo(sub,&ry,&rx,FALSE))
+ {
+ for(i=0;i<menu->nitems;i++)
+ {
+ err = _nc_menu_cursor_pos(menu,menu->items[i],
+ &y, &x);
+ if (E_OK==err)
+ {
+ if ((ry==y) &&
+ (rx>=x) &&
+ (rx < x + menu->itemlen))
+ {
+ item = menu->items[i];
+ result = E_OK;
+ break;
+ }
+ }
+ }
+ if (E_OK==result)
+ { /* We found an item, now we can handle the click.
+ * A single click just positions the menu cursor
+ * to the clicked item. A double click toggles
+ * the item.
+ */
+ if (event.bstate & BUTTON1_DOUBLE_CLICKED)
+ {
+ _nc_New_TopRow_and_CurrentItem(menu,
+ my_top_row,
+ item);
+ menu_driver(menu,REQ_TOGGLE_ITEM);
+ result = E_UNKNOWN_COMMAND;
+ }
+ }
+ }
+ }
+ }
+ }
+ else
+ result = E_REQUEST_DENIED;
+ }
+#endif /* NCURSES_MOUSE_VERSION */
+ else
result = E_UNKNOWN_COMMAND;
- break;
- }
- }
- else
- { /* not a command */
- if ( !(c & ~((int)MAX_REGULAR_CHARACTER)) && isprint(c) )
- result = _nc_Match_Next_Character_In_Item_Name( menu, c, &item );
- else
- result = E_UNKNOWN_COMMAND;
+ }
+
+ if (E_OK==result)
+ {
+ /* Adjust the top row if it turns out that the current item unfortunately
+ doesn't appear in the menu window */
+ if ( item->y < my_top_row )
+ my_top_row = item->y;
+ else if ( item->y >= (my_top_row + menu->arows) )
+ my_top_row = item->y - menu->arows + 1;
+
+ _nc_New_TopRow_and_CurrentItem( menu, my_top_row, item );
+
}
-
- /* Adjust the top row if it turns out that the current item unfortunately
- doesn't appear in the menu window */
- if ( item->y < my_top_row )
- my_top_row = item->y;
- else if ( item->y >= (my_top_row + menu->arows) )
- my_top_row = item->y - menu->arows + 1;
-
- _nc_New_TopRow_and_CurrentItem( menu, my_top_row, item );
-
+
RETURN(result);
}
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_format.c,v 1.7 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_format.c,v 1.9 1999/05/16 17:25:04 juergen Exp $")
#define minimum(a,b) ((a)<(b) ? (a): (b))
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_global.c,v 1.9 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_global.c,v 1.11 1999/05/16 17:25:14 juergen Exp $")
MENU _nc_Default_Menu = {
16, /* Nr. of chars high */
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_hook.c,v 1.6 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_hook.c,v 1.8 1999/05/16 17:25:24 juergen Exp $")
/* "Template" macro to generate function to set application specific hook */
#define GEN_HOOK_SET_FUNCTION( typ, name ) \
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_cur.c,v 1.9 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_item_cur.c,v 1.11 1999/05/16 17:25:34 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_nam.c,v 1.7 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_item_nam.c,v 1.9 1999/05/16 17:25:43 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_new.c,v 1.8 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_item_new.c,v 1.11 1999/05/16 17:28:49 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
if (menu->mark)
{
strcpy(menu->mark, mark);
- menu->status |= _MARK_ALLOCATED;
+ if (menu != &_nc_Default_Menu)
+ menu->status |= _MARK_ALLOCATED;
}
else
{
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_opt.c,v 1.6 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_item_opt.c,v 1.10 1999/05/16 17:25:52 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
+--------------------------------------------------------------------------*/
int set_item_opts(ITEM *item, Item_Options opts)
{
+ opts &= ALL_ITEM_OPTS;
+
if (opts & ~ALL_ITEM_OPTS)
RETURN(E_BAD_ARGUMENT);
RETURN(E_BAD_ARGUMENT);
else
{
- Normalize_Item(citem);
- opts = citem->opt & ~opts;
+ Normalize_Item(citem);
+ opts = citem->opt & ~(opts & ALL_ITEM_OPTS);
return set_item_opts( item, opts );
}
}
ITEM *citem = item; /* use a copy because set_item_opts must detect
NULL item itself to adjust its behaviour */
+ opts &= ALL_ITEM_OPTS;
if (opts & ~ALL_ITEM_OPTS)
RETURN(E_BAD_ARGUMENT);
else
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_top.c,v 1.2 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_item_top.c,v 1.4 1999/05/16 17:26:01 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_use.c,v 1.8 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_item_use.c,v 1.10 1999/05/16 17:26:11 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_val.c,v 1.6 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_item_val.c,v 1.8 1999/05/16 17:26:20 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_item_vis.c,v 1.8 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_item_vis.c,v 1.10 1999/05/16 17:26:34 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_items.c,v 1.6 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_items.c,v 1.8 1999/05/16 17:26:50 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_new.c,v 1.7 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_new.c,v 1.10 1999/05/16 17:26:59 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
if (menu)
{
*menu = _nc_Default_Menu;
+ menu->status = 0;
menu->rows = menu->frows;
menu->cols = menu->fcols;
if (items && *items)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_opts.c,v 1.8 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_opts.c,v 1.12 1999/05/16 17:27:08 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
+--------------------------------------------------------------------------*/
int set_menu_opts(MENU * menu, Menu_Options opts)
{
+ opts &= ALL_MENU_OPTS;
+
if (opts & ~ALL_MENU_OPTS)
RETURN(E_BAD_ARGUMENT);
MENU *cmenu = menu; /* use a copy because set_menu_opts must detect
NULL menu itself to adjust its behaviour */
+ opts &= ALL_MENU_OPTS;
if (opts & ~ALL_MENU_OPTS)
RETURN(E_BAD_ARGUMENT);
else
MENU *cmenu = menu; /* use a copy because set_menu_opts must detect
NULL menu itself to adjust its behaviour */
+ opts &= ALL_MENU_OPTS;
if (opts & ~ALL_MENU_OPTS)
RETURN(E_BAD_ARGUMENT);
else
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_pad.c,v 1.2 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_pad.c,v 1.4 1999/05/16 17:27:17 juergen Exp $")
/* Macro to redraw menu if it is posted and changed */
#define Refresh_Menu(menu) \
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_pattern.c,v 1.2 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_pattern.c,v 1.4 1999/05/16 17:27:28 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_post.c,v 1.14 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_post.c,v 1.16 1999/05/16 17:27:38 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_req_name.c,v 1.10 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_req_name.c,v 1.12 1999/05/16 17:27:47 juergen Exp $")
static const char *request_names[ MAX_MENU_COMMAND - MIN_MENU_COMMAND + 1 ] = {
"LEFT_ITEM" ,
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_scale.c,v 1.2 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_scale.c,v 1.4 1999/05/16 17:28:00 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_spacing.c,v 1.9 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_spacing.c,v 1.11 1999/05/16 17:28:09 juergen Exp $")
#define MAX_SPC_DESC ((TABSIZE) ? (TABSIZE) : 8)
#define MAX_SPC_COLS ((TABSIZE) ? (TABSIZE) : 8)
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_sub.c,v 1.2 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_sub.c,v 1.4 1999/05/16 17:28:20 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_userptr.c,v 1.8 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: m_userptr.c,v 1.10 1999/05/16 17:28:29 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
#include "menu.priv.h"
-MODULE_ID("$Id: m_win.c,v 1.7 1998/02/11 12:13:49 tom Exp $")
+MODULE_ID("$Id: m_win.c,v 1.9 1999/05/16 17:28:37 juergen Exp $")
/*---------------------------------------------------------------------------
| Facility : libnmenu
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
#ifndef ETI_MENU
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/***************************************************************************
/* Normalize menu to default if none was given */
#define Normalize_Menu( menu ) ((menu)=(menu)?(menu):&_nc_Default_Menu)
+/* Get the user defined (framing) window of the menu */
+#define Get_Menu_UserWin(menu) ((menu)->userwin ? (menu)->userwin : stdscr)
+
/* Normalize menu window */
#define Get_Menu_Window( menu ) \
- ( (menu)->usersub ? (menu)->usersub : (\
- (menu)->userwin ? (menu)->userwin : stdscr ))
+ ((menu)->usersub ? (menu)->usersub : Get_Menu_UserWin(menu))
/* menu specific status flags */
#define _LINK_NEEDED (0x04)
/* This macro ensures, that the item becomes visible, if possible with the
specified row as the top row of the window. If this is not possible,
- the top row will be adjusted and the value is stored in the row argument.
+ the top row will be adjusted and the value is stored in the row argument.
*/
#define Adjust_Current_Item(menu,row,item) \
{ if ((item)->y < row) \
{ (menu)->pindex = 0; \
(menu)->pattern[0] = '\0'; }
-/* Internal functions. */
+/* Internal functions. */
extern void _nc_Draw_Menu(const MENU *);
extern void _nc_Show_Menu(const MENU *);
extern void _nc_Calculate_Item_Length_and_Width(MENU *);
extern void _nc_New_TopRow_and_CurrentItem(MENU *,int, ITEM *);
extern void _nc_Link_Items(MENU *);
extern int _nc_Match_Next_Character_In_Item_Name(MENU*,int,ITEM**);
+extern int _nc_menu_cursor_pos(const MENU* menu, const ITEM* item,
+ int* pY, int* pX);
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1995,1997 *
****************************************************************************/
/* Common internal header for menu and form library */
-# $Id: modules,v 1.13 1998/02/11 12:13:50 tom Exp $
+# $Id: modules,v 1.14 1999/02/18 22:39:04 juergen Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
@ base
# Library objects
-m_adabind lib $(srcdir) $(MENU_PRIV_H)
m_attribs lib $(srcdir) $(MENU_PRIV_H)
m_cursor lib $(srcdir) $(MENU_PRIV_H)
m_driver lib $(srcdir) $(MENU_PRIV_H)
--- /dev/null
+/*\r
+ * $Id: chkdef.cmd,v 1.2 1998/08/29 21:45:58 tom Exp $\r
+ *\r
+ * Author: Juan Jose Garcia Ripoll <worm@arrakis.es>.\r
+ * Webpage: http://www.arrakis.es/~worm/\r
+ *\r
+ * chkdef.cmd - checks that a .def file has no conflicts and is properly\r
+ * formatted.\r
+ *\r
+ * returns nonzero if two symbols have the same code or a line has a wrong\r
+ * format.\r
+ *\r
+ * returns 0 otherwise\r
+ *\r
+ * the standard output shows conflicts.\r
+ */\r
+parse arg def_file\r
+\r
+def_file = translate(def_file,'\','/')\r
+\r
+call CleanQueue\r
+\r
+/*\r
+ * `cmp' is zero when the file is valid\r
+ * `codes' associates a name to a code\r
+ * `names' associates a code to a name\r
+ */\r
+cmp = 0\r
+codes. = 0\r
+names. = ''\r
+\r
+/*\r
+ * This sed expression cleans empty lines, comments and special .DEF\r
+ * commands, such as LIBRARY..., EXPORTS..., etc\r
+ */\r
+tidy_up = '"s/[ ][ ]*/ /g;s/;.*//g;/^[ ]*$/d;/^[a-zA-Z]/d;"'\r
+\r
+/*\r
+ * First we find all public symbols from the original DLL. All this\r
+ * information is pushed into a REXX private list with the RXQUEUE\r
+ * utility program.\r
+ */\r
+'@echo off'\r
+'type' def_file '| sed' tidy_up '| sort | rxqueue'\r
+\r
+do while queued() > 0\r
+ /*\r
+ * We retrieve the symbol name (NEW_NAME) and its code (NEW_CODE)\r
+ */\r
+ parse pull '"' new_name '"' '@'new_code rest\r
+ select\r
+ when (new_code = '') | (new_name = '') then\r
+ /* The input was not properly formatted */\r
+ do\r
+ say 'Error: symbol "'new_name'" has no export code or is empty'\r
+ cmp = 1\r
+ end\r
+ when codes.new_name \= 0 then\r
+ /* This symbol was already defined */\r
+ if codes.new_name \= new_code then\r
+ do\r
+ cmp = 2\r
+ say 'Symbol "'new_name'" multiply defined'\r
+ end\r
+ when names.new_code \= '' then\r
+ /* This code was already assigned to a symbol */\r
+ if names.new_code \= new_name then\r
+ do\r
+ cmp = 3\r
+ say 'Conflict with "'names.new_code'" & "'new_name'" being @'new_code\r
+ end\r
+ otherwise\r
+ do\r
+ codes.new_name = new_code\r
+ names.new_code = new_name\r
+ end\r
+ end /* select */\r
+end\r
+\r
+exit cmp\r
+\r
+CleanQueue: procedure\r
+ do while queued() > 0\r
+ parse pull foo\r
+ end\r
+return\r
--- /dev/null
+/*\r
+ * $Id: cleantic.cmd,v 1.3 1998/08/29 21:43:19 tom Exp $\r
+ *\r
+ * Author: Juan Jose Garcia Ripoll <worm@arrakis.es>.\r
+ * Webpage: http://www.arrakis.es/~worm/\r
+ */\r
+parse arg dir\r
+\r
+pause\r
+dir = translate(dir,'\','/');\r
+letters = '0 1 2 3 4 5 6 7 8 9 a b c d e f g h i j k l m n o p q r s t u v w x y z'\r
+\r
+if dir = '' then\r
+ dir = '.'\r
+'echo Cleaning 'dir\r
+'for %%1 in ('letters') do @if not exist 'dir'\%%1\* (echo Cleaning ...\%%1 & rd %%1 2>NUL)'\r
--- /dev/null
+/*\r
+ * $Id: cmpdef.cmd,v 1.2 1998/08/29 21:44:47 tom Exp $\r
+ *\r
+ * Author: Juan Jose Garcia Ripoll <worm@arrakis.es>.\r
+ * Webpage: http://www.arrakis.es/~worm/\r
+ *\r
+ * cmpdef.cmd - compares two .def files, checking whether they have\r
+ * the same entries with the same export codes.\r
+ *\r
+ * returns 0 if there are no conflicts between the files -- that is,\r
+ * the newer one can replace the older one.\r
+ *\r
+ * returns 1 when either of the files is not properly formatted and\r
+ * when there are conflicts: two symbols having the same export code.\r
+ *\r
+ * the standard output shows a list with newly added symbols, plus\r
+ * replaced symbols and conflicts.\r
+ */\r
+parse arg def_file1 def_file2\r
+\r
+def_file1 = translate(def_file1,'\','/')\r
+def_file2 = translate(def_file2,'\','/')\r
+\r
+call CleanQueue\r
+\r
+/*\r
+ * `cmp' is zero when the last file is valid and upward compatible\r
+ * `numbers' is the stem where symbols are stored\r
+ */\r
+cmp = 0\r
+names. = ''\r
+numbers. = 0\r
+\r
+/*\r
+ * This sed expression cleans empty lines, comments and special .DEF\r
+ * commands, such as LIBRARY..., EXPORTS..., etc\r
+ */\r
+tidy_up = '"s/[ ][ ]*/ /g;s/;.*//g;/^[ ]*$/d;/^[a-zA-Z]/d;"'\r
+\r
+/*\r
+ * First we find all public symbols from the original DLL. All this\r
+ * information is pushed into a REXX private list with the RXQUEUE\r
+ * utility program.\r
+ */\r
+'@echo off'\r
+'type' def_file1 '| sed' tidy_up '| sort | rxqueue'\r
+\r
+do while queued() > 0\r
+ /*\r
+ * We retrieve the symbol name (NAME) and its number (NUMBER)\r
+ */\r
+ parse pull '"' name '"' '@'number rest\r
+ if number = '' || name = '' then\r
+ do\r
+ say 'Corrupted file' def_file1\r
+ say 'Symbol' name 'has no number'\r
+ exit 1\r
+ end\r
+ else\r
+ do\r
+ numbers.name = number\r
+ names.number = name\r
+ end\r
+end\r
+\r
+/*\r
+ * Now we find all public symbols from the new DLL, and compare.\r
+ */\r
+'type' def_file2 '| sed' tidy_up '| sort | rxqueue'\r
+\r
+do while queued() > 0\r
+ parse pull '"' name '"' '@'number rest\r
+ if name = '' | number = '' then\r
+ do\r
+ say 'Corrupted file' def_file2\r
+ say 'Symbol' name 'has no number'\r
+ exit 1\r
+ end\r
+ if numbers.name = 0 then\r
+ do\r
+ cmp = 1\r
+ if names.number = '' then\r
+ say 'New symbol' name 'with code @'number\r
+ else\r
+ say 'Conflict old =' names.number ', new =' name 'at @'number\r
+ end\r
+ else if numbers.name \= number then\r
+ do\r
+ cmp = 1\r
+ say name 'Symbol' name 'changed from @'numbers.name 'to @'number\r
+ end\r
+end /* do */\r
+\r
+exit cmp\r
+\r
+/*\r
+ * Cleans the REXX queue by pulling and forgetting every line.\r
+ * This is needed, at least, when `cmpdef.cmd' starts, because an aborted\r
+ * REXX program might have left some rubbish in.\r
+ */\r
+CleanQueue: procedure\r
+ do while queued() > 0\r
+ parse pull foo\r
+ end\r
+return\r
+\r
-# $Id: emx.src,v 1.4 1998/02/01 00:03:44 tom Exp $
+# $Id: emx.src,v 1.6 1999/08/15 01:56:54 tom Exp $
# This is a reformatted copy of the terminfo source for OS/2 EMX from
# Juan Jose Garcia Ripoll <worm@arrakis.es>.
# http://www.arrakis.es/~worm/
# no_color_video to inform the application that standout(1), underline(2)
# reverse(4) and invisible(64) don't work with color.
emx-base|DOS special keys,
+ bw,
ncv#71,
bel=^G,
ka1=\0G,
ansi|ANSI.SYS color,
blink=\E[5m,
bold=\E[1m,
+ kmous=\E[M,
rev=\E[7m,
rmcup=\E[0m,
rmso=\E[0m,
rmul@,
sgr0=\E[0m,
- smcup=\E[0;30;47m,
+ smcup=\E[0;37;40m,
smso=\E[7m,
smul@,
use=emx-base,
bold=\E[1;37;47m,
rev=\E[1;37;47m,
rmcup=\E[0m,
- rmso=\E[0;30;47m,
- rmul=\E[0;30;47m,
- sgr0=\E[0;30;47m,
- smcup=\E[0;30;47m,
+ rmso=\E[0;37;40m,
+ rmul=\E[0;37;40m,
+ sgr0=\E[0;37;40m,
+ smcup=\E[0;37;40m,
smso=\E[1;37;47m,
smul=\E[1;31;47m,
use=emx-base,
--- /dev/null
+LIBRARY form5 INITINSTANCE TERMINSTANCE\r
+DESCRIPTION "NCurses-5-0-990828, module form"\r
+CODE LOADONCALL\r
+DATA LOADONCALL NONSHARED MULTIPLE\r
+EXPORTS\r
+ "TYPE_ALNUM" @2 NONAME\r
+ "TYPE_ALPHA" @1 NONAME\r
+ "TYPE_ENUM" @3 NONAME\r
+ "TYPE_INTEGER" @4 NONAME\r
+ "TYPE_IPV4" @7 NONAME\r
+ "TYPE_NUMERIC" @5 NONAME\r
+ "TYPE_REGEXP" @6 NONAME\r
+ "_nc_Copy_Argument" @8 NONAME\r
+ "_nc_Copy_Type" @9 NONAME\r
+ "_nc_Default_Field" @11 NONAME\r
+ "_nc_Default_FieldType" @12 NONAME\r
+ "_nc_Default_Form" @10 NONAME\r
+ "_nc_First_Active_Field" @13 NONAME\r
+ "_nc_Free_Argument" @14 NONAME\r
+ "_nc_Free_Type" @15 NONAME\r
+ "_nc_Internal_Validation" @16 NONAME\r
+ "_nc_Make_Argument" @17 NONAME\r
+ "_nc_Position_Form_Cursor" @18 NONAME\r
+ "_nc_Refresh_Current_Field" @19 NONAME\r
+ "_nc_Set_Current_Field" @25 NONAME\r
+ "_nc_Set_Form_Page" @26 NONAME\r
+ "_nc_Synchronize_Attributes" @27 NONAME\r
+ "_nc_Synchronize_Options" @28 NONAME\r
+ "current_field" @102 NONAME\r
+ "data_ahead" @133 NONAME\r
+ "data_behind" @134 NONAME\r
+ "dup_field" @31 NONAME\r
+ "dynamic_field_info" @35 NONAME\r
+ "field_arg" @56 NONAME\r
+ "field_back" @53 NONAME\r
+ "field_buffer" @59 NONAME\r
+ "field_count" @111 NONAME\r
+ "field_fore" @52 NONAME\r
+ "field_index" @115 NONAME\r
+ "field_info" @34 NONAME\r
+ "field_init" @107 NONAME\r
+ "field_just" @41 NONAME\r
+ "field_opts" @60 NONAME\r
+ "field_opts_off" @51 NONAME\r
+ "field_opts_on" @50 NONAME\r
+ "field_pad" @45 NONAME\r
+ "field_status" @55 NONAME\r
+ "field_term" @108 NONAME\r
+ "field_type" @58 NONAME\r
+ "field_userptr" @57 NONAME\r
+ "form_driver" @126 NONAME\r
+ "form_fields" @101 NONAME\r
+ "form_init" @105 NONAME\r
+ "form_opts" @132 NONAME\r
+ "form_opts_off" @130 NONAME\r
+ "form_opts_on" @129 NONAME\r
+ "form_page" @117 NONAME\r
+ "form_request_by_name" @29 NONAME\r
+ "form_request_name" @61 NONAME\r
+ "form_sub" @104 NONAME\r
+ "form_term" @106 NONAME\r
+ "form_userptr" @131 NONAME\r
+ "form_win" @103 NONAME\r
+ "free_field" @33 NONAME\r
+ "free_fieldtype" @22 NONAME\r
+ "free_form" @109 NONAME\r
+ "link_field" @32 NONAME\r
+ "link_fieldtype" @21 NONAME\r
+ "move_field" @37 NONAME\r
+ "new_field" @30 NONAME\r
+ "new_fieldtype" @20 NONAME\r
+ "new_form" @100 NONAME\r
+ "new_page" @54 NONAME\r
+ "pos_form_cursor" @125 NONAME\r
+ "post_form" @123 NONAME\r
+ "scale_form" @118 NONAME\r
+ "set_current_field" @114 NONAME\r
+ "set_field_back" @43 NONAME\r
+ "set_field_buffer" @46 NONAME\r
+ "set_field_fore" @42 NONAME\r
+ "set_field_init" @121 NONAME\r
+ "set_field_just" @40 NONAME\r
+ "set_field_opts" @49 NONAME\r
+ "set_field_pad" @44 NONAME\r
+ "set_field_status" @47 NONAME\r
+ "set_field_term" @122 NONAME\r
+ "set_field_type" @38 NONAME\r
+ "set_field_userptr" @48 NONAME\r
+ "set_fieldtype_arg" @23 NONAME\r
+ "set_fieldtype_choice" @24 NONAME\r
+ "set_form_fields" @110 NONAME\r
+ "set_form_init" @119 NONAME\r
+ "set_form_opts" @128 NONAME\r
+ "set_form_page" @116 NONAME\r
+ "set_form_sub" @113 NONAME\r
+ "set_form_term" @120 NONAME\r
+ "set_form_userptr" @127 NONAME\r
+ "set_form_win" @112 NONAME\r
+ "set_max_field" @36 NONAME\r
+ "set_new_page" @39 NONAME\r
+ "unpost_form" @124 NONAME\r
--- /dev/null
+LIBRARY FORM2 INITINSTANCE\r
+DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - forms library'\r
+EXPORTS\r
+;\r
+; SHARED VARIABLES\r
+;\r
+ "TYPE_ALPHA" @1 ;NONAME\r
+ "TYPE_ALNUM" @2 ;NONAME\r
+ "TYPE_ENUM" @3 ;NONAME\r
+ "TYPE_INTEGER" @4 ;NONAME\r
+ "TYPE_NUMERIC" @5 ;NONAME\r
+ "TYPE_REGEXP" @6 ;NONAME\r
+\r
+ "_nc_Default_Form" @10 ;NONAME\r
+ "_nc_Default_Field" @11 ;NONAME\r
+\r
+;\r
+; FIELD FUNCTIONS\r
+;\r
+ "new_fieldtype" @20 ;NONAME\r
+ "link_fieldtype" @21 ;NONAME\r
+\r
+ "free_fieldtype" @22 ;NONAME\r
+ "set_fieldtype_arg" @23 ;NONAME\r
+ "set_fieldtype_choice" @24 ;NONAME\r
+\r
+ "new_field" @30 ;NONAME\r
+ "dup_field" @31 ;NONAME\r
+ "link_field" @32 ;NONAME\r
+\r
+ "free_field" @33 ;NONAME\r
+ "field_info" @34 ;NONAME\r
+ "dynamic_field_info" @35 ;NONAME\r
+ "set_max_field" @36 ;NONAME\r
+ "move_field" @37 ;NONAME\r
+ "set_field_type" @38 ;NONAME\r
+ "set_new_page" @39 ;NONAME\r
+ "set_field_just" @40 ;NONAME\r
+ "field_just" @41 ;NONAME\r
+ "set_field_fore" @42 ;NONAME\r
+ "set_field_back" @43 ;NONAME\r
+ "set_field_pad" @44 ;NONAME\r
+ "field_pad" @45 ;NONAME\r
+ "set_field_buffer" @46 ;NONAME\r
+ "set_field_status" @47 ;NONAME\r
+ "set_field_userptr" @48 ;NONAME\r
+ "set_field_opts" @49 ;NONAME\r
+ "field_opts_on" @50 ;NONAME\r
+ "field_opts_off" @51 ;NONAME\r
+\r
+ "field_fore" @52 ;NONAME\r
+ "field_back" @53 ;NONAME\r
+\r
+ "new_page" @54 ;NONAME\r
+ "field_status" @55 ;NONAME\r
+ "field_arg" @56 ;NONAME\r
+ "field_userptr" @57 ;NONAME\r
+ "field_type" @58 ;NONAME\r
+ "field_buffer" @59 ;NONAME\r
+ "field_opts" @60 ;NONAME\r
+\r
+;\r
+; FORM FUNCTIONS\r
+;\r
+ "new_form" @100 ;NONAME\r
+\r
+ "form_fields" @101 ;NONAME\r
+ "current_field" @102 ;NONAME\r
+\r
+ "form_win" @103 ;NONAME\r
+ "form_sub" @104 ;NONAME\r
+\r
+ "form_init" @105 ;NONAME\r
+ "form_term" @106 ;NONAME\r
+ "field_init" @107 ;NONAME\r
+ "field_term" @108 ;NONAME\r
+\r
+ "free_form" @109 ;NONAME\r
+ "set_form_fields" @110 ;NONAME\r
+ "field_count" @111 ;NONAME\r
+ "set_form_win" @112 ;NONAME\r
+ "set_form_sub" @113 ;NONAME\r
+ "set_current_field" @114 ;NONAME\r
+ "field_index" @115 ;NONAME\r
+ "set_form_page" @116 ;NONAME\r
+ "form_page" @117 ;NONAME\r
+ "scale_form" @118 ;NONAME\r
+ "set_form_init" @119 ;NONAME\r
+ "set_form_term" @120 ;NONAME\r
+ "set_field_init" @121 ;NONAME\r
+ "set_field_term" @122 ;NONAME\r
+ "post_form" @123 ;NONAME\r
+ "unpost_form" @124 ;NONAME\r
+ "pos_form_cursor" @125 ;NONAME\r
+ "form_driver" @126 ;NONAME\r
+ "set_form_userptr" @127 ;NONAME\r
+ "set_form_opts" @128 ;NONAME\r
+ "form_opts_on" @129 ;NONAME\r
+ "form_opts_off" @130 ;NONAME\r
+\r
+ "form_userptr" @131 ;NONAME\r
+\r
+ "form_opts" @132 ;NONAME\r
+\r
+ "data_ahead" @133 ;NONAME\r
+ "data_behind" @134 ;NONAME\r
+ Why System V Curses?
+ How to Design Extensions
* Portability and Configuration
- + If autoconf Fails
* Documentation Conventions
* How to Report Bugs
* A Tour of the Ncurses Library
Objective of the Package
- The objective of the ncurses package is to provide a freeware API for
- character-cell terminals and terminal emulators with the following
+ The objective of the ncurses package is to provide a free software API
+ for character-cell terminals and terminal emulators with the following
characteristics:
* Source-compatible with historical curses implementations
specification files (configure.in and aclocal.m4) to set up a new
feature macro, which you then use to condition your code.
-If autoconf Fails
-
- The 'configure' script usually gets your system environment right
- automatically. Here are some -D options you might need to compile with
- if it fails:
-
- -DHAVE_UNISTD_H
- if <unistd.h> is present
-
- -DHAVE_SIGACTION
- if the sigaction function is present
-
- -DHAVE_USLEEP
- if the usleep function is present
-
- -DSVR4_ACTION
- if (e.g., svr4) you need _POSIX_SOURCE to have sigaction
-
- -DHAVE_TERMIOS_H
- if you have <termios.h>
-
- -DHAVE_TERMIO_H
- if you have <termio.h>; otherwise it uses <sgtty.h>
-
- -DBROKEN_TIOCGETWINSZ
- on SVR4 and HPUX, the get window size ioctl is broken.
-
Documentation Conventions
There are three kinds of documentation associated with this package.
How to Report Bugs
The reporting address for bugs is bug-ncurses@gnu.org. This is a
- majordomo list; to join, write to ncurses-request@gnu.org with a
+ majordomo list; to join, write to bug-ncurses-request@gnu.org with a
message containing the line:
subscribe <name>@<host.domain>
interfaces to a small set of basic functions and data structures used
to manipulate the virtual screen (in particular, none of this code
does any I/O except through calls to more fundamental modules
- described below). The files lib_addch.c, lib_bkgnd.c, lib_box.c,
- lib_clear.c, lib_clrbot.c, lib_clreol.c, lib_data.c, lib_delch.c,
- lib_delwin.c, lib_erase.c, lib_getstr.c, lib_inchstr.c, lib_insch.c,
- lib_insdel.c, lib_insstr.c, lib_instr.c, lib_isendwin.c,
- lib_keyname.c, lib_move.c, lib_mvwin.c, lib_overlay.c, lib_pad.c,
- lib_printw.c, lib_scanw.c, lib_screen.c, lib_scroll.c, lib_scrreg.c,
- lib_set_term.c, lib_slk.c, lib_touch.c, lib_unctrl.c, and lib_window.c
+ described below). The files
+
+ lib_addch.c lib_bkgd.c lib_box.c lib_chgat.c lib_clear.c
+ lib_clearok.c lib_clrbot.c lib_clreol.c lib_colorset.c lib_data.c
+ lib_delch.c lib_delwin.c lib_echo.c lib_erase.c lib_gen.c
+ lib_getstr.c lib_hline.c lib_immedok.c lib_inchstr.c lib_insch.c
+ lib_insdel.c lib_insstr.c lib_instr.c lib_isendwin.c lib_keyname.c
+ lib_leaveok.c lib_move.c lib_mvwin.c lib_overlay.c lib_pad.c
+ lib_printw.c lib_redrawln.c lib_scanw.c lib_screen.c lib_scroll.c
+ lib_scrollok.c lib_scrreg.c lib_set_term.c lib_slk.c
+ lib_slkatr_set.c lib_slkatrof.c lib_slkatron.c lib_slkatrset.c
+ lib_slkattr.c lib_slkclear.c lib_slkcolor.c lib_slkinit.c
+ lib_slklab.c lib_slkrefr.c lib_slkset.c lib_slktouch.c lib_touch.c
+ lib_unctrl.c lib_vline.c lib_wattroff.c lib_wattron.c lib_window.c
+
are all in this category. They are very unlikely to need change,
barring bugs or some fundamental reorganization in the underlying data
structures.
- The lib_trace.c, lib_traceatr.c, and lib_tracechr.c file are used only
- for debugging support. It is rather unlikely you will ever need to
- change these, unless you want to introduce a new debug trace level for
- some reasoon.
+ These files are used only for debugging support:
+
+ lib_trace.c lib_traceatr.c lib_tracebits.c lib_tracechr.c
+ lib_tracedmp.c lib_tracemse.c trace_buf.c
+
+ It is rather unlikely you will ever need to change these, unless you
+ want to introduce a new debug trace level for some reasoon.
There is another group of files that do direct I/O via tputs(),
computations on the terminal capabilities, or queries to the OS
environment, but nevertheless have only fairly low complexity. These
- include: lib_acs.c, lib_beep.c, lib_color.c, lib_endwin.c,
- lib_initscr.c, lib_longname.c, lib_newterm.c, lib_options.c,
- lib_termcap.c, lib_ti.c, lib_tparm.c, lib_tputs.c, lib_vidattr.c, and
- read_entry.c. These are likely to need revision only if ncurses is
- being ported to an environment without an underlying terminfo
- capability representation.
-
- The files lib_kernel.c, lib_baudrate.c, lib_raw.c, lib_tstp.c, and
- lib_twait.c have serious hooks into the tty driver and signal
- facilities. If you run into porting snafus moving the package to
- another UNIX, the problem is likely to be in one of these files. The
- file lib_print.c uses sleep(2) and also falls in this category.
-
- Almost all of the real work is done in the files hashmap.c,
- hardscroll.c, lib_addch.c, lib_doupdate.c, lib_mvcur.c, lib_getch.c,
- lib_mouse.c, lib_refresh.c, and lib_setup.c. Most of the algorithmic
- complexity in the library lives in these files. If there is a real bug
- in ncurses itself, it's probably here. We'll tour some of these files
- in detail below (see The Engine Room).
+ include:
+
+ lib_acs.c lib_beep.c lib_color.c lib_endwin.c lib_initscr.c
+ lib_longname.c lib_newterm.c lib_options.c lib_termcap.c lib_ti.c
+ lib_tparm.c lib_tputs.c lib_vidattr.c read_entry.c.
+
+ They are likely to need revision only if ncurses is being ported to an
+ environment without an underlying terminfo capability representation.
+
+ These files have serious hooks into the tty driver and signal
+ facilities:
+
+ lib_kernel.c lib_baudrate.c lib_raw.c lib_tstp.c lib_twait.c
+
+ If you run into porting snafus moving the package to another UNIX, the
+ problem is likely to be in one of these files. The file lib_print.c
+ uses sleep(2) and also falls in this category.
+
+ Almost all of the real work is done in the files
+
+ hardscroll.c hashmap.c lib_addch.c lib_doupdate.c lib_getch.c
+ lib_mouse.c lib_mvcur.c lib_refresh.c lib_setup.c lib_vidattr.c
+
+ Most of the algorithmic complexity in the library lives in these
+ files. If there is a real bug in ncurses itself, it's probably here.
+ We'll tour some of these files in detail below (see The Engine Room).
Finally, there is a group of files that is actually most of the
terminfo compiler. The reason this code lives in the ncurses library
is to support fallback to /etc/termcap. These files include
- alloc_entry.c, captoinfo.c, comp_captab.c, comp_error.c, comp_hash.c,
- comp_parse.c, comp_scan.c, and parse_entry.c, read_termcap.c, and
- write_entry.c. We'll discuss these in the compiler tour.
+
+ alloc_entry.c captoinfo.c comp_captab.c comp_error.c comp_hash.c
+ comp_parse.c comp_scan.c parse_entry.c read_termcap.c write_entry.c
+
+ We'll discuss these in the compiler tour.
The Engine Room
UNIX routines such as signal(2) or the stdio library. Thus, they
should not need to be modified for single-terminal ports.
- lib_addch.c lib_addstr.c lib_bkgd.c lib_box.c lib_clear.c lib_clrbot.c
- lib_clreol.c lib_delch.c lib_delwin.c lib_erase.c lib_inchstr.c
- lib_insch.c lib_insdel.c lib_insstr.c lib_keyname.c lib_move.c
- lib_mvwin.c lib_newwin.c lib_overlay.c lib_pad.c lib_printw.c
- lib_refresh.c lib_scanw.c lib_scroll.c lib_scrreg.c lib_set_term.c
- lib_touch.c lib_tparm.c lib_tputs.c lib_unctrl.c lib_window.c panel.c
-
+ lib_addch.c lib_addstr.c lib_bkgd.c lib_box.c lib_clear.c
+ lib_clrbot.c lib_clreol.c lib_delch.c lib_delwin.c lib_erase.c
+ lib_inchstr.c lib_insch.c lib_insdel.c lib_insstr.c lib_keyname.c
+ lib_move.c lib_mvwin.c lib_newwin.c lib_overlay.c lib_pad.c
+ lib_printw.c lib_refresh.c lib_scanw.c lib_scroll.c lib_scrreg.c
+ lib_set_term.c lib_touch.c lib_tparm.c lib_tputs.c lib_unctrl.c
+ lib_window.c panel.c
+
This module is pure curses, but calls outstr():
- lib_getstr.c
-
+ lib_getstr.c
+
These modules are pure curses, except that they use tputs() and
putp():
- lib_beep.c lib_endwin.c lib_color.c lib_options.c lib_slk.c
- lib_vidattr.c
-
+ lib_beep.c lib_color.c lib_endwin.c lib_options.c lib_slk.c
+ lib_vidattr.c
+
This modules assist in POSIX emulation on non-POSIX systems:
sigaction.c
The following source files will not be needed for a
single-terminal-type port.
- captoinfo.c clear.c comp_captab.c comp_error.c comp_hash.c comp_main.c
- comp_parse.c comp_scan.c alloc_entry.c dump_entry.c parse_entry.c
- read_entry.c write_entry.c infocmp.c tput.c
-
+ alloc_entry.c captoinfo.c clear.c comp_captab.c comp_error.c
+ comp_hash.c comp_main.c comp_parse.c comp_scan.c dump_entry.c
+ infocmp.c parse_entry.c read_entry.c tput.c write_entry.c
+
The following modules will use open()/read()/write()/close()/lseek()
on files, but no other OS calls.
The following modules are `pure curses' but contain assumptions
inappropriate for a memory-mapped port.
-lib_longname.c -- assumes there may be multiple terminals
- longname() -- return long name of terminal
-lib_acs.c -- assumes acs_map as a double indirection
- init_acs() -- initialize acs map
-lib_mvcur.c -- assumes cursor moves have variable cost
- mvcur_init() -- initialize
- mvcur() -- do physical cursor move
- mvcur_wrap() -- wrap
- scrolln() -- do physical scrolling
-lib_termcap.c -- assumes there may be multiple terminals
- tgetent() -- load entry
- tgetflag() -- get boolean capability
- tgetnum() -- get numeric capability
- tgetstr() -- get string capability
-lib_ti.c -- assumes there may be multiple terminals
- tigetent() -- load entry
- tigetflag() -- get boolean capability
- tigetnum() -- get numeric capability
- tigetstr() -- get string capability
-
-The following modules use UNIX-specific calls:
-
-lib_doupdate.c -- input checking
- doupdate() -- repaint real screen to match virtual
- _nc_outch() -- put out a single character
-lib_getch.c -- read()
- wgetch() -- get single character
- wungetch() -- push back single character
-lib_initscr.c -- getenv()
- initscr() -- initialize curses functions
-lib_newterm.c
- newterm() -- set up new terminal screen
-lib_baudrate.c
- baudrate() -- return the baudrate
-lib_kernel.c -- various tty-manipulation and system calls
- reset_prog_mode() -- reset ccurses-raw mode
- reset_shell_mode() -- reset cooked mode
- erasechar() -- return the erase char
- killchar() -- return the kill character
- flushinp() -- flush pending input
- savetty() -- save tty state
- resetty() -- reset tty to state at last savetty()
-lib_raw.c -- various tty-manipulation calls
- raw()
- echo()
- nl()
- qiflush()
- cbreak()
- noraw()
- noecho()
- nonl()
- noqiflush()
- nocbreak()
-lib_setup.c -- various tty-manipulation calls
- use_env()
- setupterm()
-lib_restart.c -- various tty-manipulation calls
- def_shell_mode()
- def_prog_mode()
- set_curterm()
- del_curterm()
-lib_tstp.c -- signal-manipulation calls
- _nc_signal_handler() -- enable/disable window-mode signal catching
-lib_twait.c -- gettimeofday(), select().
- usleep() -- microsecond sleep
- _nc_timed_wait() -- timed wait for input
-
- The package kernel could be made smaller.
+ lib_longname.c
+ assumes there may be multiple terminals
+
+ lib_acs.c
+ assumes acs_map as a double indirection
+
+ lib_mvcur.c
+ assumes cursor moves have variable cost
+
+ lib_termcap.c
+ assumes there may be multiple terminals
+
+ lib_ti.c
+ assumes there may be multiple terminals
+
+ The following modules use UNIX-specific calls:
+
+ lib_doupdate.c
+ input checking
+
+ lib_getch.c
+ read()
+
+ lib_initscr.c
+ getenv()
+
+ lib_newterm.c
+ lib_baudrate.c
+ lib_kernel.c
+ various tty-manipulation and system calls
+
+ lib_raw.c
+ various tty-manipulation calls
+
+ lib_setup.c
+ various tty-manipulation calls
+
+ lib_restart.c
+ various tty-manipulation calls
+
+ lib_tstp.c
+ signal-manipulation calls
+
+ lib_twait.c
+ gettimeofday(), select().
_________________________________________________________________
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<!--
- $Id: hackguide.html,v 1.17 1998/02/15 01:32:35 tom Exp $
+ $Id: hackguide.html,v 1.23 1999/01/17 00:15:48 tom Exp $
-->
<HTML>
<HEAD>
<TITLE>A Hacker's Guide to Ncurses Internals</TITLE>
-<link rev="made" href="mailto:esr@snark.thyrsus.com">
+<link rev="made" href="mailto:bugs-ncurses@gnu.org">
<!--
-This document is self-contained, *except* that there is one relative link to
+This document is self-contained, *except* that there is one relative link to
the ncurses-intro.html document, expected to be in the same directory with
this one.
-->
<LI><A HREF="#extensions">How to Design Extensions</A>
</UL>
<LI><A HREF="#portability">Portability and Configuration</A><UL>
-<LI><A HREF="#fooup">If autoconf Fails</A>
</UL>
<LI><A HREF="#documentation">Documentation Conventions</A>
<P>
<H1><A NAME="objective">Objective of the Package</A></H1>
-The objective of the <STRONG>ncurses</STRONG> package is to provide a freeware API for
-character-cell terminals and terminal emulators with the following
+The objective of the <STRONG>ncurses</STRONG> package is to provide a free software API for
+character-cell terminals and terminal emulators with the following
characteristics: <P>
<UL>
the original BSD curses and System V curses.
<P>
<LI>Conformant with the XSI Curses standard issued as part of XPG4 by
- X/Open.
+ X/Open.
<P>
<LI>High-quality -- stable and reliable code, wide portability, good
packaging, superior documentation.
in the <STRONG>ncurses</STRONG> API between platforms.
</UL>
-We use GNU <CODE>autoconf(1)</CODE> as a tool to deal with portability issues.
+We use GNU <CODE>autoconf(1)</CODE> as a tool to deal with portability issues.
The right way to leverage an OS-specific feature is to modify the autoconf
specification files (configure.in and aclocal.m4) to set up a new feature
macro, which you then use to condition your code. <P>
-<H2><A NAME="fooup">If autoconf Fails</A></H2>
-
-The 'configure' script usually gets your system environment right
-automatically. Here are some -D options you might need to compile
-with if it fails: <P>
-<DL>
-<DT>-DHAVE_UNISTD_H
-<DD>if <unistd.h> is present
-<DT>-DHAVE_SIGACTION
-<DD>if the sigaction function is present
-<DT>-DHAVE_USLEEP
-<DD>if the usleep function is present
-<DT>-DSVR4_ACTION
-<DD>if (e.g., svr4) you need _POSIX_SOURCE to have sigaction
-<DT>-DHAVE_TERMIOS_H
-<DD>if you have <termios.h>
-<DT>-DHAVE_TERMIO_H
-<DD>if you have <termio.h>; otherwise it uses <sgtty.h>
-<DT>-DBROKEN_TIOCGETWINSZ
-<DD>on SVR4 and HPUX, the get window size ioctl is broken.
-</DL>
-
<H1><A NAME="documentation">Documentation Conventions</A></H1>
There are three kinds of documentation associated with this package. Each
browsing through viewers that are everywhere; (b) more easily readable
as plain text than most other mark-ups, if you don't have a viewer; and (c)
carries enough information that you can generate a nice-looking printed
-version from it. Also, of course, it make exporting things like the
+version from it. Also, of course, it make exporting things like the
announcement document to WWW pretty trivial.<P>
<H1><A NAME="bugtrack">How to Report Bugs</A></H1>
The <A NAME="bugreport">reporting address for bugs</A> is
<A HREF="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</A>.
This is a majordomo list; to join, write
-to <CODE>ncurses-request@gnu.org</CODE> with a message containing the line:
+to <CODE>bug-ncurses-request@gnu.org</CODE> with a message containing the line:
<PRE>
subscribe <name>@<host.domain>
</PRE>
volunteers. While we try our best to fix bugs promptly, we simply
don't have a lot of hours to spend on elementary hand-holding. We rely
on intelligent cooperation from our users. If you think you have
-found a bug in <CODE>ncurses</CODE>, there are some steps you can take
+found a bug in <CODE>ncurses</CODE>, there are some steps you can take
before contacting us that will help get the bug fixed quickly. <P>
In order to use our bug-fixing time efficiently, we put people who
a console type and xterm available; please tell us whether or not your
bug reproduces on both. <P>
-If you have xterm available, it is also good to collect xterm reports for
+If you have xterm available, it is also good to collect xterm reports for
different window sizes. This is especially true if you normally use an
unusual xterm window size -- a surprising number of the bugs we've seen
are either triggered or masked by these. <P>
interfaces to a small set of basic functions and data structures used
to manipulate the virtual screen (in particular, none of this code
does any I/O except through calls to more fundamental modules
-described below). The files <CODE>lib_addch.c</CODE>,
-<CODE>lib_bkgnd.c</CODE>, <CODE>lib_box.c</CODE>, <CODE>lib_clear.c</CODE>,
-<CODE>lib_clrbot.c</CODE>, <CODE>lib_clreol.c</CODE>, <CODE>lib_data.c</CODE>,
-<CODE>lib_delch.c</CODE>, <CODE>lib_delwin.c</CODE>, <CODE>lib_erase.c</CODE>,
-<CODE>lib_getstr.c</CODE>, <CODE>lib_inchstr.c</CODE>, <CODE>lib_insch.c</CODE>,
-<CODE>lib_insdel.c</CODE>, <CODE>lib_insstr.c</CODE>, <CODE>lib_instr.c</CODE>,
-<CODE>lib_isendwin.c</CODE>, <CODE>lib_keyname.c</CODE>, <CODE>lib_move.c</CODE>,
-<CODE>lib_mvwin.c</CODE>, <CODE>lib_overlay.c</CODE>, <CODE>lib_pad.c</CODE>,
-<CODE>lib_printw.c</CODE>, <CODE>lib_scanw.c</CODE>, <CODE>lib_screen.c</CODE>,
-<CODE>lib_scroll.c</CODE>, <CODE>lib_scrreg.c</CODE>, <CODE>lib_set_term.c</CODE>,
-<CODE>lib_slk.c</CODE>, <CODE>lib_touch.c</CODE>, <CODE>lib_unctrl.c</CODE>, and
-<CODE>lib_window.c</CODE> are all in this category. They are very
+described below). The files
+<blockquote>
+<CODE>
+lib_addch.c
+lib_bkgd.c
+lib_box.c
+lib_chgat.c
+lib_clear.c
+lib_clearok.c
+lib_clrbot.c
+lib_clreol.c
+lib_colorset.c
+lib_data.c
+lib_delch.c
+lib_delwin.c
+lib_echo.c
+lib_erase.c
+lib_gen.c
+lib_getstr.c
+lib_hline.c
+lib_immedok.c
+lib_inchstr.c
+lib_insch.c
+lib_insdel.c
+lib_insstr.c
+lib_instr.c
+lib_isendwin.c
+lib_keyname.c
+lib_leaveok.c
+lib_move.c
+lib_mvwin.c
+lib_overlay.c
+lib_pad.c
+lib_printw.c
+lib_redrawln.c
+lib_scanw.c
+lib_screen.c
+lib_scroll.c
+lib_scrollok.c
+lib_scrreg.c
+lib_set_term.c
+lib_slk.c
+lib_slkatr_set.c
+lib_slkatrof.c
+lib_slkatron.c
+lib_slkatrset.c
+lib_slkattr.c
+lib_slkclear.c
+lib_slkcolor.c
+lib_slkinit.c
+lib_slklab.c
+lib_slkrefr.c
+lib_slkset.c
+lib_slktouch.c
+lib_touch.c
+lib_unctrl.c
+lib_vline.c
+lib_wattroff.c
+lib_wattron.c
+lib_window.c
+</CODE>
+</blockquote>
+are all in this category. They are very
unlikely to need change, barring bugs or some fundamental
reorganization in the underlying data structures. <P>
-The <CODE>lib_trace.c</CODE>, <CODE>lib_traceatr.c</CODE>, and
-<CODE>lib_tracechr.c</CODE> file are used only for debugging support.
+These files are used only for debugging support:
+<blockquote><code>
+lib_trace.c
+lib_traceatr.c
+lib_tracebits.c
+lib_tracechr.c
+lib_tracedmp.c
+lib_tracemse.c
+trace_buf.c
+</blockquote></code>
It is rather unlikely you will ever need to change these, unless
you want to introduce a new debug trace level for some reasoon.<P>
There is another group of files that do direct I/O via <EM>tputs()</EM>,
computations on the terminal capabilities, or queries to the OS
environment, but nevertheless have only fairly low complexity. These
-include: <CODE>lib_acs.c</CODE>, <CODE>lib_beep.c</CODE>,
-<CODE>lib_color.c</CODE>, <CODE>lib_endwin.c</CODE>, <CODE>lib_initscr.c</CODE>,
-<CODE>lib_longname.c</CODE>, <CODE>lib_newterm.c</CODE>,
-<CODE>lib_options.c</CODE>, <CODE>lib_termcap.c</CODE>, <CODE>lib_ti.c</CODE>,
-<CODE>lib_tparm.c</CODE>, <CODE>lib_tputs.c</CODE>, <CODE>lib_vidattr.c</CODE>,
-and <CODE>read_entry.c</CODE>. These are likely to need revision only if
+include:
+<blockquote><code>
+lib_acs.c
+lib_beep.c
+lib_color.c
+lib_endwin.c
+lib_initscr.c
+lib_longname.c
+lib_newterm.c
+lib_options.c
+lib_termcap.c
+lib_ti.c
+lib_tparm.c
+lib_tputs.c
+lib_vidattr.c
+read_entry.c.
+</blockquote></code>
+They are likely to need revision only if
ncurses is being ported to an environment without an underlying
terminfo capability representation. <P>
-The files <CODE>lib_kernel.c</CODE>, <CODE>lib_baudrate.c</CODE>, <CODE>lib_raw.c</CODE>,
-<CODE>lib_tstp.c</CODE>, and <CODE>lib_twait.c</CODE> have serious hooks into
-the tty driver and signal facilities. If you run into porting snafus
+These files
+have serious hooks into
+the tty driver and signal facilities:
+<blockquote><code>
+lib_kernel.c
+lib_baudrate.c
+lib_raw.c
+lib_tstp.c
+lib_twait.c
+</blockquote></code>
+If you run into porting snafus
moving the package to another UNIX, the problem is likely to be in one
-of these files. The file <CODE>lib_print.c</CODE> uses sleep(2) and also
+of these files.
+The file <CODE>lib_print.c</CODE> uses sleep(2) and also
falls in this category.<P>
-Almost all of the real work is done in the files
-<CODE>hashmap.c</CODE>, <CODE>hardscroll.c</CODE>,
-<CODE>lib_addch.c</CODE>, <CODE>lib_doupdate.c</CODE>, <CODE>lib_mvcur.c</CODE>,
-<CODE>lib_getch.c</CODE>, <CODE>lib_mouse.c</CODE>, <CODE>lib_refresh.c</CODE>,
-and <CODE>lib_setup.c</CODE>. Most of the algorithmic complexity in the
-library lives in these files. If there is a real bug in <STRONG>ncurses</STRONG>
-itself, it's probably here. We'll tour some of these files in detail
+Almost all of the real work is done in the files
+<blockquote><code>
+hardscroll.c
+hashmap.c
+lib_addch.c
+lib_doupdate.c
+lib_getch.c
+lib_mouse.c
+lib_mvcur.c
+lib_refresh.c
+lib_setup.c
+lib_vidattr.c
+</blockquote></code>
+Most of the algorithmic complexity in the
+library lives in these files.
+If there is a real bug in <STRONG>ncurses</STRONG> itself, it's probably here.
+We'll tour some of these files in detail
below (see <A HREF="#engine">The Engine Room</A>). <P>
Finally, there is a group of files that is actually most of the
terminfo compiler. The reason this code lives in the <STRONG>ncurses</STRONG>
library is to support fallback to /etc/termcap. These files include
-<CODE>alloc_entry.c</CODE>, <CODE>captoinfo.c</CODE>, <CODE>comp_captab.c</CODE>,
-<CODE>comp_error.c</CODE>, <CODE>comp_hash.c</CODE>, <CODE>comp_parse.c</CODE>,
-<CODE>comp_scan.c</CODE>, and <CODE>parse_entry.c</CODE>,
-<CODE>read_termcap.c</CODE>, and <CODE>write_entry.c</CODE>. We'll discuss these
-in the compiler tour. <P>
+<blockquote><code>
+alloc_entry.c
+captoinfo.c
+comp_captab.c
+comp_error.c
+comp_hash.c
+comp_parse.c
+comp_scan.c
+parse_entry.c
+read_termcap.c
+write_entry.c
+</blockquote></code>
+We'll discuss these in the compiler tour. <P>
<H2><A NAME="engine">The Engine Room</A></H2>
<H3><A NAME="output">Output and Screen Updating</A></H3>
With the single exception of character echoes during a <CODE>wgetnstr()</CODE>
-call (which simulates cooked-mode line editing in an ncurses window),
+call (which simulates cooked-mode line editing in an ncurses window),
the library normally does all its output at refresh time. <P>
The main job is to go from the current state of the screen (as represented
-in the <CODE>curscr</CODE> window structure) to the desired new state (as
+in the <CODE>curscr</CODE> window structure) to the desired new state (as
represented in the <CODE>newscr</CODE> window structure), while doing as
little I/O as possible. <P>
Then <CODE>lib_doupdate.c</CODE> goes to work. Its job is to do line-by-line
transformations of <CODE>curscr</CODE> lines to <CODE>newscr</CODE> lines. Its main
tool is the routine <CODE>mvcur()</CODE> in <CODE>lib_mvcur.c</CODE>. This routine
-does cursor-movement optimization, attempting to get from given screen
+does cursor-movement optimization, attempting to get from given screen
location A to given location B in the fewest output characters posible. <P>
If you want to work on screen optimizations, you should use the fact
One possibly interesting aspect of the implementation is the way the
compiler tables are initialized. All the tables are generated by various
-awk/sed/sh scripts from a master table <CODE>include/Caps</CODE>; these
-scripts actually write C initializers which are linked to the compiler.
+awk/sed/sh scripts from a master table <CODE>include/Caps</CODE>; these
+scripts actually write C initializers which are linked to the compiler.
Furthermore, the hash table is generated in the same way, so it doesn't
have to be generated at compiler startup time (another benefit of this
organization is that the hash table can be in shareable text space). <P>
The background problem that makes <STRONG>tic</STRONG> tricky isn't the capability
translation itself, it's the resolution of <STRONG>use</STRONG> capabilities. Older
-versions would not handle forward <STRONG>use</STRONG> references for this reason
+versions would not handle forward <STRONG>use</STRONG> references for this reason
(that is, a using terminal always had to follow its use target in the
source file). By doing this, they got away with a simple implementation
tactic; compile everything as it blows by, then resolve uses from compiled
so that it can be called by the startup code to translate termcap
entries on the fly. The embedded version can't go promiscuously writing
everything it translates out to disk -- for one thing, it will typically
-be running with non-root permissions. <P>
+be running with non-root permissions. <P>
So our <STRONG>tic</STRONG> is designed to parse an entire terminfo file into a
doubly-linked circular list of entry structures in-core, and then do
The <CODE>include/Caps</CODE> file has a header comment describing ways you
can specify source translations for nonstandard capabilities just by
-altering the master table. It's possible to set up capability aliasing
+altering the master table. It's possible to set up capability aliasing
or tell the compiler to plain ignore a given capability without writing
any C code at all. <P>
capabilities are dumped. This is necessary in order to handle both
the ordinary De-compilation case and entry difference reporting. <P>
-The <STRONG>tput</STRONG> and <STRONG>clear</STRONG> utilities just do an entry load
+The <STRONG>tput</STRONG> and <STRONG>clear</STRONG> utilities just do an entry load
followed by a <CODE>tputs()</CODE> of a selected capability. <P>
<H1><A NAME="style">Style Tips for Developers</A></H1>
Thus, they should not need to be modified for single-terminal
ports. <P>
-<CODE>
+<blockquote><code>
lib_addch.c
lib_addstr.c
lib_bkgd.c
lib_tputs.c
lib_unctrl.c
lib_window.c
-panel.c
-</CODE>
+panel.c
+</blockquote></code>
<P>
This module is pure curses, but calls outstr(): <P>
-<CODE>
+<blockquote><code>
lib_getstr.c
-</CODE>
+</blockquote></code>
<P>
These modules are pure curses, except that they use <CODE>tputs()</CODE>
and <CODE>putp()</CODE>: <P>
-<CODE>
+<blockquote><code>
lib_beep.c
-lib_endwin.c
lib_color.c
+lib_endwin.c
lib_options.c
lib_slk.c
lib_vidattr.c
-</CODE>
+</blockquote></code>
<P>
This modules assist in POSIX emulation on non-POSIX systems: <P>
The following source files will not be needed for a
single-terminal-type port. <P>
-<CODE>
+<blockquote><code>
+alloc_entry.c
captoinfo.c
clear.c
comp_captab.c
comp_main.c
comp_parse.c
comp_scan.c
-alloc_entry.c
dump_entry.c
+infocmp.c
parse_entry.c
read_entry.c
-write_entry.c
-infocmp.c
tput.c
-</CODE>
+write_entry.c
+</blockquote></code>
<P>
The following modules will use open()/read()/write()/close()/lseek() on files,
but no other OS calls. <P>
<DL>
-<DT> lib_screen.c
-<DD> used to read/write screen dumps
-<DT> lib_trace.c
-<DD> used to write trace data to the logfile
+<DT>lib_screen.c
+<DD>used to read/write screen dumps
+<DT>lib_trace.c
+<DD>used to write trace data to the logfile
</DL>
Modules that would have to be modified for a port start here: <P>
The following modules are `pure curses' but contain assumptions inappropriate
for a memory-mapped port. <P>
-<PRE>
-lib_longname.c -- assumes there may be multiple terminals
- longname() -- return long name of terminal
-lib_acs.c -- assumes acs_map as a double indirection
- init_acs() -- initialize acs map
-lib_mvcur.c -- assumes cursor moves have variable cost
- mvcur_init() -- initialize
- mvcur() -- do physical cursor move
- mvcur_wrap() -- wrap
- scrolln() -- do physical scrolling
-lib_termcap.c -- assumes there may be multiple terminals
- tgetent() -- load entry
- tgetflag() -- get boolean capability
- tgetnum() -- get numeric capability
- tgetstr() -- get string capability
-lib_ti.c -- assumes there may be multiple terminals
- tigetent() -- load entry
- tigetflag() -- get boolean capability
- tigetnum() -- get numeric capability
- tigetstr() -- get string capability
+<dl>
+<dt>lib_longname.c<dd>assumes there may be multiple terminals
+<dt>lib_acs.c<dd>assumes acs_map as a double indirection
+<dt>lib_mvcur.c<dd>assumes cursor moves have variable cost
+<dt>lib_termcap.c<dd>assumes there may be multiple terminals
+<dt>lib_ti.c<dd>assumes there may be multiple terminals
+</dl>
The following modules use UNIX-specific calls:
-lib_doupdate.c -- input checking
- doupdate() -- repaint real screen to match virtual
- _nc_outch() -- put out a single character
-lib_getch.c -- read()
- wgetch() -- get single character
- wungetch() -- push back single character
-lib_initscr.c -- getenv()
- initscr() -- initialize curses functions
-lib_newterm.c
- newterm() -- set up new terminal screen
-lib_baudrate.c
- baudrate() -- return the baudrate
-lib_kernel.c -- various tty-manipulation and system calls
- reset_prog_mode() -- reset ccurses-raw mode
- reset_shell_mode() -- reset cooked mode
- erasechar() -- return the erase char
- killchar() -- return the kill character
- flushinp() -- flush pending input
- savetty() -- save tty state
- resetty() -- reset tty to state at last savetty()
-lib_raw.c -- various tty-manipulation calls
- raw()
- echo()
- nl()
- qiflush()
- cbreak()
- noraw()
- noecho()
- nonl()
- noqiflush()
- nocbreak()
-lib_setup.c -- various tty-manipulation calls
- use_env()
- setupterm()
-lib_restart.c -- various tty-manipulation calls
- def_shell_mode()
- def_prog_mode()
- set_curterm()
- del_curterm()
-lib_tstp.c -- signal-manipulation calls
- _nc_signal_handler() -- enable/disable window-mode signal catching
-lib_twait.c -- gettimeofday(), select().
- usleep() -- microsecond sleep
- _nc_timed_wait() -- timed wait for input
-</PRE>
-
-The package kernel could be made smaller. <P>
+<dl>
+<dt>lib_doupdate.c<dd>input checking
+<dt>lib_getch.c<dd>read()
+<dt>lib_initscr.c<dd>getenv()
+<dt>lib_newterm.c
+<dt>lib_baudrate.c
+<dt>lib_kernel.c<dd>various tty-manipulation and system calls
+<dt>lib_raw.c<dd>various tty-manipulation calls
+<dt>lib_setup.c<dd>various tty-manipulation calls
+<dt>lib_restart.c<dd>various tty-manipulation calls
+<dt>lib_tstp.c<dd>signal-manipulation calls
+<dt>lib_twait.c<dd>gettimeofday(), select().
+</dl>
<HR>
<ADDRESS>Eric S. Raymond <esr@snark.thyrsus.com></ADDRESS>
--- /dev/null
+/*\r
+ * $Id: makedef.cmd,v 1.4 1998/11/22 03:14:08 tom Exp $\r
+ *\r
+ * Author: Juan Jose Garcia Ripoll <worm@arrakis.es>.\r
+ * Webpage: http://www.arrakis.es/~worm/\r
+ *\r
+ * makedef.cmd - update a DLL export list using a newly created library file\r
+ * in a.out format, plus an old .DEF file.\r
+ *\r
+ * standard output gets a sorted list with all entrypoints with entrycodes.\r
+ * This list, plus a few .def sentences (LIBRARY, DESCRIPTION and EXPORT)\r
+ * is used to build a new .def file.\r
+ *\r
+ * `_nc_*' symbols are ignored.\r
+ *\r
+ * returns 1 when the old def_file is corrupted -- that is, export items are\r
+ * not properly formatted.\r
+ *\r
+ * returns 0 if everything went OK.\r
+ */\r
+\r
+parse arg lib_file def_file\r
+\r
+lib_file = translate(lib_file,'\','/')\r
+def_file = translate(def_file,'\','/')\r
+\r
+call CleanQueue\r
+\r
+/*\r
+ * `codes' is the stem that links a code to every symbol\r
+ * `names' is the stem where symbols are stored sequentially\r
+ * `last' is the index of the last symbol defined\r
+ */\r
+last = 0\r
+used. = 0\r
+codes. = 0\r
+names. = ''\r
+\r
+tmp_name = 'foo.tmp'\r
+\r
+/*\r
+ * This sed expression cleans empty lines, comments and special .DEF\r
+ * commands, such as LIBRARY..., EXPORTS..., etc\r
+ */\r
+tidy_up = '"/^[A-Z]/d;s/[ ][ ]*/ /g;s/;.*$//g;s/^[ ]*//g;/^[ ]*$/d"'\r
+\r
+/*\r
+ * First we find all public symbols (functions and variables). Next we\r
+ * concatenate this list with the old one, sorting it and wiping out\r
+ * all unused data (comments, DLL directives, blanks, etc). All this\r
+ * information is pushed into a REXX private list with the RXQUEUE\r
+ * utility program.\r
+ */\r
+'@echo off'\r
+'emxexp -u' lib_file '>' tmp_name\r
+'cat' tmp_name def_file '| sed' tidy_up '| sort > foo2.tmp'\r
+'type foo2.tmp | rxqueue'\r
+'del' tmp_name '1>NUL'\r
+\r
+/*\r
+ * This loop runs over the queue items\r
+ */\r
+do while queued() > 0\r
+ /*\r
+ * We retrieve the symbol name (NEW_NAME) and its number (NEW_NUMBER)\r
+ * When the line comes from `emximp's output, there's no number, so\r
+ * we assign it the special value 0.\r
+ */\r
+ parse pull new_symbol '@'new_code rest\r
+ if Left(new_symbol,1) = '"' then\r
+ parse var new_symbol '"' new_name '"' rest\r
+ else\r
+ do\r
+ echo 'Symbol 'new_symbol' was not quoted'\r
+ new_name = new_symbol\r
+ end\r
+\r
+ if new_code = '' then\r
+ new_code = 0\r
+ /*\r
+ * Here, one would place all smart checks that would kill unused symbols.\r
+ * However, export tables are not that big, so why bothering?\r
+ if Left(new_name,4) = '_nc_' then\r
+ iterate\r
+ */\r
+ /*\r
+ * The algorithm:\r
+ * IF (this is the 2nd time the symbol appears) THEN\r
+ * (this symbol comes from a .DEF file)\r
+ * it has a valid code that we store\r
+ * we mark that code as used\r
+ * ELIF (it has no number) THEN\r
+ * (it's a new symbol)\r
+ * we increase the counter of defined symbols\r
+ * we assign it the special number 0\r
+ * (later on it'll be assigned an unused export code)\r
+ * ELSE\r
+ * this symbol was in the old DLL and it's no longer\r
+ * here, so we skip it.\r
+ */\r
+ select\r
+ when new_name = '' then\r
+ 'echo Warning: empty symbol found 1>&2'\r
+ when names.last = new_name then\r
+ do\r
+ codes.last = new_code\r
+ used.new_code = 1\r
+ end\r
+ when new_code = 0 then\r
+ do\r
+ last = last + 1\r
+ names.last = new_name\r
+ codes.last = 0\r
+ end\r
+ otherwise\r
+ 'echo Warning: symbol "'new_name'" has disappeared 1>&2'\r
+ end /* select */\r
+end /* do while queued() */\r
+\r
+/*\r
+ * Finally we scan the stem, writing out all symbols with export codes.\r
+ * Those that did not have a valid one (just 0) are assigned a new one.\r
+ */\r
+new_code = 1\r
+inx = 1\r
+do while inx <= last\r
+ if codes.inx = 0 then\r
+ do\r
+ do while used.new_code \= 0\r
+ new_code = new_code + 1\r
+ end\r
+ codes.inx = new_code\r
+ used.new_code = 1\r
+ end\r
+ say ' "'names.inx'" @'codes.inx' NONAME'\r
+ inx = inx + 1\r
+end\r
+'del foo2.tmp 1>NUL'\r
+exit 0\r
+\r
+/*\r
+ * Cleans the REXX queue by pulling and forgetting every line.\r
+ * This is needed, at least, when `makedef.cmd' starts, because an aborted\r
+ * REXX program might have left some rubbish in.\r
+ */\r
+CleanQueue: procedure\r
+ do while queued() > 0\r
+ parse pull foo\r
+ end\r
+return\r
+\r
--- /dev/null
+LIBRARY menu5 INITINSTANCE TERMINSTANCE\r
+DESCRIPTION "NCurses-5-0-990828, module menu"\r
+CODE LOADONCALL\r
+DATA LOADONCALL NONSHARED MULTIPLE\r
+EXPORTS\r
+ "_nc_Calculate_Item_Length_and_Width" @11 NONAME\r
+ "_nc_Connect_Items" @38 NONAME\r
+ "_nc_Default_Item" @63 NONAME\r
+ "_nc_Default_Menu" @64 NONAME\r
+ "_nc_Disconnect_Items" @65 NONAME\r
+ "_nc_Draw_Menu" @66 NONAME\r
+ "_nc_Link_Items" @67 NONAME\r
+ "_nc_Match_Next_Character_In_Item_Name" @68 NONAME\r
+ "_nc_New_TopRow_and_CurrentItem" @69 NONAME\r
+ "_nc_Post_Item" @70 NONAME\r
+ "_nc_Show_Menu" @71 NONAME\r
+ "_nc_menu_cursor_pos" @72 NONAME\r
+ "current_item" @2 NONAME\r
+ "free_item" @23 NONAME\r
+ "free_menu" @24 NONAME\r
+ "item_count" @25 NONAME\r
+ "item_description" @14 NONAME\r
+ "item_index" @26 NONAME\r
+ "item_init" @7 NONAME\r
+ "item_name" @15 NONAME\r
+ "item_opts" @5 NONAME\r
+ "item_opts_off" @27 NONAME\r
+ "item_opts_on" @28 NONAME\r
+ "item_term" @8 NONAME\r
+ "item_userptr" @18 NONAME\r
+ "item_value" @60 NONAME\r
+ "item_visible" @61 NONAME\r
+ "menu_back" @20 NONAME\r
+ "menu_driver" @29 NONAME\r
+ "menu_fore" @21 NONAME\r
+ "menu_format" @62 NONAME\r
+ "menu_grey" @22 NONAME\r
+ "menu_init" @9 NONAME\r
+ "menu_items" @1 NONAME\r
+ "menu_mark" @16 NONAME\r
+ "menu_opts" @6 NONAME\r
+ "menu_opts_off" @30 NONAME\r
+ "menu_opts_on" @31 NONAME\r
+ "menu_pad" @32 NONAME\r
+ "menu_pattern" @17 NONAME\r
+ "menu_request_by_name" @73 NONAME\r
+ "menu_request_name" @74 NONAME\r
+ "menu_spacing" @75 NONAME\r
+ "menu_sub" @12 NONAME\r
+ "menu_term" @10 NONAME\r
+ "menu_userptr" @19 NONAME\r
+ "menu_win" @13 NONAME\r
+ "new_item" @3 NONAME\r
+ "new_menu" @4 NONAME\r
+ "pos_menu_cursor" @33 NONAME\r
+ "post_menu" @34 NONAME\r
+ "scale_menu" @35 NONAME\r
+ "set_current_item" @36 NONAME\r
+ "set_item_init" @37 NONAME\r
+ "set_item_opts" @39 NONAME\r
+ "set_item_term" @40 NONAME\r
+ "set_item_userptr" @41 NONAME\r
+ "set_item_value" @42 NONAME\r
+ "set_menu_back" @43 NONAME\r
+ "set_menu_fore" @44 NONAME\r
+ "set_menu_format" @45 NONAME\r
+ "set_menu_grey" @46 NONAME\r
+ "set_menu_init" @47 NONAME\r
+ "set_menu_items" @48 NONAME\r
+ "set_menu_mark" @49 NONAME\r
+ "set_menu_opts" @50 NONAME\r
+ "set_menu_pad" @51 NONAME\r
+ "set_menu_pattern" @52 NONAME\r
+ "set_menu_spacing" @76 NONAME\r
+ "set_menu_sub" @53 NONAME\r
+ "set_menu_term" @54 NONAME\r
+ "set_menu_userptr" @55 NONAME\r
+ "set_menu_win" @56 NONAME\r
+ "set_top_row" @57 NONAME\r
+ "top_row" @58 NONAME\r
+ "unpost_menu" @59 NONAME\r
--- /dev/null
+LIBRARY MENU2 INITINSTANCE\r
+DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - menu library'\r
+EXPORTS\r
+ "menu_items" @1 ;NONAME\r
+ "current_item" @2 ;NONAME\r
+ "new_item" @3 ;NONAME\r
+\r
+ "new_menu" @4 ;NONAME\r
+\r
+ "item_opts" @5 ;NONAME\r
+ "menu_opts" @6 ;NONAME\r
+\r
+ "item_init" @7 ;NONAME\r
+ "item_term" @8 ;NONAME\r
+ "menu_init" @9 ;NONAME\r
+ "menu_term" @10 ;NONAME\r
+\r
+ "menu_sub" @12 ;NONAME\r
+ "menu_win" @13 ;NONAME\r
+\r
+ "item_description" @14 ;NONAME\r
+ "item_name" @15 ;NONAME\r
+ "menu_mark" @16 ;NONAME\r
+ "menu_pattern" @17 ;NONAME\r
+\r
+ "item_userptr" @18 ;NONAME\r
+ "menu_userptr" @19 ;NONAME\r
+\r
+ "menu_back" @20 ;NONAME\r
+ "menu_fore" @21 ;NONAME\r
+ "menu_grey" @22 ;NONAME\r
+\r
+ "free_item" @23 ;NONAME\r
+ "free_menu" @24 ;NONAME\r
+ "item_count" @25 ;NONAME\r
+ "item_index" @26 ;NONAME\r
+ "item_opts_off" @27 ;NONAME\r
+ "item_opts_on" @28 ;NONAME\r
+ "menu_driver" @29 ;NONAME\r
+ "menu_opts_off" @30 ;NONAME\r
+ "menu_opts_on" @31 ;NONAME\r
+ "menu_pad" @32 ;NONAME\r
+ "pos_menu_cursor" @33 ;NONAME\r
+ "post_menu" @34 ;NONAME\r
+ "scale_menu" @35 ;NONAME\r
+ "set_current_item" @36 ;NONAME\r
+ "set_item_init" @37 ;NONAME\r
+ "set_item_opts" @39 ;NONAME\r
+ "set_item_term" @40 ;NONAME\r
+ "set_item_userptr" @41 ;NONAME\r
+ "set_item_value" @42 ;NONAME\r
+ "set_menu_back" @43 ;NONAME\r
+ "set_menu_fore" @44 ;NONAME\r
+ "set_menu_format" @45 ;NONAME\r
+ "set_menu_grey" @46 ;NONAME\r
+ "set_menu_init" @47 ;NONAME\r
+ "set_menu_items" @48 ;NONAME\r
+ "set_menu_mark" @49 ;NONAME\r
+ "set_menu_opts" @50 ;NONAME\r
+ "set_menu_pad" @51 ;NONAME\r
+ "set_menu_pattern" @52 ;NONAME\r
+ "set_menu_sub" @53 ;NONAME\r
+ "set_menu_term" @54 ;NONAME\r
+ "set_menu_userptr" @55 ;NONAME\r
+ "set_menu_win" @56 ;NONAME\r
+ "set_top_row" @57 ;NONAME\r
+ "top_row" @58 ;NONAME\r
+ "unpost_menu" @59 ;NONAME\r
+\r
+ "item_value" @60 ;NONAME\r
+ "item_visible" @61 ;NONAME\r
+\r
+ "menu_format" @62 ;NONAME\r
Writing Programs with NCURSES
by Eric S. Raymond and Zeyd M. Ben-Halim
+ updates since release 1.9.9e by Thomas Dickey
Contents
Scope of This Document
- This document describes ncurses, a freeware implementation of the
- System V curses API with some clearly marked extensions. It includes
- the following System V curses features:
+ This document describes ncurses, a free implementation of the System V
+ curses API with some clearly marked extensions. It includes the
+ following System V curses features:
* Support for multiple screen highlights (BSD curses could only
handle one `standout' highlight, usually reverse-video).
This document includes tips for using the mouse.
The ncurses package was originated by Pavel Curtis. The original
- maintainer of the package is Zeyd Ben-Halim <zmbenhal@netcom.com>.
+ maintainer of this package is Zeyd Ben-Halim <zmbenhal@netcom.com>.
Eric S. Raymond <esr@snark.thyrsus.com> wrote many of the new features
in versions after 1.8.1 and wrote most of this introduction. Jürgen
Pfeifer wrote all of the menu and forms code as well as the Ada95
Mouse Interfacing
- The ncurses library also provides a mouse interface. Note: his
- facility is original to ncurses, it is not part of either the XSI
- Curses standard, nor of System V Release 4, nor BSD curses. Thus, we
- recommend that you wrap mouse-related code in an #ifdef using the
- feature macro NCURSES_MOUSE_VERSION so it will not be compiled and
- linked on non-ncurses systems.
-
- Presently, mouse event reporting works only under xterm. In the
- future, ncurses will detect the presence of gpm(1), Alessandro
- Rubini's freeware mouse server for Linux systems, and accept mouse
- reports through it.
-
+ The ncurses library also provides a mouse interface.
+
+ NOTE: this facility is specific to ncurses, it is not part of
+ either the XSI Curses standard, nor of System V Release 4, nor BSD
+ curses. System V Release 4 curses contains code with similar
+ interface definitions, however it is not documented. Other than by
+ disassembling the library, we have no way to determine exactly how
+ that mouse code works. Thus, we recommend that you wrap
+ mouse-related code in an #ifdef using the feature macro
+ NCURSES_MOUSE_VERSION so it will not be compiled and linked on
+ non-ncurses systems.
+
+ Presently, mouse event reporting works in the following environments:
+ * xterm and similar programs such as rxvt.
+ * Linux console, when configured with gpm(1), Alessandro Rubini's
+ mouse server.
+ * OS/2 EMX
+
The mouse interface is very simple. To activate it, you use the
function mousemask(), passing it as first argument a bit-mask that
specifies what kinds of events you want your program to be able to
Debugging
- NOTE: These functions are not part of the standard curses API!
-
+ NOTE: These functions are not part of the standard curses API!
+
trace()
This function can be used to explicitly set a trace level. If
the trace level is nonzero, execution of your program will
likely to hurt your application's usability with other curses
libraries.
- Bear in mind that refresh() is a synonym for wrefresh(stdscr), and
- don't try to mix use of stdscr with use of windows declared by
- newwin(); a refresh() call will blow them off the screen. The right
- way to handle this is to use subwin(), or not touch stdscr at all and
- tile your screen with declared windows which you then wnoutrefresh()
- somewhere in your program event loop, with a single doupdate() call to
- trigger actual repainting.
+ Bear in mind that refresh() is a synonym for wrefresh(stdscr). Don't
+ try to mix use of stdscr with use of windows declared by newwin(); a
+ refresh() call will blow them off the screen. The right way to handle
+ this is to use subwin(), or not touch stdscr at all and tile your
+ screen with declared windows which you then wnoutrefresh() somewhere
+ in your program event loop, with a single doupdate() call to trigger
+ actual repainting.
You are much less likely to run into problems if you design your
screen layouts to use tiled rather than overlapping windows.
fragile, and poorly documented. The ncurses library is not yet an
exception to this rule.
- There is a freeware panels library included in the ncurses
- distribution that does a pretty good job of strengthening the
- overlapping-windows facilities.
+ There is a panels library included in the ncurses distribution that
+ does a pretty good job of strengthening the overlapping-windows
+ facilities.
Try to avoid using the global variables LINES and COLS. Use getmaxyx()
on the stdscr context instead. Reason: your code may be ported to run
in an environment with window resizes, in which case several screens
could be open with different sizes.
- Temporarily Leaving ncurses Mode
+ Temporarily Leaving NCURSES Mode
Sometimes you will want to write a program that spends most of its
time in screen mode, but occasionally returns to ordinary `cooked'
addstr("returned.\n"); /* prepare return message */
refresh(); /* restore save modes, repaint screen */
- Using ncurses Under xterm
+ Using NCURSES under XTERM
A resize operation in X sends SIGWINCH to the application running
- under xterm. The ncurses library does not catch this signal, because
- it cannot in general know how you want the screen re-painted. You will
- have to write the SIGWINCH handler yourself.
+ under xterm. The ncurses library provides an experimental signal
+ handler, but in general does not catch this signal, because it cannot
+ know how you want the screen re-painted. You will usually have to
+ write the SIGWINCH handler yourself. Ncurses can give you some help.
The easiest way to code your SIGWINCH handler is to have it do an
endwin, followed by an refresh and a screen repaint you code yourself.
The refresh will pick up the new screen size from the xterm's
environment.
+ That is the standard way, of course (it even works with some vendor's
+ curses implementations). Its drawback is that it clears the screen to
+ reinitialize the display, and does not resize subwindows which must be
+ shrunk. Ncurses provides an extension which works better, the
+ resizeterm function. That function ensures that all windows are
+ limited to the new screen dimensions, and pads stdscr with blanks if
+ the screen is larger.
+
+ Finally, ncurses can be configured to provide its own SIGWINCH
+ handler, based on resizeterm.
+
Handling Multiple Terminal Screens
The initscr() function actually calls a function named newterm() to do
Try to make attribute changes infrequent on your screens. Don't use
the immedok() option!
- Special Features of ncurses
+ Special Features of NCURSES
- When running on PC-clones, ncurses has enhanced support for the IBM
- high-half and ROM characters. The A_ALTCHARSET highlight, enables
- display of both high-half ACS graphics and the PC ROM graphics 0-31
- that are normally interpreted as control characters.
+ The wresize() function allows you to resize a window in place. The
+ associated resizeterm() function simplifies the construction of
+ SIGWINCH handlers, for resizing all windows.
+
+ The define_key() function allows you to define at runtime function-key
+ control sequences which are not in the terminal description. The
+ keyok() function allows you to temporarily enable or disable
+ interpretation of any function-key control sequence.
+
+ The use_default_colors() function allows you to construct applications
+ which can use the terminal's default foreground and background colors
+ as an additional "default" color. Several terminal emulators support
+ this feature, which is based on ISO 6429.
- The wresize() function allows you to resize a window in place.
+ Ncurses supports up 16 colors, unlike SVr4 curses which defines only
+ 8. While most terminals which provide color allow only 8 colors, about
+ a quarter (including XFree86 xterm) support 16 colors.
Compatibility with Older Versions
panels library.
The panel library first appeared in AT&T System V. The version
- documented here is the freeware panel code distributed with ncurses.
+ documented here is the panel code distributed with ncurses.
Compiling With the Panels Library
flexible interface.
The menu library first appeared in AT&T System V. The version
- documented here is the freeware menu code distributed with ncurses.
+ documented here is the menu code distributed with ncurses.
Compiling With the menu Library
of on-screen forms for data entry and program control.
The form library first appeared in AT&T System V. The version
- documented here is the freeware form code distributed with ncurses.
+ documented here is the form code distributed with ncurses.
Compiling With the form Library
Changing the Field Location
- If is possible to move a field's location on the screen:
+ It is possible to move a field's location on the screen:
int move_field(FIELD *field, /* field to alter */
int top, int left); /* new upper-left corner */
-<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
+<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 3.0//EN">
<!--
- $Id: ncurses-intro.html,v 1.23 1998/02/22 17:41:03 juergen Exp $
+ $Id: ncurses-intro.html,v 1.31 1999/05/16 17:02:31 juergen Exp $
-->
<HTML>
<HEAD>
<BLOCKQUOTE>
by Eric S. Raymond and Zeyd M. Ben-Halim<BR>
+updates since release 1.9.9e by Thomas Dickey
</BLOCKQUOTE>
<H1>Contents</H1>
<LI><A HREF="#hints">Hints, Tips, and Tricks</A>
<UL>
<LI><A HREF="#caution">Some Notes of Caution</A>
-<LI><A HREF="#leaving">Temporarily Leaving ncurses Mode</A>
+<LI><A HREF="#leaving">Temporarily Leaving ncurses Mode</A>
<LI><A HREF="#xterm">Using <CODE>ncurses</CODE> under <CODE>xterm</CODE></A>
<LI><A HREF="#screens">Handling Multiple Terminal Screens</A>
<LI><A HREF="#testing">Testing for Terminal Capabilities</A>
<HR>
<H1><A NAME="introduction">Introduction</A></H1>
-This document is an introduction to programming with <CODE>curses</CODE>. It is
+This document is an introduction to programming with <CODE>curses</CODE>. It is
not an exhaustive reference for the curses Application Programming Interface
(API); that role is filled by the <CODE>curses</CODE> manual pages. Rather, it
is intended to help C programmers ease into using the package. <P>
familiar with ncurses. If you are already an experienced <CODE>curses</CODE>
programmer, you should nevertheless read the sections on
<A HREF="#mouse">Mouse Interfacing</A>, <A HREF="#debugging">Debugging</A>,
-<A HREF="compat">Compatibility with Older Versions</A>,
+<A HREF="#compat">Compatibility with Older Versions</A>,
and <A HREF="#hints">Hints, Tips, and Tricks</A>. These will bring you up
to speed on the special features and quirks of the <CODE>ncurses</CODE>
implementation. If you are not so experienced, keep reading. <P>
<H2><A NAME="scope">Scope of This Document</A></H2>
-This document describes <CODE>ncurses</CODE>, a freeware implementation of
+This document describes <CODE>ncurses</CODE>, a free implementation of
the System V <CODE>curses</CODE> API with some clearly marked extensions.
It includes the following System V curses features: <P>
<UL>
document includes tips for using the mouse. <P>
The <CODE>ncurses</CODE> package was originated by Pavel Curtis. The original
-maintainer of the package is
+maintainer of this package is
<A HREF="mailto:zmbenhal@netcom.com">Zeyd Ben-Halim</A>
<zmbenhal@netcom.com>.
-<A HREF="mailto:esr@snark.thyrsus.com">Eric S. Raymond</A>
+<A HREF="mailto:esr@snark.thyrsus.com">Eric S. Raymond</A>
<esr@snark.thyrsus.com>
-wrote many of the new features in versions after 1.8.1
+wrote many of the new features in versions after 1.8.1
and wrote most of this introduction.
-<A HREF="mailto:Juergen.Pfeifer@T-Online.de">Jürgen Pfeifer</A>
-wrote all of the menu and forms code as well as the
+<A HREF="mailto:juergen.pfeifer@gmx.net">Jürgen Pfeifer</A>
+wrote all of the menu and forms code as well as the
<A HREF="http://www.adahome.com">Ada95</A> binding.
Ongoing work is being done by
<A HREF="mailto:dickey@clark.net">Thomas Dickey</A>
and
-<A HREF="mailto:Juergen.Pfeifer@T-Online.de">Jürgen Pfeifer</A>.
+<A HREF="mailto:juergen.pfeifer@gmx.net">Jürgen Pfeifer</A>.
<A HREF="mailto:florian@gnu.org">Florian La Roche</A>
acts as the maintainer for the Free Software Foundation, which holds the
copyright on ncurses.
<A HREF="mailto:bug-ncurses@gnu.org">bug-ncurses@gnu.org</A>.
<P>
-This document also describes the <A HREF="panels">panels</A> extension library,
+This document also describes the <A HREF="#panels">panels</A> extension library,
similarly modeled on the SVr4 panels facility. This library allows you to
associate backing store with each of a stack or deck of overlapping windows,
and provides operations for moving windows around in the stack that change
<DL>
<DT> window
-<DD>
+<DD>
A data structure describing a sub-rectangle of the screen (possibly the
entire screen). You can write to a window as though it were a miniature
screen, scrolling independently of other windows on the physical screen. <P>
<DT> screens
-<DD>
+<DD>
A subset of windows which are as large as the terminal screen, i.e., they start
at the upper left hand corner and encompass the lower right hand corner. One
of these, <CODE>stdscr</CODE>, is automatically provided for the programmer. <P>
<DT> terminal screen
-<DD>
+<DD>
The package's idea of what the terminal display currently looks like, i.e.,
what the user sees now. This is a special screen.
</DL>
The <CODE>curses.h</CODE> also introduces some <CODE>#define</CODE> constants and types
of general usefulness:
-<DL>
+<DL>
<DT> <CODE>bool</CODE>
<DD> boolean type, actually a `char' (e.g., <CODE>bool doneit;</CODE>)
<DT> <CODE>TRUE</CODE>
<H3><A NAME="mouse">Mouse Interfacing</A></H3>
-The <CODE>ncurses</CODE> library also provides a mouse interface. Note:
-his facility is original to <CODE>ncurses</CODE>, it is not part of either
+The <CODE>ncurses</CODE> library also provides a mouse interface.
+<!-- The 'note' tag is not portable enough -->
+<blockquote>
+<strong>NOTE:</strong> this facility is specific to <CODE>ncurses</CODE>, it is not part of either
the XSI Curses standard, nor of System V Release 4, nor BSD curses.
+System V Release 4 curses contains code with similar interface definitions,
+however it is not documented. Other than by disassembling the library, we
+have no way to determine exactly how that mouse code works.
Thus, we recommend that you wrap mouse-related code in an #ifdef using the
feature macro NCURSES_MOUSE_VERSION so it will not be compiled and linked
-on non-ncurses systems. <P>
-
-Presently, mouse event reporting works only under xterm. In the
-future, ncurses will detect the presence of <CODE>gpm</CODE>(1), Alessandro
-Rubini's freeware mouse server for Linux systems, and accept mouse
-reports through it. <P>
-
+on non-ncurses systems.
+</blockquote>
+
+Presently, mouse event reporting works in the following environments:
+<ul>
+<li>xterm and similar programs such as rxvt.
+<li>Linux console, when configured with <CODE>gpm</CODE>(1), Alessandro
+Rubini's mouse server.
+<li>OS/2 EMX
+</ul>
+<P>
The mouse interface is very simple. To activate it, you use the function
<CODE>mousemask()</CODE>, passing it as first argument a bit-mask that specifies
-what kinds of events you want your program to be able to see. It will
+what kinds of events you want your program to be able to see. It will
return the bit-mask of events that actually become visible, which may differ
from the argument if the mouse device is not capable of reporting some of
the event types you specify. <P>
Each call to <CODE>getmouse()</CODE> fills a structure (the address of which you'll
pass it) with mouse event data. The event data includes zero-origin,
screen-relative character-cell coordinates of the mouse pointer. It also
-includes an event mask. Bits in this mask will be set, corresponding
+includes an event mask. Bits in this mask will be set, corresponding
to the event type being reported. <P>
The mouse structure contains two additional fields which may be
significant in the future as ncurses interfaces to new kinds of
pointing device. In addition to x and y coordinates, there is a slot
-for a z coordinate; this might be useful with touch-screens that can
+for a z coordinate; this might be useful with touch-screens that can
return a pressure or duration parameter. There is also a device ID
field, which could be used to distinguish between multiple pointing
devices. <P>
<H3><A NAME="debugging">Debugging</A></H3>
-NOTE: These functions are not part of the standard curses API! <P>
+<!-- The 'note' tag is not portable enough -->
+<blockquote>
+<strong>NOTE:</strong> These functions are not part of the standard curses API!
+</blockquote>
<DL>
<DT> <CODE>trace()</CODE>
a trace level by assigning a trace level value to the environment variable
<CODE>NCURSES_TRACE</CODE>).
<DT> <CODE>_tracef()</CODE>
-<DD>
+<DD>
This function can be used to output your own debugging information. It is only
available only if you link with -lncurses_g. It can be used the same way as
<CODE>printf()</CODE>, only it outputs a newline after the end of arguments.
have always been poorly documented, and are likely to hurt your
application's usability with other curses libraries. <P>
-Bear in mind that <CODE>refresh()</CODE> is a synonym for <CODE>wrefresh(stdscr)</CODE>,
-and don't try to mix use of <CODE>stdscr</CODE> with use of windows declared
+Bear in mind that <CODE>refresh()</CODE> is a synonym for <CODE>wrefresh(stdscr)</CODE>.
+Don't try to mix use of <CODE>stdscr</CODE> with use of windows declared
by <CODE>newwin()</CODE>; a <CODE>refresh()</CODE> call will blow them off the
screen. The right way to handle this is to use <CODE>subwin()</CODE>, or
not touch <CODE>stdscr</CODE> at all and tile your screen with declared
documented. The <CODE>ncurses</CODE> library is not yet an exception to this
rule. <P>
-There is a freeware panels library included in the <CODE>ncurses</CODE>
+There is a panels library included in the <CODE>ncurses</CODE>
distribution that does a pretty good job of strengthening the
overlapping-windows facilities. <P>
your code may be ported to run in an environment with window resizes,
in which case several screens could be open with different sizes. <P>
-<H3><A NAME="leaving">Temporarily Leaving <CODE>ncurses</CODE> Mode</A></H3>
+<H3><A NAME="leaving">Temporarily Leaving NCURSES Mode</A></H3>
Sometimes you will want to write a program that spends most of its time in
screen mode, but occasionally returns to ordinary `cooked' mode. A common
refresh(); /* restore save modes, repaint screen */
</PRE>
-<H3><A NAME="xterm">Using <CODE>ncurses</CODE> Under <CODE>xterm</CODE></A></H3>
+<H3><A NAME="xterm">Using NCURSES under XTERM</A></H3>
A resize operation in X sends SIGWINCH to the application running under xterm.
-The <CODE>ncurses</CODE> library does not catch this signal, because it cannot in
-general know how you want the screen re-painted. You will have to write the
-SIGWINCH handler yourself. <P>
+The <CODE>ncurses</CODE> library provides an experimental signal
+handler, but in general does not catch this signal, because it cannot
+know how you want the screen re-painted. You will usually have to write the
+SIGWINCH handler yourself. Ncurses can give you some help. <P>
The easiest way to code your SIGWINCH handler is to have it do an
<CODE>endwin</CODE>, followed by an <CODE>refresh</CODE> and a screen repaint you code
yourself. The <CODE>refresh</CODE> will pick up the new screen size from the
-xterm's environment.
+xterm's environment. <P>
+
+That is the standard way, of course (it even works with some vendor's curses
+implementations).
+Its drawback is that it clears the screen to reinitialize the display, and does
+not resize subwindows which must be shrunk.
+<CODE>Ncurses</CODE> provides an extension which works better, the
+<CODE>resizeterm</CODE> function. That function ensures that all windows
+are limited to the new screen dimensions, and pads <CODE>stdscr</CODE>
+with blanks if the screen is larger. <P>
+
+Finally, ncurses can be configured to provide its own SIGWINCH handler,
+based on <CODE>resizeterm</CODE>.
<H3><A NAME="screens">Handling Multiple Terminal Screens</A></H3>
control characters. Try to make attribute changes infrequent on your
screens. Don't use the <CODE>immedok()</CODE> option! <P>
-<H3><A NAME="special">Special Features of <CODE>ncurses</CODE></A></H3>
+<H3><A NAME="special">Special Features of NCURSES</A></H3>
+
+The <CODE>wresize()</CODE> function allows you to resize a window in place.
+The associated <CODE>resizeterm()</CODE> function simplifies the construction
+of <a HREF="#xterm">SIGWINCH</a> handlers, for resizing all windows. <P>
+
+The <CODE>define_key()</CODE> function allows you
+to define at runtime function-key control sequences which are not in the
+terminal description.
+The <CODE>keyok()</CODE> function allows you to temporarily
+enable or disable interpretation of any function-key control sequence. <P>
-When running on PC-clones, <CODE>ncurses</CODE> has enhanced support for
-the IBM high-half and ROM characters. The <CODE>A_ALTCHARSET</CODE> highlight,
-enables display of both high-half ACS graphics and the PC ROM graphics
-0-31 that are normally interpreted as control characters. <P>
+The <CODE>use_default_colors()</CODE> function allows you to construct
+applications which can use the terminal's default foreground and
+background colors as an additional "default" color.
+Several terminal emulators support this feature, which is based on ISO 6429. <P>
-The <CODE>wresize()</CODE> function allows you to resize a window in place. <P>
+Ncurses supports up 16 colors, unlike SVr4 curses which defines only 8.
+While most terminals which provide color allow only 8 colors, about
+a quarter (including XFree86 xterm) support 16 colors.
<H2><A NAME="compat">Compatibility with Older Versions</A></H2>
What happens to the overlapping region depends on what <CODE>wnoutrefresh()</CODE>
does with its argument -- what portions of the argument window it copies to the
virtual screen. Some implementations do "change copy", copying down only
-locations in the window that have changed (or been marked changed with
+locations in the window that have changed (or been marked changed with
<CODE>wtouchln()</CODE> and friends). Some implementations do "entire copy",
copying <EM>all</EM> window locations to the virtual screen whether or not
they have changed. <P>
<H3><A NAME="backbug">Background Erase</A></H3>
-If you have been using a very old versions of <CODE>ncurses</CODE> (1.8.7 or
+If you have been using a very old versions of <CODE>ncurses</CODE> (1.8.7 or
older) you may be surprised by the behavior of the erase functions. In older
versions, erased areas of a window were filled with a blank modified by the
window's current attribute (as set by <STRONG>wattrset()</STRONG>, <STRONG>wattron()</STRONG>,
<H2><A NAME="xsifuncs">XSI Curses Conformance</A></H2>
The <CODE>ncurses</CODE> library is intended to be base-level conformant with the
-XSI Curses standard from X/Open. Many extended-level features (in fact, almost
+XSI Curses standard from X/Open. Many extended-level features (in fact, almost
all features not directly concerned with wide characters and
internationalization) are also supported. <P>
can be tedious and difficult to get right. Hence the panels library. <P>
The <CODE>panel</CODE> library first appeared in AT&T System V. The
-version documented here is the freeware <CODE>panel</CODE> code distributed
+version documented here is the <CODE>panel</CODE> code distributed
with <CODE>ncurses</CODE>.
<H2><A NAME="pcompile">Compiling With the Panels Library</A></H2>
uniform but flexible interface. <P>
The <CODE>menu</CODE> library first appeared in AT&T System V. The
-version documented here is the freeware <CODE>menu</CODE> code distributed
+version documented here is the <CODE>menu</CODE> code distributed
with <CODE>ncurses</CODE>. <P>
<H2><A NAME="mcompile">Compiling With the menu Library</A></H2>
From a single-valued menu you can read the selected value simply by looking
at the current item. From a multi-valued menu, you get the selected set
-by looping through the items applying the <CODE>item_value()</CODE>
+by looping through the items applying the <CODE>item_value()</CODE>
predicate function. Your menu-processing code can use the function
<CODE>set_item_value()</CODE> to flag the items in the select set. <P>
menu with <CODE>menu_format()</CODE>. The default format is rows=16,
columns=1. <P>
-The actual menu page may be smaller than the format size. This depends
+The actual menu page may be smaller than the format size. This depends
on the item number and size and whether O_ROWMAJOR is on. This option
-(on by default) causes menu items to be displayed in a `raster-scan'
+(on by default) causes menu items to be displayed in a `raster-scan'
pattern, so that if more than one item will fit horizontally the first
couple of items are side-by-side in the top row. The alternative is
column-major display, which tries to put the first several items in
see the <CODE>menu_mark(3x)</CODE> manual page for details. The mark
string length also influences the menu page size. <P>
-The function <CODE>scale_menu()</CODE> returns the minimum display size
+The function <CODE>scale_menu()</CODE> returns the minimum display size
that the menu code computes from all these factors.
There are other menu display attributes including a select attribute,
There are explicit requests for scrolling which also change the
current item (because the select location does not change, but the
-item there does). These are <CODE>REQ_SCR_DLINE</CODE>,
+item there does). These are <CODE>REQ_SCR_DLINE</CODE>,
<CODE>REQ_SCR_ULINE</CODE>, <CODE>REQ_SCR_DPAGE</CODE>, and
<CODE>REQ_SCR_UPAGE</CODE>. <P>
<CODE>REQ_CLEAR_PATTERN</CODE>, <CODE>REQ_BACK_PATTERN</CODE>,
<CODE>REQ_NEXT_MATCH</CODE>, <CODE>REQ_PREV_MATCH</CODE>. The latter
two are useful when pattern buffer input matches more than one item
-in a multi-valued menu. <P>
+in a multi-valued menu. <P>
Each successful scroll or item navigation request clears the pattern
buffer. It is also possible to set the pattern buffer explicitly
programming of on-screen forms for data entry and program control. <P>
The <CODE>form</CODE> library first appeared in AT&T System V. The
-version documented here is the freeware <CODE>form</CODE> code distributed
+version documented here is the <CODE>form</CODE> code distributed
with <CODE>ncurses</CODE>. <P>
<H2><A NAME="fcompile">Compiling With the form Library</A></H2>
and editing key to any keystroke accepted by <CODE>curses</CODE>
Fields may have validation conditions on them, so that they check input
-data for type and value. The form library supplies a rich set of
+data for type and value. The form library supplies a rich set of
pre-defined field types, and makes it relatively easy to define new ones. <P>
Once its transaction is completed (or aborted), a form may be
wherever possible. <P>
In forms programs, however, the `process user requests' is somewhat more
-complicated than for menus. Besides menu-like navigation operations,
+complicated than for menus. Besides menu-like navigation operations,
the menu driver loop has to support field editing and data validation. <P>
<H2><A NAME="fcreate">Creating and Freeing Fields and Forms</A></H2>
The basic function for creating fields is <CODE>new_field()</CODE>: <P>
<PRE>
-FIELD *new_field(int height, int width, /* new field size */
+FIELD *new_field(int height, int width, /* new field size */
int top, int left, /* upper left corner */
int offscreen, /* number of offscreen rows */
int nbuf); /* number of working buffers */
<CODE>set_form_window()</CODE> call. <P>
The fifth argument allows you to specify a number of off-screen rows. If
-this is zero, the entire field will always be displayed. If it is
-nonzero, the form will be scrollable, with only one screen-full (initially
+this is zero, the entire field will always be displayed. If it is
+nonzero, the form will be scrollable, with only one screen-full (initially
the top part) displayed at any given time. If you make a field dynamic
and grow it so it will no longer fit on the screen, the form will become
scrollable even if the <CODE>offscreen</CODE> argument was initially zero. <P>
<PRE>
int field_info(FIELD *field, /* field from which to fetch */
- int *height, *int width, /* field size */
+ int *height, *int width, /* field size */
int *top, int *left, /* upper left corner */
int *offscreen, /* number of offscreen rows */
int *nbuf); /* number of working buffers */
</PRE>
-This function is a sort of inverse of <CODE>new_field()</CODE>; instead of
+This function is a sort of inverse of <CODE>new_field()</CODE>; instead of
setting size and location attributes of a new field, it fetches them
from an existing one. <P>
<H3><A NAME="flocation">Changing the Field Location</A></H3>
-If is possible to move a field's location on the screen: <P>
+It is possible to move a field's location on the screen: <P>
<PRE>
int move_field(FIELD *field, /* field to alter */
<PRE>
int set_field_fore(FIELD *field, /* field to alter */
- chtype attr); /* attribute to set */
+ chtype attr); /* attribute to set */
chtype field_fore(FIELD *field); /* field to query */
int set_field_back(FIELD *field, /* field to alter */
- chtype attr); /* attribute to set */
+ chtype attr); /* attribute to set */
chtype field_back(FIELD *field); /* field to query */
int set_field_pad(FIELD *field, /* field to alter */
- int pad); /* pad character to set */
+ int pad); /* pad character to set */
chtype field_pad(FIELD *field);
int set_new_page(FIELD *field, /* field to alter */
- int flag); /* TRUE to force new page */
+ int flag); /* TRUE to force new page */
chtype new_page(FIELD *field); /* field to query */
</PRE>
<PRE>
int set_field_opts(FIELD *field, /* field to alter */
- int attr); /* attribute to set */
+ int attr); /* attribute to set */
int field_opts_on(FIELD *field, /* field to alter */
- int attr); /* attributes to turn on */
+ int attr); /* attributes to turn on */
int field_opts_off(FIELD *field, /* field to alter */
- int attr); /* attributes to turn off */
+ int attr); /* attributes to turn off */
int field_opts(FIELD *field); /* field to query */
</PRE>
fields with buffer values alterable by the forms application, not the user.
<DT> O_PUBLIC
<DD> Controls whether data is displayed during field entry. If this option is
-turned off on a field, the library will accept and edit data in that field,
+turned off on a field, the library will accept and edit data in that field,
but it will not be displayed and the visible field cursor will not move.
You can turn off the O_PUBLIC bit to define password fields.
<DT> O_EDIT
<DD> Controls whether the field's data can be modified. When this option is
-off, all editing requests except <CODE>REQ_PREV_CHOICE</CODE> and
+off, all editing requests except <CODE>REQ_PREV_CHOICE</CODE> and
<CODE>REQ_NEXT_CHOICE</CODE> will fail. Such read-only fields may be useful for
help messages.
<DT> O_WRAP
<DD> Controls word-wrapping in multi-line fields. Normally, when any
character of a (blank-separated) word reaches the end of the current line, the
entire word is wrapped to the next line (assuming there is one). When this
-option is off, the word will be split across the line break.
+option is off, the word will be split across the line break.
<DT> O_BLANK
<DD> Controls field blanking. When this option is on, entering a character at
the first field position erases the entire field (except for the just-entered
in dynamic fields that have not reached their size limit.
<DT> O_NULLOK
<DD> Controls whether <A HREF="#fvalidation">validation</A> is applied to
-blank fields. Normally, it is not; the user can leave a field blank
+blank fields. Normally, it is not; the user can leave a field blank
without invoking the usual validation check on exit. If this option is
off on a field, exit from it will invoke a validation check.
<DT> O_PASSOK
Calling <CODE>field_status()</CODE> on a field not currently selected
for input will return a correct value. Calling <CODE>field_status()</CODE> on a
-field that is currently selected for input may not necessarily give a
+field that is currently selected for input may not necessarily give a
correct field status value, because entered data isn't necessarily copied to
buffer zero before the exit validation check.
(Properly, this user pointer field ought to have <CODE>(void *)</CODE> type.
The <CODE>(char *)</CODE> type is retained for System V compatibility.) <P>
-It is valid to set the user pointer of the default field (with a
+It is valid to set the user pointer of the default field (with a
<CODE>set_field_userptr()</CODE> call passed a NULL field pointer.)
When a new field is created, the default-field user pointer is copied
to initialize the new field's user pointer. <P>
<PRE>
int set_max_field(FIELD *field, /* field to alter (may not be NULL) */
- int max_size); /* upper limit on field size */
+ int max_size); /* upper limit on field size */
</PRE>
If the field is one-line, <CODE>max_size</CODE> is taken to be a column size
<UL>
<LI>If there is no growth limit, there is no final position of the field;
therefore <CODE>O_AUTOSKIP</CODE> and <CODE>O_NL_OVERLOAD</CODE> are ignored.
-<LI>Field justification will be ignored (though whatever justification is
+<LI>Field justification will be ignored (though whatever justification is
set up will be retained internally and can be queried).
-<LI>The <CODE>dup_field()</CODE> and <CODE>link_field()</CODE> calls copy
+<LI>The <CODE>dup_field()</CODE> and <CODE>link_field()</CODE> calls copy
dynamic-buffer sizes. If the <CODE>O_STATIC</CODE> option is set on one of a
collection of links, buffer resizing will occur only when the field is
edited through that link.
By default, a field will accept any data that will fit in its input buffer.
However, it is possible to attach a validation type to a field. If you do
this, any attempt to leave the field while it contains data that doesn't
-match the validation type will fail. Some validation types also have a
+match the validation type will fail. Some validation types also have a
character-validity check for each time a character is entered in the field. <P>
A field's validation check (if any) is not called when
prefix of a valid string and have it completed for you. <P>
By default, if you enter such a prefix and it matches more than one value
-in the string list, the prefix will be completed to the first matching
+in the string list, the prefix will be completed to the first matching
value. But the <CODE>checkunique</CODE> argument, if true, requires prefix
matches to be unique in order to be valid. <P>
Valid characters consist of an optional leading minus and digits. possibly
including a decimal point. If your system supports locale's, the decimal point
-character used must be the one defined by your locale. The range check is
+character used must be the one defined by your locale. The range check is
performed on exit. If the range maximum is less than or equal to the minimum,
the range is ignored. <P>
Calling <CODE>field_buffer()</CODE> with a null field pointer will raise an
error. Calling <CODE>field_buffer()</CODE> on a field not currently selected
for input will return a correct value. Calling <CODE>field_buffer()</CODE> on a
-field that is currently selected for input may not necessarily give a
+field that is currently selected for input may not necessarily give a
correct field buffer value, because entered data isn't necessarily copied to
buffer zero before the exit validation check.
these functions: <P>
<PRE>
-int data_ahead(FORM *form); /* form to be queried */
+int data_ahead(FORM *form); /* form to be queried */
-int data_behind(FORM *form); /* form to be queried */
+int data_behind(FORM *form); /* form to be queried */
</PRE>
The function <CODE>data_ahead()</CODE> returns TRUE if (a) the current
</PRE>
Your input virtualization function needs to take input and then convert it
-to either an alphanumeric character (which is treated as data to be
+to either an alphanumeric character (which is treated as data to be
entered in the currently-selected field), or a forms processing request. <P>
The forms driver provides hooks (through input-validation and
</DL>
Of the built-in field types, only <CODE>TYPE_ENUM</CODE> has built-in successor
-and predecessor functions. When you define a field type of your own
+and predecessor functions. When you define a field type of your own
(see <A HREF="#fcustom">Custom Validation Types</A>), you can associate
our own ordering functions. <P>
<PRE>
int set_form_opts(FORM *form, /* form to alter */
- int attr); /* attribute to set */
+ int attr); /* attribute to set */
int form_opts_on(FORM *form, /* form to alter */
- int attr); /* attributes to turn on */
+ int attr); /* attributes to turn on */
int form_opts_off(FORM *form, /* form to alter */
- int attr); /* attributes to turn off */
+ int attr); /* attributes to turn off */
int form_opts(FORM *form); /* form to query */
</PRE>
preexisting ones: <P>
<PRE>
-FIELD *link_fieldtype(FIELDTYPE *type1,
+FIELD *link_fieldtype(FIELDTYPE *type1,
FIELDTYPE *type2);
</PRE>
The successor and predecessor arguments will each be passed two arguments;
a field pointer, and a pile pointer (as for the validation functions). They
-are expected to use the function <CODE>field_buffer()</CODE> to read the
+are expected to use the function <CODE>field_buffer()</CODE> to read the
current value, and <CODE>set_field_buffer()</CODE> on buffer 0 to set the next
or previous value. Either hook may return TRUE to indicate success (a
legal next or previous value was set) or FALSE to indicate failure. <P>
--- /dev/null
+LIBRARY ncurses5 INITINSTANCE TERMINSTANCE\r
+DESCRIPTION "NCurses-5-0-990828, module ncurses"\r
+CODE LOADONCALL\r
+DATA LOADONCALL NONSHARED MULTIPLE\r
+EXPORTS\r
+ "BC" @662 NONAME\r
+ "COLORS" @503 NONAME\r
+ "COLOR_PAIR" @36 NONAME\r
+ "COLOR_PAIRS" @504 NONAME\r
+ "COLS" @511 NONAME\r
+ "ESCDELAY" @513 NONAME\r
+ "LINES" @510 NONAME\r
+ "PAIR_NUMBER" @209 NONAME\r
+ "PC" @660 NONAME\r
+ "SP" @1003 NONAME\r
+ "TABSIZE" @512 NONAME\r
+ "UP" @661 NONAME\r
+ "_nc_access" @6 NONAME\r
+ "_nc_add_to_try" @7 NONAME\r
+ "_nc_align_termtype" @8 NONAME\r
+ "_nc_background" @9 NONAME\r
+ "_nc_baudrate" @10 NONAME\r
+ "_nc_cap_hash_table" @805 NONAME\r
+ "_nc_capalias_table" @806 NONAME\r
+ "_nc_capcmp" @707 NONAME\r
+ "_nc_captoinfo" @829 NONAME\r
+ "_nc_check_termtype" @15 NONAME\r
+ "_nc_comment_end" @819 NONAME\r
+ "_nc_comment_start" @818 NONAME\r
+ "_nc_copy_entry" @16 NONAME\r
+ "_nc_copy_termtype" @22 NONAME\r
+ "_nc_curr_col" @816 NONAME\r
+ "_nc_curr_file_pos" @817 NONAME\r
+ "_nc_curr_line" @815 NONAME\r
+ "_nc_curr_token" @803 NONAME\r
+ "_nc_do_color" @1037 NONAME\r
+ "_nc_do_xmc_glitch" @23 NONAME\r
+ "_nc_doalloc" @25 NONAME\r
+ "_nc_entry_match" @710 NONAME\r
+ "_nc_err_abort" @826 NONAME\r
+ "_nc_expand_try" @27 NONAME\r
+ "_nc_expanded" @51 NONAME\r
+ "_nc_fallback" @625 NONAME\r
+ "_nc_find_entry" @809 NONAME\r
+ "_nc_find_type_entry" @810 NONAME\r
+ "_nc_first_name" @622 NONAME\r
+ "_nc_free_entries" @712 NONAME\r
+ "_nc_free_termtype" @54 NONAME\r
+ "_nc_freeall" @58 NONAME\r
+ "_nc_freewin" @59 NONAME\r
+ "_nc_get_hash_table" @60 NONAME\r
+ "_nc_get_table" @808 NONAME\r
+ "_nc_get_token" @811 NONAME\r
+ "_nc_get_tty_mode" @63 NONAME\r
+ "_nc_get_type" @823 NONAME\r
+ "_nc_getenv_num" @65 NONAME\r
+ "_nc_has_mouse" @67 NONAME\r
+ "_nc_hash_map" @73 NONAME\r
+ "_nc_head" @700 NONAME\r
+ "_nc_home_terminfo" @84 NONAME\r
+ "_nc_info_hash_table" @804 NONAME\r
+ "_nc_infoalias_table" @807 NONAME\r
+ "_nc_infotocap" @830 NONAME\r
+ "_nc_init_acs" @91 NONAME\r
+ "_nc_init_entry" @702 NONAME\r
+ "_nc_init_keytry" @92 NONAME\r
+ "_nc_keep_tic_dir" @93 NONAME\r
+ "_nc_key_names" @95 NONAME\r
+ "_nc_keypad" @1024 NONAME\r
+ "_nc_lib_traceatr" @96 NONAME\r
+ "_nc_lib_tracedmp" @97 NONAME\r
+ "_nc_lib_tracemouse" @98 NONAME\r
+ "_nc_make_oldhash" @103 NONAME\r
+ "_nc_makenew" @1025 NONAME\r
+ "_nc_memmove" @106 NONAME\r
+ "_nc_merge_entry" @704 NONAME\r
+ "_nc_msec_cost" @116 NONAME\r
+ "_nc_mvcur_init" @1014 NONAME\r
+ "_nc_mvcur_resume" @117 NONAME\r
+ "_nc_mvcur_wrap" @1015 NONAME\r
+ "_nc_name_match" @623 NONAME\r
+ "_nc_nulls_sent" @118 NONAME\r
+ "_nc_oldnums" @119 NONAME\r
+ "_nc_ospeed" @120 NONAME\r
+ "_nc_outch" @1026 NONAME\r
+ "_nc_outstr" @1033 NONAME\r
+ "_nc_panelhook" @127 NONAME\r
+ "_nc_panic_mode" @814 NONAME\r
+ "_nc_parse_entry" @706 NONAME\r
+ "_nc_printf_string" @129 NONAME\r
+ "_nc_push_token" @812 NONAME\r
+ "_nc_read_entry" @620 NONAME\r
+ "_nc_read_entry_source" @709 NONAME\r
+ "_nc_read_file_entry" @621 NONAME\r
+ "_nc_read_termcap" @130 NONAME\r
+ "_nc_remove_key" @132 NONAME\r
+ "_nc_remove_string" @137 NONAME\r
+ "_nc_render" @1027 NONAME\r
+ "_nc_reset_input" @813 NONAME\r
+ "_nc_resolve_uses" @711 NONAME\r
+ "_nc_ripoffline" @142 NONAME\r
+ "_nc_save_str" @703 NONAME\r
+ "_nc_screen_chain" @143 NONAME\r
+ "_nc_screen_init" @144 NONAME\r
+ "_nc_screen_resume" @145 NONAME\r
+ "_nc_screen_wrap" @146 NONAME\r
+ "_nc_scroll_oldhash" @147 NONAME\r
+ "_nc_scroll_optimize" @1029 NONAME\r
+ "_nc_scroll_window" @1030 NONAME\r
+ "_nc_scrolln" @148 NONAME\r
+ "_nc_set_buffer" @152 NONAME\r
+ "_nc_set_source" @822 NONAME\r
+ "_nc_set_tty_mode" @158 NONAME\r
+ "_nc_set_type" @824 NONAME\r
+ "_nc_set_writedir" @159 NONAME\r
+ "_nc_setupscreen" @1031 NONAME\r
+ "_nc_sigaction" @160 NONAME\r
+ "_nc_signal_handler" @1034 NONAME\r
+ "_nc_slk_format" @161 NONAME\r
+ "_nc_slk_initialize" @162 NONAME\r
+ "_nc_start_line" @821 NONAME\r
+ "_nc_suppress_warnings" @828 NONAME\r
+ "_nc_synchook" @1035 NONAME\r
+ "_nc_syntax" @820 NONAME\r
+ "_nc_syserr_abort" @825 NONAME\r
+ "_nc_tail" @701 NONAME\r
+ "_nc_tic_dir" @167 NONAME\r
+ "_nc_tic_expand" @169 NONAME\r
+ "_nc_tic_written" @170 NONAME\r
+ "_nc_timed_wait" @1036 NONAME\r
+ "_nc_tinfo_fkeys" @172 NONAME\r
+ "_nc_trace_buf" @178 NONAME\r
+ "_nc_trace_tries" @183 NONAME\r
+ "_nc_trace_xnames" @184 NONAME\r
+ "_nc_tracebits" @185 NONAME\r
+ "_nc_tracing" @1010 NONAME\r
+ "_nc_trans_string" @186 NONAME\r
+ "_nc_user_definable" @187 NONAME\r
+ "_nc_visbuf" @1012 NONAME\r
+ "_nc_visbuf2" @188 NONAME\r
+ "_nc_vsscanf" @189 NONAME\r
+ "_nc_waddch_nosync" @1028 NONAME\r
+ "_nc_warning" @827 NONAME\r
+ "_nc_wrap_entry" @705 NONAME\r
+ "_nc_write_entry" @708 NONAME\r
+ "_tracechar" @403 NONAME\r
+ "acs_map" @506 NONAME\r
+ "addch" @1 NONAME\r
+ "addchnstr" @2 NONAME\r
+ "addchstr" @3 NONAME\r
+ "addnstr" @4 NONAME\r
+ "addstr" @5 NONAME\r
+ "attr_get" @14 NONAME\r
+ "attr_off" @193 NONAME\r
+ "attr_on" @211 NONAME\r
+ "attr_set" @17 NONAME\r
+ "attroff" @11 NONAME\r
+ "attron" @12 NONAME\r
+ "attrset" @13 NONAME\r
+ "baudrate" @18 NONAME\r
+ "beep" @19 NONAME\r
+ "bkgd" @20 NONAME\r
+ "bkgdset" @21 NONAME\r
+ "boolcodes" @601 NONAME\r
+ "boolfnames" @602 NONAME\r
+ "boolnames" @600 NONAME\r
+ "border" @24 NONAME\r
+ "box" @26 NONAME\r
+ "can_change_color" @28 NONAME\r
+ "cbreak" @29 NONAME\r
+ "chgat" @30 NONAME\r
+ "clear" @31 NONAME\r
+ "clearok" @32 NONAME\r
+ "clrtobot" @33 NONAME\r
+ "clrtoeol" @34 NONAME\r
+ "color_content" @35 NONAME\r
+ "color_set" @234 NONAME\r
+ "copywin" @37 NONAME\r
+ "cur_term" @515 NONAME\r
+ "curs_set" @38 NONAME\r
+ "curscr" @501 NONAME\r
+ "def_prog_mode" @39 NONAME\r
+ "def_shell_mode" @40 NONAME\r
+ "define_key" @238 NONAME\r
+ "del_curterm" @641 NONAME\r
+ "delay_output" @41 NONAME\r
+ "delch" @42 NONAME\r
+ "deleteln" @45 NONAME\r
+ "delscreen" @43 NONAME\r
+ "delwin" @44 NONAME\r
+ "derwin" @46 NONAME\r
+ "doupdate" @47 NONAME\r
+ "dupwin" @48 NONAME\r
+ "echo" @49 NONAME\r
+ "echochar" @50 NONAME\r
+ "endwin" @52 NONAME\r
+ "erasechar" @53 NONAME\r
+ "filter" @55 NONAME\r
+ "flash" @56 NONAME\r
+ "flushinp" @57 NONAME\r
+ "getbkgd" @240 NONAME\r
+ "getch" @61 NONAME\r
+ "getmouse" @356 NONAME\r
+ "getnstr" @62 NONAME\r
+ "getstr" @64 NONAME\r
+ "getwin" @66 NONAME\r
+ "halfdelay" @68 NONAME\r
+ "has_colors" @69 NONAME\r
+ "has_ic" @70 NONAME\r
+ "has_il" @71 NONAME\r
+ "has_key" @242 NONAME\r
+ "hline" @72 NONAME\r
+ "idcok" @74 NONAME\r
+ "idlok" @75 NONAME\r
+ "immedok" @76 NONAME\r
+ "inch" @77 NONAME\r
+ "inchnstr" @78 NONAME\r
+ "inchstr" @79 NONAME\r
+ "init_color" @81 NONAME\r
+ "init_pair" @82 NONAME\r
+ "initscr" @80 NONAME\r
+ "innstr" @83 NONAME\r
+ "insch" @85 NONAME\r
+ "insdelln" @86 NONAME\r
+ "insertln" @87 NONAME\r
+ "insnstr" @88 NONAME\r
+ "insstr" @89 NONAME\r
+ "instr" @90 NONAME\r
+ "intrflush" @94 NONAME\r
+ "is_linetouched" @100 NONAME\r
+ "is_wintouched" @101 NONAME\r
+ "isendwin" @99 NONAME\r
+ "keybound" @251 NONAME\r
+ "keyname" @102 NONAME\r
+ "keyok" @263 NONAME\r
+ "keypad" @104 NONAME\r
+ "killchar" @105 NONAME\r
+ "leaveok" @107 NONAME\r
+ "longname" @108 NONAME\r
+ "mcprint" @266 NONAME\r
+ "meta" @109 NONAME\r
+ "mouse_trafo" @270 NONAME\r
+ "mouseinterval" @360 NONAME\r
+ "mousemask" @358 NONAME\r
+ "move" @110 NONAME\r
+ "mvaddch" @111 NONAME\r
+ "mvaddchnstr" @112 NONAME\r
+ "mvaddchstr" @113 NONAME\r
+ "mvaddnstr" @114 NONAME\r
+ "mvaddstr" @115 NONAME\r
+ "mvchgat" @121 NONAME\r
+ "mvcur" @122 NONAME\r
+ "mvdelch" @123 NONAME\r
+ "mvderwin" @124 NONAME\r
+ "mvgetch" @125 NONAME\r
+ "mvgetnstr" @126 NONAME\r
+ "mvgetstr" @128 NONAME\r
+ "mvhline" @131 NONAME\r
+ "mvinch" @133 NONAME\r
+ "mvinchnstr" @134 NONAME\r
+ "mvinchstr" @135 NONAME\r
+ "mvinnstr" @136 NONAME\r
+ "mvinsch" @138 NONAME\r
+ "mvinsnstr" @139 NONAME\r
+ "mvinsstr" @140 NONAME\r
+ "mvinstr" @141 NONAME\r
+ "mvprintw" @149 NONAME\r
+ "mvscanw" @150 NONAME\r
+ "mvvline" @151 NONAME\r
+ "mvwaddch" @153 NONAME\r
+ "mvwaddchnstr" @154 NONAME\r
+ "mvwaddchstr" @155 NONAME\r
+ "mvwaddnstr" @156 NONAME\r
+ "mvwaddstr" @157 NONAME\r
+ "mvwchgat" @163 NONAME\r
+ "mvwdelch" @164 NONAME\r
+ "mvwgetch" @165 NONAME\r
+ "mvwgetnstr" @166 NONAME\r
+ "mvwgetstr" @168 NONAME\r
+ "mvwhline" @171 NONAME\r
+ "mvwin" @173 NONAME\r
+ "mvwinch" @174 NONAME\r
+ "mvwinchnstr" @175 NONAME\r
+ "mvwinchstr" @176 NONAME\r
+ "mvwinnstr" @177 NONAME\r
+ "mvwinsch" @179 NONAME\r
+ "mvwinsnstr" @180 NONAME\r
+ "mvwinsstr" @181 NONAME\r
+ "mvwinstr" @182 NONAME\r
+ "mvwprintw" @190 NONAME\r
+ "mvwscanw" @191 NONAME\r
+ "mvwvline" @192 NONAME\r
+ "napms" @194 NONAME\r
+ "newpad" @195 NONAME\r
+ "newscr" @502 NONAME\r
+ "newterm" @196 NONAME\r
+ "newwin" @197 NONAME\r
+ "nl" @198 NONAME\r
+ "nocbreak" @199 NONAME\r
+ "nodelay" @200 NONAME\r
+ "noecho" @201 NONAME\r
+ "nonl" @202 NONAME\r
+ "noqiflush" @203 NONAME\r
+ "noraw" @204 NONAME\r
+ "notimeout" @205 NONAME\r
+ "numcodes" @604 NONAME\r
+ "numfnames" @605 NONAME\r
+ "numnames" @603 NONAME\r
+ "ospeed" @663 NONAME\r
+ "overlay" @206 NONAME\r
+ "overwrite" @207 NONAME\r
+ "pair_content" @208 NONAME\r
+ "pechochar" @210 NONAME\r
+ "pnoutrefresh" @212 NONAME\r
+ "prefresh" @213 NONAME\r
+ "printw" @214 NONAME\r
+ "putp" @215 NONAME\r
+ "putwin" @216 NONAME\r
+ "qiflush" @217 NONAME\r
+ "raw" @218 NONAME\r
+ "redrawwin" @219 NONAME\r
+ "refresh" @220 NONAME\r
+ "reset_prog_mode" @222 NONAME\r
+ "reset_shell_mode" @223 NONAME\r
+ "resetty" @221 NONAME\r
+ "resizeterm" @272 NONAME\r
+ "restartterm" @643 NONAME\r
+ "ripoffline" @224 NONAME\r
+ "savetty" @225 NONAME\r
+ "scanw" @226 NONAME\r
+ "scr_dump" @227 NONAME\r
+ "scr_init" @228 NONAME\r
+ "scr_restore" @232 NONAME\r
+ "scr_set" @233 NONAME\r
+ "scrl" @229 NONAME\r
+ "scroll" @230 NONAME\r
+ "scrollok" @231 NONAME\r
+ "set_curterm" @640 NONAME\r
+ "set_term" @236 NONAME\r
+ "setscrreg" @235 NONAME\r
+ "setupterm" @644 NONAME\r
+ "slk_attr" @274 NONAME\r
+ "slk_attr_set" @276 NONAME\r
+ "slk_attroff" @237 NONAME\r
+ "slk_attron" @239 NONAME\r
+ "slk_attrset" @241 NONAME\r
+ "slk_clear" @243 NONAME\r
+ "slk_color" @278 NONAME\r
+ "slk_init" @244 NONAME\r
+ "slk_label" @245 NONAME\r
+ "slk_noutrefresh" @246 NONAME\r
+ "slk_refresh" @247 NONAME\r
+ "slk_restore" @248 NONAME\r
+ "slk_set" @249 NONAME\r
+ "slk_touch" @250 NONAME\r
+ "standend" @253 NONAME\r
+ "standout" @252 NONAME\r
+ "start_color" @254 NONAME\r
+ "stdscr" @500 NONAME\r
+ "strcodes" @608 NONAME\r
+ "strfnames" @609 NONAME\r
+ "strnames" @606 NONAME\r
+ "subpad" @255 NONAME\r
+ "subwin" @256 NONAME\r
+ "syncok" @257 NONAME\r
+ "termattrs" @258 NONAME\r
+ "termname" @259 NONAME\r
+ "tgetent" @645 NONAME\r
+ "tgetflag" @646 NONAME\r
+ "tgetnum" @647 NONAME\r
+ "tgetstr" @648 NONAME\r
+ "tgoto" @649 NONAME\r
+ "tigetflag" @260 NONAME\r
+ "tigetnum" @261 NONAME\r
+ "tigetstr" @262 NONAME\r
+ "timeout" @284 NONAME\r
+ "tparm" @653 NONAME\r
+ "tputs" @655 NONAME\r
+ "trace" @405 NONAME\r
+ "ttytype" @514 NONAME\r
+ "typeahead" @264 NONAME\r
+ "unctrl" @361 NONAME\r
+ "ungetch" @265 NONAME\r
+ "ungetmouse" @357 NONAME\r
+ "untouchwin" @267 NONAME\r
+ "use_default_colors" @285 NONAME\r
+ "use_env" @268 NONAME\r
+ "use_extended_names" @286 NONAME\r
+ "vidattr" @269 NONAME\r
+ "vidputs" @271 NONAME\r
+ "vline" @273 NONAME\r
+ "vw_printw" @287 NONAME\r
+ "vw_scanw" @294 NONAME\r
+ "vwprintw" @275 NONAME\r
+ "vwscanw" @277 NONAME\r
+ "waddch" @279 NONAME\r
+ "waddchnstr" @280 NONAME\r
+ "waddchstr" @281 NONAME\r
+ "waddnstr" @282 NONAME\r
+ "waddstr" @283 NONAME\r
+ "wattr_get" @291 NONAME\r
+ "wattr_off" @293 NONAME\r
+ "wattr_on" @292 NONAME\r
+ "wattr_set" @297 NONAME\r
+ "wattroff" @289 NONAME\r
+ "wattron" @288 NONAME\r
+ "wattrset" @290 NONAME\r
+ "wbkgd" @295 NONAME\r
+ "wbkgdset" @296 NONAME\r
+ "wborder" @299 NONAME\r
+ "wchgat" @301 NONAME\r
+ "wclear" @302 NONAME\r
+ "wclrtobot" @303 NONAME\r
+ "wclrtoeol" @304 NONAME\r
+ "wcolor_set" @298 NONAME\r
+ "wcursyncup" @305 NONAME\r
+ "wdelch" @306 NONAME\r
+ "wdeleteln" @307 NONAME\r
+ "wechochar" @308 NONAME\r
+ "wenclose" @359 NONAME\r
+ "werase" @310 NONAME\r
+ "wgetch" @312 NONAME\r
+ "wgetnstr" @313 NONAME\r
+ "wgetstr" @315 NONAME\r
+ "whline" @318 NONAME\r
+ "winch" @320 NONAME\r
+ "winchnstr" @321 NONAME\r
+ "winchstr" @322 NONAME\r
+ "winnstr" @323 NONAME\r
+ "winsch" @325 NONAME\r
+ "winsdelln" @326 NONAME\r
+ "winsertln" @327 NONAME\r
+ "winsnstr" @328 NONAME\r
+ "winsstr" @329 NONAME\r
+ "winstr" @330 NONAME\r
+ "wmouse_trafo" @300 NONAME\r
+ "wmove" @338 NONAME\r
+ "wnoutrefresh" @339 NONAME\r
+ "wprintw" @340 NONAME\r
+ "wredrawln" @341 NONAME\r
+ "wrefresh" @342 NONAME\r
+ "wresize" @343 NONAME\r
+ "wscanw" @344 NONAME\r
+ "wscrl" @345 NONAME\r
+ "wsetscrreg" @346 NONAME\r
+ "wstandend" @348 NONAME\r
+ "wstandout" @347 NONAME\r
+ "wsyncdown" @349 NONAME\r
+ "wsyncup" @350 NONAME\r
+ "wtimeout" @351 NONAME\r
+ "wtouchln" @352 NONAME\r
+ "wvline" @354 NONAME\r
--- /dev/null
+LIBRARY ncurses2 INITINSTANCE\r
+DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - base library'\r
+EXPORTS\r
+;************\r
+;* curses.h *\r
+;************\r
+\r
+ "stdscr" @500 NONAME ; variable\r
+ "curscr" @501 NONAME ; variable\r
+ "newscr" @502 NONAME ; variable\r
+ "COLORS" @503 NONAME ; variable\r
+ "COLOR_PAIRS" @504 NONAME ; variable\r
+ "color_pairs" @505 NONAME ; variable\r
+ "acs_map" @506 NONAME ; variable\r
+ "LINES" @510 NONAME ; variable\r
+ "COLS" @511 NONAME ; variable\r
+ "TABSIZE" @512 NONAME ; variable\r
+ "ESCDELAY" @513 NONAME ; variable\r
+ "ttytype" @514 NONAME ; variable\r
+ "cur_term" @515 NONAME ; variable\r
+\r
+ "addch" @1 NONAME ; generated\r
+ "addchnstr" @2 NONAME ; generated\r
+ "addchstr" @3 NONAME ; generated\r
+ "addnstr" @4 NONAME ; generated\r
+ "addstr" @5 NONAME ; generated\r
+; "addnwstr" @6 NONAME ; missing\r
+; "addwstr" @7 NONAME ; missing\r
+; "add_wch" @8 NONAME ; missing\r
+; "add_wchnstr" @9 NONAME ; missing\r
+; "add_wchstr" @10 NONAME ; missing\r
+ "attroff" @11 NONAME ; generated\r
+ "attron" @12 NONAME ; generated\r
+ "attrset" @13 NONAME ; generated\r
+ "attr_get" @14 NONAME ; generated\r
+; "attr_off" @15 NONAME ; implemented << NO!!\r
+; "attr_on" @16 NONAME ; implemented << NO!!\r
+ "attr_set" @17 NONAME ; generated\r
+ "baudrate" @18 NONAME ; implemented\r
+ "beep" @19 NONAME ; implemented\r
+ "bkgd" @20 NONAME ; generated\r
+ "bkgdset" @21 NONAME ; generated\r
+; "bkgrndset" @22 NONAME ; missing\r
+; "bkgrnd" @23 NONAME ; missing\r
+ "border" @24 NONAME ; generated\r
+; "border_set" @25 NONAME ; missing\r
+ "box" @26 NONAME ; generated\r
+; "box_set" @27 NONAME ; missing\r
+ "can_change_color" @28 NONAME ; implemented\r
+ "cbreak" @29 NONAME ; implemented\r
+ "chgat" @30 NONAME ; generated\r
+ "clear" @31 NONAME ; generated\r
+ "clearok" @32 NONAME ; implemented\r
+ "clrtobot" @33 NONAME ; generated\r
+ "clrtoeol" @34 NONAME ; generated\r
+ "color_content" @35 NONAME ; implemented\r
+ "COLOR_PAIR" @36 NONAME ; generated\r
+ "copywin" @37 NONAME ; implemented\r
+ "curs_set" @38 NONAME ; implemented\r
+ "def_prog_mode" @39 NONAME ; implemented\r
+ "def_shell_mode" @40 NONAME ; implemented\r
+ "delay_output" @41 NONAME ; implemented\r
+ "delch" @42 NONAME ; generated\r
+ "delscreen" @43 NONAME ; implemented\r
+ "delwin" @44 NONAME ; implemented\r
+ "deleteln" @45 NONAME ; generated\r
+ "derwin" @46 NONAME ; implemented\r
+ "doupdate" @47 NONAME ; implemented\r
+ "dupwin" @48 NONAME ; implemented\r
+ "echo" @49 NONAME ; implemented\r
+ "echochar" @50 NONAME ; generated\r
+; "echo_wchar" @51 NONAME ; missing\r
+ "endwin" @52 NONAME ; implemented\r
+ "erasechar" @53 NONAME ; implemented\r
+; "erase_wchar" @54 NONAME ; missing\r
+ "filter" @55 NONAME ; implemented\r
+ "flash" @56 NONAME ; implemented\r
+ "flushinp" @57 NONAME ; implemented\r
+; "getbkgd" @58 NONAME ; missing\r
+; "getbkgrnd" @59 NONAME ; missing\r
+; "getcchar" @60 NONAME ; missing\r
+ "getch" @61 NONAME ; generated\r
+ "getnstr" @62 NONAME ; generated\r
+; "getn_wstr" @63 NONAME ; missing\r
+ "getstr" @64 NONAME ; generated\r
+; "get_wch" @65 NONAME ; missing\r
+ "getwin" @66 NONAME ; not in XPG4\r
+; "get_wstr" @67 NONAME ; missing\r
+ "halfdelay" @68 NONAME ; implemented\r
+ "has_colors" @69 NONAME ; implemented\r
+ "has_ic" @70 NONAME ; implemented\r
+ "has_il" @71 NONAME ; implemented\r
+ "hline" @72 NONAME ; generated\r
+; "hline_set" @73 NONAME ; missing\r
+ "idcok" @74 NONAME ; implemented\r
+ "idlok" @75 NONAME ; implemented\r
+ "immedok" @76 NONAME ; implemented\r
+ "inch" @77 NONAME ; generated\r
+ "inchnstr" @78 NONAME ; generated\r
+ "inchstr" @79 NONAME ; generated\r
+ "initscr" @80 NONAME ; implemented\r
+ "init_color" @81 NONAME ; implemented\r
+ "init_pair" @82 NONAME ; implemented\r
+ "innstr" @83 NONAME ; generated\r
+; "innwstr" @84 NONAME ; missing\r
+ "insch" @85 NONAME ; generated\r
+ "insdelln" @86 NONAME ; generated\r
+ "insertln" @87 NONAME ; generated\r
+ "insnstr" @88 NONAME ; generated\r
+ "insstr" @89 NONAME ; generated\r
+ "instr" @90 NONAME ; generated\r
+; "ins_nwstr" @91 NONAME ; missing\r
+; "ins_wch" @92 NONAME ; missing\r
+; "ins_wstr" @93 NONAME ; missing\r
+ "intrflush" @94 NONAME ; implemented\r
+; "inwstr" @95 NONAME ; missing\r
+; "in_wch" @96 NONAME ; missing\r
+; "in_wchstr" @97 NONAME ; missing\r
+; "in_wchntr" @98 NONAME ; missing\r
+ "isendwin" @99 NONAME ; implemented\r
+ "is_linetouched" @100 NONAME ; implemented\r
+ "is_wintouched" @101 NONAME ; implemented\r
+ "keyname" @102 NONAME ; implemented\r
+; "key_name" @103 NONAME ; missing\r
+ "keypad" @104 NONAME ; implemented\r
+ "killchar" @105 NONAME ; implemented\r
+; "killwchar" @106 NONAME ; missing\r
+ "leaveok" @107 NONAME ; implemented\r
+ "longname" @108 NONAME ; implemented\r
+ "meta" @109 NONAME ; implemented\r
+ "move" @110 NONAME ; generated\r
+ "mvaddch" @111 NONAME ; generated\r
+ "mvaddchnstr" @112 NONAME ; generated\r
+ "mvaddchstr" @113 NONAME ; generated\r
+ "mvaddnstr" @114 NONAME ; generated\r
+ "mvaddstr" @115 NONAME ; generated\r
+; "mvaddnwstr" @116 NONAME ; missing\r
+; "mvaddwstr" @117 NONAME ; missing\r
+; "mvadd_wch" @118 NONAME ; missing\r
+; "mvadd_wchnstr" @119 NONAME ; missing\r
+; "mvadd_wchstr" @120 NONAME ; missing\r
+ "mvchgat" @121 NONAME ; generated\r
+ "mvcur" @122 NONAME ; implemented\r
+ "mvdelch" @123 NONAME ; generated\r
+ "mvderwin" @124 NONAME ; implemented\r
+ "mvgetch" @125 NONAME ; generated\r
+ "mvgetnstr" @126 NONAME ; generated\r
+; "mvgetn_wstr" @127 NONAME ; missing\r
+ "mvgetstr" @128 NONAME ; generated\r
+; "mvget_wch" @129 NONAME ; missing\r
+; "mvget_wstr" @130 NONAME ; missing\r
+ "mvhline" @131 NONAME ; generated\r
+; "mvhline_set" @132 NONAME ; missing\r
+ "mvinch" @133 NONAME ; generated\r
+ "mvinchnstr" @134 NONAME ; generated\r
+ "mvinchstr" @135 NONAME ; generated\r
+ "mvinnstr" @136 NONAME ; generated\r
+; "mvinnwstr" @137 NONAME ; missing\r
+ "mvinsch" @138 NONAME ; generated\r
+ "mvinsnstr" @139 NONAME ; generated\r
+ "mvinsstr" @140 NONAME ; generated\r
+ "mvinstr" @141 NONAME ; generated\r
+; "mvins_nwstr" @142 NONAME ; missing\r
+; "mvins_wch" @143 NONAME ; missing\r
+; "mvins_wstr" @144 NONAME ; missing\r
+; "mvinwstr" @145 NONAME ; missing\r
+; "mvin_wch" @146 NONAME ; missing\r
+; "mvin_wchstr" @147 NONAME ; missing\r
+; "mvin_wchntr" @148 NONAME ; missing\r
+ "mvprintw" @149 NONAME ; implemented\r
+ "mvscanw" @150 NONAME ; implemented\r
+ "mvvline" @151 NONAME ; generated\r
+; "mvvline_set" @152 NONAME ; missing\r
+ "mvwaddch" @153 NONAME ; generated\r
+ "mvwaddchnstr" @154 NONAME ; generated\r
+ "mvwaddchstr" @155 NONAME ; generated\r
+ "mvwaddnstr" @156 NONAME ; generated\r
+ "mvwaddstr" @157 NONAME ; generated\r
+; "mvwaddnwstr" @158 NONAME ; missing\r
+; "mvwaddwstr" @159 NONAME ; missing\r
+; "mvwadd_wch" @160 NONAME ; missing\r
+; "mvwadd_wchnstr" @161 NONAME ; missing\r
+; "mvwadd_wchstr" @162 NONAME ; missing\r
+ "mvwchgat" @163 NONAME ; generated\r
+ "mvwdelch" @164 NONAME ; generated\r
+ "mvwgetch" @165 NONAME ; generated\r
+ "mvwgetnstr" @166 NONAME ; generated\r
+; "mvwgetn_wstr" @167 NONAME ; missing\r
+ "mvwgetstr" @168 NONAME ; generated\r
+; "mvwget_wch" @169 NONAME ; missing\r
+; "mvwget_wstr" @170 NONAME ; missing\r
+ "mvwhline" @171 NONAME ; generated\r
+; "mvwhline_set" @172 NONAME ; missing\r
+ "mvwin" @173 NONAME ; implemented\r
+ "mvwinch" @174 NONAME ; generated\r
+ "mvwinchnstr" @175 NONAME ; generated\r
+ "mvwinchstr" @176 NONAME ; generated\r
+ "mvwinnstr" @177 NONAME ; generated\r
+; "mvwinnwstr" @178 NONAME ; missing\r
+ "mvwinsch" @179 NONAME ; generated\r
+ "mvwinsnstr" @180 NONAME ; generated\r
+ "mvwinsstr" @181 NONAME ; generated\r
+ "mvwinstr" @182 NONAME ; generated\r
+; "mvwins_nwstr" @183 NONAME ; missing\r
+; "mvwins_wch" @184 NONAME ; missing\r
+; "mvwins_wstr" @185 NONAME ; missing\r
+; "mvwinwstr" @186 NONAME ; missing\r
+; "mvwin_wch" @187 NONAME ; missing\r
+; "mvwin_wchnstr" @188 NONAME ; missing\r
+; "mvwin_wchstr" @189 NONAME ; missing\r
+ "mvwprintw" @190 NONAME ; implemented\r
+ "mvwscanw" @191 NONAME ; implemented\r
+ "mvwvline" @192 NONAME ; generated\r
+; "mvwvline_set" @193 NONAME ; missing\r
+ "napms" @194 NONAME ; implemented\r
+ "newpad" @195 NONAME ; implemented\r
+ "newterm" @196 NONAME ; implemented\r
+ "newwin" @197 NONAME ; implemented\r
+ "nl" @198 NONAME ; implemented\r
+ "nocbreak" @199 NONAME ; implemented\r
+ "nodelay" @200 NONAME ; implemented\r
+ "noecho" @201 NONAME ; implemented\r
+ "nonl" @202 NONAME ; implemented\r
+ "noqiflush" @203 NONAME ; implemented\r
+ "noraw" @204 NONAME ; implemented\r
+ "notimeout" @205 NONAME ; implemented\r
+ "overlay" @206 NONAME ; implemented\r
+ "overwrite" @207 NONAME ; implemented\r
+ "pair_content" @208 NONAME ; implemented\r
+ "PAIR_NUMBER" @209 NONAME ; generated\r
+ "pechochar" @210 NONAME ; implemented\r
+; "pecho_wchar" @211 NONAME ; missing\r
+ "pnoutrefresh" @212 NONAME ; implemented\r
+ "prefresh" @213 NONAME ; implemented\r
+ "printw" @214 NONAME ; implemented\r
+ "putp" @215 NONAME ; implemented\r
+ "putwin" @216 NONAME ; implemented\r
+ "qiflush" @217 NONAME ; implemented\r
+ "raw" @218 NONAME ; implemented\r
+ "redrawwin" @219 NONAME ; generated\r
+ "refresh" @220 NONAME ; generated\r
+ "resetty" @221 NONAME ; implemented\r
+ "reset_prog_mode" @222 NONAME ; implemented\r
+ "reset_shell_mode" @223 NONAME ; implemented\r
+ "ripoffline" @224 NONAME ; implemented\r
+ "savetty" @225 NONAME ; implemented\r
+ "scanw" @226 NONAME ; implemented\r
+ "scr_dump" @227 NONAME ; implemented\r
+ "scr_init" @228 NONAME ; implemented\r
+ "scrl" @229 NONAME ; generated\r
+ "scroll" @230 NONAME ; generated\r
+ "scrollok" @231 NONAME ; implemented\r
+ "scr_restore" @232 NONAME ; implemented\r
+ "scr_set" @233 NONAME ; implemented\r
+; "setcchar" @234 NONAME ; missing\r
+ "setscrreg" @235 NONAME ; generated\r
+ "set_term" @236 NONAME ; implemented\r
+ "slk_attroff" @237 NONAME ; implemented\r
+; "slk_attr_off" @238 NONAME ; missing\r
+ "slk_attron" @239 NONAME ; implemented\r
+; "slk_attr_on" @240 NONAME ; missing\r
+ "slk_attrset" @241 NONAME ; implemented\r
+; "slk_attr_set" @242 NONAME ; missing\r
+ "slk_clear" @243 NONAME ; implemented\r
+ "slk_init" @244 NONAME ; implemented\r
+ "slk_label" @245 NONAME ; implemented\r
+ "slk_noutrefresh" @246 NONAME ; implemented\r
+ "slk_refresh" @247 NONAME ; implemented\r
+ "slk_restore" @248 NONAME ; implemented\r
+ "slk_set" @249 NONAME ; implemented\r
+ "slk_touch" @250 NONAME ; implemented\r
+; "slk_wset" @251 NONAME ; missing\r
+ "standout" @252 NONAME ; generated\r
+ "standend" @253 NONAME ; generated\r
+ "start_color" @254 NONAME ; implemented\r
+ "subpad" @255 NONAME ; implemented\r
+ "subwin" @256 NONAME ; implemented\r
+ "syncok" @257 NONAME ; implemented\r
+ "termattrs" @258 NONAME ; implemented\r
+ "termname" @259 NONAME ; implemented\r
+ "tigetflag" @260 NONAME ; implemented\r
+ "tigetnum" @261 NONAME ; implemented\r
+ "tigetstr" @262 NONAME ; implemented\r
+; "timeout" @263 NONAME ; implemented << NO!!\r
+ "typeahead" @264 NONAME ; implemented\r
+ "ungetch" @265 NONAME ; implemented\r
+; "unget_wch" @266 NONAME ; missing\r
+ "untouchwin" @267 NONAME ; generated\r
+ "use_env" @268 NONAME ; implemented\r
+ "vidattr" @269 NONAME ; implemented\r
+; "vid_attr" @270 NONAME ; missing\r
+ "vidputs" @271 NONAME ; implemented\r
+; "vid_puts" @272 NONAME ; missing\r
+ "vline" @273 NONAME ; generated\r
+; "vline_set" @274 NONAME ; missing\r
+ "vwprintw" @275 NONAME ; implemented\r
+; "vw_printw" @276 NONAME ; implemented << NO!!\r
+ "vwscanw" @277 NONAME ; implemented\r
+; "vw_scanw" @278 NONAME ; implemented << NO!!\r
+ "waddch" @279 NONAME ; implemented\r
+ "waddchnstr" @280 NONAME ; implemented\r
+ "waddchstr" @281 NONAME ; generated\r
+ "waddnstr" @282 NONAME ; implemented\r
+ "waddstr" @283 NONAME ; generated\r
+; "waddwstr" @284 NONAME ; missing\r
+; "wadd_wch" @285 NONAME ; missing\r
+; "wadd_wchnstr" @286 NONAME ; missing\r
+; "wadd_wchstr" @287 NONAME ; missing\r
+ "wattron" @288 NONAME ; generated\r
+ "wattroff" @289 NONAME ; generated\r
+ "wattrset" @290 NONAME ; generated\r
+ "wattr_get" @291 NONAME ; generated\r
+ "wattr_on" @292 NONAME ; implemented\r
+ "wattr_off" @293 NONAME ; implemented\r
+; "wattr_set" @294 NONAME ; implemented << NO!!\r
+ "wbkgd" @295 NONAME ; implemented\r
+ "wbkgdset" @296 NONAME ; generated\r
+; "wbkgrndset" @297 NONAME ; missing\r
+; "wbkgrnd" @298 NONAME ; missing\r
+ "wborder" @299 NONAME ; implemented\r
+; "wborder_set" @300 NONAME ; missing\r
+ "wchgat" @301 NONAME ; implemented\r
+ "wclear" @302 NONAME ; implemented\r
+ "wclrtobot" @303 NONAME ; implemented\r
+ "wclrtoeol" @304 NONAME ; implemented\r
+ "wcursyncup" @305 NONAME ; implemented\r
+ "wdelch" @306 NONAME ; implemented\r
+ "wdeleteln" @307 NONAME ; generated\r
+ "wechochar" @308 NONAME ; implemented\r
+; "wecho_wchar" @309 NONAME ; missing\r
+ "werase" @310 NONAME ; implemented\r
+; "wgetbkgrnd" @311 NONAME ; missing\r
+ "wgetch" @312 NONAME ; implemented\r
+ "wgetnstr" @313 NONAME ; implemented\r
+; "wgetn_wstr" @314 NONAME ; missing\r
+ "wgetstr" @315 NONAME ; generated\r
+; "wget_wch" @316 NONAME ; missing\r
+; "wget_wstr" @317 NONAME ; missing\r
+ "whline" @318 NONAME ; implemented\r
+; "whline_set" @319 NONAME ; missing\r
+ "winch" @320 NONAME ; generated\r
+ "winchnstr" @321 NONAME ; implemented\r
+ "winchstr" @322 NONAME ; generated\r
+ "winnstr" @323 NONAME ; implemented\r
+; "winnwstr" @324 NONAME ; missing\r
+ "winsch" @325 NONAME ; implemented\r
+ "winsdelln" @326 NONAME ; implemented\r
+ "winsertln" @327 NONAME ; generated\r
+ "winsnstr" @328 NONAME ; implemented\r
+ "winsstr" @329 NONAME ; generated\r
+ "winstr" @330 NONAME ; generated\r
+; "wins_nwstr" @331 NONAME ; missing\r
+; "wins_wch" @332 NONAME ; missing\r
+; "wins_wstr" @333 NONAME ; missing\r
+; "winwstr" @334 NONAME ; missing\r
+; "win_wch" @335 NONAME ; missing\r
+; "win_wchnstr" @336 NONAME ; missing\r
+; "win_wchstr" @337 NONAME ; missing\r
+ "wmove" @338 NONAME ; implemented\r
+ "wnoutrefresh" @339 NONAME ; implemented\r
+ "wprintw" @340 NONAME ; implemented\r
+ "wredrawln" @341 NONAME ; implemented\r
+ "wrefresh" @342 NONAME ; implemented\r
+ "wresize" @343 NONAME ; implemented\r
+ "wscanw" @344 NONAME ; implemented\r
+ "wscrl" @345 NONAME ; implemented\r
+ "wsetscrreg" @346 NONAME ; implemented\r
+ "wstandout" @347 NONAME ; generated\r
+ "wstandend" @348 NONAME ; generated\r
+ "wsyncdown" @349 NONAME ; implemented\r
+ "wsyncup" @350 NONAME ; implemented\r
+ "wtimeout" @351 NONAME ; implemented\r
+ "wtouchln" @352 NONAME ; implemented\r
+; "wunctrl" @353 NONAME ; missing\r
+ "wvline" @354 NONAME ; implemented\r
+; "wvline_set" @355 NONAME ; missing\r
+\r
+ "getmouse" @356 NONAME\r
+ "ungetmouse" @357 NONAME\r
+ "mousemask" @358 NONAME\r
+ "wenclose" @359 NONAME\r
+ "mouseinterval" @360 NONAME\r
+\r
+; from unctrl.h\r
+ "unctrl" @361 NONAME\r
+\r
+; publics for tracing\r
+ "_tracef" @400 NONAME\r
+ "_tracedump" @401 NONAME\r
+ "_traceattr" @402 NONAME\r
+ "_tracechar" @403 NONAME\r
+ "_tracemouse" @404 NONAME\r
+ "trace" @405 NONAME\r
+\r
+;**********\r
+;* term.h *\r
+;**********\r
+ "boolnames" @600 NONAME ; variable\r
+ "boolcodes" @601 NONAME ; variable\r
+ "boolfnames" @602 NONAME ; variable\r
+ "numnames" @603 NONAME ; variable\r
+ "numcodes" @604 NONAME ; variable\r
+ "numfnames" @605 NONAME ; variable\r
+ "strnames" @606 NONAME ; variable\r
+ "strcodes" @608 NONAME ; variable\r
+ "strfnames" @609 NONAME ; variable\r
+\r
+; internals\r
+ "_nc_read_entry" @620 NONAME\r
+ "_nc_read_file_entry" @621 NONAME\r
+ "_nc_first_name" @622 NONAME\r
+ "_nc_name_match" @623 NONAME\r
+ "_nc_read_termcap_entry" @624 NONAME\r
+ "_nc_fallback" @625 NONAME\r
+\r
+; entry points\r
+ "set_curterm" @640 NONAME\r
+ "del_curterm" @641 NONAME\r
+\r
+; entry points\r
+; "putp" @642 NONAME ; already defined\r
+ "restartterm" @643 NONAME\r
+ "setupterm" @644 NONAME\r
+ "tgetent" @645 NONAME\r
+ "tgetflag" @646 NONAME\r
+ "tgetnum" @647 NONAME\r
+ "tgetstr" @648 NONAME\r
+ "tgoto" @649 NONAME\r
+; "tigetflag" @650 NONAME ; already defined\r
+; "tigetnum" @651 NONAME ; already defined\r
+; "tigetstr" @652 NONAME ; already defined\r
+ "tparm" @653 NONAME\r
+ "tparam" @654 NONAME\r
+ "tputs" @655 NONAME\r
+\r
+;*************\r
+;* termcap.h *\r
+;*************\r
+; the functions are already defined in term.h\r
+ "PC" @660 NONAME\r
+ "UP" @661 NONAME\r
+ "BC" @662 NONAME\r
+ "ospeed" @663 NONAME\r
+\r
+;****************\r
+;* term_entry.h *\r
+;****************\r
+ "_nc_head" @700 NONAME\r
+ "_nc_tail" @701 NONAME\r
+\r
+; alloc_entry.c: elementary allocation code\r
+ "_nc_init_entry" @702 NONAME\r
+ "_nc_save_str" @703 NONAME\r
+ "_nc_merge_entry" @704 NONAME\r
+ "_nc_wrap_entry" @705 NONAME\r
+\r
+; parse_entry.c: entry-parsing code\r
+ "_nc_parse_entry" @706 NONAME\r
+ "_nc_capcmp" @707 NONAME\r
+\r
+; write_entry.c: writing an entry to the file system\r
+ "_nc_write_entry" @708 NONAME\r
+\r
+; comp_parse.c: entry list handling\r
+ "_nc_read_entry_source" @709 NONAME\r
+ "_nc_entry_match" @710 NONAME\r
+ "_nc_resolve_uses" @711 NONAME\r
+ "_nc_free_entries" @712 NONAME\r
+\r
+;*********\r
+;* tic.h *\r
+;*********\r
+; "_nc_tracing" @800 NONAME ; defined below\r
+; "_nc_tracef" @801 NONAME ; missing\r
+; "_nc_visbuf" @802 NONAME ; defined below\r
+\r
+ "_nc_curr_token" @803 NONAME\r
+\r
+ "_nc_info_hash_table" @804 NONAME\r
+ "_nc_cap_hash_table" @805 NONAME\r
+\r
+ "_nc_capalias_table" @806 NONAME\r
+ "_nc_infoalias_table" @807 NONAME\r
+ "_nc_get_table" @808 NONAME\r
+\r
+; comp_hash.c: name lookup\r
+ "_nc_find_entry" @809 NONAME\r
+ "_nc_find_type_entry" @810 NONAME\r
+\r
+; comp_scan.c: lexical analysis\r
+ "_nc_get_token" @811 NONAME\r
+ "_nc_push_token" @812 NONAME\r
+ "_nc_reset_input" @813 NONAME\r
+ "_nc_panic_mode" @814 NONAME\r
+ "_nc_curr_line" @815 NONAME\r
+ "_nc_curr_col" @816 NONAME\r
+ "_nc_curr_file_pos" @817 NONAME\r
+ "_nc_comment_start" @818 NONAME\r
+ "_nc_comment_end" @819 NONAME\r
+ "_nc_syntax" @820 NONAME\r
+ "_nc_start_line" @821 NONAME\r
+\r
+; comp_error.c: warning & abort messages\r
+ "_nc_set_source" @822 NONAME\r
+ "_nc_get_type" @823 NONAME\r
+ "_nc_set_type" @824 NONAME\r
+ "_nc_syserr_abort" @825 NONAME\r
+ "_nc_err_abort" @826 NONAME\r
+ "_nc_warning" @827 NONAME\r
+ "_nc_suppress_warnings" @828 NONAME\r
+\r
+; captoinfo.c: capability conversion\r
+ "_nc_captoinfo" @829 NONAME\r
+ "_nc_infotocap" @830 NONAME\r
+\r
+; comp_main.c: compiler main\r
+; "_nc_progname" @831 NONAME ; no need to export it\r
+\r
+\r
+; *****************\r
+; NCurses internals -- just for progs/*.exe and the library itself.\r
+; *****************\r
+\r
+; For broken linkers\r
+; "_nc_screen" @1000 NONAME\r
+; "_nc_alloc_screen" @1001 NONAME\r
+; "_nc_set_screen" @1002 NONAME\r
+\r
+; For not so broken linkers\r
+ "SP" @1003 NONAME\r
+\r
+; Who knows what this is for\r
+ "_slk_init" @1004 NONAME\r
+ "slk_initialize" @1005 NONAME\r
+\r
+; Tracing -- all functions used internally\r
+ "_nc_tracing" @1010 NONAME\r
+ "_nc_tputs_trace" @1011 NONAME\r
+ "_nc_visbuf" @1012 NONAME\r
+\r
+; lib_acs.c\r
+ "init_acs" @1013 NONAME\r
+\r
+; lib_mvcur.c\r
+ "_nc_mvcur_init" @1014 NONAME\r
+ "_nc_mvcur_wrap" @1015 NONAME\r
+ "_nc_mvcur_scrolln" @1016 NONAME\r
+\r
+; lib_mouse.c\r
+ "_nc_mouse_init" @1017 NONAME\r
+ "_nc_mouse_event" @1018 NONAME\r
+ "_nc_mouse_inline" @1019 NONAME\r
+ "_nc_mouse_parse" @1020 NONAME\r
+ "_nc_mouse_wrap" @1021 NONAME\r
+ "_nc_mouse_resume" @1022 NONAME\r
+ "_nc_max_click_interval" @1023 NONAME\r
+\r
+; elsewhere ...\r
+ "_nc_keypad" @1024 NONAME\r
+ "_nc_makenew" @1025 NONAME\r
+ "_nc_outch" @1026 NONAME\r
+ "_nc_render" @1027 NONAME\r
+ "_nc_waddch_nosync" @1028 NONAME\r
+ "_nc_scroll_optimize" @1029 NONAME\r
+ "_nc_scroll_window" @1030 NONAME\r
+ "_nc_setupscreen" @1031 NONAME\r
+ "_nc_backspace" @1032 NONAME\r
+ "_nc_outstr" @1033 NONAME\r
+ "_nc_signal_handler" @1034 NONAME\r
+ "_nc_synchook" @1035 NONAME\r
+ "_nc_timed_wait" @1036 NONAME\r
+ "_nc_do_color" @1037 NONAME\r
--- /dev/null
+LIBRARY panel5 INITINSTANCE TERMINSTANCE\r
+DESCRIPTION "NCurses-5-0-990828, module panel"\r
+CODE LOADONCALL\r
+DATA LOADONCALL NONSHARED MULTIPLE\r
+EXPORTS\r
+ "_nc_calculate_obscure" @16 NONAME\r
+ "_nc_free_obscure" @17 NONAME\r
+ "_nc_override" @18 NONAME\r
+ "_nc_panel_is_linked" @19 NONAME\r
+ "_nc_panel_link_bottom" @20 NONAME\r
+ "bottom_panel" @7 NONAME\r
+ "del_panel" @5 NONAME\r
+ "hide_panel" @3 NONAME\r
+ "move_panel" @13 NONAME\r
+ "new_panel" @8 NONAME\r
+ "panel_above" @9 NONAME\r
+ "panel_below" @10 NONAME\r
+ "panel_hidden" @15 NONAME\r
+ "panel_userptr" @12 NONAME\r
+ "panel_window" @1 NONAME\r
+ "replace_panel" @14 NONAME\r
+ "set_panel_userptr" @11 NONAME\r
+ "show_panel" @4 NONAME\r
+ "top_panel" @6 NONAME\r
+ "update_panels" @2 NONAME\r
--- /dev/null
+LIBRARY panel2 INITINSTANCE\r
+DESCRIPTION 'NCurses 1.9.9e-1 for OS/2 - panel library'\r
+EXPORTS\r
+ "panel_window" @1\r
+ "update_panels" @2\r
+ "hide_panel" @3\r
+ "show_panel" @4\r
+ "del_panel" @5\r
+ "top_panel" @6\r
+ "bottom_panel" @7\r
+ "new_panel" @8\r
+ "panel_above" @9\r
+ "panel_below" @10\r
+ "set_panel_userptr" @11\r
+ "panel_userptr" @12\r
+ "move_panel" @13\r
+ "replace_panel" @14\r
+ "panel_hidden" @15\r
#
# Author: Thomas E. Dickey <dickey@clark.net> 1996
#
-# $Id: run_tic.sh,v 1.9 1998/02/11 12:13:50 tom Exp $
+# $Id: run_tic.sh,v 1.10 1998/05/31 00:29:34 mooney Exp $
# This script is used to install terminfo.src using tic. We use a script
# because the path checking is too awkward to do in a makefile.
#
*) PATH=../progs:$IP$bindir:$PATH ;;
esac
export PATH
+
+#
+# set another env var that doesn't get reset when `shlib' runs, so `shlib' uses
+# the PATH we just set.
+#
+NEWPATH=$PATH
+export NEWPATH
+PROG_BIN_DIR=$IP$bindir
+export PROG_BIN_DIR
+
TERMINFO=$IP$ticdir ; export TERMINFO
umask 022
#
# Author: Thomas E. Dickey <dickey@clark.net> 1996
#
-# $Id: shlib,v 1.4 1998/02/11 12:13:50 tom Exp $
+# $Id: shlib,v 1.5 1998/05/31 00:29:38 mooney Exp $
# Use this script as a wrapper when running executables linked to shared
# libraries on systems that use the $LD_LIBRARY_PATH variable and don't embed
# the soname's path within the linked executable (such as IRIX), e.g,
# Using a conventional link, with -L and -l options on Linux results in a
# statically linked executable, which we don't want at all.
#
+
+#
+# Make sure that we use the PATH that was set in run_tic.sh
+#
+if test X$NEWPATH != X ; then
+ PATH=$NEWPATH
+ export PATH
+fi
+
q=""
for p in lib ../lib
do
######## TERMINAL TYPE DESCRIPTIONS SOURCE FILE
#
-# Version 10.2.0
+# This version of terminfo.src is distributed with ncurses.
+#
+# Version 10.2.1
+# $Date: 1999/10/24 00:28:48 $
# terminfo syntax
#
# Eric S. Raymond (current maintainer)
# John Kunze, Berkeley
# Craig Leres, Berkeley
#
-# Please e-mail changes to terminfo@ccil.org. The old termcap@berkeley.edu
-# address is no longer valid.
+# Please e-mail changes to terminfo@ccil.org; the old termcap@berkeley.edu
+# address is no longer valid. The latest version can always be found at
+# <http://earthspace.net/terminfo>.
#
# PURPOSE OF THIS FILE:
#
# FILE ORGANIZATION:
#
# Comments in this file begin with # - they cannot appear in the middle
-# of a terminfo/termcap entry. Individual capabilities are commented out by
+# of a terminfo/termcap entry (this feature had to be sacrificed in order
+# to allow standard terminfo and termcap syntax to be generated cleanly from
+# the master format). Individual capabilities are commented out by
# placing a period between the colon and the capability name.
#
# The file is divided up into major sections (headed by lines beginning with
# to see a listing of section headings. The intent of the divisions is
# (a) to make it easier to find things, and (b) to order the database so
# that important and frequently-encountered terminal types are near the
-# front (so that you'll get reasonable search efficiency even if you don't
-# use reorder). Minor sections usually correspond to manufacturers or
-# standard terminal classes. Parenthesized words following manufacturer
-# names are type prefixes or product line names used by that manufacturers.
+# front (so that you'll get reasonable search efficiency from a linear
+# search of the termcap form even if you don't use reorder). Minor sections
+# usually correspond to manufacturers or standard terminal classes.
+# Parenthesized words following manufacturer names are type prefixes or
+# product line names used by that manufacturers.
#
# HOW TO READ THE ENTRIES:
#
# only support one attribute without magic-cookie lossage.
# Their base entry is usually paired with another that
# uses magic cookies to support multiple attributes.
-# -na No arrow keys - termcap ignores arrow keys which are
-# actually there on the terminal, so the user can use
-# the arrow keys locally.
# -nam No auto-margin - suppress <am> capability
# -nl No labels - suppress soft labels
# -ns No status line - suppress status line
# -vb Use visible bell (<flash>) rather than <bel>.
# -w Wide - in 132 column mode.
# If a name has multiple suffixes and one is a line height, that one should
-# go first. Thus `aaa-30-s-rv' is recommended over `aaa-s-rv'.
+# go first. Thus `aaa-30-s-rv' is recommended over `aaa-s-rv-30'.
#
# Entries with embedded plus signs are designed to be included through use/tc
# capabilities, not used as standalone entries.
#
# All the entries in this file have been edited to assume that the tabset
# files directory is /usr/share/tabset, in conformance with the File Hierarchy
-# Standard for Linux and free BSD systems. Some vendors (notably Sun) use
-# /usr/lib/tabset or (more recently) /usr/share/lib/tabset.
+# Standard for Linux and open-source BSD systems. Some vendors (notably Sun)
+# use /usr/lib/tabset or (more recently) /usr/share/lib/tabset.
#
-# No curses package we know of uses these files. If their location is an
-# issue, you will have to hand-patch the file locations before compiling
+# No curses package we know of actually uses these files. If their location
+# is an issue, you will have to hand-patch the file locations before compiling
# this file.
#
-# REQUEST FOR CONTACT INFORMATION AND HISTORICAL MATERIAL:
+# REQUEST FOR CONTACT INFORMATION AND HISTORICAL MATERIAL
#
# As the ANSI/ECMA-48 standard and variants take firmer hold, and as
# character-cell terminals are increasingly replaced by X displays, much of
# There are no guarantees anywhere. Svaha!
#
-######## STANDARD AND SPECIAL TYPES
+######## ANSI, UNIX CONSOLE, AND SPECIAL TYPES
#
# This section describes terminal classes and maker brands that are still
# quite common.
use=klone+acs,
# KOI8-R (RFC1489) acs (alternate character set)
-# From: QingLong <qinglong@Bolizm.ihep.su>, 24 Feb 1996.
+# From: Qing Long <qinglong@Bolizm.ihep.su>, 24 Feb 1996.
klone+koi8acs|alternate character set for ansi.sys displays with KOI8 charset,
acsc=+\020\,\021-\036.^_0\215`\004a\237f\234g\232h\222i\220j\205k\203l\202m\204n\212o\213p\216q\0r\217s\214t\206u\207v\210w\211x\201y\230z\231{\267|\274}L~\225,
rmacs=\E[10m, smacs=\E[11m,
# not to require any -- even at 9600 bps. If you encounter problems,
# try including the padding specifications.
#
-# Note: the "as" and "ae" specifications are not implemented here, for
+# Note: the :as: and :ae: specifications are not implemented here, for
# the available termcap documentation does not make clear WHICH alternate
# character set to specify. ANSI 3.64 seems to make allowances for several.
# Please make the appropriate adjustments to fit your needs -- that is
u9=\E[c,
use=ecma+color, use=klone+sgr, use=ansi-m,
-#
-# ANSI.SYS entries
+#### DOS ANSI.SYS variants
#
# This completely describes the sequences specified in the DOS 2.1 ANSI.SYS
# documentation (except for the keyboard key reassignment feature, which
#### ANSI console types
#
-#### BeOS entry for Terminal program. Seems to be almost ANSI
-#
+#### BeOS
+#
+# BeOS entry for Terminal program Seems to be almost ANSI
beterm|BeOS Terminal,
am, eo, mir, msgr, xenl, xon,
- colors#8, cols#80, it#8, lines#25, pairs#64,
- bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=^M,
+ colors#8, cols#80, it#8, lines#25, ncv#5, pairs#64,
+ bel=^G, bold=\E[1m, clear=\E[H\E[J, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
- dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
- el=\E[K, flash=\E[?5h\E[?5l$<200/>, home=\E[H,
- hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
- il=\E[%p1%dL, il1=\E[L, ind=^J, invis=\E[8m, kb2=\E[G,
- kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kend=\E[4~, kf1=\E[11~, kf10=\E[20~, kf11=\E[21~,
- kf12=\E[22~, kf2=\E[12~, kf3=\E[13~, kf4=\E[14~,
- kf5=\E[15~, kf6=\E[16~, kf7=\E[17~, kf8=\E[18~, kf9=\E[19~,
- khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z,
- nel=^M^J, op=\E[m, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l,
- rmso=\E[m, rmul=\E[24m, rs1=\Ec, sc=\E7, setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm, setb=\E[%p1%'('%+%cm,
- setf=\E[%p1%{30}%+%cm, sgr0=\E[0;10m, smir=\E[4h,
- smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%p1%d;%p2%dR,
- u7=\E[6n, u8=\E[?6c, u9=\E[c, vpa=\E[%i%p1%dd,
+ dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
+ home=\E[H, hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@,
+ ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[3~, kend=\E[4~, kf1=\E[11~, kf10=\E[20~,
+ kf11=\E[21~, kf12=\E[22~, kf2=\E[12~, kf3=\E[13~,
+ kf4=\E[14~, kf5=\E[15~, kf6=\E[16~, kf7=\E[17~, kf8=\E[18~,
+ kf9=\E[19~, khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
+ kspd=^Z, nel=^M^J, op=\E[m, rc=\E8, rev=\E[7m, ri=\EM,
+ rmir=\E[4l, rmso=\E[m, rmul=\E[24m, rs1=\Ec, sc=\E7,
+ setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ setb=\E[%p1%{40}%+%cm, setf=\E[%p1%{30}%+%cm,
+ sgr0=\E[0;10m, smir=\E[4h, smso=\E[7m, smul=\E[4m,
+ u6=\E[%i%p1%d;%p2%dR, u7=\E[6n, vpa=\E[%i%p1%dd,
-# This entry is good for the 1.2.13 version of the Linux console driver.
+#### Linux consoles
#
-# Note: there are numerous broken linux entries out there, which didn't screw
-# up BSD termcap but hose ncurses's smarter cursor-movement optimization.
-# One common pathology is an incorrect tab length of 4.
+
+# This entry is good for the 1.2.13 or later version of the Linux console.
#
# ***************************************************************************
# * *
# string F26 ="\033[Z"
# * *
# * This has to use a key slot which is unfortunate (any unused one will *
-# # do, F26 is the higher-numbered one). The change ought to be built *
+# * do, F26 is the higher-numbered one). The change ought to be built *
# * into the kernel tables. *
# * *
# ***************************************************************************
# 1.9.9. All linux kernels since 1.2.13 (at least) set the screen size
# themselves; this entry assumes that capability.
#
+# The 2.2.x kernels add a private mode that sets the cursor type; use that to
+# get a block cursor for cvvis.
+# reported by Frank Heckenbach <frank@g-n-u.de>.
linux|linux console,
am, bce, eo, mir, msgr, xenl, xon,
- it#8, ncv@,
+ it#8, ncv#2,
acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
- bel=^G, civis=\E[?25l, clear=\E[H\E[J, cnorm=\E[?25h,
- cr=^M, csr=\E[%i%p1%d;%p2%dr, cub1=^H, cud1=^J, cuf1=\E[C,
- cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dch=\E[%p1%dP,
- dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M,
- ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
- flash=\E[?5h\E[?5l$<200/>, home=\E[H, hpa=\E[%i%p1%dG,
- ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL,
- il1=\E[L, ind=^J, kb2=\E[G, kbs=\177, kcbt=\E[Z, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[3~,
- kend=\E[4~, kf1=\E[[A, kf10=\E[21~, kf11=\E[23~,
- kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
- kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
- kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D, kf5=\E[[E,
- kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ bel=^G, civis=\E[?25l\E[?1c, clear=\E[H\E[J,
+ cnorm=\E[?25h\E[?0c, cr=^M, csr=\E[%i%p1%d;%p2%dr,
+ cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu1=\E[A, cvvis=\E[?25h\E[?8c, dch=\E[%p1%dP, dch1=\E[P,
+ dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J,
+ el=\E[K, el1=\E[1K, flash=\E[?5h\E[?5l$<200/>, home=\E[H,
+ hpa=\E[%i%p1%dG, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
+ il=\E[%p1%dL, il1=\E[L, ind=^J, kb2=\E[G, kbs=\177,
+ kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+ kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+ kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
+ kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kspd=^Z,
nel=^M^J, rc=\E8, rev=\E[7m, ri=\EM, rmir=\E[4l, rmso=\E[27m,
- rmul=\E[24m, rs1=\Ec, sc=\E7,
+ rmul=\E[24m, rs1=\Ec\E]R, sc=\E7,
sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m,
smir=\E[4h, smul=\E[4m, tbc=\E[3g, u6=\E[%i%d;%dR,
u7=\E[6n, u8=\E[?6c, u9=\E[c, vpa=\E[%i%p1%dd,
linux-c|linux console 1.3.6+ with private palette for each virtual console,
ccc,
colors#8, pairs#64,
- initc=\E]P%?%p1%{9}%>%t%p1%{10}%-%p'a'%+%c%e%p1%d%p2%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%p3%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%p4%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;,
+ initc=\E]P%?%p1%{9}%>%t%p1%{10}%-%'a'%+%c%e%p1%d%;%p2%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%p3%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%p4%{255}%&%Pr%gr%{16}%/%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;%gr%{15}%&%Px%?%gx%{9}%>%t%gx%{10}%-%'A'%+%c%e%gx%d%;,
oc=\E]R,
use=linux,
acsc=+\020\,\021-\030.^Y0\215`\004a\221f\234g\237h\220i\276j\205k\203l\202m\204n\212o~p\0q\0r\0s_t\206u\207v\211w\210x\201y\230z\231{\267|\274~\224,
use=linux, use=klone+koi8acs,
-# Another entry for KOI8-r with QingLong's acsc.
-# (which one better complies the standard?)
+# Another entry for KOI8-r with Qing Long's acsc.
+# (which one better complies with the standard?)
linux-koi8r|linux with koi8-r alternate character set,
+ kbs=^H, kcub1=^H, kcud1=^J,
use=linux, use=klone+koi8acs,
+# From: Matthew Vernon <mcv21@pick.sel.cam.ac.uk>
+mach|Mach Console,
+ am, km,
+ cols#80, it#8, lines#25,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\Ec, cr=^M,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
+ el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL, il1=\E[L, ind=^J,
+ kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[9, kend=\E[Y, kf1=\EOP, kf10=\EOY, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
+ kf9=\EOX, khome=\E[H, kich1=\E[@, kll=\E[F, knp=\E[U,
+ kpp=\E[V, nel=^M^J, rev=\E[7m, rmso=\E[0m, sgr0=\E[0m,
+ smso=\E[7m,
+mach-bold|Mach Console with bold instead of underline,
+ rmul=\E[0m, smul=\E[1m,
+ use=mach,
+
+# Entry for the latin1 and latin2 fonts
+linux-lat|linux with latin1 or latin2 alternate character set,
+ acsc=+\020\,\021-\030.^Y0\333`\004a\013f\370g\361h\260i\316j\211k\214l\206m\203n\305o~p\304q\212r\304s_t\207u\215v\301w\302x\205y\363z\362{\343|\330}\234~\376,
+ use=linux,
+
# SCO console and SOS-Syscons console for 386bsd
# (scoansi: had unknown capabilities
# :Gc=N:Gd=K:Gh=M:Gl=L:Gu=J:Gv=\072:\
# :WL=\E[S:WR=\E[T:CL=\E[U:CR=\E[V:\
# I renamed GS/GE/HM/EN/PU/PD/RT and added klone+sgr-dumb, based
# on the <smacs>=\E[12m -- esr)
+#
+# klone+sgr-dumb is an error since the acsc does not match -TD
+#
+# In this description based on SCO's keyboard(HW) manpage list of default function key
+# values:
+# F13-F24 are shifted F1-F12
+# F25-F36 are control F1-F12
+# F37-F48 are shift+control F1-F12
scoansi|SCO Extended ANSI standard crt,
am, eo, xon,
- cols#80, it#8, lines#25,
+ colors#8, cols#80, it#8, lines#25, pairs#64,
+ acsc=0[5566778899\:\:;;<<==>>FFGGHHIIJJKKLLMMNNOOPPQQRRSSTTUUVVWWXX`ja0fxgqh2jYk?lZm@nEqDtCu4vAwBx3~y,
blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[2J,
cub1=\E[D, cud1=\E[B, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H,
- ht=^I, ich1=\E[@, il1=\E[L, ind=\E[S, kbs=^H, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kend=\E[F, kf1=\E[M,
- kf10=\E[V, kf2=\E[N, kf3=\E[O, kf4=\E[P, kf5=\E[Q, kf6=\E[R,
- kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H, knp=\E[G, kpp=\E[I,
- ri=\E[T,
- use=klone+sgr-dumb,
+ ht=^I, ich1=\E[@, il1=\E[L, ind=\E[S, invis=\E[8m, kbeg=\E[E,
+ kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
+ kcuu1=\E[A, kend=\E[F, kf1=\E[M, kf10=\E[V, kf11=\E[W,
+ kf12=\E[X, kf13=\E[Y, kf15=\E[a, kf16=\E[b, kf17=\E[c,
+ kf18=\E[d, kf19=\E[e, kf2=\E[N, kf20=\E[f, kf21=\E[g,
+ kf22=\E[h, kf23=\E[i, kf24=\E[j, kf25=\E[k, kf26=\E[l,
+ kf27=\E[m, kf28=\E[n, kf29=\E[o, kf3=\E[O, kf30=\E[p,
+ kf31=\E[q, kf32=\E[r, kf33=\E[s, kf34=\E[t, kf35=\E[u,
+ kf36=\E[v, kf37=\E[w, kf38=\E[x, kf39=\E[y, kf4=\E[P,
+ kf40=\E[z, kf41=\E[@, kf42=\E[[, kf43=\E[\\, kf44=\E[],
+ kf45=\E[\^, kf46=\E[_, kf47=\E[`, kf48=\E[{, kf5=\E[Q,
+ kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H,
+ kich1=\E[L, knp=\E[G, kpp=\E[I, op=\E[37;40m, rev=\E[7m,
+ ri=\E[T, rmacs=\E[10m, rmso=\E[m, rmul=\E[m,
+ setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ sgr=\E[0;10%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;12%;m,
+ sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m,
# This actually describes the generic SVr4 display driver for Intel boxes.
# The <dim=\E[2m> isn't documented and therefore may not be reliable.
knp=\E[U, kpp=\E[V, krmir=\E0, nel=\r\E[S, rc=\E8, rev=\E[7m,
ri=\E[T, rin=\E[%p1%dT, rmacs=\E[10m, rmso=\E[m, rmul=\E[m,
sc=\E7,
- sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;2%;?%p6%t;1%;%?%p9%t;12%e;10%;%?%p7%t;9%;m,
+ sgr=\E[10m\E[0%?%p1%p3%|%t;7%;%?%p2%t;4%;%?%p4%t;5%;%?%p5%t;2%;%?%p6%t;1%;%?%p9%t;12%e;10%;%?%p7%t;9%;m,
sgr0=\E[0;10m, smacs=\E[12m, smso=\E[7m, smul=\E[4m,
tbc=\E[2g, vpa=\E[%i%p1%dd,
use=klone+color,
rmso=\E[m, rmul=\E[m, sgr0=\E[0;10m, smso=\E[7m,
smul=\E[4m,
-# From: Stefan Stapelberg <stefan@rent-a-guru.de>, 24 Feb 1997
+# Sent by Stefan Stapelberg <stefan@rent-a-guru.de>, 24 Feb 1997, this is
+# from SGI's terminfo database. SGI's entry shows F9-F12 with the codes
+# for the application keypad mode. We have added iris-ansi-ap rather than
+# change the original to keypad mode.
+#
# (iris-ansi: added rmam/smam based on init string -- esr)
-iris-ansi|IRIS emulating 40 line ANSI terminal (almost VT100),
+#
+# This entry, and those derived from it, is used in xwsh (also known as
+# winterm). Some capabilities that do not fit into the terminfo model
+# include the shift- and control-functionkeys:
+#
+# F1-F12 generate different codes when shift or control modifiers are used.
+# For example:
+# F1 \E[001q
+# shift F1 \E[013q
+# control-F1 \E[025q
+#
+# In application keypad mode, F9-F12 generate codes like vt100 PF1-PF4, i.e.,
+# \EOP to \EOS. The shifted and control modifiers still do the same thing.
+#
+# The cursor keys also have different codes:
+# control-up \E[162q
+# control-down \E[165q
+# control-left \E[159q
+# control-right \E[168q
+#
+# shift-up \E[161q
+# shift-down \E[164q
+# shift-left \E[158q
+# shift-right \E[167q
+#
+# control-tab \[072q
+#
+iris-ansi|iris-ansi-net|IRIS emulating 40 line ANSI terminal (almost VT100),
am,
cols#80, it#8, lines#40,
bel=^G, bold=\E[1m, clear=\E[H\E[2J,
kEND=\E[147q, kHOM=\E[143q, kLFT=\E[158q, kPRT=\E[210q,
kRIT=\E[167q, kSPD=\E[218q, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177,
- kend=\E[146q, kent=^M, kf1=\E[001q, kf10=\EOQ, kf11=\EOR,
- kf12=\EOS, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q,
- kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q,
- kf9=\EOP, khome=\E[H, kich1=\E[139q, knp=\E[154q,
- kpp=\E[150q, kprt=\E[209q, krmir=\E[146q, kspd=\E[217q,
- nel=\EE, pfkey=\EP101;%p1%d.y%p2%s\E\\, rc=\E8,
- rev=\E[7m, ri=\EM, rmam=\E[?7l, rmso=\E[m, rmul=\E[m, sc=\E7,
- sgr0=\E[m, smam=\E[?7h, smso=\E[1;7m, smul=\E[4m,
+ kend=\E[146q, kent=^M, kf1=\E[001q, kf10=\E[010q,
+ kf11=\E[011q, kf12=\E[012q, kf2=\E[002q, kf3=\E[003q,
+ kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q,
+ kf8=\E[008q, kf9=\E[009q, khome=\E[H, kich1=\E[139q,
+ knp=\E[154q, kpp=\E[150q, kprt=\E[209q, krmir=\E[146q,
+ kspd=\E[217q, nel=\EE, pfkey=\EP101;%p1%d.y%p2%s\E\\,
+ rc=\E8, rev=\E[7m, ri=\EM, rmam=\E[?7l, rmso=\E[m, rmul=\E[m,
+ sc=\E7, sgr0=\E[m, smam=\E[?7h, smso=\E[1;7m, smul=\E[4m,
tbc=\E[3g,
iris-ansi-ap|IRIS ANSI in application-keypad mode,
- is2=\E[?1l\E>\E[?7h, kf10=\E[010q, kf11=\E[011q,
- kf12=\E[012q, rmkx=\E>, smkx=\E=,
+ is2=\E[?1l\E=\E[?7h, kent=\EOM, kf10=\E[010q,
+ kf11=\E[011q, kf12=\E[012q, kf9=\E[009q,
use=iris-ansi,
# From the man-page, this is a quasi-vt100 emulator that runs on SGI's IRIX
# handle this case with the <ich1> capability, and prefers <am> for better
# optimization. Bug: The <op> capability resets attributes.
# From: Michael Hunter <mphunter@qnx.com> 30 Jul 1996
+# (removed: <sgr=%?%p1%t\E<%;%p2%t\E[%;%p3%t\E(%;%p4%t\E{%;%p6%t\E<%;,>)
qnx|qnx4|qnx console,
daisy, km, mir, msgr, xhpa, xt,
colors#8, cols#80, it#4, lines#25, ncv#3, pairs#8,
acsc=O\333a\261j\331k\277l\332m\300n\305o\337q\304s\334t\303u\264v\301w\302x\263,
bel=^G, blink=\E{, bold=\E<, civis=\Ey0, clear=\EH\EJ,
cnorm=\Ey1, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,
- cup=\EY%p1%' '%+%c%p2%' '%+%c, cuu1=\EA, cvvis=\Ey2,
+ cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, cvvis=\Ey2,
dch1=\Ef, dl1=\EF, ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\Ee,
il1=\EE, ind=^J, kBEG=\377\356, kCAN=\377\263,
kCMD=\377\267, kCPY=\377\363, kCRT=\377\364,
krmir=\377\313, krpl=\377\362, krst=\377\352,
ksav=\377\361, kslt=\377\247, kspd=\377\335,
ktbc=\377\344, kund=\377\365, mvpa=\E!%p1%02d, op=\ER,
- rep=\Eg%p2%' '%+%c%p1%c, rev=\E(, ri=\EI, rmcup=\Eh\ER,
+ rep=\Eg%p2%{32}%+%c%p1%c, rev=\E(, ri=\EI, rmcup=\Eh\ER,
rmso=\E), rmul=\E], rs1=\ER, setb=\E@%p1%Pb%gb%gf%d%d,
- setf=\E@%p1%Pf%gb%gf%d%d,
- sgr=%?%p1%t\E<%;%p2%t\E[%;%p3%t\E(%;%p4%t\E{%;%p6%t\E<%;,
- sgr0=\E}\E]\E>\E), smcup=\Ei, smso=\E(, smul=\E[,
+ setf=\E@%p1%Pf%gb%gf%d%d, sgr0=\E}\E]\E>\E), smcup=\Ei,
+ smso=\E(, smul=\E[,
+
+# From: Federico Bianchi <bianchi@pc-arte2.arte.unipi.it>, 1 Jul 1998
+# (esr: commented out <scp> and <rmcup> to avoid warnings.)
+# (TD: derive from original qnx4 entry)
+qnxt2|qnx 2.15 serial terminal,
+ am,
+ civis@, cnorm@, cvvis@, dch1@, ich1@, kRES@, kRPL@, kUND@, kspd@,
+ rep@, rmcup@, rmso=\E>, setb@, setf@, smcup@, smso=\E<,
+ use=qnx4,
#### NetBSD consoles
#
# the :Xs: flag. Then I split :is: into a size-independent <is1> and a
# size-dependent <is2>. Finally, I added <rmam>/<smam> -- esr)
-# NOTE: because the 386BSD "vi"/"elvis" seems to have a bug if
-# both <ich1> and <smir> are specified (an original VT220
-# shows the same buggy behaviour!), <ich1> has been taken
-# out of this entry. for reference, it should be <ich1=\E[@>.
+# NOTE: <ich1> has been taken out of this entry. for reference, it should
+# be <ich1=\E[@>. For discussion, see ICH/ICH1 VERSUS RMIR/SMIR below.
+# (esr: added <civis> and <cnorm> to resolve NetBSD Problem Report #4583)
pcvtXX|pcvt vt200 emulator (DEC VT220),
am, km, mir, msgr, xenl,
it#8, vt#3,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz~~,
- bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cr=^M,
+ bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
+ clear=\E[H\E[J, cnorm=\E[?25h, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
cols#132, lines#50,
is2=\E[1;50r\E[50;1H, use=pcvtXX,
+# Terminfo entries to enable the use of the ncurses library in colour on a
+# NetBSD-arm32 console (only tested on a RiscPC).
+# Created by Dave Millen <dmill@globalnet.co.uk> 22.07.98
+# modified codes for setf/setb to setaf/setab, then to klone+color, corrected
+# typo in invis - TD
+arm100|arm100-am|Arm(RiscPC) ncurses compatible (for 640x480),
+ am, bce, msgr, xenl, xon,
+ cols#80, it#8, lines#30,
+ acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+ bel=^G, blink=\E[5m$<2>, bold=\E[1m$<2>,
+ clear=\E[H\E[J$<50>, cr=^M, csr=\E[%i%p1%d;%p2%dr,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
+ cuf=\E[%p1%dC, cuf1=\E[C$<2>,
+ cup=\E[%i%p1%d;%p2%dH$<5>, cuu=\E[%p1%dA,
+ cuu1=\E[A$<2>, ed=\E[J$<50>, el=\E[K$<3>, el1=\E[1K$<3>,
+ enacs=\E(B\E)0, home=\E[H, ht=^I, hts=\EH, ind=^J,
+ invis=\E[8m$<2>, ka1=\E[q, ka3=\E[s, kb2=\E[r, kbs=^H,
+ kc1=\E[p, kc3=\E[n, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
+ kcuu1=\E[A, kent=\E[M, kf0=\E[y, kf1=\E[P, kf10=\E[x,
+ kf2=\E[Q, kf3=\E[R, kf4=\E[S, kf5=\E[t, kf6=\E[u, kf7=\E[v,
+ kf8=\E[l, kf9=\E[w, rc=\E8, rev=\E[6m$<2>, ri=\EM$<5>,
+ rmacs=^O, rmam=\E[?7l, rmkx=\E[?1l\E>, rmso=\E[m$<2>,
+ rmul=\E[m$<2>, rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h,
+ sc=\E7,
+ sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
+ sgr0=\E[m\017$<2>, smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=,
+ smso=\E[7m$<2>, smul=\E[4m$<2>, tbc=\E[3g,
+ use=ecma+sgr, use=klone+color,
+
+arm100-w|arm100-wam|Arm(RiscPC) ncurses compatible (for 1024x768),
+ cols#132, lines#50, use=arm100,
+
# NetBSD/x68k console vt200 emulator. This port runs on a 68K machine
# manufactured by Sharp for the Japenese market.
# From Minoura Makoto <minoura@netlaputa.or.jp>, 12 May 1996
cols#96, lines#32,
kclr=\E[9~, khlp=\E[28~, use=vt220,
+# <tv@pobox.com>:
+# Entry for the DNARD OpenFirmware console, close to ANSI but not quite.
+#
+# (still unfinished, but good enough so far.)
+ofcons,
+ bw,
+ cols#80, lines#30,
+ bel=^G, blink=\2337;2m, bold=\2331m, clear=^L, cr=^M,
+ cub=\233%p1%dD, cub1=\233D, cud=\233%p1%dB, cud1=\233B,
+ cuf=\233%p1%dC, cuf1=\233C, cup=\233%i%p1%d;%p2%dH,
+ cuu=\233%p1%dA, cuu1=\233A, dch=\233%p1%dP, dch1=\233P,
+ dim=\2332m, dl=\233%p1%dM, dl1=\233M, ed=\233J, el=\233K,
+ flash=^G, ht=^I, ich=\233%p1%d@, ich1=\233@, il=\233%p1%dL,
+ il1=\233L, ind=^J, invis=\2338m, kbs=^H, kcub1=\233D,
+ kcud1=\233B, kcuf1=\233C, kcuu1=\233A, kdch1=\233P,
+ kf1=\2330P, kf10=\2330M, kf2=\2330Q, kf3=\2330W,
+ kf4=\2330x, kf5=\2330t, kf6=\2330u, kf7=\2330q, kf8=\2330r,
+ kf9=\2330p, knp=\233/, kpp=\233?, nel=^M^J, rev=\2337m,
+ rmso=\2330m, rmul=\2330m, sgr0=\2330m,
+
+# NetBSD "wscons" emulator in vt220 mode
+# These are micro-minimal and probably need to be redone for real
+# after the manner of the pcvt entries.
+wsvt25|NetBSD wscons in 25 line DEC VT220 mode,
+ cols#80, lines#25, use=vt220,
+
+wsvt25m|NetBSD wscons in 25 line DEC VT220 mode with Meta,
+ km,
+ cols#80, lines#25, use=vt220,
+
+# `rasterconsole' provided by 4.4BSD, NetBSD and OpenBSD on SPARC, and
+# DECstation/pmax.
+rcons|BSD rasterconsole,
+ use=sun-il,
+# Color version of above. Color currenly only provided by NetBSD.
+rcons-color|BSD rasterconsole with ANSI color,
+ bce,
+ colors#8, pairs#64,
+ op=\E[m, setab=\E[4%dm, setaf=\E[3%dm, use=rcons,
+
#### FreeBSD console entries
#
# From: Andrey Chernov <ache@astral.msk.su> 29 Mar 1996
# Note that this disables standout with color.
cons25w|ansiw|ansi80x25-raw|freebsd console (25-line raw mode),
am, bce, bw, eo, msgr, npc,
- colors#8, cols#80, it#8, lines#25, ncv#5, pairs#64,
+ colors#8, cols#80, it#8, lines#25, ncv#21, pairs#64,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, clear=\E[H\E[J,
- cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
- cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA, cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P,
- dim=\E[30;1m, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K,
- home=\E[H, hpa=\E[%i%p1%d`, ht=^I, ich=\E[%p1%d@,
- ich1=\E[@, il=\E[%p1%dL, il1=\E[L, ind=\E[S,
- indn=\E[%p1%dS, kb2=\E[E, kbs=^H, kcbt=\E[Z, kcub1=\E[D,
- kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\177, kend=\E[F,
- kf1=\E[M, kf10=\E[V, kf11=\E[W, kf12=\E[X, kf2=\E[N,
- kf3=\E[O, kf4=\E[P, kf5=\E[Q, kf6=\E[R, kf7=\E[S, kf8=\E[T,
- kf9=\E[U, khome=\E[H, kich1=\E[L, knp=\E[G, kpp=\E[I,
- nel=\E[E, op=\E[x, rev=\E[7m, ri=\E[T, rin=\E[%p1%dT,
- rmso=\E[m, rs1=\E[x\E[m\Ec, setab=\E[4%p1%dm,
- setaf=\E[3%p1%dm, sgr0=\E[m, smso=\E[7m, vpa=\E[%i%p1%dd,
+ cnorm=\E[=0C, cr=^M, cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB,
+ cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ cvvis=\E[=1C, dch=\E[%p1%dP, dch1=\E[P, dim=\E[30;1m,
+ dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H,
+ hpa=\E[%i%p1%d`, ht=^I, ich=\E[%p1%d@, ich1=\E[@,
+ il=\E[%p1%dL, il1=\E[L, ind=\E[S, indn=\E[%p1%dS, kb2=\E[E,
+ kbs=^H, kcbt=\E[Z, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
+ kcuu1=\E[A, kdch1=\177, kend=\E[F, kf1=\E[M, kf10=\E[V,
+ kf11=\E[W, kf12=\E[X, kf2=\E[N, kf3=\E[O, kf4=\E[P, kf5=\E[Q,
+ kf6=\E[R, kf7=\E[S, kf8=\E[T, kf9=\E[U, khome=\E[H,
+ kich1=\E[L, knp=\E[G, kpp=\E[I, nel=\E[E, op=\E[x, rev=\E[7m,
+ ri=\E[T, rin=\E[%p1%dT, rmso=\E[m, rs1=\E[x\E[m\Ec,
+ setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[m,
+ smso=\E[7m, vpa=\E[%i%p1%dd,
cons25|ansis|ansi80x25|freebsd console (25-line ansi mode),
acsc=-\030.^Y0\333`\004a\260f\370g\361h\261i\025j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263y\363z\362~\371,
use=cons25w,
# "stty rows NN", e.g. to use 24 lines.
# (Color support from Kevin Rosenberg <kevin@cyberport.com>, 2 May 1996)
# Bug: The <op> capability resets attributes.
-bsdos|BSD/OS console,
- am, bw, eo, km, xon,
- colors#8, cols#80, it#8, lines#25, pairs#64,
- bel=^G, blink=\E[5m, bold=\E[1m, clear=\Ec, cr=^M,
- cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
- cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu=\E[%p1%dA, cuu1=\E[A, dim=\E[=8F, dl=\E[%p1%dM,
- dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I, il=\E[%p1%dL,
- il1=\E[L, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
- kcuu1=\E[A, khome=\E[H, kich1=\E[L, kll=\E[F, knp=\E[G,
- kpp=\E[I, nel=^M^J, op=\E[x, rc=\E8, rev=\E[7m, rmso=\E[0m,
- sc=\E7, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0m,
- smso=\E[7m,
-bsdos-bold|IBM PC BSD/386 Console with bold instead of underline,
- rmul=\E[0m, smul=\E[1m,
- use=bsdos,
-
-# If you are BSDI, you want the following entries, for the moment.
-# In release 2.0 they will probably phase out the pc3 and ibmpc3 names
-pc3|IBM PC BSD/386 Console,
- use=bsdos,
-ibmpc3|pc3-bold|IBM PC BSD/386 Console with bold instead of underline,
- smul=\E[1m,
- use=bsdos-bold,
+bsdos-pc-nobold|BSD/OS PC console w/o bold,
+ am, eo, km, xon,
+ cols#80, it#8, lines#25,
+ bel=^G, clear=\Ec, cr=^M, cub=\E[%p1%dD, cub1=^H,
+ cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H, ht=^I,
+ il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E[H, kich1=\E[L,
+ kll=\E[F, knp=\E[G, kpp=\E[I, nel=^M^J, rc=\E8, sc=\E7,
+ sgr=\E[0;10%?%p1%t;7%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m%?%p5%t\E[=8F%;,
+ use=klone+sgr, use=klone+color,
+bsdos-pc|IBM PC BSD/OS Console,
+ sgr=\E[0;10%?%p1%t;7%;%?%p2%t;1%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;%?%p9%t;11%;m, use=bsdos-pc-nobold,
+
+# Old names for BSD/OS PC console used in releases before 4.1.
+pc3|BSD/OS on the PC Console,
+ use=bsdos-pc-nobold,
+ibmpc3|pc3-bold|BSD/OS on the PC Console with bold instead of underline,
+ use=bsdos-pc,
+
+# BSD/OS on the SPARC
+bsdos-sparc|Sun SPARC BSD/OS Console,
+ use=sun,
+
+# BSD/OS on the PowerPC
+bsdos-ppc|PowerPC BSD/OS Console,
+ use=bsdos-pc,
#### DEC VT100 and compatibles
#
# its name to Boundless Technologies; see http://www.boundless.com.
#
-# (The <acsc>, <rmacs>, and <smacs> capabilities aren't in DEC's official
-# entry -- esr)
+# (<acsc>/<rmacs>/<smacs> capabilities aren't in DEC's official entry -- esr)
vt52|dec vt52,
cols#80, it#8, lines#24,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
rs2=\E>\E[?3h\E[?4l\E[?5l\E[?7l\E[?8h\E[1;42r\E[42;1H,
use=z340,
+# CRT is shareware. It implements some xterm features, including mouse.
+crt|crt-vt220|CRT 2.3 emulating VT220,
+ bce, msgr,
+ colors#8, pairs#64,
+ hts=\EH, op=\E[39;49m, setab=\E[4%p1%dm,
+ setaf=\E[3%p1%dm, setb=\E[4%p1%dm, setf=\E[3%p1%dm,
+ u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
+ use=vt220,
+
+# This entry is for Tera Term Pro version 2.3, for MS-Windows 95/NT written by
+# T. Teranishi dated Mar 10, 1998. It is a free software terminal emulator
+# (communication program) which supports:
+#
+# - Serial port connections.
+# - TCP/IP (telnet) connections.
+# - VT100 emulation, and selected VT200/300 emulation.
+# - TEK4010 emulation.
+# - File transfer protocols (Kermit, XMODEM, ZMODEM, B-PLUS and
+# Quick-VAN).
+# - Scripts using the "Tera Term Language".
+# - Japanese and Russian character sets.
+#
+# The program does not come with terminfo or termcap entries. However, the
+# emulation (testing with vttest and ncurses) is reasonably close to vt100 (no
+# vt52 or doublesize character support; blinking is done with color). Besides
+# the HPA, VPA extensions it also implements CPL and CNL.
+#
+# All of the function keys can be remapped. This description shows the default
+# mapping, as installed. Both vt100 PF1-PF4 keys and quasi-vt220 F1-F4 keys
+# are supported. F13-F20 are obtained by shifting F3-F10. The editing keypad
+# is laid out like vt220, rather than the face codes on the PC keyboard, i.e,
+# kfnd Insert
+# kslt Delete
+# kich1 Home
+# kdch1 PageUp
+# kpp End
+# knp PageDown
+#
+# ANSI colors are implemented, but cannot be combined with video attributes
+# except for reverse.
+#
+# No fonts are supplied with the program, so the acsc string is chosen to
+# correspond with the default Microsoft terminal font.
+#
+# Tera Term recognizes some xterm sequences, including those for setting and
+# retrieving the window title, and for setting the window size (i.e., using
+# "resize -s"), though it does not pass SIGWINCH to the application if the
+# user resizes the window with the mouse.
+teraterm|Tera Term Pro,
+ km, xon@,
+ ncv#43, vt@,
+ acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
+ blink=\E[5m, bold=\E[1m, civis=\E[?25l, clear=\E[H\E[J,
+ cnorm=\E[?25h, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu1=\E[A, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
+ dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
+ flash=\E[?5h\E[?5l$<200/>, hpa=\E[%i%p1%dG,
+ il=\E[%p1%dL, il1=\E[L, kdch1=\E[3~, kf1=\E[11~,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf13=\E[25~,
+ kf14=\E[26~, kf15=\E[28~, kf16=\E[29~, kf17=\E[31~,
+ kf18=\E[32~, kf19=\E[33~, kf2=\E[12~, kf20=\E[34~,
+ kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, kich1=\E[2~, knp=\E[6~,
+ kpp=\E[5~, kslt=\E[4~, op=\E[100m, rev=\E[7m, ri=\EM,
+ rmso=\E[27m, rmul=\E[24m, sgr0=\E[m, smso=\E[7m,
+ smul=\E[4m, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
+ vpa=\E[%i%p1%dd,
+ use=klone+color, use=vt100,
+
+# Tested with WinNT 4.0, the telnet application assumes the screensize is
+# 25x80. This entry uses the 'Terminal' font, to get line-drawing characters.
+ms-vt100|MS telnet imitating dec vt100,
+ lines#25,
+ acsc=+\020\,\021-\030.^Y0\333`\004a\261f\370g\361h\260i\316j\331k\277l\332m\300n\305o~p\304q\304r\304s_t\303u\264v\301w\302x\263y\363z\362{\343|\330}\234~\376,
+ tbc@, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?6c, u9=\E[c,
+ use=vt100,
+
#### X terminal emulators
#
# You can add the following line to your .Xdefaults to change the terminal type
smso=\E[7m, smul=\E[4m,
# Compatible with the R5 xterm
# (from the XFree86 3.2 distribution, <blink=@> removed)
+# added khome/kend, rmir/smir, rmul/smul based on the R5 xterm code - TD
+# corrected typos in rs2 string - TD
xterm-r5|xterm R5 version,
am, km, msgr, xenl,
cols#80, it#8, lines#24,
el=\E[K, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
il=\E[%p1%dL, il1=\E[L, ind=^J, kbs=^H, kcub1=\EOD,
kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~,
- kdl1=\E[31~, kel=\E[8~, kf0=\EOq, kf1=\E[11~, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf2=\E[12~, kf3=\E[13~,
- kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
- kf9=\E[20~, khome=\E[7~, kich1=\E[2~, kil1=\E[30~,
- knp=\E[6~, kpp=\E[5~, rc=\E8, rev=\E[7m, ri=\EM,
- rmkx=\E[?1l\E>, rmso=\E[m,
- rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H, sc=\E7,
+ kdl1=\E[31~, kel=\E[8~, kend=\E[4~, kf0=\EOq, kf1=\E[11~,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\E[12~,
+ kf3=\E[13~, kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, khome=\E[1~, kich1=\E[2~,
+ kil1=\E[30~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, rc=\E8,
+ rev=\E[7m, ri=\EM, rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[m,
+ rmul=\E[m,
+ rs2=\E>\E[?1;3;4;5;6l\E[4l\E[?7h\E[m\E[r\E[2J\E[H,
+ sc=\E7,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m,
- sgr0=\E[m, smkx=\E[?1h\E=, smso=\E[7m, tbc=\E[3g,
+ sgr0=\E[m, smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m,
+ smul=\E[4m, tbc=\E[3g,
# Compatible with the R6 xterm
# (from XFree86 3.2 distribution, <acsc> and <it> added, <blink@> removed)
+# added khome/kend - TD
xterm-r6|xterm-old|xterm X11R6 version,
am, km, mir, msgr, xenl,
cols#80, it#8, lines#24,
- acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+ acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[1m, clear=\E[H\E[2J, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
kf2=\EOQ, kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf5=\E[15~,
kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~,
- kich1=\E[2~, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, meml=\El,
- memu=\Em, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
+ kich1=\E[2~, kmous=\E[M, knp=\E[6~, kpp=\E[5~, kslt=\E[4~,
+ meml=\El, memu=\Em, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmkx=\E[?1l\E>,
rmso=\E[m, rmul=\E[m,
rs2=\E7\E[r\E[m\E[?7h\E[?1;3;4;6l\E[4l\E8\E>, sc=\E7,
sgr0=\E[m, smacs=^N, smcup=\E7\E[?47h, smir=\E[4h,
smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m, tbc=\E[3g,
+ u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
# This is the base xterm entry for the xterm supplied with XFree86 3.2 & up.
# The name has been changed and some aliases have been removed.
xterm-xf86-v32|xterm terminal emulator (XFree86 3.2 Window System),
am, bce, km, mir, msgr, xenl,
colors#8, cols#80, it#8, lines#24, pairs#64,
- acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+ acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E7\E[?47h,
smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
- tbc=\E[3g, vpa=\E[%i%p1%dd,
+ tbc=\E[3g, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
+ vpa=\E[%i%p1%dd,
# This is the stock xterm entry supplied with XFree86 3.3, which uses VT100
# codes for F1-F4 except while in VT220 mode.
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
use=xterm-xf86-v32,
-# This beta version will probably be released in XFree86 4.0 in 1998.
+# This version was released in XFree86 3.3.3 (November 1998).
# Besides providing printer support, it exploits a new feature that allows
# xterm to use terminfo-based descriptions with the titeInhibit resource.
-xterm-xf86-v40|xterm terminal emulator (XFree86 4.0 Window System),
+xterm-xf86-v333|xterm terminal emulator (XFree86 3.3.3 Window System),
mc5i,
- mc0=\E[i, mc4=\E[4i, mc5=\E[5i, rmcup=\E[?1047l\E[?1048l,
- rs1=\Ec, smcup=\E[?1048h\E[?1047h,
+ blink=\E[5m, ich1@, invis=\E[8m,
+ is2=\E[!p\E[?3;4l\E[4l\E>, kdch1=\E[3~, kend=\E[4~,
+ kfnd@, khome=\E[1~, kslt@, mc0=\E[i, mc4=\E[4i, mc5=\E[5i,
+ rmcup=\E[?1047l\E[?1048l, rs1=\Ec,
+ rs2=\E[!p\E[?3;4l\E[4l\E>,
+ sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
+ smcup=\E[?1048h\E[?1047h,
use=xterm-xf86-v33,
+# This beta version will probably be released in XFree86 4.0.
+xterm-xf86-v40|xterm terminal emulator (XFree86 4.0 Window System),
+ ka1=\EOH, ka3=\E[5~, kb2=\EOE, kc1=\EOF, kc3=\E[6~,
+ kdch1=\177, kend=\EOF, khome=\EOH, rmcup=\E[?1049l,
+ smcup=\E[?1049h,
+ use=xterm-xf86-v333,
+
+xterm-xfree86|xterm-new|xterm terminal emulator (XFree86 4.0 Window System),
+ use=xterm-xf86-v40,
+
# From: David J. MacKenzie <djm@va.pubnix.com>, 14 Nov 1997
xterm-xi|xterm on XI Graphics Accelerated X under BSD/OS 3.1,
rmso=\E[m, rmul=\E[m,
use=xterm-xf86-v33,
-# This is one of the variants from XFree86 3.3 (T.Dickey)
+# This is one of the variants of XFree86 3.3 xterm, updated for 4.0 (T.Dickey)
xterm-16color|xterm with 16 colors like aixterm,
colors#16, ncv#32, pairs#256,
- setab@, setaf@,
+ setab=\E[%?%p1%{8}%<%t%p1%{40}%+%e%p1%{92}%+%;%dm,
+ setaf=\E[%?%p1%{8}%<%t%p1%{30}%+%e%p1%{82}%+%;%dm,
setb=%p1%{8}%/%{6}%*%{4}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
setf=%p1%{8}%/%{6}%*%{3}%+\E[%d%p1%{8}%m%Pa%?%ga%{1}%=%t4%e%ga%{3}%=%t6%e%ga%{4}%=%t1%e%ga%{6}%=%t3%e%ga%d%;m,
use=xterm-xf86-v40,
xterm-8bit|xterm terminal emulator 8-bit controls (X Window System),
am, bce, km, mc5i, mir, msgr, xenl,
colors#8, cols#80, it#8, lines#24, pairs#64,
- acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
- bel=^G, bold=\2331m, cbt=\233Z, civis=\233?25l,
- clear=\233H\2332J, cnorm=\233?25h, cr=^M,
+ acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+ bel=^G, blink=\2335m, bold=\2331m, cbt=\233Z,
+ civis=\233?25l, clear=\233H\2332J, cnorm=\233?25h, cr=^M,
csr=\233%i%p1%d;%p2%dr, cub=\233%p1%dD, cub1=^H,
cud=\233%p1%dB, cud1=^J, cuf=\233%p1%dC, cuf1=\233C,
cup=\233%i%p1%d;%p2%dH, cuu=\233%p1%dA, cuu1=\233A,
dl=\233%p1%dM, dl1=\233M, ech=\233%p1%dX, ed=\233J,
el=\233K, el1=\2331K, enacs=\E(B\E)0,
flash=\233?5h\233?5l, home=\233H, hpa=\233%i%p1%dG,
- ht=^I, hts=\210, ich=\233%p1%d@, ich1=\233@, il=\233%p1%dL,
- il1=\233L, ind=^J,
+ ht=^I, hts=\210, ich=\233%p1%d@, il=\233%p1%dL, il1=\233L,
+ ind=^J, invis=\2338m,
is2=\E7\E G\233r\233m\233?7h\233?1;3;4;6l\2334l\E8\E>,
ka1=\217w, ka3=\217u, kb2=\217y, kbeg=\217E, kbs=^H,
kc1=\217q, kc3=\217s, kcub1=\217D, kcud1=\217B,
- kcuf1=\217C, kcuu1=\217A, kdch1=\2333~, kend=\217F,
+ kcuf1=\217C, kcuu1=\217A, kdch1=\2333~, kend=\2334~,
kent=\217M, kf1=\23311~, kf10=\23321~, kf11=\23323~,
kf12=\23324~, kf13=\23325~, kf14=\23326~, kf15=\23328~,
kf16=\23329~, kf17=\23331~, kf18=\23332~, kf19=\23333~,
kf2=\23312~, kf20=\23334~, kf3=\23313~, kf4=\23314~,
kf5=\23315~, kf6=\23317~, kf7=\23318~, kf8=\23319~,
- kf9=\23320~, kfnd=\2331~, khome=\217H, kich1=\2332~,
- kmous=\233M, knp=\2336~, kpp=\2335~, kslt=\2334~,
- mc0=\233i, mc4=\2334i, mc5=\2335i, meml=\El, memu=\Em,
- op=\23339;49m, rc=\E8, rev=\2337m, ri=\215, rmacs=^O,
- rmam=\233?7l, rmcup=\2332J\233?47l\E8, rmir=\2334l,
- rmkx=\233?1l\E>, rmso=\23327m, rmul=\23324m, rs1=\Ec,
+ kf9=\23320~, khome=\2331~, kich1=\2332~, kmous=\233M,
+ knp=\2336~, kpp=\2335~, mc0=\233i, mc4=\2334i, mc5=\2335i,
+ meml=\El, memu=\Em, op=\23339;49m, rc=\E8, rev=\2337m,
+ ri=\215, rmacs=^O, rmam=\233?7l, rmcup=\233?1049l,
+ rmir=\2334l, rmkx=\233?1l\E>, rmso=\23327m, rmul=\23324m,
+ rs1=\Ec,
rs2=\E7\E[62"p\E G\233r\233m\233?7h\233?1;3;4;6l\2334l\E8\E>,
sc=\E7, setab=\2334%p1%dm, setaf=\2333%p1%dm,
setb=\2334%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
setf=\2333%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
- sgr=\2330%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
- sgr0=\233m^O, smacs=^N, smam=\233?7h, smcup=\E7\233?47h,
+ sgr=\2330%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
+ sgr0=\233m^O, smacs=^N, smam=\233?7h, smcup=\233?1049h,
smir=\2334h, smkx=\233?1h\E=, smso=\2337m, smul=\2334m,
- tbc=\2333g, vpa=\233%i%p1%dd,
+ tbc=\2333g, u6=\233[%i%d;%dR, u7=\E[6n, u8=\233[?1;2c,
+ u9=\E[c, vpa=\233%i%p1%dd,
+
+xterm-24|vs100|xterms|xterm terminal emulator (X Window System),
+ lines#24, use=xterm,
-# This is xterm for ncurses. It mainly adds mappings for more high-half
-# characters. Note that these will only work for fixed-width fonts.
-xterm|vs100|xterms|xterm terminal emulator (X Window System),
- acsc=++\,\,--..00``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+# This is xterm for ncurses.
+xterm|xterm terminal emulator (X Window System),
+ acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
kmous=\E[M, u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?1;2c, u9=\E[c,
use=xterm-r6,
xterm+sl|access X title line and icon name,
hs,
wsl#40,
- dsl=\E]0;\007, fsl=^G, tsl=\E]0;,
+ dsl=\E]0;\007, fsl=^G, tsl=\E]0;, use=xterm,
xterm+sl-twm|access X title line (pacify twm-descended window managers),
hs,
wsl#40,
- dsl=\E]2;\007, fsl=^G, tsl=\E]2;,
+ dsl=\E]2;\007, fsl=^G, tsl=\E]2;, use=xterm,
#
# The following xterm variants don't depend on your base version
#
+# xterm with bold instead of underline
xterm-bold|xterm terminal emulator (X11R6 Window System) standout w/bold,
- smso=\E[1m,
+ smso=\E[7m, smul=\E[1m,
use=xterm,
# (kterm: this had extension capabilities ":KJ:TY=ascii:" -- esr)
# (kterm should not invoke DEC Graphics as the alternate character set
# before ECMA-64 color support was folded into the main-line xterm release.
# This entry is straight from color_xterm's maintainer.
# From: Jacob Mandelson <jlm@ugcs.caltech.edu>, 09 Nov 1996
+# The README's with the distribution also say that it supports SGR 21, 24, 25
+# and 27, but they are not present in the terminfo or termcap.
color_xterm|cx|cx100|color_xterm color terminal emulator for X,
am, km, mir, msgr, xenl,
colors#8, cols#80, it#8, lines#65, pairs#64,
smcup=\E[?1;41s\E[?1;41h\E=, smir=\E[4h, smso=\E[7m,
smul=\E[4m,
+# The 'nxterm' distributed with Redhat Linux is a slight rehack of
+# xterm-sb_right-ansi-3d, which implements ANSI colors, but does not support
+# SGR 39 or 49. SGR 0 does reset colors (along with everything else). This
+# description is "compatible" with color_xterm, rxvt and XFree86 xterm, except
+# that each of those implements the home, end, delete keys differently.
+nxterm|xterm-color|generic color xterm,
+ ncv@,
+ op=\E[m, use=xterm-r6, use=klone+color,
+
# From: Thomas Dickey <dickey@clark.net> 04 Oct 1997
# Updated: Oezguer Kesim <kesim@math.fu-berlin.de> 02 Nov 1997
# Notes:
# ech=\E[%p1%dX,
# but the latter does not work correctly.
#
+# The distributed terminfo says it implements hpa and vpa, but they are not
+# implemented correctly, using relative rather than absolute positioning.
+#
# rxvt is normally configured to look for "xterm" or "xterm-color" as $TERM.
# Since rxvt is not really compatible with xterm, it should be configured as
# "rxvt" (monochrome) and "rxvt-color".
kf4=\E[14~, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
kf9=\E[20~, kfnd=\E[1~, khome=\E[7~, kich1=\E[2~,
kmous=\E[M, knp=\E[6~, kpp=\E[5~, kslt=\E[4~, rc=\E8,
- rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[?47l\E8, rmir=\E[4l,
- rmkx=\E>, rmso=\E[27m, rmul=\E[24m,
+ rev=\E[7m, ri=\EM, rmacs=^O, rmcup=\E[2J\E[?47l\E8,
+ rmir=\E[4l, rmkx=\E>, rmso=\E[27m, rmul=\E[24m,
rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H,
rs2=\E[r\E[m\E[2J\E[H\E[?7h\E[?1;3;4;6l\E[4l\E>,
s0ds=\E(B, s1ds=\E(0, sc=\E7, sgr0=\E[0m\017, smacs=^N,
op=\E[39;49m, setab=\E[%p1%{40}%+%dm,
setaf=\E[%p1%{30}%+%dm, sgr0=\E[m\017, use=rxvt-basic,
+# These (xtermc and xtermm) are distributed with Solaris. They refer to a
+# variant of xterm which is apparently no longer supported, but are interesting
+# because they illustrate SVr4 curses mouse controls - T.Dickey
+xtermm|xterm terminal emulator (monocrome),
+ am, km, mir, msgr, xenl,
+ btns#3, cols#80, it#8, lines#24,
+ acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+ bel=^G, blink=@, bold=\E[1m, clear=\E[H\E[2J, cr=^M,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=\E[1D,
+ cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
+ el=\E[K, el1=\E[1K$<3>, enacs=\E(B\E)0, getm=\E[%p1%dY,
+ home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, ich1=\E[@,
+ il=\E[%p1%dL, il1=\E[L, ind=^J, ka1=\EOq, ka3=\EOs, kb2=\EOr,
+ kbs=^H, kc1=\EOp, kc3=\EOn, kcub1=\EOD, kcud1=\EOB,
+ kcuf1=\EOC, kcuu1=\EOA, kend=\E[Y, kent=\EOM, kf0=\EOy,
+ kf1=\EOP, kf10=\EOY, kf11=\EOZ, kf12=\EOA, kf2=\EOQ,
+ kf3=\EOR, kf4=\EOS, kf5=\EOT, kf6=\EOU, kf7=\EOV, kf8=\EOW,
+ kf9=\EOX, khome=\E[H, kmous=\E[^_, knp=\E[U, kpp=\E[V,
+ rc=\E8, reqmp=\E[492Z, rev=\E[7m, ri=\EM, rmacs=^O,
+ rmcup=\E@0\E[?4r, rmso=\E[m,
+ rs1=\E>\E[1;3;4;5;6l\E[?7h\E[m\E[r\E[2J\E[H,
+ rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sc=\E7,
+ sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;,
+ sgr0=\E[m\017, smacs=^N, smcup=\E@0\E[?4s\E[?4h\E@1,
+ smso=\E[7m, tbc=\E[3g,
+
+xtermc|xterm terminal emulator (color),
+ colors#8, ncv#7, pairs#64,
+ op=\E[100m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm,
+ setb=\E[4%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
+ setf=\E[3%?%p1%{1}%=%t4%e%p1%{3}%=%t6%e%p1%{4}%=%t1%e%p1%{6}%=%t3%e%p1%d%;m,
+ use=xtermm,
+
# From: David J. MacKenzie <djm@va.pubnix.com> 20 Apr 1995
# Here's a termcap entry I've been using for xterm_color, which comes
# with BSD/OS 2.0, and the X11R6 contrib tape too I think. Besides the
pln=\E&f%p1%dk%p2%l%dd0L%p2%s, rev=\E&dB, ri=\ET,
rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@,
rmul=\E&d@,
- sgr=\E&d%?%p7%t%'s'%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%'@'%+%c%?%p9%t%'\016'%c%e%'\017'%c%;,
+ sgr=\E&d%?%p7%t%{115}%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%{64}%+%c%?%p9%t%'\016'%c%e%'\017'%c%;,
sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smln=\E&jB,
smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY,
cols#80, lines#24, use=xterm-sun,
# This is for the extensible terminal emulator on the X11R6 contrib tape.
-# (emu: I changed <setab>/<setaf> to <setb>/<setf> -- esr)
emu|emu native mode,
mir, msgr, xon,
colors#15, cols#80, it#8, lines#24, pairs#64, vt#200,
kf7=\EF07, kf8=\EF08, kf9=\EF09, kfnd=\Efind, kich1=\Eins,
knp=\Enext, kpp=\Eprior, kslt=\Esel, oc=\Es0;\Er0;,
rev=\ES\ET, ri=\EF, rmacs=\0, rmir=\EX, rmso=\ES, rmul=\ES,
- rs2=\ES\Es0;\Er0;, setb=\Es%i%p1%d;, setf=\Er%i%p1%d;,
- sgr0=\ES, smacs=\0, smir=\EY, smso=\ES\ET, smul=\ES\EV,
- tbc=\Ej,
+ rs2=\ES\Es0;\Er0;, setab=\Es%i%p1%d;,
+ setaf=\Er%i%p1%d;, sgr0=\ES, smacs=\0, smir=\EY,
+ smso=\ES\ET, smul=\ES\EV, tbc=\Ej,
-######## MGR
+#### MGR
#
# MGR is a Bell Labs window system lighter-weight than X.
# These entries describe MGR's xterm-equivalent.
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
- dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\\E[J,
+ dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M, ed=\E[J,
el=\E[K, el1=\E[1K, home=\E[H, ht=^I, ich=\E[%p1%d@,
il=\E[%p1%dL, il1=\E[L, ind=^J, rev=\E[7m,
rmcup=\E[2J\E[?47l\E8, rmir=\E[4l, rmso=\E[m, rmul=\E[m,
colors#8, cols#80, it#8, lines#24, pairs#64,
acsc=++\,\,--..00``aaffgghhiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
- clear=\E[H\E[J, cnorm=\E[?25h, cr=^M,
+ clear=\E[H\E[J, cnorm=\E[34h\E[?25h, cr=^M,
csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
cvvis=\E[34l, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
- dl1=\E[M, ed=\E[J, el=\E[K, enacs=\E(B\E)0, flash=\Eg,
- home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL,
- il1=\E[L, ind=^J, is2=\E)0, kbs=^H, kcub1=\EOD, kcud1=\EOB,
- kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP, kf10=\E[21~,
- kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR, kf4=\EOS,
- kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
- khome=\E[1~, kich1=\E[2~, kll=\E[4~, knp=\E[6~, kpp=\E[5~,
- nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O, rmir=\E[4l,
- rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m, rs2=\Ec, sc=\E7,
- sgr0=\E[m, smacs=^N, smir=\E[4h, smkx=\E[?1h\E=,
- smso=\E[3m, smul=\E[4m, tbc=\E[3g,
+ dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E(B\E)0,
+ flash=\Eg, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
+ il=\E[%p1%dL, il1=\E[L, ind=^J, is2=\E)0, kbs=^H, kcub1=\EOD,
+ kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA, kdch1=\E[3~, kf1=\EOP,
+ kf10=\E[21~, kf11=\E[23~, kf12=\E[24~, kf2=\EOQ, kf3=\EOR,
+ kf4=\EOS, kf5=\E[15~, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~,
+ kf9=\E[20~, khome=\E[1~, kich1=\E[2~, kll=\E[4~, knp=\E[6~,
+ kpp=\E[5~, nel=\EE, rc=\E8, rev=\E[7m, ri=\EM, rmacs=^O,
+ rmir=\E[4l, rmkx=\E[?1l\E>, rmso=\E[23m, rmul=\E[24m,
+ rs2=\Ec, sc=\E7, sgr0=\E[m, smacs=^N, smir=\E[4h,
+ smkx=\E[?1h\E=, smso=\E[3m, smul=\E[4m, tbc=\E[3g,
use=ecma+color,
screen-w|VT 100/ANSI X3.64 virtual terminal with 132 cols,
sc=\E7, sgr0=\E[m, smir=\E[4h, smkx=\E=, smso=\E[3m,
smul=\E[4m, tbc=\E[3g,
+# Francesco Potorti <F.Potorti@cnuce.cnr.it>:
+# NCSA telnet is one of the most used telnet clients for the Macintosh. It has
+# been maintained until recently by the National Center for Supercomputer
+# Applications, and it is feature rich, stable and free. It can be downloaded
+# from www.ncsa.edu. This terminfo description file is based on xterm-vt220,
+# xterm+sl, and the docs at NCSA. It works well.
+#
+# NCSA Telnet 2.6 for Macintosh in vt220 8-bit emulation mode
+# The terminal options should be set as follows:
+# Xterm sequences ON
+# use VT wrap mode ON
+# use Emacs arrow keys OFF
+# CTRL-COMND is Emacs meta ON
+# 8 bit mode ON
+# answerback string: "ncsa-vt220-8"
+# setup keys: all disabled
+#
+# Application mode is not used.
+#
+# Other special mappings:
+# Apple VT220
+# HELP Find
+# HOME Insert here
+# PAGEUP Remove
+# DEL Select
+# END Prev Screen
+# PAGEDOWN Next Screen
+#
+# Though it supports ANSI color, NCSA Telnet uses color to represent blinking
+# text.
+#
+# The status-line manipulation is a mapping of the xterm-compatible control
+# sequences for setting the window-title. So you must use tsl and fsl in
+# pairs, since the latter ends the string that is loaded to the window-title.
+ncsa-m|ncsa-vt220-8|NCSA Telnet 2.6 for Macintosh in vt220-8 mode,
+ am, hs, km, mir, msgr, xenl,
+ acsc=``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+ bel=^G, blink=\E[5m, bold=\E[1m, civis=\E[?25l,
+ clear=\E[H\E[2J, cnorm=\E[?25h, cr=^M,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM, dl1=\E[M,
+ dsl=\E]0;\007, ed=\E[J, el=\E[K, el1=\E[1K, enacs=\E)0,
+ flash=\E[?5h\E[?5l, fsl=^G, home=\E[H, ht=^I, hts=\EH,
+ ich=\E[%p1%d@, if=/usr/share/tabset/vt100,
+ il=\E[%p1%dL, il1=\E[L, ind=\n$<150*>,
+ is2=\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>, kbs=^H,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[4~, kend=\E[5~, kf1=\E[17~, kf10=\E[28~,
+ kf11=\E[29~, kf12=\E[31~, kf13=\E[32~, kf14=\E[33~,
+ kf15=\E[34~, kf2=\E[18, kf3=\E[19~, kf4=\E[20~, kf5=\E[21~,
+ kf6=\E23~, kf7=\E[24~, kf8=\E[25~, kf9=\E[26~, khlp=\E[1~,
+ khome=\E[2~, knp=\E[6~, kpp=\E[3~, mc4=\E[4i, mc5=\E[5i,
+ rc=\E8, rev=\E[7m, rf=/usr/share/tabset/vt100, ri=\EM,
+ rmacs=^O, rmam=\E[?7l, rmcup=\E[2J\E8, rmir=\E[4l,
+ rmso=\E[27m, rmul=\E[24m,
+ rs2=\E7\E[r\E[m\E[?7h\E[?1;4;6l\E[4l\E8\E>, sc=\E7,
+ sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p4%t;5%;%?%p1%p3%|%t;7%;m%?%p9%t\E(0%e\E(B%;,
+ sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smcup=\E7,
+ smir=\E[4h, smso=\E[7m, smul=\E[4m, tbc=\E[3g, tsl=\E]0;,
+ u6=\E[%i%d;%dR, u7=\E[6n, u8=\E[?62;1;6c, u9=\E[c,
+ncsa|NCSA Telnet 2.7 for Macintosh in vt220-8 mode,
+ use=ncsa-m, use=klone+color,
+ncsa-ns|NCSA Telnet 2.7 for Macintosh in vt220-8 mode,
+ hs@,
+ dsl@, fsl@, tsl@, use=ncsa,
+ncsa-m-ns|NCSA Telnet 2.6 for Macintosh in vt220-8 mode,
+ hs@,
+ dsl@, fsl@, tsl@, use=ncsa-m,
+# alternate -TD:
+# The documented function-key mapping refers to the Apple Extended Keyboard
+# (e.g., NCSA Telnet's F1 corresponds to a VT220 F6). We use the VT220-style
+# codes, however, since the numeric keypad (VT100) PF1-PF4 are available on
+# some keyboards and many applications require these as F1-F4.
+#
+ncsa-vt220|NCSA Telnet using vt220-compatible function keys,
+ kf1=\EOP, kf10=\E[21~, kf11=\E[23~, kf12=\E[24~,
+ kf13=\E[25~, kf14=\E[26~, kf15=\E[28~, kf16=\E[29~,
+ kf17=\E[31~, kf18=\E[32~, kf19=\E[33~, kf2=\EOQ,
+ kf20=\E[34~, kf3=\EOR, kf4=\EOS, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~,
+ use=ncsa,
+
#### Pilot Pro Palm-Top
#
# From: Jason Downs <downsj@downsj.com>, 15 Jun 1997 (Top Gun Telnet's author)
ind=^J, kbs=^H, kcub1=^H, kcud1=^J, knp=^L, kpp=^K, nel=\Em~\s,
rmso=\EB, smso=\Eb,
-######## WORKSTATION CONSOLES
+######## COMMERCIAL WORKSTATION CONSOLES
#
#### Alpha consoles
rmso=^No, rmul=^Nu, sc=^], sgr0=^N*, smcup=^Ot, smir=^Oi,
smso=^Oo, smul=^Ou, tsl=^Ol,
-#### NeXT Consoles
+#### NeXT consoles
#
# Use `glasstty' for the Workspace application
#
bel=^G, cr=^M, cub1=^H, cud1=^J, ht=^I, kbs=^H, kcub1=^H,
kcud1=^J, nel=^M^J,
-### Sony NEWS workstations
+#### Sony NEWS workstations
#
# (news-unk: this had :KB=news: -- esr)
#
# (nwp512-a: this had :TY=ascii: and the alias vt100-bm --esr)
nwp512-a|nwp514-a|news-a|news42|news40-a|sony vt100 emulator 42 line,
-
-
-s,
lines#42,
is2=\E[?7h\E[?1l\E[?3l\E7\E[1;42r\E8, use=news-old-unk,
#
#
# This ships with Sun's CDE in Solaris 2.5
+# Corrected Sun Aug 9 1998 by Alexander V. Lukyanov <lav@video.yars.free.net>
dtterm|CDE desktop terminal,
am, mir, msgr, xenl, xon,
colors#8, cols#80, it#8, lines#24, lm#0, pairs#64,
cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[%p1%dM,
dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, el1=\E[1K,
- flash=\E[?5h$<200>\E[?5l, home=\E[H, ht=^I, hts=\EH,
- ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L, ind=\ED,
- invis=\E[8m, is2=\E F\E>\E[?1l\E[?7h\E[?45l, kbs=^H,
- kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, home=\E[H,
+ ht=^I, hts=\EH, ich=\E[%p1%d@, il=\E[%p1%dL, il1=\E[L,
+ ind=\ED, invis=\E[8m, is2=\E F\E>\E[?1l\E[?7h\E[?45l,
+ kbs=^H, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kdch1=\E[3~, kf1=\E[11~, kf10=\E[21~, kf11=\E[23~,
kf12=\E[24~, kf13=\E[25~, kf14=\E[26~, kf15=\E[28~,
kf16=\E[29~, kf17=\E[31~, kf18=\E[32~, kf19=\E[33~,
sgr0=\E[m\017, smacs=^N, smam=\E[?7h, smir=\E[4h,
smso=\E[2;7m, smul=\E[4m, tbc=\E[3g,
-### Non-Unix Consoles
+#### Non-Unix Consoles
#
# Except for the "-emx" suffixes, these are as distributed with EMX 0.9b,
kich1=\0R, kll=\0O, knp=\0Q, kpp=\0I, nel=^M^J, rev=\E[7m,
sgr0=\E[0m,
+# Use this for cygwin32 (tested with beta 19.1)
+# underline is colored bright magenta
+# shifted kf1-kf12 are kf11-kf22
+cygwin|ansi emulation for cygwin32,
+ kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[3~, kend=\E[4~, kf1=\E[[A, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+ kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+ kf19=\E[33~, kf2=\E[[B, kf20=\E[34~, kf3=\E[[C, kf4=\E[[D,
+ kf5=\E[[E, kf6=\E[17~, kf7=\E[18~, kf8=\E[19~, kf9=\E[20~,
+ khome=\E[1~, kich1=\E[2~, knp=\E[6~, kpp=\E[5~, rmam@, smam@,
+ use=ansi.sys,
+
# This entry fits the Windows NT console when the _POSIX_TERM environment
# variable is set to 'on'. While the Windows NT POSIX console is seldom used,
# the Telnet client supplied with both the Windows for WorkGroup 3.11 TCP/IP
kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, khome=\Eh,
kich1=\EQ, kil1=\EL, kind=\ES, knp=\EU, kpp=\EV, kri=\ET,
krmir=\ER, rev=\E&dB, rmkx=\E&s0A, rmso=\E&d@, rmul=\E&d@,
- sgr=\E&d%'@'%?%p1%t%'B'%|%;%?%p2%t%'D'%|%;%?%p3%t%'B'%|%;%?%p4%t%'A'%|%;%c,
+ sgr=\E&d%{64}%?%p1%t%{66}%|%;%?%p2%t%{68}%|%;%?%p3%t%{66}%|%;%?%p4%t%{65}%|%;%c,
sgr0=\E&d@, smkx=\E&s1A, smso=\E&dB, smul=\E&dD,
# Note: no <home> on HPs since that homes to top of memory, not screen.
ked=\EJ, kel=\EK, khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL,
kind=\ES, knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, rev=\E&dB,
rmkx=\E&s0A,
- sgr=\E&d%'@'%?%p1%t%'B'%|%;%?%p2%t%'D'%|%;%?%p3%t%'B'%|%;%?%p4%t%'A'%|%;%?%p5%t%'H'%|%;%?%p6%t%'B'%|%;%c,
+ sgr=\E&d%{64}%?%p1%t%{66}%|%;%?%p2%t%{68}%|%;%?%p3%t%{66}%|%;%?%p4%t%{65}%|%;%?%p5%t%{72}%|%;%?%p6%t%{66}%|%;%c,
sgr0=\E&d@, smkx=\E&s1A, smul=\E&dD,
use=hpgeneric,
# You should use this terminal at 4800 baud or less.
acsc@,
pln=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d0L%?%ga%!%t %;%p2%s,
rmacs@,
- sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%'@'%+%e%'S'%;%e%?%ga%t%ga%'@'%+%e%'@'%;%;%c,
+ sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%{64}%+%e%{83}%;%e%?%ga%t%ga%{64}%+%e%{64}%;%;%c,
sgr0=\E&d@, smacs@,
use=hp+labels, use=scrhp,
pfloc=\E&f1a%p1%dk0d%p2%l%dL%p2%s,
pfx=\E&f2a%p1%dk0d%p2%l%dL%p2%s, rev=\E&dB, ri=\ET,
rmacs=^O, rmir=\ER, rmso=\E&d@, rmul=\E&d@, rs1=\Eg,
- sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%'@'%+%e%'S'%;%e%?%ga%t%ga%'@'%+%e%'@'%;%;%c%?%p9%t\016%e\017%;,
+ sgr=\E&d%{0}%Pa%?%p4%t%{1}%ga%+%Pa%;%?%p1%p3%|%p6%|%t%{2}%ga%+%Pa%;%?%p2%p6%|%t%{4}%ga%+%Pa%;%?%p1%p5%|%t%{8}%ga%+%Pa%;%?%p7%t%?%ga%ts%ga%{64}%+%e%{83}%;%e%?%ga%t%ga%{64}%+%e%{64}%;%;%c%?%p9%t\016%e\017%;,
sgr0=\E&d@\017, smacs=^N, smir=\EQ, smso=\E&dJ, smul=\E&dD,
tbc=\E3,
use=newhpkeyboard,
lh#1, lm#48, lw#8, nlab#8,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, khome=\Eh,
kind=\ET, kll=\EF, kri=\ES,
- pln=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d3L%?%ga%!%t%{32}%c%;%p2%s\E%'o'%p1%+%c\r,
+ pln=\E&f0a%p1%dk%p2%l%Pa%?%ga%t%ga%d%e1%;d3L%?%ga%!%t%{32}%c%;%p2%s\E%{111}%p1%+%c\r,
smln=\E&jB,
use=hp2621,
pfx=\E&f2a%p1%dk%p2%l%dL%p2%s,
pln=\E&f%p1%dk%p2%l%dd0L%p2%s, rmir=\ER, rmkx=\E&s0A,
rmln=\E&j@, rmso=\E&d@, rmul=\E&d@,
- sgr=\E&d%?%p7%t%'s'%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%'@'%+%c%?%p9%t%'\016'%c%e%'\017'%c%;,
+ sgr=\E&d%?%p7%t%{115}%c%;%p1%p3%|%p6%|%{2}%*%p2%{4}%*%+%p4%+%p5%{8}%*%+%{64}%+%c%?%p9%t%'\016'%c%e%'\017'%c%;,
sgr0=\E&d@, smir=\EQ, smkx=\E&s1A, smln=\E&jB, smso=\E&dB,
smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY,
sgr0=\EG0$<10/>, smir=\Eq, smso=\EG4$<10/>,
smul=\EG8$<10/>, tbc=\E0, vpa=\E[%p1%{32}%+%c,
# (hp70092: added empty <acsc> to avoid warnings re <smacs>/<rmacs> --esr)
-hp70092|hp70092a|hp70092A|HP 700/92,
+hp70092|hp70092a|hp70092A|70092|HP 700/92,
am, da, db, xhp,
cols#80, lh#2, lines#24, lm#0, lw#8, nlab#8,
- acsc=, bel=^G, blink=\E&dA, bold=\E&dB, cbt=\Ei,
- clear=\E&a0y0C\EJ, cr=^M, cub1=^H, cud1=\EB, cuf1=\EC,
- cup=\E&a%p1%dy%p2%dC, cuu1=\EA, dch1=\EP, dim=\E&dH,
- dl1=\EM, el=\EK, hpa=\E&a%p1%dC, ht=^I, hts=\E1, il1=\EL,
- kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED, kcud1=\EB, kcuf1=\EC,
- kcuu1=\EA, kdch1=\EP, kdl1=\EM, ked=\EJ, kel=\EK, kf1=\Ep,
- kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et, kf6=\Eu, kf7=\Ev, kf8=\Ew,
- khome=\Eh, khts=\E1, kich1=\EQ, kil1=\EL, kind=\ES, kll=\EF,
- knp=\EU, kpp=\EV, kri=\ET, krmir=\ER, ktbc=\E3, rev=\E&dB,
- ri=\ET, rmacs=^O, rmir=\ER, rmkx=\E&s0A, rmln=\E&j@,
- rmso=\E&d@, rmul=\E&d@, sgr0=\E&d@, smacs=^N, smir=\EQ,
- smkx=\E&s1A, smln=\E&jB, smso=\E&dJ, smul=\E&dD, tbc=\E3,
- vpa=\E&a%p1%dY,
+ acsc=0cjgktlrmfn/q\,t5u6v8w7x., bel=^G, blink=\E&dA,
+ bold=\E&dB, cbt=\Ei, clear=\E&a0y0C\EJ, cr=^M, cub1=^H,
+ cud1=\EB, cuf1=\EC, cup=\E&a%p1%dy%p2%dC, cuu1=\EA,
+ dch1=\EP, dim=\E&dH, dl1=\EM, el=\EK, hpa=\E&a%p1%dC, ht=^I,
+ hts=\E1, il1=\EL, kbs=^H, kclr=\EJ, kctab=\E2, kcub1=\ED,
+ kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EP, kdl1=\EM,
+ ked=\EJ, kel=\EK, kf1=\Ep, kf2=\Eq, kf3=\Er, kf4=\Es, kf5=\Et,
+ kf6=\Eu, kf7=\Ev, kf8=\Ew, khome=\Eh, khts=\E1, kich1=\EQ,
+ kil1=\EL, kind=\ES, kll=\EF, knp=\EU, kpp=\EV, kri=\ET,
+ krmir=\ER, ktbc=\E3, rev=\E&dB, ri=\ET, rmacs=^O, rmir=\ER,
+ rmkx=\E&s0A, rmln=\E&j@, rmso=\E&d@, rmul=\E&d@,
+ sgr0=\E&d@, smacs=^N, smir=\EQ, smkx=\E&s1A, smln=\E&jB,
+ smso=\E&dJ, smul=\E&dD, tbc=\E3, vpa=\E&a%p1%dY,
bobcat|sbobcat|HP 9000 model 300 console,
am, da, db, mir, xhp,
# `diagnostic feature' that sending them a ^G while pin 22 (`Ring Indicator')
# was being held to ground would trigger a send of the top line on the screen.
# A quick fix might be to drop back to a cheesy 4-wire cable with pin 22
-# hanging in the air.
-#
+# hanging in the air. (Thanks to Eric Fischer, <eric@fudge.uchicago.edu>,
+# for clearing up this point.)
adm1a|adm1|lsi adm1a,
am,
use=adm+sgr,
# From: Andrew Scott Beals <bandy@lll-crg.ARPA>
# Corrected by Olaf Siebert <rhialto@polder.ubc.kun.nl>, 11 May 1995
+# Supervisor mode info by Ari Wuolle, <awuolle@delta.hut.fi>, 27 Aug 1996
# (adm12: removed obsolete ":kn:ma=j^Jk^P^K^Pl ^R^L^L :". This formerly had
# <is2>=\Eq but that looked wrong; this <is2> is from Dave Yost <esquire!yost>
# via BRL. That entry asserted <xmc#1>, but I've left that out because
# neither earlier nor later ADMSs have it -- esr)
+#
+# You will need to get into the supervisor setup before you can set
+# baudrate etc. for your ADM-12+. Press Shift-Ctrl-Setup and you should
+# see a lot more setup options.
+#
+# While in supervisor setup you can also use following codes:
+#
+# Ctrl-P Personality character selections (configure for example what
+# arrow keys send, if I recall correctly)
+# Ctrl-T tabs 1-80 use left&right to move and up to set and
+# Ctrl-V tabs 81-158 down to clear tab. Shift-Ctrl-M sets right margin at cursor
+# Ctrl-B Binary setup (probably not needed. I think that everything can
+# be set using normal setup)
+# Ctrl-A Answerback mode (enter answerback message)
+# Ctrl-U User friendly mode (normal setup)
+# Ctrl-D Defaults entire setup and function keys from EPROM tables
+# Ctrl-S Save both setup and functions keys. Takes from 6 to 10 seconds.
+# Ctrl-R Reads both setup and functions keys from NVM.
+# Shift-Ctrl-X Unlock keyboard and cancel received X-OFF status
+#
+# ADM-12+ supports hardware handshaking, but it is DTR/CTS as opposed to
+# RTS/CTS used nowadays with virtually every modem and computer. 19200
+# bps works fine with hardware flow control.
+#
+# The following null-modem cable should fix this and enable you to use
+# RTS/CTS handshaking (which Linux supports, use CRTSCTS setting). Also
+# set ADM-12+ for DTR handshaking from supervisor setup.
+#
+# PC Serial ADM-12+
+# -------- -------
+# 2 - 3
+# 3 - 2
+# 4 - 5
+# 5 - 20
+# 6,8 - 4
+# 7 - 7
+# 20 - 6,8
+#
adm12|lsi adm12,
am, mir,
cols#80, it#8, lines#24,
#### Prime
#
-# Yes, Prime makes terminals. These entries were posted by Kevin J. Cummings
-# <cummings@primerd.Prime.COM> on 14 Dec 1992 and lightly edited by esr.
+# Yes, Prime made terminals. These entries were posted by Kevin J. Cummings
+# <cummings@primerd.prime.com> on 14 Dec 1992 and lightly edited by esr.
+# Prime merged with ComputerVision in the late 1980s; you can reach them at:
+#
+# ComputerVision Services
+# 500 Old Connecticut Path
+# Framingham, Mass.
#
# Standout mode is dim reverse-video.
cols#80, it#8, lines#24,
cbt=\E[Z, clear=\E?, cr=^M, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=\ED, cuf=\E[%p1%dC, cuf1=\E[C,
- cup=\E0%p1%'!'%+%c%p2%'!'%+%c, cuu=\E[%p1%dA, cuu1=\EM,
- dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[M, ed=\E[J\E[r,
- el=\E[K\E[t, flash=\E$$<200/>\E$P, home=\E$B, ht=^I,
- il1=\E[L\E[t, ind=^J, kbs=^H, kcub1=\E[D, kcud1=\E[B,
- kcuf1=\E[C, kcuu1=\E[A, khome=\E$A, nel=^M^J, rmcup=,
- rmir=\E[4l, rmkx=\E[>13l, rmso=\E[m, rmul=\E[m, sgr0=\E[m,
+ cup=\E0%p1%{33}%+%c%p2%{33}%+%c, cuu=\E[%p1%dA,
+ cuu1=\EM, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m, dl=\E[M,
+ ed=\E[J\E[r, el=\E[K\E[t, flash=\E$$<200/>\E$P,
+ home=\E$B, ht=^I, il1=\E[L\E[t, ind=^J, kbs=^H, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, khome=\E$A, nel=^M^J,
+ rmcup=, rmir=\E[4l, rmkx=\E[>13l, rmso=\E[m, rmul=\E[m,
+ sgr0=\E[m,
smcup=\E[>1l\E[>2l\E[>16l\E[4l\E[>9l\E[20l\E[>3l\E[>7h\E[>12l\E[1Q,
smir=\E[4h, smkx=\E[>13h, smso=\E[2;7m, smul=\E[4m,
pt100w|pt200w|wrenw|fenixw|prime pt100/pt200 in 132-column mode,
# model is the qvt520, which is vt420-compatible.
#
# There are some ancient printing Qume terminals under `Daisy Wheel Printers'
+#
+# If you inherit a Qume without docs, try Ctrl-Shift-Setup to enter its
+# setup mode. Shift-s should be a configuration save to NVRAM.
qvt101|qvt108|qume qvt 101 and QVT 108,
xmc#1, use=qvt101+,
kf6=^AF\r, kf7=^AG\r, kf8=^AH\r, kf9=^AI\r, khome=^^,
kich1=\EQ, kil1=\EE, lf0=F1, lf1=F2, lf10=F11, lf2=F3, lf3=F4,
lf4=F5, lf5=F6, lf6=F7, lf7=F8, lf8=F9, lf9=F10,
- pfkey=\E|%p1%'1'%+%c%p2%s\031, ri=\Ej, tbc=\E3, tsl=\Ef, use=adm+sgr,
+ pfkey=\E|%p1%{49}%+%c%p2%s\031, ri=\Ej, tbc=\E3, tsl=\Ef, use=adm+sgr,
# TVI925 DIP switches. In each of these, D = Down and U = Up,
#
# padding is needed, but adapted from the tvi920c termcap. The <smso> and
# <smul> strings are klutzy, but at least use no screen space.
# (tvipt: removed obsolete ":ma=^Kk^Ll^R^L:". I wish we knew <rmam>,
-# its absence means <smam>=\Ev isn't save to use. -- esr)
+# its absence means <smam>=\Ev isn't safe to use. -- esr)
# From: Gene Rochlin <armsis@amber.berkeley.edu> 9/19/84.
# The <ed>/<kf0>/<kf1>/<khome>/<mc4>, and <mc5> caps are from BRL, which says:
# F1 and F2 should be programmed as ^A and ^B; required for UNIFY.
blink=\EG2, bold=\EG\,, cbt=\EI, civis=\E.0, clear=^Z,
cnorm=\E.3, cr=^M, csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD,
cub1=^H, cud=\E[%p1%dB, cud1=^V, cuf=\E[%p1%dC, cuf1=^L,
- cup=\E=%p1%' '%+%c%p2%' '%+%c, cuu=\E[%p1%dA, cuu1=^K,
- cvvis=\E.2, dch=\E[%p1%dP, dch1=\EW, dim=\EGp,
+ cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu=\E[%p1%dA,
+ cuu1=^K, cvvis=\E.2, dch=\E[%p1%dP, dch1=\EW, dim=\EGp,
dl=\E[%p1%dM, dl1=\ER, dsl=\E_30\r, ech=\E[%p1%d@, ed=\EY,
el=\ET, flash=\Eb$<15>\Ed, fsl=^M, home=^^, ht=^I, hts=\E1,
ich=\E[%p1%d@, if=/usr/share/tabset/stdcrt,
kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, ll=\E[25;1H,
mc0=\E[0;0i, mc4=\Ea, mc5=\E`, nel=^M^J,
- pfkey=\E|%p1%'0'%+%c3%p2%s\031,
- pfloc=\E|%p1%'0'%+%c2%p2%s\031,
- pfx=\E|%p1%'0'%+%c1%p2%s\031,
- pln=\E_%p1%'?'%+%c%p2%s\r, prot=\E&,
+ pfkey=\E|%p1%{48}%+%c3%p2%s\031,
+ pfloc=\E|%p1%{48}%+%c2%p2%s\031,
+ pfx=\E|%p1%{48}%+%c1%p2%s\031,
+ pln=\E_%p1%{63}%+%c%p2%s\r, prot=\E&,
rep=\E[%p2%db%p1%c, rev=\EG4,
rf=/usr/share/tabset/stdcrt, ri=\Ej, rin=\E[%p1%dT,
rmacs=\E%, rmam=\E[=7l, rmcup=\E.3\Er\E[1;25r\E[25;0H,
vi55|Visual 55,
am, mir, msgr,
cols#80, it#8, lines#24,
- clear=\Ev, csr=\E_%p1%'A'%+%c%p2%'A'%+%c, cub1=^H,
+ clear=\Ev, csr=\E_%p1%{65}%+%c%p2%{65}%+%c, cub1=^H,
cud1=^J, cuf1=\EC, cup=\EY%p1%{32}%+%c%p2%{32}%+%c,
cuu1=\EA, dch1=\Ew, dl1=\EM, ed=\EJ, el=\EK, home=\EH, ht=^I,
il1=\EL, is2=\Ev\E_AX\Eb\EW\E9P\ET, kbs=^H, kcub1=\ED,
kf1=^A@\r, kf2=^AA\r, kf3=^AB\r, kf4=^AC\r, kf5=^AD\r,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, krpl=\Er, ll=^^^K, mc0=\EP, mc4=^T,
- mc5=^X, nel=^M^J, pfx=\Ez%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\E`7\E), ri=\Ej$<3>,
+ mc5=^X, nel=^M^J, pfx=\Ez%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E`7\E), ri=\Ej$<3>,
rmacs=\EH^C, rmir=\Er, rmln=\EA11, rmso=\E(,
sgr=%?%p1%p5%p8%|%|%t\E`7\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\E(\EH\003, smacs=\EH^B, smir=\Eq, smln=\EA10,
ma@, xmc#1,
blink=\EG2, dim=\EGp, prot=\EG0\E), rmacs=\EG0\EH\003,
rmcup=\EG0, rmso=\EG0,
- sgr=\EG%'0'%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
+ sgr=\EG%{48}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\EG0\E(\EH\003, smacs=\EG0\EH\002, smcup=,
smso=\EG4, use=wy30,
use=adm+sgr,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er,
ll=^^^K, mc0=\EP, mc4=^T, mc5=^X, nel=^M^J,
- pfx=\Ez%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\E`7\E), rev=\E`6\E),
+ pfx=\Ez%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E`7\E), rev=\E`6\E),
ri=\Ej, rmacs=\EH^C, rmir=\Er, rmln=\EA11, rmso=\E(,
sgr=%?%p1%p3%|%t\E`6\E)%e%p5%p8%|%t\E`7\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\E(\EH\003, smacs=\EH^B, smir=\Eq, smln=\EA10,
ma@, xmc#1,
blink=\EG2, dim=\EGp, prot=\EG0\E), rev=\EG4,
rmacs=\EG0\EH\003, rmcup=\EG0, rmso=\EG0,
- sgr=\EG%'0'%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
+ sgr=\EG%{48}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\EG0\E(\EH\003, smacs=\EG0\EH\002, smcup=,
smso=\EGt, use=wy50,
use=adm+sgr,
wy50-wvb|wyse50-wvb|wyse 50 132-column visible bell,
bel@,
use=wy50-w,
+
#
# The Wyse 350 is a Wyse 50 with color.
# Unfortunately this means that it has magic cookies.
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er,
ll=^^^K, mc0=\EP, mc4=^T, mc5=^X, nel=^M^J, oc=\E%?, op=\EG0,
- pfx=\Ez%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\EG0\E), ri=\Ej,
+ pfx=\Ez%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\EG0\E), ri=\Ej,
rmacs=\EG0\EH\003, rmir=\Er, rmln=\EA11, setb=,
- setf=%?%p1%{0}%=%t%{76}%e%p1%{1}%=%t%{64}%e%p1%{2}%=%t%{8}%e%p1%{3}%=%t%{72}%e%p1%{4}%=%t%{4}%e%p1%{5}%=%t%{68}%e%p1%{6}%=%t%{12}%e%p1%{7}%=%t%{0}%;%PC\EG%gC%gA%+%'0'%+%c,
- sgr=%{0}%?%p4%t%{2}%|%;%?%p7%t%{1}%|%;%PA\EG%?%gC%t%gC%e%{0}%?%p1%t%{4}%|%;%?%p2%t%{8}%|%;%?%p3%t%{4}%|%;%?%p5%t%{64}%|%;%;%gA%+%'0'%+%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
+ setf=%?%p1%{0}%=%t%{76}%e%p1%{1}%=%t%{64}%e%p1%{2}%=%t%{8}%e%p1%{3}%=%t%{72}%e%p1%{4}%=%t%{4}%e%p1%{5}%=%t%{68}%e%p1%{6}%=%t%{12}%e%p1%{7}%=%t%{0}%;%PC\EG%gC%gA%+%{48}%+%c,
+ sgr=%{0}%?%p4%t%{2}%|%;%?%p7%t%{1}%|%;%PA\EG%?%gC%t%gC%e%{0}%?%p1%t%{4}%|%;%?%p2%t%{8}%|%;%?%p3%t%{4}%|%;%?%p5%t%{64}%|%;%;%gA%+%{48}%+%c%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;,
sgr0=\EG0\E(\EH\003%{0}%PA%{0}%PC, smacs=\EG0\EH\002,
smir=\Eq, smln=\EA10, tbc=\E0, tsl=\EF,
use=adm+sgr,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K,
mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<3>,
- pfloc=\EZ2%p1%'?'%+%c%p2%s\177,
- pfx=\EZ1%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\E), ri=\Ej$<2>,
+ pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
+ pfx=\EZ1%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<2>,
rmacs=\EcD, rmam=\Ed., rmcup=\Ew1, rmir=\Er, rmln=\EA11,
rmxon=\Ec20, rs1=\E~!\E~4$<30>, rs2=\EeF\E`\:$<70>,
rs3=\EwG\Ee($<100>,
- sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%'0'%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
+ sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew0, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21,
tbc=\E0, tsl=\EF,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=\E{^K,
mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<3>,
- pfloc=\EZ2%p1%'?'%+%c%p2%s\177,
- pfx=\EZ1%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\E), ri=\Ej$<7>,
+ pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
+ pfx=\EZ1%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<7>,
rmacs=\EcD, rmam=\Ed., rmclk=\E`c, rmcup=\Ew1, rmir=\Er,
rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<150>,
rs2=\EeG$<150>, rs3=\EwG\Ee($<200>,
- sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%'0'%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
+ sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew0, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21,
tbc=\E0, tsl=\EF,
wy99gt-w-vb|wy99gt-wvb|wyse99gt-wvb|Wyse 99gt 132-column visible bell,
bel@,
use=wy99gt-w,
+
+# Can't set tabs! Other bugs (ANSI mode only):
+# - can't redefine function keys (anyway, key redefinition in ANSI mode
+# is too much complex to be described);
+# - meta key can't be described (the terminal forgets it when reset);
+# The xon-xoff handshaking can't be disabled while in ansi personality, so
+# emacs can't work at speed greater than 9600 baud. No padding is needed at
+# this speed.
+# dch1 has been commented out because it causes annoying glittering when
+# vi deletes one character at the beginning of a line with tabs in it.
+# dch makes sysgen(1M) have a horrible behaviour when deleting
+# a screen and makes screen(1) behave badly, so it is disabled too. The nice
+# thing is that vi goes crazy if smir-rmir are present and both dch-dch1 are
+# not, so smir and rmir are commented out as well.
+# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
+wy99-ansi|Wyse WY-99GT in ansi mode (int'l PC keyboard),
+ am, km, mc5i, mir, msgr, xenl,
+ cols#80, it#8, lines#25, vt#3,
+ acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx{{||}}~~,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
+ clear=\E[H\E[J$<200>, cnorm=\E[34h\E[?25h, cr=^M,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD$<1>,
+ cub1=\010$<1>, cud=\E[%p1%dB, cud1=\ED,
+ cuf=\E[%p1%dC$<1>, cuf1=\E[C$<1>,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\EM,
+ cvvis=\E[34l\E[?25h, dim=\E[2m, dl=\E[%p1%dM, dl1=\E[M,
+ ech=\E[%p1%dX, ed=\E[J$<8*>, el=\E[K$<1>, el1=\E[1K$<1>,
+ enacs=\E)0, flash=\E[?5h$<30/>\E[?5l, home=\E[H,
+ hpa=\E[%i%p1%dG, ht=^I, ich=\E[%p1%d@, il=\E[%p1%dL,
+ il1=\E[L, ind=\n$<1>, invis=\E[8m,
+ is2=\E7\E[1r\E8\E[2;3;4;13;20;34;39;36l\E[12;16;34h\E[?1;3;4;5;10;18l\E[?7;8;25h\E>\E[?5W\E(B\017\E[4i,
+ kbs=^H, kcbt=\E[z, kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC,
+ kcuu1=\EOA, kf1=\EOP, kf10=\E[21~, kf11=\E[23~,
+ kf12=\E[24~, kf17=\E[K, kf18=\E[31~, kf19=\E[32~, kf2=\EOQ,
+ kf20=\E[33~, kf21=\E[34~, kf22=\E[35~, kf23=\E[1~,
+ kf24=\E[2~, kf3=\EOR, kf4=\EOS, kf5=\E[M, kf6=\E[17~,
+ kf7=\E[18~, kf8=\E[19~, kf9=\E[20~, ll=\E[24E, mc0=\E[?19h,
+ mc4=\E[4i, mc5=\E[5i, nel=\EE, prot=\E[1"q, rc=\E8,
+ rev=\E[7m, ri=\EM, rmacs=^O, rmam=\E[?7l, rmir=\E[4l,
+ rmkx=\E[?1l, rmso=\E[27m, rmul=\E[24m,
+ rs2=\E[61"p\E[40h\E[?6l\E[1r\E[2;3;4;13;20;34;39;36l\E[12;16;34h\E[?1;3;4;5;10;18l\E[?7;8;25h\E>\E[?5W\E(B\017\E[24E\E[4i,
+ sc=\E7,
+ sgr=\E[0%?%p6%t;1%;%?%p2%t;4%;%?%p1%p3%O%t;7%;%?%p4%t;5%;%?%p5%t;2%;%?%p7%t;8%;m\E[%?%p8%t1%;"q%?%p9%t\016%e\017%;,
+ sgr0=\E[m\017\E["q, smacs=^N, smam=\E[?7h, smir=\E[4h,
+ smkx=\E[?1h, smso=\E[7m, smul=\E[4m, vpa=\E[%i%p1%dd,
+
+# This is the american terminal. Here tabs work fine.
+# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
+wy99a-ansi|Wyse WY-99GT in ansi mode (US PC keyboard),
+ hts=\EH, is3=\E[?5l, rs3=\E[?5l, tbc=\E[3g,
+ use=wy99-ansi,
+
+# This terminal (firmware version 02) has a lot of bugs:
+# - can't set tabs;
+# - other bugs in ANSI modes (see above).
+# This description disables handshaking when using cup. This is because
+# GNU emacs doesn't like Xon-Xoff handshaking. This means the terminal
+# cannot be used at speeds greater than 9600 baud, because at greater
+# speeds handshaking is needed even for character sending. If you use
+# DTR handshaking, you can use even greater speeds.
+# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
+wy99f|wy99fgt|wy-99fgt|Wyse WY-99GT (int'l PC keyboard),
+ am, bw, hs, km, mc5i, mir, msgr, xon,
+ cols#80, it#8, lines#25, wsl#46,
+ acsc='x+y.wI~_vj(k'l&m%n)o9q*s8t-u.v\,w+x=, bel=^G,
+ blink=\EG2, cbt=\EI, civis=\E`0, clear=\E'\E(\032,
+ cnorm=\E`4\E`1, cr=^M, cub1=^H, cud1=\Ej, cuf1=^L,
+ cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
+ cvvis=\E`2\E`1, dch1=\EW, dim=\EGp, dl1=\ER, dsl=\EF\r,
+ ed=\EY$<8*>, el=\ET$<8>, enacs=\Ec@1J$<2000>,
+ flash=\E\^1$<30/>\E\^0, fsl=^M, home=^^, ht=^I, il1=\EE,
+ ind=^J, invis=\EG3,
+ is2=\Eu\Ee6\EC\EDF\Ec21\Ec31\Ec62\Ec72\Ee;\016\E'\EeL\E`9\E\^0\E`1\E`4\Ee.\E`\:\Ee1\EG0\E(\Ed/\Ee4\Ed*\EO\E`I\Er\Ee"\EcD\024,
+ ka1=^^, ka3=\EJ, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H,
+ kcud1=^J, kcuf1=^L, kcuu1=^K, kf1=^A@\r, kf10=^AI\r,
+ kf11=^AJ\r, kf12=^AK\r, kf13=^A`\r, kf14=^Aa\r, kf15=^Ab\r,
+ kf16=^Ac\r, kf17=^Ad\r, kf18=^Ae\r, kf19=^Af\r, kf2=^AA\r,
+ kf20=^Ag\r, kf21=^Ah\r, kf22=^Ai\r, kf23=^Aj\r, kf24=^Ak\r,
+ kf3=^AB\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
+ kf8=^AG\r, kf9=^AH\r, kprt=\EP, mc0=\EP, mc4=^T, mc5=\Ed#,
+ nel=^_, prot=\E), rev=\EG4, ri=\Ej, rmacs=\EcD, rmam=\Ed.,
+ rmcup=\Ec21\Ec31, rmir=\Er, rmso=\EG0, rmxon=\Ec20\Ec30,
+ rs2=\Eu\E~4\Ee6\EC\EDF\Ec21\Ec31\Ec62\Ec72\Ee;\016\E'\EeL\E`9\E\^0\E`1\E`4\Ee.\E`\:\Ee)\Ew\EwG\Ew0\Ee1\EG0\E(\Ed/\Ee4\Ed*\EO\E`I\Er\Ee"\Ec@0B\EcD\024,
+ sgr=\E(\EG%{48}%?%p1%p3%O%t%{4}%+%;%?%p2%t%{8}%+%;%?%p4%t%{2}%+%;%?%p5%t%{64}%+%;%?%p7%t%{1}%+%;%c%?%p8%t\E)%;%?%p9%t\EcE%e\EcD%;,
+ sgr0=\E(\EG0, smacs=\EcE, smam=\Ed/, smcup=\Ec20\Ec30,
+ smir=\Eq, smso=\EG4, smxon=\Ec21\Ec31, tsl=\EF,
+
+# This is the american terminal. Here tabs work.
+# From: Francesco Potorti` <F.Potorti@cnuce.cnr.it>, 24 Aug 1998
+wy99fa|wy99fgta|wy-99fgta|Wyse WY-99GT (US PC keyboard),
+ hts=\E1, tbc=\E0,
+ use=wy99f,
+
#
# The Wyse 160 is combination of the WY-60 and the WY-99gt.
# The reset strings are slow and the pad times very depending
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\EQ,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=\E{^K,
mc0=\EP, mc4=^T, mc5=\Ed#, nel=\r\n$<1>,
- pfloc=\EZ2%p1%'?'%+%c%p2%s\177,
- pfx=\EZ1%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\E), ri=\Ej$<1>,
+ pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
+ pfx=\EZ1%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<1>,
rmacs=\EcD, rmam=\Ed., rmclk=\E`c, rmcup=\Ew0, rmir=\Er,
rmln=\EA11, rmxon=\Ec20, rs1=\E~!\E~4$<70>,
rs2=\E`\:$<100>, rs3=\EwG\Ee($<140>,
- sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%'0'%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
+ sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew1, smir=\Eq, smln=\EA10, smso=\EGt, smxon=\Ec21,
tbc=\E0, tsl=\EF,
kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq,
kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er, ll=^^^K,
mc0=\EP, mc4=^T, mc5=\Ed#,
- pfloc=\EZ2%p1%'?'%+%c%p2%s\177,
- pfx=\EZ1%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\E), ri=\Ej$<2>,
+ pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
+ pfx=\EZ1%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<2>,
rmacs=\EcD, rmam=\Ed., rmcup=\Ew0, rmir=\Er, rmln=\EA11,
rs1=\E~!\E~4$<30>, rs2=\EeF\E`\:$<70>,
rs3=\EwG\Ee($<100>,
- sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%'0'%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
+ sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EcE%e\EcD%;\EG%{48}%?%p2%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EcE, smam=\Ed/,
smcup=\Ew1, smir=\Eq, smln=\EA10, smso=\EGt, tbc=\E0,
tsl=\EF,
att630-24|5630-24|5630DMD-24|630MTG-24|AT&T 630 windowing terminal 24 lines,
lines#24, use=att630,
+# This is the att700 entry for 700 native emulation of the AT&T 700
+# terminal. Comments are relative to changes from the 605V2 entry and
+# att730 on which the entry is based. Comments show the terminfo
+# capability name, termcap name, and description.
+#
+# Here is what's going onm in the init string:
+# ESC [ 50;4| set 700 native mode (really is 605)
+# x ESC [ 56;ps| set lines to 24: ps=0; 40: ps=1 (plus status line)
+# ESC [ 53;0| set GenFlow to Xon/Xoff
+# ESC [ 8 ;0| set CR on NL
+# x ESC [ ? 3 l/h set workspace: 80 col(l); 132 col(h)
+# ESC [ ? 4 l jump scroll
+# ESC [ ? 5 l/h video: normal (l); reverse (h)
+# ESC [ ?13 l Labels on
+# ESC [ ?15 l parity check = no
+# ESC [ 13 l monitor mode off
+# ESC [ 20 l LF on NL (not CRLF on NL)
+# ESC [ ? 7 h autowrap on
+# ESC [ 12 h local echo off
+# ESC ( B GO = ASCII
+# ESC ) 0 G1 = Special Char & Line Drawing
+# ESC [ ? 31 l Set 7 bit controls
+#
+# Note: Most terminals, especially the 600 family use Reverse Video for
+# standout mode. DEC also uses reverse video. The VT100 uses bold in addition
+# Assume we should stay with reverse video for 70.. However, the 605V2 exits
+# standout mode with \E[m (all normal attributes). The 730 entry simply
+# exits reverse video which would leave other current attributes intact. It
+# was assumed the 730 entry to be more correct so rmso has changed. The
+# 605V2 has no sequences to turn individual attributes off, thus its setting
+# and the rmso/smso settings from the 730.
+#
+# Note: For the same reason as above in rmso I changed exit under-score mode
+# to specifically turn off underscore, rather than return to all normal
+# attributes
+#
+# Note: The following pkey_xmit is taken from the 605V2 which contained the
+# capability as pfxl. It was changed here to pfx since pfxl
+# will only compile successfully with Unix 4.0 tic. Also note that pfx only
+# allows strings to be parameters and label values must be programmed as
+# constant strings. Supposedly the pfxl of Version 4.0 allows both labels
+# and strings to be parameters. The 605V2 pfx entry should be examined later
+# in this regard. For reference the 730 pfxl entry is shown here for comparison
+# 730 pfx entry:
+# pfxl=\E[%?%p1%{25}%<%t%p1%e%p1%{24}%-%;%d;%p2%l%02d%?%p1%{25}%<%tq\s\s\s
+# SYS\s\s\s\s\sF%p1%:-2d\s\s%e;0;3q%;%p2%s,
+#
+# (for 4.0 tic)
+# pfxl=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s,
+#
+# (for <4.0 tic)
+# pfx=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s,
+#
+# From the AT&T 705 Multi-tasking terminal user's guide Page 8-8,8-9
+#
+# Port1 Interface
+#
+# modular 10 pin Connector
+# Left side Right side
+# Pin 1 2 3 4 5 6 7 8 9 10
+#
+# Key (notch) at bottom
+#
+# Pin 1 DSR
+# 3 DCD
+# 4 DTR
+# 5 Sig Ground
+# 6 RD
+# 7 SD
+# 8 CTS
+# 9 RTS
+# 10 Frame Ground
+#
+# The manual is 189 pages and is loaded with details about the escape codes,
+# etc..... Available from AT&T CIC 800-432-6600...
+# ask for Document number 999-300-660..
+#
+att700|AT&T 700 24x80 column display w/102key keyboard,
+ am, eslok, hs, mir, msgr, xenl, xon,
+ cols#80, it#8, lh#2, lines#24, lw#8, nlab#8, wsl#80,
+ acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
+ bel=^G, blink=\E[5m, bold=\E[1m, cbt=\E[Z, civis=\E[?25l,
+ clear=\E[H\E[J, cnorm=\E[?25h\E[?12l, cr=^M,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD, cub1=^H,
+ cud=\E[%p1%dB, cud1=\E[B, cuf=\E[%p1%dC, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu=\E[%p1%dA, cuu1=\E[A,
+ cvvis=\E[?12;25h, dch=\E[%p1%dP, dch1=\E[P, dim=\E[2m,
+ dl=\E[%p1%dM, dl1=\E[M, ed=\E[J, el=\E[K, el1=\E[1K,
+ enacs=\E(B\E)0, flash=\E[?5h$<200>\E[?5l, fln=4\,4,
+ fsl=\E8, home=\E[H, ht=^I, hts=\EH, ich=\E[%p1%d@,
+ il=\E[%p1%dL, il1=\E[L, ind=\ED, invis=\E[8m,
+ is2=\E[50;4|\E[53;0|\E[8;0|\E[?4;13;15l\E[13;20l\E[?7h\E[12h\E(B\E)0\E[?31l\E[0m\017,
+ is3=\E(B\E)0, kLFT=\E[ A, kRIT=\E[ @, kbs=^H, kcbt=\E[Z,
+ kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\E[P, kdl1=\E[M, kend=\E[24;1H, kf1=\EOc, kf10=\ENp,
+ kf11=\ENq, kf12=\ENr, kf13=\ENs, kf14=\ENt, kf15=\EOC,
+ kf16=\EOD, kf17=\EOE, kf18=\EOF, kf19=\EOG, kf2=\EOd,
+ kf20=\EOH, kf21=\EOI, kf22=\EOJ, kf23=\ENO, kf24=\ENP,
+ kf25=\ENQ, kf26=\ENR, kf27=\ENS, kf28=\ENT, kf29=\EOq,
+ kf3=\EOe, kf30=\EOr, kf31=\EOs, kf32=\EOt, kf33=\EOu,
+ kf34=\EOv, kf35=\EOw, kf36=\EOx, kf37=\EOy, kf38=\EOu,
+ kf39=\EOv, kf4=\EOf, kf40=\EOl, kf41=\EOq, kf42=\EOr,
+ kf43=\EOs, kf44=\EOp, kf45=\EOn, kf46=\EOM, kf5=\EOg,
+ kf6=\EOh, kf7=\EOi, kf8=\EOj, kf9=\ENo, khome=\E[H,
+ kich1=\E[@, kil1=\E[L, knp=\E[U, kpp=\E[V, ll=\E[24H,
+ mc0=\E[i, mc4=\E[?4i, mc5=\E[?5i, nel=\EE,
+ pfx=\E[%p1%d;%p2%l%02dq%?%p1%{9}%<%t F%p1%1d %;%p2%s,
+ pln=\E[%p1%d;0;0;0q%p2%:-16.16s, rc=\E8,
+ rep=%p1%c\E[%p2%{1}%-%db, rev=\E[7m, ri=\EM, rmacs=^O,
+ rmir=\E[4l, rmln=\E[2p, rmso=\E[27m, rmul=\E[24m,
+ rmxon=\E[53;3|, rs1=\Ec\E[?3;5l\E[56;0|, sc=\E7,
+ sgr=\E[0%?%p6%t;1%;%?%p5%t;2%;%?%p2%t;4%;%?%p4%t;5%;%?%p3%p1%|%t;7%;%?%p7%t;8%;m%?%p9%t\016%e\017%;,
+ sgr0=\E[m\017, smacs=^N, smir=\E[4h, smln=\E[p, smso=\E[7m,
+ smul=\E[4m, smxon=\E[53;0|, tbc=\E[3g,
+ tsl=\E7\E[99;%i%p1%dx,
+
# This entry was modified 3/13/90 by JWE.
# fixes include additions of <enacs>, correcting <rep>, and modification
# of <kHOM>. (See comments below)
tt505-22|pt505-22|gs5430-22|AT&T PT505 or 5430 GETSET version 1 22 lines,
lines#22, use=att505,
#
-# -------------------- TERMINFO FILE CAN BE SPLIT HERE -----------------------
+#### ------------------ TERMINFO FILE CAN BE SPLIT HERE ---------------------
# This cut mark helps make life less painful for people running ncurses tic
# on machines with relatively little RAM. The file can be broken in half here
# cleanly and compiled in sections -- no `use' references cross this cut
am,
cols#80, lines#40,
bel=^G, clear=\014$<2>, cr=^M, cub1=^H, cud1=^J, cuf1=^_,
- cup=\017%p2%{10}%/%{16}%*%p2%{10}%m%+%c%p1%?%p1%{19}%>%t%{12}%+%;%'@'%+%c,
+ cup=\017%p2%{10}%/%{16}%*%p2%{10}%m%+%c%p1%?%p1%{19}%>%t%{12}%+%;%{64}%+%c,
cuu1=^N, home=^K, ht=^I, hts=^]^P1, ind=^J, kbs=^^, kcub1=^H,
kcud1=^J, kcuf1=^_, kcuu1=^N, khome=^K, tbc=^\^P^P,
# Hauppauge, NY 11788-3762
# Vox: (800)-231-5445
# Fax: (516)-342-7378
+# Web: http://boundless.com
#
# Their voice mail used to describe the place as "SunRiver (formerly ADDS)".
# In 1995 Boundless acquired DEC's terminals business.
cuf1=^L, cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
ed=\EY$<80>, el=\ET, home=^^, ht=^I, ind=^J, kbs=^H, kcub1=^H,
kcud1=^J, kcuf1=^L, kcuu1=^K, khome=^^, nel=^M^J, rmso=\E(,
- sgr=\E0%'@'%?%p1%tQ%|%;%?%p2%t%'`'%|%;%?%p3%tP%|%;%?%p4%t%{2}%|%;%?%p5%t%{1}%|%;%?%p7%tD%|%;%c\E),
+ sgr=\E0%{64}%?%p1%tQ%|%;%?%p2%t%{96}%|%;%?%p3%tP%|%;%?%p4%t%{2}%|%;%?%p5%t%{1}%|%;%?%p7%tD%|%;%c\E),
sgr0=\E(, smso=\E0Q\E),
vp60|viewpoint60|addsvp60|adds viewpoint60,
use=regent40,
am,
cols#80, lines#24,
bel=^G, clear=\014$<1>\013@, cr=^M, cub1=^H, cud1=^J,
- cuf1=\E^E01, cup=\013%p1%'@'%+%c\E\005%p2%2d,
+ cuf1=\E^E01, cup=\013%p1%{64}%+%c\E\005%p2%2d,
dl1=\E\017$<13>, il1=\E\016$<13>, ind=^J, kf0=\E0, kf1=\E1,
kf2=\E2, kf3=\E3, kf4=\E4, kf5=\E5, kf6=\E6, kf7=\E7, kf8=\E8,
kf9=\E9, rmso=^O, sgr0=^O, smso=^Y^^^N,
# Background: light; Keyclicks: silent; Auto wraparound: on; CRT saver:
# on. I also set up mine for parity (but you may not need it). Then
# save the setup with ^S.
-#
+# (cit101e-rv: added empty <rmcup> to suppress a tic warning. --esr)
cit101e-rv|Citoh CIT-101e (sets reverse video),
am, eo, mir, msgr, xenl, xon,
cols#80, it#8, lines#24,
is2=\E<\E>\E[?1l\E[?3l\E[?4l\E[?5h\E[?7h\E[?8h\E[3g\E[>5g\E(B\E[m\E[20l\E[1;24r\E[24;1H,
kbs=\177, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
kf1=\EOP, kf2=\EOQ, kf3=\EOR, kf4=\EOS, nel=\EE, rc=\E8,
- rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmir=\E[4l, rmso=\E[m,
- rmul=\E[m, rs1=\Ec\E[?7h\E[>5g, sc=\E7, sgr0=\E[m,
- smcup=\E[>5g\E[?7h\E[?5h, smir=\E[4h, smso=\E[7m,
- smul=\E[4m, tbc=\E[3g, u6=\E[%i%p1%d;%p2%dR, u7=\E[6n,
- u8=\E[?6c, u9=\E[c,
+ rev=\E[7m, ri=\EM, rin=\E[%p1%dT, rmcup=, rmir=\E[4l,
+ rmso=\E[m, rmul=\E[m, rs1=\Ec\E[?7h\E[>5g, sc=\E7,
+ sgr0=\E[m, smcup=\E[>5g\E[?7h\E[?5h, smir=\E[4h,
+ smso=\E[7m, smul=\E[4m, tbc=\E[3g, u6=\E[%i%p1%d;%p2%dR,
+ u7=\E[6n, u8=\E[?6c, u9=\E[c,
cit101e-n|CIT-101e w/o am,
am@,
cvvis=\E[?1l\E[?4l\E[?7l, kbs=^H, kcub1=^H, kcud1=^J, use=cit101e,
# the terminals group at Data General was shut down in 1991; all these
# terminals have thus been discontinued.
#
+# DG terminals have function keys that respond to the SHIFT and CTRL keys,
+# e.g., SHIFT-F1 generates a different code from F1. To number the keys
+# sequentially, first the unmodified key codes are listed as F1 through F15.
+# Then their SHIFT versions are listed as F16 through F30, their CTRL versions
+# are listed as F31 through F45, and their CTRL-SHIFT versions are listed as
+# F46 through F60. This is done in the private "includes" below whose names
+# start with "dgkeys+".
+#
+# DG terminals generally support 8 bit characters. For each of these terminals
+# two descriptions are supplied:
+# 1) A default description for 8 bits/character communications, which
+# uses the default DG international character set and keyboard codes.
+# 2) A description with suffix "-7b" for 7 bits/character communications.
+# This description must use the NON-DEFAULT native keyboard language.
+
+# Unmodified fkeys (kf1-kf11), Shift fkeys (kf12-kf22), Ctrl fkeys (kf23-kf33),
+# Ctrl/Shift fdkeys (kf34-kf44).
+
+dgkeys+8b|Private entry describing DG terminal 8-bit ANSI mode special keys,
+ ka1=\233020z, ka3=\233021z, kc1=\233022z, kc3=\233023z,
+ kclr=\2332J, kcub1=\233D, kcud1=\233B, kcuf1=\233C,
+ kcuu1=\233A, kel=\233K, kf1=\233001z, kf10=\233010z,
+ kf11=\233011z, kf12=\233012z, kf13=\233013z,
+ kf14=\233014z, kf15=\233000z, kf16=\233101z,
+ kf17=\233102z, kf18=\233103z, kf19=\233104z,
+ kf2=\233002z, kf20=\233105z, kf21=\233106z,
+ kf22=\233107z, kf23=\233108z, kf24=\233109z,
+ kf25=\233110z, kf26=\233111z, kf27=\233112z,
+ kf28=\233113z, kf29=\233114z, kf3=\233003z,
+ kf30=\233100z, kf31=\233201z, kf32=\233202z,
+ kf33=\233203z, kf34=\233204z, kf35=\233205z,
+ kf36=\233206z, kf37=\233207z, kf38=\233208z,
+ kf39=\233209z, kf4=\233004z, kf40=\233210z,
+ kf41=\233211z, kf42=\233212z, kf43=\233213z,
+ kf44=\233214z, kf45=\233200z, kf46=\233301z,
+ kf47=\233302z, kf48=\233303z, kf49=\233304z,
+ kf5=\233005z, kf50=\233305z, kf51=\233306z,
+ kf52=\233307z, kf53=\233308z, kf54=\233309z,
+ kf55=\233310z, kf56=\233311z, kf57=\233312z,
+ kf58=\233313z, kf59=\233314z, kf6=\233006z,
+ kf60=\233300z, kf7=\233007z, kf8=\233008z, kf9=\233009z,
+ khome=\233H, kprt=\233i,
+
+dgkeys+7b|Private entry describing DG terminal 7-bit ANSI mode special keys,
+ ka1=\E[020z, ka3=\E[021z, kc1=\E[022z, kc3=\E[023z,
+ kclr=\E[2J, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kel=\E[K, kf1=\E[001z, kf10=\E[010z, kf11=\E[011z,
+ kf12=\E[012z, kf13=\E[013z, kf14=\E[014z, kf15=\E[000z,
+ kf16=\E[101z, kf17=\E[102z, kf18=\E[103z, kf19=\E[104z,
+ kf2=\E[002z, kf20=\E[105z, kf21=\E[106z, kf22=\E[107z,
+ kf23=\E[108z, kf24=\E[109z, kf25=\E[110z, kf26=\E[111z,
+ kf27=\E[112z, kf28=\E[113z, kf29=\E[114z, kf3=\E[003z,
+ kf30=\E[100z, kf31=\E[201z, kf32=\E[202z, kf33=\E[203z,
+ kf34=\E[204z, kf35=\E[205z, kf36=\E[206z, kf37=\E[207z,
+ kf38=\E[208z, kf39=\E[209z, kf4=\E[004z, kf40=\E[210z,
+ kf41=\E[211z, kf42=\E[212z, kf43=\E[213z, kf44=\E[214z,
+ kf45=\E[200z, kf46=\E[301z, kf47=\E[302z, kf48=\E[303z,
+ kf49=\E[304z, kf5=\E[005z, kf50=\E[305z, kf51=\E[306z,
+ kf52=\E[307z, kf53=\E[308z, kf54=\E[309z, kf55=\E[310z,
+ kf56=\E[311z, kf57=\E[312z, kf58=\E[313z, kf59=\E[314z,
+ kf6=\E[006z, kf60=\E[300z, kf7=\E[007z, kf8=\E[008z,
+ kf9=\E[009z, khome=\E[H, kprt=\E[i,
+
+dgkeys+11|Private entry describing 11 minimal-subset DG mode special keys,
+ kclr=^L, kcub1=^Y, kcud1=^Z, kcuf1=^X, kcuu1=^W, kel=^K,
+ kf1=^^q, kf10=^^z, kf11=^^{, kf12=^^a, kf13=^^b, kf14=^^c,
+ kf15=^^d, kf16=^^e, kf17=^^f, kf18=^^g, kf19=^^h, kf2=^^r,
+ kf20=^^i, kf21=^^j, kf22=^^k, kf23=^^1, kf24=^^2, kf25=^^3,
+ kf26=^^4, kf27=^^5, kf28=^^6, kf29=^^7, kf3=^^s, kf30=^^8,
+ kf31=^^9, kf32=^^\:, kf33=^^;, kf34=^^!, kf35=^^", kf36=^^#,
+ kf37=^^$, kf38=^^%, kf39=^^&, kf4=^^t, kf40=^^', kf41=^^(,
+ kf42=^^), kf43=^^*, kf44=^^+, kf5=^^u, kf6=^^v, kf7=^^w,
+ kf8=^^x, kf9=^^y, khome=^H,
+
+dgkeys+15|Private entry describing 15 DG mode special keys,
+ kHOM=^^^H, kLFT=^^^Y, kRIT=^^^X, ka1=^^\\, ka3=^^], kc1=^^\^,
+ kc3=^^_, kf1=^^q, kf10=^^z, kf11=^^{, kf12=^^|, kf13=^^},
+ kf14=^^~, kf15=^^p, kf16=^^a, kf17=^^b, kf18=^^c, kf19=^^d,
+ kf2=^^r, kf20=^^e, kf21=^^f, kf22=^^g, kf23=^^h, kf24=^^i,
+ kf25=^^j, kf26=^^k, kf27=^^l, kf28=^^m, kf29=^^n, kf3=^^s,
+ kf30=^^`, kf31=^^1, kf32=^^2, kf33=^^3, kf34=^^4, kf35=^^5,
+ kf36=^^6, kf37=^^7, kf38=^^8, kf39=^^9, kf4=^^t, kf40=^^\:,
+ kf41=^^;, kf42=^^<, kf43=^^=, kf44=^^>, kf45=^^0, kf46=^^!,
+ kf47=^^", kf48=^^#, kf49=^^$, kf5=^^u, kf50=^^%, kf51=^^&,
+ kf52=^^', kf53=^^(, kf54=^^), kf55=^^*, kf56=^^+, kf57=^^\,,
+ kf58=^^-, kf59=^^., kf6=^^v, kf60=^^\s, kf7=^^w, kf8=^^x,
+ kf9=^^y,
+
+# Data General color terminals use the "Tektronix" color model. The total
+# number of colors varies with the terminal model, as does support for
+# attributes used in conjunction with color.
+
+# Removed u7, u8 definitions since they conflict with tack:
+# Preserve user-defined colors in at least some cases.
+# u7=^^Fh,
+# Default is ACM mode.
+# u8=^^F}20^^Fi^^F}21,
+#
+dgunix+fixed|Fixed color info for DG D430C terminals in DG-UNIX mode,
+ bce,
+ colors#16, ncv#53, pairs#256,
+ op=\036Ad\036Bd,
+ setab=\036B%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c,
+ setaf=\036A%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c,
+ setb=\036B%p1%{48}%+%c, setf=\036A%p1%{48}%+%c,
+
+dg+fixed|Fixed color info for DG D430C terminals in DG mode,
+ use=dgunix+fixed,
+
+# Video attributes are coordinated using static variables set by "sgr", then
+# checked by "op", "seta[bf]", and "set[bf]" to refresh the attribute settings.
+# (D=dim, U=underline, B=blink, R=reverse.)
+dg+color8|Color info for Data General D220 and D230C terminals in ANSI mode,
+ bce,
+ colors#8, ncv#16, pairs#64,
+ op=\E[%?%gD%t2;%;%?%gU%t4;%;%?%gB%t5;%;%?%gR%t7;%;m,
+ setab=\E[4%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+ setaf=\E[3%p1%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+ setb=\E[4%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+ setf=\E[3%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+
+dg+color|Color info for Data General D470C terminals in ANSI mode,
+ colors#16, ncv#53, pairs#256,
+ setab=\E[%?%p1%{8}%<%t4%p1%e=%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+ setaf=\E[%?%p1%{8}%<%t3%p1%e<%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+ setb=\E[%?%p1%{8}%<%t4%e=%;%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+ setf=\E[%?%p1%{8}%<%t3%e<%;%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%d%?%gD%t;2%;%?%gU%t;4%;%?%gB%t;5%;%?%gR%t;7%;m,
+ use=dg+color8,
+
+dgmode+color8|Color info for Data General D220/D230C terminals in DG mode,
+ bce,
+ colors#8, ncv#16, pairs#64,
+ op=\036Ad\036Bd,
+ setab=\036B%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%{48}%+%c,
+ setaf=\036A%p1%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%{48}%+%c,
+ setb=\036B%p1%{48}%+%c, setf=\036A%p1%{48}%+%c,
+
+dgmode+color|Color info for Data General D470C terminals in DG mode,
+ colors#16, pairs#256,
+ setab=\036B%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c,
+ setaf=\036A%p1%?%p1%{8}%<%t%{2}%&%?%p1%{1}%&%t%{4}%|%;%?%p1%{4}%&%t%{1}%|%;%;%{48}%+%c,
+ use=dgmode+color8,
+
+dgunix+ccc|Configurable color info for DG D430C terminals in DG-UNIX mode,
+ bce, ccc,
+ colors#52, ncv#53, pairs#26,
+ initp=\036RG0%p1%02X%p2%{256}%*%{1001}%/%02X%p3%{256}%*%{1001}%/%02X%p4%{256}%*%{1001}%/%02X%p5%{256}%*%{1001}%/%02X%p6%{256}%*%{1001}%/%02X%p7%{256}%*%{1001}%/%02X,
+ oc=\036RG01A00FF00000000\036RG01B00000000FF00\036RG01C007F00000000\036RG01D000000007F00,
+ op=\036RF4831A\036RF2E31B\036RF1D31C\036RF3F31D,
+ scp=\036RG2%p1%02X,
+
+# Colors are in the order: normal, reverse, dim, dim + reverse.
+dg+ccc|Configurable color info for DG D430C terminals in DG mode,
+ bce, ccc,
+ colors#52, ncv#53, pairs#26,
+ initp=\036RG0%p1%{16}%/%{48}%+%c%p1%{16}%m%{48}%+%c%p2%{256}%*%{1001}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p3%{256}%*%{1001}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p4%{256}%*%{1001}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p5%{256}%*%{1001}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p6%{256}%*%{1001}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c%p7%{256}%*%{1001}%/%Pa%ga%{16}%/%{48}%+%c%ga%{16}%m%{48}%+%c,
+ oc=\036RG01\:00??00000000\036RG01;00000000??00\036RG01<007?00000000\036RG01=000000007?00,
+ op=\036RF4831\:\036RF2>31;\036RF1=31<\036RF3?31=,
+ scp=\036RG2%p1%{16}%/%{48}%+%c%p1%{16}%m%{48}%+%c,
+
+# The generic DG terminal type (an 8-bit-clean subset of the 6053)
+# Initialization string 1 sets:
+# ^R - vertical scrolling enabled
+# ^C - blinking enabled
+dg-generic|Generic Data General terminal in DG mode,
+ am, bw, msgr, xon,
+ cols#80, lines#24,
+ bel=^G, blink=^N, clear=^L, cr=^M, cub1=^Y, cud1=^Z, cuf1=^X,
+ cup=\020%p2%c%p1%c, cuu1=^W, dim=^\, el=^K, ind=^J, is1=^R^C,
+ mc0=^Q, nel=^J, rmso=^], rmul=^U, sgr0=^O^U^], smso=^\,
+ smul=^T,
+ use=dgkeys+11,
# According to the 4.4BSD termcap file, the dg200 <cup> should be the
# termcap equivalent of \020%p2%{128}%+%c%p1%{128}%+%c (in termcap
# notation that's "^P%r%+\200%+\200"). Those \200s are suspicious,
# maybe they were originally nuls (which would fit).
+
dg200|data general dasher 200,
am, bw,
cols#80, lines#24,
kf2=^^r, kf3=^^s, kf4=^^t, kf5=^^u, kf6=^^v, kf7=^^w, kf8=^^x,
kf9=^^y, khome=^H, lf0=f10, nel=^J, rmso=^^E, rmul=^U,
smso=^^D, smul=^T,
+
# Data General 210/211 (and 410?) from Lee Pearson (umich!lp) via BRL
dg210|dg-ansi|Data General 210/211,
am,
# This also matches a posted description of something called a `Dasher 100'
# so there's a dg100 alias here.
# (dg6053: the 4.4BSD file had <cub1=^H>, <cud1=^J>, <cuf1=^S>. -- esr)
-dg6053|dg100|data general 6053,
+dg6053-old|dg100|data general 6053,
am, bw, ul,
cols#80, lines#24,
bel=^G, clear=^L, cnorm=^L, cr=^M, cub1=^Y, cud1=^Z, cuf1=^X,
kf7=^^x, kf8=^^y, kf9=^^z, khome=^H, rmcup=^L, rmso=\0^^E,
rmul=^U, smcup=^L^R, smso=\0\0\0\0\0\036D, smul=^T,
+# (Some performance can be gained over the generic DG terminal type)
+dg6053|6053|6053-dg|dg605x|605x|605x-dg|d2|d2-dg|Data General DASHER 6053,
+ xon@,
+ home=^P\0\0, ll=^P\0^W, use=dg-generic,
+
+# Like 6053, but adds reverse video and more keypad and function keys.
+d200|d200-dg|Data General DASHER D200,
+ bold=^^D^T, home@, ll@, rev=^^D, rmso=^^E^],
+ sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;,
+ sgr0=\017\025\035\036E, smso=^^D^\,
+ use=dgkeys+15, use=dg6053,
+
+# DASHER D210 series terminals in ANSI mode.
+# Reverse video, no insert/delete character/line, 7 bits/character only.
+#
+# Initialization string 1 sets:
+# <0 - scrolling enabled
+# <1 - blink enabled
+# <4 - print characters regardless of attributes
+d210|d214|Data General DASHER D210 series,
+ am, bw, msgr, xon,
+ cols#80, lines#24,
+ bel=^G, blink=\E[5m, bold=\E[4;7m, clear=\E[2J, cr=^M,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=\E[B,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\E[A, dim=\E[2m, ed=\E[J, el=\E[K,
+ el1=\E[1K, home=\E[H, ind=^J, is1=\E[<0;<1;<4l,
+ ll=\E[H\E[A, nel=^J, rev=\E[7m, rmso=\E[m, rmul=\E[m,
+ sgr=\E[%?%p1%p3%|%p6%|%t7;%;%?%p4%t5;%;%?%p2%p6%|%t4;%;%?%p1%p5%|%t2;%;m,
+ sgr0=\E[m, smso=\E[2;7m, smul=\E[4m,
+ use=dgkeys+7b,
+
+# DASHER D210 series terminals in DG mode.
+# Like D200, but adds clear to end-of-screen and needs XON/XOFF.
+d210-dg|d214-dg|Data General DASHER D210 series in DG mode,
+ xon,
+ ed=^^FF, use=d200-dg,
+
+# DASHER D211 series terminals in ANSI mode.
+# Like the D210, but with 8-bit characters and local printer support.
+#
+# Initialization string 2 sets:
+# \E[2;1;1;1v
+# 2;1 - 8 bit operations
+# 1;1 - 8 bit (international) keyboard language
+# \E(B - default primary character set (U.S. ASCII)
+# \E)4 - default secondary character set (international)
+# ^O - primary character set
+#
+d211|d215|Data General DASHER D211 series,
+ km,
+ is2=\E[2;1;1;1v\E(B\E)4\017, mc0=\E[i, use=dgkeys+8b, use=d210,
+
+# Initialization string 2 sets:
+# \E[2;0;1;0v
+# 2;0 - 7 bit operations
+# 1;0 - 7 bit (native) keyboard language
+# \E(0 - default character set (the keyboard native language)
+# ^O - primary character set
+d211-7b|d215-7b|Data General DASHER D211 series in 7 bit mode,
+ km@,
+ is2=\E[2;0;1;0v\E(0\017, use=dgkeys+7b, use=d211,
+
+# Like the D210 series, but adds support for 8-bit characters.
+#
+# Reset string 2 sets:
+# ^^N - secondary character set
+# ^^FS0> - 8 bit international character set
+# ^^O - primary character set
+# ^^FS00 - default character set (matching the native keyboard language)
+#
+d211-dg|d215-dg|Data General DASHER D211 series in DG mode,
+ km,
+ rs2=\036N\036FS0>\036O\036FS00, use=d210-dg,
+
+d216-dg|d216e-dg|d216+dg|d216e+dg|d217-dg|Data General DASHER D216 series in DG mode,
+ use=d211-dg,
+
+# Enhanced DG mode with changes to be more UNIX compatible.
+d216-unix|d216e-unix|d216+|d216e+|Data General DASHER D216+ in DG-UNIX mode,
+ mc5i,
+ it#8,
+ acsc=a\177j$k"l!m#n)q+t'u&v(w%x*, blink=^^PI,
+ clear=^^PH, cub1=^^PD, cud1=^^PB, cuf1=^^PC, cuu1=^^PA,
+ el=^^PE, home=^^PF, hpa=\020%p1%c\177, ht=^I, ind=^J,
+ is1=\022\003\036P@1, is3=\036Fz0, kHOM=^^Pf, kLFT=^^Pd,
+ kPRT=^^P1, kRIT=^^Pc, kclr=^^PH, kcub1=^^PD, kcud1=^^PB,
+ kcuf1=^^PC, kcuu1=^^PA, kel=^^PE, khome=^^PF, kprt=^^P0,
+ mc0=\036F?9, mc4=^^Fa, mc5=^^F`, rmacs=\036FS00,
+ rs2=\036N\036FS0E\036O\036FS00,
+ sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;\036P%?%p4%tI%eJ%;%?%p1%p5%|%t\034%e\035%;\036FS%?%p9%t11%e00%;,
+ sgr0=\036PJ\025\035\036E\036FS00, smacs=\036FS11,
+ vpa=\020\177%p1%c,
+ use=dgkeys+15, use=d216-dg,
+d216-unix-25|d216+25|Data General DASHER D216+ in DG-UNIX mode with 25 lines,
+ lines#25,
+ is3=\036Fz2, use=d216+,
+
+d217-unix|Data General DASHER D217 in DG-UNIX mode,
+ use=d216-unix,
+d217-unix-25|Data General DASHER D217 in DG-UNIX mode with 25 lines,
+ use=d216-unix-25,
+
+# DASHER D220 color terminal in ANSI mode.
+# Like the D470C but with fewer colors and screen editing features.
+#
+# Initialization string 1 sets:
+# \E[<0;<1;<4l
+# <0 - scrolling enabled
+# <1 - blink enabled
+# <4 - print characters regardless of attributes
+# \E[m - all attributes off
+# Reset string 1 sets:
+# \Ec - initial mode defaults (RIS)
+#
+d220|Data General DASHER D220,
+ mc5i@,
+ dl@, dl1@, il@, il1@, is1=\E[<0;<1;<4l\E[m, mc4@, mc5@, rs1=\Ec, use=dg+color8, use=d470c,
+
+d220-7b|Data General DASHER D220 in 7 bit mode,
+ mc5i@,
+ dl@, dl1@, il@, il1@, is1=\E[<0;<1;<4l\E[m, mc4@, mc5@, rs1=\Ec, use=dg+color8, use=d470c-7b,
+
+# Initialization string 3 sets:
+# - default cursor (solid rectangle)
+# Reset string 2 sets:
+# ^^N - secondary character set
+# ^^FS0> - 8 bit international character set
+# ^^O - primary character set
+# ^^FS00 - default character set (matching the native keyboard language)
+#
+d220-dg|Data General DASHER D220 color terminal in DG mode,
+ mc5i@,
+ dl1@, home@, il1@, is2@, is3=\036FQ2, ll@, mc4@, mc5@, rs1@,
+ rs2=\036N\036FS0>\036O\036FS00,
+ use=dgmode+color8, use=d470c-dg,
+
+# DASHER D230C color terminal in ANSI mode.
+# Like the D220 but with minor ANSI compatibility improvements.
+#
+d230c|d230|Data General DASHER D230C,
+ blink=\E[5;50m, bold=\E[4;7;50m, dim=\E[2;50m, nel=^M^J,
+ rev=\E[7;50m, rmkx=\E[2;1v, rmso=\E[50m, rmul=\E[50m,
+ sgr=\E[50%?%p1%p3%|%p6%|%t;7%{1}%e%{0}%;%PR%?%p4%t;5%{1}%e%{0}%;%PB%?%p2%p6%|%t;4%{1}%e%{0}%;%PU%?%p1%p5%|%t;2%{1}%e%{0}%;%PDm\E)%?%p9%t6\016%e4\017%;,
+ sgr0=\E[50m\E)4\017, smkx=\E[2;0v, smso=\E[2;7;50m,
+ smul=\E[4;50m,
+ use=dgkeys+7b, use=d220,
+
+d230c-dg|d230-dg|Data General DASHER D230C in DG mode,
+ use=d220-dg,
+
+# DASHER D400/D450 series terminals.
+# These add intelligent features like insert/delete to the D200 series.
+#
+# Initialization string 2 sets:
+# ^^FQ2 - default cursor (solid rectangle)
+# ^^FW - character protection disabled
+# ^^FJ - normal (80 column) mode
+# ^^F\^ - horizontal scrolling enabled (for alignment)
+# ^^FX004? - margins at columns 0 and 79
+# ^^F] - horizontal scrolling disabled
+# ^^O - primary character set
+# ^^FS00 - default character set (the keyboard native language)
+# - (should reset scrolling regions, but that glitches the screen)
+# Reset string 1 sets:
+# ^^FA - all terminal defaults except scroll rate
+# Reset string 2 sets:
+# ^^F] - horizontal scrolling disabled
+# ^^FT0 - jump scrolling
+#
+d400|d400-dg|d450|d450-dg|Data General DASHER D400/D450 series,
+ mc5i,
+ acsc=j$k"l!m#n)q+t'u&v(w%x*, civis=\036FQ0,
+ cnorm=\036FQ2, dch1=^^K, dl1=^^FI,
+ enacs=\036N\036FS11\036O, home=^^FG, hpa=\020%p1%c\177,
+ ich1=^^J, il1=^^FH,
+ is2=\036FQ2\036FW\036FJ\036F\^\036FX004?\036F]\036O\036FS00,
+ ll=\036FG\027, mc4=^^Fa, mc5=^^F`, ri=^^I, rmacs=^^O,
+ rs1=^^FA, rs2=\036F]\036FT0,
+ sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;\036%?%p9%tN%eO%;,
+ sgr0=\017\025\035\036E\036O, smacs=^^N,
+ vpa=\020\177%p1%c, use=d210-dg,
+
+# DASHER D410/D460 series terminals in ANSI mode.
+# These add a large number of intelligent terminal features.
+#
+# Initialization string 1 sets:
+# \E[<0;<1;<2;<4l
+# <0 - scrolling enabled
+# <1 - blink enabled
+# <2 - horizontal scrolling enabled (for alignment)
+# <4 - print characters regardless of attributes
+# \E[5;0v - normal (80 column) mode
+# \E[1;1;80w - margins at columns 1 and 80
+# \E[1;6;<2h
+# 1 - print all characters even if protected
+# 6 - character protection disabled
+# <2 - horizontal scrolling disabled
+# - (should reset scrolling regions, but that glitches the screen)
+#
+# Initialization string 2 sets:
+# \E[3;2;2;1;1;1v
+# 3;2 - default cursor (solid rectangle)
+# 2;1 - 8 bit operations
+# 1;1 - international keyboard language
+# \E(B - default primary character set (U.S. ASCII)
+# \E)4 - default secondary character set (international)
+# ^O - primary character set
+#
+# Reset string 1 sets:
+# \Ec - initial mode defaults (RIS)
+# \E[<2h - horizontal scrolling disabled
+#
+# Reset string 2 sets:
+# \E[4;0;2;1;1;1v
+# 4;0 - jump scrolling
+# 2;1 - 8 bit operations
+# 1;1 - 8 bit (international) keyboard language
+# \E(B - default primary character set (U.S. ASCII)
+# \E)4 - default secondary character set (international)
+#
+d410|d411|d460|d461|Data General DASHER D410/D460 series,
+ mc5i,
+ acsc=j$k"l!m#n)q+t'u&v(w%x*, civis=\E[3;0v,
+ cnorm=\E[3;2v, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
+ dl1=\E[M, ich=\E[%p1%d@, ich1=\E[@, il=\E[%p1%dL, il1=\E[L,
+ is1=\E[<0;<1;<2;<4l\E[5;0v\E[1;1;80w\E[1;6;<2h,
+ is2=\E[3;2;2;1;1;1v\E(B\E)4\017, mc4=\E[4i, mc5=\E[5i,
+ ri=\EM, rmacs=\E)4\017, rs1=\Ec\E[<2h,
+ rs2=\E[4;0;2;1;1;1v\E(B\E)4,
+ sgr=\E[%?%p1%p3%|%p6%|%t7;%;%?%p4%t5;%;%?%p2%p6%|%t4;%;%?%p1%p5%|%t2;%;m\E)%?%p9%t6\016%e4\017%;,
+ sgr0=\E[m\E)4\017, smacs=\E)6\016,
+ use=d211,
+
+# Initialization string 2 sets:
+# \E[3;2;2;0;1;0v
+# 3;2 - default cursor (solid rectangle)
+# 2;0 - 7 bit operations
+# 1;0 - 7 bit (native) keyboard language
+# \E(0 - default character set (the keyboard native language)
+# ^O - primary character set
+#
+# Reset string 2 sets:
+# \E[4;0;2;0;1;0v
+# 4;0 - jump scrolling
+# 2;0 - 7 bit operations
+# 1;0 - 7 bit (native) keyboard language
+# \E(0 - default character set (the keyboard native language)
+#
+d410-7b|d411-7b|d460-7b|d461-7b|Data General DASHER D410/D460 series in 7 bit mode,
+ km@,
+ enacs=\E)6, is2=\E[3;2;2;0;1;0v\E(0\017, rmacs=^O,
+ rs2=\E[4;0;2;0;1;0v\E(0,
+ sgr=\E[%?%p1%p3%|%p6%|%t7;%;%?%p4%t5;%;%?%p2%p6%|%t4;%;%?%p1%p5%|%t2;%;m%?%p9%t\016%e\017%;,
+ sgr0=\E[m\017, smacs=^N,
+ use=dgkeys+7b, use=d410,
+
+d410-dg|d460-dg|d411-dg|d461-dg|Data General DASHER D410/D460 series in DG mode,
+ km,
+ enacs@, rmacs=\036FS00,
+ sgr=\036%?%p1%p3%|%p6%|%tD%eE%;%?%p2%p6%|%t\024%e\025%;%?%p4%t\016%e\017%;%?%p1%p5%|%t\034%e\035%;\036FS%?%p9%t11%e00%;,
+ sgr0=\017\025\035\036E\036FS00, smacs=\036FS11,
+ use=d400-dg,
+
+# DASHER D410/D460 series terminals in wide (126 columns) ANSI mode.
+#
+# Initialization string 1 sets:
+# \E[<0;<1;<2;<4l
+# <0 - scrolling enabled
+# <1 - blink enabled
+# <2 - horizontal scrolling enabled (for alignment)
+# <4 - print characters regardless of attributes
+# \E[5;1v - compressed (135 column) mode
+# \E[1;1;126 - margins at columns 1 and 126
+# \E[1;6;<2h
+# 1 - print all characters even if protected
+# 6 - character protection disabled
+# <2 - horizontal scrolling disabled
+# - (should reset scrolling regions, but that glitches the screen)
+#
+# Reset string 1 sets:
+# \Ec - initial mode defaults (RIS)
+# \E[5;1v - compressed (135 column) mode
+# \E[1;1;126w - margins at columns 1 and 126
+# \E[<2h - horizontal scrolling disabled
+#
+d410-w|d411-w|d460-w|d461-w|Data General DASHER D410/D460 series in wide mode,
+ cols#126,
+ is1=\E[<0;<1;<2;<4l\E[5;1v\E[1;1;126w\E[1;6;<2h,
+ rs1=\Ec\E[5;1v\E[1;1;126w\E[<2h,
+ use=d410,
+
+d410-7b-w|d411-7b-w|d460-7b-w|d461-7b-w|Data General DASHER D410/D460 series in wide 7 bit mode,
+ cols#126,
+ is1=\E[<0;<1;<2;<4l\E[5;1v\E[1;1;126w\E[1;6;<2h,
+ rs1=\Ec\E[5;1v\E[1;1;126w\E[<2h,
+ use=d410-7b,
+
+d412-dg|d462-dg|d462e-dg|d412+dg|d462+dg|d413-dg|d463-dg|Data General DASHER D412/D462 series in DG mode,
+ use=d410-dg,
+
+# These add intelligent features like scrolling regions.
+d412-unix|d462-unix|d412+|d462+|Data General DASHER D412+/D462+ series in Unix mode,
+ civis=\036FQ0, clear=^^FE, cnorm=\036FQ5,
+ cup=\036FP%p2%2.2X%p1%2.2X, dch1=^^K, dl1=^^FI,
+ home=^^FG, hpa=\036FP%p1%2.2XFF, ich1=^^J, il1=^^FH,
+ is2=\036FQ5\036FW\036FJ\036F\^\036FX004F\036O\036FS00,
+ ll=\036FG\036PA, mc0=^A, rc=\036F}11, ri=^^I,
+ rs1=\036FA\036FT0, rs2=\036P@1, sc=\036F}10,
+ vpa=\036FPFF%p1%2.2X,
+ wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2%>%t000%;\036FX%p3%2.2X%p4%2.2X, use=d216+,
+d412-unix-w|d462-unix-w|d412+w|d462+w|Data General DASHER D412+/D462+ series in wide Unix mode,
+ cols#132,
+ is2=\036FQ5\036FW\036FK\036F\^\036FX0083\036O\036FS00,
+ rs2=\036P@1\036FK\036FX0083,
+ wind=\036FB%?%p1%t%p1%2.2X1%;%p2%p1%-%{1}%+%2.2X1%?%{23}%p2%>%t001%;\036FX%p3%2.2X%p4%2.2X, use=d412-unix,
+d412-unix-25|d462-unix-25|d412+25|d462+25|Data General DASHER D412+/D462+ series in Unix mode with 25 lines,
+ lines#25,
+ is3=\036Fz2,
+ wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{24}%p2%>%t000%;\036FX%p3%2.2X%p4%2.2X, use=d462+,
+d412-unix-s|d462-unix-s|d412+s|d462+s|Data General DASHER D412+/D462+ in Unix mode with status line,
+ eslok, hs,
+ clear=\036FG\036PH, fsl=\036F}01\022,
+ is3=\036Fz2\036F}00\036FB180000\036F}01, ll@,
+ tsl=\036F}00\036FP%p1%2.2X18\036PG,
+ wind=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2%>%t%{23}%p2%-%2.2X0%;000\036FX%p3%2.2X%p4%2.2X, use=d462+,
+
+# Relative cursor motions are confined to the current window,
+# which is not what the scrolling region specification expects.
+# Thus, relative vertical cursor positioning must be deleted.
+d412-unix-sr|d462-unix-sr|d412+sr|d462+sr|Data General DASHER D412+/D462+ in Unix mode with scrolling region,
+ csr=\036FB%?%p1%t%p1%2.2X0%;%p2%p1%-%{1}%+%2.2X0%?%{23}%p2%>%t000%;,
+ cud1@, cuu1@, ll@,
+ use=d462+,
+
+d413-unix|d463-unix|Data General DASHER D413/D463 series in DG-UNIX mode,
+ use=d412-unix,
+d413-unix-w|d463-unix-w|Data General DASHER D413/D463 series in wide DG-UNIX mode,
+ use=d412-unix-w,
+d413-unix-25|d463-unix-25|Data General DASHER D413/D463 series in DG-UNIX mode with 25 lines,
+ use=d412-unix-25,
+d413-unix-s|d463-unix-s|Data General DASHER D413/D463 in DG-UNIX mode with status line,
+ use=d412-unix-s,
+d413-unix-sr|d463-unix-sr|Data General DASHER D413/D463 in DG-UNIX mode with scrolling region,
+ use=d412-unix-sr,
+
+d414-unix|d464-unix|Data General D414/D464 in DG-UNIX mode,
+ use=d413-unix,
+d414-unix-w|d464-unix-w|Data General D414/D464 in wide DG-UNIX mode,
+ use=d413-unix-w,
+d414-unix-25|d464-unix-25|Data General D414/D464 in DG-UNIX mode with 25 lines,
+ use=d413-unix-25,
+d414-unix-s|d464-unix-s|Data General D414/D464 in DG-UNIX mode with status line,
+ use=d413-unix-s,
+d414-unix-sr|d464-unix-sr|Data General D414/D464 in DG-UNIX mode with scrolling region,
+ use=d413-unix-sr,
+
+d430c-dg|d430-dg|Data General D430C in DG mode,
+ use=d413-dg, use=dg+fixed,
+d430c-dg-ccc|d430-dg-ccc|Data General D430C in DG mode with configurable colors,
+ use=d413-dg, use=dg+ccc,
+
+d430c-unix|d430-unix|Data General D430C in DG-UNIX mode,
+ use=d413-unix, use=dgunix+fixed,
+d430c-unix-w|d430-unix-w|Data General D430C in wide DG-UNIX mode,
+ use=d413-unix-w, use=dgunix+fixed,
+d430c-unix-25|d430-unix-25|Data General D430C in DG-UNIX mode with 25 lines,
+ use=d413-unix-25, use=dgunix+fixed,
+d430c-unix-s|d430-unix-s|Data General D430C in DG-UNIX mode with status line,
+ use=d413-unix-s, use=dgunix+fixed,
+d430c-unix-sr|d430-unix-sr|Data General D430C in DG-UNIX mode with scrolling region,
+ use=d413-unix-sr, use=dgunix+fixed,
+d430c-unix-ccc|d430-unix-ccc|Data General D430C in DG-UNIX mode with configurable colors,
+ use=d413-unix, use=dgunix+ccc,
+d430c-unix-w-ccc|d430-unix-w-ccc|Data General D430C in wide DG-UNIX mode with configurable colors,
+ use=d413-unix-w, use=dgunix+ccc,
+d430c-unix-25-ccc|d430-unix-25-ccc|Data General D430C in DG-UNIX mode with 25 lines and configurable colors,
+ use=d413-unix-25, use=dgunix+ccc,
+d430c-unix-s-ccc|d430-unix-s-ccc|Data General D430C in DG-UNIX mode with status line and configurable colors,
+ use=d413-unix-s, use=dgunix+ccc,
+d430c-unix-sr-ccc|d430-unix-sr-ccc|Data General D430C in DG-UNIX mode with scrolling region and configurable colors,
+ use=d413-unix-sr, use=dgunix+ccc,
+
+# DASHER D470C color terminal in ANSI mode.
+# Like the D460 but with 16 colors and without a compressed mode.
+#
+# Initialization string 1 sets:
+# \E[<0;<1;<2;<4l
+# <0 - scrolling enabled
+# <1 - blink enabled
+# <2 - horizontal scrolling enabled (for alignment)
+# <4 - print characters regardless of attributes
+# \E[1;1;80w - margins at columns 1 and 80
+# \E[1;6;<2h
+# 1 - print all characters even if protected
+# 6 - character protection disabled
+# <2 - horizontal scrolling disabled
+# - (should reset scrolling regions, but that glitches the screen)
+#
+d470c|d470|Data General DASHER D470C,
+ is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h,
+ sgr=\E[%?%p1%p3%|%p6%|%t7;%{1}%e%{0}%;%PR%?%p4%t5;%{1}%e%{0}%;%PB%?%p2%p6%|%t4;%{1}%e%{0}%;%PU%?%p1%p5%|%t2;%{1}%e%{0}%;%PDm\E)%?%p9%t6\016%e4\017%;,
+ use=dg+color, use=d460,
+
+d470c-7b|d470-7b|Data General DASHER D470C in 7 bit mode,
+ is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h,
+ sgr=\E[%?%p1%p3%|%p6%|%t7;%{1}%e%{0}%;%PR%?%p4%t5;%{1}%e%{0}%;%PB%?%p2%p6%|%t4;%{1}%e%{0}%;%PU%?%p1%p5%|%t2;%{1}%e%{0}%;%PDm%?%p9%t\016%e\017%;,
+ use=dg+color, use=d460-7b,
+
+# Initialization string 2 sets:
+# ^^FQ2 - default cursor (solid rectangle)
+# ^^FW - character protection disabled
+# ^^F\^ - horizontal scrolling enabled (for alignment)
+# ^^FX004? - margins at columns 0 and 79
+# ^^F] - horizontal scrolling disabled
+# ^^O - primary character set
+# ^^FS00 - default character set (the keyboard native language)
+# - (should reset scrolling regions, but that glitches the screen)
+#
+d470c-dg|d470-dg|Data General DASHER D470C in DG mode,
+ is2=\036FQ2\036FW\036F\^\036FX004?\036F]\036O\036FS00,
+ use=dgmode+color, use=d460-dg,
+
+# DASHER D555 terminal in ANSI mode.
+# Like a D411, but has an integrated phone.
+d555|Data General DASHER D555,
+ use=d411,
+d555-7b|Data General DASHER D555 in 7-bit mode,
+ use=d411-7b,
+d555-w|Data General DASHER D555 in wide mode,
+ use=d411-w,
+d555-7b-w|Data General DASHER D555 in wide 7-bit mode,
+ use=d411-7b-w,
+d555-dg|Data General DASHER D555 series in DG mode,
+ use=d411-dg,
+
+# DASHER D577 terminal in ANSI mode.
+# Like a D411, but acts as a keyboard for serial printers ("KSR" modes).
+d577|Data General DASHER D577,
+ use=d411,
+d577-7b|Data General DASHER D577 in 7-bit mode,
+ use=d411-7b,
+d577-w|Data General DASHER D577 in wide mode,
+ use=d411-w,
+d577-7b-w|Data General DASHER D577 in wide 7-bit mode,
+ use=d411-7b-w,
+
+d577-dg|d578-dg|Data General DASHER D577/D578 series in DG mode,
+ use=d411-dg,
+
+# DASHER D578 terminal.
+# Like a D577, but without compressed mode; like a D470C in this respect.
+#
+# Initialization string 1 sets:
+# \E[<0;<1;<2;<4l
+# <0 - scrolling enabled
+# <1 - blink enabled
+# <2 - horizontal scrolling enabled (for alignment)
+# <4 - print characters regardless of attributes
+# \E[1;1;80w - margins at columns 1 and 80
+# \E[1;6;<2h
+# 1 - print all characters even if protected
+# 6 - character protection disabled
+# <2 - horizontal scrolling disabled
+# - (should reset scrolling regions, but that glitches the screen)
+#
+d578|Data General DASHER D578,
+ is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h, use=d577,
+d578-7b|Data General DASHER D578 in 7-bit mode,
+ is1=\E[<0;<1;<2;<4l\E[1;1;80w\E[1;6;<2h,
+ use=d577-7b,
+
#### Datamedia (dm)
#
# Datamedia was headquartered in Nashua, New Hampshire in 1993.
# only company and no longer make terminals. However, the operator there
# told me that she had once spoken to a customer looking for Datamedia
# terminals who'd mentioned a Datamedia in New Jersey. This is backed up
-# by comp.terminals poosting describing the ID plate on the back of a
+# by comp.terminals posting describing the ID plate on the back of a
# "Datamedia 3000" terminal. Was this an earlier incarnation of Axent?
# Inquiring minds want to know...
#
cols#80, lines#24,
acsc=``a1fxgqh0jYk?lZm@nEooppqDrrsstCu4vAwBx3yyzz{{||}}~~,
bel=^G, clear=^L, cr=^M,
- csr=\E=%p1%' '%+%c%' '%c\E#1\E=%p2%' '%+%c%' '%c\E#2,
+ csr=\E=%p1%{32}%+%c%{32}%c\E#1\E=%p2%{32}%+%c%{32}%c\E#2,
cub1=^H, cud1=\EB, cuf1=^\,
- cup=\E=%p2%' '%+%c%p1%' '%+%c, cuu1=^_, dl1=\EM, ed=^K,
+ cup=\E=%p2%{32}%+%c%p1%{32}%+%c, cuu1=^_, dl1=\EM, ed=^K,
el=^], ff=^L, home=^Y, ht=^I, hts=\E'1, il1=\EL, ind=\EB,
is2=\E)0\E<\EP\E'0\E$2, kclr=^L, kcub1=^H, kcud1=^J,
kcuf1=^\, kcuu1=^_, ked=^K, kel=^], khome=^Y, mc4=^O, mc5=^N,
#### Hazeltine
#
-# Hazeltine appears to be out of the business now (1995). These guys were
-# co-owners of the Terminal Brain Damage Hall Of Fame along with Harris.
-# They have a hazeltine.com domain and can be reached at:
+# Hazeltine appears to be out of the terminal business as of 1995. These
+# guys were co-owners of the Terminal Brain Damage Hall Of Fame along with
+# Harris. They have a hazeltine.com domain (but no web page there ) and can
+# be reached at:
#
# Hazeltine
# 450 East Pulaski Road
# P.O. Box 2076
# Fairfield, NJ 07007-2078
#
+# They're now (1998) a subsidiary of General Electric, operating under the
+# marque "GEC-Marconi Hazeltine" and doing military avionics. Web page
+# at <http://www.gec.com/cpd/1ncpd.htm#1.55>.
+#
# Since <cuf1> is blank, when you want to erase something you
# are out of luck. You will have to do ^L's a lot to
am, hz,
cols#80, lines#24,
bel=^G, clear=~^\, cr=^M, cub1=^H, cud1=~^K, cuf1=^P,
- cup=~\021%p2%p2%?%{30}%>%t%{32}%+%;%'`'%+%c%p1%'`'%+%c,
+ cup=~\021%p2%p2%?%{30}%>%t%{32}%+%;%{96}%+%c%p1%{96}%+%c,
cuu1=~^L, dl1=~\023$<40>, ed=~\030$<10>, el=~^O, home=~^R,
il1=~\032$<40>, ind=^J, kcub1=^H, kcud1=^J, kcuf1=^P,
kcuu1=~^L, khome=~^R, rmso=~^Y, smso=~^_,
gn,
clear=^M^J, el=^M, home=^M,
-# Beware! The 3101 entry IBM shipped with AIX 3 is *wrong*. Losers...
-# From: J.B. Nicholson-Owens <jeffo@uiuc.edu> 8 Mar 94
-# (ibm3101: <if=/usr/share/tabset/ibm3101> removed, no such file -- esr)
ibm3101|i3101|IBM 3101-10,
am, xon,
cols#80, lines#24,
bel=^G, clear=\EK, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,
cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, ed=\EJ,
- el=\EI, home=\EH, ht=^I, hts=\E0, ind=^J, kbs=^H, kcub1=\ED,
- kcud1=\EB, kcuf1=\EC, kcuu1=\EA, nel=^M^J, tbc=\E1,
-# Received from the IBM terminals division (given to DRB)
-# June 1988 for PS/2 OS 2.2.3 cut
-ibm3151|i3151|IBM 3151,
- rmso=\E4@, rmul=\E4@,
- sgr=\E4%{64}%?%p1%{0}%>%p1%{4}%<%&%t%{8}%|%;%?%p1%{7}%=%t%{16}%|%;%?%p2%t%{1}%|%;%?%p3%t%{4}%|%;%?%p4%t%{2}%|%;%c,
- sgr0=\E4@, smso=\E4A, smul=\E4B,
- use=ibm3163,
+ el=\EI, home=\EH, hts=\E0, ind=^J, kcub1=\ED, kcud1=\EB,
+ kcuf1=\EC, kcuu1=\EA, nel=^M^J, tbc=\EH,
+ibm3151|IBM 3151 display,
+ is2=\E S, rmacs=\E>B, rmcup=\E>B, rs2=\E S, s0ds=\E>B,
+ sgr=\E4%{64}%?%p1%t%{65}%|%;%?%p2%t%{66}%|%;%?%p3%t%{65}%|%;%?%p4%t%{68}%|%;%?%p5%t%{64}%|%;%?%p6%t%{72}%|%;%?%p7%t%{80}%|%;%c%?%p9%t\E>A%e\E>B%;,
+ sgr0=\E4@\E>B, smacs=\E>A, smcup=\E>B,
+ use=ibm3162,
# From: Mark Easter <marke@fsi-ssd.csg.ssd.fsi.com> 29 Oct 1992
# I've commented out or translated some IBM extensions.
ibm3161|ibm3163|wy60-316X|wyse60-316X|IBM 3161/3163 display,
cuu1=\EA, dch1=\EQ, dl1=\EO, ed=\EJ, el=\EI, home=\EH, ind=^J,
invis=\E4P, kbs=^H, kcbt=\E2, kclr=\EL\r, kctab=\E1,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\EQ,
- kdl1=\EO, ked=\EJ, kel=\EI, kf1=\Ea\r, kf10=\Ej\r,
+ kdl1=\EO, ked=\EJ, kel=\EI, kend=\E2, kf1=\Ea\r, kf10=\Ej\r,
kf11=\Ek\r, kf12=\El\r, kf13=\E!a\r, kf14=\E!b\r,
kf15=\E!c\r, kf16=\E!d\r, kf17=\E!e\r, kf18=\E!f\r,
kf19=\E!g\r, kf2=\Eb\r, kf20=\E!h\r, kf21=\E!i\r,
kf22=\E!j\r, kf23=\E!k\r, kf24=\E!l\r, kf3=\Ec\r,
kf4=\Ed\r, kf5=\Ee\r, kf6=\Ef\r, kf7=\Eg\r, kf8=\Eh\r,
kf9=\Ei\r, khome=\EH, khts=\E0, kich1=\EP \010, kil1=\EN,
- ktbc=\E 1, rev=\E4A, rmcup=\E>A, rmso=\E4@, rmul=\E4@,
- sgr=\E4%'@'%?%p1%t%'A'%|%;%?%p2%t%'B'%|%;%?%p3%t%'A'%|%;%?%p4%t%'D'%|%;%?%p5%t%'@'%|%;%?%p6%t%'H'%|%;%?%p7%t%'P'%|%;%c%?%p9%t\E>A%e\E<@%;,
+ knp=\EI, kpp=\EL, ktbc=\E 1, mc4=^P^T, mc5=^P^R, rev=\E4A,
+ rmcup=\E>A, rmso=\E4@, rmul=\E4@,
+ sgr=\E4%{64}%?%p1%t%{65}%|%;%?%p2%t%{66}%|%;%?%p3%t%{65}%|%;%?%p4%t%{68}%|%;%?%p5%t%{64}%|%;%?%p6%t%{72}%|%;%?%p7%t%{80}%|%;%c%?%p9%t\E>A%e\E<@%;,
sgr0=\E4@\E<@, smcup=\E>A, smso=\E4A, smul=\E4B,
-# How the 3164 sgr string works:
-# %{32} # push space for no special video characteristics
-# %?%p2%t%{1}%|%; # if p2 set, then OR the 1 bit for reverse
-# %?%p3%t%{4}%|%; # if p3 set, then OR the 4 bit for blink
-# %?%p4%t%{2}%|%; # if p4 set, then OR the 2 bit for underline
-# %c # pop Pa1
-# %{39}%p1%- # calculate 32 + (7 - p1) for foreground
-# %c # pop Pa2
-# %{64} # use only black background for now
-# %c # pop Pa3
+ibm3161-C|IBM 3161-C NLS terminal using cartridge,
+ rmcup=\E>B, s0ds=\E>B, s1ds=\E>A, smcup=\E>B,
+ use=ibm3161,
+ibm3162|IBM 3162 display,
+ blink=\E4$a, bold=\E4(a, il1=\EN, invis=\E40a, rev=\E4!a,
+ rmso=\E4>b, rmul=\E4=b, sgr0=\E4@, smso=\E4!a, smul=\E4"a,
+ use=ibm3161-C,
+
ibm3164|i3164|IBM 3164,
- blink=\E4D, bold=\E4H,
- sgr=\E4%{32}%?%p2%t%{1}%|%;%?%p3%t%{4}%|%;%?%p4%t%{2}%|%;%c%{39}%p1%-%c%{64}%c,
- sgr0=\E4@,
- use=ibm3163,
+ msgr,
+ colors#8, pairs#64,
+ rmcup=\E!9(N\E>B, s0ds=\E>B, s1ds=\E>A,
+ setb=\E4 %p1%{64}%+%c,
+ setf=\E4%?%p1%t %p1%{32}%+%c%e!'%;@,
+ smcup=\E!9/N\E>B, use=ibm3161,
+
+ibm5151|wy60-AT|wyse60-AT|IBM 5151 Monochrome display,
+ am, bw, msgr, xon,
+ cols#80, it#8, lines#25,
+ acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=^M,
+ cub=\E[%p1%dD, cub1=^H, cud=\E[%p1%dB, cud1=^J,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\E[A, dch1=\E[P, dl=\E[%p1%dM,
+ dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H,
+ hpa=\E[%i%p1%dG, il=\E[%p1%dL, il1=\E[L, ind=\E[S,
+ indn=\E[%p1%dS, invis=\E[8m, is2=\Ec, kbs=^H, kcbt=\E[Z,
+ kclr=\E[144q, kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C,
+ kcuu1=\E[A, kdch1=\E[P, ked=\E[148q, kel=\E[142q,
+ kend=\E[146q, kf0=\E[010q, kf1=\E[001q, kf10=\E[010q,
+ kf11=\E[011q, kf12=\E[012q, kf13=\E[013q, kf14=\E[014q,
+ kf15=\E[015q, kf16=\E[016q, kf17=\E[017q, kf18=\E[018q,
+ kf19=\E[019q, kf2=\E[002q, kf20=\E[020q, kf21=\E[021q,
+ kf22=\E[022q, kf23=\E[023q, kf24=\E[024q, kf25=\E[025q,
+ kf26=\E[026q, kf27=\E[027q, kf28=\E[028q, kf29=\E[029q,
+ kf3=\E[003q, kf30=\E[030q, kf31=\E[031q, kf32=\E[032q,
+ kf33=\E[033q, kf34=\E[034q, kf35=\E[035q, kf36=\E[036q,
+ kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q,
+ kf8=\E[008q, kf9=\E[009q, khome=\E[H, kich1=\E[139q,
+ kil1=\E[140q, kind=\E[151q, knp=\E[154q, kpp=\E[150q,
+ kri=\E[155q, krmir=\E[4l, rc=\E[u, rev=\E[7m, ri=\E[T,
+ rin=\E[%p1%dT, rmir=\E[4l, rmso=\E[m, rmul=\E[m, rs2=\Ec,
+ sc=\E[s,
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;m,
+ sgr0=\E[0m, smir=\E[4h, smso=\E[7m, smul=\E[4m,
ibmaed|IBM Experimental display,
am, eo, msgr,
lines#25, use=dm1520,
# (ibmmono: this had an unknown `sb' boolean, I changed it to `bs'.
# Also it had ":I0=f10:" which pretty obviously should be "l0=f10" -- esr)
-ibmmono|ibm5151|IBM workstation monochrome,
+ibmmono|IBM workstation monochrome,
eslok, hs,
bold=\EZ, dl1=\EM, dsl=\Ej\EY8 \EI\Ek, fsl=\Ek, il1=\EL,
invis=\EF\Ef0;\Eb0;, kbs=^H, kf0=\E<, kf1=\ES, kf2=\ET,
khome=\EH, kich1=\0, kind=\EE, knp=\EE, kpp=\Eg, kri=\EG,
lf0=f10, rev=\Ep, ri=\EA, rmso=\Ez, rmul=\Ew,
sgr0=\Ew\Eq\Ez\EB, smso=\EZ, smul=\EW, tsl=\Ej\EY8%+ \Eo, use=ibm3101,
-ibmega|ibm5154|IBM Enhanced Color Display,
+ibmega|IBM Enhanced Color Display,
cr=^M, cud1=^J, ht=^I, ind=^J, kbs=^H, kcub1=^H, kcud1=^J,
nel=^M^J,
use=ibmmono,
+ibm5154|IBM 5154 Color display,
+ colors#8, pairs#64,
+ bold@, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ibm5151,
ibmega-c|ibm5154-c|IBM Enhanced Color Display with standout and underline,
rmso=\EB, rmul=\EB, smso=\EF\Ef3;, smul=\EF\Ef2;,
use=ibmmono,
nel=^M^J,
use=ibmega,
# ibmapa* and ibmmono entries come from ACIS 4.3 distribution
-rtpc|ibmapa16|ibm6155|IBM 6155 Extended Monochrome Graphics Display,
+rtpc|ibmapa16|IBM 6155 Extended Monochrome Graphics Display,
lines#32,
dsl=\Ej\EY@ \EI\Ek, tsl=\Ej\EY@%+ \Eo, use=ibmmono,
+ibm6155|IBM 6155 Black & White display,
+ blink@, bold@, use=ibm5151,
# Advanced Monochrome (6153) and Color (6154) Graphics Display:
-ibmapa8c|ibmapa8|ibm6154|ibm6153|IBM 6153/4 Advanced Graphics Display,
+ibmapa8c|ibmapa8|IBM 6154 Advanced Graphics Display,
lines#31,
dsl=\Ej\EY? \EI\Ek, tsl=\Ej\EY?%+ \Eo, use=ibmmono,
ibmapa8c-c|ibm6154-c|IBM 6154 Advanced Color Graphics Display,
lines#31,
dim=\EF\Ef7;, dsl=\Ej\EY? \EI\Ek, tsl=\Ej\EY?%+ \Eo, use=ibmega-c,
-# From: Marc Pawliger <marc@ibminet.awdpa.ibm.com>
-# also in /usr/lpp/bos/bsdsysadmin.
-# (hft-c: this entry had :kb=\E[D:kf=\E[C: on the line with ku/kd/kh; this was
-# pretty obviously mislabeled for :le: and :nd:; also ":ul=\E[4m:" was clearly
-# a typo for ":us=\E[4m:"; also ":el=\E[K:" was a typo for ":ce=\E[K:".
-# I also added <rmam>/<smam> based on the terminal reset string.
-# There was an unknown boolean ":ht:" which I assume was meant to set hardware
-# tabs, so I have inserted it#8. Finally, :ac=^N: paired with the :ae: looked
-# like a typo for :as=^N:; finally, added empty <acsc> to quiet tic -- esr)
-ibm8512|ibm8513|hft-c|IBM High Function Terminal,
+ibm6154|IBM 6154 Color displays,
+ blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;12%;m,
+ sgr0=\E[0;10m,
+ use=ibm5154,
+ibm6153|IBM 6153 Black & White display,
+ blink@, bold=\E[12m, s0ds=\E[10m, s1ds=\E[11m, s2ds=\E[12m,
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;12%;m,
+ sgr0=\E[0;10m,
+ use=ibm5151,
+ibm6153-90|IBM 6153 Black & White display,
+ cols#90, lines#36,
+ blink@, bold@, use=ibm5151,
+ibm6153-40|IBM 6153 Black & White display,
+ cols#40, lines#12, use=ibm6153-90,
+ibm8512|ibm8513|IBM color VGA Terminal,
am, mir, msgr,
cols#80, it#8, lines#25,
- acsc=, blink=\E[5m, bold=\E[1m, clear=\E[H\E[J, cub1=\E[D,
- cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A,
- dl=\E[%p1%dM, dl1=\E[M, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
- home=\E[H, il=\E[%p1%dL, il1=\E[L, is2=\Eb\E[m\017\E[?7h,
- kcud1=\E[B, kcuu1=\E[A, kf0=\E[010q, kf1=\E[001q,
- kf2=\E[002q, kf3=\E[003q, kf4=\E[004q, kf5=\E[005q,
- kf6=\E[006q, kf7=\E[007q, kf8=\E[008q, kf9=\E[009q,
- khome=\E[H, rc=\E[u, rev=\E[7m, rmacs=^O, rmam=\E[?7l,
- rmcup=\E[20h, rmdc=\E[4l, rmir=\E[4l, rmso=\E[m, rmul=\E[m,
+ acsc=jjkkllmmnnqqttuuvvwwxx, blink=\E[5m, bold=\E[1m,
+ clear=\E[H\E[2J, cub1=\E[D, cud1=^J, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, dl=\E[%p1%dM, dl1=\E[M,
+ ech=\E[%p1%dX, ed=\E[J, el=\E[K, home=\E[H, il=\E[%p1%dL,
+ il1=\E[L, is2=\Eb\E[m\017\E[?7h, kcud1=\E[B, kcuu1=\E[A,
+ kf0=\E[010q, kf1=\E[001q, kf2=\E[002q, kf3=\E[003q,
+ kf4=\E[004q, kf5=\E[005q, kf6=\E[006q, kf7=\E[007q,
+ kf8=\E[008q, kf9=\E[009q, khome=\E[H, rc=\E[u, rev=\E[7m,
+ rmacs=^O, rmam=\E[?7l, rmcup=\E[20h, rmdc=\E[4l,
+ rmir=\E[4l, rmso=\E[m, rmul=\E[m,
rs1=\Eb\E[m\017\E[?7h\E[H\E[J, sc=\E[s, sgr0=\E[m,
smacs=^N, smam=\E[?7h, smcup=\E[20;4l\E[?7h\Eb,
smdc=\E[4h, smir=\E[4h, smso=\E[7m, smul=\E[4m,
-hft|AIWS High Function Terminal,
- am, xon,
- cols#80, lines#25,
- bel=^G, blink=\E[5m, bold=\E[1m, clear=\E[H\E[2J, cr=^M,
- cub1=^H, cud1=^J, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
- cuu1=\E[A, dch1=\E[P, dl1=\E[M, ed=\E[J, el=\E[K, home=\E[H,
- ht=^I, ich1=\E[@, il1=\E[L, ind=^J, invis=\E[8m, kbs=^H,
- kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
- kf1=\E[001q, kf2=\E[002q, kf3=\E[003q, kf4=\E[004q,
- kf5=\E[005q, kf6=\E[006q, kf7=\E[007q, kf8=\E[008q,
- kf9=\E[009q, khome=\E[H, knp=\E[153q, kpp=\E[159q,
- ktbc=\E[010q, rev=\E[7m, rmir=\E6, rmso=\E[m, rmul=\E[m,
- sgr0=\E[m, smir=\E6, smso=\E[7m, smul=\E[4m,
+ use=ibm8503,
+hft-c|HFT with Color,
+ colors#8, pairs#64,
+ acsc=jjkkllmmnnqqttuuvvwwxx, s0ds=\E(B, s1ds=\E(0,
+ setab=\E[4%p1%dm, setaf=\E[3%p1%dm, sgr0=\E[0m\E(B,
+ use=ibm5151,
+hft-c-old|HFT with Color PC850,
+ colors#8, pairs#64,
+ setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ibm5151,
ibm-system1|system1|ibm system/1 computer,
am, xt,
cols#80, lines#24,
bel=^G, clear=^Z, cub1=^H, cuf1=^\,
cup=\005%p1%{32}%+%c%p2%{32}%+%c, cuu1=^^, home=^K,
ind=^J,
-
-# From: <pryor@math.berkeley.edu>
-ibm5081|ibmmpel|IBM 5081 1024x1024 256/4096 color display,
- eslok, hs,
- lines#33,
- dsl=\Ej\EYA \EI\Ek, fsl=\Ek, tsl=\Ej\EYA%+ \Eo, use=ibmmono,
-ibm5081-c|ibmmpel-c|IBM 5081 1024x1024 256/4096 enhanced color display,
+ibm5081|hft|IBM Megapel Color display,
+ acsc=jjkkllmmnnqqttuuvvwwxx, blink@, bold@, s0ds=\E(B,
+ s1ds=\E(0, sgr0=\E[0m\E(B,
+ use=ibm5154,
+ibm5081-c|ibmmpel-c|IBM 5081 1024x1024 256/4096 Megapel enhanced color display,
eslok, hs,
lines#33,
dsl=\Ej\EYA \EI\Ek, fsl=\Ek, tsl=\Ej\EYA%+ \Eo, use=ibmega-c,
-ibm8514|IBM 8514 color display,
+ibm8503|ibm8507|ibm8604|IBM 8503 B & W VGA display,
+ use=hft-c,
+ibm8514|IBM 8514/a color VGA display,
eslok, hs,
- lines#41,
- cr=^M, cud1=^J, dsl=\Ej\EYI \EI\Ek, fsl=\Ek, ht=^I, ind=^J,
- kbs=^H, kcub1=^H, kcud1=^J, nel=^M^J, tsl=\Ej\EYI%+ \Eo,
- use=ibmega,
+ dsl=\Ej\EYI \EI\Ek, fsl=\Ek, tsl=\Ej\EYI%+ \Eo, use=hft,
ibm8514-c|IBM 8514 color display with standout and underline,
eslok, hs,
lines#41,
use=ibmega-c,
#
-# AIX entries. IBM ships these with AIX 3.
+# AIX entries. IBM ships these with AIX 3.2.5.
# AIX extension caps are commented out,
# except for box1 which has been translated to an <acsc> string.
#
+aixterm|IBM Aixterm Terminal Eemulator,
+ eslok, hs,
+ acsc=jjkkllmmnnqqttuuvvwwxx, bold=\E[1m, dsl=\E[?E,
+ fsl=\E[?F, ri@, s0ds=\E(B, s1ds=\E(0,
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;%?%p7%t;8%;m,
+ sgr0=\E[0;10m\E(B, tsl=\E[?%p1%dT,
+ use=ibm6154,
aixterm-m|IBM AIXterm Monochrome Terminal Emulator,
eslok, hs,
acsc=jjkkllmmnnqqttuuvvwwxx, bold=\E[1m, dsl=\E[?E,
sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m,
tsl=\E[?%p1%dT,
use=ibm6153,
+jaixterm|IBM Kanji Aixterm Terminal Eemulator,
+ acsc@, use=aixterm,
jaixterm-m|IBM Kanji AIXterm Monochrome Terminal Emulator,
acsc@,
use=aixterm-m,
bel=^G, clear=^L, cr=^M, cub1=^Z, cud1=^J, cuf1=^Y, cuu1=^\,
ed=^K, ind=^J, ll=^H^\,
+# The ICL6402 was actually the Kokusai Display System 6402.
+# The 6404 was the KDS7372 (color version of the 6402).
+#
+# ICL6404 control codes follow:
+#
+#code function
+#~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+#ctrl-A set SOM position at cursor position
+#ctrl-G Bell
+#ctrl-H Backspace
+#ctrl-I Horiz tab
+#ctrl-J Linefeed
+#ctrl-K Cursor up
+#ctrl-L Cursor right
+#ctrl-M Carriage return
+#ctrl-N Disable xon/xoff to host
+#ctrl-O Enable xon/xoff to host
+#ctrl-R Enable bidirectional mode
+#ctrl-T Disable bidirectional mode
+#ctrl-V Cursor down
+#ctrl-Z Clear unprotected data to insert char
+#ctrl-^ Cursor home
+#ctrl-_ Newline
+#
+#ESC lead-in char for multiple character command
+#
+#ESC space R execute power on sequence
+#ESC ! p1 p2 define scroll region:
+# p1 = scroll top line: 20h - 37h
+# p1 = scroll bottom line: 20h - 37h
+#ESC " unlock keyboard
+#ESC # lock keyboard
+#ESC $ Semi-graphics mode on
+#ESC % Semi-graphics mode off
+#ESC & protect mode on
+#ESC ' protect mode off
+#ESC ( write protect mode off (full intensity)
+#ESC ) write protect mode on (half intensity)
+#
+#ESC * clear screen
+#ESC + clear unprotected data to insert char
+#ESC , clear unprotected data to half intensity spaces
+#ESC - p1 p2 p3 p4 address cursor to page, row, column:
+# p1 = page number 0 - 3
+# p2 = row 20h - 7fh
+# p3 = column (lo) 20h - 7fh
+# p4 = column (hi) 20h - 21h (only 132 col)
+#ESC . p1 set cursor style:
+# p1 = 0 invisible cursor
+# p1 = 1 block blinking cursor
+# p1 = 2 block steady cursor
+# p1 = 3 underline blinking cursor
+# p1 = 4 underline steady cursor
+#ESC / transmit cursor location (page, row, column)
+#ESC 0 p1 p2 p3 p4 program edit key:
+# p1 = edit key code: '@'-'S', '`'-'s'
+# p2 p3 p4 = program data (3 bytes)
+#
+#ESC 1 set tab
+#ESC 2 clear tab at cursor
+#ESC 3 clear all tabs
+#ESC 4 send unprotect line to cursor
+#ESC 5 send unprotect page to cursor
+#ESC 6 send line to cursor
+#ESC 7 send page to cursor
+#ESC 8 n set scroll mode:
+# n = 0 set jump scroll
+# n = 1 set smooth scroll
+#ESC 9 n control display:
+# n = 0 display off
+# n = 1 display on
+#ESC : clear unprotected data to null
+#ESC ; clear unprotected data to insert char
+#
+#ESC < keyclick on
+#ESC = p1 p2 address cursor to row, column
+# p1 = row 20h - 7fh
+# p2 = column (lo) 20h - 7fh
+# p3 = column (hi) 20h - 21h (only 132 col)
+#ESC > keyclick off
+#ESC ? transmit cursor location (row, column)
+#
+#ESC @ copy print mode on
+#ESC A copy print mode off
+#ESC B block mode on
+#ESC C block mode off (conversation mode)
+#ESC D F set full duplex
+#ESC D H set half duplex
+#ESC E line insert
+#ESC F p1 p2 set page colour (p1 = f/grnd, p2 = b/grnd)
+# 0 = black, 1 = red, 2 = green, 3 = yellow
+# 4 = blue, 5 = magenta, 6 = cyan, 7 = white
+#ESC G n set serial field attribute (n = 30h - 3Fh)
+#ESC H n full graphics mode:
+# n = 0 exit full graphics mode
+# n = 1 enter full graphics mode
+#ESC I back tab
+#ESC J back page
+#ESC K forward page
+#
+#ESC L unformatted page print
+#ESC M L move window left (132 col mode only)
+#ESC M R move window right (132 col mode only)
+#ESC N set page edit (clear line edit)
+#ESC O set line edit (clear page edit)
+#ESC P formatted page print
+#ESC Q character insert
+#ESC R line delete
+#ESC S send message unprotected only
+#ESC T erase line to insert char
+#ESC U set monitor mode (see ESC X, ESC u)
+#
+#ESC V n select video attribute mode:
+# n = 0 serial field attribute mode
+# n = 1 parallel character attribute mode
+#ESC V 2 n define line attribute:
+# n = 0 single width single height
+# n = 1 single width double height
+# n = 2 double width single height
+# n = 3 double width double height
+#ESC V 3 n select character font:
+# n = 0 system font
+# n = 1 user defined font
+#ESC V 4 n select screen mode:
+# n = 0 page screen mode
+# n = 1 virtual screen mode
+#ESC V 5 n control mouse mode:
+# n = 0 disable mouse
+# n = 1 enable sample mode
+# n = 2 send mouse information
+# n = 3 enable request mode
+#ESC W character delete
+#ESC X clear monitor mode (see ESC U, ESC u)
+#ESC Y erase page to insert char
+#
+#ESC Z n send user/status line:
+# n = 0 send user line
+# n = 1 send status line
+# n = 2 send terminal ID
+#ESC [ p1 p2 p3 set character attribute (parallel char mode):
+# p1: 0 = normal
+# 1 = blank
+# 2 = blink
+# 3 = blink blank (= blank)
+# 4 = reverse
+# 5 = reverse blank
+# 6 = reverse blink
+# 7 = reverse blink blank (= reverse blank)
+# 8 = underline
+# 9 = underline blank
+# : = underline blink
+# ; = underline blink blank
+# < = reverse underline
+# = = reverse underline blank
+# > = reverse underline blink
+# ? = reverse underline blink blank
+# p2, p3: f/grnd, b/grnd colour
+# (see ESC F for colours)
+# use ZZ for mono, eg.
+# ESC [ 0 Z Z for normal
+# ESC [ 4 Z Z for inverse etc.
+#
+#ESC \ n set page size:
+# n = 1 24 lines/page
+# n = 2 48 lines/page
+# n = 3 72 lines/page
+# n = 4 96 lines/page
+#ESC ] n set Wordstar mode:
+# n = 0 normal (KDS7372) mode
+# n = 1 Wordstar mode
+#
+#ESC b set foreground colour screen
+#
+#ESC c n enter self-test mode:
+# n = 0 exit self test mode
+# n = 1 ROM test
+# n = 2 RAM test
+# n = 3 NVRAM test
+# n = 4 screen display test
+# n = 5 main/printer port test
+# n = 6 mouse port test
+# n = 7 graphics board test
+# n = 8 graphics memory test
+# n = 9 display all 'E'
+# n = : display all 'H'
+#ESC d set background colour screen
+#
+#ESC e n program insert char (n = insert char)
+#ESC f text CR load user status line with 'text'
+#
+#ESC g display user status line on 25th line
+#ESC h display system status line on 25th line
+#ESC i tab
+#ESC j reverse linefeed
+#ESC k n duplex/local edit mode:
+# n = 0 duplex edit mode
+# n = 1 local edit mode
+#ESC l n select virtual screen:
+# n = 0 screen 1
+# n = 1 screen 2
+#ESC m save current config to NVRAM
+#ESC n p1 select display screen:
+# p1 = 0 screen 1
+# p1 = 1 screen 2
+# p1 = 2 screen 3
+# p1 = 3 screen 4
+#ESC o p1 p2 set characters/line and attribute:
+# p1 = 0 80 chars/line
+#
+#ESC o p1 p2 set characters/line and attribute:
+# p1 = 0 80 chars/line
+# p1 = 1 132 chars/line
+# p2 = 0 single width single height
+# p2 = 1 single width double height
+# p2 = 2 double width single height
+# p2 = 3 double width double height
+#
+#ESC q insert mode on
+#ESC r edit mode on
+#ESC s send message all
+#ESC t erase line to null
+#ESC u clear monitor mode (see ESC U, ESC X)
+#ESC v autopage mode on
+#ESC w autopage mode off
+#ESC x p1 p2 p3 define delimiter code...
+#ESC y erase page to null
+#
+#ESC z 2 p1 p2 p3 p4 draw quadrangle:
+# p1 = starting row
+# p2 = starting column
+# p3 = end row
+# p4 = end column
+#
+#ESC { p1 p2 p3 p4 configure main port
+# (baud, stop bits, parity, word length)
+#
+#ESC | p1 p2 text Ctrl-Y program function key with 'text':
+# p1 = function key code:
+# '1' - ';' normal f1- f11
+# '<' - 'F' shifted f1 - f11
+# p2 = program mode:
+# 1 = FDX
+# 2 = LOC
+# 3 = HDX
+# Ctrl-Y = terminator
+# (use Ctrl-P to escape ^P, ^Y )
+#
+#ESC } p1 p2 p3 p4 configure printer port
+# (baud, stop bits, parity, word length)
+#ESC ~ send system status
+#
+# Codes and info from Peter Disdale <pete@pdlmail.demon.co.uk> 12 May 1997
+#
+# Entry is by esr going solely on above information and is UNTESTED.
+# This actually looks a lot like a Televideo 9xx.
+# This entry uses page 0 and is monochrome; I'm not brave enough to try
+# to make color work without a test terminal. The <am> capability is a guess.
+# The initialization string sets conversation mode, blinking underline cursor,
+# full duplex, parallel attribute mode, display user status line, white
+# foreground, black background, normal highlight.
+#
+icl6404|kds7372|icl6402|kds6402|ICL 6404 aka Kokusai Display Systems 7372,
+ am, hs,
+ cols#80, lines#24,
+ bel=^G, blink=\E[2ZZ, cbt=\EI, civis=\E.0, clear=\E*,
+ cnorm=\E.3, cr=^M,
+ csr=\E!%+%p1%{32}%+%p2%{32} cud1=\026, cuf1=^L,
+ cup=\E=%p1%{32}%+%c%p2%{80}%m%{32}%+%c%p2%{80}%>%{32}%+%c,
+ cuu1=^K, cvvis=\E.1, dch=\EW, dl1=\ER, home=^^, ht=^I, hts=\E1,
+ il1=\EE, invis=\E[1ZZ, is1=\EC\E.3\EDF\EV1\Eg\E[0ZZ,
+ nel=^_, rev=\E[4ZZ, rmir=\Er,
+ rmso=\E[%gh%{4}%^%Ph%gh%dZZ,
+ rmul=\E[%gh%{8}%^%Ph%gh%dZZ, rs2=\Eo1,
+ sgr=\E[%{0}%?%p1%t%{4}%|%;%?%p2%t%{8}%|%;%?%p3%t%{4}%|%;%?%p4%t%{2}%|%;%?%p7%t%{1}%|%;ZZ,
+ sgr0=\E[0ZZ, smir=\Eq, smso=\E[8ZZ, smul=\E[8ZZ, tbc=\E3,
+icl6404-w|kds7372-w|ICL 6404 aka Kokusai Display Systems 7372 132 cols,
+ rs2=\Eo1,
+ use=icl6404,
+
#### Interactive Systems Corp
#
# ISC used to sell OEMed and customized hardware to support ISC UNIX.
#### Kimtron (abm, kt)
#
+# Kimtron seems to be history, but as March 1998 these people are still
+# offering repair services for Kimtron equipment:
+#
+# Com/Pair Monitor Service
+# 1105 N. Cliff Ave.
+# Sioux Falls, South Dakota 57103
+#
+# WATS voice: 1-800/398-4946
+# POTS fax: +1 605/338-8709
+# POTS voice: +1 605/338-9650
+# Email: <compair@sd.cybernex.net>
+# Internet/Web: <http://www.com-pair.com>
+#
# Kimtron entries include (undocumented) codes for: enter dim mode,
# enter bold mode, enter reverse mode, turn off all attributes.
#
am, bw, msgr,
cols#80, lines#24,
bel=^G, clear=\014$<20>, cr=^M, cub1=^H, cud1=^J, cuf1=^F,
- cup=\013%p1%' '%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
+ cup=\013%p1%{32}%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
cuu1=^Z, ed=\EJ, el=\EK, home=^A,
hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
- ind=^J, kbs=^H, khome=^A, vpa=\013%p1%' '%+%c,
+ ind=^J, kbs=^H, khome=^A, vpa=\013%p1%{32}%+%c,
# p4: Prism-4
# -----------
cols#80, lines#24, wsl#72, xmc#1,
bel=^G, blink=^CB, civis=^]\344, clear=\014$<20>,
cnorm=^]\342, cr=^M, cub1=^H, cud1=^J, cuf1=^F,
- cup=\013%p1%' '%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
+ cup=\013%p1%{32}%+%c\020%p2%{10}%/%{16}%*%p2%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
cuu1=^Z, dim=^CA, dsl=\035\343\035\345, ed=\EJ, el=\EK,
fsl=^]\345, home=^A,
hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%Pc%?%{17}%gc%=%{19}%gc%=%|%gc%!%|%t%{1}%gc%+%c%{8}%e%gc%;%c,
ind=^J, invis=^CH, kbs=^H, khome=^A, mc0=\EU, mc4=\ET, mc5=\ER,
rev=^CD, rmso=^C\s, rmul=^C\s,
- sgr=\003%'@'%?%p1%p3%|%t%{4}%+%;%?%p2%t%{16}%+%;%?%p4%t%{2}%+%;%?%p5%t%{1}%+%;%?%p7%t%{8}%+%;%c%?%p9%t\016%e\017%;,
+ sgr=\003%{64}%?%p1%p3%|%t%{4}%+%;%?%p2%t%{16}%+%;%?%p4%t%{2}%+%;%?%p5%t%{1}%+%;%?%p7%t%{8}%+%;%c%?%p9%t\016%e\017%;,
sgr0=^C\s, smso=^CD, smul=^CP, tsl=^]\343,
- vpa=\013%p1%' '%+%c,
+ vpa=\013%p1%{32}%+%c,
# p5: Prism-5
# -----------
am,
cols#80, lines#24,
bel=^G, clear=\014$<12/>, cr=^M, cub1=^H, cud1=^K, cuf1=^X,
- cup=\024%p1%{24}%+%c%p2%p2%?%'/'%>%t%'0'%+%;%'P'%+%c,
+ cup=\024%p1%{24}%+%c%p2%p2%?%{47}%>%t%{48}%+%;%{80}%+%c,
cuu1=^Z, dch1=\004$<.1*/>, dl1=\027$<2.3*/>,
ed=\037$<2.2*/>, el=\036$<.1*/>, home=^],
il1=\001<2.3*/>, ind=^J, kcub1=^H, kcud1=^K, kcuf1=^X,
am,
cols#80, it#8, lines#24, vt#9,
bel=^G, clear=^]^C, cr=^M, cub1=^H, cud1=^J, cuf1=^X,
- cup=\024%p1%{24}%+%c%p2%p2%?%{32}%>%t%'0'%+%;%'P'%+%c,
+ cup=\024%p1%{24}%+%c%p2%p2%?%{32}%>%t%{48}%+%;%{80}%+%c,
cuu1=^Z, dl1=\027$<80>, ed=^_, el=^^, home=^], ht=\011$<2>,
il1=\001$<80>, ind=^J, is2=^S\E^Q, kcub1=^H, kcud1=^K,
kcuf1=^X, kcuu1=^Z, ri=\022$<3>, uc=^U,
# There is an NCR4103 terminal that's just a re-badged Wyse-50.
#
+# The following vendor-supplied termcaps were captured from the Boundless
+# Technologies site, 8 March 1998. I removed all-upper-case names that were
+# identical, except for case, to lower-case ones. I also uncommented the acsc
+# capabilities.X
+#
+# The Intecolor emulation of the NCR 2900/260C color terminal is basicly a
+# DEC vt200/300 with color capabilities added.
+ncr260intan|NCR Intecolor emulation of the 2900_260C with an ANSI keyboard,
+ colors#8, pairs#64,
+ op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300an,
+# The Intecolor emulation of the NCR 2900/260C color terminal is basicly a
+# DEC vt200/300 with color capabilities added.
+ncr260intwan|NCR Intecolor emulation of the 2900_260C with an ANSI keyboard,
+ colors#8, pairs#64,
+ op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300wan,
+# The Intecolor emulation of the NCR 2900/260C color terminal is basicly a DEC
+# vt200/300 with color capabilities added.
+ncr260intpp|NCR Intecolor emulation of the 2900_260C with a PC+ keyboard,
+ colors#8, pairs#64,
+ op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300pp,
+# The Intecolor emulation of the NCR 2900/260C color terminal is basicly a
+# DEC vt200/300 with color capabilities added.
+ncr260intwpp|NCR Intecolor emulation of the 2900_260C with a PC+ keyboard in 132 column mode,
+ colors#8, pairs#64,
+ op=\E[0m, setab=\E[4%p1%dm, setaf=\E[3%p1%dm, use=ncr260vt300wpp,
+# This definition for ViewPoint supports several attributes. This means
+# that it has magic cookies (extra spaces where the attributes begin).
+# Some applications do not function well with magic cookies. The System
+# Administrator's Shell in NCR Unix SVR4 1.03 is one such application.
+# If supporting various attributes is not vital, 'xmc#1' and the extra
+# attributes can be removed.
+# Mapping to ASCII character set ('acsc' capability) can also be
+# restored if needed.
+ncr260vppp|NCR 2900_260 viewpoint,
+ am, bw, hs, km, mc5i, mir, msgr, xon,
+ cols#80, lines#24, nlab#32, xmc#1,
+ acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
+ cbt=\EI, civis=\E`0, clear=\014$<40>, cnorm=\E`5,
+ cr=\r$<2>, cub1=\010$<2>, cud1=\n$<2>, cuf1=\006$<2>,
+ cup=\EY%p1%{32}%+%c%p2%{32}%+%c$<5>, cuu1=\032$<2>,
+ cvvis=\E`5, dch1=\EW$<2>, dim=\EGp, dl1=\El$<2>, dsl=\E`c,
+ ed=\Ek$<2>, el=\EK$<2>, fsl=^M, home=\036$<2>, ht=^I,
+ hts=\E1, il1=\EM$<2>, ind=\n$<2>, invis=\EG1,
+ is2=\Ee6\E~%$<100>\E+\E`\:\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>,
+ kDC=\El, kEND=\Ek, kHOM=^A, kPRT=\E7, kRIT=^F, ka1=^A, ka3=\EJ,
+ kbs=^H, kc1=\ET, kc3=\EJ, kcub1=^U, kcud1=^J, kcuf1=^F,
+ kcuu1=^Z, kdch1=\EW, kend=\EK, kf1=^B1\r, kf10=^B\:\r,
+ kf11=^B;\r, kf12=^B<\r, kf13=^B=\r, kf14=^B>\r, kf15=^B?\r,
+ kf16=^B@\r, kf17=^B!\r, kf18=^B"\r, kf19=^B#\r, kf2=^B2\r,
+ kf20=^B$\r, kf21=\002%^M, kf22=^B&\r, kf23=^B'\r,
+ kf24=^B(\r, kf25=^B)\r, kf26=^B*\r, kf27=^B+\r,
+ kf28=^B\,\r, kf29=^B-\r, kf3=^B3\r, kf30=^B.\r, kf31=^B/\r,
+ kf32=^B0\r, kf4=^B4\r, kf5=^B5\r, kf6=^B6\r, kf7=^B7\r,
+ kf8=^B8\r, kf9=^B9\r, khome=^A, kich1=\Eq, knp=\EJ, kpp=\EJ,
+ kprt=\EP, ll=\001$<5>, mc0=\EP$<100>, mc4=^T, mc5=^R,
+ mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<5>,
+ nel=\037$<2>, rev=\EG4, ri=\Ej$<2>, rmacs=\EcB0\EH\003,
+ rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
+ rs2=\Ee6\E~%$<100>\E+\E`\:\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>,
+ sgr0=\EG0\EH\003, smacs=\EcB1\EH\002, smir=\Eq,
+ smso=\EG4, smul=\EG8, smxon=\Ec21, tsl=\EF,
+ncr260vpwpp|NCR 2900_260 viewpoint wide mode,
+ cols#132,
+ cup=\Ea%i%p1%dR%p2%dC$<30>,
+ is2=\Ee6\E~%$<100>\E+\E`;\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>,
+ rs2=\Ee6\E~%$<100>\E+\E`;\Ed/\E`1\EO\Ee4\Ec@0@\Ec@1A\EcB0\EcC1\Ee7$<100>,
+ use=ncr260vppp,
+ncr260vt100an|NCR 2900_260 vt100 with ansi kybd,
+ am, hs, mir, msgr, xenl, xon,
+ cols#80, lines#24, nlab#32,
+ acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
+ blink=\E[5m, bold=\E[1m, civis=\E[?25l,
+ clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>,
+ csr=\E[%i%p1%d;%p2%dr, cub=\E[%p1%dD$<5>,
+ cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>,
+ cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
+ cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>,
+ cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>,
+ dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~,
+ ech=\E[%p1%dX, ed=\E[0J$<5>, el=\E[0K$<3>, el1=\E[1K$<3>,
+ fsl=\E[0$}, home=\E[H$<1>, hpa=\E[%p1%dG$<40>, ht=^I,
+ hts=\EH, ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>,
+ il1=\E[L$<5>, ind=\ED$<5>, indn=\E[%p1%dE$<5>,
+ invis=\E[8m,
+ is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ ka1=\EOw, ka3=\EOu, kb2=\EOy, kbs=^H, kc1=\EOq, kc3=\EOs,
+ kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
+ kdch1=\E[3~, kent=\EOM, kf1=\EOP, kf2=\EOQ, kf3=\EOR,
+ kf4=\EOS, kfnd=\E[1~, khlp=\E[28~, kich1=\E[2~, knp=\E[6~,
+ kpp=\E[5~, krdo=\E[29~, kslt=\E[4~, nel=\EE$<5>, rc=\E8,
+ rev=\E[7m, ri=\EM$<5>, rmacs=^O, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[0m, rmul=\E[0m,
+ rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ sc=\E7,
+ sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<20>,
+ sgr0=\E[0m\017$<20>, smacs=^N, smir=\E[4h,
+ smkx=\E[?1h\E=, smso=\E[1;7m, smul=\E[4m, tbc=\E[3g,
+ tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>,
+ncr260vt100wan|NCR 2900_260 vt100 wide mode ansi kybd,
+ cols#132,
+ cup=\E[%i%p1%d;%p2%dH$<30>,
+ is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ use=ncr260vt100an,
+ncr260vt100pp|NCR 2900_260 vt100 with PC+ kybd,
+ is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~,
+ kend=\E[5~, khome=\E[2~, kich1=\E[1~, knp=\E[6~, kpp=\E[3~,
+ lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>,
+ rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ smkx=\E=,
+ use=ncr260vt100an,
+ncr260vt100wpp|NCR 2900_260 vt100 wide mode pc+ kybd,
+ cols#132,
+ cup=\E[%i%p1%d;%p2%dH$<30>,
+ is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ use=ncr260vt100pp,
+ncr260vt200an|NCR 2900_260 vt200 with ansi kybd,
+ am, hs, mir, msgr, xenl, xon,
+ cols#80, lines#24, nlab#32,
+ acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
+ blink=\E[5m, bold=\E[1m, civis=\E[?25l,
+ clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>,
+ csr=\E[%i%p1%d;%p2%dr$<5>, cub=\E[%p1%dD$<5>,
+ cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>,
+ cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
+ cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>,
+ cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>,
+ dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~,
+ ech=\E[%p1%dX$<5>, ed=\E[0J, el=\E[0K$<5>, el1=\E[1K$<5>,
+ fsl=\E[0$}, home=\E[H, hpa=\E[%p1%dG$<40>, ht=^I, hts=\EH,
+ ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>, il1=\E[L$<5>,
+ ind=\ED$<5>, indn=\E[%p1%dE$<5>, invis=\E[8m,
+ is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ ka1=\EOw, ka3=\EOu, kb2=\EOy, kbs=^H, kc1=\EOq, kc3=\EOs,
+ kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
+ kdch1=\E[3~, kent=\EOM, kf0=\EOy, kf1=\EOP, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+ kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+ kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf21=\E[31~,
+ kf22=\E[32~, kf23=\E[33~, kf24=\E[34~, kf25=\E[35~,
+ kf26=\E[1~, kf27=\E[2~, kf28=\E[3~, kf29=\E[4~, kf3=\EOR,
+ kf30=\E[5~, kf31=\E[6~, kf32=\E[7~, kf33=\E[8~, kf34=\E[9~,
+ kf35=\E[10~, kf4=\EOS, kf5=\E[M, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~,
+ kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~,
+ mc0=\E[i, mc4=\E[4i, mc5=\E[5i, nel=\EE, rc=\E8, rev=\E[7m,
+ ri=\EM$<5>, rmacs=\017$<20>, rmam=\E[?7l, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
+ rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ sc=\E7,
+ sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<20>,
+ sgr0=\E[0m\017$<20>, smacs=\016$<20>, smam=\E[?7h,
+ smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
+ tbc=\E[3g, tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>,
+ncr260vt200wan|NCR 2900_260 vt200 wide mode ansi kybd,
+ cols#132,
+ cup=\E[%i%p1%d;%p2%dH$<30>,
+ is2=\E[!p\E[?3;7;19;67h\E[?4l\E(B\E)0\017\E[2J\E[1;1H$<200>,
+ rs2=\E[!p\E[?3;7;19;67h\E[?4l\E(B\E)0\017\E[2J\E[1;1H$<200>,
+ use=ncr260vt200an,
+ncr260vt200pp|NCR 2900_260 vt200 with pc+ kybd,
+ ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~,
+ kend=\E[1~, khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
+ lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>, smkx=\E=,
+ use=ncr260vt200an,
+ncr260vt200wpp|NCR 2900_260 vt200 wide mode pc+ kybd,
+ cols#132,
+ cup=\E[%i%p1%d;%p2%dH$<30>,
+ is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ use=ncr260vt200pp,
+ncr260vt300an|NCR 2900_260 vt300 with ansi kybd,
+ am, hs, mir, msgr, xenl, xon,
+ cols#80, lines#24, nlab#32,
+ acsc=``aaffggjjkkllmmnnooqqssttuuvvwwxx~~, bel=^G,
+ blink=\E[5m, bold=\E[1m, civis=\E[?25l,
+ clear=\E[2J\E[1;1H$<20>, cnorm=\E[?25h, cr=\r$<1>,
+ csr=\E[%i%p1%d;%p2%dr$<5>, cub=\E[%p1%dD$<5>,
+ cub1=\E[D$<5>, cud=\E[%p1%dB$<5>, cud1=\E[B$<5>,
+ cuf=\E[%p1%dC$<5>, cuf1=\E[C$<5>,
+ cup=\E[%i%p1%d;%p2%dH$<10>, cuu=\E[%p1%dA$<5>,
+ cuu1=\E[A$<5>, dch=\E[%p1%dP$<5>, dch1=\E[1P$<5>,
+ dl=\E[%p1%dM$<5>, dl1=\E[M$<5>, dsl=\E[0$~\E[1$~,
+ ech=\E[%p1%dX$<5>, ed=\E[0J, el=\E[0K$<5>, el1=\E[1K$<5>,
+ fsl=\E[0$}, home=\E[H, hpa=\E[%p1%dG$<40>, ht=^I, hts=\EH,
+ ich=\E[%p1%d@$<5>, il=\E[%p1%dL$<5>, il1=\E[L$<5>,
+ ind=\ED$<5>, indn=\E[%p1%dE$<5>, invis=\E[8m,
+ is2=\E[!p\E[?7;19;67h\E[?1;3;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ ka1=\EOw, ka3=\EOu, kb2=\EOy, kbs=^H, kc1=\EOq, kc3=\EOs,
+ kcub1=\EOD, kcud1=\EOB, kcuf1=\EOC, kcuu1=\EOA,
+ kdch1=\E[3~, kent=\EOM, kf0=\EOy, kf1=\EOP, kf10=\E[21~,
+ kf11=\E[23~, kf12=\E[24~, kf13=\E[25~, kf14=\E[26~,
+ kf15=\E[28~, kf16=\E[29~, kf17=\E[31~, kf18=\E[32~,
+ kf19=\E[33~, kf2=\EOQ, kf20=\E[34~, kf21=\E[31~,
+ kf22=\E[32~, kf23=\E[33~, kf24=\E[34~, kf25=\E[35~,
+ kf26=\E[1~, kf27=\E[2~, kf28=\E[3~, kf29=\E[4~, kf3=\EOR,
+ kf30=\E[5~, kf31=\E[6~, kf32=\E[7~, kf33=\E[8~, kf34=\E[9~,
+ kf35=\E[10~, kf4=\EOS, kf5=\E[M, kf6=\E[17~, kf7=\E[18~,
+ kf8=\E[19~, kf9=\E[20~, kfnd=\E[1~, khlp=\E[28~,
+ kich1=\E[2~, knp=\E[6~, kpp=\E[5~, krdo=\E[29~, kslt=\E[4~,
+ mc0=\E[i, mc4=\E[4i, mc5=\E[5i, nel=\EE, rc=\E8, rev=\E[7m,
+ ri=\EM$<5>, rmacs=\017$<20>, rmam=\E[?7l, rmir=\E[4l,
+ rmkx=\E[?1l\E>, rmso=\E[27m, rmul=\E[24m,
+ rs2=\E[!p\E[?7;19;67h\E[?1;3;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ sc=\E7,
+ sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<20>,
+ sgr0=\E[0m\017$<20>, smacs=\016$<20>, smam=\E[?7h,
+ smir=\E[4h, smkx=\E[?1h\E=, smso=\E[7m, smul=\E[4m,
+ tbc=\E[3g, tsl=\E[2$~\E[1$}, vpa=\E[%p1%dd$<40>,
+ncr260vt300wan|NCR 2900_260 vt300 wide mode ansi kybd,
+ cols#132,
+ cup=\E[%i%p1%d;%p2%dH$<30>,
+ is2=\E[!p\E[?3;7;19;67h\E[?4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H$<200>,
+ rs2=\E[!p\E[?3;7;19;67h\E[?4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H$<200>,
+ use=ncr260vt300an,
+ncr260vt300pp|NCR 2900_260 vt300 with pc+ kybd,
+ ka1=\E[H, ka3=\EOu, kb2=\E[V, kc3=\E[U, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[4~,
+ kend=\E[1~, khome=\E[H, kich1=\E[2~, knp=\E[6~, kpp=\E[5~,
+ lf1=pf1, lf2=pf2, lf3=pf3, lf4=pf4, rmkx=\E>, smkx=\E=,
+ use=ncr260vt300an,
+NCR260VT300WPP|ncr260vt300wpp|NCR 2900_260 vt300 wide mode pc+ kybd,
+ cols#132,
+ cup=\E[%i%p1%d;%p2%dH$<30>,
+ is2=\E[!p\E[?3;7;19;67h\E[?1;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ rs2=\E[!p\E[?3;7;19;67h\E[?1;4l\E[1;0%w\E(B\E)0\017\E[2J\E[1;1H\E>$<200>,
+ use=ncr260vt300pp,
+# This terminfo file contains color capabilities for the Wyse325 emulation of
+# the NCR 2900/260C color terminal. Because of the structure of the command
+# (escape sequence) used to set color attributes, one of the fore/background
+# colors must be preset to a given value. I have set the background color to
+# black. The user can change this setup by altering the last section of the
+# 'setf' definition. The escape sequence to set color attributes is
+# ESC d y <foreground_color> <background_color> 1
+# In addition, the background color can be changed through the desk accessories.
+# The capablitiy 'op' sets colors to green on black (default combination).
+#
+# NOTE: The NCR Unix System Administrator's Shell will not function properly
+# if the 'pairs' capability is defined. Un-Comment the 'pairs'
+# capability and recompile if you wish to have it included.
+#
+ncr260wy325pp|NCR 2900_260 wyse 325,
+ am, bw, hs, km, mc5i, mir, msgr, xon,
+ colors#16, cols#80, lines#24, ncv#33, nlab#32,
+ acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
+ cbt=\EI, civis=\E`0, clear=\E*$<10>, cnorm=\E`1, cr=^M,
+ cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
+ cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<10>, cuu1=\013$<5>,
+ cvvis=\E`5, dch1=\EW$<50>, dl1=\ER$<5>, dsl=\E`c,
+ ed=\Ey$<5>, el=\Et$<5>, fsl=^M, home=\036$<5>, ht=^I,
+ hts=\E1, il1=\EE$<5>, ind=\n$<5>, invis=\EG1,
+ is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ kDC=\ER, kEND=\EY, kHOM=\E{, kNXT=\EK, kPRT=\E7, kPRV=\EJ,
+ kRIT=^L, ka1=^^, kb2=\EJ, kbs=^H, kc1=\ET, kc3=\EK, kcbt=\EI,
+ kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, kdch1=\EW, kend=\ET,
+ kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r,
+ kf14=^AM\r, kf15=^AN\r, kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r,
+ kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r,
+ kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r,
+ kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r, kf30=^Am\r, kf31=^An\r,
+ kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r, kf6=^AE\r, kf7=^AF\r,
+ kf8=^AG\r, kf9=^AH\r, khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ,
+ kprt=\EP, mc0=\EP, mc4=^T, mc5=^R,
+ mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<10>,
+ nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH\003\EcB0,
+ rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
+ rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ setb=\s,
+ setf=%?%p1%{0}%=%t%{49}%e%p1%{1}%=%t%{50}%e%p1%{2}%=%t%{51}%e%p1%{3}%=%t%{52}%e%p1%{4}%=%t%{53}%e%p1%{5}%=%t%{54}%e%p1%{6}%=%t%{55}%e%p1%{7}%=%t%{64}%e%p1%{8}%=%t%{57}%e%p1%{9}%=%t%{58}%e%p1%{10}%=%t%{59}%e%p1%{11}%=%t%{60}%e%p1%{12}%=%t%{61}%e%p1%{13}%=%t%{62}%e%p1%{14}%=%t%{63}%e%p1%{15}%=%t%{56}%;\Edy%c11$<100>,
+ sgr0=\EG0\EcB0\EcD$<15>, smacs=\EH\002\EcB1, smam=\Ed/,
+ smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0,
+ tsl=\EF,
+ncr260wy325wpp|NCR 2900_260 wyse 325 wide mode,
+ cols#132,
+ cup=\Ea%i%p1%dR%p2%dC$<30>,
+ is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ use=ncr260wy325pp,
+# This definition for Wyse 350 supports several attributes. This means
+# that it has magic cookies (extra spaces where the attributes begin).
+# Some applications do not function well with magic cookies. The System
+# Administrator's Shell in NCR Unix SVR4 1.03 is one such application.
+# If supporting various attributes is not vital, 'xmc#1' and the extra
+# attributes can be removed.
+# Mapping to ASCII character set ('acsc' capability) can also be
+# restored if needed.
+# In addition, color capabilities have been added to this file. The drawback,
+# however, is that the background color has to be black. The foreground colors
+# are numbered 0 through 15.
+#
+# NOTE: The NCR Unix System Administrator's Shell does not function properly
+# with the 'pairs' capability defined as below. If you wish to
+# have it included, Un-comment it and recompile (using 'tic').
+#
+ncr260wy350pp|NCR 2900_260 wyse 350,
+ am, bw, hs, km, mc5i, mir, msgr, xon,
+ colors#16, cols#80, lines#24, ncv#33, nlab#32, xmc#1,
+ acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
+ cbt=\EI, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=^M,
+ cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
+ cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<40>, cuu1=\013$<5>,
+ cvvis=\E`5, dch1=\EW$<50>, dim=\EGp, dl1=\ER$<5>, dsl=\E`c,
+ ed=\Ey$<5>, el=\Et$<5>, fsl=^M, home=\036$<10>, ht=^I,
+ hts=\E1, il1=\EE$<5>, ind=\n$<5>, invis=\EG1,
+ is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ kDC=\ER, kEND=\EY, kHOM=\E{, kPRT=\E7, kRIT=^L, ka1=^^, kbs=^H,
+ kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L,
+ kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r,
+ kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r,
+ kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r,
+ kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r,
+ kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r,
+ kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r,
+ kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r,
+ khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP,
+ mc0=\EP$<10>, mc4=^T, mc5=^R,
+ mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<20>,
+ nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH\003\EcB0,
+ rmam=\Ed., rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
+ rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ setb=\s,
+ setf=%?%p1%{0}%=%t%{49}%e%p1%{1}%=%t%{50}%e%p1%{2}%=%t%{51}%e%p1%{3}%=%t%{52}%e%p1%{4}%=%t%{53}%e%p1%{5}%=%t%{54}%e%p1%{6}%=%t%{55}%e%p1%{7}%=%t%{102}%e%p1%{8}%=%t%{97}%e%p1%{9}%=%t%{98}%e%p1%{10}%=%t%{99}%e%p1%{11}%=%t%{101}%e%p1%{12}%=%t%{106}%e%p1%{13}%=%t%{110}%e%p1%{14}%=%t%{111}%e%p1%{15}%=%t%{56}%;\Em0%c$<100>,
+ sgr0=\EG0\EH\003\EcD, smacs=\EH\002\EcB1, smam=\Ed/,
+ smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0,
+ tsl=\EF,
+ncr260wy350wpp|NCR 2900_260 wyse 350 wide mode,
+ cols#132,
+ cup=\Ea%i%p1%dR%p2%dC$<30>,
+ is2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>,
+ rs2=\Ee6\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>,
+ use=ncr260wy350pp,
+# This definition for Wyse 50+ supports several attributes. This means
+# that it has magic cookies (extra spaces where the attributes begin).
+# Some applications do not function well with magic cookies. The System
+# Administrator's Shell in NCR Unix SVR4 1.03 is one such application.
+# If supporting various attributes is not vital, 'xmc#1' and the extra
+# attributes can be removed.
+# Mapping to ASCII character set ('acsc' capability) can also be
+# restored if needed.
+# (ncr260wy50+pp: originally contained commented-out
+# <acsc=j5k3l2m1n8q:t4u9v=w0x6>, as well as the commented-out one there -- esr)
+ncr260wy50+pp|NCR 2900_260 wyse 50+,
+ am, bw, hs, km, mc5i, mir, msgr, xon,
+ cols#80, lines#24, nlab#32, xmc#1,
+ acsc=0wa_h[jukslrmqnxqzttuyv]wpxv, bel=^G, blink=\EG2,
+ cbt=\EI$<5>, civis=\E`0, clear=\E+$<20>, cnorm=\E`1, cr=^M,
+ cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
+ cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<30>, cuu1=\013$<5>,
+ cvvis=\E`5, dch1=\EW$<50>, dim=\EGp, dl1=\ER$<5>, dsl=\E`c,
+ ed=\EY$<5>, el=\ET$<5>, fsl=^M, home=\036$<10>,
+ ht=\011$<5>, hts=\E1$<5>, il1=\EE$<5>, ind=\n$<5>,
+ invis=\EG1,
+ is2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ kDC=\ER, kEND=\EY, kHOM=\E{, kPRT=\E7, kRIT=^L, ka1=^^, kbs=^H,
+ kc1=\ET, kc3=\EK, kcbt=\EI, kcub1=^H, kcud1=^J, kcuf1=^L,
+ kcuu1=^K, kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r,
+ kf11=^AJ\r, kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r,
+ kf16=^AO\r, kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r,
+ kf20=^Ac\r, kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r,
+ kf25=^Ah\r, kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r,
+ kf3=^AB\r, kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r,
+ kf5=^AD\r, kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r,
+ khome=^^, kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP,
+ mc0=\EP$<10>, mc4=^T, mc5=^R,
+ mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<10>,
+ nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH^C, rmam=\Ed.,
+ rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
+ rs2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ sgr0=\EG0\EH\003$<15>, smacs=\EH^B, smam=\Ed/, smir=\Eq,
+ smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0$<5>, tsl=\EF,
+ncr260wy50+wpp|NCR 2900_260 wyse 50+ wide mode,
+ cols#132,
+ cup=\Ea%i%p1%dR%p2%dC$<30>,
+ is2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>,
+ rs2=\Ee6\E~"$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<200>,
+ use=ncr260wy50+pp,
+ncr260wy60pp|NCR 2900_260 wyse 60,
+ am, bw, hs, km, mc5i, mir, msgr, xon,
+ cols#80, lines#24, nlab#32,
+ acsc=07a?h;j5k3l2m1n8q\:t4u9v=w0x6, bel=^G, blink=\EG2,
+ cbt=\EI$<15>, civis=\E`0, clear=\E*$<100>, cnorm=\E`1,
+ cr=^M, cub1=\010$<5>, cud1=\n$<5>, cuf1=\014$<5>,
+ cup=\E=%p1%{32}%+%c%p2%{32}%+%c$<10>, cuu1=\013$<5>,
+ cvvis=\E`5, dch1=\EW$<50>, dl1=\ER$<5>, dsl=\E`c,
+ ed=\Ey$<5>, el=\Et$<5>, fsl=^M, home=\036$<25>,
+ ht=\011$<15>, hts=\E1$<15>, il1=\EE$<5>, ind=\n$<5>,
+ invis=\EG1,
+ is2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ kDC=\ER, kEND=\EY, kHOM=\E{, kNXT=\EK, kPRT=\E7, kPRV=\EJ,
+ kRIT=^L, ka1=^^, kb2=\EJ, kbs=^H, kc1=\ET, kc3=\EK,
+ kcbt=\EI$<15>, kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K,
+ kdch1=\EW, kend=\ET, kf1=^A@\r, kf10=^AI\r, kf11=^AJ\r,
+ kf12=^AK\r, kf13=^AL\r, kf14=^AM\r, kf15=^AN\r, kf16=^AO\r,
+ kf17=^A`\r, kf18=^Aa\r, kf19=^Ab\r, kf2=^AA\r, kf20=^Ac\r,
+ kf21=^Ad\r, kf22=^Ae\r, kf23=^Af\r, kf24=^Ag\r, kf25=^Ah\r,
+ kf26=^Ai\r, kf27=^Aj\r, kf28=^Ak\r, kf29=^Al\r, kf3=^AB\r,
+ kf30=^Am\r, kf31=^An\r, kf32=^Ao\r, kf4=^AC\r, kf5=^AD\r,
+ kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
+ kich1=\Eq, knp=\EK, kpp=\EJ, kprt=\EP, mc0=\EP, mc4=^T, mc5=^R,
+ mrcup=\Ew@%p1%{48}%+%c%p2%{32}%+%c%p3%{32}%+%c$<30>,
+ nel=\037$<5>, rev=\EG4, ri=\Ej$<5>, rmacs=\EH^C, rmam=\Ed.,
+ rmir=\Er, rmso=\EG0, rmul=\EG0, rmxon=\Ec20,
+ rs2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`\:\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ sgr0=\EG0\EcB0\EcD$<15>, smacs=\EH^B, smam=\Ed/,
+ smir=\Eq, smso=\EGt, smul=\EG8, smxon=\Ec21, tbc=\E0$<15>,
+ tsl=\EF,
+ncr260wy60wpp|NCR 2900_260 wyse 60 wide mode,
+ cols#132,
+ cup=\Ea%i%p1%dR%p2%dC$<30>,
+ is2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ rs2=\Ee6\E~4$<100>\E+\Ed/\Ee1\Ed*\Er\EO\E`1\E`;\E`@\E~!\E"\Ee4\Ex@\E`9\Ee7$<100>,
+ use=ncr260wy60pp,
+ncr160vppp|NCR 2900_160 viewpoint,
+ use=ncr260vppp,
+ncr160vpwpp|NCR 2900_160 viewpoint wide mode,
+ use=ncr260vpwpp,
+ncr160vt100an|NCR 2900_160 vt100 with ansi kybd,
+ use=ncr260vt100an,
+ncr160vt100pp|NCR 2900_160 vt100 with PC+ kybd,
+ use=ncr260vt100pp,
+ncr160vt100wan|NCR 2900_160 vt100 wide mode ansi kybd,
+ use=ncr260vt100wan,
+ncr160vt100wpp|NCR 2900_160 vt100 wide mode pc+ kybd,
+ use=ncr260vt100wpp,
+ncr160vt200an|NCR 2900_160 vt200 with ansi kybd,
+ use=ncr260vt200an,
+ncr160vt200pp|NCR 2900_160 vt200 with pc+ kybd,
+ use=ncr260vt200pp,
+ncr160vt200wan|NCR 2900_160 vt200 wide mode ansi kybd,
+ use=ncr260vt200wan,
+ncr160vt200wpp|NCR 2900_160 vt200 wide mode pc+ kybd,
+ use=ncr260vt200wpp,
+ncr160vt300an|NCR 2900_160 vt300 with ansi kybd,
+ use=ncr260vt300an,
+ncr160vt300pp|NCR 2900_160 vt300 with pc+ kybd,
+ use=ncr260vt300pp,
+ncr160vt300wan|NCR 2900_160 vt300 wide mode ansi kybd,
+ use=ncr260vt300wan,
+ncr160vt300wpp|NCR 2900_160 vt300 wide mode pc+ kybd,
+ use=ncr260vt300wpp,
+ncr160wy50+pp|NCR 2900_160 wyse 50+,
+ use=ncr260wy50+pp,
+ncr160wy50+wpp|NCR 2900_160 wyse 50+ wide mode,
+ use=ncr260wy50+wpp,
+ncr160wy60pp|NCR 2900_160 wyse 60,
+ use=ncr260wy60pp,
+ncr160wy60wpp|NCR 2900_160 wyse 60 wide mode,
+ use=ncr260wy60wpp,
+ncrvt100an|ncrvt100pp|NCR vt100 for the 2900 terminal,
+ am, hs, mc5i, mir, msgr, xon,
+ cols#80, it#8, lines#24, nlab#32,
+ acsc=``aaffgghhiijjkkllmmnnqqttuuvvwwxxyyzz~~,
+ bel=^G, blink=\E[5m$<30>, bold=\E[1m$<30>,
+ clear=\E[2J\E[1;1H$<300>, cr=^M,
+ csr=\E[%i%p1%d;%p2%dr$<100>, cub=\E[%p1%dD$<30>,
+ cub1=\E[D$<2>, cud=\E[%p1%dB$<30>, cud1=\E[B$<2>,
+ cuf=\E[%p1%dC$<30>, cuf1=\E[C$<2>,
+ cup=\E[%i%p1%d;%p2%dH$<100>, cuu=\E[%p1%dA$<30>,
+ cuu1=\E[A$<2>, dch=\E[%p1%dP$<40>, dch1=\E[1P$<10>,
+ dl=\E[%p1%dM$<70>, dl1=\E[M$<40>, dsl=\E[31l$<25>,
+ ed=\E[0J$<300>, el=\E[0K$<30>, el1=\E[1K$<30>,
+ enacs=\E(B\E)0$<40>, fsl=1$<10>, home=\E[H$<2>$<80>,
+ ht=^I, hts=\EH, il=\E[%p1%dL$<80>, il1=\E[B\E[L$<80>,
+ ind=\ED,
+ is2=\E[12h\E[?10l\E%/0n\E[P\031\E[?3l\E(B\E)0$<200>,
+ kLFT=\E[D, kRIT=\E[C, ka1=\E[H, kbs=^H, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kent=^M, kf1=\EOP,
+ kf2=\EOQ, kf3=\EOR, kf4=\EOS, mc0=\E[i$<100>, nel=\EE,
+ rc=\E8, rev=\E[7m$<30>, ri=\EM$<50>, rmacs=\017$<90>,
+ rmir=\E[4l$<80>, rmso=\E[0m$<30>, rmul=\E[0m$<30>,
+ rs2=\Ec\E[12;31h\E[?3;4;5;10l\E[?6;7;19;25h\E[33;34l\E[0m\E(B\E)0\E%/0n\E[P\031$<200>,
+ sc=\E7,
+ sgr=\E[0%?%p1%p6%|%t;1%;%?%p2%t;4%;%?%p1%p3%|%t;7%;%?%p4%t;5%;m%?%p9%t\016%e\017%;$<100>,
+ sgr0=\017\E[0m$<120>, smacs=\016$<90>, smir=\E[4h$<80>,
+ smso=\E[7m$<30>, smul=\E[4m$<30>, tbc=\E[3g$<40>,
+ tsl=\E[>+1$<70>,
+ncrvt100wan|NCRVT100WPP|ncrvt100wpp|NCR VT100 emulation of the 2900 terminal,
+ cols#132,
+ is2=\E[12h\E[?10l\E%/0n\E[P\031\E[?3h\E(B\E)0$<200>,
+ rs2=\Ec\E[12;31h\E[?4;5;10l\E?3;6;7;19;25h\E[33;34l\E[0m\E(B\E)0\E%/0n\E[P\031$<200>,
+ use=ncrvt100an,
+#
+# Vendor-supplied NCR termcaps end here
+
# NCR7900 DIP switches:
#
# Switch A:
is2=\E0@\010\E3\E4\E7, kcub1=^U, kcud1=^J, kcuf1=^F,
kcuu1=^Z, khome=^A, ll=^A, mc4=^T, mc5=^R, rev=\E0P, rmso=\E0@,
rmul=\E0@,
- sgr=\E0%p5%'@'%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c,
+ sgr=\E0%p5%{64}%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c,
sgr0=\E0@, smso=\E0Q, smul=\E0`,
ncr7900iv|ncr 7900 model 4,
am, bw, eslok, hs,
cols#80, lines#24,
bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J,
- cup=\013%p1%'@'%+%c\E\005%p2%02d, dl1=\E^O, dsl=\Ey1,
+ cup=\013%p1%{64}%+%c\E\005%p2%02d, dl1=\E^O, dsl=\Ey1,
fsl=\Ek\Ey5, home=\013@\E^E00, il1=\E^N, ind=^J, kbs=^H,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kf1=\ES, kf2=\ET,
kf3=\EU, kf4=\EV, kf5=\EW, kf6=\EP, kf7=\EQ, kf8=\ER,
hpa=\020%p1%{10}%/%{16}%*%p1%{10}%m%+%c, ind=^J,
is2=\E4^O, kclr=^L, kcub1=^U, kcud1=^J, kcuf1=^F, kcuu1=^Z,
khome=^H, ll=^A, mc4=^T, mc5=^R, rev=\E0P, rmso=^O, rmul=^O,
- sgr=\E0%p5%'@'%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c\016,
+ sgr=\E0%p5%{64}%+%p4%{2}%*%+%p3%{16}%*%+%p2%{32}%*%+%p1%{17}%*%+%c\016,
sgr0=^O, smso=\E0Q\016, smul=\E0`\016,
- vpa=\013%p1%'@'%+%c,
+ vpa=\013%p1%{64}%+%c,
#### Perkin-Elmer (Owl)
#
#
# If you saw a Byte Magazine cover with a terminal on it during the early
# 1980s, it was probably one of these. Carl Helmers liked them because
-# they could crank 19.2 and were cheap (that is, until he tried to program
-# one...)
+# they could crank 19.2 and were cheap (that is, he liked them until he tried
+# to program one...)
#
# Missing in vc303a and vc303 descriptions: they scroll 2 lines at a time
el=^X, home=^^, il1=\EE, ind=^J, kcud1=^J, kcuf1=^L, kcuu1=^K,
# From IBM, Thu May 5 19:35:27 1983
-# (ibmpc: commented out <smir>=\200R because we don't know <rmir> -- esr)
-ibmpc|ibm-pc|ibm5051|5051|IBM Personal Computer (no ANSI.SYS),
+# (commented out <smir>=\200R because we don't know <rmir> -- esr)
+ibm-pc|ibm5051|5051|IBM Personal Computer (no ANSI.SYS),
am,
cols#80, lines#24,
bel=^G, clear=^L^K, cr=^M^^, cub1=^], cud1=^J, cuf1=^\,
cuu1=^^, home=^K, ind=\n$<10>, kcud1=^_,
+ibmpc|wy60-PC|wyse60-PC|IBM PC/XT running PC/IX,
+ am, bw, eo, hs, km, msgr, ul,
+ cols#80, it#8, lines#24,
+ acsc=j\331k\277l\332m\300n\305q\304t\303u\264v\301w\302x\263,
+ bel=^G, blink=\E[5m, bold=\E[1m, clear=\Ec, cr=^M,
+ cub=\E[%p1%dD, cub1=\E[D, cud=\E[%p1%dB, cud1=\E[B,
+ cuf=\E[%p1%dC, cuf1=\E[C, cup=\E[%i%p1%d;%p2%dH,
+ cuu=\E[%p1%dA, cuu1=\E[A, ech=\E[%p1%dX, ed=\E[J, el=\E[K,
+ home=\E[H, hpa=\E[%i%p1%dG, ind=\E[S\E[B,
+ indn=\E[%p1%dS\E[%p1%dB, invis=\E[30;40m, kbs=^H,
+ kcbt=^], kcub1=\E[D, kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A,
+ kdch1=\177, kend=\E[Y, kf1=\240, kf10=\251, kf2=\241,
+ kf3=\242, kf4=\243, kf5=\244, kf6=\245, kf7=\246, kf8=\247,
+ kf9=\250, khome=\E[H, kich1=\E[^H, knp=\E[U, ll=\E[24;1H,
+ nel=^M, rev=\E[7m, ri=\E[T\E[A, rin=\E[%p1%dT\E[%p1%dA,
+ rmso=\E[m, rmul=\E[m,
+ sgr=\E[%?%p1%t;7%;%?%p2%t;4%;%?%p3%t;7%;%?%p4%t;5%;%?%p6%t;1%;m,
+ sgr0=\E[m, smso=\E[7m, smul=\E[4m,
+
#### Apple II
#
# Apple II firmware console first, then various 80-column cards and
rmul=\2330m, rs1=\Ec, sgr0=\2330m, smacs=^N, smcup=\233?7l,
smso=\2337m, smul=\2334m,
+# From: Henning 'Faroul' Peters <Faroul@beyond.kn-bremen.de>, 25 Sep 1999
+amiga-8bit|Amiga ANSI using 8-bit controls,
+ acsc=, dl=\233%p1%dM, dl1=\233M, il=\233%p1%dL, il1=\233L,
+ ind=\204, indn@, ri=\215, rin@,
+ use=amiga-h,
+
# Commodore B-128 microcomputer from Doug Tyrol <det@HEL-ACE.ARPA>
# I'm trying to write a termcap for a commodore b-128, and I'm
# having a little trouble. I've had to map most of my control characters
cols#80, lines#24,
clear=^Z, cub1=\010$<4>, cud1=^J, cuf1=^L,
cup=\E=%p1%{32}%+%c%p2%{32}%+%c, cuu1=^K,
- dch1=\\EW$<4/>, dl1=\ER, el=\ET, il1=\EE, is2=^Z, kbs=^H,
+ dch1=\EW$<4/>, dl1=\ER, el=\ET, il1=\EE, is2=^Z, kbs=^H,
kcub1=^H, kcud1=^J, kcuf1=^L, kcuu1=^K, rmir=, rmso=\E),
rmul=\Em, smir=\EQ, smso=\E(, smul=\El,
#
smacs=^N, smir=\E[4h, smso=\E[7m, smul=\E[4m, tsl=^_@A,
u6=\E[%i%d;%dR, u7=\E[6n,
+# From: Alexandre Montaron <canal@mygale.org>, 18 Jun 1998
+#
+minitel1|minitel 1,
+ am, bw, eslok, hs, hz, msgr,
+ colors#8, cols#40, lines#24, pairs#8,
+ acsc=+.\,\,./f0g1, bel=^G, blink=\EH, civis=^T, clear=^L,
+ cnorm=^Q, cr=^M, cub1=^H, cud1=^J, cuf1=^I,
+ cup=\037%p1%{65}%+%c%p2%{65}%+%c, cuu1=^K, el=^X,
+ enacs=^Y, fsl=^J, home=^^, ind=^J,
+ is2=\E;`ZQ\E\:iC\E\:iE\021, nel=^M^J, op=\EG,
+ rep=%p1%c\022%p2%{63}%+%c, rev=\E], ri=^K, rmso=\E\\,
+ setf=\E%?%p1%{1}%=%tD%e%p1%{3}%=%tF%e%p1%{4}%=%tA%e%p1%{6}%=%tC%e%p1%{64}%+%c%;,
+ sgr=%?%p1%t\E]%;%?%p3%t\E]%;%?%p4%t\EH%;,
+ sgr0=\EI\E\\, smso=\E], tsl=\037@%p1%{65}%+%c,
+# is2=Fnct TE, Fnct MR, Fnct CM et pour finir: curseur ON.
+minitel1b|minitel 1-bistandard (in 40cols mode),
+ mir,
+ cub=\E[%p1%dD, cud=\E[%p1%dB, cuf=\E[%p1%dC,
+ cuu=\E[%p1%dA, dch=\E[%p1%dP, dch1=\E[P, dl=\E[%p1%dM,
+ dl1=\E[M, ed=\E[J, el1=\E[1K, il=\E[%p1%dL, il1=\E[L,
+ is1=\E;iYA\E;jYC, kclr=\E[2J, kctab=^I, kcub1=\E[D,
+ kcud1=\E[B, kcuf1=\E[C, kcuu1=\E[A, kdch1=\E[P, kdl1=\E[M,
+ kel=^X, khome=\E[H, kich1=\E[4h, kil1=\E[L, rmir=\E[4l,
+ smir=\E[4h, smkx=\E;iYA\E;jYC,
+ use=minitel1,
+# <rmkx> posait des problemes (logout en sortant de vi).
+minitel1b-80|minitel 1-bistandard (standard teleinformatique),
+ am@, bw@, hz@,
+ colors@, cols#80, it#8, pairs@,
+ blink=\E[5m, bold=\E[1m, civis=\037@A\024\n,
+ clear=\E[H\E[2J, cnorm=\037@A\021\n, cuf1=\E[C,
+ cup=\E[%i%p1%d;%p2%dH, cuu1=\E[A, el=\E[K, home=\E[H,
+ ht=^I, ind=\ED, is1@, is2@, kent=\EOM, kf0=\EOp, kf1=\EOq,
+ kf2=\EOr, kf3=\EOs, kf4=\EOt, kf5=\EOu, kf6=\EOv, kf7=\EOw,
+ kf8=\EOx, kf9=\EOy, nel=\EE, op@, rc=\E8, rep@, rev=\E[7m,
+ ri=\EM, rmkx@, rmso=\E[27m, rmul=\E[24m, sc=\E7, setf@,
+ sgr=\E[%?%p1%t7;%;%?%p2%t4;%;%?%p3%t7;%;%?%p4%t5;%;%?%p6%t1;%;m,
+ sgr0=\E[m, smkx@, smso=\E[7m, smul=\E[4m,
+ use=minitel1b,
+
######## OBSOLETE VDT TYPES
#
# These terminals are *long* dead -- these entries are retained for
am,
cols#80, lines#27,
bel=^G, clear=^NR, cub1=^H, cud1=^J, cuf1=^Y,
- cup=\017%p1%p1%{16}%m%{2}%*%-%'9'%+%c%p2%p2%{16}%m%{2}%*%-%'9'%+%c,
+ cup=\017%p1%p1%{16}%m%{2}%*%-%{57}%+%c%p2%p2%{16}%m%{2}%*%-%{57}%+%c,
cuu1=^Z, dch1=^NV, el=^NU, home=^NQ, ind=^J,
#### Digital Data Research (ddr)
# From: Rick Thomas <ihnp4!btlunix!rbt>
# (xtalk: I added <rmam>/<smam> based on the init string.
-# I also removed <xmc#1> and the trailing \s characters from the highlight
-# changers, I don't believe these on a VT100-emulating PC display -- esr)
xtalk|IBM PC with xtalk communication program (versions up to 3.4),
am, mir, msgr, xon,
- cols#80, it#8, lines#24, vt#3,
+ cols#80, it#8, lines#24, vt#3, xmc#1,
acsc=``aaffggjjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~,
bel=^G, clear=\E[H\E[J$<50>, cr=^M, cub=\E[%p1%dD, cub1=^H,
cud=\E[%p1%dB, cud1=^J, cuf=\E[%p1%dC, cuf1=\E[C$<2>,
kcuu1=\EOA, kent=\EOM, kf0=\EOy, kf1=\EOP, kf10=\EOx,
kf2=\EOQ, kf3=\EOR, kf4=\EOS, kf5=\EOt, kf6=\EOu, kf7=\EOv,
kf8=\EOl, kf9=\EOw, ri=\EM$<5>, rmacs=^O, rmam=\E[?7l,
- rmkx=\E[?1l\E>, rmso=\E[m,
+ rmkx=\E[?1l\E>, rmso=\E[m\s,
rs2=\E>\E[?3l\E[?4l\E[?5l\E[?7h\E[?8h, sgr0=\E[m,
- smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m,
+ smacs=^N, smam=\E[?7h, smkx=\E[?1h\E=, smso=\E[7m\s,
tbc=\E[3g,
# The official PC terminal emulator program of the AT&T Product Centers.
cols#80, it#8, lines#24,
acsc=+\^\,Q-S.M0\177`+a\:f'g#h#i#jXkClJmFnNo~qUs_tEuPv\\wKxW~_,
bel=^G, clear=\EH\EJ, cr=^M, cub1=^H, cud1=^J, cuf1=\EC,
- cup=\EY%p1%' '%+%c%p2%' '%+%c, cuu1=\EA, dch1=\EP,
+ cup=\EY%p1%{32}%+%c%p2%{32}%+%c, cuu1=\EA, dch1=\EP,
ed=\EJ, el=\EK, home=\EH, ht=^I, ich1=\EQ, ind=^J, kbs=\177,
kcub1=\ED, kcud1=\EB, kcuf1=\EC, kcuu1=\EA, kdch1=\Ee,
kf1=\Ef1, kf10=\Ef0, kf2=\Ef2, kf3=\Ef3, kf4=\Ef4, kf5=\Ef5,
kf6=^AE\r, kf7=^AF\r, kf8=^AG\r, kf9=^AH\r, khome=^^,
kich1=\EQ, kil1=\EE, knp=\EK, kpp=\EJ, kprt=\EP, krpl=\Er,
mc0=\EP, mc4=^T, mc5=^R, nel=\r\n$<3>,
- pfloc=\EZ2%p1%'?'%+%c%p2%s\177,
- pfx=\EZ1%p1%'?'%+%c%p2%s\177,
- pln=\Ez%p1%'/'%+%c%p2%s\r, prot=\E), ri=\Ej$<7>,
+ pfloc=\EZ2%p1%{63}%+%c%p2%s\177,
+ pfx=\EZ1%p1%{63}%+%c%p2%s\177,
+ pln=\Ez%p1%{47}%+%c%p2%s\r, prot=\E), ri=\Ej$<7>,
rmacs=\EH^C, rmam=\Ed., rmcup=, rmir=\Er, rmln=\EA11,
rmxon=\Ec20, rs1=\E~!\E~4$<150>, rs2=\EeF$<150>,
rs3=\EwG\Ee($<150>,
- sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;\EG%'0'%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
+ sgr=%?%p8%t\E)%e\E(%;%?%p9%t\EH\002%e\EH\003%;\EG%{48}%?%p2%p6%|%t%{8}%|%;%?%p1%p3%|%p6%|%t%{4}%|%;%?%p4%t%{2}%|%;%?%p1%p5%|%t%{64}%|%;%?%p7%t%{1}%|%;%c,
sgr0=\E(\EH\003\EG0\EcD, smacs=\EH^B, smam=\Ed/,
smcup=\Ezz&\E[A\177\Ezz'\E[B\177\Ezz(\E[D\177\Ezz)\E[C\177\Ezz<\E[Q\177,
smir=\Eq, smln=\EA10, smxon=\Ec21, tbc=\E0, tsl=\Ez(,
bel=^G, clear=^L, cr=^M, cub1=^H, cud1=^J, cuf1=^_, cuu1=^K,
home=^^, ind=^J,
# From: Mark Dornfeld <romwa@ucbvax.berkeley.edu>
-# This termcap is for the LANPAR Technologies VISION 3220
-# terminal. The function key definitions k0-k5 represent the
-# edit keypad: FIND, INSERT HERE, REMOVE, SELECT, PREV SCREEN,
-# NEXT SCREEN. The key definitions k6-k9 represent the PF1 to
-# PF4 keys.
+# This description is for the LANPAR Technologies VISION 3220
+# terminal from 1984/85. The function key definitions k0-k5 represent the
+# edit keypad: FIND, INSERT HERE, REMOVE, SELECT, PREV SCREEN,
+# NEXT SCREEN. The key definitions k6-k9 represent the PF1 to PF4 keys.
# (v3220: removed obsolete ":kn#10:",
# I added <rmam>/<smam> based on the init string -- esr)
v3220|LANPAR Vision II model 3220/3221/3222,
# that it was messing up someone's 3270 emulator.
# * Added some longname fields in order to avoid warning messages from
# older tic implementations.
-# * According to ctrlseqs.ms, xterm has a full vt100 graphics set. Use
+# * According to ctlseqs.ms, xterm has a full vt100 graphics set. Use
# it! (This gives us pi, greater than, less than, and a few more.)
# * Freeze for ncurses-1.9.6 release.
# 9.10.1 (Sat Oct 21 22:18:09 EDT 1995):
# * Removed rmir/smir from tv92B.
#
# 10.2.0 (Sat Feb 28 12:47:36 EST 1998):
-# * Added Thomas Dickey's acsc string for linux.
-# * Merged in BeOS, iris-color, hds200, xterm-xf86-v40, xterm-8bit,
-# and emx entries.
+# * add hds200 description (Walter Skorski)
+# * add beterm entry (Fred Fish)
+# * add Thomas Dickey's xterm-xf86-v40, xterm-8bit, xterm-16color,
+# iris-color entries.
+# * add emx entries.
# * Replaced unixpc entry with Benjamin Sittler's corrected version.
# * Replaced xterm/rxvt/emu/syscons entries with Thomas Dickey's
# versions.
+# * remove sgr string from qnx based on report by Xiaodan Tang
# * Added u8/u9, removed rmul/smul from sun-il.
-# * 4.2 tic allows us to use \0 instead of \200 now.
+# * 4.2 tic displays \0 rather than \200.
+# * add linux-koi8r to replace linux-koi8 (which uses a corrupt acsc,
+# apparently based on cp-866).
# * Merged in Pavel Roskin's acsc for linux-koi8
-# * Corrected some erroneous \\\s to \.
+# * Corrected some erroneous \\'s to \.
# * 4.2 ncurses has been changed to use setaf/setab, consistent w/SysV.
# * II -> ii in pcvtXX, screen, xterm.
# * Removed \n chars following ANSI escapes in sgr & friends.
# * Added Sony NEWS workstation entries and cit101e-rv.
# * Reverted `amiga'; to Kent Polk's version, as I'm told
# the Verkuil entry messes up with Amiga Telnet.
+# 10.2.1 (Sun Mar 8 18:32:04 EST 1998):
+# * Corrected attributions in 10.2.0 release notes.
+# * Scanned the Shuford archive for new terminfos and information.
+# * Removed sgr from qnx entry (Thomas Dickey).
+# * Added entries for ICL and Kokusai Data Systems terminals.
+# * Incorporated NCR terminfos from the Boundless Technology FTP site.
+# * Incorporated att700 from the Boundless Technology FTP site.
+# * Miscellaneous contact-address and Web-page updates.
+#
+# 1998/5/9
+# * add nxterm and xterm-color terminfo description (request by Cristian
+# Gafton <gafton@redhat.com>).
+# * modify rxvt terminfo description to clear alternate screen before
+# switching back to normal screen, for compatibility with applications
+# which use xterm (reported by Manoj Kasichainula <manojk@io.com>).
+# * modify linux terminfo description to reset color palette (reported
+# by Telford Tendys <telford@eng.uts.edu.au>).
+#
+# 1998/7/4
+# * merge changes from current XFree86 xterm terminfo descriptions.
+#
+# 1998/7/25
+# * Added minitel1 entries from Alexander Montaron.
+# * Added qnxt2 from Federico Bianchi.
+# * Added arm100 terminfo entries from Dave Millen.
+#
+# 1998/8/6
+# * Added ncsa telnet entries from Francesco Potorti
+#
+# 1998/8/15
+# * modify ncsa telnet entry to reflect color, other capabilities based on
+# examination of the source code - T.Dickey.
+#
+# 1998/8/22
+# * Corrected some erroneous \\'s to \ (eterm, osborne) - TD.
+#
+# 1998/8/29
+# * Added Francesco Potorti's tuned Wyse 99 entries.
+# * dtterm enacs correction from Alexander V. Lukyanov.
+# * Add ncsa-ns, ncsa-m-ns and ncsa-m entries from esr version.
+# * correct a typo in icl6404 entry.
+# * add xtermm and xtermc
+#
+# 1998/9/26
+# * format most %'char' sequences to %{number}
+# * adapt IBM AIX 3.2.5 terminfo - T.Dickey
+# * merge Data General terminfo from Hasufin <hasufin@vidnet.net> - TD
+#
+# 1998/10/10
+# * update xterm-xfree86 to current (patch 84), for is2/rs2 changes - TD
+# * correct initialization string in xterm-r5, add misc other features
+# to correspond with xterm patch 84 - TD
+#
+# 1998/12/19
+# * update xterm-xfree86 to current (patch 90), smcur/rmcur changes - TD
+# * add Mathew Vernon's mach console entries
+# * corrections for ncsa function-keys (report by Larry Virden)
+#
+# 1998/12/19
+# * change linux to use ncv#2, since underline does not work with color - TD
+#
+# 1999/1/9
+# * add kbt to iris-ansi, document other shift/control functionkeys - TD
+# * correct iris-ansi and iris-ansi-ap with respect to normal vs keypad
+# application modes, change kent to use the correct keypad code - TD
+#
+# 1999/1/10
+# * add entry for Tera Term - TD
+#
+# 1999/1/23
+# * minor improvements for teraterm entry - TD
+# * rename several entries used by BSDI: bsdos to bsdos-pc-nobold,
+# and bsdos-bold to bsdos-pc (Jeffrey C Honig)
+#
+# 1999/2/20
+# * resolve ambiguity of kend/kll/kslt and khome/kfnd/kich1 strings in
+# xterm and ncsa entries by removing the unneeded ones. Note that
+# some entries will return kend & khome versus kslt and kfnd, for
+# PC-style keyboards versus strict vt220 compatiblity - TD
+#
+# 1999/3/13
+# * adjust xterm-xfree86 khome/kend to match default PC-style keyboard
+# tables - TD
+# * add 'crt' entry - TD
+# * correct typos in 'linux-c' entry - TD
+#
+# 1999/3/14
+# * update entries for BSD/OS console to use klone+sgr and klone+color
+# (Jeffrey C Honig)
+#
+# 1999/3/27
+# * adjust xterm-xfree86 miscellaneous keypad keys, as per patch #94 - TD.
+#
+# 1999/4/10
+# * add linux-lat, from RedHat patches to ncurses 4.2
+#
+# 1999/4/17
+# * add complete set of default function-key definitions for scoansi - TD.
+#
+# 1999/7/3
+# * add cnorm, cvvis for Linux 2.2 kernels
+#
+# 1999/7/24
+# * add kmous to xterm-r5 -TD
+# * correct entries xterm+sl and xterm+sl-twm, which were missing the
+# parent "use" clause -TD
+#
+# 1999/7/31
+# * corrected cnorm, added el1 in 'screen' description -TD
+#
+# 1999/8/14
+# * add ms-vt100 -TD
+#
+# 1999/8/21
+# * corrections to beterm entry -TD
+#
+# 1999/8/28
+# * add cygwin entry -TD
+#
+# 1999/9/4
+# * minor corrections for beterm entry -TD
+#
+# 1999/9/18
+# * add acsc string to HP 70092 terminfo entry -Joerg Wunsch
+#
+# 1999/9/25
+# * add amiga-8bit entry
+# * add console entries from NetBSD: ofcons, wsvt25, wsvt25m, rcons,
+# rcons-color, based on
+# ftp://ftp.netbsd.org/pub/NetBSD/NetBSD-current/src/share/termcap/termcap.src
+# * add alias for iris-ansi-net
+#
+# 1999/10/2
+# * corrected scoansi entry's acsc, some function keys, add color -TD
+#
+# 1999/10/23
+# * add cnorm, cvvis to cons25w, and modify ncv to add 'dim' -TD
+# * reorder ncsa entries to make ncsa-vt220 use the alternate function
+# key mapping, leaving Potorti's entries more like he named them -TD
+# * remove enter/exit am-mode from cygwin -TD
#
-# The following sets edit modes for GNU EMACS
+# The following sets edit modes for GNU EMACS.
# Local Variables:
# fill-prefix:"\t"
# fill-column:75
+# comment-column:0
+# comment-start-skip:"^#+"
+# comment-start:"# "
+# compile-command:"tic -c terminfo.master"
# End:
######## SHANTIH! SHANTIH! SHANTIH!
-# $Id: mk-1st.awk,v 1.35 1998/02/11 12:13:53 tom Exp $
+# $Id: mk-1st.awk,v 1.39 1998/05/09 21:54:02 tom Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
# depend (optional dependencies for all objects, e.g, ncurses_cfg.h)
# subset ("none", "base", "base+ext_funcs" or "termlib")
# target (cross-compile target, if any)
-# DoLinks ("yes" or "no", flag to add symbolic links)
+# DoLinks ("yes", "reverse" or "no", flag to add symbolic links)
# rmSoLocs ("yes" or "no", flag to add extra clean target)
# overwrite ("yes" or "no", flag to add link to libcurses.a
#
#
function symlink(src,dst) {
if ( src != dst ) {
- printf "rm -f %s; ", dst
- printf "$(LN_S) %s %s; ", src, dst
+ if ( DoLinks == "reverse" ) {
+ printf "rm -f %s; ", src
+ printf "$(LN_S) %s %s; ", dst, src
+ } else {
+ printf "rm -f %s; ", dst
+ printf "$(LN_S) %s %s; ", src, dst
+ }
}
}
function sharedlinks(directory, add) {
if ( end_name != lib_name ) {
- abi_name = sprintf("%s.$(ABI_VERSION)", lib_name);
+ if ( DoLinks == "yes" ) {
+ abi_name = sprintf("%s.$(ABI_VERSION)", lib_name);
+ } else {
+ abi_name = end_name;
+ }
if (add) {
printf "\tcd %s && (", directory
- symlink(end_name, abi_name);
+ if ( abi_name != end_name ) {
+ symlink(end_name, abi_name);
+ }
symlink(abi_name, lib_name);
printf ")\n"
} else {
- printf "\t-@rm -f %s/%s\n", directory, abi_name
+ if ( abi_name != end_name ) {
+ printf "\t-@rm -f %s/%s\n", directory, abi_name
+ }
printf "\t-@rm -f %s/%s\n", directory, lib_name
}
}
}
function removelinks() {
if ( end_name != lib_name ) {
- printf "\trm -f ../lib/%s ../lib/%s\n", abi_name, end_name
- }
- }
-function installed_name() {
- if ( DO_LINKS == "yes" ) {
- return sprintf("%s.$(REL_VERSION)", lib_name);
- } else {
- return lib_name;
+ if ( abi_name != end_name ) {
+ printf "\t-rm -f ../lib/%s\n", abi_name
+ }
+ printf "\t-rm -f ../lib/%s\n", end_name
}
}
BEGIN {
{
if ( DoLinks == "yes" ) {
end_name = sprintf("%s.$(REL_VERSION)", lib_name);
+ } else if ( DoLinks == "reverse") {
+ tmp_name = sprintf("%s.$(ABI_VERSION)", lib_name);
+ end_name = lib_name;
+ lib_name = tmp_name;
} else {
end_name = lib_name;
}
printf "../lib/%s : $(%s_OBJS)\n", lib_name, OBJS
print "\t-@rm -f $@"
- printf "\t$(MK_SHARED_LIB) $(%s_OBJS)\n", OBJS
+ if ( subset == "termlib") {
+ printf "\t$(MK_SHARED_LIB) $(%s_OBJS) $(TINFO_LIST)\n", OBJS
+ } else {
+ printf "\t$(MK_SHARED_LIB) $(%s_OBJS) $(SHLIB_LIST)\n", OBJS
+ }
sharedlinks("../lib", 1)
print ""
if ( end_name != lib_name ) {
print "install.libs \\"
printf "install.%s :: $(INSTALL_PREFIX)$(libdir) ../lib/%s\n", name, end_name
printf "\t@echo installing ../lib/%s as $(INSTALL_PREFIX)$(libdir)/%s \n", lib_name, end_name
- printf "\t-@rm -f $(INSTALL_PREFIX)$(libdir)/%s \n", end_name
- printf "\t$(INSTALL_LIB) ../lib/%s $(INSTALL_PREFIX)$(libdir)/%s \n", lib_name, end_name
+ if ( DoLinks == "reverse") {
+ printf "\t-@rm -f $(INSTALL_PREFIX)$(libdir)/%s \n", lib_name
+ printf "\t$(INSTALL_LIB) ../lib/%s $(INSTALL_PREFIX)$(libdir)/%s \n", lib_name, lib_name
+ } else {
+ printf "\t-@rm -f $(INSTALL_PREFIX)$(libdir)/%s \n", end_name
+ printf "\t$(INSTALL_LIB) ../lib/%s $(INSTALL_PREFIX)$(libdir)/%s \n", lib_name, end_name
+ }
sharedlinks("$(INSTALL_PREFIX)$(libdir)", 1)
if ( overwrite == "yes" && name == "ncurses" )
{
ovr_name = sprintf("libcurses%s", suffix)
- printf "\t@echo linking %s to %s\n", ovr_name, lib_name
- printf "\t-@rm -f $(INSTALL_PREFIX)$(libdir)/%s \n", ovr_name
- printf "\t(cd $(INSTALL_PREFIX)$(libdir) && $(LN_S) %s %s)\n", lib_name, ovr_name
+ printf "\t@echo linking %s to %s\n", lib_name, ovr_name
+ printf "\tcd $(INSTALL_PREFIX)$(libdir) && (rm -f %s; $(LN_S) %s %s; )\n", ovr_name, lib_name, ovr_name
}
if ( ldconfig != "" ) {
printf "\t- test -z \"$(INSTALL_PREFIX)\" && %s\n", ldconfig
}
print ""
print "clean ::"
- printf "\trm -f ../lib/%s\n", lib_name
+ printf "\t-rm -f ../lib/%s\n", lib_name
print ""
print "mostlyclean::"
- printf "\trm -f $(%s_OBJS)\n", OBJS
+ printf "\t-rm -f $(%s_OBJS)\n", OBJS
print ""
print "clean ::"
- printf "\trm -f $(%s_OBJS)\n", OBJS
removelinks();
}
else if ( found == 2 )
{
print ""
print "mostlyclean::"
- printf "\trm -f $(%s_OBJS)\n", OBJS
+ printf "\t-rm -f $(%s_OBJS)\n", OBJS
print ""
print "clean ::"
- printf "\trm -f $(%s_OBJS)\n", OBJS
+ printf "\t-rm -f $(%s_OBJS)\n", OBJS
}
}
-# $Id: mk-2nd.awk,v 1.10 1998/02/11 12:13:53 tom Exp $
+# $Id: mk-2nd.awk,v 1.11 1998/10/17 21:54:21 Alexander.V.Lukyanov Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
atsign="@"
printf "\t@echo 'compiling %s (%s)'\n", $1, model
}
- if ( $3 == "." || srcdir == "." )
- printf "\t%scd ../%s; $(%s) $(CFLAGS_%s) -c ../%s/%s%s", atsign, model, compile, MODEL, name, $1, suffix
- else
+ if ( $3 == "." || srcdir == "." ) {
+ dir = $3 "/"
+ sub("^\\$\\(srcdir\\)/","",dir);
+ sub("^\\./","",dir);
+ printf "\t%scd ../%s; $(%s) $(CFLAGS_%s) -c ../%s/%s%s%s", atsign, model, compile, MODEL, name, dir, $1, suffix
+ } else
printf "\t%scd ../%s; $(%s) $(CFLAGS_%s) -c %s/%s%s", atsign, model, compile, MODEL, $3, $1, suffix
} else {
printf "%s", $1
+++ /dev/null
-# $Id: MKkeyname.awk,v 1.12 1997/11/15 22:16:55 tom Exp $
-BEGIN {
- print "/* generated by MKkeyname.awk */"
- print ""
- print "#include <ncurses_cfg.h>"
- print "#include <stdlib.h>"
- print "#include <string.h>"
- print "#include <curses.h>"
- print "#include <term.h>"
- print ""
- print "struct kn {"
- print "\tconst char *name;"
- print "\tint code;"
- print "};"
- print ""
- print "const struct kn key_names[] = {"
-}
-
-/^[^#]/ {
-# printf "\t{ \"%s\",%*s%s },\n", $1, 16-length($1), " ", $1;
- printf "\t{ \"%s\",%s },\n", $1, $1;
- }
-
-END {
- print "};"
- print ""
- print "const char *keyname(int c)"
- print "{"
- print "int i, size = sizeof(key_names)/sizeof(struct kn);"
- print "static char name[5];"
- print "char *p;"
- print ""
- print "\tfor (i = 0; i < size; i++)"
- print "\t\tif (key_names[i].code == c)"
- print "\t\t\treturn key_names[i].name;"
- print "\tif (c >= 256) return \"UNKNOWN KEY\";"
- print "\tp = name;"
- print "\tif (c >= 128) {"
- print "\t\tstrcpy(p, \"M-\");"
- print "\t\tp += 2;"
- print "\t\tc -= 128;"
- print "\t}"
- print "\tif (c < 0)"
- print "\t\tsprintf(p, \"%d\", c);"
- print "\telse if (c < 32)"
- print "\t\tsprintf(p, \"^%c\", c + '@');"
- print "\telse if (c == 127)"
- print "\t\tstrcpy(p, \"^?\");"
- print "\telse"
- print "\t\tsprintf(p, \"%c\", c);"
- print "\treturn name;"
- print "}"
- print ""
-}
-# $Id: Makefile.in,v 1.46 1998/02/11 12:13:57 tom Exp $
+# $Id: Makefile.in,v 1.63 1999/09/01 22:35:53 tom Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
-HOSTCC = @CC@
+HOSTCC = @BUILD_CC@
HOSTCCFLAGS = @CFLAGS@ $(CPPFLAGS)
HOSTLDFLAGS = @LDFLAGS@ @LIBS@
LINK = $(CC)
LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
-SHLIB_LIST = @SHLIB_LIST@
+SHLIB_DIRS = -L../lib -L$(libdir)
+SHLIB_LIST = $(SHLIB_DIRS) @SHLIB_LIST@
+TINFO_LIST = $(SHLIB_DIRS) @TINFO_LIST@
+
MK_SHARED_LIB = @MK_SHARED_LIB@
+
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
./comp_captab.c \
./expanded.c \
./fallback.c \
- keys.tries \
+ init_keytry.h \
./lib_keyname.c \
./lib_gen.c \
./codes.c \
./unctrl.c
TEST_DEPS = @LIB_PREFIX@ncurses@DFT_DEP_SUFFIX@
-TEST_ARGS = -L../lib -lncurses
+TEST_ARGS = -L../lib -lncurses@DFT_ARG_SUFFIX@
TEST_LDFLAGS = @LD_MODEL@ $(TEST_ARGS) @LIBS@ @EXTRA_LIBS@ @LOCAL_LDFLAGS@ @LDFLAGS@
TEST_PROGS = \
hashmap$x \
lib_mvcur$x
+base = $(srcdir)/base
+serial = $(srcdir)/tty
+tinfo = $(srcdir)/tinfo
+trace = $(srcdir)/trace
+
################################################################################
all :: $(AUTO_SRC) ../lib $(LIBRARIES)
../lib : ; mkdir $@
-./fallback.c : $(srcdir)/MKfallback.sh
- sh $(srcdir)/MKfallback.sh $(FALLBACK_LIST) >$@
+./fallback.c : $(tinfo)/MKfallback.sh
+ sh $(tinfo)/MKfallback.sh $(FALLBACK_LIST) >$@
-./lib_gen.c : $(srcdir)/MKlib_gen.sh ../include/curses.h
- sh $(srcdir)/MKlib_gen.sh "$(CPP)" "$(AWK)" <../include/curses.h >$@
+./lib_gen.c : $(base)/MKlib_gen.sh ../include/curses.h
+ sh $(base)/MKlib_gen.sh "$(CPP)" "$(AWK)" <../include/curses.h >$@
-../include/nomacros.h : $(srcdir)/MKlib_gen.sh ../include/curses.h
- sh $(srcdir)/MKlib_gen.sh "$(CPP)" "$(AWK)" <../include/curses.h | \
+../include/nomacros.h : $(base)/MKlib_gen.sh ../include/curses.h
+ sh $(base)/MKlib_gen.sh "$(CPP)" "$(AWK)" <../include/curses.h | \
fgrep undef >$@
-keys.tries: make_keys$x $(srcdir)/keys.list
- ./make_keys $(srcdir)/keys.list > keys.tries
+init_keytry.h: make_keys$x $(tinfo)/keys.list
+ ./make_keys $(tinfo)/keys.list > $@
make_keys$x : \
- $(srcdir)/make_keys.c \
+ $(tinfo)/make_keys.c \
./names.c
- $(HOSTCC) -o $@ $(HOSTCCFLAGS) $(srcdir)/make_keys.c $(HOSTLDFLAGS)
+ $(HOSTCC) -o $@ $(HOSTCCFLAGS) $(tinfo)/make_keys.c $(HOSTLDFLAGS)
make_hash$x : \
- $(srcdir)/comp_hash.c \
+ $(tinfo)/comp_hash.c \
../include/hashsize.h
- $(HOSTCC) -o $@ $(HOSTCCFLAGS) -DMAIN_PROGRAM $(srcdir)/comp_hash.c $(HOSTLDFLAGS)
+ $(HOSTCC) -o $@ $(HOSTCCFLAGS) -DMAIN_PROGRAM $(tinfo)/comp_hash.c $(HOSTLDFLAGS)
-./expanded.c : $(srcdir)/MKexpanded.sh
- sh $(srcdir)/MKexpanded.sh "$(CPP)" $(CPPFLAGS)
+./expanded.c : $(serial)/MKexpanded.sh
+ sh $(serial)/MKexpanded.sh "$(CPP)" $(CPPFLAGS) > $@
./comp_captab.c: \
make_hash$x \
../include/hashsize.h \
- $(srcdir)/MKcaptab.awk
- sh $(srcdir)/MKcaptab.awk $(AWK) $(srcdir)/../include/Caps > $@
+ $(tinfo)/MKcaptab.awk
+ sh $(tinfo)/MKcaptab.awk $(AWK) $(srcdir)/../include/Caps > $@
-./lib_keyname.c: $(srcdir)/keys.list $(srcdir)/MKkeyname.awk
- $(AWK) -f $(srcdir)/MKkeyname.awk $(srcdir)/keys.list > $@
+./lib_keyname.c: $(tinfo)/keys.list $(base)/MKkeyname.awk
+ $(AWK) -f $(base)/MKkeyname.awk $(tinfo)/keys.list > $@
-./names.c ./codes.c: $(srcdir)/MKnames.awk
- $(AWK) -f $(srcdir)/MKnames.awk $(srcdir)/../include/Caps
+./names.c ./codes.c: $(tinfo)/MKnames.awk
+ $(AWK) -f $(tinfo)/MKnames.awk $(srcdir)/../include/Caps
cat namehdr boolnames boolfnames numnames numfnames strnames strfnames nameftr >./names.c
cat namehdr boolcodes numcodes strcodes codeftr >./codes.c
-rm -f namehdr nameftr codeftr boolnames boolfnames boolcodes numnames numfnames numcodes strnames strfnames strcodes
-./unctrl.c: $(srcdir)/MKunctrl.awk
- echo | $(AWK) -f $(srcdir)/MKunctrl.awk >$@
+./unctrl.c: $(base)/MKunctrl.awk
+ echo | $(AWK) -f $(base)/MKunctrl.awk >$@
tags:
ctags *.[ch]
clean :: mostlyclean
-rm -f $(AUTO_SRC)
- -rm -f make_keys
- -rm -f make_hash
+ -rm -f make_keys$x
+ -rm -f make_hash$x
distclean :: clean
-rm -f Makefile
# These rules build test-programs for the modules that have test-drivers
test_progs : $(TEST_PROGS)
-captoinfo$x : $(srcdir)/captoinfo.c $(TEST_DEPS)
- @ECHO_LINK@ $(CC) -o $@ $(CCFLAGS) -DMAIN $(srcdir)/captoinfo.c $(TEST_LDFLAGS)
+captoinfo$x : $(tinfo)/captoinfo.c $(TEST_DEPS)
+ @ECHO_LINK@ $(CC) -o $@ $(CFLAGS_DEFAULT) -DMAIN $(tinfo)/captoinfo.c $(TEST_LDFLAGS)
-hardscroll$x : $(srcdir)/hardscroll.c $(TEST_DEPS)
- @ECHO_LINK@ $(CC) -o $@ $(CCFLAGS) -DSCROLLDEBUG $(srcdir)/hardscroll.c $(TEST_LDFLAGS)
+hardscroll$x : $(serial)/hardscroll.c $(TEST_DEPS)
+ @ECHO_LINK@ $(CC) -o $@ $(CFLAGS_DEFAULT) -DSCROLLDEBUG $(serial)/hardscroll.c $(TEST_LDFLAGS)
-hashmap$x : $(srcdir)/hashmap.c $(TEST_DEPS)
- @ECHO_LINK@ $(CC) -o $@ $(CCFLAGS) -DHASHDEBUG $(srcdir)/hashmap.c $(TEST_LDFLAGS)
+hashmap$x : $(serial)/hashmap.c $(TEST_DEPS)
+ @ECHO_LINK@ $(CC) -o $@ $(CFLAGS_DEFAULT) -DHASHDEBUG $(serial)/hashmap.c $(TEST_LDFLAGS)
-lib_mvcur$x : $(srcdir)/lib_mvcur.c $(TEST_DEPS) \
+lib_mvcur$x : $(serial)/lib_mvcur.c $(TEST_DEPS) \
../@DFT_OBJ_SUBDIR@/dump_entry.o
- @ECHO_LINK@ $(CC) -o $@ $(CCFLAGS) -DNCURSES_TEST -I$(srcdir)/../progs $(srcdir)/lib_mvcur.c ../@DFT_OBJ_SUBDIR@/dump_entry.o $(TEST_LDFLAGS)
+ @ECHO_LINK@ $(CC) -o $@ $(CFLAGS_DEFAULT) -DNCURSES_TEST -I$(serial)/../../progs $(serial)/lib_mvcur.c ../@DFT_OBJ_SUBDIR@/dump_entry.o $(TEST_LDFLAGS)
../@DFT_OBJ_SUBDIR@/dump_entry.o:
- cd ../progs && $(MAKE) ../@DFT_OBJ_SUBDIR@/dump_entry.o:
+ cd ../progs && $(MAKE) ../@DFT_OBJ_SUBDIR@/dump_entry.o
###############################################################################
# The remainder of this file is automatically generated during configuration
For discussion of the package internals, see hackguide.html in the misc
directory.
-
-Here are some -D options you might need to compile with.
-The 'configure' script gets most other definitions right automatically.
-
--DHAVE_SIGACTION if the sigaction function is present
-
--DHAVE_USLEEP if the usleep function is present
-
--DSVR4_ACTION if (e.g., svr4) you need _POSIX_SOURCE to have sigaction
-
--DSVR4_TERMIO if (e.g., svr4) you need _POSIX_SOURCE to have termio
-
--DOPT_MVCUR if you want mvcur() to cost its actions or you have a
- terminal that doesn't have direct cursor addressing.
-
-There are several problems with strict POSIX systems so extra flags
-or #define's may be needed.
****************************************************************************/
/*
- * $Id: SigAction.h,v 1.4 1998/02/11 12:13:55 tom Exp $
+ * $Id: SigAction.h,v 1.5 1999/06/19 23:00:54 tom Exp $
*
* This file exists to handle non-POSIX systems which don't have <unistd.h>,
* and usually no sigaction() nor <termios.h>
#ifndef _SIGACTION_H
#define _SIGACTION_H
+#ifndef HAVE_SIGACTION
+#define HAVE_SIGACTION 0
+#endif
+
+#ifndef HAVE_SIGVEC
+#define HAVE_SIGVEC 0
+#endif
+
#if HAVE_SIGACTION
#if !HAVE_TYPE_SIGACTION
--- /dev/null
+# $Id: MKkeyname.awk,v 1.17 1999/02/18 11:18:06 tom Exp $
+##############################################################################
+# Copyright (c) 1999 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. #
+##############################################################################
+BEGIN {
+ print "/* generated by MKkeyname.awk */"
+ print ""
+ print "#include <ncurses_cfg.h>"
+ print "#include <stdlib.h>"
+ print "#include <string.h>"
+ print "#include <curses.h>"
+ print "#include <tic.h>"
+ print ""
+ print "const struct kn _nc_key_names[] = {"
+}
+
+/^[^#]/ {
+ printf "\t{ \"%s\", %s },\n", $1, $1;
+ }
+
+END {
+ printf "\t{ 0, 0 }};\n"
+ print ""
+ print "NCURSES_CONST char *keyname(int c)"
+ print "{"
+ print "int i;"
+ print "static char name[20];"
+ print "char *p;"
+ print ""
+ print "\tfor (i = 0; _nc_key_names[i].name != 0; i++)"
+ print "\t\tif (_nc_key_names[i].code == c)"
+ print "\t\t\treturn (NCURSES_CONST char *)_nc_key_names[i].name;"
+ print "\tif (c >= 256) return \"UNKNOWN KEY\";"
+ print "\tp = name;"
+ print "\tif (c >= 128) {"
+ print "\t\tstrcpy(p, \"M-\");"
+ print "\t\tp += 2;"
+ print "\t\tc -= 128;"
+ print "\t}"
+ print "\tif (c < 0)"
+ print "\t\tsprintf(p, \"%d\", c);"
+ print "\telse if (c < 32)"
+ print "\t\tsprintf(p, \"^%c\", c + '@');"
+ print "\telse if (c == 127)"
+ print "\t\tstrcpy(p, \"^?\");"
+ print "\telse"
+ print "\t\tsprintf(p, \"%c\", c);"
+ print "\treturn (NCURSES_CONST char *)name;"
+ print "}"
+}
-# $Id: MKunctrl.awk,v 1.5 1998/02/11 12:13:55 tom Exp $
+# $Id: MKunctrl.awk,v 1.6 1998/06/06 18:18:07 tom Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
BEGIN {
print "/* generated by MKunctrl.awk */"
- print
+ print ""
print "#include <curses.priv.h>"
- print
+ print ""
print "#undef unctrl"
- print
+ print ""
}
END {
print "NCURSES_CONST char *unctrl(register chtype ch)"
--- /dev/null
+-- $Id: README,v 1.1 1998/11/14 22:58:22 tom Exp $
+
+The functions in this directory are the generic (not device-specific) modules
+of ncurses.
+
+As a rule, these modules should not depend directly on term.h references and
+associated terminfo function and variables.
#include <curses.priv.h>
-MODULE_ID("$Id: define_key.c,v 1.2 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: define_key.c,v 1.4 1999/02/21 13:03:55 tom Exp $")
int
define_key(char *str, int keycode)
T((T_CALLED("define_key(%s,%d)"), _nc_visbuf(str), keycode));
if (keycode > 0) {
- if (has_key(keycode)) {
- if (_nc_remove_key(&(SP->_keytry), keycode))
+ if (str != 0) {
+ define_key(str, 0);
+ } else if (has_key(keycode)) {
+ while (_nc_remove_key(&(SP->_keytry), keycode))
code = OK;
}
if (str != 0) {
(void) _nc_add_to_try(&(SP->_keytry), str, keycode);
code = OK;
}
+ } else {
+ while (_nc_remove_string(&(SP->_keytry), str))
+ code = OK;
}
returnCode(code);
}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999 *
+ ****************************************************************************/
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: keybound.c,v 1.1 1999/02/19 11:55:56 tom Exp $")
+
+/*
+ * Returns the count'th string definition which is associated with the
+ * given keycode. The result is malloc'd, must be freed by the caller.
+ */
+
+char *keybound(int code, int count)
+{
+ return _nc_expand_try(SP->_key_ok, code, &count, 0);
+}
#include <curses.priv.h>
-MODULE_ID("$Id: keyok.c,v 1.2 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: keyok.c,v 1.3 1999/02/19 11:29:48 tom Exp $")
/*
* Enable (or disable) ncurses' interpretation of a keycode by adding (or
int keyok(int c, bool flag)
{
int code = ERR;
+ int count = 0;
char *s;
T((T_CALLED("keyok(%d,%d)"), c, flag));
if (flag) {
- if ((s = _nc_expand_try(SP->_key_ok, c, 0)) != 0
+ while ((s = _nc_expand_try(SP->_key_ok, c, &count, 0)) != 0
&& _nc_remove_key(&(SP->_key_ok), c)) {
_nc_add_to_try(&(SP->_keytry), s, c);
free(s);
code = OK;
+ count = 0;
}
} else {
- if ((s = _nc_expand_try(SP->_keytry, c, 0)) != 0
+ while ((s = _nc_expand_try(SP->_keytry, c, &count, 0)) != 0
&& _nc_remove_key(&(SP->_keytry), c)) {
_nc_add_to_try(&(SP->_key_ok), s, c);
free(s);
code = OK;
+ count = 0;
}
}
returnCode(code);
#include <curses.priv.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_addch.c,v 1.39 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_addch.c,v 1.42 1999/07/24 20:01:05 tom Exp $")
/*
* Ugly microtweaking alert. Everything from here to end of module is
line = win->_line+win->_cury;
- if (line->firstchar == _NOCHANGE)
- line->firstchar = line->lastchar = x;
- else if (x < line->firstchar)
- line->firstchar = x;
- else if (x > line->lastchar)
- line->lastchar = x;
+ CHANGED_CELL(line,x);
line->text[x++] = ch;
/* the workhorse function -- add a character to the given window */
{
int x, y;
- int t;
- const char *s;
+ int t = 0;
+ const char *s = 0;
if ((ch & A_ALTCHARSET)
|| ((t = TextOf(ch)) > 127)
#include <curses.priv.h>
-MODULE_ID("$Id: lib_addstr.c,v 1.14 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_addstr.c,v 1.16 1998/06/28 00:38:29 tom Exp $")
int
waddnstr(WINDOW *win, const char *const astr, int n)
short y = win->_cury;
short x = win->_curx;
int code = OK;
+struct ldat *line;
T((T_CALLED("waddchnstr(%p,%p,%d)"), win, astr, n));
if (!win)
- returnCode(ERR);
+ returnCode(ERR);
if (n < 0) {
const chtype *str;
if (n == 0)
returnCode(code);
- if (win->_line[y].firstchar == _NOCHANGE)
- {
- win->_line[y].firstchar = x;
- win->_line[y].lastchar = x+n-1;
- }
- else
- {
- if (x < win->_line[y].firstchar)
- win->_line[y].firstchar = x;
- if (x+n-1 > win->_line[y].lastchar)
- win->_line[y].lastchar = x+n-1;
- }
-
- memcpy(win->_line[y].text+x, astr, n*sizeof(*astr));
+ line = &(win->_line[y]);
+ memcpy(line->text+x, astr, n*sizeof(*astr));
+ CHANGED_RANGE(line, x, x+n-1);
_nc_synchook(win);
returnCode(code);
#include <curses.priv.h>
#include <term.h> /* beep, flash */
-MODULE_ID("$Id: lib_beep.c,v 1.5 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_beep.c,v 1.7 1999/10/22 21:39:09 tom Exp $")
/*
* beep()
int beep(void)
{
+ int res = ERR;
+
T((T_CALLED("beep()")));
/* FIXME: should make sure that we are not in altchar mode */
if (bell) {
TPUTS_TRACE("bell");
- return(putp(bell));
+ res = putp(bell);
+ _nc_flush();
} else if (flash_screen) {
TPUTS_TRACE("flash_screen");
- return(putp(flash_screen));
+ res = putp(flash_screen);
+ _nc_flush();
}
- else
- returnCode(ERR);
+
+ returnCode(res);
}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_clrbot.c,v 1.13 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_clrbot.c,v 1.14 1998/06/28 00:36:26 tom Exp $")
int wclrtobot(WINDOW *win)
{
int code = ERR;
-chtype blank;
-chtype *ptr, *end;
-short y, startx;
T((T_CALLED("wclrtobot(%p)"), win));
if (win) {
- startx = win->_curx;
-
- T(("clearing from y = %d to y = %d with maxx = %d", win->_cury, win->_maxy, win->_maxx));
-
- for (y = win->_cury; y <= win->_maxy; y++) {
- end = &win->_line[y].text[win->_maxx];
-
- blank = _nc_background(win);
- for (ptr = &win->_line[y].text[startx]; ptr <= end; ptr++)
- *ptr = blank;
-
- if (win->_line[y].firstchar > startx
- || win->_line[y].firstchar == _NOCHANGE)
- win->_line[y].firstchar = startx;
-
- win->_line[y].lastchar = win->_maxx;
-
- startx = 0;
- }
- _nc_synchook(win);
- code = OK;
+ short y;
+ short startx = win->_curx;
+ chtype blank = _nc_background(win);
+
+ T(("clearing from y = %d to y = %d with maxx = %d", win->_cury, win->_maxy, win->_maxx));
+
+ for (y = win->_cury; y <= win->_maxy; y++) {
+ struct ldat *line = &(win->_line[y]);
+ chtype *ptr = &(line->text[startx]);
+ chtype *end = &(line->text[win->_maxx]);
+
+ CHANGED_TO_EOL(line, startx, win->_maxx);
+
+ while (ptr <= end)
+ *ptr++ = blank;
+
+ startx = 0;
+ }
+ _nc_synchook(win);
+ code = OK;
}
returnCode(code);
}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_clreol.c,v 1.14 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_clreol.c,v 1.15 1998/06/28 00:32:20 tom Exp $")
int wclrtoeol(WINDOW *win)
{
int code = ERR;
-chtype blank;
-chtype *ptr, *end;
-short y, x;
T((T_CALLED("wclrtoeol(%p)"), win));
if (win) {
+ chtype blank;
+ chtype *ptr, *end;
+ struct ldat *line;
+ short y = win->_cury;
+ short x = win->_curx;
- y = win->_cury;
- x = win->_curx;
+ /*
+ * If we have just wrapped the cursor, the clear applies to the
+ * new line, unless we are at the lower right corner.
+ */
+ if (win->_flags & _WRAPPED
+ && y < win->_maxy) {
+ win->_flags &= ~_WRAPPED;
+ }
- /*
- * If we have just wrapped the cursor, the clear applies to the new
- * line, unless we are at the lower right corner.
- */
- if (win->_flags & _WRAPPED
- && y < win->_maxy) {
- win->_flags &= ~_WRAPPED;
- }
-
- /*
- * There's no point in clearing if we're not on a legal position,
- * either.
- */
- if (win->_flags & _WRAPPED
- || y > win->_maxy
- || x > win->_maxx)
- returnCode(ERR);
-
- blank = _nc_background(win);
- end = &win->_line[y].text[win->_maxx];
-
- for (ptr = &win->_line[y].text[x]; ptr <= end; ptr++)
- *ptr = blank;
-
- if (win->_line[y].firstchar > win->_curx
- || win->_line[y].firstchar == _NOCHANGE)
- win->_line[y].firstchar = win->_curx;
-
- win->_line[y].lastchar = win->_maxx;
-
- _nc_synchook(win);
- code = OK;
+ /*
+ * There's no point in clearing if we're not on a legal
+ * position, either.
+ */
+ if (win->_flags & _WRAPPED
+ || y > win->_maxy
+ || x > win->_maxx)
+ returnCode(ERR);
+
+ blank = _nc_background(win);
+ line = &win->_line[y];
+ CHANGED_TO_EOL(line, x, win->_maxx);
+
+ ptr = &(line->text[x]);
+ end = &(line->text[win->_maxx]);
+
+ while (ptr <= end)
+ *ptr++ = blank;
+
+ _nc_synchook(win);
+ code = OK;
}
returnCode(code);
}
#include <term.h>
-MODULE_ID("$Id: lib_color.c,v 1.24 1998/02/11 12:13:58 tom Exp $")
-
-/*
- * Only 8 ANSI colors are defined; the ISO 6429 control sequences work only
- * for 8 values (0-7).
- */
-#define MAX_ANSI_COLOR 8
+MODULE_ID("$Id: lib_color.c,v 1.36 1999/10/03 00:20:37 Philippe.Blain Exp $")
/*
* These should be screen structure members. They need to be globals for
{0, 50, 100}, /* COLOR_WHITE */
};
-int start_color(void)
+/*
+ * SVr4 curses is known to interchange color codes (1,4) and (3,6), possibly
+ * to maintain compatibility with a pre-ANSI scheme. The same scheme is
+ * also used in the FreeBSD syscons.
+ */
+static int toggled_colors(int c)
{
- T((T_CALLED("start_color()")));
+ if (c < 16) {
+ static const int table[] =
+ { 0, 4, 2, 6, 1, 5, 3, 7,
+ 8, 12, 10, 14, 9, 13, 11, 15};
+ c = table[c];
+ }
+ return c;
+}
+
+static void set_background_color(int bg, int (*outc)(int))
+{
+ if (set_a_background)
+ {
+ TPUTS_TRACE("set_a_background");
+ tputs(tparm(set_a_background, bg), 1, outc);
+ }
+ else
+ {
+ TPUTS_TRACE("set_background");
+ tputs(tparm(set_background, toggled_colors(bg)), 1, outc);
+ }
+}
-#ifdef orig_pair
- if (orig_pair != NULL)
+static void set_foreground_color(int fg, int (*outc)(int))
+{
+ if (set_a_foreground)
+ {
+ TPUTS_TRACE("set_a_foreground");
+ tputs(tparm(set_a_foreground, fg), 1, outc);
+ }
+ else
{
+ TPUTS_TRACE("set_foreground");
+ tputs(tparm(set_foreground, toggled_colors(fg)), 1, outc);
+ }
+}
+
+static bool set_original_colors(void)
+{
+ if (orig_pair != 0) {
TPUTS_TRACE("orig_pair");
putp(orig_pair);
+ return TRUE;
}
-#endif /* orig_pair */
-#ifdef orig_colors
- if (orig_colors != NULL)
+ else if (orig_colors != NULL)
{
TPUTS_TRACE("orig_colors");
putp(orig_colors);
+ return TRUE;
}
-#endif /* orig_colors */
-#if defined(orig_pair) && defined(orig_colors)
- if (!orig_pair && !orig_colors)
- returnCode(ERR);
-#endif /* defined(orig_pair) && defined(orig_colors) */
+ return FALSE;
+}
+
+int start_color(void)
+{
+ T((T_CALLED("start_color()")));
+
+ if (set_original_colors() != TRUE)
+ {
+ set_foreground_color(COLOR_WHITE, _nc_outch);
+ set_background_color(COLOR_BLACK, _nc_outch);
+ }
+
if (max_pairs != -1)
COLOR_PAIRS = SP->_pair_count = max_pairs;
else
returnCode(ERR);
- SP->_color_pairs = typeCalloc(unsigned short, max_pairs);
+ if ((SP->_color_pairs = typeCalloc(unsigned short, max_pairs)) == 0)
+ returnCode(ERR);
SP->_color_pairs[0] = PAIR_OF(COLOR_WHITE, COLOR_BLACK);
if (max_colors != -1)
COLORS = SP->_color_count = max_colors;
returnCode(ERR);
SP->_coloron = 1;
- SP->_color_table = malloc(sizeof(color_t) * COLORS);
-#ifdef hue_lightness_saturation
+ if ((SP->_color_table = typeMalloc(color_t, COLORS)) == 0)
+ returnCode(ERR);
if (hue_lightness_saturation)
memcpy(SP->_color_table, hls_palette, sizeof(color_t) * COLORS);
else
-#endif /* hue_lightness_saturation */
memcpy(SP->_color_table, cga_palette, sizeof(color_t) * COLORS);
- if (orig_colors)
- {
- TPUTS_TRACE("orig_colors");
- putp(orig_colors);
- }
-
T(("started color: COLORS = %d, COLOR_PAIRS = %d", COLORS, COLOR_PAIRS));
returnCode(OK);
}
-#ifdef hue_lightness_saturation
/* This function was originally written by Daniel Weaver <danw@znyx.com> */
static void rgb2hls(short r, short g, short b, short *h, short *l, short *s)
/* convert RGB to HLS system */
{
short min, max, t;
-
+
if ((min = g < r ? g : r) > b) min = b;
if ((max = g > r ? g : r) < b) max = b;
*h = t % 360;
}
-#endif /* hue_lightness_saturation */
/*
* Extension (1997/1/18) - Allow negative f/b values to set default color
*/
int init_pair(short pair, short f, short b)
{
+ unsigned result;
+
T((T_CALLED("init_pair(%d,%d,%d)"), pair, f, b));
if ((pair < 1) || (pair >= COLOR_PAIRS))
returnCode(ERR);
/*
- * FIXME: when a pair's content is changed, replace its colors
- * (if pair was initialized before a screen update is performed
- * replacing original pair colors with the new ones)
+ * When a pair's content is changed, replace its colors (if pair was
+ * initialized before a screen update is performed replacing original
+ * pair colors with the new ones).
*/
-
- SP->_color_pairs[pair] = PAIR_OF(f,b);
+ result = PAIR_OF(f,b);
+ if (SP->_color_pairs[pair] != 0
+ && SP->_color_pairs[pair] != result) {
+ int y, x;
+ attr_t z = COLOR_PAIR(pair);
+
+ for (y = 0; y <= curscr->_maxy; y++) {
+ struct ldat *ptr = &(curscr->_line[y]);
+ bool changed = FALSE;
+ for (x = 0; x <= curscr->_maxx; x++) {
+ if ((ptr->text[x] & A_COLOR) == z) {
+ /* Set the old cell to zero to ensure it will be
+ updated on the next doupdate() */
+ ptr->text[x] = 0;
+ CHANGED_CELL(ptr,x);
+ changed = TRUE;
+ }
+ }
+ if (changed)
+ _nc_make_oldhash(y);
+ }
+ }
+ SP->_color_pairs[pair] = result;
if (initialize_pair)
{
- const color_t *tp = hue_lightness_saturation ? hls_palette : cga_palette;
+ const color_t *tp = hue_lightness_saturation ? hls_palette : cga_palette;
T(("initializing pair: pair = %d, fg=(%d,%d,%d), bg=(%d,%d,%d)",
pair,
int init_color(short color, short r, short g, short b)
{
T((T_CALLED("init_color(%d,%d,%d,%d)"), color, r, g, b));
-#ifdef initialize_color
+
if (initialize_color == NULL)
returnCode(ERR);
-#endif /* initialize_color */
if (color < 0 || color >= COLORS)
returnCode(ERR);
if (r < 0 || r > 1000 || g < 0 || g > 1000 || b < 0 || b > 1000)
returnCode(ERR);
-#ifdef hue_lightness_saturation
if (hue_lightness_saturation)
rgb2hls(r, g, b,
&SP->_color_table[color].red,
&SP->_color_table[color].green,
&SP->_color_table[color].blue);
else
-#endif /* hue_lightness_saturation */
{
SP->_color_table[color].red = r;
SP->_color_table[color].green = g;
SP->_color_table[color].blue = b;
}
-#ifdef initialize_color
if (initialize_color)
{
TPUTS_TRACE("initialize_color");
putp(tparm(initialize_color, color, r, g, b));
}
-#endif /* initialize_color */
returnCode(OK);
}
bool has_colors(void)
{
T((T_CALLED("has_colors()")));
- returnCode (((orig_pair != NULL || orig_colors != NULL)
- && (max_colors != -1) && (max_pairs != -1)
+ returnCode (((max_colors != -1) && (max_pairs != -1)
&& (((set_foreground != NULL)
&& (set_background != NULL))
|| ((set_a_foreground != NULL)
int color_content(short color, short *r, short *g, short *b)
{
T((T_CALLED("color_content(%d,%p,%p,%p)"), color, r, g, b));
- if (color < 0 || color > COLORS)
+ if (color < 0 || color >= COLORS)
returnCode(ERR);
if (r) *r = SP->_color_table[color].red;
{
T((T_CALLED("pair_content(%d,%p,%p)"), pair, f, b));
- if ((pair < 0) || (pair > COLOR_PAIRS))
+ if ((pair < 0) || (pair >= COLOR_PAIRS))
returnCode(ERR);
if (f) *f = ((SP->_color_pairs[pair] >> C_SHIFT) & C_MASK);
if (b) *b = (SP->_color_pairs[pair] & C_MASK);
returnCode(OK);
}
-/*
- * SVr4 curses is known to interchange color codes (1,4) and (3,6), possibly
- * to maintain compatibility with a pre-ANSI scheme. The same scheme is
- * also used in the FreeBSD syscons.
- */
-static int toggled_colors(int c)
-{
- if (c < 16) {
- static const int table[] =
- { 0, 4, 2, 6, 1, 5, 3, 7,
- 8, 12, 10, 14, 9, 13, 11, 15};
- c = table[c];
- }
- return c;
-}
-
-void _nc_do_color(int pair, bool reverse, int (*outc)(int))
+void _nc_do_color(int pair, bool reverse, int (*outc)(int))
{
short fg, bg;
- if (reverse)
- pair = -pair;
-
if (pair == 0)
{
if (orig_pair)
TPUTS_TRACE("orig_pair");
tputs(orig_pair, 1, outc);
}
+ else if (set_color_pair)
+ {
+ TPUTS_TRACE("set_color_pair");
+ tputs(tparm(set_color_pair, pair), 1, outc);
+ }
+ else
+ {
+ set_foreground_color(COLOR_WHITE, outc);
+ set_background_color(COLOR_BLACK, outc);
+ }
}
else
{
if (fg == C_MASK || bg == C_MASK)
{
- if (orig_pair)
- {
- TPUTS_TRACE("orig_pair");
- tputs(orig_pair, 1, outc);
- }
- else
+ if (set_original_colors() != TRUE)
{
- TPUTS_TRACE("orig_colors");
- tputs(orig_colors, 1, outc);
+ if (fg == C_MASK)
+ set_foreground_color(COLOR_WHITE, outc);
+ if (bg == C_MASK)
+ set_background_color(COLOR_BLACK, outc);
}
}
if (fg != C_MASK)
{
- if (set_a_foreground && fg <= MAX_ANSI_COLOR)
- {
- TPUTS_TRACE("set_a_foreground");
- tputs(tparm(set_a_foreground, fg), 1, outc);
- }
- else
- {
- TPUTS_TRACE("set_foreground");
- tputs(tparm(set_foreground, toggled_colors(fg)), 1, outc);
- }
+ set_foreground_color(fg, outc);
}
if (bg != C_MASK)
{
- if (set_a_background && bg <= MAX_ANSI_COLOR)
- {
- TPUTS_TRACE("set_a_background");
- tputs(tparm(set_a_background, bg), 1, outc);
- }
- else
- {
- TPUTS_TRACE("set_background");
- tputs(tparm(set_background, toggled_colors(bg)), 1, outc);
- }
+ set_background_color(bg, outc);
}
}
}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1998 *
+ ****************************************************************************/
+
+/*
+** lib_colorset.c
+**
+** The routine wcolor_set().
+**
+*/
+
+#include <curses.priv.h>
+#include <ctype.h>
+
+MODULE_ID("$Id: lib_colorset.c,v 1.5 1999/05/16 17:13:43 juergen Exp $")
+
+int wcolor_set(WINDOW *win, short color_pair_number, void *opts)
+{
+ T((T_CALLED("wcolor_set(%p,%d)"), win, color_pair_number));
+ if (win && !opts && (color_pair_number >= 0) && (color_pair_number < COLOR_PAIRS)) {
+ T(("... current %ld", (long) PAIR_NUMBER(win->_attrs)));
+ toggle_attr_on(win->_attrs,COLOR_PAIR(color_pair_number));
+ returnCode(OK);
+ } else
+ returnCode(ERR);
+}
+
+
#include <curses.priv.h>
-MODULE_ID("$Id: lib_delch.c,v 1.7 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: lib_delch.c,v 1.8 1998/06/28 00:28:17 tom Exp $")
int wdelch(WINDOW *win)
{
int code = ERR;
-chtype *temp1, *temp2;
-chtype *end;
-chtype blank = _nc_background(win);
T((T_CALLED("wdelch(%p)"), win));
if (win) {
- end = &win->_line[win->_cury].text[win->_maxx];
- temp2 = &win->_line[win->_cury].text[win->_curx + 1];
- temp1 = temp2 - 1;
-
- while (temp1 < end)
- *temp1++ = *temp2++;
-
- *temp1 = blank;
-
- win->_line[win->_cury].lastchar = win->_maxx;
-
- if (win->_line[win->_cury].firstchar == _NOCHANGE
- || win->_line[win->_cury].firstchar > win->_curx)
- win->_line[win->_cury].firstchar = win->_curx;
-
- _nc_synchook(win);
- code = OK;
+ chtype blank = _nc_background(win);
+ struct ldat *line = &(win->_line[win->_cury]);
+ chtype *end = &(line->text[win->_maxx]);
+ chtype *temp2 = &(line->text[win->_curx + 1]);
+ chtype *temp1 = temp2 - 1;
+
+ CHANGED_TO_EOL(line, win->_curx, win->_maxx);
+ while (temp1 < end)
+ *temp1++ = *temp2++;
+
+ *temp1 = blank;
+
+ _nc_synchook(win);
+ code = OK;
}
returnCode(code);
}
*/
#include <curses.priv.h>
-#include <term.h> /* cur_term */
-MODULE_ID("$Id: lib_echo.c,v 1.2 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: lib_echo.c,v 1.3 1998/10/12 13:15:33 Alexander.V.Lukyanov Exp $")
int echo(void)
{
#include <curses.priv.h>
#include <term.h>
-MODULE_ID("$Id: lib_endwin.c,v 1.14 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_endwin.c,v 1.17 1999/06/12 23:01:46 tom Exp $")
int
endwin(void)
T((T_CALLED("endwin()")));
if (SP) {
- SP->_endwin = TRUE;
- SP->_mouse_wrap(SP);
- _nc_screen_wrap();
- _nc_mvcur_wrap(); /* wrap up cursor addressing */
+ SP->_endwin = TRUE;
+ SP->_mouse_wrap(SP);
+ _nc_screen_wrap();
+ _nc_mvcur_wrap(); /* wrap up cursor addressing */
+ returnCode(reset_shell_mode());
}
- returnCode(reset_shell_mode());
+ returnCode(ERR);
}
#include <curses.priv.h>
#include <term.h> /* beep, flash */
-MODULE_ID("$Id: lib_flash.c,v 1.2 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_flash.c,v 1.4 1999/10/22 21:39:06 tom Exp $")
/*
* flash()
int flash(void)
{
+ int res = ERR;
+
T((T_CALLED("flash()")));
/* FIXME: should make sure that we are not in altchar mode */
if (flash_screen) {
TPUTS_TRACE("flash_screen");
- returnCode(putp(flash_screen));
+ res = putp(flash_screen);
+ _nc_flush();
} else if (bell) {
TPUTS_TRACE("bell");
- returnCode(putp(bell));
+ res = putp(bell);
+ _nc_flush();
}
- else
- returnCode(ERR);
+
+ returnCode(res);
}
* Author: Thomas E. Dickey <dickey@clark.net> 1996,1997 *
****************************************************************************/
-#define HAVE_NC_FREEALL 1
-
#include <curses.priv.h>
-#include <term.h>
+#include <term_entry.h>
+
+#if HAVE_NC_FREEALL
#if HAVE_LIBDBMALLOC
extern int malloc_errfd; /* FIXME */
#endif
-MODULE_ID("$Id: lib_freeall.c,v 1.11 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_freeall.c,v 1.15 1999/10/22 21:40:10 tom Exp $")
static void free_slk(SLK *p)
{
}
}
-void _nc_free_termtype(struct termtype *p, int base)
-{
- if (p != 0) {
- FreeIfNeeded(p->term_names);
- FreeIfNeeded(p->str_table);
- if (base)
- free(p);
- }
-}
-
static void free_tries(struct tries *p)
{
struct tries *q;
free_slk(SP->_slk);
FreeIfNeeded(SP->_color_pairs);
FreeIfNeeded(SP->_color_table);
- _nc_set_buffer(SP->_ofp, FALSE);
#if !BROKEN_LINKER
FreeAndNull(SP);
#endif
}
if (cur_term != 0) {
- _nc_free_termtype(&(cur_term->type), TRUE);
+ _nc_free_termtype(&(cur_term->type));
+ free(cur_term);
}
#ifdef TRACE
_nc_freeall();
exit(code);
}
+#else
+void _nc_freeall(void) { }
+#endif
#include <curses.priv.h>
-MODULE_ID("$Id: lib_getch.c,v 1.40 1998/02/11 12:13:58 tom Exp $")
+MODULE_ID("$Id: lib_getch.c,v 1.43 1999/03/08 02:35:10 tom Exp $")
#include <fifo_defs.h>
int ESCDELAY = 1000; /* max interval betw. chars in funkeys, in millisecs */
+#ifdef USE_EMX_MOUSE
+# include <sys/select.h>
+static int
+kbd_mouse_read(unsigned char *p)
+{
+fd_set fdset;
+int nums = SP->_ifd+1;
+
+ for (;;) {
+ FD_ZERO(&fdset);
+ FD_SET(SP->_checkfd, &fdset);
+ if (SP->_mouse_fd >= 0) {
+ FD_SET(SP->_mouse_fd, &fdset);
+ if (SP->_mouse_fd > SP->_checkfd)
+ nums = SP->_mouse_fd+1;
+ }
+ if (select(nums, &fdset, NULL, NULL, NULL) >= 0) {
+ int n;
+
+ if (FD_ISSET(SP->_mouse_fd, &fdset)) /* Prefer mouse */
+ n = read(SP->_mouse_fd, p, 1);
+ else
+ n = read(SP->_ifd, p, 1);
+ return n;
+ }
+ if (errno != EINTR)
+ return -1;
+ }
+}
+#endif /* USE_EMX_MOUSE */
+
static inline int fifo_peek(void)
{
int ch = SP->_fifo[peek];
T(("peeking at %d", peek));
-
+
p_inc();
return ch;
}
}
else
h_inc();
-
+
#ifdef TRACE
if (_nc_tracing & TRACE_IEVENT) _nc_fifo_dump();
#endif
errno = 0;
#endif
-#if USE_GPM_SUPPORT
- if ((SP->_mouse_fd >= 0)
+#if USE_GPM_SUPPORT
+ if ((SP->_mouse_fd >= 0)
&& (_nc_timed_wait(3, -1, (int *)0) & 2))
{
SP->_mouse_event(SP);
#endif
{
unsigned char c2=0;
+#ifdef USE_EMX_MOUSE
+ n = kbd_mouse_read(&c2);
+#else
n = read(SP->_ifd, &c2, 1);
- ch = c2;
+#endif
+ ch = c2 & 0xff;
}
#ifdef HIDE_EINTR
/*
* Under System V curses with non-restarting signals, getch() returns
- * with value ERR when a handled signal keeps it from completing.
+ * with value ERR when a handled signal keeps it from completing.
* If signals restart system calls, OTOH, the signal is invisible
* except to its handler.
- *
+ *
* We don't want this difference to show. This piece of code
* tries to make it look like we always have restarting signals.
*/
if (wgetch_should_refresh(win))
wrefresh(win);
- if (!win->_notimeout && (win->_delay >= 0 || SP->_cbreak > 1)) {
- int delay;
+ if (!win->_notimeout && (win->_delay >= 0 || SP->_cbreak > 1))
+ {
+ int delay;
T(("timed delay in wgetch()"));
if (SP->_cbreak > 1)
/* else go on to read data available */
}
- if (win->_use_keypad) {
+ if (win->_use_keypad)
+ {
/*
* This is tricky. We only want to get special-key
* events one at a time. But we want to accumulate
#include <curses.priv.h>
#include <term.h>
-MODULE_ID("$Id: lib_getstr.c,v 1.19 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: lib_getstr.c,v 1.20 1998/12/20 00:16:01 tom Exp $")
/*
* This wipes out the last character, no matter whether it was a tab, control
if (!win)
returnCode(ERR);
- _nc_get_curterm(&buf);
+ _nc_get_tty_mode(&buf);
oldnl = SP->_nl;
oldecho = SP->_echo;
SP->_raw = oldraw;
SP->_cbreak = oldcbreak;
- _nc_set_curterm(&buf);
+ _nc_set_tty_mode(&buf);
*str = '\0';
if (ch == ERR)
#include <curses.priv.h>
-MODULE_ID("$Id: lib_hline.c,v 1.2 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_hline.c,v 1.4 1998/06/28 00:11:01 tom Exp $")
int whline(WINDOW *win, chtype ch, int n)
{
int code = ERR;
-short line;
short start;
short end;
T((T_CALLED("whline(%p,%s,%d)"), win, _tracechtype(ch), n));
if (win) {
- line = win->_cury;
+ struct ldat *line = &(win->_line[win->_cury]);
+
start = win->_curx;
end = start + n - 1;
if (end > win->_maxx)
end = win->_maxx;
- if (win->_line[line].firstchar == _NOCHANGE
- || win->_line[line].firstchar > start)
- win->_line[line].firstchar = start;
- if (win->_line[line].lastchar == _NOCHANGE
- || win->_line[line].lastchar < start)
- win->_line[line].lastchar = end;
+ CHANGED_RANGE(line, start, end);
if (ch == 0)
ch = ACS_HLINE;
ch = _nc_render(win, ch);
while ( end >= start) {
- win->_line[line].text[end] = ch;
+ line->text[end] = ch;
end--;
}
code = OK;
#include <sys/termio.h> /* needed for ISC */
#endif
-MODULE_ID("$Id: lib_initscr.c,v 1.21 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: lib_initscr.c,v 1.26 1998/12/19 23:10:09 tom Exp $")
WINDOW *initscr(void)
{
static bool initialized = FALSE;
-const char *name;
+NCURSES_CONST char *name;
+int value;
T((T_CALLED("initscr()")));
/* Portable applications must not call initscr() more than once */
}
/* allow user to set maximum escape delay from the environment */
- if ((name = getenv("ESCDELAY")) != 0)
- ESCDELAY = atoi(getenv("ESCDELAY"));
+ if ((value = _nc_getenv_num("ESCDELAY")) >= 0) {
+ ESCDELAY = value;
+ }
/* def_shell_mode - done in newterm/_nc_setupscreen */
def_prog_mode();
}
returnWin(stdscr);
}
-
-char *termname(void)
-{
-char *term = getenv("TERM");
-static char ret[MAX_ALIAS];
-
- T(("termname() called"));
-
- if (term != 0) {
- (void) strncpy(ret, term, sizeof(ret) - 1);
- term = ret;
- }
- return term;
-}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_insch.c,v 1.9 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_insch.c,v 1.10 1998/06/28 00:26:52 tom Exp $")
int winsch(WINDOW *win, chtype c)
{
int code = ERR;
-chtype *temp1, *temp2;
-chtype *end;
T((T_CALLED("winsch(%p, %s)"), win, _tracechtype(c)));
if (win) {
- end = &win->_line[win->_cury].text[win->_curx];
- temp1 = &win->_line[win->_cury].text[win->_maxx];
- temp2 = temp1 - 1;
+ struct ldat *line = &(win->_line[win->_cury]);
+ chtype *end = &(line->text[win->_curx]);
+ chtype *temp1 = &(line->text[win->_maxx]);
+ chtype *temp2 = temp1 - 1;
- while (temp1 > end)
- *temp1-- = *temp2--;
-
- *temp1 = _nc_render(win, c);
-
- win->_line[win->_cury].lastchar = win->_maxx;
- if (win->_line[win->_cury].firstchar == _NOCHANGE
- || win->_line[win->_cury].firstchar > win->_curx)
- win->_line[win->_cury].firstchar = win->_curx;
- code = OK;
+ CHANGED_TO_EOL(line, win->_curx, win->_maxx);
+ while (temp1 > end)
+ *temp1-- = *temp2--;
+
+ *temp1 = _nc_render(win, c);
+ code = OK;
}
returnCode(code);
}
#include <curses.priv.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_insstr.c,v 1.12 1998/02/23 12:12:16 tom Exp $")
+MODULE_ID("$Id: lib_insstr.c,v 1.13 1999/03/14 00:27:21 tom Exp $")
int winsnstr(WINDOW *win, const char *s, int n)
{
const unsigned char *str = (const unsigned char *)s;
const unsigned char *cp;
- T((T_CALLED("winsnstr(%p,%s,%d)"), win, _nc_visbuf(str), n));
+ T((T_CALLED("winsnstr(%p,%s,%d)"), win, _nc_visbuf(s), n));
if (win && str) {
oy = win->_cury; ox = win->_curx;
#include <curses.priv.h>
-MODULE_ID("$Id: lib_isendwin.c,v 1.3 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: lib_isendwin.c,v 1.4 1998/04/11 22:52:32 tom Exp $")
-int isendwin(void)
+bool isendwin(void)
{
if (SP == NULL)
return FALSE;
#include <curses.priv.h>
-MODULE_ID("$Id: lib_leaveok.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: lib_leaveok.c,v 1.3 1998/03/21 22:54:20 jtc Exp $")
int leaveok(WINDOW *win, bool flag)
{
if (win) {
win->_leaveok = flag;
- if (flag == TRUE)
- curs_set(0);
- else
- curs_set(1);
returnCode(OK);
}
else
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
* devices.
*
* The first method used is xterm's internal mouse-tracking facility.
- * The second (not yet implemented) will be Alessandro Rubini's GPM server.
+ * The second is Alessandro Rubini's GPM server.
*
* Notes for implementors of new mouse-interface methods:
*
* used yet, and a couple of bits open at the high end.
*/
+#ifdef __EMX__
+# include "io.h"
+# include "fcntl.h"
+# define INCL_DOS
+# define INCL_VIO
+# define INCL_KBD
+# define INCL_MOU
+# define INCL_DOSPROCESS
+# include <os2.h> /* Need to include before the others */
+#endif
+
#include <curses.priv.h>
#include <term.h>
#if USE_GPM_SUPPORT
-#ifndef LINT /* don't need this for llib-lncurses */
-#undef buttons /* term.h defines this, and gpm uses it! */
+#ifndef LINT /* don't need this for llib-lncurses */
+#undef buttons /* term.h defines this, and gpm uses it! */
#include <gpm.h>
+#include <linux/keyboard.h> /* defines KG_* macros */
#endif
#endif
-MODULE_ID("$Id: lib_mouse.c,v 1.35 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_mouse.c,v 1.45 1999/10/22 21:39:02 tom Exp $")
#define MY_TRACE TRACE_ICALLS|TRACE_IEVENT
_tracef(tag);
for (ep = events; ep < events + EV_MAX; ep++)
- _tracef("mouse event queue slot %d = %s", ep-events, _tracemouse(ep));
+ _tracef("mouse event queue slot %ld = %s",
+ (long) (ep - events),
+ _tracemouse(ep));
}
#endif
-/* FIXME: The list of names should be configurable */
-static int is_xterm(const char *name)
+#ifdef USE_EMX_MOUSE
+
+# define TOP_ROW 0
+# define LEFT_COL 0
+
+static int mouse_wfd;
+static int mouse_thread;
+static int mouse_activated;
+static char mouse_buttons[] = { 0, 1, 3, 2};
+
+
+# define M_FD(sp) sp->_mouse_fd
+
+static void
+write_event(int down, int button, int x, int y)
{
- return (!strncmp(name, "xterm", 5)
- || !strncmp(name, "rxvt", 4)
- || !strncmp(name, "kterm", 5)
- || !strncmp(name, "color_xterm", 11));
+ char buf[6];
+ unsigned long ignore;
+
+ strcpy(buf, key_mouse);
+ buf[3] = ' ' + (button - 1) + (down ? 0 : 0x40);
+ buf[4] = ' ' + x - LEFT_COL + 1;
+ buf[5] = ' ' + y - TOP_ROW + 1;
+ DosWrite(mouse_wfd, buf, 6, &ignore);
}
+static void
+mouse_server(unsigned long ignored GCC_UNUSED)
+{
+ unsigned short fWait = MOU_WAIT;
+ /* NOPTRRECT mourt = { 0,0,24,79 }; */
+ MOUEVENTINFO mouev;
+ HMOU hmou;
+ unsigned short mask = MOUSE_BN1_DOWN | MOUSE_BN2_DOWN | MOUSE_BN3_DOWN;
+ int oldstate = 0;
+ char errmess[] = "Unexpected termination of mouse thread\r\n";
+ unsigned long ignore;
+
+ /* open the handle for the mouse */
+ if (MouOpen(NULL,&hmou) == 0) {
+
+ if (MouSetEventMask(&mask,hmou) == 0
+ && MouDrawPtr(hmou) == 0) {
+
+ for (;;) {
+ /* sit and wait on the event queue */
+ if (MouReadEventQue(&mouev,&fWait,hmou))
+ break;
+ if (!mouse_activated)
+ goto finish;
+
+ /*
+ * OS/2 numbers a 3-button mouse inconsistently from other
+ * platforms:
+ * 1 = left
+ * 2 = right
+ * 3 = middle.
+ */
+ if ((mouev.fs ^ oldstate) & MOUSE_BN1_DOWN)
+ write_event(mouev.fs & MOUSE_BN1_DOWN,
+ mouse_buttons[1], mouev.col, mouev.row);
+ if ((mouev.fs ^ oldstate) & MOUSE_BN2_DOWN)
+ write_event(mouev.fs & MOUSE_BN2_DOWN,
+ mouse_buttons[3], mouev.col, mouev.row);
+ if ((mouev.fs ^ oldstate) & MOUSE_BN3_DOWN)
+ write_event(mouev.fs & MOUSE_BN3_DOWN,
+ mouse_buttons[2], mouev.col, mouev.row);
+
+ finish:
+ oldstate = mouev.fs;
+ }
+ }
+
+ DosWrite(2, errmess, strlen(errmess), &ignore);
+ MouClose(hmou);
+ }
+ DosExit(EXIT_THREAD, 0L );
+}
+static void
+server_state(const int state)
+{ /* It would be nice to implement pointer-off and stop looping... */
+ mouse_activated = state;
+}
+
+#endif
+
+static int initialized;
+
static void _nc_mouse_init(void)
/* initialize the mouse */
{
int i;
- static int initialized;
if (initialized) {
return;
/* we know how to recognize mouse events under xterm */
if (key_mouse != 0
- && is_xterm(cur_term->type.term_names))
+ && getenv("DISPLAY") != 0)
mousetype = M_XTERM;
#if USE_GPM_SUPPORT
{
/* GPM: initialize connection to gpm server */
gpm_connect.eventMask = GPM_DOWN|GPM_UP;
- gpm_connect.defaultMask = ~gpm_connect.eventMask;
+ gpm_connect.defaultMask = ~(gpm_connect.eventMask|GPM_HARD);
gpm_connect.minMod = 0;
- gpm_connect.maxMod = ~0;
+ gpm_connect.maxMod = ~((1<<KG_SHIFT)|(1<<KG_SHIFTL)|(1<<KG_SHIFTR));
if (Gpm_Open (&gpm_connect, 0) >= 0) { /* returns the file-descriptor */
mousetype = M_GPM;
SP->_mouse_fd = gpm_fd;
}
#endif
+ /* OS/2 VIO */
+#ifdef USE_EMX_MOUSE
+ if (!mouse_thread && mousetype != M_XTERM && key_mouse) {
+ int handles[2];
+ if (pipe(handles) < 0) {
+ perror("mouse pipe error");
+ } else {
+ int rc;
+
+ if (!mouse_buttons[0]) {
+ char *s = getenv("MOUSE_BUTTONS_123");
+
+ mouse_buttons[0] = 1;
+ if (s && strlen(s) >= 3) {
+ mouse_buttons[1] = s[0] - '0';
+ mouse_buttons[2] = s[1] - '0';
+ mouse_buttons[3] = s[2] - '0';
+ }
+ }
+ mouse_wfd = handles[1];
+ M_FD(SP) = handles[0];
+ /* Needed? */
+ setmode(handles[0], O_BINARY);
+ setmode(handles[1], O_BINARY);
+ /* Do not use CRT functions, we may single-threaded. */
+ rc = DosCreateThread((unsigned long*)&mouse_thread, mouse_server, 0, 0, 8192);
+ if (rc)
+ printf("mouse thread error %d=%#x", rc, rc);
+ else
+ mousetype = M_XTERM;
+ }
+ }
+#endif
+
T(("_nc_mouse_init() set mousetype to %d", mousetype));
}
*/
for (grabbed = 0; grabbed < 3; grabbed += res)
{
+
+ /* For VIO mouse we add extra bit 64 to disambiguate button-up. */
+#ifdef USE_EMX_MOUSE
+ res = read( M_FD(sp) >= 0 ? M_FD(sp) : sp->_ifd, &kbuf, 3);
+#else
res = read(sp->_ifd, kbuf + grabbed, 3-grabbed);
+#endif
if (res == -1)
break;
}
{
case 0x0:
eventp->bstate = BUTTON1_PRESSED;
+#ifdef USE_EMX_MOUSE
+ if (kbuf[0] & 0x40)
+ eventp->bstate = BUTTON1_RELEASED;
+#endif
break;
case 0x1:
eventp->bstate = BUTTON2_PRESSED;
+#ifdef USE_EMX_MOUSE
+ if (kbuf[0] & 0x40)
+ eventp->bstate = BUTTON2_RELEASED;
+#endif
break;
case 0x2:
eventp->bstate = BUTTON3_PRESSED;
+#ifdef USE_EMX_MOUSE
+ if (kbuf[0] & 0x40)
+ eventp->bstate = BUTTON3_RELEASED;
+#endif
break;
case 0x3:
eventp->x = (kbuf[1] - ' ') - 1;
eventp->y = (kbuf[2] - ' ') - 1;
- TR(MY_TRACE, ("_nc_mouse_inline: primitive mouse-event %s has slot %d", _tracemouse(eventp), eventp - events));
+ TR(MY_TRACE, ("_nc_mouse_inline: primitive mouse-event %s has slot %ld",
+ _tracemouse(eventp),
+ (long) (eventp - events)));
/* bump the next-free pointer into the circular list */
eventp = NEXT(eventp);
static void mouse_activate(bool on)
{
+ if (!on && !initialized)
+ return;
+
_nc_mouse_init();
if (on) {
keyok(KEY_MOUSE, on);
#endif
TPUTS_TRACE("xterm mouse initialization");
+#ifdef USE_EMX_MOUSE
+ server_state(1);
+#else
putp("\033[?1000h");
+#endif
break;
#if USE_GPM_SUPPORT
case M_GPM:
switch (mousetype) {
case M_XTERM:
TPUTS_TRACE("xterm mouse deinitialization");
+#ifdef USE_EMX_MOUSE
+ server_state(0);
+#else
putp("\033[?1000l");
+#endif
break;
#if USE_GPM_SUPPORT
case M_GPM:
#endif
}
}
- (void) fflush(SP->_ofp);
+ _nc_flush();
}
/**************************************************************************
*/
if (runcount == 1)
{
- TR(MY_TRACE, ("_nc_mouse_parse: returning simple mouse event %s at slot %d",
- _tracemouse(prev), prev-events));
+ TR(MY_TRACE, ("_nc_mouse_parse: returning simple mouse event %s at slot %ld",
+ _tracemouse(prev),
+ (long) (prev - events)));
return (prev->id >= 0)
? ((prev->bstate & eventmask) ? TRUE : FALSE)
: FALSE;
if (_nc_tracing & TRACE_IEVENT)
{
_trace_slot("before mouse press/release merge:");
- _tracef("_nc_mouse_parse: run starts at %d, ends at %d, count %d",
- runp-events, ((eventp - events) + (EV_MAX-1)) % EV_MAX, runcount);
+ _tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
+ (long) (runp - events),
+ (long) ((eventp - events) + (EV_MAX-1)) % EV_MAX,
+ runcount);
}
#endif /* TRACE */
if (_nc_tracing & TRACE_IEVENT)
{
_trace_slot("before mouse click merge:");
- _tracef("_nc_mouse_parse: run starts at %d, ends at %d, count %d",
- runp-events, ((eventp - events) + (EV_MAX-1)) % EV_MAX, runcount);
+ _tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
+ (long) (runp - events),
+ (long) ((eventp - events) + (EV_MAX-1)) % EV_MAX,
+ runcount);
}
#endif /* TRACE */
if (_nc_tracing & TRACE_IEVENT)
{
_trace_slot("before mouse event queue compaction:");
- _tracef("_nc_mouse_parse: run starts at %d, ends at %d, count %d",
- runp-events, ((eventp - events) + (EV_MAX-1)) % EV_MAX, runcount);
+ _tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
+ (long) (runp - events),
+ (long) ((eventp - events) + (EV_MAX-1)) % EV_MAX,
+ runcount);
}
#endif /* TRACE */
if (_nc_tracing & TRACE_IEVENT)
{
_trace_slot("after mouse event queue compaction:");
- _tracef("_nc_mouse_parse: run starts at %d, ends at %d, count %d",
- runp-events, ((eventp - events) + (EV_MAX-1)) % EV_MAX, runcount);
+ _tracef("_nc_mouse_parse: run starts at %ld, ends at %ld, count %d",
+ (long) (runp - events),
+ (long) ((eventp - events) + (EV_MAX-1)) % EV_MAX,
+ runcount);
}
for (ep = runp; ep != eventp; ep = NEXT(ep))
if (ep->id != INVALID_EVENT)
- TR(MY_TRACE, ("_nc_mouse_parse: returning composite mouse event %s at slot %d",
- _tracemouse(ep), ep-events));
+ TR(MY_TRACE, ("_nc_mouse_parse: returning composite mouse event %s at slot %ld",
+ _tracemouse(ep),
+ (long) (ep - events)));
#endif /* TRACE */
/* after all this, do we have a valid event? */
switch (mousetype) {
case M_XTERM:
- if (eventmask)
- mouse_activate(FALSE);
- break;
+ if (eventmask)
+ mouse_activate(FALSE);
+ break;
#if USE_GPM_SUPPORT
/* GPM: pass all mouse events to next client */
case M_GPM:
/* copy the event we find there */
*aevent = *prev;
- TR(TRACE_IEVENT, ("getmouse: returning event %s from slot %d",
- _tracemouse(prev), prev-events));
+ TR(TRACE_IEVENT, ("getmouse: returning event %s from slot %ld",
+ _tracemouse(prev),
+ (long) (prev - events)));
prev->id = INVALID_EVENT; /* so the queue slot becomes free */
returnCode(OK);
if (oldmask)
*oldmask = eventmask;
+ if (!newmask && !initialized)
+ returnCode(0);
+
_nc_mouse_init();
if ( mousetype != M_NONE )
{
return (mousetype==M_NONE ? 0:1);
}
+bool wmouse_trafo(const WINDOW* win, int* pY, int* pX, bool to_screen)
+{
+ bool result = FALSE;
+
+ if (win && pY && pX)
+ {
+ int y = *pY; int x = *pX;
+
+ if (to_screen)
+ {
+ y += win->_begy + win->_yoffset;
+ x += win->_begx;
+ if (wenclose(win,y,x))
+ result = TRUE;
+ }
+ else
+ {
+ if (wenclose(win,y,x))
+ {
+ y -= (win->_begy + win->_yoffset);
+ x -= win->_begx;
+ result = TRUE;
+ }
+ }
+ if (result)
+ {
+ *pX = x;
+ *pY = y;
+ }
+ }
+ return(result);
+}
+
/* lib_mouse.c ends here */
#include <term.h> /* clear_screen, cup & friends, cur_term */
-MODULE_ID("$Id: lib_newterm.c,v 1.33 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_newterm.c,v 1.41 1999/07/24 20:07:48 tom Exp $")
#ifndef ONLCR /* Allows compilation under the QNX 4.2 OS */
#define ONLCR 0
#else
cur_term->Nttyb.sg_flags &= ~(ECHO|CRMOD);
#endif
- return _nc_set_curterm(&cur_term->Nttyb);
+ return _nc_set_tty_mode(&cur_term->Nttyb);
}
/*
filter_mode = TRUE;
}
-SCREEN * newterm(const char *term, FILE *ofp, FILE *ifp)
+SCREEN * newterm(NCURSES_CONST char *name, FILE *ofp, FILE *ifp)
{
int errret;
+int slk_format = _nc_slk_format;
SCREEN* current;
#ifdef TRACE
-char *t = getenv("NCURSES_TRACE");
+int t = _nc_getenv_num("NCURSES_TRACE");
- if (t)
- trace((unsigned) strtol(t, 0, 0));
+ if (t >= 0)
+ trace(t);
#endif
- T((T_CALLED("newterm(\"%s\",%p,%p)"), term, ofp, ifp));
+ T((T_CALLED("newterm(\"%s\",%p,%p)"), name, ofp, ifp));
/* this loads the capability entry, then sets LINES and COLS */
- if (setupterm(term, fileno(ofp), &errret) == ERR)
+ if (setupterm(name, fileno(ofp), &errret) == ERR)
return 0;
- /*
- * Check for mismatched graphic-rendition capabilities. Most SVr4
- * terminfo trees contain entries that have rmul or rmso equated to
- * sgr0 (Solaris curses copes with those entries). We do this only for
- * curses, since many termcap applications assume that smso/rmso and
- * smul/rmul are paired, and will not function properly if we remove
- * rmso or rmul. Curses applications shouldn't be looking at this
- * detail.
- */
- if (exit_attribute_mode) {
-#define SGR0_FIX(mode) if (mode != 0 && !strcmp(mode, exit_attribute_mode)) \
- mode = 0
- SGR0_FIX(exit_underline_mode);
- SGR0_FIX(exit_standout_mode);
- }
-
/* implement filter mode */
if (filter_mode) {
LINES = 1;
-#ifdef init_tabs
if (init_tabs != -1)
TABSIZE = init_tabs;
else
-#endif /* init_tabs */
TABSIZE = 8;
T(("TABSIZE = %d", TABSIZE));
-#ifdef clear_screen
clear_screen = 0;
cursor_down = parm_down_cursor = 0;
cursor_address = 0;
row_address = 0;
cursor_home = carriage_return;
-#endif /* clear_screen */
}
/* If we must simulate soft labels, grab off the line to be used.
We assume that we must simulate, if it is none of the standard
formats (4-4 or 3-2-3) for which there may be some hardware
support. */
-#ifdef num_labels
- if (num_labels <= 0 || !SLK_STDFMT)
-#endif /* num_labels */
- if (_nc_slk_format)
+ if (num_labels <= 0 || !SLK_STDFMT(slk_format))
+ if (slk_format)
{
- if (ERR==_nc_ripoffline(-SLK_LINES, _nc_slk_initialize))
+ if (ERR==_nc_ripoffline(-SLK_LINES(slk_format),
+ _nc_slk_initialize))
return 0;
}
/* this actually allocates the screen structure, and saves the
return 0;
}
-#ifdef num_labels
/* if the terminal type has real soft labels, set those up */
- if (_nc_slk_format && num_labels > 0 && SLK_STDFMT)
+ if (slk_format && num_labels > 0 && SLK_STDFMT(slk_format))
_nc_slk_initialize(stdscr, COLS);
-#endif /* num_labels */
SP->_ifd = fileno(ifp);
SP->_checkfd = fileno(ifp);
SP->_keytry = 0;
+ /*
+ * Check for mismatched graphic-rendition capabilities. Most SVr4
+ * terminfo trees contain entries that have rmul or rmso equated to
+ * sgr0 (Solaris curses copes with those entries). We do this only for
+ * curses, since many termcap applications assume that smso/rmso and
+ * smul/rmul are paired, and will not function properly if we remove
+ * rmso or rmul. Curses applications shouldn't be looking at this
+ * detail.
+ */
+#define SGR0_TEST(mode) (mode != 0) && (exit_attribute_mode == 0 || strcmp(mode, exit_attribute_mode))
+ SP->_use_rmso = SGR0_TEST(exit_standout_mode);
+ SP->_use_rmul = SGR0_TEST(exit_underline_mode);
+
/* compute movement costs so we can do better move optimization */
_nc_mvcur_init();
- _nc_signal_handler(TRUE);
-
/* initialize terminal to a sane state */
_nc_screen_init();
/* Initialize the terminal line settings. */
_nc_initscr();
+ _nc_signal_handler(TRUE);
+
T((T_RETURN("%p"), SP));
return(SP);
}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_newwin.c,v 1.19 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_newwin.c,v 1.21 1999/10/03 00:42:03 tom Exp $")
void _nc_freewin(WINDOW *win)
{
if (! (win->_flags & _SUBWIN)) {
for (i = 0; i <= win->_maxy && win->_line[i].text; i++)
- free(win->_line[i].text);
+ FreeIfNeeded(win->_line[i].text);
}
free(win->_line);
free(win);
returnWin(0);
if (num_lines == 0)
- num_lines = orig->_maxy - begy;
+ num_lines = orig->_maxy + 1 - begy;
if (num_columns == 0)
- num_columns = orig->_maxx - begx;
+ num_columns = orig->_maxx + 1 - begx;
if (orig->_flags & _ISPAD)
flags |= _ISPAD;
*/
#include <curses.priv.h>
-#include <term.h> /* cur_term */
-MODULE_ID("$Id: lib_nl.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: lib_nl.c,v 1.4 1999/10/22 22:31:51 tom Exp $")
#ifdef __EMX__
#include <io.h>
SP->_nl = TRUE;
#ifdef __EMX__
- fflush(SP->_ofp);
- _fsetmode(SP->_ofp, "t");
+ _nc_flush();
+ _fsetmode(NC_OUTPUT, "t");
#endif
returnCode(OK);
SP->_nl = FALSE;
#ifdef __EMX__
- fflush(SP->_ofp);
- _fsetmode(SP->_ofp, "b");
+ _nc_flush();
+ _fsetmode(NC_OUTPUT, "b");
#endif
returnCode(OK);
#include <curses.priv.h>
-MODULE_ID("$Id: lib_pad.c,v 1.25 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_pad.c,v 1.27 1998/06/28 00:10:16 tom Exp $")
WINDOW *newpad(int l, int c)
{
for (j = pmincol, n = smincol; j <= pmaxcol; j++, n++) {
if (oline->text[j] != nline->text[n]) {
nline->text[n] = oline->text[j];
-
- if (nline->firstchar == _NOCHANGE)
- nline->firstchar = nline->lastchar = n;
- else if (n < nline->firstchar)
- nline->firstchar = n;
- else if (n > nline->lastchar)
- nline->lastchar = n;
+ CHANGED_CELL(nline,n);
}
}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_printw.c,v 1.6 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_printw.c,v 1.7 1998/04/11 22:53:44 tom Exp $")
-int printw(const char *fmt, ...)
+int printw(NCURSES_CONST char *fmt, ...)
{
va_list argp;
int code;
return code;
}
-int wprintw(WINDOW *win, const char *fmt, ...)
+int wprintw(WINDOW *win, NCURSES_CONST char *fmt, ...)
{
va_list argp;
int code;
return code;
}
-int mvprintw(int y, int x, const char *fmt, ...)
+int mvprintw(int y, int x, NCURSES_CONST char *fmt, ...)
{
va_list argp;
int code = move(y, x);
return code;
}
-int mvwprintw(WINDOW *win, int y, int x, const char *fmt, ...)
+int mvwprintw(WINDOW *win, int y, int x, NCURSES_CONST char *fmt, ...)
{
va_list argp;
int code = wmove(win, y, x);
return code;
}
-int vwprintw(WINDOW *win, const char *fmt, va_list argp)
+int vwprintw(WINDOW *win, NCURSES_CONST char *fmt, va_list argp)
{
char *buf = _nc_printf_string(fmt, argp);
int code = ERR;
#include <curses.priv.h>
-MODULE_ID("$Id: lib_redrawln.c,v 1.2 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_redrawln.c,v 1.7 1998/09/19 20:09:50 Alexander.V.Lukyanov Exp $")
int wredrawln(WINDOW *win, int beg, int num)
{
-int i;
+ int i;
+ int end;
+ size_t len = (win->_maxx + 1) * sizeof(chtype);
T((T_CALLED("wredrawln(%p,%d,%d)"), win, beg, num));
- if (touchline(win, beg, num) == OK) {
- size_t len = win->_maxx * sizeof(chtype);
+ if (beg < 0)
+ beg = 0;
- /*
- * XSI says that wredrawln() tells the library not to base
- * optimization on the contents of the lines that are marked.
- * We do that by changing the contents to nulls after touching
- * the corresponding lines to get the optimizer's attention.
- *
- * FIXME: this won't work if the application makes further
- * updates before the next refresh.
- */
- for (i = beg; (i < beg + num) && (i < win->_maxy); i++) {
- memset(win->_line[i].text, 0, len);
- }
+ if (touchline (win, beg, num) == ERR)
+ returnCode(ERR);
+
+ end = beg + num;
+ if (end > win->_maxy + 1)
+ end = win->_maxy + 1;
+
+ for (i = beg; i < end; i++)
+ {
+ memset (curscr->_line[i+win->_begy].text+win->_begx, 0, len);
+ _nc_make_oldhash(i+win->_begy);
}
+
returnCode(OK);
}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_refresh.c,v 1.19 1998/02/11 12:13:59 tom Exp $")
+MODULE_ID("$Id: lib_refresh.c,v 1.24 1999/07/31 11:36:37 juergen Exp $")
int wrefresh(WINDOW *win)
{
int wnoutrefresh(WINDOW *win)
{
+short limit_x;
short i, j;
short begx;
short begy;
begx = win->_begx;
begy = win->_begy;
- /*
- * If 'newscr' has a different background than the window that we're
- * trying to refresh, we'll have to copy the whole thing.
- */
- if (win->_bkgd != newscr->_bkgd) {
- touchwin(win);
- newscr->_bkgd = win->_bkgd;
- }
+ newscr->_bkgd = win->_bkgd;
newscr->_attrs = win->_attrs;
/* merge in change information from all subwindows of this window */
* common-subexpression chunking to make it really tense,
* so we'll force the issue.
*/
+
+ /* limit(n) */
+ limit_x = win->_maxx;
+ /* limit(j) */
+ if (limit_x > win->_maxx)
+ limit_x = win->_maxx;
+
for (i = 0, m = begy + win->_yoffset;
i <= win->_maxy && m <= newscr->_maxy;
i++, m++) {
if (oline->firstchar != _NOCHANGE) {
int last = oline->lastchar;
- /* limit(j) */
- if (last > win->_maxx)
- last = win->_maxx;
- /* limit(n) */
- if (last > newscr->_maxx - begx)
- last = newscr->_maxx - begx;
+ if (last > limit_x)
+ last = limit_x;
for (j = oline->firstchar, n = j + begx; j <= last; j++, n++) {
if (oline->text[j] != nline->text[n]) {
nline->text[n] = oline->text[j];
-
- if (nline->firstchar == _NOCHANGE)
- nline->firstchar = nline->lastchar = n;
- else if (n < nline->firstchar)
- nline->firstchar = n;
- else if (n > nline->lastchar)
- nline->lastchar = n;
+ CHANGED_CELL(nline, n);
}
}
newscr->_cury = win->_cury + win->_begy + win->_yoffset;
newscr->_curx = win->_curx + win->_begx;
}
+ newscr->_leaveok = win->_leaveok;
+
#ifdef TRACE
if (_nc_tracing & TRACE_UPDATE)
_tracedump("newscr", newscr);
#include <term.h> /* lines, columns, cur_term */
-MODULE_ID("$Id: lib_restart.c,v 1.16 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_restart.c,v 1.2 1999/07/24 20:10:04 tom Exp $")
-#undef tabs
-
-#ifdef TAB3
-# define tabs TAB3
-#else
-# ifdef XTABS
-# define tabs XTABS
-# else
-# ifdef OXTABS
-# define tabs OXTABS
-# else
-# define tabs 0
-# endif
-# endif
-#endif
-
-int def_shell_mode(void)
-{
- T((T_CALLED("def_shell_mode()")));
-
- /*
- * Turn off the XTABS bit in the tty structure if it was on. If XTABS
- * was on, remove the tab and backtab capabilities.
- */
-
- if (_nc_get_curterm(&cur_term->Ottyb) != OK)
- returnCode(ERR);
-#ifdef TERMIOS
- if (cur_term->Ottyb.c_oflag & tabs)
- tab = back_tab = NULL;
-#else
- if (cur_term->Ottyb.sg_flags & XTABS)
- tab = back_tab = NULL;
-#endif
- returnCode(OK);
-}
-
-int def_prog_mode(void)
-{
- T((T_CALLED("def_prog_mode()")));
-
- if (_nc_get_curterm(&cur_term->Nttyb) != OK)
- returnCode(ERR);
-#ifdef TERMIOS
- cur_term->Nttyb.c_oflag &= ~tabs;
-#else
- cur_term->Nttyb.sg_flags &= ~XTABS;
-#endif
- returnCode(OK);
-}
-
-int restartterm(const char *term, int filenum, int *errret)
+int restartterm(NCURSES_CONST char *termp, int filenum, int *errret)
{
int saveecho = SP->_echo;
int savecbreak = SP->_cbreak;
int saveraw = SP->_raw;
int savenl = SP->_nl;
- T((T_CALLED("restartterm(%s,%d,%p)"), term, filenum, errret));
+ T((T_CALLED("restartterm(%s,%d,%p)"), termp, filenum, errret));
- setupterm(term, filenum, errret);
+ setupterm(termp, filenum, errret);
if (saveecho)
echo();
#include <curses.priv.h>
-MODULE_ID("$Id: lib_scanw.c,v 1.7 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_scanw.c,v 1.8 1998/04/11 22:54:18 tom Exp $")
#if !HAVE_VSSCANF
#if defined(__QNX__)
#endif
#endif
-int vwscanw(WINDOW *win, const char *fmt, va_list argp)
+int vwscanw(WINDOW *win, NCURSES_CONST char *fmt, va_list argp)
{
char buf[BUFSIZ];
return(vsscanf(buf, fmt, argp));
}
-int scanw(const char *fmt, ...)
+int scanw(NCURSES_CONST char *fmt, ...)
{
int code;
va_list ap;
return (code);
}
-int wscanw(WINDOW *win, const char *fmt, ...)
+int wscanw(WINDOW *win, NCURSES_CONST char *fmt, ...)
{
int code;
va_list ap;
return (code);
}
-int mvscanw(int y, int x, const char *fmt, ...)
+int mvscanw(int y, int x, NCURSES_CONST char *fmt, ...)
{
int code;
va_list ap;
return (code);
}
-int mvwscanw(WINDOW *win, int y, int x, const char *fmt, ...)
+int mvwscanw(WINDOW *win, int y, int x, NCURSES_CONST char *fmt, ...)
{
int code;
va_list ap;
#include <time.h>
#include <term.h> /* exit_ca_mode, non_rev_rmcup */
-MODULE_ID("$Id: lib_screen.c,v 1.11 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_screen.c,v 1.15 1999/07/24 20:05:29 tom Exp $")
static time_t dumptime;
int scr_restore(const char *file)
{
- FILE *fp;
+ FILE *fp = 0;
T((T_CALLED("scr_restore(%s)"), _nc_visbuf(file)));
- if ((fp = fopen(file, "rb")) == 0)
+ if (_nc_access(file, R_OK) < 0
+ || (fp = fopen(file, "rb")) == 0)
returnCode(ERR);
else
{
int scr_dump(const char *file)
{
- FILE *fp;
+ FILE *fp = 0;
T((T_CALLED("scr_dump(%s)"), _nc_visbuf(file)));
- if ((fp = fopen(file, "wb")) == 0)
+ if (_nc_access(file, W_OK) < 0
+ || (fp = fopen(file, "wb")) == 0)
returnCode(ERR);
else
{
int scr_init(const char *file)
{
- FILE *fp;
+ FILE *fp = 0;
struct stat stb;
T((T_CALLED("scr_init(%s)"), _nc_visbuf(file)));
-#ifdef exit_ca_mode
if (exit_ca_mode && non_rev_rmcup)
returnCode(ERR);
-#endif /* exit_ca_mode */
- if ((fp = fopen(file, "rb")) == 0)
+ if (_nc_access(file, R_OK) < 0
+ || (fp = fopen(file, "rb")) == 0)
returnCode(ERR);
else if (fstat(STDOUT_FILENO, &stb) || stb.st_mtime > dumptime)
returnCode(ERR);
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
-
-
/*
** lib_set_term.c
**
#include <term.h> /* cur_term */
-MODULE_ID("$Id: lib_set_term.c,v 1.37 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_set_term.c,v 1.46 1999/07/24 20:05:49 tom Exp $")
-/*
- * If the output file descriptor is connected to a tty (the typical case) it
- * will probably be line-buffered. Keith Bostic pointed out that we don't want
- * this; it hoses people running over networks by forcing out a bunch of small
- * packets instead of one big one, so screen updates on ptys look jerky.
- * Restore block buffering to prevent this minor lossage.
- *
- * The buffer size is a compromise. Ideally we'd like a buffer that can hold
- * the maximum possible update size (the whole screen plus cup commands to
- * change lines as it's painted). On a 66-line xterm this can become
- * excessive. So we min it with the amount of data we think we can get through
- * two Ethernet packets (maximum packet size - 100 for TCP/IP overhead).
- *
- * Why two ethernet packets? It used to be one, on the theory that said
- * packets define the maximum size of atomic update. But that's less than the
- * 2000 chars on a 25 x 80 screen, and we don't want local updates to flicker
- * either. Two packet lengths will handle up to a 35 x 80 screen.
- *
- * The magic '6' is the estimated length of the end-of-line cup sequence to go
- * to the next line. It's generous. We used to mess with the buffering in
- * init_mvcur() after cost computation, but that lost the sequences emitted by
- * init_acs() in setupscreen().
- *
- * "The setvbuf function may be used only after the stream pointed to by stream
- * has been associated with an open file and before any other operation is
- * performed on the stream." (ISO 7.9.5.6.)
- *
- * Grrrr...
- */
-void _nc_set_buffer(FILE *ofp, bool buffered)
-{
- /* optional optimization hack -- do before any output to ofp */
-#if HAVE_SETVBUF || HAVE_SETBUFFER
- unsigned buf_len;
- char *buf_ptr;
-
- if (buffered) {
- buf_len = min(LINES * (COLS + 6), 2800);
- buf_ptr = malloc(buf_len);
- } else {
- buf_len = 0;
- buf_ptr = 0;
- }
-
-#if HAVE_SETVBUF
-#ifdef SETVBUF_REVERSED /* pre-svr3? */
- (void) setvbuf(ofp, buf_ptr, buf_len, buf_len ? _IOFBF : _IONBF);
-#else
- (void) setvbuf(ofp, buf_ptr, buf_len ? _IOFBF : _IONBF, buf_len);
-#endif
-#elif HAVE_SETBUFFER
- (void) setbuffer(ofp, buf_ptr, (int)buf_len);
-#endif
-
- if (!buffered) {
- FreeIfNeeded(SP->_setbuf);
- }
- SP->_setbuf = buf_ptr;
-
-#endif /* HAVE_SETVBUF || HAVE_SETBUFFER */
-}
-
-SCREEN * set_term(SCREEN *screen)
+SCREEN * set_term(SCREEN *screenp)
{
SCREEN *oldSP;
- T((T_CALLED("set_term(%p)"), screen));
+ T((T_CALLED("set_term(%p)"), screenp));
oldSP = SP;
- _nc_set_screen(screen);
+ _nc_set_screen(screenp);
set_curterm(SP->_term);
curscr = SP->_curscr;
FreeIfNeeded(sp->_color_table);
FreeIfNeeded(sp->_color_pairs);
+ FreeIfNeeded(sp->oldhash);
+ FreeIfNeeded(sp->newhash);
+
+ del_curterm(sp->_term);
+
free(sp);
/*
int bottom_stolen = 0;
size_t i;
- assert(SP==0); /* has been reset in newterm() ! */
+ assert(SP==0); /* has been reset in newterm() ! */
if (!_nc_alloc_screen())
return ERR;
SP->_next_screen = _nc_screen_chain;
_nc_screen_chain = SP;
-
+
_nc_set_buffer(output, TRUE);
SP->_term = cur_term;
SP->_lines = slines;
SP->_curscol = -1;
SP->_nl = TRUE;
SP->_raw = FALSE;
- SP->_cbreak = FALSE;
+ SP->_cbreak = 0;
SP->_echo = TRUE;
SP->_fifohead = -1;
SP->_endwin = TRUE;
SP->_ofp = output;
SP->_cursor = -1; /* cannot know real cursor shape */
+#ifdef NCURSES_NO_PADDING
+ SP->_no_padding = getenv("NCURSES_NO_PADDING") != 0;
+#endif
SP->_maxclick = DEFAULT_MAXCLICK;
SP->_mouse_event = no_mouse_event;
acs_chars = 0;
#endif
}
- init_acs();
+ _nc_init_acs();
memcpy(SP->_acs_map, acs_map, sizeof(chtype)*ACS_LEN);
_nc_idcok = TRUE;
_nc_idlok = FALSE;
-
+
_nc_windows = 0; /* no windows yet */
+ SP->oldhash = 0;
+ SP->newhash = 0;
+
T(("creating newscr"));
if ((newscr = newwin(slines, scolumns, 0, 0)) == 0)
return ERR;
#include <ctype.h>
#include <term.h> /* num_labels, label_*, plab_norm */
-MODULE_ID("$Id: lib_slk.c,v 1.14 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_slk.c,v 1.16 1999/03/03 23:44:22 juergen Exp $")
/*
* We'd like to move these into the screen context structure, but cannot,
static void
slk_paint_info(WINDOW *win)
{
- if (win && _nc_slk_format==4)
+ if (win && SP->slk_format==4)
{
int i;
wmove (win,0,0);
for (i = 0; i < SP->_slk->maxlab; i++) {
- if (win && _nc_slk_format==4)
+ if (win && SP->slk_format==4)
{
mvwaddch(win,0,SP->_slk->ent[i].x,'F');
if (i<9)
_nc_slk_initialize(WINDOW *stwin, int cols)
{
int i, x;
+int res = OK;
char *p;
T(("slk_initialize()"));
SP->_slk->buffer = NULL;
SP->_slk->attr = A_STANDOUT;
-#ifdef num_labels
- SP->_slk->maxlab = (num_labels > 0) ? num_labels : MAX_SKEY;
- SP->_slk->maxlen = (num_labels > 0) ? label_width * label_height : MAX_SKEY_LEN;
- SP->_slk->labcnt = (SP->_slk->maxlab < MAX_SKEY) ? MAX_SKEY : SP->_slk->maxlab;
-#else
- SP->_slk->labcnt = SP->_slk->maxlab = MAX_SKEY;
- SP->_slk->maxlen = MAX_SKEY_LEN;
-#endif /* num_labels */
+ SP->_slk->maxlab = (num_labels > 0) ?
+ num_labels : MAX_SKEY(_nc_slk_format);
+ SP->_slk->maxlen = (num_labels > 0) ?
+ label_width * label_height : MAX_SKEY_LEN(_nc_slk_format);
+ SP->_slk->labcnt = (SP->_slk->maxlab < MAX_SKEY(_nc_slk_format)) ?
+ MAX_SKEY(_nc_slk_format) : SP->_slk->maxlab;
SP->_slk->ent = typeCalloc(slk_ent, SP->_slk->labcnt);
if (SP->_slk->ent == NULL)
FreeIfNeeded(SP->_slk->ent);
free(SP->_slk);
SP->_slk = (SLK*)0;
- return(ERR);
+ res = (ERR);
}
}
- return(OK);
+ /* We now reset the format so that the next newterm has again
+ * per default no SLK keys and may call slk_init again to
+ * define a new layout. (juergen 03-Mar-1999)
+ */
+ SP->slk_format = _nc_slk_format;
+ _nc_slk_format = 0;
+ return(res);
}
****************************************************************************/
/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1998 *
****************************************************************************/
-/***************************************************************************
-* Module m_adabind.c *
-* Helper routines to ease the implementation of an Ada95 binding to *
-* ncurses. For details and copyright of the binding see the ../Ada95 *
-* subdirectory. *
-***************************************************************************/
-#include "menu.priv.h"
+/*
+ * lib_slkatr_set.c
+ * Soft key routines.
+ * Set the labels attributes
+ */
+#include <curses.priv.h>
-MODULE_ID("$Id: m_adabind.c,v 1.6 1998/02/11 12:13:50 tom Exp $")
+MODULE_ID("$Id: lib_slkatr_set.c,v 1.3 1999/05/16 17:13:59 juergen Exp $")
-/* Prototypes for the functions in this module */
-void _nc_ada_normalize_menu_opts (int *opt);
-void _nc_ada_normalize_item_opts (int *opt);
-ITEM* _nc_get_item(const MENU*, int);
-
-void _nc_ada_normalize_menu_opts (int *opt)
+int
+slk_attr_set(const attr_t attr, short color_pair_number, void* opts)
{
- *opt = ALL_MENU_OPTS & (*opt);
-}
-
-void _nc_ada_normalize_item_opts (int *opt)
-{
- *opt = ALL_ITEM_OPTS & (*opt);
-}
+ T((T_CALLED("slk_attr_set(%s,%d)"), _traceattr(attr), color_pair_number));
-ITEM* _nc_get_item(const MENU* menu, int idx) {
- if (menu && menu->items && idx>=0 && (idx<menu->nitems))
+ if (SP!=0 && SP->_slk!=0 && !opts &&
+ color_pair_number>=0 && color_pair_number<COLOR_PAIRS)
{
- return menu->items[idx];
+ SP->_slk->attr = attr;
+ toggle_attr_on(SP->_slk->attr,COLOR_PAIR(color_pair_number));
+ returnCode(OK);
}
else
- return (ITEM*)0;
+ returnCode(ERR);
}
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_slkatrof.c,v 1.3 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_slkatrof.c,v 1.4 1998/03/11 19:26:07 juergen Exp $")
int
-slk_attroff(const attr_t attr)
+slk_attroff(const chtype attr)
{
T((T_CALLED("slk_attroff(%s)"), _traceattr(attr)));
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_slkatron.c,v 1.3 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_slkatron.c,v 1.4 1998/03/11 19:26:07 juergen Exp $")
int
-slk_attron(const attr_t attr)
+slk_attron(const chtype attr)
{
T((T_CALLED("slk_attron(%s)"), _traceattr(attr)));
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_slkatrset.c,v 1.3 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_slkatrset.c,v 1.4 1998/03/11 19:26:01 juergen Exp $")
int
-slk_attrset(const attr_t attr)
+slk_attrset(const chtype attr)
{
T((T_CALLED("slk_attrset(%s)"), _traceattr(attr)));
*/
#include <curses.priv.h>
-MODULE_ID("$Id: lib_slkclear.c,v 1.3 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_slkclear.c,v 1.4 1999/03/03 23:44:22 juergen Exp $")
int
slk_clear(void)
inherit those attributes from the standard screen */
SP->_slk->win->_bkgd = stdscr->_bkgd;
SP->_slk->win->_attrs = stdscr->_attrs;
- werase(SP->_slk->win);
-
- returnCode(wrefresh(SP->_slk->win));
+ if (SP->_slk->win == stdscr) {
+ returnCode(OK);
+ }
+ else {
+ werase(SP->_slk->win);
+ returnCode(wrefresh(SP->_slk->win));
+ }
}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Juergen Pfeifer <juergen.pfeifer@gmx.net> 1998 *
+ ****************************************************************************/
+
+/*
+ * lib_slkcolor.c
+ */
+#include <curses.priv.h>
+
+MODULE_ID("$Id: lib_slkcolor.c,v 1.5 1999/05/16 17:14:13 juergen Exp $")
+
+int
+slk_color(short color_pair_number)
+{
+ T((T_CALLED("slk_color(%d)"), color_pair_number));
+
+ if (SP!=0 && SP->_slk!=0 &&
+ color_pair_number>=0 && color_pair_number<COLOR_PAIRS)
+ {
+ T(("... current %ld", (long) PAIR_NUMBER(SP->_slk->attr)));
+ toggle_attr_on(SP->_slk->attr,COLOR_PAIR(color_pair_number));
+ returnCode(OK);
+ }
+ else
+ returnCode(ERR);
+}
#include <curses.priv.h>
#include <term.h> /* num_labels, label_*, plab_norm */
-MODULE_ID("$Id: lib_slkrefr.c,v 1.4 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_slkrefr.c,v 1.8 1999/03/14 00:10:27 Alexander.V.Lukyanov Exp $")
/*
* Write the soft labels to the soft-key window.
slk_intern_refresh(SLK *slk)
{
int i;
+int fmt = SP->slk_format;
+
for (i = 0; i < slk->labcnt; i++) {
if (slk->dirty || slk->ent[i].dirty) {
if (slk->ent[i].visible) {
-#ifdef num_labels
- if (num_labels > 0 && SLK_STDFMT)
+ if (num_labels > 0 && SLK_STDFMT(fmt))
{
if (i < num_labels) {
TPUTS_TRACE("plab_norm");
- putp(tparm(plab_norm, i, slk->win,slk->ent[i].form_text));
+ putp(tparm(plab_norm, i+1, slk->ent[i].form_text));
}
}
else
-#endif /* num_labels */
{
- wmove(slk->win,SLK_LINES-1,slk->ent[i].x);
+ wmove(slk->win,SLK_LINES(fmt)-1,slk->ent[i].x);
if (SP && SP->_slk)
wattrset(slk->win,SP->_slk->attr);
- waddnstr(slk->win,slk->ent[i].form_text, MAX_SKEY_LEN);
+ waddnstr(slk->win,slk->ent[i].form_text,
+ MAX_SKEY_LEN(fmt));
/* if we simulate SLK's, it's looking much more
natural to use the current ATTRIBUTE also
for the label window */
}
slk->dirty = FALSE;
-#ifdef num_labels
- if (num_labels > 0)
+ if (num_labels > 0) {
if (slk->hidden)
{
TPUTS_TRACE("label_off");
TPUTS_TRACE("label_on");
putp(label_on);
}
-#endif /* num_labels */
+ }
}
/*
#include <curses.priv.h>
-MODULE_ID("$Id: lib_touch.c,v 1.5 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_touch.c,v 1.6 1998/04/11 22:55:02 tom Exp $")
-int is_linetouched(WINDOW *win, int line)
+bool is_linetouched(WINDOW *win, int line)
{
T((T_CALLED("is_linetouched(%p,%d)"), win, line));
returnCode(win->_line[line].firstchar != _NOCHANGE ? TRUE : FALSE);
}
-int is_wintouched(WINDOW *win)
+bool is_wintouched(WINDOW *win)
{
int i;
#include <curses.priv.h>
-MODULE_ID("$Id: lib_vline.c,v 1.2 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_vline.c,v 1.4 1998/06/28 00:10:12 tom Exp $")
int wvline(WINDOW *win, chtype ch, int n)
{
ch = _nc_render(win, ch);
while(end >= row) {
- win->_line[end].text[col] = ch;
- if (win->_line[end].firstchar == _NOCHANGE
- || win->_line[end].firstchar > col)
- win->_line[end].firstchar = col;
- if (win->_line[end].lastchar == _NOCHANGE
- || win->_line[end].lastchar < col)
- win->_line[end].lastchar = col;
+ struct ldat *line = &(win->_line[end]);
+ line->text[col] = ch;
+ CHANGED_CELL(line, col);
end--;
}
#include <curses.priv.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_wattroff.c,v 1.2 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_wattroff.c,v 1.4 1998/05/10 12:02:11 tom Exp $")
-int wattr_off(WINDOW *win, const attr_t at)
+int wattr_off(WINDOW *win, NCURSES_CONST attr_t at, void *opts GCC_UNUSED)
{
T((T_CALLED("wattr_off(%p,%s)"), win, _traceattr(at)));
if (win) {
#include <curses.priv.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_wattron.c,v 1.2 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_wattron.c,v 1.4 1998/05/10 12:02:28 tom Exp $")
-int wattr_on(WINDOW *win, const attr_t at)
+int wattr_on(WINDOW *win, NCURSES_CONST attr_t at, void *opts GCC_UNUSED)
{
T((T_CALLED("wattr_on(%p,%s)"), win, _traceattr(at)));
if (win) {
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998 *
+ ****************************************************************************/
+
+/*
+** lib_winch.c
+**
+** The routine winch().
+**
+*/
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: lib_winch.c,v 1.1 1998/11/14 22:06:09 tom Exp $")
+
+chtype winch(WINDOW *win)
+{
+ T((T_CALLED("winch(%p)"), win));
+ if (win != 0) {
+ returnCode(win->_line[win->_cury].text[win->_curx]);
+ } else {
+ returnCode(0);
+ }
+}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_window.c,v 1.11 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: lib_window.c,v 1.13 1998/06/28 00:10:59 tom Exp $")
void _nc_synchook(WINDOW *win)
/* hook to be called after each window change */
int left = wp->_line[y].firstchar;
if (left >= 0) /* line is touched */
{
+ struct ldat *line = &(pp->_line[wp->_pary + y]);
/* left & right character in parent window coordinates */
int right = wp->_line[y].lastchar + wp->_parx;
left += wp->_parx;
- if (pp->_line[wp->_pary + y].firstchar == _NOCHANGE)
- {
- pp->_line[wp->_pary + y].firstchar = left;
- pp->_line[wp->_pary + y].lastchar = right;
- }
- else
- {
- if (left < pp->_line[wp->_pary + y].firstchar)
- pp->_line[wp->_pary + y].firstchar = left;
- if (pp->_line[wp->_pary + y].lastchar < right)
- pp->_line[wp->_pary + y].lastchar = right;
- }
+ CHANGED_RANGE(line, left, right);
}
}
}
{
if (pp->_line[win->_pary + y].firstchar >= 0) /* parent changed */
{
+ struct ldat *line = &(win->_line[y]);
/* left and right character in child coordinates */
int left = pp->_line[win->_pary + y].firstchar - win->_parx;
int right = pp->_line[win->_pary + y].lastchar - win->_parx;
left = 0;
if (right > win->_maxx)
right = win->_maxx;
- if (win->_line[y].firstchar == _NOCHANGE)
- {
- win->_line[y].firstchar = left;
- win->_line[y].lastchar = right;
- }
- else
- {
- if (left < win->_line[y].firstchar)
- win->_line[y].firstchar = left;
- if (win->_line[y].lastchar < right)
- win->_line[y].lastchar = right;
- }
+ CHANGED_RANGE(line, left, right);
}
}
}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: memmove.c,v 1.2 1999/02/27 19:55:57 tom Exp $")
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998 *
+ ****************************************************************************/
+
+#if USE_MY_MEMMOVE
+#define DST ((char *)s1)
+#define SRC ((const char *)s2)
+void * _nc_memmove(void * s1, const void * s2, size_t n)
+{
+ if (n != 0) {
+ if ((DST+n > SRC) && (SRC+n > DST)) {
+ static char *bfr;
+ static size_t length;
+ register size_t j;
+ if (length < n) {
+ length = (n * 3) / 2;
+ bfr = typeRealloc(char,length,bfr);
+ }
+ for (j = 0; j < n; j++)
+ bfr[j] = SRC[j];
+ SRC = bfr;
+ }
+ while (n-- != 0)
+ DST[n] = SRC[n];
+ }
+ return s1;
+}
+#else
+extern void _nc_memmove(void); /* quiet's gcc warning */
+void _nc_memmove(void) { } /* nonempty for strict ANSI compilers */
+#endif /* USE_MY_MEMMOVE */
#include <curses.priv.h>
#include <term.h>
-MODULE_ID("$Id: resizeterm.c,v 1.6 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: resizeterm.c,v 1.7 1998/09/19 19:27:43 Alexander.V.Lukyanov Exp $")
/*
* This function reallocates NCURSES window structures. It is invoked in
#if USE_SIGWINCH
ungetch(KEY_RESIZE); /* so application can know this */
- clearok(curscr, TRUE); /* screen contents is unknown */
+ clearok(curscr, TRUE); /* screen contents are unknown */
#endif
for (wp = _nc_windows; wp != 0; wp = wp->next) {
screen_columns = columns = ToCols;
SP->_lines_avail = lines - stolen;
+
+ if (SP->oldhash) { FreeAndNull(SP->oldhash); }
+ if (SP->newhash) { FreeAndNull(SP->newhash); }
}
/*
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
#include <curses.priv.h>
#include <ctype.h>
-MODULE_ID("$Id: safe_sprintf.c,v 1.5 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: safe_sprintf.c,v 1.11 1999/09/11 18:03:27 tom Exp $")
#if USE_SAFE_SPRINTF
if (fmt == 0 || *fmt == '\0')
return -1;
- if ((format = malloc(strlen(fmt)+1)) == 0)
+ if ((format = typeMalloc(char, strlen(fmt)+1)) == 0)
return -1;
- if ((buffer = malloc(length)) == 0) {
+ if ((buffer = typeMalloc(char, length)) == 0) {
free(format);
return -1;
}
while (*fmt != '\0') {
if (*fmt == '%') {
+ static char dummy[] = "";
PRINTF state = Flags;
- char *pval = "";
+ char *pval = dummy; /* avoid const-cast */
double fval = 0.0;
int done = FALSE;
int ival = 0;
case 'Z': /* FALLTHRU */
case 'h': /* FALLTHRU */
case 'l': /* FALLTHRU */
- case 'L': /* FALLTHRU */
done = FALSE;
type = *fmt;
break;
case 'E': /* FALLTHRU */
case 'g': /* FALLTHRU */
case 'G': /* FALLTHRU */
- if (type == 'L')
- VA_FLOAT(long double);
- else
- VA_FLOAT(double);
+ VA_FLOAT(double);
used = 'f';
break;
case 'c':
prec = strlen(pval);
if (prec > (int)length) {
length = length + prec;
- buffer = realloc(buffer, length);
+ buffer = typeRealloc(char, length, buffer);
if (buffer == 0) {
free(format);
return -1;
int len = _nc_printf_length(fmt, ap);
if (len > 0) {
- buf = malloc(len+1);
+ if ((buf = typeMalloc(char, len+1)) == 0)
+ return(0);
vsprintf(buf, fmt, ap);
}
#else
if (screen_lines > rows) rows = screen_lines;
if (screen_columns > cols) cols = screen_columns;
len = (rows * (cols + 1)) + 1;
- if (buf == 0)
- buf = malloc(len);
- else
- buf = realloc(buf, len);
+ buf = typeRealloc(char, len, buf);
+ if (buf == 0) {
+ return(0);
+ }
}
if (buf != 0) {
# else
vsprintf(buf, fmt, ap); /* ANSI */
# endif
-#endif
}
+#endif
return buf;
}
#include <curses.priv.h>
+#include <signal.h>
+#include <SigAction.h>
+
/* This file provides sigaction() emulation using sigvec() */
/* Use only if this is non POSIX system */
-#if !HAVE_SIGACTION
-#include <signal.h>
-#include <SigAction.h>
+#if !HAVE_SIGACTION && HAVE_SIGVEC
-MODULE_ID("$Id: sigaction.c,v 1.7 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: sigaction.c,v 1.9 1999/06/19 23:05:16 tom Exp $")
int
sigaction (int sig, sigaction_t * sigact, sigaction_t * osigact)
int
sigprocmask (int mode, sigset_t * mask, sigset_t * omask)
- {
+{
sigset_t current = sigsetmask(0);
if (omask) *omask = current;
sigsetmask(current);
return 0;
- }
+}
int
sigsuspend (sigset_t * mask)
*mask |= sigmask (sig);
return 0;
}
+
+int
+sigismember (sigset_t * mask, int sig)
+{
+ return (*mask & sigmask (sig)) != 0;
+}
+
#else
extern void _nc_sigaction(void); /* quiet's gcc warning */
void _nc_sigaction(void) { } /* nonempty for strict ANSI compilers */
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1997 *
+ ****************************************************************************/
+
+/*
+** tries.c
+**
+** Functions to manage the tree of partial-completions for keycodes.
+**
+*/
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: tries.c,v 1.12 1999/03/01 23:23:59 tom Exp $")
+
+/*
+ * Expand a keycode into the string that it corresponds to, returning null if
+ * no match was found, otherwise allocating a string of the result.
+ */
+char *_nc_expand_try(struct tries *tree, unsigned short code, int *count, size_t len)
+{
+ struct tries *ptr = tree;
+ char *result = 0;
+
+ if (code != 0) {
+ while (ptr != 0) {
+ if ((result = _nc_expand_try(ptr->child, code, count, len + 1)) != 0) {
+ break;
+ }
+ if (ptr->value == code) {
+ *count -= 1;
+ if (*count == -1) {
+ result = typeCalloc(char, len+2);
+ break;
+ }
+ }
+ ptr = ptr->sibling;
+ }
+ }
+ if (result != 0) {
+ if ((result[len] = ptr->ch) == 0)
+ *((unsigned char *)(result+len)) = 128;
+#ifdef TRACE
+ if (len == 0)
+ _tracef("expand_key %s %s", _trace_key(code), _nc_visbuf(result));
+#endif
+ }
+ return result;
+}
+
+/*
+ * Remove a code from the specified tree, freeing the unused nodes. Returns
+ * true if the code was found/removed.
+ */
+int _nc_remove_key(struct tries **tree, unsigned short code)
+{
+ T((T_CALLED("_nc_remove_key(%p,%d)"), tree, code));
+
+ if (code == 0)
+ returnCode(FALSE);
+
+ while (*tree != 0) {
+ if (_nc_remove_key(&(*tree)->child, code)) {
+ returnCode(TRUE);
+ }
+ if ((*tree)->value == code) {
+ if((*tree)->child) {
+ /* don't cut the whole sub-tree */
+ (*tree)->value = 0;
+ } else {
+ struct tries *to_free = *tree;
+ *tree = (*tree)->sibling;
+ free(to_free);
+ }
+ returnCode(TRUE);
+ }
+ tree = &(*tree)->sibling;
+ }
+ returnCode(FALSE);
+}
+
+/*
+ * Remove a string from the specified tree, freeing the unused nodes. Returns
+ * true if the string was found/removed.
+ */
+int _nc_remove_string(struct tries **tree, char *string)
+{
+ T((T_CALLED("_nc_remove_string(%p,%s)"), tree, _nc_visbuf(string)));
+
+ if (string == 0 || *string == 0)
+ returnCode(FALSE);
+
+ while (*tree != 0) {
+ if ((unsigned char)(*tree)->ch == (unsigned char)*string) {
+ if (string[1] != 0)
+ returnCode(_nc_remove_string(&(*tree)->child, string+1));
+ if((*tree)->child) {
+ /* don't cut the whole sub-tree */
+ (*tree)->value = 0;
+ } else {
+ struct tries *to_free = *tree;
+ *tree = (*tree)->sibling;
+ free(to_free);
+ }
+ returnCode(TRUE);
+ }
+ tree = &(*tree)->sibling;
+ }
+ returnCode(FALSE);
+}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999 *
+ ****************************************************************************/
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: version.c,v 1.1 1999/10/23 13:28:49 tom Exp $")
+
+const char *
+curses_version(void)
+{
+ static char my_version[80];
+
+ T((T_CALLED("curses_version()")));
+ sprintf(my_version, "ncurses %d.%d.%d",
+ NCURSES_VERSION_MAJOR,
+ NCURSES_VERSION_MINOR,
+ NCURSES_VERSION_PATCH);
+ returnPtr(my_version);
+}
****************************************************************************/
#include <curses.priv.h>
-#include <term.h>
-MODULE_ID("$Id: wresize.c,v 1.9 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: wresize.c,v 1.12 1999/02/27 18:57:31 tom Exp $")
/*
* Reallocate a curses WINDOW struct to either shrink or grow to the specified
* blanks. The application is responsible for repainting the blank area.
*/
-static void *doalloc(void *p, size_t n)
-{
- if (p == 0)
- p = malloc(n);
- else
- p = realloc(p, n);
- return p;
-}
-
-#define DOALLOC(p,t,n) (t *)doalloc(p, sizeof(t)*(n))
+#define DOALLOC(p,t,n) typeRealloc(t, n, p)
#define ld_ALLOC(p,n) DOALLOC(p,struct ldat,n)
#define c_ALLOC(p,n) DOALLOC(p,chtype,n)
/*
- * $Id: curses.priv.h,v 1.101 1998/02/11 12:13:57 tom Exp $
+ * $Id: curses.priv.h,v 1.144 1999/10/22 23:15:37 tom Exp $
*
* curses.priv.h
*
#define USE_QNX_MOUSE 0
#endif
+/* EMX mouse support */
+#ifdef __EMX__
+#define USE_EMX_MOUSE
+#endif
+
#define DEFAULT_MAXCLICK 166
#define EV_MAX 8 /* size of mouse circular event queue */
#endif
/*
- * As currently coded, hashmap relies on the scroll-hints logic.
+ * Not all platforms have memmove; some have an equivalent bcopy. (Some may
+ * have neither).
+ */
+#if USE_OK_BCOPY
+#define memmove(d,s,n) bcopy(s,d,n)
+#elif USE_MY_MEMMOVE
+#define memmove(d,s,n) _nc_memmove(d,s,n)
+extern void * _nc_memmove(void *, const void *, size_t);
+#endif
+
+/*
+ * Scroll hints are useless when hashmap is used
*/
#if !USE_SCROLL_HINTS
-#if USE_HASHMAP
+#if !USE_HASHMAP
#define USE_SCROLL_HINTS 1
#else
#define USE_SCROLL_HINTS 0
#define PAIR_OF(fg, bg) ((((fg) & C_MASK) << C_SHIFT) | ((bg) & C_MASK))
+/*
+ * Common/troublesome character definitions
+ */
+#define L_BRACE '{'
+#define R_BRACE '}'
+#define S_QUOTE '\''
+
/*
* Structure for palette tables
*/
int _ifd; /* input file ptr for screen */
FILE *_ofp; /* output file ptr for screen */
char *_setbuf; /* buffered I/O for output */
+ int _buffered; /* setvbuf uses _setbuf data */
int _checkfd; /* filedesc for typeahead check */
struct term *_term; /* terminal type information */
short _lines; /* screen lines */
int _echo; /* True if echo on */
int _use_meta; /* use the meta key? */
SLK *_slk; /* ptr to soft key struct / NULL */
-
+ int slk_format; /* selected format for this screen */
/* cursor movement costs; units are 10ths of milliseconds */
+#ifdef NCURSES_NO_PADDING
+ int _no_padding; /* flag to set if padding disabled */
+#endif
int _char_padding; /* cost of character put */
int _cr_cost; /* cost of (carriage_return) */
int _cup_cost; /* cost of (cursor_address) */
int _rep_cost; /* cost of (repeat_char) */
int _hpa_ch_cost; /* cost of (column_address) */
int _cup_ch_cost; /* cost of (cursor_address) */
+ int _smir_cost; /* cost of (enter_insert_mode) */
+ int _rmir_cost; /* cost of (exit_insert_mode) */
+ int _ip_cost; /* cost of (insert_padding) */
/* used in lib_mvcur.c */
char * _address_cursor;
int _carriage_return_length;
chtype _xmc_triggers; /* attributes to process if xmc */
chtype _acs_map[ACS_LEN];
+ /* used in lib_vidattr.c */
+ bool _use_rmso; /* true if we may use 'rmso' */
+ bool _use_rmul; /* true if we may use 'rmul' */
+
/*
* These data correspond to the state of the idcok() and idlok()
* functions. A caveat is in order here: the XSI and SVr4
bool _sig_winch;
SCREEN *_next_screen;
+
+ /* hashes for old and new lines */
+ unsigned long *oldhash, *newhash;
+
+ bool _cleanup; /* cleanup after int/quit signal */
};
extern SCREEN *_nc_screen_chain;
#endif
/* usually in <unistd.h> */
+#ifndef STDIN_FILENO
+#define STDIN_FILENO 0
+#endif
+
#ifndef STDOUT_FILENO
#define STDOUT_FILENO 1
#endif
#define CHANGED -1
+#define CHANGED_CELL(line,col) \
+ if (line->firstchar == _NOCHANGE) \
+ line->firstchar = line->lastchar = col; \
+ else if ((col) < line->firstchar) \
+ line->firstchar = col; \
+ else if ((col) > line->lastchar) \
+ line->lastchar = col
+
+#define CHANGED_RANGE(line,start,end) \
+ if (line->firstchar == _NOCHANGE \
+ || line->firstchar > (start)) \
+ line->firstchar = start; \
+ if (line->lastchar == _NOCHANGE \
+ || line->lastchar < (end)) \
+ line->lastchar = end
+
+#define CHANGED_TO_EOL(line,start,end) \
+ if (line->firstchar == _NOCHANGE \
+ || line->firstchar > (start)) \
+ line->firstchar = start; \
+ line->lastchar = end
+
#define SIZEOF(v) (sizeof(v)/sizeof(v[0]))
-#define typeCalloc(type,elts) (type *)calloc(elts,sizeof(type))
+#define typeMalloc(type,elts) (type *)malloc((elts)*sizeof(type))
+#define typeCalloc(type,elts) (type *)calloc((elts),sizeof(type))
+#define typeRealloc(type,elts,ptr) (type *)_nc_doalloc(ptr, (elts)*sizeof(type))
#define FreeIfNeeded(p) if(p != 0) free(p)
#define FreeAndNull(p) free(p); p = 0
#define returnPtr(code) TRACE_RETURN(code,ptr)
#define returnVoid T((T_RETURN(""))); return
#define returnWin(code) TRACE_RETURN(code,win)
-extern unsigned _nc_tracing;
extern WINDOW * _nc_retrace_win(WINDOW *);
extern attr_t _nc_retrace_attr_t(attr_t);
extern char *_nc_retrace_ptr(char *);
extern const char *_nc_tputs_trace;
-extern const char *_nc_visbuf(const char *);
-extern const char *_nc_visbuf2(int, const char *);
extern int _nc_retrace_int(int);
extern long _nc_outchars;
extern void _nc_fifo_dump(void);
#define returnWin(code) return code
#endif
+extern unsigned _nc_tracing;
+extern const char *_nc_visbuf2(int, const char *);
+
#define _trace_key(ch) ((ch > KEY_MIN) ? keyname(ch) : _tracechar((unsigned char)ch))
#define ALL_BUT_COLOR ((chtype)~(A_COLOR))
#define InsCharCost(count) \
((parm_ich != 0) \
? SP->_ich_cost \
- : ((insert_character != 0) \
- ? (SP->_ich1_cost * count) \
- : INFINITY))
+ : ((enter_insert_mode && exit_insert_mode) \
+ ? SP->_smir_cost + SP->_rmir_cost + (SP->_ip_cost * count) \
+ : ((insert_character != 0) \
+ ? (SP->_ich1_cost * count) \
+ : INFINITY)))
#if USE_XMC_SUPPORT
#define UpdateAttrs(c) if (SP->_current_attr != AttrOf(c)) { \
#endif
+#if !HAVE_GETCWD
+#define getcwd(buf,len) getwd(buf)
+#endif
+
+/* doalloc.c */
+extern void *_nc_doalloc(void *, size_t);
+#if !HAVE_STRDUP
+#define strdup _nc_strdup
+extern char *_nc_strdup(const char *);
+#endif
+
/* doupdate.c */
#if USE_XMC_SUPPORT
extern void _nc_do_xmc_glitch(attr_t);
#endif
/* hardscroll.c */
-#if defined(TRACE) || defined(SCROLLDEBUG)
-extern void _nc_linedump(void);
-#endif
-
-/* hardscroll.c */
-#if defined(TRACE) || defined(SCROLLDEBUG)
+#if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG)
extern void _nc_linedump(void);
#endif
/* lib_acs.c */
-extern void init_acs(void); /* no prefix, this name is traditional */
+extern void _nc_init_acs(void); /* corresponds to traditional 'init_acs()' */
extern int _nc_msec_cost(const char *const, int); /* used by 'tack' program */
/* lib_mvcur.c */
extern void _nc_screen_resume(void);
extern void _nc_screen_wrap(void);
+#if !HAVE_STRSTR
+#define strstr _nc_strstr
+extern char *_nc_strstr(const char *, const char *);
+#endif
+
/* lib_mouse.c */
extern int _nc_has_mouse(void);
/* safe_sprintf.c */
extern char * _nc_printf_string(const char *fmt, va_list ap);
-/* softscroll.c */
-extern void _nc_setup_scroll(void);
-extern void _nc_perform_scroll(void);
-
/* tries.c */
extern void _nc_add_to_try(struct tries **tree, char *str, unsigned short code);
-extern char *_nc_expand_try(struct tries *tree, unsigned short code, size_t len);
+extern char *_nc_expand_try(struct tries *tree, unsigned short code, int *count, size_t len);
extern int _nc_remove_key(struct tries **tree, unsigned short code);
+extern int _nc_remove_string(struct tries **tree, char *string);
/* elsewhere ... */
extern WINDOW *_nc_makenew(int, int, int, int, int);
+extern char *_nc_home_terminfo(void);
extern char *_nc_trace_buf(int, size_t);
extern chtype _nc_background(WINDOW *);
extern chtype _nc_render(WINDOW *, chtype);
+extern int _nc_access(const char *, int);
+extern int _nc_baudrate(int);
+extern int _nc_getenv_num(const char *);
extern int _nc_keypad(bool);
+extern int _nc_ospeed(int);
extern int _nc_outch(int);
extern int _nc_setupscreen(short, short const, FILE *);
extern int _nc_timed_wait(int, int, int *);
extern int _nc_waddch_nosync(WINDOW *, const chtype);
extern void _nc_do_color(int, bool, int (*)(int));
-extern void _nc_free_and_exit(int);
extern void _nc_freeall(void);
extern void _nc_freewin(WINDOW *win);
extern void _nc_hash_map(void);
+extern void _nc_init_keytry(void);
+extern void _nc_keep_tic_dir(const char *);
+extern void _nc_make_oldhash(int i);
extern void _nc_outstr(const char *str);
+extern void _nc_scroll_oldhash(int n, int top, int bot);
extern void _nc_scroll_optimize(void);
extern void _nc_scroll_window(WINDOW *, int const, short const, short const, chtype);
extern void _nc_set_buffer(FILE *ofp, bool buffered);
extern void _nc_signal_handler(bool);
extern void _nc_synchook(WINDOW *win);
+extern void _nc_trace_tries(struct tries *tree);
#if USE_SIZECHANGE
extern void _nc_update_screensize(void);
#endif
+/* scroll indices */
+extern int *_nc_oldnums;
+
+#define USE_SETBUF_0 0
+
+#define NC_BUFFERED(flag) \
+ if ((SP->_buffered != 0) != flag) \
+ _nc_set_buffer(SP->_ofp, flag)
+
+#define NC_OUTPUT ((SP != 0) ? SP->_ofp : stdout)
+#define _nc_flush() (void)fflush(NC_OUTPUT)
+
/*
* On systems with a broken linker, define 'SP' as a function to force the
* linker to pull in the data-only module with 'SP'.
extern int _nc_slk_format; /* != 0 if slk_init() called */
extern int _nc_slk_initialize(WINDOW *, int);
-/*
- * Some constants related to SLK's
+/*
+ * Some constants related to SLK's
*/
#define MAX_SKEY_OLD 8 /* count of soft keys */
#define MAX_SKEY_LEN_OLD 8 /* max length of soft key text */
#define MAX_SKEY_PC 12 /* This is what most PC's have */
#define MAX_SKEY_LEN_PC 5
-#define MAX_SKEY (SLK_STDFMT ? MAX_SKEY_OLD : MAX_SKEY_PC)
-#define MAX_SKEY_LEN (SLK_STDFMT ? MAX_SKEY_LEN_OLD : MAX_SKEY_LEN_PC)
-
/* Macro to check whether or not we use a standard format */
-#define SLK_STDFMT (_nc_slk_format < 3)
+#define SLK_STDFMT(fmt) (fmt < 3)
/* Macro to determine height of label window */
-#define SLK_LINES (SLK_STDFMT ? 1 : (_nc_slk_format - 2))
+#define SLK_LINES(fmt) (SLK_STDFMT(fmt) ? 1 : ((fmt) - 2))
+
+#define MAX_SKEY(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_OLD : MAX_SKEY_PC)
+#define MAX_SKEY_LEN(fmt) (SLK_STDFMT(fmt)? MAX_SKEY_LEN_OLD : MAX_SKEY_LEN_PC)
extern int _nc_ripoffline(int line, int (*init)(WINDOW *,int));
+++ /dev/null
-/****************************************************************************
- * Copyright (c) 1998 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. *
- ****************************************************************************/
-
-/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1996,1997 *
- ****************************************************************************/
-
-/*
-// lib_adabind.c
-//
-// Some small wrappers to ease the implementation of an Ada95
-// binding. Especially functionalities only available as macros
-// in (n)curses are wrapped here by functions.
-// See the documentation and copyright notices in the ../Ada95
-// subdirectory.
-*/
-#include "curses.priv.h"
-
-MODULE_ID("$Id: lib_adabind.c,v 1.7 1998/02/11 12:13:59 tom Exp $")
-
-/* In (n)curses are a few functionalities that can't be expressed as
-// functions, because for historic reasons they use as macro argument
-// variable names that are "out" parameters. For those macros we provide
-// small wrappers.
-*/
-
-/* Prototypes for the functions in this module */
-int _nc_ada_getmaxyx (const WINDOW *win, int *y, int *x);
-int _nc_ada_getbegyx (const WINDOW *win, int *y, int *x);
-int _nc_ada_getyx (const WINDOW *win, int *y, int *x);
-int _nc_ada_getparyx (const WINDOW *win, int *y, int *x);
-int _nc_ada_isscroll (const WINDOW *win);
-int _nc_ada_coord_transform (const WINDOW *win, int *Y, int *X, int dir);
-void _nc_ada_mouse_event (mmask_t m, int *b, int *s);
-int _nc_ada_mouse_mask (int button, int state, mmask_t *mask);
-void _nc_ada_unregister_mouse (void);
-int _nc_ada_vcheck (int major, int minor);
-
-int _nc_ada_getmaxyx (const WINDOW *win, int *y, int *x)
-{
- if (win && y && x)
- {
- getmaxyx(win,*y,*x);
- return OK;
- }
- else
- return ERR;
-}
-
-int _nc_ada_getbegyx (const WINDOW *win, int *y, int *x)
-{
- if (win && y && x)
- {
- getbegyx(win,*y,*x);
- return OK;
- }
- else
- return ERR;
-}
-
-int _nc_ada_getyx (const WINDOW *win, int *y, int *x)
-{
- if (win && y && x)
- {
- getyx(win,*y,*x);
- return OK;
- }
- else
- return ERR;
-}
-
-int _nc_ada_getparyx (const WINDOW *win, int *y, int *x)
-{
- if (win && y && x)
- {
- getparyx(win,*y,*x);
- return OK;
- }
- else
- return ERR;
-}
-
-int _nc_ada_isscroll (const WINDOW *win)
-{
- return win ? (win->_scroll ? TRUE : FALSE) : ERR;
-}
-
-int _nc_ada_coord_transform (const WINDOW *win, int *Y, int *X, int dir)
-{
- if (win && Y && X)
- {
- int y = *Y; int x = *X;
- if (dir)
- { /* to screen coordinates */
- y += win->_yoffset;
- y += win->_begy;
- x += win->_begx;
- if (!wenclose(win,y,x))
- return FALSE;
- }
- else
- { /* from screen coordinates */
- if (!wenclose(win,y,x))
- return FALSE;
- y -= win->_yoffset;
- y -= win->_begy;
- x -= win->_begx;
- }
- *X = x;
- *Y = y;
- return TRUE;
- }
- return FALSE;
-}
-
-#define BUTTON1_EVENTS (BUTTON1_RELEASED |\
- BUTTON1_PRESSED |\
- BUTTON1_CLICKED |\
- BUTTON1_DOUBLE_CLICKED |\
- BUTTON1_TRIPLE_CLICKED |\
- BUTTON1_RESERVED_EVENT )
-
-#define BUTTON2_EVENTS (BUTTON2_RELEASED |\
- BUTTON2_PRESSED |\
- BUTTON2_CLICKED |\
- BUTTON2_DOUBLE_CLICKED |\
- BUTTON2_TRIPLE_CLICKED |\
- BUTTON2_RESERVED_EVENT )
-
-#define BUTTON3_EVENTS (BUTTON3_RELEASED |\
- BUTTON3_PRESSED |\
- BUTTON3_CLICKED |\
- BUTTON3_DOUBLE_CLICKED |\
- BUTTON3_TRIPLE_CLICKED |\
- BUTTON3_RESERVED_EVENT )
-
-#define BUTTON4_EVENTS (BUTTON4_RELEASED |\
- BUTTON4_PRESSED |\
- BUTTON4_CLICKED |\
- BUTTON4_DOUBLE_CLICKED |\
- BUTTON4_TRIPLE_CLICKED |\
- BUTTON4_RESERVED_EVENT )
-
-void _nc_ada_mouse_event( mmask_t m, int *b, int *s )
-{
- int k = 0;
-
- if ( m & BUTTON1_EVENTS)
- {
- k = 1;
- }
- else if ( m & BUTTON2_EVENTS)
- {
- k = 2;
- }
- else if ( m & BUTTON3_EVENTS)
- {
- k = 3;
- }
- else if ( m & BUTTON4_EVENTS)
- {
- k = 4;
- }
-
- if (k)
- {
- *b = k-1;
- if (BUTTON_RELEASE(m,k)) *s = 0;
- else if (BUTTON_PRESS(m,k)) *s = 1;
- else if (BUTTON_CLICK(m,k)) *s = 2;
- else if (BUTTON_DOUBLE_CLICK(m,k)) *s = 3;
- else if (BUTTON_TRIPLE_CLICK(m,k)) *s = 4;
- else if (BUTTON_RESERVED_EVENT(m,k)) *s = 5;
- else
- {
- *s = -1;
- }
- }
- else
- {
- *s = 1;
- if (m & BUTTON_CTRL) *b = 4;
- else if (m & BUTTON_SHIFT) *b = 5;
- else if (m & BUTTON_ALT) *b = 6;
- else
- {
- *b = -1;
- }
- }
-}
-
-int _nc_ada_mouse_mask ( int button, int state, mmask_t *mask )
-{
- mmask_t b = (button<4) ? ((1<<button) << (6 * state)) :
- (BUTTON_CTRL << (button-4));
-
- if (button>=4 && state!=1)
- return ERR;
-
- *mask |= b;
- return OK;
-}
-
-/*
- * Allow Ada to check whether or not we are the correct library version
- * for the binding. It calls this routine with the version it requests
- * and this routine returns a 1 if it is a correct version, a 2 if the
- * major version is correct but the minor version of the library differs
- * and a 0 if the versions don't match.
- */
-int _nc_ada_vcheck (int major, int minor)
-{
- if (major==NCURSES_VERSION_MAJOR) {
- if (minor==NCURSES_VERSION_MINOR)
- return 1;
- else
- return 2;
- }
- else
- return 0;
-}
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
****************************************************************************/
/****************************************************************************
- * Author: Thomas E. Dickey <dickey@clark.net> 1996,1997,1998 *
+ * Author: Thomas E. Dickey <dickey@clark.net> 1996,1997,1998,1999 *
****************************************************************************/
/* LINTLIBRARY */
-/* ./hardscroll.c */
+/* ./tty/hardscroll.c */
#include <curses.priv.h>
+#undef _nc_oldnums
+int *_nc_oldnums;
+
#undef _nc_scroll_optimize
void _nc_scroll_optimize(void)
{ /* void */ }
-/* ./hashmap.c */
+/* ./tty/hashmap.c */
+
+#include <term.h>
typedef struct
{
void _nc_hash_map(void)
{ /* void */ }
-/* ./lib_acs.c */
-
-#include <term.h>
-
-#undef acs_map
-chtype acs_map[128 ];
+#undef _nc_make_oldhash
+void _nc_make_oldhash(
+ int i)
+ { /* void */ }
-#undef init_acs
-void init_acs(void)
+#undef _nc_scroll_oldhash
+void _nc_scroll_oldhash(
+ int n,
+ int top,
+ int bot)
{ /* void */ }
-/* ./lib_addch.c */
+/* ./base/lib_addch.c */
#include <ctype.h>
-#undef wchgat
-int wchgat(
- WINDOW *win,
- int n,
- attr_t attr,
- short color,
- const void *opts)
- { return(*(int *)0); }
-
#undef _nc_background
chtype _nc_background(
WINDOW *win)
const chtype ch)
{ return(*(int *)0); }
-/* ./lib_addstr.c */
+/* ./base/lib_addstr.c */
#undef waddnstr
int waddnstr(
int n)
{ return(*(int *)0); }
-/* ./lib_baudrate.c */
-
-struct speed {
- speed_t s;
- int sp;
-};
-
-#undef baudrate
-int baudrate(void)
- { return(*(int *)0); }
-
-/* ./lib_beep.c */
+/* ./base/lib_beep.c */
#undef beep
int beep(void)
{ return(*(int *)0); }
-/* ./lib_bkgd.c */
+/* ./base/lib_bkgd.c */
#undef wbkgdset
void wbkgdset(
const chtype ch)
{ return(*(int *)0); }
-/* ./lib_box.c */
+/* ./base/lib_box.c */
#undef wborder
int wborder(
chtype br)
{ return(*(int *)0); }
-/* ./lib_clear.c */
+/* ./base/lib_chgat.c */
+
+#undef wchgat
+int wchgat(
+ WINDOW *win,
+ int n,
+ attr_t attr,
+ short color,
+ const void *opts)
+ { return(*(int *)0); }
+
+/* ./base/lib_clear.c */
#undef wclear
int wclear(
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_clrbot.c */
+/* ./base/lib_clearok.c */
+
+#undef clearok
+int clearok(
+ WINDOW *win,
+ bool flag)
+ { return(*(int *)0); }
+
+/* ./base/lib_clrbot.c */
#undef wclrtobot
int wclrtobot(
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_clreol.c */
+/* ./base/lib_clreol.c */
#undef wclrtoeol
int wclrtoeol(
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_color.c */
+/* ./base/lib_color.c */
#undef COLOR_PAIRS
int COLOR_PAIRS;
#undef _nc_do_color
void _nc_do_color(
int pair,
+ bool reverse,
int (*outc)(
int p1))
{ /* void */ }
-/* ./lib_data.c */
+/* ./base/lib_colorset.c */
-#undef stdscr
-WINDOW *stdscr;
-#undef curscr
-WINDOW *curscr;
-#undef newscr
-WINDOW *newscr;
-#undef _nc_screen_chain
-SCREEN *_nc_screen_chain;
-#undef SP
-SCREEN *SP;
+#undef wcolor_set
+int wcolor_set(
+ WINDOW *win,
+ short color_pair_number,
+ void *opts)
+ { return(*(int *)0); }
-/* ./lib_delch.c */
+/* ./base/lib_delch.c */
#undef wdelch
int wdelch(
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_delwin.c */
+/* ./base/lib_delwin.c */
#undef delwin
int delwin(
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_doupdate.c */
-
-#include <sys/time.h>
+/* ./base/lib_echo.c */
-#undef doupdate
-int doupdate(void)
+#undef echo
+int echo(void)
{ return(*(int *)0); }
-#undef _nc_outstr
-void _nc_outstr(
- const char *str)
- { /* void */ }
-
-#undef _nc_scrolln
-int _nc_scrolln(
- int n,
- int top,
- int bot,
- int maxy)
+#undef noecho
+int noecho(void)
{ return(*(int *)0); }
-#undef _nc_screen_resume
-void _nc_screen_resume(void)
- { /* void */ }
-
-#undef _nc_screen_init
-void _nc_screen_init(void)
- { /* void */ }
-
-#undef _nc_screen_wrap
-void _nc_screen_wrap(void)
- { /* void */ }
-
-#undef _nc_do_xmc_glitch
-void _nc_do_xmc_glitch(
- attr_t previous)
- { /* void */ }
-
-/* ./lib_endwin.c */
+/* ./base/lib_endwin.c */
#undef endwin
int endwin(void)
{ return(*(int *)0); }
-/* ./lib_erase.c */
+/* ./base/lib_erase.c */
#undef werase
int werase(
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_flash.c */
+/* ./base/lib_flash.c */
#undef flash
int flash(void)
{ return(*(int *)0); }
#undef attr_get
-int attr_get(void)
+int attr_get(
+ attr_t *a1,
+ short *a2,
+ void *z)
{ return(*(int *)0); }
#undef attr_off
int attr_off(
- NCURSES_ATTR_T z)
+ attr_t a1,
+ void *z)
{ return(*(int *)0); }
#undef attr_on
int attr_on(
- NCURSES_ATTR_T z)
+ attr_t a1,
+ void *z)
{ return(*(int *)0); }
#undef attr_set
int attr_set(
- NCURSES_ATTR_T z)
+ attr_t a1,
+ short a2,
+ void *z)
{ return(*(int *)0); }
#undef bkgd
int clrtoeol(void)
{ return(*(int *)0); }
+#undef color_set
+int color_set(
+ short a1,
+ void *z)
+ { return(*(int *)0); }
+
#undef COLOR_PAIR
int COLOR_PAIR(
int z)
{ return(*(int *)0); }
#undef timeout
-int timeout(
+void timeout(
int z)
- { return(*(int *)0); }
+ { /* void */ }
#undef untouchwin
int untouchwin(
#undef vw_printw
int vw_printw(
WINDOW *a1,
- const char *a2,
+ char *a2,
va_list z)
{ return(*(int *)0); }
#undef vw_scanw
int vw_scanw(
WINDOW *a1,
- const char *a2,
+ char *a2,
va_list z)
{ return(*(int *)0); }
{ return(*(int *)0); }
#undef wattr_get
-attr_t wattr_get(
- WINDOW *z)
- { return(*(attr_t *)0); }
+int wattr_get(
+ WINDOW *a1,
+ attr_t *a2,
+ short *a3,
+ void *z)
+ { return(*(int *)0); }
#undef wattr_set
int wattr_set(
WINDOW *a1,
- attr_t z)
+ attr_t a2,
+ short a3,
+ void *z)
{ return(*(int *)0); }
#undef wdeleteln
char *z)
{ return(*(int *)0); }
-#undef winch
-chtype winch(
- WINDOW *z)
- { return(*(chtype *)0); }
-
#undef winchstr
int winchstr(
WINDOW *a1,
WINDOW *z)
{ return(*(int *)0); }
-/* ./lib_getch.c */
+#undef mouse_trafo
+bool mouse_trafo(
+ int *a1,
+ int *a2,
+ bool z)
+ { return(*(bool *)0); }
+
+/* ./base/lib_getch.c */
#include <fifo_defs.h>
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_getstr.c */
+/* ./base/lib_getstr.c */
#undef wgetnstr
int wgetnstr(
int maxlen)
{ return(*(int *)0); }
-/* ./lib_hline.c */
+/* ./base/lib_hline.c */
#undef whline
int whline(
int n)
{ return(*(int *)0); }
-/* ./lib_inchstr.c */
+/* ./base/lib_immedok.c */
+
+#undef immedok
+void immedok(
+ WINDOW *win,
+ bool flag)
+ { /* void */ }
+
+/* ./base/lib_inchstr.c */
#undef winchnstr
int winchnstr(
int n)
{ return(*(int *)0); }
-/* ./lib_initscr.c */
+/* ./base/lib_initscr.c */
+
+#include <tic.h>
#undef initscr
WINDOW *initscr(void)
{ return(*(WINDOW **)0); }
-#undef termname
-char *termname(void)
- { return(*(char **)0); }
-
-/* ./lib_insch.c */
+/* ./base/lib_insch.c */
#undef winsch
int winsch(
chtype c)
{ return(*(int *)0); }
-/* ./lib_insdel.c */
+/* ./base/lib_insdel.c */
#undef winsdelln
int winsdelln(
int n)
{ return(*(int *)0); }
-/* ./lib_insstr.c */
+/* ./base/lib_insstr.c */
#undef winsnstr
int winsnstr(
WINDOW *win,
- const char *str,
+ const char *s,
int n)
{ return(*(int *)0); }
-/* ./lib_instr.c */
+/* ./base/lib_instr.c */
#undef winnstr
int winnstr(
int n)
{ return(*(int *)0); }
-/* ./lib_isendwin.c */
+/* ./base/lib_isendwin.c */
#undef isendwin
-int isendwin(void)
- { return(*(int *)0); }
+bool isendwin(void)
+ { return(*(bool *)0); }
-/* ./lib_longname.c */
+/* ./base/lib_leaveok.c */
-#undef longname
-char *longname(void)
- { return(*(char **)0); }
+#undef leaveok
+int leaveok(
+ WINDOW *win,
+ bool flag)
+ { return(*(int *)0); }
-/* ./lib_mouse.c */
+/* ./base/lib_mouse.c */
#undef getmouse
int getmouse(
int _nc_has_mouse(void)
{ return(*(int *)0); }
-/* ./lib_move.c */
+#undef wmouse_trafo
+bool wmouse_trafo(
+ const WINDOW *win,
+ int *pY,
+ int *pX,
+ bool to_screen)
+ { return(*(bool *)0); }
+
+/* ./base/lib_move.c */
#undef wmove
int wmove(
int x)
{ return(*(int *)0); }
-/* ./lib_mvcur.c */
+/* ./tty/lib_mvcur.c */
#undef _nc_msec_cost
int _nc_msec_cost(
int xnew)
{ return(*(int *)0); }
-/* ./lib_mvwin.c */
+/* ./base/lib_mvwin.c */
#undef mvwin
int mvwin(
int bx)
{ return(*(int *)0); }
-/* ./lib_newterm.c */
+/* ./base/lib_newterm.c */
#undef filter
void filter(void)
#undef newterm
SCREEN *newterm(
- const char *term,
+ char *name,
FILE *ofp,
FILE *ifp)
{ return(*(SCREEN **)0); }
-/* ./lib_newwin.c */
+/* ./base/lib_newwin.c */
#undef _nc_freewin
void _nc_freewin(
int flags)
{ return(*(WINDOW **)0); }
-/* ./lib_overlay.c */
+/* ./base/lib_nl.c */
+
+#undef nl
+int nl(void)
+ { return(*(int *)0); }
+
+#undef nonl
+int nonl(void)
+ { return(*(int *)0); }
+
+/* ./base/lib_overlay.c */
#undef overlay
int overlay(
int over)
{ return(*(int *)0); }
-/* ./lib_pad.c */
+/* ./base/lib_pad.c */
#undef newpad
WINDOW *newpad(
const chtype ch)
{ return(*(int *)0); }
-/* ./lib_print.c */
-
-#undef mcprint
-int mcprint(
- char *data,
- int len)
- { return(*(int *)0); }
-
-/* ./lib_printw.c */
+/* ./base/lib_printw.c */
#undef printw
int printw(
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
#undef wprintw
int wprintw(
WINDOW *win,
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
int mvprintw(
int y,
int x,
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
WINDOW *win,
int y,
int x,
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
#undef vwprintw
int vwprintw(
WINDOW *win,
- const char *fmt,
+ char *fmt,
va_list argp)
{ return(*(int *)0); }
-/* ./lib_redrawln.c */
+/* ./base/lib_redrawln.c */
#undef wredrawln
int wredrawln(
int num)
{ return(*(int *)0); }
-/* ./lib_refresh.c */
+/* ./base/lib_refresh.c */
#undef wrefresh
int wrefresh(
WINDOW *win)
{ return(*(int *)0); }
-/* ./lib_restart.c */
-
-#undef def_shell_mode
-int def_shell_mode(void)
- { return(*(int *)0); }
-
-#undef def_prog_mode
-int def_prog_mode(void)
- { return(*(int *)0); }
+/* ./base/lib_restart.c */
#undef restartterm
int restartterm(
- const char *term,
+ char *termp,
int filenum,
int *errret)
{ return(*(int *)0); }
-/* ./lib_scanw.c */
+/* ./base/lib_scanw.c */
#undef vwscanw
int vwscanw(
WINDOW *win,
- const char *fmt,
+ char *fmt,
va_list argp)
{ return(*(int *)0); }
#undef scanw
int scanw(
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
#undef wscanw
int wscanw(
WINDOW *win,
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
int mvscanw(
int y,
int x,
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
WINDOW *win,
int y,
int x,
- const char *fmt,
+ char *fmt,
...)
{ return(*(int *)0); }
-/* ./lib_screen.c */
+/* ./base/lib_screen.c */
#include <sys/stat.h>
#include <time.h>
const char *file)
{ return(*(int *)0); }
-/* ./lib_scroll.c */
+/* ./base/lib_scroll.c */
#undef _nc_scroll_window
void _nc_scroll_window(
int n)
{ return(*(int *)0); }
-/* ./lib_scrreg.c */
+/* ./base/lib_scrollok.c */
+
+#undef scrollok
+int scrollok(
+ WINDOW *win,
+ bool flag)
+ { return(*(int *)0); }
+
+/* ./base/lib_scrreg.c */
#undef wsetscrreg
int wsetscrreg(
int bottom)
{ return(*(int *)0); }
-/* ./lib_set_term.c */
-
-#undef _nc_set_buffer
-void _nc_set_buffer(
- FILE *ofp,
- bool buffered)
- { /* void */ }
+/* ./base/lib_set_term.c */
#undef set_term
SCREEN *set_term(
- SCREEN *screen)
+ SCREEN *screenp)
{ return(*(SCREEN **)0); }
#undef delscreen
int p2))
{ return(*(int *)0); }
-/* ./lib_slk.c */
+/* ./base/lib_slk.c */
#undef _nc_slk_format
int _nc_slk_format;
int slk_restore(void)
{ return(*(int *)0); }
-/* ./lib_slkatrof.c */
+/* ./base/lib_slkatr_set.c */
+
+#undef slk_attr_set
+int slk_attr_set(
+ const attr_t attr,
+ short color_pair_number,
+ void *opts)
+ { return(*(int *)0); }
+
+/* ./base/lib_slkatrof.c */
#undef slk_attroff
int slk_attroff(
- const attr_t attr)
+ const chtype attr)
{ return(*(int *)0); }
-/* ./lib_slkatron.c */
+/* ./base/lib_slkatron.c */
#undef slk_attron
int slk_attron(
- const attr_t attr)
+ const chtype attr)
{ return(*(int *)0); }
-/* ./lib_slkatrset.c */
+/* ./base/lib_slkatrset.c */
#undef slk_attrset
int slk_attrset(
- const attr_t attr)
+ const chtype attr)
{ return(*(int *)0); }
-/* ./lib_slkattr.c */
+/* ./base/lib_slkattr.c */
#undef slk_attr
attr_t slk_attr(void)
{ return(*(attr_t *)0); }
-/* ./lib_slkclear.c */
+/* ./base/lib_slkclear.c */
#undef slk_clear
int slk_clear(void)
{ return(*(int *)0); }
-/* ./lib_slkinit.c */
+/* ./base/lib_slkcolor.c */
+
+#undef slk_color
+int slk_color(
+ short color_pair_number)
+ { return(*(int *)0); }
+
+/* ./base/lib_slkinit.c */
#undef slk_init
int slk_init(
int format)
{ return(*(int *)0); }
-/* ./lib_slklab.c */
+/* ./base/lib_slklab.c */
#undef slk_label
char *slk_label(
int n)
{ return(*(char **)0); }
-/* ./lib_slkrefr.c */
+/* ./base/lib_slkrefr.c */
#undef slk_noutrefresh
int slk_noutrefresh(void)
int slk_refresh(void)
{ return(*(int *)0); }
-/* ./lib_slkset.c */
+/* ./base/lib_slkset.c */
#undef slk_set
int slk_set(
int format)
{ return(*(int *)0); }
-/* ./lib_slktouch.c */
+/* ./base/lib_slktouch.c */
#undef slk_touch
int slk_touch(void)
{ return(*(int *)0); }
-/* ./lib_touch.c */
+/* ./base/lib_touch.c */
#undef is_linetouched
-int is_linetouched(
+bool is_linetouched(
WINDOW *win,
int line)
- { return(*(int *)0); }
+ { return(*(bool *)0); }
#undef is_wintouched
-int is_wintouched(
+bool is_wintouched(
WINDOW *win)
- { return(*(int *)0); }
+ { return(*(bool *)0); }
#undef wtouchln
int wtouchln(
int changed)
{ return(*(int *)0); }
-/* ./lib_traceatr.c */
-
-#undef _traceattr2
-char *_traceattr2(
- int bufnum,
- attr_t newmode)
- { return(*(char **)0); }
-
-#undef _traceattr
-char *_traceattr(
- attr_t newmode)
- { return(*(char **)0); }
-
-#undef _nc_retrace_attr_t
-attr_t _nc_retrace_attr_t(
- attr_t code)
- { return(*(attr_t *)0); }
-
-#undef _tracechtype2
-char *_tracechtype2(
- int bufnum,
- chtype ch)
- { return(*(char **)0); }
+/* ./trace/lib_traceatr.c */
-#undef _tracechtype
-char *_tracechtype(
- chtype ch)
- { return(*(char **)0); }
+#undef _nc_lib_traceatr
+void _nc_lib_traceatr(void)
+ { /* void */ }
-/* ./lib_tracedmp.c */
+/* ./trace/lib_tracedmp.c */
-#undef _tracedump
-void _tracedump(
- const char *name,
- WINDOW *win)
+#undef _nc_lib_tracedmp
+void _nc_lib_tracedmp(void)
{ /* void */ }
-/* ./lib_tracemse.c */
+/* ./trace/lib_tracemse.c */
-#undef _tracemouse
-char *_tracemouse(
- MEVENT const *ep)
- { return(*(char **)0); }
+#undef _nc_lib_tracemouse
+void _nc_lib_tracemouse(void)
+ { /* void */ }
-/* ./lib_tstp.c */
+/* ./tty/lib_tstp.c */
#include <signal.h>
#include <SigAction.h>
bool enable)
{ /* void */ }
-/* ./lib_ungetch.c */
+/* ./base/lib_ungetch.c */
#undef ungetch
int ungetch(
int ch)
{ return(*(int *)0); }
-/* ./lib_vidattr.c */
+/* ./tty/lib_vidattr.c */
#undef vidputs
int vidputs(
chtype termattrs(void)
{ return(*(chtype *)0); }
-/* ./lib_vline.c */
+/* ./base/lib_vline.c */
#undef wvline
int wvline(
int n)
{ return(*(int *)0); }
-/* ./lib_wattroff.c */
+/* ./base/lib_wattroff.c */
#undef wattr_off
int wattr_off(
WINDOW *win,
- const attr_t at)
+ attr_t at,
+ void *opts)
{ return(*(int *)0); }
-/* ./lib_wattron.c */
+/* ./base/lib_wattron.c */
#undef wattr_on
int wattr_on(
WINDOW *win,
- const attr_t at)
+ attr_t at,
+ void *opts)
{ return(*(int *)0); }
-/* ./lib_window.c */
+/* ./base/lib_winch.c */
+
+#undef winch
+chtype winch(
+ WINDOW *win)
+ { return(*(chtype *)0); }
+
+/* ./base/lib_window.c */
#undef _nc_synchook
void _nc_synchook(
WINDOW *win)
{ return(*(WINDOW **)0); }
-/* ./nc_panel.c */
+/* ./base/nc_panel.c */
#undef _nc_panelhook
struct panelhook *_nc_panelhook(void)
{ return(*(struct panelhook **)0); }
-/* ./safe_sprintf.c */
+/* ./base/safe_sprintf.c */
#undef _nc_printf_string
char *_nc_printf_string(
va_list ap)
{ return(*(char **)0); }
-/* ./write_entry.c */
+/* ./tty/tty_update.c */
-#include <tic.h>
-#include <term_entry.h>
+#include <sys/time.h>
-#undef _nc_set_writedir
-void _nc_set_writedir(
- char *dir)
- { /* void */ }
+#undef doupdate
+int doupdate(void)
+ { return(*(int *)0); }
-#undef _nc_write_entry
-void _nc_write_entry(
- TERMTYPE *const tp)
+#undef _nc_outstr
+void _nc_outstr(
+ const char *str)
{ /* void */ }
-#undef _nc_tic_written
-int _nc_tic_written(void)
+#undef _nc_scrolln
+int _nc_scrolln(
+ int n,
+ int top,
+ int bot,
+ int maxy)
{ return(*(int *)0); }
-/* ./sigaction.c */
-
-#undef _nc_sigaction
-void _nc_sigaction(void)
+#undef _nc_screen_resume
+void _nc_screen_resume(void)
{ /* void */ }
-/* ./vsscanf.c */
+#undef _nc_screen_init
+void _nc_screen_init(void)
+ { /* void */ }
+
+#undef _nc_screen_wrap
+void _nc_screen_wrap(void)
+ { /* void */ }
+
+#undef _nc_do_xmc_glitch
+void _nc_do_xmc_glitch(
+ attr_t previous)
+ { /* void */ }
+
+/* ./base/memmove.c */
+
+#undef _nc_memmove
+void _nc_memmove(void)
+ { /* void */ }
+
+/* ./base/sigaction.c */
+
+#undef _nc_sigaction
+void _nc_sigaction(void)
+ { /* void */ }
+
+/* ./base/vsscanf.c */
#undef _nc_vsscanf
void _nc_vsscanf(void)
{ /* void */ }
-/* ./define_key.c */
+/* ./base/define_key.c */
#undef define_key
int define_key(
chtype c)
{ /* void */ }
-/* ./keyok.c */
+/* ./base/keybound.c */
+
+#undef keybound
+char *keybound(
+ int code,
+ int count)
+ { return(*(char **)0); }
+
+/* ./base/keyok.c */
#undef keyok
int keyok(
bool flag)
{ return(*(int *)0); }
-/* ./lib_adabind.c */
-
-#undef _nc_ada_getmaxyx
-int _nc_ada_getmaxyx(
- const WINDOW *win,
- int *y,
- int *x)
- { return(*(int *)0); }
-
-#undef _nc_ada_getbegyx
-int _nc_ada_getbegyx(
- const WINDOW *win,
- int *y,
- int *x)
- { return(*(int *)0); }
-
-#undef _nc_ada_getyx
-int _nc_ada_getyx(
- const WINDOW *win,
- int *y,
- int *x)
- { return(*(int *)0); }
-
-#undef _nc_ada_getparyx
-int _nc_ada_getparyx(
- const WINDOW *win,
- int *y,
- int *x)
- { return(*(int *)0); }
-
-#undef _nc_ada_isscroll
-int _nc_ada_isscroll(
- const WINDOW *win)
- { return(*(int *)0); }
-
-#undef _nc_ada_coord_transform
-int _nc_ada_coord_transform(
- const WINDOW *win,
- int *Y,
- int *X,
- int dir)
- { return(*(int *)0); }
-
-#undef _nc_ada_mouse_event
-void _nc_ada_mouse_event(
- mmask_t m,
- int *b,
- int *s)
- { /* void */ }
-
-#undef _nc_ada_mouse_mask
-int _nc_ada_mouse_mask(
- int button,
- int state,
- mmask_t *mask)
- { return(*(int *)0); }
-
-#undef _nc_ada_vcheck
-int _nc_ada_vcheck(
- int major,
- int minor)
- { return(*(int *)0); }
-
-/* ./lib_dft_fgbg.c */
+/* ./base/lib_dft_fgbg.c */
#undef use_default_colors
int use_default_colors(void)
{ return(*(int *)0); }
-/* ./lib_freeall.c */
+/* ./base/lib_freeall.c */
-#undef _nc_free_termtype
-void _nc_free_termtype(
- struct termtype *p,
- int base)
- { /* void */ }
+#include <term_entry.h>
#undef _nc_freeall
void _nc_freeall(void)
{ /* void */ }
-#undef _nc_free_and_exit
-void _nc_free_and_exit(
- int code)
- { /* void */ }
+/* ./tinfo/lib_print.c */
+
+#undef mcprint
+int mcprint(
+ char *data,
+ int len)
+ { return(*(int *)0); }
-/* ./resizeterm.c */
+/* ./base/resizeterm.c */
#undef resizeterm
int resizeterm(
int ToCols)
{ return(*(int *)0); }
-/* ./softscroll.c */
+/* ./trace/trace_xnames.c */
-#undef _nc_setup_scroll
-void _nc_setup_scroll(void)
+#undef _nc_trace_xnames
+void _nc_trace_xnames(
+ TERMTYPE *tp)
{ /* void */ }
-#undef _nc_perform_scroll
-void _nc_perform_scroll(void)
- { /* void */ }
+/* ./base/tries.c */
-/* ./wresize.c */
+#undef _nc_expand_try
+char *_nc_expand_try(
+ struct tries *tree,
+ unsigned short code,
+ int *count,
+ size_t len)
+ { return(*(char **)0); }
+
+#undef _nc_remove_key
+int _nc_remove_key(
+ struct tries **tree,
+ unsigned short code)
+ { return(*(int *)0); }
+
+#undef _nc_remove_string
+int _nc_remove_string(
+ struct tries **tree,
+ char *string)
+ { return(*(int *)0); }
+
+/* ./base/version.c */
+
+#undef curses_version
+const char *curses_version(void)
+ { return(*(const char **)0); }
+
+/* ./base/wresize.c */
#undef wresize
int wresize(
int ToCols)
{ return(*(int *)0); }
-/* ./alloc_entry.c */
+/* ./tinfo/access.c */
+
+#undef _nc_access
+int _nc_access(
+ const char *path,
+ int mode)
+ { return(*(int *)0); }
+
+/* ./tinfo/add_tries.c */
+
+#undef _nc_add_to_try
+void _nc_add_to_try(
+ struct tries **tree,
+ char *str,
+ unsigned short code)
+ { /* void */ }
+
+/* ./tinfo/alloc_entry.c */
#undef _nc_init_entry
void _nc_init_entry(
TERMTYPE *const tp)
{ /* void */ }
+#undef _nc_copy_entry
+ENTRY *_nc_copy_entry(
+ ENTRY *oldp)
+ { return(*(ENTRY **)0); }
+
#undef _nc_save_str
char *_nc_save_str(
const char *const string)
TERMTYPE *const from)
{ /* void */ }
-/* ./captoinfo.c */
+/* ./tinfo/alloc_ttype.c */
+
+#undef _nc_align_termtype
+void _nc_align_termtype(
+ TERMTYPE *to,
+ TERMTYPE *from)
+ { /* void */ }
+
+#undef _nc_copy_termtype
+void _nc_copy_termtype(
+ TERMTYPE *dst,
+ TERMTYPE *src)
+ { /* void */ }
+
+/* ./tinfo/captoinfo.c */
#undef _nc_captoinfo
char *_nc_captoinfo(
#include <ncurses_cfg.h>
#undef _nc_info_hash_table
-const struct name_table_entry *const _nc_info_hash_table[991] = {0};
+const struct name_table_entry *const _nc_info_hash_table[995] = {0};
#undef _nc_cap_hash_table
-const struct name_table_entry *const _nc_cap_hash_table[991] = {0};
+const struct name_table_entry *const _nc_cap_hash_table[995] = {0};
#undef _nc_capalias_table
const struct alias _nc_capalias_table[] = {0};
#undef _nc_infoalias_table
bool termcap)
{ return(*(const struct name_table_entry **)0); }
-/* ./comp_error.c */
+#undef _nc_get_hash_table
+const struct name_table_entry *const *_nc_get_hash_table(
+ bool termcap)
+ { return(*(const struct name_table_entry **)0); }
+
+/* ./tinfo/comp_error.c */
#undef _nc_suppress_warnings
bool _nc_suppress_warnings;
...)
{ /* void */ }
-/* ./comp_expand.c */
+/* ./tinfo/comp_expand.c */
#undef _nc_tic_expand
char *_nc_tic_expand(
const char *srcp,
- bool tic_format)
+ bool tic_format,
+ int numbers)
{ return(*(char **)0); }
-/* ./comp_hash.c */
+/* ./tinfo/comp_hash.c */
#include <hashsize.h>
const struct name_table_entry *table)
{ return(*(struct name_table_entry const **)0); }
-/* ./comp_parse.c */
+/* ./tinfo/comp_parse.c */
+#undef _nc_check_termtype
+void (*_nc_check_termtype)(
+ TERMTYPE *p1);
#undef _nc_head
ENTRY *_nc_head;
#undef _nc_tail
int _nc_resolve_uses(void)
{ return(*(int *)0); }
-/* ./comp_scan.c */
+/* ./tinfo/comp_scan.c */
#undef _nc_syntax
int _nc_syntax;
char *buf)
{ /* void */ }
+/* ./tinfo/doalloc.c */
+
+#undef _nc_doalloc
+void *_nc_doalloc(
+ void *oldp,
+ size_t amount)
+ { return(*(void **)0); }
+
/* ./fallback.c */
#undef _nc_fallback
const char *name)
{ return(*(const TERMTYPE **)0); }
-/* ./lib_cur_term.c */
+/* ./tinfo/free_ttype.c */
-#undef cur_term
-TERMINAL *cur_term;
+#undef _nc_free_termtype
+void _nc_free_termtype(
+ TERMTYPE *ptr)
+ { /* void */ }
-#undef _nc_get_curterm
-int _nc_get_curterm(
- struct termios *buf)
+#undef _nc_user_definable
+bool _nc_user_definable;
+
+#undef use_extended_names
+int use_extended_names(
+ bool flag)
{ return(*(int *)0); }
-#undef _nc_set_curterm
-int _nc_set_curterm(
- struct termios *buf)
+/* ./tinfo/getenv_num.c */
+
+#undef _nc_getenv_num
+int _nc_getenv_num(
+ const char *name)
+ { return(*(int *)0); }
+
+/* ./tinfo/home_terminfo.c */
+
+#undef _nc_home_terminfo
+char *_nc_home_terminfo(void)
+ { return(*(char **)0); }
+
+/* ./tinfo/init_keytry.c */
+
+#if 0
+
+#include <init_keytry.h>
+
+#endif
+
+#undef _nc_tinfo_fkeysf
+struct tinfo_fkeys *_nc_tinfo_fkeysf(void)
+ { return(*(struct tinfo_fkeys **)0); }
+
+#undef _nc_init_keytry
+void _nc_init_keytry(void)
+ { /* void */ }
+
+/* ./tinfo/lib_acs.c */
+
+#undef acs_map
+chtype acs_map[128 ];
+
+#undef _nc_init_acs
+void _nc_init_acs(void)
+ { /* void */ }
+
+/* ./tinfo/lib_baudrate.c */
+
+#include <termcap.h>
+
+struct speed {
+ speed_t s;
+ int sp;
+};
+
+#undef _nc_baudrate
+int _nc_baudrate(
+ int OSpeed)
+ { return(*(int *)0); }
+
+#undef _nc_ospeed
+int _nc_ospeed(
+ int BaudRate)
+ { return(*(int *)0); }
+
+#undef baudrate
+int baudrate(void)
{ return(*(int *)0); }
+/* ./tinfo/lib_cur_term.c */
+
+#undef cur_term
+TERMINAL *cur_term;
+
#undef set_curterm
TERMINAL *set_curterm(
- TERMINAL *term)
+ TERMINAL *termp)
{ return(*(TERMINAL **)0); }
#undef del_curterm
int del_curterm(
- TERMINAL *term)
+ TERMINAL *termp)
{ return(*(int *)0); }
-/* ./lib_kernel.c */
+/* ./tinfo/lib_data.c */
-#undef napms
-int napms(
- int ms)
- { return(*(int *)0); }
+#undef stdscr
+WINDOW *stdscr;
+#undef curscr
+WINDOW *curscr;
+#undef newscr
+WINDOW *newscr;
+#undef _nc_screen_chain
+SCREEN *_nc_screen_chain;
+#undef SP
+SCREEN *SP;
-#undef reset_prog_mode
-int reset_prog_mode(void)
- { return(*(int *)0); }
+/* ./tinfo/lib_has_cap.c */
-#undef reset_shell_mode
-int reset_shell_mode(void)
- { return(*(int *)0); }
+#undef has_ic
+bool has_ic(void)
+ { return(*(bool *)0); }
+
+#undef has_il
+bool has_il(void)
+ { return(*(bool *)0); }
+
+/* ./tinfo/lib_kernel.c */
#undef erasechar
char erasechar(void)
int flushinp(void)
{ return(*(int *)0); }
-#undef savetty
-int savetty(void)
- { return(*(int *)0); }
-
-#undef resetty
-int resetty(void)
- { return(*(int *)0); }
-
/* ./lib_keyname.c */
#include <stdlib.h>
#include <string.h>
#include <curses.h>
-struct kn {
- const char *name;
- int code;
-};
-
-#undef key_names
-const struct kn key_names[] = {0};
+#undef _nc_key_names
+const struct kn _nc_key_names[] = {0};
#undef keyname
-const char *keyname(
+char *keyname(
int c)
- { return(*(const char **)0); }
+ { return(*(char **)0); }
-/* ./lib_options.c */
+/* ./tinfo/lib_longname.c */
-#undef has_ic
-int has_ic(void)
- { return(*(int *)0); }
+#undef longname
+char *longname(void)
+ { return(*(char **)0); }
-#undef has_il
-int has_il(void)
+/* ./tinfo/lib_napms.c */
+
+#undef napms
+int napms(
+ int ms)
{ return(*(int *)0); }
+/* ./tinfo/lib_options.c */
+
#undef idlok
int idlok(
WINDOW *win,
bool flag)
{ /* void */ }
-#undef clearok
-int clearok(
- WINDOW *win,
- bool flag)
- { return(*(int *)0); }
-
-#undef immedok
-void immedok(
- WINDOW *win,
- bool flag)
- { /* void */ }
-
-#undef leaveok
-int leaveok(
- WINDOW *win,
- bool flag)
- { return(*(int *)0); }
-
-#undef scrollok
-int scrollok(
- WINDOW *win,
- bool flag)
- { return(*(int *)0); }
-
#undef halfdelay
int halfdelay(
int t)
{ return(*(int *)0); }
#undef wtimeout
-int wtimeout(
+void wtimeout(
WINDOW *win,
int delay)
- { return(*(int *)0); }
+ { /* void */ }
#undef keypad
int keypad(
int keycode)
{ return(*(int *)0); }
-#if 0
-
-#include <keys.tries>
-
-#endif
-
#undef _nc_keypad
int _nc_keypad(
bool flag)
{ return(*(int *)0); }
-/* ./lib_raw.c */
+/* ./tinfo/lib_raw.c */
#undef raw
int raw(void)
int cbreak(void)
{ return(*(int *)0); }
-#undef echo
-int echo(void)
- { return(*(int *)0); }
-
-#undef nl
-int nl(void)
- { return(*(int *)0); }
-
#undef qiflush
-int qiflush(void)
- { return(*(int *)0); }
+void qiflush(void)
+ { /* void */ }
#undef noraw
int noraw(void)
int nocbreak(void)
{ return(*(int *)0); }
-#undef noecho
-int noecho(void)
- { return(*(int *)0); }
-
-#undef nonl
-int nonl(void)
- { return(*(int *)0); }
-
#undef noqiflush
-int noqiflush(void)
- { return(*(int *)0); }
+void noqiflush(void)
+ { /* void */ }
#undef intrflush
int intrflush(
bool flag)
{ return(*(int *)0); }
-/* ./lib_termcap.c */
+/* ./tinfo/lib_setup.c */
-#include <termcap.h>
+#include <sys/ioctl.h>
+
+#undef use_env
+void use_env(
+ bool f)
+ { /* void */ }
+
+#undef LINES
+int LINES;
+#undef COLS
+int COLS;
+#undef TABSIZE
+int TABSIZE;
+
+#undef _nc_update_screensize
+void _nc_update_screensize(void)
+ { /* void */ }
+
+#undef ttytype
+char ttytype[256 ];
+
+#undef setupterm
+int setupterm(
+ char *tname,
+ int Filedes,
+ int *errret)
+ { return(*(int *)0); }
+
+/* ./tinfo/lib_termcap.c */
-#undef PC
-char PC;
#undef UP
char *UP;
#undef BC
char *BC;
-#undef ospeed
-short ospeed;
#undef tgetent
int tgetent(
#undef tgetflag
int tgetflag(
- const char *id)
+ char *id)
{ return(*(int *)0); }
#undef tgetnum
int tgetnum(
- const char *id)
+ char *id)
{ return(*(int *)0); }
#undef tgetstr
char *tgetstr(
- const char *id,
+ char *id,
char **area)
{ return(*(char **)0); }
int y)
{ return(*(char **)0); }
-/* ./lib_ti.c */
+/* ./tinfo/lib_termname.c */
+
+#undef termname
+char *termname(void)
+ { return(*(char **)0); }
+
+/* ./tinfo/lib_ti.c */
#undef tigetflag
int tigetflag(
- const char *str)
+ char *str)
{ return(*(int *)0); }
#undef tigetnum
int tigetnum(
- const char *str)
+ char *str)
{ return(*(int *)0); }
#undef tigetstr
char *tigetstr(
- const char *str)
+ char *str)
{ return(*(char **)0); }
-/* ./lib_tparm.c */
+/* ./tinfo/lib_tparm.c */
typedef union {
unsigned int num;
#undef tparm
char *tparm(
- const char *string,
+ char *string,
...)
{ return(*(char **)0); }
-/* ./lib_tputs.c */
+/* ./tinfo/lib_tputs.c */
+#undef PC
+char PC;
+#undef ospeed
+speed_t ospeed;
#undef _nc_nulls_sent
int _nc_nulls_sent;
int p1))
{ return(*(int *)0); }
-/* ./lib_trace.c */
+/* ./trace/lib_trace.c */
#include <fcntl.h>
#undef _nc_tracing
unsigned _nc_tracing;
-#undef _nc_tputs_trace
-const char *_nc_tputs_trace = {0};
-#undef _nc_outchars
-long _nc_outchars;
-#undef _nc_optimize_enable
-int _nc_optimize_enable;
#undef trace
void trace(
const char *buf)
{ return(*(const char **)0); }
-#undef _tracef
-void _tracef(
- const char *fmt,
- ...)
- { /* void */ }
-
-#undef _nc_retrace_int
-int _nc_retrace_int(
- int code)
- { return(*(int *)0); }
+/* ./trace/lib_tracebits.c */
-#undef _nc_retrace_ptr
-char *_nc_retrace_ptr(
- char *code)
+#undef _nc_tracebits
+char *_nc_tracebits(void)
{ return(*(char **)0); }
-#undef _nc_retrace_win
-WINDOW *_nc_retrace_win(
- WINDOW *code)
- { return(*(WINDOW **)0); }
-
-/* ./lib_tracechr.c */
+/* ./trace/lib_tracechr.c */
#undef _tracechar
char *_tracechar(
const unsigned char ch)
{ return(*(char **)0); }
-/* ./lib_twait.c */
+/* ./tinfo/lib_ttyflags.c */
+
+#undef _nc_get_tty_mode
+int _nc_get_tty_mode(
+ struct termios *buf)
+ { return(*(int *)0); }
+
+#undef _nc_set_tty_mode
+int _nc_set_tty_mode(
+ struct termios *buf)
+ { return(*(int *)0); }
+
+#undef def_shell_mode
+int def_shell_mode(void)
+ { return(*(int *)0); }
+
+#undef def_prog_mode
+int def_prog_mode(void)
+ { return(*(int *)0); }
+
+#undef reset_prog_mode
+int reset_prog_mode(void)
+ { return(*(int *)0); }
+
+#undef reset_shell_mode
+int reset_shell_mode(void)
+ { return(*(int *)0); }
+
+#undef savetty
+int savetty(void)
+ { return(*(int *)0); }
+
+#undef resetty
+int resetty(void)
+ { return(*(int *)0); }
+
+/* ./tty/lib_twait.c */
#undef _nc_timed_wait
int _nc_timed_wait(
int *timeleft)
{ return(*(int *)0); }
-/* ./name_match.c */
+/* ./tinfo/name_match.c */
#undef _nc_first_name
char *_nc_first_name(
#undef strfnames
char *const strfnames[] = {0};
-/* ./parse_entry.c */
+/* ./tinfo/parse_entry.c */
#undef _nc_curr_token
struct token _nc_curr_token;
typedef struct {const char *from; const char *to;} assoc;
-/* ./read_entry.c */
+/* ./tinfo/read_entry.c */
#undef _nc_tic_dir
const char *_nc_tic_dir(
const char *path)
{ return(*(const char **)0); }
+#undef _nc_keep_tic_dir
+void _nc_keep_tic_dir(
+ const char *path)
+ { /* void */ }
+
#undef _nc_read_file_entry
int _nc_read_file_entry(
const char *const filename,
TERMTYPE *const tp)
{ return(*(int *)0); }
-/* ./read_termcap.c */
+/* ./tinfo/read_termcap.c */
-#undef _nc_read_termcap_entry
-int _nc_read_termcap_entry(
- const char *const tn,
- TERMTYPE *const tp)
- { return(*(int *)0); }
-
-/* ./lib_setup.c */
-
-#include <sys/ioctl.h>
-
-#undef use_env
-void use_env(
- bool f)
+#undef _nc_read_termcap
+void _nc_read_termcap(void)
{ /* void */ }
-#undef LINES
-int LINES;
-#undef COLS
-int COLS;
-#undef TABSIZE
-int TABSIZE;
+/* ./tinfo/setbuf.c */
-#undef _nc_update_screensize
-void _nc_update_screensize(void)
+#undef _nc_set_buffer
+void _nc_set_buffer(
+ FILE *ofp,
+ bool buffered)
{ /* void */ }
-#undef ttytype
-char ttytype[256 ];
+/* ./trace/trace_buf.c */
-#undef setupterm
-int setupterm(
- const char *tname,
- int Filedes,
- int *errret)
- { return(*(int *)0); }
-
-/* ./trace_buf.c */
+typedef struct {
+ char *text;
+ size_t size;
+} LIST;
#undef _nc_trace_buf
char *_nc_trace_buf(
size_t want)
{ return(*(char **)0); }
-/* ./tries.c */
+/* ./trace/trace_tries.c */
-#undef _nc_add_to_try
-void _nc_add_to_try(
- struct tries **tree,
- char *str,
- unsigned short code)
+#undef _nc_trace_tries
+void _nc_trace_tries(
+ struct tries *tree)
{ /* void */ }
-#undef _nc_expand_try
-char *_nc_expand_try(
- struct tries *tree,
- unsigned short code,
- size_t len)
- { return(*(char **)0); }
-
-#undef _nc_remove_key
-int _nc_remove_key(
- struct tries **tree,
- unsigned short code)
- { return(*(int *)0); }
-
/* ./unctrl.c */
#undef unctrl
char *unctrl(
chtype ch)
{ return(*(char **)0); }
+
+/* ./tinfo/write_entry.c */
+
+#undef _nc_set_writedir
+void _nc_set_writedir(
+ char *dir)
+ { /* void */ }
+
+#undef _nc_write_entry
+void _nc_write_entry(
+ TERMTYPE *const tp)
+ { /* void */ }
+
+#undef _nc_tic_written
+int _nc_tic_written(void)
+ { return(*(int *)0); }
-# $Id: modules,v 1.42 1998/02/11 12:13:57 tom Exp $
+# $Id: modules,v 1.70 1999/10/23 12:39:12 tom Exp $
##############################################################################
-# Copyright (c) 1998 Free Software Foundation, Inc. #
+# Copyright (c) 1998,1999 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"), #
# authorization. #
##############################################################################
#
-# Author: Thomas E. Dickey <dickey@clark.net> 1996,1997
+# Author: Thomas E. Dickey <dickey@clark.net> 1996,1997,1998
#
@ base
# Library objects
-hardscroll lib $(srcdir)
-hashmap lib $(srcdir)
-lib_acs lib $(srcdir) ../include/term.h
-lib_addch lib $(srcdir)
-lib_addstr lib $(srcdir)
-lib_baudrate lib $(srcdir) ../include/term.h
-lib_beep lib $(srcdir) ../include/term.h
-lib_bkgd lib $(srcdir)
-lib_box lib $(srcdir)
-lib_chgat lib $(srcdir)
-lib_clear lib $(srcdir)
-lib_clearok lib $(srcdir)
-lib_clrbot lib $(srcdir)
-lib_clreol lib $(srcdir)
-lib_color lib $(srcdir) ../include/term.h
-lib_data lib $(srcdir)
-lib_delch lib $(srcdir)
-lib_delwin lib $(srcdir)
-lib_doupdate lib $(srcdir) ../include/term.h
-lib_echo lib $(srcdir)
-lib_endwin lib $(srcdir)
-lib_erase lib $(srcdir)
-lib_flash lib $(srcdir) ../include/term.h
+hardscroll lib $(serial)
+hashmap lib $(serial) ../include/term.h
+lib_addch lib $(base)
+lib_addstr lib $(base)
+lib_beep lib $(base) ../include/term.h
+lib_bkgd lib $(base)
+lib_box lib $(base)
+lib_chgat lib $(base)
+lib_clear lib $(base)
+lib_clearok lib $(base)
+lib_clrbot lib $(base)
+lib_clreol lib $(base)
+lib_color lib $(base) ../include/term.h
+lib_colorset lib $(base)
+lib_delch lib $(base)
+lib_delwin lib $(base)
+lib_echo lib $(base)
+lib_endwin lib $(base) ../include/term.h
+lib_erase lib $(base)
+lib_flash lib $(base) ../include/term.h
lib_gen lib . ../include/curses.h
-lib_getch lib $(srcdir)
-lib_getstr lib $(srcdir) ../include/term.h
-lib_hline lib $(srcdir)
-lib_immedok lib $(srcdir)
-lib_inchstr lib $(srcdir)
-lib_initscr lib $(srcdir)
-lib_insch lib $(srcdir)
-lib_insdel lib $(srcdir)
-lib_insstr lib $(srcdir)
-lib_instr lib $(srcdir)
-lib_isendwin lib $(srcdir)
-lib_leaveok lib $(srcdir)
-lib_longname lib $(srcdir)
-lib_mouse lib $(srcdir) ../include/term.h
-lib_move lib $(srcdir)
-lib_mvcur lib $(srcdir) ../include/term.h
-lib_mvwin lib $(srcdir)
-lib_napms lib $(srcdir)
-lib_newterm lib $(srcdir) ../include/term.h
-lib_newwin lib $(srcdir)
-lib_nl lib $(srcdir)
-lib_overlay lib $(srcdir)
-lib_pad lib $(srcdir)
-lib_print lib $(srcdir) ../include/term.h
-lib_printw lib $(srcdir)
-lib_redrawln lib $(srcdir)
-lib_refresh lib $(srcdir)
-lib_restart lib $(srcdir)
-lib_scanw lib $(srcdir)
-lib_screen lib $(srcdir) ../include/term.h
-lib_scroll lib $(srcdir)
-lib_scrollok lib $(srcdir)
-lib_scrreg lib $(srcdir)
-lib_set_term lib $(srcdir) ../include/term.h
-lib_slk lib $(srcdir) ../include/term.h
-lib_slkatrof lib $(srcdir)
-lib_slkatron lib $(srcdir)
-lib_slkatrset lib $(srcdir)
-lib_slkattr lib $(srcdir)
-lib_slkclear lib $(srcdir)
-lib_slkinit lib $(srcdir)
-lib_slklab lib $(srcdir)
-lib_slkrefr lib $(srcdir) ../include/term.h
-lib_slkset lib $(srcdir)
-lib_slktouch lib $(srcdir)
-lib_touch lib $(srcdir)
-lib_traceatr lib $(srcdir)
-lib_tracedmp lib $(srcdir)
-lib_tracemse lib $(srcdir)
-lib_tstp lib $(srcdir)
-lib_ungetch lib $(srcdir)
-lib_vidattr lib $(srcdir) ../include/term.h
-lib_vline lib $(srcdir)
-lib_wattroff lib $(srcdir)
-lib_wattron lib $(srcdir)
-lib_window lib $(srcdir)
-nc_panel lib $(srcdir)
-safe_sprintf lib $(srcdir)
-write_entry lib $(srcdir) ../include/term.h $(INCDIR)/tic.h
+lib_getch lib $(base)
+lib_getstr lib $(base) ../include/term.h
+lib_hline lib $(base)
+lib_immedok lib $(base)
+lib_inchstr lib $(base)
+lib_initscr lib $(base) $(INCDIR)/tic.h
+lib_insch lib $(base)
+lib_insdel lib $(base)
+lib_insstr lib $(base)
+lib_instr lib $(base)
+lib_isendwin lib $(base)
+lib_leaveok lib $(base)
+lib_mouse lib $(base) ../include/term.h
+lib_move lib $(base)
+lib_mvcur lib $(serial) ../include/term.h $(INCDIR)/tic.h
+lib_mvwin lib $(base)
+lib_newterm lib $(base) ../include/term.h
+lib_newwin lib $(base)
+lib_nl lib $(base)
+lib_overlay lib $(base)
+lib_pad lib $(base)
+lib_printw lib $(base)
+lib_redrawln lib $(base)
+lib_refresh lib $(base)
+lib_restart lib $(base) ../include/term.h
+lib_scanw lib $(base)
+lib_screen lib $(base) ../include/term.h
+lib_scroll lib $(base)
+lib_scrollok lib $(base)
+lib_scrreg lib $(base)
+lib_set_term lib $(base) ../include/term.h
+lib_slk lib $(base) ../include/term.h
+lib_slkatr_set lib $(base)
+lib_slkatrof lib $(base)
+lib_slkatron lib $(base)
+lib_slkatrset lib $(base)
+lib_slkattr lib $(base)
+lib_slkclear lib $(base)
+lib_slkcolor lib $(base)
+lib_slkinit lib $(base)
+lib_slklab lib $(base)
+lib_slkrefr lib $(base) ../include/term.h
+lib_slkset lib $(base)
+lib_slktouch lib $(base)
+lib_touch lib $(base)
+lib_traceatr lib $(trace) ../include/term.h
+lib_tracedmp lib $(trace)
+lib_tracemse lib $(trace)
+lib_tstp lib $(serial)
+lib_ungetch lib $(base)
+lib_vidattr lib $(serial) ../include/term.h
+lib_vline lib $(base)
+lib_wattroff lib $(base)
+lib_wattron lib $(base)
+lib_winch lib $(base)
+lib_window lib $(base)
+nc_panel lib $(base)
+safe_sprintf lib $(base)
+tty_update lib $(serial) ../include/term.h
# Modules for porting
-sigaction lib $(srcdir)
-vsscanf lib $(srcdir)
+memmove lib $(base)
+sigaction lib $(base)
+vsscanf lib $(base)
# Extensions to the base library
@ ext_funcs
-define_key lib $(srcdir)
+define_key lib $(base)
expanded lib .
-keyok lib $(srcdir)
-lib_adabind lib $(srcdir)
-lib_dft_fgbg lib $(srcdir)
-lib_freeall lib $(srcdir)
-resizeterm lib $(srcdir) ../include/term.h
-softscroll lib $(srcdir)
-wresize lib $(srcdir) ../include/term.h
+keybound lib $(base)
+keyok lib $(base)
+lib_dft_fgbg lib $(base) ../include/term.h
+lib_freeall lib $(base)
+lib_print lib $(tinfo) ../include/term.h
+resizeterm lib $(base) ../include/term.h
+trace_xnames lib $(trace) ../include/term.h $(INCDIR)/term_entry.h
+tries lib $(base)
+version lib $(base)
+wresize lib $(base) ../include/term.h
# Support for termcap (and tic, etc.), which can be a separate library
@ termlib
-alloc_entry lib $(srcdir) ../include/term.h
-captoinfo lib $(srcdir)
+access lib $(tinfo)
+add_tries lib $(tinfo)
+alloc_entry lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+alloc_ttype lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+captoinfo lib $(tinfo) $(INCDIR)/tic.h
codes lib .
-comp_captab lib . ../include/term.h ../include/hashsize.h
-comp_error lib $(srcdir)
-comp_expand lib $(srcdir) $(INCDIR)/tic.h
-comp_hash lib $(srcdir) ../include/term.h ../include/hashsize.h
-comp_parse lib $(srcdir) ../include/term.h $(INCDIR)/tic.h
-comp_scan lib $(srcdir)
+comp_captab lib . $(INCDIR)/tic.h ../include/term.h ../include/hashsize.h
+comp_error lib $(tinfo) $(INCDIR)/tic.h
+comp_expand lib $(tinfo) $(INCDIR)/tic.h
+comp_hash lib $(tinfo) ../include/term.h $(INCDIR)/tic.h ../include/hashsize.h
+comp_parse lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+comp_scan lib $(tinfo) $(INCDIR)/tic.h
+doalloc lib $(tinfo)
fallback lib . ../include/term.h $(INCDIR)/tic.h
-lib_cur_term lib $(srcdir)
-lib_kernel lib $(srcdir) ../include/term.h
+free_ttype lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+getenv_num lib $(tinfo)
+home_terminfo lib $(tinfo)
+init_keytry lib $(tinfo) ../include/term.h $(INCDIR)/tic.h init_keytry.h
+lib_acs lib $(tinfo) ../include/term.h
+lib_baudrate lib $(tinfo) ../include/term.h
+lib_cur_term lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h
+lib_data lib $(tinfo)
+lib_has_cap lib $(tinfo) ../include/term.h
+lib_kernel lib $(tinfo) ../include/term.h
lib_keyname lib . ../include/term.h
-lib_options lib $(srcdir) ../include/term.h keys.tries
-lib_raw lib $(srcdir) ../include/term.h
-lib_termcap lib $(srcdir) ../include/term.h
-lib_ti lib $(srcdir) ../include/term.h
-lib_tparm lib $(srcdir) ../include/term.h
-lib_tputs lib $(srcdir) ../include/term.h
-lib_trace lib $(srcdir)
-lib_tracechr lib $(srcdir)
-lib_twait lib $(srcdir)
-name_match lib $(srcdir) ../include/term.h $(INCDIR)/tic.h
+lib_longname lib $(tinfo)
+lib_napms lib $(tinfo)
+lib_options lib $(tinfo) ../include/term.h
+lib_raw lib $(tinfo) ../include/term.h
+lib_setup lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h
+lib_termcap lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+lib_termname lib $(tinfo) $(INCDIR)/tic.h
+lib_ti lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+lib_tparm lib $(tinfo) ../include/term.h $(INCDIR)/tic.h
+lib_tputs lib $(tinfo) ../include/term.h $(INCDIR)/tic.h
+lib_trace lib $(trace) $(INCDIR)/tic.h
+lib_tracebits lib $(trace) ../include/term.h
+lib_tracechr lib $(trace)
+lib_ttyflags lib $(tinfo) ../include/term.h
+lib_twait lib $(serial)
+name_match lib $(tinfo) ../include/term.h $(INCDIR)/tic.h
names lib .
-parse_entry lib $(srcdir) ../include/term.h ../include/parametrized.h
-read_entry lib $(srcdir) ../include/term.h $(INCDIR)/tic.h
-read_termcap lib $(srcdir) ../include/term.h
-lib_setup lib $(srcdir) ../include/term.h
-trace_buf lib $(srcdir)
-tries lib $(srcdir)
+parse_entry lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h ../include/parametrized.h
+read_entry lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+read_termcap lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+setbuf lib $(tinfo)
+trace_buf lib $(trace)
+trace_tries lib $(trace)
unctrl lib .
+write_entry lib $(tinfo) ../include/term.h $(INCDIR)/term_entry.h $(INCDIR)/tic.h
+++ /dev/null
-/****************************************************************************
- * Copyright (c) 1998 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. *
- ****************************************************************************/
-
-/****************************************************************************
- * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
- * and: Eric S. Raymond <esr@snark.thyrsus.com> *
- ****************************************************************************/
-
-
-
-/*
- * read_entry.c -- Routine for reading in a compiled terminfo file
- *
- */
-
-#include <curses.priv.h>
-
-#if HAVE_FCNTL_H
-#include <fcntl.h>
-#endif
-#include <sys/stat.h>
-
-#include <term.h>
-#include <tic.h>
-
-MODULE_ID("$Id: read_entry.c,v 1.35 1998/02/11 12:13:59 tom Exp $")
-
-#ifndef O_BINARY
-#define O_BINARY 0
-#endif
-
-/*
- * int
- * _nc_read_file_entry(filename, ptr)
- *
- * Read the compiled terminfo entry in the given file into the
- * structure pointed to by ptr, allocating space for the string
- * table.
- */
-
-#undef BYTE
-#define BYTE(p,n) (unsigned char)((p)[n])
-
-#define IS_NEG1(p) ((BYTE(p,0) == 0377) && (BYTE(p,1) == 0377))
-#define IS_NEG2(p) ((BYTE(p,0) == 0376) && (BYTE(p,1) == 0377))
-#define LOW_MSB(p) (BYTE(p,0) + 256*BYTE(p,1))
-
-static bool have_tic_directory = FALSE;
-
-/*
- * Record the "official" location of the terminfo directory, according to
- * the place where we're writing to, or the normal default, if not.
- */
-const char *_nc_tic_dir(const char *path)
-{
- static const char *result = TERMINFO;
-
- if (path != 0) {
- result = path;
- have_tic_directory = TRUE;
- } else if (!have_tic_directory) {
- char *envp;
- if ((envp = getenv("TERMINFO")) != 0)
- return _nc_tic_dir(envp);
- }
- return result;
-}
-
-int _nc_read_file_entry(const char *const filename, TERMTYPE *ptr)
-/* return 1 if read, 0 if not found or garbled */
-{
- int name_size, bool_count, num_count, str_count, str_size;
- int i, fd, numread;
- char buf[MAX_ENTRY_SIZE];
-
- if ((fd = open(filename, O_RDONLY|O_BINARY)) < 0)
- return(0);
-
- T(("read terminfo %s", filename));
-
- /* grab the header */
- (void) read(fd, buf, 12);
- if (LOW_MSB(buf) != MAGIC)
- {
- close(fd);
- return(0);
- }
- name_size = LOW_MSB(buf + 2);
- bool_count = LOW_MSB(buf + 4);
- num_count = LOW_MSB(buf + 6);
- str_count = LOW_MSB(buf + 8);
- str_size = LOW_MSB(buf + 10);
-
- if (str_size)
- {
- /* try to allocate space for the string table */
- ptr->str_table = malloc((unsigned)str_size);
- if (ptr->str_table == 0)
- {
- close(fd);
- return(0);
- }
- }
-
- /* grab the name */
- read(fd, buf, min(MAX_NAME_SIZE, (unsigned)name_size));
- buf[MAX_NAME_SIZE] = '\0';
- ptr->term_names = calloc(strlen(buf) + 1, sizeof(char));
- (void) strcpy(ptr->term_names, buf);
- if (name_size > MAX_NAME_SIZE)
- lseek(fd, (off_t) (name_size - MAX_NAME_SIZE), 1);
-
- /* grab the booleans */
- read(fd, ptr->Booleans, min(BOOLCOUNT, (unsigned)bool_count));
- if (bool_count > BOOLCOUNT)
- lseek(fd, (off_t) (bool_count - BOOLCOUNT), 1);
- else
- for (i=bool_count; i < BOOLCOUNT; i++)
- ptr->Booleans[i] = 0;
-
- /*
- * If booleans end on an odd byte, skip it. The machine they
- * originally wrote terminfo on must have been a 16-bit
- * word-oriented machine that would trap out if you tried a
- * word access off a 2-byte boundary.
- */
- if ((name_size + bool_count) % 2 != 0)
- read(fd, buf, 1);
-
- /* grab the numbers */
- (void) read(fd, buf, min(NUMCOUNT*2, (unsigned)num_count*2));
- for (i = 0; i < min(num_count, NUMCOUNT); i++)
- {
- if (IS_NEG1(buf + 2*i))
- ptr->Numbers[i] = ABSENT_NUMERIC;
- else if (IS_NEG2(buf + 2*i))
- ptr->Numbers[i] = CANCELLED_NUMERIC;
- else
- ptr->Numbers[i] = LOW_MSB(buf + 2*i);
- }
- if (num_count > NUMCOUNT)
- lseek(fd, (off_t) (2 * (num_count - NUMCOUNT)), 1);
- else
- for (i=num_count; i < NUMCOUNT; i++)
- ptr->Numbers[i] = ABSENT_NUMERIC;
-
- if (str_count)
- {
- if (str_count*2 >= MAX_ENTRY_SIZE)
- {
- close(fd);
- return(0);
- }
- /* grab the string offsets */
- numread = read(fd, buf, (unsigned)(str_count*2));
- if (numread < str_count*2)
- {
- close(fd);
- return(0);
- }
- for (i = 0; i < numread/2; i++)
- {
- if (i >= STRCOUNT)
- break;
- if (IS_NEG1(buf + 2*i))
- ptr->Strings[i] = ABSENT_STRING;
- else if (IS_NEG2(buf + 2*i))
- ptr->Strings[i] = CANCELLED_STRING;
- else
- ptr->Strings[i] = (LOW_MSB(buf+2*i) + ptr->str_table);
- }
- }
-
- if (str_count > STRCOUNT)
- lseek(fd, (off_t) (2 * (str_count - STRCOUNT)), 1);
- else
- for (i = str_count; i < STRCOUNT; i++)
- ptr->Strings[i] = ABSENT_STRING;
-
- if (str_size)
- {
- /* finally, grab the string table itself */
- numread = read(fd, ptr->str_table, (unsigned)str_size);
- if (numread != str_size)
- {
- close(fd);
- return(0);
- }
- }
-
- close(fd);
- return(1);
-}
-
-/*
- * Build a terminfo pathname and try to read the data. Returns 1 on success,
- * 0 on failure.
- */
-static int _nc_read_tic_entry(char *const filename,
- const char *const dir, const char *ttn, TERMTYPE *const tp)
-{
-/* maximum safe length of terminfo root directory name */
-#define MAX_TPATH (PATH_MAX - MAX_ALIAS - 6)
-
- if (strlen(dir) > MAX_TPATH)
- return 0;
- (void) sprintf(filename, "%s/%s", dir, ttn);
- return _nc_read_file_entry(filename, tp);
-}
-
-/*
- * _nc_read_entry(char *tn, char *filename, TERMTYPE *tp)
- *
- * Find and read the compiled entry for a given terminal type,
- * if it exists. We take pains here to make sure no combination
- * of environment variables and terminal type name can be used to
- * overrun the file buffer.
- */
-
-int _nc_read_entry(const char *const tn, char *const filename, TERMTYPE *const tp)
-{
-char *envp;
-char ttn[MAX_ALIAS + 3];
-
- /* truncate the terminal name to prevent dangerous buffer airline */
- (void) sprintf(ttn, "%c/%.*s", *tn, MAX_ALIAS, tn);
-
- /* This is System V behavior, in conjunction with our requirements for
- * writing terminfo entries.
- */
- if (have_tic_directory
- && _nc_read_tic_entry(filename, _nc_tic_dir(0), ttn, tp) == 1)
- return 1;
-
- if ((envp = getenv("TERMINFO")) != 0
- && _nc_read_tic_entry(filename, _nc_tic_dir(envp), ttn, tp) == 1)
- return 1;
-
- /* this is an ncurses extension */
- if ((envp = getenv("HOME")) != 0)
- {
- char *home = malloc(strlen(envp) + strlen(PRIVATE_INFO) + 2);
-
- (void) sprintf(home, PRIVATE_INFO, envp);
- if (_nc_read_tic_entry(filename, home, ttn, tp) == 1) {
- free(home);
- return(1);
- }
- free(home);
- }
-
- /* this is an ncurses extension */
- if ((envp = getenv("TERMINFO_DIRS")) != 0)
- {
- /* strtok modifies its argument, so we must copy */
- char *list = strcpy(malloc(strlen(envp)+1), envp);
- const char *cp = strtok(list, ":");
- int code = 0;
-
- do {
- if (cp[0] == '\0')
- cp = TERMINFO;
- if (_nc_read_tic_entry(filename, cp, ttn, tp) == 1) {
- code = 1;
- break;
- }
- } while
- ((cp = strtok((char *)0, ":")) != 0);
-
- free(list);
- return(code);
- }
-
- /* try the system directory */
- return(_nc_read_tic_entry(filename, TERMINFO, ttn, tp));
-}
-
+++ /dev/null
-/****************************************************************************
- * Copyright (c) 1998 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. *
- ****************************************************************************/
-
-/****************************************************************************
- * Author: Thomas E. Dickey <dickey@clark.net> 1997 *
- ****************************************************************************/
-#include <curses.priv.h>
-#include <term.h>
-
-MODULE_ID("$Id: softscroll.c,v 1.6 1998/02/11 12:13:56 tom Exp $")
-
-/*
- * Compute indices for the given WINDOW, preparing it for scrolling.
- *
- * TODO (this implementation is only for proof-of-concept)
- * (a) ensure that curscr's oldindex values are cached properly so we
- * don't have to recompute them on each pass.
- * (b) investigate if there are gains to be made by iterating newscr's
- * row indices outward from the current position, rather than by
- * all rows.
- */
-static void compute_curscr(void)
-{
- int y, x, z;
- for (y = 0; y < screen_lines; y++) {
- struct ldat *nline = &curscr->_line[y];
- int found = y;
- for (z = 0; z < y; z++) {
- int same = TRUE;
- struct ldat *oline = &curscr->_line[z];
- for (x = 0; x < screen_columns; x++) {
- if (nline->text[x] != oline->text[x]) {
- same = FALSE;
- break;
- }
- }
- if (same) {
- found = z;
- break;
- }
- }
- nline->oldindex = found;
- }
-}
-
-static void compute_newscr(void)
-{
- int y, x, z;
- for (y = 0; y < screen_lines; y++) {
- struct ldat *nline = &newscr->_line[y];
- int found = _NEWINDEX;
- for (z = 0; z < screen_lines; z++) {
- int same = TRUE;
- struct ldat *oline = &curscr->_line[z];
- for (x = 0; x < screen_columns; x++) {
- if (nline->text[x] != oline->text[x]) {
- same = FALSE;
- break;
- }
- }
- if (same) {
- found = z;
- break;
- }
- }
- nline->oldindex = found;
- }
-}
-
-void
-_nc_setup_scroll(void)
-{
-#ifdef TRACE
- if (_nc_tracing & TRACE_UPDATE) {
- _tracef("_nc_setup_scroll");
- _nc_linedump();
- }
-#endif /* TRACE */
- compute_curscr();
- compute_newscr();
-#ifdef TRACE
- if (_nc_tracing & TRACE_UPDATE) {
- _tracef("..._nc_setup_scroll");
- _nc_linedump();
- }
-#endif
-}
-
-#define MINDISP 2
-#define NEWNUM(n) newscr->_line[n].oldindex
-#define OLDNUM(n) curscr->_line[n].oldindex
-
-/*
- * This performs essentially the same function as _nc_scroll_optimize(), but
- * uses different assumptions about the .oldindex values. More than one line
- * may have the same .oldindex value. We don't assume the values are ordered.
- *
- * (Neither algorithm takes into account the cost of constructing the lines
- * which are scrolled)
- */
-void
-_nc_perform_scroll(void)
-{
- int disp;
- int row;
- int top, bottom, maxdisp;
- int partial;
-
- /*
- * Find the top/bottom lines that are different between curscr and
- * newscr, limited by the terminal's ability to scroll portions of the
- * screen.
- *
- * FIXME: this doesn't account for special cases of insert/delete line.
- */
- if (change_scroll_region
- && (scroll_forward || parm_index)
- && (scroll_reverse || parm_rindex)) {
- partial = TRUE;
- for (row = 0, top = -1; row < screen_lines; row++) {
- if (OLDNUM(row) != NEWNUM(row)) {
- break;
- }
- top = row;
- }
- top++;
-
- for (row = screen_lines-1, bottom = screen_lines; row >= 0; row--) {
- if (OLDNUM(row) != NEWNUM(row)) {
- break;
- }
- bottom = row;
- }
- bottom--;
- } else {
- partial = FALSE;
- top = 0;
- bottom = screen_lines - 1;
- }
-
- maxdisp = (bottom - top + 1) / 2;
- if (maxdisp < MINDISP)
- return;
-
- T(("_nc_perform_scroll %d..%d (maxdisp=%d)", top, bottom, maxdisp));
-
- for (disp = 1; disp < maxdisp; disp++) {
- int n;
- int fn, fwd = 0;
- int bn, bak = 0;
- int first, last;
- int moved;
-
- do {
- /* check for forward-movement */
- for (fn = top + disp; fn < screen_lines - disp; fn++) {
- int eql = 0;
- for (n = fn, fwd = 0; n < screen_lines; n++) {
- if (NEWNUM(n) == _NEWINDEX
- || NEWNUM(n) != OLDNUM(n-disp))
- break;
- fwd++;
- if (OLDNUM(n) == NEWNUM(n))
- eql++;
- }
- if (eql == fwd)
- fwd = 0;
- if (fwd >= disp)
- break;
- fwd = 0;
- }
-
- /* check for backward-movement */
- for (bn = top + disp; bn < screen_lines - disp; bn++) {
- int eql = 0;
- for (n = bn, bak = 0; n < screen_lines; n++) {
- if (OLDNUM(n) == _NEWINDEX
- || OLDNUM(n) != NEWNUM(n-disp))
- break;
- bak++;
- if (OLDNUM(n-disp) == NEWNUM(n-disp))
- eql++;
- }
- if (eql == bak)
- bak = 0;
- if (bak >= disp)
- break;
- bak = 0;
- }
-
- /* choose only one, in case they overlap */
- if (fwd > bak) {
- first = fn - disp;
- last = fn + fwd - 1;
- moved = -disp;
- } else if (bak) {
- first = bn - disp;
- last = bn + bak - 1;
- moved = disp;
- } else {
- break;
- }
-
- TR(TRACE_UPDATE | TRACE_MOVE, ("scroll [%d, %d] by %d", first, last, moved));
- if (_nc_scrolln(moved, first, last, screen_lines - 1) == ERR)
- {
- TR(TRACE_UPDATE | TRACE_MOVE, ("unable to scroll"));
- break;
- }
-
- /* If the scrolled text was at one end of the range
- * of changed lines, adjust the loop limits.
- */
- if (first == top)
- top = last + 1;
- if (last == bottom)
- bottom = first - 1;
-
- maxdisp = (bottom - top + 1) / 2;
- if (maxdisp < MINDISP)
- return;
-
- /* In any case, mark the lines so we don't try to
- * use them in a subsequent scroll.
- */
- for (fn = first; fn <= last; fn++) {
- OLDNUM(fn) =
- NEWNUM(fn) = _NEWINDEX;
- }
- } while (partial);
- }
-}
#!/bin/sh
-# $Id: MKcaptab.awk,v 1.10 1997/09/11 17:40:46 tom Exp $
+# $Id: MKcaptab.awk,v 1.11 1999/01/24 02:46:42 Jeffrey.C.Honig Exp $
AWK=${1-awk}
DATA=${2-../include/Caps}
{
return termcap ? _nc_cap_table: _nc_info_table ;
}
+
+const struct name_table_entry * const * _nc_get_hash_table(bool termcap)
+{
+ return termcap ? _nc_cap_hash_table: _nc_info_hash_table ;
+}
EOF
#!/bin/sh
-# $Id: MKfallback.sh,v 1.8 1996/09/15 01:44:13 tom Exp $
+# $Id: MKfallback.sh,v 1.9 1999/06/15 22:57:45 tom Exp $
#
# MKfallback.sh -- create fallback table for entry reads
#
#include <tic.h>
/* fallback entries for: $* */
+EOF
+ for x in $*
+ do
+ echo "/* $x */"
+ infocmp -E $x
+ done
+ cat <<EOF
static const TERMTYPE fallbacks[$#] =
{
EOF
-# $Id: MKnames.awk,v 1.9 1997/10/18 19:57:23 tom Exp $
+# $Id: MKnames.awk,v 1.10 1999/01/16 23:36:34 tom Exp $
BEGIN {
print "/* This file was generated by MKnames.awk */" > "namehdr"
print "" > "namehdr"
print "#include <curses.priv.h>" > "namehdr"
print "" > "namehdr"
- print "#ifdef __cplusplus" > "namehdr"
- print "#define extern IT NCURSES_CONST char * const" > "namehdr"
- print "#else" > "namehdr"
print "#define IT NCURSES_CONST char * const" > "namehdr"
- print "#endif" > "namehdr"
print "" > "namehdr"
print "#if BROKEN_LINKER" > "namehdr"
print "#include <term.h>" > "namehdr"
--- /dev/null
+-- $Id: README,v 1.1 1998/11/07 22:59:07 tom Exp $
+
+The files in this directory (tinfo) are those that support the terminfo
+database and interfaces for ncurses. The terminfo library can be built
+separately, as a lower-level library for ncurses, but usually is bundled.
+
+In addition to the standard documented interfaces, ncurses uses internal
+functions which reside in tinfo to satisfy linkage requirements.
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998 *
+ ****************************************************************************/
+
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: access.c,v 1.1 1998/07/25 20:17:09 tom Exp $")
+
+int _nc_access(const char *path, int mode)
+{
+ if (access(path, mode) < 0) {
+ if ((mode & W_OK) != 0
+ && errno == ENOENT) {
+ char head[PATH_MAX];
+ char *leaf = strrchr(strcpy(head, path), '/');
+ if (leaf == 0)
+ leaf = head;
+ *leaf = '\0';
+ if (head == leaf)
+ (void)strcpy(head, ".");
+ return access(head, R_OK|W_OK|X_OK);
+ }
+ return -1;
+ }
+ return 0;
+}
****************************************************************************/
/****************************************************************************
- * Author: Thomas E. Dickey <dickey@clark.net> 1997 *
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998 *
****************************************************************************/
/*
-** tries.c
+** add_tries.c
**
-** Functions to manage the tree of partial-completions for keycodes.
+** Add keycode/string to tries-tree.
**
*/
#include <curses.priv.h>
-MODULE_ID("$Id: tries.c,v 1.7 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: add_tries.c,v 1.1 1998/11/08 00:04:18 tom Exp $")
#define SET_TRY(dst,src) if ((dst->ch = *src++) == 128) dst->ch = '\0'
#define CMP_TRY(a,b) ((a)? (a == b) : (b == 128))
ptr->value = code;
return;
}
-
-/*
- * Expand a keycode into the string that it corresponds to, returning null if
- * no match was found, otherwise allocating a string of the result.
- */
-char *_nc_expand_try(struct tries *tree, unsigned short code, size_t len)
-{
- struct tries *ptr = tree;
- char *result = 0;
-
- if (code != 0) {
- while (ptr != 0) {
- if ((result = _nc_expand_try(ptr->child, code, len + 1)) != 0) {
- break;
- }
- if (ptr->value == code) {
- result = typeCalloc(char, len+2);
- break;
- }
- ptr = ptr->sibling;
- }
- }
- if (result != 0) {
- if ((result[len] = ptr->ch) == 0)
- *((unsigned char *)(result+len)) = 128;
-#ifdef TRACE
- if (len == 0)
- _tracef("expand_key %s %s", _trace_key(code), _nc_visbuf(result));
-#endif
- }
- return result;
-}
-
-/*
- * Remove a code from the specified tree, freeing the unused nodes. Returns
- * true if the code was found/removed.
- */
-int _nc_remove_key(struct tries **tree, unsigned short code)
-{
- if (code == 0)
- return FALSE;
-
- while (*tree != 0) {
- if (_nc_remove_key(&(*tree)->child, code)) {
- return TRUE;
- }
- if ((*tree)->value == code) {
- if((*tree)->child) {
- /* don't cut the whole sub-tree */
- (*tree)->value = 0;
- } else {
- struct tries *to_free = *tree;
- *tree = (*tree)->sibling;
- free(to_free);
- }
- return TRUE;
- }
- tree = &(*tree)->sibling;
- }
- return FALSE;
-}
/*
* alloc_entry.c -- allocation functions for terminfo entries
*
+ * _nc_copy_entry()
* _nc_init_entry()
+ * _nc_merge_entry()
* _nc_save_str()
- * _nc_merge_entry();
- * _nc_wrap_entry();
+ * _nc_wrap_entry()
*
*/
#include <curses.priv.h>
#include <tic.h>
-#include <term.h>
#include <term_entry.h>
-MODULE_ID("$Id: alloc_entry.c,v 1.13 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: alloc_entry.c,v 1.30 1999/03/01 02:03:45 tom Exp $")
+
+#define ABSENT_OFFSET -1
+#define CANCELLED_OFFSET -2
#define MAX_STRTAB 4096 /* documented maximum entry size */
{
int i;
- for (i=0; i < BOOLCOUNT; i++)
- tp->Booleans[i] = FALSE;
+#if NCURSES_XNAMES
+ tp->num_Booleans = BOOLCOUNT;
+ tp->num_Numbers = NUMCOUNT;
+ tp->num_Strings = STRCOUNT;
+ tp->ext_Booleans = 0;
+ tp->ext_Numbers = 0;
+ tp->ext_Strings = 0;
+#endif
+ if (tp->Booleans == 0)
+ tp->Booleans = typeMalloc(char,BOOLCOUNT);
+ if (tp->Numbers == 0)
+ tp->Numbers = typeMalloc(short,NUMCOUNT);
+ if (tp->Strings == 0)
+ tp->Strings = typeMalloc(char *,STRCOUNT);
+
+ for_each_boolean(i,tp)
+ tp->Booleans[i] = FALSE;
+
+ for_each_number(i,tp)
+ tp->Numbers[i] = ABSENT_NUMERIC;
+
+ for_each_string(i,tp)
+ tp->Strings[i] = ABSENT_STRING;
- for (i=0; i < NUMCOUNT; i++)
- tp->Numbers[i] = -1;
+ next_free = 0;
+}
- for (i=0; i < STRCOUNT; i++)
- tp->Strings[i] = (char *)NULL;
+ENTRY *_nc_copy_entry(ENTRY *oldp)
+{
+ ENTRY *newp = typeCalloc(ENTRY,1);
- next_free = 0;
+ if (newp != 0) {
+ *newp = *oldp;
+ _nc_copy_termtype(&(newp->tterm), &(oldp->tterm));
+ }
+ return newp;
}
char *_nc_save_str(const char *const string)
void _nc_wrap_entry(ENTRY *const ep)
/* copy the string parts to allocated storage, preserving pointers to it */
{
-int offsets[STRCOUNT], useoffsets[MAX_USES];
+int offsets[MAX_ENTRY_SIZE/2], useoffsets[MAX_USES];
int i, n;
-
- n = ep->tterm.term_names - stringbuf;
- for (i=0; i < STRCOUNT; i++)
- if (ep->tterm.Strings[i] == (char *)NULL)
- offsets[i] = -1;
- else if (ep->tterm.Strings[i] == CANCELLED_STRING)
- offsets[i] = -2;
+TERMTYPE *tp = &(ep->tterm);
+
+ n = tp->term_names - stringbuf;
+ for_each_string(i, &(ep->tterm)) {
+ if (tp->Strings[i] == ABSENT_STRING)
+ offsets[i] = ABSENT_OFFSET;
+ else if (tp->Strings[i] == CANCELLED_STRING)
+ offsets[i] = CANCELLED_OFFSET;
else
- offsets[i] = ep->tterm.Strings[i] - stringbuf;
+ offsets[i] = tp->Strings[i] - stringbuf;
+ }
- for (i=0; i < ep->nuses; i++)
- if (ep->uses[i].parent == (void *)NULL)
- useoffsets[i] = -1;
+ for (i=0; i < ep->nuses; i++) {
+ if (ep->uses[i].parent == (void *)0)
+ useoffsets[i] = ABSENT_OFFSET;
else
useoffsets[i] = (char *)(ep->uses[i].parent) - stringbuf;
+ }
- if ((ep->tterm.str_table = (char *)malloc(next_free)) == (char *)NULL)
+ if ((tp->str_table = typeMalloc(char, next_free)) == (char *)0)
_nc_err_abort("Out of memory");
- (void) memcpy(ep->tterm.str_table, stringbuf, next_free);
-
- ep->tterm.term_names = ep->tterm.str_table + n;
- for (i=0; i < STRCOUNT; i++)
- if (offsets[i] == -1)
- ep->tterm.Strings[i] = (char *)NULL;
- else if (offsets[i] == -2)
- ep->tterm.Strings[i] = CANCELLED_STRING;
+ (void) memcpy(tp->str_table, stringbuf, next_free);
+
+ tp->term_names = tp->str_table + n;
+ for_each_string(i, &(ep->tterm)) {
+ if (offsets[i] == ABSENT_OFFSET)
+ tp->Strings[i] = ABSENT_STRING;
+ else if (offsets[i] == CANCELLED_OFFSET)
+ tp->Strings[i] = CANCELLED_STRING;
else
- ep->tterm.Strings[i] = ep->tterm.str_table + offsets[i];
+ tp->Strings[i] = tp->str_table + offsets[i];
+ }
- for (i=0; i < ep->nuses; i++)
- if (useoffsets[i] == -1)
- ep->uses[i].parent = (void *)NULL;
+#if NCURSES_XNAMES
+ if ((n = NUM_EXT_NAMES(tp)) != 0) {
+ unsigned length = 0;
+ for (i = 0; i < n; i++) {
+ length += strlen(tp->ext_Names[i]) + 1;
+ offsets[i] = tp->ext_Names[i] - stringbuf;
+ }
+ if ((tp->ext_str_table = typeMalloc(char, length)) == 0)
+ _nc_err_abort("Out of memory");
+ for (i = 0, length = 0; i < n; i++) {
+ tp->ext_Names[i] = tp->ext_str_table + length;
+ strcpy(tp->ext_Names[i], stringbuf + offsets[i]);
+ length += strlen(tp->ext_Names[i]) + 1;
+ }
+ }
+#endif
+
+ for (i=0; i < ep->nuses; i++) {
+ if (useoffsets[i] == ABSENT_OFFSET)
+ ep->uses[i].parent = (void *)0;
else
- ep->uses[i].parent = (char *)(ep->tterm.str_table + useoffsets[i]);
+ ep->uses[i].parent = (char *)(tp->str_table + useoffsets[i]);
+ }
}
void _nc_merge_entry(TERMTYPE *const to, TERMTYPE *const from)
{
int i;
- for (i=0; i < BOOLCOUNT; i++)
+#if NCURSES_XNAMES
+ _nc_align_termtype(to, from);
+#endif
+ for_each_boolean(i, from)
{
int mergebool = from->Booleans[i];
to->Booleans[i] = mergebool;
}
- for (i=0; i < NUMCOUNT; i++)
+ for_each_number(i, from)
{
int mergenum = from->Numbers[i];
* storage. This is OK right now, but will be a problem if we
* we ever want to deallocate entries.
*/
- for (i=0; i < STRCOUNT; i++)
+ for_each_string(i, from)
{
char *mergestring = from->Strings[i];
to->Strings[i] = mergestring;
}
}
-
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999 *
+ ****************************************************************************/
+
+
+/*
+ * align_ttype.c -- functions for TERMTYPE
+ *
+ * _nc_align_termtype()
+ * _nc_copy_termtype()
+ *
+ */
+
+#include <curses.priv.h>
+
+#include <tic.h>
+#include <term_entry.h>
+
+MODULE_ID("$Id: alloc_ttype.c,v 1.6 1999/03/01 22:10:44 tom Exp $")
+
+#if NCURSES_XNAMES
+/*
+ * Merge the a/b lists into dst. Both a/b are sorted (see _nc_extend_names()),
+ * so we do not have to worry about order dependencies.
+ */
+static int merge_names(char **dst, char **a, int na, char **b, int nb)
+{
+ int n = 0;
+ while (na && nb) {
+ int cmp = strcmp(*a, *b);
+ if (cmp < 0) {
+ dst[n++] = *a++;
+ na--;
+ } else if (cmp > 0) {
+ dst[n++] = *b++;
+ nb--;
+ } else if (cmp == 0) {
+ dst[n++] = *a;
+ a++, b++;
+ na--, nb--;
+ }
+ }
+ while (na-- > 0) {
+ dst[n++] = *a++;
+ }
+ while (nb-- > 0) {
+ dst[n++] = *b++;
+ }
+ DEBUG(4, ("merge_names -> %d", n));
+ return n;
+}
+
+static bool find_name(char **table, int length, char *name)
+{
+ while (length-- > 0) {
+ if (!strcmp(*table++, name)) {
+ DEBUG(4, ("found name '%s'", name));
+ return TRUE;
+ }
+ }
+ DEBUG(4, ("did not find name '%s'", name));
+ return FALSE;
+}
+
+static void realign_data(TERMTYPE *to, char **ext_Names, int ext_Booleans, int ext_Numbers, int ext_Strings)
+{
+ int n, m, base;
+ int limit = (to->ext_Booleans + to->ext_Numbers + to->ext_Strings);
+
+ if (to->ext_Booleans != ext_Booleans) {
+ to->num_Booleans += (ext_Booleans - to->ext_Booleans);
+ to->Booleans = typeRealloc(char, to->num_Booleans, to->Booleans);
+ for (n = to->ext_Booleans-1,
+ m = ext_Booleans-1,
+ base = to->num_Booleans - (m+1); m >= 0; m--) {
+ if (find_name(to->ext_Names, limit, ext_Names[m])) {
+ to->Booleans[base + m] = to->Booleans[base + n--];
+ } else {
+ to->Booleans[base + m] = FALSE;
+ }
+ }
+ to->ext_Booleans = ext_Booleans;
+ }
+ if (to->ext_Numbers != ext_Numbers) {
+ to->num_Numbers += (ext_Numbers - to->ext_Numbers);
+ to->Numbers = typeRealloc(short, to->num_Numbers, to->Numbers);
+ for (n = to->ext_Numbers-1,
+ m = ext_Numbers-1,
+ base = to->num_Numbers - (m+1); m >= 0; m--) {
+ if (find_name(to->ext_Names, limit, ext_Names[m+ext_Booleans])) {
+ to->Numbers[base + m] = to->Numbers[base + n--];
+ } else {
+ to->Numbers[base + m] = ABSENT_NUMERIC;
+ }
+ }
+ to->ext_Numbers = ext_Numbers;
+ }
+ if (to->ext_Strings != ext_Strings) {
+ to->num_Strings += (ext_Strings - to->ext_Strings);
+ to->Strings = typeRealloc(char*, to->num_Strings, to->Strings);
+ for (n = to->ext_Strings-1,
+ m = ext_Strings-1,
+ base = to->num_Strings - (m+1); m >= 0; m--) {
+ if (find_name(to->ext_Names, limit, ext_Names[m+ext_Booleans+ext_Numbers])) {
+ to->Strings[base + m] = to->Strings[base + n--];
+ } else {
+ to->Strings[base + m] = ABSENT_STRING;
+ }
+ }
+ to->ext_Strings = ext_Strings;
+ }
+}
+
+/*
+ * Returns the first index in ext_Names[] for the given token-type
+ */
+static int _nc_first_ext_name(TERMTYPE *tp, int token_type)
+{
+ int first;
+
+ switch (token_type) {
+ case BOOLEAN:
+ first = 0;
+ break;
+ case NUMBER:
+ first = tp->ext_Booleans;
+ break;
+ case STRING:
+ first = tp->ext_Booleans + tp->ext_Numbers;
+ break;
+ default:
+ first = 0;
+ break;
+ }
+ return first;
+}
+
+/*
+ * Returns the last index in ext_Names[] for the given token-type
+ */
+static int _nc_last_ext_name(TERMTYPE *tp, int token_type)
+{
+ int last;
+
+ switch (token_type) {
+ case BOOLEAN:
+ last = tp->ext_Booleans;
+ break;
+ case NUMBER:
+ last = tp->ext_Booleans + tp->ext_Numbers;
+ break;
+ default:
+ case STRING:
+ last = NUM_EXT_NAMES(tp);
+ break;
+ }
+ return last;
+}
+
+/*
+ * Lookup an entry from extended-names, returning -1 if not found
+ */
+static int _nc_find_ext_name(TERMTYPE *tp, char *name, int token_type)
+{
+ unsigned j;
+ unsigned first = _nc_first_ext_name(tp, token_type);
+ unsigned last = _nc_last_ext_name(tp, token_type);
+
+ for (j = first; j < last; j++) {
+ if (!strcmp(name, tp->ext_Names[j])) {
+ return j;
+ }
+ }
+ return -1;
+}
+
+/*
+ * Translate an index into ext_Names[] into the corresponding index into data
+ * (e.g., Booleans[]).
+ */
+static int _nc_ext_data_index(TERMTYPE *tp, int n, int token_type)
+{
+ switch (token_type) {
+ case BOOLEAN:
+ n += (tp->num_Booleans - tp->ext_Booleans);
+ break;
+ case NUMBER:
+ n += (tp->num_Numbers - tp->ext_Numbers)
+ - (tp->ext_Booleans);
+ break;
+ default:
+ case STRING:
+ n += (tp->num_Strings - tp->ext_Strings)
+ - (tp->ext_Booleans + tp->ext_Numbers);
+ }
+ return n;
+}
+
+/*
+ * Adjust tables to remove (not free) an extended name and its corresponding
+ * data.
+ */
+static void _nc_del_ext_name(TERMTYPE *tp, char *name, int token_type)
+{
+ int j;
+ int first, last;
+
+ if ((first = _nc_find_ext_name(tp, name, token_type)) >= 0) {
+ last = NUM_EXT_NAMES(tp) - 1;
+ for (j = first; j < last; j++) {
+ tp->ext_Names[j] = tp->ext_Names[j+1];
+ }
+ first = _nc_ext_data_index(tp, first, token_type);
+ switch (token_type) {
+ case BOOLEAN:
+ last = tp->num_Booleans - 1;
+ for (j = first; j < last; j++)
+ tp->Booleans[j] = tp->Booleans[j+1];
+ tp->ext_Booleans -= 1;
+ tp->num_Booleans -= 1;
+ break;
+ case NUMBER:
+ last = tp->num_Numbers - 1;
+ for (j = first; j < last; j++)
+ tp->Numbers[j] = tp->Numbers[j+1];
+ tp->ext_Numbers -= 1;
+ tp->num_Numbers -= 1;
+ break;
+ case STRING:
+ last = tp->num_Strings - 1;
+ for (j = first; j < last; j++)
+ tp->Strings[j] = tp->Strings[j+1];
+ tp->ext_Strings -= 1;
+ tp->num_Strings -= 1;
+ break;
+ }
+ }
+}
+
+/*
+ * Adjust tables to insert an extended name, making room for new data. The
+ * index into the corresponding data array is returned.
+ */
+static int _nc_ins_ext_name(TERMTYPE *tp, char *name, int token_type)
+{
+ unsigned first = _nc_first_ext_name(tp, token_type);
+ unsigned last = _nc_last_ext_name(tp, token_type);
+ unsigned total = NUM_EXT_NAMES(tp) + 1;
+ unsigned j, k;
+
+ for (j = first; j < last; j++) {
+ int cmp = strcmp(name, tp->ext_Names[j]);
+ if (cmp == 0)
+ /* already present */
+ return _nc_ext_data_index(tp, j, token_type);
+ if (cmp < 0) {
+ break;
+ }
+ }
+
+ tp->ext_Names = typeRealloc(char *, total, tp->ext_Names);
+ for (k = total-1; k > j; k--)
+ tp->ext_Names[k] = tp->ext_Names[k-1];
+ tp->ext_Names[j] = name;
+ j = _nc_ext_data_index(tp, j, token_type);
+
+ switch (token_type) {
+ case BOOLEAN:
+ tp->ext_Booleans += 1;
+ tp->num_Booleans += 1;
+ tp->Booleans = typeRealloc(char, tp->num_Booleans, tp->Booleans);
+ for (k = tp->num_Booleans-1; k > j; k--)
+ tp->Booleans[k] = tp->Booleans[k-1];
+ break;
+ case NUMBER:
+ tp->ext_Numbers += 1;
+ tp->num_Numbers += 1;
+ tp->Numbers = typeRealloc(short, tp->num_Numbers, tp->Numbers);
+ for (k = tp->num_Numbers-1; k > j; k--)
+ tp->Numbers[k] = tp->Numbers[k-1];
+ break;
+ case STRING:
+ tp->ext_Strings += 1;
+ tp->num_Strings += 1;
+ tp->Strings = typeRealloc(char *, tp->num_Strings, tp->Strings);
+ for (k = tp->num_Strings-1; k > j; k--)
+ tp->Strings[k] = tp->Strings[k-1];
+ break;
+ }
+ return j;
+}
+
+/*
+ * Look for strings that are marked cancelled, which happen to be the same name
+ * as a boolean or number. We'll get this as a special case when we get a
+ * cancellation of a name that is inherited from another entry.
+ */
+static void adjust_cancels(TERMTYPE *to, TERMTYPE *from)
+{
+ int first = to->ext_Booleans + to->ext_Numbers;
+ int last = first + to->ext_Strings;
+ int j, k;
+
+ for (j = first; j < last; ) {
+ char *name = to->ext_Names[j];
+ unsigned j_str = to->num_Strings - first - to->ext_Strings;
+
+ if (to->Strings[j + j_str] == CANCELLED_STRING) {
+ if ((k = _nc_find_ext_name(from, to->ext_Names[j], BOOLEAN)) >= 0) {
+ _nc_del_ext_name(to, name, STRING);
+ k = _nc_ins_ext_name(to, name, BOOLEAN);
+ to->Booleans[k] = FALSE;
+ } else if ((k = _nc_find_ext_name(from, to->ext_Names[j], NUMBER)) >= 0) {
+ _nc_del_ext_name(to, name, STRING);
+ k = _nc_ins_ext_name(to, name, NUMBER);
+ to->Numbers[k] = CANCELLED_NUMERIC;
+ }
+ } else {
+ j++;
+ }
+ }
+}
+
+void _nc_align_termtype(TERMTYPE *to, TERMTYPE *from)
+{
+ int na = NUM_EXT_NAMES(to);
+ int nb = NUM_EXT_NAMES(from);
+ int n;
+ bool same;
+ char **ext_Names;
+ int ext_Booleans, ext_Numbers, ext_Strings;
+
+ DEBUG(2, ("align_termtype to(%d:%s), from(%d:%s)", na, to->term_names, nb, from->term_names));
+
+ if (na != 0 || nb != 0) {
+ if ((na == nb) /* check if the arrays are equivalent */
+ && (to->ext_Booleans == from->ext_Booleans)
+ && (to->ext_Numbers == from->ext_Numbers)
+ && (to->ext_Strings == from->ext_Strings)) {
+ for (n = 0, same = TRUE; n < na; n++) {
+ if (strcmp(to->ext_Names[n], from->ext_Names[n])) {
+ same = FALSE;
+ break;
+ }
+ }
+ if (same)
+ return;
+ }
+ /*
+ * This is where we pay for having a simple extension representation.
+ * Allocate a new ext_Names array and merge the two ext_Names arrays
+ * into it, updating to's counts for booleans, etc. Fortunately we do
+ * this only for the terminfo compiler (tic) and comparer (infocmp).
+ */
+ ext_Names = typeMalloc(char *, na+nb);
+
+ if (to->ext_Strings && (from->ext_Booleans + from->ext_Numbers))
+ adjust_cancels(to, from);
+
+ if (from->ext_Strings && (to->ext_Booleans + to->ext_Numbers))
+ adjust_cancels(from, to);
+
+ ext_Booleans = merge_names(ext_Names,
+ to->ext_Names,
+ to->ext_Booleans,
+ from->ext_Names,
+ from->ext_Booleans);
+ ext_Numbers = merge_names(ext_Names + ext_Booleans,
+ to->ext_Names
+ + to->ext_Booleans,
+ to->ext_Numbers,
+ from->ext_Names
+ + from->ext_Booleans,
+ from->ext_Numbers);
+ ext_Strings = merge_names(ext_Names + ext_Numbers + ext_Booleans,
+ to->ext_Names
+ + to->ext_Booleans
+ + to->ext_Numbers,
+ to->ext_Strings,
+ from->ext_Names
+ + from->ext_Booleans
+ + from->ext_Numbers,
+ from->ext_Strings);
+ /*
+ * Now we must reallocate the Booleans, etc., to allow the data to be
+ * overlaid.
+ */
+ if (na != (ext_Booleans + ext_Numbers + ext_Strings)) {
+ realign_data(to, ext_Names, ext_Booleans, ext_Numbers, ext_Strings);
+ free(to->ext_Names);
+ to->ext_Names = ext_Names;
+ DEBUG(2, ("realigned %d extended names for '%s' (to)", NUM_EXT_NAMES(to), to->term_names));
+ }
+ if (nb != (ext_Booleans + ext_Numbers + ext_Strings)) {
+ nb = (ext_Booleans + ext_Numbers + ext_Strings);
+ realign_data(from, ext_Names, ext_Booleans, ext_Numbers, ext_Strings);
+ from->ext_Names = typeRealloc(char *, nb, from->ext_Names);
+ memcpy(from->ext_Names, ext_Names, sizeof(char *) * nb);
+ DEBUG(2, ("realigned %d extended names for '%s' (from)", NUM_EXT_NAMES(from), from->term_names));
+ }
+ }
+}
+#endif
+
+void _nc_copy_termtype(TERMTYPE *dst, TERMTYPE *src)
+{
+ int i;
+
+ *dst = *src; /* ...to copy the sizes and string-tables */
+ dst->Booleans = typeMalloc(char, NUM_BOOLEANS(dst));
+ dst->Numbers = typeMalloc(short, NUM_NUMBERS(dst));
+ dst->Strings = typeMalloc(char *, NUM_STRINGS(dst));
+
+ /* FIXME: use memcpy for these and similar loops */
+ for_each_boolean(i,dst)
+ dst->Booleans[i] = src->Booleans[i];
+ for_each_number(i,dst)
+ dst->Numbers[i] = src->Numbers[i];
+ for_each_string(i,dst)
+ dst->Strings[i] = src->Strings[i];
+
+ /* FIXME: we probably should also copy str_table and ext_str_table,
+ * but tic and infocmp are not written to exploit that (yet).
+ */
+
+#if NCURSES_XNAMES
+ if ((i = NUM_EXT_NAMES(src)) != 0) {
+ dst->ext_Names = typeMalloc(char *, i);
+ memcpy(dst->ext_Names, src->ext_Names, i * sizeof(char *));
+ }
+#endif
+
+}
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: captoinfo.c,v 1.17 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: captoinfo.c,v 1.24 1999/07/24 20:06:13 tom Exp $")
#define MAX_PUSHED 16 /* max # args we can push onto the stack */
#define MAX_ENTRY 2048 /* maximum chars in a translated capability */
/* initialize 'my_string', 'my_length' */
{
if (my_string == 0)
- my_string = malloc(my_length = 256);
+ my_string = typeMalloc(char, my_length = 256);
if (my_string == 0)
_nc_err_abort("Out of memory");
size_t have = (d - my_string);
size_t need = have + strlen(s) + 2;
if (need > my_length) {
- my_string = realloc(my_string, my_length = (need + need));
+ my_string = (char *)realloc(my_string, my_length = (need + need));
+ if (my_string == 0)
+ _nc_err_abort("Out of memory");
d = my_string + have;
}
(void) strcpy(d, s);
static void pop(void)
/* pop the top of the stack into onstack */
{
- if (stackptr == 0)
+ if (stackptr == 0) {
if (onstack == 0)
_nc_warning("I'm confused");
else
onstack = 0;
+ }
else
onstack = stack[--stackptr];
param++;
*dp++ = '%'; *dp++ = '/';
break;
case '=':
- if (seenr)
+ if (seenr) {
if (param == 1)
onstack = 2;
else if (param == 2)
onstack = 1;
else
onstack = param;
+ }
else
onstack = param;
break;
pop();
break;
case '0': /* not clear any of the historical termcaps did this */
- if (*s == '3')
+ if (*s == '3')
goto see03;
else if (*s != '2')
goto invalid;
for (; *str && str != trimmed; str++)
{
int c1, c2;
- char *cp;
+ char *cp = 0;
if (str[0] == '\\' && (str[1] == '^' || str[1] == ','))
{
else if (sscanf(str, "%%?%%{%d}%%>%%t%%{%d}%%+%%;", &c1,&c2) == 2)
{
str = strchr(str, ';');
- (void) sprintf(temp, "%%>");
- (void) strcat(temp, unctrl(c1));
- (void) strcat(temp, unctrl(c2));
+ (void) sprintf(temp, "%%>%s%s", unctrl(c1), unctrl(c2));
bufptr = save_string(bufptr, temp);
}
else if (sscanf(str, "%%?%%{%d}%%>%%t%%'%c'%%+%%;", &c1,&ch2) == 2)
#include <tic.h>
-MODULE_ID("$Id: comp_error.c,v 1.14 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: comp_error.c,v 1.16 1998/08/01 23:39:51 tom Exp $")
bool _nc_suppress_warnings;
int _nc_curr_line; /* current line # in input */
vfprintf (stderr, fmt, argp);
fprintf (stderr, "\n");
va_end(argp);
+
+ /* If we're debugging, try to show where the problem occurred - this
+ * will dump core.
+ */
+#if defined(TRACE) || !defined(NDEBUG)
abort();
+#else
+ /* Dumping core in production code is not a good idea.
+ */
+ exit(EXIT_FAILURE);
+#endif
}
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: comp_expand.c,v 1.4 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: comp_expand.c,v 1.11 1999/03/07 00:51:07 tom Exp $")
static int trailing_spaces(const char *src)
{
#define REALCTL(s) (CHAR_OF(s) < 127 && iscntrl(CHAR_OF(s)))
#define REALPRINT(s) (CHAR_OF(s) < 127 && isprint(CHAR_OF(s)))
-char *_nc_tic_expand(const char *srcp, bool tic_format)
+char *_nc_tic_expand(const char *srcp, bool tic_format, int numbers)
{
static char * buffer;
static size_t length;
size_t need = (2 + strlen(str)) * 4;
int ch;
- if (buffer == 0) {
- buffer = malloc(length = need);
- } else if (need > length) {
- buffer = realloc(buffer, length = need);
+ if (buffer == 0 || need > length) {
+ if ((buffer = typeRealloc(char, length = need, buffer)) == 0)
+ return 0;
}
- bufp = 0;
- ptr = str;
- while ((ch = (*str & 0xff)) != 0) {
+ bufp = 0;
+ ptr = str;
+ while ((ch = (*str & 0xff)) != 0) {
if (ch == '%' && REALPRINT(str+1)) {
- buffer[bufp++] = *str++;
- buffer[bufp++] = *str;
+ buffer[bufp++] = *str++;
+ /*
+ * Though the character literals are more compact, most
+ * terminal descriptions use numbers and are not easy
+ * to read in character-literal form.
+ */
+ switch (numbers) {
+ case -1:
+ if (str[0] == S_QUOTE
+ && str[1] != '\\'
+ && REALPRINT(str+1)
+ && str[2] == S_QUOTE) {
+ sprintf(buffer+bufp, "{%d}", str[1]);
+ bufp += strlen(buffer+bufp);
+ str += 2;
+ } else {
+ buffer[bufp++] = *str;
+ }
+ break;
+ /*
+ * If we have a "%{number}", try to translate it into
+ * a "%'char'" form, since that will run a little faster
+ * when we're interpreting it. Also, having one form
+ * for the constant makes it simpler to compare terminal
+ * descriptions.
+ */
+ case 1:
+ if (str[0] == L_BRACE
+ && isdigit(str[1])) {
+ char *dst = 0;
+ long value = strtol(str+1, &dst, 0);
+ if (dst != 0
+ && *dst == R_BRACE
+ && value < 127
+ && value != '\\' /* FIXME */
+ && isprint((int)value)) {
+ ch = (int)value;
+ buffer[bufp++] = S_QUOTE;
+ if (ch == '\\'
+ || ch == S_QUOTE)
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = ch;
+ buffer[bufp++] = S_QUOTE;
+ str = dst;
+ } else {
+ buffer[bufp++] = *str;
+ }
+ } else {
+ buffer[bufp++] = *str;
+ }
+ break;
+ default:
+ buffer[bufp++] = *str;
+ break;
+ }
}
else if (ch == 128) {
- buffer[bufp++] = '\\';
- buffer[bufp++] = '0';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = '0';
}
else if (ch == '\033') {
- buffer[bufp++] = '\\';
- buffer[bufp++] = 'E';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = 'E';
}
else if (ch == '\\' && tic_format && (str == srcp || str[-1] != '^')) {
- buffer[bufp++] = '\\';
- buffer[bufp++] = '\\';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = '\\';
}
else if (ch == ' ' && tic_format && (str == srcp || trailing_spaces(str))) {
- buffer[bufp++] = '\\';
- buffer[bufp++] = 's';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = 's';
}
else if ((ch == ',' || ch == ':' || ch == '^') && tic_format) {
- buffer[bufp++] = '\\';
- buffer[bufp++] = ch;
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = ch;
}
else if (REALPRINT(str) && (ch != ',' && ch != ':' && !(ch == '!' && !tic_format) && ch != '^'))
- buffer[bufp++] = ch;
+ buffer[bufp++] = ch;
#if 0 /* FIXME: this would be more readable (in fact the whole 'islong' logic should be removed) */
else if (ch == '\b') {
- buffer[bufp++] = '\\';
- buffer[bufp++] = 'b';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = 'b';
}
else if (ch == '\f') {
- buffer[bufp++] = '\\';
- buffer[bufp++] = 'f';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = 'f';
}
else if (ch == '\t' && islong) {
- buffer[bufp++] = '\\';
- buffer[bufp++] = 't';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = 't';
}
#endif
else if (ch == '\r' && (islong || (strlen(srcp) > 2 && str[1] == '\0'))) {
- buffer[bufp++] = '\\';
- buffer[bufp++] = 'r';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = 'r';
}
else if (ch == '\n' && islong) {
- buffer[bufp++] = '\\';
- buffer[bufp++] = 'n';
+ buffer[bufp++] = '\\';
+ buffer[bufp++] = 'n';
}
#define UnCtl(c) ((c) + '@')
else if (REALCTL(str) && ch != '\\' && (!islong || isdigit(str[1])))
}
str++;
- }
+ }
- buffer[bufp] = '\0';
- return(buffer);
+ buffer[bufp] = '\0';
+ return(buffer);
}
#define DEBUG(level, params) /*nothing*/
#endif
-MODULE_ID("$Id: comp_hash.c,v 1.16 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: comp_hash.c,v 1.21 1999/06/26 21:25:11 tom Exp $")
static int hash_function(const char *);
*/
#ifdef MAIN_PROGRAM
+
+#undef MODULE_ID
+#define MODULE_ID(id) /*nothing*/
+#include <tinfo/doalloc.c>
+
static void _nc_make_hash_table(struct name_table_entry *table,
struct name_table_entry **hash_table)
{
* performance enhancement).
*/
-#if !HAVE_STRDUP
-static char *strdup (char *s)
-{
- char *p;
-
- p = malloc(strlen(s)+1);
- if (p)
- strcpy(p,s);
- return(p);
-}
-#endif /* not HAVE_STRDUP */
-
#define MAX_COLUMNS BUFSIZ /* this _has_ to be worst-case */
static char **parse_columns(char *buffer)
int col = 0;
- if (list == 0)
- list = typeCalloc(char *, MAX_COLUMNS);
+ if (list == 0 && (list = typeCalloc(char *, MAX_COLUMNS)) == 0)
+ return(0);
if (*buffer != '#') {
while (*buffer != '\0') {
printf("{\n");
for (n = 0; n < HASHTABSIZE; n++) {
if (hash_table[n] != 0) {
- sprintf(buffer, "_nc_%s_table + %3d",
+ sprintf(buffer, "_nc_%s_table + %3ld",
root_name,
- hash_table[n] - name_table);
+ (long) (hash_table[n] - name_table));
} else {
strcpy(buffer, "0");
}
#include <ctype.h>
#include <tic.h>
-#include <term.h>
#include <term_entry.h>
-MODULE_ID("$Id: comp_parse.c,v 1.21 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: comp_parse.c,v 1.34 1999/02/27 22:13:02 tom Exp $")
static void sanity_check(TERMTYPE *);
+void (*_nc_check_termtype)(TERMTYPE *) = sanity_check;
/****************************************************************************
*
static void enqueue(ENTRY *ep)
/* add an entry to the in-core list */
{
- ENTRY *newp = (ENTRY *)malloc(sizeof(ENTRY));
+ ENTRY *newp = _nc_copy_entry(ep);
if (newp == NULL)
_nc_err_abort("Out of memory");
- (void) memcpy(newp, ep, sizeof(ENTRY));
-
newp->last = _nc_tail;
_nc_tail = newp;
if (strchr(n1, '|') == NULL)
{
- (void) strcpy(nc1, n1);
+ (void) strncpy(nc1, n1, sizeof(nc1) - 2);
+ nc1[sizeof(nc1) - 2] = '\0';
(void) strcat(nc1, "|");
n1 = nc1;
}
if (strchr(n2, '|') == NULL)
{
- (void) strcpy(nc2, n2);
+ (void) strncpy(nc2, n2, sizeof(nc2) - 2);
+ nc2[sizeof(nc2) - 2] = '\0';
(void) strcat(nc2, "|");
n2 = nc2;
}
if (silent)
_nc_suppress_warnings = TRUE; /* shut the lexer up, too */
+ memset(&thisentry, 0, sizeof(thisentry));
for (_nc_reset_input(fp, buf); _nc_parse_entry(&thisentry, literal, silent) != ERR; )
{
if (!isalnum(thisentry.tterm.term_names[0]))
DEBUG(1, ("head = %s", _nc_head->tterm.term_names));
DEBUG(1, ("tail = %s", _nc_tail->tterm.term_names));
}
+#ifdef TRACE
else if (!immediate)
DEBUG(1, ("no entries parsed"));
+#endif
_nc_suppress_warnings = oldsuppress;
}
TERMTYPE thisterm;
char filename[PATH_MAX];
+ memset(&thisterm, 0, sizeof(thisterm));
if (_nc_read_entry(lookfor, filename, &thisterm) == 1)
{
DEBUG(2, ("%s: resolving use=%s (compiled)",
child, lookfor));
- rp = (ENTRY *)malloc(sizeof(ENTRY));
- memcpy(&rp->tterm, &thisterm, sizeof(TERMTYPE));
+ rp = typeMalloc(ENTRY,1);
+ if (rp == NULL)
+ _nc_err_abort("Out of memory");
+ rp->tterm = thisterm;
rp->nuses = 0;
rp->next = lastread;
lastread = rp;
keepgoing = FALSE;
for_entry_list(qp)
+ {
if (qp->nuses > 0)
{
DEBUG(2, ("%s: attempting merge", _nc_first_name(qp->tterm.term_names)));
* as a side effect, copy into the merged entry the name
* field and string table pointer.
*/
- memcpy(&merged, &qp->tterm, sizeof(TERMTYPE));
+ _nc_copy_termtype(&merged, &(qp->tterm));
/*
* Now merge in each use entry in the proper
/*
* Replace the original entry with the merged one.
*/
- memcpy(&qp->tterm, &merged, sizeof(TERMTYPE));
+ FreeIfNeeded(qp->tterm.Booleans);
+ FreeIfNeeded(qp->tterm.Numbers);
+ FreeIfNeeded(qp->tterm.Strings);
+ qp->tterm = merged;
/*
* We know every entry is resolvable because name resolution
incomplete:
keepgoing = TRUE;
}
+ }
} while
(keepgoing);
*/
for_entry_list(qp)
{
- for (j = 0; j < BOOLCOUNT; j++)
+ for_each_boolean(j, &(qp->tterm))
if (qp->tterm.Booleans[j] == CANCELLED_BOOLEAN)
qp->tterm.Booleans[j] = FALSE;
- for (j = 0; j < NUMCOUNT; j++)
+ for_each_number(j, &(qp->tterm))
if (qp->tterm.Numbers[j] == CANCELLED_NUMERIC)
qp->tterm.Numbers[j] = ABSENT_NUMERIC;
- for (j = 0; j < STRCOUNT; j++)
+ for_each_string(j, &(qp->tterm))
if (qp->tterm.Strings[j] == CANCELLED_STRING)
qp->tterm.Strings[j] = ABSENT_STRING;
}
DEBUG(2, ("RESOLUTION FINISHED"));
- _nc_curr_col = -1;
- for_entry_list(qp)
+ if (_nc_check_termtype != 0)
{
- _nc_curr_line = qp->startline;
- _nc_set_type(_nc_first_name(qp->tterm.term_names));
- sanity_check(&qp->tterm);
+ _nc_curr_col = -1;
+ for_entry_list(qp)
+ {
+ _nc_curr_line = qp->startline;
+ _nc_set_type(_nc_first_name(qp->tterm.term_names));
+ _nc_check_termtype(&qp->tterm);
+ }
+ DEBUG(2, ("SANITY CHECK FINISHED"));
}
- DEBUG(2, ("SANITY CHECK FINISHED"));
-
return(TRUE);
}
#undef CUR
#define CUR tp->
-/*
- * Note that WANTED and PRESENT are not simple inverses! If a capability
- * has been explicitly cancelled, it's not considered WANTED.
- */
-#define WANTED(s) ((s) == ABSENT_STRING)
-#define PRESENT(s) (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING))
-
-#define ANDMISSING(p,q) \
- {if (PRESENT(p) && !PRESENT(q)) _nc_warning(#p " but no " #q);}
-
-#define PAIRED(p,q) \
- { \
- if (PRESENT(q) && !PRESENT(p)) \
- _nc_warning(#q " but no " #p); \
- if (PRESENT(p) && !PRESENT(q)) \
- _nc_warning(#p " but no " #q); \
- }
-
static void sanity_check(TERMTYPE *tp)
{
-#ifdef __UNUSED__ /* this casts too wide a net */
- bool terminal_entry = !strchr(tp->term_names, '+');
-#endif
-
if (!PRESENT(exit_attribute_mode))
{
#ifdef __UNUSED__ /* this casts too wide a net */
+ bool terminal_entry = !strchr(tp->term_names, '+');
if (terminal_entry &&
(PRESENT(set_attributes)
|| PRESENT(enter_standout_mode)
}
/* listed in structure-member order of first argument */
-#ifdef __UNUSED__
- ANDMISSING(cursor_invisible, cursor_normal)
- ANDMISSING(cursor_visible, cursor_normal)
-#endif /* __UNUSED__ */
PAIRED(enter_alt_charset_mode, exit_alt_charset_mode)
ANDMISSING(enter_alt_charset_mode, acs_chars)
ANDMISSING(exit_alt_charset_mode, acs_chars)
ANDMISSING(label_off, label_on)
PAIRED(display_clock, remove_clock)
ANDMISSING(set_color_pair, initialize_pair)
-
- /* Some checks that we should make, but don't want to confuse people
- * with. Put those under the tic -v option so we can still get them.
- */
- if (_nc_tracing) {
-
- /*
- * From XSI & O'Reilly, we gather that sc/rc are required if csr is
- * given, because the cursor position after the scrolling operation is
- * performed is undefined.
- */
- ANDMISSING(change_scroll_region, save_cursor)
- ANDMISSING(change_scroll_region, restore_cursor)
-
- /*
- * Some non-curses applications (e.g., jove) get confused if we have
- * both ich/ich1 and smir/rmir. Let's be nice and warn about that,
- * too, even though ncurses handles it.
- */
- if ((PRESENT(enter_insert_mode) || PRESENT(exit_insert_mode))
- && (PRESENT(insert_character) || PRESENT(parm_ich))) {
- _nc_warning("non-curses applications may be confused by ich/ich1 with smir/rmir");
- }
- }
-#undef PAIRED
-#undef ANDMISSING
}
#include <ctype.h>
#include <tic.h>
-MODULE_ID("$Id: comp_scan.c,v 1.30 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: comp_scan.c,v 1.34 1998/11/01 00:56:39 tom Exp $")
/*
* Maximum length of string capability we'll accept before raising an error.
static int pushtype; /* type of pushback token */
static char pushname[MAX_NAME_SIZE+1];
+static int last_char(void);
static int next_char(void);
static long stream_pos(void);
static bool end_of_stream(void);
long number;
int type;
int ch;
-bool found;
+char * numchk;
+char numbuf[80];
+unsigned found;
static char buffer[MAX_ENTRY_SIZE];
char *ptr;
int dot_flag = FALSE;
{
if (ch == EOF)
_nc_err_abort("premature EOF");
- else if (ch == ':')
+ else if (ch == ':' && last_char() != ',')
{
_nc_syntax = SYN_TERMCAP;
separator = ':';
* description field for syntax-checking purposes.
*/
desc = strrchr(buffer, '|');
- if (desc)
+ if (desc) {
if (*desc == '\0')
_nc_warning("empty longname field");
else if (strchr(desc, ' ') == (char *)NULL)
_nc_warning("older tic versions may treat the description field as an alias");
+ }
if (!desc)
desc = buffer + strlen(buffer);
break;
case '#':
- number = 0;
- found = FALSE;
- while (isdigit(ch = next_char())) {
- number = number * 10 + ch - '0';
- found = TRUE;
+ found = 0;
+ while (isalnum(ch = next_char())) {
+ numbuf[found++] = ch;
+ if (found >= sizeof(numbuf)-1)
+ break;
}
- if (found == FALSE)
+ numbuf[found] = '\0';
+ number = strtol(numbuf, &numchk, 0);
+ if (numchk == numbuf)
_nc_warning("no value given for `%s'", buffer);
- if (ch != separator)
+ if ((*numchk != '\0') || (ch != separator))
_nc_warning("Missing separator");
_nc_curr_token.tk_name = buffer;
_nc_curr_token.tk_valnumber = number;
} /* end else (ch != EOF) */
end_of_token:
+
+#ifdef TRACE
if (dot_flag == TRUE)
DEBUG(8, ("Commented out "));
_nc_warning("Bad token type");
}
}
+#endif
if (dot_flag == TRUE) /* if commented out, use the next one */
type = _nc_get_token();
_nc_curr_col = 0;
}
+/*
+ * int last_char()
+ *
+ * Returns the final nonblank character on the current input buffer
+ */
+static int
+last_char(void)
+{
+ size_t len = strlen(bufptr);
+ while (len--) {
+ if (!isspace(bufptr[len]))
+ return bufptr[len];
+ }
+ return 0;
+}
+
/*
* int next_char()
*
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998 *
+ ****************************************************************************/
+
+
+/*
+ * Wrapper for malloc/realloc. Standard implementations allow realloc with
+ * a null pointer, but older libraries may not (e.g., SunOS).
+ *
+ * Also if realloc fails, we discard the old memory to avoid leaks.
+ */
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: doalloc.c,v 1.5 1999/03/14 12:25:27 tom Exp $")
+
+void *_nc_doalloc(void *oldp, size_t amount)
+{
+ void *newp;
+
+ if (oldp != 0) {
+ if ((newp = realloc(oldp, amount)) == 0) {
+ free(oldp);
+ errno = ENOMEM; /* just in case 'free' reset */
+ }
+ } else {
+ newp = typeMalloc(char, amount);
+ }
+ return newp;
+}
+
+#if !HAVE_STRDUP
+char *_nc_strdup(const char *src)
+{
+ char *dst;
+ if (src != 0) {
+ dst = typeMalloc(char, strlen(src) + 1);
+ if (dst != 0) {
+ (void)strcpy(dst, src);
+ }
+ } else {
+ dst = 0;
+ }
+ return dst;
+}
+#endif
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999 *
+ ****************************************************************************/
+
+
+/*
+ * free_ttype.c -- allocation functions for TERMTYPE
+ *
+ * _nc_free_termtype()
+ * use_extended_names()
+ *
+ */
+
+#include <curses.priv.h>
+
+#include <tic.h>
+#include <term_entry.h>
+
+MODULE_ID("$Id: free_ttype.c,v 1.2 1999/03/01 00:30:35 tom Exp $")
+
+void _nc_free_termtype(TERMTYPE *ptr)
+{
+ FreeIfNeeded(ptr->str_table);
+ FreeIfNeeded(ptr->term_names);
+#if NCURSES_XNAMES
+ FreeIfNeeded(ptr->ext_str_table);
+ FreeIfNeeded(ptr->Booleans);
+ FreeIfNeeded(ptr->Numbers);
+ FreeIfNeeded(ptr->Strings);
+ FreeIfNeeded(ptr->ext_Names);
+#endif
+ memset(ptr, 0, sizeof(TERMTYPE));
+}
+
+#if NCURSES_XNAMES
+bool _nc_user_definable = TRUE;
+
+int use_extended_names(bool flag)
+{
+ int oldflag = _nc_user_definable;
+ _nc_user_definable = flag;
+ return oldflag;
+}
+#endif
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998 *
+ ****************************************************************************/
+
+/*
+ * getenv_num.c -- obtain a number from the environment
+ */
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: getenv_num.c,v 1.1 1998/09/19 21:30:23 tom Exp $")
+
+int
+_nc_getenv_num(const char *name)
+{
+ char *dst = 0;
+ char *src = getenv(name);
+ long value;
+
+ if ((src == 0)
+ || (value = strtol(src, &dst, 0)) < 0
+ || (dst == src)
+ || (*dst != '\0')
+ || (int)value < value)
+ value = -1;
+
+ return (int) value;
+}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998 *
+ ****************************************************************************/
+
+/*
+ * home_terminfo.c -- return the $HOME/.terminfo string, expanded
+ */
+
+#include <curses.priv.h>
+#include <tic.h>
+
+MODULE_ID("$Id: home_terminfo.c,v 1.2 1999/02/27 19:58:46 tom Exp $")
+
+#define my_length (strlen(home) + sizeof(PRIVATE_INFO))
+
+/* ncurses extension...fall back on user's private directory */
+
+char *
+_nc_home_terminfo(void)
+{
+ char *home;
+ static char *temp = 0;
+
+ if (temp == 0) {
+ if ((home = getenv("HOME")) != 0
+ && my_length <= PATH_MAX) {
+ temp = typeMalloc(char, my_length);
+ if (temp == 0)
+ _nc_err_abort("Out of memory");
+ (void) sprintf(temp, PRIVATE_INFO, home);
+ }
+ }
+ return temp;
+}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+#include <curses.priv.h>
+
+#include <term.h> /* keypad_xmit, keypad_local, meta_on, meta_off */
+ /* cursor_visible,cursor_normal,cursor_invisible */
+#include <tic.h> /* struct tinfo_fkeys */
+
+MODULE_ID("$Id: init_keytry.c,v 1.2 1999/09/11 17:32:57 Jeffrey.Honig Exp $")
+
+/*
+** _nc_init_keytry()
+**
+** Construct the try for the current terminal's keypad keys.
+**
+*/
+
+#ifdef BROKEN_LINKER
+#undef _nc_tinfo_fkeys
+#endif
+
+/* LINT_PREPRO
+#if 0*/
+#include <init_keytry.h>
+/* LINT_PREPRO
+#endif*/
+
+#ifdef BROKEN_LINKER
+struct tinfo_fkeys *_nc_tinfo_fkeysf(void)
+{
+ return _nc_tinfo_fkeys;
+}
+#endif
+
+void _nc_init_keytry(void)
+{
+ size_t n;
+
+ /* The SP->_keytry value is initialized in newterm(), where the SP
+ * structure is created, because we can not tell where keypad() or
+ * mouse_activate() (which will call keyok()) are first called.
+ */
+
+ for (n = 0; _nc_tinfo_fkeys[n].code; n++)
+ if (_nc_tinfo_fkeys[n].offset < STRCOUNT)
+ _nc_add_to_try(&(SP->_keytry),
+ CUR Strings[_nc_tinfo_fkeys[n].offset],
+ _nc_tinfo_fkeys[n].code);
+#ifdef TRACE
+ _nc_trace_tries(SP->_keytry);
+#endif
+}
#include <curses.priv.h>
#include <term.h> /* ena_acs, acs_chars */
-MODULE_ID("$Id: lib_acs.c,v 1.13 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_acs.c,v 1.15 1999/02/18 11:31:43 tom Exp $")
chtype acs_map[ACS_LEN];
-void init_acs(void)
+void _nc_init_acs(void)
{
T(("initializing ACS map"));
ACS_NEQUAL = '!'; /* should be not-equal */
ACS_STERLING = 'f'; /* should be pound-sterling symbol */
-#ifdef ena_acs
if (ena_acs != NULL)
{
TPUTS_TRACE("ena_acs");
putp(ena_acs);
}
-#endif /* ena_acs */
-#ifdef acs_chars
#define ALTCHAR(c) ((chtype)(((unsigned char)(c)) | A_ALTCHARSET))
if (acs_chars != NULL) {
_nc_visbuf(show));
}
#endif /* TRACE */
-#endif /* acs_char */
}
-
#include <curses.priv.h>
#include <term.h> /* cur_term, pad_char */
+#include <termcap.h> /* ospeed */
-MODULE_ID("$Id: lib_baudrate.c,v 1.11 1998/02/11 12:13:58 tom Exp $")
+MODULE_ID("$Id: lib_baudrate.c,v 1.15 1999/01/31 03:05:25 tom Exp $")
/*
* int
#endif
};
+int _nc_baudrate(int OSpeed)
+{
+ static int last_OSpeed;
+ static int last_baudrate;
+
+ int result;
+ unsigned i;
+
+ if (OSpeed == last_OSpeed) {
+ result = last_baudrate;
+ } else {
+ result = ERR;
+ if (OSpeed >= 0) {
+ for (i = 0; i < SIZEOF(speeds); i++) {
+ if (speeds[i].s == (speed_t)OSpeed) {
+ result = speeds[i].sp;
+ break;
+ }
+ }
+ }
+ last_baudrate = result;
+ }
+ return (result);
+}
+
+
+int _nc_ospeed(int BaudRate)
+{
+ speed_t result = 1;
+ unsigned i;
+
+ if (BaudRate >= 0) {
+ for (i = 0; i < SIZEOF(speeds); i++) {
+ if (speeds[i].sp == BaudRate) {
+ result = speeds[i].s;
+ break;
+ }
+ }
+ }
+ return (result);
+}
+
int
baudrate(void)
{
-size_t i;
-int ret;
-#ifdef TRACE
-char *debug_rate;
-#endif
+int result;
T((T_CALLED("baudrate()")));
*/
#ifdef TRACE
if (SP && !isatty(fileno(SP->_ofp))
- && (debug_rate = getenv("BAUDRATE")) != 0) {
- if (sscanf(debug_rate, "%d", &ret) != 1)
+ && getenv("BAUDRATE") != 0) {
+ int ret;
+ if ((ret = _nc_getenv_num("BAUDRATE")) <= 0)
ret = 9600;
+ ospeed = _nc_ospeed(ret);
returnCode(ret);
}
else
#endif
#ifdef TERMIOS
- ret = cfgetospeed(&cur_term->Nttyb);
+ ospeed = cfgetospeed(&cur_term->Nttyb);
#else
- ret = cur_term->Nttyb.sg_ospeed;
+ ospeed = cur_term->Nttyb.sg_ospeed;
#endif
- if(ret < 0 || (speed_t)ret > speeds[SIZEOF(speeds)-1].s)
- returnCode(ERR);
- cur_term->_baudrate = ERR;
- for (i = 0; i < SIZEOF(speeds); i++)
- if (speeds[i].s == (speed_t)ret)
- {
- cur_term->_baudrate = speeds[i].sp;
- break;
- }
- returnCode(cur_term->_baudrate);
+ result = _nc_baudrate(ospeed);
+ if (cur_term != 0)
+ cur_term->_baudrate = result;
+
+ returnCode(result);
}
*/
#include <curses.priv.h>
-#include <term.h> /* TTY, cur_term */
+#include <term_entry.h> /* TTY, cur_term */
+#include <termcap.h> /* ospeed */
-MODULE_ID("$Id: lib_cur_term.c,v 1.2 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_cur_term.c,v 1.8 1999/07/24 20:08:19 tom Exp $")
TERMINAL *cur_term;
-int _nc_get_curterm(TTY *buf)
-{
- if (cur_term == 0
- || GET_TTY(cur_term->Filedes, buf) != 0)
- return(ERR);
- return (OK);
-}
-
-int _nc_set_curterm(TTY *buf)
-{
- if (cur_term == 0
- || SET_TTY(cur_term->Filedes, buf) != 0)
- return(ERR);
- return (OK);
-}
-
-TERMINAL *set_curterm(TERMINAL *term)
+TERMINAL *set_curterm(TERMINAL *termp)
{
TERMINAL *oldterm = cur_term;
- cur_term = term;
+ if ((cur_term = termp) != 0) {
+ ospeed = _nc_ospeed(cur_term->_baudrate);
+ PC = (pad_char != NULL) ? pad_char[0] : 0;
+ }
return oldterm;
}
-int del_curterm(TERMINAL *term)
+int del_curterm(TERMINAL *termp)
{
- T((T_CALLED("del_curterm(%p)"), term));
+ T((T_CALLED("del_curterm(%p)"), termp));
- if (term != 0) {
- FreeIfNeeded(term->type.str_table);
- FreeIfNeeded(term->type.term_names);
- free(term);
+ if (termp != 0) {
+ _nc_free_termtype(&(termp->type));
+ free(termp);
+ if (termp == cur_term)
+ cur_term = 0;
returnCode(OK);
}
returnCode(ERR);
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
#include <curses.priv.h>
-MODULE_ID("$Id: lib_data.c,v 1.13 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: lib_data.c,v 1.14 1999/01/31 01:34:33 Ilya.Zakharevich Exp $")
/*
* OS/2's native linker complains if we don't initialize public data when
my_screen = sp;
}
#else
-SCREEN *SP;
+SCREEN *SP = NULL; /* Some linkers require initialized data... */
#endif
****************************************************************************/
+/*
+** lib_has_cap.c
+**
+** The routines to query terminal capabilities
+**
+*/
+
#include <curses.priv.h>
#include <term.h>
-#include <tic.h>
-MODULE_ID("$Id: lib_ti.c,v 1.9 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: lib_has_cap.c,v 1.1 1998/10/23 15:32:21 tom Exp $")
-int tigetflag(const char *str)
+bool has_ic(void)
{
-int i;
-
- T(("tigetflag(%s)", str));
-
- if (cur_term != 0)
- for (i = 0; i < BOOLCOUNT; i++)
- if (!strcmp(str, boolnames[i]))
- return cur_term->type.Booleans[i];
-
- return ABSENT_BOOLEAN;
+ T((T_CALLED("has_ic()")));
+ returnCode(cur_term &&
+ (insert_character || parm_ich
+ || (enter_insert_mode && exit_insert_mode))
+ && (delete_character || parm_dch));
}
-int tigetnum(const char *str)
+bool has_il(void)
{
-int i;
-
- T(("tigetnum(%s)", str));
-
- if (cur_term != 0)
- for (i = 0; i < NUMCOUNT; i++)
- if (!strcmp(str, numnames[i]))
- return cur_term->type.Numbers[i];
-
- return CANCELLED_NUMERIC;
-}
-
-char *tigetstr(const char *str)
-{
-int i;
-
- T(("tigetstr(%s)", str));
-
- if (cur_term != 0)
- for (i = 0; i < STRCOUNT; i++)
- if (!strcmp(str, strnames[i]))
- return cur_term->type.Strings[i];
-
- return CANCELLED_STRING;
+ T((T_CALLED("has_il()")));
+ returnCode(cur_term
+ && (insert_line || parm_insert_line)
+ && (delete_line || parm_delete_line));
}
* lib_kernel.c
*
* Misc. low-level routines:
- * reset_prog_mode()
- * reset_shell_mode()
* erasechar()
* killchar()
* flushinp()
- * savetty()
- * resetty()
*
* The baudrate() and delay_output() functions could logically live here,
* but are in other modules to reduce the static-link size of programs
#include <curses.priv.h>
#include <term.h> /* cur_term */
-MODULE_ID("$Id: lib_kernel.c,v 1.17 1998/02/11 12:13:57 tom Exp $")
-
-int reset_prog_mode(void)
-{
- T((T_CALLED("reset_prog_mode()")));
-
- if (cur_term != 0) {
- _nc_set_curterm(&cur_term->Nttyb);
- if (SP && stdscr && stdscr->_use_keypad)
- _nc_keypad(TRUE);
- returnCode(OK);
- }
- returnCode(ERR);
-}
-
-
-int reset_shell_mode(void)
-{
- T((T_CALLED("reset_shell_mode()")));
-
- if (cur_term != 0) {
- if (SP)
- {
- fflush(SP->_ofp);
- _nc_keypad(FALSE);
- }
- returnCode(_nc_set_curterm(&cur_term->Ottyb));
- }
- returnCode(ERR);
-}
+MODULE_ID("$Id: lib_kernel.c,v 1.19 1998/12/20 00:18:45 tom Exp $")
/*
* erasechar()
}
returnCode(ERR);
}
-
-/*
-** savetty() and resetty()
-**
-*/
-
-static TTY buf;
-
-int savetty(void)
-{
- T((T_CALLED("savetty()")));
-
- returnCode(_nc_get_curterm(&buf));
-}
-
-int resetty(void)
-{
- T((T_CALLED("resetty()")));
-
- returnCode(_nc_set_curterm(&buf));
-}
#include <curses.priv.h>
-MODULE_ID("$Id: lib_longname.c,v 1.6 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: lib_longname.c,v 1.7 1999/01/03 01:47:45 tom Exp $")
char *
longname(void)
{
char *ptr;
- T(("longname() called"));
+ T((T_CALLED("longname()")));
for (ptr = ttytype + strlen(ttytype); ptr > ttytype; ptr--)
if (*ptr == '|')
- return(ptr + 1);
+ returnPtr(ptr + 1);
- return(ttytype);
+ returnPtr(ttytype);
}
#include <curses.priv.h>
-#if USE_FUNC_POLL
+#if HAVE_NANOSLEEP
+#include <time.h>
+#elif USE_FUNC_POLL
#include <stropts.h>
#include <poll.h>
#if HAVE_SYS_TIME_H
#if HAVE_SYS_SELECT_H
#include <sys/select.h>
#endif
-#endif
+#endif
-MODULE_ID("$Id: lib_napms.c,v 1.4 1998/02/13 10:24:54 jbuhler Exp $")
+MODULE_ID("$Id: lib_napms.c,v 1.6 1999/10/21 23:01:41 tom Exp $")
int napms(int ms)
{
ts.tv_nsec = (ms % 1000) * 1000000;
nanosleep(&ts, NULL);
}
-#elif HAVE_USLEEP
- usleep(1000*(unsigned)ms);
#elif USE_FUNC_POLL
{
struct pollfd fds[1];
#include <term.h> /* keypad_xmit, keypad_local, meta_on, meta_off */
/* cursor_visible,cursor_normal,cursor_invisible */
-MODULE_ID("$Id: lib_options.c,v 1.29 1998/02/11 12:13:55 tom Exp $")
-
-int has_ic(void)
-{
- T((T_CALLED("has_ic()")));
- returnCode((insert_character || parm_ich
- || (enter_insert_mode && exit_insert_mode))
- && (delete_character || parm_dch));
-}
-
-int has_il(void)
-{
- T((T_CALLED("has_il()")));
- returnCode((insert_line || parm_insert_line)
- && (delete_line || parm_delete_line));
-}
+MODULE_ID("$Id: lib_options.c,v 1.36 1999/10/22 21:38:57 tom Exp $")
int idlok(WINDOW *win, bool flag)
{
returnCode(ERR);
}
-int wtimeout(WINDOW *win, int delay)
+void wtimeout(WINDOW *win, int delay)
{
T((T_CALLED("wtimeout(%p,%d)"), win, delay));
if (win) {
win->_delay = delay;
- returnCode(OK);
}
- else
- returnCode(ERR);
}
int keypad(WINDOW *win, bool flag)
break;
}
SP->_cursor = vis;
- (void) fflush(SP->_ofp);
+ _nc_flush();
returnCode(cursor==-1 ? 1 : cursor);
}
**
*/
-
+#ifdef NCURSES_EXT_FUNCS
static int has_key_internal(int keycode, struct tries *tp)
{
if (tp == 0)
T((T_CALLED("has_key(%d)"), keycode));
returnCode(has_key_internal(keycode, SP->_keytry));
}
-
-/*
-** init_keytry()
-**
-** Construct the try for the current terminal's keypad keys.
-**
-*/
-
-static void init_keytry(void)
-{
-/* LINT_PREPRO
-#if 0*/
-#include <keys.tries>
-/* LINT_PREPRO
-#endif*/
- size_t n;
-
- /* The SP->_keytry value is initialized in newterm(), where the SP
- * structure is created, because we can not tell where keypad() or
- * mouse_activate() (which will call keyok()) are first called.
- */
-
- for (n = 0; n < SIZEOF(table); n++)
- if (table[n].offset < STRCOUNT)
- _nc_add_to_try(&(SP->_keytry),
- CUR Strings[table[n].offset],
- table[n].code);
-}
+#endif /* NCURSES_EXT_FUNCS */
/* Turn the keypad on/off
*
{
TPUTS_TRACE("keypad_xmit");
putp(keypad_xmit);
- (void) fflush(SP->_ofp);
+ _nc_flush();
}
else if (! flag && keypad_local)
{
TPUTS_TRACE("keypad_local");
putp(keypad_local);
- (void) fflush(SP->_ofp);
+ _nc_flush();
}
- if (!SP->_tried) {
- init_keytry();
+ if (flag && !SP->_tried) {
+ _nc_init_keytry();
SP->_tried = TRUE;
}
return(OK);
#include <term.h>
-MODULE_ID("$Id: lib_print.c,v 1.9 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: lib_print.c,v 1.11 1999/02/27 19:59:05 tom Exp $")
int mcprint(char *data, int len)
/* ship binary character data to the printer via mc4/mc5/mc5p */
size_t onsize, offsize, res;
errno = 0;
- if (!prtr_non && (!prtr_on || !prtr_off))
+ if (!cur_term || (!prtr_non && (!prtr_on || !prtr_off)))
{
errno = ENODEV;
return(ERR);
offsize = strlen(prtr_off);
}
- if ((mybuf = malloc(onsize + len + offsize + 1)) == (char *)NULL)
+ if ((mybuf = typeMalloc(char, onsize + len + offsize + 1)) == (char *)0)
{
errno = ENOMEM;
return(ERR);
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
+ * and: Eric S. Raymond <esr@snark.thyrsus.com> *
+ ****************************************************************************/
+
+
+/*
+ * raw.c
+ *
+ * Routines:
+ * raw()
+ * cbreak()
+ * noraw()
+ * nocbreak()
+ * qiflush()
+ * noqiflush()
+ * intrflush()
+ *
+ */
+
+#include <curses.priv.h>
+#include <term.h> /* cur_term */
+
+MODULE_ID("$Id: lib_raw.c,v 1.3 1999/03/06 22:28:24 tom Exp $")
+
+#if defined(SVR4_TERMIO) && !defined(_POSIX_SOURCE)
+#define _POSIX_SOURCE
+#endif
+
+#if HAVE_SYS_TERMIO_H
+#include <sys/termio.h> /* needed for ISC */
+#endif
+
+#ifdef __EMX__
+#include <io.h>
+#include <fcntl.h>
+#endif
+
+#define COOKED_INPUT (IXON|BRKINT|PARMRK)
+
+#ifdef TRACE
+#define BEFORE(N) if (_nc_tracing&TRACE_BITS) _tracef("%s before bits: %s", N, _nc_tracebits())
+#define AFTER(N) if (_nc_tracing&TRACE_BITS) _tracef("%s after bits: %s", N, _nc_tracebits())
+#else
+#define BEFORE(s)
+#define AFTER(s)
+#endif /* TRACE */
+
+int raw(void)
+{
+ T((T_CALLED("raw()")));
+ if (SP != 0 && cur_term != 0) {
+
+ SP->_raw = TRUE;
+ SP->_cbreak = 1;
+
+#ifdef __EMX__
+ setmode(SP->_ifd, O_BINARY);
+#endif
+
+#ifdef TERMIOS
+ BEFORE("raw");
+ cur_term->Nttyb.c_lflag &= ~(ICANON|ISIG);
+ cur_term->Nttyb.c_iflag &= ~(COOKED_INPUT);
+ cur_term->Nttyb.c_cc[VMIN] = 1;
+ cur_term->Nttyb.c_cc[VTIME] = 0;
+ AFTER("raw");
+#else
+ cur_term->Nttyb.sg_flags |= RAW;
+#endif
+ returnCode(_nc_set_tty_mode(&cur_term->Nttyb));
+ }
+ returnCode(ERR);
+}
+
+int cbreak(void)
+{
+ T((T_CALLED("cbreak()")));
+
+ SP->_cbreak = 1;
+
+#ifdef __EMX__
+ setmode(SP->_ifd, O_BINARY);
+#endif
+
+#ifdef TERMIOS
+ BEFORE("cbreak");
+ cur_term->Nttyb.c_lflag &= ~ICANON;
+ cur_term->Nttyb.c_iflag &= ~ICRNL;
+ cur_term->Nttyb.c_lflag |= ISIG;
+ cur_term->Nttyb.c_cc[VMIN] = 1;
+ cur_term->Nttyb.c_cc[VTIME] = 0;
+ AFTER("cbreak");
+#else
+ cur_term->Nttyb.sg_flags |= CBREAK;
+#endif
+ returnCode(_nc_set_tty_mode( &cur_term->Nttyb));
+}
+
+void qiflush(void)
+{
+ T((T_CALLED("qiflush()")));
+
+ /*
+ * Note: this implementation may be wrong. See the comment under
+ * intrflush().
+ */
+
+#ifdef TERMIOS
+ BEFORE("qiflush");
+ cur_term->Nttyb.c_lflag &= ~(NOFLSH);
+ AFTER("qiflush");
+ (void)_nc_set_tty_mode( &cur_term->Nttyb);
+ returnVoid;
+#endif
+}
+
+
+int noraw(void)
+{
+ T((T_CALLED("noraw()")));
+
+ SP->_raw = FALSE;
+ SP->_cbreak = 0;
+
+#ifdef __EMX__
+ setmode(SP->_ifd, O_TEXT);
+#endif
+
+#ifdef TERMIOS
+ BEFORE("noraw");
+ cur_term->Nttyb.c_lflag |= ISIG|ICANON;
+ cur_term->Nttyb.c_iflag |= COOKED_INPUT;
+ AFTER("noraw");
+#else
+ cur_term->Nttyb.sg_flags &= ~(RAW|CBREAK);
+#endif
+ returnCode(_nc_set_tty_mode( &cur_term->Nttyb));
+}
+
+
+int nocbreak(void)
+{
+ T((T_CALLED("nocbreak()")));
+
+ SP->_cbreak = 0;
+
+#ifdef __EMX__
+ setmode(SP->_ifd, O_TEXT);
+#endif
+
+#ifdef TERMIOS
+ BEFORE("nocbreak");
+ cur_term->Nttyb.c_lflag |= ICANON;
+ cur_term->Nttyb.c_iflag |= ICRNL;
+ AFTER("nocbreak");
+#else
+ cur_term->Nttyb.sg_flags &= ~CBREAK;
+#endif
+ returnCode(_nc_set_tty_mode( &cur_term->Nttyb));
+}
+
+void noqiflush(void)
+{
+ T((T_CALLED("noqiflush()")));
+
+ /*
+ * Note: this implementation may be wrong. See the comment under
+ * intrflush().
+ */
+
+#ifdef TERMIOS
+ BEFORE("noqiflush");
+ cur_term->Nttyb.c_lflag |= NOFLSH;
+ AFTER("noqiflush");
+ (void)_nc_set_tty_mode( &cur_term->Nttyb);
+ returnVoid;
+#endif
+}
+
+int intrflush(WINDOW *win GCC_UNUSED, bool flag)
+{
+ T((T_CALLED("intrflush(%d)"), flag));
+
+ /*
+ * This call does the same thing as the qiflush()/noqiflush()
+ * pair. We know for certain that SVr3 intrflush() tweaks the
+ * NOFLSH bit; on the other hand, the match (in the SVr4 man
+ * pages) between the language describing NOFLSH in termio(7)
+ * and the language describing qiflush()/noqiflush() in
+ * curs_inopts(3x) is too exact to be coincidence.
+ */
+
+#ifdef TERMIOS
+ BEFORE("intrflush");
+ if (flag)
+ cur_term->Nttyb.c_lflag &= ~(NOFLSH);
+ else
+ cur_term->Nttyb.c_lflag |= (NOFLSH);
+ AFTER("intrflush");
+ returnCode(_nc_set_tty_mode( &cur_term->Nttyb));
+#else
+ returnCode(ERR);
+#endif
+}
*/
#include <curses.priv.h>
+#include <tic.h> /* for MAX_NAME_SIZE */
+#include <term_entry.h>
#if defined(SVR4_TERMIO) && !defined(_POSIX_SOURCE)
#define _POSIX_SOURCE
#include <term.h> /* lines, columns, cur_term */
-MODULE_ID("$Id: lib_setup.c,v 1.37 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_setup.c,v 1.55 1999/08/21 23:06:08 tom Exp $")
/****************************************************************************
*
****************************************************************************/
#if HAVE_SIZECHANGE
-# if !defined(sun) || !HAVE_TERMIOS_H
+# if !defined(sun) || !TERMIOS
# if HAVE_SYS_IOCTL_H
# include <sys/ioctl.h>
# endif
# endif
#endif
-extern TERMINAL *cur_term;
-
static int _use_env = TRUE;
static void do_prototype(void);
static void _nc_get_screensize(int *linep, int *colp)
/* Obtain lines/columns values from the environment and/or terminfo entry */
{
-char *rows, *cols;
-
/* figure out the size of the screen */
T(("screen size: terminfo lines = %d columns = %d", lines, columns));
}
else /* usually want to query LINES and COLUMNS from environment */
{
+ int value;
+
*linep = *colp = 0;
/* first, look for environment variables */
- rows = getenv("LINES");
- if (rows != 0)
- *linep = atoi(rows);
- cols = getenv("COLUMNS");
- if (cols != 0)
- *colp = atoi(cols);
+ if ((value = _nc_getenv_num("LINES")) > 0) {
+ *linep = value;
+ }
+ if ((value = _nc_getenv_num("COLUMNS")) > 0) {
+ *colp = value;
+ }
T(("screen size: environment LINES = %d COLUMNS = %d",*linep,*colp));
+#ifdef __EMX__
+ if (*linep <= 0 || *colp <= 0)
+ {
+ int screendata[2];
+ _scrsize(screendata);
+ *colp = screendata[0];
+ *linep = screendata[1];
+ T(("EMX screen size: environment LINES = %d COLUMNS = %d",*linep,*colp));
+ }
+#endif
#if HAVE_SIZECHANGE
/* if that didn't work, maybe we can try asking the OS */
if (*linep <= 0 || *colp <= 0)
} while
(errno == EINTR);
- *linep = WINSIZE_ROWS(size);
- *colp = WINSIZE_COLS(size);
+ /*
+ * Solaris lets users override either dimension with an
+ * environment variable.
+ */
+ if (*linep <= 0)
+ *linep = WINSIZE_ROWS(size);
+ if (*colp <= 0)
+ *colp = WINSIZE_COLS(size);
}
/* FALLTHRU */
failure:;
T(("screen size is %dx%d", *linep, *colp));
-#ifdef init_tabs
if (init_tabs != -1)
TABSIZE = (int)init_tabs;
else
-#endif /* init_tabs */
TABSIZE = 8;
T(("TABSIZE = %d", TABSIZE));
char filename[PATH_MAX];
int status;
- if ((status = _nc_read_entry(tn, filename, tp)) == 1)
- return(1);
-
-#ifndef PURE_TERMINFO
/*
- * Try falling back on the termcap file. Note: allowing this call
- * links the entire terminfo/termcap compiler into the startup code.
- * It's preferable to build a real terminfo database and use that.
+ * $TERM shouldn't contain pathname delimiters.
*/
- status = _nc_read_termcap_entry(tn, tp);
+ if (strchr(tn, '/'))
+ return 0;
+
+ if ((status = _nc_read_entry(tn, filename, tp)) != 1) {
+
+#ifndef PURE_TERMINFO
+ /*
+ * Try falling back on the termcap file.
+ * Note: allowing this call links the entire terminfo/termcap
+ * compiler into the startup code. It's preferable to build a
+ * real terminfo database and use that.
+ */
+ status = _nc_read_termcap_entry(tn, tp);
#endif /* PURE_TERMINFO */
+ }
+
+ /*
+ * If we have an entry, force all of the cancelled strings to null
+ * pointers so we don't have to test them in the rest of the library.
+ * (The terminfo compiler bypasses this logic, since it must know if
+ * a string is cancelled, for merging entries).
+ */
+ if (status == 1) {
+ int n;
+ for_each_boolean(n,tp)
+ if (!VALID_BOOLEAN(tp->Booleans[n]))
+ tp->Booleans[n] = FALSE;
+ for_each_string(n,tp)
+ if (tp->Strings[n] == CANCELLED_STRING)
+ tp->Strings[n] = ABSENT_STRING;
+ }
return(status);
}
#endif
*
*/
-int setupterm(const char *tname, int Filedes, int *errret)
+int setupterm(NCURSES_CONST char *tname, int Filedes, int *errret)
{
struct term *term_ptr;
int status;
- T((T_CALLED("setupterm(\"%s\",%d,%p)"), tname, Filedes, errret));
+ T((T_CALLED("setupterm(%s,%d,%p)"), _nc_visbuf(tname), Filedes, errret));
if (tname == 0) {
tname = getenv("TERM");
- if (tname == 0 || *tname == '\0')
+ if (tname == 0 || *tname == '\0') {
ret_error0(-1, "TERM environment variable not set.\n");
+ }
+ }
+ if (strlen(tname) > MAX_NAME_SIZE) {
+ ret_error(-1, "TERM environment must be <= %d characters.\n",
+ MAX_NAME_SIZE);
}
T(("your terminal name is %s", tname));
term_ptr = typeCalloc(TERMINAL, 1);
- if (term_ptr == 0)
+ if (term_ptr == 0) {
ret_error0(-1, "Not enough memory to create terminal structure.\n") ;
+ }
#if USE_DATABASE
status = grab_entry(tname, &term_ptr->type);
#else
if (fallback)
{
- memcpy(&term_ptr->type, fallback, sizeof(TERMTYPE));
+ term_ptr->type = *fallback;
status = 1;
}
}
ret_error(0, "'%s': unknown terminal type.\n", tname);
}
+ /*
+ * Improve on SVr4 curses. If an application mixes curses and termcap
+ * calls, it may call both initscr and tgetent. This is not really a
+ * good thing to do, but can happen if someone tries using ncurses with
+ * the readline library. The problem we are fixing is that when
+ * tgetent calls setupterm, the resulting Ottyb struct in cur_term is
+ * zeroed. A subsequent call to endwin uses the zeroed terminal
+ * settings rather than the ones saved in initscr. So we check if
+ * cur_term appears to contain terminal settings for the same output
+ * file as our current call - and copy those terminal settings. (SVr4
+ * curses does not do this, however applications that are working
+ * around the problem will still work properly with this feature).
+ */
+ if (cur_term != 0) {
+ if (cur_term->Filedes == Filedes)
+ term_ptr->Ottyb = cur_term->Ottyb;
+ }
+
set_curterm(term_ptr);
if (command_character && getenv("CC"))
T((T_CREATE("screen %s %dx%d"), tname, LINES, COLS));
- if (generic_type)
+ if (generic_type) {
ret_error(0, "'%s': I need something more specific.\n", tname);
- if (hard_copy)
+ }
+ if (hard_copy) {
ret_error(1, "'%s': I can't handle hardcopy terminals.\n", tname);
-
+ }
returnCode(OK);
}
static void
do_prototype(void)
{
-int i, j;
+int i;
char CC;
char proto;
char *tmp;
CC = *tmp;
proto = *command_character;
- for (i=0; i < STRCOUNT; i++) {
- j = 0;
- while (cur_term->type.Strings[i][j]) {
- if (cur_term->type.Strings[i][j] == proto)
- cur_term->type.Strings[i][j] = CC;
- j++;
- }
+ for_each_string(i, &(cur_term->type)) {
+ for (tmp = cur_term->type.Strings[i]; *tmp; tmp++) {
+ if (*tmp == proto)
+ *tmp = CC;
+ }
}
}
#include <tic.h>
#define __INTERNAL_CAPS_VISIBLE
-#include <term.h>
+#include <term_entry.h>
-MODULE_ID("$Id: lib_termcap.c,v 1.17 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_termcap.c,v 1.29 1999/09/05 01:06:43 tom Exp $")
/*
some of the code in here was contributed by:
Magnus Bengtsson, d6mbeng@dtek.chalmers.se
*/
-char PC;
char *UP;
char *BC;
-short ospeed;
/***************************************************************************
*
int tgetent(char *bufp GCC_UNUSED, const char *name)
{
int errcode;
-#if defined(TERMIOS)
-speed_t speed;
-#endif
-
- T(("calling tgetent"));
- setupterm(name, STDOUT_FILENO, &errcode);
-
- if (errcode != 1)
- return(errcode);
-
- if (cursor_left)
- if ((backspaces_with_bs = !strcmp(cursor_left, "\b")) == 0)
- backspace_if_not_bs = cursor_left;
-
- /* we're required to export these */
- if (pad_char != NULL)
- PC = pad_char[0];
- if (cursor_up != NULL)
- UP = cursor_up;
- if (backspace_if_not_bs != NULL)
- BC = backspace_if_not_bs;
-#if defined(TERMIOS)
- /*
- * Back-convert to the funny speed encoding used by the old BSD
- * curses library. Method suggested by Andrey Chernov
- * <ache@astral.msk.su>
- */
- if ((speed = cfgetospeed(&cur_term->Nttyb)) < 1)
- ospeed = 1; /* assume lowest non-hangup speed */
- else
- {
- const speed_t *sp;
- static const speed_t speeds[] = {
-#ifdef B115200
- B115200,
-#endif
-#ifdef B57600
- B57600,
-#endif
-#ifdef B38400
- B38400,
-#else
-#ifdef EXTB
- EXTB,
-#endif
-#endif /* B38400 */
-#ifdef B19200
- B19200,
-#else
-#ifdef EXTA
- EXTA,
-#endif
-#endif /* B19200 */
- B9600,
- B4800,
- B2400,
- B1800,
- B1200,
- B600,
- B300,
- B200,
- B150,
- B134,
- B110,
- B75,
- B50,
- B0,
- };
-#define MAXSPEED SIZEOF(speeds)
-
- for (sp = speeds; sp < speeds + MAXSPEED; sp++) {
- if (sp[0] <= speed) {
- break;
- }
- }
- ospeed = MAXSPEED - (sp - speeds);
- }
-#else
- ospeed = cur_term->Nttyb.sg_ospeed;
-#endif
+
+ T((T_CALLED("tgetent()")));
+
+ setupterm((NCURSES_CONST char *)name, STDOUT_FILENO, &errcode);
+
+ if (errcode == 1) {
+
+ if (cursor_left)
+ if ((backspaces_with_bs = !strcmp(cursor_left, "\b")) == 0)
+ backspace_if_not_bs = cursor_left;
+
+ /* we're required to export these */
+ if (pad_char != NULL)
+ PC = pad_char[0];
+ if (cursor_up != NULL)
+ UP = cursor_up;
+ if (backspace_if_not_bs != NULL)
+ BC = backspace_if_not_bs;
+
+ (void) baudrate(); /* sets ospeed as a side-effect */
/* LINT_PREPRO
#if 0*/
/* LINT_PREPRO
#endif*/
- return errcode;
+ }
+ returnCode(errcode);
}
/***************************************************************************
*
***************************************************************************/
-int tgetflag(const char *id)
+int tgetflag(NCURSES_CONST char *id)
{
int i;
- T(("tgetflag: %s", id));
+ T((T_CALLED("tgetflag(%s)"), id));
if (cur_term != 0) {
- for (i = 0; i < BOOLCOUNT; i++)
- if (!strcmp(id, boolcodes[i]))
- return cur_term->type.Booleans[i];
+ TERMTYPE *tp = &(cur_term->type);
+ for_each_boolean(i, tp) {
+ const char *capname = ExtBoolname(tp, i, boolcodes);
+ if (!strncmp(id, capname, 2)) {
+ /* setupterm forces invalid booleans to false */
+ returnCode(tp->Booleans[i]);
+ }
+ }
}
- return ERR;
+ returnCode(0); /* Solaris does this */
}
/***************************************************************************
*
***************************************************************************/
-int tgetnum(const char *id)
+int tgetnum(NCURSES_CONST char *id)
{
int i;
- T(("tgetnum: %s", id));
+ T((T_CALLED("tgetnum(%s)"), id));
if (cur_term != 0) {
- for (i = 0; i < NUMCOUNT; i++)
- if (!strcmp(id, numcodes[i]))
- return cur_term->type.Numbers[i];
+ TERMTYPE *tp = &(cur_term->type);
+ for_each_number(i, tp) {
+ const char *capname = ExtNumname(tp, i, numcodes);
+ if (!strncmp(id, capname, 2)) {
+ if (!VALID_NUMERIC(tp->Numbers[i]))
+ return -1;
+ returnCode(tp->Numbers[i]);
+ }
+ }
}
- return ERR;
+ returnCode(ERR);
}
/***************************************************************************
*
***************************************************************************/
-char *tgetstr(const char *id, char **area GCC_UNUSED)
+char *tgetstr(NCURSES_CONST char *id, char **area)
{
int i;
- T(("tgetstr: %s", id));
+ T((T_CALLED("tgetstr(%s,%p)"), id, area));
if (cur_term != 0) {
- for (i = 0; i < STRCOUNT; i++) {
- T(("trying %s", strcodes[i]));
- if (!strcmp(id, strcodes[i])) {
- T(("found match : %s", cur_term->type.Strings[i]));
- return cur_term->type.Strings[i];
- }
+ TERMTYPE *tp = &(cur_term->type);
+ for_each_string(i, tp) {
+ const char *capname = ExtStrname(tp, i, strcodes);
+ T(("trying %s", capname));
+ if (!strncmp(id, capname, 2)) {
+ T(("found match : %s", _nc_visbuf(tp->Strings[i])));
+ /* setupterm forces cancelled strings to null */
+ if (area != 0
+ && *area != 0
+ && VALID_STRING(tp->Strings[i])) {
+ (void) strcpy(*area, tp->Strings[i]);
+ *area += strlen(*area) + 1;
+ }
+ returnPtr(tp->Strings[i]);
}
+ }
}
- return NULL;
+ returnPtr(NULL);
}
/*
char *tgoto(const char *string, int x, int y)
{
- return(tparm(string, y, x));
+ T((T_CALLED("tgoto(%s,%d,%d)"), string, x, y));
+ returnPtr(tparm((NCURSES_CONST char *)string, y, x));
}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+#include <curses.priv.h>
+#include <tic.h> /* for MAX_ALIAS */
+
+MODULE_ID("$Id: lib_termname.c,v 1.2 1999/07/24 21:02:40 tom Exp $")
+
+char *termname(void)
+{
+char *name = getenv("TERM");
+static char ret[MAX_ALIAS+1];
+
+ T(("termname() called"));
+
+ if (name != 0) {
+ (void) strncpy(ret, name, sizeof(ret) - 1);
+ name = ret;
+ }
+ return name;
+}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
+ * and: Eric S. Raymond <esr@snark.thyrsus.com> *
+ ****************************************************************************/
+
+
+#include <curses.priv.h>
+
+#include <term_entry.h>
+#include <tic.h>
+
+MODULE_ID("$Id: lib_ti.c,v 1.16 1999/02/28 23:11:28 tom Exp $")
+
+int tigetflag(NCURSES_CONST char *str)
+{
+int i;
+
+ T((T_CALLED("tigetflag(%s)"), str));
+
+ if (cur_term != 0) {
+ TERMTYPE *tp = &(cur_term->type);
+ for_each_boolean(i,tp) {
+ const char *capname = ExtBoolname(tp, i, boolnames);
+ if (!strcmp(str, capname)) {
+ /* setupterm forces invalid booleans to false */
+ returnCode(tp->Booleans[i]);
+ }
+ }
+ }
+
+ returnCode(ABSENT_BOOLEAN);
+}
+
+int tigetnum(NCURSES_CONST char *str)
+{
+int i;
+
+ T((T_CALLED("tigetnum(%s)"), str));
+
+ if (cur_term != 0) {
+ TERMTYPE *tp = &(cur_term->type);
+ for_each_number(i, tp) {
+ const char *capname = ExtNumname(tp, i, numnames);
+ if (!strcmp(str, capname)) {
+ if (!VALID_NUMERIC(tp->Numbers[i]))
+ return -1;
+ returnCode(tp->Numbers[i]);
+ }
+ }
+ }
+
+ returnCode(CANCELLED_NUMERIC); /* Solaris returns a -1 instead */
+}
+
+char *tigetstr(NCURSES_CONST char *str)
+{
+int i;
+
+ T((T_CALLED("tigetstr(%s)"), str));
+
+ if (cur_term != 0) {
+ TERMTYPE *tp = &(cur_term->type);
+ for_each_string(i, tp) {
+ const char *capname = ExtStrname(tp, i, strnames);
+ if (!strcmp(str, capname)) {
+ /* setupterm forces cancelled strings to null */
+ returnPtr(tp->Strings[i]);
+ }
+ }
+ }
+
+ returnPtr(CANCELLED_STRING);
+}
#include <curses.priv.h>
+#include <ctype.h>
#include <term.h>
+#include <tic.h>
-MODULE_ID("$Id: lib_tparm.c,v 1.22 1998/02/11 12:13:54 tom Exp $")
+MODULE_ID("$Id: lib_tparm.c,v 1.39 1999/06/06 00:04:55 tom Exp $")
/*
* char *
* screen visible to the user, not to any unseen memory.) If
* the terminal has memory relative cursor addressing, that can
* be indicated by
- *
+ *
* The parameter mechanism uses a stack and special %
* codes to manipulate it. Typically a sequence will push one
* of the parameters onto the stack and then print it in some
* format. Often more complex operations are necessary.
- *
+ *
* The % encodings have the following meanings:
- *
+ *
* %% outputs `%'
- * %d print pop() like %d in printf()
- * %2d print pop() like %2d in printf()
- * %02d print pop() like %02d in printf()
- * %3d print pop() like %3d in printf()
- * %03d print pop() like %03d in printf()
- * %2x print pop() like %2x in printf()
- * %02x print pop() like %02x in printf()
- * %3x print pop() like %3x in printf()
- * %03x print pop() like %03x in printf()
* %c print pop() like %c in printf()
* %s print pop() like %s in printf()
- *
+ * %[[:]flags][width[.precision]][doxXs]
+ * as in printf, flags are [-+#] and space
+ *
* %p[1-9] push ith parm
- * %P[a-z] set variable [a-z] to pop()
- * %g[a-z] get variable [a-z] and push it
+ * %P[a-z] set dynamic variable [a-z] to pop()
+ * %g[a-z] get dynamic variable [a-z] and push it
+ * %P[A-Z] set static variable [A-Z] to pop()
+ * %g[A-Z] get static variable [A-Z] and push it
+ * %l push strlen(pop)
* %'c' push char constant c
* %{nn} push integer constant nn
- *
+ *
* %+ %- %* %/ %m
* arithmetic (%m is mod): push(pop() op pop())
* %& %| %^ bit operations: push(pop() op pop())
* %A %O logical and & or operations for conditionals
* %! %~ unary operations push(op pop())
* %i add 1 to first two parms (for ANSI terminals)
- *
+ *
* %? expr %t thenpart %e elsepart %;
* if-then-else, %e elsepart is optional.
* else-if's are possible ala Algol 68:
* %? c1 %t b1 %e c2 %t b2 %e c3 %t b3 %e c4 %t b4 %e b5 %;
- *
+ *
* For those of the above operators which are binary and not commutative,
* the stack works in the usual way, with
* %gx %gy %m
* resulting in x mod y, not the reverse.
*/
-#define L_BRACE '{'
-#define R_BRACE '}'
-
#define STACKSIZE 20
typedef union {
}
#endif
-static void save_text(char *s)
+static void really_get_space(size_t need)
{
- size_t want = strlen(s);
- size_t need = want + out_used + 1;
-
- if (need > out_size) {
- out_size = need * 2;
- if (out_buff == 0)
- out_buff = malloc(out_size);
- else
- out_buff = realloc(out_buff, out_size);
- }
- (void)strcpy(out_buff + out_used, s);
- out_used += want;
+ out_size = need * 2;
+ out_buff = typeRealloc(char, out_size, out_buff);
+ if (out_buff == 0)
+ _nc_err_abort("Out of memory");
+}
+
+static inline void get_space(size_t need)
+{
+ need += out_used;
+ if (need > out_size)
+ really_get_space(need);
+}
+
+static inline void save_text(const char *fmt, char *s, int len)
+{
+ size_t s_len = strlen(s);
+ if (len > (int)s_len)
+ s_len = len;
+
+ get_space(s_len + 1);
+
+ (void)sprintf(out_buff+out_used, fmt, s);
+ out_used += strlen(out_buff+out_used);
}
-static void save_number(const char *fmt, int number)
+static inline void save_number(const char *fmt, int number, int len)
{
- char temp[80];
- (void)sprintf(temp, fmt, number);
- save_text(temp);
+ if (len < 30)
+ len = 30; /* actually log10(MAX_INT)+1 */
+
+ get_space(len + 1);
+
+ (void)sprintf(out_buff+out_used, fmt, number);
+ out_used += strlen(out_buff+out_used);
}
static inline void save_char(int c)
{
- static char text[2];
if (c == 0)
c = 0200;
- text[0] = c;
- save_text(text);
+ get_space(1);
+ out_buff[out_used++] = c;
}
static inline void npush(int x)
{
if (stack_ptr < STACKSIZE) {
stack[stack_ptr].num = x;
- stack_ptr++;
- }
+ stack_ptr++;
+ }
}
static inline int npop(void)
static inline char *spop(void)
{
- return (stack_ptr > 0 ? stack[--stack_ptr].str : 0);
+ static char dummy[] = ""; /* avoid const-cast */
+ return (stack_ptr > 0 ? stack[--stack_ptr].str : dummy);
+}
+
+static inline const char *parse_format(const char *s, char *format, int *len)
+{
+ bool done = FALSE;
+ bool allowminus = FALSE;
+ bool dot = FALSE;
+ int prec = 0;
+ int width = 0;
+
+ *len = 0;
+ *format++ = '%';
+ while (*s != '\0' && !done) {
+ switch (*s) {
+ case 'c': /* FALLTHRU */
+ case 'd': /* FALLTHRU */
+ case 'o': /* FALLTHRU */
+ case 'x': /* FALLTHRU */
+ case 'X': /* FALLTHRU */
+ case 's':
+ *format++ = *s;
+ done = TRUE;
+ break;
+ case '.':
+ *format++ = *s++;
+ dot = TRUE;
+ break;
+ case '#':
+ *format++ = *s++;
+ break;
+ case ' ':
+ *format++ = *s++;
+ break;
+ case ':':
+ s++;
+ allowminus = TRUE;
+ break;
+ case '-':
+ if (allowminus) {
+ *format++ = *s++;
+ } else {
+ done = TRUE;
+ }
+ break;
+ default:
+ if (isdigit(*s)) {
+ if (dot)
+ prec = (prec * 10) + (*s - '0');
+ else
+ width = (width * 10) + (*s - '0');
+ *format++ = *s++;
+ } else {
+ done = TRUE;
+ }
+ }
+ }
+ *format = '\0';
+ /* return maximum string length in print */
+ *len = (prec > width) ? prec : width;
+ return s;
}
+#define isUPPER(c) ((c) >= 'A' && (c) <= 'Z')
+#define isLOWER(c) ((c) >= 'a' && (c) <= 'z')
+
static inline char *tparam_internal(const char *string, va_list ap)
{
#define NUM_VARS 26
int param[9];
int popcount;
-int variable[NUM_VARS];
-char len;
int number;
+int len;
int level;
int x, y;
int i;
-int varused = -1;
register const char *cp;
+static size_t len_fmt;
+static char *format;
+static int dynamic_var[NUM_VARS];
+static int static_vars[NUM_VARS];
out_used = 0;
if (string == NULL)
}
}
}
+ if ((size_t)(cp - string) > len_fmt) {
+ len_fmt = (cp - string) + len_fmt + 2;
+ if ((format = typeRealloc(char, len_fmt, format)) == 0)
+ return 0;
+ }
if (number > 9) number = 9;
for (i = 0; i < max(popcount, number); i++) {
/*
* This is a termcap compatibility hack. If there are no explicit pop
- * operations in the string, load the stack in such a way that
+ * operations in the string, load the stack in such a way that
* successive pops will grab successive parameters. That will make
* the expansion of (for example) \E[%d;%dH work correctly in termcap
* style, which means tparam() will expand termcap strings OK.
#ifdef TRACE
if (_nc_tracing & TRACE_CALLS) {
for (i = 0; i < popcount; i++)
- save_number(", %d", param[i]);
+ save_number(", %d", param[i], 0);
_tracef(T_CALLED("%s(%s%s)"), tname, _nc_visbuf(string), out_buff);
out_used = 0;
- }
+ }
#endif /* TRACE */
while (*string) {
- if (*string != '%')
+ if (*string != '%') {
save_char(*string);
- else {
+ } else {
string++;
+ string = parse_format(string, format, &len);
switch (*string) {
default:
break;
save_char('%');
break;
- case 'd':
- save_number("%d", npop());
- break;
-
- case 'x':
- save_number("%x", npop());
- break;
-
- case '0':
- string++;
- len = *string;
- if (len == '2' || len == '3')
- {
- ++string;
- if (*string == 'd') {
- if (len == '2')
- save_number("%02d", npop());
- else
- save_number("%03d", npop());
- }
- else if (*string == 'x') {
- if (len == '2')
- save_number("%02x", npop());
- else
- save_number("%03x", npop());
- }
- }
- break;
-
- case '2':
- string++;
- if (*string == 'd') {
- save_number("%2d", npop());
- }
- else if (*string == 'x') {
- save_number("%2x", npop());
- }
- break;
-
- case '3':
- string++;
- if (*string == 'd') {
- save_number("%3d", npop());
- }
- else if (*string == 'x') {
- save_number("%3x", npop());
- }
+ case 'd': /* FALLTHRU */
+ case 'o': /* FALLTHRU */
+ case 'x': /* FALLTHRU */
+ case 'X': /* FALLTHRU */
+ case 'c':
+ save_number(format, npop(), len);
break;
- case 'c':
- save_char(npop());
+ case 'l':
+ save_number("%d", strlen(spop()), 0);
break;
case 's':
- save_text(spop());
+ save_text(format, spop(), len);
break;
case 'p':
case 'P':
string++;
- i = (*string - 'a');
- if (i >= 0 && i < NUM_VARS) {
- while (varused < i)
- variable[++varused] = 0;
- variable[i] = npop();
+ if (isUPPER(*string)) {
+ i = (*string - 'A');
+ static_vars[i] = npop();
+ } else if (isLOWER(*string)) {
+ i = (*string - 'a');
+ dynamic_var[i] = npop();
}
break;
case 'g':
string++;
- i = (*string - 'a');
- if (i >= 0 && i < NUM_VARS) {
- while (varused < i)
- variable[++varused] = 0;
- npush(variable[i]);
+ if (isUPPER(*string)) {
+ i = (*string - 'A');
+ npush(static_vars[i]);
+ } else if (isLOWER(*string)) {
+ i = (*string - 'a');
+ npush(dynamic_var[i]);
}
break;
- case '\'':
+ case S_QUOTE:
string++;
npush(*string);
string++;
case '/':
y = npop();
x = npop();
- npush(x / y);
+ npush(y ? (x / y) : 0);
break;
case 'm':
y = npop();
x = npop();
- npush(x % y);
+ npush(y ? (x % y) : 0);
break;
case 'A':
string++;
} /* endwhile (*string) */
- if (out_buff == 0)
- out_buff = calloc(1,1);
- if (out_used == 0)
- *out_buff = '\0';
+ if (out_buff == 0 && (out_buff = typeCalloc(char,1)) == NULL)
+ return(NULL);
+ out_buff[out_used] = '\0';
T((T_RETURN("%s"), _nc_visbuf(out_buff)));
return(out_buff);
}
-char *tparm(const char *string, ...)
+char *tparm(NCURSES_CONST char *string, ...)
{
va_list ap;
char *result;
va_end(ap);
return result;
}
-
-#ifdef __UNUSED__ /* we never documented this, and it confuses Emacs */
-char *tparam(const char *string, char *buffer, int bufsiz, ...)
-{
-va_list ap;
-char *result = 0;
-
- va_start(ap, bufsiz);
-#ifdef TRACE
- tname = "tparam";
-#endif /* TRACE */
- if (tparam_internal(string, ap) != 0
- && (int)out_used < bufsiz)
- result = strcpy(buffer, out_buff);
- va_end(ap);
- return result;
-}
-#endif /* __UNUSED__ */
#include <curses.priv.h>
#include <ctype.h>
#include <term.h> /* padding_baud_rate, xon_xoff */
+#include <termcap.h> /* ospeed */
#include <tic.h>
-MODULE_ID("$Id: lib_tputs.c,v 1.30 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: lib_tputs.c,v 1.41 1999/10/22 23:31:24 tom Exp $")
-#define OUTPUT ((SP != 0) ? SP->_ofp : stdout)
+char PC; /* used by termcap library */
+speed_t ospeed; /* used by termcap library */
int _nc_nulls_sent; /* used by 'tack' program */
{
T((T_CALLED("delay_output(%d)"), ms));
- if (cur_term == 0 || cur_term->_baudrate <= 0) {
- (void) fflush(OUTPUT);
- _nc_timed_wait(0, ms, (int *)0);
- }
-#ifdef no_pad_char
- else if (no_pad_char)
+ if (no_pad_char)
napms(ms);
-#endif /* no_pad_char */
else {
register int nullcount;
- char null = '\0';
-
-#ifdef pad_char
- if (pad_char)
- null = pad_char[0];
-#endif /* pad_char */
- nullcount = ms * cur_term->_baudrate / 10000;
+ nullcount = (ms * _nc_baudrate(ospeed)) / 10000;
for (_nc_nulls_sent += nullcount; nullcount > 0; nullcount--)
- my_outch(null);
+ my_outch(PC);
if (my_outch == _nc_outch)
- (void) fflush(OUTPUT);
+ _nc_flush();
}
returnCode(OK);
_nc_outchars++;
#endif /* TRACE */
- putc(ch, OUTPUT);
+ if (SP != 0
+ && SP->_cleanup) {
+ char tmp = ch;
+ /*
+ * POSIX says write() is safe in a signal handler, but the
+ * buffered I/O is not.
+ */
+ write(fileno(NC_OUTPUT), &tmp, 1);
+ } else {
+ putc(ch, NC_OUTPUT);
+ }
return OK;
}
#endif /* BSD_TPUTS */
#ifdef TRACE
-char addrbuf[17];
+char addrbuf[32];
if (_nc_tracing & TRACE_TPUTS)
{
(void) strcpy(addrbuf, "_nc_outch");
else
(void) sprintf(addrbuf, "%p", outc);
- if (_nc_tputs_trace)
+ if (_nc_tputs_trace) {
TR(TRACE_MAXIMUM, ("tputs(%s = %s, %d, %s) called", _nc_tputs_trace, _nc_visbuf(string), affcnt, addrbuf));
- else
+ }
+ else {
TR(TRACE_MAXIMUM, ("tputs(%s, %d, %s) called", _nc_visbuf(string), affcnt, addrbuf));
+ }
_nc_tputs_trace = (char *)NULL;
}
#endif /* TRACE */
- if (string == ABSENT_STRING || string == CANCELLED_STRING)
+ if (!VALID_STRING(string))
return ERR;
if (cur_term == 0) {
always_delay = (string == bell) || (string == flash_screen);
normal_delay =
!xon_xoff
-#ifdef padding_baud_rate
&& padding_baud_rate
- && (!cur_term || cur_term->_baudrate >= padding_baud_rate)
+#ifdef NCURSES_NO_PADDING
+ && (SP == 0 || !(SP->_no_padding))
#endif
- ;
+ && (_nc_baudrate(ospeed) >= padding_baud_rate);
}
#ifdef BSD_TPUTS
* (like nethack) actually do the likes of tputs("50") to get delays.
*/
trailpad = 0;
- while (isdigit(*string)) {
- trailpad = trailpad * 10 + (*string - '0');
- string++;
- }
- trailpad *= 10;
- if (*string == '.') {
- string++;
- if (isdigit(*string)) {
- trailpad += (*string - '0');
+ if (isdigit(*string)) {
+ while (isdigit(*string)) {
+ trailpad = trailpad * 10 + (*string - '0');
string++;
}
- while (isdigit(*string))
+ trailpad *= 10;
+ if (*string == '.') {
string++;
- }
+ if (isdigit(*string)) {
+ trailpad += (*string - '0');
+ string++;
+ }
+ while (isdigit(*string))
+ string++;
+ }
- if (*string == '*') {
- trailpad *= affcnt;
- string++;
+ if (*string == '*') {
+ trailpad *= affcnt;
+ string++;
+ }
}
#endif /* BSD_TPUTS */
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/*
+ * def_prog_mode()
+ * def_shell_mode()
+ * reset_prog_mode()
+ * reset_shell_mode()
+ * savetty()
+ * resetty()
+ */
+
+#include <curses.priv.h>
+#include <term.h> /* cur_term */
+
+MODULE_ID("$Id: lib_ttyflags.c,v 1.3 1999/10/22 21:38:55 tom Exp $")
+
+#undef tabs
+
+#ifdef TAB3
+# define tabs TAB3
+#else
+# ifdef XTABS
+# define tabs XTABS
+# else
+# ifdef OXTABS
+# define tabs OXTABS
+# else
+# define tabs 0
+# endif
+# endif
+#endif
+
+int _nc_get_tty_mode(TTY *buf)
+{
+ if (cur_term == 0
+ || GET_TTY(cur_term->Filedes, buf) != 0)
+ return(ERR);
+ TR(TRACE_BITS,("_nc_get_tty_mode: %s", _nc_tracebits()));
+ return (OK);
+}
+
+int _nc_set_tty_mode(TTY *buf)
+{
+ if (cur_term == 0
+ || SET_TTY(cur_term->Filedes, buf) != 0)
+ return(ERR);
+ TR(TRACE_BITS,("_nc_set_tty_mode: %s", _nc_tracebits()));
+ return (OK);
+}
+
+int def_shell_mode(void)
+{
+ T((T_CALLED("def_shell_mode()")));
+
+ /*
+ * Turn off the XTABS bit in the tty structure if it was on. If XTABS
+ * was on, remove the tab and backtab capabilities.
+ */
+
+ if (_nc_get_tty_mode(&cur_term->Ottyb) != OK)
+ returnCode(ERR);
+#ifdef TERMIOS
+ if (cur_term->Ottyb.c_oflag & tabs)
+ tab = back_tab = NULL;
+#else
+ if (cur_term->Ottyb.sg_flags & XTABS)
+ tab = back_tab = NULL;
+#endif
+ returnCode(OK);
+}
+
+int def_prog_mode(void)
+{
+ T((T_CALLED("def_prog_mode()")));
+
+ if (_nc_get_tty_mode(&cur_term->Nttyb) != OK)
+ returnCode(ERR);
+#ifdef TERMIOS
+ cur_term->Nttyb.c_oflag &= ~tabs;
+#else
+ cur_term->Nttyb.sg_flags &= ~XTABS;
+#endif
+ returnCode(OK);
+}
+
+int reset_prog_mode(void)
+{
+ T((T_CALLED("reset_prog_mode()")));
+
+ if (cur_term != 0) {
+ _nc_set_tty_mode(&cur_term->Nttyb);
+ if (SP) {
+ if (stdscr && stdscr->_use_keypad)
+ _nc_keypad(TRUE);
+ NC_BUFFERED(TRUE);
+ }
+ returnCode(OK);
+ }
+ returnCode(ERR);
+}
+
+int reset_shell_mode(void)
+{
+ T((T_CALLED("reset_shell_mode()")));
+
+ if (cur_term != 0) {
+ if (SP)
+ {
+ _nc_keypad(FALSE);
+ _nc_flush();
+ NC_BUFFERED(FALSE);
+ }
+ returnCode(_nc_set_tty_mode(&cur_term->Ottyb));
+ }
+ returnCode(ERR);
+}
+
+/*
+** savetty() and resetty()
+**
+*/
+
+static TTY buf;
+
+int savetty(void)
+{
+ T((T_CALLED("savetty()")));
+
+ returnCode(_nc_get_tty_mode(&buf));
+}
+
+int resetty(void)
+{
+ T((T_CALLED("resetty()")));
+
+ returnCode(_nc_set_tty_mode(&buf));
+}
*/
#include <curses.priv.h>
-MODULE_ID("$Id: make_keys.c,v 1.4 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: make_keys.c,v 1.7 1999/09/11 17:32:57 Jeffrey.Honig Exp $")
#include <names.c>
"",
"/* This file was generated by MAKE_KEYS */",
"",
- "static const struct {",
- "\tunsigned offset;",
- "\tchtype code;",
- "} table[] = {",
+ "#ifdef BROKEN_LINKER",
+ "static",
+ "#endif",
+ "struct tinfo_fkeys _nc_tinfo_fkeys[] = {",
0
};
static const char *suffix[] = {
- "};",
+ "\t{ 0, 0} };",
"",
"#endif /* NCU_KEYS_H */",
0
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1999 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 *
****************************************************************************/
/****************************************************************************
- * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
- * and: Eric S. Raymond <esr@snark.thyrsus.com> *
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999 *
****************************************************************************/
#include <curses.priv.h>
#include <term.h>
#include <tic.h>
-MODULE_ID("$Id: name_match.c,v 1.4 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: name_match.c,v 1.8 1999/03/07 01:58:36 tom Exp $")
/*
* _nc_first_name(char *names)
char *_nc_first_name(const char *const sp)
/* get the first name from the given name list */
{
- static char buf[MAX_NAME_SIZE];
- register char *cp;
+ static char buf[MAX_NAME_SIZE+1];
+ register unsigned n;
- (void) strcpy(buf, sp);
-
- cp = strchr(buf, '|');
- if (cp)
- *cp = '\0';
-
- return(buf);
+ for (n = 0; n < sizeof(buf)-1; n++) {
+ if ((buf[n] = sp[n]) == '\0'
+ || (buf[n] == '|'))
+ break;
+ }
+ buf[n] = '\0';
+ return(buf);
}
/*
*/
int _nc_name_match(const char *const namelst, const char *const name, const char *const delim)
-/* microtune this, it occurs in several critical loops */
{
-char namecopy[MAX_ENTRY_SIZE]; /* this may get called on a TERMCAP value */
-register char *cp;
+ const char *s, *d, *t;
+ int code, found;
- if (namelst == 0)
- return(FALSE);
- (void) strcpy(namecopy, namelst);
- if ((cp = strtok(namecopy, delim)) != 0) {
- do {
- /* avoid strcmp() function-call cost if possible */
- if (cp[0] == name[0] && strcmp(cp, name) == 0)
- return(TRUE);
- } while
- ((cp = strtok((char *)0, delim)) != 0);
+ if ((s = namelst) != 0) {
+ while (*s != '\0') {
+ for (d = name; *d != '\0'; d++) {
+ if (*s != *d)
+ break;
+ s++;
+ }
+ found = FALSE;
+ for (code = TRUE; *s != '\0'; code = FALSE, s++) {
+ for (t = delim; *t != '\0'; t++) {
+ if (*s == *t) {
+ found = TRUE;
+ break;
+ }
+ }
+ if (found)
+ break;
+ }
+ if (code && *d == '\0')
+ return code;
+ if (*s++ == 0)
+ break;
+ }
}
- return(FALSE);
+ return FALSE;
}
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1999 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 *
#include <ctype.h>
#include <tic.h>
#define __INTERNAL_CAPS_VISIBLE
-#include <term.h>
#include <term_entry.h>
-MODULE_ID("$Id: parse_entry.c,v 1.22 1998/02/11 12:13:59 tom Exp $")
+MODULE_ID("$Id: parse_entry.c,v 1.39 1999/03/01 02:28:51 tom Exp $")
#ifdef LINT
static short const parametrized[] = { 0 };
static void postprocess_terminfo(TERMTYPE *);
static struct name_table_entry const * lookup_fullname(const char *name);
+#if NCURSES_XNAMES
+
+static struct name_table_entry const *
+_nc_extend_names(ENTRY *entryp, char *name, int token_type)
+{
+ static struct name_table_entry temp;
+ TERMTYPE *tp = &(entryp->tterm);
+ unsigned offset = 0;
+ unsigned actual;
+ unsigned tindex;
+ unsigned first, last, n;
+ bool found;
+
+ switch (token_type) {
+ case BOOLEAN:
+ first = 0;
+ last = tp->ext_Booleans;
+ offset = tp->ext_Booleans;
+ tindex = tp->num_Booleans;
+ break;
+ case NUMBER:
+ first = tp->ext_Booleans;
+ last = tp->ext_Numbers + first;
+ offset = tp->ext_Booleans + tp->ext_Numbers;
+ tindex = tp->num_Numbers;
+ break;
+ case STRING:
+ first = tp->ext_Booleans + tp->ext_Numbers;
+ last = tp->ext_Strings + first;
+ offset = tp->ext_Booleans + tp->ext_Numbers + tp->ext_Strings;
+ tindex = tp->num_Strings;
+ break;
+ case CANCEL:
+ actual = NUM_EXT_NAMES(tp);
+ for (n = 0; n < actual; n++) {
+ if (!strcmp(name, tp->ext_Names[n])) {
+ if (n > (unsigned)(tp->ext_Booleans + tp->ext_Numbers)) {
+ token_type = STRING;
+ } else if (n > tp->ext_Booleans) {
+ token_type = NUMBER;
+ } else {
+ token_type = BOOLEAN;
+ }
+ return _nc_extend_names(entryp, name, token_type);
+ }
+ }
+ /* Well, we are given a cancel for a name that we don't recognize */
+ return _nc_extend_names(entryp, name, STRING);
+ default:
+ return 0;
+ }
+
+ /* Adjust the 'offset' (insertion-point) to keep the lists of extended
+ * names sorted.
+ */
+ for (n = first, found = FALSE; n < last; n++) {
+ int cmp = strcmp(tp->ext_Names[n], name);
+ if (cmp == 0)
+ found = TRUE;
+ if (cmp >= 0) {
+ offset = n;
+ tindex = n - first;
+ switch (token_type) {
+ case BOOLEAN: tindex += BOOLCOUNT; break;
+ case NUMBER: tindex += NUMCOUNT; break;
+ case STRING: tindex += STRCOUNT; break;
+ }
+ break;
+ }
+ }
+ if (!found) {
+ switch (token_type) {
+ case BOOLEAN:
+ tp->ext_Booleans += 1;
+ tp->num_Booleans += 1;
+ tp->Booleans = typeRealloc(char, tp->num_Booleans, tp->Booleans);
+ for (last = tp->num_Booleans-1; last > tindex; last--)
+ tp->Booleans[last] = tp->Booleans[last-1];
+ break;
+ case NUMBER:
+ tp->ext_Numbers += 1;
+ tp->num_Numbers += 1;
+ tp->Numbers = typeRealloc(short, tp->num_Numbers, tp->Numbers);
+ for (last = tp->num_Numbers-1; last > tindex; last--)
+ tp->Numbers[last] = tp->Numbers[last-1];
+ break;
+ case STRING:
+ tp->ext_Strings += 1;
+ tp->num_Strings += 1;
+ tp->Strings = typeRealloc(char *, tp->num_Strings, tp->Strings);
+ for (last = tp->num_Strings-1; last > tindex; last--)
+ tp->Strings[last] = tp->Strings[last-1];
+ break;
+ }
+ actual = NUM_EXT_NAMES(tp);
+ tp->ext_Names = typeRealloc(char *, actual, tp->ext_Names);
+ while (--actual > offset)
+ tp->ext_Names[actual] = tp->ext_Names[actual-1];
+ tp->ext_Names[offset] = _nc_save_str(name);
+ }
+
+ temp.nte_name = tp->ext_Names[offset];
+ temp.nte_type = token_type;
+ temp.nte_index = tindex;
+ temp.nte_link = -1;
+
+ return &temp;
+}
+#endif /* NCURSES_XNAMES */
+
/*
* int
* _nc_parse_entry(entry, literal, silent)
/* check for overly-long names and aliases */
(void) strncpy(namecpy, entryp->tterm.term_names, MAX_NAME_SIZE);
namecpy[MAX_NAME_SIZE] = '\0';
- if ((ptr = strrchr(namecpy, '|')) != (char *)NULL)
+ if ((ptr = strrchr(namecpy, '|')) != (char *)0)
*ptr = '\0';
ptr = strtok(namecpy, "|");
if (strlen(ptr) > MAX_ALIAS)
_nc_warning("primary name may be too long");
- while ((ptr = strtok((char *)NULL, "|")) != (char *)NULL)
+ while ((ptr = strtok((char *)0, "|")) != (char *)0)
if (strlen(ptr) > MAX_ALIAS)
_nc_warning("alias `%s' may be too long", ptr);
for (ap = _nc_capalias_table; ap->from; ap++)
if (strcmp(ap->from, _nc_curr_token.tk_name) == 0)
{
- if (ap->to == (char *)NULL)
+ if (ap->to == (char *)0)
{
_nc_warning("%s (%s termcap extension) ignored",
ap->from, ap->source);
for (ap = _nc_infoalias_table; ap->from; ap++)
if (strcmp(ap->from, _nc_curr_token.tk_name) == 0)
{
- if (ap->to == (char *)NULL)
+ if (ap->to == (char *)0)
{
_nc_warning("%s (%s terminfo extension) ignored",
ap->from, ap->source);
break;
}
- /* last chance: a full-name */
if (entry_ptr == NOTFOUND) {
entry_ptr = lookup_fullname(_nc_curr_token.tk_name);
}
}
}
+#if NCURSES_XNAMES
+ /*
+ * If we have extended-names active, we will automatically
+ * define a name based on its context.
+ */
+ if (entry_ptr == NOTFOUND
+ && _nc_user_definable
+ && (entry_ptr = _nc_extend_names(entryp, _nc_curr_token.tk_name, token_type)) != 0) {
+ _nc_warning("extended capability '%s'", _nc_curr_token.tk_name);
+ }
+#endif /* NCURSES_XNAMES */
+
/* can't find this cap name, not even as an alias */
if (entry_ptr == NOTFOUND) {
if (!silent)
* space-efficient to call this after use resolution, but it has
* to be done before entry allocation is wrapped up.
*/
- if (!literal)
+ if (!literal) {
if (_nc_syntax == SYN_TERMCAP)
{
bool has_base_entry = FALSE;
* have picked up defaults via translation.
*/
for (i = 0; i < entryp->nuses; i++)
- if (!strchr(entryp->uses[i].parent, '+'))
+ if (!strchr((char *)entryp->uses[i].parent, '+'))
has_base_entry = TRUE;
postprocess_termcap(&entryp->tterm, has_base_entry);
}
else
postprocess_terminfo(&entryp->tterm);
-
+ }
_nc_wrap_entry(entryp);
return(OK);
{"st", "khts"}, /* set-tab key -> KEY_STAB */
{"ta", CANCELLED_STRING},
{"up", "kcuu1"}, /* up-arrow key -> KEY_UP */
- {(char *)NULL, (char *)NULL},
+ {(char *)0, (char *)0},
};
/*
* Note that WANTED and PRESENT are not simple inverses! If a capability
* has been explicitly cancelled, it's not considered WANTED.
*/
-#define WANTED(s) ((s) == (char *)NULL)
-#define PRESENT(s) (((s) != (char *)NULL) && ((s) != CANCELLED_STRING))
+#define WANTED(s) ((s) == ABSENT_STRING)
+#define PRESENT(s) (((s) != ABSENT_STRING) && ((s) != CANCELLED_STRING))
/*
* This bit of legerdemain turns all the terminfo variable names into
if (WANTED(init_3string) && termcap_init2)
init_3string = _nc_save_str(termcap_init2);
- if (WANTED(reset_1string) && termcap_reset)
- reset_1string = _nc_save_str(termcap_reset);
+ if (WANTED(reset_2string) && termcap_reset)
+ reset_2string = _nc_save_str(termcap_reset);
if (WANTED(carriage_return)) {
if (carriage_return_delay > 0) {
* space allocated for it is wasted.
*/
if (return_does_clr_eol == 1 || no_correctly_working_cr == 1)
- carriage_return = NULL;
+ carriage_return = ABSENT_STRING;
/*
* Supposedly most termcap entries have ta now and '\t' is no longer a
/*
* Translate the old termcap :pt: capability to it#8 + ht=\t
*/
- if (has_hardware_tabs == TRUE)
+ if (has_hardware_tabs == TRUE) {
if (init_tabs != 8 && init_tabs != ABSENT_NUMERIC)
_nc_warning("hardware tabs with a width other than 8: %d", init_tabs);
else
init_tabs = 8;
}
}
-
+ }
/*
* Now translate the ko capability, if there is one. This
* isn't from mytinfo...
tp->Strings[to_ptr->nte_index] = _nc_save_str(buf2);
} while
- ((cp = strtok((char *)NULL, ",")) != 0);
+ ((cp = strtok((char *)0, ",")) != 0);
/*
* Note: ko=im and ko=ic both want to grab the `Insert'
_nc_warning("acsc string synthesized from XENIX capabilities");
}
}
+ else if (acs_chars == 0
+ && enter_alt_charset_mode != 0
+ && exit_alt_charset_mode != 0)
+ {
+ acs_chars = _nc_save_str("``aaffggiijjkkllmmnnooppqqrrssttuuvvwwxxyyzz{{||}}~~");
+ }
}
static
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
+ * and: Eric S. Raymond <esr@snark.thyrsus.com> *
+ ****************************************************************************/
+
+
+
+/*
+ * read_entry.c -- Routine for reading in a compiled terminfo file
+ *
+ */
+
+#include <curses.priv.h>
+
+#if HAVE_FCNTL_H
+#include <fcntl.h>
+#endif
+
+#include <tic.h>
+#include <term_entry.h>
+
+MODULE_ID("$Id: read_entry.c,v 1.61 1999/07/24 20:07:20 tom Exp $")
+
+#ifndef O_BINARY
+#define O_BINARY 0
+#endif
+
+#if 0
+#define TRACE_IN(p) DEBUG(2, p)
+#else
+#define TRACE_IN(p) /*nothing*/
+#endif
+
+/*
+ * int
+ * _nc_read_file_entry(filename, ptr)
+ *
+ * Read the compiled terminfo entry in the given file into the
+ * structure pointed to by ptr, allocating space for the string
+ * table.
+ */
+
+#undef BYTE
+#define BYTE(p,n) (unsigned char)((p)[n])
+
+#define IS_NEG1(p) ((BYTE(p,0) == 0377) && (BYTE(p,1) == 0377))
+#define IS_NEG2(p) ((BYTE(p,0) == 0376) && (BYTE(p,1) == 0377))
+#define LOW_MSB(p) (BYTE(p,0) + 256*BYTE(p,1))
+
+static bool have_tic_directory = FALSE;
+static bool keep_tic_directory = FALSE;
+
+/*
+ * Record the "official" location of the terminfo directory, according to
+ * the place where we're writing to, or the normal default, if not.
+ */
+const char *_nc_tic_dir(const char *path)
+{
+ static const char *result = TERMINFO;
+
+ if (!keep_tic_directory) {
+ if (path != 0) {
+ result = path;
+ have_tic_directory = TRUE;
+ } else if (!have_tic_directory) {
+ char *envp;
+ if ((envp = getenv("TERMINFO")) != 0)
+ return _nc_tic_dir(envp);
+ }
+ }
+ return result;
+}
+
+/*
+ * Special fix to prevent the terminfo directory from being moved after tic
+ * has chdir'd to it. If we let it be changed, then if $TERMINFO has a
+ * relative path, we'll lose track of the actual directory.
+ */
+void _nc_keep_tic_dir(const char *path)
+{
+ _nc_tic_dir(path);
+ keep_tic_directory = TRUE;
+}
+
+static void convert_shorts(char *buf, short *Numbers, int count)
+{
+ int i;
+ for (i = 0; i < count; i++)
+ {
+ if (IS_NEG1(buf + 2*i))
+ Numbers[i] = ABSENT_NUMERIC;
+ else if (IS_NEG2(buf + 2*i))
+ Numbers[i] = CANCELLED_NUMERIC;
+ else
+ Numbers[i] = LOW_MSB(buf + 2*i);
+ TRACE_IN(("get Numbers[%d]=%d", i, Numbers[i]));
+ }
+}
+
+static void convert_strings(char *buf, char **Strings, int count, int size, char *table)
+{
+ int i;
+ char *p;
+
+ for (i = 0; i < count; i++) {
+ if (IS_NEG1(buf + 2*i)) {
+ Strings[i] = ABSENT_STRING;
+ } else if (IS_NEG2(buf + 2*i)) {
+ Strings[i] = CANCELLED_STRING;
+ } else if (LOW_MSB(buf + 2*i) > size) {
+ Strings[i] = ABSENT_STRING;
+ } else {
+ Strings[i] = (LOW_MSB(buf+2*i) + table);
+ TRACE_IN(("Strings[%d] = %s", i, _nc_visbuf(Strings[i])));
+ }
+
+ /* make sure all strings are NUL terminated */
+ if (VALID_STRING(Strings[i])) {
+ for (p = Strings[i]; p <= table + size; p++)
+ if (*p == '\0')
+ break;
+ /* if there is no NUL, ignore the string */
+ if (p > table + size)
+ Strings[i] = ABSENT_STRING;
+ }
+ }
+}
+
+#define read_shorts(fd, buf, count) (read(fd, buf, (count)*2) == (count)*2)
+
+#define even_boundary(value) \
+ if ((value) % 2 != 0) read(fd, buf, 1)
+
+static int read_termtype(int fd, TERMTYPE *ptr)
+/* return 1 if read, 0 if not found or garbled */
+{
+ int name_size, bool_count, num_count, str_count, str_size;
+ int i;
+ char buf[MAX_ENTRY_SIZE];
+
+ TRACE_IN(("READ termtype header @%d", tell(fd)));
+
+ /* grab the header */
+ if (!read_shorts(fd, buf, 6)
+ || LOW_MSB(buf) != MAGIC) {
+ return(0);
+ }
+
+ _nc_free_termtype(ptr);
+ name_size = LOW_MSB(buf + 2);
+ bool_count = LOW_MSB(buf + 4);
+ num_count = LOW_MSB(buf + 6);
+ str_count = LOW_MSB(buf + 8);
+ str_size = LOW_MSB(buf + 10);
+
+ TRACE_IN(("header is %d/%d/%d/%d(%d)", name_size, bool_count, num_count, str_count, str_size));
+ if (name_size < 0
+ || bool_count < 0
+ || num_count < 0
+ || str_count < 0
+ || str_size < 0) {
+ return(0);
+ }
+
+ if (str_size) {
+ /* try to allocate space for the string table */
+ if (str_count*2 >= (int) sizeof(buf)
+ || (ptr->str_table = typeMalloc(char, (unsigned)str_size)) == 0) {
+ return(0);
+ }
+ } else {
+ str_count = 0;
+ }
+
+ /* grab the name (a null-terminate string) */
+ read(fd, buf, min(MAX_NAME_SIZE, (unsigned)name_size));
+ buf[MAX_NAME_SIZE] = '\0';
+ ptr->term_names = typeCalloc(char, strlen(buf) + 1);
+ if (ptr->term_names == NULL) {
+ return(0);
+ }
+ (void) strcpy(ptr->term_names, buf);
+ if (name_size > MAX_NAME_SIZE)
+ lseek(fd, (off_t) (name_size - MAX_NAME_SIZE), 1);
+
+ /* grab the booleans */
+ if ((ptr->Booleans = typeCalloc(char, max(BOOLCOUNT, bool_count))) == 0
+ || read(fd, ptr->Booleans, (unsigned)bool_count) < bool_count) {
+ return(0);
+ }
+
+ /*
+ * If booleans end on an odd byte, skip it. The machine they
+ * originally wrote terminfo on must have been a 16-bit
+ * word-oriented machine that would trap out if you tried a
+ * word access off a 2-byte boundary.
+ */
+ even_boundary(name_size + bool_count);
+
+ /* grab the numbers */
+ if ((ptr->Numbers = typeCalloc(short, max(NUMCOUNT, num_count))) == 0
+ || !read_shorts(fd, buf, num_count)) {
+ return(0);
+ }
+ convert_shorts(buf, ptr->Numbers, num_count);
+
+ if ((ptr->Strings = typeCalloc(char *, max(STRCOUNT, str_count))) == 0)
+ return(0);
+
+ if (str_count)
+ {
+ /* grab the string offsets */
+ if (!read_shorts(fd, buf, str_count)) {
+ return(0);
+ }
+ /* finally, grab the string table itself */
+ if (read(fd, ptr->str_table, (unsigned)str_size) != str_size)
+ return(0);
+ convert_strings(buf, ptr->Strings, str_count, str_size, ptr->str_table);
+ }
+
+#if NCURSES_XNAMES
+
+ ptr->num_Booleans = BOOLCOUNT;
+ ptr->num_Numbers = NUMCOUNT;
+ ptr->num_Strings = STRCOUNT;
+
+ /*
+ * Read extended entries, if any, after the normal end of terminfo data.
+ */
+ even_boundary(str_size);
+ TRACE_IN(("READ extended_header @%d", tell(fd)));
+ if (_nc_user_definable && read_shorts(fd, buf, 5)) {
+ int ext_bool_count = LOW_MSB(buf + 0);
+ int ext_num_count = LOW_MSB(buf + 2);
+ int ext_str_count = LOW_MSB(buf + 4);
+ int ext_str_size = LOW_MSB(buf + 6);
+ int ext_str_limit = LOW_MSB(buf + 8);
+ int need = (ext_bool_count + ext_num_count + ext_str_count);
+ int base = 0;
+
+ if (need >= (int) sizeof(buf)
+ || ext_str_size >= (int) sizeof(buf)
+ || ext_str_limit >= (int) sizeof(buf)
+ || ext_bool_count < 0
+ || ext_num_count < 0
+ || ext_str_count < 0
+ || ext_str_size < 0
+ || ext_str_limit < 0)
+ return(0);
+
+ ptr->num_Booleans = BOOLCOUNT + ext_bool_count;
+ ptr->num_Numbers = NUMCOUNT + ext_num_count;
+ ptr->num_Strings = STRCOUNT + ext_str_count;
+
+ ptr->Booleans = typeRealloc(char, ptr->num_Booleans,ptr->Booleans);
+ ptr->Numbers = typeRealloc(short, ptr->num_Numbers, ptr->Numbers);
+ ptr->Strings = typeRealloc(char*, ptr->num_Strings, ptr->Strings);
+
+ TRACE_IN(("extended header is %d/%d/%d(%d:%d)", ext_bool_count, ext_num_count, ext_str_count, ext_str_size, ext_str_limit));
+
+ TRACE_IN(("READ %d extended-booleans @%d", ext_bool_count, tell(fd)));
+ if ((ptr->ext_Booleans = ext_bool_count) != 0) {
+ if (read(fd, ptr->Booleans + BOOLCOUNT, (unsigned)ext_bool_count) != ext_bool_count)
+ return(0);
+ }
+ even_boundary(ext_bool_count);
+
+ TRACE_IN(("READ %d extended-numbers @%d", ext_num_count, tell(fd)));
+ if ((ptr->ext_Numbers = ext_num_count) != 0) {
+ if (!read_shorts(fd, buf, ext_num_count))
+ return(0);
+ TRACE_IN(("Before converting extended-numbers"));
+ convert_shorts(buf, ptr->Numbers + NUMCOUNT, ext_num_count);
+ }
+
+ TRACE_IN(("READ extended-offsets @%d", tell(fd)));
+ if ((ext_str_count || need)
+ && !read_shorts(fd, buf, ext_str_count+need))
+ return(0);
+
+ TRACE_IN(("READ %d bytes of extended-strings @%d", ext_str_limit, tell(fd)));
+ if (ext_str_limit) {
+ if ((ptr->ext_str_table = typeMalloc(char, ext_str_limit)) == 0)
+ return(0);
+ if (read(fd, ptr->ext_str_table, ext_str_limit) != ext_str_limit)
+ return(0);
+ TRACE_IN(("first extended-string is %s", _nc_visbuf(ptr->ext_str_table)));
+ }
+
+ if ((ptr->ext_Strings = ext_str_count) != 0) {
+ TRACE_IN(("Before computing extended-string capabilities str_count=%d, ext_str_count=%d", str_count, ext_str_count));
+ convert_strings(buf, ptr->Strings + str_count, ext_str_count, ext_str_limit, ptr->ext_str_table);
+ for (i = ext_str_count-1; i >= 0; i--) {
+ TRACE_IN(("MOVE from [%d:%d] %s", i, i+str_count, _nc_visbuf(ptr->Strings[i+str_count])));
+ ptr->Strings[i+STRCOUNT] = ptr->Strings[i+str_count];
+ if (VALID_STRING(ptr->Strings[i+STRCOUNT]))
+ base += (strlen(ptr->Strings[i+STRCOUNT]) + 1);
+ TRACE_IN(("... to [%d] %s", i+STRCOUNT, _nc_visbuf(ptr->Strings[i+STRCOUNT])));
+ }
+ }
+
+ if (need) {
+ if ((ptr->ext_Names = typeCalloc(char *, need)) == 0)
+ return(0);
+ TRACE_IN(("ext_NAMES starting @%d in extended_strings, first = %s", base, _nc_visbuf(ptr->ext_str_table+base)));
+ convert_strings(buf + (2 * ext_str_count), ptr->ext_Names, need, ext_str_limit, ptr->ext_str_table + base);
+ }
+
+ T(("...done reading terminfo bool %d(%d) num %d(%d) str %d(%d)",
+ ptr->num_Booleans, ptr->ext_Booleans,
+ ptr->num_Numbers, ptr->ext_Numbers,
+ ptr->num_Strings, ptr->ext_Strings));
+
+ TRACE_IN(("extend: num_Booleans:%d", ptr->num_Booleans));
+ } else
+#endif /* NCURSES_XNAMES */
+ {
+ T(("...done reading terminfo bool %d num %d str %d",
+ bool_count,
+ num_count,
+ str_count));
+ TRACE_IN(("normal: num_Booleans:%d", ptr->num_Booleans));
+ }
+
+ for (i = bool_count; i < BOOLCOUNT; i++)
+ ptr->Booleans[i] = FALSE;
+ for (i = num_count; i < NUMCOUNT; i++)
+ ptr->Numbers[i] = ABSENT_NUMERIC;
+ for (i = str_count; i < STRCOUNT; i++)
+ ptr->Strings[i] = ABSENT_STRING;
+
+ return(1);
+}
+
+int _nc_read_file_entry(const char *const filename, TERMTYPE *ptr)
+/* return 1 if read, 0 if not found or garbled */
+{
+ int code, fd = -1;
+
+ if (_nc_access(filename, R_OK) < 0
+ || (fd = open(filename, O_RDONLY|O_BINARY)) < 0) {
+ T(("cannot open terminfo %s (errno=%d)", filename, errno));
+ return(0);
+ }
+
+ T(("read terminfo %s", filename));
+ if ((code = read_termtype(fd, ptr)) == 0)
+ _nc_free_termtype(ptr);
+ close(fd);
+
+ return (code);
+}
+
+/*
+ * Build a terminfo pathname and try to read the data. Returns 1 on success,
+ * 0 on failure.
+ */
+static int _nc_read_tic_entry(char *const filename,
+ const char *const dir, const char *ttn, TERMTYPE *const tp)
+{
+/* maximum safe length of terminfo root directory name */
+#define MAX_TPATH (PATH_MAX - MAX_ALIAS - 6)
+
+ if (strlen(dir) > MAX_TPATH)
+ return 0;
+ (void) sprintf(filename, "%s/%s", dir, ttn);
+ return _nc_read_file_entry(filename, tp);
+}
+
+/*
+ * Process the list of :-separated directories, looking for the terminal type.
+ * We don't use strtok because it does not show us empty tokens.
+ */
+static int _nc_read_terminfo_dirs(const char *dirs, char *const filename, const char *const ttn, TERMTYPE *const tp)
+{
+ char *list, *a;
+ const char *b;
+ int code = 0;
+
+ /* we'll modify the argument, so we must copy */
+ if ((b = a = list = strdup(dirs)) == NULL)
+ return(0);
+
+ for (;;) {
+ int c = *a;
+ if (c == 0 || c == ':') {
+ *a = 0;
+ if ((b + 1) >= a)
+ b = TERMINFO;
+ if (_nc_read_tic_entry(filename, b, ttn, tp) == 1) {
+ code = 1;
+ break;
+ }
+ b = a + 1;
+ if (c == 0)
+ break;
+ }
+ a++;
+ }
+
+ free(list);
+ return(code);
+}
+
+/*
+ * _nc_read_entry(char *tn, char *filename, TERMTYPE *tp)
+ *
+ * Find and read the compiled entry for a given terminal type,
+ * if it exists. We take pains here to make sure no combination
+ * of environment variables and terminal type name can be used to
+ * overrun the file buffer.
+ */
+
+int _nc_read_entry(const char *const tn, char *const filename, TERMTYPE *const tp)
+{
+char *envp;
+char ttn[MAX_ALIAS + 3];
+
+ /* truncate the terminal name to prevent dangerous buffer airline */
+ (void) sprintf(ttn, "%c/%.*s", *tn, MAX_ALIAS, tn);
+
+ /* This is System V behavior, in conjunction with our requirements for
+ * writing terminfo entries.
+ */
+ if (have_tic_directory
+ && _nc_read_tic_entry(filename, _nc_tic_dir(0), ttn, tp) == 1)
+ return 1;
+
+ if ((envp = getenv("TERMINFO")) != 0
+ && _nc_read_tic_entry(filename, _nc_tic_dir(envp), ttn, tp) == 1)
+ return 1;
+
+ if ((envp = _nc_home_terminfo()) != 0) {
+ if (_nc_read_tic_entry(filename, envp, ttn, tp) == 1) {
+ return(1);
+ }
+ }
+
+ /* this is an ncurses extension */
+ if ((envp = getenv("TERMINFO_DIRS")) != 0)
+ return _nc_read_terminfo_dirs(envp, filename, ttn, tp);
+
+ /* Try the system directory. Note that the TERMINFO_DIRS value, if
+ * defined by the configure script, begins with a ":", which will be
+ * interpreted as TERMINFO.
+ */
+#ifdef TERMINFO_DIRS
+ return _nc_read_terminfo_dirs(TERMINFO_DIRS, filename, ttn, tp);
+#else
+ return _nc_read_tic_entry(filename, TERMINFO, ttn, tp);
+#endif
+}
+
#include <curses.priv.h>
#include <ctype.h>
-#include <term.h>
#include <tic.h>
#include <term_entry.h>
#include <fcntl.h>
#endif
-MODULE_ID("$Id: read_termcap.c,v 1.27 1998/02/11 12:13:58 tom Exp $")
+MODULE_ID("$Id: read_termcap.c,v 1.43 1999/04/10 20:52:52 tom Exp $")
+
+#ifndef PURE_TERMINFO
#ifdef __EMX__
#define is_pathname(s) ((((s) != 0) && ((s)[0] == '/')) \
return (0);
}
topreclen = strlen(ent);
- if ((toprec = malloc (topreclen + 1)) == 0) {
+ if ((toprec = typeMalloc(char, topreclen + 1)) == 0) {
errno = ENOMEM;
return (-1);
}
* names interpolated, a name can't be found, or depth exceeds
* MAX_RECURSION.
*/
+#define DOALLOC(size) typeRealloc(char, size, record)
static int
_nc_getent(
char **cap, /* termcap-content */
{
register char *r_end, *rp;
int myfd = FALSE;
- char *record;
+ char *record = 0;
int tc_not_resolved;
int current;
int lineno;
* Check if we have a top record from cgetset().
*/
if (depth == 0 && toprec != 0 && _nc_cgetmatch(toprec, name) == 0) {
- if ((record = malloc (topreclen + BFRAG)) == 0) {
+ if ((record = DOALLOC(topreclen + BFRAG)) == 0) {
errno = ENOMEM;
return (TC_SYS_ERR);
}
/*
* Allocate first chunk of memory.
*/
- if ((record = malloc(BFRAG)) == 0) {
+ if ((record = DOALLOC(BFRAG)) == 0) {
errno = ENOMEM;
return (TC_SYS_ERR);
}
*/
if (fd >= 0) {
(void)lseek(fd, (off_t)0, SEEK_SET);
+ } else if ((_nc_access(db_array[current], R_OK) < 0)
+ || (fd = open(db_array[current], O_RDONLY, 0)) < 0) {
+ /* No error on unfound file. */
+ if (errno == ENOENT)
+ continue;
+ free(record);
+ return (TC_SYS_ERR);
} else {
- fd = open(db_array[current], O_RDONLY, 0);
- if (fd < 0) {
- /* No error on unfound file. */
- if (errno == ENOENT)
- continue;
- free(record);
- return (TC_SYS_ERR);
- }
myfd = TRUE;
}
lineno = 0;
pos = rp - record;
newsize = r_end - record + BFRAG;
- record = realloc(record, newsize);
+ record = DOALLOC(newsize);
if (record == 0) {
- errno = ENOMEM;
if (myfd)
(void)close(fd);
+ errno = ENOMEM;
return (TC_SYS_ERR);
}
r_end = record + newsize;
newsize = r_end - record + diff + BFRAG;
tcpos = tcstart - record;
tcposend = tcend - record;
- record = realloc(record, newsize);
+ record = DOALLOC(newsize);
if (record == 0) {
- errno = ENOMEM;
if (myfd)
(void)close(fd);
free(icap);
+ errno = ENOMEM;
return (TC_SYS_ERR);
}
r_end = record + newsize;
*/
if (myfd)
(void)close(fd);
- *len = rp - record - 1; /* don't count NUL */
+ *len = rp - record - 1; /* don't count NUL */
if (r_end > rp) {
- if ((record = realloc(record, (size_t)(rp - record))) == 0) {
+ if ((record = DOALLOC((size_t)(rp - record))) == 0) {
errno = ENOMEM;
return (TC_SYS_ERR);
}
*/
if (!is_pathname(cp)) { /* no TERMCAP or it holds an entry */
if ((termpath = getenv("TERMPATH")) != 0) {
- strncpy(pathbuf, termpath, sizeof(pathbuf)-1);
+ strncpy(pathbuf, termpath, PBUFSIZ - 1);
} else {
- if ((home = getenv("HOME")) != 0) { /* setup path */
+ if ((home = getenv("HOME")) != 0 &&
+ strlen(home) < PBUFSIZ) { /* setup path */
p += strlen(home); /* path, looking in */
strcpy(pathbuf, home); /* $HOME first */
*p++ = '/';
} /* if no $HOME look in current directory */
#define MY_PATH_DEF ".termcap /etc/termcap /usr/share/misc/termcap"
- strncpy(p, MY_PATH_DEF, (size_t)(PBUFSIZ - (p - pathbuf)));
+ strncpy(p, MY_PATH_DEF, (size_t)(PBUFSIZ - (p - pathbuf) - 1));
}
}
else /* user-defined name in TERMCAP */
- strncpy(pathbuf, cp, PBUFSIZ); /* still can be tokenized */
+ strncpy(pathbuf, cp, PBUFSIZ - 1); /* still can be tokenized */
+ pathbuf[PBUFSIZ - 1] = '\0';
*fname++ = pathbuf; /* tokenize path into vector of names */
while (*++p) {
* cgetent, then it is the actual filename).
*/
if (i >= 0) {
- the_source = malloc(strlen(pathvec[i]) + 1);
- if (the_source != 0)
- *sourcename = strcpy(the_source, pathvec[i]);
+ if ((the_source = strdup(pathvec[i])) != 0)
+ *sourcename = the_source;
}
return(i);
#endif /* USE_BSD_TGETENT */
#endif /* USE_GETCAP */
+#define MAXPATHS 32
+
+/*
+ * Add a filename to the list in 'termpaths[]', checking that we really have
+ * a right to open the file.
+ */
+#if !USE_GETCAP
+static int add_tc(char *termpaths[], char *path, int count)
+{
+ if (count < MAXPATHS
+ && _nc_access(path, R_OK) == 0)
+ termpaths[count++] = path;
+ termpaths[count] = 0;
+ return count;
+}
+#define ADD_TC(path, count) filecount = add_tc(termpaths, path, count)
+#endif /* !USE_GETCAP */
+
int _nc_read_termcap_entry(const char *const tn, TERMTYPE *const tp)
{
int found = FALSE;
* if the database is not accessible.
*/
FILE *fp;
-#define MAXPATHS 32
char *tc, *termpaths[MAXPATHS];
- int filecount = 0;
+ int filecount = 0;
bool use_buffer = FALSE;
char tc_buf[1024];
char pathbuf[PATH_MAX];
+ termpaths[filecount] = 0;
if ((tc = getenv("TERMCAP")) != 0)
{
if (is_pathname(tc)) /* interpret as a filename */
{
- termpaths[0] = tc;
- termpaths[filecount = 1] = 0;
+ ADD_TC(tc, 0);
}
else if (_nc_name_match(tc, tn, "|:")) /* treat as a capability file */
{
*cp = '\0';
else if (cp == tc || cp[-1] == '\0')
{
- if (filecount >= MAXPATHS - 1)
- return(-1);
-
- termpaths[filecount++] = cp;
+ ADD_TC(cp, filecount);
}
}
- termpaths[filecount] = 0;
}
}
else /* normal case */
* Probably /etc/termcap is a symlink to /usr/share/misc/termcap.
* Avoid reading the same file twice.
*/
- if (access("/etc/termcap", R_OK) == 0)
- termpaths[filecount++] = "/etc/termcap";
- else if (access("/usr/share/misc/termcap", R_OK) == 0)
- termpaths[filecount++] = "/usr/share/misc/termcap";
+ if (_nc_access("/etc/termcap", F_OK) == 0)
+ ADD_TC("/etc/termcap", filecount);
+ else
+ ADD_TC("/usr/share/misc/termcap", filecount);
+
+#define PRIVATE_CAP "%s/.termcap"
- if ((h = getenv("HOME")) != (char *)NULL)
+ if ((h = getenv("HOME")) != NULL
+ && (strlen(h) + sizeof(PRIVATE_CAP)) < PATH_MAX)
{
- /* user's .termcap, if any, should override it */
- (void) strncpy(envhome, h, PATH_MAX - 10);
- envhome[PATH_MAX - 10] = '\0';
- (void) sprintf(pathbuf, "%s/.termcap", envhome);
- termpaths[filecount++] = pathbuf;
+ /* user's .termcap, if any, should override it */
+ (void) strcpy(envhome, h);
+ (void) sprintf(pathbuf, PRIVATE_CAP, envhome);
+ ADD_TC(pathbuf, filecount);
}
-
- termpaths[filecount] = 0;
}
/* parse the sources */
* we disconnected from the list by NULLing out
* ep->tterm.str_table above).
*/
- memcpy(tp, &ep->tterm, sizeof(TERMTYPE));
+ *tp = ep->tterm;
ep->tterm.str_table = (char *)0;
/*
_nc_free_entries(_nc_head);
return(found);
}
+#else
+extern void _nc_read_termcap(void);
+ void _nc_read_termcap(void) { }
+#endif /* PURE_TERMINFO */
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Zeyd M. Ben-Halim <zmbenhal@netcom.com> 1992,1995 *
+ * and: Eric S. Raymond <esr@snark.thyrsus.com> *
+ ****************************************************************************/
+
+
+
+/*
+** setbuf.c
+**
+** Support for set_term(), reset_shell_mode(), reset_prog_mode().
+**
+*/
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: setbuf.c,v 1.5 1999/02/27 20:00:15 tom Exp $")
+
+/*
+ * If the output file descriptor is connected to a tty (the typical case) it
+ * will probably be line-buffered. Keith Bostic pointed out that we don't want
+ * this; it hoses people running over networks by forcing out a bunch of small
+ * packets instead of one big one, so screen updates on ptys look jerky.
+ * Restore block buffering to prevent this minor lossage.
+ *
+ * The buffer size is a compromise. Ideally we'd like a buffer that can hold
+ * the maximum possible update size (the whole screen plus cup commands to
+ * change lines as it's painted). On a 66-line xterm this can become
+ * excessive. So we min it with the amount of data we think we can get through
+ * two Ethernet packets (maximum packet size - 100 for TCP/IP overhead).
+ *
+ * Why two ethernet packets? It used to be one, on the theory that said
+ * packets define the maximum size of atomic update. But that's less than the
+ * 2000 chars on a 25 x 80 screen, and we don't want local updates to flicker
+ * either. Two packet lengths will handle up to a 35 x 80 screen.
+ *
+ * The magic '6' is the estimated length of the end-of-line cup sequence to go
+ * to the next line. It's generous. We used to mess with the buffering in
+ * init_mvcur() after cost computation, but that lost the sequences emitted by
+ * init_acs() in setupscreen().
+ *
+ * "The setvbuf function may be used only after the stream pointed to by stream
+ * has been associated with an open file and before any other operation is
+ * performed on the stream." (ISO 7.9.5.6.)
+ *
+ * Grrrr...
+ *
+ * On a lighter note, many implementations do in fact allow an application to
+ * reset the buffering after it has been written to. We try to do this because
+ * otherwise we leave stdout in buffered mode after endwin() is called. (This
+ * also happens with SVr4 curses).
+ *
+ * There are pros/cons:
+ *
+ * con:
+ * There is no guarantee that we can reestablish buffering once we've
+ * dropped it.
+ *
+ * We _may_ lose data if the implementation does not coordinate this with
+ * fflush.
+ *
+ * pro:
+ * An implementation is more likely to refuse to change the buffering than
+ * to do it in one of the ways mentioned above.
+ *
+ * The alternative is to have the application try to change buffering
+ * itself, which is certainly no improvement.
+ *
+ * Just in case it does not work well on a particular system, the calls to
+ * change buffering are all via the macro NC_BUFFERED. Some implementations
+ * do indeed get confused by changing setbuf on/off, and will overrun the
+ * buffer. So we disable this by default (there may yet be a workaround).
+ */
+void _nc_set_buffer(FILE *ofp, bool buffered)
+{
+ /* optional optimization hack -- do before any output to ofp */
+#if HAVE_SETVBUF || HAVE_SETBUFFER
+ unsigned buf_len;
+ char *buf_ptr;
+
+ if (getenv("NCURSES_NO_SETBUF") != 0)
+ return;
+
+ fflush(ofp);
+ if ((SP->_buffered = buffered) != 0) {
+ buf_len = min(LINES * (COLS + 6), 2800);
+ if ((buf_ptr = SP->_setbuf) == 0) {
+ if ((buf_ptr = typeMalloc(char, buf_len)) == NULL)
+ return;
+ SP->_setbuf = buf_ptr;
+ /* Don't try to free this! */
+ }
+#if !USE_SETBUF_0
+ else return;
+#endif
+ } else {
+#if !USE_SETBUF_0
+ return;
+#else
+ buf_len = 0;
+ buf_ptr = 0;
+#endif
+ }
+
+#if HAVE_SETVBUF
+#ifdef SETVBUF_REVERSED /* pre-svr3? */
+ (void) setvbuf(ofp, buf_ptr, buf_len, buf_len ? _IOFBF : _IOLBF);
+#else
+ (void) setvbuf(ofp, buf_ptr, buf_len ? _IOFBF : _IOLBF, buf_len);
+#endif
+#elif HAVE_SETBUFFER
+ (void) setbuffer(ofp, buf_ptr, (int)buf_len);
+#endif
+
+#endif /* HAVE_SETVBUF || HAVE_SETBUFFER */
+}
#include <sys/stat.h>
#include <tic.h>
-#include <term.h>
#include <term_entry.h>
#ifndef S_ISDIR
#define S_ISDIR(mode) ((mode & S_IFMT) == S_IFDIR)
#endif
-MODULE_ID("$Id: write_entry.c,v 1.22 1998/02/11 12:13:59 tom Exp $")
+#if 0
+#define TRACE_OUT(p) DEBUG(2, p)
+#else
+#define TRACE_OUT(p) /*nothing*/
+#endif
+
+MODULE_ID("$Id: write_entry.c,v 1.47 1999/07/10 20:29:22 tom Exp $")
static int total_written;
static void write_file(char *filename, TERMTYPE *tp)
{
- FILE *fp = fopen(filename, "wb");
+ FILE *fp = (_nc_access(filename, W_OK) == 0) ? fopen(filename, "wb") : 0;
if (fp == 0) {
perror(filename);
_nc_syserr_abort("can't open %s/%s", _nc_tic_dir(0), filename);
char fullpath[PATH_MAX];
const char *destination = _nc_tic_dir(0);
- if (path == destination || *path == '/')
+ if (path == destination || *path == '/') {
+ if (strlen(path) + 1 > sizeof(fullpath))
+ return(-1);
(void)strcpy(fullpath, path);
- else
+ } else {
+ if (strlen(destination) + strlen(path) + 2 > sizeof(fullpath))
+ return(-1);
(void)sprintf(fullpath, "%s/%s", destination, path);
+ }
if ((rc = stat(path, &statbuf)) < 0) {
rc = mkdir(path, 0777);
} else {
- if (access(path, R_OK|W_OK|X_OK) < 0) {
+ if (_nc_access(path, R_OK|W_OK|X_OK) < 0) {
rc = -1; /* permission denied */
} else if (!(S_ISDIR(statbuf.st_mode))) {
rc = -1; /* not a directory */
/* set the write directory for compiled entries */
{
const char *destination;
+ char actual[PATH_MAX];
if (dir != 0)
(void) _nc_tic_dir(dir);
destination = _nc_tic_dir(0);
if (make_directory(destination) < 0)
{
- char *home;
-
- /* ncurses extension...fall back on user's private directory */
- if ((home = getenv("HOME")) != (char *)NULL)
- {
- char *temp = malloc(sizeof(PRIVATE_INFO) + strlen(home));
- (void) sprintf(temp, PRIVATE_INFO, home);
- destination = temp;
+ char *home = _nc_home_terminfo();
+ if (home != 0) {
+ destination = home;
if (make_directory(destination) < 0)
_nc_err_abort("%s: permission denied (errno %d)",
destination, errno);
* Note: because of this code, this logic should be exercised
* *once only* per run.
*/
- if (chdir(_nc_tic_dir(destination)) < 0)
+ if (chdir(_nc_tic_dir(destination)) < 0
+ || getcwd(actual, sizeof(actual)) == 0)
_nc_err_abort("%s: not a directory", destination);
+ _nc_keep_tic_dir(strdup(actual));
}
/*
_nc_warning("terminal alias %s too long.", ptr);
continue;
}
+ if (strchr(ptr, '/') != 0) {
+ _nc_warning("cannot link alias %s.", ptr);
+ continue;
+ }
check_writeable(ptr[0]);
sprintf(linkname, "%c/%s", ptr[0], ptr);
{
_nc_warning("alias %s multiply defined.", ptr);
}
- else
+ else if (_nc_access(linkname, W_OK) == 0)
#if HAVE_LINK
{
+ int code;
#if USE_SYMLINKS
strcpy(symlinkname, "../");
- strcat(symlinkname, filename);
+ strncat(symlinkname, filename, sizeof(symlinkname) - 4);
+ symlinkname[sizeof(symlinkname) - 1] = '\0';
#endif /* USE_SYMLINKS */
#if HAVE_REMOVE
- remove(linkname);
+ code = remove(linkname);
#else
- unlink(linkname);
+ code = unlink(linkname);
#endif
+ if (code != 0 && errno == ENOENT)
+ code = 0;
#if USE_SYMLINKS
if (symlink(symlinkname, linkname) < 0)
#else
if (link(filename, linkname) < 0)
#endif /* USE_SYMLINKS */
- _nc_syserr_abort("can't link %s to %s", filename, linkname);
- DEBUG(1, ("Linked %s", linkname));
+ {
+ /*
+ * If there wasn't anything there, and we cannot
+ * link to the target because it is the same as the
+ * target, then the source must be on a filesystem
+ * that uses caseless filenames, such as Win32, etc.
+ */
+ if (code == 0 && errno == EEXIST)
+ _nc_warning("can't link %s to %s", filename, linkname);
+ else if (code == 0 && errno == EPERM)
+ write_file(linkname, tp);
+ else
+ _nc_syserr_abort("can't link %s to %s", filename, linkname);
+ }
+ else
+ {
+ DEBUG(1, ("Linked %s", linkname));
+ }
}
#else /* just make copies */
write_file(linkname, tp);
#define LO(x) ((x) % 256)
#define LITTLE_ENDIAN(p, x) (p)[0] = LO(x), (p)[1] = HI(x)
+#define WRITE_STRING(str) (fwrite(str, sizeof(char), strlen(str) + 1, fp) == strlen(str) + 1)
+
+static int compute_offsets(char **Strings, int strmax, short *offsets)
+{
+ size_t nextfree = 0;
+ int i;
+
+ for (i = 0; i < strmax; i++) {
+ if (Strings[i] == ABSENT_STRING) {
+ offsets[i] = -1;
+ } else if (Strings[i] == CANCELLED_STRING) {
+ offsets[i] = -2;
+ } else {
+ offsets[i] = nextfree;
+ nextfree += strlen(Strings[i]) + 1;
+ TRACE_OUT(("put Strings[%d]=%s(%d)", i, _nc_visbuf(Strings[i]), nextfree));
+ }
+ }
+ return nextfree;
+}
+
+static void convert_shorts(unsigned char *buf, short *Numbers, int count)
+{
+ int i;
+ for (i = 0; i < count; i++) {
+ if (Numbers[i] == -1) { /* HI/LO won't work */
+ buf[2*i] = buf[2*i + 1] = 0377;
+ } else if (Numbers[i] == -2) { /* HI/LO won't work */
+ buf[2*i] = 0376;
+ buf[2*i + 1] = 0377;
+ } else {
+ LITTLE_ENDIAN(buf + 2*i, Numbers[i]);
+ TRACE_OUT(("put Numbers[%d]=%d", i, Numbers[i]));
+ }
+ }
+}
+
+#define even_boundary(value) \
+ ((value) % 2 != 0 && fwrite(&zero, sizeof(char), 1, fp) != 1)
+
static int write_object(FILE *fp, TERMTYPE *tp)
{
char *namelist;
char zero = '\0';
size_t i;
short nextfree;
-short offsets[STRCOUNT];
+short offsets[MAX_ENTRY_SIZE/2];
unsigned char buf[MAX_ENTRY_SIZE];
namelist = tp->term_names;
namelen = strlen(namelist) + 1;
+ /*
+ * BOOLWRITE, etc., are less than BOOLCOUNT because we store some
+ * values internally.
+ */
boolmax = 0;
- for (i = 0; i < BOOLWRITE; i++)
- if (tp->Booleans[i])
- boolmax = i+1;
+ for (i = 0; i < BOOLWRITE; i++) {
+ if (tp->Booleans[i])
+ boolmax = i+1;
+ }
nummax = 0;
- for (i = 0; i < NUMWRITE; i++)
- if (tp->Numbers[i] != ABSENT_NUMERIC)
- nummax = i+1;
+ for (i = 0; i < NUMWRITE; i++) {
+ if (tp->Numbers[i] != ABSENT_NUMERIC)
+ nummax = i+1;
+ }
strmax = 0;
- for (i = 0; i < STRWRITE; i++)
- if (tp->Strings[i] != ABSENT_STRING)
- strmax = i+1;
+ for (i = 0; i < STRWRITE; i++) {
+ if (tp->Strings[i] != ABSENT_STRING)
+ strmax = i+1;
+ }
- nextfree = 0;
- for (i = 0; i < strmax; i++)
- if (tp->Strings[i] == ABSENT_STRING)
- offsets[i] = -1;
- else if (tp->Strings[i] == CANCELLED_STRING)
- offsets[i] = -2;
- else
- {
- offsets[i] = nextfree;
- nextfree += strlen(tp->Strings[i]) + 1;
- }
+ nextfree = compute_offsets(tp->Strings, strmax, offsets);
/* fill in the header */
LITTLE_ENDIAN(buf, MAGIC);
LITTLE_ENDIAN(buf+10, nextfree);
/* write out the header */
+ TRACE_OUT(("Header of %s @%ld", namelist, ftell(fp)));
if (fwrite(buf, 12, 1, fp) != 1
- || fwrite(namelist, sizeof(char), (size_t)namelen, fp) != namelen
- || fwrite(tp->Booleans, sizeof(char), (size_t)boolmax, fp) != boolmax)
- return(ERR);
+ || fwrite(namelist, sizeof(char), namelen, fp) != namelen
+ || fwrite(tp->Booleans, sizeof(char), boolmax, fp) != boolmax)
+ return(ERR);
- /* the even-boundary padding byte */
- if ((namelen+boolmax) % 2 != 0 && fwrite(&zero, sizeof(char), 1, fp) != 1)
- return(ERR);
+ if (even_boundary(namelen+boolmax))
+ return(ERR);
-#ifdef SHOWOFFSET
- (void) fprintf(stderr, "Numerics begin at %04lx\n", ftell(fp));
-#endif /* SHOWOFFSET */
+ TRACE_OUT(("Numerics begin at %04lx", ftell(fp)));
/* the numerics */
- for (i = 0; i < nummax; i++)
- {
- if (tp->Numbers[i] == -1) /* HI/LO won't work */
- buf[2*i] = buf[2*i + 1] = 0377;
- else
- LITTLE_ENDIAN(buf + 2*i, tp->Numbers[i]);
- }
- if (fwrite(buf, 2, (size_t)nummax, fp) != nummax)
- return(ERR);
+ convert_shorts(buf, tp->Numbers, nummax);
+ if (fwrite(buf, 2, nummax, fp) != nummax)
+ return(ERR);
-#ifdef SHOWOFFSET
- (void) fprintf(stderr, "String offets begin at %04lx\n", ftell(fp));
-#endif /* SHOWOFFSET */
+ TRACE_OUT(("String offsets begin at %04lx", ftell(fp)));
/* the string offsets */
- for (i = 0; i < strmax; i++)
- if (offsets[i] == -1) /* HI/LO won't work */
- buf[2*i] = buf[2*i + 1] = 0377;
- else if (offsets[i] == -2) /* HI/LO won't work */
- {
- buf[2*i] = 0376;
- buf[2*i + 1] = 0377;
- }
- else
- LITTLE_ENDIAN(buf + 2*i, offsets[i]);
- if (fwrite(buf, 2, (size_t)strmax, fp) != strmax)
- return(ERR);
+ convert_shorts(buf, offsets, strmax);
+ if (fwrite(buf, 2, strmax, fp) != strmax)
+ return(ERR);
-#ifdef SHOWOFFSET
- (void) fprintf(stderr, "String table begins at %04lx\n", ftell(fp));
-#endif /* SHOWOFFSET */
+ TRACE_OUT(("String table begins at %04lx", ftell(fp)));
/* the strings */
for (i = 0; i < strmax; i++)
- if (tp->Strings[i] != ABSENT_STRING && tp->Strings[i] != CANCELLED_STRING)
- if (fwrite(tp->Strings[i], sizeof(char), strlen(tp->Strings[i]) + 1, fp) != strlen(tp->Strings[i]) + 1)
+ if (VALID_STRING(tp->Strings[i]))
+ if (!WRITE_STRING(tp->Strings[i]))
+ return(ERR);
+
+#if NCURSES_XNAMES
+ if (NUM_EXT_NAMES(tp)) {
+ unsigned extcnt = NUM_EXT_NAMES(tp);
+
+ if (even_boundary(nextfree))
+ return(ERR);
+
+ nextfree = compute_offsets(tp->Strings + STRCOUNT, tp->ext_Strings, offsets);
+ TRACE_OUT(("after extended string capabilities, nextfree=%d", nextfree));
+ nextfree += compute_offsets(tp->ext_Names, extcnt, offsets + tp->ext_Strings);
+ TRACE_OUT(("after extended capnames, nextfree=%d", nextfree));
+ strmax = tp->ext_Strings + extcnt;
+
+ /*
+ * Write the extended header
+ */
+ LITTLE_ENDIAN(buf+0, tp->ext_Booleans);
+ LITTLE_ENDIAN(buf+2, tp->ext_Numbers);
+ LITTLE_ENDIAN(buf+4, tp->ext_Strings);
+ LITTLE_ENDIAN(buf+6, strmax);
+ LITTLE_ENDIAN(buf+8, nextfree);
+ TRACE_OUT(("WRITE extended-header @%ld", ftell(fp)));
+ if (fwrite(buf, 10, 1, fp) != 1)
+ return(ERR);
+
+ TRACE_OUT(("WRITE %d booleans @%ld", tp->ext_Booleans, ftell(fp)));
+ if (tp->ext_Booleans
+ && fwrite(tp->Booleans + BOOLCOUNT, sizeof(char), tp->ext_Booleans, fp) != tp->ext_Booleans)
+ return(ERR);
+
+ if (even_boundary(tp->ext_Booleans))
+ return(ERR);
+
+ TRACE_OUT(("WRITE %d numbers @%ld", tp->ext_Numbers, ftell(fp)));
+ if (tp->ext_Numbers) {
+ convert_shorts(buf, tp->Numbers + NUMCOUNT, tp->ext_Numbers);
+ if (fwrite(buf, 2, tp->ext_Numbers, fp) != tp->ext_Numbers)
return(ERR);
+ }
+
+ /*
+ * Convert the offsets for the ext_Strings and ext_Names tables,
+ * in that order.
+ */
+ convert_shorts(buf, offsets, strmax);
+ TRACE_OUT(("WRITE offsets @%ld", ftell(fp)));
+ if (fwrite(buf, 2, strmax, fp) != strmax)
+ return(ERR);
+
+ /*
+ * Write the string table after the offset tables so we do not
+ * have to do anything about alignment.
+ */
+ for (i = 0; i < tp->ext_Strings; i++) {
+ if (VALID_STRING(tp->Strings[i+STRCOUNT])) {
+ TRACE_OUT(("WRITE ext_Strings[%d]=%s", i, _nc_visbuf(tp->Strings[i+STRCOUNT])));
+ if (!WRITE_STRING(tp->Strings[i+STRCOUNT]))
+ return(ERR);
+ }
+ }
+
+ /*
+ * Write the extended names
+ */
+ for (i = 0; i < extcnt; i++) {
+ TRACE_OUT(("WRITE ext_Names[%d]=%s", i, tp->ext_Names[i]));
+ if (!WRITE_STRING(tp->ext_Names[i]))
+ return(ERR);
+ }
+
+ }
+#endif /* NCURSES_XNAMES */
total_written++;
- return(OK);
+ return(OK);
}
/*
--- /dev/null
+-- $Id: README,v 1.1 1998/11/08 00:11:01 tom Exp $
+
+The files in this directory (trace) support both the terminfo and ncurses
+libraries. Most of the functions are linked in only when the libraries
+are compiled with TRACE defined.
* lib_trace.c - Tracing/Debugging routines
*/
-#ifndef TRACE
-#define TRACE /* turn on internal defs for this module */
-#endif
-
#include <curses.priv.h>
+#include <tic.h>
-MODULE_ID("$Id: lib_trace.c,v 1.25 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: lib_trace.c,v 1.30 1998/10/03 23:41:42 tom Exp $")
#include <ctype.h>
#if HAVE_FCNTL_H
#include <fcntl.h>
#endif
-unsigned _nc_tracing = 0;
+unsigned _nc_tracing = 0; /* always define this */
+
+#ifdef TRACE
const char *_nc_tputs_trace = "";
long _nc_outchars;
-int _nc_optimize_enable = OPTIMIZE_ALL;
static FILE * tracefp; /* default to writing to stderr */
+#endif
-void trace(const unsigned int tracelevel)
+void trace(const unsigned int tracelevel GCC_UNUSED)
{
+#ifdef TRACE
static bool been_here = FALSE;
+static char my_name[] = "trace";
_nc_tracing = tracelevel;
if (! been_here && tracelevel) {
been_here = TRUE;
- if ((tracefp = fopen("trace", "w")) == 0) {
+ if (_nc_access(my_name, W_OK) < 0
+ || (tracefp = fopen(my_name, "w")) == 0) {
perror("curses: Can't open 'trace' file: ");
exit(EXIT_FAILURE);
}
_tracef("TRACING NCURSES version %s (%d)",
NCURSES_VERSION, NCURSES_VERSION_PATCH);
}
+#endif
}
const char *_nc_visbuf2(int bufnum, const char *buf)
if (buf == 0)
return("(null)");
+ if (buf == CANCELLED_STRING)
+ return("(cancelled)");
tp = vbuf = _nc_trace_buf(bufnum, (strlen(buf) * 4) + 5);
*tp++ = '"';
return _nc_visbuf2(0, buf);
}
+#ifdef TRACE
void
_tracef(const char *fmt, ...)
{
T((T_RETURN("%p"), code));
return code;
}
+#endif /* TRACE */
* lib_traceatr.c - Tracing/Debugging routines (attributes)
*/
-#ifndef TRACE
-#define TRACE /* turn on internal defs for this module */
-#endif
-
#include <curses.priv.h>
#include <term.h> /* acs_chars */
-MODULE_ID("$Id: lib_traceatr.c,v 1.25 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: lib_traceatr.c,v 1.28 1998/03/21 18:39:36 tom Exp $")
#define COLOR_OF(c) (c < 0 || c > 7 ? "default" : colors[c].name)
+#ifdef TRACE
char *_traceattr2(int bufnum, attr_t newmode)
{
char *buf = _nc_trace_buf(bufnum, BUFSIZ);
{
return _tracechtype2(0, ch);
}
+#else
+extern void _nc_lib_traceatr(void);
+ void _nc_lib_traceatr(void) { }
+#endif /* TRACE */
* and: Eric S. Raymond <esr@snark.thyrsus.com> *
****************************************************************************/
-
-/*
- * raw.c
- *
- * Routines:
- * raw()
- * cbreak()
- * noraw()
- * nocbreak()
- * qiflush()
- * noqiflush()
- * intrflush()
- *
- */
-
#include <curses.priv.h>
#include <term.h> /* cur_term */
-MODULE_ID("$Id: lib_raw.c,v 1.25 1998/02/11 12:13:59 tom Exp $")
+MODULE_ID("$Id: lib_tracebits.c,v 1.3 1999/08/21 21:43:48 tom Exp $")
#if defined(SVR4_TERMIO) && !defined(_POSIX_SOURCE)
#define _POSIX_SOURCE
#define IEXTEN 0
#endif
-#define COOKED_INPUT (IXON|BRKINT|PARMRK)
-
#ifdef TRACE
typedef struct {unsigned int val; const char *name;} BITNAMES;
(void) strcat(buf,"} ");
}
-char *_tracebits(void)
+char *_nc_tracebits(void)
/* describe the state of the terminal control bits exactly */
{
char *buf;
#if defined(CS5) && defined(CS8)
switch (cur_term->Nttyb.c_cflag & CSIZE) {
+#if defined(CS5) && (CS5 != 0)
case CS5: strcat(buf, "CS5 "); break;
+#endif
+#if defined(CS6) && (CS6 != 0)
case CS6: strcat(buf, "CS6 "); break;
+#endif
+#if defined(CS7) && (CS7 != 0)
case CS7: strcat(buf, "CS7 "); break;
+#endif
+#if defined(CS8) && (CS8 != 0)
case CS8: strcat(buf, "CS8 "); break;
+#endif
default: strcat(buf, "CSIZE? "); break;
}
#endif
#endif
return(buf);
}
-
-#define BEFORE(N) if (_nc_tracing&TRACE_BITS) _tracef("%s before bits: %s", N, _tracebits())
-#define AFTER(N) if (_nc_tracing&TRACE_BITS) _tracef("%s after bits: %s", N, _tracebits())
#else
-#define BEFORE(s)
-#define AFTER(s)
+char *_nc_tracebits(void) { static char tmp[] = ""; return tmp; }
#endif /* TRACE */
-
-int raw(void)
-{
- T((T_CALLED("raw()")));
- if (SP != 0 && cur_term != 0) {
-
- SP->_raw = TRUE;
- SP->_cbreak = TRUE;
-
-#ifdef __EMX__
- setmode(SP->_ifd, O_BINARY);
-#endif
-
-#ifdef TERMIOS
- BEFORE("raw");
- cur_term->Nttyb.c_lflag &= ~(ICANON|ISIG);
- cur_term->Nttyb.c_iflag &= ~(COOKED_INPUT);
- cur_term->Nttyb.c_cc[VMIN] = 1;
- cur_term->Nttyb.c_cc[VTIME] = 0;
- AFTER("raw");
-#else
- cur_term->Nttyb.sg_flags |= RAW;
-#endif
- returnCode(_nc_set_curterm(&cur_term->Nttyb));
- }
- returnCode(ERR);
-}
-
-int cbreak(void)
-{
- T((T_CALLED("cbreak()")));
-
- SP->_cbreak = TRUE;
-
-#ifdef __EMX__
- setmode(SP->_ifd, O_BINARY);
-#endif
-
-#ifdef TERMIOS
- BEFORE("cbreak");
- cur_term->Nttyb.c_lflag &= ~ICANON;
- cur_term->Nttyb.c_iflag &= ~ICRNL;
- cur_term->Nttyb.c_lflag |= ISIG;
- cur_term->Nttyb.c_cc[VMIN] = 1;
- cur_term->Nttyb.c_cc[VTIME] = 0;
- AFTER("cbreak");
-#else
- cur_term->Nttyb.sg_flags |= CBREAK;
-#endif
- returnCode(_nc_set_curterm( &cur_term->Nttyb));
-}
-
-int qiflush(void)
-{
- T((T_CALLED("qiflush()")));
-
- /*
- * Note: this implementation may be wrong. See the comment under
- * intrflush().
- */
-
-#ifdef TERMIOS
- BEFORE("qiflush");
- cur_term->Nttyb.c_lflag &= ~(NOFLSH);
- AFTER("qiflush");
- returnCode(_nc_set_curterm( &cur_term->Nttyb));
-#else
- returnCode(ERR);
-#endif
-}
-
-
-int noraw(void)
-{
- T((T_CALLED("noraw()")));
-
- SP->_raw = FALSE;
- SP->_cbreak = FALSE;
-
-#ifdef __EMX__
- setmode(SP->_ifd, O_TEXT);
-#endif
-
-#ifdef TERMIOS
- BEFORE("noraw");
- cur_term->Nttyb.c_lflag |= ISIG|ICANON;
- cur_term->Nttyb.c_iflag |= COOKED_INPUT;
- AFTER("noraw");
-#else
- cur_term->Nttyb.sg_flags &= ~(RAW|CBREAK);
-#endif
- returnCode(_nc_set_curterm( &cur_term->Nttyb));
-}
-
-
-int nocbreak(void)
-{
- T((T_CALLED("nocbreak()")));
-
- SP->_cbreak = FALSE;
-
-#ifdef __EMX__
- setmode(SP->_ifd, O_TEXT);
-#endif
-
-#ifdef TERMIOS
- BEFORE("nocbreak");
- cur_term->Nttyb.c_lflag |= ICANON;
- cur_term->Nttyb.c_iflag |= ICRNL;
- AFTER("nocbreak");
-#else
- cur_term->Nttyb.sg_flags &= ~CBREAK;
-#endif
- returnCode(_nc_set_curterm( &cur_term->Nttyb));
-}
-
-int noqiflush(void)
-{
- T((T_CALLED("noqiflush()")));
-
- /*
- * Note: this implementation may be wrong. See the comment under
- * intrflush().
- */
-
-#ifdef TERMIOS
- BEFORE("noqiflush");
- cur_term->Nttyb.c_lflag |= NOFLSH;
- AFTER("noqiflush");
- returnCode(_nc_set_curterm( &cur_term->Nttyb));
-#else
- returnCode(ERR);
-#endif
-}
-
-int intrflush(WINDOW *win GCC_UNUSED, bool flag)
-{
- T((T_CALLED("intrflush(%d)"), flag));
-
- /*
- * This call does the same thing as the qiflush()/noqiflush()
- * pair. We know for certain that SVr3 intrflush() tweaks the
- * NOFLSH bit; on the other hand, the match (in the SVr4 man
- * pages) between the language describing NOFLSH in termio(7)
- * and the language describing qiflush()/noqiflush() in
- * curs_inopts(3x) is too exact to be coincidence.
- */
-
-#ifdef TERMIOS
- BEFORE("intrflush");
- if (flag)
- cur_term->Nttyb.c_lflag &= ~(NOFLSH);
- else
- cur_term->Nttyb.c_lflag |= (NOFLSH);
- AFTER("intrflush");
- returnCode(_nc_set_curterm( &cur_term->Nttyb));
-#else
- returnCode(ERR);
-#endif
-}
#include <ctype.h>
+#ifdef TRACE
char *_tracechar(const unsigned char ch)
{
static char crep[20];
(void) sprintf(crep, "0x%02x", (unsigned)ch);
return(crep);
}
+#else
+extern void _nc_lib_tracechr(void);
+ void _nc_lib_tracechr(void) { }
+#endif
* lib_tracedmp.c - Tracing/Debugging routines
*/
-#ifndef TRACE
-#define TRACE /* turn on internal defs for this module */
-#endif
-
#include <curses.priv.h>
-MODULE_ID("$Id: lib_tracedmp.c,v 1.11 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: lib_tracedmp.c,v 1.13 1998/03/21 18:39:44 tom Exp $")
+#ifdef TRACE
void _tracedump(const char *name, WINDOW *win)
{
int i, j, n, width;
}
}
}
+#else
+extern void _nc_lib_tracedmp(void);
+ void _nc_lib_tracedmp(void) { }
+#endif /* TRACE */
* lib_tracemse.c - Tracing/Debugging routines (mouse events)
*/
-#ifndef TRACE
-#define TRACE /* turn on internal defs for this module */
-#endif
-
#include <curses.priv.h>
-MODULE_ID("$Id: lib_tracemse.c,v 1.5 1998/02/11 12:13:53 tom Exp $")
+MODULE_ID("$Id: lib_tracemse.c,v 1.6 1998/11/16 14:28:17 Alexander.V.Lukyanov Exp $")
+
+#ifdef TRACE
char *_tracemouse(MEVENT const *ep)
{
return(buf);
}
-
-
+#else /* !TRACE */
+/* don't make empty module */
+void _nc_lib_tracemouse(void);
+void _nc_lib_tracemouse(void) {}
+#endif
#include <curses.priv.h>
-MODULE_ID("$Id: trace_buf.c,v 1.3 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: trace_buf.c,v 1.7 1999/02/27 19:50:58 tom Exp $")
+
+typedef struct {
+ char *text;
+ size_t size;
+} LIST;
char * _nc_trace_buf(int bufnum, size_t want)
{
- static struct {
- char *text;
- size_t size;
- } *list;
+ static LIST *list;
static size_t have;
#if NO_LEAKS
if ((size_t)(bufnum+1) > have) {
size_t need = (bufnum + 1) * 2;
- size_t used = sizeof(*list) * need;
- list = (list == 0) ? malloc(used) : realloc(list, used);
+ if ((list = typeRealloc(LIST, need, list)) == 0)
+ return(0);
while (need > have)
list[have++].text = 0;
}
- if (list[bufnum].text == 0)
+ if (list[bufnum].text == 0
+ || want > list[bufnum].size)
{
- list[bufnum].text = malloc(want);
- list[bufnum].size = want;
- }
- else if (want > list[bufnum].size) {
- list[bufnum].text = realloc(list[bufnum].text, want);
- list[bufnum].size = want;
+ if ((list[bufnum].text = typeRealloc(char, want, list[bufnum].text)) != 0)
+ list[bufnum].size = want;
}
- *(list[bufnum].text) = '\0';
+
+ if (list[bufnum].text != 0)
+ *(list[bufnum].text) = '\0';
return list[bufnum].text;
}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999 *
+ ****************************************************************************/
+/*
+ * trace_tries.c - Tracing/Debugging buffers (keycode tries-trees)
+ */
+
+#include <curses.priv.h>
+
+MODULE_ID("$Id: trace_tries.c,v 1.6 1999/03/06 22:51:07 tom Exp $")
+
+#ifdef TRACE
+static unsigned char *buffer;
+static unsigned len;
+
+static void recur_tries(struct tries *tree, unsigned level)
+{
+ if (level > len)
+ buffer = (unsigned char *)realloc(buffer, len = (level + 1) * 4);
+
+ while (tree != 0) {
+ if ((buffer[level] = tree->ch) == 0)
+ buffer[level] = 128;
+ buffer[level+1] = 0;
+ if (tree->value != 0) {
+ _tracef("%5d: %s (%s)", tree->value, _nc_visbuf((char *)buffer), keyname(tree->value));
+ }
+ if (tree->child)
+ recur_tries(tree->child, level+1);
+ tree = tree->sibling;
+ }
+}
+
+void _nc_trace_tries(struct tries *tree)
+{
+ buffer = typeMalloc(unsigned char, len = 80);
+ _tracef("BEGIN tries %p", tree);
+ recur_tries(tree, 0);
+ _tracef(". . . tries %p", tree);
+ free(buffer);
+}
+#else
+void _nc_trace_tries(struct tries *tree GCC_UNUSED)
+{
+}
+#endif
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/****************************************************************************
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999 *
+ ****************************************************************************/
+/*
+ * trace_xnames.c - Tracing/Debugging buffers (TERMTYPE extended names)
+ */
+
+#include <curses.priv.h>
+#include <term_entry.h>
+
+MODULE_ID("$Id: trace_xnames.c,v 1.3 1999/03/02 01:20:38 tom Exp $")
+
+void _nc_trace_xnames(TERMTYPE *tp GCC_UNUSED)
+{
+#ifdef TRACE
+#if NCURSES_XNAMES
+ int limit = tp->ext_Booleans + tp->ext_Numbers + tp->ext_Strings;
+ int n, m;
+ if (limit) {
+ int begin_num = tp->ext_Booleans;
+ int begin_str = tp->ext_Booleans + tp->ext_Numbers;
+
+ _tracef("extended names (%s) %d = %d+%d+%d of %d+%d+%d",
+ tp->term_names,
+ limit,
+ tp->ext_Booleans, tp->ext_Numbers, tp->ext_Strings,
+ tp->num_Booleans, tp->num_Numbers, tp->num_Strings);
+ for (n = 0; n < limit; n++) {
+ if ((m = n - begin_str) >= 0) {
+ _tracef("[%d] %s = %s", n,
+ tp->ext_Names[n],
+ _nc_visbuf(tp->Strings[tp->num_Strings + m - tp->ext_Strings]));
+ } else if ((m = n - begin_num) >= 0) {
+ _tracef("[%d] %s = %d (num)", n,
+ tp->ext_Names[n],
+ tp->Numbers[tp->num_Numbers + m - tp->ext_Numbers]);
+ } else {
+ _tracef("[%d] %s = %d (bool)", n,
+ tp->ext_Names[n],
+ tp->Booleans[tp->num_Booleans + n - tp->ext_Booleans]);
+ }
+ }
+ }
+#endif
+#endif
+}
#
# Author: Thomas E. Dickey <dickey@clark.net> 1997
#
-# $Id: MKexpanded.sh,v 1.6 1998/02/11 12:13:54 tom Exp $
+# $Id: MKexpanded.sh,v 1.7 1998/11/11 20:15:39 Alexander.V.Lukyanov Exp $
#
# Script to generate 'expanded.c', a dummy source that contains functions
# corresponding to complex macros used in this library. By making functions,
TMP=gen$$.c
trap "rm -f $TMP" 0 1 2 5 15
-cat >expanded.c <<EOF
+cat <<EOF
/* generated by MKexpanded.sh */
#include <curses.priv.h>
#include <term.h>
}
EOF
-$preprocessor $TMP 2>/dev/null | sed -e '1,/^IGNORE$/d' >>expanded.c
+$preprocessor $TMP 2>/dev/null | sed -e '1,/^IGNORE$/d'
-cat >>expanded.c <<EOF
+cat <<EOF
#else /* ! NCURSES_EXPANDED */
void _nc_expanded(void) { }
#endif /* NCURSES_EXPANDED */
#include <curses.priv.h>
-MODULE_ID("$Id: hardscroll.c,v 1.29 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: hardscroll.c,v 1.33 1999/02/27 20:01:29 tom Exp $")
#if defined(SCROLLDEBUG) || defined(HASHDEBUG)
+
+# undef screen_lines
+# define screen_lines MAXLINES
int oldnums[MAXLINES];
-#define OLDNUM(n) oldnums[n]
-#undef T
-#define T(x) (void) printf x ; (void) putchar('\n');
-#else
-#include <curses.h>
-#define OLDNUM(n) newscr->_line[n].oldindex
-#ifndef _NEWINDEX
-#define _NEWINDEX -1
-#endif /* _NEWINDEX */
+# define OLDNUM(n) oldnums[n]
+# define _tracef printf
+# undef TR
+# define TR(n, a) if (_nc_tracing & (n)) { _tracef a ; putchar('\n'); }
+
+#else /* no debug */
+
+/* OLDNUM(n) indicates which line will be shifted to the position n.
+ if OLDNUM(n) == _NEWINDEX, then the line n in new, not shifted from
+ somewhere. */
+# if USE_HASHMAP
+int *_nc_oldnums = 0;
+static int oldnums_allocated = 0;
+# define oldnums _nc_oldnums
+# define OLDNUM(n) oldnums[n]
+# else /* !USE_HASHMAP */
+# define OLDNUM(n) newscr->_line[n].oldindex
+# endif /* !USE_HASHMAP */
+
#endif /* defined(SCROLLDEBUG) || defined(HASHDEBUG) */
TR(TRACE_ICALLS, ("_nc_scroll_optimize() begins"));
+#if !defined(SCROLLDEBUG) && !defined(HASHDEBUG)
+#if USE_HASHMAP
+ /* get enough storage */
+ if (oldnums_allocated < screen_lines)
+ {
+ int *new_oldnums = typeRealloc(int, screen_lines, oldnums);
+ if (!new_oldnums)
+ return;
+ oldnums = new_oldnums;
+ oldnums_allocated = screen_lines;
+ }
+ /* calculate the indices */
+ _nc_hash_map();
+#endif
+#endif /* !defined(SCROLLDEBUG) && !defined(HASHDEBUG) */
+
#ifdef TRACE
if (_nc_tracing & (TRACE_UPDATE | TRACE_MOVE))
_nc_linedump();
i++;
if (i >= screen_lines)
break;
-
+
shift = OLDNUM(i) - i; /* shift > 0 */
start = i;
-
+
i++;
while (i < screen_lines && OLDNUM(i) != _NEWINDEX && OLDNUM(i) - i == shift)
i++;
i--;
if (i < 0)
break;
-
+
shift = OLDNUM(i) - i; /* shift < 0 */
end = i;
-
+
i--;
while (i >= 0 && OLDNUM(i) != _NEWINDEX && OLDNUM(i) - i == shift)
i--;
}
}
-#if defined(TRACE) || defined(SCROLLDEBUG)
+#if defined(TRACE) || defined(SCROLLDEBUG) || defined(HASHDEBUG)
void _nc_linedump(void)
/* dump the state of the real and virtual oldnum fields */
{
size_t want = (screen_lines + 1) * 4;
if (have < want)
- buf = malloc(have = want);
+ buf = typeMalloc(char, have = want);
(void) strcpy(buf, "virt");
for (n = 0; n < screen_lines; n++)
AUTHOR
Eric S. Raymond <esr@snark.thyrsus.com>, May 1996
+ Bug fixes and improvements by Alexander V. Lukyanov <lav@yars.free.net>, 1997
*****************************************************************************/
#include <curses.priv.h>
+#include <term.h> /* for back_color_erase */
-MODULE_ID("$Id: hashmap.c,v 1.24 1998/02/11 12:13:55 tom Exp $")
+MODULE_ID("$Id: hashmap.c,v 1.33 1999/03/18 02:09:45 Alexander.V.Lukyanov Exp $")
#ifdef HASHDEBUG
-#define TEXTWIDTH 1
+
+# define _tracef printf
+# undef TR
+# define TR(n, a) if (_nc_tracing & (n)) { _tracef a ; putchar('\n'); }
+# undef screen_lines
+# define screen_lines MAXLINES
+# define TEXTWIDTH 1
int oldnums[MAXLINES], reallines[MAXLINES];
static chtype oldtext[MAXLINES][TEXTWIDTH], newtext[MAXLINES][TEXTWIDTH];
-#define OLDNUM(n) oldnums[n]
-#define REAL(m) reallines[m]
-#define OLDTEXT(n) oldtext[n]
-#define NEWTEXT(m) newtext[m]
-#undef T
-#define T(x) (void) printf x ; (void) putchar('\n');
-#else
-#include <curses.h>
-#define OLDNUM(n) newscr->_line[n].oldindex
-#define REAL(m) curscr->_line[m].oldindex
-#define OLDTEXT(n) curscr->_line[n].text
-#define NEWTEXT(m) newscr->_line[m].text
-#define TEXTWIDTH (curscr->_maxx+1)
-#ifndef _NEWINDEX
-#define _NEWINDEX -1
-#endif /* _NEWINDEX */
-#endif /* HASHDEBUG */
+# define OLDNUM(n) oldnums[n]
+# define OLDTEXT(n) oldtext[n]
+# define NEWTEXT(m) newtext[m]
+# define PENDING(n) 1
+
+#else /* !HASHDEBUG */
+
+# define OLDNUM(n) _nc_oldnums[n]
+# define OLDTEXT(n) curscr->_line[n].text
+# define NEWTEXT(m) newscr->_line[m].text
+# define TEXTWIDTH (curscr->_maxx+1)
+# define PENDING(n) (newscr->_line[n].firstchar != _NOCHANGE)
+
+#endif /* !HASHDEBUG */
+
+#define oldhash (SP->oldhash)
+#define newhash (SP->newhash)
static inline unsigned long hash(chtype *text)
{
for (i = TEXTWIDTH; i>0; i--)
{
ch = *text++;
- result += (result<<5) + ch + (ch>>16);
+ result += (result<<5) + ch;
}
return result;
}
int i;
for (i=TEXTWIDTH; i>0; i--)
- if (*from++ != *to++)
+ if (*from++ != *to++)
cost++;
return cost;
{
int cost=0;
int i;
+ chtype blank = BLANK;
+
+ if (back_color_erase)
+ blank |= (stdscr->_bkgd & A_COLOR);
- /* FIXME: ClrBlank should be used */
for (i=TEXTWIDTH; i>0; i--)
- if (BLANK != *to++)
+ if (blank != *to++)
cost++;
return cost;
if (new_from == _NEWINDEX)
new_from = from;
- /*
+ /*
* On the left side of >= is the cost before moving;
* on the right side -- cost after moving.
*/
sym;
static sym *hashtab=0;
-static int lines_alloc=0;
-static long *oldhash=0;
-static long *newhash=0;
+static int lines_alloc=0;
static void grow_hunks(void)
{
{
start = i;
shift = OLDNUM(i) - i;
-
+
/* get forward limit */
i = start+1;
while (i < screen_lines && OLDNUM(i) != _NEWINDEX && OLDNUM(i) - i == shift)
}
i--;
}
-
+
i = end;
/* grow forward */
if (shift > 0)
}
i++;
}
-
+
back_ref_limit = back_limit = i;
if (shift > 0)
back_ref_limit += shift;
{
if (hashtab)
free (hashtab);
- hashtab = malloc (sizeof(*hashtab)*(screen_lines+1)*2);
+ hashtab = typeMalloc(sym, (screen_lines+1)*2);
if (!hashtab)
{
if (oldhash)
lines_alloc = 0;
return;
}
-
- if (oldhash)
- free (oldhash);
- oldhash = malloc (sizeof(*oldhash)*screen_lines*2);
- if (!oldhash)
+ lines_alloc = screen_lines;
+ }
+
+ if (oldhash && newhash)
+ {
+ /* re-hash only changed lines */
+ for (i = 0; i < screen_lines; i++)
+ {
+ if (PENDING(i))
+ newhash[i] = hash(NEWTEXT(i));
+ }
+ }
+ else
+ {
+ /* re-hash all */
+ if (oldhash == 0)
+ oldhash = typeCalloc (unsigned long, screen_lines);
+ if (newhash == 0)
+ newhash = typeCalloc (unsigned long, screen_lines);
+ if (!oldhash || !newhash)
+ return; /* malloc failure */
+ for (i = 0; i < screen_lines; i++)
{
- if (hashtab)
- FreeAndNull(hashtab);
- lines_alloc = 0;
- return;
+ newhash[i] = hash(NEWTEXT(i));
+ oldhash[i] = hash(OLDTEXT(i));
}
-
- lines_alloc = screen_lines;
}
- newhash = oldhash + screen_lines; /* two arrays in the same memory block */
+
+#ifdef HASH_VERIFY
+ for (i = 0; i < screen_lines; i++)
+ {
+ if(newhash[i] != hash(NEWTEXT(i)))
+ fprintf(stderr,"error in newhash[%d]\n",i);
+ if(oldhash[i] != hash(OLDTEXT(i)))
+ fprintf(stderr,"error in oldhash[%d]\n",i);
+ }
+#endif
/*
* Set up and count line-hash values.
memset(hashtab, '\0', sizeof(*hashtab)*(screen_lines+1)*2);
for (i = 0; i < screen_lines; i++)
{
- unsigned long hashval = hash(OLDTEXT(i));
+ unsigned long hashval = oldhash[i];
for (sp = hashtab; sp->hashval; sp++)
if (sp->hashval == hashval)
break;
sp->hashval = hashval; /* in case this is a new entry */
- oldhash[i] = hashval;
sp->oldcount++;
sp->oldindex = i;
}
for (i = 0; i < screen_lines; i++)
{
- unsigned long hashval = hash(NEWTEXT(i));
+ unsigned long hashval = newhash[i];
for (sp = hashtab; sp->hashval; sp++)
if (sp->hashval == hashval)
break;
sp->hashval = hashval; /* in case this is a new entry */
- newhash[i] = hashval;
sp->newcount++;
sp->newindex = i;
-
- OLDNUM(i) = _NEWINDEX;
+
+ OLDNUM(i) = _NEWINDEX; /* initialize old indices array */
}
/*
* Mark line pairs corresponding to unique hash pairs.
- *
+ *
* We don't mark lines with offset 0, because it can make fail
* extending hunks by cost_effective. Otherwise, it does not
* have any side effects.
while (i < screen_lines && OLDNUM(i) != _NEWINDEX && OLDNUM(i) - i == shift)
i++;
size = i - start;
- if (size <= abs(shift))
+ if (size < 3 || size+min(size/8,2) < abs(shift))
{
while (start < i)
{
}
}
}
-
+
/* After clearing invalid hunks, try grow the rest. */
grow_hunks();
#if NO_LEAKS
FreeAndNull(hashtab);
- FreeAndNull(oldhash);
lines_alloc = 0;
#endif
}
+void _nc_make_oldhash(int i)
+{
+ if (oldhash)
+ oldhash[i] = hash(OLDTEXT(i));
+}
+
+void _nc_scroll_oldhash(int n, int top, int bot)
+{
+ int size;
+ int i;
+
+ if (!oldhash)
+ return;
+
+ size = sizeof(*oldhash) * (bot-top+1-abs(n));
+ if (n > 0)
+ {
+ memmove (oldhash+top, oldhash+top+n, size);
+ for (i = bot; i > bot-n; i--)
+ oldhash[i] = hash(OLDTEXT(i));
+ }
+ else
+ {
+ memmove (oldhash+top-n, oldhash+top, size);
+ for (i = top; i < top-n; i++)
+ oldhash[i] = hash(OLDTEXT(i));
+ }
+}
+
+
#ifdef HASHDEBUG
+static void
+usage(void)
+{
+ static const char *table[] = {
+ "hashmap test-driver",
+ "",
+ "# comment",
+ "l get initial line number vector",
+ "n use following letters as text of new lines",
+ "o use following letters as text of old lines",
+ "d dump state of test arrays",
+ "h apply hash mapper and see scroll optimization",
+ "? this message"
+ };
+ size_t n;
+ for (n = 0; n < sizeof(table)/sizeof(table[0]); n++)
+ fprintf(stderr, "%s\n", table[n]);
+}
int
main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED)
char line[BUFSIZ], *st;
int n;
+ SP = typeCalloc(SCREEN,1);
for (n = 0; n < screen_lines; n++)
{
reallines[n] = n;
oldtext[n][0] = newtext[n][0] = '.';
}
+ if (isatty(fileno(stdin)))
+ usage();
+
#ifdef TRACE
_nc_tracing = TRACE_MOVE;
#endif
_nc_scroll_optimize();
(void) fputs("Done.\n", stderr);
break;
+ case '?':
+ usage();
+ break;
}
}
return EXIT_SUCCESS;
#include <term.h>
#include <ctype.h>
-MODULE_ID("$Id: lib_mvcur.c,v 1.50 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_mvcur.c,v 1.60 1999/10/03 01:08:27 Alexander.V.Lukyanov Exp $")
#define STRLEN(s) (s != 0) ? strlen(s) : 0
static int normalized_cost(const char *const cap, int affcnt);
+#if !HAVE_STRSTR
+char * _nc_strstr(const char *haystack, const char *needle)
+{
+ size_t len1 = strlen(haystack);
+ size_t len2 = strlen(needle);
+ char *result = 0;
+
+ while ((len1 != 0) && (len1-- >= len2)) {
+ if (!strncmp(haystack, needle, len2)) {
+ result = haystack;
+ break;
+ }
+ haystack++;
+ }
+ return result;
+}
+#endif
+
/****************************************************************************
*
* Initialization/wrapup (including cost pre-computation)
{
if (isdigit(*cp))
number = number * 10 + (*cp - '0');
- else if (*cp == '.')
- number += (*++cp - 10) / 10.0;
else if (*cp == '*')
number *= affcnt;
+ else if (*cp == '.' && (*++cp != '>') && isdigit(*cp))
+ number += (*cp - '0') / 10.0;
}
cum_cost += number * 10;
*/
reset_scroll_region();
SP->_cursrow = SP->_curscol = -1;
-
+
/* restore cursor shape */
if (SP->_cursor != -1)
{
SP->_cud1_cost = CostOf(cursor_down, 0);
SP->_cuu1_cost = CostOf(cursor_up, 0);
+ SP->_smir_cost = CostOf(enter_insert_mode, 0);
+ SP->_rmir_cost = CostOf(exit_insert_mode, 0);
+ SP->_ip_cost = 0;
+ if (insert_padding) {
+ SP->_ip_cost = CostOf(insert_padding, 0);
+ }
+
/*
* Assumption: if the terminal has memory_relative addressing, the
* initialization strings or smcup will set single-page mode so we
SP->_cursor_home_length = STRLEN(cursor_home);
SP->_cursor_to_ll_length = STRLEN(cursor_to_ll);
+ /*
+ * If save_cursor is used within enter_ca_mode, we should not use it for
+ * scrolling optimization, since the corresponding restore_cursor is not
+ * nested on the various terminals (vt100, xterm, etc.) which use this
+ * feature.
+ */
+ if (save_cursor != 0
+ && enter_ca_mode != 0
+ && strstr(enter_ca_mode, save_cursor) != 0) {
+ T(("...suppressed sc/rc capability due to conflict with smcup/rmcup"));
+ save_cursor = 0;
+ restore_cursor = 0;
+ }
+
/*
* A different, possibly better way to arrange this would be to set
* SP->_endwin = TRUE at window initialization time and let this be
#endif /* USE_HARD_TABS */
#if defined(REAL_ATTR) && defined(WANT_CHAR)
+#ifdef BSD_TPUTS
+ /*
+ * If we're allowing BSD-style padding in tputs, don't generate
+ * a string with a leading digit. Otherwise, that will be
+ * interpreted as a padding value rather than sent to the
+ * screen.
+ */
+ if (ovw
+ && n > 0
+ && vcost == 0
+ && str[0] == '\0'
+ && isdigit(TextOf(WANT_CHAR(to_y, from_x))))
+ ovw = FALSE;
+#endif
/*
* If we have no attribute changes, overwrite is cheaper.
* Note: must suppress this by passing in ovw = FALSE whenever
*sp++ = WANT_CHAR(to_y, from_x + i);
*sp = '\0';
lhcost += n * SP->_char_padding;
- }
+ }
else
#endif /* defined(REAL_ATTR) && defined(WANT_CHAR) */
{
{
char use[OPT_SIZE], *sp;
int tactic = 0, newcost, usecost = INFINITY;
+ int t5_cr_cost;
#if defined(MAIN) || defined(NCURSES_TEST)
struct timeval before, after;
* tactic #5: use left margin for wrap to right-hand side,
* unless strange wrap behavior indicated by xenl might hose us.
*/
+ t5_cr_cost = (xold>0 ? SP->_cr_cost : 0);
if (auto_left_margin && !eat_newline_glitch
&& yold > 0 && cursor_left
&& ((newcost=relative_move(NULL, yold-1, screen_columns-1, ynew, xnew, ovw)) != INFINITY)
- && SP->_cr_cost + SP->_cub1_cost + newcost + newcost < usecost)
+ && t5_cr_cost + SP->_cub1_cost + newcost < usecost)
{
tactic = 5;
- usecost = SP->_cr_cost + SP->_cub1_cost + newcost;
+ usecost = t5_cr_cost + SP->_cub1_cost + newcost;
}
/*
return(onscreen_mvcur(yold, xold, ynew, xnew, TRUE));
}
+#if defined(TRACE) || defined(NCURSES_TEST)
+int _nc_optimize_enable = OPTIMIZE_ALL;
+#endif
+
#if defined(MAIN) || defined(NCURSES_TEST)
/****************************************************************************
*
baudrate();
_nc_mvcur_init();
-#if HAVE_SETVBUF || HAVE_SETBUFFER
- /*
- * Undo the effects of our optimization hack, otherwise our interactive
- * prompts don't flush properly.
- */
-#if HAVE_SETVBUF
- (void) setvbuf(SP->_ofp, malloc(BUFSIZ), _IOLBF, BUFSIZ);
-#elif HAVE_SETBUFFER
- (void) setbuffer(SP->_ofp, malloc(BUFSIZ), BUFSIZ);
-#endif
-#endif /* HAVE_SETVBUF || HAVE_SETBUFFER */
+ NC_BUFFERED(FALSE);
(void) puts("The mvcur tester. Type ? for help");
}
else if (buf[0] == 'i')
{
- dump_init((char *)NULL, F_TERMINFO, S_TERMINFO, 70, 0);
- dump_entry(&cur_term->type, 0, 0);
+ dump_init((char *)NULL, F_TERMINFO, S_TERMINFO, 70, 0, FALSE);
+ dump_entry(&cur_term->type, FALSE, TRUE, 0);
putchar('\n');
}
else if (buf[0] == 'o')
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
#define _POSIX_SOURCE
#endif
-MODULE_ID("$Id: lib_tstp.c,v 1.15 1998/02/11 12:13:57 tom Exp $")
+MODULE_ID("$Id: lib_tstp.c,v 1.20 1999/10/22 23:11:09 tom Exp $")
+
+#if defined(SIGTSTP) && (HAVE_SIGACTION || HAVE_SIGVEC)
+#define USE_SIGTSTP 1
+#else
+#define USE_SIGTSTP 0
+#endif
/*
* Note: This code is fragile! Its problem is that different OSs
* the future. If nothing else, it's simpler...
*/
-#ifdef SIGTSTP
+#if USE_SIGTSTP
static void tstp(int dummy GCC_UNUSED)
{
sigset_t mask, omask;
sigaction_t act, oact;
+#ifdef SIGTTOU
+ int sigttou_blocked;
+#endif
+
T(("tstp() called"));
/*
* The user may have changed the prog_mode tty bits, so save them.
+ *
+ * But first try to detect whether we still are in the foreground
+ * process group - if not, an interactive shell may already have
+ * taken ownership of the tty and modified the settings when our
+ * parent was stopped before us, and we would likely pick up the
+ * settings already modified by the shell.
*/
- def_prog_mode();
+ if (SP != 0 && !SP->_endwin) /* don't do this if we're not in curses */
+#if HAVE_TCGETPGRP
+ if (tcgetpgrp(STDIN_FILENO) == getpgrp())
+#endif
+ def_prog_mode();
/*
* Block window change and timer signals. The latter
#endif
(void)sigprocmask(SIG_BLOCK, &mask, &omask);
+#ifdef SIGTTOU
+ sigttou_blocked = sigismember(&omask, SIGTTOU);
+ if (!sigttou_blocked) {
+ (void)sigemptyset(&mask);
+ (void)sigaddset(&mask, SIGTTOU);
+ (void)sigprocmask(SIG_BLOCK, &mask, NULL);
+ }
+#endif
+
/*
* End window mode, which also resets the terminal state to the
* original (pre-curses) modes.
/* Unblock SIGTSTP. */
(void)sigemptyset(&mask);
(void)sigaddset(&mask, SIGTSTP);
+#ifdef SIGTTOU
+ if (!sigttou_blocked) {
+ /* Unblock this too if it wasn't blocked on entry */
+ (void)sigaddset(&mask, SIGTTOU);
+ }
+#endif
(void)sigprocmask(SIG_UNBLOCK, &mask, NULL);
/* Now we want to resend SIGSTP to this process and suspend it */
/* Reset the signals. */
(void)sigprocmask(SIG_SETMASK, &omask, NULL);
}
-#endif /* defined(SIGTSTP) */
+#endif /* USE_SIGTSTP */
static void cleanup(int sig)
{
+ static int nested;
+
/*
* Actually, doing any sort of I/O from within an signal handler is
* "unsafe". But we'll _try_ to clean up the screen and terminal
* settings on the way out.
*/
- if (sig == SIGINT
- || sig == SIGQUIT) {
+ if (!nested++
+ && (sig == SIGINT
+ || sig == SIGQUIT)) {
#if HAVE_SIGACTION || HAVE_SIGVEC
sigaction_t act;
sigemptyset(&act.sa_mask);
SCREEN *scan = _nc_screen_chain;
while(scan)
{
+ if (SP != 0
+ && SP->_ofp != 0
+ && isatty(fileno(SP->_ofp))) {
+ SP->_cleanup = TRUE;
+ }
set_term(scan);
endwin();
- SP->_endwin = FALSE; /* in case we have an atexit! */
+ if (SP)
+ SP->_endwin = FALSE; /* in case we have an atexit! */
scan = scan->_next_screen;
}
}
return FALSE;
}
#else
-static int CatchIfDefault(int sig, RETSIGTYPE (*handler)())
+static int CatchIfDefault(int sig, RETSIGTYPE (*handler)(int))
{
- void (*ohandler)();
+ void (*ohandler)(int);
ohandler = signal(sig, SIG_IGN);
if (ohandler == SIG_DFL
*/
void _nc_signal_handler(bool enable)
{
-#ifdef SIGTSTP /* Xenix 2.x doesn't have this */
+#if USE_SIGTSTP /* Xenix 2.x doesn't have SIGTSTP, for example */
static sigaction_t act, oact;
static int ignore;
ignore = TRUE;
}
}
-#else /* !SIGTSTP */
+#else /* !USE_SIGTSTP */
if (enable)
{
#if HAVE_SIGACTION || HAVE_SIGVEC
#endif
#endif /* !(HAVE_SIGACTION || HAVE_SIGVEC) */
}
-#endif /* !SIGTSTP */
+#endif /* !USE_SIGTSTP */
}
** comments, none of the original code remains - T.Dickey).
*/
+#ifdef __BEOS__
+#include <OS.h>
+#endif
+
#include <curses.priv.h>
#if USE_FUNC_POLL
# endif
#endif
-#ifdef __BEOS__
-/* BeOS select() only works on sockets. Use the tty hack instead */
-#include <socket.h>
-#define select check_select
-#endif
-
-MODULE_ID("$Id: lib_twait.c,v 1.30 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: lib_twait.c,v 1.34 1999/10/16 21:25:10 tom Exp $")
-/*
- * We want to define GOOD_SELECT if the last argument of select(2) is
- * modified to indicate time left. The code will deal gracefully with
- * the other case, this is just an optimization to reduce the number
- * of system calls per input event.
- *
- * In general, expect System-V-like UNIXes to have this behavior and BSD-like
- * ones to not have it. Check your manual page. If it doesn't explicitly
- * say the last argument is modified, assume it's not.
- *
- * (We'd really like configure to autodetect this, but writing a proper test
- * turns out to be hard.)
- */
+static long _nc_gettime(bool first)
+{
+ long res;
#if HAVE_GETTIMEOFDAY
-#if (defined(TRACE) && !HAVE_USLEEP) || ! GOOD_SELECT
-static void _nc_gettime(struct timeval *tp)
-{
- gettimeofday(tp, (struct timezone *)0);
- T(("time: %ld.%06ld", (long) tp->tv_sec, (long) tp->tv_usec));
-}
-#endif
+# define PRECISE_GETTIME 1
+ static struct timeval t0;
+ struct timeval t1;
+ gettimeofday(&t1, (struct timezone *)0);
+ if (first) {
+ t0 = t1;
+ }
+ res = (t1.tv_sec - t0.tv_sec) * 1000
+ + (t1.tv_usec - t0.tv_usec) / 1000;
+#else
+# define PRECISE_GETTIME 0
+ static time_t t0;
+ time_t t1 = time((time_t*)0);
+ if (first) {
+ t0 = t1;
+ }
+ res = (t1 - t0) * 1000;
#endif
+ T(("%s time: %ld msec", first ? "get" : "elapsed", res));
+ return res;
+}
/*
* Wait a specified number of milliseconds, returning nonzero if the timer
int _nc_timed_wait(int mode, int milliseconds, int *timeleft)
{
int fd;
-int count = 0;
-long whole_secs = milliseconds / 1000;
-long micro_secs = (milliseconds % 1000) * 1000;
+int count;
-int result = 0;
-struct timeval ntimeout;
+int result;
#if USE_FUNC_POLL
struct pollfd fds[2];
+#elif defined(__BEOS__)
#elif HAVE_SELECT
static fd_set set;
#endif
-#if !GOOD_SELECT && HAVE_GETTIMEOFDAY
-struct timeval starttime, returntime;
-long delta;
+long starttime, returntime;
+
+ T(("start twait: %d milliseconds, mode: %d", milliseconds, mode));
- _nc_gettime(&starttime);
+#if PRECISE_GETTIME
+retry:
#endif
+ starttime = _nc_gettime(TRUE);
- if (milliseconds >= 0) {
- ntimeout.tv_sec = whole_secs;
- ntimeout.tv_usec = micro_secs;
- } else {
- ntimeout.tv_sec = 0;
- ntimeout.tv_usec = 0;
- }
+ count = 0;
- T(("start twait: %lu.%06lu secs, mode: %d", (long) ntimeout.tv_sec, (long) ntimeout.tv_usec, mode));
+#if USE_FUNC_POLL
+ if (mode & 1) {
+ fds[count].fd = SP->_ifd;
+ fds[count].events = POLLIN;
+ count++;
+ }
+ if ((mode & 2)
+ && (fd = SP->_mouse_fd) >= 0) {
+ fds[count].fd = fd;
+ fds[count].events = POLLIN;
+ count++;
+ }
+ result = poll(fds, count, milliseconds);
-#ifdef HIDE_EINTR
+#elif defined(__BEOS__)
/*
- * The do loop tries to make it look like we have restarting signals,
- * even if we don't.
+ * BeOS's select() is declared in socket.h, so the configure script does
+ * not see it. That's just as well, since that function works only for
+ * sockets. This (using snooze and ioctl) was distilled from Be's patch
+ * for ncurses which uses a separate thread to simulate select().
+ *
+ * FIXME: the return values from the ioctl aren't very clear if we get
+ * interrupted.
*/
- do {
-#endif /* HIDE_EINTR */
-#if !GOOD_SELECT && HAVE_GETTIMEOFDAY
- retry:
-#endif
- count = 0;
-#if USE_FUNC_POLL
+ result = 0;
+ if (mode & 1) {
+ bigtime_t d;
+ bigtime_t useconds = milliseconds * 1000;
+ int n, howmany;
- if (mode & 1) {
- fds[count].fd = SP->_ifd;
- fds[count].events = POLLIN;
- count++;
- }
- if ((mode & 2)
- && (fd = SP->_mouse_fd) >= 0) {
- fds[count].fd = fd;
- fds[count].events = POLLIN;
- count++;
+ if (useconds == 0) /* we're here to go _through_ the loop */
+ useconds = 1;
+
+ for (d = 0; d < useconds; d += 5000) {
+ n = 0;
+ howmany = ioctl(0, 'ichr', &n);
+ if (howmany >= 0 && n > 0) {
+ result = 1;
+ break;
+ }
+ if (useconds > 1)
+ snooze(5000);
+ milliseconds -= 5;
}
- result = poll(fds, count, milliseconds);
+ } else if (milliseconds > 0) {
+ snooze(milliseconds * 1000);
+ milliseconds = 0;
+ }
#elif HAVE_SELECT
- /*
- * Some systems modify the fd_set arguments; do this in the
- * loop.
- */
- FD_ZERO(&set);
+ /*
+ * select() modifies the fd_set arguments; do this in the
+ * loop.
+ */
+ FD_ZERO(&set);
- if (mode & 1) {
- FD_SET(SP->_ifd, &set);
- count = SP->_ifd + 1;
- }
- if ((mode & 2)
- && (fd = SP->_mouse_fd) >= 0) {
- FD_SET(fd, &set);
- count = max(fd, count) + 1;
- }
+ if (mode & 1) {
+ FD_SET(SP->_ifd, &set);
+ count = SP->_ifd + 1;
+ }
+ if ((mode & 2)
+ && (fd = SP->_mouse_fd) >= 0) {
+ FD_SET(fd, &set);
+ count = max(fd, count) + 1;
+ }
- errno = 0;
- result = select(count, &set, NULL, NULL, milliseconds >= 0 ? &ntimeout : 0);
+ if (milliseconds >= 0) {
+ struct timeval ntimeout;
+ ntimeout.tv_sec = milliseconds / 1000;
+ ntimeout.tv_usec = (milliseconds % 1000) * 1000;
+ result = select(count, &set, NULL, NULL, &ntimeout);
+ } else {
+ result = select(count, &set, NULL, NULL, NULL);
+ }
#endif
-#if !GOOD_SELECT && HAVE_GETTIMEOFDAY
- _nc_gettime(&returntime);
-
- /* The contents of ntimeout aren't guaranteed after return from
- * 'select()', so we disregard its contents. Also, note that
- * on some systems, tv_sec and tv_usec are unsigned.
- */
- ntimeout.tv_sec = whole_secs;
- ntimeout.tv_usec = micro_secs;
-
-#define DELTA(f) (long)ntimeout.f - (long)returntime.f + (long)starttime.f
-
- delta = DELTA(tv_sec);
- if (delta < 0)
- delta = 0;
- ntimeout.tv_sec = delta;
+ returntime = _nc_gettime(FALSE);
- delta = DELTA(tv_usec);
- while (delta < 0 && ntimeout.tv_sec != 0) {
- ntimeout.tv_sec--;
- delta += 1000000;
- }
- ntimeout.tv_usec = delta;
- if (delta < 0)
- ntimeout.tv_sec = ntimeout.tv_usec = 0;
+ if (milliseconds >= 0)
+ milliseconds -= (returntime - starttime);
- /*
- * If the timeout hasn't expired, and we've gotten no data,
- * this is probably a system where 'select()' needs to be left
- * alone so that it can complete. Make this process sleep,
- * then come back for more.
- */
- if (result == 0
- && (ntimeout.tv_sec != 0 || ntimeout.tv_usec > 100000)) {
- napms(100);
- goto retry;
- }
-#endif
-#ifdef HIDE_EINTR
- } while (result == -1 && errno == EINTR);
+#if PRECISE_GETTIME
+ /*
+ * If the timeout hasn't expired, and we've gotten no data,
+ * this is probably a system where 'select()' needs to be left
+ * alone so that it can complete. Make this process sleep,
+ * then come back for more.
+ */
+ if (result == 0 && milliseconds > 100) {
+ napms(100);
+ milliseconds -= 100;
+ goto retry;
+ }
#endif
- /* return approximate time left on the ntimeout, in milliseconds */
+ /* return approximate time left in milliseconds */
if (timeleft)
- *timeleft = (ntimeout.tv_sec * 1000) + (ntimeout.tv_usec / 1000);
+ *timeleft = milliseconds;
- T(("end twait: returned %d (%d), remaining time %lu.%06lu secs (%d msec)",
- result, errno,
- (long) ntimeout.tv_sec, (long) (ntimeout.tv_usec / 1000),
- timeleft ? *timeleft : -1));
+ T(("end twait: returned %d (%d), remaining time %d msec",
+ result, errno, milliseconds));
/*
* Both 'poll()' and 'select()' return the number of file descriptors
count++;
}
}
+#elif defined(__BEOS__)
+ result = 1; /* redundant, but simple */
#elif HAVE_SELECT
if ((mode & 2)
&& (fd = SP->_mouse_fd) >= 0
#include <curses.priv.h>
#include <term.h>
-MODULE_ID("$Id: lib_vidattr.c,v 1.20 1998/02/11 12:13:56 tom Exp $")
+MODULE_ID("$Id: lib_vidattr.c,v 1.23 1999/06/12 21:20:41 tom Exp $")
#define doPut(mode) TPUTS_TRACE(#mode); tputs(mode, 1, outc)
#define TurnOff(mask,mode) \
if ((turn_off & mask) && mode) { doPut(mode); turn_off &= ~mask; }
+ /* if there is no current screen, assume we *can* do color */
+#define SetColorsIf(why,old_attr) \
+ if ((!SP || SP->_coloron) && (why)) { \
+ int old_pair = PAIR_NUMBER(old_attr); \
+ T(("old pair = %d -- new pair = %d", old_pair, pair)); \
+ if ((pair != old_pair) \
+ || (reverse ^ ((old_attr & A_REVERSE) != 0))) { \
+ _nc_do_color(pair, reverse, outc); \
+ } \
+ }
+
int vidputs(attr_t newmode, int (*outc)(int))
{
static attr_t previous_attr = A_NORMAL;
attr_t turn_on, turn_off;
-int pair, current_pair;
+int pair;
bool reverse = FALSE;
bool used_ncv = FALSE;
T(("previous attribute was %s", _traceattr(previous_attr)));
#if !USE_XMC_SUPPORT
- if (magic_cookie_glitch > 0)
+ if ((SP != 0)
+ && (magic_cookie_glitch > 0))
newmode &= ~(SP->_xmc_suppress);
#endif
returnCode(OK);
pair = PAIR_NUMBER(newmode);
- current_pair = PAIR_NUMBER(previous_attr);
if (reverse) {
newmode &= ~A_REVERSE;
- pair = -pair;
}
- if (previous_attr & A_REVERSE)
- current_pair = -current_pair;
turn_off = (~newmode & previous_attr) & ALL_BUT_COLOR;
turn_on = (newmode & ~previous_attr) & ALL_BUT_COLOR;
- /* if there is no current screen, assume we *can* do color */
- if ((!SP || SP->_coloron) && pair == 0) {
- T(("old pair = %d -- new pair = %d", current_pair, pair));
- if (pair != current_pair) {
- _nc_do_color(pair, reverse, outc);
- previous_attr &= ~A_COLOR;
- }
- }
+ SetColorsIf(pair == 0, previous_attr);
if (newmode == A_NORMAL) {
if((previous_attr & A_ALTCHARSET) && exit_alt_charset_mode) {
previous_attr &= ~A_COLOR;
}
+ SetColorsIf(pair != 0, previous_attr);
} else if (set_attributes && !used_ncv) {
if (turn_on || turn_off) {
TPUTS_TRACE("set_attributes");
(newmode & A_ALTCHARSET) != 0), 1, outc);
previous_attr &= ~A_COLOR;
}
+ SetColorsIf(pair != 0, previous_attr);
} else {
T(("turning %s off", _traceattr(turn_off)));
TurnOff(A_ALTCHARSET, exit_alt_charset_mode);
- TurnOff(A_UNDERLINE, exit_underline_mode);
- TurnOff(A_STANDOUT, exit_standout_mode);
+
+ if (!SP || SP->_use_rmul) {
+ TurnOff(A_UNDERLINE, exit_underline_mode);
+ }
+
+ if (!SP || SP->_use_rmso) {
+ TurnOff(A_STANDOUT, exit_standout_mode);
+ }
if (turn_off && exit_attribute_mode) {
doPut(exit_attribute_mode);
turn_on |= (newmode & (chtype)(~A_COLOR));
previous_attr &= ~A_COLOR;
}
+ SetColorsIf(pair != 0, previous_attr);
T(("turning %s on", _traceattr(turn_on)));
TurnOn (A_VERTICAL, enter_vertical_hl_mode);
}
- /* if there is no current screen, assume we *can* do color */
- if ((!SP || SP->_coloron) && pair != 0) {
- current_pair = PAIR_NUMBER(previous_attr);
- T(("old pair = %d -- new pair = %d", current_pair, pair));
- if (pair != current_pair) {
- _nc_do_color(pair, reverse, outc);
- }
- }
-
if (reverse)
newmode |= A_REVERSE;
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ************************************************************************** */
+
+#ifndef TTY_DISPLAY_H
+#define TTY_DISPLAY_H 1
+
+extern bool _nc_tty_beep(void);
+extern bool _nc_tty_check_resize(void);
+extern bool _nc_tty_cursor(int);
+extern bool _nc_tty_flash(void);
+extern bool _nc_tty_init_color(int,int,int,int);
+extern bool _nc_tty_init_pair(int,int,int);
+extern bool _nc_tty_slk_hide(bool);
+extern bool _nc_tty_slk_update(int,const char *);
+extern bool _nc_tty_start_color(void);
+extern void _nc_tty_display_resume(void);
+extern void _nc_tty_display_suspend(void);
+extern void _nc_tty_dispose(void); /* frees SP->_term */
+extern void _nc_tty_switch_to(void);
+extern void _nc_tty_update(void);
+
+struct tty_display_data {
+ int _fifohold; /* set if breakout marked */
+ unsigned long _current_attr; /* terminal attribute current set */
+ int _cursrow; /* physical cursor row (-1=unknown) */
+ int _curscol; /* physical cursor column */
+
+ /* cursor movement costs; units are 10ths of milliseconds */
+ int _char_padding; /* cost of character put */
+ int _cr_cost; /* cost of (carriage_return) */
+ int _cup_cost; /* cost of (cursor_address) */
+ int _home_cost; /* cost of (cursor_home) */
+ int _ll_cost; /* cost of (cursor_to_ll) */
+#if USE_HARD_TABS
+ int _ht_cost; /* cost of (tab) */
+ int _cbt_cost; /* cost of (backtab) */
+#endif /* USE_HARD_TABS */
+ int _cub1_cost; /* cost of (cursor_left) */
+ int _cuf1_cost; /* cost of (cursor_right) */
+ int _cud1_cost; /* cost of (cursor_down) */
+ int _cuu1_cost; /* cost of (cursor_up) */
+ int _cub_cost; /* cost of (parm_cursor_left) */
+ int _cuf_cost; /* cost of (parm_cursor_right) */
+ int _cud_cost; /* cost of (parm_cursor_down) */
+ int _cuu_cost; /* cost of (parm_cursor_up) */
+ int _hpa_cost; /* cost of (column_address) */
+ int _vpa_cost; /* cost of (row_address) */
+ /* used in lib_doupdate.c, must be chars */
+ int _ed_cost; /* cost of (clr_eos) */
+ int _el_cost; /* cost of (clr_eol) */
+ int _el1_cost; /* cost of (clr_bol) */
+ int _dch1_cost; /* cost of (delete_character) */
+ int _ich1_cost; /* cost of (insert_character) */
+ int _dch_cost; /* cost of (parm_dch) */
+ int _ich_cost; /* cost of (parm_ich) */
+ int _ech_cost; /* cost of (erase_chars) */
+ int _rep_cost; /* cost of (repeat_char) */
+ int _hpa_ch_cost; /* cost of (column_address) */
+ int _cup_ch_cost; /* cost of (cursor_address) */
+ int _smir_cost; /* cost of (enter_insert_mode) */
+ int _rmir_cost; /* cost of (exit_insert_mode) */
+ int _ip_cost; /* cost of (insert_padding) */
+ /* used in lib_mvcur.c */
+ char * _address_cursor;
+ int _carriage_return_length;
+ int _cursor_home_length;
+ int _cursor_to_ll_length;
+
+ chtype _xmc_suppress; /* attributes to suppress if xmc */
+ chtype _xmc_triggers; /* attributes to process if xmc */
+
+ bool _sig_winch;
+};
+
+
+#define DelCharCost(count) \
+ ((parm_dch != 0) \
+ ? D->_dch_cost \
+ : ((delete_character != 0) \
+ ? (D->_dch1_cost * count) \
+ : INFINITY))
+
+#define InsCharCost(count) \
+ ((parm_ich != 0) \
+ ? D->_ich_cost \
+ : ((enter_insert_mode && exit_insert_mode) \
+ ? D->_smir_cost + D->_rmir_cost + (D->_ip_cost * count) \
+ : ((insert_character != 0) \
+ ? (D->_ich1_cost * count) \
+ : INFINITY)))
+
+#if USE_XMC_SUPPORT
+#define UpdateAttrs(c) if (D->_current_attr != AttrOf(c)) { \
+ attr_t chg = D->_current_attr; \
+ vidattr(AttrOf(c)); \
+ if (magic_cookie_glitch > 0 \
+ && XMC_CHANGES((chg ^ D->_current_attr))) { \
+ T(("%s @%d before glitch %d,%d", \
+ __FILE__, __LINE__, \
+ D->_cursrow, \
+ D->_curscol)); \
+ _nc_do_xmc_glitch(chg); \
+ } \
+ }
+#else
+#define UpdateAttrs(c) if (D->_current_attr != AttrOf(c)) \
+ vidattr(AttrOf(c));
+#endif
+
+/*
+ * Check whether the given character can be output by clearing commands. This
+ * includes test for being a space and not including any 'bad' attributes, such
+ * as A_REVERSE. All attribute flags which don't affect appearance of a space
+ * or can be output by clearing (A_COLOR in case of bce-terminal) are excluded.
+ */
+#define can_clear_with(ch) \
+ ((ch & ~(NONBLANK_ATTR|(back_color_erase ? A_COLOR:0))) == BLANK)
+
+#define XMC_CHANGES(c) ((c) & D->_xmc_suppress)
+
+#endif /* TTY_DISPLAY_H */
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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: tty_input.h,v 1.1 1998/12/19 22:42:57 tom Exp $
+ */
+
+#ifndef TTY_INPUT_H
+#define TTY_INPUT_H 1
+
+extern bool _nc_tty_mouse_mask(mmask_t);
+extern bool _nc_tty_pending(void);
+extern int _nc_tty_next_event(int);
+extern void _nc_tty_flags_changed(void);
+extern void _nc_tty_flush(void);
+extern void _nc_tty_input_resume(void);
+extern void _nc_tty_input_suspend(void);
+
+struct tty_input_data {
+ int _ifd; /* input file ptr for screen */
+ int _keypad_xmit; /* current terminal state */
+ int _meta_on; /* current terminal state */
+
+ /*
+ * These are the data that support the mouse interface.
+ */
+ bool (*_mouse_event) (SCREEN *);
+ bool (*_mouse_inline)(SCREEN *);
+ bool (*_mouse_parse) (int);
+ void (*_mouse_resume)(SCREEN *);
+ void (*_mouse_wrap) (SCREEN *);
+ int _mouse_fd; /* file-descriptor, if any */
+ int mousetype;
+};
+
+#endif /* TTY_INPUT_H */
*
*-----------------------------------------------------------------*/
+#ifdef __BEOS__
+#include <OS.h>
+#endif
+
#include <curses.priv.h>
#if defined(TRACE) && HAVE_SYS_TIMES_H && HAVE_TIMES
#endif
#endif
-#ifdef __BEOS__
-/* BeOS select() only works on sockets. Use the tty hack instead */
-#include <socket.h>
-#define select check_select
-#endif
-
#include <term.h>
-MODULE_ID("$Id: lib_doupdate.c,v 1.98 1998/02/11 12:14:00 tom Exp $")
+MODULE_ID("$Id: tty_update.c,v 1.117 1999/10/22 23:28:46 tom Exp $")
/*
* This define controls the line-breakout optimization. Every once in a
static inline chtype ClrBlank ( WINDOW *win );
static int ClrBottom(int total);
-static int InsStr( chtype *line, int count );
static void ClearScreen( chtype blank );
-static void ClrUpdate( WINDOW *win );
+static void ClrUpdate( void );
static void DelChar( int count );
+static void InsStr( chtype *line, int count );
static void TransformLine( int const lineno );
#ifdef POSITION_DEBUG
*
****************************************************************************/
-void position_check(int expected_y, int expected_x, char *legend)
+static void position_check(int expected_y, int expected_x, char *legend)
/* check to see if the real cursor position matches the virtual */
{
- static char buf[9];
+ char buf[20];
int y, x;
- if (_nc_tracing)
+ if (!_nc_tracing || (expected_y < 0 && expected_x < 0))
return;
memset(buf, '\0', sizeof(buf));
- (void) write(1, "\033[6n", 4); /* only works on ANSI-compatibles */
- (void) read(0, (void *)buf, 8);
+ putp("\033[6n"); /* only works on ANSI-compatibles */
+ _nc_flush();
+ (void) read(0, buf, sizeof(buf)-1);
_tracef("probe returned %s", _nc_visbuf(buf));
/* try to interpret as a position report */
- if (sscanf(buf, "\033[%d;%dR", &y, &x) != 2)
+ if (sscanf(buf, "\033[%d;%dR", &y, &x) != 2) {
_tracef("position probe failed in %s", legend);
- else if (y - 1 != expected_y || x - 1 != expected_x)
- _tracef("position seen (%d, %d) doesn't match expected one (%d, %d) in %s",
- y-1, x-1, expected_y, expected_x, legend);
- else
- _tracef("position matches OK in %s", legend);
+ } else {
+ if (expected_x < 0)
+ expected_x = x - 1;
+ if (expected_y < 0)
+ expected_y = y - 1;
+ if (y - 1 != expected_y || x - 1 != expected_x) {
+ beep();
+ _tracef("position seen (%d, %d) doesn't match expected one (%d, %d) in %s",
+ y-1, x-1, expected_y, expected_x, legend);
+ } else {
+ _tracef("position matches OK in %s", legend);
+ }
+ }
}
+#else
+#define position_check(expected_y, expected_x, legend) /* nothing */
#endif /* POSITION_DEBUG */
/****************************************************************************
TR(TRACE_MOVE, ("GoTo(%d, %d) from (%d, %d)",
row, col, SP->_cursrow, SP->_curscol));
-#ifdef POSITION_DEBUG
position_check(SP->_cursrow, SP->_curscol, "GoTo");
-#endif /* POSITION_DEBUG */
/*
* Force restore even if msgr is on when we're in an alternate
mvcur(SP->_cursrow, SP->_curscol, row, col);
SP->_cursrow = row;
SP->_curscol = col;
+ position_check(SP->_cursrow, SP->_curscol, "GoTo2");
}
static inline void PutAttrChar(chtype ch)
_tracechtype(ch),
SP->_cursrow, SP->_curscol));
UpdateAttrs(ch);
- putc((int)TextOf(ch), SP->_ofp);
+ if (SP->_cleanup) {
+ _nc_outch((int)TextOf(ch));
+ } else {
+ putc((int)TextOf(ch), SP->_ofp); /* macro's fastest... */
#ifdef TRACE
- _nc_outchars++;
+ _nc_outchars++;
#endif /* TRACE */
+ }
SP->_curscol++;
if (char_padding) {
TPUTS_TRACE("char_padding");
{
have_pending = TRUE;
}
+#elif defined(__BEOS__)
+ /*
+ * BeOS's select() is declared in socket.h, so the configure script does
+ * not see it. That's just as well, since that function works only for
+ * sockets. This (using snooze and ioctl) was distilled from Be's patch
+ * for ncurses which uses a separate thread to simulate select().
+ *
+ * FIXME: the return values from the ioctl aren't very clear if we get
+ * interrupted.
+ */
+ int n = 0;
+ int howmany = ioctl(0, 'ichr', &n);
+ if (howmany >= 0 && n > 0) {
+ have_pending = TRUE;
+ }
#elif HAVE_SELECT
fd_set fdset;
struct timeval ktimeout;
FD_ZERO(&fdset);
FD_SET(SP->_checkfd, &fdset);
- if (select(SP->_checkfd+1, &fdset, NULL, NULL, &ktimeout) > 0)
+ if (select(SP->_checkfd+1, &fdset, NULL, NULL, &ktimeout) != 0)
{
have_pending = TRUE;
}
}
if (have_pending) {
SP->_fifohold = 5;
- fflush(SP->_ofp);
+ _nc_flush();
}
return FALSE;
}
putp(exit_am_mode);
PutAttrChar(ch);
+ SP->_curscol--;
+ position_check(SP->_cursrow, SP->_curscol, "exit_am_mode");
TPUTS_TRACE("enter_am_mode");
putp(enter_am_mode);
{
SP->_curscol--;
}
+ position_check(SP->_cursrow, SP->_curscol, "wrap_cursor");
}
static inline void PutChar(chtype const ch)
if (SP->_curscol >= screen_columns)
wrap_cursor();
-#ifdef POSITION_DEBUG
position_check(SP->_cursrow, SP->_curscol, "PutChar");
-#endif /* POSITION_DEBUG */
}
/*
#endif /* USE_XMC_SUPPORT */
nonempty = 0;
- if (curscr->_clear) { /* force refresh ? */
- /* yes, clear all & update */
- T(("clearing and updating curscr"));
- if (is_wintouched(newscr))
- ClrUpdate(newscr);
- else
- ClrUpdate(curscr);
+ if (curscr->_clear || newscr->_clear) { /* force refresh ? */
+ T(("clearing and updating from scratch"));
+ ClrUpdate();
curscr->_clear = FALSE; /* reset flag */
newscr->_clear = FALSE; /* reset flag */
- } else if (newscr->_clear) {
- T(("clearing and updating newscr"));
- ClrUpdate(newscr);
- newscr->_clear = FALSE;
} else {
int changedlines = CHECK_INTERVAL;
nonempty = min(screen_lines, newscr->_maxy+1);
if (SP->_scrolling) {
-#if USE_HASHMAP
-#if defined(TRACE) || defined(NCURSES_TEST)
- if (_nc_optimize_enable & OPTIMIZE_HASHMAP)
-#endif /*TRACE */
- _nc_hash_map();
-#elif !USE_SCROLL_HINTS
- _nc_setup_scroll();
-#endif
-#if defined(TRACE) || defined(NCURSES_TEST)
- if (_nc_optimize_enable & OPTIMIZE_SCROLL)
-#endif /*TRACE */
-#if USE_SCROLL_HINTS || USE_HASHMAP
_nc_scroll_optimize();
-#else
- _nc_perform_scroll();
-#endif
}
nonempty = ClrBottom(nonempty);
for (i = nonempty; i <= curscr->_maxy; i++)
MARK_NOCHANGE(curscr,i)
- curscr->_curx = newscr->_curx;
- curscr->_cury = newscr->_cury;
+ if (!newscr->_leaveok)
+ {
+ curscr->_curx = newscr->_curx;
+ curscr->_cury = newscr->_cury;
- GoTo(curscr->_cury, curscr->_curx);
+ GoTo(curscr->_cury, curscr->_curx);
+ }
cleanup:
/*
*/
UpdateAttrs(A_NORMAL);
- fflush(SP->_ofp);
+ _nc_flush();
curscr->_attrs = newscr->_attrs;
/* curscr->_bkgd = newscr->_bkgd; */
}
/*
-** ClrUpdate(win)
+** ClrUpdate()
**
** Update by clearing and redrawing the entire screen.
**
*/
-static void ClrUpdate(WINDOW *win)
+static void ClrUpdate(void)
{
int i;
- chtype blank = ClrBlank(win);
+ chtype blank = ClrBlank(stdscr);
int nonempty = min(screen_lines, newscr->_maxy+1);
T(("ClrUpdate() called"));
- if (win == curscr) {
- /* discard updates */
- for (i = 0; i < screen_lines ; i++) {
- memcpy( newscr->_line[i].text,
- curscr->_line[i].text,
- screen_columns * sizeof(chtype));
- }
- }
-
ClearScreen(blank);
T(("updating screen from scratch"));
if(!clr_eos || !can_clear_with(blank))
return total;
- if (tstLine == 0)
- tstLine = (chtype *)malloc(length);
- else if (length > lenLine)
- tstLine = (chtype *)realloc(tstLine, length);
+ if ((tstLine == 0) || (last > (int)lenLine)) {
+ tstLine = typeRealloc(chtype, last, tstLine);
+ if (tstLine != 0) {
+ lenLine = last;
+ for (col = 0; col < last; col++)
+ tstLine[col] = blank;
+ }
+ }
if (tstLine != 0) {
- lenLine = length;
- for (col = 0; col < last; col++)
- tstLine[col] = blank;
-
for (row = total-1; row >= 0; row--) {
if (memcmp(tstLine, newscr->_line[row].text, length))
break;
GoTo(top,0);
ClrToEOS(blank);
total = top;
+ if (SP->oldhash && SP->newhash)
+ {
+ for (row = top; row < screen_lines; row++)
+ SP->oldhash[row] = SP->newhash[row];
+ }
}
}
#if NO_LEAKS
- FreeAndNull(tstLine);
+ if (tstLine != 0)
+ FreeAndNull(tstLine);
#endif
return total;
}
T(("TransformLine(%d) called", lineno));
+ /* copy new hash value to old one */
+ if (SP->oldhash && SP->newhash)
+ SP->oldhash[lineno] = SP->newhash[lineno];
+
if(ceol_standout_glitch && clr_eol) {
firstChar = 0;
while(firstChar < screen_columns) {
if(newLine[firstChar] != blank )
PutChar(newLine[firstChar]);
ClrToEOL(blank);
- } else if( newLine[nLastChar] != oldLine[oLastChar]
- || !(_nc_idcok && has_ic()) ) {
+ } else if( (nLastChar != oLastChar)
+ && (newLine[nLastChar] != oldLine[oLastChar]
+ || !(_nc_idcok && has_ic())) ) {
GoTo(lineno, firstChar);
if ((oLastChar - nLastChar) > SP->_el_cost) {
if(PutRange(oldLine, newLine, lineno, firstChar, nLastChar))
GoTo(lineno, firstChar);
PutRange(oldLine, newLine, lineno, firstChar, n);
}
- GoTo(lineno, n+1);
if (oLastChar < nLastChar) {
int m = max(nLastNonblank, oLastNonblank);
+ GoTo(lineno, n+1);
if (InsCharCost(nLastChar - oLastChar)
> (m - n)) {
PutRange(oldLine, newLine, lineno, n+1, m);
InsStr(&newLine[n+1], nLastChar - oLastChar);
}
} else if (oLastChar > nLastChar ) {
+ GoTo(lineno, n+1);
if (DelCharCost(oLastChar - nLastChar)
> SP->_el_cost + nLastNonblank - (n+1)) {
if(PutRange(oldLine, newLine, lineno,
TPUTS_TRACE("clear_screen");
putp(clear_screen);
SP->_cursrow = SP->_curscol = 0;
-#ifdef POSITION_DEBUG
position_check(SP->_cursrow, SP->_curscol, "ClearScreen");
-#endif /* POSITION_DEBUG */
} else if (clr_eos) {
SP->_cursrow = SP->_curscol = -1;
GoTo(0,0);
**
*/
-static int InsStr(chtype *line, int count)
+static void InsStr(chtype *line, int count)
{
T(("InsStr(%p,%d) called", line, count));
- if (enter_insert_mode && exit_insert_mode) {
- TPUTS_TRACE("enter_insert_mode");
- putp(enter_insert_mode);
+ /* Prefer parm_ich as it has the smallest cost - no need to shift
+ * the whole line on each character. */
+ /* The order must match that of InsCharCost. */
+ if (parm_ich) {
+ TPUTS_TRACE("parm_ich");
+ tputs(tparm(parm_ich, count), count, _nc_outch);
while (count) {
PutAttrChar(*line);
line++;
count--;
}
- TPUTS_TRACE("exit_insert_mode");
- putp(exit_insert_mode);
- return(OK);
- } else if (parm_ich) {
- TPUTS_TRACE("parm_ich");
- tputs(tparm(parm_ich, count), count, _nc_outch);
+ } else if (enter_insert_mode && exit_insert_mode) {
+ TPUTS_TRACE("enter_insert_mode");
+ putp(enter_insert_mode);
while (count) {
PutAttrChar(*line);
+ if (insert_padding)
+ {
+ TPUTS_TRACE("insert_padding");
+ putp(insert_padding);
+ }
line++;
count--;
}
- return(OK);
+ TPUTS_TRACE("exit_insert_mode");
+ putp(exit_insert_mode);
} else {
while (count) {
TPUTS_TRACE("insert_character");
line++;
count--;
}
- return(OK);
}
+ position_check(SP->_cursrow, SP->_curscol, "InsStr");
}
/*
void _nc_outstr(const char *str)
{
- FILE *ofp = SP ? SP->_ofp : stdout;
-
- (void) fputs(str, ofp);
- (void) fflush(ofp);
-
-#ifdef TRACE
- _nc_outchars += strlen(str);
-#endif /* TRACE */
+ (void) putp(str);
+ _nc_flush();
}
/*
if (res == ERR && change_scroll_region)
{
if (top != 0 && (SP->_cursrow == top || SP->_cursrow == top-1)
- && save_cursor && restore_cursor)
+ && save_cursor && restore_cursor)
{
cursor_saved=TRUE;
- TPUTS_TRACE("save_cursor");
+ TPUTS_TRACE("save_cursor");
tputs(save_cursor, 0, _nc_outch);
}
TPUTS_TRACE("change_scroll_region");
tputs(tparm(change_scroll_region, top, bot), 0, _nc_outch);
if (cursor_saved)
{
- TPUTS_TRACE("restore_cursor");
+ TPUTS_TRACE("restore_cursor");
tputs(restore_cursor, 0, _nc_outch);
}
else
_nc_scroll_window(curscr, n, top, bot, blank);
+ /* shift hash values too - they can be reused */
+ _nc_scroll_oldhash(n, top, bot);
+
return(OK);
}
-# $Id: Makefile.in,v 1.26 1998/02/11 12:14:02 tom Exp $
+# $Id: Makefile.in,v 1.28 1998/11/29 01:03:31 Rick.Ohnemus Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
LINK = $(CC)
LDFLAGS = @LDFLAGS@ @LD_MODEL@ @LIBS@
-SHLIB_LIST = -lncurses @SHLIB_LIST@
+SHLIB_DIRS = -L../lib -L$(libdir)
+SHLIB_LIST = $(SHLIB_DIRS) -lncurses @SHLIB_LIST@
+
MK_SHARED_LIB = @MK_SHARED_LIB@
+
REL_VERSION = @cf_cv_rel_version@
ABI_VERSION = @cf_cv_abi_version@
LINT_LIBS = -lpanel -lncurses @LIBS@
AUTO_SRC = \
- ../include/panel.h
+ ../include/panel.h
################################################################################
all install :: $(AUTO_SRC) $(LIBRARIES)
mostlyclean ::
-rm -f core tags TAGS *~ *.ln *.atac trace
-clean ::
+clean :: mostlyclean
-rm -f $(AUTO_SRC)
distclean :: clean
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_above.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_above.c,v 1.3 1999/09/18 11:03:28 juergen Exp $")
PANEL*
panel_above(const PANEL *pan)
{
/* if top and bottom are equal, we have no or only the pseudo panel;
if not, we return the panel above the pseudo panel */
- return(_nc_bottom_panel==_nc_top_panel ? (PANEL*)0 : _nc_bottom_panel->above);
+ return(EMPTY_STACK() ? (PANEL*)0 : _nc_bottom_panel->above);
}
else
return(pan->above);
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_below.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_below.c,v 1.3 1999/09/18 11:03:33 juergen Exp $")
PANEL*
panel_below(const PANEL *pan)
if(!pan)
{
/* if top and bottom are equal, we have no or only the pseudo panel */
- return(_nc_top_panel==_nc_bottom_panel ? (PANEL*)0 : _nc_top_panel);
+ return(EMPTY_STACK() ? (PANEL*)0 : _nc_top_panel);
}
else
{
/* we must not return the pseudo panel */
- return(pan->below==_nc_bottom_panel ? (PANEL*) 0 : pan->below);
+ return(Is_Pseudo(pan->below) ? (PANEL*) 0 : pan->below);
}
}
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_bottom.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_bottom.c,v 1.5 1999/09/29 15:22:32 juergen Exp $")
+
+/*+-------------------------------------------------------------------------
+ __panel_link_bottom(pan) - link panel into stack at bottom
+--------------------------------------------------------------------------*/
+static void
+panel_link_bottom(PANEL *pan)
+{
+#ifdef TRACE
+ dStack("<lb%d>",1,pan);
+ if(_nc_panel_is_linked(pan))
+ return;
+#endif
+
+ pan->above = (PANEL *)0;
+ pan->below = (PANEL *)0;
+
+ assert(_nc_bottom_panel == _nc_stdscr_pseudo_panel);
+
+ pan->below = _nc_bottom_panel;
+ pan->above = _nc_bottom_panel->above;
+ if (pan->above)
+ pan->above->below = pan;
+ _nc_bottom_panel->above = pan;
+
+ dStack("<lb%d>",9,pan);
+}
int
bottom_panel(PANEL *pan)
{
if(!pan)
return(ERR);
- if(pan == _nc_bottom_panel)
+ if(Is_Bottom(pan))
return(OK);
dBug(("--> bottom_panel %s", USER_PTR(pan->user)));
if(_nc_panel_is_linked(pan))
(void)hide_panel(pan);
- _nc_panel_link_bottom(pan);
+ panel_link_bottom(pan);
return(OK);
}
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_hidden.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_hidden.c,v 1.3 1999/09/18 11:04:19 juergen Exp $")
int
panel_hidden(const PANEL *pan)
{
if(!pan)
return(ERR);
- return(_nc_panel_is_linked(pan) ? TRUE : FALSE);
+ return(_nc_panel_is_linked(pan) ? FALSE : TRUE);
}
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_hide.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_hide.c,v 1.3 1999/09/29 15:22:32 juergen Exp $")
/*+-------------------------------------------------------------------------
__panel_unlink(pan) - unlink panel from stack
return;
#endif
- _nc_override(pan,P_TOUCH);
- _nc_free_obscure(pan);
+ PANEL_UPDATE(pan,(PANEL*)0);
prev = pan->below;
next = pan->above;
if(pan == _nc_top_panel)
_nc_top_panel = prev;
- _nc_calculate_obscure();
-
pan->above = (PANEL *)0;
pan->below = (PANEL *)0;
dStack("<u%d>",9,pan);
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_move.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_move.c,v 1.3 1999/09/29 15:22:32 juergen Exp $")
int
move_panel(PANEL *pan, int starty, int startx)
if(!pan)
return(ERR);
if(_nc_panel_is_linked(pan))
- _nc_override(pan,P_TOUCH);
+ PANEL_UPDATE(pan,(PANEL*)0);
win = pan->win;
if(mvwin(win,starty,startx))
return(ERR);
- getbegyx(win, pan->wstarty, pan->wstartx);
- pan->wendy = pan->wstarty + getmaxy(win);
- pan->wendx = pan->wstartx + getmaxx(win);
- if(_nc_panel_is_linked(pan))
- _nc_calculate_obscure();
return(OK);
}
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_new.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_new.c,v 1.4 1999/09/29 15:22:32 juergen Exp $")
/*+-------------------------------------------------------------------------
Get root (i.e. stdscr's) panel.
PANEL* pan = _nc_stdscr_pseudo_panel;
WINDOW* win = stdscr;
pan->win = win;
- getbegyx(win, pan->wstarty, pan->wstartx);
- pan->wendy = pan->wstarty + getmaxy(win);
- pan->wendx = pan->wstartx + getmaxx(win);
pan->below = (PANEL*)0;
pan->above = (PANEL*)0;
- pan->obscure = (PANELCONS*)0;
#ifdef TRACE
pan->user = "stdscr";
#else
pan->user = (void*)0;
#endif
- _nc_panel_link_bottom(pan);
+ _nc_bottom_panel = _nc_top_panel = pan;
}
}
return _nc_stdscr_pseudo_panel;
pan->win = win;
pan->above = (PANEL *)0;
pan->below = (PANEL *)0;
- getbegyx(win, pan->wstarty, pan->wstartx);
- pan->wendy = pan->wstarty + getmaxy(win);
- pan->wendx = pan->wstartx + getmaxx(win);
#ifdef TRACE
pan->user = "new";
#else
pan->user = (char *)0;
#endif
- pan->obscure = (PANELCONS *)0;
(void)show_panel(pan);
}
return(pan);
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_replace.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_replace.c,v 1.3 1999/09/29 15:22:32 juergen Exp $")
int
replace_panel(PANEL *pan, WINDOW *win)
if(!pan)
return(ERR);
if(_nc_panel_is_linked(pan))
- _nc_override(pan,P_TOUCH);
+ PANEL_UPDATE(pan,(PANEL*)0);
pan->win = win;
- if(_nc_panel_is_linked(pan))
- _nc_calculate_obscure();
return(OK);
}
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_show.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_show.c,v 1.5 1999/09/29 15:22:32 juergen Exp $")
static void
panel_link_top(PANEL *pan)
return;
#endif
+ assert(_nc_bottom_panel == _nc_stdscr_pseudo_panel);
+
pan->above = (PANEL *)0;
pan->below = (PANEL *)0;
- if(_nc_top_panel)
- {
- _nc_top_panel->above = pan;
- pan->below = _nc_top_panel;
- }
+
+ _nc_top_panel->above = pan;
+ pan->below = _nc_top_panel;
_nc_top_panel = pan;
- if(!_nc_bottom_panel)
- _nc_bottom_panel = pan;
- _nc_calculate_obscure();
+
dStack("<lt%d>",9,pan);
}
{
if(!pan)
return(ERR);
- if(pan == _nc_top_panel)
+
+ if (Is_Top(pan))
return(OK);
+
dBug(("--> show_panel %s", USER_PTR(pan->user)));
+
if(_nc_panel_is_linked(pan))
(void)hide_panel(pan);
+
panel_link_top(pan);
+
return(OK);
}
*/
#include "panel.priv.h"
-MODULE_ID("$Id: p_update.c,v 1.2 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: p_update.c,v 1.3 1999/09/29 15:22:32 juergen Exp $")
void
update_panels(void)
dBug(("--> update_panels"));
pan = _nc_bottom_panel;
- while(pan)
+ while(pan && pan->above)
{
- _nc_override(pan,P_UPDATE);
+ PANEL_UPDATE(pan,pan->above);
pan = pan->above;
}
/* panel.c -- implementation of panels library, some core routines */
#include "panel.priv.h"
-MODULE_ID("$Id: panel.c,v 1.15 1998/02/11 12:14:01 tom Exp $")
+MODULE_ID("$Id: panel.c,v 1.18 1999/09/29 15:22:32 juergen Exp $")
#ifdef TRACE
#ifndef TRACE_TXT
const char *_nc_my_visbuf(const void *ptr)
{
- char temp[20];
+ char temp[32];
if (ptr != 0)
sprintf(temp, "ptr:%p", ptr);
else
text, USER_PTR(pan->user),
(pan->below) ? USER_PTR(pan->below->user) : "--",
(pan->above) ? USER_PTR(pan->above->user) : "--",
- pan->wstarty, pan->wstartx);
+ PSTARTY(pan), PSTARTX(pan));
}
#endif
}
#endif
-/*+-------------------------------------------------------------------------
- __panels_overlapped(pan1,pan2) - check panel overlapped
---------------------------------------------------------------------------*/
-static INLINE bool
-__panels_overlapped(register const PANEL *pan1, register const PANEL *pan2)
-{
- if(!pan1 || !pan2)
- return(FALSE);
-
- dBug(("__panels_overlapped %s %s", USER_PTR(pan1->user), USER_PTR(pan2->user)));
- /* pan1 intersects with pan2 ? */
- if( (((pan1->wstarty >= pan2->wstarty) && (pan1->wstarty < pan2->wendy)) ||
- ((pan2->wstarty >= pan1->wstarty) && (pan2->wstarty < pan1->wendy))) &&
- (((pan1->wstartx >= pan2->wstartx) && (pan1->wstartx < pan2->wendx)) ||
- ((pan2->wstartx >= pan1->wstartx) && (pan2->wstartx < pan1->wendx)))
- ) return(TRUE);
- else {
- dBug((" no"));
- return(FALSE);
- }
-}
-
-/*+-------------------------------------------------------------------------
- _nc_free_obscure(pan)
---------------------------------------------------------------------------*/
-void
-_nc_free_obscure(PANEL *pan)
-{
- PANELCONS *tobs = pan->obscure; /* "this" one */
- PANELCONS *nobs; /* "next" one */
-
- while(tobs)
- {
- nobs = tobs->above;
- free((char *)tobs);
- tobs = nobs;
- }
- pan->obscure = (PANELCONS *)0;
-}
-
-/*+-------------------------------------------------------------------------
- __override(pan,show)
---------------------------------------------------------------------------*/
-void
-_nc_override(const PANEL *pan, int show)
-{
- int y;
- PANEL *pan2;
- PANELCONS *tobs = pan->obscure; /* "this" one */
-
- dBug(("_nc_override %s,%d", USER_PTR(pan->user),show));
-
- switch (show)
- {
- case P_TOUCH:
- Touchpan(pan);
- /* The following while loop will now mark all panel window lines
- * obscured by use or obscuring us as touched, so they will be
- * updated.
- */
- break;
- case P_UPDATE:
- while(tobs && (tobs->pan != pan))
- tobs = tobs->above;
- /* The next loop will now only go through the panels obscuring pan;
- * it updates all the lines in the obscuring panels in sync. with
- * the lines touched in pan itself. This is called in update_panels()
- * in a loop from the bottom_panel to the top_panel, resulting in
- * the desired update effect.
- */
- break;
- default:
- return;
- }
-
- while(tobs)
- {
- if((pan2 = tobs->pan) != pan) {
- dBug(("test obs pan=%s pan2=%s", USER_PTR(pan->user), USER_PTR(pan2->user)));
- for(y = pan->wstarty; y < pan->wendy; y++) {
- if( (y >= pan2->wstarty) && (y < pan2->wendy) &&
- ((is_linetouched(pan->win,y - pan->wstarty) == TRUE)) )
- Touchline(pan2,y - pan2->wstarty,1);
- }
- }
- tobs = tobs->above;
- }
-}
-
-/*+-------------------------------------------------------------------------
- __calculate_obscure()
---------------------------------------------------------------------------*/
-void
-_nc_calculate_obscure(void)
-{
- PANEL *pan;
- PANEL *pan2;
- PANELCONS *tobs; /* "this" one */
- PANELCONS *lobs = (PANELCONS *)0; /* last one */
-
- pan = _nc_bottom_panel;
- while(pan)
- {
- if(pan->obscure)
- _nc_free_obscure(pan);
- dBug(("--> __calculate_obscure %s", USER_PTR(pan->user)));
- lobs = (PANELCONS *)0; /* last one */
- pan2 = _nc_bottom_panel;
- /* This loop builds a list of panels obsured by pan or obscuring
- pan; pan itself is in the list; all panels before pan are
- obscured by pan, all panels after pan are obscuring pan. */
- while(pan2)
- {
- if(__panels_overlapped(pan,pan2))
- {
- if(!(tobs = (PANELCONS *)malloc(sizeof(PANELCONS))))
- return;
- tobs->pan = pan2;
- dPanel("obscured",pan2);
- tobs->above = (PANELCONS *)0;
- if(lobs)
- lobs->above = tobs;
- else
- pan->obscure = tobs;
- lobs = tobs;
- }
- pan2 = pan2->above;
- }
- _nc_override(pan,P_TOUCH);
- pan = pan->above;
- }
-}
-
-/*+-------------------------------------------------------------------------
- _nc_panel_is_linked(pan) - check to see if panel is in the stack
---------------------------------------------------------------------------*/
-bool
-_nc_panel_is_linked(const PANEL *pan)
-{
- /* This works! The only case where it would fail is, when the list has
- only one element. But this could only be the pseudo panel at the bottom */
- return ( ((pan->above!=(PANEL *)0) ||
- (pan->below!=(PANEL *)0) ||
- (pan==_nc_bottom_panel)) ? TRUE : FALSE );
-}
-
-
-/*+-------------------------------------------------------------------------
- __panel_link_bottom(pan) - link panel into stack at bottom
---------------------------------------------------------------------------*/
-void
-_nc_panel_link_bottom(PANEL *pan)
-{
-#ifdef TRACE
- dStack("<lb%d>",1,pan);
- if(_nc_panel_is_linked(pan))
- return;
+#ifndef TRACE
+# ifndef __GNUC__
+ /* Some C compilers need something defined in a source file */
+ static char GCC_UNUSED dummy;
+# endif
#endif
-
- pan->above = (PANEL *)0;
- pan->below = (PANEL *)0;
- if(_nc_bottom_panel)
- { /* the stdscr pseudo panel always stays real bottom;
- so we insert after bottom panel*/
- pan->below = _nc_bottom_panel;
- pan->above = _nc_bottom_panel->above;
- if (pan->above)
- pan->above->below = pan;
- _nc_bottom_panel->above = pan;
- }
- else
- _nc_bottom_panel = pan;
- if(!_nc_top_panel)
- _nc_top_panel = pan;
- assert(_nc_bottom_panel == _nc_stdscr_pseudo_panel);
- _nc_calculate_obscure();
- dStack("<lb%d>",9,pan);
-}
typedef struct panel
{
- WINDOW *win;
- int wstarty;
- int wendy;
- int wstartx;
- int wendx;
- struct panel *below;
- struct panel *above;
- NCURSES_CONST void *user;
- struct panelcons *obscure;
-}
-PANEL;
+ WINDOW *win;
+ struct panel *below;
+ struct panel *above;
+ NCURSES_CONST void *user;
+} PANEL;
#if defined(__cplusplus)
extern "C" {
#endif
-extern WINDOW *panel_window(const PANEL *);
-extern void update_panels(void);
-extern int hide_panel(PANEL *);
-extern int show_panel(PANEL *);
-extern int del_panel(PANEL *);
-extern int top_panel(PANEL *);
-extern int bottom_panel(PANEL *);
-extern PANEL *new_panel(WINDOW *);
-extern PANEL *panel_above(const PANEL *);
-extern PANEL *panel_below(const PANEL *);
-extern int set_panel_userptr(PANEL *, NCURSES_CONST void *);
+extern WINDOW* panel_window(const PANEL *);
+extern void update_panels(void);
+extern int hide_panel(PANEL *);
+extern int show_panel(PANEL *);
+extern int del_panel(PANEL *);
+extern int top_panel(PANEL *);
+extern int bottom_panel(PANEL *);
+extern PANEL* new_panel(WINDOW *);
+extern PANEL* panel_above(const PANEL *);
+extern PANEL* panel_below(const PANEL *);
+extern int set_panel_userptr(PANEL *, NCURSES_CONST void *);
extern NCURSES_CONST void* panel_userptr(const PANEL *);
-extern int move_panel(PANEL *, int, int);
-extern int replace_panel(PANEL *,WINDOW *);
-extern int panel_hidden(const PANEL *);
+extern int move_panel(PANEL *, int, int);
+extern int replace_panel(PANEL *,WINDOW *);
+extern int panel_hidden(const PANEL *);
#if defined(__cplusplus)
}
-/* $Id: panel.priv.h,v 1.8 1997/10/21 10:19:37 juergen Exp $ */
+/* $Id: panel.priv.h,v 1.10 1999/09/29 15:21:58 juergen Exp $ */
#ifndef _PANEL_PRIV_H
#define _PANEL_PRIV_H
# define INLINE
#endif
-typedef struct panelcons
-{
- struct panelcons *above;
- struct panel *pan;
-} PANELCONS;
-
#ifdef USE_RCS_IDS
# define MODULE_ID(id) static const char Ident[] = id;
#else
# define MODULE_ID(id) /*nothing*/
#endif
-#define P_TOUCH (0)
-#define P_UPDATE (1)
#ifdef TRACE
extern const char *_nc_my_visbuf(const void *);
#define _nc_top_panel _nc_panelhook()->top_panel
#define _nc_bottom_panel _nc_panelhook()->bottom_panel
-extern void _nc_panel_link_bottom(PANEL*);
-extern bool _nc_panel_is_linked(const PANEL*);
-extern void _nc_calculate_obscure(void);
-extern void _nc_free_obscure(PANEL*);
-extern void _nc_override(const PANEL*,int);
-
+#define EMPTY_STACK() (_nc_top_panel==_nc_bottom_panel)
+#define Is_Bottom(p) (((p)!=(PANEL*)0) && !EMPTY_STACK() && (_nc_bottom_panel->above==(p)))
+#define Is_Top(p) (((p)!=(PANEL*)0) && !EMPTY_STACK() && (_nc_top_panel==(p)))
+#define Is_Pseudo(p) ((p) && ((p)==_nc_bottom_panel))
+
+/*+-------------------------------------------------------------------------
+ _nc_panel_is_linked(pan) - check to see if panel is in the stack
+--------------------------------------------------------------------------*/
+/* This works! The only case where it would fail is, when the list has
+ only one element. But this could only be the pseudo panel at the bottom */
+#define _nc_panel_is_linked(p) ((((p)->above!=(PANEL*)0)||((p)->below!=(PANEL*)0)||((p)==_nc_bottom_panel)) ? TRUE : FALSE)
+
+#define PSTARTX(pan) ((pan)->win->_begx)
+#define PENDX(pan) ((pan)->win->_begx + getmaxx((pan)->win))
+#define PSTARTY(pan) ((pan)->win->_begy)
+#define PENDY(pan) ((pan)->win->_begy + getmaxy((pan)->win))
+
+/*+-------------------------------------------------------------------------
+ PANELS_OVERLAPPED(pan1,pan2) - check panel overlapped
+---------------------------------------------------------------------------*/
+#define PANELS_OVERLAPPED(pan1,pan2) \
+(( !(pan1) || !(pan2) || \
+ PSTARTY(pan1) >= PENDY(pan2) || PENDY(pan1) <= PSTARTY(pan2) ||\
+ PSTARTX(pan1) >= PENDX(pan2) || PENDX(pan1) <= PSTARTX(pan2) ) \
+ ? FALSE : TRUE)
+
+
+#define PANEL_UPDATE(pan,panstart) { int y; PANEL* pan2 = panstart;\
+ if (!pan2) {\
+ Touchpan(pan);\
+ pan2 = _nc_bottom_panel;\
+ }\
+ while(pan2) {\
+ if ((pan2 != pan) && PANELS_OVERLAPPED(pan,pan2)) {\
+ for(y = PSTARTY(pan); y < PENDY(pan); y++) {\
+ if( (y >= PSTARTY(pan2)) && (y < PENDY(pan2)) &&\
+ ((is_linetouched(pan->win,y - PSTARTY(pan)) == TRUE)) )\
+ Touchline(pan2,y - PSTARTY(pan2),1);\
+ }\
+ }\
+ pan2 = pan2->above;\
+ }\
+}
#endif /* _PANEL_PRIV_H */
-# $Id: Makefile.in,v 1.35 1998/02/11 12:14:03 tom Exp $
+# $Id: Makefile.in,v 1.37 1998/05/31 00:07:33 tom Exp $
##############################################################################
# Copyright (c) 1998 Free Software Foundation, Inc. #
# #
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
LD = @LD@
-LINK = $(CC)
+LINK = @LINK_PROGS@ $(CC)
LDFLAGS = @EXTRA_LDFLAGS@ \
@PROG_ARGS@ @LDFLAGS@ @LD_MODEL@ @LIBS@ @EXTRA_LIBS@
LDFLAGS_NORMAL = $(LDFLAGS)
LDFLAGS_DEBUG = $(LDFLAGS) @CC_G_OPT@
LDFLAGS_PROFILE = $(LDFLAGS) -pg
-LDFLAGS_SHARED = $(LDFLAGS) @CC_SHARED_OPTS@ # @LD_SHARED_OPTS@
+LDFLAGS_SHARED = $(LDFLAGS) @LD_SHARED_OPTS@
LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@)
#include <curses.h>
-MODULE_ID("$Id: clear.c,v 1.7 1998/02/11 12:14:02 tom Exp $")
+MODULE_ID("$Id: clear.c,v 1.8 1998/09/26 11:42:50 tom Exp $")
static int putch(int c)
{
char *argv[] GCC_UNUSED)
{
setupterm((char *) 0, STDOUT_FILENO, (int *) 0);
- if (clear_screen == (char *) 0)
- return EXIT_FAILURE;
- tputs(clear_screen, lines > 0 ? lines : 1, putch);
- return EXIT_SUCCESS;
+ return (tputs(clear_screen, lines > 0 ? lines : 1, putch) == ERR)
+ ? EXIT_FAILURE
+ : EXIT_SUCCESS;
}
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
#include "dump_entry.h"
#include "termsort.c" /* this C file is generated */
-#include "parametrized.h" /* so is this */
+#include <parametrized.h> /* so is this */
-MODULE_ID("$Id: dump_entry.c,v 1.25 1998/02/11 12:14:02 tom Exp $")
+MODULE_ID("$Id: dump_entry.c,v 1.37 1999/03/14 12:29:30 tom Exp $")
#define INDENT 8
+#define DISCARD(string) string = ABSENT_STRING
+
static int tversion; /* terminfo version */
static int outform; /* output format to use */
static int sortmode; /* sort mode to use */
static int column; /* current column, limited by 'width' */
static int oldcol; /* last value of column before wrap */
static int tracelevel; /* level of debug output */
+static bool pretty; /* true if we format if-then-else strings */
static char *outbuf; /* the output-buffer */
static size_t out_used; /* ...its current length */
#define OBSOLETE(n) (n[0] == 'O' && n[1] == 'T')
+#if NCURSES_XNAMES
+#define BoolIndirect(j) ((j >= BOOLCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : bool_indirect[j]))
+#define NumIndirect(j) ((j >= NUMCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : num_indirect[j]))
+#define StrIndirect(j) ((j >= STRCOUNT) ? (j) : ((sortmode == S_NOSORT) ? j : str_indirect[j]))
+#else
+#define BoolIndirect(j) ((sortmode == S_NOSORT) ? (j) : bool_indirect[j])
+#define NumIndirect(j) ((sortmode == S_NOSORT) ? (j) : num_indirect[j])
+#define StrIndirect(j) ((sortmode == S_NOSORT) ? (j) : str_indirect[j])
+#endif
+
#if NO_LEAKS
void _nc_leaks_dump_entry(void)
{
{
const struct name_table_entry *np;
- if ((np = _nc_find_entry(name, _nc_info_hash_table)) != NULL)
+ if ((np = _nc_find_entry(name, _nc_get_hash_table(0))) != 0)
switch(np->nte_type)
{
case BOOLEAN:
break;
}
- return((char *)NULL);
+ return(0);
}
-void dump_init(const char *version, int mode, int sort, int twidth, int traceval)
+void dump_init(const char *version, int mode, int sort, int twidth, int traceval, bool formatted)
/* set up for entry display */
{
width = twidth;
+ pretty = formatted;
tracelevel = traceval;
/* versions */
- if (version == (char *)NULL)
+ if (version == 0)
tversion = V_ALLCAPS;
else if (!strcmp(version, "SVr1") || !strcmp(version, "SVR1")
|| !strcmp(version, "Ultrix"))
/* implement sort modes */
switch(sortmode = sort)
- {
+ {
case S_NOSORT:
if (traceval)
(void) fprintf(stderr,
#define termcap_length(src) strlen(src)
#endif
+static char * fmt_complex(char *dst, char *src, int level)
+{
+ int percent = 0;
+ int n;
+
+ dst += strlen(dst);
+ while (*src != '\0') {
+ switch (*src) {
+ case '\\':
+ percent = 0;
+ *dst++ = *src++;
+ break;
+ case '%':
+ percent = 1;
+ break;
+ case '?': /* "if" */
+ case 't': /* "then" */
+ case 'e': /* "else" */
+ if (percent) {
+ percent = 0;
+ dst[-1] = '\n';
+ for (n = 0; n <= level; n++)
+ *dst++ = '\t';
+ *dst++ = '%';
+ *dst++ = *src;
+ *dst = '\0';
+ if (*src++ == '?') {
+ src = fmt_complex(dst, src, level+1);
+ dst += strlen(dst);
+ } else if (level == 1) {
+ _nc_warning("%%%c without %%?", *src);
+ }
+ continue;
+ }
+ break;
+ case ';': /* "endif" */
+ if (percent) {
+ percent = 0;
+ if (level > 1) {
+ dst[-1] = '\n';
+ for (n = 0; n < level; n++)
+ *dst++ = '\t';
+ *dst++ = '%';
+ *dst++ = *src++;
+ *dst = '\0';
+ return src;
+ }
+ _nc_warning("%%; without %%?");
+ }
+ break;
+ default:
+ percent = 0;
+ break;
+ }
+ *dst++ = *src++;
+ }
+ *dst = '\0';
+ return src;
+}
+
int fmt_entry(TERMTYPE *tterm,
int (*pred)(int type, int idx),
bool suppress_untranslatable,
- bool infodump)
+ bool infodump,
+ int numbers)
{
int i, j;
char buffer[MAX_TERMINFO_LENGTH];
+NCURSES_CONST char *name;
int predval, len;
int num_bools = 0;
int num_values = 0;
len = 12; /* terminfo file-header */
- if (pred == NULL) {
+ if (pred == 0) {
cur_type = tterm;
pred = dump_predicate;
}
- append_output(NULL);
+ append_output(0);
append_output(tterm->term_names);
append_output(separator);
column = out_used;
force_wrap();
- for (j=0; j < BOOLCOUNT; j++) {
- if (sortmode == S_NOSORT)
- i = j;
- else
- i = bool_indirect[j];
+ for_each_boolean(j,tterm) {
+ i = BoolIndirect(j);
+ name = ExtBoolname(tterm,i,bool_names);
if (!version_filter(BOOLEAN, i))
continue;
else if ((outform == F_LITERAL || outform == F_TERMINFO || outform == F_VARIABLE)
- && (OBSOLETE(bool_names[i]) && outform != F_LITERAL))
+ && (OBSOLETE(name) && outform != F_LITERAL))
continue;
predval = pred(BOOLEAN, i);
if (predval != FAIL) {
- (void) strcpy(buffer, bool_names[i]);
+ (void) strcpy(buffer, name);
if (predval <= 0)
(void) strcat(buffer, "@");
else if (i + 1 > num_bools)
if (column != INDENT)
force_wrap();
- for (j=0; j < NUMCOUNT; j++) {
- if (sortmode == S_NOSORT)
- i = j;
- else
- i = num_indirect[j];
+ for_each_number(j,tterm) {
+ i = NumIndirect(j);
+ name = ExtNumname(tterm,i,num_names);
if (!version_filter(NUMBER, i))
continue;
else if ((outform == F_LITERAL || outform == F_TERMINFO || outform == F_VARIABLE)
- && (OBSOLETE(num_names[i]) && outform != F_LITERAL))
+ && (OBSOLETE(name) && outform != F_LITERAL))
continue;
predval = pred(NUMBER, i);
if (predval != FAIL) {
if (tterm->Numbers[i] < 0) {
- sprintf(buffer, "%s@", num_names[i]);
+ sprintf(buffer, "%s@", name);
} else {
- sprintf(buffer, "%s#%d", num_names[i], tterm->Numbers[i]);
+ sprintf(buffer, "%s#%d", name, tterm->Numbers[i]);
if (i + 1 > num_values)
num_values = i + 1;
}
len++;
repair_acsc(tterm);
- for (j=0; j < STRCOUNT; j++) {
- if (sortmode == S_NOSORT)
- i = j;
- else
- i = str_indirect[j];
+ for_each_string(j, tterm) {
+ i = StrIndirect(j);
+ name = ExtStrname(tterm,i,str_names);
if (!version_filter(STRING, i))
continue;
else if ((outform == F_LITERAL || outform == F_TERMINFO || outform == F_VARIABLE)
- && (OBSOLETE(str_names[i]) && outform != F_LITERAL))
+ && (OBSOLETE(name) && outform != F_LITERAL))
continue;
/*
* them to be output as defined and empty.
*/
if (outform==F_TERMCAP)
+ {
#undef CUR
#define CUR tterm->
if (insert_character || parm_ich)
}
}
+ if (init_3string != 0
+ && termcap_reset != 0
+ && !strcmp(init_3string, termcap_reset))
+ DISCARD(init_3string);
+
+ if (reset_2string != 0
+ && termcap_reset != 0
+ && !strcmp(reset_2string, termcap_reset))
+ DISCARD(reset_2string);
+ }
+
predval = pred(STRING, i);
buffer[0] = '\0';
if (predval != FAIL) {
&& i + 1 > num_strings)
num_strings = i + 1;
if (!VALID_STRING(tterm->Strings[i]))
- sprintf(buffer, "%s@", str_names[i]);
+ sprintf(buffer, "%s@", name);
else if (outform == F_TERMCAP || outform == F_TCONVERR)
{
- char *srccap = _nc_tic_expand(tterm->Strings[i], FALSE);
- char *cv = _nc_infotocap(str_names[i], srccap, parametrized[i]);
+ char *srccap = _nc_tic_expand(tterm->Strings[i], FALSE, numbers);
+ char *cv = _nc_infotocap(name, srccap, parametrized[i]);
- if (cv == (char *)NULL)
+ if (cv == 0)
{
if (outform == F_TCONVERR)
- sprintf(buffer, "%s=!!! %s WILL NOT CONVERT !!!", str_names[i], srccap);
+ sprintf(buffer, "%s=!!! %s WILL NOT CONVERT !!!", name, srccap);
else if (suppress_untranslatable)
continue;
else
- sprintf(buffer, "..%s=%s", str_names[i], srccap);
+ sprintf(buffer, "..%s=%s", name, srccap);
}
else
- sprintf(buffer, "%s=%s", str_names[i], cv);
+ sprintf(buffer, "%s=%s", name, cv);
len += strlen(tterm->Strings[i]) + 1;
}
else
{
- sprintf(buffer, "%s=%s", str_names[i], _nc_tic_expand(tterm->Strings[i], outform==F_TERMINFO));
+ char *src = _nc_tic_expand(tterm->Strings[i], outform==F_TERMINFO, numbers);
+ sprintf(buffer, "%s=", name);
+ if (pretty && outform==F_TERMINFO)
+ fmt_complex(buffer + strlen(buffer), src, 1);
+ else
+ strcat(buffer, src);
len += strlen(tterm->Strings[i]) + 1;
}
if (box_ok)
{
(void) strcpy(buffer, "box1=");
- (void) strcat(buffer, _nc_tic_expand(boxchars, outform==F_TERMINFO));
+ (void) strcat(buffer, _nc_tic_expand(boxchars, outform==F_TERMINFO, numbers));
WRAP_CONCAT;
}
}
return(infodump ? len : termcap_length(outbuf));
}
-int dump_entry(TERMTYPE *tterm, bool limited, int (*pred)(int type, int idx))
+int dump_entry(TERMTYPE *tterm, bool limited, int numbers, int (*pred)(int type, int idx))
/* dump a single entry */
{
int len, critlen;
infodump = TRUE;
}
- if (((len = fmt_entry(tterm, pred, FALSE, infodump)) > critlen) && limited)
+ if (((len = fmt_entry(tterm, pred, FALSE, infodump, numbers)) > critlen) && limited)
{
(void) printf("# (untranslatable capabilities removed to fit entry within %d bytes)\n",
critlen);
- if ((len = fmt_entry(tterm, pred, TRUE, infodump)) > critlen)
+ if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen)
{
/*
* We pick on sgr because it's a nice long string capability that
* is really just an optimization hack.
*/
char *oldsgr = set_attributes;
- set_attributes = ABSENT_STRING;
+ set_attributes = ABSENT_STRING;
(void) printf("# (sgr removed to fit entry within %d bytes)\n",
critlen);
- if ((len = fmt_entry(tterm, pred, TRUE, infodump)) > critlen)
+ if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen)
{
int oldversion = tversion;
(void) printf("# (terminfo-only capabilities suppressed to fit entry within %d bytes)\n",
critlen);
- if ((len = fmt_entry(tterm, pred, TRUE, infodump)) > critlen)
+ if ((len = fmt_entry(tterm, pred, TRUE, infodump, numbers)) > critlen)
{
(void) fprintf(stderr,
"warning: %s entry is %d bytes long\n",
{
char buffer[MAX_TERMINFO_LENGTH];
- append_output(NULL);
+ append_output(0);
(void)sprintf(buffer, "%s%s", infodump ? "use=" : "tc=", name);
wrap_concat(buffer);
(void) fputs(outbuf, stdout);
return out_used;
}
-void compare_entry(void (*hook)(int t, int i, const char *name))
+void compare_entry(void (*hook)(int t, int i, const char *name), TERMTYPE *tp GCC_UNUSED)
/* compare two entries */
{
int i, j;
+ NCURSES_CONST char * name;
(void) fputs(" comparing booleans.\n", stdout);
- for (j=0; j < BOOLCOUNT; j++)
+ for_each_boolean(j,tp)
{
- if (sortmode == S_NOSORT)
- i = j;
- else
- i = bool_indirect[j];
+ i = BoolIndirect(j);
+ name = ExtBoolname(tp,i,bool_names);
if ((outform == F_LITERAL || outform == F_TERMINFO || outform == F_VARIABLE)
- && (OBSOLETE(bool_names[i]) && outform != F_LITERAL))
+ && (OBSOLETE(name) && outform != F_LITERAL))
continue;
- (*hook)(BOOLEAN, i, bool_names[i]);
+ (*hook)(BOOLEAN, i, name);
}
(void) fputs(" comparing numbers.\n", stdout);
- for (j=0; j < NUMCOUNT; j++)
+ for_each_number(j,tp)
{
- if (sortmode == S_NOSORT)
- i = j;
- else
- i = num_indirect[j];
+ i = NumIndirect(j);
+ name = ExtNumname(tp,i,num_names);
if ((outform==F_LITERAL || outform==F_TERMINFO || outform==F_VARIABLE)
- && (OBSOLETE(num_names[i]) && outform != F_LITERAL))
+ && (OBSOLETE(name) && outform != F_LITERAL))
continue;
- (*hook)(NUMBER, i, num_names[i]);
+ (*hook)(NUMBER, i, name);
}
(void) fputs(" comparing strings.\n", stdout);
- for (j=0; j < STRCOUNT; j++)
+ for_each_string(j,tp)
{
- if (sortmode == S_NOSORT)
- i = j;
- else
- i = str_indirect[j];
+ i = StrIndirect(j);
+ name = ExtStrname(tp,i,str_names);
if ((outform==F_LITERAL || outform==F_TERMINFO || outform==F_VARIABLE)
- && (OBSOLETE(str_names[i]) && outform != F_LITERAL))
+ && (OBSOLETE(name) && outform != F_LITERAL))
continue;
- (*hook)(STRING, i, str_names[i]);
+ (*hook)(STRING, i, name);
}
}
-#define NOTSET(s) ((s) == (char *)NULL)
+#define NOTSET(s) ((s) == 0)
/*
* This bit of legerdemain turns all the terminfo variable names into
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
#define S_TERMCAP 4 /* sort by termcap names */
extern NCURSES_CONST char *nametrans(const char *);
-extern void dump_init(const char *, int, int, int, int);
-extern int fmt_entry(TERMTYPE *, int (*)(int, int), bool, bool);
-extern int dump_entry(TERMTYPE *, bool, int (*)(int, int));
+extern void dump_init(const char *, int, int, int, int, bool);
+extern int fmt_entry(TERMTYPE *, int (*)(int, int), bool, bool, int);
+extern int dump_entry(TERMTYPE *, bool, int, int (*)(int, int));
extern int dump_uses(const char *, bool);
-extern void compare_entry(void (*)(int, int, const char *));
+extern void compare_entry(void (*)(int, int, const char *), TERMTYPE *);
#define FAIL -1
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
#include <term_entry.h>
#include <dump_entry.h>
-MODULE_ID("$Id: infocmp.c,v 1.34 1998/02/11 12:14:03 tom Exp $")
+MODULE_ID("$Id: infocmp.c,v 1.44 1999/06/16 00:39:48 tom Exp $")
#define L_CURL "{"
#define R_CURL "}"
static int termcount; /* count of terminal entries */
static const char *tversion; /* terminfo version selected */
+static int numbers = 0; /* format "%'char'" to/from "%{number}" */
static int outform; /* output format */
static int sortmode; /* sort_mode */
static int itrace; /* trace flag for debugging */
static void ExitProgram(int code)
{
while (termcount-- > 0)
- _nc_free_termtype(&term[termcount], FALSE);
+ _nc_free_termtype(&term[termcount]);
_nc_leaks_dump_entry();
_nc_free_and_exit(code);
}
{
int i;
- for (i = 0; i < BOOLCOUNT; i++)
+ for (i = 0; i < NUM_BOOLEANS(t1); i++)
if (t1->Booleans[i] != t2->Booleans[i])
return(FALSE);
- for (i = 0; i < NUMCOUNT; i++)
+ for (i = 0; i < NUM_NUMBERS(t1); i++)
if (t1->Numbers[i] != t2->Numbers[i])
return(FALSE);
- for (i = 0; i < STRCOUNT; i++)
+ for (i = 0; i < NUM_STRINGS(t1); i++)
if (capcmp(t1->Strings[i], t2->Strings[i]))
return(FALSE);
return(TRUE);
}
+#define TIC_EXPAND(result) _nc_tic_expand(result, outform==F_TERMINFO, numbers)
+
static void compare_predicate(int type, int idx, const char *name)
/* predicate function to use for entry difference reports */
{
else
{
(void) strcpy(buf1, "'");
- (void) strcat(buf1, _nc_tic_expand(s1, outform==F_TERMINFO));
+ (void) strcat(buf1, TIC_EXPAND(s1));
(void) strcat(buf1, "'");
}
else
{
(void) strcpy(buf2, "'");
- (void) strcat(buf2, _nc_tic_expand(s2, outform==F_TERMINFO));
+ (void) strcat(buf2, TIC_EXPAND(s2));
(void) strcat(buf2, "'");
}
- (void) printf("\t%s: %s, %s.\n",
- name, buf1, buf2);
+ if (strcmp(buf1, buf2))
+ (void) printf("\t%s: %s, %s.\n",
+ name, buf1, buf2);
}
break;
case C_COMMON:
if (s1 && s2 && !capcmp(s1, s2))
- (void) printf("\t%s= '%s'.\n", name, _nc_tic_expand(s1, outform==F_TERMINFO));
+ (void) printf("\t%s= '%s'.\n", name, TIC_EXPAND(s1));
break;
case C_NAND:
/* couldn't match anything */
buf2[0] = *sp;
buf2[1] = '\0';
- (void) strcat(buf, _nc_tic_expand(buf2, outform==F_TERMINFO));
+ (void) strcat(buf, TIC_EXPAND(buf2));
}
}
(void) printf("%s\n", buf);
ENTRY *qp, *rp;
int i, n;
- dump_init((char *)NULL, F_LITERAL, S_TERMINFO, 0, itrace);
+ dump_init((char *)NULL, F_LITERAL, S_TERMINFO, 0, itrace, FALSE);
for (n = 0; n < argc && n < MAXCOMPARE; n++)
{
{
rp = (ENTRY *)qp->uses[0].parent;
+#if NCURSES_XNAMES
+ if (termcount > 1)
+ _nc_align_termtype(&qp->tterm, &rp->tterm);
+#endif
if (qp->nuses == 1 && !entryeq(&qp->tterm, &rp->tterm))
{
char name1[NAMESIZE], name2[NAMESIZE];
- memcpy(&term[0], &qp->tterm, sizeof(TERMTYPE));
- memcpy(&term[1], &rp->tterm, sizeof(TERMTYPE));
+ term[0] = qp->tterm;
+ term[1] = rp->tterm;
(void) canonical_name(qp->tterm.term_names, name1);
(void) canonical_name(rp->tterm.term_names, name2);
if (itrace)
(void)fprintf(stderr, "infocmp: dumping differences\n");
(void) printf("comparing %s to %s.\n", name1, name2);
- compare_entry(compare_predicate);
+ compare_entry(compare_predicate, term);
break;
case C_COMMON:
(void) fprintf(stderr,
"infocmp: dumping common capabilities\n");
(void) printf("comparing %s to %s.\n", name1, name2);
- compare_entry(compare_predicate);
+ compare_entry(compare_predicate, term);
break;
case C_NAND:
(void) fprintf(stderr,
"infocmp: dumping differences\n");
(void) printf("comparing %s to %s.\n", name1, name2);
- compare_entry(compare_predicate);
+ compare_entry(compare_predicate, term);
break;
}
static void usage(void)
{
- fprintf(stderr,
-"usage: infocmp [-dcnILCuvV1T] [-s d| i| l| c] [-w width] [-A directory] [-B directory] [termname...]\n");
+ static const char *tbl[] = {
+ "Usage: infocmp [options] [-A directory] [-B directory] [termname...]"
+ ,""
+ ,"Options:"
+ ," -1 print single-column"
+ ," -C use termcap-names"
+ ," -F compare terminfo-files"
+ ," -I use terminfo-names"
+ ," -L use long names"
+ ," -R subset (see manpage)"
+ ," -T eliminate size limits (test)"
+ ," -V print version"
+ ," -c list common capabilities"
+ ," -d list different capabilities"
+ ," -e format output for C initializer"
+ ," -E format output as C tables"
+ ," -f with -1, format complex strings"
+ ," -G format %{number} to %'char'"
+ ," -g format %'char' to %{number}"
+ ," -i analyze initialization/reset"
+ ," -l output terminfo names"
+ ," -n list capabilities in neither"
+ ," -p ignore padding specifiers"
+ ," -r with -C, output in termcap form"
+ ," -s [d|i|l|c] sort fields"
+ ," -u produce source with 'use='"
+ ," -v number (verbose)"
+ ," -w number (width)"
+ };
+ const size_t first = 3;
+ const size_t last = sizeof(tbl)/sizeof(tbl[0]);
+ const size_t left = (last - first + 1) / 2 + first;
+ size_t n;
+
+ for (n = 0; n < left; n++) {
+ size_t m = (n < first) ? last : n + left - first;
+ if (m < last)
+ fprintf(stderr, "%-40.40s%s\n", tbl[n], tbl[m]);
+ else
+ fprintf(stderr, "%s\n", tbl[n]);
+ }
exit(EXIT_FAILURE);
}
+static char * name_initializer(const char *type)
+{
+ static char *initializer;
+ char *s;
+
+ if (initializer == 0)
+ initializer = malloc(strlen(term->term_names) + 20);
+
+ (void) sprintf(initializer, "%s_data_%s", type, term->term_names);
+ for (s = initializer; *s != 0 && *s != '|'; s++)
+ {
+ if (!isalnum(*s))
+ *s = '_';
+ }
+ *s = 0;
+ return initializer;
+}
+
+/* dump C initializers for the terminal type */
+static void dump_initializers(void)
+{
+ int n;
+ const char *str = 0;
+ int size;
+
+ (void) printf("static bool %s[] = %s\n", name_initializer("bool"), L_CURL);
+
+ for_each_boolean(n,term)
+ {
+ switch((int)(term->Booleans[n]))
+ {
+ case TRUE:
+ str = "TRUE";
+ break;
+
+ case FALSE:
+ str = "FALSE";
+ break;
+
+ case ABSENT_BOOLEAN:
+ str = "ABSENT_BOOLEAN";
+ break;
+
+ case CANCELLED_BOOLEAN:
+ str = "CANCELLED_BOOLEAN";
+ break;
+ }
+ (void) printf("\t/* %3d: %-8s */\t%s,\n",
+ n, ExtBoolname(term,n,boolnames), str);
+ }
+ (void) printf("%s;\n", R_CURL);
+
+ (void) printf("static short %s[] = %s\n", name_initializer("number"), L_CURL);
+
+ for_each_number(n,term)
+ {
+ char buf[BUFSIZ];
+ switch (term->Numbers[n])
+ {
+ case ABSENT_NUMERIC:
+ str = "ABSENT_NUMERIC";
+ break;
+ case CANCELLED_NUMERIC:
+ str = "CANCELLED_NUMERIC";
+ break;
+ default:
+ sprintf(buf, "%d", term->Numbers[n]);
+ str = buf;
+ break;
+ }
+ (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ExtNumname(term,n,numnames), str);
+ }
+ (void) printf("%s;\n", R_CURL);
+
+ size = sizeof(TERMTYPE)
+ + (NUM_BOOLEANS(term) * sizeof(term->Booleans[0]))
+ + (NUM_NUMBERS(term) * sizeof(term->Numbers[0]));
+
+ (void) printf("static char * %s[] = %s\n", name_initializer("string"), L_CURL);
+
+ for_each_string(n,term)
+ {
+ char buf[BUFSIZ], *sp, *tp;
+
+ if (term->Strings[n] == ABSENT_STRING)
+ str = "ABSENT_STRING";
+ else if (term->Strings[n] == CANCELLED_STRING)
+ str = "CANCELLED_STRING";
+ else
+ {
+ tp = buf;
+ *tp++ = '"';
+ for (sp = term->Strings[n]; *sp; sp++)
+ {
+ if (isascii(*sp) && isprint(*sp) && *sp !='\\' && *sp != '"')
+ *tp++ = *sp;
+ else
+ {
+ (void) sprintf(tp, "\\%03o", *sp & 0xff);
+ tp += 4;
+ }
+ }
+ *tp++ = '"';
+ *tp = '\0';
+ size += (strlen(term->Strings[n]) + 1);
+ str = buf;
+ }
+#if NCURSES_XNAMES
+ if (n == STRCOUNT)
+ {
+ (void) printf("%s;\n", R_CURL);
+
+ (void) printf("static char * %s[] = %s\n", name_initializer("string_ext"), L_CURL);
+ }
+#endif
+ (void) printf("\t/* %3d: %-8s */\t%s,\n", n, ExtStrname(term,n,strnames), str);
+ }
+ (void) printf("%s;\n", R_CURL);
+}
+
+/* dump C initializers for the terminal type */
+static void dump_termtype(void)
+{
+ (void) printf("\t%s\n\t\t\"%s\",\n", L_CURL, term->term_names);
+ (void) printf("\t\t(char *)0,\t/* pointer to string table */\n");
+
+ (void) printf("\t\t%s,\n", name_initializer("bool"));
+ (void) printf("\t\t%s,\n", name_initializer("number"));
+
+ (void) printf("\t\t%s,\n", name_initializer("string"));
+
+#if NCURSES_XNAMES
+ (void) printf("#if NCURSES_XNAMES\n");
+ (void) printf("\t\t(char *)0,\t/* pointer to extended string table */\n");
+ (void) printf("\t\t%s,\t/* ...corresponding names */\n",
+ (NUM_STRINGS(term) != STRCOUNT)
+ ? name_initializer("string_ext")
+ : "(char **)0");
+
+ (void) printf("\t\t%d,\t\t/* count total Booleans */\n", NUM_BOOLEANS(term));
+ (void) printf("\t\t%d,\t\t/* count total Numbers */\n", NUM_NUMBERS(term));
+ (void) printf("\t\t%d,\t\t/* count total Strings */\n", NUM_STRINGS(term));
+
+ (void) printf("\t\t%d,\t\t/* count extensions to Booleans */\n", NUM_BOOLEANS(term) - BOOLCOUNT);
+ (void) printf("\t\t%d,\t\t/* count extensions to Numbers */\n", NUM_NUMBERS(term) - NUMCOUNT);
+ (void) printf("\t\t%d,\t\t/* count extensions to Strings */\n", NUM_STRINGS(term) - STRCOUNT);
+
+ (void) printf("#endif /* NCURSES_XNAMES */\n");
+#endif /* NCURSES_XNAMES */
+ (void) printf("\t%s\n", R_CURL);
+}
+
/***************************************************************************
*
* Main sequence
/* Also avoid overflowing smaller stacks on systems like AmigaOS */
path *tfile = malloc(sizeof(path)*MAXTERMS);
int c, i, len;
+ bool formatted = FALSE;
bool filecompare = FALSE;
- bool initdump = FALSE;
+ int initdump = 0;
bool init_analyze = FALSE;
bool limited = TRUE;
/* where is the terminfo database location going to default to? */
restdir = firstdir = 0;
- while ((c = getopt(argc, argv, "decCFIinlLprR:s:uv:Vw:A:B:1T")) != EOF)
+ while ((c = getopt(argc, argv, "deEcCfFGgIinlLprR:s:uv:Vw:A:B:1T")) != EOF)
switch (c)
{
case 'd':
break;
case 'e':
- initdump = TRUE;
+ initdump |= 1;
+ break;
+
+ case 'E':
+ initdump |= 2;
break;
case 'c':
sortmode = S_TERMCAP;
break;
+ case 'f':
+ formatted = TRUE;
+ break;
+
+ case 'G':
+ numbers = 1;
+ break;
+
+ case 'g':
+ numbers = -1;
+ break;
+
case 'F':
filecompare = TRUE;
break;
case 'r':
tversion = 0;
+ limited = FALSE;
break;
case 'R':
case '1':
mwidth = 0;
break;
+
case 'T':
limited = FALSE;
break;
sortmode = S_TERMINFO;
/* set up for display */
- dump_init(tversion, outform, sortmode, mwidth, itrace);
+ dump_init(tversion, outform, sortmode, mwidth, itrace, formatted);
/* make sure we have at least one terminal name to work with */
if (optind >= argc)
}
}
+#if NCURSES_XNAMES
+ if (termcount > 1)
+ _nc_align_termtype(&term[0], &term[1]);
+#endif
+
/* dump as C initializer for the terminal type */
if (initdump)
{
- int n;
- const char *str = 0;
- int size;
-
- (void) printf("\t%s\n\t\t\"%s\",\n",
- L_CURL, term->term_names);
- (void) printf("\t\t(char *)0,\n");
-
- (void) printf("\t\t%s /* BOOLEANS */\n", L_CURL);
- for (n = 0; n < BOOLCOUNT; n++)
- {
- switch((int)(term->Booleans[n]))
- {
- case TRUE:
- str = "TRUE";
- break;
-
- case FALSE:
- str = "FALSE";
- break;
-
- case ABSENT_BOOLEAN:
- str = "ABSENT_BOOLEAN";
- break;
-
- case CANCELLED_BOOLEAN:
- str = "CANCELLED_BOOLEAN";
- break;
- }
- (void) printf("\t\t/* %s */\t%s%s,\n",
- boolnames[n], str,
- n == BOOLCOUNT-1 ? R_CURL : "");
- }
-
- (void) printf("\t\t%s /* NUMERICS */\n", L_CURL);
- for (n = 0; n < NUMCOUNT; n++)
- {
- char buf[BUFSIZ];
- switch (term->Numbers[n])
- {
- case ABSENT_NUMERIC:
- str = "ABSENT_NUMERIC";
- break;
- case CANCELLED_NUMERIC:
- str = "CANCELLED_NUMERIC";
- break;
- default:
- sprintf(buf, "%d", term->Numbers[n]);
- str = buf;
- break;
- }
- (void) printf("\t\t/* %s */\t%s%s,\n",
- numnames[n], str,
- n == NUMCOUNT-1 ? R_CURL : "");
- }
-
- size = sizeof(TERMTYPE)
- + (BOOLCOUNT * sizeof(term->Booleans[0]))
- + (NUMCOUNT * sizeof(term->Numbers[0]));
-
- (void) printf("\t\t%s /* STRINGS */\n", L_CURL);
- for (n = 0; n < STRCOUNT; n++)
- {
- char buf[BUFSIZ], *sp, *tp;
-
- if (term->Strings[n] == ABSENT_STRING)
- str = "ABSENT_STRING";
- else if (term->Strings[n] == CANCELLED_STRING)
- str = "CANCELLED_STRING";
- else
- {
- tp = buf;
- *tp++ = '"';
- for (sp = term->Strings[n]; *sp; sp++)
- {
- if (isascii(*sp) && isprint(*sp) && *sp !='\\' && *sp != '"')
- *tp++ = *sp;
- else
- {
- (void) sprintf(tp, "\\%03o", *sp & 0xff);
- tp += 4;
- }
- }
- *tp++ = '"';
- *tp = '\0';
- size += (strlen(term->Strings[n]) + 1);
- str = buf;
- }
- (void) printf("\t\t/* %s */\t%s%s%s\n",
- strnames[n], str,
- n == STRCOUNT-1 ? R_CURL : "",
- n == STRCOUNT-1 ? "" : ",");
- }
- (void) printf("\t%s /* size = %d */\n", R_CURL, size);
+ if (initdump & 1)
+ dump_termtype();
+ if (initdump & 2)
+ dump_initializers();
ExitProgram(EXIT_SUCCESS);
}
tname[0]);
(void) printf("#\tReconstructed via infocmp from file: %s\n",
tfile[0]);
- len = dump_entry(&term[0], limited, NULL);
+ len = dump_entry(&term[0], limited, numbers, NULL);
putchar('\n');
if (itrace)
(void)fprintf(stderr, "infocmp: length %d\n", len);
if (itrace)
(void)fprintf(stderr, "infocmp: dumping differences\n");
(void) printf("comparing %s to %s.\n", tname[0], tname[1]);
- compare_entry(compare_predicate);
+ compare_entry(compare_predicate, term);
break;
case C_COMMON:
(void) fprintf(stderr,
"infocmp: dumping common capabilities\n");
(void) printf("comparing %s to %s.\n", tname[0], tname[1]);
- compare_entry(compare_predicate);
+ compare_entry(compare_predicate, term);
break;
case C_NAND:
(void) fprintf(stderr,
"infocmp: dumping differences\n");
(void) printf("comparing %s to %s.\n", tname[0], tname[1]);
- compare_entry(compare_predicate);
+ compare_entry(compare_predicate, term);
break;
case C_USEALL:
if (itrace)
(void) fprintf(stderr, "infocmp: dumping use entry\n");
- len = dump_entry(&term[0], limited, use_predicate);
+ len = dump_entry(&term[0], limited, numbers, use_predicate);
for (i = 1; i < termcount; i++)
len += dump_uses(tname[i], !(outform==F_TERMCAP || outform==F_TCONVERR));
putchar('\n');
* Author: Thomas E. Dickey <dickey@clark.net> 1997,1998 *
****************************************************************************/
/*
- * $Id: progs.priv.h,v 1.17 1998/02/11 12:14:03 tom Exp $
+ * $Id: progs.priv.h,v 1.19 1999/02/23 11:10:32 tom Exp $
*
* progs.priv.h
*
# include <sys/param.h>
#endif
-#ifndef PATH_MAX
-# if defined(_POSIX_PATH_MAX)
-# define PATH_MAX _POSIX_PATH_MAX
-# elif defined(MAXPATHLEN)
-# define PATH_MAX MAXPATHLEN
-# else
-# define PATH_MAX 255 /* the Posix minimum pathsize */
-# endif
-#endif
-
#if HAVE_DIRENT_H
# include <dirent.h>
# define NAMLEN(dirent) strlen((dirent)->d_name)
#endif /* HAVE_GETOPT_H */
#include <curses.h>
-#include <term.h>
+#include <term_entry.h>
#include <tic.h>
#include <nc_alloc.h>
#define STDERR_FILENO 2
#endif
+/* may be in limits.h, included from various places */
+#ifndef PATH_MAX
+# if defined(_POSIX_PATH_MAX)
+# define PATH_MAX _POSIX_PATH_MAX
+# elif defined(MAXPATHLEN)
+# define PATH_MAX MAXPATHLEN
+# else
+# define PATH_MAX 255 /* the Posix minimum pathsize */
+# endif
+#endif
+
/* We use isascii only to guard against use of 7-bit ctype tables in the
* isprint test in infocmp.
*/
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
#include <dump_entry.h>
#include <term_entry.h>
-MODULE_ID("$Id: tic.c,v 1.28 1998/02/11 12:14:02 tom Exp $")
+MODULE_ID("$Id: tic.c,v 1.52 1999/09/25 22:47:54 tom Exp $")
const char *_nc_progname = "tic";
static FILE *log_fp;
+static FILE *tmp_fp;
static bool showsummary = FALSE;
+static const char *to_remove;
-static const char usage_string[] = "[-hc] [-v[n]] [-e names] [-CILNRTrsw1] source-file\n";
+static void (*save_check_termtype)(TERMTYPE *);
+static void check_termtype(TERMTYPE *tt);
+
+static const char usage_string[] = "[-h] [-v[n]] [-e names] [-CILNRTcfrswx1] source-file\n";
+
+static void cleanup(void)
+{
+ if (tmp_fp != 0)
+ fclose(tmp_fp);
+ if (to_remove != 0) {
+#if HAVE_REMOVE
+ remove(to_remove);
+#else
+ unlink(to_remove);
+#endif
+ }
+}
+
+static void failed(const char *msg)
+{
+ perror(msg);
+ cleanup();
+ exit(EXIT_FAILURE);
+}
static void usage(void)
{
" -R restrict translation to given terminfo/termcap version",
" -T remove size-restrictions on compiled description",
" -c check only, validate input without compiling or translating",
+ " -f format complex strings for readability",
+ " -G format %{number} to %'char'",
+ " -g format %'char' to %{number}",
" -e<names> translate/compile only entries named by comma-separated list",
" -o<dir> set output directory for compiled entry writes",
" -r force resolution of all use entries in source translation",
" -s print summary statistics",
" -v[n] set verbosity level",
" -w[n] set format width for translation output",
+#if NCURSES_XNAMES
+ " -x treat unknown capabilities as user-defined",
+#endif
"",
"Parameters:",
" <file> file to translate or compile"
exit(EXIT_FAILURE);
}
-static bool immedhook(ENTRY *ep)
+#define L_BRACE '{'
+#define R_BRACE '}'
+#define S_QUOTE '\'';
+
+static void write_it(ENTRY *ep)
+{
+ unsigned n;
+ int ch;
+ char *s, *d, *t;
+ char result[MAX_ENTRY_SIZE];
+
+ /*
+ * Look for strings that contain %{number}, convert them to %'char',
+ * which is shorter and runs a little faster.
+ */
+ for (n = 0; n < STRCOUNT; n++) {
+ s = ep->tterm.Strings[n];
+ if (VALID_STRING(s)
+ && strchr(s, L_BRACE) != 0) {
+ d = result;
+ t = s;
+ while ((ch = *t++) != 0) {
+ *d++ = ch;
+ if (ch == '\\') {
+ *d++ = *t++;
+ } else if ((ch == '%')
+ && (*t == L_BRACE)) {
+ char *v = 0;
+ long value = strtol(t+1, &v, 0);
+ if (v != 0
+ && *v == R_BRACE
+ && value > 0
+ && value != '\\' /* FIXME */
+ && value < 127
+ && isprint((int)value)) {
+ *d++ = S_QUOTE;
+ *d++ = (int)value;
+ *d++ = S_QUOTE;
+ t = (v + 1);
+ }
+ }
+ }
+ *d = 0;
+ if (strlen(result) < strlen(s))
+ strcpy(s, result);
+ }
+ }
+
+ _nc_set_type(_nc_first_name(ep->tterm.term_names));
+ _nc_curr_line = ep->startline;
+ _nc_write_entry(&ep->tterm);
+}
+
+static bool immedhook(ENTRY *ep GCC_UNUSED)
/* write out entries with no use capabilities immediately to save storage */
{
#ifndef HAVE_BIG_CORE
{
int oldline = _nc_curr_line;
- _nc_set_type(_nc_first_name(ep->tterm.term_names));
- _nc_curr_line = ep->startline;
- _nc_write_entry(&ep->tterm);
+ write_it(ep);
_nc_curr_line = oldline;
free(ep->tterm.str_table);
return(TRUE);
}
- else
#endif /* HAVE_BIG_CORE */
- return(FALSE);
+ return(FALSE);
}
static void put_translate(int c)
const char **dst = 0;
char *s, *base;
- size_t pass, n, nn;
+ unsigned pass, n, nn;
char buffer[BUFSIZ];
- if (strchr(src, '/') != 0) { /* a filename */
+ if (src == 0) {
+ /* EMPTY */;
+ } else if (strchr(src, '/') != 0) { /* a filename */
FILE *fp = fopen(src, "r");
- if (fp == 0) {
- perror(src);
- exit(EXIT_FAILURE);
- }
+ if (fp == 0)
+ failed(src);
+
for (pass = 1; pass <= 2; pass++) {
nn = 0;
while (fgets(buffer, sizeof(buffer), fp) != 0) {
int main (int argc, char *argv[])
{
+char my_tmpname[PATH_MAX];
int v_opt = -1, debug_level;
int smart_defaults = TRUE;
char *termcap;
int sortmode = S_TERMINFO; /* sort_mode */
int width = 60;
+bool formatted = FALSE; /* reformat complex strings? */
+int numbers = 0; /* format "%'char'" to/from "%{number}" */
bool infodump = FALSE; /* running as captoinfo? */
bool capdump = FALSE; /* running as infotocap? */
bool forceresolve = FALSE; /* force resolution */
infodump = (strcmp(_nc_progname, "captoinfo") == 0);
capdump = (strcmp(_nc_progname, "infotocap") == 0);
+#if NCURSES_XNAMES
+ use_extended_names(FALSE);
+#endif
/*
* Processing arguments is a little complicated, since someone made a
* design decision to allow the numeric values for -w, -v options to
* be optional.
*/
- while ((this_opt = getopt(argc, argv, "0123456789CILNR:TVce:o:rsvw")) != EOF) {
+ while ((this_opt = getopt(argc, argv, "0123456789CILNR:TVce:fGgo:rsvwx")) != EOF) {
if (isdigit(this_opt)) {
switch (last_opt) {
case 'v':
case 'e':
namelst = make_namelist(optarg);
break;
+ case 'f':
+ formatted = TRUE;
+ break;
+ case 'G':
+ numbers = 1;
+ break;
+ case 'g':
+ numbers = -1;
+ break;
case 'o':
outdir = optarg;
break;
case 'w':
width = 0;
break;
+#if NCURSES_XNAMES
+ case 'x':
+ use_extended_names(TRUE);
+ break;
+#endif
default:
usage();
}
debug_level = (v_opt > 0) ? v_opt : (v_opt == 0);
_nc_tracing = (1 << debug_level) - 1;
+ if (_nc_tracing)
+ {
+ save_check_termtype = _nc_check_termtype;
+ _nc_check_termtype = check_termtype;
+ }
+
+#ifndef HAVE_BIG_CORE
+ /*
+ * Aaargh! immedhook seriously hoses us!
+ *
+ * One problem with immedhook is it means we can't do -e. Problem
+ * is that we can't guarantee that for each terminal listed, all the
+ * terminals it depends on will have been kept in core for reference
+ * resolution -- in fact it's certain the primitive types at the end
+ * of reference chains *won't* be in core unless they were explicitly
+ * in the select list themselves.
+ */
+ if (namelst && (!infodump && !capdump))
+ {
+ (void) fprintf(stderr,
+ "Sorry, -e can't be used without -I or -C\n");
+ cleanup();
+ return EXIT_FAILURE;
+ }
+#endif /* HAVE_BIG_CORE */
+
if (optind < argc) {
source_file = argv[optind++];
if (optind < argc) {
if (infodump == TRUE) {
/* captoinfo's no-argument case */
source_file = "/etc/termcap";
- if ((termcap = getenv("TERMCAP")) != NULL) {
+ if ((termcap = getenv("TERMCAP")) != 0
+ && (namelst = make_namelist(getenv("TERM"))) != 0) {
if (access(termcap, F_OK) == 0) {
/* file exists */
source_file = termcap;
+ } else
+ if ((source_file = tmpnam(my_tmpname)) != 0
+ && (tmp_fp = fopen(source_file, "w")) != 0) {
+ fprintf(tmp_fp, "%s\n", termcap);
+ fclose(tmp_fp);
+ tmp_fp = fopen(source_file, "r");
+ to_remove = source_file;
+ } else {
+ failed("tmpnam");
}
}
} else {
_nc_progname,
_nc_progname,
usage_string);
+ cleanup();
return EXIT_FAILURE;
}
}
- if (freopen(source_file, "r", stdin) == NULL) {
+ if (tmp_fp == 0
+ && (tmp_fp = fopen(source_file, "r")) == 0) {
fprintf (stderr, "%s: Can't open %s\n", _nc_progname, source_file);
return EXIT_FAILURE;
}
smart_defaults
? outform
: F_LITERAL,
- sortmode, width, debug_level);
+ sortmode, width, debug_level, formatted);
else if (capdump)
dump_init(tversion,
outform,
- sortmode, width, debug_level);
+ sortmode, width, debug_level, FALSE);
/* parse entries out of the source file */
_nc_set_source(source_file);
if (!(check_only || infodump || capdump))
_nc_set_writedir(outdir);
#endif /* HAVE_BIG_CORE */
- _nc_read_entry_source(stdin, (char *)NULL,
+ _nc_read_entry_source(tmp_fp, (char *)NULL,
!smart_defaults, FALSE,
(check_only || infodump || capdump) ? NULLHOOK : immedhook);
/* do use resolution */
- if (check_only || (!infodump && !capdump) || forceresolve)
- if (!_nc_resolve_uses() && !check_only)
+ if (check_only || (!infodump && !capdump) || forceresolve) {
+ if (!_nc_resolve_uses() && !check_only) {
+ cleanup();
return EXIT_FAILURE;
-
-#ifndef HAVE_BIG_CORE
- /*
- * Aaargh! immedhook seriously hoses us!
- *
- * One problem with immedhook is it means we can't do -e. Problem
- * is that we can't guarantee that for each terminal listed, all the
- * terminals it depends on will have been kept in core for reference
- * resolution -- in fact it's certain the primitive types at the end
- * of reference chains *won't* be in core unless they were explicitly
- * in the select list themselves.
- */
- if (namelst && (!infodump && !capdump))
- {
- (void) fprintf(stderr,
- "Sorry, -e can't be used without -I or -C\n");
- return EXIT_FAILURE;
+ }
}
-#endif /* HAVE_BIG_CORE */
/* length check */
if (check_only && (capdump || infodump))
{
if (matches(namelst, qp->tterm.term_names))
{
- int len = fmt_entry(&qp->tterm, NULL, TRUE, infodump);
+ int len = fmt_entry(&qp->tterm, NULL, TRUE, infodump, numbers);
if (len>(infodump?MAX_TERMINFO_LENGTH:MAX_TERMCAP_LENGTH))
(void) fprintf(stderr,
_nc_set_writedir(outdir);
for_entry_list(qp)
if (matches(namelst, qp->tterm.term_names))
- {
- _nc_set_type(_nc_first_name(qp->tterm.term_names));
- _nc_curr_line = qp->startline;
- _nc_write_entry(&qp->tterm);
- }
+ write_it(qp);
}
else
{
/* this is in case infotocap() generates warnings */
_nc_set_type(_nc_first_name(qp->tterm.term_names));
- (void) fseek(stdin, qp->cstart, SEEK_SET);
+ (void) fseek(tmp_fp, qp->cstart, SEEK_SET);
while (j-- )
if (infodump)
- (void) putchar(getchar());
+ (void) putchar(fgetc(tmp_fp));
else
- put_translate(getchar());
+ put_translate(fgetc(tmp_fp));
- len = dump_entry(&qp->tterm, limited, NULL);
+ len = dump_entry(&qp->tterm, limited, numbers, NULL);
for (j = 0; j < qp->nuses; j++)
- len += dump_uses((char *)(qp->uses[j].parent), infodump);
+ len += dump_uses((char *)(qp->uses[j].parent), !capdump);
(void) putchar('\n');
if (debug_level != 0 && !limited)
printf("# length=%d\n", len);
bool in_comment = FALSE;
bool trailing_comment = FALSE;
- (void) fseek(stdin, _nc_tail->cend, SEEK_SET);
- while ((c = getchar()) != EOF)
+ (void) fseek(tmp_fp, _nc_tail->cend, SEEK_SET);
+ while ((c = fgetc(tmp_fp)) != EOF)
{
if (oldc == '\n') {
if (c == '#') {
else
fprintf(log_fp, "No entries written\n");
}
+ cleanup();
return(EXIT_SUCCESS);
}
+
+/*
+ * This bit of legerdemain turns all the terminfo variable names into
+ * references to locations in the arrays Booleans, Numbers, and Strings ---
+ * precisely what's needed (see comp_parse.c).
+ */
+
+TERMINAL *cur_term; /* tweak to avoid linking lib_cur_term.c */
+
+#undef CUR
+#define CUR tp->
+
+/* other sanity-checks (things that we don't want in the normal
+ * logic that reads a terminfo entry)
+ */
+static void check_termtype(TERMTYPE *tp)
+{
+ bool conflict = FALSE;
+ unsigned j, k;
+ char fkeys[STRCOUNT];
+
+ /*
+ * A terminal entry may contain more than one keycode assigned to
+ * a given string (e.g., KEY_END and KEY_LL). But curses will only
+ * return one (the last one assigned).
+ */
+ memset(fkeys, 0, sizeof(fkeys));
+ for (j = 0; _nc_tinfo_fkeys[j].code; j++) {
+ char *a = tp->Strings[_nc_tinfo_fkeys[j].offset];
+ bool first = TRUE;
+ if (!VALID_STRING(a))
+ continue;
+ for (k = j+1; _nc_tinfo_fkeys[k].code; k++) {
+ char *b = tp->Strings[_nc_tinfo_fkeys[k].offset];
+ if (!VALID_STRING(b)
+ || fkeys[k])
+ continue;
+ if (!strcmp(a,b)) {
+ fkeys[j] = 1;
+ fkeys[k] = 1;
+ if (first) {
+ if (!conflict) {
+ _nc_warning("Conflicting key definitions (using the last)");
+ conflict = TRUE;
+ }
+ fprintf(stderr, "... %s is the same as %s",
+ keyname(_nc_tinfo_fkeys[j].code),
+ keyname(_nc_tinfo_fkeys[k].code));
+ first = FALSE;
+ } else {
+ fprintf(stderr, ", %s",
+ keyname(_nc_tinfo_fkeys[k].code));
+ }
+ }
+ }
+ if (!first)
+ fprintf(stderr, "\n");
+ }
+
+ /*
+ * Quick check for color. We could also check if the ANSI versus
+ * non-ANSI strings are misused.
+ */
+ if ((max_colors > 0) != (max_pairs > 0)
+ || (max_colors > max_pairs))
+ _nc_warning("inconsistent values for max_colors and max_pairs");
+
+ PAIRED(set_foreground, set_background)
+ PAIRED(set_a_foreground, set_a_background)
+
+ /*
+ * These may be mismatched because the terminal description relies on
+ * restoring the cursor visibility by resetting it.
+ */
+ ANDMISSING(cursor_invisible, cursor_normal)
+ ANDMISSING(cursor_visible, cursor_normal)
+
+ /*
+ * From XSI & O'Reilly, we gather that sc/rc are required if csr is
+ * given, because the cursor position after the scrolling operation is
+ * performed is undefined.
+ */
+ ANDMISSING(change_scroll_region, save_cursor)
+ ANDMISSING(change_scroll_region, restore_cursor)
+
+ /*
+ * Some standard applications (e.g., vi) and some non-curses
+ * applications (e.g., jove) get confused if we have both ich/ich1 and
+ * smir/rmir. Let's be nice and warn about that, too, even though
+ * ncurses handles it.
+ */
+ if ((PRESENT(enter_insert_mode) || PRESENT(exit_insert_mode))
+ && (PRESENT(insert_character) || PRESENT(parm_ich))) {
+ _nc_warning("non-curses applications may be confused by ich/ich1 with smir/rmir");
+ }
+
+ /*
+ * Finally, do the non-verbose checks
+ */
+ if (save_check_termtype != 0)
+ save_check_termtype(tp);
+}
#include <progs.priv.h>
+#include <sys/stat.h>
+
#include <dump_entry.h>
#include <term_entry.h>
-MODULE_ID("$Id: toe.c,v 0.18 1998/02/11 12:14:02 tom Exp $")
+MODULE_ID("$Id: toe.c,v 0.19 1998/03/08 01:02:46 tom Exp $")
const char *_nc_progname;
if ((home = getenv("HOME")) != (char *)NULL)
{
char personal[PATH_MAX];
+ struct stat sb;
(void) sprintf(personal, PRIVATE_INFO, home);
- if (access(personal, F_OK) == 0)
+ if (stat(personal, &sb) == 0
+ && (sb.st_mode & S_IFMT) == S_IFDIR)
eargv[j++] = personal;
}
eargv[j++] = TERMINFO;
*/
#include <progs.priv.h>
+#ifndef PURE_TERMINFO
+#include <termsort.c>
+#endif
-#include <curses.h>
-
-MODULE_ID("$Id: tput.c,v 1.11 1998/02/11 12:14:02 tom Exp $")
+MODULE_ID("$Id: tput.c,v 1.14 1999/07/31 21:18:29 Goran.Uddeborg Exp $")
#define PUTS(s) fputs(s, stdout)
#define PUTCHAR(c) putchar(c)
static int tput(int argc, char *argv[])
{
+char *name;
char *s;
int i, j, c;
int reset, status;
FILE *f;
reset = 0;
- if (strcmp(argv[0], "reset") == 0) {
+ name = argv[0];
+ if (strcmp(name, "reset") == 0) {
reset = 1;
}
- if (reset || strcmp(argv[0], "init") == 0) {
+ if (reset || strcmp(name, "init") == 0) {
if (init_prog != NULL) {
system(init_prog);
}
PUTS(init_1string);
}
FLUSH;
-
+
if (reset && reset_2string != NULL) {
PUTS(reset_2string);
} else if (init_2string != NULL) {
PUTS(init_2string);
}
FLUSH;
-
+
if (set_lr_margin != NULL) {
PUTS(tparm(set_lr_margin, 0, columns - 1));
} else if (set_left_margin_parm != NULL
}
}
FLUSH;
-
+
if (init_tabs != 8) {
if (clear_all_tabs != NULL && set_tab != NULL) {
for(i = 0; i < columns - 1; i += 8) {
if (parm_right_cursor) {
PUTS(tparm(parm_right_cursor, 8));
} else {
- for(j = 0; j < 8; j++)
+ for(j = 0; j < 8; j++)
PUTCHAR(' ');
}
PUTS(set_tab);
FLUSH;
}
}
-
+
if (reset && reset_file != NULL) {
f = fopen(reset_file, "r");
if (f == NULL) {
fclose(f);
}
FLUSH;
-
+
if (reset && reset_3string != NULL) {
PUTS(reset_3string);
} else if (init_2string != NULL) {
FLUSH;
return 0;
}
-
- if (strcmp(argv[0], "longname") == 0) {
+
+ if (strcmp(name, "longname") == 0) {
PUTS(longname());
return 0;
}
- if ((status = tigetflag(argv[0])) != -1)
+#ifndef PURE_TERMINFO
+ {
+ const struct name_table_entry *np;
+
+ if ((np = _nc_find_entry(name, _nc_get_hash_table(1))) != 0)
+ switch(np->nte_type)
+ {
+ case BOOLEAN:
+ if (bool_from_termcap[np->nte_index])
+ name = boolnames[np->nte_index];
+ break;
+
+ case NUMBER:
+ if (num_from_termcap[np->nte_index])
+ name = numnames[np->nte_index];
+ break;
+
+ case STRING:
+ if (str_from_termcap[np->nte_index])
+ name = strnames[np->nte_index];
+ break;
+ }
+ }
+#endif
+
+ if ((status = tigetflag(name)) != -1)
return(status != 0);
- else if ((status = tigetnum(argv[0])) != CANCELLED_NUMERIC) {
+ else if ((status = tigetnum(name)) != CANCELLED_NUMERIC) {
(void) printf("%d\n", status);
return(0);
}
- else if ((s = tigetstr(argv[0])) == CANCELLED_STRING)
- quit(4, "%s: unknown terminfo capability '%s'", prg_name, argv[0]);
+ else if ((s = tigetstr(name)) == CANCELLED_STRING)
+ quit(4, "%s: unknown terminfo capability '%s'", prg_name, name);
else if (s != (char *)NULL) {
if (argc > 1) {
int k;
if (term == NULL || *term == '\0')
quit(2, "No value for $TERM and no -T specified");
- if (setupterm(term, STDOUT_FILENO, &errret) != OK)
+ if (setupterm(term, STDOUT_FILENO, &errret) != OK && errret <= 0)
quit(3, "unknown terminal \"%s\"", term);
if (cmdline)
#include <curses.h> /* for bool typedef */
#include <dump_entry.h>
-MODULE_ID("$Id: tset.c,v 0.31 1998/02/11 12:14:02 tom Exp $")
+MODULE_ID("$Id: tset.c,v 0.37 1999/03/14 12:30:02 tom Exp $")
extern char **environ;
}
#if !HAVE_STRDUP
-static char *strdup (char *s)
-{
- char *p;
-
- p = malloc(strlen(s)+1);
- if (p)
- strcpy(p,s);
- return(p);
-}
+#define strdup _nc_strdup
+extern char *_nc_strdup(const char *);
#endif /* not HAVE_STRDUP */
static void
const char *porttype; /* Port type, or "" for any. */
const char *type; /* Terminal type to select. */
int conditional; /* Baud rate conditionals bitmask. */
- int speed; /* Baud rate to compare against. */
+ speed_t speed; /* Baud rate to compare against. */
} MAP;
static MAP *cur, *maplist;
char *base = 0;
copy = strdup(arg);
- mapp = malloc((u_int)sizeof(MAP));
+ mapp = malloc(sizeof(MAP));
if (copy == 0 || mapp == 0)
failed("malloc");
mapp->next = 0;
* ttype now contains a pointer to the type of the terminal.
* If the first character is '?', ask the user.
*/
- if (ttype[0] == '?')
+ if (ttype[0] == '?') {
if (ttype[1] != '\0')
ttype = askuser(ttype + 1);
else
ttype = askuser(0);
-
+ }
/* Find the terminfo entry. If it doesn't exist, ask the user. */
- while ((rval = setupterm(ttype, STDOUT_FILENO, &errret)) != OK) {
+ while ((rval = setupterm((NCURSES_CONST char *)ttype, STDOUT_FILENO, &errret)) != OK) {
if (errret == 0) {
(void)fprintf(stderr, "tset: unknown terminal type %s\n",
ttype);
ttype = 0;
}
else {
- (void)fprintf(stderr, "tset: can't initialize terminal\
- type %s (error %d)\n", ttype, errret);
+ (void)fprintf(stderr, "tset: can't initialize terminal type %s (error %d)\n", ttype, errret);
ttype = 0;
}
ttype = askuser(ttype);
* Tell the user if a control key has been changed from the default value.
*/
static void
-report(const char *name, int which, u_int def)
+report(const char *name, int which, unsigned def)
{
#ifdef TERMIOS
- u_int older, newer;
+ unsigned older, newer;
char *p;
newer = mode.c_cc[which];
if (newer == 0177)
(void)fprintf(stderr, "delete.\n");
else if ((p = key_backspace) != 0
- && newer == (u_int)p[0]
+ && newer == (unsigned char)p[0]
&& p[1] == '\0')
(void)fprintf(stderr, "backspace.\n");
else if (newer < 040) {
ncurses/expanded.c \
ncurses/fallback.c \
ncurses/hashsize.h \
- ncurses/keys.tries \
+ ncurses/init_keytry.h \
ncurses/lib_gen.c \
ncurses/lib_keyname.c \
ncurses/names.c \
s%@NCURSES_MAJOR@%$NCURSES_MAJOR%g
s%@NCURSES_MINOR@%$NCURSES_MINOR%g
s%@NCURSES_PATCH@%$NCURSES_PATCH%g
+s%@NCURSES_CONST@%%g
+s%@NCURSES_XNAMES@%1%g
+s%@OSPEED_TYPE@%speed_t%g
+s%@OSPEED_INCLUDES@%#include <termios.h>%g
s%@cf_cv_rel_version@%$cf_cv_rel_version%g
s%@cf_cv_abi_version@%$cf_cv_abi_version%g
s%@cf_cv_builtin_bool@%1%g
s%@cf_cv_widec_shift@%8%g
s%@cf_cv_typeof_chtype@%long%g
s%@cf_cv_1UL@%1UL%g
+s%@cf_cv_cc_bool_type@%0%g
EOF
#define GCC_SCANF 1
#define GCC_UNUSED __attribute__((unused))
#define GOOD_SELECT 1
-#define HAVE_ISASCII 1
#define HAVE_BUILTIN_H 1
#define HAVE_DIRENT_H 1
+#define HAVE_ERRNO 1
#define HAVE_FCNTL_H 1
#define HAVE_FORM_H 1
#define HAVE_GETOPT_H 1
cat >> conftest.frag <<CEOF
#define HAVE_GETTIMEOFDAY 1
#define HAVE_GETTTYNAM 1
+#define HAVE_ISASCII 1
#define HAVE_LIBFORM 1
#define HAVE_LIBMENU 1
#define HAVE_LIBPANEL 1
#define HAVE_LONG_FILE_NAMES 1
#define HAVE_MEMCCPY 1
#define HAVE_MENU_H 1
+#define HAVE_NANOSLEEP 1
#define HAVE_NC_ALLOC_H 1
CEOF
cat >> conftest.frag <<CEOF
CEOF
cat >> conftest.frag <<CEOF
#define HAVE_STRDUP 1
+#define HAVE_SYMLINK 1
#define HAVE_SYS_IOCTL_H 1
#define HAVE_SYS_PARAM_H 1
#define HAVE_SYS_SELECT_H 1
cat >> conftest.frag <<CEOF
#define HAVE_TYPEINFO 1
#define HAVE_UNISTD_H 1
-#define HAVE_USLEEP 1
#define HAVE_VALUES_H 1
#define HAVE_VFSCANF 1
#define HAVE_VSNPRINTF 1
#define SYSTEM_NAME "linux-gnu"
#define TYPEOF_CHTYPE long
#define USE_DATABASE 1
+#define USE_HASHMAP 1
#define USE_SCROLL_HINTS 1
+#define USE_LINKS 1
+#define NCURSES_NO_PADDING 1
+#define USE_SIGWINCH 1
CEOF
cat >> conftest.edit <<CEOF
/@DEFS@/r conftest.frag
sh ${nc_given_srcdir}/progs/MKtermsort.sh "${NC_AWK}" ${nc_given_srcdir}/include/Caps > ncurses/termsort.c
echo creating ncurses/fallback.c
-sh ${nc_given_srcdir}/ncurses/MKfallback.sh > ncurses/fallback.c
+sh ${nc_given_srcdir}/ncurses/tinfo/MKfallback.sh > ncurses/fallback.c
echo creating ncurses/lib_gen.c
-sh ${nc_given_srcdir}/ncurses/MKlib_gen.sh "${NC_CPP}" "${NC_AWK}" < ncurses/curses.h > ncurses/lib_gen.c
+sh ${nc_given_srcdir}/ncurses/base/MKlib_gen.sh "${NC_CPP}" "${NC_AWK}" < ncurses/curses.h > ncurses/lib_gen.c
echo creating ncurses/nomacros.h
-sh ${nc_given_srcdir}/ncurses/MKlib_gen.sh "${NC_CPP}" "${NC_AWK}" < ncurses/curses.h | fgrep undef > ncurses/nomacros.h
+sh ${nc_given_srcdir}/ncurses/base/MKlib_gen.sh "${NC_CPP}" "${NC_AWK}" < ncurses/curses.h | fgrep undef > ncurses/nomacros.h
echo creating ncurses/expanded.c
-sh ${nc_given_srcdir}/ncurses/MKexpanded.sh "${NC_CPP}"
-mv expanded.c ncurses/expanded.c
+sh ${nc_given_srcdir}/ncurses/tty/MKexpanded.sh "${NC_CPP}" >ncurses/expanded.c
echo creating ncurses/comp_captab.c
-${NC_CC} -o make_hash -DMAIN_PROGRAM ${nc_given_srcdir}/ncurses/comp_hash.c
-sh ${nc_given_srcdir}/ncurses/MKcaptab.awk "${NC_AWK}" ${nc_given_srcdir}/include/Caps > ncurses/comp_captab.c
+${NC_CC} -o make_hash -DMAIN_PROGRAM ${nc_given_srcdir}/ncurses/tinfo/comp_hash.c
+sh ${nc_given_srcdir}/ncurses/tinfo/MKcaptab.awk "${NC_AWK}" ${nc_given_srcdir}/include/Caps > ncurses/comp_captab.c
rm -f make_hash
echo creating ncurses/lib_keyname.c
-${NC_AWK} -f ${nc_given_srcdir}/ncurses/MKkeyname.awk ${nc_given_srcdir}/ncurses/keys.list > ncurses/lib_keyname.c
+${NC_AWK} -f ${nc_given_srcdir}/ncurses/base/MKkeyname.awk ${nc_given_srcdir}/ncurses/tinfo/keys.list > ncurses/lib_keyname.c
echo creating ncurses/names.c and ncurses/codes.c
-${NC_AWK} -f ${nc_given_srcdir}/ncurses/MKnames.awk ${nc_given_srcdir}/include/Caps
+${NC_AWK} -f ${nc_given_srcdir}/ncurses/tinfo/MKnames.awk ${nc_given_srcdir}/include/Caps
cat namehdr boolnames boolfnames numnames numfnames strnames strfnames nameftr >ncurses/names.c
cat namehdr boolcodes numcodes strcodes codeftr > ncurses/codes.c
rm -f namehdr nameftr codeftr boolnames boolfnames boolcodes numnames numfnames numcodes strnames strfnames strcodes
-echo creating ncurses/keys.tries
-${NC_CC} -o make_key ${nc_given_srcdir}/ncurses/make_keys.c
-./make_key ${nc_given_srcdir}/ncurses/keys.list > ncurses/keys.tries
+echo creating ncurses/init_keytry.h
+${NC_CC} -o make_key ${nc_given_srcdir}/ncurses/tinfo/make_keys.c
+./make_key ${nc_given_srcdir}/ncurses/keys.list > ncurses/init_keytry.h
rm -f make_key
echo creating ncurses/unctrl.c
-echo | ${NC_AWK} -f ${nc_given_srcdir}/ncurses/MKunctrl.awk > ncurses/unctrl.c
+echo | ${NC_AWK} -f ${nc_given_srcdir}/ncurses/base/MKunctrl.awk > ncurses/unctrl.c
echo creating ncurses/terminfo.5
sh ${nc_given_srcdir}/man/MKterminfo.sh ${nc_given_srcdir}/man/terminfo.head ${nc_given_srcdir}/include/Caps ${nc_given_srcdir}/man/terminfo.tail > ncurses/terminfo.5
$MKDIRS $mandir/man$section
fi
source=`basename $i`
- target=`grep "^$source" man/man_db.renames | mawk '{print $2}'`
+ target=`grep "^$source" man/man_db.renames | awk '{print $2}'`
if test -z "$target" ; then
echo '? missing rename for '$source
target="$source"
--- /dev/null
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+ 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Library General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+\f
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+\f
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+\f
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+\f
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+\f
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) 19yy <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) 19yy name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Library General
+Public License instead of this License.
--- /dev/null
+
+Current history:
+
+1999/05/16 Minor fix to build/link on CLIX
+1999/05/09 Update to build/link on NeXT
+1999/04/17 Update to work with ncurses 5.0 beta1 (TERMTYPE struct)
+1999/02/07 Build with ncurses 4.2 981219 (renamed function)
+1998/01/09 1.00 First release under GPL
+1997/12/24 0.02 First version that requires ncurses
+1997/10/29 0.01 Second beta release to the ncurses mailing list.
+1997/10/06 0.00 First beta release to the ncurses mailing list.
+
+Ancient history: TACK -- the terminfo action checker
+
+ The purpose of this program is to verify the correctness of
+terminfos and to calculate the pads needed for each capability.
+This program is not designed to test curses and therefore uses
+as little of curses as possible.
+
+ This program was originally called TED. In 1991 it was
+released to USENET in comp.sources. TED was originally written to
+test both terminfos and termcaps. The original intent was to
+create a terminfo editor. This code fell quite short of its goal.
+Tests were controled by command line switches and editing was done
+with pen and paper.
+
+ In 1995 Eric S. Raymond got interested in the program and added
+a first cut at making the program menu driven. He also converted
+the code from K&R C to an ANSI/POSIX-conforming C. He re-christened
+the program TAC (Terminfo Action Checker). Eric also wrote a man
+page for TAC.
+
+ In 1997 I decided to dust off the code and make it easier to
+use by the novice. I totally rewrote the menu system and added
+the editing features I originally planned for TED. I also did
+a total rewrite of the code that does the timings. In the process
+of rewriting the code I changed it to be more tightly coupled
+with ncurses. By this time someone had taken the name TAC so
+I re-christened the program TACK.
+
+Daniel Weaver
+<danw@znyx.com>
-# $Id: Makefile.in,v 1.6 1998/02/11 12:14:03 tom Exp $
-##############################################################################
-# Copyright (c) 1998 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: Makefile.in,v 1.9 1999/09/18 23:33:48 tom Exp $
+# Makefile for tack
#
-# Author: Thomas E. Dickey <dickey@clark.net> 1997
+# The variable 'srcdir' refers to the source-distribution, and can be set with
+# the configure script by "--srcdir=DIR".
#
-# Makefile for terminfo/termcap test program
-#
-# The following pre-processor variables may be set.
-#
-# SELECT Use this define if your operating system has the select
-# system call.
-#
-# WAIT_MODE Use this define if your operating system cannot tell if
-# a chracter is ready in the input queue. Funtion keys
-# must be padded with blanks.
-#
-# If generated without pre-processor variables, a terminfo test
-# program will be generated for System V Release 3.
+# The rules are organized to produce the libraries for the configured models,
+# and the programs with the configured default model.
# turn off _all_ suffix rules; we'll generate our own
.SUFFIXES:
SHELL = /bin/sh
THIS = Makefile
+CF_MFLAGS = @cf_cv_makeflags@
+@SET_MAKE@
+x = @PROG_EXT@
+
MODEL = ../@DFT_OBJ_SUBDIR@
INSTALL_PREFIX = @INSTALL_PREFIX@
srcdir = @srcdir@
exec_prefix = @exec_prefix@
bindir = @bindir@
libdir = @libdir@
+includedir = @includedir@
+datadir = @datadir@
+
+ticdir = $(datadir)/terminfo
INSTALL = @INSTALL@
INSTALL_PROGRAM = @INSTALL_PROGRAM@
+AWK = @AWK@
+LN_S = @LN_S@
+
CC = @CC@
CFLAGS = @CFLAGS@
INCDIR = $(srcdir)/../include
-CPPFLAGS = -I../tack -I$(srcdir) @CPPFLAGS@ \
- -DHAVE_CONFIG_H -DSELECT
+CPPFLAGS = -DHAVE_CONFIG_H -I../tack -I$(srcdir) @CPPFLAGS@
CCFLAGS = $(CPPFLAGS) $(CFLAGS)
LD = @LD@
LINK = $(CC)
LDFLAGS = @EXTRA_LDFLAGS@ \
- -L../lib \
- -L$(libdir) \
- -lncurses@DFT_ARG_SUFFIX@ @LDFLAGS@ @LD_MODEL@ @LIBS@ @EXTRA_LIBS@
+ @PROG_ARGS@ @LDFLAGS@ @LD_MODEL@ @LIBS@ @EXTRA_LIBS@
LDFLAGS_NORMAL = $(LDFLAGS)
LDFLAGS_DEBUG = $(LDFLAGS) @CC_G_OPT@
LDFLAGS_PROFILE = $(LDFLAGS) -pg
-LDFLAGS_SHARED = $(LDFLAGS) @CC_SHARED_OPTS@ @LD_SHARED_OPTS@
+LDFLAGS_SHARED = $(LDFLAGS) @CC_SHARED_OPTS@ # @LD_SHARED_OPTS@
LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@)
LINT_OPTS = @LINT_OPTS@
LINT_LIBS = -lncurses @LIBS@
-# This would be $(SHARED_OBJS), but make cannot handle this much forward ref.
-TACK_DEPS = \
+PROGS = tack$x
+
+# Default library, for linking applications
+DEPS_CURSES = ../lib/libncurses@DFT_DEP_SUFFIX@
+
+################################################################################
+all: $(PROGS)
+
+sources:
+
+install: install.tack
+uninstall: uninstall.tack
+
+# this line simplifies the configure-script
+install.libs:
+uninstall.libs:
+
+install.tack: $(PROGS) $(INSTALL_PREFIX)$(bindir)
+ $(INSTALL_PROGRAM) tack$x $(INSTALL_PREFIX)$(bindir)/tack$x
+
+uninstall.tack:
+ -@rm -f $(INSTALL_PREFIX)$(bindir)/tack$x
+
+$(INSTALL_PREFIX)$(bindir) :
+ $(srcdir)/../mkinstalldirs $@
+
+#
+# Rules for building tack
+#
+
+DEPS_TACK = \
$(MODEL)/ansi.o \
$(MODEL)/charset.o \
$(MODEL)/color.o \
$(MODEL)/sysdep.o \
$(MODEL)/tack.o
-TARGET = tack
-
-all: $(TACK_DEPS) $(TARGET)
-
-sources:
+tack$x: $(DEPS_TACK) $(DEPS_CURSES)
+ @ECHO_LINK@ $(LINK) $(DEPS_TACK) $(LDFLAGS_DEFAULT) -o $@
-$(TARGET): $(TACK_DEPS)
- @ echo linking $@ ... ; $(LINK) $(TACK_DEPS) $(LDFLAGS_DEFAULT) -o $@
+#
+# Utility productions start here
+#
-$(TACK_DEPS): $(srcdir)/tack.h
+tags:
+ ctags *.[ch]
-lint:
- lint $(C_SRC)
+TAGS:
+ etags *.[ch]
-mostlyclean :
- -rm -f core tags TAGS *~ *.ln *.atac trace
-
-clean :: mostlyclean
- rm -f $(TACK_DEPS) $(TARGET) tack.tar tack.tar.gz
+clean ::
+ -rm -f tags TAGS do.tic *~
+ -rm -f $(PROGS)
distclean :: clean
-rm -f Makefile
-realclean : distclean
-
-# vi tags
-tags: $(C_SRC) $(DIR)/tack.h
- ctags $(>)
+mostlyclean :: clean
-# emacs tags
-TAGS: $(C_SRC)
- etags $(C_SRC)
+realclean :: distclean
-install: $(TARGET)
- $(INSTALL_PROGRAM) $(TARGET) $(INSTALL_PREFIX)$(bindir)/$(TARGET)
+tack.tar: Makefile.in modules *.[ch] tack.1 HISTORY COPYING
+ tar -cvf tack.tar Makefile.in modules *.[ch] tack.1 HISTORY COPYING
-list: $(srcdir)/tack.h $(C_SRC)
- for name in $(>) ; \
- do \
- ucb cat -n $$name | ucb pr -h "$$name" | ucb lpr ; \
- done
+# These rules are used to allow "make -n" to work on a clean directory-tree
+../include/hashsize.h \
+../include/parametrized.h \
+../include/term.h :
+ cd ../include; $(MAKE) $(CF_MFLAGS)
-# archive a backup copy
-arch: $(srcdir)/Makefile $(srcdir)/tack.h $(C_SRC)
- rm -f tack.a
- ar q tack.a $(>)
+$(DEPS_CURSES) :
+ cd ../ncurses; $(MAKE) $(CF_MFLAGS)
-tack.tar.gz: tack.tar
- gzip tack.tar
+lint:
+ $(LINT) $(LINT_OPTS) $(CPPFLAGS) $(srcdir)/clear.c $(LINT_LIBS)
-tack.tar: makefile *.[ch] tack.1 HISTORY
- tar -cvf tack.tar makefile *.[ch] tack.1 HISTORY
+###############################################################################
+# The remainder of this file is automatically generated during configuration
+###############################################################################
--- /dev/null
+-- $Id: README,v 1.1 1999/04/18 01:41:31 tom Exp $
+
+The 'tack' program is distributed with ncurses, but is not an integral
+part of ncurses (the two are licensed differently, and the tack directory
+may be removed without causing ncurses to configure or build properly).
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: ansi.c,v 1.2 1999/08/21 23:11:57 tom Exp $")
+
+/*
+ * Standalone tests for ANSI terminals. Three entry points:
+ * test_ansi_graphics(), test_ansi_reports() and test_ansi_sgr().
+ */
+
+/*****************************************************************************
+ *
+ * Test ANSI status reports
+ *
+ *****************************************************************************/
+
+/* ASCII control characters */
+#define A_DC1 0x11 /* Control Q */
+#define A_DC3 0x13 /* Control S */
+#define A_ESC 0x1b
+#define A_DCS 0x90
+#define A_CSI 0x9b
+#define A_ST 0x9c
+
+#define MAX_MODES 256
+
+static char default_bank[] = "\033(B\017";
+static int private_use, ape, terminal_class, got_escape;
+static short ansi_value[256];
+static char ansi_buf[512], pack_buf[512];
+static char *ach, *pch;
+
+struct ansi_reports {
+ int lvl, final;
+ const char *text;
+ const char *request;
+};
+
+static struct ansi_reports report_list[] = {
+ {0, 'c', "(DA) Primary device attributes", "\033[0c"},
+ {1, 0, "(DSR) Terminal status", "\033[5n"},
+ {1, 'R', "(DSR) Cursor position", "\033[6n"},
+ {62, 0, "(DA) Secondary device attributes", "\033[>0c"},
+ {62, 0, "(DSR) Printer status", "\033[?15n"},
+ {62, 0, "(DSR) Function key definition", "\033[?25n"},
+ {62, 0, "(DSR) Keyboard language", "\033[?26n"},
+ {63, 0, "(DECRQSS) Data destination", "\033P$q$}\033\\"},
+ {63, 0, "(DECRQSS) Status line type", "\033P$q$~\033\\"},
+ {63, 0, "(DECRQSS) Erase attribute", "\033P$q\"q\033\\"},
+ {63, 0, "(DECRQSS) Personality", "\033P$q\"p\033\\"},
+ {63, 0, "(DECRQSS) Top and bottom margins", "\033P$qr\033\\"},
+ {63, 0, "(DECRQSS) Character attributes", "\033P$qm\033\\"},
+ {63, 0, "(DECRQSS) Illegal request", "\033P$q@\033\\"},
+ {63, 0, "(DECRQUPSS) User pref suplemental set", "\033[&u"},
+ {63, 0, "(DECRQPSR) Cursor information", "\033[1$w"},
+ {63, 0, "(DECRQPSR) Tab stop information", "\033[2$w"},
+ {64, 0, "(DA) Tertiary device attributes", "\033[=0c"},
+ {64, 0, "(DSR) Extended cursor position", "\033[?6n"},
+ {64, 0, "(DSR) Macro space", "\033[?62n"},
+ {64, 0, "(DSR) Memory checksum", "\033[?63n"},
+ {64, 0, "(DSR) Data integrity", "\033[?75n"},
+ {64, 0, "(DSR) Multiple session status", "\033[?85n"},
+ {64, 0, "(DECRQSS) Attribute change extent", "\033P$q*x\033\\"},
+ {64, 0, "(DECRQSS) Columns per page", "\033P$q$|\033\\"},
+ {64, 0, "(DECRQSS) Lines per page", "\033P$qt\033\\"},
+ {64, 0, "(DECRQSS) Lines per screen", "\033P$q*|\033\\"},
+ {64, 0, "(DECRQSS) Left and right margins", "\033P$qs\033\\"},
+ {64, 0, "(DECRQSS) Local functions", "\033P$q+q\033\\"},
+ {64, 0, "(DECRQSS) Local function key control", "\033P$q=}\033\\"},
+ {64, 0, "(DECRQSS) Select modifier key reporting", "\033P$q+r\033\\"},
+ {64, 0, "(DECRQDE) Window report", "\033[\"v"},
+ {0, 0, 0, 0}
+};
+
+struct request_control {
+ const char *text;
+ const char *expect;
+ const char *request;
+ const char *set_mode;
+ const char *reset_mode;
+};
+
+/* Request control function selection or setting */
+static const struct request_control rqss[] = {
+ {"Data sent to screen", "0", "$}", "\033[0$}", 0},
+ {"Data sent to disabled status line", "0", "$}", 0, 0},
+ {"\033[0$~\033[1$}", "\033[0$}", 0, 0, 0},
+ {"Data sent to enabled status line", "1", "$}", 0, 0},
+ {"\033[2$~\033[1$}", "\033[0$}", 0, 0, 0},
+ {"Disbale status line", "0", "$~", "\033[0$~", 0},
+ {"Top status line", "1", "$~", "\033[1$~", 0},
+ {"Bottom status line", "2", "$~", "\033[2$~", 0},
+ {"Eraseable character", "0", "\"q", "\033[0\"q", 0},
+ {"Noneraseable character", "1", "\"q", "\033[1\"q", "\033[0\"q"},
+ {"Top and bottom margins", "3;10", "r", "\0337\033[3;10r", 0},
+ {"\033[r\0338", 0, 0, 0, 0},
+ {"Top and bottom margins", "default", "r", "\0337\033[r", "\0338"},
+ {"Character attributes, dim, bold", "1", "m", "\033[2;1m", "\033[m"},
+ {"Character attributes, bold, dim", "2", "m", "\033[1;2m", "\033[m"},
+ {"Character attributes, under, rev", "4;7", "m", "\033[4;7m", "\033[m"},
+ {"Character attributes, color", "35;42", "m", "\033[35;42m", "\033[m"},
+ {"All character attributes", "", "m", "\033[1;2;3;4;5;6;7;8;9m", 0},
+ {"\033[m", 0, 0, 0, 0},
+ {0, 0, 0, 0, 0}
+};
+
+/*
+** pack_ansi()
+**
+** read and pack an ANSI character
+*/
+static int
+pack_ansi(void)
+{
+ int ch;
+
+ if (*pch)
+ return *pch++;
+
+ while (1) {
+ ch = getchp(char_mask);
+ if (ch == EOF)
+ return EOF;
+ if (ch == A_DC1 || ch == A_DC3)
+ continue;
+ *ach++ = ch;
+ *ach = '\0';
+ if (got_escape && ch >= ' ') {
+ got_escape = 0;
+ if (ch < '@' || ch > '_') {
+ *pch++ = A_ESC;
+ *pch = ch;
+ pch[1] = '\0';
+ return A_ESC;
+ }
+ ch += 0x40;
+ break;
+ } else if (ch == A_ESC) {
+ got_escape = 1;
+ } else {
+ break;
+ }
+ }
+ *pch++ = ch;
+ *pch = '\0';
+ return ch;
+}
+
+
+/*
+** read_ansi()
+**
+** read an ANSI status report from terminal
+*/
+static void
+read_ansi(void)
+{
+ int ch;
+
+ fflush(stdout);
+ ach = ansi_buf;
+ pch = pack_buf;
+ ansi_buf[0] = pack_buf[0] = '\0';
+ got_escape = 0;
+ ch = pack_ansi();
+ if (ch == A_ESC)
+ do {
+ ch = pack_ansi();
+ if (ch == EOF)
+ return;
+ } while (ch < '0' || ch > '~');
+ else
+ if (ch == A_CSI)
+ do {
+ ch = pack_ansi();
+ if (ch == EOF)
+ return;
+ } while (ch < '@' || ch > '~');
+ else
+ if (ch == A_DCS)
+ do {
+ ch = pack_ansi();
+ if (ch == EOF)
+ return;
+ } while (ch != A_ST);
+ return;
+}
+
+/*
+** valid_mode(expected)
+**
+** read a terminal mode status report and parse the result
+** Return TRUE if we got the expected terminating character.
+*/
+static int
+valid_mode(int expected)
+{
+ char *s;
+ int ch, terminator;
+
+ read_ansi();
+
+ ape = 0;
+ ch = pack_buf[0] & 0xff;
+ ansi_value[0] = 0;
+ if (ch != A_CSI && ch != A_DCS)
+ return FALSE;
+
+ s = pack_buf + 1;
+ private_use = 0;
+ if ((*s >= '<') & (*s <= '?')) {
+ private_use = *s++;
+ }
+ terminator = 0;
+ for (; (ch = *s); s++) {
+ if (ch >= '0' && ch <= '9')
+ ansi_value[ape] = ansi_value[ape] * 10 + ch - '0';
+ else if (ch == ';' || ch == ':')
+ ansi_value[++ape] = 0;
+ else if (ch >= '<' && ch <= '?')
+ private_use = ch;
+ else if (ch >= ' ')
+ terminator = (terminator << 8) | ch;
+ else
+ break;
+ }
+ return terminator == expected;
+}
+
+/*
+** read_reports()
+**
+** read all the reports in the ANSI report structure
+*/
+static int
+read_reports(void)
+{
+ int i, j, k, tc, vcr, lc;
+ char *s;
+
+ lc = 5;
+ terminal_class = tc = 0;
+ for (i = 0; report_list[i].text; i++, lc++) {
+ if (terminal_class < report_list[i].lvl &&
+ tc < report_list[i].lvl) {
+ put_crlf();
+ menu_prompt();
+ ptext(" <return> to continue > ");
+ j = wait_here();
+ if (j != 'c' && j != 'C')
+ return j;
+ tc = report_list[i].lvl;
+ } else if (lc + 2 >= lines) {
+ put_crlf();
+ ptext("Hit any key to continue ");
+ (void) wait_here();
+ lc = 1;
+ }
+ sprintf(temp, "%s (%s) ", report_list[i].text,
+ expand_command(report_list[i].request));
+ ptext(temp);
+ for (j = strlen(temp); j < 49; j++)
+ putchp(' ');
+ tc_putp(report_list[i].request);
+ vcr = 0;
+ if (report_list[i].final == 0) {
+ read_ansi();
+ } else if (valid_mode(report_list[i].final))
+ switch (report_list[i].final) {
+ case 'c':
+ terminal_class = ansi_value[0];
+ break;
+ case 'R':
+ vcr = TRUE;
+ break;
+ }
+ j = pack_buf[0] & 0xff;
+ if (j == A_CSI || j == A_DCS) {
+ s = expand(ansi_buf);
+ if (char_count + expand_chars >= columns) {
+ put_str("\r\n ");
+ lc++;
+ }
+ put_str(s);
+ }
+ put_crlf();
+ if (vcr) { /* find out how big the screen is */
+ tc_putp(report_list[i].request);
+ if (!valid_mode('R'))
+ continue;
+ j = ansi_value[0];
+ k = ansi_value[1];
+ tc_putp("\033[255B\033[255C\033[6n");
+ if (!valid_mode('R'))
+ continue;
+ sprintf(temp, "\033[%d;%dH", j, k);
+ tc_putp(temp);
+ ptext("(DSR) Screen size (CSI 6 n)");
+ for (j = char_count; j < 50; j++)
+ putchp(' ');
+ sprintf(temp, "%d x %d", ansi_value[1], ansi_value[0]);
+ ptextln(temp);
+
+ }
+ }
+ menu_prompt();
+ ptext(" r->repeat test, <return> to continue > ");
+ return wait_here();
+}
+
+/*
+** request_cfss()
+**
+** Request Control function selection or settings
+*/
+static int
+request_cfss(void)
+{
+ int i, j, k, l, ch;
+ char *s;
+
+ put_clear();
+ ptextln("Request Expected Received");
+ put_crlf();
+ for (i = 0; rqss[i].text; i++) {
+ ptext(rqss[i].text);
+ j = strlen(rqss[i].text) + strlen(rqss[i].expect);
+ putchp(' ');
+ for (j++; j < 40; j++)
+ putchp(' ');
+ ptext(rqss[i].expect);
+ putchp(' ');
+ tc_putp(rqss[i].set_mode);
+ sprintf(temp, "\033P$q%s\033\\", rqss[i].request);
+ tc_putp(temp);
+ read_ansi();
+ tc_putp(rqss[i].reset_mode);
+ putchp(' ');
+ for (j = 0; ansi_buf[j]; j++) {
+ if (ansi_buf[j] == 'r') {
+ for (k = j++; (ch = (ansi_buf[k] & 0xff)); k++)
+ if (ch == A_ESC) {
+ break;
+ } else if (ch == A_ST) {
+ break;
+ }
+ ansi_buf[k] = '\0';
+ s = expand(&ansi_buf[j]);
+ if (char_count + expand_chars >= columns)
+ put_str("\r\n ");
+ put_str(s);
+ }
+ }
+ put_crlf();
+ }
+ /* calculate the valid attributes */
+ ptext("Valid attributes: 0");
+ j = 0;
+ for (i = 1; i < 20; i++) {
+ sprintf(temp, "\033[0;%dm\033P$qm\033\\", i);
+ tc_putp(temp);
+ (void) valid_mode('m');
+ if (ape > 0) {
+ j = i;
+ sprintf(temp, "\033[0m; %d", i);
+ tc_putp(temp);
+ }
+ }
+ put_crlf();
+ /* calculate how many parameters can be sent */
+ ptext("Max number of parameters: ");
+ sprintf(temp, "%dm\033P$qm\033\\", j);
+ l = -1;
+ if (j > 0)
+ for (l = 1; l < 33; l++) {
+ tc_putp("\033[0");
+ for (ch = 1; ch <= l; ch++)
+ put_this(';');
+ tc_putp(temp);
+ (void) valid_mode('m');
+ if (ape == 0)
+ break;
+ }
+ tc_putp("\033[m");
+ if (l >= 0) {
+ sprintf(temp, "%d", l);
+ ptext(temp);
+ } else
+ ptext("unknown");
+ put_crlf();
+ return wait_here();
+}
+
+/*
+** mode_display(puc, mode, initial, set, reset)
+**
+** print the mode display entry
+*/
+static void
+mode_display(const char *p, int n, int c, char s, char r)
+{
+ int k;
+
+ sprintf(temp, "%s%d (%c, %c, %c)", p, n, c, s, r);
+ k = strlen(temp);
+ if (char_count + k >= columns)
+ put_crlf();
+ for (; k < 14; k++)
+ putchp(' ');
+ put_str(temp);
+}
+
+/*
+** terminal_state()
+**
+** test DECRQM status reports
+*/
+static void
+terminal_state(void)
+{
+ static const char *puc[] = {"", "<", "=", ">", "?", 0};
+
+ int i, j, k, l, modes_found;
+ char *s;
+ char buf[256], tms[256];
+ int mode_puc[MAX_MODES], mode_number[MAX_MODES];
+ char set_value[MAX_MODES], reset_value[MAX_MODES];
+ char current_value[MAX_MODES];
+
+ ptext("Testing terminal mode status. (CSI 0 $ p)");
+ tc_putp("\033[0$p");
+ modes_found = 0;
+ tms[0] = '\0';
+ if (valid_mode(('$' << 8) | 'y')) {
+ for (i = 0; puc[i]; i++) {
+ put_crlf();
+ if (i) {
+ sprintf(temp, "Private use: %c", puc[i][0]);
+ } else {
+ strcpy(temp, "Standard modes:");
+ }
+ k = strlen(temp);
+ ptext(temp);
+ for (j = 0; j < (int) sizeof(buf); buf[j++] = ' ')
+ ;
+ for (j = l = 0; j < 255 && j - l < 50; j++) {
+ sprintf(temp, "\033[%s%d$p", puc[i], j);
+ tc_putp(temp);
+ if (!valid_mode(('$' << 8) | 'y')) {
+ /* not valid, save terminating value */
+ s = expand(ansi_buf);
+ sprintf(tms, "%s%s%d %s ", tms,
+ puc[i], j, s);
+ break;
+ }
+ if (private_use != puc[i][0])
+ break;
+ if (ansi_value[0] != j)
+ break;
+ if (ansi_value[1]) {
+ l = j;
+ if (k > 70) {
+ buf[k] = '\0';
+ put_crlf();
+ ptextln(buf);
+ for (k = 0; k < (int) sizeof(buf);) {
+ buf[k++] = ' ';
+ }
+ k = 0;
+ }
+ sprintf(temp, " %d", j);
+ ptext(temp);
+ k += strlen(temp);
+ buf[k - 1] = ansi_value[1] + '0';
+ if (modes_found >= MAX_MODES)
+ continue;
+ current_value[modes_found] =
+ ansi_value[1] + '0';
+ /* some modes never return */
+ if ((i == 0 && j == 13) /* control execution */
+ || (puc[i][0] == '?' && j == 2)) /* VT52 */
+ set_value[modes_found] =
+ reset_value[modes_found] = '-';
+ else
+ set_value[modes_found] =
+ reset_value[modes_found] = ' ';
+ mode_puc[modes_found] = i;
+ mode_number[modes_found++] = j;
+ }
+ }
+ buf[k] = '\0';
+ if (buf[k - 1] != ' ') {
+ put_crlf();
+ ptext(buf);
+ }
+ }
+
+ if ((i = modes_found) != 0) {
+ put_crlf();
+ put_crlf();
+ if (tms[0]) {
+ ptextln(tms);
+ }
+ ptext("Hit 'Y' to test mode set/reset states: ");
+ i = wait_here();
+ }
+ if (i == 'y' || i == 'Y')
+ while (1) {
+#ifdef STATUSFIX
+ FILE *fp;
+
+#ifdef TEDANSI
+ fp = fopen("ted.ansi", "w");
+#else
+ fp = fopen("/dev/console", "w");
+#endif
+#endif
+ for (i = j = 0; j < modes_found; j = ++i >> 1) {
+ if (set_value[j] == '-')
+ continue;
+ k = (current_value[j] ^ i) & 1;
+ sprintf(temp, "\033[%s%d%c\033[%s%d$p",
+ puc[mode_puc[j]], mode_number[j],
+ k ? 'l' : 'h',
+ puc[mode_puc[j]], mode_number[j]);
+#ifdef STATUSFIX
+ if (fp) {
+ fprintf(fp, "%s\n", expand(temp));
+ fflush(fp);
+ }
+#endif
+ tc_putp(temp);
+ if (!valid_mode(('$' << 8) | 'y'))
+ continue;
+ if (k) {
+ reset_value[j] = ansi_value[1] + '0';
+ } else {
+ set_value[j] = ansi_value[1] + '0';
+ }
+ }
+ put_str("\033[30l"); /* added for GORT bug
+ (WY-185) */
+#ifdef STATUSFIX
+ if (fp)
+ fclose(fp);
+#endif
+ tty_set();
+ /* print the results */
+ put_clear();
+ putln("mode (initial, set, reset)");
+ for (j = 0; j < modes_found; j++) {
+ mode_display(puc[mode_puc[j]], mode_number[j],
+ current_value[j], set_value[j], reset_value[j]);
+ }
+ ptext("\n\nHit 'R' to repeat test. 'S' to sort results: ");
+ i = wait_here();
+ if (i == 's' || i == 'S') { /* print the same stuff,
+ sorted by
+ current_value */
+ put_crlf();
+ for (i = '1'; i <= '4'; i++) {
+ for (j = 0; j < modes_found; j++) {
+ if (current_value[j] == i)
+ mode_display(puc[mode_puc[j]],
+ mode_number[j], current_value[j],
+ set_value[j], reset_value[j]);
+ }
+ }
+ ptext("\n\nHit 'R' to repeat test: ");
+ i = wait_here();
+ }
+ if (i != 'r' && i != 'R')
+ break;
+ tty_raw(1, char_mask);
+ }
+ } else {
+ tty_set();
+ }
+}
+
+
+/*
+** ansi_report_help()
+**
+** Display the informational data for the ANSI report test.
+*/
+static void
+ansi_report_help(void)
+{
+ ptext("Begin ANSI status report testing. ");
+ ptext(" Parity bit set will be displayed in reverse video. ");
+ ptext(" If the terminal hangs, hit any alphabetic key. ");
+ ptextln(" Use c to continue testing. Use any other letter to quit.");
+ put_crlf();
+}
+
+/*
+** test_ansi_reports()
+**
+** Test the ANSI status report functions
+*/
+void
+tools_status(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ int i;
+
+ put_clear();
+ ansi_report_help();
+ tty_raw(1, char_mask);
+
+ do {
+ i = read_reports();
+ if (i != 'r' && i != 'R') {
+ *ch = i;
+ return;
+ }
+ } while (i);
+
+ if (terminal_class >= 63) {
+ do {
+ i = request_cfss();
+ } while (i == 'r' || i == 'R');
+ *ch = i;
+ terminal_state();
+ } else {
+ tty_set();
+ }
+}
+
+
+/*
+** display_sgr()
+**
+** Test a range of ANSI sgr attributes
+** puc -> Private Use Character
+*/
+static void
+display_sgr(int puc)
+{
+ int k;
+
+ temp[0] = puc;
+ temp[1] = '\0';
+ for (k = 0; k < 80; k++) {
+ if (char_count + 8 > 80)
+ put_crlf();
+ else if (char_count + 8 > columns)
+ put_crlf();
+ else if (k > 0)
+ printf(" ");
+ printf("\033[%s%dmMode %2d\033[0m", temp, k, k);
+ char_count += 8;
+ if (puc == '\0') {
+ if (k == 19)
+ printf("\033[10m");
+ if (k == 39)
+ printf("\033[37m");
+ if (k == 49)
+ printf("\033[40m");
+ }
+ }
+ put_crlf();
+ if (puc == '<')
+ printf("\033[<1m");
+ else if (puc)
+ printf("\033[%s0m", temp);
+ set_attr(0);
+}
+
+/*
+** print_sgr20(on, off)
+**
+** print the sgr line for sgr20()
+*/
+static void
+print_sgr20(int on, int off)
+{
+ if (char_count > columns - 13) {
+ put_crlf();
+ } else if (char_count) {
+ put_str(" ");
+ }
+ char_count += 11;
+ printf("%d/%d \033[%dmon\033[%dm off\033[0m", on, off, on, off);
+}
+
+/*
+** sgr20(void)
+**
+** display the enter/exit attributes 1-9 and 20-29
+*/
+static void
+sgr20(void)
+{
+ int k;
+
+ put_crlf();
+ ptextln("Test enter/exit attributes 1-9 and 21-29.");
+ for (k = 1; k < 10; k++) {
+ print_sgr20(k, k + 20);
+ }
+ print_sgr20(1, 22); /* bold */
+ print_sgr20(2, 22); /* dim */
+ print_sgr20(8, 22); /* blank */
+ printf("\033[0m");
+ set_attr(0);
+}
+
+/*
+** tools_sgr(testlist, state, ch)
+**
+** Run the ANSI graphics rendition mode tool
+** Return the last character typed.
+*/
+void
+tools_sgr(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ int k;
+
+ put_clear();
+ for (k = 0;;) {
+ display_sgr(k);
+ put_crlf();
+ menu_prompt();
+ ptext("/sgr Enter =><?r [<cr>] > ");
+ k = wait_here();
+ if ((k == 'r') || (k == 'R')) {
+ k = 0;
+ } else if ((k < '<') || (k > '?')) {
+ break;
+ }
+ }
+ sgr20();
+
+ put_newlines(2);
+ *ch = REQUEST_PROMPT;
+}
+
+/*****************************************************************************
+ *
+ * Test ANSI graphics
+ *
+ *****************************************************************************/
+/*
+** select_bank(bank)
+**
+** select a graphics character set for ANSI terminals
+*/
+static void
+select_bank(char *bank)
+{
+ tc_putp(bank);
+ switch (bank[1] & 3) {
+ case 0:
+ putchp('O' & 0x1f); /* control O */
+ break;
+ case 1:
+ putchp('N' & 0x1f); /* control N */
+ tc_putp("\033~");
+ break;
+ case 2:
+ tc_putp("\033n\033}");
+ break;
+ case 3:
+ tc_putp("\033o\033|");
+ break;
+ }
+}
+
+/*
+** show_characters(bank, bias)
+**
+** print the ANSI graphics characters
+*/
+static void
+show_characters(char *bank, int bias)
+{
+ int i;
+
+ sprintf(temp, "G%d GL ", bank[1] & 3);
+ ptext(temp);
+ select_bank(bank);
+ for (i = ' '; i < 0x80; i++) {
+ if (char_count >= columns ||
+ (i != ' ' && (i & 31) == 0))
+ put_str("\n ");
+ putchp(i + bias);
+ }
+ select_bank(default_bank);
+ put_str(" DEL <");
+ select_bank(bank);
+ putchp(0x7f + bias);
+ select_bank(default_bank);
+ putchp('>');
+ put_crlf();
+ put_crlf();
+}
+
+
+/* ANSI graphics test
+ 94 96 character sets
+ G0 ( ,
+ G1 ) -
+ G2 * .
+ G3 + /
+
+Standard Definitions
+ A UK
+ B US ASCII
+
+Dec extended definitions
+ 0 Special graphics
+
+ */
+
+/*
+** tools_charset(testlist, state, ch)
+**
+** Run the ANSI alt-charset mode tool
+*/
+void
+tools_charset(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *chp GCC_UNUSED)
+{
+ int j, ch;
+ char bank[32];
+
+ put_clear();
+ ptext("Enter the bank ()*+,-./ followed by the character set");
+ ptext(" 0123456789:;<=>? for private use, and");
+ ptextln(" @A...Z[\\]^_`a...z{|}~ for standard sets.");
+ strcpy(bank, "\033)0");
+ for (; bank[0];) {
+ put_crlf();
+ show_characters(bank, 0);
+
+ /* G0 will not print in GR */
+ if (bank[1] & 3) {
+ show_characters(bank, 0x80);
+ }
+ ptext("bank+set> ");
+ for (j = 1; (ch = getchp(char_mask)); j++) {
+ if (ch == EOF)
+ break;
+ putchp(ch);
+ if (j == 1 && ch > '/')
+ j++;
+ bank[j] = ch;
+ if (ch < ' ' || ch > '/')
+ break;
+ if (j + 1 >= (int) sizeof(bank))
+ break;
+ }
+ if (j == 1)
+ break;
+ if (bank[j] < '0' || bank[j] > '~')
+ break;
+ bank[j + 1] = '\0';
+ }
+ put_crlf();
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: charset.c,v 1.2 1999/05/09 18:30:49 tom Exp $")
+
+/*
+ Menu definitions for alternate character set and SGR tests.
+*/
+
+static void charset_bel(struct test_list *t, int *state, int *ch);
+static void charset_flash(struct test_list *t, int *state, int *ch);
+static void charset_civis(struct test_list *t, int *state, int *ch);
+static void charset_cvvis(struct test_list *t, int *state, int *ch);
+static void charset_cnorm(struct test_list *t, int *state, int *ch);
+static void charset_hs(struct test_list *t, int *state, int *ch);
+static void charset_status(struct test_list *t, int *state, int *ch);
+static void charset_dsl(struct test_list *t, int *state, int *ch);
+static void charset_enacs(struct test_list *t, int *state, int *ch);
+static void charset_smacs(struct test_list *t, int *state, int *ch);
+static void charset_attributes(struct test_list *t, int *state, int *ch);
+static void charset_sgr(struct test_list *t, int *state, int *ch);
+
+const struct test_list acs_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {MENU_NEXT, 3, "bel", 0, 0, charset_bel, 0},
+ {MENU_NEXT, 3, "flash", 0, 0, charset_flash, 0},
+ {MENU_NEXT, 3, "civis", 0, 0, charset_civis, 0},
+ {MENU_NEXT, 3, "cvvis", 0, 0, charset_cvvis, 0},
+ {MENU_NEXT, 3, "cnorm", 0, 0, charset_cnorm, 0},
+ {MENU_NEXT, 3, "hs", 0, 0, charset_hs, 0},
+ {MENU_NEXT, 3, "tsl) (fsl) (wsl", "hs", 0, charset_status, 0},
+ {MENU_NEXT, 3, "dsl", "hs", 0, charset_dsl, 0},
+ {MENU_NEXT, 0, "acsc) (enacs) (smacs) (rmacs", 0, 0, charset_enacs, 0},
+ {MENU_NEXT, 0, "smacs) (rmacs", 0, 0, charset_smacs, 0},
+ {MENU_NEXT, 11, 0, 0, 0, charset_attributes, 0},
+ {MENU_NEXT, 11, "sgr) (sgr0", "ma", 0, charset_sgr, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+const struct mode_list alt_modes[] = {
+ {"normal", "(sgr0)", "(sgr0)", 1},
+ {"standout", "(smso)", "(rmso)", 2},
+ {"underline", "(smul)", "(rmul)", 4},
+ {"reverse", "(rev)", "(sgr0)", 8},
+ {"blink", "(blink)", "(sgr0)", 16},
+ {"dim", "(dim)", "(sgr0)", 32},
+ {"bold", "(bold)", "(sgr0)", 64},
+ {"invis", "(invis)", "(sgr0)", 128},
+ {"protect", "(prot)", "(sgr0)", 256},
+ {"altcharset", "(smacs)", "(rmacs)", 512}
+};
+
+/* On many terminals the underline attribute is the last scan line.
+ This is OK unless the following line is reverse video.
+ Then the underline attribute does not show up. The following map
+ will reorder the display so that the underline attribute will
+ show up. */
+const int mode_map[10] = {0, 1, 3, 4, 5, 6, 7, 8, 9, 2};
+
+struct graphics_pair {
+ unsigned char c;
+ const char *name;
+};
+
+static struct graphics_pair glyph[] = {
+ {'+', "arrow pointing right"},
+ {',', "arrow pointing left"},
+ {'.', "arrow pointing down"},
+ {'0', "solid square block"},
+ {'i', "lantern symbol"},
+ {'-', "arrow pointing up"},
+ {'`', "diamond"},
+ {'a', "checker board (stipple)"},
+ {'f', "degree symbol"},
+ {'g', "plus/minus"},
+ {'h', "board of squares"},
+ {'j', "lower right corner"},
+ {'k', "upper right corner"},
+ {'l', "upper left corner"},
+ {'m', "lower left corner"},
+ {'n', "plus"},
+ {'o', "scan line 1"},
+ {'p', "scan line 3"},
+ {'q', "horizontal line"},
+ {'r', "scan line 7"},
+ {'s', "scan line 9"},
+ {'t', "left tee (|-)"},
+ {'u', "right tee (-|)"},
+ {'v', "bottom tee(_|_)"},
+ {'w', "top tee (T)"},
+ {'x', "vertical line"},
+ {'y', "less/equal"},
+ {'z', "greater/equal"},
+ {'{', "Pi"},
+ {'|', "not equal"},
+ {'}', "UK pound sign"},
+ {'~', "bullet"},
+ {'\0', "\0"}
+};
+
+/*
+** charset_hs(test_list, status, ch)
+**
+** (hs) test Has status line
+*/
+static void
+charset_hs(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (has_status_line != 1) {
+ ptext("(hs) Has-status line is not defined. ");
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** charset_status(test_list, status, ch)
+**
+** (tsl) (fsl) (wsl) test Status line
+*/
+static void
+charset_status(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, max;
+ char *s;
+ static char m[] = "*** status line *** 123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.123456789.";
+
+ if (has_status_line != 1) {
+ return;
+ }
+ put_clear();
+ max = width_status_line == -1 ? columns : width_status_line;
+ sprintf(temp, "Terminal has status line of %d characters", max);
+ ptextln(temp);
+
+ put_str("This line s");
+ s = tparm(to_status_line, 0);
+ tc_putp(s);
+ for (i = 0; i < max; i++)
+ putchp(m[i]);
+ tc_putp(from_status_line);
+ putln("hould not be broken.");
+ ptextln("If the previous line is not a complete sentence then (tsl) to-status-line, (fsl) from-status-line, or (wsl) width-of-status-line is incorrect." );
+ generic_done_message(t, state, ch);
+}
+
+/*
+** charset_dsl(test_list, status, ch)
+**
+** (dsl) test Disable status line
+*/
+static void
+charset_dsl(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (has_status_line != 1) {
+ return;
+ }
+ if (dis_status_line) {
+ ptextln("Disable status line (dsl)");
+ tc_putp(dis_status_line);
+ ptext("If you can still see the status line then (dsl) disable-status-line has failed. ");
+ } else {
+ ptext("(dsl) Disable-status-line is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+
+void
+eat_cookie(void)
+{ /* put a blank if this is not a magic cookie
+ terminal */
+ if (magic_cookie_glitch < 1)
+ putchp(' ');
+}
+
+
+void
+put_mode(char *s)
+{ /* send the attribute string (with or without
+ % execution) */
+ tc_putp(tparm(s)); /* allow % execution */
+}
+
+
+void
+set_attr(int a)
+{ /* set the attribute from the bits in a */
+ int i, b[32];
+
+ if (magic_cookie_glitch > 0) {
+ char_count += magic_cookie_glitch;
+ }
+ if (a == 0 && exit_attribute_mode) {
+ put_mode(exit_attribute_mode);
+ return;
+ }
+ for (i = 0; i < 31; i++) {
+ b[i] = (a >> i) & 1;
+ }
+ tc_putp(tparm(set_attributes, b[1], b[2], b[3], b[4], b[5],
+ b[6], b[7], b[8], b[9]));
+}
+
+/*
+** charset_sgr(test_list, status, ch)
+**
+** (sgr) test Set Graphics Rendition
+*/
+static void
+charset_sgr(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!set_attributes) {
+ ptext("(sgr) Set-graphics-rendition is not defined. ");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ if (!exit_attribute_mode) {
+ ptextln("(sgr0) Set-graphics-rendition-zero is not defined.");
+ /* go ahead and test anyway */
+ }
+ ptext("Test video attributes (sgr)");
+
+ for (i = 0; i < (int) (sizeof(alt_modes) / sizeof(struct mode_list));
+ i++) {
+ put_crlf();
+ sprintf(temp, "%d %-20s", i, alt_modes[i].name);
+ put_str(temp);
+ set_attr(alt_modes[i].number);
+ sprintf(temp, "%s", alt_modes[i].name);
+ put_str(temp);
+ set_attr(0);
+ }
+
+ putln("\n\nDouble mode test");
+ for (i = 0; i <= 9; i++) {
+ sprintf(temp, " %2d ", mode_map[i]);
+ put_str(temp);
+ }
+ for (i = 0; i <= 9; i++) {
+ put_crlf();
+ sprintf(temp, "%d", mode_map[i]);
+ put_str(temp);
+ for (j = 0; j <= 9; j++) {
+ eat_cookie();
+ set_attr((1 << mode_map[i]) | (1 << mode_map[j]));
+ put_str("Aa");
+ set_attr(0);
+ if (j < 9)
+ eat_cookie();
+ }
+ }
+ put_crlf();
+
+ if (max_attributes >= 0) {
+ sprintf(temp, "(ma) Maximum attributes %d ", max_attributes);
+ ptext(temp);
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** test_one_attr(mode-number, begin-string, end-string)
+**
+** Display one attribute line.
+*/
+static void
+test_one_attr(
+ int n,
+ char *begin_mode,
+ char *end_mode)
+{
+ int i;
+
+ sprintf(temp, "%-10s %s ", alt_modes[n].name, alt_modes[n].begin_mode);
+ ptext(temp);
+ for (; char_count < 19;) {
+ putchp(' ');
+ }
+ if (begin_mode) {
+ putchp('.');
+ put_mode(begin_mode);
+ put_str(alt_modes[n].name);
+ for (i = strlen(alt_modes[n].name); i < 13; i++) {
+ putchp(' ');
+ }
+ if (end_mode) {
+ put_mode(end_mode);
+ sprintf(temp, ". %s", alt_modes[n].end_mode);
+ } else {
+ set_attr(0);
+ strcpy(temp, ". (sgr)");
+ }
+ ptextln(temp);
+ } else {
+ for (i = 0; i < magic_cookie_glitch; i++)
+ putchp('*');
+ put_str("*** missing ***");
+ for (i = 0; i < magic_cookie_glitch; i++)
+ putchp('*');
+ put_crlf();
+ }
+}
+
+/*
+** charset_attributes(test_list, status, ch)
+**
+** Test SGR
+*/
+static void
+charset_attributes(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ putln("Test video attributes");
+ test_one_attr(1, enter_standout_mode, exit_standout_mode);
+ test_one_attr(2, enter_underline_mode, exit_underline_mode);
+ test_one_attr(9, enter_alt_charset_mode, exit_alt_charset_mode);
+ if (!exit_attribute_mode && !set_attributes) {
+ ptextln("(sgr0) exit attribute mode is not defined.");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ test_one_attr(3, enter_reverse_mode, exit_attribute_mode);
+ test_one_attr(4, enter_blink_mode, exit_attribute_mode);
+ test_one_attr(5, enter_dim_mode, exit_attribute_mode);
+ test_one_attr(6, enter_bold_mode, exit_attribute_mode);
+ test_one_attr(7, enter_secure_mode, exit_attribute_mode);
+ test_one_attr(8, enter_protected_mode, exit_attribute_mode);
+ generic_done_message(t, state, ch);
+}
+
+#define GLYPHS 256
+
+/*
+** charset_smacs(test_list, status, ch)
+**
+** display all posible acs characters
+** (smacs) (rmacs)
+*/
+static void
+charset_smacs(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, c;
+
+ if (enter_alt_charset_mode) {
+ put_clear();
+ ptextln("The following characters are available. (smacs) (rmacs)");
+ for (i = ' '; i <= '`'; i += 32) {
+ put_crlf();
+ put_mode(exit_alt_charset_mode);
+ for (c = 0; c < 32; c++) {
+ putchp(c + i);
+ }
+ put_crlf();
+ put_mode(enter_alt_charset_mode);
+ for (c = 0; c < 32; c++) {
+ putchp(c + i);
+ }
+ put_mode(exit_alt_charset_mode);
+ put_crlf();
+ }
+ put_mode(exit_alt_charset_mode);
+ put_crlf();
+ generic_done_message(t, state, ch);
+ }
+}
+
+
+static void
+test_acs(
+ int attr)
+{ /* alternate character set */
+ int i, j;
+ char valid_glyph[GLYPHS];
+ char acs_table[GLYPHS];
+ static unsigned char vt100[] = "`afgjklmnopqrstuvwxyz{|}~";
+
+ line_count = 0;
+ for (i = 0; i < GLYPHS; i++) {
+ valid_glyph[i] = FALSE;
+ acs_table[i] = i;
+ }
+ if (acs_chars) {
+ sprintf(temp, "Alternate character set map: %s",
+ expand(acs_chars));
+ putln(temp);
+ for (i = 0; acs_chars[i]; i += 2) {
+ if (acs_chars[i + 1] == 0) {
+ break;
+ }
+ for (j = 0;; j++) {
+ if (glyph[j].c == (unsigned char) acs_chars[i]) {
+ acs_table[glyph[j].c] = acs_chars[i + 1];
+ valid_glyph[glyph[j].c] = TRUE;
+ break;
+ }
+ if (glyph[j].name[0] == '\0') {
+ if (isgraph(acs_chars[i])) {
+ sprintf(temp, " %c",
+ acs_chars[i]);
+ } else {
+ sprintf(temp, " 0x%02x",
+ (acs_chars[i] & 0xff));
+ }
+ strcpy(&temp[5], " *** has no mapping ***");
+ putln(temp);
+ break;
+ }
+ }
+ }
+ } else {
+ ptextln("acs_chars not defined (acsc)");
+ /* enable the VT-100 graphics characters (default) */
+ for (i = 0; vt100[i]; i++) {
+ valid_glyph[vt100[i]] = TRUE;
+ }
+ }
+ if (attr) {
+ set_attr(attr);
+ }
+ _nc_init_acs(); /* puts 'ena_acs' and incidentally links acs_map[] */
+ for (i = 0; glyph[i].name[0]; i++) {
+ if (valid_glyph[glyph[i].c]) {
+ put_mode(enter_alt_charset_mode);
+ put_this(acs_table[glyph[i].c]);
+ char_count++;
+ put_mode(exit_alt_charset_mode);
+ if (magic_cookie_glitch >= 1) {
+ sprintf(temp, " %-30.30s", glyph[i].name);
+ put_str(temp);
+ if (char_count + 33 >= columns)
+ put_crlf();
+ } else {
+ sprintf(temp, " %-24.24s", glyph[i].name);
+ put_str(temp);
+ if (char_count + 26 >= columns)
+ put_crlf();
+ }
+ if (line_count >= lines) {
+ (void) wait_here();
+ put_clear();
+ }
+ }
+ }
+ if (char_count > 1) {
+ put_crlf();
+ }
+#ifdef ACS_ULCORNER
+ maybe_wait(5);
+ put_mode(enter_alt_charset_mode);
+ put_this(ACS_ULCORNER);
+ put_this(ACS_TTEE);
+ put_this(ACS_URCORNER);
+ put_this(ACS_ULCORNER);
+ put_this(ACS_HLINE);
+ put_this(ACS_URCORNER);
+ char_count += 6;
+ put_mode(exit_alt_charset_mode);
+ put_crlf();
+ put_mode(enter_alt_charset_mode);
+ put_this(ACS_LTEE);
+ put_this(ACS_PLUS);
+ put_this(ACS_RTEE);
+ put_this(ACS_VLINE);
+ if (magic_cookie_glitch >= 1)
+ put_this(' ');
+ else {
+ put_mode(exit_alt_charset_mode);
+ put_this(' ');
+ put_mode(enter_alt_charset_mode);
+ }
+ put_this(ACS_VLINE);
+ char_count += 6;
+ put_mode(exit_alt_charset_mode);
+ put_str(" Here are 2 boxes");
+ put_crlf();
+ put_mode(enter_alt_charset_mode);
+ put_this(ACS_LLCORNER);
+ put_this(ACS_BTEE);
+ put_this(ACS_LRCORNER);
+ put_this(ACS_LLCORNER);
+ put_this(ACS_HLINE);
+ put_this(ACS_LRCORNER);
+ char_count += 6;
+ put_mode(exit_alt_charset_mode);
+ put_crlf();
+#endif
+}
+
+/*
+** charset_bel(test_list, status, ch)
+**
+** (bel) test Bell
+*/
+static void
+charset_bel(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (bell) {
+ ptextln("Testing bell (bel)");
+ tc_putp(bell);
+ ptext("If you did not hear the Bell then (bel) has failed. ");
+ } else {
+ ptext("(bel) Bell is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** charset_flash(test_list, status, ch)
+**
+** (flash) test Visual bell
+*/
+static void
+charset_flash(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (flash_screen) {
+ ptextln("Testing visual bell (flash)");
+ tc_putp(flash_screen);
+ ptext("If you did not see the screen flash then (flash) has failed. ");
+ } else {
+ ptext("(flash) Flash is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** charset_civis(test_list, status, ch)
+**
+** (civis) test Cursor invisible
+*/
+static void
+charset_civis(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (cursor_normal) {
+ if (cursor_invisible) {
+ ptext("(civis) Turn off the cursor. ");
+ tc_putp(cursor_invisible);
+ ptext("If you can still see the cursor then (civis) has failed. ");
+ } else {
+ ptext("(civis) Cursor-invisible is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+ tc_putp(cursor_normal);
+ }
+}
+
+/*
+** charset_cvvis(test_list, status, ch)
+**
+** (cvvis) test Cursor very visible
+*/
+static void
+charset_cvvis(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (cursor_normal) {
+ if (cursor_visible) {
+ ptext("(cvvis) Make cursor very visible. ");
+ tc_putp(cursor_visible);
+ ptext("If the cursor is not very visible then (cvvis) has failed. ");
+ } else {
+ ptext("(cvvis) Cursor-very-visible is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+ tc_putp(cursor_normal);
+ }
+}
+
+/*
+** charset_cnorm(test_list, status, ch)
+**
+** (cnorm) test Cursor normal
+*/
+static void
+charset_cnorm(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (cursor_normal) {
+ ptext("(cnorm) Normal cursor. ");
+ tc_putp(cursor_normal);
+ ptext("If the cursor is not normal then (cnorm) has failed. ");
+ } else {
+ ptext("(cnorm) Cursor-normal is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** charset_enacs(test_list, status, ch)
+**
+** test Alternate character set mode and alternate characters
+** (acsc) (enacs) (smacs) (rmacs)
+*/
+static void
+charset_enacs(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int c, i;
+
+ if (enter_alt_charset_mode || acs_chars) {
+ c = 0;
+ while (1) {
+ put_clear();
+ /*
+ for terminals that use separate fonts for
+ attributes (such as X windows) the line
+ drawing characters must be checked for
+ each font.
+ */
+ if (c >= '0' && c <= '9') {
+ test_acs(alt_modes[c - '0'].number);
+ set_attr(0);
+ } else {
+ test_acs(0);
+ }
+
+ while (1) {
+ ptextln("[r] to repeat, [012345789] to test with attributes on, [?] for a list of attributes, anything else to go to next test. ");
+ generic_done_message(t, state, ch);
+ if (*ch != '?') {
+ break;
+ }
+ for (i = 0; i <= 9; i++) {
+ sprintf(temp, " %d %s %s", i, alt_modes[i].begin_mode,
+ alt_modes[i].name);
+ ptextln(temp);
+ }
+ }
+ if (*ch >= '0' && *ch <= '9') {
+ c = *ch;
+ } else
+ if (*ch != 'r') {
+ break;
+ }
+ }
+ } else {
+ ptext("(smacs) Enter-alt-char-set-mode and (acsc) Alternate-char-set are not defined. ");
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** charset_can_test()
+**
+** Initialize the can_test data base
+*/
+void
+charset_can_test(void)
+{
+ int i;
+
+ for (i = 0; i < 9; i++) {
+ can_test(alt_modes[i].begin_mode, FLAG_CAN_TEST);
+ can_test(alt_modes[i].end_mode, FLAG_CAN_TEST);
+ }
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: color.c,v 1.1 1999/04/18 01:24:45 tom Exp $")
+
+/*
+ * Color terminal tests. Has only one entry point: test_color().
+ */
+
+static void color_check(struct test_list *, int *, int *);
+static void color_setf(struct test_list *, int *, int *);
+static void color_matrix(struct test_list *, int *, int *);
+static void color_ncv(struct test_list *, int *, int *);
+static void color_ccc(struct test_list *, int *, int *);
+static void color_bce(struct test_list *, int *, int *);
+
+struct test_list color_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {MENU_NEXT, 2, "colors) (pairs", 0, 0, color_check, 0},
+ {MENU_NEXT, 12, "setf) (setb) (scp", 0, 0, color_setf, 0},
+ {MENU_NEXT, 24, "op", 0, 0, color_matrix, 0},
+ {MENU_NEXT, 16, "ncv", 0, 0, color_ncv, 0},
+ {MENU_NEXT, 0, "bce", 0, 0, color_bce, 0},
+ {MENU_NEXT | MENU_CLEAR, 0, "ccc) (initc) (initp", "hls op oc", 0, color_ccc, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+#ifndef COLOR_BLACK
+#define COLOR_BLACK 0
+#define COLOR_BLUE 1
+#define COLOR_GREEN 2
+#define COLOR_CYAN 3
+#define COLOR_RED 4
+#define COLOR_MAGENTA 5
+#define COLOR_YELLOW 6
+#define COLOR_WHITE 7
+#endif
+
+struct color_table {
+ const char *name;
+ int index;
+ int r, g, b;
+ int h, l, s;
+};
+
+static struct color_table def_colors[8] = {
+ {"black ", COLOR_BLACK, 0, 0, 0, 0, 0, 0},
+ {"blue ", COLOR_BLUE, 0, 0, 1000, 330, 50, 100},
+ {"green ", COLOR_GREEN, 0, 1000, 0, 240, 50, 100},
+ {"cyan ", COLOR_CYAN, 0, 1000, 1000, 300, 50, 100},
+ {"red ", COLOR_RED, 1000, 0, 0, 120, 50, 100},
+ {"magenta", COLOR_MAGENTA, 1000, 0, 1000, 60, 50, 100},
+ {"yellow ", COLOR_YELLOW, 1000, 1000, 0, 180, 50, 100},
+ {"white ", COLOR_WHITE, 1000, 1000, 1000, 0, 100, 0}
+};
+
+#define MAX_PAIR 256
+static int fg_color[MAX_PAIR] = {COLOR_BLACK, COLOR_BLUE, COLOR_GREEN,
+COLOR_CYAN, COLOR_RED, COLOR_MAGENTA, COLOR_YELLOW, COLOR_WHITE};
+static int bg_color[MAX_PAIR] = {COLOR_BLACK, COLOR_BLACK, COLOR_BLACK,
+COLOR_BLACK, COLOR_BLACK, COLOR_BLACK, COLOR_BLACK, COLOR_BLACK};
+static int pairs_used = 8;
+static int a_bright_color, bright_value;
+static int cookie_monster, color_step, colors_per_line;
+static int R, G, B;
+
+static int
+color_trans(int c)
+{ /* translate or load the color */
+ int i;
+
+ for (i = 0; i < pairs_used; i++) {
+ if (fg_color[i] == c) {
+ return i;
+ }
+ }
+ if (!can_change) {
+ return 0;
+ }
+ if (pairs_used > max_colors || pairs_used >= MAX_PAIR) {
+ pairs_used = 0;
+ ptextln("Ran out of colors");
+ }
+ fg_color[pairs_used] = c;
+ bg_color[pairs_used] = c;
+ if (hue_lightness_saturation) {
+ tc_putp(tparm(initialize_color, pairs_used,
+ def_colors[c].h, def_colors[c].l, def_colors[c].s));
+ } else {
+ tc_putp(tparm(initialize_color, pairs_used,
+ def_colors[c].r, def_colors[c].g, def_colors[c].b));
+ }
+ return pairs_used++;
+}
+
+static void
+new_color(
+ int fg,
+ int bg,
+ int hungry)
+{ /* change the color to fg and bg. */
+ int i;
+
+ if (hungry) {
+ eat_cookie();
+ }
+ if (set_a_foreground) {
+ /* set ANSI color (setaf) (setab) */
+ tc_putp(tparm(set_a_foreground, fg));
+ tc_putp(tparm(set_a_background, bg));
+ } else if (set_foreground) {
+ /* make sure black is zero */
+ (void) color_trans(COLOR_BLACK);
+ tc_putp(tparm(set_foreground, color_trans(fg)));
+ tc_putp(tparm(set_background, color_trans(bg)));
+ } else { /* set color pair */
+ for (i = 0; i < pairs_used; i++) {
+ if (fg_color[i] == fg && bg_color[i] == bg) {
+ tc_putp(tparm(set_color_pair, i));
+ if (hungry) {
+ eat_cookie();
+ }
+ return;
+ }
+ }
+ if (!can_change) {
+ /* try to set just the foreground */
+ for (i = pairs_used - 1; i; i--) {
+ if (fg_color[i] == fg)
+ break;
+ }
+ tc_putp(tparm(set_color_pair, i));
+ if (hungry) {
+ eat_cookie();
+ }
+ return;
+ }
+ if (pairs_used > max_pairs || pairs_used >= MAX_PAIR) {
+ pairs_used = 0;
+ ptextln("Ran out of color pairs");
+ }
+ fg_color[pairs_used] = fg;
+ bg_color[pairs_used] = bg;
+ if (hue_lightness_saturation) {
+ tc_putp(tparm(initialize_pair, pairs_used,
+ def_colors[fg].h, def_colors[fg].l, def_colors[fg].s,
+ def_colors[bg].h, def_colors[bg].l, def_colors[bg].s));
+ } else {
+ tc_putp(tparm(initialize_pair, pairs_used,
+ def_colors[fg].r, def_colors[fg].g, def_colors[fg].b,
+ def_colors[bg].r, def_colors[bg].g, def_colors[bg].b));
+ }
+ tc_putp(tparm(set_color_pair, pairs_used));
+ pairs_used++;
+ }
+ if (hungry) {
+ eat_cookie();
+ }
+}
+
+
+static void
+set_color_step(void)
+{ /* set the color_step for the (ccc) display */
+ int i;
+
+ for (i = 2; i < 1000; i++) {
+ if ((i * i * i) >= max_colors) {
+ break;
+ }
+ }
+ color_step = 1000 / (i - 1);
+}
+
+
+static void
+rgb_2_hls(int r, int g, int b, int *h, int *l, int *s)
+{ /* convert RGB to HLS system */
+ int min, max, t;
+
+ if ((min = g < r ? g : r) > b) {
+ min = b;
+ }
+ if ((max = g > r ? g : r) < b) {
+ max = b;
+ }
+
+ /* calculate lightness */
+ *l = (min + max) / 20;
+
+ if (min == max) { /* black, white and all shades of gray */
+ *h = 0;
+ *s = 0;
+ return;
+ }
+ /* calculate saturation */
+ if (*l < 50) {
+ *s = ((max - min) * 100) / (max + min);
+ } else {
+ *s = ((max - min) * 100) / (2000 - max - min);
+ }
+
+ /* calculate hue */
+ if (r == max) {
+ t = 120 + ((g - b) * 60) / (max - min);
+ } else if (g == max) {
+ t = 240 + ((b - r) * 60) / (max - min);
+ } else {
+ t = 360 + ((r - g) * 60) / (max - min);
+ }
+ *h = t % 360;
+}
+
+
+static void
+send_color(int p, int r, int g, int b)
+{ /* send the initialize_color (initc) command */
+ int h, l, s;
+
+ if (hue_lightness_saturation) {
+ rgb_2_hls(r, g, b, &h, &l, &s);
+ tc_putp(tparm(initialize_color, p, h, l, s));
+ } else {
+ tc_putp(tparm(initialize_color, p, r, g, b));
+ }
+}
+
+
+static void
+send_pair(int p, int fr, int fg, int fb, int br, int bg, int bb)
+{ /* send the initialize_pair (initp) command */
+ int fh, fl, fs, bh, bl, bs;
+
+ if (hue_lightness_saturation) {
+ rgb_2_hls(fr, fg, fb, &fh, &fl, &fs);
+ rgb_2_hls(br, bg, bb, &bh, &bl, &bs);
+ tc_putp(tparm(initialize_pair, p, fh, fl, fs, bh, bl, bs));
+ } else {
+ tc_putp(tparm(initialize_pair, p, fr, fg, fb, bb, bg, bb));
+ }
+}
+
+
+static int
+load_palette(int n)
+{ /* load the color palette */
+ int rgb;
+
+ for (;;) {
+ if (pairs_used >= n) {
+ return FALSE;
+ }
+ if (set_a_foreground || set_foreground) {
+ if (pairs_used >= max_colors) {
+ return FALSE;
+ }
+ send_color(pairs_used, R, G, B);
+ rgb = R + G + B;
+ if (rgb > bright_value) {
+ bright_value = rgb;
+ a_bright_color = pairs_used;
+ }
+ } else {
+ if (pairs_used >= max_pairs) {
+ return FALSE;
+ }
+ if (pairs_used == 0) {
+ send_pair(pairs_used, 1000, 1000, 1000, R, G, B);
+ } else {
+ send_pair(pairs_used, R, G, B, R, G, B);
+ }
+ }
+ pairs_used++;
+ if ((B += color_step) > 1000) {
+ B = 0;
+ if ((G += color_step) > 1000) {
+ G = 0;
+ if ((R += color_step) > 1000) {
+ return TRUE;
+ }
+ }
+ }
+ }
+}
+
+
+static int
+rainbow(int n)
+{ /* print the programable color display */
+ int i, c, d, palette_full, initial_pair;
+ static const struct {
+ const char *name;
+ char ch;
+ } splat[] = {
+ {"Bg normal", ' '},
+ {"Fg normal", ' '},
+ {0, 0}
+ };
+
+ if ((set_a_foreground || set_foreground)
+ ? pairs_used >= max_colors
+ : pairs_used >= max_pairs) {
+ ptext("New palette: ");
+ (void) wait_here();
+ initial_pair = pairs_used = 1;
+ bright_value = 0;
+ } else if (line_count + 3 >= lines) {
+ ptext("Go: ");
+ (void) wait_here();
+ put_clear();
+ initial_pair = pairs_used = 1;
+ bright_value = 0;
+ n++;
+ } else {
+ initial_pair = pairs_used;
+ n += initial_pair;
+ }
+ palette_full = load_palette(n);
+ for (d = 0; splat[d].name; d++) {
+ c = splat[d].ch;
+ if (d == 1) {
+ put_mode(enter_reverse_mode);
+ }
+ for (i = initial_pair; i < n; i++) {
+ if (i >= pairs_used) {
+ break;
+ }
+ if (set_a_foreground) {
+ if (i >= max_colors) {
+ break;
+ }
+ tc_putp(tparm(set_a_foreground, i));
+ tc_putp(tparm(set_a_background, i));
+ } else if (set_foreground) {
+ if (i >= max_colors) {
+ break;
+ }
+ tc_putp(tparm(set_foreground, i));
+ tc_putp(tparm(set_background, i));
+ } else {
+ if (i >= max_pairs) {
+ break;
+ }
+ tc_putp(tparm(set_color_pair, i));
+ }
+ putchp(c);
+ }
+ if (d == 1) {
+ put_mode(exit_attribute_mode);
+ }
+ if (set_a_foreground) {
+ tc_putp(tparm(set_a_foreground, a_bright_color));
+ tc_putp(tparm(set_a_background, 0));
+ } else if (set_foreground) {
+ tc_putp(tparm(set_foreground, a_bright_color));
+ tc_putp(tparm(set_background, 0));
+ } else {
+ tc_putp(tparm(set_color_pair, 0));
+ }
+ put_str(" ");
+ put_str(splat[d].name);
+ put_crlf();
+ }
+ return palette_full;
+}
+
+
+static void
+ncv_display(int m)
+{ /* print the no_color_video (ncv) test line */
+ putchp('0' + m);
+ putchp(' ');
+ eat_cookie();
+ set_attr(1 << m);
+ sprintf(temp, "%-11s", alt_modes[m].name);
+ put_str(temp);
+
+ new_color(COLOR_BLUE, COLOR_BLACK, TRUE);
+ put_str("blue");
+
+ new_color(COLOR_BLACK, COLOR_GREEN, TRUE);
+ put_str("green");
+
+ new_color(COLOR_WHITE, COLOR_BLACK, TRUE);
+ put_str(alt_modes[m].name);
+ eat_cookie();
+ set_attr(0);
+ put_crlf();
+}
+
+
+static void
+dump_colors(void)
+{ /* display the colors in some esthetic
+ pattern */
+ static int xmap[8] = {0, 3, 4, 7, 1, 2, 5, 6};
+ int i, j, k, xi, xj, width, p, cs;
+ int found_one;
+
+ cs = color_step <= 125 ? 125 : color_step;
+ width = (1000 / cs) + 1;
+ for (xi = 0; xi < 16; xi++) {
+ i = (xi & 8) ? xi ^ 15 : xi;
+ R = i * cs;
+ if (R <= 1000) {
+ found_one = FALSE;
+ for (xj = 0; xj < 32; xj++) {
+ j = ((xj & 8) ? xj ^ 15 : xj) & 7;
+ k = xmap[((xi >> 1) & 4) + (xj >> 3)];
+ G = j * cs;
+ B = k * cs;
+ if (G <= 1000 && B <= 1000) {
+ p = (k * width + j) * width + i;
+ if (set_a_background) {
+ if (p >= max_colors) {
+ continue;
+ }
+ send_color(p, R, G, B);
+ tc_putp(tparm(set_a_background, p));
+ } else if (set_background) {
+ if (p >= max_colors) {
+ continue;
+ }
+ send_color(p, R, G, B);
+ tc_putp(tparm(set_background, p));
+ } else {
+ if (p >= max_pairs) {
+ continue;
+ }
+ send_pair(p, R, G, B, R, G, B);
+ tc_putp(tparm(set_color_pair, p));
+ }
+ found_one = TRUE;
+ putchp(' ');
+ putchp(' ');
+ }
+ }
+ if (found_one) {
+ put_crlf();
+ }
+ }
+ }
+}
+
+/*
+** color_check(test_list, status, ch)
+**
+** test (colors) and (pairs)
+*/
+static void
+color_check(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (max_colors <= 0 && max_pairs <= 0) {
+ ptext("This is not a color terminal; (colors) and (pairs) are missing. ");
+ *state |= MENU_STOP;
+ } else {
+ sprintf(temp, "This terminal can display %d colors and %d color pairs. (colors) (pairs)",
+ max_colors, max_pairs);
+ ptextln(temp);
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** color_setf(test_list, status, ch)
+**
+** test (setf) (setb) and (scp)
+*/
+static void
+color_setf(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (max_colors <= 0 && max_pairs <= 0) {
+ ptext("This is not a color terminal; (colors) and (pairs) are missing. ");
+ generic_done_message(t, state, ch);
+ *state |= MENU_STOP;
+ return;
+ }
+ if ((set_a_foreground == NULL || set_a_background == NULL)
+ && (set_foreground == NULL || set_background == NULL)
+ && set_color_pair == NULL) {
+ ptextln("Both set foreground (setaf/setf) and set color pair (scp) are not present.");
+ if (!set_a_background || !set_background) {
+ ptextln("(setab/setb) set background not present");
+ }
+ ptext("These must be defined for color testing. ");
+ generic_done_message(t, state, ch);
+ *state |= MENU_STOP;
+ return;
+ }
+ /* initialize the color palette */
+ pairs_used = max_colors >= 8 ? 8 : max_colors;
+ if (can_change) {
+ tc_putp(orig_colors);
+ }
+ tc_putp(tparm(orig_pair));
+ new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
+
+ ptextln("(setf) (setb) (scp) The following colors are predefined:");
+ ptextln("\n Foreground Background");
+ put_crlf();
+ j = max_colors > 8 ? 8 : max_colors;
+ /*
+ the black on white test is the same as the white on black test.
+ */
+ for (i = 1; i < j; i++) {
+ putchp('0' + def_colors[i].index);
+ putchp(' ');
+ sprintf(temp, " %s ", def_colors[i].name);
+
+ new_color(def_colors[i].index, COLOR_BLACK, TRUE);
+ put_str(temp);
+
+ new_color(COLOR_BLACK, COLOR_BLACK, TRUE);
+ put_str(" ");
+
+ new_color(COLOR_BLACK, def_colors[i].index, TRUE);
+ put_str(temp);
+
+ new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
+ put_crlf();
+ }
+ put_crlf();
+ generic_done_message(t, state, ch);
+}
+
+/*
+** color_matrix(test_list, status, ch)
+**
+** test (pairs) (op)
+*/
+static void
+color_matrix(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j, matrix_size, matrix_area, brightness;
+
+ matrix_size = max_colors > 8 ? 8 : max_colors;
+
+ sprintf(temp, "(pairs) There are %d color pairs.", max_pairs);
+ ptextln(temp);
+
+ for ( ; matrix_size; matrix_size--) {
+ if (matrix_size * matrix_size <= max_pairs) {
+ break;
+ }
+ }
+ matrix_area = matrix_size * matrix_size;
+ for (brightness = 0; brightness < 2; brightness++) {
+ put_crlf();
+ sprintf(temp,
+ "%dx%d matrix of foreground/background colors, bright *o%s*",
+ matrix_size, matrix_size, brightness ? "n" : "ff");
+ put_str(temp);
+
+ put_str("\n ");
+ for (i = 0; i < matrix_size; i++) {
+ (void) sprintf(temp, "%-8s", def_colors[i].name);
+ put_str(temp);
+ }
+ for (j = 0; j < matrix_area; j++) {
+ if (j % matrix_size == 0) {
+ tc_putp(tparm(orig_pair));
+ put_crlf();
+ if (brightness) {
+ tc_putp(exit_standout_mode);
+ }
+ (void) sprintf(temp, "%-8s", def_colors[j / matrix_size].name);
+ put_str(temp);
+ if (brightness) {
+ put_mode(enter_bold_mode);
+ }
+ }
+ new_color(def_colors[j % matrix_size].index,
+ def_colors[j / matrix_size].index,
+ FALSE);
+ put_str(" Hello ");
+ }
+ tc_putp(tparm(orig_pair));
+ if (brightness) {
+ tc_putp(exit_standout_mode);
+ }
+ put_crlf();
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** color_ncv(test_list, status, ch)
+**
+** test (ncv)
+*/
+static void
+color_ncv(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (no_color_video == -1) {
+ /* I have no idea what this means */
+ return;
+ }
+ sprintf(temp, "According to no_color_video (ncv) which is %d, the following attributes should work correctly with color.", no_color_video);
+ ptextln(temp);
+ put_crlf();
+ set_attr(0);
+ ncv_display(0);
+ for (i = 1; i <= 9; i++) {
+ if (((no_color_video >> (mode_map[i] - 1)) & 1) == 0) {
+ ncv_display(mode_map[i]);
+ }
+ }
+ if (no_color_video & 0x3ff) {
+ ptextln("\nThe following attributes should not work correctly with color. (ncv)\n");
+ for (i = 1; i <= 9; i++) {
+ if ((no_color_video >> (mode_map[i] - 1)) & 1) {
+ ncv_display(mode_map[i]);
+ }
+ }
+ }
+ tc_putp(orig_pair);
+ put_crlf();
+ generic_done_message(t, state, ch);
+}
+
+/*
+** color_bce(test_list, status, ch)
+**
+** test (bce) background color erase
+*/
+static void
+color_bce(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ new_color(COLOR_BLACK, COLOR_WHITE, FALSE);
+ put_clear();
+ put_newlines(2);
+ new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
+ ptextln("If the two lines above are black then back_color_erase (bce) should be false.");
+ sprintf(temp, "(bce) is %s in the data base.", back_color_erase ? "true" : "false");
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+}
+
+/*
+** color_ccc(test_list, status, ch)
+**
+** test (ccc) color palette test (oc) (op) (initc) (initp)
+*/
+static void
+color_ccc(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!can_change) {
+ ptextln("Terminal can not change colors (ccc)");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ tc_putp(orig_colors);
+ pairs_used = 0;
+ new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
+ sprintf(temp, "Reloading colors (init%c) using %s method",
+ set_foreground ? 'c' : 'p',
+ hue_lightness_saturation ? "HLS" : "RGB");
+ ptextln(temp);
+ put_crlf();
+ j = max_colors > 7 ? 7 : max_colors;
+ /* redisplay the above test with reinitialized colors */
+ /* If these colors don't look right to you... */
+ for (i = 0; i < j; i++) {
+ sprintf(temp, " %s ", def_colors[i ^ 7].name);
+
+ new_color(i ^ 7, COLOR_BLACK, TRUE);
+ put_str(temp);
+
+ new_color(COLOR_BLACK, COLOR_BLACK, TRUE);
+ put_str(" ");
+
+ new_color(COLOR_BLACK, i ^ 7, TRUE);
+ put_str(temp);
+
+ new_color(COLOR_WHITE, COLOR_BLACK, FALSE);
+ put_crlf();
+ }
+ generic_done_message(t, state, ch);
+ if (*ch != 0 && *ch != 'n') {
+ tc_putp(orig_colors);
+ tc_putp(tparm(orig_pair));
+ return;
+ }
+
+ pairs_used = 0;
+ cookie_monster = 0;
+ if (magic_cookie_glitch > 0) {
+ cookie_monster =
+ ((set_a_foreground || set_foreground)
+ ? magic_cookie_glitch : 0) +
+ ((set_a_background || set_background)
+ ? magic_cookie_glitch : 0) +
+ (set_color_pair ? magic_cookie_glitch : 0);
+ }
+ set_color_step();
+ colors_per_line = max_colors > max_pairs
+ ? max_pairs : max_colors;
+ j = (columns - 14) / (cookie_monster + 1);
+ if (colors_per_line > j) {
+ colors_per_line = (j / i) * i;
+ }
+ sprintf(temp, "RGB color step %d, cookies %d", color_step,
+ cookie_monster);
+ ptextln(temp);
+
+ R = G = B = 0;
+ pairs_used = 0;
+ for (;;) {
+ if (rainbow(colors_per_line)) {
+ break;
+ }
+ }
+ generic_done_message(t, state, ch);
+ if (*ch != 0 && *ch != 'n') {
+ tc_putp(orig_colors);
+ tc_putp(tparm(orig_pair));
+ return;
+ }
+ dump_colors();
+ tc_putp(orig_colors);
+ tc_putp(tparm(orig_pair));
+ generic_done_message(t, state, ch);
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+
+MODULE_ID("$Id: control.c,v 1.2 1999/06/16 00:45:59 tom Exp $")
+
+/* terminfo test program control subroutines */
+
+#if HAVE_GETTIMEOFDAY
+#define MY_TIMER struct timeval
+#else
+#define MY_TIMER time_t
+#endif
+
+/* globals */
+int test_complete; /* counts number of tests completed */
+
+char txt_longer_test_time[80]; /* +) use longer time */
+char txt_shorter_test_time[80]; /* -) use shorter time */
+int pad_test_duration = 1; /* number of seconds for a pad test */
+int auto_pad_mode; /* run the time tests */
+int no_alarm_event; /* TRUE if the alarm has not gone off yet */
+int usec_run_time; /* length of last test in microseconds */
+MY_TIMER stop_watch[MAX_TIMERS]; /* Hold the start timers */
+
+char txt_longer_augment[80]; /* >) use bigger augment */
+char txt_shorter_augment[80]; /* <) use smaller augment */
+
+/* caps under test data base */
+int tt_delay_max; /* max number of milliseconds we can delay */
+int tt_delay_used; /* number of milliseconds consumed in delay */
+const char *tt_cap[TT_MAX]; /* value of string */
+int tt_affected[TT_MAX]; /* lines or columns effected (repitition factor) */
+int tt_count[TT_MAX]; /* Number of times sent */
+int tt_delay[TT_MAX]; /* Number of milliseconds delay */
+int ttp; /* number of entries used */
+
+/* Saved value of the above data base */
+const char *tx_cap[TT_MAX]; /* value of string */
+int tx_affected[TT_MAX]; /* lines or columns effected (repitition factor) */
+int tx_count[TT_MAX]; /* Number of times sent */
+int tx_index[TT_MAX]; /* String index */
+int tx_delay[TT_MAX]; /* Number of milliseconds delay */
+int txp; /* number of entries used */
+int tx_characters; /* printing characters sent by test */
+int tx_cps; /* characters per second */
+struct test_list *tx_source; /* The test that generated this data */
+
+extern struct test_menu pad_menu; /* Pad menu structure */
+extern struct test_list pad_test_list[];
+
+#define RESULT_BLOCK 1024
+static int blocks; /* number of result blocks available */
+static struct test_results *results; /* pointer to next available */
+struct test_results *pads[STRCOUNT]; /* save pad results here */
+
+/*
+** event_start(number)
+**
+** Begin the stopwatch at the current time-of-day.
+*/
+void
+event_start(int n)
+{
+#if HAVE_GETTIMEOFDAY
+ (void) gettimeofday(&stop_watch[n], (struct timezone *)0);
+#else
+ stop_watch[n] = time((time_t *)0);
+#endif
+}
+
+/*
+** event_time(number)
+**
+** Return the number of milliseconds since this stop watch began.
+*/
+long
+event_time(int n)
+{
+#if HAVE_GETTIMEOFDAY
+ MY_TIMER current_time;
+
+ (void) gettimeofday(¤t_time, (struct timezone *)0);
+ return ((current_time.tv_sec - stop_watch[n].tv_sec) * 1000000)
+ + current_time.tv_usec - stop_watch[n].tv_usec;
+#else
+ return (time((time_t *)0) - stop_watch[n]) * 1000;
+#endif
+}
+
+/*****************************************************************************
+ *
+ * Execution control for string capability tests
+ *
+ *****************************************************************************/
+
+/*
+** get_next_block()
+**
+** Get a results block for pad test data.
+*/
+static struct test_results *
+get_next_block(void)
+{
+ if (blocks <= 0) {
+ results = (struct test_results *)
+ malloc(sizeof(struct test_results) * RESULT_BLOCK);
+ if (!results) {
+ ptextln("Malloc failed");
+ return (struct test_results *) 0;
+ }
+ blocks = RESULT_BLOCK;
+ }
+ blocks--;
+ return results++;
+}
+
+/*
+** set_augment_txt()
+**
+** Initialize the augment menu selections
+*/
+void
+set_augment_txt(void)
+{
+ sprintf(txt_longer_augment,
+ ">) Change lines/characters effected to %d", augment << 1);
+ sprintf(txt_shorter_augment,
+ "<) Change lines/characters effected to %d", augment >> 1);
+}
+
+void
+control_init(void)
+{
+ sprintf(txt_longer_test_time, "+) Change test time to %d seconds",
+ pad_test_duration + 1);
+ sprintf(txt_shorter_test_time, "-) Change test time to %d seconds",
+ pad_test_duration - 1);
+ set_augment_txt();
+}
+
+/*
+** msec_cost(cap, affected-count)
+**
+** Return the number of milliseconds delay needed by the cap.
+*/
+int
+msec_cost(
+ const char *const cap,
+ int affcnt)
+{
+ int dec, value, total, star, ch;
+ const char *cp;
+
+ if (!cap) {
+ return 0;
+ }
+ total = 0;
+ for (cp = cap; *cp; cp++) {
+ if (*cp == '$' && cp[1] == '<') {
+ star = 1;
+ value = dec = 0;
+ for (cp += 2; (ch = *cp); cp++) {
+ if (ch >= '0' && ch <= '9') {
+ value = value * 10 + (ch - '0');
+ dec *= 10;
+ } else
+ if (ch == '.') {
+ dec = 1;
+ } else
+ if (ch == '*') {
+ star = affcnt;
+ } else
+ if (ch == '>') {
+ break;
+ }
+ }
+ if (dec > 1) {
+ total += (value * star) / dec;
+ } else {
+ total += (value * star);
+ }
+ }
+ }
+ return total;
+}
+
+/*
+** liberated(cap)
+**
+** Return the cap without padding
+*/
+char *
+liberated(char *cap)
+{
+ static char cb[1024];
+ char *ts, *ls;
+
+ cb[0] = '\0';
+ ls = NULL;
+ if (cap) {
+ for (ts = cb; (*ts = *cap); ++cap) {
+ if (*cap == '$' && cap[1] == '<') {
+ ls = ts;
+ }
+ ++ts;
+ if (*cap == '>') {
+ if (ls) {
+ ts = ls;
+ ls = NULL;
+ }
+ }
+ }
+ }
+ return cb;
+}
+
+/*
+** page_loop()
+**
+** send CR/LF or go home and bump letter
+*/
+void
+page_loop(void)
+{
+ if (line_count + 2 >= lines) {
+ NEXT_LETTER;
+ go_home();
+ } else {
+ put_crlf();
+ }
+}
+
+/*
+** skip_pad_test(test-list-entry, state, ch, text)
+**
+** Print the start test line. Handle start up commands.
+** Return TRUE if a return is requested.
+*/
+int
+skip_pad_test(
+ struct test_list *test,
+ int *state,
+ int *ch,
+ const char *text)
+{
+ char rep_text[16];
+
+ while(1) {
+ if (text) {
+ ptext(text);
+ }
+ if ((test->flags & MENU_LC_MASK)) {
+ sprintf(rep_text, " *%d", augment);
+ ptext(rep_text);
+ }
+ ptext(" [n] > ");
+ *ch = wait_here();
+ if (*ch == 's') {
+ /* Skip is converted to next */
+ *ch = 'n';
+ return TRUE;
+ }
+ if (*ch == 'q') {
+ /* Quit is converted to help */
+ *ch = '?';
+ return TRUE;
+ }
+ if (*ch == '\r' || *ch == '\n' || *ch == 'n' || *ch == 'r') {
+ /* this is the only response that allows the test to run */
+ *ch = 0;
+ }
+ if (subtest_menu(pad_test_list, state, ch)) {
+ continue;
+ }
+ return (*ch != 0);
+ }
+}
+
+/*
+** pad_done_message(test_list)
+**
+** Print the Done message and request input.
+*/
+void
+pad_done_message(
+ struct test_list *test,
+ int *state,
+ int *ch)
+{
+ int default_action = 0;
+ char done_message[128];
+ char rep_text[16];
+
+ while (1) {
+ if ((test->flags & MENU_LC_MASK)) {
+ sprintf(rep_text, "*%d", augment);
+ } else {
+ rep_text[0] = '\0';
+ }
+ if (test->caps_done) {
+ sprintf(done_message, "(%s)%s Done ", test->caps_done,
+ rep_text);
+ ptext(done_message);
+ } else {
+ if (rep_text[0]) {
+ ptext(rep_text);
+ ptext(" ");
+ }
+ ptext("Done ");
+ }
+ if (debug_level & 2) {
+ dump_test_stats(test, state, ch);
+ } else {
+ *ch = wait_here();
+ }
+ if (*ch == '\r' || *ch == '\n') {
+ *ch = default_action;
+ return;
+ }
+ if (*ch == 's' || *ch == 'n') {
+ *ch = 0;
+ return;
+ }
+ if (strchr(pad_repeat_test, *ch)) {
+ /* default action is now repeat */
+ default_action = 'r';
+ }
+ if (subtest_menu(pad_test_list, state, ch)) {
+ continue;
+ }
+ return;
+ }
+}
+
+/*
+** sliding_scale(dividend, factor, divisor)
+**
+** Return (dividend * factor) / divisor
+*/
+int
+sliding_scale(
+ int dividend,
+ int factor,
+ int divisor)
+{
+ double d = dividend;
+
+ if (divisor) {
+ d = (d * (double) factor) / (double) divisor;
+ return (int) (d + 0.5);
+ }
+ return 0;
+}
+
+/*
+** pad_test_startup()
+**
+** Do the stuff needed to begin a test.
+*/
+void
+pad_test_startup(
+ int do_clear)
+{
+ if (do_clear) {
+ put_clear();
+ }
+ repeats = augment;
+ raw_characters_sent = 0;
+ test_complete = ttp = char_count = tt_delay_used = 0;
+ letter = letters[letter_number = 0];
+ if (pad_test_duration <= 0) {
+ pad_test_duration = 1;
+ }
+ tt_delay_max = pad_test_duration * 1000;
+ set_alarm_clock(pad_test_duration);
+ event_start(TIME_TEST);
+}
+
+/*
+** still_testing()
+**
+** This function is called to see if the test loop should be terminated.
+*/
+int
+still_testing(void)
+{
+ fflush(stdout);
+ test_complete++;
+ return EXIT_CONDITION;
+}
+
+/*
+** pad_test_shutdown()
+**
+** Do the stuff needed to end a test.
+*/
+void
+pad_test_shutdown(
+ struct test_list *t,
+ int crlf)
+{
+ int i;
+ int counts; /* total counts */
+ int ss; /* Save string index */
+ int cpo; /* characters per operation */
+ int delta; /* difference in characters */
+ int bogus; /* Time is inaccurate */
+ struct test_results *r; /* Results of current test */
+ int ss_index[TT_MAX]; /* String index */
+
+ if (tty_can_sync == SYNC_TESTED) {
+ bogus = tty_sync_error();
+ } else {
+ bogus = 1;
+ }
+ usec_run_time = event_time(TIME_TEST);
+ tx_source = t;
+ tx_characters = raw_characters_sent;
+ tx_cps = sliding_scale(tx_characters, 1000000, usec_run_time);
+
+ /* save the data base */
+ for (txp = ss = counts = 0; txp < ttp; txp++) {
+ tx_cap[txp] = tt_cap[txp];
+ tx_count[txp] = tt_count[txp];
+ tx_delay[txp] = tt_delay[txp];
+ tx_affected[txp] = tt_affected[txp];
+ tx_index[txp] = get_string_cap_byvalue(tt_cap[txp]);
+ if (tx_index[txp] >= 0) {
+ if (cap_match(t->caps_done, strnames[tx_index[txp]])) {
+ ss_index[ss++] = txp;
+ counts += tx_count[txp];
+ }
+ }
+ }
+
+ if (crlf) {
+ put_crlf();
+ }
+ if (counts == 0 || tty_cps == 0 || bogus) {
+ /* nothing to do */
+ return;
+ }
+ /* calculate the suggested pad times */
+ delta = usec_run_time - sliding_scale(tx_characters, 1000000, tty_cps);
+ if (delta < 0) {
+ /* probably should bump tx_characters */
+ delta = 0;
+ }
+ cpo = delta / counts;
+ for (i = 0; i < ss; i++) {
+ if (!(r = get_next_block())) {
+ return;
+ }
+ r->next = pads[tx_index[ss_index[i]]];
+ pads[tx_index[ss_index[i]]] = r;
+ r->test = t;
+ r->reps = tx_affected[ss_index[i]];
+ r->delay = cpo;
+ }
+}
+
+/*
+** show_cap_results(index)
+**
+** Display the previous results
+*/
+static void
+show_cap_results(
+ int x)
+{
+ struct test_results *r; /* a result */
+ int delay;
+
+ if ((r = pads[x])) {
+ sprintf(temp, "(%s)", strnames[x]);
+ ptext(temp);
+ while (r) {
+ sprintf(temp, "$<%d>", r->delay / 1000);
+ put_columns(temp, strlen(temp), 10);
+ r = r->next;
+ }
+ r = pads[x];
+ while (r) {
+ if (r->reps > 1) {
+ delay = r->delay / (r->reps * 100);
+ sprintf(temp, "$<%d.%d*>", delay / 10, delay % 10);
+ put_columns(temp, strlen(temp), 10);
+ }
+ r = r->next;
+ }
+ put_crlf();
+ }
+}
+
+/*
+** dump_test_stats(test_list, status, ch)
+**
+** Dump the statistics about the last test
+*/
+void
+dump_test_stats(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+ char tbuf[32];
+ int x[32];
+
+ put_crlf();
+ if (tx_source && tx_source->caps_done) {
+ cap_index(tx_source->caps_done, x);
+ if (x[0] >= 0) {
+ sprintf(temp, "Caps summary for (%s)",
+ tx_source->caps_done);
+ ptextln(temp);
+ for (i = 0; x[i] >= 0; i++) {
+ show_cap_results(x[i]);
+ }
+ put_crlf();
+ }
+ }
+ sprintf(tbuf, "%011u", usec_run_time);
+ sprintf(temp, "Test time: %d.%s, characters per second %d, characters %d",
+ usec_run_time / 1000000, &tbuf[5], tx_cps, tx_characters);
+ ptextln(temp);
+ for (i = 0; i < txp; i++) {
+ if ((j = get_string_cap_byvalue(tx_cap[i])) >= 0) {
+ sprintf(tbuf, "(%s)", strnames[j]);
+ } else {
+ strcpy(tbuf, "(?)");
+ }
+ sprintf(temp, "%8d %3d $<%3d> %8s %s",
+ tx_count[i], tx_affected[i], tx_delay[i],
+ tbuf, expand(tx_cap[i]));
+ putln(temp);
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** longer_test_time(test_list, status, ch)
+**
+** Extend the number of seconds for each test.
+*/
+void
+longer_test_time(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ pad_test_duration += 1;
+ sprintf(txt_longer_test_time, "+) Change test time to %d seconds",
+ pad_test_duration + 1);
+ sprintf(txt_shorter_test_time, "-) Change test time to %d seconds",
+ pad_test_duration - 1);
+ sprintf(temp, "Tests will run for %d seconds", pad_test_duration);
+ ptext(temp);
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** shorter_test_time(test_list, status, ch)
+**
+** Shorten the number of seconds for each test.
+*/
+void
+shorter_test_time(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ if (pad_test_duration > 1) {
+ pad_test_duration -= 1;
+ sprintf(txt_longer_test_time, "+) Change test time to %d seconds",
+ pad_test_duration + 1);
+ sprintf(txt_shorter_test_time, "-) Change test time to %d seconds",
+ pad_test_duration - 1);
+ }
+ sprintf(temp, "Tests will run for %d second%s", pad_test_duration,
+ pad_test_duration > 1 ? "s" : "");
+ ptext(temp);
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** longer_augment(test_list, status, ch)
+**
+** Lengthen the number of lines/characters effected
+*/
+void
+longer_augment(
+ struct test_list *t,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ augment <<= 1;
+ set_augment_txt();
+ if (augment_test) {
+ t = augment_test;
+ }
+ sprintf(temp, "The pad tests will effect %d %s.", augment,
+ ((t->flags & MENU_LC_MASK) == MENU_lines) ?
+ "lines" : "characters");
+ ptextln(temp);
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** shorter_augment(test_list, status, ch)
+**
+** Shorten the number of lines/characters effected
+*/
+void
+shorter_augment(
+ struct test_list *t,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ if (augment > 1) {
+ /* don't let the augment go to zero */
+ augment >>= 1;
+ }
+ set_augment_txt();
+ if (augment_test) {
+ t = augment_test;
+ }
+ sprintf(temp, "The pad tests will effect %d %s.", augment,
+ ((t->flags & MENU_LC_MASK) == MENU_lines) ?
+ "lines" : "characters");
+ ptextln(temp);
+ *ch = REQUEST_PROMPT;
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: crum.c,v 1.2 1999/08/21 23:09:08 tom Exp $")
+
+/*
+ * Test cursor movement.
+ */
+
+static void crum_clear(struct test_list *t, int *state, int *ch);
+static void crum_home(struct test_list *t, int *state, int *ch);
+static void crum_ll(struct test_list *t, int *state, int *ch);
+static void crum_move(struct test_list *t, int *state, int *ch);
+static void crum_os(struct test_list *t, int *state, int *ch);
+
+static char crum_text[5][80];
+
+struct test_list crum_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {MENU_NEXT, 0, "clear", 0, 0, crum_clear, 0},
+ {MENU_NEXT, 0, "home", 0, 0, crum_home, 0},
+ {MENU_NEXT, 0, "ll", 0, 0, crum_ll, 0},
+ {MENU_NEXT, 0, crum_text[0], "home cuu1", 0, crum_move, 0},
+ {MENU_NEXT + 1, 0, crum_text[1], "cub1 cud1 cuf1 cuu1", 0, crum_move, 0},
+ {MENU_NEXT + 2, 0, crum_text[2], "cub cud cuf cuu", 0, crum_move, 0},
+ {MENU_NEXT + 3, 0, crum_text[3], "vpa hpa", 0, crum_move, 0},
+ {MENU_NEXT + 4, 0, crum_text[4], "cup", 0, crum_move, 0},
+ {MENU_NEXT, 0, "cup", "os", 0, crum_os, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+/*
+** move_to(from-row, from-column, to-row, to-column, selection)
+**
+** move the cursor from (rf, cf) to (rt, ct) using sel
+*/
+static void
+move_to(
+ int rf,
+ int cf,
+ int rt,
+ int ct,
+ int sel)
+{
+ char *s;
+
+ if (sel & 16) { /* use (cup) */
+ s = tparm(cursor_address, rt, ct);
+ tputs(s, lines, tc_putch);
+ return;
+ }
+ if (sel & 8) { /* use (hpa) (vpa) */
+ if (column_address) {
+ s = tparm(column_address, ct);
+ tputs(s, 1, tc_putch);
+ cf = ct;
+ }
+ if (row_address) {
+ s = tparm(row_address, rt);
+ tputs(s, 1, tc_putch);
+ rf = rt;
+ }
+ }
+ if (sel & 4) { /* paramiterized relative cursor movement */
+ if (parm_right_cursor)
+ if (cf < ct) {
+ s = tparm(parm_right_cursor, ct - cf);
+ tputs(s, ct - cf, tc_putch);
+ cf = ct;
+ }
+ if (parm_left_cursor)
+ if (cf > ct) {
+ s = tparm(parm_left_cursor, cf - ct);
+ tputs(s, cf - ct, tc_putch);
+ cf = ct;
+ }
+ if (parm_down_cursor)
+ if (rf < rt) {
+ s = tparm(parm_down_cursor, rt - rf);
+ tputs(s, rt - rf, tc_putch);
+ rf = rt;
+ }
+ if (parm_up_cursor)
+ if (rf > rt) {
+ s = tparm(parm_up_cursor, rf - rt);
+ tputs(s, rf - rt, tc_putch);
+ rf = rt;
+ }
+ }
+ if (sel & 2) {
+ if (cursor_left)
+ while (cf > ct) {
+ tc_putp(cursor_left);
+ cf--;
+ }
+ /*
+ do vertical motion next. Just in case cursor_down has a
+ side effect of changing the column. This could happen if
+ the tty handler translates NL to CRNL.
+ */
+ if (cursor_down)
+ while (rf < rt) {
+ tc_putp(cursor_down);
+ rf++;
+ }
+ if (cursor_up)
+ while (rf > rt) {
+ tc_putp(cursor_up);
+ rf--;
+ }
+ if (cursor_right)
+ while (cf < ct) {
+ tc_putp(cursor_right);
+ cf++;
+ }
+ }
+ /* last chance */
+ if (rf > rt) {
+ if (can_go_home) { /* a bit drastic but ... */
+ go_home();
+ cf = 0;
+ rf = 0;
+ } else if (cursor_up) {
+ while (rf > rt) {
+ tc_putp(cursor_up);
+ rf--;
+ }
+ }
+ }
+ if (ct == 0 && rt > rf) {
+ put_crlf();
+ cf = 0;
+ rf++;
+ }
+ if (ct == 0 && cf != 0) {
+ put_cr();
+ cf = 0;
+ }
+ while (rf < rt) {
+ put_lf();
+ rf++;
+ }
+ while (cf > ct) {
+ put_str("\b");
+ cf--;
+ }
+ if (cursor_right) {
+ while (cf < ct) {
+ tc_putp(cursor_right);
+ cf++;
+ }
+ } else {
+ /* go ahead and trash my display */
+ while (cf < ct) {
+ putchp(' ');
+ cf++;
+ }
+ }
+}
+
+/*
+** display_it(selection, text)
+**
+** print the display using sel
+*/
+static void
+display_it(
+ int sel,
+ char *txt)
+{
+ int i, done_line;
+
+ put_clear();
+ go_home();
+ put_newlines(2);
+ ptextln(" The top line should be alternating <'s and >'s");
+ ptextln(" The left side should be alternating A's and V's");
+ ptext(" Testing ");
+ ptext(txt);
+ put_cr();
+
+ /* horizontal */
+ move_to(done_line = line_count, 0, 0, 2, sel);
+ for (i = 4; i < columns - 2; i += 2) {
+ putchp('>');
+ move_to(0, i - 1, 0, i, sel);
+ }
+ putchp('>');
+ i -= 2;
+ move_to(0, i + 1, 0, i - 1, sel);
+ for (; i > 2; i -= 2) {
+ putchp('<');
+ move_to(0, i, 0, i - 3, sel);
+ }
+ putchp('<');
+
+ /* vertical */
+ move_to(0, 2, 0, 0, sel);
+ for (i = 2; i < lines - 1; i += 2) {
+ putchp('V');
+ move_to(i - 2, 1, i, 0, sel);
+ }
+ putchp('V');
+ i -= 2;
+ move_to(i, 1, i + 1, 0, sel);
+ for (; i > 0; i -= 2) {
+ putchp('A');
+ move_to(i + 1, 1, i - 1, 0, sel);
+ }
+ putchp('A');
+ move_to(i + 1, 1, 0, 0, sel); /* go home first */
+ move_to(0, 0, done_line + 1, 3, sel);
+ put_str(txt);
+ put_str(" Done. ");
+}
+
+/*
+** crum_clear(test_list, status, ch)
+**
+** (clear) test Clear screen
+*/
+static void
+crum_clear(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (clear_screen) {
+ for (i = lines; i > 1; i--) {
+ putln("garbage");
+ }
+ put_clear();
+ ptextln("This line should start in the home position.");
+ ptext("The rest of the screen should be clear. ");
+ } else {
+ ptextln("(clear) Clear screen is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** crum_home(test_list, status, ch)
+**
+** (home) test Home cursor
+*/
+static void
+crum_home(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (cursor_home) {
+ put_clear();
+ put_newlines(lines / 2);
+ go_home();
+ put_crlf();
+ ptext("The bottom line should have text.");
+ go_home();
+ put_newlines(lines - 1);
+ ptext("This line is on the bottom.");
+ go_home();
+ ptextln("This line starts in the home position.");
+ put_crlf();
+ } else {
+ ptextln("(home) Home cursor is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** crum_ll(test_list, status, ch)
+**
+** (ll) test Last line
+*/
+static void
+crum_ll(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ /*
+ (ll) may be simulated with (cup). Don't complain if (cup) is present.
+ */
+ if (cursor_to_ll) {
+ put_clear();
+ put_str("This line could be anywhere.");
+ tc_putp(cursor_to_ll);
+ ptext("This line should be on the bottom");
+ go_home();
+ put_crlf();
+ } else
+ if (cursor_address) {
+ return;
+ } else {
+ ptextln("(ll) Move to last line is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** crum_move(test_list, status, ch)
+**
+** (*) test all cursor move commands
+*/
+static void
+crum_move(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ char buf[80];
+ int n;
+
+ switch (n = (t->flags & 15)) {
+ case 0:
+ sprintf(buf, " (cr) (nel) (cub1)%s",
+ cursor_home ? " (home)" : (cursor_up ? " (cuu1)" : ""));
+ break;
+ case 1:
+ sprintf(buf, "%s%s%s%s", cursor_left ? " (cub1)" : "",
+ cursor_down ? " (cud1)" : "", cursor_right ? " (cuf1)" : "",
+ cursor_up ? " (cuu1)" : "");
+ if (buf[0] == '\0') {
+ ptext(" (cub1) (cud1) (cuf1) (cuu1) not defined.");
+ }
+ break;
+ case 2:
+ sprintf(buf, "%s%s%s%s", parm_left_cursor ? " (cub)" : "",
+ parm_down_cursor ? " (cud)" : "",
+ parm_right_cursor ? " (cuf)" : "",
+ parm_up_cursor ? " (cuu)" : "");
+ if (buf[0] == '\0') {
+ ptext(" (cub) (cud) (cuf) (cuu) not defined.");
+ }
+ break;
+ case 3:
+ sprintf(buf, "%s%s", row_address ? " (vpa)" : "",
+ column_address ? " (hpa)" : "");
+ if (buf[0] == '\0') {
+ ptext(" (vpa) (hpa) not defined.");
+ }
+ break;
+ case 4:
+ if (!cursor_address) {
+ ptext(" (cup) not defined. ");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ strcpy(buf, " (cup)");
+ break;
+ }
+ if (buf[0] == '\0') {
+ put_str(" Done. ");
+ } else {
+ can_test(buf, FLAG_TESTED);
+ strcpy(crum_text[n], &buf[2]);
+ crum_text[n][strlen(buf) - 3] = '\0';
+
+ display_it(1 << n, buf);
+ }
+ *ch = wait_here();
+ if (*ch != 'r') {
+ put_clear();
+ }
+}
+
+/*
+** crum_os(test_list, status, ch)
+**
+** (cup) test Cursor position on overstrike terminals
+*/
+static void
+crum_os(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (cursor_address && over_strike) {
+ put_clear();
+ for (i = 0; i < columns - 2; i++) {
+ tc_putch('|');
+ }
+ for (i = 1; i < lines - 2; i++) {
+ put_crlf();
+ tc_putch('_');
+ }
+ for (i = 0; i < columns - 2; i++) {
+ tputs(tparm(cursor_address, 0, i), lines, tc_putch);
+ tc_putch('+');
+ }
+ for (i = 0; i < lines - 2; i++) {
+ tputs(tparm(cursor_address, i, 0), lines, tc_putch);
+ tc_putch(']');
+ tc_putch('_');
+ }
+ go_home();
+ put_newlines(3);
+ ptext(" All the characters should look the same. ");
+ generic_done_message(t, state, ch);
+ put_clear();
+ }
+}
--- /dev/null
+/*
+** Copyright (C) 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+#include <time.h>
+#include <tic.h>
+
+MODULE_ID("$Id: edit.c,v 1.3 1999/06/16 00:43:43 tom Exp $")
+
+/*
+ * Terminfo edit features
+ */
+static void show_info(struct test_list *, int *, int *);
+static void show_value(struct test_list *, int *, int *);
+static void show_untested(struct test_list *, int *, int *);
+static void show_changed(struct test_list *, int *, int *);
+
+#define SHOW_VALUE 1
+#define SHOW_EDIT 2
+#define SHOW_DELETE 3
+
+struct test_list edit_test_list[] = {
+ {MENU_CLEAR, 0, 0, 0, "i) display current terminfo", show_info, 0},
+ {0, 0, 0, 0, "w) write the current terminfo to a file", save_info, 0},
+ {SHOW_VALUE, 3, 0, 0, "v) show value of a selected cap", show_value, 0},
+ {SHOW_EDIT, 4, 0, 0, "e) edit value of a selected cap", show_value, 0},
+ {SHOW_DELETE, 3, 0, 0, "d) delete string", show_value, 0},
+ {0, 3, 0, 0, "m) show caps that have been modified", show_changed, 0},
+ {MENU_CLEAR + FLAG_CAN_TEST, 0, 0, 0, "c) show caps that can be tested", show_report, 0},
+ {MENU_CLEAR + FLAG_TESTED, 0, 0, 0, "t) show caps that have been tested", show_report, 0},
+ {MENU_CLEAR + FLAG_FUNCTION_KEY, 0, 0, 0, "f) show a list of function keys", show_report, 0},
+ {MENU_CLEAR, 0, 0, 0, "u) show caps defined that can not be tested", show_untested, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+static char change_pad_text[MAX_CHANGES][80];
+struct test_list change_pad_list[MAX_CHANGES] = {
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+static void build_change_menu(struct test_menu *);
+static void change_one_entry(struct test_list *, int *, int *);
+
+struct test_menu change_pad_menu = {
+ 0, 'q', 0,
+ "Select cap name", "change", 0,
+ build_change_menu, change_pad_list, 0, 0, 0
+};
+
+extern struct test_results *pads[STRCOUNT]; /* save pad results here */
+
+static TERMTYPE original_term; /* terminal type description */
+
+static char flag_boolean[BOOLCOUNT]; /* flags for booleans */
+static char flag_numerics[NUMCOUNT]; /* flags for numerics */
+static char flag_strings[STRCOUNT]; /* flags for strings */
+static int xon_index; /* Subscript for (xon) */
+int xon_shadow;
+
+static int start_display; /* the display has just started */
+static int display_lines; /* number of lines displayed */
+
+/*
+** send_info_string(str)
+**
+** Return the terminfo string prefixed by the correct seperator
+*/
+static void
+send_info_string(
+ const char *str,
+ int *ch)
+{
+ int len;
+
+ if (display_lines == -1) {
+ return;
+ }
+ len = strlen(str);
+ if (len + char_count + 3 >= columns) {
+ if (start_display == 0) {
+ put_str(",");
+ }
+ put_crlf();
+ if (++display_lines > lines) {
+ ptext("-- more -- ");
+ *ch = wait_here();
+ if (*ch == 'q') {
+ display_lines = -1;
+ return;
+ }
+ display_lines = 0;
+ }
+ if (len >= columns) {
+ /* if the terminal does not (am) then this loses */
+ if (columns) {
+ display_lines += ((strlen(str) + 3) / columns) + 1;
+ }
+ put_str(" ");
+ put_str(str);
+ start_display = 0;
+ return;
+ }
+ ptext(" ");
+ } else
+ if (start_display == 0) {
+ ptext(", ");
+ } else {
+ ptext(" ");
+ }
+ ptext(str);
+ start_display = 0;
+}
+
+/*
+** show_info(test_list, status, ch)
+**
+** Display the current terminfo
+*/
+static void
+show_info(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ int i;
+ char buf[1024];
+
+ display_lines = 1;
+ start_display = 1;
+ for (i = 0; i < BOOLCOUNT; i++) {
+ if ((i == xon_index) ? xon_shadow : CUR Booleans[i]) {
+ send_info_string(boolnames[i], ch);
+ }
+ }
+ for (i = 0; i < NUMCOUNT; i++) {
+ if (CUR Numbers[i] >= 0) {
+ sprintf(buf, "%s#%d", numnames[i], CUR Numbers[i]);
+ send_info_string(buf, ch);
+ }
+ }
+ for (i = 0; i < STRCOUNT; i++) {
+ if (CUR Strings[i]) {
+ sprintf(buf, "%s=%s", strnames[i],
+ print_expand(CUR Strings[i]));
+ send_info_string(buf, ch);
+ }
+ }
+ put_newlines(2);
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** save_info_string(str, fp)
+**
+** Write the terminfo string prefixed by the correct seperator
+*/
+static void
+save_info_string(
+ const char *str,
+ FILE *fp)
+{
+ int len;
+
+ len = strlen(str);
+ if (len + display_lines >= 77) {
+ if (display_lines > 0) {
+ (void) fprintf(fp, "\n\t");
+ }
+ display_lines = 8;
+ } else
+ if (display_lines > 0) {
+ (void) fprintf(fp, " ");
+ display_lines++;
+ } else {
+ (void) fprintf(fp, "\t");
+ display_lines = 8;
+ }
+ (void) fprintf(fp, "%s,", str);
+ display_lines += len + 1;
+}
+
+/*
+** save_info(test_list, status, ch)
+**
+** Write the current terminfo to a file
+*/
+void
+save_info(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+ FILE *fp;
+ time_t now;
+ char buf[1024];
+
+ if ((fp = fopen(tty_basename, "w")) == (FILE *) NULL) {
+ (void) sprintf(temp, "can't open: %s", tty_basename);
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+ return;
+ }
+ time(&now);
+ /* Note: ctime() returns a newline at the end of the string */
+ (void) fprintf(fp, "# Terminfo created by TACK for TERM=%s on %s",
+ tty_basename, ctime(&now));
+ (void) fprintf(fp, "%s|%s,\n", tty_basename, longname());
+
+ display_lines = 0;
+ for (i = 0; i < BOOLCOUNT; i++) {
+ if (i == xon_index ? xon_shadow : CUR Booleans[i]) {
+ save_info_string(boolnames[i], fp);
+ }
+ }
+ for (i = 0; i < NUMCOUNT; i++) {
+ if (CUR Numbers[i] >= 0) {
+ sprintf(buf, "%s#%d", numnames[i], CUR Numbers[i]);
+ save_info_string(buf, fp);
+ }
+ }
+ for (i = 0; i < STRCOUNT; i++) {
+ if (CUR Strings[i]) {
+ sprintf(buf, "%s=%s", strnames[i],
+ _nc_tic_expand(CUR Strings[i], TRUE, TRUE));
+ save_info_string(buf, fp);
+ }
+ }
+ (void) fprintf(fp, "\n");
+ (void) fclose(fp);
+ sprintf(temp, "Terminfo saved as file: %s", tty_basename);
+ ptextln(temp);
+}
+
+/*
+** show_value(test_list, status, ch)
+**
+** Display the value of a selected cap
+*/
+static void
+show_value(
+ struct test_list *t,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ struct name_table_entry const *nt;
+ char *s;
+ int n, op, b;
+ char buf[1024];
+ char tmp[1024];
+
+ ptext("enter name: ");
+ read_string(buf, 80);
+ if (buf[0] == '\0' || buf[1] == '\0') {
+ *ch = buf[0];
+ return;
+ }
+ if (line_count + 2 >= lines) {
+ put_clear();
+ }
+ op = t->flags & 255;
+ if ((nt = _nc_find_entry(buf, _nc_info_hash_table))) {
+ switch (nt->nte_type) {
+ case BOOLEAN:
+ if (op == SHOW_DELETE) {
+ if (nt->nte_index == xon_index) {
+ xon_shadow = 0;
+ } else {
+ CUR Booleans[nt->nte_index] = 0;
+ }
+ return;
+ }
+ b = nt->nte_index == xon_index ? xon_shadow :
+ CUR Booleans[nt->nte_index];
+ sprintf(temp, "boolean %s %s", buf,
+ b ? "True" : "False");
+ break;
+ case STRING:
+ if (op == SHOW_DELETE) {
+ CUR Strings[nt->nte_index] = (char *) 0;
+ return;
+ }
+ if (CUR Strings[nt->nte_index]) {
+ sprintf(temp, "string %s %s", buf,
+ expand(CUR Strings[nt->nte_index]));
+ } else {
+ sprintf(temp, "undefined string %s", buf);
+ }
+ break;
+ case NUMBER:
+ if (op == SHOW_DELETE) {
+ CUR Numbers[nt->nte_index] = -1;
+ return;
+ }
+ sprintf(temp, "numeric %s %d", buf,
+ CUR Numbers[nt->nte_index]);
+ break;
+ default:
+ sprintf(temp, "unknown");
+ break;
+ }
+ ptextln(temp);
+ } else {
+ sprintf(temp, "Cap not found: %s", buf);
+ ptextln(temp);
+ return;
+ }
+ if (op != SHOW_EDIT) {
+ return;
+ }
+ if (nt->nte_type == BOOLEAN) {
+ ptextln("Value flipped");
+ if (nt->nte_index == xon_index) {
+ xon_shadow = !xon_shadow;
+ } else {
+ CUR Booleans[nt->nte_index] = !CUR Booleans[nt->nte_index];
+ }
+ return;
+ }
+ ptextln("Enter new value");
+ read_string(buf, sizeof(buf));
+
+ switch (nt->nte_type) {
+ case STRING:
+ _nc_reset_input((FILE *) 0, buf);
+ _nc_trans_string(tmp);
+ s = (char *)malloc(strlen(tmp) + 1);
+ strcpy(s, tmp);
+ CUR Strings[nt->nte_index] = s;
+ sprintf(temp, "new string value %s", nt->nte_name);
+ ptextln(temp);
+ ptextln(expand(CUR Strings[nt->nte_index]));
+ break;
+ case NUMBER:
+ if (sscanf(buf, "%d", &n) == 1) {
+ CUR Numbers[nt->nte_index] = n;
+ sprintf(temp, "new numeric value %s %d",
+ nt->nte_name, n);
+ ptextln(temp);
+ } else {
+ sprintf(temp, "Illegal number: %s", buf);
+ ptextln(temp);
+ }
+ break;
+ default:
+ break;
+ }
+}
+
+/*
+** get_string_cap_byname(name, long_name)
+**
+** Given a cap name, find the value
+** Errors are quietly ignored.
+*/
+char *
+get_string_cap_byname(
+ const char *name,
+ const char **long_name)
+{
+ struct name_table_entry const *nt;
+
+ if ((nt = _nc_find_entry(name, _nc_info_hash_table))) {
+ if (nt->nte_type == STRING) {
+ *long_name = strfnames[nt->nte_index];
+ return (CUR Strings[nt->nte_index]);
+ }
+ }
+ *long_name = "??";
+ return (char *) 0;
+}
+
+/*
+** get_string_cap_byvalue(value)
+**
+** Given a capability string, find its position in the data base.
+** Return the index or -1 if not found.
+*/
+int
+get_string_cap_byvalue(
+ const char *value)
+{
+ int i;
+
+ if (value) {
+ for (i = 0; i < STRCOUNT; i++) {
+ if (CUR Strings[i] == value) {
+ return i;
+ }
+ }
+ /* search for translated strings */
+ for (i = 0; i < TM_last; i++) {
+ if (TM_string[i].value == value) {
+ return TM_string[i].index;
+ }
+ }
+ }
+ return -1;
+}
+
+/*
+** show_changed(test_list, status, ch)
+**
+** Display a list of caps that have been changed.
+*/
+static void
+show_changed(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ int i, header = 1, v;
+ const char *a;
+ const char *b;
+ static char title[] = " old value cap new value";
+ char abuf[1024];
+
+ for (i = 0; i < BOOLCOUNT; i++) {
+ v = (i == xon_index) ? xon_shadow : CUR Booleans[i];
+ if (original_term.Booleans[i] != v) {
+ if (header) {
+ ptextln(title);
+ header = 0;
+ }
+ sprintf(temp, "%30d %6s %d",
+ original_term.Booleans[i], boolnames[i], v);
+ ptextln(temp);
+ }
+ }
+ for (i = 0; i < NUMCOUNT; i++) {
+ if (original_term.Numbers[i] != CUR Numbers[i]) {
+ if (header) {
+ ptextln(title);
+ header = 0;
+ }
+ sprintf(temp, "%30d %6s %d",
+ original_term.Numbers[i], numnames[i],
+ CUR Numbers[i]);
+ ptextln(temp);
+ }
+ }
+ for (i = 0; i < STRCOUNT; i++) {
+ a = original_term.Strings[i] ? original_term.Strings[i] : "";
+ b = CUR Strings[i] ? CUR Strings[i] : "";
+ if (strcmp(a, b)) {
+ if (header) {
+ ptextln(title);
+ header = 0;
+ }
+ strcpy(abuf, _nc_tic_expand(a, TRUE, TRUE));
+ sprintf(temp, "%30s %6s %s", abuf, strnames[i],
+ _nc_tic_expand(b, TRUE, TRUE));
+ putln(temp);
+ }
+ }
+ if (header) {
+ ptextln("No changes");
+ }
+ put_crlf();
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** user_modified()
+**
+** Return TRUE if the user has modified the terminfo
+*/
+int
+user_modified(void)
+{
+ const char *a, *b;
+ int i, v;
+
+ for (i = 0; i < BOOLCOUNT; i++) {
+ v = (i == xon_index) ? xon_shadow : CUR Booleans[i];
+ if (original_term.Booleans[i] != v) {
+ return TRUE;
+ }
+ }
+ for (i = 0; i < NUMCOUNT; i++) {
+ if (original_term.Numbers[i] != CUR Numbers[i]) {
+ return TRUE;
+ }
+ }
+ for (i = 0; i < STRCOUNT; i++) {
+ a = original_term.Strings[i] ? original_term.Strings[i] : "";
+ b = CUR Strings[i] ? CUR Strings[i] : "";
+ if (strcmp(a, b)) {
+ return TRUE;
+ }
+ }
+ return FALSE;
+}
+
+/*****************************************************************************
+ *
+ * Maintain the list of capabilities that can be tested
+ *
+ *****************************************************************************/
+
+/*
+** mark_cap(name, flag)
+**
+** Mark the cap data base with the flag provided.
+*/
+static void
+mark_cap(
+ char *name,
+ int flag)
+{
+ struct name_table_entry const *nt;
+
+ if ((nt = _nc_find_entry(name, _nc_info_hash_table))) {
+ switch (nt->nte_type) {
+ case BOOLEAN:
+ flag_boolean[nt->nte_index] |= flag;
+ break;
+ case STRING:
+ flag_strings[nt->nte_index] |= flag;
+ break;
+ case NUMBER:
+ flag_numerics[nt->nte_index] |= flag;
+ break;
+ default:
+ sprintf(temp, "unknown cap type (%s)", name);
+ ptextln(temp);
+ break;
+ }
+ } else {
+ sprintf(temp, "Cap not found: %s", name);
+ ptextln(temp);
+ (void) wait_here();
+ }
+}
+
+/*
+** can_test(name-list, flags)
+**
+** Scan the name list and get the names.
+** Enter each name into the can-test data base.
+** <space> ( and ) may be used as seperators.
+*/
+void
+can_test(
+ const char *s,
+ int flags)
+{
+ int ch, i, j;
+ char name[32];
+
+ if (s) {
+ for (i = j = 0; (name[j] = ch = *s); s++) {
+ if (ch == ' ' || ch == ')' || ch == '(') {
+ if (j) {
+ name[j] = '\0';
+ mark_cap(name, flags);
+ }
+ j = 0;
+ } else {
+ j++;
+ }
+ }
+ if (j) {
+ mark_cap(name, flags);
+ }
+ }
+}
+
+/*
+** cap_index(name-list, index-list)
+**
+** Scan the name list and return a list of indexes.
+** <space> ( and ) may be used as seperators.
+** This list is terminated with -1.
+*/
+void
+cap_index(
+ const char *s,
+ int *inx)
+{
+ struct name_table_entry const *nt;
+ int ch, i, j;
+ char name[32];
+
+ if (s) {
+ for (i = j = 0; ; s++) {
+ name[j] = ch = *s;
+ if (ch == ' ' || ch == ')' || ch == '(' || ch == 0) {
+ if (j) {
+ name[j] = '\0';
+ if ((nt = _nc_find_entry(name,
+ _nc_info_hash_table)) &&
+ (nt->nte_type == STRING)) {
+ *inx++ = nt->nte_index;
+ }
+ }
+ if (ch == 0) {
+ break;
+ }
+ j = 0;
+ } else {
+ j++;
+ }
+ }
+ }
+ *inx = -1;
+}
+
+/*
+** cap_match(name-list, cap)
+**
+** Scan the name list and see if the cap is in the list.
+** Return TRUE if we find an exact match.
+** <space> ( and ) may be used as seperators.
+*/
+int
+cap_match(
+ const char *names,
+ const char *cap)
+{
+ char *s;
+ int c, l, t;
+
+ if (names) {
+ l = strlen(cap);
+ while ((s = strstr(names, cap))) {
+ c = (names == s) ? 0 : *(s - 1);
+ t = s[l];
+ if ((c == 0 || c == ' ' || c == '(') &&
+ (t == 0 || t == ' ' || t == ')')) {
+ return TRUE;
+ }
+ if (t == 0) {
+ break;
+ }
+ names = s + l;
+ }
+ }
+ return FALSE;
+}
+
+/*
+** show_report(test_list, status, ch)
+**
+** Display a list of caps that can be tested
+*/
+void
+show_report(
+ struct test_list *t,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ int i, j, nc, flag;
+ const char *s;
+ const char *nx[BOOLCOUNT + NUMCOUNT + STRCOUNT];
+
+ flag = t->flags & 255;
+ nc = 0;
+ for (i = 0; i < BOOLCOUNT; i++) {
+ if (flag_boolean[i] & flag) {
+ nx[nc++] = boolnames[i];
+ }
+ }
+ for (i = 0; i < NUMCOUNT; i++) {
+ if (flag_numerics[i] & flag) {
+ nx[nc++] = numnames[i];
+ }
+ }
+ for (i = 0; i < STRCOUNT; i++) {
+ if (flag_strings[i] & flag) {
+ nx[nc++] = strnames[i];
+ }
+ }
+ /* sort */
+ for (i = 0; i < nc - 1; i++) {
+ for (j = i + 1; j < nc; j++) {
+ if (strcmp(nx[i], nx[j]) > 0) {
+ s = nx[i];
+ nx[i] = nx[j];
+ nx[j] = s;
+ }
+ }
+ }
+ if (flag & FLAG_FUNCTION_KEY) {
+ ptextln("The following function keys can be tested:");
+ } else
+ if (flag & FLAG_CAN_TEST) {
+ ptextln("The following capabilities can be tested:");
+ } else
+ if (flag & FLAG_TESTED) {
+ ptextln("The following capabilities have been tested:");
+ }
+ put_crlf();
+ for (i = 0; i < nc; i++) {
+ sprintf(temp, "%s ", nx[i]);
+ ptext(temp);
+ }
+ put_newlines(1);
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** show_untested(test_list, status, ch)
+**
+** Display a list of caps that are defined but cannot be tested.
+** Don't bother to sort this list.
+*/
+static void
+show_untested(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ int i;
+
+ ptextln("Caps that are defined but cannot be tested:");
+ for (i = 0; i < BOOLCOUNT; i++) {
+ if (flag_boolean[i] == 0 && CUR Booleans[i]) {
+ sprintf(temp, "%s ", boolnames[i]);
+ ptext(temp);
+ }
+ }
+ for (i = 0; i < NUMCOUNT; i++) {
+ if (flag_numerics[i] == 0 && CUR Numbers[i] >= 0) {
+ sprintf(temp, "%s ", numnames[i]);
+ ptext(temp);
+ }
+ }
+ for (i = 0; i < STRCOUNT; i++) {
+ if (flag_strings[i] == 0 && CUR Strings[i]) {
+ sprintf(temp, "%s ", strnames[i]);
+ ptext(temp);
+ }
+ }
+ put_newlines(1);
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** edit_init()
+**
+** Initialize the function key data base
+*/
+void
+edit_init(void)
+{
+ int i, j, lc;
+ char *lab;
+ struct name_table_entry const *nt;
+ int label_strings[STRCOUNT];
+
+ _nc_copy_termtype(&original_term, &cur_term->type);
+ for (i = 0; i < BOOLCOUNT; i++) {
+ original_term.Booleans[i] = CUR Booleans[i];
+ }
+ for (i = 0; i < NUMCOUNT; i++) {
+ original_term.Numbers[i] = CUR Numbers[i];
+ }
+ /* scan for labels */
+ for (i = lc = 0; i < STRCOUNT; i++) {
+ original_term.Strings[i] = CUR Strings[i];
+ if (strncmp(strnames[i], "lf", 2) == 0) {
+ flag_strings[i] |= FLAG_LABEL;
+ if (CUR Strings[i]) {
+ label_strings[lc++] = i;
+ }
+ }
+ }
+ /* scan for function keys */
+ for (i = 0; i < STRCOUNT; i++) {
+ if ((strnames[i][0] == 'k') && strcmp(strnames[i], "kmous")) {
+ flag_strings[i] |= FLAG_FUNCTION_KEY;
+ lab = (char *) 0;
+ for (j = 0; j < lc; j++) {
+ if (!strcmp(&strnames[i][1],
+ &strnames[label_strings[j]][1])) {
+ lab = CUR Strings[label_strings[j]];
+ break;
+ }
+ }
+ enter_key(strnames[i], CUR Strings[i], lab);
+ }
+ }
+ /* Lookup the translated strings */
+ for (i = 0; i < TM_last; i++) {
+ if ((nt = _nc_find_entry(TM_string[i].name,
+ _nc_info_hash_table)) && (nt->nte_type == STRING)) {
+ TM_string[i].index = nt->nte_index;
+ } else {
+ sprintf(temp, "TM_string lookup failed for: %s",
+ TM_string[i].name);
+ ptextln(temp);
+ }
+ }
+ if ((nt = _nc_find_entry("xon", _nc_info_hash_table)) != 0) {
+ xon_index = nt->nte_index;
+ }
+ xon_shadow = xon_xoff;
+}
+
+/*
+** change_one_entry(test_list, status, ch)
+**
+** Change the padding on the selected cap
+*/
+static void
+change_one_entry(
+ struct test_list *test,
+ int *state,
+ int *chp)
+{
+ struct name_table_entry const *nt;
+ int i, j, x, star, slash, v, dot, ch;
+ const char *s;
+ char *t, *p;
+ const char *current_string;
+ char buf[1024];
+ char pad[1024];
+
+ i = test->flags & 255;
+ if (i == 255) {
+ /* read the cap name from the user */
+ ptext("enter name: ");
+ read_string(pad, 32);
+ if (pad[0] == '\0' || pad[1] == '\0') {
+ *chp = pad[0];
+ return;
+ }
+ if ((nt = _nc_find_entry(pad, _nc_info_hash_table)) &&
+ (nt->nte_type == STRING)) {
+ x = nt->nte_index;
+ current_string = CUR Strings[x];
+ } else {
+ sprintf(temp, "%s is not a string capability", pad);
+ ptext(temp);
+ generic_done_message(test, state, chp);
+ return;
+ }
+ } else {
+ x = tx_index[i];
+ current_string = tx_cap[i];
+ strcpy(pad, strnames[x]);
+ }
+ if (!current_string) {
+ ptextln("That string is not currently defined. Please enter a new value, including the padding delay:");
+ read_string(buf, sizeof(buf));
+ _nc_reset_input((FILE *) 0, buf);
+ _nc_trans_string(pad);
+ t = (char *)malloc(strlen(pad) + 1);
+ strcpy(t, pad);
+ CUR Strings[x] = t;
+ sprintf(temp, "new string value %s", strnames[x]);
+ ptextln(temp);
+ ptextln(expand(t));
+ return;
+ }
+ sprintf(buf, "Current value: (%s) %s", pad, _nc_tic_expand(current_string, TRUE, TRUE));
+ putln(buf);
+ ptextln("Enter new pad. 0 for no pad. CR for no change.");
+ read_string(buf, 32);
+ if (buf[0] == '\0' || (buf[1] == '\0' && isalpha(buf[0]))) {
+ *chp = buf[0];
+ return;
+ }
+ star = slash = FALSE;
+ for (j = v = dot = 0; (ch = buf[j]); j++) {
+ if (ch >= '0' && ch <= '9') {
+ v = ch - '0' + v * 10;
+ if (dot) {
+ dot++;
+ }
+ } else if (ch == '*') {
+ star = TRUE;
+ } else if (ch == '/') {
+ slash = TRUE;
+ } else if (ch == '.') {
+ dot = 1;
+ } else {
+ sprintf(temp, "Illegal character: %c", ch);
+ ptextln(temp);
+ ptext("General format: 99.9*/ ");
+ generic_done_message(test, state, chp);
+ return;
+ }
+ }
+ while (dot > 2) {
+ v /= 10;
+ dot--;
+ }
+ if (dot == 2) {
+ sprintf(pad, "%d.%d%s%s", v / 10, v % 10,
+ star ? "*" : "", slash ? "/" : "");
+ } else {
+ sprintf(pad, "%d%s%s",
+ v, star ? "*" : "", slash ? "/" : "");
+ }
+ s = current_string;
+ t = buf;
+ for (v = 0; (ch = *t = *s++); t++) {
+ if (v == '$' && ch == '<') {
+ while ((ch = *s++) && (ch != '>'));
+ for (p = pad; (*++t = *p++); );
+ *t++ = '>';
+ while ((*t++ = *s++));
+ pad[0] = '\0';
+ break;
+ }
+ v = ch;
+ }
+ if (pad[0]) {
+ sprintf(t, "$<%s>", pad);
+ }
+ if ((t = (char *)malloc(strlen(buf) + 1))) {
+ strcpy(t, buf);
+ CUR Strings[x] = t;
+ if (i != 255) {
+ tx_cap[i] = t;
+ }
+ }
+ generic_done_message(test, state, chp);
+}
+
+/*
+** build_change_menu(menu_list)
+**
+** Build the change pad menu list
+*/
+static void
+build_change_menu(
+ struct test_menu *m)
+{
+ int i, j, k;
+ char *s;
+
+ for (i = j = 0; i < txp; i++) {
+ if ((k = tx_index[i]) >= 0) {
+ s = _nc_tic_expand(tx_cap[i], TRUE, TRUE);
+ s[40] = '\0';
+ sprintf(change_pad_text[j], "%c) (%s) %s",
+ 'a' + j, strnames[k], s);
+ change_pad_list[j].flags = i;
+ change_pad_list[j].lines_needed = 4;
+ change_pad_list[j].menu_entry = change_pad_text[j];
+ change_pad_list[j].test_procedure = change_one_entry;
+ j++;
+ }
+ }
+ strcpy(change_pad_text[j], "z) enter name");
+ change_pad_list[j].flags = 255;
+ change_pad_list[j].lines_needed = 4;
+ change_pad_list[j].menu_entry = change_pad_text[j];
+ change_pad_list[j].test_procedure = change_one_entry;
+ j++;
+ change_pad_list[j].flags = MENU_LAST;
+ if (m->menu_title) {
+ put_crlf();
+ ptextln(m->menu_title);
+ }
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: fun.c,v 1.2 1999/06/16 00:46:12 tom Exp $")
+
+/*
+ * Test the function keys on the terminal. The code for echo tests
+ * lives here too.
+ */
+
+static void funkey_keys(struct test_list *, int *, int *);
+static void funkey_meta(struct test_list *, int *, int *);
+static void funkey_label(struct test_list *, int *, int *);
+static void funkey_prog(struct test_list *, int *, int *);
+static void funkey_local(struct test_list *, int *, int *);
+
+struct test_list funkey_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {MENU_CLEAR + FLAG_FUNCTION_KEY, 0, 0, 0, "f) show a list of function keys", show_report, 0},
+ {MENU_NEXT | MENU_CLEAR, 0, "smkx) (rmkx", 0,
+ "k) test function keys", funkey_keys, 0},
+ {MENU_NEXT, 10, "km", "smm rmm", 0, funkey_meta, 0},
+ {MENU_NEXT, 8, "nlab) (smln) (pln) (rmln", "lw lh", 0, funkey_label, 0},
+ {MENU_NEXT, 2, "pfx", 0, 0, funkey_prog, 0},
+ {MENU_NEXT, 2, "pfloc", 0, 0, funkey_local, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+static void printer_on(struct test_list *, int *, int *);
+static void printer_mc0(struct test_list *, int *, int *);
+
+struct test_list printer_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {MENU_NEXT | MENU_CLEAR, 0, "mc4) (mc5) (mc5i", 0, 0, printer_on, 0},
+ {MENU_NEXT | MENU_CLEAR, 0, "mc0", 0, 0, printer_mc0, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+#define MAX_STRINGS STRCOUNT
+
+/* scan code externals */
+extern int scan_max; /* length of longest scan code */
+extern char **scan_up, **scan_down, **scan_name;
+extern int *scan_tested, *scan_length;
+
+/* local definitions */
+static const char *fk_name[MAX_STRINGS];
+static char *fkval[MAX_STRINGS];
+static char *fk_label[MAX_STRINGS]; /* function key labels (if any) */
+static int fk_tested[MAX_STRINGS];
+static int fkmax = 1; /* length of longest key */
+static int got_labels = 0; /* true if we have some labels */
+static int key_count = 0;
+static int end_state;
+
+/* unknown function keys */
+#define MAX_FK_UNK 50
+static char *fk_unknown[MAX_FK_UNK];
+static int fk_length[MAX_FK_UNK];
+static int funk;
+
+/*
+** keys_tested(first-time, show-help, hex-output)
+**
+** Display a list of the keys not tested.
+*/
+static void
+keys_tested(
+ int first_time,
+ int show_help,
+ int hex_output)
+{
+ int i, l;
+ char outbuf[256];
+
+ put_clear();
+ tty_set();
+ flush_input();
+ if (got_labels) {
+ putln("Function key labels:");
+ for (i = 0; i < key_count; ++i) {
+ if (fk_label[i]) {
+ sprintf(outbuf, "%s %s",
+ fk_name[i] ? fk_name[i] : "??", fk_label[i]);
+ put_columns(outbuf, strlen(outbuf), 16);
+ }
+ }
+ put_newlines(2);
+ }
+ if (funk) {
+ putln("The following keys are not defined:");
+ for (i = 0; i < funk; ++i) {
+ put_columns(fk_unknown[i], fk_length[i], 16);
+ }
+ put_mode(exit_attribute_mode);
+ put_newlines(2);
+ }
+ if (first_time) {
+ putln("The following keys are defined:");
+ } else {
+ putln("The following keys have not been tested:");
+ }
+ if (scan_mode) {
+ for (i = 0; scan_down[i]; i++) {
+ if (!scan_tested[i]) {
+ if (hex_output) {
+ strcpy(outbuf, hex_expand_to(scan_down[i], 3));
+ } else {
+ strcpy(outbuf, expand(scan_down[i]));
+ }
+ l = expand_chars;
+ if (hex_output) {
+ strcat(outbuf, hex_expand_to(scan_up[i], 3));
+ } else {
+ strcat(outbuf, expand(scan_up[i]));
+ }
+ expand_chars += l;
+ l = strlen(scan_name[i]);
+ if (((char_count + 16) & ~15) +
+ ((expand_chars + 7) & ~7) + l >= columns) {
+ put_crlf();
+ } else
+ if (char_count + 24 > columns) {
+ put_crlf();
+ } else if (char_count) {
+ putchp(' ');
+ }
+ put_columns(outbuf, expand_chars, 16);
+ put_columns(scan_name[i], l, 8);
+ }
+ }
+ } else {
+ for (i = 0; i < key_count; i++) {
+ if (!fk_tested[i]) {
+ if (hex_output) {
+ strcpy(outbuf, hex_expand_to(fkval[i], 3));
+ } else {
+ strcpy(outbuf, expand(fkval[i]));
+ }
+ l = strlen(fk_name[i]);
+ if (((char_count + 16) & ~15) +
+ ((expand_chars + 7) & ~7) + l >= columns) {
+ put_crlf();
+ } else
+ if (char_count + 24 > columns) {
+ put_crlf();
+ } else
+ if (char_count) {
+ putchp(' ');
+ }
+ put_columns(outbuf, expand_chars, 16);
+ put_columns(fk_name[i], l, 8);
+ }
+ }
+ }
+ put_newlines(2);
+ if (show_help) {
+ ptextln("Hit any function key. Type 'end' to quit. Type ? to update the display.");
+ put_crlf();
+ }
+}
+
+/*
+** enter_key(name, value, label)
+**
+** Enter a function key into the data base
+*/
+void
+enter_key(
+ const char *name,
+ char *value,
+ char *lab)
+{
+ int j;
+
+ if (value) {
+ j = strlen(value);
+ fkmax = fkmax > j ? fkmax : j;
+ /* do not permit duplicates */
+ for (j = 0; j < key_count; j++) {
+ if (!strcmp(fk_name[j], name)) {
+ return;
+ }
+ }
+ fkval[key_count] = value;
+ fk_tested[key_count] = 0;
+ fk_label[key_count] = lab;
+ fk_name[key_count++] = name;
+ if (lab) {
+ got_labels = TRUE;
+ }
+ }
+}
+
+
+static void
+fresh_line(void)
+{ /* clear the line for a new fumction key line */
+ if (over_strike) {
+ put_crlf();
+ } else {
+ put_cr();
+ if (clr_eol) {
+ tc_putp(clr_eol);
+ } else {
+ put_str(" \r");
+ }
+ }
+}
+
+
+static int
+end_funky(int ch)
+{ /* return true if this is the end */
+ switch (ch) {
+ case 'e':
+ case 'E':
+ end_state = 'e';
+ break;
+ case 'n':
+ case 'N':
+ if (end_state == 'e') {
+ end_state = 'n';
+ } else {
+ end_state = 0;
+ }
+ break;
+ case 'd':
+ case 'D':
+ if (end_state == 'n') {
+ end_state = 'd';
+ } else {
+ end_state = 0;
+ }
+ break;
+ case 'l':
+ case 'L':
+ if (end_state == 'l') {
+ end_state = '?';
+ } else {
+ end_state = 'l';
+ }
+ break;
+ default:
+ end_state = 0;
+ break;
+ }
+ return end_state == 'd';
+}
+
+
+static int
+found_match(char *s, int hx, int cc)
+{ /* return true if this string is a match */
+ int j, f;
+ char outbuf[256];
+
+ if (!*s) {
+ return 0;
+ }
+ if (scan_mode) {
+ for (j = f = 0; scan_down[j]; j++) {
+ if (scan_length[j] == 0) {
+ continue;
+ }
+ if (!strncmp(s, scan_down[j], scan_length[j])) {
+ if (!f) { /* first match */
+ put_cr();
+ if (hx) {
+ put_str(hex_expand_to(s, 10));
+ } else {
+ put_str(expand_to(s, 10));
+ }
+ f = 1;
+ }
+ (void) end_funky(scan_name[j][0]);
+ put_str(" ");
+ put_str(scan_name[j]);
+ scan_tested[j] = 1;
+ s += scan_length[j];
+ if (strncmp(s, scan_up[j], scan_length[j])) {
+ put_str(" scan down");
+ } else {
+ s += scan_length[j];
+ }
+ if (!*s) {
+ break;
+ }
+ j = -1;
+ }
+ if (!strncmp(s, scan_up[j], scan_length[j])) {
+ if (!f) { /* first match */
+ put_cr();
+ if (hx) {
+ put_str(hex_expand_to(s, 10));
+ } else {
+ put_str(expand_to(s, 10));
+ }
+ f = 1;
+ }
+ put_str(" ");
+ put_str(scan_name[j]);
+ put_str(" scan up");
+ s += scan_length[j];
+ if (!*s) {
+ break;
+ }
+ j = -1;
+ }
+ }
+ } else {
+ for (j = f = 0; j < key_count; j++) {
+ if (!strcmp(s, fkval[j])) {
+ if (!f) { /* first match */
+ put_cr();
+ if (hx) {
+ put_str(hex_expand_to(s, 10));
+ } else {
+ put_str(expand_to(s, 10));
+ }
+ f = 1;
+ }
+ sprintf(outbuf, " (%s)", fk_name[j]);
+ put_str(outbuf);
+ if (fk_label[j]) {
+ sprintf(outbuf, " <%s>", fk_label[j]);
+ put_str(outbuf);
+ }
+ fk_tested[j] = 1;
+ }
+ }
+ }
+ if (end_state == '?') {
+ keys_tested(0, 1, hx);
+ tty_raw(cc, char_mask);
+ end_state = 0;
+ }
+ return f;
+}
+
+
+static int
+found_exit(char *keybuf, int hx, int cc)
+{ /* return true if the user wants to exit */
+ int j, k;
+ char *s;
+
+
+ if (scan_mode) {
+ if (*keybuf == '\0') {
+ return TRUE;
+ }
+ } else {
+ /* break is a special case */
+ if (*keybuf == '\0') {
+ fresh_line();
+ tty_set();
+ ptext("Hit X to exit: ");
+ if (wait_here() == 'X') {
+ return TRUE;
+ }
+ keys_tested(0, 1, hx);
+ tty_raw(cc, char_mask);
+ return FALSE;
+ }
+ /* is this the end? */
+ for (k = 0; (j = (keybuf[k] & STRIP_PARITY)); k++) {
+ if (end_funky(j)) {
+ return TRUE;
+ }
+ }
+
+ j = TRUE; /* does he need an updated list? */
+ for (k = 0; keybuf[k]; k++) {
+ j &= (keybuf[k] & STRIP_PARITY) == '?';
+ }
+ if (j || end_state == '?') {
+ keys_tested(0, 1, hx);
+ tty_raw(cc, char_mask);
+ end_state = 0;
+ return FALSE;
+ }
+ }
+
+ put_cr();
+ if (hx) {
+ s = hex_expand_to(keybuf, 10);
+ } else {
+ s = expand_to(keybuf, 10);
+ }
+ sprintf(temp, "%s Unknown", s);
+ put_str(temp);
+ for (j = 0; j < MAX_FK_UNK; j++) {
+ if (j == funk) {
+ fk_length[funk] = expand_chars;
+ if ((fk_unknown[funk] = (char *)malloc(strlen(s) + 1))) {
+ strcpy(fk_unknown[funk++], s);
+ }
+ break;
+ }
+ if (fk_length[j] == expand_chars) {
+ if (!strcmp(fk_unknown[j], s)) {
+ break;
+ }
+ }
+ }
+ return FALSE;
+}
+
+/*
+** funkey_keys(test_list, status, ch)
+**
+** Test function keys
+*/
+static void
+funkey_keys(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ char keybuf[256];
+
+ if (keypad_xmit) {
+ tc_putp(keypad_xmit);
+ }
+ keys_tested(1, 1, hex_out); /* also clears screen */
+ keybuf[0] = '\0';
+ end_state = 0;
+ if (scan_mode) {
+ fkmax = scan_max;
+ }
+ tty_raw(0, char_mask);
+ while (end_state != 'd') {
+ read_key(keybuf, sizeof(keybuf));
+ fresh_line();
+ if (found_match(keybuf, hex_out, 0)) {
+ continue;
+ }
+ if (found_exit(keybuf, hex_out, 0)) {
+ break;
+ }
+ }
+ if (keypad_local) {
+ tc_putp(keypad_local);
+ }
+ keys_tested(0, 0, hex_out);
+ ptext("Function key test ");
+ generic_done_message(t, state, ch);
+}
+
+int
+tty_meta_prep(void)
+{ /* print a warning before the meta key test */
+ if (not_a_tty) {
+ return 0;
+ }
+ if (initial_stty_query(TTY_8_BIT)) {
+ return 0;
+ }
+ ptext("The meta key test must be run with the");
+ ptext(" terminal set for 8 data bits. Two stop bits");
+ ptext(" may also be needed for correct display. I will");
+ ptext(" transmit 8 bit data but if the terminal is set for");
+ ptextln(" 7 bit data, garbage may appear on the screen.");
+ return 1;
+}
+
+/*
+** funkey_meta(test_list, status, ch)
+**
+** Test meta key (km) (smm) (rmm)
+*/
+static void
+funkey_meta(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j, k, len;
+ char outbuf[256];
+
+ if (has_meta_key) {
+ put_crlf();
+ if (char_mask != ALLOW_PARITY) {
+ if (tty_meta_prep()) {
+ ptext("\nHit any key to continue > ");
+ (void) wait_here();
+ put_crlf();
+ }
+ }
+ ptext("Begin meta key test. (km) (smm) (rmm) Hit any key");
+ ptext(" with the meta key. The character will be");
+ ptext(" displayed in hex. If the meta key is working");
+ ptext(" then the most significant bit will be set. Type");
+ ptextln(" 'end' to exit.");
+ tty_raw(1, ALLOW_PARITY);
+ tc_putp(meta_on);
+
+ for (i = j = k = len = 0; i != 'e' || j != 'n' || k != 'd';) {
+ i = j;
+ j = k;
+ k = getchp(ALLOW_PARITY);
+ if (k == EOF) {
+ break;
+ }
+ if ((len += 3) >= columns) {
+ put_crlf();
+ len = 3;
+ }
+ sprintf(outbuf, "%02X ", k);
+ put_str(outbuf);
+ k &= STRIP_PARITY;
+ }
+ tc_putp(meta_off);
+ put_crlf();
+ tty_set();
+ put_crlf();
+ } else {
+ ptext("(km) Has-meta-key is not set. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** funkey_label(test_list, status, ch)
+**
+** Test labels (nlab) (smln) (pln) (rmln) (lw) (lh)
+*/
+static void
+funkey_label(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+ char outbuf[256];
+
+ if (num_labels == -1) {
+ ptextln("Your terminal has no labels. (nlab)");
+ } else {
+ sprintf(temp, "Your terminal has %d labels (nlab) that are %d characters wide (lw) and %d lines high (lh)",
+ num_labels, label_width, label_height);
+ ptext(temp);
+ ptextln(" Testing (smln) (pln) (rmln)");
+ if (label_on) {
+ tc_putp(label_on);
+ }
+ if (label_width <= 0) {
+ label_width = sizeof(outbuf) - 1;
+ }
+ for (i = 1; i <= num_labels; i++) {
+ sprintf(outbuf, "L%d..............................", i);
+ outbuf[label_width] = '\0';
+ tc_putp(tparm(plab_norm, i, outbuf));
+ }
+ if (label_off) {
+ ptext("Hit any key to remove the labels: ");
+ (void) wait_here();
+ tc_putp(label_off);
+ }
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** funkey_prog(test_list, status, ch)
+**
+** Test program function keys (pfx)
+*/
+static void
+funkey_prog(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, fk;
+ char mm[256];
+
+ fk = 1; /* use function key 1 for now */
+ if (pkey_xmit) {
+ /* test program function key */
+ sprintf(temp,
+ "(pfx) Set function key %d to transmit abc\\n", fk);
+ ptextln(temp);
+ tc_putp(tparm(pkey_xmit, fk, "abc\n"));
+ sprintf(temp, "Hit function key %d\n", fk);
+ ptextln(temp);
+ for (i = 0; i < 4; ++i)
+ mm[i] = getchp(STRIP_PARITY);
+ mm[i] = '\0';
+ put_crlf();
+ if (mm[0] != 'a' || mm[1] != 'b' || mm[2] != 'c') {
+ sprintf(temp, "Error string recieved was: %s", expand(mm));
+ ptextln(temp);
+ } else {
+ putln("Thank you\n");
+ }
+ flush_input();
+ if (key_f1) {
+ tc_putp(tparm(pkey_xmit, fk, key_f1));
+ }
+ } else {
+ ptextln("Function key transmit (pfx), not present.");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** funkey_local(test_list, status, ch)
+**
+** Test program local function keys (pfloc)
+*/
+static void
+funkey_local(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int fk;
+
+ fk = 1;
+ if (pkey_local) {
+ /* test local function key */
+ sprintf(temp,
+ "(pfloc) Set function key %d to execute a clear and print \"Done!\"", fk);
+ ptextln(temp);
+ sprintf(temp, "%sDone!", liberated(clear_screen));
+ tc_putp(tparm(pkey_local, fk, temp));
+ sprintf(temp, "Hit function key %d. Then hit return.", fk);
+ ptextln(temp);
+ (void) wait_here();
+ flush_input();
+ if (key_f1 && pkey_xmit) {
+ tc_putp(tparm(pkey_xmit, fk, key_f1));
+ }
+ } else {
+ ptextln("Function key execute local (pfloc), not present.");
+ }
+
+ generic_done_message(t, state, ch);
+}
+
+/*
+** printer_on(test_list, status, ch)
+**
+** Test printer on/off (mc4) (mc5) (mc5i)
+*/
+static void
+printer_on(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (!prtr_on || !prtr_off) {
+ ptextln("Printer on/off missing. (mc5) (mc4)");
+ } else if (prtr_silent) {
+ ptextln("Your printer is silent. (mc5i) is set.");
+ tc_putp(prtr_on);
+ ptextln("This line should be on the printer but not your screen. (mc5)");
+ tc_putp(prtr_off);
+ ptextln("This line should be only on the screen. (mc4)");
+ } else {
+ ptextln("Your printer is not silent. (mc5i) is reset.");
+ tc_putp(prtr_on);
+ ptextln("This line should be on the printer and the screen. (mc5)");
+ tc_putp(prtr_off);
+ ptextln("This line should only be on the screen. (mc4)");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** printer_mc0(test_list, status, ch)
+**
+** Test screen print (mc0)
+*/
+static void
+printer_mc0(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (print_screen) {
+ ptext("I am going to send the contents of the screen to");
+ ptext(" the printer, then wait for a keystroke from you.");
+ ptext(" All of the text that appears on the screen");
+ ptextln(" should be printed. (mc0)");
+ tc_putp(print_screen);
+ } else {
+ ptext("(mc0) Print-screen is not present. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+
+static void
+line_pattern(void)
+{ /* put up a pattern that will help count the
+ number of lines */
+ int i, j;
+
+ put_clear();
+ if (over_strike) {
+ for (i = 0; i < 100; i++) {
+ if (i) {
+ put_crlf();
+ }
+ for (j = i / 10; j; j--) {
+ put_this(' ');
+ }
+ put_this('0' + ((i + 1) % 10));
+ }
+ } else /* I assume it will scroll */ {
+ for (i = 100; i; i--) {
+ sprintf(temp, "\r\n%d", i);
+ put_str(temp);
+ }
+ }
+}
+
+
+static void
+column_pattern(void)
+{ /* put up a pattern that will help count the
+ number of columns */
+ int i, j;
+
+ put_clear();
+ for (i = 0; i < 20; i++) {
+ for (j = 1; j < 10; j++) {
+ put_this('0' + j);
+ }
+ put_this('.');
+ }
+}
+
+/*
+** report_help()
+**
+** Print the help text for the echo tests
+*/
+static void
+report_help(int crx)
+{
+ ptextln("The following commands may also be entered:");
+ ptextln(" clear clear screen.");
+ ptextln(" columns print a test patterm to help count screen width.");
+ ptextln(" lines print a test patterm to help count screen length.");
+ ptextln(" end exit.");
+ ptextln(" echo redisplay last report.");
+ if (crx) {
+ ptextln(" hex redisplay last report in hex.");
+ } else {
+ ptextln(" hex toggle hex display mode.");
+ }
+ ptextln(" help display this list.");
+ ptextln(" high toggle forced high bit (0x80).");
+ ptextln(" scan toggle scan mode.");
+ ptextln(" one echo one character after <cr> or <lf> as is. (report mode)");
+ ptextln(" two echo two characters after <cr> or <lf> as is.");
+ ptextln(" all echo all characters after <cr> or <lf> as is. (echo mode)");
+}
+
+/*
+** tools_report(testlist, state, ch)
+**
+** Run the echo tool and report tool
+*/
+void
+tools_report(
+ struct test_list *t,
+ int *state GCC_UNUSED,
+ int *pch GCC_UNUSED)
+{
+ int i, j, ch, crp, crx, high_bit, save_scan_mode, hex_display;
+ char buf[1024];
+ char txt[8];
+
+ hex_display = hex_out;
+ put_clear();
+ if ((crx = (t->flags & 255)) == 1) {
+ ptext("Characters after a CR or LF will be echoed as");
+ ptextln(" is. All other characters will be expanded.");
+ report_help(crx);
+ } else { /* echo test */
+ ptextln("Begin echo test.");
+ report_help(crx);
+ }
+ txt[sizeof(txt) - 1] = '\0';
+ save_scan_mode = scan_mode;
+ tty_raw(1, char_mask);
+ for (i = crp = high_bit = 0;;) {
+ ch = getchp(char_mask);
+ if (ch == EOF) {
+ break;
+ }
+ if (i >= (int) sizeof(buf) - 1) {
+ i = 0;
+ }
+ buf[i++] = ch;
+ buf[i] = '\0';
+ for (j = 0; j < (int) sizeof(txt) - 1; j++) {
+ txt[j] = txt[j + 1];
+ }
+ txt[sizeof(txt) - 1] = ch & STRIP_PARITY;
+ if (crx == 0) { /* echo test */
+ if (hex_display) {
+ ptext(hex_expand_to(&buf[i - 1], 3));
+ } else {
+ tc_putch(ch | high_bit);
+ }
+ } else /* status report test */
+ if (ch == '\n' || ch == '\r') {
+ put_crlf();
+ crp = 0;
+ } else if (crp++ < crx) {
+ tc_putch(ch | high_bit);
+ } else {
+ put_str(expand(&buf[i - 1]));
+ }
+ if (!strncmp(&txt[sizeof(txt) - 7], "columns", 7)) {
+ column_pattern();
+ buf[i = 0] = '\0';
+ crp = 0;
+ }
+ if (!strncmp(&txt[sizeof(txt) - 5], "lines", 5)) {
+ line_pattern();
+ buf[i = 0] = '\0';
+ crp = 0;
+ }
+ if (!strncmp(&txt[sizeof(txt) - 5], "clear", 5)) {
+ put_clear();
+ buf[i = 0] = '\0';
+ crp = 0;
+ }
+ if (!strncmp(&txt[sizeof(txt) - 4], "high", 4)) {
+ high_bit ^= 0x80;
+ if (high_bit) {
+ ptextln("\nParity bit set");
+ } else {
+ ptextln("\nParity bit reset");
+ }
+ }
+ if (!strncmp(&txt[sizeof(txt) - 4], "help", 4)) {
+ put_crlf();
+ report_help(crx);
+ }
+ if (!strncmp(&txt[sizeof(txt) - 4], "echo", 4)) {
+ /* display the last status report */
+ /* clear bypass condition on Tek terminals */
+ put_crlf();
+ if (i >= 4) {
+ buf[i -= 4] = '\0';
+ }
+ put_str(expand(buf));
+ }
+ if (save_scan_mode &&
+ !strncmp(&txt[sizeof(txt) - 4], "scan", 4)) {
+ /* toggle scan mode */
+ scan_mode = !scan_mode;
+ }
+ if (!strncmp(&txt[sizeof(txt) - 3], "end", 3))
+ break;
+ if (!strncmp(&txt[sizeof(txt) - 3], "hex", 3)) {
+ if (crx) {
+ /* display the last status report in hex */
+ /* clear bypass condition on Tek terminals */
+ put_crlf();
+ if (i >= 3) {
+ buf[i -= 3] = '\0';
+ }
+ put_str(hex_expand_to(buf, 3));
+ } else {
+ hex_display = !hex_display;
+ }
+ }
+ if (!strncmp(&txt[sizeof(txt) - 3], "two", 3))
+ crx = 2;
+ if (!strncmp(&txt[sizeof(txt) - 3], "one", 3))
+ crx = 1;
+ if (!strncmp(&txt[sizeof(txt) - 3], "all", 3))
+ crx = 0;
+ }
+ scan_mode = save_scan_mode;
+ put_crlf();
+ tty_set();
+ if (crx) {
+ ptextln("End of status report test.");
+ } else {
+ ptextln("End of echo test.");
+ }
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+/* initialization and wrapup code */
+
+#include <tack.h>
+
+MODULE_ID("$Id: init.c,v 1.1 1999/04/18 01:05:23 tom Exp $")
+
+#if NCURSES_VERSION_MAJOR >= 5 || NCURSES_VERSION_PATCH >= 981219
+#define _nc_get_curterm(p) _nc_get_tty_mode(p)
+#endif
+
+FILE *debug_fp;
+char temp[1024];
+char tty_basename[64];
+
+void
+put_name(const char *cap, const char *name)
+{ /* send the cap name followed by the cap */
+ if (cap) {
+ ptext(name);
+ tc_putp(cap);
+ }
+}
+
+static void
+report_cap(const char *tag, const char *s)
+{ /* expand the cap or print *** missing *** */
+ int i;
+
+ ptext(tag);
+ for (i = char_count; i < 13; i++) {
+ putchp(' ');
+ }
+ put_str(" = ");
+ if (s) {
+ putln(expand(s));
+ } else {
+ putln("*** missing ***");
+ }
+}
+
+
+void
+reset_init(void)
+{ /* send the reset and init strings */
+ int i;
+
+ ptext("Terminal reset");
+ i = char_count;
+ put_name(reset_1string, " (rs1)");
+ put_name(reset_2string, " (rs2)");
+ /* run the reset file */
+ if (reset_file && reset_file[0]) {
+ FILE *fp;
+ int ch;
+
+ can_test("rf", FLAG_TESTED);
+ if ((fp = fopen(reset_file, "r"))) { /* send the reset file */
+ sprintf(temp, " (rf) %s", reset_file);
+ ptextln(temp);
+ while (1) {
+ ch = getc(fp);
+ if (ch == EOF)
+ break;
+ put_this(ch);
+ }
+ fclose(fp);
+ } else {
+ sprintf(temp, "\nCannot open reset file (rf) %s", reset_file);
+ ptextln(temp);
+ }
+ }
+ put_name(reset_3string, " (rs3)");
+ if (i != char_count) {
+ put_crlf();
+ }
+ ptext(" init");
+ put_name(init_1string, " (is1)");
+ put_name(init_2string, " (is2)");
+ if (set_tab && clear_all_tabs && init_tabs != 8) {
+ put_crlf();
+ tc_putp(clear_all_tabs);
+ for (char_count = 0; char_count < columns; char_count++) {
+ put_this(' ');
+ if ((char_count & 7) == 7) {
+ tc_putp(set_tab);
+ }
+ }
+ put_cr();
+ }
+ /* run the initialization file */
+ if (init_file && init_file[0]) {
+ FILE *fp;
+ int ch;
+
+ can_test("if", FLAG_TESTED);
+ if ((fp = fopen(init_file, "r"))) { /* send the init file */
+ sprintf(temp, " (if) %s", init_file);
+ ptextln(temp);
+ while (1) {
+ ch = getc(fp);
+ if (ch == EOF)
+ break;
+ put_this(ch);
+ }
+ fclose(fp);
+ } else {
+ sprintf(temp, "\nCannot open init file (if) %s", init_file);
+ ptextln(temp);
+ }
+ }
+ if (init_prog) {
+ can_test("iprog", FLAG_TESTED);
+ (void) system(init_prog);
+ }
+ put_name(init_3string, " (is3)");
+
+ fflush(stdout);
+}
+
+/*
+** display_basic()
+**
+** display the basic terminal definitions
+*/
+void
+display_basic(void)
+{
+ put_str("Name: ");
+ putln(ttytype);
+
+ report_cap("\\r ^M (cr)", carriage_return);
+ report_cap("\\n ^J (ind)", scroll_forward);
+ report_cap("\\b ^H (cub1)", cursor_left);
+ report_cap("\\t ^I (ht)", tab);
+/* report_cap("\\f ^L (ff)", form_feed); */
+ if (newline) {
+ /* OK if missing */
+ report_cap(" (nel)", newline);
+ }
+ report_cap(" (clear)", clear_screen);
+ if (!cursor_home && cursor_address) {
+ report_cap("(cup) (home)", tparm(cursor_address, 0, 0));
+ } else {
+ report_cap(" (home)", cursor_home);
+ }
+ report_cap("ENQ (u9)", user9);
+ report_cap("ACK (u8)", user8);
+
+ sprintf(temp, "\nTerminal size: %d x %d. Baud rate: %ld. Frame size: %d.%d", columns, lines, tty_baud_rate, tty_frame_size >> 1, (tty_frame_size & 1) * 5);
+ putln(temp);
+}
+
+/*
+** curses_setup(exec_name)
+**
+** Startup ncurses
+*/
+void
+curses_setup(
+ char *exec_name)
+{
+ int status;
+ static TERMTYPE term;
+ char tty_filename[2048];
+
+ tty_init();
+
+ /**
+ See if the terminal is in the terminfo data base. This call has
+ two useful benefits, 1) it returns the filename of the terminfo entry,
+ and 2) it searches only terminfo's. This allows us to abort before
+ ncurses starts scanning the termcap file.
+ **/
+ if ((status = _nc_read_entry(tty_basename, tty_filename, &term)) == 0) {
+ fprintf(stderr, "Terminal not found: TERM=%s\n", tty_basename);
+ show_usage(exec_name);
+ exit(1);
+ }
+ if (status == -1) {
+ fprintf(stderr, "Terminfo database is inaccessible\n");
+ exit(1);
+ }
+
+ /**
+ This call will load the terminfo data base and set the cur-term
+ variable. Only terminals that actually exist will get here so its
+ OK to ignore errors. This is a good thing since ncurses does not
+ permit (os) or (gn) to be set.
+ **/
+ setupterm(tty_basename, 1, &status);
+
+ /**
+ Get the current terminal definitions. This must be done before
+ getting the baudrate.
+ **/
+ _nc_get_curterm(&cur_term->Nttyb);
+ tty_baud_rate = baudrate();
+ tty_cps = (tty_baud_rate << 1) / tty_frame_size;
+
+ /* set up the defaults */
+ replace_mode = TRUE;
+ scan_mode = 0;
+ char_count = 0;
+ select_delay_type = debug_level = 0;
+ char_mask = (meta_on && meta_on[0] == '\0') ? ALLOW_PARITY : STRIP_PARITY;
+ /* Don't change the XON/XOFF modes yet. */
+ select_xon_xoff = initial_stty_query(TTY_XON_XOFF) ? 1 : needs_xon_xoff;
+
+ fflush(stdout); /* flush any output */
+ tty_set();
+
+ go_home(); /* set can_go_home */
+ put_clear(); /* set can_clear_screen */
+
+ if (send_reset_init) {
+ reset_init();
+ }
+
+ /*
+ I assume that the reset and init strings may not have the correct
+ pads. (Because that part of the test comes much later.) Because
+ of this, I allow the terminal some time to catch up.
+ */
+ fflush(stdout); /* waste some time */
+ sleep(1); /* waste more time */
+ charset_can_test();
+ can_test("lines cols cr nxon rf if iprog rmp", FLAG_CAN_TEST);
+ edit_init(); /* initialize the edit data base */
+
+ if (send_reset_init && enter_ca_mode) {
+ tc_putp(enter_ca_mode);
+ put_clear(); /* just in case we switched pages */
+ }
+ put_crlf();
+ ptext("Using terminfo from: ");
+ ptextln(tty_filename);
+ put_crlf();
+
+ if (tty_can_sync == SYNC_NEEDED) {
+ verify_time();
+ }
+
+ display_basic();
+}
+
+/*
+** bye_kids(exit-condition)
+**
+** Shutdown the terminal, clear the signals, and exit
+*/
+void
+bye_kids(int n)
+{ /* reset the tty and exit */
+ ignoresig();
+ if (send_reset_init) {
+ if (exit_ca_mode) {
+ tc_putp(exit_ca_mode);
+ }
+ if (initial_stty_query(TTY_XON_XOFF)) {
+ if (enter_xon_mode) {
+ tc_putp(enter_xon_mode);
+ }
+ } else if (exit_xon_mode) {
+ tc_putp(exit_xon_mode);
+ }
+ }
+ if (debug_fp) {
+ fclose(debug_fp);
+ }
+ if (log_fp) {
+ fclose(log_fp);
+ }
+ tty_reset();
+ fclose(stdin);
+ fclose(stdout);
+ fclose(stderr);
+ if (not_a_tty)
+ sleep(1);
+ exit(n);
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: menu.c,v 1.1 1998/01/10 00:29:30 tom Exp $")
+
+/*
+ Menu control
+ */
+
+static void test_byname(struct test_menu *, int *, int *);
+
+struct test_list *augment_test;
+char prompt_string[80]; /* menu prompt storage */
+
+/*
+** menu_prompt()
+**
+** Print the menu prompt string.
+*/
+void
+menu_prompt(void)
+{
+ ptext(&prompt_string[1]);
+}
+
+/*
+** menu_test_loop(test-structure, state, control-character)
+**
+** This function implements the repeat test function.
+*/
+static void
+menu_test_loop(
+ struct test_list *test,
+ int *state,
+ int *ch)
+{
+ int nch, p;
+
+ if ((test->flags & MENU_REP_MASK) && (augment_test != test)) {
+ /* set the augment variable (first time only) */
+ p = (test->flags >> 8) & 15;
+ if ((test->flags & MENU_REP_MASK) == MENU_LM1) {
+ augment = lines - 1;
+ } else
+ if ((test->flags & MENU_ONE_MASK) == MENU_ONE) {
+ augment = 1;
+ } else
+ if ((test->flags & MENU_LC_MASK) == MENU_lines) {
+ augment = lines * p / 10;
+ } else
+ if ((test->flags & MENU_LC_MASK) == MENU_columns) {
+ augment = columns * p / 10;
+ } else {
+ augment = 1;
+ }
+ augment_test = test;
+ set_augment_txt();
+ }
+ do {
+ if ((test->flags | *state) & MENU_CLEAR) {
+ put_clear();
+ } else
+ if (line_count + test->lines_needed >= lines) {
+ put_clear();
+ }
+ nch = 0;
+ if (test->test_procedure) {
+ /* The procedure takes precidence so I can pass
+ the menu entry as an argument.
+ */
+ can_test(test->caps_done, FLAG_TESTED);
+ can_test(test->caps_tested, FLAG_TESTED);
+ test->test_procedure(test, state, &nch);
+ } else
+ if (test->sub_menu) {
+ /* nested menu's */
+ menu_display(test->sub_menu, &nch);
+ *state = 0;
+ if (nch == 'q' || nch == 's') {
+ /* Quit and skip are killed here */
+ nch = '?';
+ }
+ } else {
+ break; /* cya */
+ }
+ if (nch == '\r' || nch == '\n' || nch == 'n') {
+ nch = 0;
+ break;
+ }
+ } while (nch == 'r');
+ *ch = nch;
+}
+
+/*
+** menu_display(menu-structure, flags)
+**
+** This function implements menu control.
+*/
+void
+menu_display(
+ struct test_menu *menu,
+ int *last_ch)
+{
+ int test_state = 0, run_standard_tests;
+ int hot_topic, ch = 0, nch = 0;
+ struct test_list *mt;
+ struct test_list *repeat_tests = 0;
+ int repeat_state = 0;
+ int prompt_length;
+
+ prompt_length = strlen(prompt_string);
+ if (menu->ident) {
+ sprintf(&prompt_string[prompt_length], "/%s", menu->ident);
+ }
+ hot_topic = menu->default_action;
+ run_standard_tests = menu->standard_tests ?
+ menu->standard_tests[0] : -1;
+ if (!last_ch) {
+ last_ch = &ch;
+ }
+ while (1) {
+ if (ch == 0) {
+ /* Display the menu */
+ put_crlf();
+ if (menu->menu_function) {
+ /*
+ this function may be used to restrict menu
+ entries. If used it must print the title.
+ */
+ menu->menu_function(menu);
+ } else
+ if (menu->menu_title) {
+ ptextln(menu->menu_title);
+ }
+ for (mt = menu->tests; (mt->flags & MENU_LAST) == 0; mt++) {
+ if (mt->menu_entry) {
+ ptext(" ");
+ ptextln(mt->menu_entry);
+ }
+ }
+ if (menu->standard_tests) {
+ ptext(" ");
+ ptextln(menu->standard_tests);
+ ptextln(" r) repeat test");
+ ptextln(" s) skip to next test");
+ }
+ ptextln(" q) quit");
+ ptextln(" ?) help");
+ }
+ if (ch == 0 || ch == REQUEST_PROMPT) {
+ put_crlf();
+ ptext(&prompt_string[1]);
+ if (hot_topic) {
+ ptext(" [");
+ putchp(hot_topic);
+ ptext("]");
+ }
+ ptext(" > ");
+ /* read a character */
+ ch = wait_here();
+ }
+ if (ch == '\r' || ch == '\n') {
+ ch = hot_topic;
+ }
+ if (ch == 'q') {
+ break;
+ }
+ if (ch == '?') {
+ ch = 0;
+ continue;
+ }
+ nch = ch;
+ ch = 0;
+ /* Run one of the standard tests (by request) */
+ for (mt = menu->tests; (mt->flags & MENU_LAST) == 0; mt++) {
+ if (mt->menu_entry && (nch == mt->menu_entry[0])) {
+ if (mt->flags & MENU_MENU) {
+ test_byname(menu, &test_state, &nch);
+ } else {
+ menu_test_loop(mt, &test_state, &nch);
+ }
+ ch = nch;
+ if ((mt->flags & MENU_COMPLETE) && ch == 0) {
+ /* top level */
+ hot_topic = 'q';
+ ch = '?';
+ }
+ }
+ }
+ if (menu->standard_tests && nch == 'r') {
+ menu->resume_tests = repeat_tests;
+ test_state = repeat_state;
+ nch = run_standard_tests;
+ }
+ if (nch == run_standard_tests) {
+ if (!(mt = menu->resume_tests)) {
+ mt = menu->tests;
+ }
+ if (mt->flags & MENU_LAST) {
+ mt = menu->tests;
+ }
+ /* Run the standard test suite */
+ for ( ; (mt->flags & MENU_LAST) == 0; ) {
+ if ((mt->flags & MENU_NEXT) == MENU_NEXT) {
+ repeat_tests = mt;
+ repeat_state = test_state;
+ nch = run_standard_tests;
+ menu_test_loop(mt, &test_state, &nch);
+ if (nch != 0 && nch != 'n') {
+ ch = nch;
+ break;
+ }
+ if (test_state & MENU_STOP) {
+ break;
+ }
+ }
+ mt++;
+ }
+ if (ch == 0) {
+ ch = hot_topic;
+ }
+ menu->resume_tests = mt;
+ menu->resume_state = test_state;
+ menu->resume_char = ch;
+
+ if (ch == run_standard_tests) {
+ /* pop up a level */
+ break;
+ }
+ }
+ }
+ *last_ch = ch;
+ prompt_string[prompt_length] = '\0';
+}
+
+/*
+** generic_done_message(test_list)
+**
+** Print the Done message and request input.
+*/
+void
+generic_done_message(
+ struct test_list *test,
+ int *state,
+ int *ch)
+{
+ char done_message[128];
+
+ if (test->caps_done) {
+ sprintf(done_message, "(%s) Done ", test->caps_done);
+ ptext(done_message);
+ } else {
+ ptext("Done ");
+ }
+ *ch = wait_here();
+ if (*ch == '\r' || *ch == '\n' || *ch == 'n') {
+ *ch = 0;
+ }
+ if (*ch == 's') {
+ *state |= MENU_STOP;
+ *ch = 0;
+ }
+}
+
+/*
+** menu_clear_screen(test, state, ch)
+**
+** Just clear the screen.
+*/
+void
+menu_clear_screen(
+ struct test_list *test GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ put_clear();
+}
+
+/*
+** menu_reset_init(test, state, ch)
+**
+** Send the reset and init strings.
+*/
+void
+menu_reset_init(
+ struct test_list *test GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ reset_init();
+ put_crlf();
+}
+
+/*
+** subtest_menu(test, state, ch)
+**
+** Scan the menu looking for something to execute
+** Return TRUE if we found anything.
+*/
+int
+subtest_menu(
+ struct test_list *test,
+ int *state,
+ int *ch)
+{
+ struct test_list *mt;
+
+ if (*ch) {
+ for (mt = test; (mt->flags & MENU_LAST) == 0; mt++) {
+ if (mt->menu_entry && (*ch == mt->menu_entry[0])) {
+ *ch = 0;
+ menu_test_loop(mt, state, ch);
+ return TRUE;
+ }
+ }
+ }
+ return FALSE;
+}
+
+/*
+** menu_can_scan(menu-structure)
+**
+** Recursivly scan the menu tree and find which cap names can be tested.
+*/
+void
+menu_can_scan(
+ const struct test_menu *menu)
+{
+ struct test_list *mt;
+
+ for (mt = menu->tests; (mt->flags & MENU_LAST) == 0; mt++) {
+ can_test(mt->caps_done, FLAG_CAN_TEST);
+ can_test(mt->caps_tested, FLAG_CAN_TEST);
+ if (!(mt->test_procedure)) {
+ if (mt->sub_menu) {
+ menu_can_scan(mt->sub_menu);
+ }
+ }
+ }
+}
+
+/*
+** menu_search(menu-structure, cap)
+**
+** Recursivly search the menu tree and execute any tests that use cap.
+*/
+static void
+menu_search(
+ struct test_menu *menu,
+ int *state,
+ int *ch,
+ char *cap)
+{
+ struct test_list *mt;
+ int nch;
+
+ for (mt = menu->tests; (mt->flags & MENU_LAST) == 0; mt++) {
+ nch = 0;
+ if (cap_match(mt->caps_done, cap)
+ || cap_match(mt->caps_tested, cap)) {
+ menu_test_loop(mt, state, &nch);
+ }
+ if (!(mt->test_procedure)) {
+ if (mt->sub_menu) {
+ menu_search(mt->sub_menu, state, &nch, cap);
+ }
+ }
+ if (*state & MENU_STOP) {
+ break;
+ }
+ if (nch != 0 && nch != 'n') {
+ *ch = nch;
+ break;
+ }
+ }
+}
+
+/*
+** test_byname(menu, state, ch)
+**
+** Get a cap name then run all tests that use that cap.
+*/
+static void
+test_byname(
+ struct test_menu *menu,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ int test_state = 0;
+ char cap[32];
+
+ if (tty_can_sync == SYNC_NOT_TESTED) {
+ verify_time();
+ }
+ ptext("enter name: ");
+ read_string(cap, sizeof(cap));
+ if (cap[0]) {
+ menu_search(menu, &test_state, ch, cap);
+ }
+ *ch = '?';
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: modes.c,v 1.1 1998/01/10 00:29:53 tom Exp $")
+
+/*
+ * Tests boolean flags and terminal modes.
+ */
+static void subtest_os(struct test_list *, int *, int *);
+static void subtest_rmam(struct test_list *, int *, int *);
+static void subtest_smam(struct test_list *, int *, int *);
+static void subtest_am(struct test_list *, int *, int *);
+static void subtest_ul(struct test_list *, int *, int *);
+static void subtest_uc(struct test_list *, int *, int *);
+static void subtest_bw(struct test_list *, int *, int *);
+static void subtest_xenl(struct test_list *, int *, int *);
+static void subtest_eo(struct test_list *, int *, int *);
+static void subtest_xmc(struct test_list *, int *, int *);
+static void subtest_xhp(struct test_list *, int *, int *);
+static void subtest_mir(struct test_list *, int *, int *);
+static void subtest_msgr(struct test_list *, int *, int *);
+static void subtest_tbc(struct test_list *, int *, int *);
+static void subtest_xt(struct test_list *, int *, int *);
+static void subtest_hts(struct test_list *, int *, int *);
+static void subtest_cbt(struct test_list *, int *, int *);
+static void subtest_in(struct test_list *, int *, int *);
+static void subtest_dadb(struct test_list *, int *, int *);
+
+struct test_list mode_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {MENU_NEXT, 3, "os", 0, 0, subtest_os, 0},
+ {MENU_NEXT, 1, "rmam", 0, 0, subtest_rmam, 0},
+ {MENU_NEXT, 1, "smam", 0, 0, subtest_smam, 0},
+ {MENU_NEXT, 1, "am", 0, 0, subtest_am, 0},
+ {MENU_NEXT, 3, "ul", 0, 0, subtest_ul, 0},
+ {MENU_NEXT, 3, "uc", 0, 0, subtest_uc, 0},
+ {MENU_NEXT, 3, "bw", 0, 0, subtest_bw, 0},
+ {MENU_NEXT, 4, "xenl", 0, 0, subtest_xenl, 0},
+ {MENU_NEXT, 3, "eo", 0, 0, subtest_eo, 0},
+ {MENU_NEXT, 3, "xmc", 0, 0, subtest_xmc, 0},
+ {MENU_NEXT, 3, "xhp", 0, 0, subtest_xhp, 0},
+ {MENU_NEXT, 6, "mir", 0, 0, subtest_mir, 0},
+ {MENU_NEXT, 6, "msgr", 0, 0, subtest_msgr, 0},
+ {MENU_NEXT | MENU_CLEAR, 0, "tbc", "it", 0, subtest_tbc, 0},
+ {MENU_NEXT | MENU_CLEAR, 0, "hts", "it", 0, subtest_hts, 0},
+ {MENU_NEXT, 4, "xt", "it", 0, subtest_xt, 0},
+ {MENU_NEXT, 1, "cbt", "it", 0, subtest_cbt, 0},
+ {MENU_NEXT, 6, "in", 0, 0, subtest_in, 0},
+ {MENU_NEXT, 1, "da) (db", 0, 0, subtest_dadb, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+/*
+** subtest_os(test_list, status, ch)
+**
+** test over strike mode (os)
+*/
+static void
+subtest_os(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ ptext("(os) should be true, not false.");
+ put_cr();
+ ptextln("(os) should be false.");
+ sprintf(temp, "(os) over-strike is %s in the data base. ",
+ over_strike ? "true" : "false");
+ ptext(temp);
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_rmam(test_list, status, ch)
+**
+** test exit automatic margins mode (rmam)
+*/
+static void
+subtest_rmam(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int j;
+
+ if (!exit_am_mode) {
+ ptext("(rmam) not present. ");
+ } else
+ if (!can_go_home) {
+ ptext("(rmam) not tested, no way to home cursor. ");
+ } else
+ if (over_strike) {
+ put_clear();
+ go_home();
+ tc_putp(exit_am_mode);
+ ptext("\n(rmam) will reset (am)");
+ go_home();
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ ptext("(rmam) will not reset (am)");
+ go_home();
+ put_newlines(2);
+ } else {
+ put_clear();
+ go_home();
+ tc_putp(exit_am_mode);
+ ptext("\n(rmam) will reset (am)");
+ go_home();
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ ptext("(rmam) will not reset (am) ");
+ go_home();
+ put_str(" ");
+ go_home();
+ put_newlines(2);
+ }
+ ptext("Exit-automatic-margins ");
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_smam(test_list, status, ch)
+**
+** test enter automatic margins mode (smam)
+*/
+static void
+subtest_smam(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!enter_am_mode) {
+ ptext("(smam) not present. ");
+ } else
+ if (!can_go_home) {
+ ptext("(smam) not tested, no way to home cursor. ");
+ } else
+ if (over_strike) {
+ put_clear();
+ go_home();
+ tc_putp(enter_am_mode);
+ ptext("\n(smam) will ");
+ i = char_count;
+ ptext("not set (am)");
+ go_home();
+ for (j = -i; j < columns; j++)
+ put_this(' ');
+ put_str("@@@");
+ put_newlines(2);
+ } else {
+ put_clear();
+ go_home();
+ tc_putp(enter_am_mode);
+ ptext("\n(smam) will not set (am)");
+ go_home();
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ ptext("(smam) will set (am) ");
+ go_home();
+ put_str(" ");
+ put_newlines(2);
+ }
+ ptext("Enter-automatic-margins ");
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_am(test_list, status, ch)
+**
+** test automatic margins (am)
+*/
+static void
+subtest_am(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!can_go_home) {
+ ptextln("(am) not tested, no way to home cursor. ");
+ } else
+ if (over_strike) {
+ put_clear();
+ go_home();
+ ptext("\n(am) should ");
+ i = char_count;
+ ptext("not be set");
+ go_home();
+ for (j = -i; j < columns; j++)
+ put_this(' ');
+ put_str("@@@");
+ go_home();
+ put_newlines(2);
+ sprintf(temp, "(am) is %s in the data base",
+ auto_right_margin ? "true" : "false");
+ ptextln(temp);
+ } else {
+ put_clear();
+ go_home();
+ ptext("\n(am) should not be set");
+ go_home();
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ ptext("(am) should be set ");
+ go_home();
+ put_str(" \n\n");
+ sprintf(temp, "(am) is %s in the data base",
+ auto_right_margin ? "true" : "false");
+ ptextln(temp);
+ }
+ ptext("Automatic-right-margin ");
+ generic_done_message(t, state, ch);
+}
+
+/* Note: uprint() sends underscore back-space character, and
+ ucprint() sends character back-space underscore. */
+
+/*
+** uprint(string)
+**
+** underline string for (ul) test
+*/
+static void
+uprint(const char *s)
+{
+ if (s) {
+ while (*s) {
+ put_str("_\b");
+ putchp(*s++);
+ }
+ }
+}
+
+/*
+** ucprint(string)
+**
+** underline string for (uc) test
+*/
+static void
+ucprint(const char *s)
+{
+ if (s) {
+ while (*s) {
+ putchp(*s++);
+ putchp('\b');
+ tc_putp(underline_char);
+ }
+ }
+}
+
+/*
+** subtest_ul(test_list, status, ch)
+**
+** test transparent underline (ul)
+*/
+static void
+subtest_ul(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (!over_strike) {
+ /* (ul) is used only if (os) is reset */
+ put_crlf();
+ sprintf(temp, "This text should %sbe underlined.",
+ transparent_underline ? "" : "not ");
+ uprint(temp);
+ put_crlf();
+ ptextln("If the above line is not underlined the (ul) should be false.");
+ sprintf(temp, "(ul) Transparent-underline is %s in the data base",
+ transparent_underline ? "true" : "false");
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** subtest_uc(test_list, status, ch)
+**
+** test underline character (uc)
+*/
+static void
+subtest_uc(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (!over_strike) {
+ if (underline_char) {
+ ucprint("This text should be underlined.");
+ put_crlf();
+ ptextln("If the above text is not underlined the (uc) has failed.");
+ ptext("Underline-character ");
+ } else {
+ ptext("(uc) underline-character is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** subtest_bw(test_list, status, ch)
+**
+** test auto left margin (bw)
+*/
+static void
+subtest_bw(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (over_strike) {
+ /* test (bw) */
+ ptext("\n(bw) should ");
+ i = char_count;
+ ptextln("not be set.");
+ for (j = i; j < columns; j++)
+ put_str("\b");
+ put_str("@@@");
+ put_crlf();
+ sprintf(temp, "(bw) Auto-left-margin is %s in the data base",
+ auto_left_margin ? "true" : "false");
+ ptextln(temp);
+ } else {
+ /* test (bw) */
+ ptextln("(bw) should not be set.");
+ for (i = 12; i < columns; i++)
+ put_str("\b");
+ if (delete_character) {
+ for (i = 0; i < 4; i++)
+ tc_putp(delete_character);
+ } else {
+ put_str(" ");
+ }
+ put_crlf();
+ sprintf(temp, "(bw) Auto-left-margin is %s in the data base",
+ auto_left_margin ? "true" : "false");
+ ptextln(temp);
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_tbc(test_list, status, ch)
+**
+** test clear tabs (tbc)
+*/
+static void
+subtest_tbc(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int tabat; /* the tab spacing we end up with */
+ int i;
+
+ if (clear_all_tabs && !set_tab) {
+ ptext("(tbc) Clear-all-tabs is defined but (hts) set-tab is not. ");
+ ptext("Once the tabs are cleared there is no way to set them. ");
+ } else
+ if (clear_all_tabs) {
+ tabat = set_tab ? 8 : init_tabs;
+ tc_putp(clear_all_tabs);
+ ptext("Clear tabs (tbc)");
+ go_home();
+ put_crlf();
+ putchp('\t');
+ putchp('T');
+ go_home();
+ put_newlines(2);
+ for (i = 0; i < columns; i++) {
+ if (i == tabat) {
+ putchp('T');
+ } else {
+ putchp('.');
+ }
+ }
+ go_home();
+ ptext("\n\n\nIf the above two lines have T's in the same column then (tbc) has failed. ");
+ } else {
+ ptext("(tbc) Clear-all-tabs is not defined. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_hts(test_list, status, ch)
+**
+** (ht) and set tabs with (hts)
+*/
+static void
+subtest_hts(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int tabat; /* the tab spacing we end up with */
+ int i;
+
+ tabat = init_tabs;
+ if (set_tab) {
+ ptext("Tabs set with (hts)");
+ put_crlf();
+ for (i = 1; i < columns; i++) {
+ if (i % 8 == 1) {
+ tc_putp(set_tab);
+ }
+ putchp(' ');
+ }
+ tabat = 8;
+ } else {
+ sprintf(temp, "(hts) Set-tabs not defined. (it) Initial-tabs at %d", init_tabs);
+ ptext(temp);
+ }
+ go_home();
+ put_newlines(2);
+ if (tabat <= 0) {
+ tabat = 8;
+ }
+ for (i = tabat; i < columns; i += tabat) {
+ putchp('\t');
+ putchp('T');
+ }
+ go_home();
+ put_newlines(3);
+ for (i = 1; i < columns; i++) {
+ putchp('.');
+ }
+ go_home();
+ put_newlines(3);
+ for (i = tabat; i < columns; i += tabat) {
+ putchp('\t');
+ putchp('T');
+ }
+ go_home();
+ put_newlines(4);
+ putchp('.');
+ for (i = 2; i < columns; i++) {
+ if (i % tabat == 1) {
+ putchp('T');
+ } else {
+ putchp('.');
+ }
+ }
+ go_home();
+ put_newlines(5);
+ if (set_tab) {
+ ptextln("If the last two lines are not the same then (hts) has failed.");
+ } else
+ if (init_tabs > 0) {
+ ptextln("If the last two lines are not the same then (it) is wrong.");
+ } else {
+ ptextln("If the last two lines are the same then maybe you do have tabs and (it) should be changed.");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_xt(test_list, status, ch)
+**
+** (xt) glitch
+*/
+static void
+subtest_xt(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int tabat; /* the tab spacing we end up with */
+ int cc;
+
+ tabat = set_tab ? 8 : init_tabs;
+ if (!over_strike && (tabat > 0)) {
+ ptext("(xt) should not ");
+ put_cr();
+ ptext("(xt) should");
+ cc = char_count;
+ while (cc < 16) {
+ putchp('\t');
+ cc = ((cc / tabat) + 1) * tabat;
+ }
+ putln("be set.");
+ sprintf(temp, "(xt) Destructive-tab is %s in the data base.",
+ dest_tabs_magic_smso ? "true" : "false");
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** subtest_cbt(test_list, status, ch)
+**
+** (cbt) back tab
+*/
+static void
+subtest_cbt(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (back_tab) {
+ put_clear();
+ ptext("Back-tab (cbt)");
+ go_home();
+ put_crlf();
+ for (i = 1; i < columns; i++) {
+ putchp(' ');
+ }
+ for (i = 0; i < columns; i += 8) {
+ tc_putp(back_tab);
+ putchp('T');
+ tc_putp(back_tab);
+ }
+ go_home();
+ put_newlines(2);
+ for (i = 1; i < columns; i++) {
+ if (i % 8 == 1) {
+ putchp('T');
+ } else {
+ putchp(' ');
+ }
+ }
+ go_home();
+ put_newlines(3);
+ ptextln("The preceding two lines should be the same.");
+ } else {
+ ptextln("(cbt) Back-tab not present");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_xenl(test_list, status, ch)
+**
+** (xenl) eat newline glitch
+*/
+static void
+subtest_xenl(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j, k;
+
+ if (over_strike) {
+ /* test (xenl) on overstrike terminals */
+ if (!can_go_home || !can_clear_screen) {
+ ptextln("(xenl) Newline-glitch not tested, can't home cursor and clear.");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ put_clear();
+ /*
+ this test must be done in raw mode. Otherwise UNIX will
+ translate CR to CRLF.
+ */
+ if (stty_query(TTY_OUT_TRANS))
+ tty_raw(1, char_mask);
+ ptext("\nreset (xenl). Does ");
+ i = char_count;
+ put_str("not ignore CR, does ");
+ k = char_count;
+ put_str("not ignore LF");
+ go_home();
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ put_cr();
+ for (j = 0; j < i; j++)
+ putchp(' ');
+ put_str("@@@\n@@");
+ go_home();
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ put_lf();
+ for (j = 0; j < k; j++)
+ putchp(' ');
+ put_str("@@@\r@@");
+ tty_set();
+ go_home();
+ put_newlines(4);
+ sprintf(temp, "(xenl) Newline-glitch is %s in the data base",
+ eat_newline_glitch ? "true" : "false");
+ ptextln(temp);
+ } else {
+ /* test (xenl) when (os) is reset */
+ if (!can_go_home) {
+ ptextln("(xenl) Newline-glitch not tested, can't home cursor");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ /* (xenl) test */
+ put_clear();
+ /*
+ this test must be done in raw mode. Otherwise
+ UNIX will translate CR to CRLF.
+ */
+ if (stty_query(TTY_OUT_TRANS))
+ tty_raw(1, char_mask);
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ put_cr();
+ ptext("(xenl) should be set. Does not ignore CR");
+ go_home();
+ put_crlf();
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ put_lf(); /* test (cud1) */
+ ptext("(xenl) should be set. Ignores (cud1)");
+ go_home();
+ put_newlines(3);
+ if (scroll_forward && cursor_down &&
+ strcmp(scroll_forward, cursor_down)) {
+ for (j = 0; j < columns; j++)
+ put_this(' ');
+ put_ind(); /* test (ind) */
+ ptext("(xenl) should be set. Ignores (ind)");
+ go_home();
+ put_newlines(5);
+ }
+ tty_set();
+ ptextln("If you don't see text above telling you to set it, (xenl) should be false");
+ sprintf(temp, "(xenl) Newline-glitch is %s in the data base",
+ eat_newline_glitch ? "true" : "false");
+ ptextln(temp);
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_eo(test_list, status, ch)
+**
+** (eo) erase overstrike
+*/
+static void
+subtest_eo(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (transparent_underline || over_strike || underline_char) {
+ ptext("(eo) should ");
+ if (underline_char) {
+ ucprint("not");
+ } else {
+ uprint("not");
+ }
+ put_cr();
+ ptextln("(eo) should be set");
+ sprintf(temp, "\n(eo) Erase-overstrike is %s in the data base",
+ erase_overstrike ? "true" : "false");
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** subtest_xmc(test_list, status, ch)
+**
+** (xmc) magic cookie glitch
+*/
+static void
+subtest_xmc(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (enter_standout_mode) {
+ sprintf(temp, "\n(xmc) Magic-cookie-glitch is %d in the data base", magic_cookie_glitch);
+ ptextln(temp);
+ j = magic_cookie_glitch * 8;
+ for (i = 0; i < j; i++) {
+ put_str(" ");
+ }
+ ptextln(" These two lines should line up.");
+ if (j > 0) {
+ char_count += j;
+ }
+ for (i = 0; i < 4; i++) {
+ put_mode(enter_standout_mode);
+ putchp(' ');
+ put_mode(exit_standout_mode);
+ putchp(' ');
+ }
+ ptextln("These two lines should line up.");
+ ptext("If they don't line up then (xmc) magic-cookie-glitch should be greater than zero. ");
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** subtest_xhp(test_list, status, ch)
+**
+** (xhp) erase does not clear standout mode
+*/
+static void
+subtest_xhp(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (enter_standout_mode) {
+ put_crlf();
+ put_mode(enter_standout_mode);
+ put_str("Stand out");
+ put_mode(exit_standout_mode);
+ put_cr();
+ ptextln("If any part of this line is standout then (xhp) should be set.");
+ sprintf(temp, "(xhp) Erase-standout-glitch is %s in the data base",
+ ceol_standout_glitch ? "true" : "false");
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** subtest_mir(test_list, status, ch)
+**
+** (mir) move in insert mode
+*/
+static void
+subtest_mir(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+ char *s;
+
+ if (enter_insert_mode && exit_insert_mode && cursor_address) {
+ put_clear();
+ i = line_count;
+ put_str("\nXXX\nXXX\nXXX\nXXX");
+ tc_putp(enter_insert_mode);
+ s = tparm(cursor_address, i + 1, 0);
+ tputs(s, lines, tc_putch);
+ putchp('X');
+ s = tparm(cursor_address, i + 2, 1);
+ tputs(s, lines, tc_putch);
+ putchp('X');
+ s = tparm(cursor_address, i + 3, 2);
+ tputs(s, lines, tc_putch);
+ putchp('X');
+ s = tparm(cursor_address, i + 4, 3);
+ tputs(s, lines, tc_putch);
+ putchp('X');
+ tc_putp(exit_insert_mode);
+ put_newlines(2);
+ ptextln("If you see a 4 by 4 block of X's then (mir) should be true.");
+ sprintf(temp, "(mir) Move-in-insert-mode is %s in the data base",
+ move_insert_mode ? "true" : "false");
+ ptextln(temp);
+ } else {
+ ptext("(mir) Move-in-insert-mode not tested, ");
+ if (!enter_insert_mode) {
+ ptext("(smir) ");
+ }
+ if (!exit_insert_mode) {
+ ptext("(rmir) ");
+ }
+ if (!cursor_address) {
+ ptext("(cup) ");
+ }
+ ptext("not present. ");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_msgr(test_list, status, ch)
+**
+** (msgr) move in sgr mode
+*/
+static void
+subtest_msgr(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (cursor_address &&
+ ((enter_standout_mode && exit_standout_mode) ||
+ (enter_alt_charset_mode && exit_alt_charset_mode))) {
+ put_crlf();
+ i = line_count + 1;
+ tputs(tparm(cursor_address, i, 0), lines, tc_putch);
+ put_mode(enter_alt_charset_mode);
+ put_crlf();
+ /*
+ some versions of the wy-120 can not clear lines or
+ screen when in alt charset mode. If (el) and (ed)
+ are defined then I can test them. If they are not
+ defined then they can not break (msgr)
+ */
+ tc_putp(clr_eos);
+ tc_putp(clr_eol);
+ put_mode(exit_alt_charset_mode);
+ put_mode(enter_standout_mode);
+ putchp('X');
+ tputs(tparm(cursor_address, i + 2, 1), lines, tc_putch);
+ putchp('X');
+ tputs(tparm(cursor_address, i + 3, 2), lines, tc_putch);
+ putchp('X');
+ tputs(tparm(cursor_address, i + 4, 3), lines, tc_putch);
+ putchp('X');
+ put_mode(exit_standout_mode);
+ put_crlf();
+ tc_putp(clr_eos); /* OK if missing */
+ put_crlf();
+ ptextln("If you see a diagonal line of standout X's then (msgr) should be true. If any of the blanks are standout then (msgr) should be false.");
+ sprintf(temp, "(msgr) Move-in-SGR-mode is %s in the data base",
+ move_standout_mode ? "true" : "false");
+ ptextln(temp);
+ } else {
+ ptextln("(smso) (rmso) (smacs) (rmacs) missing; (msgr) Move-in-SGR-mode not tested.");
+ }
+ generic_done_message(t, state, ch);
+}
+
+/*
+** subtest_in(test_list, status, ch)
+**
+** (in) insert null glitch
+*/
+static void
+subtest_in(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (enter_insert_mode && exit_insert_mode) {
+ ptextln("\nTesting (in) with (smir) and (rmir)");
+ putln("\tIf these two lines line up ...");
+ put_str("\tIf these two lines line up ...");
+ put_cr();
+ tc_putp(enter_insert_mode);
+ putchp(' ');
+ tc_putp(exit_insert_mode);
+ ptext("\nthen (in) should be set. ");
+ sprintf(temp,
+ "(in) Insert-null-glitch is %s in the data base.",
+ insert_null_glitch ? "true" : "false");
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+ }
+}
+
+/*
+** subtest_dadb(test_list, status, ch)
+**
+** (da) (db) data above, (db) data below
+*/
+static void
+subtest_dadb(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (can_clear_screen && scroll_reverse && scroll_forward) {
+ put_clear();
+ if (scroll_reverse)
+ ptext("(da) Data-above should be set\r");
+ home_down();
+ if (scroll_forward)
+ ptext("(db) Data-below should be set\r");
+ tc_putp(scroll_forward);
+ go_home();
+ tc_putp(scroll_reverse);
+ tc_putp(scroll_reverse);
+ home_down();
+ tc_putp(scroll_forward);
+ go_home();
+ ptextln("\n\n\n\n\nIf the top line is blank then (da) should be false.");
+ ptextln("If the bottom line is blank then (db) should be false.");
+ sprintf(temp, "\n(da) Data-above is %s, and (db) Data-below is %s, in the data base.",
+ memory_above ? "true" : "false",
+ memory_below ? "true" : "false");
+ ptextln(temp);
+ line_count = lines;
+ } else {
+ ptextln("(da) Data-above, (db) Data-below not tested, scrolls or (clear) is missing.");
+ }
+ generic_done_message(t, state, ch);
+}
-# $Id: modules,v 1.3 1998/02/11 12:14:03 tom Exp $
-##############################################################################
-# Copyright (c) 1998 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. #
-##############################################################################
-#
-# Author: Thomas E. Dickey <dickey@clark.net> 1997
-#
-ansi tack $(srcdir)
-charset tack $(srcdir)
-color tack $(srcdir)
-control tack $(srcdir)
-crum tack $(srcdir)
-edit tack $(srcdir)
-fun tack $(srcdir)
-init tack $(srcdir)
-menu tack $(srcdir)
-modes tack $(srcdir)
-output tack $(srcdir)
-pad tack $(srcdir)
-scan tack $(srcdir)
-sync tack $(srcdir)
-sysdep tack $(srcdir)
-tack tack $(srcdir)
+# $Id: modules,v 1.4 1999/04/18 01:43:32 tom Exp $
+@ base
+ansi progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+charset progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+color progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+control progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+crum progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+edit progs $(srcdir) $(srcdir)/tack.h ../include/term.h $(INCDIR)/tic.h
+fun progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+init progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+menu progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+modes progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+output progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+pad progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+scan progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+sync progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+sysdep progs $(srcdir) $(srcdir)/tack.h ../include/term.h
+tack progs $(srcdir) $(srcdir)/tack.h ../include/term.h
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+/* screen formatting and I/O utility functions */
+
+#include <tack.h>
+#include <time.h>
+
+MODULE_ID("$Id: output.c,v 1.4 1999/06/16 00:46:53 tom Exp $")
+
+/* globals */
+long char_sent; /* number of characters sent */
+int char_count; /* counts characters */
+int line_count; /* counts line feeds */
+int expand_chars; /* length of expand() string */
+int replace_mode; /* used to output replace mode padding */
+int can_go_home; /* TRUE if we can fashion a home command */
+int can_clear_screen; /* TRUE if we can somehow clear the screen */
+int raw_characters_sent; /* Total output characters */
+int log_count; /* Number of characters on a log line */
+
+/* translate mode default strings */
+#define TM_carriage_return TM_string[0].value
+#define TM_cursor_down TM_string[1].value
+#define TM_scroll_forward TM_string[2].value
+#define TM_newline TM_string[3].value
+#define TM_cursor_left TM_string[4].value
+#define TM_bell TM_string[5].value
+#define TM_form_feed TM_string[6].value
+#define TM_tab TM_string[7].value
+
+struct default_string_list TM_string[TM_last] = {
+ {"cr", "\r", 0},
+ {"cud1", "\n", 0},
+ {"ind", "\n", 0},
+ {"nel", "\r\n", 0},
+ {"cub1", "\b", 0},
+ {"bel", "\007", 0},
+ {"ff", "\f", 0},
+ {"ht", "\t", 0}
+};
+
+static const char *c0[32] = {
+ "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK",
+ "BEL", "BS", "HT", "LF", "VT", "FF", "CR", "SO", "SI",
+ "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB",
+ "CAN", "EM", "SUB", "ESC", "FS", "GS", "RS", "US"
+};
+
+static const char *c1[32] = {
+ "", "", "", "", "IND", "NEL", "SSA", "ESA",
+ "HTS", "HTJ", "VTS", "PLD", "PLU", "RI", "SS2", "SS3",
+ "DCS", "PU1", "PU2", "STS", "CCH", "MW", "SPA", "EPA",
+ "", "", "", "CSI", "ST", "OSC", "PM", "APC"
+};
+
+int
+getnext(int mask)
+{ /* get the next character without scan mode
+ conversion */
+ int ch;
+ unsigned char buf;
+
+ tc_putp(req_for_input);
+ fflush(stdout);
+ if (nodelay_read)
+ while (1) {
+ ch = read(fileno(stdin), &buf, 1);
+ if (ch == -1)
+ return EOF;
+ if (ch == 1)
+ return buf;
+ }
+ ch = getchar();
+ if (ch == EOF)
+ return EOF;
+ return ch & mask;
+}
+
+
+int
+getchp(int mask)
+{ /* read a character with scan mode conversion */
+ if (scan_mode) {
+ tc_putp(req_for_input);
+ fflush(stdout);
+ return scan_key();
+ } else
+ return getnext(mask);
+}
+
+/*
+** tc_putch(c)
+**
+** Output one character
+*/
+int
+tc_putch(int c)
+{
+ char_sent++;
+ raw_characters_sent++;
+ putchar(c);
+ if ((raw_characters_sent & 31) == 31) {
+ fflush(stdout);
+ }
+ if (log_fp) {
+ /* terminal output logging */
+ c &= 0xff;
+ if (c < 32) {
+ fprintf(log_fp, "<%s>", c0[c]);
+ log_count += 5;
+ } else
+ if (c < 127) {
+ fprintf(log_fp, "%c", c);
+ log_count += 1;
+ } else {
+ fprintf(log_fp, "<%02x>", c);
+ log_count += 4;
+ }
+ if (c == '\n' || log_count >= 80) {
+ fprintf(log_fp, "\n");
+ log_count = 0;
+ }
+ }
+ return (c);
+}
+
+/*
+** tt_tputs(string, reps)
+**
+** Output a string with tputs() translation.
+** Use this function inside timing tests.
+*/
+void
+tt_tputs(const char *string, int reps)
+{
+ int i;
+
+ if (string) {
+ for (i = 0; i < TT_MAX; i++) {
+ if (i >= ttp) {
+ tt_cap[i] = string;
+ tt_affected[i] = reps;
+ tt_count[i] = 1;
+ tt_delay[i] = msec_cost(string, reps);
+ ttp++;
+ break;
+ }
+ if (string == tt_cap[i] && reps == tt_affected[i]) {
+ tt_count[i]++;
+ tt_delay_used += tt_delay[i];
+ break;
+ }
+ }
+ (void) tputs(string, reps, tc_putch);
+ }
+}
+
+/*
+** tt_putp(string)
+**
+** Output a string with tputs() translation.
+** Use this function inside timing tests.
+*/
+void
+tt_putp(const char *string)
+{
+ tt_tputs(string, 1);
+}
+
+/*
+** tt_putparm(string, reps, arg1, arg2, ...)
+**
+** Send tt_tputs(tparm(string, args...), reps)
+** Use this function inside timing tests.
+*/
+void
+tt_putparm(
+ NCURSES_CONST char *string,
+ int reps,
+ int arg1,
+ int arg2)
+{
+ int i;
+
+ if (string) {
+ for (i = 0; i < TT_MAX; i++) {
+ if (i >= ttp) {
+ tt_cap[i] = string;
+ tt_affected[i] = reps;
+ tt_count[i] = 1;
+ tt_delay[i] = msec_cost(string, reps);
+ ttp++;
+ break;
+ }
+ if (string == tt_cap[i] && reps == tt_affected[i]) {
+ tt_count[i]++;
+ tt_delay_used += tt_delay[i];
+ break;
+ }
+ }
+ (void) tputs(tparm((NCURSES_CONST char *)string, arg1, arg2), reps, tc_putch);
+ }
+}
+
+/*
+** tc_putp(string)
+**
+** Output a string with tputs() translation.
+** Use this function instead of putp() so we can track
+** the actual number of characters sent.
+*/
+int
+tc_putp(const char *string)
+{
+ return tputs(string, 1, tc_putch);
+}
+
+
+void
+put_this(int c)
+{ /* output one character (with padding) */
+ tc_putch(c);
+ if (char_padding && replace_mode)
+ tt_putp(char_padding);
+}
+
+
+void
+put_cr(void)
+{
+ if (translate_mode && carriage_return) {
+ tt_putp(carriage_return);
+ } else {
+ tt_putp(TM_carriage_return);
+ }
+ char_count = 0;
+}
+
+
+void
+put_lf(void)
+{ /* send a linefeed (only works in RAW or
+ CBREAK mode) */
+ if (translate_mode && cursor_down) {
+ tt_putp(cursor_down);
+ } else {
+ tt_putp(TM_cursor_down);
+ }
+ line_count++;
+}
+
+
+void
+put_ind(void)
+{ /* scroll forward (only works in RAW or
+ CBREAK mode) */
+ if (translate_mode && scroll_forward) {
+ tt_putp(scroll_forward);
+ } else {
+ tt_putp(TM_scroll_forward);
+ }
+ line_count++;
+}
+
+/*
+** put_crlf()
+**
+** Send (nel) or <cr> <lf>
+*/
+void
+put_crlf(void)
+{
+ if (translate_mode && newline) {
+ tt_putp(newline);
+ } else {
+ tt_putp(TM_newline);
+ }
+ char_count = 0;
+ line_count++;
+}
+
+/*
+** put_new_lines(count)
+**
+** Send a number of newlines. (nel)
+*/
+void
+put_newlines(int n)
+{
+ while (n-- > 0) {
+ put_crlf();
+ }
+}
+
+/*
+** putchp(character)
+**
+** Send one character to the terminal.
+** This function does translation of control characters.
+*/
+void
+putchp(int c)
+{
+ switch (c) {
+ case '\b':
+ if (translate_mode && cursor_left) {
+ tt_putp(cursor_left);
+ } else {
+ tt_putp(TM_cursor_left);
+ }
+ char_count--;
+ break;
+ case 7:
+ if (translate_mode && bell) {
+ tt_putp(bell);
+ } else {
+ tt_putp(TM_bell);
+ }
+ break;
+ case '\f':
+ if (translate_mode && form_feed) {
+ tt_putp(form_feed);
+ } else {
+ tt_putp(TM_form_feed);
+ }
+ char_count = 0;
+ line_count++;
+ break;
+ case '\n':
+ put_crlf();
+ break;
+ case '\r':
+ put_cr();
+ break;
+ case '\t':
+ if (translate_mode && tab) {
+ tt_putp(tab);
+ } else {
+ tt_putp(TM_tab);
+ }
+ char_count = ((char_count / 8) + 1) * 8;
+ break;
+ default:
+ put_this(c);
+ char_count++;
+ break;
+ }
+}
+
+
+void
+put_str(const char *s)
+{ /* send the string to the terminal */
+ for (; *s; putchp(*s++));
+}
+
+
+void
+putln(const char *s)
+{ /* output a string followed by a CR LF */
+ for (; *s; putchp(*s++));
+ put_crlf();
+}
+
+
+void
+put_columns(const char *s, int len, int w)
+{ /* put out s in column format */
+ int l;
+
+ if (char_count + w > columns) {
+ put_crlf();
+ }
+ l = char_count % w;
+ if (l) {
+ while (l < w) {
+ putchp(' ');
+ l++;
+ }
+ }
+ if (char_count && char_count + len >= columns) {
+ put_crlf();
+ }
+ l = char_count;
+ put_str(s);
+ char_count = l + len;
+}
+
+
+/*
+** ptext(string)
+**
+** Output a string but do not assume the terminal will wrap to a
+** new line. Break the line at a word boundry then send a CR LF.
+** This is more estetic on 40 column terminals.
+*/
+void
+ptext(const char *s)
+{
+ const char *t;
+
+ while (*s) {
+ for (t = s + 1; *t > ' '; t++);
+ if ((char_count != 0) && ((t - s) + char_count >= columns)) {
+ put_crlf();
+ while (*s == ' ')
+ s++;
+ }
+ while (s < t) {
+ putchp(*s++);
+ }
+ }
+}
+
+
+void
+put_dec(char *f, int i)
+{ /* print a line with a decimal number in it */
+ char tm[128];
+
+ sprintf(tm, f, i / 10, i % 10);
+ ptext(tm);
+}
+
+
+void
+three_digit(char *tx, int i)
+{ /* convert the decimal number to a string of
+ at least 3 digits */
+ if (i < 1000)
+ sprintf(tx, "%d.%d", i / 10, i % 10);
+ else
+ sprintf(tx, "%d", i / 10);
+}
+
+
+void
+ptextln(const char *s)
+{ /* print the text using ptext() then add a CR
+ LF */
+ ptext(s);
+ put_crlf();
+}
+
+
+static void
+expand_one(int ch, char **v)
+{ /* expand one character */
+ char *t = *v;
+
+ if (ch & 0x80) { /* dump it in octal (yuck) */
+ *t++ = '\\';
+ *t++ = '0' + ((ch >> 6) & 3);
+ *t++ = '0' + ((ch >> 3) & 7);
+ *t++ = '0' + (ch & 7);
+ expand_chars += 4;
+ } else if (ch == 127) { /* DEL */
+ *t++ = '^';
+ *t++ = '?';
+ expand_chars += 2;
+ } else if (ch >= ' ') {
+ *t++ = ch;
+ expand_chars++;
+ } else { /* control characters */
+ *t++ = '^';
+ *t++ = ch + '@';
+ expand_chars += 2;
+ }
+ *v = t;
+}
+
+
+char *
+expand(const char *s)
+{ /* convert the string to printable form */
+ static char buf[4096];
+ char *t, *v;
+ int ch;
+
+ if (magic_cookie_glitch <= 0 && exit_attribute_mode) {
+ v = enter_reverse_mode;
+ } else {
+ v = NULL;
+ }
+ expand_chars = 0;
+ t = buf;
+ if (s) {
+ for (; (ch = *s); s++) {
+ if ((ch & 0x80) && v) { /* print it in reverse video
+ mode */
+ strcpy(t, liberated(tparm(v)));
+ for (; *t; t++);
+ expand_one(ch & 0x7f, &t);
+ strcpy(t, liberated(tparm(exit_attribute_mode)));
+ for (; *t; t++);
+ } else {
+ expand_one(ch, &t);
+ }
+ }
+ }
+ *t = '\0';
+ return buf;
+}
+
+
+char *
+print_expand(char *s)
+{ /* convert the string to 7-bit printable form */
+ static char buf[4096];
+ char *t;
+ int ch;
+
+ expand_chars = 0;
+ t = buf;
+ if (s) {
+ for (; (ch = *s); s++) {
+ expand_one(ch, &t);
+ }
+ }
+ *t = '\0';
+ return buf;
+}
+
+
+char *
+expand_to(char *s, int l)
+{ /* expand s to length l */
+ char *t;
+
+ for (s = t = expand(s); *t; t++);
+ for (; expand_chars < l; expand_chars++) {
+ *t++ = ' ';
+ }
+ *t = '\0';
+ return s;
+}
+
+
+char *
+hex_expand_to(char *s, int l)
+{ /* expand s to length l in hex */
+ static char buf[4096];
+ char *t;
+
+ for (t = buf; *s; s++) {
+ sprintf(t, "%02X ", *s & 0xff);
+ t += 3;
+ if (t - buf > (int) sizeof(buf) - 4) {
+ break;
+ }
+ }
+ for (; t - buf < l;) {
+ *t++ = ' ';
+ }
+ *t = '\0';
+ expand_chars = t - buf;
+ return buf;
+}
+
+
+char *
+expand_command(const char *c)
+{ /* expand an ANSI escape sequence */
+ static char buf[256];
+ int i, j, ch;
+ char *s;
+
+ s = buf;
+ for (i = FALSE; (ch = (*c & 0xff)); c++) {
+ if (i) {
+ *s++ = ' ';
+ }
+ i = TRUE;
+ if (ch < 32) {
+ j = c[1] & 0xff;
+ if (ch == '\033' && j >= '@' && j <= '_') {
+ ch = j - '@';
+ c++;
+ for (j = 0; (*s = c1[ch][j++]); s++);
+ } else
+ for (j = 0; (*s = c0[ch][j++]); s++);
+ } else {
+ *s++ = ch;
+ j = c[1] & 0xff;
+ if (ch >= '0' && ch <= '9' &&
+ j >= '0' && j <= '9') {
+ i = FALSE;
+ }
+ }
+ }
+ *s = '\0';
+ return buf;
+}
+
+/*
+** go_home()
+**
+** Move the cursor to the home position
+*/
+void
+go_home(void)
+{
+ int i;
+
+ if (cursor_home)
+ tt_putp(cursor_home);
+ else if (cursor_address)
+ tt_putparm(cursor_address, lines, 0, 0);
+ else if (row_address) { /* use (vpa) */
+ put_cr();
+ tt_putparm(row_address, 1, 0, 0);
+ } else if (cursor_up && cursor_to_ll) {
+ tt_putp(cursor_to_ll);
+ for (i = 1; i < lines; i++) {
+ tt_putp(cursor_up);
+ }
+ } else {
+ can_go_home = FALSE;
+ return;
+ }
+ char_count = line_count = 0;
+ can_go_home = TRUE;
+}
+
+
+void
+home_down(void)
+{ /* move the cursor to the lower left hand
+ corner */
+ int i;
+
+ if (cursor_to_ll)
+ tt_putp(cursor_to_ll);
+ else if (cursor_address)
+ tt_putparm(cursor_address, lines, lines - 1, 0);
+ else if (row_address) { /* use (vpa) */
+ put_cr();
+ tt_putparm(row_address, 1, lines - 1, 0);
+ } else if (cursor_down && cursor_home) {
+ tt_putp(cursor_home);
+ for (i = 1; i < lines; i++)
+ tt_putp(cursor_down);
+ } else
+ return;
+ char_count = 0;
+ line_count = lines - 1;
+}
+
+
+void
+put_clear(void)
+{ /* clear the screen */
+ int i;
+
+ if (clear_screen)
+ tt_tputs(clear_screen, lines);
+ else if (clr_eos && can_go_home) {
+ go_home();
+ tt_tputs(clr_eos, lines);
+ } else if (scroll_forward && !over_strike && (can_go_home || cursor_up)) {
+ /* clear the screen by scrolling */
+ put_cr();
+ if (cursor_to_ll) {
+ tt_putp(cursor_to_ll);
+ } else if (cursor_address) {
+ tt_putparm(cursor_address, lines, lines - 1, 0);
+ } else if (row_address) {
+ tt_putparm(row_address, 1, lines - 1, 0);
+ } else {
+ for (i = 1; i < lines; i++) {
+ tt_putp(scroll_forward);
+ }
+ }
+ for (i = 1; i < lines; i++) {
+ tt_putp(scroll_forward);
+ }
+ if (can_go_home) {
+ go_home();
+ } else {
+ for (i = 1; i < lines; i++) {
+ tt_putp(cursor_up);
+ }
+ }
+ } else {
+ can_clear_screen = FALSE;
+ return;
+ }
+ char_count = line_count = 0;
+ can_clear_screen = TRUE;
+}
+
+/*
+** wait_here()
+**
+** read one character from the input stream
+** If the terminal is not in RAW mode then this function will
+** wait for a <cr> or <lf>.
+*/
+int
+wait_here(void)
+{
+ char ch, cc[64];
+ char message[16];
+ int i, j;
+
+ for (i = 0; i < (int) sizeof(cc); i++) {
+ cc[i] = ch = getchp(STRIP_PARITY);
+ if (ch == '\r' || ch == '\n') {
+ put_crlf();
+ char_sent = 0;
+ return cc[i ? i - 1 : 0];
+ }
+ if (ch >= ' ') {
+ if (stty_query(TTY_CHAR_MODE)) {
+ put_crlf();
+ char_sent = 0;
+ return ch;
+ }
+ continue;
+ }
+ if (ch == 023) { /* Control S */
+ /* ignore control S, but tell me about it */
+ while (ch == 023 || ch == 021) {
+ ch = getchp(STRIP_PARITY);
+ if (i < (int) sizeof(cc))
+ cc[++i] = ch;
+ }
+ put_str("\nThe terminal sent a ^S -");
+ for (j = 0; j <= i; j++) {
+ sprintf(message, " %02X", cc[j] & 0xFF);
+ put_str(message);
+ }
+ put_crlf();
+ i = -1;
+ } else if (ch != 021) { /* Not Control Q */
+ /* could be abort character */
+ spin_flush();
+ if (tty_can_sync == SYNC_TESTED) {
+ (void) tty_sync_error();
+ } else {
+ put_str("\n? ");
+ }
+ }
+ }
+ return '?';
+}
+
+
+/*
+** read_string(buffer, length)
+**
+** Read a string of characters from the input stream.
+*/
+void
+read_string(
+ char *buf,
+ int length)
+{
+ int ch, i;
+
+ for (i = 0; i < length - 1; ) {
+ ch = getchp(STRIP_PARITY);
+ if (ch == '\r' || ch == '\n') {
+ break;
+ }
+ if (ch == '\b' || ch == 127) {
+ if (i) {
+ putchp('\b');
+ putchp(' ');
+ putchp('\b');
+ i--;
+ }
+ } else {
+ buf[i++] = ch;
+ putchp(ch);
+ }
+ }
+ buf[i] = '\0';
+ put_crlf();
+ char_sent = 0;
+}
+
+/*
+** maybe_wait(lines)
+**
+** wait if near the end of the screen, then clear screen
+*/
+void
+maybe_wait(int n)
+{
+ if (line_count + n >= lines) {
+ if (char_sent != 0) {
+ ptext("Go? ");
+ (void) wait_here();
+ }
+ put_clear();
+ } else {
+ put_crlf();
+ }
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: pad.c,v 1.1 1998/01/10 00:30:27 tom Exp $")
+
+/* test the pad counts on the terminal */
+
+static void pad_standard(struct test_list *, int *, int *);
+static void init_xon_xoff(struct test_list *, int *, int *);
+static void init_cup(struct test_list *, int *, int *);
+static void pad_rmxon(struct test_list *, int *, int *);
+static void pad_home1(struct test_list *, int *, int *);
+static void pad_home2(struct test_list *, int *, int *);
+static void pad_clear(struct test_list *, int *, int *);
+static void pad_ech(struct test_list *, int *, int *);
+static void pad_el1(struct test_list *, int *, int *);
+static void pad_el(struct test_list *, int *, int *);
+static void pad_smdc(struct test_list *, int *, int *);
+static void pad_dch(struct test_list *, int *, int *);
+static void pad_dch1(struct test_list *, int *, int *);
+static void pad_smir(struct test_list *, int *, int *);
+static void pad_ich(struct test_list *, int *, int *);
+static void pad_ich1(struct test_list *, int *, int *);
+static void pad_xch1(struct test_list *, int *, int *);
+static void pad_rep(struct test_list *, int *, int *);
+static void pad_cup(struct test_list *, int *, int *);
+static void pad_hd(struct test_list *, int *, int *);
+static void pad_hu(struct test_list *, int *, int *);
+static void pad_rin(struct test_list *, int *, int *);
+static void pad_il(struct test_list *, int *, int *);
+static void pad_indn(struct test_list *, int *, int *);
+static void pad_dl(struct test_list *, int *, int *);
+static void pad_xl(struct test_list *, int *, int *);
+static void pad_scrc(struct test_list *, int *, int *);
+static void pad_csrind(struct test_list *, int *, int *);
+static void pad_sccsrrc(struct test_list *, int *, int *);
+static void pad_csr_nel(struct test_list *, int *, int *);
+static void pad_csr_cup(struct test_list *, int *, int *);
+static void pad_ht(struct test_list *, int *, int *);
+static void pad_smso(struct test_list *, int *, int *);
+static void pad_smacs(struct test_list *, int *, int *);
+static void pad_crash(struct test_list *, int *, int *);
+
+extern struct test_menu change_pad_menu;
+
+/*
+ Any command found in this list, executed from a "Done" prompt
+ will force the default action to repeat rather than next.
+*/
+const char *pad_repeat_test = {"ep-+<>"};
+
+struct test_list pad_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {0, 0, 0, 0, "p) change padding", 0, &change_pad_menu},
+ {0, 0, 0, 0, "@) display statistics about the last test", dump_test_stats, 0},
+ {0, 0, 0, 0, "c) clear screen", menu_clear_screen, 0},
+ {0, 0, 0, 0, "i) send reset and init", menu_reset_init, 0},
+ {0, 0, 0, 0, txt_longer_test_time, longer_test_time, 0},
+ {0, 0, 0, 0, txt_shorter_test_time, shorter_test_time, 0},
+ {0, 0, 0, 0, txt_longer_augment, longer_augment, 0},
+ {0, 0, 0, 0, txt_shorter_augment, shorter_augment, 0},
+ /***
+ Phase 1: Test initialization and reset strings.
+
+ (rs1) (rs2) (rs3) (is1) (is2) (is3) are very difficult to test.
+ They have no defined output. To make matters worse, the cap
+ builder could partition (rs1) (rs2) (rs3) by length, leaving the
+ terminal in some unknown state between (rs1) and (rs2) or between
+ (r2) and (rs3). Some reset strings clear the screen when done.
+
+ We have no control over this. The only thing we can do for
+ certain is to test the pad times by checking for overruns.
+ ***/
+ {MENU_NEXT, 3, "rs1", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "rs2", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "rs3", 0, 0, pad_standard, 0},
+ {MENU_NEXT | MENU_INIT, 0, 0, 0, 0, init_xon_xoff, 0},
+ {MENU_NEXT, 3, "is1", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "is2", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "is3", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "rmxon", "smxon", 0, pad_rmxon, 0},
+ {MENU_NEXT | MENU_INIT, 0, 0, 0, 0, init_cup, 0},
+ /*
+ Phase 2: Test home, screen clears and erases.
+ */
+ {MENU_NEXT, 0, "home", 0, 0, pad_home1, 0},
+ {MENU_NEXT, 0, "home) (nel", 0, 0, pad_home2, 0},
+ {MENU_NEXT | 1, 0, "clear", 0, 0, pad_clear, 0},
+ {MENU_NEXT | MENU_LM1, 0, "ed", 0, 0, pad_clear, 0},
+ {MENU_NEXT | MENU_80c, 0, "ech", 0, 0, pad_ech, 0},
+ {MENU_NEXT | MENU_80c, 0, "el1", "cub1 nel", 0, pad_el1, 0},
+ {MENU_NEXT | MENU_10c, 0, "el", "nel", 0, pad_el, 0},
+ /*
+ Phase 3: Character deletions and insertions
+ */
+ {MENU_NEXT, 0, "smdc) (rmdc", 0, 0, pad_smdc, 0},
+ {MENU_NEXT | MENU_80c, 0, "dch", "smdc rmdc", 0, pad_dch, 0},
+ {MENU_NEXT | MENU_80c, 0, "dch1", "smdc rmdc", 0, pad_dch1, 0},
+ {MENU_NEXT, 0, "smir) (rmir", 0, 0, pad_smir, 0},
+ {MENU_NEXT | MENU_90c, 0, "ich) (ip", "smir rmir", 0, pad_ich, 0},
+ {MENU_NEXT | MENU_90c, 0, "ich1) (ip", "smir rmir", 0, pad_ich1, 0},
+ {MENU_NEXT, 4, "ich1) (dch1", "smir rmir", 0, pad_xch1, 0},
+ {MENU_NEXT | MENU_90c, 0, "rep", 0, 0, pad_rep, 0},
+ /*
+ Phase 4: Test cursor addressing pads.
+ */
+ {MENU_NEXT, 0, "cup", 0, 0, pad_cup, 0},
+ /*
+ Phase 5: Test scrolling and cursor save/restore.
+ */
+ {MENU_NEXT, 0, "hd", 0, 0, pad_hd, 0},
+ {MENU_NEXT, 0, "hu", 0, 0, pad_hu, 0},
+ {MENU_NEXT | MENU_LM1 | 1, 0, "rin", 0, 0, pad_rin, 0},
+ {MENU_NEXT, 0, "ri", 0, 0, pad_rin, 0},
+ {MENU_NEXT | MENU_LM1 | 1, 0, "il", 0, 0, pad_il, 0},
+ {MENU_NEXT, 0, "il1", 0, 0, pad_il, 0},
+ {MENU_NEXT | MENU_LM1 | 1, 0, "indn", 0, 0, pad_indn, 0},
+ {MENU_NEXT, 0, "ind", 0, 0, pad_indn, 0},
+ {MENU_NEXT | MENU_LM1 | 1, 0, "dl", 0, 0, pad_dl, 0},
+ {MENU_NEXT, 0, "dl1", 0, 0, pad_dl, 0},
+ {MENU_NEXT, 0, "il1) (dl1", 0, 0, pad_xl, 0},
+ {MENU_NEXT, 0, "sc) (rc", 0, 0, pad_scrc, 0},
+ {MENU_NEXT | MENU_50l, 0, "csr) (ind", 0, 0, pad_csrind, 0},
+ {MENU_NEXT, 0, "sc) (csr) (rc", 0, 0, pad_sccsrrc, 0},
+ {MENU_NEXT, 0, "csr) (nel", "sc rc", 0, pad_csr_nel, 0},
+ {MENU_NEXT, 0, "csr) (cup", 0, 0, pad_csr_cup, 0},
+ /*
+ Phase 6: Test tabs.
+ */
+ {MENU_NEXT, 0, "ht", 0, 0, pad_ht, 0},
+ /*
+ Phase 7: Test character-set-switch pads.
+ */
+ {MENU_NEXT, 0, "smso) (rmso", 0, 0, pad_smso, 0},
+ {MENU_NEXT, 0, "smacs) (rmacs", 0, 0, pad_smacs, 0},
+ /*
+ Phase 8: Tests for miscellaneous mode-switch pads.
+ */
+ {MENU_NEXT, 3, "flash", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "smkx", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "rmkx", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "smm", 0, 0, pad_standard, 0},
+ {MENU_NEXT, 3, "rmm", 0, 0, pad_standard, 0},
+ /*
+ Phase 9: Test crash-and-burn properties of unpadded (clear).
+ */
+ {0, 0, "clear", "xon", "k) run clear test with no padding", pad_crash, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+extern int test_complete; /* counts number of tests completed */
+
+/* globals */
+int hzcc; /* horizontal character count */
+char letter; /* current character being displayed */
+int letter_number; /* points into letters[] */
+int augment, repeats; /* number of characters (or lines) effected */
+char letters[] = "AbCdefghiJklmNopQrStuVwXyZ";
+
+static char every_line[] = "This text should be on every line.";
+static char all_lines[] = "Each char on any line should be the same. ";
+static char above_line[] = "The above lines should be all Xs. ";
+static char no_visual[] = "This loop test has no visual failure indicator. ";
+
+/*
+** pad_standard(test_list, status, ch)
+**
+** Run a single cap pad test.
+*/
+static void
+pad_standard(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ const char *long_name;
+ char *cap;
+ int l = 2, i;
+ char tbuf[128];
+
+ if ((cap = get_string_cap_byname(t->caps_done, &long_name))) {
+ sprintf(tbuf, "(%s) %s, start testing", t->caps_done,
+ long_name);
+ if (skip_pad_test(t, state, ch, tbuf)) {
+ return;
+ }
+ i = 1;
+ pad_test_startup(1);
+ do {
+ if (i >= columns) {
+ page_loop();
+ l++;
+ i = 1;
+ }
+ tt_putp(cap);
+ putchp(letter);
+ i++;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ if (l >= lines) {
+ home_down();
+ } else {
+ put_crlf();
+ }
+ ptextln(no_visual);
+ } else {
+ CAP_NOT_FOUND;
+ /* Note: get_string_cap_byname() always sets long_name */
+ sprintf(temp, "(%s) %s, not present. ", t->caps_done,
+ long_name);
+ ptext(temp);
+ }
+ pad_done_message(t, state, ch);
+}
+
+/*
+** init_xon_xoff(test_list, status, ch)
+**
+** Initialize the xon_xoff values
+*/
+static void
+init_xon_xoff(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ /* the reset strings may dink with the XON/XOFF modes */
+ if (select_xon_xoff == 0 && exit_xon_mode) {
+ tc_putp(exit_xon_mode);
+ }
+ if (select_xon_xoff == 1 && enter_xon_mode) {
+ tc_putp(enter_xon_mode);
+ }
+}
+
+/*
+** pad_rmxon(test_list, status, ch)
+**
+** Test (rmxon) exit XON/XOFF mode
+*/
+static void
+pad_rmxon(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (select_xon_xoff == 0 && exit_xon_mode) {
+ pad_standard(t, state, ch);
+ }
+}
+
+/*
+** init_cup(test_list, status, ch)
+**
+** Send the initialization strings for XON/XOFF and (smcup)
+** Stop pad testing if clear screen is missing.
+*/
+static void
+init_cup(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ init_xon_xoff(t, state, ch);
+ if (enter_ca_mode) {
+ tc_putp(enter_ca_mode);
+ }
+ if (!can_clear_screen) {
+ ptext("(clear) clear screen not present,");
+ ptext(" pad processing terminated. ");
+ pad_done_message(t, state, ch);
+ if (*ch == 0 || *ch == 'n' || *ch == 's' || *ch == 'r') {
+ *ch = '?';
+ }
+ return;
+ }
+}
+
+/*
+** pad_home1(test_list, status, ch)
+**
+** Test (home) when (am) is set.
+*/
+static void
+pad_home1(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int j, k;
+
+ if (can_go_home && auto_right_margin) {
+ /*
+ truly brain damaged terminals will fail this test because
+ they cannot accept data at full rate
+ */
+ if (skip_pad_test(t, state, ch, "(home) Home start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (j = 1; j < lines; j++) {
+ for (k = 0; k < columns; k++) {
+ if (k & 0xF) {
+ put_this(letter);
+ } else {
+ put_this('.');
+ }
+ }
+ SLOW_TERMINAL_EXIT;
+ }
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext("All the dots should line up. ");
+ pad_done_message(t, state, ch);
+ put_clear();
+ }
+}
+
+/*
+** pad_home2(test_list, status, ch)
+**
+** Test (home) and (nel). (am) is reset.
+*/
+static void
+pad_home2(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int j, k;
+
+ if (can_go_home) {
+ if (skip_pad_test(t, state, ch,
+ "(home) Home, (nel) newline start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (j = 1; j < lines; j++) {
+ for (k = 2; k < columns; k++) {
+ if (k & 0xF) {
+ put_this(letter);
+ } else {
+ put_this('.');
+ }
+ }
+ put_crlf(); /* this does the (nel) */
+ SLOW_TERMINAL_EXIT;
+ }
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext("All the dots should line up. ");
+ pad_done_message(t, state, ch);
+ put_clear();
+ }
+}
+
+/*
+** pad_clear(test_list, status, ch)
+**
+** Test (clear) and (ed)
+** run the clear screen tests (also clear-to-end-of-screen)
+**
+** 0) full page
+** 1) sparse page
+** 2) short lines
+** 3) one full line
+** 4) one short line
+*/
+static void
+pad_clear(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ const char *end_message = 0;
+ const char *txt;
+ int j, k, is_clear;
+ int clear_select; /* select the test number */
+
+ is_clear = t->flags & 1;
+ clear_select = auto_right_margin ? 0 : 1;
+ if (is_clear) {
+ txt = "(clear) clear-screen start testing";
+ } else {
+ if (!clr_eos) {
+ CAP_NOT_FOUND;
+ ptext("(ed) erase-to-end-of-display, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ txt = "(ed) erase-to-end-of-display start testing";
+ }
+ if (skip_pad_test(t, state, ch, txt)) {
+ return;
+ }
+ if (enter_am_mode) {
+ tc_putp(enter_am_mode);
+ clear_select = 0;
+ }
+ for (; clear_select < 5; clear_select++) {
+ if (augment > lines || is_clear || !cursor_address) {
+ augment = lines;
+ } else {
+ if (augment <= 1) {
+ augment = 2;
+ }
+ if (augment < lines) {
+ put_clear();
+ tt_putparm(cursor_address, 1,
+ lines - augment - 1, 0);
+ ptextln("This line should not be erased (ed)");
+ }
+ }
+ repeats = augment;
+ switch (clear_select) {
+ case 0:
+ end_message = "Clear full screen. ";
+ break;
+ case 1:
+ end_message = "Clear sparse screen. ";
+ if (cursor_down) {
+ break;
+ }
+ clear_select++;
+ case 2:
+ end_message = "Clear one character per line. ";
+ if (newline) {
+ break;
+ }
+ clear_select++;
+ case 3:
+ end_message = "Clear one full line. ";
+ break;
+ case 4:
+ end_message = "Clear single short line. ";
+ break;
+ }
+ pad_test_startup(0);
+ do {
+ switch (clear_select) {
+ case 0: /* full screen test */
+ for (j = 1; j < repeats; j++) {
+ for (k = 0; k < columns; k++) {
+ if (k & 0xF) {
+ put_this(letter);
+ } else {
+ put_this('.');
+ }
+ }
+ SLOW_TERMINAL_EXIT;
+ }
+ break;
+ case 1: /* sparse screen test */
+ for (j = columns - repeats; j > 2; j--) {
+ put_this(letter);
+ }
+ for (j = 2; j < repeats; j++) {
+ tt_putp(cursor_down);
+ put_this(letter);
+ }
+ break;
+ case 2: /* short lines */
+ for (j = 2; j < repeats; j++) {
+ put_this(letter);
+ tt_putp(newline);
+ }
+ put_this(letter);
+ break;
+ case 3: /* one full line */
+ for (j = columns - 5; j > 1; j--) {
+ put_this(letter);
+ }
+ break;
+ case 4: /* one short line */
+ put_str("Erase this!");
+ break;
+ }
+ if (is_clear) {
+ put_clear();
+ } else {
+ if (augment == lines) {
+ go_home();
+ } else {
+ tt_putparm(cursor_address, 1,
+ lines - repeats, 0);
+ }
+ tt_tputs(clr_eos, repeats);
+ }
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 1);
+ ptext(end_message);
+
+ pad_done_message(t, state, ch);
+
+ if (*ch != 0 && *ch != 'n') {
+ return;
+ }
+ }
+}
+
+/*
+** pad_ech(test_list, status, ch)
+**
+** Test (ech) erase characters
+*/
+static void
+pad_ech(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!erase_chars) {
+ CAP_NOT_FOUND;
+ ptext("(ech) Erase-characters, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(ech) Erase-characters start testing")) {
+ return;
+ }
+ if (augment > columns - 2) {
+ augment = columns - 2;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (i = 2; i < lines; i++) {
+ for (j = 0; j <= repeats; j++) {
+ putchp(letter);
+ }
+ put_cr();
+ tt_putparm(erase_chars, repeats, repeats, 0);
+ put_crlf();
+ SLOW_TERMINAL_EXIT;
+ }
+ for (i = 1; i <= repeats; i++) {
+ putchp(' ');
+ }
+ putchp(letter);
+ put_crlf();
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext(all_lines);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_el1(test_list, status, ch)
+**
+** Test (el1) erase to start of line also (cub1) and (nel)
+*/
+static void
+pad_el1(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!clr_bol) {
+ CAP_NOT_FOUND;
+ ptext("(el1) Erase-to-beginning-of-line, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(el1) Erase-to-beginning-of-line start testing")) {
+ return;
+ }
+ if (augment > columns - 2) {
+ augment = columns - 2;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (i = 2; i < lines; i++) {
+ for (j = 0; j <= repeats; j++) {
+ putchp(letter);
+ }
+ tt_putp(cursor_left);
+ tt_putp(cursor_left);
+ tt_tputs(clr_bol, repeats);
+ put_crlf();
+ SLOW_TERMINAL_EXIT;
+ }
+ for (i = 1; i <= repeats; i++) {
+ putchp(' ');
+ }
+ putchp(letter);
+ put_crlf();
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext(all_lines);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_el(test_list, status, ch)
+**
+** Test (el) clear to end of line also (nel)
+*/
+static void
+pad_el(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!clr_eol) {
+ CAP_NOT_FOUND;
+ ptext("(el) Clear-to-end-of-line, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(el) Clear-to-end-of-line start testing")) {
+ return;
+ }
+ hzcc = columns * 8 / 10; /* horizontal character count */
+ if (augment > hzcc) {
+ augment = hzcc;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (i = 2; i < lines; i++) {
+ for (j = -1; j < augment; j++) {
+ putchp(letter);
+ }
+ put_cr();
+ putchp(letter);
+ tt_putp(clr_eol);
+ put_crlf();
+ SLOW_TERMINAL_EXIT;
+ }
+ putchp(letter);
+ put_crlf();
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext(all_lines);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_smdc(test_list, status, ch)
+**
+** Test (smdc) (rmdc) Delete mode
+*/
+static void
+pad_smdc(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (!enter_delete_mode) {
+ CAP_NOT_FOUND;
+ ptext("(smdc) Enter-delete-mode");
+ if (!exit_delete_mode) {
+ ptext(", (rmdc) Exit-delete-mode");
+ }
+ ptext(", not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(smdc) (rmdc) Enter/Exit-delete-mode start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ page_loop();
+ for (i = 1; i < columns; i++) {
+ tt_putp(enter_delete_mode);
+ tt_putp(exit_delete_mode);
+ putchp(letter);
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext(no_visual);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_dch(test_list, status, ch)
+**
+** Test (smdc) (rmdc) Delete mode and (dch)
+*/
+static void
+pad_dch(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!parm_dch) {
+ CAP_NOT_FOUND;
+ ptext("(dch) Delete-characters, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(dch) Delete-characters start testing")) {
+ return;
+ }
+ hzcc = columns * 8 / 10; /* horizontal character count */
+ if (augment > hzcc) {
+ augment = hzcc;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (i = 2; i < lines; i++) {
+ for (j = 0; j <= repeats; j++) {
+ putchp(letter);
+ }
+ put_cr();
+ tt_putp(enter_delete_mode);
+ tt_putparm(parm_dch, repeats, repeats, 0);
+ tt_putp(exit_delete_mode);
+ put_crlf();
+ SLOW_TERMINAL_EXIT;
+ }
+ putchp(letter);
+ put_crlf();
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext(all_lines);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_dch1(test_list, status, ch)
+**
+** Test (smdc) (rmdc) Delete mode and (dch1)
+*/
+static void
+pad_dch1(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!delete_character) {
+ if (parm_dch) {
+ /* if the other one is defined then its OK */
+ return;
+ }
+ CAP_NOT_FOUND;
+ ptext("(dch1) Delete-character, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(dch1) Delete-character start testing")) {
+ return;
+ }
+ hzcc = columns * 8 / 10; /* horizontal character count */
+ if (augment > hzcc) {
+ augment = hzcc;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (i = 2; i < lines; i++) {
+ for (j = -1; j < augment; j++) {
+ putchp(letter);
+ }
+ put_cr();
+ tt_putp(enter_delete_mode);
+ for (j = 0; j < augment; j++) {
+ tt_putp(delete_character);
+ }
+ tt_putp(exit_delete_mode);
+ put_crlf();
+ SLOW_TERMINAL_EXIT;
+ }
+ putchp(letter);
+ put_crlf();
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext(all_lines);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_smir(test_list, status, ch)
+**
+** Test (smir) (rmir) Insert mode
+*/
+static void
+pad_smir(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (!enter_insert_mode) {
+ CAP_NOT_FOUND;
+ ptext("(smir) Enter-insert-mode");
+ if (!exit_insert_mode) {
+ ptext(", (rmir) Exit-insert-mode");
+ }
+ ptext(", not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(smir) (rmir) Enter/Exit-insert-mode start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ page_loop();
+ for (i = 1; i < columns; i++) {
+ tt_putp(enter_insert_mode);
+ tt_putp(exit_insert_mode);
+ putchp(letter);
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext(no_visual);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_ich(test_list, status, ch)
+**
+** Test (smir) (rmir) Insert mode and (ich) and (ip)
+*/
+static void
+pad_ich(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!parm_ich) {
+ CAP_NOT_FOUND;
+ ptext("(ich) Insert-characters, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(ich) Insert-characters, (ip) Insert-padding start testing")) {
+ return;
+ }
+ j = columns * 9 / 10;
+ if (augment > j) {
+ augment = j;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (i = 2; i < lines; i++) {
+ putchp(letter);
+ put_cr();
+ tt_putp(enter_insert_mode);
+ replace_mode = 0;
+ tt_putparm(parm_ich, repeats, repeats, 0);
+ tt_putp(exit_insert_mode);
+ replace_mode = 1;
+ put_crlf();
+ SLOW_TERMINAL_EXIT;
+ }
+ for (i = 0; i < repeats; i++) {
+ putchp(' ');
+ }
+ putchp(letter);
+ NEXT_LETTER;
+ put_crlf();
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext(all_lines);
+ pad_done_message(t, state, ch);
+ tc_putp(exit_insert_mode);
+}
+
+/*
+** pad_ich1(test_list, status, ch)
+**
+** Test (smir) (rmir) Insert mode and (ich1) and (ip)
+*/
+static void
+pad_ich1(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!insert_character) {
+ CAP_NOT_FOUND;
+ ptext("(ich1) Insert-character, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(ich1) Insert-character, (ip) Insert-padding start testing")) {
+ return;
+ }
+ if (augment > columns - 2) {
+ augment = columns - 2;
+ }
+ pad_test_startup(1);
+ do {
+ put_clear();
+ for (i = 2; i < lines; i++) {
+ putchp(letter);
+ put_cr();
+ tt_putp(enter_insert_mode);
+ replace_mode = 0;
+ if (!insert_padding && !insert_character) {
+ /* only enter/exit is needed */
+ for (j = 0; j < augment; j++) {
+ putchp('.');
+ }
+ } else {
+ for (j = 0; j < augment; j++) {
+ tt_putp(insert_character);
+ putchp('.');
+ tt_putp(insert_padding);
+ }
+ }
+ tt_putp(exit_insert_mode);
+ replace_mode = 1;
+ put_crlf();
+ SLOW_TERMINAL_EXIT;
+ }
+ for (j = 0; j < augment; j++) {
+ putchp('.');
+ }
+ putchp(letter);
+ NEXT_LETTER;
+ put_crlf();
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptext(all_lines);
+ pad_done_message(t, state, ch);
+ tc_putp(exit_insert_mode);
+}
+
+/*
+** pad_xch1(test_list, status, ch)
+**
+** Test (ich1) (ip) (dch1)
+*/
+static void
+pad_xch1(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ static char xch1[] =
+ "This line should not be garbled. It should be left justified.";
+
+ if (enter_insert_mode || exit_insert_mode ||
+ enter_delete_mode || exit_delete_mode ||
+ !insert_character || !delete_character) {
+ /* this test is quitely ignored */
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(ich1) Insert-character, (dch1) Delete-character start testing")) {
+ return;
+ }
+ put_crlf();
+ ptext(xch1);
+ put_cr();
+ pad_test_startup(0);
+ do {
+ tt_putp(insert_character);
+ tt_putp(delete_character);
+ } while(still_testing());
+ pad_test_shutdown(t, 1);
+ ptextln(xch1);
+ ptext("The preceeding two lines should be the same. ");
+ pad_done_message(t, state, ch);
+}
+
+/*
+** pad_rep(test_list, status, ch)
+**
+** Test (rep) repeat character
+*/
+static void
+pad_rep(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!repeat_char) {
+ CAP_NOT_FOUND;
+ ptext("(rep) Repeat-character, not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(rep) Repeat-character start testing")) {
+ return;
+ }
+ if (augment > columns - 2) {
+ augment = columns - 2;
+ }
+ if (augment < 2) {
+ augment = 2;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (i = 2; i < lines; i++) {
+ tt_putparm(repeat_char, repeats, letter, repeats);
+ put_crlf();
+ }
+ for (j = 0; j < repeats; j++) {
+ putchp(letter);
+ }
+ put_crlf();
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptextln(all_lines);
+ pad_done_message(t, state, ch);
+}
+
+/*
+** pad_cup(test_list, status, ch)
+**
+** Test (cup) Cursor address
+*/
+static void
+pad_cup(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j, l, r, c;
+
+ if (!cursor_address) {
+ CAP_NOT_FOUND;
+ ptext("(cup) Cursor-address not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(cup) Cursor-address start testing")) {
+ return;
+ }
+ put_clear();
+ ptext("Each line should be filled with the same letter. There should");
+ ptext(" be no gaps, or single letters scattered over the screen. ");
+ if (char_count + 15 > columns) {
+ put_crlf();
+ }
+ if (((lines - line_count) & 1) == 0) {
+ /* this removes the gap in the middle of the test when the
+ number of lines is odd. */
+ put_crlf();
+ }
+ r = line_count;
+ c = char_count;
+ l = (columns - 4) >> 1;
+ pad_test_startup(0);
+ do {
+ for (i = 1; i + i + r < lines; i++) {
+ for (j = 0; j <= l; j++) {
+ tt_putparm(cursor_address, 1, r + i, j);
+ putchp(letter);
+ tt_putparm(cursor_address, 1, r + i, l + l + 1 - j);
+ putchp(letter);
+ tt_putparm(cursor_address, 1, lines - i, j);
+ putchp(letter);
+ tt_putparm(cursor_address, 1, lines - i, l + l + 1 - j);
+ putchp(letter);
+ }
+ SLOW_TERMINAL_EXIT;
+ }
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ tt_putparm(cursor_address, 1, line_count = r, char_count = c);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_hd(test_list, status, ch)
+**
+** Test (hd) Half down
+*/
+static void
+pad_hd(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j, k;
+
+ if (!down_half_line) {
+ CAP_NOT_FOUND;
+ ptext("(hd) Half-line-down not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(hd) Half-line-down start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ for (i = 1; i < columns; i += 2) {
+ for (j = 1; j < i; ++j) {
+ putchp(' ');
+ }
+ tt_putp(down_half_line);
+ for (k = lines + lines; k > 4; k--) {
+ if (j++ >= columns) {
+ break;
+ }
+ tt_putp(down_half_line);
+ putchp(letter);
+ }
+ go_home();
+ SLOW_TERMINAL_EXIT;
+ }
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_hu(test_list, status, ch)
+**
+** Test (hu) Half line up
+*/
+static void
+pad_hu(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j, k;
+
+ if (!up_half_line) {
+ CAP_NOT_FOUND;
+ ptext("(hu) Half-line-up not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(hu) Half-line-up start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ for (i = 1; i < columns; i += 2) {
+ home_down();
+ for (j = 1; j < i; ++j) {
+ putchp(' ');
+ }
+ tt_putp(up_half_line);
+ for (k = lines + lines; k > 4; k--) {
+ if (j++ >= columns) {
+ break;
+ }
+ tt_putp(up_half_line);
+ putchp(letter);
+ }
+ SLOW_TERMINAL_EXIT;
+ }
+ go_home();
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_rin(test_list, status, ch)
+**
+** Test (rin) and (ri) Reverse index
+*/
+static void
+pad_rin(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+ const char *start_message;
+
+ if (t->flags & 1) {
+ /* rin */
+ if (!parm_rindex) {
+ CAP_NOT_FOUND;
+ ptext("(rin) Scroll-reverse-n-lines not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(rin) Scroll-reverse-n-lines start testing";
+ } else {
+ /* ri */
+ if (!scroll_reverse) {
+ CAP_NOT_FOUND;
+ ptext("(ri) Scroll-reverse not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(ri) Scroll-reverse start testing";
+ augment = 1;
+ }
+ if (skip_pad_test(t, state, ch, start_message)) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ sprintf(temp, "%d\r", test_complete);
+ put_str(temp);
+ if (scroll_reverse && augment == 1) {
+ tt_putp(scroll_reverse);
+ } else {
+ tt_putparm(parm_rindex, repeats, repeats, 0);
+ }
+ } while(still_testing());
+ put_str("This line should be on the bottom.\r");
+ if (scroll_reverse && augment == 1) {
+ for (i = 1; i < lines; i++) {
+ tt_putp(scroll_reverse);
+ }
+ } else {
+ tt_putparm(parm_rindex, lines - 1, lines - 1, 0);
+ }
+ putln("The screen should have text on the bottom line.");
+ sprintf(temp, "Scroll reverse %d line%s. ", augment,
+ augment == 1 ? "" : "s");
+ put_str(temp);
+ pad_test_shutdown(t, 0);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_il(test_list, status, ch)
+**
+** Test (il) and (il1) Insert line
+*/
+static void
+pad_il(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+ const char *start_message;
+
+ if (t->flags & 1) {
+ /* il */
+ if (!parm_insert_line) {
+ CAP_NOT_FOUND;
+ ptext("(il) Insert-lines not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(il) Insert-lines start testing";
+ } else {
+ /* il1 */
+ if (!insert_line) {
+ CAP_NOT_FOUND;
+ ptext("(il1) Insert-line not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(il1) Insert-line start testing";
+ augment = 1;
+ }
+ if (skip_pad_test(t, state, ch, start_message)) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ sprintf(temp, "%d\r", test_complete);
+ put_str(temp);
+ if (insert_line && repeats == 1) {
+ tt_putp(insert_line);
+ } else {
+ tt_putparm(parm_insert_line, repeats, repeats, 0);
+ }
+ } while(still_testing());
+ put_str("This line should be on the bottom.\r");
+ if (scroll_reverse && augment == 1) {
+ for (i = 1; i < lines; i++) {
+ tt_putp(insert_line);
+ }
+ } else {
+ tt_putparm(parm_insert_line, lines - 1, lines - 1, 0);
+ }
+ putln("The screen should have text on the bottom line.");
+ sprintf(temp, "Insert %d line%s. ", augment,
+ augment == 1 ? "" : "s");
+ put_str(temp);
+ pad_test_shutdown(t, 0);
+ pad_done_message(t, state, ch);
+ put_clear();
+}
+
+/*
+** pad_indn(test_list, status, ch)
+**
+** Test (indn) and (ind) Scroll forward
+*/
+static void
+pad_indn(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+ const char *start_message;
+
+ if (t->flags & 1) {
+ /* indn */
+ if (!parm_index) {
+ CAP_NOT_FOUND;
+ ptext("(indn) Scroll-forward-n-lines not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(indn) Scroll-forward-n-lines start testing";
+ } else {
+ /* ind */
+ if (!scroll_forward && over_strike) {
+ CAP_NOT_FOUND;
+ ptext("(ind) Scroll-forward not tested on overstrike terminals. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(ind) Scroll-forward start testing";
+ augment = 1;
+ }
+ if (skip_pad_test(t, state, ch, start_message)) {
+ return;
+ }
+ pad_test_startup(1);
+ /* go to the bottom of the screen */
+ home_down();
+ do {
+ sprintf(temp, "%d\r", test_complete);
+ put_str(temp);
+ if (augment > 1) {
+ tt_putparm(parm_index, repeats, repeats, 0);
+ } else {
+ put_ind();
+ }
+ } while(still_testing());
+ put_str("This line should be on the top.\r");
+ if (augment == 1) {
+ for (i = 1; i < lines; i++) {
+ put_ind();
+ }
+ } else {
+ tt_putparm(parm_index, lines - 1, lines - 1, 0);
+ }
+ go_home();
+ sprintf(temp, "\nScroll forward %d line%s. ", augment,
+ augment == 1 ? "" : "s");
+ put_str(temp);
+ pad_test_shutdown(t, 0);
+ pad_done_message(t, state, ch);
+}
+
+/*
+** pad_dl(test_list, status, ch)
+**
+** Test (dl) and (dl1) Delete lines
+*/
+static void
+pad_dl(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i = 0;
+ const char *start_message;
+
+ if (t->flags & 1) {
+ /* dl */
+ if (!parm_delete_line) {
+ CAP_NOT_FOUND;
+ ptext("(dl) Delete-lines not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(dl) Delete-lines start testing";
+ } else {
+ /* dl1 */
+ if (!delete_line) {
+ CAP_NOT_FOUND;
+ ptext("(dl1) Delete-line not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ start_message = "(dl1) Delete-line start testing";
+ augment = 1;
+ }
+ if (skip_pad_test(t, state, ch, start_message)) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ sprintf(temp, "%d\r", test_complete);
+ if ((i & 0x7f) == 0 && augment < lines - 1) {
+ go_home();
+ putln(temp);
+ }
+ put_str(temp);
+ if (repeats || !delete_line) {
+ tt_putparm(parm_delete_line, repeats, repeats, 0);
+ } else {
+ tt_putp(delete_line);
+ }
+ } while(still_testing());
+ home_down();
+ put_str("This line should be on the top.");
+ go_home();
+ if (repeats || !delete_line) {
+ tt_putparm(parm_delete_line, lines - 1, lines - 1, 0);
+ } else {
+ for (i = 1; i < lines; i++) {
+ tt_putp(delete_line);
+ }
+ }
+ sprintf(temp, "\nDelete %d line%s. ", augment,
+ augment == 1 ? "" : "s");
+ put_str(temp);
+ pad_test_shutdown(t, 0);
+ pad_done_message(t, state, ch);
+}
+
+/*
+** pad_xl(test_list, status, ch)
+**
+** Test (il1) Insert and (dl1) Delete lines
+*/
+static void
+pad_xl(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ if (!insert_line && !delete_line) {
+ /* quietly skip this test */
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(il1) Insert-line, (dl1) Delete-line start testing")) {
+ return;
+ }
+ put_clear();
+ putln("\rThis text is written on the first line.");
+ ptext("This sentence begins on the second line. As this");
+ ptext(" test runs the bottom part of this paragraph will");
+ ptext(" jump up and down. Don't worry, that's normal. When");
+ ptext(" the jumping stops, the entire paragraph should");
+ ptext(" still be on the screen and in the same place as when");
+ ptext(" the test started. If this paragraph has scrolled");
+ ptext(" off the top or bottom of the screen then the test");
+ ptext(" has failed. Scrolling off the top of the screen");
+ ptext(" usually means that the delete line capability is");
+ ptext(" working better than the insert line capability. If");
+ ptext(" the text scrolls off the bottom then delete line may");
+ ptext(" be broken. If parts of the text are missing then");
+ ptext(" you should get professional help.");
+ put_crlf();
+ go_home();
+ put_newlines(2);
+ pad_test_startup(0);
+ do {
+ tt_putp(insert_line);
+ put_cr();
+ tt_putp(delete_line);
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext("The top of the screen should have a paragraph of text. ");
+ pad_done_message(t, state, ch);
+}
+
+/*
+** pad_scrc(test_list, status, ch)
+**
+** Test (sc) (rc) Save/restore cursor
+*/
+static void
+pad_scrc(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (!save_cursor || !restore_cursor) {
+ CAP_NOT_FOUND;
+ if (save_cursor) {
+ ptext("(rc) Restore-cursor");
+ } else
+ if (restore_cursor) {
+ ptext("(sc) Save-cursor");
+ } else {
+ ptext("(sc) Save-cursor, (rc) Restore-cursor");
+ }
+ ptext(" not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(sc) (rc) Save/Restore-cursor start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ page_loop();
+ for (i = 1; i < columns; i++) {
+ tt_putp(save_cursor);
+ putchp(letter);
+ tt_putp(restore_cursor);
+ putchp('X');
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext(above_line);
+ pad_done_message(t, state, ch);
+}
+
+/*
+** pad_csrind(test_list, status, ch)
+**
+** Test (csr) and (ind) Change scroll region and index.
+*/
+static void
+pad_csrind(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (!change_scroll_region) {
+ CAP_NOT_FOUND;
+ ptext("(csr) Change-scroll-region not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(csr) Save/Restore-cursor, (ind) index start testing")) {
+ return;
+ }
+ if (augment < 2) {
+ augment = 2;
+ }
+ if (augment > lines - 1) {
+ augment = lines - 1;
+ }
+ put_clear();
+ ptext("This text is on the top line.");
+ tt_putparm(change_scroll_region, 1, lines - augment, lines - 1);
+ /* go to the bottom of the screen */
+ home_down();
+ pad_test_startup(0);
+ do {
+ sprintf(temp, "%d\r", test_complete);
+ put_str(temp);
+ put_ind();
+ } while(still_testing());
+ ptextln("(csr) is broken.");
+ for (i = augment; i > 1; i--) {
+ put_ind();
+ }
+ pad_test_shutdown(t, 0);
+ ptext("All but top and bottom lines should be blank. ");
+ pad_done_message(t, state, ch);
+ tt_putparm(change_scroll_region, 1, 0, lines - 1);
+ put_clear();
+}
+
+/*
+** pad_sccsrrc(test_list, status, ch)
+**
+** Test (sc) (csr) and (rc) Save/Change/Restore scroll region
+*/
+static void
+pad_sccsrrc(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i;
+
+ if (!save_cursor || !change_scroll_region || !restore_cursor) {
+ /* quietly ignore this test */
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(sc) (csr) (rc) Save/Change/Restore-cursor, start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ page_loop();
+ for (i = 1; i < columns; i++) {
+ tt_putp(save_cursor);
+ putchp(letter);
+ tt_putparm(change_scroll_region, 1, 0, lines - 1);
+ tt_putp(restore_cursor);
+ putchp('X');
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext(above_line);
+ pad_done_message(t, state, ch);
+ tt_putparm(change_scroll_region, 1, 0, lines - 1);
+}
+
+/*
+** pad_csr_nel(test_list, status, ch)
+**
+** Test (sc) (csr) (nel) and (rc) Save/Change/Restore scroll region
+*/
+static void
+pad_csr_nel(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!save_cursor || !change_scroll_region || !restore_cursor) {
+ /* quietly ignore this test */
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(csr) Change-scroll-region, (nel) newline start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ for (i = 0; i < lines; i++) {
+ for (j = lines - i; j > 0; j--) {
+ put_crlf();
+ }
+ tt_putp(save_cursor);
+ tt_putparm(change_scroll_region, 1, i, lines - 1);
+ tt_putp(restore_cursor);
+ put_str(every_line);
+ }
+ tt_putp(save_cursor);
+ tt_putparm(change_scroll_region, 1, 0, lines - 1);
+ tt_putp(restore_cursor);
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ put_str(" ");
+ pad_done_message(t, state, ch);
+ tt_putparm(change_scroll_region, 1, 0, lines - 1);
+}
+
+/*
+** pad_csr_cup(test_list, status, ch)
+**
+** Test (csr) (cup) Change scroll region and cursor address
+*/
+static void
+pad_csr_cup(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!change_scroll_region || !cursor_address) {
+ /* quietly ignore this test */
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(csr) Change-scroll-region, (cup) cursor-address start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ for (i = 0; i < lines; i++) {
+ for (j = lines - i; j > 0; j--) {
+ put_crlf();
+ }
+ tt_putparm(change_scroll_region, 1, i, lines - 1);
+ tt_putparm(cursor_address, 1, lines - 1, 0);
+ put_str(every_line);
+ }
+ tt_putparm(change_scroll_region, 1, 0, lines - 1);
+ tt_putparm(cursor_address, 1, lines - 1, strlen(every_line));
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ put_str(" ");
+ pad_done_message(t, state, ch);
+ tt_putparm(change_scroll_region, 1, 0, lines - 1);
+}
+
+/*
+** pad_ht(test_list, status, ch)
+**
+** Test (ht) Tabs
+*/
+static void
+pad_ht(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!set_tab && init_tabs <= 0) {
+ CAP_NOT_FOUND;
+ ptext("(ht) Tab not tested. (hts) Set-tabs and (it) initial-tabs not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch, "(ht) Tab start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ /*
+ it is not always possible to test tabs with caps
+ that do not already have padding. The following
+ test uses a mixed bag of tests in order to avoid
+ this problem. Note: I do not scroll
+ */
+ if (auto_right_margin && can_go_home)
+ for (i = 1, go_home(); i < lines - 2; i++) {
+ for (j = 8; j < columns; j += 8) {
+ putchp('\t');
+ }
+ put_str("A ");
+ }
+ if (cursor_down && can_go_home)
+ for (i = 1, go_home(); i < lines - 2; i++) {
+ for (j = 8; j < columns; j += 8) {
+ putchp('\t');
+ }
+ put_str("D\r");
+ tt_putp(cursor_down);
+ }
+ if (cursor_address)
+ for (i = 1; i < lines - 2; i++) {
+ tt_putparm(cursor_address, 1, i - 1, 0);
+ for (j = 8; j < columns; j += 8) {
+ putchp('\t');
+ }
+ put_str("C");
+ }
+ go_home();
+ for (i = 1; i < lines - 2; i++) {
+ for (j = 8; j < columns; j += 8) {
+ putchp('\t');
+ }
+ putln("N");
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ ptextln("Letters on the screen other than Ns at the right margin indicate failure.");
+ ptext("A-(am) D-(cud1) C-(cup) N-(nel) ");
+ pad_done_message(t, state, ch);
+}
+
+/*
+** pad_smso(test_list, status, ch)
+**
+** Test (smso) (rmso) Enter/exit mode
+*/
+static void
+pad_smso(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ if (!enter_standout_mode || !exit_standout_mode) {
+ CAP_NOT_FOUND;
+ ptext("(smso) (rmso) Enter/Exit-standout-mode not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(smso) (rmso) Enter/Exit-standout-mode start testing")) {
+ return;
+ }
+ /*
+ In terminals that emulate non-hidden attributes with hidden
+ attributes, the amount of time that it takes to fill the screen
+ with an attribute is nontrivial. The following test is designed to
+ catch those delays
+ */
+ pad_test_startup(1);
+ do {
+ page_loop();
+ j = magic_cookie_glitch > 0 ? magic_cookie_glitch : 0;
+ for (i = 2 + j + j; i < columns;) {
+ put_mode(enter_standout_mode);
+ i += j + j + 2;
+ putchp('X');
+ put_mode(exit_standout_mode);
+ putchp('X');
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext(above_line);
+ pad_done_message(t, state, ch);
+ put_mode(exit_standout_mode);
+}
+
+/*
+** pad_smacs(test_list, status, ch)
+**
+** Test (smacs) (rmacs) Enter/exit altcharset mode
+*/
+static void
+pad_smacs(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int i, j;
+
+ /* test enter even if exit is missing */
+ if (!enter_alt_charset_mode) {
+ CAP_NOT_FOUND;
+ ptext("(smacs) Enter-altcharset-mode not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(smacs) (rmacs) Enter/Exit-altcharset-mode start testing")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ page_loop();
+ j = magic_cookie_glitch > 0 ? magic_cookie_glitch : 0;
+ for (i = 2 + j + j; i < columns;) {
+ put_mode(enter_alt_charset_mode);
+ i += j + j + 2;
+ putchp(letter);
+ put_mode(exit_alt_charset_mode);
+ putchp(letter);
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ home_down();
+ ptext("Every other character is from the alternate character set. ");
+ pad_done_message(t, state, ch);
+ put_mode(exit_alt_charset_mode);
+}
+
+/*
+** pad_crash(test_list, status, ch)
+**
+** Test (clear) without padding
+*/
+static void
+pad_crash(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int save_xon_xoff;
+
+ if (!clear_screen) {
+ ptext("(clear) Clear-screen not present. ");
+ pad_done_message(t, state, ch);
+ return;
+ }
+ ptext("If you would like to see if the terminal will really lock up.");
+ ptextln(" I will send the clear screen sequence without the pads.");
+ if (skip_pad_test(t, state, ch,
+ "(clear) Clear-screen start crash testing")) {
+ return;
+ }
+ save_xon_xoff = xon_xoff;
+ xon_xoff = 1;
+ pad_test_startup(0);
+ do {
+ put_str("Erase this!");
+ tt_putp(clear_screen);
+ } while(still_testing());
+ xon_xoff = save_xon_xoff;
+ pad_test_shutdown(t, 1);
+ pad_done_message(t, state, ch);
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+/* scan mode keyboard support */
+
+#include <tack.h>
+
+MODULE_ID("$Id: scan.c,v 1.2 1999/08/21 23:09:35 tom Exp $")
+
+int scan_max; /* length of longest scan code */
+char **scan_up, **scan_down, **scan_name;
+int *scan_tested, *scan_length, *scan_value;
+
+static int shift_state;
+static char *str;
+static int debug_char_count;
+
+#define SHIFT_KEY 0x100
+#define CONTROL_KEY 0x200
+#define META_KEY 0x400
+#define CAPS_LOCK 0x800
+
+static const struct {
+ const char *name;
+ int type;
+} scan_special[] = {
+ {"<shift>", SHIFT_KEY},
+ {"<left shift>", SHIFT_KEY},
+ {"<right shift>", SHIFT_KEY},
+ {"<control>", CONTROL_KEY},
+ {"<left control>", CONTROL_KEY},
+ {"<right control>", CONTROL_KEY},
+ {"<meta>", META_KEY},
+ {"<left meta>", META_KEY},
+ {"<right meta>", META_KEY},
+ {"<caps lock>", CAPS_LOCK},
+ {"<tab>", '\t'},
+ {"<space>", ' '},
+ {"<return>", '\r'},
+ {"<linefeed>", '\n'},
+ {"<formfeed>", '\f'},
+ {"<backspace>", '\b'},
+ {0, 0}
+};
+
+static void
+scan_blanks(void)
+{ /* scan past the white space */
+ while (*str == ' ' || *str == '\t')
+ str++;
+}
+
+static char *
+smash(void)
+{ /* convert a string to hex */
+ char *s, *t;
+ int ch, i, j;
+
+ t = s = str;
+ for (i = 0; (ch = *str); str++) {
+ if (ch >= '0' && ch <= '9')
+ j = ch - '0';
+ else if (ch >= 'a' && ch <= 'f')
+ j = 10 - 'a' + ch;
+ else if (ch >= 'A' && ch <= 'F')
+ j = 10 - 'A' + ch;
+ else if (ch == ' ' || ch == '\t')
+ break;
+ else
+ continue;
+ if (i) {
+ *s |= j;
+ s++;
+ } else
+ *s = j << 4;
+ i ^= 1;
+ }
+ *s = '\0';
+ return t;
+}
+
+void
+scan_init(char *fn)
+{ /* read the scan mode key definitions */
+ char *s, *sl;
+ FILE *fp;
+ int ch, i, j;
+ char home[512];
+
+ if ((str = getenv("HOME")))
+ strcpy(home, str);
+ else
+ home[0] = '\0';
+ fp = NULL;
+ if ((str = getenv("KEYBOARD"))) {
+ if (!(fp = fopen(str, "r")) && home[0]) {
+ sprintf(temp, "%s/.scan.%s", home, str);
+ fp = fopen(temp, "r");
+ }
+ }
+ if (!fp) {
+ sprintf(temp, ".scan.%s", fn);
+ fp = fopen(temp, "r");
+ }
+ if (!fp && home[0]) {
+ sprintf(temp, "%s/.scan.%s", home, fn);
+ fp = fopen(temp, "r");
+ }
+ if (!fp) {
+ ptext("Unable to open scanfile: ");
+ ptextln(temp);
+ bye_kids(1);
+ return;
+ }
+ /*
+ scan file format:
+
+ <down value> <up value> <name>
+
+ values are in hex. <name> may be any string of characters
+
+ */
+ scan_up = (char **) malloc(sizeof(char *) * MAX_SCAN);
+ scan_down = (char **) malloc(sizeof(char *) * MAX_SCAN);
+ scan_name = (char **) malloc(sizeof(char *) * MAX_SCAN);
+ scan_tested = (int *) malloc(sizeof(int *) * MAX_SCAN);
+ scan_length = (int *) malloc(sizeof(int *) * MAX_SCAN);
+ scan_value = (int *) malloc(sizeof(int *) * MAX_SCAN);
+ scan_up[0] = scan_down[0] = scan_name[0] = (char *) 0;
+ str = (char *) malloc(4096); /* buffer space */
+ sl = str + 4000; /* an upper limit */
+ scan_max = 1;
+ for (i = 0;;) {
+ for (s = str; (ch = getc(fp)) != EOF;) {
+ if (ch == '\n' || ch == '\r')
+ break;
+ *s++ = ch;
+ }
+ *s++ = '\0';
+ if (ch == EOF)
+ break;
+ if (*str == '#' || *str == '\0')
+ continue;
+ scan_down[i] = smash();
+ scan_blanks();
+ scan_up[i] = smash();
+ scan_blanks();
+ scan_name[i] = str;
+
+ scan_length[i] = strlen(scan_down[i]);
+ ch = strlen(scan_up[i]) + scan_length[i];
+ if (ch > scan_max)
+ scan_max = ch;
+
+ scan_value[i] = scan_name[i][0];
+ if (scan_name[i][1]) /* multi-character name */
+ for (j = 0; scan_special[j].name; j++) {
+ if (!strcmp(scan_name[i], scan_special[j].name)) {
+ scan_value[i] = scan_special[j].type;
+ break;
+ }
+ }
+
+ i++;
+ if (str > sl) {
+ str = (char *) malloc(4096);
+ sl = str + 4000;
+ } else
+ str = s;
+ }
+ fclose(fp);
+#ifdef notdef
+ for (i = 0; scan_down[i]; i++) {
+ put_str(hex_expand_to(scan_down[i], 3));
+ put_str(hex_expand_to(scan_up[i], 3));
+ put_str(" ");
+ put_str(scan_name[i]);
+ put_crlf();
+ }
+ (void) wait_here();
+#endif
+}
+
+int
+scan_key(void)
+{ /* read a key and translate scan mode to
+ ASCII */
+ int i, j, ch;
+ char buf[64];
+
+ for (i = 1;; i++) {
+ ch = getchar();
+ if (ch == EOF)
+ return EOF;
+ if (debug_fp) {
+ fprintf(debug_fp, "%02X ", ch);
+ debug_char_count += 3;
+ if (debug_char_count > 72) {
+ fprintf(debug_fp, "\n");
+ debug_char_count = 0;
+ }
+ }
+ buf[i - 1] = ch;
+ buf[i] = '\0';
+ if (buf[0] & 0x80) { /* scan up */
+ for (j = 0; scan_up[j]; j++) {
+ if (i == scan_length[j] &&
+ !strcmp(buf, scan_up[j])) {
+ i = 0;
+ shift_state &= ~scan_value[j];
+ break;
+ }
+ }
+ continue;
+ }
+ for (j = 0; scan_down[j]; j++) {
+ if (i == scan_length[j] && !strcmp(buf, scan_down[j])) {
+ i = 0;
+ shift_state |= scan_value[j];
+ ch = scan_value[j];
+ if (ch == CAPS_LOCK)
+ shift_state ^= SHIFT_KEY;
+ if (ch >= 256)
+ break;
+ if (shift_state & SHIFT_KEY) {
+ if (ch >= 0x60)
+ ch -= 0x20;
+ else if (ch >= 0x30 && ch <= 0x3f)
+ ch -= 0x10;
+ }
+ if (shift_state & CONTROL_KEY) {
+ if ((ch | 0x20) >= 0x60 &&
+ (ch | 0x20) <= 0x7f)
+ ch = (ch | 0x20) - 0x60;
+ }
+ if (shift_state & META_KEY)
+ ch |= 0x80;
+ return ch;
+ }
+ }
+ if (i > scan_max)
+ i = 1;
+ }
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+#include <time.h>
+
+MODULE_ID("$Id: sync.c,v 1.1 1998/01/10 00:31:07 tom Exp $")
+
+/* terminal-synchronization and performance tests */
+
+static void sync_home(struct test_list *, int *, int *);
+static void sync_lines(struct test_list *, int *, int *);
+static void sync_clear(struct test_list *, int *, int *);
+static void sync_summary(struct test_list *, int *, int *);
+
+struct test_list sync_test_list[] = {
+ {MENU_NEXT, 0, 0, 0, "b) baud rate test", sync_home, 0},
+ {MENU_NEXT, 0, 0, 0, "l) scroll performance", sync_lines, 0},
+ {MENU_NEXT, 0, 0, 0, "c) clear screen performance", sync_clear, 0},
+ {MENU_NEXT, 0, 0, 0, "p) summary of results", sync_summary, 0},
+ {0, 0, 0, 0, txt_longer_test_time, longer_test_time, 0},
+ {0, 0, 0, 0, txt_shorter_test_time, shorter_test_time, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+struct test_menu sync_menu = {
+ 0, 'n', 0,
+ "Performance tests", "perf", "n) run standard tests",
+ sync_test, sync_test_list, 0, 0, 0
+};
+
+int tty_can_sync; /* TRUE if tty_sync_error() returned FALSE */
+int tty_newline_rate; /* The number of newlines per second */
+int tty_clear_rate; /* The number of clear-screens per second */
+int tty_cps; /* The number of characters per second */
+
+#define TTY_ACK_SIZE 64
+
+int ACK_terminator; /* terminating ACK character */
+int ACK_length; /* length of ACK string */
+const char *tty_ENQ; /* enquire string */
+char tty_ACK[TTY_ACK_SIZE]; /* ACK response, set by tty_sync_error() */
+
+/*****************************************************************************
+ *
+ * Terminal synchronization.
+ *
+ * These functions handle the messy business of enq-ack handshaking
+ * for timing purposes.
+ *
+ *****************************************************************************/
+
+int
+tty_sync_error(void)
+{
+ int ch, trouble, ack;
+
+ trouble = FALSE;
+ for (;;) {
+ tt_putp(tty_ENQ); /* send ENQ */
+ ch = getnext(STRIP_PARITY);
+ event_start(TIME_SYNC); /* start the timer */
+
+ /*
+ The timer doesn't start until we get the first character.
+ After that I expect to get the remaining characters of
+ the acknowledge string in a short period of time. If
+ that is not true then these characters are coming from
+ the user and we need to send the ENQ sequence out again.
+ */
+ for (ack = 0; ; ) {
+ if (ack < TTY_ACK_SIZE - 2) {
+ tty_ACK[ack] = ch;
+ tty_ACK[ack + 1] = '\0';
+ }
+ if (ch == ACK_terminator) {
+ return trouble;
+ }
+ if (++ack >= ACK_length) {
+ return trouble;
+ }
+ ch = getnext(STRIP_PARITY);
+ if (event_time(TIME_SYNC) > 400000) {
+ break;
+ }
+ }
+
+ set_attr(0); /* just in case */
+ put_crlf();
+ if (trouble) {
+ /* The terminal won't sync. Life is not good. */
+ return TRUE;
+ }
+ put_str(" -- sync -- ");
+ trouble = TRUE;
+ }
+}
+
+/*
+** flush_input()
+**
+** Throw away any output.
+*/
+void
+flush_input(void)
+{
+ if (tty_can_sync == SYNC_TESTED && ACK_terminator >= 0) {
+ (void) tty_sync_error();
+ } else {
+ spin_flush();
+ }
+}
+
+/*
+** probe_enq_ok()
+**
+** does the terminal do enq/ack handshaking?
+*/
+static void
+probe_enq_ok(void)
+{
+ int tc, len, ulen;
+
+ put_str("Testing ENQ/ACK, standby...");
+ fflush(stdout);
+ can_test("u8 u9", FLAG_TESTED);
+
+ tty_ENQ = user9 ? user9 : "\005";
+ tc_putp(tty_ENQ);
+ event_start(TIME_SYNC); /* start the timer */
+ read_key(tty_ACK, TTY_ACK_SIZE - 1);
+
+ if (event_time(TIME_SYNC) > 400000 || tty_ACK[0] == '\0') {
+ /* These characters came from the user. Sigh. */
+ tty_can_sync = SYNC_FAILED;
+ ptext("\nThis program expects the ENQ sequence to be");
+ ptext(" answered with the ACK character. This will help");
+ ptext(" the program reestablish synchronization when");
+ ptextln(" the terminal is overrun with data.");
+ ptext("\nENQ sequence from (u9): ");
+ putln(expand(tty_ENQ));
+ ptext("ACK recieved: ");
+ putln(expand(tty_ACK));
+ len = user8 ? strlen(user8) : 0;
+ sprintf(temp, "Length of ACK %d. Expected length of ACK %d.",
+ (int) strlen(tty_ACK), len);
+ ptextln(temp);
+ if (len) {
+ temp[0] = user8[len - 1];
+ temp[1] = '\0';
+ ptext("Terminating character found in (u8): ");
+ putln(expand(temp));
+ }
+ return;
+ }
+
+ tty_can_sync = SYNC_TESTED;
+ if ((len = strlen(tty_ACK)) == 1) {
+ /* single character acknowledge string */
+ ACK_terminator = tty_ACK[0];
+ ACK_length = 4096;
+ return;
+ }
+ tc = tty_ACK[len - 1];
+ if (user8) {
+ ulen = strlen(user8);
+ if (tc == user8[ulen - 1]) {
+ /* ANSI style acknowledge string */
+ ACK_terminator = tc;
+ ACK_length = 4096;
+ return;
+ }
+ }
+ /* fixed length acknowledge string */
+ ACK_length = len;
+ ACK_terminator = -2;
+}
+
+/*
+** verify_time()
+**
+** verify that the time tests are ready to run.
+** If the baud rate is not set then compute it.
+*/
+void
+verify_time(void)
+{
+ int status, ch;
+
+ if (tty_can_sync == SYNC_FAILED) {
+ return;
+ }
+ probe_enq_ok();
+ put_crlf();
+ if (tty_can_sync == SYNC_TESTED) {
+ put_crlf();
+ if (ACK_terminator >= 0) {
+ ptext("ACK terminating character: ");
+ temp[0] = ACK_terminator;
+ temp[1] = '\0';
+ ptextln(expand(temp));
+ } else {
+ sprintf(temp, "Fixed length ACK, %d characters",
+ ACK_length);
+ ptextln(temp);
+ }
+ }
+ if (tty_baud_rate == 0) {
+ sync_home(&sync_test_list[0], &status, &ch);
+ }
+}
+
+/*****************************************************************************
+ *
+ * Terminal performance tests
+ *
+ * Find out how fast the terminal can:
+ * 1) accept characters
+ * 2) scroll the screen
+ * 3) clear the screen
+ *
+ *****************************************************************************/
+
+/*
+** sync_home(test_list, status, ch)
+**
+** Baudrate test
+*/
+void
+sync_home(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int j, k;
+ unsigned long rate;
+
+ if (!cursor_home && !cursor_address && !row_address) {
+ ptext("Terminal can not home cursor. ");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(home) Start baudrate search")) {
+ return;
+ }
+ pad_test_startup(1);
+ do {
+ go_home();
+ for (j = 1; j < lines; j++) {
+ for (k = 0; k < columns; k++) {
+ if (k & 0xF) {
+ put_this(letter);
+ } else {
+ put_this('.');
+ }
+ }
+ SLOW_TERMINAL_EXIT;
+ }
+ NEXT_LETTER;
+ } while(still_testing());
+ pad_test_shutdown(t, auto_right_margin == 0);
+ /* note: tty_frame_size is the real framesize times two.
+ This takes care of half bits. */
+ rate = (tx_cps * tty_frame_size) >> 1;
+ if (rate > tty_baud_rate) {
+ tty_baud_rate = rate;
+ }
+ if (tx_cps > tty_cps) {
+ tty_cps = tx_cps;
+ }
+ sprintf(temp, "%d characters per second. Baudrate %d ", tx_cps, j);
+ ptext(temp);
+ generic_done_message(t, state, ch);
+}
+
+/*
+** sync_lines(test_list, status, ch)
+**
+** How many newlines/second?
+*/
+static void
+sync_lines(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int j;
+
+ if (skip_pad_test(t, state, ch,
+ "(nel) Start scroll performance test")) {
+ return;
+ }
+ pad_test_startup(0);
+ repeats = 100;
+ do {
+ sprintf(temp, "%d", test_complete);
+ put_str(temp);
+ put_newlines(repeats);
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ j = sliding_scale(tx_count[0], 1000000, usec_run_time);
+ if (j > tty_newline_rate) {
+ tty_newline_rate = j;
+ }
+ sprintf(temp, "%d linefeeds per second. ", j);
+ ptext(temp);
+ generic_done_message(t, state, ch);
+}
+
+/*
+** sync_clear(test_list, status, ch)
+**
+** How many clear-screens/second?
+*/
+static void
+sync_clear(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ int j;
+
+ if (!clear_screen) {
+ ptext("Terminal can not clear-screen. ");
+ generic_done_message(t, state, ch);
+ return;
+ }
+ if (skip_pad_test(t, state, ch,
+ "(clear) Start clear-screen performance test")) {
+ return;
+ }
+ pad_test_startup(0);
+ repeats = 20;
+ do {
+ sprintf(temp, "%d", test_complete);
+ put_str(temp);
+ for (j = 0; j < repeats; j++) {
+ put_clear();
+ }
+ } while(still_testing());
+ pad_test_shutdown(t, 0);
+ j = sliding_scale(tx_count[0], 1000000, usec_run_time);
+ if (j > tty_clear_rate) {
+ tty_clear_rate = j;
+ }
+ sprintf(temp, "%d clear-screens per second. ", j);
+ ptext(temp);
+ generic_done_message(t, state, ch);
+}
+
+/*
+** sync_symmary(test_list, status, ch)
+**
+** Print out the test results.
+*/
+static void
+sync_summary(
+ struct test_list *t,
+ int *state,
+ int *ch)
+{
+ char size[32];
+
+ put_crlf();
+ ptextln("Terminal size characters/sec linefeeds/sec clears/sec");
+ sprintf(size, "%dx%d", columns, lines);
+ sprintf(temp, "%-10s%-11s%11d %11d %11d", tty_basename, size,
+ tty_cps, tty_newline_rate, tty_clear_rate);
+ ptextln(temp);
+ generic_done_message(t, state, ch);
+}
+
+/*
+** sync_test(menu)
+**
+** Run at the beginning of the pad tests and function key tests
+*/
+void
+sync_test(
+ struct test_menu *menu)
+{
+ control_init();
+ if (tty_can_sync == SYNC_NOT_TESTED) {
+ verify_time();
+ }
+ if (menu->menu_title) {
+ put_crlf();
+ ptextln(menu->menu_title);
+ }
+}
+
+/*
+** sync_handshake(test_list, status, ch)
+**
+** Test or retest the ENQ/ACK handshake
+*/
+void
+sync_handshake(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ tty_can_sync = SYNC_NOT_TESTED;
+ verify_time();
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+/*
+ * Operating system dependant functions. We assume the POSIX API.
+ * Note: on strict-POSIX systems (including BSD/OS) the select_delay_type
+ * global has no effect.
+ */
+
+#if defined(__BEOS__)
+#include <OS.h>
+#endif
+
+#include <tack.h>
+
+#include <signal.h>
+#include <term.h>
+#include <errno.h>
+
+#if HAVE_SELECT
+#if HAVE_SYS_TIME_H && HAVE_SYS_TIME_SELECT
+#include <sys/time.h>
+#endif
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+#endif
+
+MODULE_ID("$Id: sysdep.c,v 1.6 1999/09/04 13:45:00 tom Exp $")
+
+#if DECL_ERRNO
+extern int errno;
+#endif
+
+/* globals */
+int tty_frame_size; /* asynch frame size times 2 */
+unsigned long tty_baud_rate; /* baud rate - bits per second */
+int not_a_tty; /* TRUE if output is not a tty (i.e. pipe) */
+int nodelay_read; /* TRUE if NDELAY is set */
+
+#define TTY_IS_NOECHO !(new_modes.c_lflag & ECHO)
+#define TTY_IS_OUT_TRANS (new_modes.c_oflag & OPOST)
+#define TTY_IS_CHAR_MODE !(new_modes.c_lflag & ICANON)
+#define TTY_WAS_CS8 ((old_modes.c_cflag & CSIZE) == CS8)
+#define TTY_WAS_XON_XOFF (old_modes.c_iflag & (IXON|IXOFF))
+
+static TTY old_modes, new_modes;
+
+void catchsig(void);
+
+/*
+ * These are a sneaky way of conditionalizing bit unsets so strict-POSIX
+ * systems won't see them.
+ */
+#ifndef XCASE
+#define XCASE 0
+#endif
+#ifndef OLCUC
+#define OLCUC 0
+#endif
+#ifndef IUCLC
+#define IUCLC 0
+#endif
+#ifndef TABDLY
+#define TABDLY 0
+#endif
+#ifndef IXANY
+#define IXANY 0
+#endif
+
+void
+tty_raw(int minch GCC_UNUSED, int mask)
+{ /* set tty to raw noecho */
+ new_modes = old_modes;
+#if HAVE_SELECT
+ new_modes.c_cc[VMIN] = 1;
+#else
+ new_modes.c_cc[VMIN] = minch;
+#endif
+ new_modes.c_cc[VTIME] = 2;
+ new_modes.c_lflag &=
+ ~(ISIG | ICANON | XCASE | ECHO | ECHOE | ECHOK | ECHONL);
+#ifdef LOBLK
+ new_modes.c_lflag &= ~LOBLK;
+#endif
+ new_modes.c_oflag &= ~(OPOST | OLCUC | TABDLY);
+ if (mask == ALLOW_PARITY) {
+ new_modes.c_cflag &= ~(CSIZE | PARENB | HUPCL);
+ new_modes.c_cflag |= CS8;
+ }
+ new_modes.c_iflag &=
+ ~(IGNBRK | BRKINT | IGNPAR | PARMRK | INPCK | ISTRIP | INLCR | IGNCR | ICRNL |
+ IUCLC | IXON | IXANY | IXOFF);
+ if (not_a_tty)
+ return;
+ tcsetattr(fileno(stdin), TCSAFLUSH, &new_modes);
+}
+
+void
+tty_set(void)
+{ /* set tty to special modes */
+ new_modes = old_modes;
+ new_modes.c_cc[VMIN] = 1;
+ new_modes.c_cc[VTIME] = 1;
+ new_modes.c_lflag &= ~(ISIG | ICANON | ECHO | ECHOE | ECHOK | ECHONL);
+#if defined(ONLCR) && defined(OCRNL) && defined(ONLRET) && defined(OFILL)
+ new_modes.c_oflag &= ~(ONLCR | OCRNL | ONLRET | OFILL);
+#else
+ new_modes.c_oflag &= ~(OPOST);
+#endif
+ if (char_mask == ALLOW_PARITY)
+ new_modes.c_iflag &= ~ISTRIP;
+ switch (select_xon_xoff) {
+ case 0:
+ new_modes.c_iflag &= ~(IXON | IXOFF);
+ break;
+ case 1:
+#if sequent
+ /* the sequent System V emulation is broken */
+ new_modes = old_modes;
+ new_modes.c_cc[VEOL] = 6; /* control F (ACK) */
+#endif
+ new_modes.c_iflag |= IXON | IXOFF;
+ break;
+ }
+ switch (select_delay_type) {
+ case 0:
+#ifdef NLDLY
+ new_modes.c_oflag &=
+ ~(NLDLY | CRDLY | TABDLY | BSDLY | VTDLY | FFDLY);
+#endif /* NLDLY */
+ break;
+ case 1:
+#ifdef NLDLY
+ new_modes.c_oflag &=
+ ~(NLDLY | CRDLY | TABDLY | BSDLY | VTDLY | FFDLY);
+#endif /* NLDLY */
+#ifdef NL1
+ new_modes.c_oflag |= NL1 | CR2;
+#endif /* NL1 */
+ break;
+ }
+ if (!(new_modes.c_oflag & ~OPOST))
+ new_modes.c_oflag &= ~OPOST;
+ if (not_a_tty)
+ return;
+ tcsetattr(fileno(stdin), TCSAFLUSH, &new_modes);
+}
+
+
+void
+tty_reset(void)
+{ /* reset the tty to the original modes */
+ fflush(stdout);
+ if (not_a_tty)
+ return;
+ tcsetattr(fileno(stdin), TCSAFLUSH, &old_modes);
+}
+
+
+void
+tty_init(void)
+{ /* ATT terminal init */
+#if defined(F_GETFL) && defined(O_NDELAY)
+ int flags;
+
+ flags = fcntl(fileno(stdin), F_GETFL, 0);
+ nodelay_read = flags & O_NDELAY;
+#else
+ nodelay_read = FALSE;
+#endif
+ not_a_tty = FALSE;
+ if (tcgetattr(fileno(stdin), &old_modes) == -1) {
+ if (errno == ENOTTY) {
+ tty_frame_size = 20;
+ not_a_tty = TRUE;
+ return;
+ }
+ printf("tcgetattr error: %d\n", errno);
+ exit(1);
+ }
+ /* if TAB3 is set then setterm() wipes out tabs (ht) */
+ new_modes = old_modes;
+#ifdef TABDLY
+ new_modes.c_oflag &= ~TABDLY;
+#endif /* TABDLY */
+ if (tcsetattr(fileno(stdin), TCSAFLUSH, &new_modes) == -1) {
+ printf("tcsetattr error: %d\n", errno);
+ exit(1);
+ }
+#ifdef sequent
+ /* the sequent ATT emulation is broken soooo. */
+ old_modes.c_cflag &= ~(CSIZE | CSTOPB);
+ old_modes.c_cflag |= CS7 | PARENB;
+#endif
+ catchsig();
+ switch (old_modes.c_cflag & CSIZE) {
+#if defined(CS5) && (CS5 != 0)
+ case CS5:
+ tty_frame_size = 10;
+ break;
+#endif
+#if defined(CS6) && (CS6 != 0)
+ case CS6:
+ tty_frame_size = 12;
+ break;
+#endif
+#if defined(CS7) && (CS7 != 0)
+ case CS7:
+ tty_frame_size = 14;
+ break;
+#endif
+#if defined(CS8) && (CS8 != 0)
+ case CS8:
+ tty_frame_size = 16;
+ break;
+#endif
+ }
+ tty_frame_size += 2 +
+ ((old_modes.c_cflag & PARENB) ? 2 : 0) +
+ ((old_modes.c_cflag & CSTOPB) ? 4 : 2);
+}
+
+/*
+** stty_query(question)
+**
+** Does the current driver settings have this property?
+*/
+int
+stty_query(int q)
+{
+ switch (q) {
+ case TTY_NOECHO:
+ return TTY_IS_NOECHO;
+ case TTY_OUT_TRANS:
+ return TTY_IS_OUT_TRANS;
+ case TTY_CHAR_MODE:
+ return TTY_IS_CHAR_MODE;
+ }
+ return (-1);
+}
+
+/*
+** initial_stty_query(question)
+**
+** Did the initial driver settings have this property?
+*/
+int
+initial_stty_query(int q)
+{
+ switch (q) {
+ case TTY_8_BIT:
+ return TTY_WAS_CS8;
+ case TTY_XON_XOFF:
+ return TTY_WAS_XON_XOFF;
+ }
+ return (-1);
+}
+
+#if HAVE_SELECT && defined(FD_ZERO)
+static int
+char_ready(void)
+{
+ int n;
+ fd_set ifds;
+ struct timeval tv;
+
+ FD_ZERO(&ifds);
+ FD_SET(fileno(stdin), &ifds);
+ tv.tv_sec = 0;
+ tv.tv_usec = 200000;
+ n = select(fileno(stdin)+1, &ifds, NULL, NULL, &tv);
+ return (n != 0);
+}
+
+#else
+#ifdef FIONREAD
+int
+char_ready(void)
+{
+ int i, j;
+
+ /* the following loop has to be tuned for each computer */
+ for (j = 0; j < 1000; j++) {
+ ioctl(fileno(stdin), FIONREAD, &i);
+ if (i)
+ return i;
+ }
+ return i;
+}
+
+#else
+#if defined(__BEOS__)
+int
+char_ready(void)
+{
+ int n = 0;
+ int howmany = ioctl(0, 'ichr', &n);
+ return (howmany >= 0 && n > 0);
+}
+#else
+#define char_ready() 1
+#endif
+#endif
+#endif
+
+/*
+** spin_flush()
+**
+** Wait for the input stream to stop.
+** Throw away all input characters.
+*/
+void
+spin_flush(void)
+{
+ unsigned char buf[64];
+
+ fflush(stdout);
+ event_start(TIME_FLUSH); /* start the timer */
+ do {
+ if (char_ready()) {
+ (void) read(fileno(stdin), &buf, sizeof(buf));
+ }
+ } while (event_time(TIME_FLUSH) < 400000);
+}
+
+/*
+** read_key(input-buffer, length-of-buffer)
+**
+** read one function key from the input stream.
+** A null character is converted to 0x80.
+*/
+void
+read_key(char *buf, int max)
+{
+ int got, ask, i, l;
+ char *s;
+
+ *buf = '\0';
+ s = buf;
+ fflush(stdout);
+ /* ATT unix may return 0 or 1, Berkeley Unix should be 1 */
+ while (read(fileno(stdin), s, 1) == 0);
+ ++s;
+ --max;
+ while (max > 0 && (ask = char_ready())) {
+ if (ask > max) {
+ ask = max;
+ }
+ if ((got = read(fileno(stdin), s, ask))) {
+ s += got;
+ } else {
+ break;
+ }
+ max -= got;
+ }
+ *s = '\0';
+ l = s - buf;
+ for (s = buf, i = 0; i < l; i++) {
+ if ((*s & 0x7f) == 0) {
+ /* convert nulls to 0x80 */
+ *(unsigned char *)s = 128;
+ } else {
+ /* strip high order bits (if any) */
+ *s &= char_mask;
+ }
+ }
+}
+
+
+void
+ignoresig(void)
+{
+ /* ignore signals */
+ signal(SIGINT, SIG_IGN);
+ signal(SIGHUP, SIG_IGN);
+ signal(SIGQUIT, SIG_IGN);
+ signal(SIGTERM, SIG_IGN);
+ signal(SIGALRM, SIG_IGN);
+}
+
+ /*
+ onintr( )
+
+ is the interrupt handling routine onintr turns off interrupts while doing
+ clean-up
+
+ onintr always exits fatally
+ */
+
+
+static RETSIGTYPE
+onintr(int sig GCC_UNUSED)
+{
+ ignoresig();
+ tty_reset();
+ exit(1);
+}
+
+
+ /*
+ catchsig( )
+
+ set up to field interrupts (via function onintr( )) so that if interrupted
+ we can restore the correct terminal modes
+
+ catchsig simply returns
+ */
+
+
+void
+catchsig(void)
+{
+ if ((signal(SIGINT, SIG_IGN)) == SIG_DFL)
+ signal(SIGINT, onintr);
+
+ if ((signal(SIGHUP, SIG_IGN)) == SIG_DFL)
+ signal(SIGHUP, onintr);
+
+ if ((signal(SIGQUIT, SIG_IGN)) == SIG_DFL)
+ signal(SIGQUIT, onintr);
+
+ if ((signal(SIGTERM, SIG_IGN)) == SIG_DFL)
+ signal(SIGTERM, onintr);
+
+}
+
+/*
+** alarm_event(sig)
+**
+** Come here for an alarm event
+*/
+static void
+alarm_event(
+ int sig GCC_UNUSED)
+{
+ no_alarm_event = 0;
+}
+
+/*
+** set_alarm_clock(seconds)
+**
+** Set the alarm clock to fire in <seconds>
+*/
+void
+set_alarm_clock(
+ int seconds)
+{
+ signal(SIGALRM, alarm_event);
+ no_alarm_event = 1;
+ (void) alarm(seconds);
+}
--- /dev/null
+.TH tack 1M ""
+.ds n 5
+.ds d @TERMINFO@
+.SH NAME
+\fBtack\fR - \fIterminfo\fR action checker
+.SH SYNOPSIS
+\fBtack\fR [-itV] [term]
+.br
+.SH DESCRIPTION
+The \fBtack\fR program has three purposes:
+(1) to help you build a new terminfo entry describing an unknown terminal,
+(2) to test the correctness of an existing entry, and
+(3) to develop the correct pad timings needed to ensure that screen updates
+don't fall behind the incoming data stream.
+.PP
+\fBTack\fR presents a series of screen-painting and interactive
+tests in ways which are intended to make any mismatches between the
+terminfo entry and reality visually obvious.
+\fBTack\fR also provides tools that can help in understanding how
+the terminal operates.
+.SS OPTIONS
+.TP
+.I "\-i"
+Usually \fBtack\fR will send the reset and init strings to the terminal
+when the program starts up. The \fI-i\fR option will inhibit the
+terminal initialization.
+.TP
+.I "\-t"
+Tell \fBtack\fR to override the terminfo settings for basic terminal
+functions. When this option is set \fBtack\fR will translate
+(cr) to \\r, (cud1) to \\n, (ind) to \\n, (nel) to \\r\\n,
+(cub1) to \\b, (bel) to \\007, (ff) to \\f and (ht) to \\t.
+.TP
+.I "\-V"
+Display the version information and exit.
+.TP
+.I "term"
+Terminfo terminal name to be tested. If not present then the $TERM
+environment variable will be used.
+.SH OVERVIEW
+Since \fBtack\fR is designed to test terminfo's it is not possible
+to rely on the correctness of the terminfo data base. Because of this
+the menuing system used with \fBtack\fR is vary primitive. When a
+menu is printed it will scroll the entire screen. To compensate
+for this verbose menu system \fBtack\fR permits menu selection
+type ahead.
+If you already know what action you would like \fBtack\fR to perform
+then you can enter that value immediately and avoid the menu display.
+When in doubt the question mark (?) is a good character to type.
+A carriage return will execute the default action. These default
+actions are designed to run all the standard tests.
+.PP
+When \fBtack\fR first comes up it will display some basic information
+about the terminal. Take some time to verify this information.
+If it is wrong many of the subsequent tests will fail. The most
+important item is the screen size. If the screen size is wrong there
+is no point in proceeding. (home) and (clear) are also critical
+to the success of subsequent tests. The values of (cr) (ind)
+(cub1) and (ht) may effect the tests if they are defined incorrectly.
+If they are undefined \fBtack\fR will set them to reasonable defaults.
+The last two entries on the display are the enquire and acknowledge strings.
+These strings are taken from the user strings (u9) and (u8).
+.PP
+By now you must be wondering why the terminfo names are enclosed
+in parenthesis. This has no profound meaning other than it makes
+them stand out. The \fBtack\fR program uses this convention any time
+it displays a terminfo name. Remember \fBtack\fR is designed to
+rely on as little of the terminfo entry as possible.
+.SH CREATING NEW ENTRIES
+\fBTack\fR has a number of tools that are designed to help gather
+information about the terminal. Although these functions are not
+dependent on terminal type, you may wish to execute \fBtack\fR
+with options \fI\-it\fR. This will turn off initialization
+and default the standard entries.
+.PP
+These tools may be reached from the main menu by selecting
+the 'tools' entry.
+.PP
+\fBEcho tool\fR: All data typed from the keyboard will be echoed back
+to the terminal. Control characters are not translated to the up arrow format
+but are sent as control characters. This allows you to test an escape
+sequence and see what it actually does. You may also elect to
+\fBenable hex output on echo tool\fR this will echo the characters in
+hexadecimal. Once the test is running you may enter the 'lines'
+or 'columns' keywords which will display a pattern that will help
+you determine your screen size. A complete list of keywords will
+be displayed when the test starts. Type 'help' to redisplay
+the list of available commands.
+.PP
+\fBReply tool\fR: This tool acts much like the echo tool, but
+control characters that are sent from the terminal more than one character
+after a carriage return will be expanded to the up arrow format. For example
+on a standard ANSI terminal you may type:
+
+ CR ESC [ c
+
+and the response will be echoed as something like:
+
+ ^[ [ ? 6 c
+.PP
+\fBANSI sgr display\fR: This test assumes you have an ANSI terminal. It
+goes through attribute numbers 0 to 79, displaying each in turn and using that
+SGR number to write the text. This shows you which of the SGR
+modes are actually implemented by the terminal. Note: some terminals (such as
+Tektronix color) use the private use characters to augment the functionality of
+the SGR command. These private use characters may be interjected into the
+escape sequence by typing the character ( <, =, >, ? ) after the original
+display has been shown.
+.PP
+\fBANSI status reports\fR: This test queries the terminal in standard
+ANSI/VT-100 fashion. The results of this test may help
+determine what options are supported by your terminal.
+.PP
+\fBANSI character sets\fR: This test displays the character sets
+available on a ANSI/VT-100 style terminal.
+Character sets on a real VT-100 terminal are usually defined
+with smacs=\\E(0 and rmacs=\\E(B. The first character after the
+escape defines the font bank. The second character defines the
+character set. This test allows you to view any of the possible
+combinations. Private use character sets are defined by the digits.
+Standard character sets are located in the alphabetic range.
+.SH VERIFYING AN EXISTING ENTRY
+.PP
+You can verify the correctness of an entry with the `begin testing'
+function. This entry is the default action and will be chosen
+if you hit carriage return (or enter). This will bring up a
+secondary menu that allows you to select more specific tests.
+.PP
+The general philosophy of the program is, for each capability, to send an
+appropriate test pattern to the terminal then send a description of
+what the user should expect. Occasionally (as when checking function-key
+capabilities) the program will ask you to enter input for it to check.
+.PP
+If the test fails then you have the option of dynamically changing
+the terminfo entry and re-running the test. This is done with
+the 'edit terminfo' menu item. The edit submenu allows you to change
+the offending terminfo entry and immediately retest the capability.
+The edit menu lets you do other things with the terminfo, such as;
+display the entire terminfo entry,
+display which caps have been tested and display which caps cannot
+be tested. This menu also allows you to write the newly modified
+terminfo to disc. If you have made any modifications to the
+terminfo \fBtack\fR will ask you if you want to save the file
+to disc before it exits. The filename will be the same as the terminal name.
+After the program exits you can run the tic(1M) compiler on the
+new terminfo to install it in the terminfo data base.
+.PP
+.SH CORRECTING PAD TIMINGS
+.SS Theory of Overruns and Padding
+.PP
+Some terminals require significant amounts of time (that is, more than one
+transmitted-character interval) to do screen updates that change large
+portions of the screen, such as screen clears, line insertions,
+line deletions, and scrolls (including scrolls triggered by line feeds
+or a write to the lowest, right-hand-most cell of the screen).
+.PP
+If the computer continues to send characters to the terminal while one
+of these time-consuming operations is going on, the screen may be garbled.
+Since the length of a character transmission time varies inversely with
+transmission speed in cps, entries which function at lower speeds may
+break at higher speeds.
+.PP
+Similar problems result if the host machine is simply sending characters at a
+sustained rate faster than the terminal can buffer and process them. In either
+case, when the terminal cannot process them and can't tell the host to stop
+soon enough, it will just drop them. The dropped characters could be text,
+escape sequences or the escape character itself, causing some really
+strange-looking displays. This kind of glitch is called an \fIoverrun\fR.
+.PP
+In terminfo entries, you can attach a \fBpad time\fR to each string capability
+that is a number of milliseconds to delay after sending it. This will give
+the terminal time to catch up and avoid overruns.
+.PP
+If you are running a software terminal emulator, or you are on an X pseudo-tty,
+or your terminal is on an RS-232C line which correctly handles RTS/CTS
+hardware flow control, then pads are not strictly necessary. However, some
+display packages (such as ncurses(3X)) use the pad counts to calculate
+the fastest way to implement certain functions.
+For example: scrolling the screen may be faster than deleting the top line.
+.PP
+One common way to avoid overruns is with XON/XOFF handshaking.
+But even this handshake may have problems at high baud rates.
+This is a result of the way XON/XOFF works. The terminal tells
+the host to stop with an XOFF. When the host gets this character, it stops
+sending. However, there is a small amount of time between the stop request and
+the actual stop. During this window, the terminal must continue to accept
+characters even though it has told the host to stop. If the terminal sends
+the stop request too late, then its internal buffer will overflow. If it sends
+the stop character too early, then the terminal is not getting the most
+efficient use out of its internal buffers. In a real application at high baud
+rates, a terminal could get a dozen or more characters before the host gets
+around to suspending transmission. Connecting the terminal over a network
+will make the problem much worse.
+.PP
+(RTS/CTS handshaking does not have this problem because the UARTs are
+signal-connected and the "stop flow" is done at the lowest level, without
+software intervention).
+.PP
+.SS Timing your terminal
+.PP
+In order to get accurate timings from your terminal \fBtack\fR
+needs to know when the terminal has finished processing all the
+characters that were sent. This requires a different type of handshaking
+than the XON/XOFF that is supported by most terminals. \fBTack\fR
+needs to send a request to the terminal and wait for its reply.
+Many terminals will respond with an ACK when they receive an ENQ.
+This is the preferred method since the sequence is short.
+ANSI/VT-100 style terminals can mimic this handshake with the
+escape sequence that requests 'primary device attributes'.
+
+ ESC [ c
+
+The terminal will respond with a sequence like:
+
+ ESC [ ? 1 ; 0 c
+
+\fBTack\fR assumes that (u9) is the enquire sequence and that (u8) is the
+acknowledge string. A VT-100 style terminal could set u9=\\E[c
+and u8=\\E[?1;0c.
+Acknowledge strings fall into two categories.
+1) Strings with a unique terminating character and,
+2) strings of fixed length.
+The acknowledge string for the VT-100 is of the first type since
+it always ends with the letter 'c'. Some Tektronics terminals
+have fixed length acknowledge strings. \fBTack\fR supports both
+types of strings by scanning for the terminating character until
+the length of the expected acknowledge string has arrived.
+(u8) should be set to some typical acknowledge that will be
+returned when (u9) is sent.
+.PP
+\fBTack\fR will test this sequence before running any of the pad
+tests or the function key tests. \fBTack\fR will ask you the following:
+
+ Hit lower case g to start testing...
+
+After it sends this message it will send the enquire string.
+It will then read characters from the terminal until it sees the
+letter g.
+.PP
+.SS Testing and Repairing Pad Timings
+.PP
+The pad timings in distributed terminfo entries are often incorrect. One
+major motivation for this program is to make it relatively easy to tune these
+timings.
+.PP
+You can verify and edit the pad timings for a terminal with
+the `test string capabilities'
+function (this is also part of the `normal test sequence' function).
+.PP
+The key to determining pad times is to find out the effective baud rate of
+the terminal. The effective baud rate determines the number of characters
+per second that the terminal can accept without either handshaking or
+losing data. This rate is frequently less than the nominal cps rate on the
+RS-232 line.
+.PP
+\fBTack\fR uses the effective baud rate to judge the duration of the test and
+how much a particular escape sequence will perturb the terminal.
+.PP
+Each pad test has two associated variables that can be tweaked to help verify
+the correctness of the pad timings. One is the pad test length. The other is
+the pad multiplier, which is used if the pad prefix includes `*'. In curses
+use, it is often the first parameter of the capability (if there is one).
+For a capability like (dch) or (il) this will be the number of character
+positions or lines affected, respectively.
+.PP
+\fBTack\fR will run the pad tests and display the results to the terminal.
+On capabilities that have multipliers \fBtack\fR will not tell you
+if the pad needs the multiplier or not. You must make this decision
+yourself by rerunning the test with a different multiplier.
+If the padding changes in proportion to the multiplier than the
+multiplier is required. If the multiplier has little or no effect on
+the suggested padding then the multiplier is not needed.
+Some capabilities will take several runs to get a good feel for
+the correct values. You may wish to make the test longer
+to get more accurate results. System load will also effect the
+results (a heavily loaded system will not stress the
+terminal as much, possibly leading to pad timings that are too short).
+.PP
+.SH NOTE
+The tests done at the beginning of the program are assumed to be correct later
+in the code. In particular, \fBtack\fR displays the number of lines and
+columns indicated in the terminfo entry as part of its initial output.
+If these values are wrong a large number of tests will fail or give incorrect
+results.
+.SH FILES
+.TP 12
+tack.log
+If logging is enabled then all characters written to the terminal
+will also be written to the log file. This gives you the ability
+to see how the tests were performed. This feature is disabled by default.
+.TP 12
+.I "term"
+If you make changes to the terminfo entry \fBtack\fR will save
+the new terminfo to a file. The file will have the same name
+as the terminal name.
+.SH SEE ALSO
+\fBterminfo\fR(\*n), \fBncurses\fR(3X), \fBtic\fR(1m), \fBinfocmp\fR(1m).
+You should also have the documentation supplied by the terminal
+manufacturer.
+.SH BUGS
+If the screen size is incorrect, many of the tests will fail.
+.SH AUTHOR
+Concept, design, and original implementation by
+Daniel Weaver <danw@znyx.com>. Portions of the code and
+documentation are by Eric S. Raymond <esr@snark.thyrsus.com>.
+.\"#
+.\"# The following sets edit modes for GNU EMACS
+.\"# Local Variables:
+.\"# mode:nroff
+.\"# fill-column:79
+.\"# End:
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+#include <tack.h>
+
+MODULE_ID("$Id: tack.c,v 1.1 1998/01/10 01:34:45 tom Exp $")
+
+/*
+ This program is designed to test terminfo, not curses. Therefore
+ I have used as little of curses as possible.
+
+ Pads associated with the following capabilities are used to set
+ delay times in the handler: (cr), (ind), (cub1), (ff), (tab).
+
+ I use the (nxon) capability to set the tty handler with/without
+ xon/xoff. If (smxon)/(rmxon) is defined I will change the terminal
+ too.
+
+ (xon) inhibits the sending of delay characters in putp().
+ If the terminal is defined with no padding then the (xon) boolean
+ is a don't care. In this case I recommend that it be reset.
+ */
+
+/*****************************************************************************
+ *
+ * Option processing
+ *
+ *****************************************************************************/
+
+/* options and modes */
+int debug_level; /* debugging level */
+int translate_mode; /* translate tab, bs, cr, lf, ff */
+int scan_mode; /* use scan codes */
+int char_mask; /* either 0xFF else 0x7F, eight bit data mask */
+int select_delay_type; /* set handler delays for <cr><lf> */
+int select_xon_xoff; /* TTY driver XON/XOFF mode select */
+int hex_out; /* Display output in hex */
+int send_reset_init; /* Send the reset and initialization strings */
+FILE *log_fp; /* Terminal logfile */
+
+/*****************************************************************************
+ *
+ * Menu definitions
+ *
+ *****************************************************************************/
+
+extern struct test_menu sync_menu;
+
+static void tools_hex_echo(struct test_list *, int *, int *);
+static void tools_debug(struct test_list *, int *, int *);
+
+static char hex_echo_menu_entry[80];
+
+struct test_list tools_test_list[] = {
+ {0, 0, 0, 0, "s) ANSI status reports", tools_status, 0},
+ {0, 0, 0, 0, "g) ANSI SGR modes (bold, underline, reverse)", tools_sgr, 0},
+ {0, 0, 0, 0, "c) ANSI character sets", tools_charset, 0},
+ {0, 0, 0, 0, hex_echo_menu_entry, tools_hex_echo, 0},
+ {0, 0, 0, 0, "e) echo tool", tools_report, 0},
+ {1, 0, 0, 0, "r) reply tool", tools_report, 0},
+ {0, 0, 0, 0, "p) performance testing", 0, &sync_menu},
+ {0, 0, 0, 0, "i) send reset and init", menu_reset_init, 0},
+ {0, 0, "u8) (u9", 0, "u) test ENQ/ACK handshake", sync_handshake, 0},
+ {0, 0, 0, 0, "d) change debug level", tools_debug, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+struct test_menu tools_menu = {
+ 0, 'q', 0, "Tools Menu", "tools",
+ 0, 0, tools_test_list, 0, 0, 0
+};
+
+static void tty_width(struct test_list *, int *, int *);
+static void tty_delay(struct test_list *, int *, int *);
+static void tty_xon(struct test_list *, int *, int *);
+static void tty_trans(struct test_list *, int *, int *);
+static void tty_show_state(struct test_menu *);
+
+static char tty_width_menu[80];
+static char tty_delay_menu[80];
+static char tty_xon_menu[80];
+static char tty_trans_menu[80];
+static char enable_xon_xoff[] = {"x) enable xon/xoff"};
+static char disable_xon_xoff[] = {"x) disable xon/xoff"};
+
+static struct test_list tty_test_list[] = {
+ {0, 0, 0, 0, tty_width_menu, tty_width, 0},
+ {0, 0, 0, 0, tty_delay_menu, tty_delay, 0},
+ {0, 0, 0, 0, tty_xon_menu, tty_xon, 0},
+ {0, 0, 0, 0, tty_trans_menu, tty_trans, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+static struct test_menu tty_menu = {
+ 0, 'q', 0, "Terminal and driver configuration",
+ "tty", 0,
+ tty_show_state, tty_test_list, 0, 0, 0
+};
+
+extern struct test_list edit_test_list[];
+
+struct test_menu edit_menu = {
+ 0, 'q', 0, "Edit terminfo menu",
+ "edit", 0,
+ 0, edit_test_list, 0, 0, 0
+};
+
+extern struct test_list mode_test_list[];
+
+struct test_menu mode_menu = {
+ 0, 'n', 0, "Mode test menu",
+ "mode", "n) run standard tests",
+ 0, mode_test_list, 0, 0, 0
+};
+
+extern struct test_list acs_test_list[];
+
+static struct test_menu acs_menu = {
+ 0, 'n', 0,
+ "Alternate character set and graphics rendition test menu",
+ "acs", "n) run standard tests",
+ 0, acs_test_list, 0, 0, 0
+};
+
+extern struct test_list color_test_list[];
+
+struct test_menu color_menu = {
+ 0, 'n', 0,
+ "Color test menu",
+ "color", "n) run standard tests",
+ 0, color_test_list, 0, 0, 0
+};
+
+extern struct test_list crum_test_list[];
+
+static struct test_menu crum_menu = {
+ 0, 'n', 0,
+ "Cursor movement test menu",
+ "move", "n) run standard tests",
+ 0, crum_test_list, 0, 0, 0
+};
+
+extern struct test_list funkey_test_list[];
+
+static struct test_menu funkey_menu = {
+ 0, 'n', 0,
+ "Function key test menu",
+ "fkey", "n) run standard tests",
+ sync_test, funkey_test_list, 0, 0, 0
+};
+
+extern struct test_list printer_test_list[];
+
+static struct test_menu printer_menu = {
+ 0, 'n', 0,
+ "Printer test menu",
+ "printer", "n) run standard tests",
+ 0, printer_test_list, 0, 0, 0
+};
+
+static void pad_gen(struct test_list *, int *, int *);
+extern struct test_list pad_test_list[];
+
+static struct test_menu pad_menu = {
+ 0, 'n', 0,
+ "Pad test menu",
+ "pad", "n) run standard tests",
+ sync_test, pad_test_list, 0, 0, 0
+};
+
+static struct test_list normal_test_list[] = {
+ {0, 0, 0, 0, "e) edit terminfo", 0, &edit_menu},
+ {0, 0, 0, 0, "i) send reset and init", menu_reset_init, 0},
+ {MENU_NEXT, 0, 0, 0, "x) test modes and glitches", 0, &mode_menu},
+ {MENU_NEXT, 0, 0, 0, "a) test alternate character sets", 0, &acs_menu},
+ {MENU_NEXT, 0, 0, 0, "c) test color", 0, &color_menu},
+ {MENU_NEXT, 0, 0, 0, "m) test cursor movement", 0, &crum_menu},
+ {MENU_NEXT, 0, 0, 0, "f) test function keys", 0, &funkey_menu},
+ {MENU_NEXT, 0, 0, 0, "p) test string capabilities", 0, &pad_menu},
+ {0, 0, 0, 0, "P) test printer", 0, &printer_menu},
+ {MENU_MENU, 0, 0, 0, "/) test a specific capability", 0, 0},
+ {0, 0, 0, 0, "t) auto generate pad delays", pad_gen, &pad_menu},
+ {0, 0, "u8) (u9", 0, 0, sync_handshake, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+
+struct test_menu normal_menu = {
+ 0, 'n', 0, "Main test menu",
+ "test", "n) run standard tests",
+ 0, normal_test_list, 0, 0, 0
+};
+
+static void start_tools(struct test_list *, int *, int *);
+static void start_modes(struct test_list *, int *, int *);
+static void start_basic(struct test_list *, int *, int *);
+static void start_log(struct test_list *, int *, int *);
+
+static char logging_menu_entry[80] = "l) start logging";
+
+struct test_list start_test_list[] = {
+ {0, 0, 0, 0, "b) display basic information", start_basic, 0},
+ {0, 0, 0, 0, "m) change modes", start_modes, 0},
+ {0, 0, 0, 0, "t) tools", start_tools, 0},
+ {MENU_COMPLETE, 0, 0, 0, "n) begin testing", 0, &normal_menu},
+ {0, 0, 0, 0, logging_menu_entry, start_log, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+
+struct test_menu start_menu = {
+ 0, 'n', 0, "Main Menu", "tack", 0,
+ 0, start_test_list, 0, 0, 0
+};
+
+static struct test_list write_terminfo_list[] = {
+ {0, 0, 0, 0, "w) write the current terminfo to a file", save_info, 0},
+ {MENU_LAST, 0, 0, 0, 0, 0, 0}
+};
+
+/*****************************************************************************
+ *
+ * Menu command interpretation.
+ *
+ *****************************************************************************/
+
+/*
+** tools_hex_echo(testlist, state, ch)
+**
+** Flip the hex echo flag.
+*/
+static void
+tools_hex_echo(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ if (hex_out) {
+ hex_out = FALSE;
+ strcpy(hex_echo_menu_entry,
+ "h) enable hex output on echo tool");
+ } else {
+ hex_out = TRUE;
+ strcpy(hex_echo_menu_entry,
+ "h) disable hex output on echo tool");
+ }
+}
+
+/*
+** tools_debug(testlist, state, ch)
+**
+** Change the debug level.
+*/
+static void
+tools_debug(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ char buf[32];
+
+ ptext("Enter a new value: ");
+ read_string(buf, sizeof(buf));
+ if (buf[0]) {
+ sscanf(buf, "%d", &debug_level);
+ }
+ sprintf(temp, "Debug level is now %d", debug_level);
+ ptext(temp);
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** start_tools(testlist, state, ch)
+**
+** Run the generic test tools
+*/
+static void
+start_tools(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ if (hex_out) {
+ strcpy(hex_echo_menu_entry,
+ "h) disable hex output on echo tool");
+ } else {
+ strcpy(hex_echo_menu_entry,
+ "h) enable hex output on echo tool");
+ }
+ menu_display(&tools_menu, 0);
+}
+
+/*
+** tty_show_state()
+**
+** Display the current state on the tty driver settings
+*/
+static void
+tty_show_state(
+ struct test_menu *menu GCC_UNUSED)
+{
+ put_crlf();
+ (void) sprintf(temp,
+ "Accepting %d bits, UNIX delays %d, XON/XOFF %sabled, speed %ld, translate %s, scan-code mode %s.",
+ (char_mask == ALLOW_PARITY) ? 8 : 7,
+ select_delay_type,
+ select_xon_xoff ? "en" : "dis",
+ tty_baud_rate,
+ translate_mode ? "on" : "off",
+ scan_mode ? "on" : "off");
+ ptextln(temp);
+ put_crlf();
+}
+
+/*
+** tty_width(testlist, state, ch)
+**
+** Change the character width
+*/
+static void
+tty_width(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ if (char_mask == STRIP_PARITY) {
+ char_mask = ALLOW_PARITY;
+ strcpy(tty_width_menu, "7) treat terminal as 7-bit");
+ } else {
+ char_mask = STRIP_PARITY;
+ strcpy(tty_width_menu, "8) treat terminal as 8-bit");
+ }
+}
+
+/*
+** tty_delay(testlist, state, ch)
+**
+** Change the delay for <cr><lf> in the TTY driver
+*/
+static void
+tty_delay(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ if (select_delay_type) {
+ select_delay_type = FALSE;
+ strcpy(tty_delay_menu,
+ "d) enable UNIX tty driver delays for <cr><lf>");
+ } else {
+ select_delay_type = TRUE;
+ strcpy(tty_delay_menu,
+ "d) disable UNIX tty driver delays for <cr><lf>");
+ }
+}
+
+/*
+** tty_xon(testlist, state, ch)
+**
+** Change the XON/XOFF flags in the TTY driver
+*/
+static void
+tty_xon(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ if (select_xon_xoff) {
+ if (needs_xon_xoff) {
+ ptextln("This terminal is marked as needing XON/XOFF protocol with (nxon)");
+ }
+ if (exit_xon_mode) {
+ tc_putp(exit_xon_mode);
+ }
+ xon_xoff = select_xon_xoff = FALSE;
+ strcpy(tty_xon_menu, enable_xon_xoff);
+ } else {
+ if (enter_xon_mode) {
+ tc_putp(enter_xon_mode);
+ }
+ xon_xoff = select_xon_xoff = TRUE;
+ strcpy(tty_xon_menu, disable_xon_xoff);
+ }
+ tty_set();
+}
+
+/*
+** tty_trans(testlist, state, ch)
+**
+** Change the translation mode for special characters
+*/
+static void
+tty_trans(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ if (translate_mode) {
+ translate_mode = FALSE;
+ strcpy(tty_trans_menu,
+ "t) use terminfo values for \\b\\f\\n\\r\\t");
+ } else {
+ translate_mode = TRUE;
+ strcpy(tty_trans_menu,
+ "t) override terminfo values for \\b\\f\\n\\r\\t");
+ }
+}
+
+/*
+** pad_gen(testlist, state, ch)
+**
+** Menu function for automatic pad generation
+*/
+static void
+pad_gen(
+ struct test_list *t,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ control_init();
+ if (tty_can_sync == SYNC_NOT_TESTED) {
+ verify_time();
+ }
+ auto_pad_mode = TRUE;
+ menu_display(t->sub_menu, ch);
+ auto_pad_mode = FALSE;
+}
+
+/*
+** start_modes(testlist, state, ch)
+**
+** Change the TTY modes
+*/
+static void
+start_modes(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+
+ if (select_delay_type) {
+ strcpy(tty_delay_menu,
+ "d) disable UNIX tty driver delays for <cr><lf>");
+ } else {
+ strcpy(tty_delay_menu,
+ "d) enable UNIX tty driver delays for <cr><lf>");
+ }
+ if (char_mask == ALLOW_PARITY) {
+ strcpy(tty_width_menu,
+ "7) treat terminal as 7-bit");
+ } else {
+ strcpy(tty_width_menu,
+ "8) treat terminal as 8-bit");
+ }
+ if (select_xon_xoff) {
+ strcpy(tty_xon_menu, disable_xon_xoff);
+ } else {
+ strcpy(tty_xon_menu, enable_xon_xoff);
+ }
+ if (translate_mode) {
+ strcpy(tty_trans_menu,
+ "t) override terminfo values for \\b\\f\\n\\r\\t");
+ } else {
+ strcpy(tty_trans_menu,
+ "t) use terminfo values for \\b\\f\\n\\r\\t");
+ }
+ menu_display(&tty_menu, 0);
+ tty_set();
+}
+
+/*
+** start_basic(testlist, state, ch)
+**
+** Display basic terminal information
+*/
+static void
+start_basic(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch)
+{
+ display_basic();
+ *ch = REQUEST_PROMPT;
+}
+
+/*
+** start_log(testlist, state, ch)
+**
+** Start/stop in logging function
+*/
+static void
+start_log(
+ struct test_list *t GCC_UNUSED,
+ int *state GCC_UNUSED,
+ int *ch GCC_UNUSED)
+{
+ if (logging_menu_entry[5] == 'a') {
+ ptextln("The log file will capture all characters sent to the terminal.");
+ if ((log_fp = fopen("tack.log", "w"))) {
+ ptextln("Start logging to file: tack.log");
+ strcpy(logging_menu_entry, "l) stop logging");
+ } else {
+ ptextln("File open error: tack.log");
+ }
+ } else {
+ if (log_fp) {
+ fclose(log_fp);
+ log_fp = 0;
+ }
+ ptextln("Terminal output logging stopped.");
+ strcpy(logging_menu_entry, "l) start logging");
+ }
+}
+
+/*
+** show_usage()
+**
+** Tell the user how its done.
+*/
+void
+show_usage(
+ char *name)
+{
+ (void) fprintf(stderr, "usage: %s [-itV] [term]\n", name);
+}
+
+/*
+** print_version()
+**
+** Print version and other useful information.
+*/
+void
+print_version(void)
+{
+ printf("tack version %d.%02d\n", MAJOR_VERSION, MINOR_VERSION);
+ printf("Copyright (C) 1997 Free Software Foundation, Inc.\n");
+ printf("Tack comes with NO WARRANTY, to the extent permitted by law.\n");
+ printf("You may redistribute copies of Tack under the terms of the\n");
+ printf("GNU General Public License. For more information about\n");
+ printf("these matters, see the file named COPYING.\n");
+}
+
+
+/*****************************************************************************
+ *
+ * Main sequence
+ *
+ *****************************************************************************/
+
+int
+main(int argc, char *argv[])
+{
+ int i, j;
+ char *term_variable;
+
+ /* scan the option flags */
+ send_reset_init = TRUE;
+ translate_mode = FALSE;
+ term_variable = getenv("TERM");
+ tty_can_sync = SYNC_NOT_TESTED;
+ for (i = 1; i < argc; i++) {
+ if (argv[i][0] == '-') {
+ for (j = 1; argv[i][j]; j++) {
+ switch (argv[i][j]) {
+ case 'V':
+ print_version();
+ return (1);
+ case 'i':
+ send_reset_init = FALSE;
+ break;
+ case 't':
+ translate_mode = FALSE;
+ break;
+ default:
+ show_usage(argv[0]);
+ return (0);
+ }
+ }
+ } else {
+ term_variable = argv[i];
+ }
+ }
+ (void) strcpy(tty_basename, term_variable);
+
+ curses_setup(argv[0]);
+
+ menu_can_scan(&normal_menu); /* extract which caps can be tested */
+ menu_display(&start_menu, 0);
+
+ if (user_modified()) {
+ sprintf(temp, "Hit y to save changes to file: %s ? ",
+ tty_basename);
+ ptext(temp);
+ if (wait_here() == 'y') {
+ save_info(write_terminfo_list, &i, &j);
+ }
+ }
+
+ put_str("\nTerminal test complete\n");
+ bye_kids(0);
+ return (0);
+}
--- /dev/null
+/*
+** Copyright (C) 1991, 1997 Free Software Foundation, Inc.
+**
+** This file is part of TACK.
+**
+** TACK is free software; you can redistribute it and/or modify
+** it under the terms of the GNU General Public License as published by
+** the Free Software Foundation; either version 2, or (at your option)
+** any later version.
+**
+** TACK is distributed in the hope that it will be useful,
+** but WITHOUT ANY WARRANTY; without even the implied warranty of
+** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+** GNU General Public License for more details.
+**
+** You should have received a copy of the GNU General Public License
+** along with TACK; see the file COPYING. If not, write to
+** the Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+** Boston, MA 02111-1307, USA.
+*/
+
+/* $Id: tack.h,v 1.5 1999/06/26 22:14:07 tom Exp $ */
+
+#ifndef _TACK_H
+#define _TACK_H 1
+
+/* terminfo action checker include file */
+
+#define MAJOR_VERSION 1
+#define MINOR_VERSION 0
+
+#ifdef HAVE_CONFIG_H
+#include <ncurses_cfg.h>
+#else
+#define RETSIGTYPE void
+#define GCC_UNUSED /*nothing*/
+#define HAVE_GETTIMEOFDAY 1
+#define HAVE_SELECT 1
+#define HAVE_SYS_TIME_H 1
+#define HAVE_SYS_TIME_SELECT 1
+#endif
+
+#include <sys/types.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <ctype.h>
+#include <string.h>
+
+#include <curses.h>
+#include <term_entry.h>
+
+#if USE_RCS_IDS
+#define MODULE_ID(id) static const char Ident[] = id;
+#else
+#define MODULE_ID(id) /*nothing*/
+#endif
+
+#if !HAVE_STRSTR
+extern char *_nc_strstr(const char *, const char *);
+#define strstr(h,n) _nc_strstr(h,n)
+#endif
+
+extern FILE *log_fp;
+extern FILE *debug_fp;
+extern int debug_level;
+extern char temp[];
+extern char tty_basename[];
+extern char tty_shortname[];
+
+#define SYNC_FAILED 0
+#define SYNC_TESTED 1
+#define SYNC_NOT_TESTED 2
+#define SYNC_NEEDED 3
+
+extern int tty_can_sync;
+extern int total_pads_sent; /* count pad characters sent */
+extern int total_caps_sent; /* count caps sent */
+extern int total_printing_characters; /* count printing characters sent */
+extern int no_alarm_event; /* TRUE if the alarm has not gone off yet */
+extern int usec_run_time; /* length of last test in microseconds */
+extern int raw_characters_sent; /* Total output characters */
+
+/* Stopwatch event timers */
+#define TIME_TEST 0
+#define TIME_SYNC 1
+#define TIME_FLUSH 2
+#define MAX_TIMERS 3
+
+/* definitions for pad.c */
+
+#define EXIT_CONDITION (no_alarm_event && (tt_delay_used < tt_delay_max))
+#define SLOW_TERMINAL_EXIT if (!test_complete && !EXIT_CONDITION) { break; }
+#define CAP_NOT_FOUND if (auto_pad_mode) return
+
+extern char letters[26+1];
+#define NEXT_LETTER letter = letters[letter_number =\
+ letters[letter_number + 1] ? letter_number + 1 : 0]
+
+extern int test_complete; /* counts number of tests completed */
+extern char letter;
+extern int letter_number;
+extern int augment, repeats;
+extern long char_sent;
+extern const char *pad_repeat_test; /* commands that force repeat */
+
+extern int replace_mode;
+extern int char_count, line_count, expand_chars;
+extern int can_go_home, can_clear_screen;
+
+extern int translate_mode, scan_mode;
+extern int auto_pad_mode; /* TRUE for auto time tests */
+extern int char_mask;
+extern int hex_out; /* Display output in hex */
+
+/* Parity bit macros */
+#define STRIP_PARITY 0x7f
+#define ALLOW_PARITY 0xff
+
+/* select_delay_type: 0 -> reset all delays
+ 1 -> force long delays
+ 2 -> do not change the delays */
+extern int select_delay_type;
+
+/* select_xon_xoff: 0 -> reset xon/xoff
+ 1 -> set xon/xoff
+ 2 -> do not change xon/xoff */
+extern int select_xon_xoff;
+
+extern int tty_frame_size;
+extern unsigned long tty_baud_rate;
+extern int tty_cps; /* The number of characters per second */
+extern int not_a_tty, nodelay_read;
+extern int send_reset_init;
+
+/* definitions for stty_query() and initial_stty_query() */
+#define TTY_CHAR_MODE 0
+#define TTY_NOECHO 1
+#define TTY_OUT_TRANS 2
+#define TTY_8_BIT 3
+#define TTY_XON_XOFF 4
+
+/* scan code definitions */
+#define MAX_SCAN 256
+
+/* translate mode default strings */
+struct default_string_list {
+ const char *name; /* terminfo name */
+ const char *value; /* value of default string */
+ int index; /* index into the strfname[] array */
+};
+
+#define TM_last 8
+extern struct default_string_list TM_string[TM_last];
+
+/* attribute structure definition */
+struct mode_list {
+ const char *name;
+ const char *begin_mode;
+ const char *end_mode;
+ int number;
+};
+
+extern const struct mode_list alt_modes[];
+extern const int mode_map[];
+
+/* Test data base */
+
+#define FLAG_CAN_TEST 1
+#define FLAG_TESTED 2
+#define FLAG_LABEL 4
+#define FLAG_FUNCTION_KEY 8
+
+/* caps under test data base */
+
+#define TT_MAX 8
+#define MAX_CHANGES (TT_MAX+2)
+
+extern int tt_delay_max; /* max number of milliseconds we can delay */
+extern int tt_delay_used; /* number of milliseconds consumed in delay */
+extern const char *tt_cap[TT_MAX]; /* value of string */
+extern int tt_affected[TT_MAX]; /* lines or columns effected (repitition
+ factor) */
+extern int tt_count[TT_MAX]; /* Number of times sent */
+extern int tt_delay[TT_MAX]; /* Number of milliseconds delay */
+extern int ttp; /* number of entries used */
+
+extern const char *tx_cap[TT_MAX]; /* value of string */
+extern int tx_affected[TT_MAX]; /* lines or columns effected (repitition
+ factor) */
+extern int tx_count[TT_MAX]; /* Number of times sent */
+extern int tx_delay[TT_MAX]; /* Number of milliseconds delay */
+extern int tx_index[TT_MAX]; /* String index */
+extern int txp; /* number of entries used */
+extern int tx_characters; /* printing characters sent by test */
+extern int tx_cps; /* characters per second */
+
+/*
+ Menu control for tack.
+*/
+
+struct test_results {
+ struct test_results *next; /* point to next entry */
+ struct test_list *test; /* Test which got these results */
+ int reps; /* repeat count */
+ int delay; /* delay times 10 */
+};
+
+struct test_list {
+ int flags; /* Test description flags */
+ int lines_needed; /* Lines needed for test (0->no action) */
+ const char *caps_done; /* Caps shown in Done message */
+ const char *caps_tested; /* Other caps also being tested */
+ const char *menu_entry; /* Menu entry text (optional) */
+ /* Function that does testing */
+ void (*test_procedure)(struct test_list *, int *, int *);
+ struct test_menu *sub_menu; /* Nested sub-menu */
+};
+
+struct test_menu {
+ int flags; /* Menu feature flag */
+ int default_action; /* Default command if <cr> <lf> entered */
+ const char *menu_text; /* Describe this test_menu */
+ const char *menu_title; /* Title for the menu */
+ const char *ident; /* short menu name */
+ const char *standard_tests; /* Standard test text */
+ /* print current settings (optional) */
+ void (*menu_function)(struct test_menu *);
+ struct test_list *tests; /* Pointer to the menu/function pairs */
+ struct test_list *resume_tests; /* Standard test resume point */
+ int resume_state; /* resume state of test group */
+ int resume_char; /* resume ch of test group */
+};
+
+
+/* menu flags */
+#define MENU_100c 0x00001a00 /* Augment 100% of columns */
+#define MENU_90c 0x00001900 /* Augment 90% of columns */
+#define MENU_80c 0x00001800 /* Augment 80% of columns */
+#define MENU_70c 0x00001700 /* Augment 70% of columns */
+#define MENU_60c 0x00001600 /* Augment 60% of columns */
+#define MENU_50c 0x00001500 /* Augment 50% of columns */
+#define MENU_40c 0x00001400 /* Augment 40% of columns */
+#define MENU_30c 0x00001300 /* Augment 30% of columns */
+#define MENU_20c 0x00001200 /* Augment 20% of columns */
+#define MENU_10c 0x00001100 /* Augment 10% of columns */
+#define MENU_LM1 0x00002e00 /* Augment lines - 1 */
+#define MENU_100l 0x00002a00 /* Augment 100% of lines */
+#define MENU_90l 0x00002900 /* Augment 90% of lines */
+#define MENU_50l 0x00002500 /* Augment 50% of lines */
+#define MENU_lines 0x00002000 /* Augment of lines */
+#define MENU_columns 0x00001000 /* Augment of columns */
+#define MENU_LC_MASK 0x00003000 /* Augment mask for lines and columns */
+#define MENU_1L 0x00002f00 /* Augment == one */
+#define MENU_1C 0x00001f00 /* Augment == one */
+#define MENU_ONE 0x00000f00 /* Augment == one */
+#define MENU_ONE_MASK 0x00000f00 /* Augment == one mask */
+#define MENU_REP_MASK 0x00003f00 /* Augment mask */
+
+#define MENU_CLEAR 0x00010000 /* clear screen */
+#define MENU_INIT 0x00020000 /* Initialization function */
+#define MENU_NEXT 0x00040000 /* Next test in sequence */
+#define MENU_LAST 0x00080000 /* End of menu list */
+#define MENU_STOP 0x00100000 /* Stop testing next-in-sequence */
+#define MENU_COMPLETE 0x00200000 /* Test complete after this */
+#define MENU_MENU 0x00400000 /* Pass the menu name not test name */
+
+#define REQUEST_PROMPT 256
+
+extern char prompt_string[80]; /* menu prompt storage */
+extern struct test_menu edit_menu;
+extern struct test_list *augment_test;
+
+/* tack.c */
+extern void show_usage(char *);
+extern void print_version(void);
+
+/* output.c */
+extern void tt_tputs(const char *, int);
+extern void tt_putp(const char *);
+extern void tt_putparm(NCURSES_CONST char *, int, int, int);
+extern int tc_putp(const char *);
+extern int tc_putch(int);
+extern void putchp(int);
+extern void put_cr(void);
+extern void put_crlf(void);
+extern void put_clear(void);
+extern void put_dec(char *, int);
+extern void put_str(const char *);
+extern void put_lf(void);
+extern void put_ind(void);
+extern void put_newlines(int);
+extern void put_columns(const char *, int, int);
+extern void put_this(int);
+extern void putln(const char *);
+extern void ptext(const char *);
+extern void ptextln(const char *);
+extern void home_down(void);
+extern void go_home(void);
+extern void three_digit(char *, int);
+extern int getchp(int);
+extern char *expand(const char *);
+extern char *expand_to(char *, int);
+extern char *expand_command(const char *);
+extern char *hex_expand_to(char *, int);
+extern char *print_expand(char *);
+extern void maybe_wait(int);
+extern int wait_here(void);
+extern void read_string(char *, int);
+extern int getnext(int);
+
+/* control.c */
+extern void event_start(int);
+extern long event_time(int);
+extern char *liberated(char *);
+extern void page_loop(void);
+extern void control_init(void);
+extern int msec_cost(const char *const, int);
+extern int skip_pad_test(struct test_list *, int *, int *, const char *);
+extern void pad_test_startup(int);
+extern int still_testing(void);
+extern void pad_test_shutdown(struct test_list *, int);
+extern void dump_test_stats(struct test_list *, int *, int *);
+extern void longer_test_time(struct test_list *, int *, int *);
+extern void shorter_test_time(struct test_list *, int *, int *);
+extern char txt_longer_test_time[80];
+extern char txt_shorter_test_time[80];
+extern void set_augment_txt(void);
+extern void longer_augment(struct test_list *, int *, int *);
+extern void shorter_augment(struct test_list *, int *, int *);
+extern char txt_longer_augment[80];
+extern char txt_shorter_augment[80];
+extern int sliding_scale(int, int, int);
+
+/* sync.c */
+extern void verify_time(void);
+extern int tty_sync_error(void);
+extern void flush_input(void);
+extern void sync_test(struct test_menu *);
+extern void sync_handshake(struct test_list *, int *, int *);
+
+/* charset.c */
+extern void set_attr(int);
+extern void eat_cookie(void);
+extern void put_mode(char *);
+
+/* init.c */
+extern void reset_init(void);
+extern void display_basic(void);
+extern void put_name(const char *, const char *);
+extern void charset_can_test(void);
+extern void curses_setup(char *);
+extern void bye_kids(int);
+
+/* scan.c */
+extern int scan_key(void);
+extern void scan_init(char *fn);
+
+/* ansi.c */
+extern void tools_status(struct test_list *, int *, int *);
+extern void tools_charset(struct test_list *, int *, int *);
+extern void tools_sgr(struct test_list *, int *, int *);
+
+/* pad.c */
+
+/* fun.c */
+extern void enter_key(const char *, char *, char *);
+extern int tty_meta_prep(void);
+extern void tools_report(struct test_list *, int *, int *);
+
+/* sysdep.c */
+extern void tty_set(void);
+extern void tty_raw(int, int);
+extern void tty_init(void);
+extern void tty_reset(void);
+extern void spin_flush(void);
+extern void read_key(char *, int);
+extern void set_alarm_clock(int);
+extern void ignoresig(void);
+extern int stty_query(int);
+extern int initial_stty_query(int);
+
+/* edit.c */
+extern int user_modified(void);
+extern void save_info(struct test_list *, int *, int *);
+extern void can_test(const char *, int);
+extern void cap_index(const char *, int *);
+extern int cap_match(const char *names, const char *cap);
+extern void edit_init(void);
+extern char *get_string_cap_byname(const char *, const char **);
+extern int get_string_cap_byvalue(const char *);
+extern void show_report(struct test_list *, int *, int *);
+
+/* menu.c */
+extern void menu_prompt(void);
+extern void menu_can_scan(const struct test_menu *);
+extern void menu_display(struct test_menu *, int *);
+extern void generic_done_message(struct test_list *, int *, int *);
+extern void pad_done_message(struct test_list *, int *, int *);
+extern void menu_clear_screen(struct test_list *, int *, int *);
+extern void menu_reset_init(struct test_list *, int *, int *);
+extern int subtest_menu(struct test_list *, int *, int *);
+
+#endif /* _TACK_H */
-# $Id: Makefile.in,v 1.45 1998/02/11 12:14:05 tom Exp $
+# $Id: Makefile.in,v 1.54 1999/10/23 20:01:19 tom Exp $
##############################################################################
-# Copyright (c) 1998 Free Software Foundation, Inc. #
+# Copyright (c) 1998,1999 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"), #
CFLAGS_NORMAL = $(CCFLAGS)
CFLAGS_DEBUG = $(CCFLAGS) @CC_G_OPT@ -DTRACE
CFLAGS_PROFILE = $(CCFLAGS) -pg
-CFLAGS_SHARED = $(CCFLAGS) # @CC_SHARED_OPTS@
+CFLAGS_SHARED = $(CCFLAGS) @CC_SHARED_OPTS@
CFLAGS_DEFAULT = $(CFLAGS_@DFT_UPR_MODEL@)
MATH_LIB = @MATH_LIB@
LD = @LD@
-LINK = $(CC)
+LINK = @LINK_TESTS@ $(CC)
LDFLAGS = @LD_MODEL@ @TEST_ARGS@ @LIBS@ @EXTRA_LIBS@ @LOCAL_LDFLAGS@ @LDFLAGS@
LDFLAGS_NORMAL = $(LDFLAGS)
LDFLAGS_DEBUG = $(LDFLAGS) @CC_G_OPT@
LDFLAGS_PROFILE = $(LDFLAGS) -pg
-LDFLAGS_SHARED = $(LDFLAGS) @CC_SHARED_OPTS@ # @LD_SHARED_OPTS@
+LDFLAGS_SHARED = $(LDFLAGS) @LD_SHARED_OPTS@
LDFLAGS_DEFAULT = $(LDFLAGS_@DFT_UPR_MODEL@)
TESTS = \
blue$x \
bs$x \
+ cardfile$x \
+ ditto$x \
+ dots$x \
+ filter$x \
firework$x \
firstlast$x \
gdc$x \
hanoi$x \
hashtest$x \
+ keynames$x \
knight$x \
lrtest$x \
ncurses$x \
bs$x: $(MODEL)/bs.o $(LOCAL_LIBS)
@ECHO_LINK@ $(LINK) -o $@ $(MODEL)/bs.o $(LDFLAGS_DEFAULT)
+cardfile$x: $(MODEL)/cardfile.o $(LOCAL_LIBS)
+ @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/cardfile.o $(LDFLAGS_DEFAULT)
+
+ditto$x: $(MODEL)/ditto.o $(LOCAL_LIBS)
+ @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/ditto.o $(LDFLAGS_DEFAULT)
+
+dots$x: $(MODEL)/dots.o $(LOCAL_LIBS)
+ @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/dots.o $(LDFLAGS_DEFAULT)
+
+filter$x: $(MODEL)/filter.o $(LOCAL_LIBS)
+ @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/filter.o $(LDFLAGS_DEFAULT)
+
firework$x: $(MODEL)/firework.o $(LOCAL_LIBS)
@ECHO_LINK@ $(LINK) -o $@ $(MODEL)/firework.o $(LDFLAGS_DEFAULT)
hashtest$x: $(MODEL)/hashtest.o $(LOCAL_LIBS)
@ECHO_LINK@ $(LINK) -o $@ $(MODEL)/hashtest.o $(LDFLAGS_DEFAULT)
+keynames$x: $(MODEL)/keynames.o $(LOCAL_LIBS)
+ @ECHO_LINK@ $(LINK) -o $@ $(MODEL)/keynames.o $(LDFLAGS_DEFAULT)
+
knight$x: $(MODEL)/knight.o $(LOCAL_LIBS)
@ECHO_LINK@ $(LINK) -o $@ $(MODEL)/knight.o $(LDFLAGS_DEFAULT)
*****************************************************************************/
/*
- * Compile this with the command `cc -O blue.c -lcurses -o blue'. For best
- * results, use the portable freeware ncurses(3) library. On non-Intel
- * machines, SVr4 curses is just as good.
+ * Compile this with the command `cc -O blue.c -lcurses -o blue'. For best
+ * results, use the ncurses(3) library. On non-Intel machines, SVr4 curses is
+ * just as good.
*
- * $Id: blue.c,v 1.15 1997/03/09 00:47:41 tom Exp $
+ * $Id: blue.c,v 1.18 1999/01/17 00:11:56 tom Exp $
*/
#include <test.priv.h>
Color values should not be or'ed in. This
only works, because the characters used here
are plain and have no color attribute themselves. */
-static chtype letters[4] =
-{
#ifdef COLOR_PAIR
- 'h' | COLOR_PAIR(RED_ON_WHITE), /* hearts */
- 's' | COLOR_PAIR(BLACK_ON_WHITE), /* spades */
- 'd' | COLOR_PAIR(RED_ON_WHITE), /* diamonds */
- 'c' | COLOR_PAIR(BLACK_ON_WHITE), /* clubs */
+#define OR_COLORS(value,pair) ((value) | COLOR_PAIR(pair))
+#else
+#define OR_COLORS(value,pair) (value)
#endif
+
+#define PC_COLORS(value,pair) (OR_COLORS(value,pair) | A_ALTCHARSET)
+
+static chtype letters[4] =
+{
+ OR_COLORS('h', RED_ON_WHITE), /* hearts */
+ OR_COLORS('s', BLACK_ON_WHITE), /* spades */
+ OR_COLORS('d', RED_ON_WHITE), /* diamonds */
+ OR_COLORS('c', BLACK_ON_WHITE), /* clubs */
};
#if defined(__i386__)
static chtype glyphs[] =
{
-#ifdef COLOR_PAIR
- '\003' | A_ALTCHARSET | COLOR_PAIR(RED_ON_WHITE), /* hearts */
- '\006' | A_ALTCHARSET | COLOR_PAIR(BLACK_ON_WHITE), /* spades */
- '\004' | A_ALTCHARSET | COLOR_PAIR(RED_ON_WHITE), /* diamonds */
- '\005' | A_ALTCHARSET | COLOR_PAIR(BLACK_ON_WHITE), /* clubs */
-#endif
+ PC_COLORS('\003', RED_ON_WHITE), /* hearts */
+ PC_COLORS('\006', BLACK_ON_WHITE), /* spades */
+ PC_COLORS('\004', RED_ON_WHITE), /* diamonds */
+ PC_COLORS('\005', BLACK_ON_WHITE), /* clubs */
};
#endif /* __i386__ */
init_pair(BLACK_ON_WHITE, COLOR_BLACK, COLOR_WHITE);
#ifndef COLOR_PAIR
- letters[0] = 'h' | COLOR_PAIR(RED_ON_WHITE); /* hearts */
- letters[1] = 's' | COLOR_PAIR(BLACK_ON_WHITE); /* spades */
- letters[2] = 'd' | COLOR_PAIR(RED_ON_WHITE); /* diamonds */
- letters[3] = 'c' | COLOR_PAIR(BLACK_ON_WHITE); /* clubs */
+ letters[0] = OR_COLORS('h', RED_ON_WHITE); /* hearts */
+ letters[1] = OR_COLORS('s', BLACK_ON_WHITE); /* spades */
+ letters[2] = OR_COLORS('d', RED_ON_WHITE); /* diamonds */
+ letters[3] = OR_COLORS('c', BLACK_ON_WHITE); /* clubs */
#if defined(__i386__) && defined(A_ALTCHARSET)
- glyphs[0] = '\003' | A_ALTCHARSET | COLOR_PAIR(RED_ON_WHITE); /* hearts */
- glyphs[1] = '\006' | A_ALTCHARSET | COLOR_PAIR(BLACK_ON_WHITE); /* spades */
- glyphs[2] = '\004' | A_ALTCHARSET | COLOR_PAIR(RED_ON_WHITE); /* diamonds */
- glyphs[3] = '\005' | A_ALTCHARSET | COLOR_PAIR(BLACK_ON_WHITE); /* clubs */
+ glyphs[0] = PC_COLORS('\003', RED_ON_WHITE); /* hearts */
+ glyphs[1] = PC_COLORS('\006', BLACK_ON_WHITE); /* spades */
+ glyphs[2] = PC_COLORS('\004', RED_ON_WHITE); /* diamonds */
+ glyphs[3] = PC_COLORS('\005', BLACK_ON_WHITE); /* clubs */
#endif
#endif
* v2.0 featuring strict ANSI/POSIX conformance, November 1993.
* v2.1 with ncurses mouse support, September 1995
*
- * $Id: bs.c,v 1.22 1997/12/20 15:11:53 tom Exp $
+ * $Id: bs.c,v 1.24 1999/08/21 23:14:38 tom Exp $
*/
#include <test.priv.h>
static bool checkplace(int b, ship_t *ss, int vis);
+#define SHIPIT(name, symbol, length) { name, 0, symbol, length, 0,0, 0, FALSE }
+
static ship_t plyship[SHIPTYPES] =
{
- { carrier, 0, 'A', 5},
- { battle, 0, 'B', 4},
- { destroy, 0, 'D', 3},
- { sub, 0, 'S', 3},
- { ptboat, 0, 'P', 2},
+ SHIPIT(carrier, 'A', 5),
+ SHIPIT(battle, 'B', 4),
+ SHIPIT(destroy, 'D', 3),
+ SHIPIT(sub, 'S', 3),
+ SHIPIT(ptboat, 'P', 2),
};
static ship_t cpuship[SHIPTYPES] =
{
- { carrier, 0, 'A', 5},
- { battle, 0, 'B', 4},
- { destroy, 0, 'D', 3},
- { sub, 0, 'S', 3},
- { ptboat, 0, 'P', 2},
+ SHIPIT(carrier, 'A', 5),
+ SHIPIT(battle, 'B', 4),
+ SHIPIT(destroy, 'D', 3),
+ SHIPIT(sub, 'S', 3),
+ SHIPIT(ptboat, 'P', 2),
};
/* "Hits" board, and main board. */
hits[PLAYER][curx][cury] = (hit ? MARK_HIT : MARK_MISS);
cgoto(cury, curx);
#ifdef A_COLOR
- if (has_colors())
+ if (has_colors()) {
if (hit)
attron(COLOR_PAIR(COLOR_RED));
else
attron(COLOR_PAIR(COLOR_GREEN));
+ }
#endif /* A_COLOR */
(void) addch((chtype)hits[PLAYER][curx][cury]);
#ifdef A_COLOR
pgoto(y, x);
#ifdef A_COLOR
- if (has_colors())
+ if (has_colors()) {
if (hit)
attron(COLOR_PAIR(COLOR_RED));
else
attron(COLOR_PAIR(COLOR_GREEN));
+ }
#endif /* A_COLOR */
(void)addch((chtype)(hit ? SHOWHIT : SHOWSPLASH));
#ifdef A_COLOR
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/*
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999
+ *
+ * $Id: cardfile.c,v 1.2 1999/06/16 00:41:57 tom Exp $
+ *
+ * File format: text beginning in column 1 is a title; other text forms the content.
+ */
+
+#include <test.priv.h>
+
+#include <form.h>
+#include <panel.h>
+
+#include <string.h>
+#include <ctype.h>
+
+#define VISIBLE_CARDS 10
+#define OFFSET_CARD 2
+
+#ifndef CTRL
+#define CTRL(x) ((x) & 0x1f)
+#endif
+
+typedef struct _card {
+ struct _card *link;
+ PANEL *panel;
+ FORM *form;
+ char *title;
+ char *content;
+} CARD;
+
+static CARD *all_cards;
+static char default_name[] = "cardfile.dat";
+
+#if !HAVE_STRDUP
+#define strdup my_strdup
+static char *strdup (char *s)
+{
+ char *p = (char *)malloc(strlen(s)+1);
+ if (p)
+ strcpy(p, s);
+ return(p);
+}
+#endif /* not HAVE_STRDUP */
+
+static char *skip(char *buffer)
+{
+ while (isspace(*buffer))
+ buffer++;
+ return buffer;
+}
+
+static void trim(char *buffer)
+{
+ unsigned n = strlen(buffer);
+ while (n-- && isspace(buffer[n]))
+ buffer[n] = 0;
+}
+
+/*******************************************************************************/
+
+static CARD *add_title(const char *title)
+{
+ CARD *card, *p, *q;
+
+ for (p = all_cards, q = 0; p != 0; q = p, p = p->link)
+ {
+ int cmp = strcmp(p->title, title);
+ if (cmp == 0)
+ return p;
+ if (cmp > 0)
+ break;
+ }
+
+ card = (CARD *)calloc(1, sizeof(CARD));
+ card->title = strdup(title);
+ card->content = strdup("");
+
+ if (q == 0)
+ {
+ card->link = all_cards;
+ all_cards = card;
+ }
+ else
+ {
+ card->link = q->link;
+ q->link = card;
+ }
+
+ return card;
+}
+
+static void add_content(CARD *card, char *content)
+{
+ unsigned total, offset;
+
+ content = skip(content);
+ if ((total = strlen(content)) != 0)
+ {
+ if ((offset = strlen(card->content)) != 0)
+ {
+ total += 1 + offset;
+ card->content = (char *)realloc(card->content, total + 1);
+ strcpy(card->content + offset++, " ");
+ }
+ else
+ {
+ card->content = (char *)malloc(total + 1);
+ }
+ strcpy(card->content + offset, content);
+ }
+}
+
+static CARD *find_card(char *title)
+{
+ CARD *card;
+
+ for (card = all_cards; card != 0; card = card->link)
+ if (!strcmp(card->title, title))
+ break;
+
+ return card;
+}
+
+static void read_data(char *fname)
+{
+ FILE *fp;
+ CARD *card = 0;
+ char buffer[BUFSIZ];
+
+ if ((fp = fopen(fname, "r")) != 0)
+ {
+ while (fgets(buffer, sizeof(buffer), fp))
+ {
+ trim(buffer);
+ if (isspace(*buffer))
+ {
+ if (card == 0)
+ card = add_title("");
+ add_content(card, buffer);
+ }
+ else if ((card = find_card(buffer)) == 0)
+ {
+ card = add_title(buffer);
+ }
+ }
+ fclose(fp);
+ }
+}
+
+/*******************************************************************************/
+
+static void write_data(const char *fname)
+{
+ FILE *fp;
+ CARD *p = 0;
+ int n;
+
+ if (!strcmp(fname, default_name))
+ fname = "cardfile.out";
+
+ if ((fp = fopen(fname, "w")) != 0)
+ {
+ for (p = all_cards; p != 0; p = p->link)
+ {
+ FIELD **f = form_fields(p->form);
+ for (n = 0; f[n] != 0; n++)
+ {
+ char *s = field_buffer(f[n], 0);
+ if (s != 0
+ && (s = strdup(s)) != 0)
+ {
+ trim(s);
+ fprintf(fp, "%s%s\n", n ? "\t" : "", s);
+ free(s);
+ }
+ }
+ }
+ fclose(fp);
+ }
+}
+
+/*******************************************************************************/
+
+/*
+ * Count the cards
+ */
+static int count_cards(void)
+{
+ CARD *p;
+ int count = 0;
+
+ for (p = all_cards; p != 0; p = p->link)
+ count++;
+
+ return count;
+}
+
+/*
+ * Shuffle the panels to keep them in a natural hierarchy.
+ */
+static void order_cards(CARD *first, int depth)
+{
+ if (first)
+ {
+ if (depth && first->link)
+ order_cards(first->link, depth-1);
+ top_panel(first->panel);
+ }
+}
+
+/*
+ * Return the next card in the list
+ */
+static CARD *next_card(CARD *now)
+{
+ if (now->link)
+ now = now->link;
+ return now;
+}
+
+/*
+ * Return the previous card in the list
+ */
+static CARD *prev_card(CARD *now)
+{
+ CARD *p;
+ for (p = all_cards; p != 0; p = p->link)
+ if (p->link == now)
+ return p;
+ return now;
+}
+
+
+/*******************************************************************************/
+
+static int form_virtualize(WINDOW *w)
+{
+ int c = wgetch(w);
+
+ switch(c)
+ {
+ case CTRL('W'):
+ return(MAX_FORM_COMMAND + 4);
+ case CTRL('N'):
+ return(MAX_FORM_COMMAND + 3);
+ case CTRL('P'):
+ return(MAX_FORM_COMMAND + 2);
+ case CTRL('Q'):
+ case 033:
+ return(MAX_FORM_COMMAND + 1);
+
+ case KEY_BACKSPACE:
+ return(REQ_DEL_PREV);
+ case KEY_DC:
+ return(REQ_DEL_CHAR);
+ case KEY_LEFT:
+ return(REQ_LEFT_CHAR);
+ case KEY_RIGHT:
+ return(REQ_RIGHT_CHAR);
+
+ case KEY_DOWN:
+ case KEY_NEXT:
+ return(REQ_NEXT_FIELD);
+ case KEY_UP:
+ case KEY_PREVIOUS:
+ return(REQ_PREV_FIELD);
+
+ default:
+ return(c);
+ }
+}
+
+/*******************************************************************************/
+
+static void cardfile(char *fname)
+{
+ WINDOW *win;
+ CARD *p;
+ CARD *top_card;
+ int visible_cards = count_cards();
+ int panel_wide = COLS - (visible_cards * OFFSET_CARD);
+ int panel_high = LINES - (visible_cards * OFFSET_CARD) - 5;
+ int form_wide = panel_wide - 2;
+ int form_high = panel_high - 2;
+ int x = (visible_cards - 1) * OFFSET_CARD;
+ int y = 0;
+ int ch;
+ int finished = FALSE;
+
+ move(LINES - 3, 0);
+ addstr("^Q/ESC -- exit form ^W -- writes data to file\n");
+ addstr("^N -- go to next card ^P -- go to previous card\n");
+ addstr("Arrow keys move left/right within a field, up/down between fields");
+
+ /* make a panel for each CARD */
+ for (p = all_cards; p != 0; p = p->link)
+ {
+ FIELD **f = (FIELD **)calloc(3, sizeof(FIELD *));
+
+ win = newwin(panel_high, panel_wide, x, y);
+ keypad(win, TRUE);
+ p->panel = new_panel(win);
+ box(win, 0, 0);
+
+ /* ...and a form in each panel */
+ f[0] = new_field(1, form_wide, 0, 0, 0, 0);
+ set_field_back(f[0], A_REVERSE);
+ set_field_buffer(f[0], 0, p->title);
+
+ f[1] = new_field(form_high-1, form_wide, 1, 0, 0, 0);
+ set_field_buffer(f[1], 0, p->content);
+ set_field_just(f[1], JUSTIFY_LEFT);
+
+ f[2] = 0;
+
+ p->form = new_form(f);
+ set_form_win(p->form, win);
+ set_form_sub(p->form, derwin(win, form_high, form_wide, 1, 1));
+ post_form(p->form);
+
+ x -= OFFSET_CARD;
+ y += OFFSET_CARD;
+ }
+
+ order_cards(top_card = all_cards, visible_cards);
+
+ update_panels();
+
+ while (!finished)
+ {
+ update_panels();
+ doupdate();
+
+ switch(form_driver(top_card->form, ch = form_virtualize(panel_window(top_card->panel))))
+ {
+ case E_OK:
+ break;
+ case E_UNKNOWN_COMMAND:
+ switch (ch) {
+ case MAX_FORM_COMMAND+1:
+ finished = TRUE;
+ break;
+ case MAX_FORM_COMMAND+2:
+ top_card = prev_card(top_card);
+ order_cards(top_card, visible_cards);
+ break;
+ case MAX_FORM_COMMAND+3:
+ top_card = next_card(top_card);
+ order_cards(top_card, visible_cards);
+ break;
+ case MAX_FORM_COMMAND+4:
+ write_data(fname);
+ break;
+ default:
+ beep();
+ break;
+ }
+ break;
+ default:
+ flash();
+ break;
+ }
+ }
+}
+
+/*******************************************************************************/
+
+int main(int argc, char *argv[])
+{
+ int n;
+
+ initscr();
+ cbreak();
+ noecho();
+
+ if (argc > 1)
+ {
+ for (n = 1; n < argc; n++)
+ read_data(argv[n]);
+ cardfile(argv[1]);
+ }
+ else
+ {
+ read_data(default_name);
+ cardfile(default_name);
+ }
+
+ endwin();
+
+ return EXIT_SUCCESS;
+}
--- /dev/null
+title 1
+ Some text for title1
+ and some more text
+title 2
+ The quicker brown fox ran all over the lazy dog.
+put a card before the first two
+ This is an example of a simple cardfile.
+show a fourth card
+ The fourth card
+ has a large amount of data,
+ more than the other cards.
+ At least, that is what I thought it should do, since I want to see how well
+ the forms package handles justification.
--- /dev/null
+#! /bin/sh
+
+# Guess values for system-dependent variables and create Makefiles.
+# Generated automatically using autoconf version 2.13.19990117
+# Copyright (C) 1992, 93, 94, 95, 96 Free Software Foundation, Inc.
+#
+# This configure script is free software; the Free Software Foundation
+# gives unlimited permission to copy, distribute and modify it.
+
+# Defaults:
+ac_help=
+ac_default_prefix=/usr/local
+# Any additions from configure.in:
+
+# Initialize some variables set by options.
+# The variables have the same names as the options, with
+# dashes changed to underlines.
+build=NONE
+cache_file=./config.cache
+exec_prefix=NONE
+host=NONE
+no_create=
+nonopt=NONE
+no_recursion=
+prefix=NONE
+program_prefix=NONE
+program_suffix=NONE
+program_transform_name=s,x,x,
+silent=
+site=
+srcdir=
+target=NONE
+verbose=
+x_includes=NONE
+x_libraries=NONE
+bindir='${exec_prefix}/bin'
+sbindir='${exec_prefix}/sbin'
+libexecdir='${exec_prefix}/libexec'
+datadir='${prefix}/share'
+sysconfdir='${prefix}/etc'
+sharedstatedir='${prefix}/com'
+localstatedir='${prefix}/var'
+libdir='${exec_prefix}/lib'
+includedir='${prefix}/include'
+oldincludedir='/usr/include'
+infodir='${prefix}/info'
+mandir='${prefix}/man'
+
+# Initialize some other variables.
+subdirs=
+MFLAGS= MAKEFLAGS=
+SHELL=${CONFIG_SHELL-/bin/sh}
+# Maximum number of lines to put in a shell here document.
+ac_max_here_lines=12
+
+ac_prev=
+for ac_option
+do
+
+ # If the previous option needs an argument, assign it.
+ if test -n "$ac_prev"; then
+ eval "$ac_prev=\$ac_option"
+ ac_prev=
+ continue
+ fi
+
+ case "$ac_option" in
+ -*=*) ac_optarg=`echo "$ac_option" | sed 's/[-_a-zA-Z0-9]*=//'` ;;
+ *) ac_optarg= ;;
+ esac
+
+ # Accept the important Cygnus configure options, so we can diagnose typos.
+
+ case "$ac_option" in
+
+ -bindir | --bindir | --bindi | --bind | --bin | --bi)
+ ac_prev=bindir ;;
+ -bindir=* | --bindir=* | --bindi=* | --bind=* | --bin=* | --bi=*)
+ bindir="$ac_optarg" ;;
+
+ -build | --build | --buil | --bui | --bu)
+ ac_prev=build ;;
+ -build=* | --build=* | --buil=* | --bui=* | --bu=*)
+ build="$ac_optarg" ;;
+
+ -cache-file | --cache-file | --cache-fil | --cache-fi \
+ | --cache-f | --cache- | --cache | --cach | --cac | --ca | --c)
+ ac_prev=cache_file ;;
+ -cache-file=* | --cache-file=* | --cache-fil=* | --cache-fi=* \
+ | --cache-f=* | --cache-=* | --cache=* | --cach=* | --cac=* | --ca=* | --c=*)
+ cache_file="$ac_optarg" ;;
+
+ -datadir | --datadir | --datadi | --datad | --data | --dat | --da)
+ ac_prev=datadir ;;
+ -datadir=* | --datadir=* | --datadi=* | --datad=* | --data=* | --dat=* \
+ | --da=*)
+ datadir="$ac_optarg" ;;
+
+ -disable-* | --disable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*disable-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ eval "enable_${ac_feature}=no" ;;
+
+ -enable-* | --enable-*)
+ ac_feature=`echo $ac_option|sed -e 's/-*enable-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_feature| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_feature: invalid feature name" 1>&2; exit 1; }
+ fi
+ ac_feature=`echo $ac_feature| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "enable_${ac_feature}='$ac_optarg'" ;;
+
+ -exec-prefix | --exec_prefix | --exec-prefix | --exec-prefi \
+ | --exec-pref | --exec-pre | --exec-pr | --exec-p | --exec- \
+ | --exec | --exe | --ex)
+ ac_prev=exec_prefix ;;
+ -exec-prefix=* | --exec_prefix=* | --exec-prefix=* | --exec-prefi=* \
+ | --exec-pref=* | --exec-pre=* | --exec-pr=* | --exec-p=* | --exec-=* \
+ | --exec=* | --exe=* | --ex=*)
+ exec_prefix="$ac_optarg" ;;
+
+ -gas | --gas | --ga | --g)
+ # Obsolete; use --with-gas.
+ with_gas=yes ;;
+
+ -help | --help | --hel | --he)
+ # Omit some internal or obsolete options to make the list less imposing.
+ # This message is too long to be a string in the A/UX 3.1 sh.
+ cat << EOF
+Usage: configure [options] [host]
+Options: [defaults in brackets after descriptions]
+Configuration:
+ --cache-file=FILE cache test results in FILE
+ --help print this message
+ --no-create do not create output files
+ --quiet, --silent do not print \`checking...' messages
+ --version print the version of autoconf that created configure
+Directory and file names:
+ --prefix=PREFIX install architecture-independent files in PREFIX
+ [$ac_default_prefix]
+ --exec-prefix=EPREFIX install architecture-dependent files in EPREFIX
+ [same as prefix]
+ --bindir=DIR user executables in DIR [EPREFIX/bin]
+ --sbindir=DIR system admin executables in DIR [EPREFIX/sbin]
+ --libexecdir=DIR program executables in DIR [EPREFIX/libexec]
+ --datadir=DIR read-only architecture-independent data in DIR
+ [PREFIX/share]
+ --sysconfdir=DIR read-only single-machine data in DIR [PREFIX/etc]
+ --sharedstatedir=DIR modifiable architecture-independent data in DIR
+ [PREFIX/com]
+ --localstatedir=DIR modifiable single-machine data in DIR [PREFIX/var]
+ --libdir=DIR object code libraries in DIR [EPREFIX/lib]
+ --includedir=DIR C header files in DIR [PREFIX/include]
+ --oldincludedir=DIR C header files for non-gcc in DIR [/usr/include]
+ --infodir=DIR info documentation in DIR [PREFIX/info]
+ --mandir=DIR man documentation in DIR [PREFIX/man]
+ --srcdir=DIR find the sources in DIR [configure dir or ..]
+ --program-prefix=PREFIX prepend PREFIX to installed program names
+ --program-suffix=SUFFIX append SUFFIX to installed program names
+ --program-transform-name=PROGRAM
+ run sed PROGRAM on installed program names
+EOF
+ cat << EOF
+Host type:
+ --build=BUILD configure for building on BUILD [BUILD=HOST]
+ --host=HOST configure for HOST [guessed]
+ --target=TARGET configure for TARGET [TARGET=HOST]
+Features and packages:
+ --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no)
+ --enable-FEATURE[=ARG] include FEATURE [ARG=yes]
+ --with-PACKAGE[=ARG] use PACKAGE [ARG=yes]
+ --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no)
+ --x-includes=DIR X include files are in DIR
+ --x-libraries=DIR X library files are in DIR
+EOF
+cat <<EOF
+--enable and --with options recognized:
+ --with-5lib use SunOS sysv-libraries
+ --with-ncurses use ncurses-libraries (installed)
+EOF
+ exit 0 ;;
+
+ -host | --host | --hos | --ho)
+ ac_prev=host ;;
+ -host=* | --host=* | --hos=* | --ho=*)
+ host="$ac_optarg" ;;
+
+ -includedir | --includedir | --includedi | --included | --include \
+ | --includ | --inclu | --incl | --inc)
+ ac_prev=includedir ;;
+ -includedir=* | --includedir=* | --includedi=* | --included=* | --include=* \
+ | --includ=* | --inclu=* | --incl=* | --inc=*)
+ includedir="$ac_optarg" ;;
+
+ -infodir | --infodir | --infodi | --infod | --info | --inf)
+ ac_prev=infodir ;;
+ -infodir=* | --infodir=* | --infodi=* | --infod=* | --info=* | --inf=*)
+ infodir="$ac_optarg" ;;
+
+ -libdir | --libdir | --libdi | --libd)
+ ac_prev=libdir ;;
+ -libdir=* | --libdir=* | --libdi=* | --libd=*)
+ libdir="$ac_optarg" ;;
+
+ -libexecdir | --libexecdir | --libexecdi | --libexecd | --libexec \
+ | --libexe | --libex | --libe)
+ ac_prev=libexecdir ;;
+ -libexecdir=* | --libexecdir=* | --libexecdi=* | --libexecd=* | --libexec=* \
+ | --libexe=* | --libex=* | --libe=*)
+ libexecdir="$ac_optarg" ;;
+
+ -localstatedir | --localstatedir | --localstatedi | --localstated \
+ | --localstate | --localstat | --localsta | --localst \
+ | --locals | --local | --loca | --loc | --lo)
+ ac_prev=localstatedir ;;
+ -localstatedir=* | --localstatedir=* | --localstatedi=* | --localstated=* \
+ | --localstate=* | --localstat=* | --localsta=* | --localst=* \
+ | --locals=* | --local=* | --loca=* | --loc=* | --lo=*)
+ localstatedir="$ac_optarg" ;;
+
+ -mandir | --mandir | --mandi | --mand | --man | --ma | --m)
+ ac_prev=mandir ;;
+ -mandir=* | --mandir=* | --mandi=* | --mand=* | --man=* | --ma=* | --m=*)
+ mandir="$ac_optarg" ;;
+
+ -nfp | --nfp | --nf)
+ # Obsolete; use --without-fp.
+ with_fp=no ;;
+
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c)
+ no_create=yes ;;
+
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r)
+ no_recursion=yes ;;
+
+ -oldincludedir | --oldincludedir | --oldincludedi | --oldincluded \
+ | --oldinclude | --oldinclud | --oldinclu | --oldincl | --oldinc \
+ | --oldin | --oldi | --old | --ol | --o)
+ ac_prev=oldincludedir ;;
+ -oldincludedir=* | --oldincludedir=* | --oldincludedi=* | --oldincluded=* \
+ | --oldinclude=* | --oldinclud=* | --oldinclu=* | --oldincl=* | --oldinc=* \
+ | --oldin=* | --oldi=* | --old=* | --ol=* | --o=*)
+ oldincludedir="$ac_optarg" ;;
+
+ -prefix | --prefix | --prefi | --pref | --pre | --pr | --p)
+ ac_prev=prefix ;;
+ -prefix=* | --prefix=* | --prefi=* | --pref=* | --pre=* | --pr=* | --p=*)
+ prefix="$ac_optarg" ;;
+
+ -program-prefix | --program-prefix | --program-prefi | --program-pref \
+ | --program-pre | --program-pr | --program-p)
+ ac_prev=program_prefix ;;
+ -program-prefix=* | --program-prefix=* | --program-prefi=* \
+ | --program-pref=* | --program-pre=* | --program-pr=* | --program-p=*)
+ program_prefix="$ac_optarg" ;;
+
+ -program-suffix | --program-suffix | --program-suffi | --program-suff \
+ | --program-suf | --program-su | --program-s)
+ ac_prev=program_suffix ;;
+ -program-suffix=* | --program-suffix=* | --program-suffi=* \
+ | --program-suff=* | --program-suf=* | --program-su=* | --program-s=*)
+ program_suffix="$ac_optarg" ;;
+
+ -program-transform-name | --program-transform-name \
+ | --program-transform-nam | --program-transform-na \
+ | --program-transform-n | --program-transform- \
+ | --program-transform | --program-transfor \
+ | --program-transfo | --program-transf \
+ | --program-trans | --program-tran \
+ | --progr-tra | --program-tr | --program-t)
+ ac_prev=program_transform_name ;;
+ -program-transform-name=* | --program-transform-name=* \
+ | --program-transform-nam=* | --program-transform-na=* \
+ | --program-transform-n=* | --program-transform-=* \
+ | --program-transform=* | --program-transfor=* \
+ | --program-transfo=* | --program-transf=* \
+ | --program-trans=* | --program-tran=* \
+ | --progr-tra=* | --program-tr=* | --program-t=*)
+ program_transform_name="$ac_optarg" ;;
+
+ -q | -quiet | --quiet | --quie | --qui | --qu | --q \
+ | -silent | --silent | --silen | --sile | --sil)
+ silent=yes ;;
+
+ -sbindir | --sbindir | --sbindi | --sbind | --sbin | --sbi | --sb)
+ ac_prev=sbindir ;;
+ -sbindir=* | --sbindir=* | --sbindi=* | --sbind=* | --sbin=* \
+ | --sbi=* | --sb=*)
+ sbindir="$ac_optarg" ;;
+
+ -sharedstatedir | --sharedstatedir | --sharedstatedi \
+ | --sharedstated | --sharedstate | --sharedstat | --sharedsta \
+ | --sharedst | --shareds | --shared | --share | --shar \
+ | --sha | --sh)
+ ac_prev=sharedstatedir ;;
+ -sharedstatedir=* | --sharedstatedir=* | --sharedstatedi=* \
+ | --sharedstated=* | --sharedstate=* | --sharedstat=* | --sharedsta=* \
+ | --sharedst=* | --shareds=* | --shared=* | --share=* | --shar=* \
+ | --sha=* | --sh=*)
+ sharedstatedir="$ac_optarg" ;;
+
+ -site | --site | --sit)
+ ac_prev=site ;;
+ -site=* | --site=* | --sit=*)
+ site="$ac_optarg" ;;
+
+ -srcdir | --srcdir | --srcdi | --srcd | --src | --sr)
+ ac_prev=srcdir ;;
+ -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*)
+ srcdir="$ac_optarg" ;;
+
+ -sysconfdir | --sysconfdir | --sysconfdi | --sysconfd | --sysconf \
+ | --syscon | --sysco | --sysc | --sys | --sy)
+ ac_prev=sysconfdir ;;
+ -sysconfdir=* | --sysconfdir=* | --sysconfdi=* | --sysconfd=* | --sysconf=* \
+ | --syscon=* | --sysco=* | --sysc=* | --sys=* | --sy=*)
+ sysconfdir="$ac_optarg" ;;
+
+ -target | --target | --targe | --targ | --tar | --ta | --t)
+ ac_prev=target ;;
+ -target=* | --target=* | --targe=* | --targ=* | --tar=* | --ta=* | --t=*)
+ target="$ac_optarg" ;;
+
+ -v | -verbose | --verbose | --verbos | --verbo | --verb)
+ verbose=yes ;;
+
+ -version | --version | --versio | --versi | --vers)
+ echo "configure generated by autoconf version 2.13.19990117"
+ exit 0 ;;
+
+ -with-* | --with-*)
+ ac_package=`echo $ac_option|sed -e 's/-*with-//' -e 's/=.*//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-_a-zA-Z0-9]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ case "$ac_option" in
+ *=*) ;;
+ *) ac_optarg=yes ;;
+ esac
+ eval "with_${ac_package}='$ac_optarg'" ;;
+
+ -without-* | --without-*)
+ ac_package=`echo $ac_option|sed -e 's/-*without-//'`
+ # Reject names that are not valid shell variable names.
+ if test -n "`echo $ac_package| sed 's/[-a-zA-Z0-9_]//g'`"; then
+ { echo "configure: error: $ac_package: invalid package name" 1>&2; exit 1; }
+ fi
+ ac_package=`echo $ac_package| sed 's/-/_/g'`
+ eval "with_${ac_package}=no" ;;
+
+ --x)
+ # Obsolete; use --with-x.
+ with_x=yes ;;
+
+ -x-includes | --x-includes | --x-include | --x-includ | --x-inclu \
+ | --x-incl | --x-inc | --x-in | --x-i)
+ ac_prev=x_includes ;;
+ -x-includes=* | --x-includes=* | --x-include=* | --x-includ=* | --x-inclu=* \
+ | --x-incl=* | --x-inc=* | --x-in=* | --x-i=*)
+ x_includes="$ac_optarg" ;;
+
+ -x-libraries | --x-libraries | --x-librarie | --x-librari \
+ | --x-librar | --x-libra | --x-libr | --x-lib | --x-li | --x-l)
+ ac_prev=x_libraries ;;
+ -x-libraries=* | --x-libraries=* | --x-librarie=* | --x-librari=* \
+ | --x-librar=* | --x-libra=* | --x-libr=* | --x-lib=* | --x-li=* | --x-l=*)
+ x_libraries="$ac_optarg" ;;
+
+ -*) { echo "configure: error: $ac_option: invalid option; use --help to show usage" 1>&2; exit 1; }
+ ;;
+
+ *)
+ if test -n "`echo $ac_option| sed 's/[-a-z0-9.]//g'`"; then
+ echo "configure: warning: $ac_option: invalid host type" 1>&2
+ fi
+ if test "x$nonopt" != xNONE; then
+ { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; }
+ fi
+ nonopt="$ac_option"
+ ;;
+
+ esac
+done
+
+if test -n "$ac_prev"; then
+ { echo "configure: error: missing argument to --`echo $ac_prev | sed 's/_/-/g'`" 1>&2; exit 1; }
+fi
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+# File descriptor usage:
+# 0 standard input
+# 1 file creation
+# 2 errors and warnings
+# 3 some systems may open it to /dev/tty
+# 4 used on the Kubota Titan
+# 6 checking for... messages and results
+# 5 compiler messages saved in config.log
+if test "$silent" = yes; then
+ exec 6>/dev/null
+else
+ exec 6>&1
+fi
+exec 5>./config.log
+
+echo "\
+This file contains any messages produced by compilers while
+running configure, to aid debugging if configure makes a mistake.
+" 1>&5
+
+# Strip out --no-create and --no-recursion so they do not pile up.
+# Also quote any args containing shell metacharacters.
+ac_configure_args=
+for ac_arg
+do
+ case "$ac_arg" in
+ -no-create | --no-create | --no-creat | --no-crea | --no-cre \
+ | --no-cr | --no-c) ;;
+ -no-recursion | --no-recursion | --no-recursio | --no-recursi \
+ | --no-recurs | --no-recur | --no-recu | --no-rec | --no-re | --no-r) ;;
+ *" "*|*" "*|*[\[\]\~\#\$\^\&\*\(\)\{\}\\\|\;\<\>\?]*)
+ ac_configure_args="$ac_configure_args '$ac_arg'" ;;
+ *) ac_configure_args="$ac_configure_args $ac_arg" ;;
+ esac
+done
+
+# NLS nuisances.
+# Only set these to C if already set. These must not be set unconditionally
+# because not all systems understand e.g. LANG=C (notably SCO).
+# Fixing LC_MESSAGES prevents Solaris sh from translating var values in `set'!
+# Non-C LC_CTYPE values break the ctype check.
+if test "${LANG+set}" = set; then LANG=C; export LANG; fi
+if test "${LC_ALL+set}" = set; then LC_ALL=C; export LC_ALL; fi
+if test "${LC_MESSAGES+set}" = set; then LC_MESSAGES=C; export LC_MESSAGES; fi
+if test "${LC_CTYPE+set}" = set; then LC_CTYPE=C; export LC_CTYPE; fi
+
+# confdefs.h avoids OS command line length limits that DEFS can exceed.
+rm -rf conftest* confdefs.h
+# AIX cpp loses on an empty file, so make sure it contains at least a newline.
+echo > confdefs.h
+
+# A filename unique to this package, relative to the directory that
+# configure is in, which we can look for to find out if srcdir is correct.
+ac_unique_file=ncurses.c
+
+# Find the source files, if location was not specified.
+if test -z "$srcdir"; then
+ ac_srcdir_defaulted=yes
+ # Try the directory containing this script, then its parent.
+ ac_prog=$0
+ ac_confdir=`echo $ac_prog|sed 's%/[^/][^/]*$%%'`
+ test "x$ac_confdir" = "x$ac_prog" && ac_confdir=.
+ srcdir=$ac_confdir
+ if test ! -r $srcdir/$ac_unique_file; then
+ srcdir=..
+ fi
+else
+ ac_srcdir_defaulted=no
+fi
+if test ! -r $srcdir/$ac_unique_file; then
+ if test "$ac_srcdir_defaulted" = yes; then
+ { echo "configure: error: can not find sources in $ac_confdir or .." 1>&2; exit 1; }
+ else
+ { echo "configure: error: can not find sources in $srcdir" 1>&2; exit 1; }
+ fi
+fi
+srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'`
+
+# Prefer explicitly selected file to automatically selected ones.
+if test -z "$CONFIG_SITE"; then
+ if test "x$prefix" != xNONE; then
+ CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site"
+ else
+ CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site"
+ fi
+fi
+for ac_site_file in $CONFIG_SITE; do
+ if test -r "$ac_site_file"; then
+ echo "loading site script $ac_site_file"
+ . "$ac_site_file"
+ fi
+done
+
+if test -r "$cache_file"; then
+ echo "loading cache $cache_file"
+ . $cache_file
+else
+ echo "creating cache $cache_file"
+ > $cache_file
+fi
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+ac_exeext=
+ac_objext=o
+if (echo "testing\c"; echo 1,2,3) | grep c >/dev/null; then
+ # Stardent Vistra SVR4 grep lacks -e, says ghazi@caip.rutgers.edu.
+ if (echo -n testing; echo 1,2,3) | sed s/-n/xn/ | grep xn >/dev/null; then
+ ac_n= ac_c='
+' ac_t=' '
+ else
+ ac_n=-n ac_c= ac_t=
+ fi
+else
+ ac_n= ac_c='\c' ac_t=
+fi
+
+
+
+
+# Extract the first word of "gcc", so it can be a program name with args.
+set dummy gcc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:532: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="gcc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+if test -z "$CC"; then
+ # Extract the first word of "cc", so it can be a program name with args.
+set dummy cc; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:562: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_prog_rejected=no
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ if test "$ac_dir/$ac_word" = "/usr/ucb/cc"; then
+ ac_prog_rejected=yes
+ continue
+ fi
+ ac_cv_prog_CC="cc"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+if test $ac_prog_rejected = yes; then
+ # We found a bogon in the path, so make sure we never use it.
+ set dummy $ac_cv_prog_CC
+ shift
+ if test $# -gt 0; then
+ # We chose a different compiler from the bogus one.
+ # However, it has the same basename, so the bogon will be chosen
+ # first if we set CC to just the basename; use the full file name.
+ shift
+ set dummy "$ac_dir/$ac_word" "$@"
+ shift
+ ac_cv_prog_CC="$@"
+ fi
+fi
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ if test -z "$CC"; then
+ case "`uname -s`" in
+ *win32* | *WIN32*)
+ # Extract the first word of "cl", so it can be a program name with args.
+set dummy cl; ac_word=$2
+echo $ac_n "checking for $ac_word""... $ac_c" 1>&6
+echo "configure:613: checking for $ac_word" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ if test -n "$CC"; then
+ ac_cv_prog_CC="$CC" # Let the user override the test.
+else
+ IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":"
+ ac_dummy="$PATH"
+ for ac_dir in $ac_dummy; do
+ test -z "$ac_dir" && ac_dir=.
+ if test -f $ac_dir/$ac_word; then
+ ac_cv_prog_CC="cl"
+ break
+ fi
+ done
+ IFS="$ac_save_ifs"
+fi
+fi
+CC="$ac_cv_prog_CC"
+if test -n "$CC"; then
+ echo "$ac_t""$CC" 1>&6
+else
+ echo "$ac_t""no" 1>&6
+fi
+ ;;
+ esac
+ fi
+ test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; }
+fi
+
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works""... $ac_c" 1>&6
+echo "configure:645: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) works" >&5
+
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+cat > conftest.$ac_ext << EOF
+
+#line 656 "configure"
+#include "confdefs.h"
+
+main(){return(0);}
+EOF
+if { (eval echo configure:661: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ ac_cv_prog_cc_works=yes
+ # If we can't run a trivial program, we are probably using a cross compiler.
+ if (./conftest; exit) 2>/dev/null; then
+ ac_cv_prog_cc_cross=no
+ else
+ ac_cv_prog_cc_cross=yes
+ fi
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ ac_cv_prog_cc_works=no
+fi
+rm -fr conftest*
+ac_ext=c
+# CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options.
+ac_cpp='$CPP $CPPFLAGS'
+ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5'
+ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5'
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo "$ac_t""$ac_cv_prog_cc_works" 1>&6
+if test $ac_cv_prog_cc_works = no; then
+ { echo "configure: error: installation or configuration problem: C compiler cannot create executables." 1>&2; exit 1; }
+fi
+echo $ac_n "checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler""... $ac_c" 1>&6
+echo "configure:687: checking whether the C compiler ($CC $CFLAGS $LDFLAGS) is a cross-compiler" >&5
+echo "$ac_t""$ac_cv_prog_cc_cross" 1>&6
+cross_compiling=$ac_cv_prog_cc_cross
+
+echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6
+echo "configure:692: checking whether we are using GNU C" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.c <<EOF
+#ifdef __GNUC__
+ yes;
+#endif
+EOF
+if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:701: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then
+ ac_cv_prog_gcc=yes
+else
+ ac_cv_prog_gcc=no
+fi
+fi
+
+echo "$ac_t""$ac_cv_prog_gcc" 1>&6
+
+if test $ac_cv_prog_gcc = yes; then
+ GCC=yes
+else
+ GCC=
+fi
+
+ac_test_CFLAGS="${CFLAGS+set}"
+ac_save_CFLAGS="$CFLAGS"
+CFLAGS=
+echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6
+echo "configure:720: checking whether ${CC-cc} accepts -g" >&5
+if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ echo 'void f(){}' > conftest.c
+if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then
+ ac_cv_prog_cc_g=yes
+else
+ ac_cv_prog_cc_g=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$ac_cv_prog_cc_g" 1>&6
+if test "$ac_test_CFLAGS" = set; then
+ CFLAGS="$ac_save_CFLAGS"
+elif test $ac_cv_prog_cc_g = yes; then
+ if test "$GCC" = yes; then
+ CFLAGS="-g -O2"
+ else
+ CFLAGS="-g"
+ fi
+else
+ if test "$GCC" = yes; then
+ CFLAGS="-O2"
+ else
+ CFLAGS=
+ fi
+fi
+
+
+CC_G_OPT="-g"
+CC_SHARED_OPTS=unknown
+CPPFLAGS="$CPPFLAGS"
+DFT_DEP_SUFFIX=""
+DFT_OBJ_SUBDIR=`pwd|sed -e's:.*/::'`
+DFT_UPR_MODEL="NORMAL"
+ECHO_LINK='@ echo linking $@ ... ;'
+EXTRA_LIBS=""
+LD="ld"
+LDFLAGS_SHARED=""
+LD_MODEL=""
+LD_SHARED_OPTS=""
+LIB_NAME=curses
+LIB_PREFIX="-l"
+LINK_TESTS=""
+LINT=lint
+LINT_OPTS=""
+LOCAL_LDFLAGS=""
+MATH_LIB="-lm"
+PROG_EXT=""
+TEST_ARGS=""
+TEST_DEPS=""
+cf_cv_abi_version=""
+cf_cv_rel_version=""
+
+
+# Check whether --with-5lib or --without-5lib was given.
+if test "${with_5lib+set}" = set; then
+ withval="$with_5lib"
+ LIBS="-L/usr/5lib $LIBS"
+ CPPFLAGS="$CPPFLAGS -I/usr/5include"
+fi
+
+
+
+# Check whether --with-ncurses or --without-ncurses was given.
+if test "${with_ncurses+set}" = set; then
+ withval="$with_ncurses"
+ echo $ac_n "checking for initscr""... $ac_c" 1>&6
+echo "configure:791: checking for initscr" >&5
+if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 796 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char initscr(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char initscr();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_initscr) || defined (__stub___initscr)
+choke me
+#else
+initscr();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:819: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_initscr=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_initscr=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+
+ echo $ac_n "checking for Gpm_Open in -lgpm""... $ac_c" 1>&6
+echo "configure:838: checking for Gpm_Open in -lgpm" >&5
+ac_lib_var=`echo gpm'_'Gpm_Open | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lgpm $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 846 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char Gpm_Open();
+
+int main() {
+Gpm_Open()
+; return 0; }
+EOF
+if { (eval echo configure:857: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo gpm | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lgpm $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+ LIB_NAME=ncurses
+ for p in $HOME /usr/local /usr
+ do
+ if test -f $p/include/ncurses/curses.h
+ then
+ CPPFLAGS="$CPPFLAGS -I$p/include/ncurses"
+ test $p != /usr && LIBS="-L$p/lib $LIBS"
+ break
+ elif test $p != /usr
+ then
+ if test -f $p/include/curses.h
+ then
+ CPPFLAGS="$CPPFLAGS -I$p/include"
+ LIBS="-L$p/lib $LIBS"
+ break
+ fi
+ fi
+ done
+
+fi
+
+fi
+
+
+
+
+echo $ac_n "checking for initscr""... $ac_c" 1>&6
+echo "configure:911: checking for initscr" >&5
+if eval "test \"`echo '$''{'ac_cv_func_initscr'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 916 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char initscr(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char initscr();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_initscr) || defined (__stub___initscr)
+choke me
+#else
+initscr();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:939: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_initscr=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_initscr=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'initscr`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ :
+else
+ echo "$ac_t""no" 1>&6
+
+echo $ac_n "checking for initscr in -l$LIB_NAME""... $ac_c" 1>&6
+echo "configure:958: checking for initscr in -l$LIB_NAME" >&5
+ac_lib_var=`echo $LIB_NAME'_'initscr | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-l$LIB_NAME $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 966 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char initscr();
+
+int main() {
+initscr()
+; return 0; }
+EOF
+if { (eval echo configure:977: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo $LIB_NAME | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-l$LIB_NAME $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+fi
+
+echo $ac_n "checking for form_driver in -lform""... $ac_c" 1>&6
+echo "configure:1007: checking for form_driver in -lform" >&5
+ac_lib_var=`echo form'_'form_driver | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lform $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1015 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char form_driver();
+
+int main() {
+form_driver()
+; return 0; }
+EOF
+if { (eval echo configure:1026: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo form | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lform $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking for menu_driver in -lmenu""... $ac_c" 1>&6
+echo "configure:1054: checking for menu_driver in -lmenu" >&5
+ac_lib_var=`echo menu'_'menu_driver | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lmenu $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1062 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char menu_driver();
+
+int main() {
+menu_driver()
+; return 0; }
+EOF
+if { (eval echo configure:1073: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo menu | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lmenu $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+echo $ac_n "checking for new_panel in -lpanel""... $ac_c" 1>&6
+echo "configure:1101: checking for new_panel in -lpanel" >&5
+ac_lib_var=`echo panel'_'new_panel | sed 'y%./+-%__p_%'`
+if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ ac_save_LIBS="$LIBS"
+LIBS="-lpanel $LIBS"
+cat > conftest.$ac_ext <<EOF
+#line 1109 "configure"
+#include "confdefs.h"
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char new_panel();
+
+int main() {
+new_panel()
+; return 0; }
+EOF
+if { (eval echo configure:1120: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_lib_$ac_lib_var=no"
+fi
+rm -f conftest*
+LIBS="$ac_save_LIBS"
+
+fi
+if eval "test \"`echo '$ac_cv_lib_'$ac_lib_var`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_lib=HAVE_LIB`echo panel | sed -e 's/[^a-zA-Z0-9_]/_/g' \
+ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_lib 1
+EOF
+
+ LIBS="-lpanel $LIBS"
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+
+
+echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6
+echo "configure:1149: checking return type of signal handlers" >&5
+if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1154 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <signal.h>
+#ifdef signal
+#undef signal
+#endif
+#ifdef __cplusplus
+extern "C" void (*signal (int, void (*)(int)))(int);
+#else
+void (*signal ()) ();
+#endif
+
+int main() {
+int i;
+; return 0; }
+EOF
+if { (eval echo configure:1171: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_type_signal=void
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_type_signal=int
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_type_signal" 1>&6
+cat >> confdefs.h <<EOF
+#define RETSIGTYPE $ac_cv_type_signal
+EOF
+
+
+
+echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6
+echo "configure:1191: checking how to run the C preprocessor" >&5
+# On Suns, sometimes $CPP names a directory.
+if test -n "$CPP" && test -d "$CPP"; then
+ CPP=
+fi
+if test -z "$CPP"; then
+if eval "test \"`echo '$''{'ac_cv_prog_CPP'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ # This must be in double quotes, not single quotes, because CPP may get
+ # substituted into the Makefile and "${CC-cc}" will confuse make.
+ CPP="${CC-cc} -E"
+ # On the NeXT, cc -E runs the code through the compiler's parser,
+ # not just through cpp.
+ cat > conftest.$ac_ext <<EOF
+#line 1206 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1212: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -E -traditional-cpp"
+ cat > conftest.$ac_ext <<EOF
+#line 1223 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1229: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP="${CC-cc} -nologo -E"
+ cat > conftest.$ac_ext <<EOF
+#line 1240 "configure"
+#include "confdefs.h"
+#include <assert.h>
+Syntax Error
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1246: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ :
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ CPP=/lib/cpp
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+fi
+rm -f conftest*
+ ac_cv_prog_CPP="$CPP"
+fi
+ CPP="$ac_cv_prog_CPP"
+else
+ ac_cv_prog_CPP="$CPP"
+fi
+echo "$ac_t""$CPP" 1>&6
+
+echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6
+echo "configure:1271: checking for ANSI C header files" >&5
+if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1276 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+#include <stdarg.h>
+#include <string.h>
+#include <float.h>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1284: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ ac_cv_header_stdc=yes
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+if test $ac_cv_header_stdc = yes; then
+ # SunOS 4.x string.h does not declare mem*, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1301 "configure"
+#include "confdefs.h"
+#include <string.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "memchr" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI.
+cat > conftest.$ac_ext <<EOF
+#line 1319 "configure"
+#include "confdefs.h"
+#include <stdlib.h>
+EOF
+if (eval "$ac_cpp conftest.$ac_ext") 2>&5 |
+ egrep "free" >/dev/null 2>&1; then
+ :
+else
+ rm -rf conftest*
+ ac_cv_header_stdc=no
+fi
+rm -f conftest*
+
+fi
+
+if test $ac_cv_header_stdc = yes; then
+ # /bin/cc in Irix-4.0.5 gets non-ANSI ctype macros unless using -ansi.
+if test "$cross_compiling" = yes; then
+ :
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1340 "configure"
+#include "confdefs.h"
+#include <ctype.h>
+#define ISLOWER(c) ('a' <= (c) && (c) <= 'z')
+#define TOUPPER(c) (ISLOWER(c) ? 'A' + ((c) - 'a') : (c))
+#define XOR(e, f) (((e) && !(f)) || (!(e) && (f)))
+int main () { int i; for (i = 0; i < 256; i++)
+if (XOR (islower (i), ISLOWER (i)) || toupper (i) != TOUPPER (i)) exit(2);
+exit (0); }
+
+EOF
+if { (eval echo configure:1351: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null
+then
+ :
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -fr conftest*
+ ac_cv_header_stdc=no
+fi
+rm -fr conftest*
+fi
+
+fi
+fi
+
+echo "$ac_t""$ac_cv_header_stdc" 1>&6
+if test $ac_cv_header_stdc = yes; then
+ cat >> confdefs.h <<\EOF
+#define STDC_HEADERS 1
+EOF
+
+fi
+
+echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6
+echo "configure:1375: checking whether time.h and sys/time.h may both be included" >&5
+if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1380 "configure"
+#include "confdefs.h"
+#include <sys/types.h>
+#include <sys/time.h>
+#include <time.h>
+int main() {
+struct tm *tp;
+; return 0; }
+EOF
+if { (eval echo configure:1389: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ ac_cv_header_time=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ ac_cv_header_time=no
+fi
+rm -f conftest*
+fi
+
+echo "$ac_t""$ac_cv_header_time" 1>&6
+if test $ac_cv_header_time = yes; then
+ cat >> confdefs.h <<\EOF
+#define TIME_WITH_SYS_TIME 1
+EOF
+
+fi
+
+for ac_hdr in \
+form.h \
+getopt.h \
+menu.h \
+nc_alloc.h \
+panel.h \
+sys/ioctl.h \
+sys/select.h \
+sys/time.h \
+termios.h \
+unistd.h \
+
+do
+ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'`
+echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6
+echo "configure:1424: checking for $ac_hdr" >&5
+if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1429 "configure"
+#include "confdefs.h"
+#include <$ac_hdr>
+EOF
+ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out"
+{ (eval echo configure:1434: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }
+ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"`
+if test -z "$ac_err"; then
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=yes"
+else
+ echo "$ac_err" >&5
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_header_$ac_safe=no"
+fi
+rm -f conftest*
+fi
+if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_hdr=HAVE_`echo $ac_hdr | sed 'y%abcdefghijklmnopqrstuvwxyz./-%ABCDEFGHIJKLMNOPQRSTUVWXYZ___%'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_hdr 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+for ac_func in \
+curses_version \
+gettimeofday \
+napms \
+resizeterm \
+strdup \
+vsscanf \
+
+do
+echo $ac_n "checking for $ac_func""... $ac_c" 1>&6
+echo "configure:1471: checking for $ac_func" >&5
+if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+ cat > conftest.$ac_ext <<EOF
+#line 1476 "configure"
+#include "confdefs.h"
+/* System header to define __stub macros and hopefully few prototypes,
+ which can conflict with char $ac_func(); below. */
+#include <assert.h>
+/* Override any gcc2 internal prototype to avoid an error. */
+/* We use char because int might match the return type of a gcc2
+ builtin and then its argument prototype would still apply. */
+char $ac_func();
+
+int main() {
+
+/* The GNU C library defines this for functions which it implements
+ to always fail with ENOSYS. Some functions are actually named
+ something starting with __ and the normal name is an alias. */
+#if defined (__stub_$ac_func) || defined (__stub___$ac_func)
+choke me
+#else
+$ac_func();
+#endif
+
+; return 0; }
+EOF
+if { (eval echo configure:1499: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=yes"
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ eval "ac_cv_func_$ac_func=no"
+fi
+rm -f conftest*
+fi
+
+if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then
+ echo "$ac_t""yes" 1>&6
+ ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'`
+ cat >> confdefs.h <<EOF
+#define $ac_tr_func 1
+EOF
+
+else
+ echo "$ac_t""no" 1>&6
+fi
+done
+
+
+echo $ac_n "checking if sys/time.h conflicts with sys/select.h""... $ac_c" 1>&6
+echo "configure:1525: checking if sys/time.h conflicts with sys/select.h" >&5
+if eval "test \"`echo '$''{'cf_cv_sys_time_select'+set}'`\" = set"; then
+ echo $ac_n "(cached) $ac_c" 1>&6
+else
+
+cat > conftest.$ac_ext <<EOF
+#line 1531 "configure"
+#include "confdefs.h"
+
+#if HAVE_SYS_TIME_H
+#include <sys/time.h>
+#endif
+#if HAVE_SYS_SELECT_H
+#include <sys/select.h>
+#endif
+
+int main() {
+
+; return 0; }
+EOF
+if { (eval echo configure:1545: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then
+ rm -rf conftest*
+ cf_cv_sys_time_select=yes
+else
+ echo "configure: failed program was:" >&5
+ cat conftest.$ac_ext >&5
+ rm -rf conftest*
+ cf_cv_sys_time_select=no
+fi
+rm -f conftest*
+
+fi
+
+echo "$ac_t""$cf_cv_sys_time_select" 1>&6
+test $cf_cv_sys_time_select = yes && cat >> confdefs.h <<\EOF
+#define HAVE_SYS_TIME_SELECT 1
+EOF
+
+
+trap '' 1 2 15
+cat > confcache <<\EOF
+# This file is a shell script that caches the results of configure
+# tests run on this system so they can be shared between configure
+# scripts and configure runs. It is not useful on other systems.
+# If it contains results you don't want to keep, you may remove or edit it.
+#
+# By default, configure uses ./config.cache as the cache file,
+# creating it if it does not exist already. You can give configure
+# the --cache-file=FILE option to use a different cache file; that is
+# what configure does when it calls configure scripts in
+# subdirectories, so they share the cache.
+# Giving --cache-file=/dev/null disables caching, for debugging configure.
+# config.status only pays attention to the cache file if you give it the
+# --recheck option to rerun configure.
+#
+EOF
+# The following way of writing the cache mishandles newlines in values,
+# but we know of no workaround that is simple, portable, and efficient.
+# So, don't put newlines in cache variables' values.
+# Ultrix sh set writes to stderr and can't be redirected directly,
+# and sets the high bit in the cache file unless we assign to the vars.
+(set) 2>&1 |
+ case `(ac_space=' '; set | grep ac_space) 2>&1` in
+ *ac_space=\ *)
+ # `set' does not quote correctly, so add quotes (double-quote substitution
+ # turns \\\\ into \\, and sed turns \\ into \).
+ sed -n \
+ -e "s/'/'\\\\''/g" \
+ -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p"
+ ;;
+ *)
+ # `set' quotes correctly as required by POSIX, so do not add quotes.
+ sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p'
+ ;;
+ esac >> confcache
+if cmp -s $cache_file confcache; then
+ :
+else
+ if test -w $cache_file; then
+ echo "updating cache $cache_file"
+ cat confcache > $cache_file
+ else
+ echo "not updating unwritable cache $cache_file"
+ fi
+fi
+rm -f confcache
+
+trap 'rm -fr conftest* confdefs* core core.* *.core $ac_clean_files; exit 1' 1 2 15
+
+test "x$prefix" = xNONE && prefix=$ac_default_prefix
+# Let make expand exec_prefix.
+test "x$exec_prefix" = xNONE && exec_prefix='${prefix}'
+
+# Any assignment to VPATH causes Sun make to only execute
+# the first set of double-colon rules, so remove it if not needed.
+# If there is a colon in the path, we need to keep it.
+if test "x$srcdir" = x.; then
+ ac_vpsub='/^[ ]*VPATH[ ]*=[^:]*$/d'
+fi
+
+trap 'rm -f $CONFIG_STATUS conftest*; exit 1' 1 2 15
+
+DEFS=-DHAVE_CONFIG_H
+
+# Without the "./", some shells look in PATH for config.status.
+: ${CONFIG_STATUS=./config.status}
+
+echo creating $CONFIG_STATUS
+rm -f $CONFIG_STATUS
+cat > $CONFIG_STATUS <<EOF
+#! /bin/sh
+# Generated automatically by configure.
+# Run this file to recreate the current configuration.
+# This directory was configured as follows,
+# on host `(hostname || uname -n) 2>/dev/null | sed 1q`:
+#
+# $0 $ac_configure_args
+#
+# Compiler output produced by configure, useful for debugging
+# configure, is in ./config.log if it exists.
+
+ac_cs_usage="Usage: $CONFIG_STATUS [--recheck] [--version] [--help]"
+for ac_option
+do
+ case "\$ac_option" in
+ -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r)
+ echo "running \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion"
+ exec \${CONFIG_SHELL-/bin/sh} $0 $ac_configure_args --no-create --no-recursion ;;
+ -version | --version | --versio | --versi | --vers | --ver | --ve | --v)
+ echo "$CONFIG_STATUS generated by autoconf version 2.13.19990117"
+ exit 0 ;;
+ -help | --help | --hel | --he | --h)
+ echo "\$ac_cs_usage"; exit 0 ;;
+ *) echo "\$ac_cs_usage"; exit 1 ;;
+ esac
+done
+
+ac_given_srcdir=$srcdir
+
+trap 'rm -fr `echo "Makefile ncurses_cfg.h:ncurses_tst.hin" | sed "s/:[^ ]*//g"` conftest*; exit 1' 1 2 15
+EOF
+cat >> $CONFIG_STATUS <<EOF
+
+# Protect against being on the right side of a sed subst in config.status.
+sed 's/%@/@@/; s/@%/@@/; s/%g\$/@g/; /@g\$/s/[\\\\&%]/\\\\&/g;
+ s/@@/%@/; s/@@/@%/; s/@g\$/%g/' > conftest.subs <<\\CEOF
+$ac_vpsub
+$extrasub
+s%@SHELL@%$SHELL%g
+s%@CFLAGS@%$CFLAGS%g
+s%@CPPFLAGS@%$CPPFLAGS%g
+s%@CXXFLAGS@%$CXXFLAGS%g
+s%@FFLAGS@%$FFLAGS%g
+s%@DEFS@%$DEFS%g
+s%@LDFLAGS@%$LDFLAGS%g
+s%@LIBS@%$LIBS%g
+s%@exec_prefix@%$exec_prefix%g
+s%@prefix@%$prefix%g
+s%@program_transform_name@%$program_transform_name%g
+s%@bindir@%$bindir%g
+s%@sbindir@%$sbindir%g
+s%@libexecdir@%$libexecdir%g
+s%@datadir@%$datadir%g
+s%@sysconfdir@%$sysconfdir%g
+s%@sharedstatedir@%$sharedstatedir%g
+s%@localstatedir@%$localstatedir%g
+s%@libdir@%$libdir%g
+s%@includedir@%$includedir%g
+s%@oldincludedir@%$oldincludedir%g
+s%@infodir@%$infodir%g
+s%@mandir@%$mandir%g
+s%@CC@%$CC%g
+s%@CC_G_OPT@%$CC_G_OPT%g
+s%@CC_SHARED_OPTS@%$CC_SHARED_OPTS%g
+s%@DFT_DEP_SUFFIX@%$DFT_DEP_SUFFIX%g
+s%@DFT_OBJ_SUBDIR@%$DFT_OBJ_SUBDIR%g
+s%@DFT_UPR_MODEL@%$DFT_UPR_MODEL%g
+s%@ECHO_LINK@%$ECHO_LINK%g
+s%@EXTRA_LIBS@%$EXTRA_LIBS%g
+s%@LD@%$LD%g
+s%@LDFLAGS_SHARED@%$LDFLAGS_SHARED%g
+s%@LD_MODEL@%$LD_MODEL%g
+s%@LD_SHARED_OPTS@%$LD_SHARED_OPTS%g
+s%@LIB_NAME@%$LIB_NAME%g
+s%@LIB_PREFIX@%$LIB_PREFIX%g
+s%@LINK_TESTS@%$LINK_TESTS%g
+s%@LINT@%$LINT%g
+s%@LINT_OPTS@%$LINT_OPTS%g
+s%@LOCAL_LDFLAGS@%$LOCAL_LDFLAGS%g
+s%@MATH_LIB@%$MATH_LIB%g
+s%@PROG_EXT@%$PROG_EXT%g
+s%@TEST_ARGS@%$TEST_ARGS%g
+s%@TEST_DEPS@%$TEST_DEPS%g
+s%@cf_cv_abi_version@%$cf_cv_abi_version%g
+s%@cf_cv_rel_version@%$cf_cv_rel_version%g
+s%@CPP@%$CPP%g
+
+CEOF
+EOF
+
+cat >> $CONFIG_STATUS <<\EOF
+
+# Split the substitutions into bite-sized pieces for seds with
+# small command number limits, like on Digital OSF/1 and HP-UX.
+ac_max_sed_cmds=90 # Maximum number of lines to put in a sed script.
+ac_file=1 # Number of current file.
+ac_beg=1 # First line for current file.
+ac_end=$ac_max_sed_cmds # Line after last line for current file.
+ac_more_lines=:
+ac_sed_cmds=""
+while $ac_more_lines; do
+ if test $ac_beg -gt 1; then
+ sed "1,${ac_beg}d; ${ac_end}q" conftest.subs > conftest.s$ac_file
+ else
+ sed "${ac_end}q" conftest.subs > conftest.s$ac_file
+ fi
+ if test ! -s conftest.s$ac_file; then
+ ac_more_lines=false
+ rm -f conftest.s$ac_file
+ else
+ if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds="sed -f conftest.s$ac_file"
+ else
+ ac_sed_cmds="$ac_sed_cmds | sed -f conftest.s$ac_file"
+ fi
+ ac_file=`expr $ac_file + 1`
+ ac_beg=$ac_end
+ ac_end=`expr $ac_end + $ac_max_sed_cmds`
+ fi
+done
+if test -z "$ac_sed_cmds"; then
+ ac_sed_cmds=cat
+fi
+EOF
+
+cat >> $CONFIG_STATUS <<EOF
+
+CONFIG_FILES=\${CONFIG_FILES-"Makefile"}
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+for ac_file in .. $CONFIG_FILES; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ # Adjust a relative srcdir, top_srcdir, and INSTALL for subdirectories.
+
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ ac_dir_suffix="/`echo $ac_dir|sed 's%^\./%%'`"
+ # A "../" for each directory in $ac_dir_suffix.
+ ac_dots=`echo $ac_dir_suffix|sed 's%/[^/]*%../%g'`
+ else
+ ac_dir_suffix= ac_dots=
+ fi
+
+ case "$ac_given_srcdir" in
+ .) srcdir=.
+ if test -z "$ac_dots"; then top_srcdir=.
+ else top_srcdir=`echo $ac_dots|sed 's%/$%%'`; fi ;;
+ /*) srcdir="$ac_given_srcdir$ac_dir_suffix"; top_srcdir="$ac_given_srcdir" ;;
+ *) # Relative path.
+ srcdir="$ac_dots$ac_given_srcdir$ac_dir_suffix"
+ top_srcdir="$ac_dots$ac_given_srcdir" ;;
+ esac
+
+
+ echo creating "$ac_file"
+ rm -f "$ac_file"
+ configure_input="Generated automatically from `echo $ac_file_in|sed 's%.*/%%'` by configure."
+ case "$ac_file" in
+ *Makefile*) ac_comsub="1i\\
+# $configure_input" ;;
+ *) ac_comsub= ;;
+ esac
+
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ sed -e "$ac_comsub
+s%@configure_input@%$configure_input%g
+s%@srcdir@%$srcdir%g
+s%@top_srcdir@%$top_srcdir%g
+" $ac_file_inputs | (eval "$ac_sed_cmds") > $ac_file
+fi; done
+rm -f conftest.s*
+
+# These sed commands are passed to sed as "A NAME B NAME C VALUE D", where
+# NAME is the cpp macro being defined and VALUE is the value it is being given.
+#
+# ac_d sets the value in "#define NAME VALUE" lines.
+ac_dA='s%^\([ ]*\)#\([ ]*define[ ][ ]*\)'
+ac_dB='\([ ][ ]*\)[^ ]*%\1#\2'
+ac_dC='\3'
+ac_dD='%g'
+# ac_u turns "#undef NAME" with trailing blanks into "#define NAME VALUE".
+ac_uA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_uB='\([ ]\)%\1#\2define\3'
+ac_uC=' '
+ac_uD='\4%g'
+# ac_e turns "#undef NAME" without trailing blanks into "#define NAME VALUE".
+ac_eA='s%^\([ ]*\)#\([ ]*\)undef\([ ][ ]*\)'
+ac_eB='$%\1#\2define\3'
+ac_eC=' '
+ac_eD='%g'
+
+if test "${CONFIG_HEADERS+set}" != set; then
+EOF
+cat >> $CONFIG_STATUS <<EOF
+ CONFIG_HEADERS="ncurses_cfg.h:ncurses_tst.hin"
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+fi
+for ac_file in .. $CONFIG_HEADERS; do if test "x$ac_file" != x..; then
+ # Support "outfile[:infile[:infile...]]", defaulting infile="outfile.in".
+ case "$ac_file" in
+ *:*) ac_file_in=`echo "$ac_file"|sed 's%[^:]*:%%'`
+ ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;;
+ *) ac_file_in="${ac_file}.in" ;;
+ esac
+
+ echo creating $ac_file
+
+ rm -f conftest.frag conftest.in conftest.out
+ ac_file_inputs=`echo $ac_file_in|sed -e "s%^%$ac_given_srcdir/%" -e "s%:% $ac_given_srcdir/%g"`
+ cat $ac_file_inputs > conftest.in
+
+EOF
+
+
+# Transform confdefs.h into a list of #define's. We won't use it as a sed
+# script, but as data to insert where we see @DEFS@. We expect AC_SAVE_DEFS to
+# be either 'cat' or 'sort'.
+sort confdefs.h >conftest.vals
+
+# Break up conftest.vals because some shells have a limit on
+# the size of here documents, and old seds have small limits too.
+
+rm -f conftest.tail
+echo ' rm -f conftest.frag' >> $CONFIG_STATUS
+while :
+do
+ ac_lines=`grep -c . conftest.vals`
+ # grep -c gives empty output for an empty file on some AIX systems.
+ if test -z "$ac_lines" || test "$ac_lines" -eq 0; then break; fi
+ # Write chunks of a limited-size here document to conftest.frag.
+ echo ' cat >> conftest.frag <<CEOF' >> $CONFIG_STATUS
+ sed ${ac_max_here_lines}q conftest.vals >> $CONFIG_STATUS
+ echo 'CEOF' >> $CONFIG_STATUS
+ sed 1,${ac_max_here_lines}d conftest.vals > conftest.tail
+ rm -f conftest.vals
+ mv conftest.tail conftest.vals
+done
+rm -f conftest.vals
+
+# Run sed to substitute the contents of conftest.frag into conftest.in at the
+# marker @DEFS@.
+echo ' cat >> conftest.edit <<CEOF
+/@DEFS@/r conftest.frag
+/@DEFS@/d
+CEOF
+sed -f conftest.edit conftest.in > conftest.out
+rm -f conftest.in
+mv conftest.out conftest.in
+rm -f conftest.edit conftest.frag
+' >> $CONFIG_STATUS
+
+
+cat >> $CONFIG_STATUS <<\EOF
+ rm -f conftest.frag conftest.h
+ echo "/* $ac_file. Generated automatically by configure. */" > conftest.h
+ cat conftest.in >> conftest.h
+ rm -f conftest.in
+ if cmp -s $ac_file conftest.h 2>/dev/null; then
+ echo "$ac_file is unchanged"
+ rm -f conftest.h
+ else
+ # Remove last slash and all that follows it. Not all systems have dirname.
+ ac_dir=`echo $ac_file|sed 's%/[^/][^/]*$%%'`
+ if test "$ac_dir" != "$ac_file" && test "$ac_dir" != .; then
+ # The file is in a subdirectory.
+ test ! -d "$ac_dir" && mkdir "$ac_dir"
+ fi
+ rm -f $ac_file
+ mv conftest.h $ac_file
+ fi
+fi; done
+
+EOF
+cat >> $CONFIG_STATUS <<EOF
+# Extra initialization commands, if any
+
+EOF
+cat >> $CONFIG_STATUS <<\EOF
+# Extra commands, if any
+
+ cat >>Makefile <<TEST_EOF
+
+# These rules are generated so we do not rely on suffix rules, which do not
+# work consistently for different make-programs (the '\$(MODEL)/' confuses
+# some, and the '\$x' confuses others).
+TEST_EOF
+LIST=`make echo_tests`
+LAST=`make echo_suffix`
+for n in $LIST
+do
+ N=`echo $n | sed -e s/${LAST}\$//`
+ cat >>Makefile <<TEST_EOF
+
+\$(MODEL)/$N.o : $N.c \\
+ test.priv.h \\
+ ncurses_cfg.h
+ @echo compiling $N; \$(CC) -c \$(CFLAGS_DEFAULT) $N.c
+TEST_EOF
+done
+
+exit 0
+EOF
+chmod +x $CONFIG_STATUS
+rm -fr confdefs* $ac_clean_files
+test "$no_create" = yes || ${CONFIG_SHELL-/bin/sh} $CONFIG_STATUS || exit 1
+
dnl***************************************************************************
-dnl Copyright (c) 1998 Free Software Foundation, Inc. *
+dnl Copyright (c) 1998,1999 Free Software Foundation, Inc. *
dnl *
dnl Permission is hereby granted, free of charge, to any person obtaining a *
dnl copy of this software and associated documentation files (the *
dnl
dnl Author: Thomas E. Dickey <dickey@clark.net> 1996,1997,1998
dnl
-dnl $Id: configure.in,v 1.23 1998/02/11 12:14:05 tom Exp $
+dnl $Id: configure.in,v 1.27 1999/10/23 20:01:42 tom Exp $
dnl This is a simple configuration-script for the ncurses test programs that
dnl allows the test-directory to be separately configured against a reference
dnl system (i.e., sysvr4 curses)
ECHO_LINK='@ echo linking $@ ... ;' AC_SUBST(ECHO_LINK)
EXTRA_LIBS="" AC_SUBST(EXTRA_LIBS)
LD="ld" AC_SUBST(LD)
-LD_MODEL="" AC_SUBST(LD_MODEL)
LDFLAGS_SHARED="" AC_SUBST(LDFLAGS_SHARED)
+LD_MODEL="" AC_SUBST(LD_MODEL)
+LD_SHARED_OPTS="" AC_SUBST(LD_SHARED_OPTS)
LIB_NAME=curses AC_SUBST(LIB_NAME)
LIB_PREFIX="-l" AC_SUBST(LIB_PREFIX)
+LINK_TESTS="" AC_SUBST(LINK_TESTS)
LINT=lint AC_SUBST(LINT)
LINT_OPTS="" AC_SUBST(LINT_OPTS)
LOCAL_LDFLAGS="" AC_SUBST(LOCAL_LDFLAGS)
)
AC_CHECK_FUNCS( \
+curses_version \
gettimeofday \
napms \
resizeterm \
* authorization. *
****************************************************************************/
-/****************************************************************************
- * Author: Juergen Pfeifer <Juergen.Pfeifer@T-Online.de> 1995,1997 *
- ****************************************************************************/
-
-/***************************************************************************
-* Module frm_adabind.c *
-* Helper routines to ease the implementation of an Ada95 binding to *
-* ncurses. For details and copyright of the binding see the ../Ada95 *
-* subdirectory. *
-***************************************************************************/
-#include "form.priv.h"
-
-MODULE_ID("$Id: frm_adabind.c,v 1.5 1998/02/11 12:13:43 tom Exp $")
+/*
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998
+ *
+ * $Id: ditto.c,v 1.3 1998/08/15 23:39:34 tom Exp $
+ *
+ * The program illustrates how to set up multiple screens from a single
+ * program. Invoke the program by specifying another terminal on the same
+ * machine by specifying its device, e.g.,
+ * ditto /dev/ttyp1
+ */
+#include <test.priv.h>
+#include <sys/stat.h>
+#include <errno.h>
-/* Prototypes for the functions in this module */
-void _nc_ada_normalize_field_opts (int *opt);
-void _nc_ada_normalize_form_opts (int *opt);
-void* _nc_ada_getvarg(va_list *);
-FIELD* _nc_get_field(const FORM*, int);
+typedef struct {
+ FILE *input;
+ FILE *output;
+ SCREEN *screen;
+} DITTO;
-
-void _nc_ada_normalize_field_opts (int *opt)
+static void
+failed(const char *s)
{
- *opt = ALL_FIELD_OPTS & (*opt);
+ perror(s);
+ exit(EXIT_FAILURE);
}
-void _nc_ada_normalize_form_opts (int *opt)
+static void
+usage(void)
{
- *opt = ALL_FORM_OPTS & (*opt);
+ fprintf(stderr, "usage: ditto [terminal1 ...]\n");
+ exit(EXIT_FAILURE);
}
-
-/* This tiny stub helps us to get a void pointer from an argument list.
-// The mechanism for libform to handle arguments to field types uses
-// unfortunately functions with variable argument lists. In the Ada95
-// binding we replace this by a mechanism that only uses one argument
-// that is a pointer to a record describing all the specifics of an
-// user defined field type. So we need only this simple generic
-// procedure to get the pointer from the arglist.
-*/
-void *_nc_ada_getvarg(va_list *ap)
+static FILE *
+open_tty(char *path)
{
- return va_arg(*ap,void*);
+ FILE *fp;
+ struct stat sb;
+
+ if (stat(path, &sb) < 0)
+ failed(path);
+ if ((sb.st_mode & S_IFMT) != S_IFCHR) {
+ errno = ENOTTY;
+ failed(path);
+ }
+ fp = fopen(path, "a+");
+ if (fp == 0)
+ failed(path);
+ printf("opened %s\n", path);
+ return fp;
}
-FIELD* _nc_get_field(const FORM* frm, int idx) {
- if (frm && frm->field && idx>=0 && (idx<frm->maxfield))
- {
- return frm->field[idx];
- }
- else
- return (FIELD*)0;
+int
+main(
+ int argc GCC_UNUSED,
+ char *argv[] GCC_UNUSED)
+{
+ int j;
+ int active_tty = 0;
+ DITTO *data;
+
+ if (argc <= 1)
+ usage();
+
+ if ((data = (DITTO *)calloc(argc, sizeof(DITTO))) == 0)
+ failed("calloc data");
+
+ data[0].input = stdin;
+ data[0].output = stdout;
+ for (j = 1; j < argc; j++) {
+ data[j].input =
+ data[j].output = open_tty(argv[j]);
+ }
+
+ /*
+ * If we got this far, we have open connection(s) to the terminal(s).
+ * Set up the screens.
+ */
+ for (j = 0; j < argc; j++) {
+ active_tty++;
+ data[j].screen = newterm(
+ (char *)0, /* assume $TERM is the same */
+ data[j].output,
+ data[j].input);
+ if (data[j].screen == 0)
+ failed("newterm");
+ cbreak();
+ noecho();
+ scrollok(stdscr, TRUE);
+ }
+
+ /*
+ * Loop, reading characters from any of the inputs and writing to all
+ * of the screens.
+ */
+ for(;;) {
+ int ch;
+ set_term(data[0].screen);
+ ch = getch();
+ if (ch == ERR)
+ continue;
+ if (ch == 4)
+ break;
+ for (j = 0; j < argc; j++) {
+ set_term(data[j].screen);
+ addch(ch);
+ refresh();
+ }
+ }
+
+ /*
+ * Cleanup and exit
+ */
+ for (j = argc-1; j >= 0; j--) {
+ set_term(data[j].screen);
+ endwin();
+ }
+ return EXIT_SUCCESS;
}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1999 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. *
+ ****************************************************************************/
+
+/*
+ * Author: Thomas E. Dickey <dickey@clark.net> 1999
+ *
+ * $Id: dots.c,v 1.2 1999/10/23 13:24:32 tom Exp $
+ *
+ * A simple demo of the terminfo interface.
+ */
+#include <test.priv.h>
+
+#include <term.h> /* for tparm() */
+
+#include <time.h>
+#include <signal.h>
+
+#define valid(s) ((s != 0) && s != (char *)-1)
+
+static bool interrupted = FALSE;
+
+static int
+outc(int c)
+{
+ if (interrupted) {
+ char tmp = c;
+ write(STDOUT_FILENO, &tmp, 1);
+ } else {
+ putc(c, stdout);
+ }
+ return 0;
+}
+
+static bool
+outs(char *s)
+{
+ if (valid(s)) {
+ tputs(s, 1, outc);
+ return TRUE;
+ }
+ return FALSE;
+}
+
+static void
+cleanup(void)
+{
+ outs(exit_attribute_mode);
+ if (!outs(orig_colors))
+ outs(orig_pair);
+ outs(clear_screen);
+ outs(cursor_normal);
+}
+
+static void
+onsig(int n GCC_UNUSED)
+{
+ interrupted = TRUE;
+ cleanup();
+ exit(EXIT_FAILURE);
+}
+
+static float
+ranf(void)
+{
+ long r = (rand() & 077777);
+ return ((float) r / 32768.);
+}
+
+int
+main(
+ int argc GCC_UNUSED,
+ char *argv[]GCC_UNUSED)
+{
+ int x, y, z, j, p;
+ float r;
+ float c;
+
+ for (j = SIGHUP; j <= SIGTERM; j++)
+ if (signal(j, SIG_IGN) != SIG_IGN)
+ signal(j, onsig);
+
+ srand(time(0));
+ setupterm((char *) 0, 1, (int *) 0);
+ outs(clear_screen);
+ outs(cursor_invisible);
+ if (max_colors > 1) {
+ if (!valid(set_a_foreground)
+ || !valid(set_a_background)
+ || (!valid(orig_colors) && !valid(orig_pair)))
+ max_colors = -1;
+ }
+
+ r = (float) (lines - 4);
+ c = (float) (columns - 4);
+
+ for (;;) {
+ x = (int) (c * ranf()) + 2;
+ y = (int) (r * ranf()) + 2;
+ p = (ranf() > 0.9) ? '*' : ' ';
+
+ tputs(tparm(cursor_address, y, x), 1, outc);
+ if (max_colors > 0) {
+ z = ranf() * max_colors;
+ if (ranf() > 0.01) {
+ tputs(tparm(set_a_foreground, z), 1, outc);
+ } else {
+ tputs(tparm(set_a_background, z), 1, outc);
+ }
+ } else if (valid(exit_attribute_mode)
+ && valid(enter_reverse_mode)) {
+ if (ranf() <= 0.01)
+ outs((ranf() > 0.6) ? enter_reverse_mode :
+ exit_attribute_mode);
+ }
+ outc(p);
+ fflush(stdout);
+ }
+}
--- /dev/null
+/****************************************************************************
+ * Copyright (c) 1998 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. *
+ ****************************************************************************/
+
+/*
+ * Author: Thomas E. Dickey <dickey@clark.net> 1998
+ *
+ * $Id: filter.c,v 1.2 1998/05/10 00:39:27 tom Exp $
+ */
+#include <test.priv.h>
+
+/*
+ * An example of the 'filter()' function in ncurses, this program prompts
+ * for commands and executes them (like a command shell). It illustrates
+ * how ncurses can be used to implement programs that are not full-screen.
+ *
+ * Ncurses differs slightly from SVr4 curses. The latter does not flush its
+ * state when exiting program mode, so the attributes on the command lines of
+ * this program 'bleed' onto the executed commands. Rather than use the
+ * reset_shell_mode() and reset_prog_mode() functions, we could invoke endwin()
+ * and refresh(), but that does not work any better.
+ */
+
+#ifndef NCURSES_VERSION
+#define attr_t long
+#define getnstr(s,n) getstr(s)
+#endif
+
+static int new_command(char *buffer, int length, attr_t underline)
+{
+ int code;
+
+ attron(A_BOLD);
+ printw("Command: ");
+ attron(underline);
+ code = getnstr(buffer, length);
+ attroff(underline);
+ attroff(A_BOLD);
+ printw("\n");
+
+ return code;
+}
+
+int main(
+ int argc GCC_UNUSED,
+ char *argv[] GCC_UNUSED)
+{
+ SCREEN *sp;
+ char buffer[80];
+ attr_t underline;
+
+ filter();
+ sp = newterm((char *)0, stdout, stdin);
+ cbreak();
+ keypad(stdscr, TRUE);
+
+ if (has_colors()) {
+ int background = COLOR_BLACK;
+ start_color();
+#ifdef NCURSES_VERSION
+ if (use_default_colors () != ERR)
+ background = -1;
+#endif
+ init_pair(1, COLOR_CYAN, background);
+ underline = COLOR_PAIR(1);
+ } else {
+ underline = A_UNDERLINE;
+ }
+
+ while (new_command(buffer, sizeof(buffer)-1, underline) != ERR
+ && strlen(buffer) != 0) {
+ reset_shell_mode();
+ printf("\n");
+ fflush(stdout);
+ system(buffer);
+ reset_prog_mode();
+ touchwin(stdscr);
+ erase();
+ refresh();
+ }
+ printw("done");
+ refresh();
+ endwin();
+ return 0;
+}
/*
- * $Id: firework.c,v 1.11 1997/11/01 19:36:25 tom Exp $
+ * $Id: firework.c,v 1.15 1999/10/16 21:33:39 tom Exp $
*/
#include <test.priv.h>
-#include <term.h> /* for tparm() */
-
#include <signal.h>
-#include <ctype.h>
#include <time.h>
-static int get_colour(chtype *);
-static void explode(int row, int col);
-static void showit(void);
-static RETSIGTYPE onsig(int sig);
-
static int my_bg = COLOR_BLACK;
-int main(
- int argc GCC_UNUSED,
- char *argv[] GCC_UNUSED)
+static void
+cleanup(void)
{
-int j;
-int start,end,row,diff,flag = 0,direction;
-unsigned seed;
-
- for (j=SIGHUP;j<=SIGTERM;j++)
- if (signal(j,SIG_IGN)!=SIG_IGN)
- signal(j,onsig);
-
- initscr();
- if (has_colors()) {
- start_color();
-#ifdef NCURSES_VERSION
- if (use_default_colors() == OK)
- my_bg = -1;
-#endif
- }
- curs_set(0);
-
- seed = time((time_t *)0);
- srand(seed);
- cbreak();
- for (;;) {
- do {
- start = rand() % (COLS -3);
- end = rand() % (COLS - 3);
- start = (start < 2) ? 2 : start;
- end = (end < 2) ? 2 : end;
- direction = (start > end) ? -1 : 1;
- diff = abs(start-end);
- } while (diff<2 || diff>=LINES-2);
- attrset(A_NORMAL);
- for (row=0;row<diff;row++) {
- mvprintw(LINES - row,start + (row * direction),
- (direction < 0) ? "\\" : "/");
- if (flag++) {
- showit();
- erase();
- flag = 0;
- }
- }
- if (flag++) {
- showit();
- flag = 0;
- }
- seed = time((time_t *)0);
- srand(seed);
- explode(LINES-row,start+(diff*direction));
- erase();
- showit();
- }
+ curs_set(1);
+ endwin();
}
static RETSIGTYPE
onsig(int n GCC_UNUSED)
{
- curs_set(1);
- endwin();
+ cleanup();
exit(EXIT_FAILURE);
}
-static
-void explode(int row, int col)
+static void
+showit(void)
{
- chtype bold;
- erase();
- mvprintw(row,col,"-");
- showit();
-
- init_pair(1,get_colour(&bold),my_bg);
- attrset(COLOR_PAIR(1) | bold);
- mvprintw(row-1,col-1," - ");
- mvprintw(row,col-1,"-+-");
- mvprintw(row+1,col-1," - ");
- showit();
-
- init_pair(1,get_colour(&bold),my_bg);
- attrset(COLOR_PAIR(1) | bold);
- mvprintw(row-2,col-2," --- ");
- mvprintw(row-1,col-2,"-+++-");
- mvprintw(row, col-2,"-+#+-");
- mvprintw(row+1,col-2,"-+++-");
- mvprintw(row+2,col-2," --- ");
- showit();
-
- init_pair(1,get_colour(&bold),my_bg);
- attrset(COLOR_PAIR(1) | bold);
- mvprintw(row-2,col-2," +++ ");
- mvprintw(row-1,col-2,"++#++");
- mvprintw(row, col-2,"+# #+");
- mvprintw(row+1,col-2,"++#++");
- mvprintw(row+2,col-2," +++ ");
- showit();
-
- init_pair(1,get_colour(&bold),my_bg);
- attrset(COLOR_PAIR(1) | bold);
- mvprintw(row-2,col-2," # ");
- mvprintw(row-1,col-2,"## ##");
- mvprintw(row, col-2,"# #");
- mvprintw(row+1,col-2,"## ##");
- mvprintw(row+2,col-2," # ");
- showit();
-
- init_pair(1,get_colour(&bold),my_bg);
- attrset(COLOR_PAIR(1) | bold);
- mvprintw(row-2,col-2," # # ");
- mvprintw(row-1,col-2,"# #");
- mvprintw(row, col-2," ");
- mvprintw(row+1,col-2,"# #");
- mvprintw(row+2,col-2," # # ");
- showit();
+ int ch;
+ napms(120);
+ if ((ch = getch()) != ERR) {
+#ifdef KEY_RESIZE
+ if (ch == KEY_RESIZE) {
+ erase();
+ } else
+#endif
+ if (ch == 'q') {
+ cleanup();
+ exit(EXIT_SUCCESS);
+ } else if (ch == 's') {
+ nodelay(stdscr, FALSE);
+ } else if (ch == ' ') {
+ nodelay(stdscr, TRUE);
+ }
+ }
}
static
-int get_colour(chtype *bold)
+int
+get_colour(chtype * bold)
{
- int attr;
- attr = (rand() % 16) + 1;
+ int attr;
+ attr = (rand() % 16) + 1;
+
+ *bold = A_NORMAL;
+ if (attr > 8) {
+ *bold = A_BOLD;
+ attr &= 7;
+ }
+ return (attr);
+}
- *bold = A_NORMAL;
- if (attr > 8) {
- *bold = A_BOLD;
- attr &= 7;
- }
- return(attr);
+static
+void
+explode(int row, int col)
+{
+ chtype bold;
+ erase();
+ mvprintw(row, col, "-");
+ showit();
+
+ init_pair(1, get_colour(&bold), my_bg);
+ attrset(COLOR_PAIR(1) | bold);
+ mvprintw(row - 1, col - 1, " - ");
+ mvprintw(row + 0, col - 1, "-+-");
+ mvprintw(row + 1, col - 1, " - ");
+ showit();
+
+ init_pair(1, get_colour(&bold), my_bg);
+ attrset(COLOR_PAIR(1) | bold);
+ mvprintw(row - 2, col - 2, " --- ");
+ mvprintw(row - 1, col - 2, "-+++-");
+ mvprintw(row + 0, col - 2, "-+#+-");
+ mvprintw(row + 1, col - 2, "-+++-");
+ mvprintw(row + 2, col - 2, " --- ");
+ showit();
+
+ init_pair(1, get_colour(&bold), my_bg);
+ attrset(COLOR_PAIR(1) | bold);
+ mvprintw(row - 2, col - 2, " +++ ");
+ mvprintw(row - 1, col - 2, "++#++");
+ mvprintw(row + 0, col - 2, "+# #+");
+ mvprintw(row + 1, col - 2, "++#++");
+ mvprintw(row + 2, col - 2, " +++ ");
+ showit();
+
+ init_pair(1, get_colour(&bold), my_bg);
+ attrset(COLOR_PAIR(1) | bold);
+ mvprintw(row - 2, col - 2, " # ");
+ mvprintw(row - 1, col - 2, "## ##");
+ mvprintw(row + 0, col - 2, "# #");
+ mvprintw(row + 1, col - 2, "## ##");
+ mvprintw(row + 2, col - 2, " # ");
+ showit();
+
+ init_pair(1, get_colour(&bold), my_bg);
+ attrset(COLOR_PAIR(1) | bold);
+ mvprintw(row - 2, col - 2, " # # ");
+ mvprintw(row - 1, col - 2, "# #");
+ mvprintw(row + 0, col - 2, " ");
+ mvprintw(row + 1, col - 2, "# #");
+ mvprintw(row + 2, col - 2, " # # ");
+ showit();
}
-static void
-showit(void)
+int
+main(
+ int argc GCC_UNUSED,
+ char *argv[]GCC_UNUSED)
{
- refresh();
- napms(120);
+ int j;
+ int start, end, row, diff, flag = 0, direction;
+ unsigned seed;
+
+ for (j = SIGHUP; j <= SIGTERM; j++)
+ if (signal(j, SIG_IGN) != SIG_IGN)
+ signal(j, onsig);
+
+ initscr();
+ noecho();
+ cbreak();
+ keypad(stdscr, TRUE);
+ nodelay(stdscr, TRUE);
+
+ if (has_colors()) {
+ start_color();
+#ifdef NCURSES_VERSION
+ if (use_default_colors() == OK)
+ my_bg = -1;
+#endif
+ }
+ curs_set(0);
+
+ seed = time((time_t *) 0);
+ srand(seed);
+ for (;;) {
+ do {
+ start = rand() % (COLS - 3);
+ end = rand() % (COLS - 3);
+ start = (start < 2) ? 2 : start;
+ end = (end < 2) ? 2 : end;
+ direction = (start > end) ? -1 : 1;
+ diff = abs(start - end);
+ } while (diff < 2 || diff >= LINES - 2);
+ attrset(A_NORMAL);
+ for (row = 0; row < diff; row++) {
+ mvprintw(LINES - row, start + (row * direction),
+ (direction < 0) ? "\\" : "/");
+ if (flag++) {
+ showit();
+ erase();
+ flag = 0;
+ }
+ }
+ if (flag++) {
+ showit();
+ flag = 0;
+ }
+ seed = time((time_t *) 0);
+ srand(seed);
+ explode(LINES - row, start + (diff * direction));
+ erase();
+ showit();
+ }
}
*
* Date: 05.Nov.90
*
- * $Id: hanoi.c,v 1.15 1997/10/18 20:11:20 tom Exp $
+ * $Id: hanoi.c,v 1.16 1999/10/23 15:01:01 tom Exp $
*/
#include <test.priv.h>
fprintf(stderr, "Min screen length 24 lines\n");
return EXIT_FAILURE;
}
- if(AutoFlag)
+ if(AutoFlag) {
+ curs_set(0);
leaveok(stdscr, TRUE); /* Attempt to remove cursor */
+ }
InitTiles(NTiles);
DisplayTiles();
if(AutoFlag) {
}
}
}
- curs_set(1);
endwin();
return EXIT_SUCCESS;
}
*
* Generate timing statistics for vertical-motion optimization.
*
- * $Id: hashtest.c,v 1.12 1997/08/09 14:25:18 tom Exp $
+ * $Id: hashtest.c,v 1.14 1998/06/13 22:45:39 tom Exp $
*/
-#define NCURSES_TRACE
-
#ifdef TRACE
#define Trace(p) _tracef p
#define USE_TRACE 1
#else
#define Trace(p) /* nothing */
-#define TRACE 0
#endif
#include <test.priv.h>
int lo = continuous ? LO_CHAR : 'a' - LINES;
int hi = continuous ? HI_CHAR : 'a' + LINES;
-#ifdef NCURSES_VERSION
+ if (lo < LO_CHAR)
+ lo = LO_CHAR;
+ if (hi > HI_CHAR)
+ hi = HI_CHAR;
+
+#if defined(TRACE) || defined(NCURSES_TEST)
if (optimized) {
Trace(("With hash mapping"));
_nc_optimize_enable |= OPTIMIZE_HASHMAP;
/*
- * $Id: keynames.c,v 1.1 1997/10/25 18:41:04 tom Exp $
+ * $Id: keynames.c,v 1.2 1998/06/06 22:45:13 tom Exp $
*/
#include <test.priv.h>
-int main(int argc, char *argv[])
+int main(int argc GCC_UNUSED, char *argv[] GCC_UNUSED)
{
int n;
for (n = -1; n < 512; n++) {
* This can't be part of the ncurses test-program, because ncurses rips off the
* bottom line to do labels.
*
- * $Id: lrtest.c,v 0.7 1998/02/12 23:49:11 tom Exp $
+ * $Id: lrtest.c,v 0.14 1999/10/23 19:44:35 tom Exp $
*/
#include <test.priv.h>
+#include <term.h>
+
+typedef struct {
+ int y, x, mode, dir, inc;
+ chtype value;
+} MARK;
+
+/*
+ * Make a couple of markers go 'round the border to demonstrate that we can
+ * really write to all positions properly.
+ */
+static void
+show(MARK * m)
+{
+ mvaddch(m->y, m->x, m->value);
+ if (m->mode == 0) { /* along the x-direction */
+ m->x += m->inc;
+ if (m->x >= COLS) {
+ m->x = COLS - 1;
+ m->inc = -m->dir * m->inc;
+ m->y += m->inc;
+ m->mode = 1;
+ } else if (m->x < 0) {
+ m->x = 0;
+ m->inc = -m->dir * m->inc;
+ m->y += m->inc;
+ m->mode = 1;
+ }
+ } else { /* along the y-direction */
+ m->y += m->inc;
+ if (m->y >= LINES) {
+ m->y = LINES - 1;
+ m->inc = m->dir * m->inc;
+ m->x += m->inc;
+ m->mode = 0;
+ } else if (m->y < 0) {
+ m->y = 0;
+ m->inc = m->dir * m->inc;
+ m->x += m->inc;
+ m->mode = 0;
+ }
+ }
+}
int
main(
- int argc GCC_UNUSED,
- char *argv[] GCC_UNUSED)
+ int argc GCC_UNUSED,
+ char *argv[]GCC_UNUSED)
{
+ static MARK marks[] =
+ {
+ {0, 0, 0, -1, 1, '+' | A_BOLD},
+ {0, 0, 1, 1, 2, 'X'},
+ {0, 0, 1, -1, 3, 'Y'},
+ {0, 8, 0, -1, 1, '+' | A_BOLD},
+ {0, 9, 0, -1, 1, '+' | A_BOLD},
+ {1, 0, 1, 1, 1, '*' | A_REVERSE},
+ {2, 0, 1, 1, 1, '*' | A_REVERSE}
+ };
+
initscr();
+ noecho();
+ cbreak();
+ nodelay(stdscr, TRUE);
+ curs_set(0);
- move(LINES/2-1, 4);
- if (!has_ic())
- {
+#ifdef KEY_RESIZE
+ keypad(stdscr, TRUE);
+ restart:
+#endif
+ move(LINES / 2 - 1, 4);
+ if (!(has_ic()
+ /* see PutCharLR() */
+ || auto_right_margin
+ || (enter_am_mode && exit_am_mode))) {
addstr("Your terminal lacks the capabilities needed to address the\n");
- move(LINES/2, 4);
+ move(LINES / 2, 4);
addstr("lower-right-hand corner of the screen.\n");
- }
- else
- {
+ } else {
addstr("This is a test of access to the lower right corner.\n");
- move(LINES/2, 4);
+ move(LINES / 2, 4);
addstr("If the top of the box is missing, the test failed.\n");
- move(LINES/2+1, 4);
+ move(LINES / 2 + 1, 4);
addstr("Please report this (with a copy of your terminfo entry).\n");
- move(LINES/2+2, 4);
+ move(LINES / 2 + 2, 4);
addstr("to the ncurses maintainers, at bug-ncurses@gnu.org.\n");
}
- box(stdscr, 0, 0);
- move(LINES-1, COLS-1);
+ for (;;) {
+ int ch;
+ unsigned n;
+
+ box(stdscr, 0, 0);
+ for (n = 0; n < sizeof(marks) / sizeof(marks[0]); n++) {
+ show(&marks[n]);
+ }
- refresh();
+ if ((ch = getch()) > 0) {
+ if (ch == 'q')
+ break;
+ else if (ch == 's')
+ nodelay(stdscr, FALSE);
+ else if (ch == ' ')
+ nodelay(stdscr, TRUE);
+#ifdef KEY_RESIZE
+ else if (ch == KEY_RESIZE) {
+ erase();
+ goto restart;
+ }
+#endif
+ }
+ napms(50);
+ }
- getch();
+ curs_set(1);
endwin();
return 0;
}
# Test-Program modules
-# $Id: modules,v 1.6 1998/02/11 12:14:04 tom Exp $
+# $Id: modules,v 1.11 1999/10/23 00:41:02 tom Exp $
##############################################################################
-# Copyright (c) 1998 Free Software Foundation, Inc. #
+# Copyright (c) 1999 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"), #
@ base
blue progs $(srcdir) ../include/term.h
bs progs $(srcdir)
+cardfile progs $(srcdir) ../include/panel.h ../include/menu.h ../include/form.h
+ditto progs $(srcdir)
+dots progs $(srcdir) ../include/term.h
+filter progs $(srcdir)
firework progs $(srcdir) ../include/term.h
firstlast progs $(srcdir)
gdc progs $(srcdir)
hanoi progs $(srcdir)
hashtest progs $(srcdir)
+keynames progs $(srcdir)
knight progs $(srcdir)
lrtest progs $(srcdir)
ncurses progs $(srcdir) ../include/panel.h ../include/menu.h ../include/form.h
/****************************************************************************
- * Copyright (c) 1998 Free Software Foundation, Inc. *
+ * Copyright (c) 1998,1999 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 *
AUTHOR
Author: Eric S. Raymond <esr@snark.thyrsus.com> 1993
-$Id: ncurses.c,v 1.108 1998/02/28 01:11:47 tom Exp $
+$Id: ncurses.c,v 1.120 1999/10/23 20:01:30 tom Exp $
***************************************************************************/
refresh();
}
+#ifdef NCURSES_MOUSE_VERSION
+static const char *mouse_decode(MEVENT const *ep)
+{
+ static char buf[80];
+
+ (void) sprintf(buf, "id %2d at (%2d, %2d, %2d) state %4lx = {",
+ ep->id, ep->x, ep->y, ep->z, ep->bstate);
+
+#define SHOW(m, s) if ((ep->bstate & m)==m) {strcat(buf,s); strcat(buf, ", ");}
+ SHOW(BUTTON1_RELEASED, "release-1")
+ SHOW(BUTTON1_PRESSED, "press-1")
+ SHOW(BUTTON1_CLICKED, "click-1")
+ SHOW(BUTTON1_DOUBLE_CLICKED, "doubleclick-1")
+ SHOW(BUTTON1_TRIPLE_CLICKED, "tripleclick-1")
+ SHOW(BUTTON1_RESERVED_EVENT, "reserved-1")
+ SHOW(BUTTON2_RELEASED, "release-2")
+ SHOW(BUTTON2_PRESSED, "press-2")
+ SHOW(BUTTON2_CLICKED, "click-2")
+ SHOW(BUTTON2_DOUBLE_CLICKED, "doubleclick-2")
+ SHOW(BUTTON2_TRIPLE_CLICKED, "tripleclick-2")
+ SHOW(BUTTON2_RESERVED_EVENT, "reserved-2")
+ SHOW(BUTTON3_RELEASED, "release-3")
+ SHOW(BUTTON3_PRESSED, "press-3")
+ SHOW(BUTTON3_CLICKED, "click-3")
+ SHOW(BUTTON3_DOUBLE_CLICKED, "doubleclick-3")
+ SHOW(BUTTON3_TRIPLE_CLICKED, "tripleclick-3")
+ SHOW(BUTTON3_RESERVED_EVENT, "reserved-3")
+ SHOW(BUTTON4_RELEASED, "release-4")
+ SHOW(BUTTON4_PRESSED, "press-4")
+ SHOW(BUTTON4_CLICKED, "click-4")
+ SHOW(BUTTON4_DOUBLE_CLICKED, "doubleclick-4")
+ SHOW(BUTTON4_TRIPLE_CLICKED, "tripleclick-4")
+ SHOW(BUTTON4_RESERVED_EVENT, "reserved-4")
+ SHOW(BUTTON_CTRL, "ctrl")
+ SHOW(BUTTON_SHIFT, "shift")
+ SHOW(BUTTON_ALT, "alt")
+ SHOW(ALL_MOUSE_EVENTS, "all-events")
+ SHOW(REPORT_MOUSE_POSITION, "position")
+#undef SHOW
+
+ if (buf[strlen(buf)-1] == ' ')
+ buf[strlen(buf)-2] = '\0';
+ (void) strcat(buf, "}");
+ return(buf);
+}
+#endif /* NCURSES_MOUSE_VERSION */
+
/****************************************************************************
*
* Character input test
MEVENT event;
getmouse(&event);
- printw("KEY_MOUSE, %s\n", _tracemouse(&event));
+ printw("KEY_MOUSE, %s\n", mouse_decode(&event));
}
else
#endif /* NCURSES_MOUSE_VERSION */
static int show_attr(int row, int skip, chtype attr, const char *name, bool once)
{
+ int ncv = tigetnum("ncv");
+
mvprintw(row, 8, "%s mode:", name);
mvprintw(row, 24, "|");
if (skip) printw("%*s", skip, " ");
attroff(attr);
if (skip) printw("%*s", skip, " ");
printw("|");
- if (attr != A_NORMAL && !(termattrs() & attr))
- printw(" (N/A)");
+ if (attr != A_NORMAL) {
+ if (!(termattrs() & attr)) {
+ printw(" (N/A)");
+ } else if (ncv > 0 && (getbkgd(stdscr) & A_COLOR)) {
+ static const attr_t table[] = {
+ A_STANDOUT,
+ A_UNDERLINE,
+ A_REVERSE,
+ A_BLINK,
+ A_DIM,
+ A_BOLD,
+ A_INVIS,
+ A_PROTECT,
+ A_ALTCHARSET
+ };
+ unsigned n;
+ bool found = FALSE;
+ for (n = 0; n < sizeof(table)/sizeof(table[0]); n++) {
+ if ((table[n] & attr) != 0
+ && ((1 << n) & ncv) != 0) {
+ found = TRUE;
+ break;
+ }
+ }
+ if (found)
+ printw(" (NCV)");
+ }
+ }
return row + 2;
}
{
int n;
int skip = tigetnum("xmc");
- int fg = COLOR_WHITE;
+ int fg = COLOR_BLACK; /* color pair 0 is special */
int bg = COLOR_BLACK;
bool *pairs = (bool *)calloc(COLOR_PAIRS, sizeof(bool));
pairs[0] = TRUE;
refresh();
} while (attr_getc(&n, &fg, &bg));
+ free((char *)pairs);
bkgdset(A_NORMAL | BLANK);
erase();
endwin();
****************************************************************************/
#if USE_LIBPANEL
-static PANEL *p1;
-static PANEL *p2;
-static PANEL *p3;
-static PANEL *p4;
-static PANEL *p5;
-static WINDOW *w1;
-static WINDOW *w2;
-static WINDOW *w3;
-static WINDOW *w4;
-static WINDOW *w5;
-
static unsigned long nap_msec = 1;
static NCURSES_CONST char *mod[] =
mkpanel(rows,cols,tly,tlx) - alloc a win and panel and associate them
--------------------------------------------------------------------------*/
static PANEL *
-mkpanel(int rows, int cols, int tly, int tlx)
-{
-WINDOW *win = newwin(rows,cols,tly,tlx);
-PANEL *pan;
-
- if(!win)
- return((PANEL *)0);
- if((pan = new_panel(win)))
- return(pan);
- delwin(win);
- return((PANEL *)0);
+mkpanel(int color, int rows, int cols, int tly, int tlx)
+{
+WINDOW *win;
+PANEL *pan = 0;
+
+ if ((win = newwin(rows, cols, tly, tlx)) != 0) {
+ if ((pan = new_panel(win)) == 0) {
+ delwin(win);
+ } else if (has_colors()) {
+ int fg = (color == COLOR_BLUE) ? COLOR_WHITE : COLOR_BLACK;
+ int bg = color;
+ init_pair(color, fg, bg);
+ wbkgdset(win, COLOR_PAIR(color) | ' ');
+ } else {
+ wbkgdset(win, A_BOLD | ' ');
+ }
+ }
+ return pan;
} /* end of mkpanel */
/*+-------------------------------------------------------------------------
int num = ((const char *)panel_userptr(pan))[1];
int y,x;
- box(win, 0, 0);
wmove(win,1,1);
wprintw(win,"-pan%c-", num);
+ wclrtoeol(win);
+ box(win, 0, 0);
for(y = 2; y < getmaxy(win) - 1; y++)
{
for(x = 1; x < getmaxx(win) - 1; x++)
static void demo_panels(void)
{
int itmp;
-register y,x;
+register int y,x;
refresh();
}
for(y = 0; y < 5; y++)
{
- p1 = mkpanel(LINES/2 - 2, COLS/8 + 1, 0, 0);
- w1 = panel_window(p1);
+ PANEL *p1;
+ PANEL *p2;
+ PANEL *p3;
+ PANEL *p4;
+ PANEL *p5;
+
+ p1 = mkpanel(COLOR_RED, LINES/2 - 2, COLS/8 + 1, 0, 0);
set_panel_userptr(p1,"p1");
- p2 = mkpanel(LINES/2 + 1, COLS/7, LINES/4, COLS/10);
- w2 = panel_window(p2);
+ p2 = mkpanel(COLOR_GREEN, LINES/2 + 1, COLS/7, LINES/4, COLS/10);
set_panel_userptr(p2,"p2");
- p3 = mkpanel(LINES/4, COLS/10, LINES/2, COLS/9);
- w3 = panel_window(p3);
+ p3 = mkpanel(COLOR_YELLOW, LINES/4, COLS/10, LINES/2, COLS/9);
set_panel_userptr(p3,"p3");
- p4 = mkpanel(LINES/2 - 2, COLS/8, LINES/2 - 2, COLS/3);
- w4 = panel_window(p4);
+ p4 = mkpanel(COLOR_BLUE, LINES/2 - 2, COLS/8, LINES/2 - 2, COLS/3);
set_panel_userptr(p4,"p4");
- p5 = mkpanel(LINES/2 - 2, COLS/8, LINES/2, COLS/2 - 2);
- w5 = panel_window(p5);
+ p5 = mkpanel(COLOR_MAGENTA, LINES/2 - 2, COLS/8, LINES/2, COLS/2 - 2);
set_panel_userptr(p5,"p5");
fill_panel(p1);
for(itmp = 0; itmp < 6; itmp++)
{
+ WINDOW *w4 = panel_window(p4);
+ WINDOW *w5 = panel_window(p5);
+
saywhat("m4; press any key to continue");
wmove(w4, LINES/8, 1);
waddstr(w4,mod[itmp]);
waddstr(w5,mod[itmp]);
pflush();
wait_a_while(nap_msec);
+
saywhat("m5; press any key to continue");
wmove(w4, LINES/6, 1);
waddstr(w4,mod[itmp]);
{
if (c == '\n' || c == KEY_EXIT)
return(MAX_COMMAND + 1);
+ else if (c == 'u')
+ return(REQ_SCR_ULINE);
+ else if (c == 'd')
+ return(REQ_SCR_DLINE);
+ else if (c == 'b' || c == KEY_NPAGE)
+ return(REQ_SCR_UPAGE);
+ else if (c == 'f' || c == KEY_PPAGE)
+ return(REQ_SCR_DPAGE);
else if (c == 'n' || c == KEY_DOWN)
return(REQ_NEXT_ITEM);
else if (c == 'p' || c == KEY_UP)
return(REQ_PREV_ITEM);
else if (c == ' ')
return(REQ_TOGGLE_ITEM);
- else
+ else {
+ if (c != KEY_MOUSE)
+ beep();
return(c);
+ }
}
static const char *animals[] =
ITEM *items[SIZEOF(animals)];
ITEM **ip = items;
const char **ap;
- int mrows, mcols;
+ int mrows, mcols, c;
WINDOW *menuwin;
+#ifdef NCURSES_MOUSE_VERSION
+ mousemask(ALL_MOUSE_EVENTS, (mmask_t *)0);
+#endif
mvaddstr(0, 0, "This is the menu test:");
mvaddstr(2, 0, " Use up and down arrow to move the select bar.");
mvaddstr(3, 0, " 'n' and 'p' act like arrows.");
- mvaddstr(4, 0, " Press return to exit.");
+ mvaddstr(4, 0, " 'b' and 'f' scroll up/down (page), 'u' and 'd' (line).");
+ mvaddstr(5, 0, " Press return to exit.");
refresh();
for (ap = animals; *ap; ap++)
m = new_menu(items);
+ set_menu_format(m, (SIZEOF(animals)+1)/2, 1);
scale_menu(m, &mrows, &mcols);
menuwin = newwin(mrows + 2, mcols + 2, MENU_Y, MENU_X);
post_menu(m);
- while (menu_driver(m, menu_virtualize(wGetchar(menuwin))) != E_UNKNOWN_COMMAND)
+ while ((c = menu_driver(m, menu_virtualize(wGetchar(menuwin)))) != E_UNKNOWN_COMMAND) {
+ if (c == E_REQUEST_DENIED)
+ beep();
continue;
+ }
(void) mvprintw(LINES - 2, 0,
"You chose: %s\n", item_name(current_item(m)));
free_menu(m);
for (ip = items; *ip; ip++)
free_item(*ip);
+#ifdef NCURSES_MOUSE_VERSION
+ mousemask(0, (mmask_t *)0);
+#endif
}
#ifdef TRACE
return(f);
}
-static FIELD *make_field(int frow, int fcol, int rows, int cols)
+static FIELD *make_field(int frow, int fcol, int rows, int cols, bool secure)
{
- FIELD *f = new_field(rows, cols, frow, fcol, 0, 0);
+ FIELD *f = new_field(rows, cols, frow, fcol, 0, secure ? 1 : 0);
- if (f)
+ if (f) {
set_field_back(f, A_UNDERLINE);
+ set_field_userptr(f, (void *)0);
+ }
return(f);
}
delwin(w);
}
-static int form_virtualize(WINDOW *w)
+static int edit_secure(FIELD *me, int c)
{
+ int rows, cols, frow, fcol, nbuf;
+
+ if (field_info(me, &rows, &cols, &frow, &fcol, (int *)0, &nbuf) == E_OK
+ && nbuf > 0) {
+ char temp[80];
+ long len;
+
+ strcpy(temp, field_buffer(me, 1));
+ len = (long)(char *) field_userptr(me);
+ if (c <= KEY_MAX) {
+ if (isgraph(c)) {
+ temp[len++] = c;
+ temp[len] = 0;
+ set_field_buffer(me, 1, temp);
+ c = '*';
+ } else {
+ c = 0;
+ }
+ } else {
+ switch (c) {
+ case REQ_BEG_FIELD:
+ case REQ_CLR_EOF:
+ case REQ_CLR_EOL:
+ case REQ_DEL_LINE:
+ case REQ_DEL_WORD:
+ case REQ_DOWN_CHAR:
+ case REQ_END_FIELD:
+ case REQ_INS_CHAR:
+ case REQ_INS_LINE:
+ case REQ_LEFT_CHAR:
+ case REQ_NEW_LINE:
+ case REQ_NEXT_WORD:
+ case REQ_PREV_WORD:
+ case REQ_RIGHT_CHAR:
+ case REQ_UP_CHAR:
+ c = 0; /* we don't want to do inline editing */
+ break;
+ case REQ_CLR_FIELD:
+ if (len) {
+ temp[0] = 0;
+ set_field_buffer(me, 1, temp);
+ }
+ break;
+ case REQ_DEL_CHAR:
+ case REQ_DEL_PREV:
+ if (len) {
+ temp[--len] = 0;
+ set_field_buffer(me, 1, temp);
+ }
+ break;
+ }
+ }
+ set_field_userptr(me, (void *)len);
+ }
+ return c;
+}
+
+static int form_virtualize(FORM *f, WINDOW *w)
+{
+ static const struct {
+ int code;
+ int result;
+ } lookup[] = {
+ { CTRL('A'), REQ_NEXT_CHOICE },
+ { CTRL('B'), REQ_PREV_WORD },
+ { CTRL('C'), REQ_CLR_EOL },
+ { CTRL('D'), REQ_DOWN_FIELD },
+ { CTRL('E'), REQ_END_FIELD },
+ { CTRL('F'), REQ_NEXT_PAGE },
+ { CTRL('G'), REQ_DEL_WORD },
+ { CTRL('H'), REQ_DEL_PREV },
+ { CTRL('I'), REQ_INS_CHAR },
+ { CTRL('K'), REQ_CLR_EOF },
+ { CTRL('L'), REQ_LEFT_FIELD },
+ { CTRL('M'), REQ_NEW_LINE },
+ { CTRL('N'), REQ_NEXT_FIELD },
+ { CTRL('O'), REQ_INS_LINE },
+ { CTRL('P'), REQ_PREV_FIELD },
+ { CTRL('R'), REQ_RIGHT_FIELD },
+ { CTRL('S'), REQ_BEG_FIELD },
+ { CTRL('U'), REQ_UP_FIELD },
+ { CTRL('V'), REQ_DEL_CHAR },
+ { CTRL('W'), REQ_NEXT_WORD },
+ { CTRL('X'), REQ_CLR_FIELD },
+ { CTRL('Y'), REQ_DEL_LINE },
+ { CTRL('Z'), REQ_PREV_CHOICE },
+ { ESCAPE, MAX_FORM_COMMAND + 1 },
+ { KEY_BACKSPACE, REQ_DEL_PREV },
+ { KEY_DOWN, REQ_DOWN_CHAR },
+ { KEY_END, REQ_LAST_FIELD },
+ { KEY_HOME, REQ_FIRST_FIELD },
+ { KEY_LEFT, REQ_LEFT_CHAR },
+ { KEY_LL, REQ_LAST_FIELD },
+ { KEY_NEXT, REQ_NEXT_FIELD },
+ { KEY_NPAGE, REQ_NEXT_PAGE },
+ { KEY_PPAGE, REQ_PREV_PAGE },
+ { KEY_PREVIOUS, REQ_PREV_FIELD },
+ { KEY_RIGHT, REQ_RIGHT_CHAR },
+ { KEY_UP, REQ_UP_CHAR },
+ { QUIT, MAX_FORM_COMMAND + 1 }
+ };
+
static int mode = REQ_INS_MODE;
int c = wGetchar(w);
+ unsigned n;
+ FIELD *me = current_field(f);
- switch(c)
- {
- case QUIT:
- case ESCAPE:
- return(MAX_FORM_COMMAND + 1);
-
- /* demo doesn't use these three, leave them in anyway as sample code */
- case KEY_NPAGE:
- case CTRL('F'):
- return(REQ_NEXT_PAGE);
- case KEY_PPAGE:
- return(REQ_PREV_PAGE);
-
- case KEY_NEXT:
- case CTRL('N'):
- return(REQ_NEXT_FIELD);
- case KEY_PREVIOUS:
- case CTRL('P'):
- return(REQ_PREV_FIELD);
-
- case KEY_HOME:
- return(REQ_FIRST_FIELD);
- case KEY_END:
- case KEY_LL:
- return(REQ_LAST_FIELD);
-
- case CTRL('L'):
- return(REQ_LEFT_FIELD);
- case CTRL('R'):
- return(REQ_RIGHT_FIELD);
- case CTRL('U'):
- return(REQ_UP_FIELD);
- case CTRL('D'):
- return(REQ_DOWN_FIELD);
-
- case CTRL('W'):
- return(REQ_NEXT_WORD);
- case CTRL('B'):
- return(REQ_PREV_WORD);
- case CTRL('S'):
- return(REQ_BEG_FIELD);
- case CTRL('E'):
- return(REQ_END_FIELD);
-
- case KEY_LEFT:
- return(REQ_LEFT_CHAR);
- case KEY_RIGHT:
- return(REQ_RIGHT_CHAR);
- case KEY_UP:
- return(REQ_UP_CHAR);
- case KEY_DOWN:
- return(REQ_DOWN_CHAR);
-
- case CTRL('M'):
- return(REQ_NEW_LINE);
- case CTRL('I'):
- return(REQ_INS_CHAR);
- case CTRL('O'):
- return(REQ_INS_LINE);
- case CTRL('V'):
- return(REQ_DEL_CHAR);
-
- case CTRL('H'):
- case KEY_BACKSPACE:
- return(REQ_DEL_PREV);
- case CTRL('Y'):
- return(REQ_DEL_LINE);
- case CTRL('G'):
- return(REQ_DEL_WORD);
-
- case CTRL('C'):
- return(REQ_CLR_EOL);
- case CTRL('K'):
- return(REQ_CLR_EOF);
- case CTRL('X'):
- return(REQ_CLR_FIELD);
- case CTRL('A'):
- return(REQ_NEXT_CHOICE);
- case CTRL('Z'):
- return(REQ_PREV_CHOICE);
-
- case CTRL(']'):
+ if (c == CTRL(']')) {
if (mode == REQ_INS_MODE)
- return(mode = REQ_OVL_MODE);
+ mode = REQ_OVL_MODE;
else
- return(mode = REQ_INS_MODE);
+ mode = REQ_INS_MODE;
+ c = mode;
+ } else {
+ for (n = 0; n < sizeof(lookup)/sizeof(lookup[0]); n++) {
+ if (lookup[n].code == c) {
+ c = lookup[n].result;
+ break;
+ }
+ }
+ }
- default:
- return(c);
+ /*
+ * Force the field that the user is typing into to be in reverse video,
+ * while the other fields are shown underlined.
+ */
+ if (c <= KEY_MAX) {
+ c = edit_secure(me, c);
+ set_field_back(me, A_REVERSE);
+ } else if (c <= MAX_FORM_COMMAND) {
+ c = edit_secure(me, c);
+ set_field_back(me, A_UNDERLINE);
}
+ return c;
}
static int my_form_driver(FORM *form, int c)
{
WINDOW *w;
FORM *form;
- FIELD *f[10];
+ FIELD *f[12], *secure;
int finished = 0, c;
-
- mvaddstr(10, 57, "Forms Entry Test");
+ unsigned n = 0;
move(18, 0);
addstr("Defined form-traversal keys: ^Q/ESC- exit form\n");
addstr("^G -- delete current word ^C -- clear to end of line\n");
addstr("^K -- clear to end of field ^X -- clear field\n");
addstr("Arrow keys move within a field as you would expect.");
+
+ mvaddstr(4, 57, "Forms Entry Test");
+
refresh();
/* describe the form */
- f[0] = make_label(0, 15, "Sample Form");
- f[1] = make_label(2, 0, "Last Name");
- f[2] = make_field(3, 0, 1, 18);
- f[3] = make_label(2, 20, "First Name");
- f[4] = make_field(3, 20, 1, 12);
- f[5] = make_label(2, 34, "Middle Name");
- f[6] = make_field(3, 34, 1, 12);
- f[7] = make_label(5, 0, "Comments");
- f[8] = make_field(6, 0, 4, 46);
- f[9] = (FIELD *)0;
+ f[n++] = make_label(0, 15, "Sample Form");
+ f[n++] = make_label(2, 0, "Last Name");
+ f[n++] = make_field(3, 0, 1, 18, FALSE);
+ f[n++] = make_label(2, 20, "First Name");
+ f[n++] = make_field(3, 20, 1, 12, FALSE);
+ f[n++] = make_label(2, 34, "Middle Name");
+ f[n++] = make_field(3, 34, 1, 12, FALSE);
+ f[n++] = make_label(5, 0, "Comments");
+ f[n++] = make_field(6, 0, 4, 46, FALSE);
+ f[n++] = make_label(5, 20, "Password:");
+ secure =
+ f[n++] = make_field(5, 30, 1, 9, TRUE);
+ f[n++] = (FIELD *)0;
form = new_form(f);
raw();
while (!finished)
{
- switch(form_driver(form, c = form_virtualize(w)))
+ switch(form_driver(form, c = form_virtualize(form, w)))
{
case E_OK:
+ mvaddstr(5, 57, field_buffer(secure, 1));
+ clrtoeol();
+ refresh();
break;
case E_UNKNOWN_COMMAND:
finished = my_form_driver(form, c);
*/
endwin();
+#if HAVE_CURSES_VERSION
+ (void) printf("Welcome to %s. Press ? for help.\n", curses_version());
+#elif defined(NCURSES_VERSION_MAJOR) && defined(NCURSES_VERSION_MINOR) && defined(NCURSES_VERSION_PATCH)
+ (void) printf("Welcome to ncurses %d.%d.%d. Press ? for help.\n",
+ NCURSES_VERSION_MAJOR,
+ NCURSES_VERSION_MINOR,
+ NCURSES_VERSION_PATCH);
+#else
(void) puts("Welcome to ncurses. Press ? for help.");
+#endif
do {
(void) puts("This is the ncurses main menu");
/*
- * $Id: rain.c,v 1.11 1997/09/18 18:36:46 tom Exp $
+ * $Id: rain.c,v 1.13 1999/10/23 01:31:26 tom Exp $
*/
#include <test.priv.h>
curs_set(1);
endwin();
return(EXIT_SUCCESS);
+ case 's':
+ nodelay(stdscr, FALSE);
+ break;
+ case ' ':
+ nodelay(stdscr, TRUE);
+ break;
#ifdef KEY_RESIZE
case(KEY_RESIZE):
r = (float)(LINES - 4);
static float
ranf(void)
{
- float rv;
- long r = rand();
-
- r &= 077777;
- rv =((float)r/32767.);
- return rv;
+ long r = (rand() & 077777);
+ return ((float) r / 32768.);
}
#include "test.priv.h"
-#include <float.h>
#include <math.h>
#include <time.h>
would be a precalc table for the 60 hand positions, so
that the floating point stuff can be ditched. As I said,
it was a 20 hackup minute job.]
-
+
COMING SOON: tfishtank. Be the envy of your mac-owning
- colleagues.
+ colleagues.
*/
/* To compile: cc -o tclock tclock.c -lcurses -lm */
/* Plot a point */
static void
-plot(int x,int y,char col)
+plot(int x, int y, char col)
{
- mvaddch(y,x,(chtype)col);
+ mvaddch(y, x, (chtype) col);
}
-
/* Draw a diagonal(arbitrary) line using Bresenham's alogrithm. */
static void
-dline(int from_x, int from_y, int x2, int y2, char ch)
+dline(int pair, int from_x, int from_y, int x2, int y2, char ch)
{
- int dx,dy;
- int ax,ay;
- int sx,sy;
- int x,y;
- int d;
-
- dx=x2-from_x;
- dy=y2-from_y;
-
- ax=abs(dx*2);
- ay=abs(dy*2);
-
- sx=sign(dx);
- sy=sign(dy);
-
- x=from_x;
- y=from_y;
-
- if(ax>ay)
- {
- d=ay-(ax/2);
-
- while(1)
- {
- plot(x,y,ch);
- if(x==x2) return;
-
- if(d>=0)
- {
- y+=sy;
- d-=ax;
- }
- x+=sx;
- d+=ay;
- }
+ int dx, dy;
+ int ax, ay;
+ int sx, sy;
+ int x, y;
+ int d;
+
+ if (has_colors())
+ attrset(COLOR_PAIR(pair));
+
+ dx = x2 - from_x;
+ dy = y2 - from_y;
+
+ ax = abs(dx * 2);
+ ay = abs(dy * 2);
+
+ sx = sign(dx);
+ sy = sign(dy);
+
+ x = from_x;
+ y = from_y;
+
+ if (ax > ay) {
+ d = ay - (ax / 2);
+
+ while (1) {
+ plot(x, y, ch);
+ if (x == x2)
+ return;
+
+ if (d >= 0) {
+ y += sy;
+ d -= ax;
+ }
+ x += sx;
+ d += ay;
}
- else
- {
- d=ax-(ay/2);
-
- while(1)
- {
- plot(x,y,ch);
- if(y==y2) return;
-
- if(d>=0)
- {
- x+=sx;
- d-=ay;
- }
- y+=sy;
- d+=ax;
- }
+ } else {
+ d = ax - (ay / 2);
+
+ while (1) {
+ plot(x, y, ch);
+ if (y == y2)
+ return;
+
+ if (d >= 0) {
+ x += sx;
+ d -= ay;
+ }
+ y += sy;
+ d += ax;
}
+ }
}
int
main(
- int argc GCC_UNUSED,
- char *argv[] GCC_UNUSED)
+ int argc GCC_UNUSED,
+ char *argv[]GCC_UNUSED)
{
- int i,cx,cy;
- double mradius, hradius, mangle, hangle;
- double sangle, sradius, hours;
- int hdx, hdy;
- int mdx, mdy;
- int sdx, sdy;
- time_t tim;
- struct tm *t;
- char szChar[10];
-
- initscr();
- noecho();
-
- cx=39;
- cy=12;
- mradius=9;
- hradius=6;
- sradius=8;
-
- for(i=0;i<12;i++)
- {
- sangle=(i+1)*(2.0*PI)/12.0;
- sradius=10;
- sdx = A2X(sangle, sradius);
- sdy = A2Y(sangle, sradius);
- sprintf(szChar,"%d",i+1);
-
- mvaddstr((int)(cy-sdy),(int)(cx+sdx),szChar);
- }
-
- mvaddstr(0,0,"ASCII Clock by Howard Jones (ha.jones@ic.ac.uk),1994");
-
- sradius=8;
- for(;;)
- {
- napms(1000);
-
- tim = time(0);
- t = localtime(&tim);
-
- hours = (t->tm_hour + (t->tm_min/60.0));
- if(hours>12.0) hours -= 12.0;
-
- mangle = ((t->tm_min) * (2 * PI)/60.0);
- mdx = A2X(mangle, mradius);
- mdy = A2Y(mangle, mradius);
-
- hangle = ((hours) * (2.0 * PI)/12.0);
- hdx = A2X(hangle, hradius);
- hdy = A2Y(hangle, hradius);
-
- sangle = ((t->tm_sec) * (2.0 * PI)/60.0);
- sdx = A2X(sangle, sradius);
- sdy = A2Y(sangle, sradius);
-
- plot(cx+sdx,cy-sdy,'O');
- dline(cx,cy,cx+hdx,cy-hdy,'.');
- dline(cx,cy,cx+mdx,cy-mdy,'#');
-
- mvaddstr(23,0,ctime(&tim));
- refresh();
- if ((t->tm_sec % 5) == 0) beep();
-
- plot(cx+sdx,cy-sdy,' ');
- dline(cx,cy,cx+hdx,cy-hdy,' ');
- dline(cx,cy,cx+mdx,cy-mdy,' ');
-
- }
-
- return 0;
+ int i, cx, cy;
+ double mradius, hradius, mangle, hangle;
+ double sangle, sradius, hours;
+ int hdx, hdy;
+ int mdx, mdy;
+ int sdx, sdy;
+ int ch;
+ int lastbeep = -1;
+ time_t tim;
+ struct tm *t;
+ char szChar[10];
+ int my_bg = COLOR_BLACK;
+
+ initscr();
+ noecho();
+ cbreak();
+ nodelay(stdscr, TRUE);
+ curs_set(0);
+
+ if (has_colors()) {
+ start_color();
+#ifdef NCURSES_VERSION
+ if (use_default_colors() == OK)
+ my_bg = -1;
+#endif
+ init_pair(1, COLOR_RED, my_bg);
+ init_pair(2, COLOR_MAGENTA, my_bg);
+ init_pair(3, COLOR_GREEN, my_bg);
+ }
+#ifdef KEY_RESIZE
+ keypad(stdscr, TRUE);
+ restart:
+#endif
+ cx = (COLS - 1) / 2; /* 39 */
+ cy = LINES / 2; /* 12 */
+ ch = (cx > cy) ? cy : cx; /* usually cy */
+ mradius = (3 * cy) / 4; /* 9 */
+ hradius = cy / 2; /* 6 */
+ sradius = (2 * cy) / 3; /* 8 */
+
+ for (i = 0; i < 12; i++) {
+ sangle = (i + 1) * (2.0 * PI) / 12.0;
+ sradius = (5 * cy) / 6; /* 10 */
+ sdx = A2X(sangle, sradius);
+ sdy = A2Y(sangle, sradius);
+ sprintf(szChar, "%d", i + 1);
+
+ mvaddstr(cy - sdy, cx + sdx, szChar);
+ }
+
+ mvaddstr(0, 0, "ASCII Clock by Howard Jones (ha.jones@ic.ac.uk),1994");
+
+ sradius = 8;
+ for (;;) {
+ napms(1000);
+
+ tim = time(0);
+ t = localtime(&tim);
+
+ hours = (t->tm_hour + (t->tm_min / 60.0));
+ if (hours > 12.0)
+ hours -= 12.0;
+
+ mangle = ((t->tm_min) * (2 * PI) / 60.0);
+ mdx = A2X(mangle, mradius);
+ mdy = A2Y(mangle, mradius);
+
+ hangle = ((hours) * (2.0 * PI) / 12.0);
+ hdx = A2X(hangle, hradius);
+ hdy = A2Y(hangle, hradius);
+
+ sangle = ((t->tm_sec) * (2.0 * PI) / 60.0);
+ sdx = A2X(sangle, sradius);
+ sdy = A2Y(sangle, sradius);
+
+ dline(3, cx, cy, cx + mdx, cy - mdy, '#');
+
+ attrset(A_REVERSE);
+ dline(2, cx, cy, cx + hdx, cy - hdy, '.');
+ attroff(A_REVERSE);
+
+ if (has_colors())
+ attrset(COLOR_PAIR(1));
+
+ plot(cx + sdx, cy - sdy, 'O');
+
+ if (has_colors())
+ attrset(COLOR_PAIR(0));
+
+ mvaddstr(LINES - 2, 0, ctime(&tim));
+ refresh();
+ if ((t->tm_sec % 5) == 0
+ && t->tm_sec != lastbeep) {
+ lastbeep = t->tm_sec;
+ beep();
+ }
+
+ if ((ch = getch()) != ERR) {
+#ifdef KEY_RESIZE
+ if (ch == KEY_RESIZE) {
+ erase();
+ goto restart;
+ }
+#endif
+ break;
+ }
+
+ plot(cx + sdx, cy - sdy, ' ');
+ dline(0, cx, cy, cx + hdx, cy - hdy, ' ');
+ dline(0, cx, cy, cx + mdx, cy - mdy, ' ');
+
+ }
+
+ curs_set(1);
+ endwin();
+ return 0;
}
* wrs(5/28/93) -- modified to be consistent (perform identically) with either
* PDCurses or under Unix System V, R4
*
- * $Id: testcurs.c,v 1.17 1997/09/20 17:45:04 tom Exp $
+ * $Id: testcurs.c,v 1.19 1999/02/14 00:42:28 tom Exp $
*/
#include <test.priv.h>
{
int i;
int OldX, OldY;
- const char *Message = "The window will now scroll slowly";
+ NCURSES_CONST char *Message = "The window will now scroll slowly";
wclear(win);
mvwprintw (win, height - 2, 1, Message);
wrefresh(win);
echo();
noraw();
+ num = 0;
+ *buffer = 0;
mvwscanw(win, 7, 6, "%d %s", &num,buffer);
mvwprintw(win, 8, 6, "String: %s Number: %d", buffer,num);
Continue(win);
wrefresh(win);
noraw();
echo();
+ *Buffer = 0;
wscanw (win, "%s", Buffer);
printw("This is a formatted string in stdscr: %d %s\n", 42, "is it");
mvaddstr(10, 1, "Enter a string: ");
+ *Buffer = 0;
scanw ("%s", Buffer);
if (tigetstr("cvvis") != 0) {
* scroll operation worked, and the refresh() code only had to do a
* partial repaint.
*
- * $Id: view.c,v 1.26 1997/11/15 22:36:41 tom Exp $
+ * $Id: view.c,v 1.27 1998/08/22 18:33:41 tom Exp $
*/
#include <test.priv.h>
for (i = 1; i < LINES; i++) {
move(i, 0);
if ((s = lptr[i-1]) != 0 && (int)strlen(s) > shift)
- printw("%3d:%.*s", lptr+i-lines, COLS-4, s + shift);
+ printw("%3ld:%.*s", (long) (lptr+i-lines), COLS-4, s + shift);
else
- printw("%3d:", lptr+i-lines);
+ printw("%3ld:", (long) (lptr+i-lines));
clrtoeol();
}
setscrreg(1, LINES-1);
traces will be dumped. The program stops and waits for one character of
input at the beginning and end of the interval.
- $Id: worm.c,v 1.21 1998/01/30 10:17:59 tom Exp $
+ $Id: worm.c,v 1.26 1999/10/23 01:31:40 tom Exp $
*/
#include <test.priv.h>
-#include <term.h> /* for tparm() */
-
#include <signal.h>
-#define cursor(col,row) move(row,col)
+#define typeAlloc(type,n) (type *) malloc(n * sizeof(type))
+#define typeRealloc(type,n,p) (type *) realloc(p, n * sizeof(type))
-short *ref[128];
-static chtype flavor[]={
- 'O' , '*', '#', '$', '%', '0', '@',
+static chtype flavor[] =
+{
+ 'O', '*', '#', '$', '%', '0', '@',
};
#define MAXWORMS (sizeof(flavor)/sizeof(chtype))
-static const short xinc[]={
- 1, 1, 1, 0, -1, -1, -1, 0
-}, yinc[]={
- -1, 0, 1, 1, 1, 0, -1, -1
+static const short xinc[] =
+{
+ 1, 1, 1, 0, -1, -1, -1, 0
+}, yinc[] =
+{
+ -1, 0, 1, 1, 1, 0, -1, -1
};
static struct worm {
int orientation, head;
} worm[40];
static const char *field;
-static int length=16, number=3;
-static chtype trail=' ';
+static int length = 16, number = 3;
+static chtype trail = ' ';
#ifdef TRACE
int generation, trace_start, trace_end, singlestep;
#endif /* TRACE */
+/* *INDENT-OFF* */
static const struct options {
int nopts;
int opts[3];
{ 0, { 0, 0, 0 } },
{ 0, { 0, 0, 0 } }
};
+/* *INDENT-ON* */
+
+static void
+cleanup(void)
+{
+ standend();
+ refresh();
+ curs_set(1);
+ endwin();
+}
+
+static RETSIGTYPE
+onsig(int sig GCC_UNUSED)
+{
+ cleanup();
+ exit(EXIT_FAILURE);
+}
-static RETSIGTYPE onsig(int sig);
-static float ranf(void);
+static float
+ranf(void)
+{
+ long r = (rand() & 077777);
+ return ((float) r / 32768.);
+}
int
main(int argc, char *argv[])
{
-int x, y;
-int n;
-struct worm *w;
-const struct options *op;
-int h;
-short *ip;
-int last, bottom;
-
- for (x=1;x<argc;x++) {
- register char *p;
- p=argv[x];
- if (*p=='-') p++;
- switch (*p) {
- case 'f':
- field="WORM";
- break;
- case 'l':
- if (++x==argc) goto usage;
- if ((length=atoi(argv[x]))<2||length>1024) {
- fprintf(stderr,"%s: Invalid length\n",*argv);
- return EXIT_FAILURE;
- }
- break;
- case 'n':
- if (++x==argc) goto usage;
- if ((number=atoi(argv[x]))<1||number>40) {
- fprintf(stderr,"%s: Invalid number of worms\n",*argv);
- return EXIT_FAILURE;
- }
- break;
- case 't':
- trail='.';
- break;
+ short **ref;
+ int x, y;
+ int n;
+ int ch;
+ struct worm *w;
+ const struct options *op;
+ int h;
+ short *ip;
+ int last, bottom;
+
+ for (x = 1; x < argc; x++) {
+ char *p;
+ p = argv[x];
+ if (*p == '-')
+ p++;
+ switch (*p) {
+ case 'f':
+ field = "WORM";
+ break;
+ case 'l':
+ if (++x == argc)
+ goto usage;
+ if ((length = atoi(argv[x])) < 2 || length > 1024) {
+ fprintf(stderr, "%s: Invalid length\n", *argv);
+ return EXIT_FAILURE;
+ }
+ break;
+ case 'n':
+ if (++x == argc)
+ goto usage;
+ if ((number = atoi(argv[x])) < 1 || number > 40) {
+ fprintf(stderr, "%s: Invalid number of worms\n", *argv);
+ return EXIT_FAILURE;
+ }
+ break;
+ case 't':
+ trail = '.';
+ break;
#ifdef TRACE
- case 'S':
- singlestep = TRUE;
- break;
- case 'T':
- trace_start = atoi(argv[++x]);
- trace_end = atoi(argv[++x]);
- break;
- case 'N':
- _nc_optimize_enable ^= OPTIMIZE_ALL; /* declared by ncurses */
- break;
+ case 'S':
+ singlestep = TRUE;
+ break;
+ case 'T':
+ trace_start = atoi(argv[++x]);
+ trace_end = atoi(argv[++x]);
+ break;
+ case 'N':
+ _nc_optimize_enable ^= OPTIMIZE_ALL; /* declared by ncurses */
+ break;
#endif /* TRACE */
- default:
- usage:
- fprintf(stderr, "usage: %s [-field] [-length #] [-number #] [-trail]\n",*argv);
- return EXIT_FAILURE;
- break;
- }
+ default:
+ usage:
+ fprintf(stderr,
+ "usage: %s [-field] [-length #] [-number #] [-trail]\n", *argv);
+ return EXIT_FAILURE;
+ }
}
signal(SIGINT, onsig);
curs_set(0);
- bottom = LINES-1;
- last = COLS-1;
+ bottom = LINES - 1;
+ last = COLS - 1;
#ifdef A_COLOR
- if (has_colors())
- {
+ if (has_colors()) {
int bg = COLOR_BLACK;
start_color();
#ifdef NCURSES_VERSION
if (use_default_colors() == OK)
bg = -1;
#endif
-
- init_pair(COLOR_GREEN, COLOR_GREEN, bg);
- init_pair(COLOR_RED, COLOR_RED, bg);
- init_pair(COLOR_CYAN, COLOR_CYAN, bg);
- init_pair(COLOR_WHITE, COLOR_WHITE, bg);
- init_pair(COLOR_MAGENTA, COLOR_MAGENTA, bg);
- init_pair(COLOR_BLUE, COLOR_BLUE, bg);
- init_pair(COLOR_YELLOW, COLOR_YELLOW, bg);
-
- flavor[0] |= COLOR_PAIR(COLOR_GREEN) | A_BOLD;
- flavor[1] |= COLOR_PAIR(COLOR_RED) | A_BOLD;
- flavor[2] |= COLOR_PAIR(COLOR_CYAN) | A_BOLD;
- flavor[3] |= COLOR_PAIR(COLOR_WHITE) | A_BOLD;
- flavor[4] |= COLOR_PAIR(COLOR_MAGENTA) | A_BOLD;
- flavor[5] |= COLOR_PAIR(COLOR_BLUE) | A_BOLD;
- flavor[6] |= COLOR_PAIR(COLOR_YELLOW) | A_BOLD;
+
+#define SET_COLOR(num, fg) \
+ init_pair(num+1, fg, bg); \
+ flavor[num] |= COLOR_PAIR(num+1) | A_BOLD
+
+ SET_COLOR(0, COLOR_GREEN);
+ SET_COLOR(1, COLOR_RED);
+ SET_COLOR(2, COLOR_CYAN);
+ SET_COLOR(3, COLOR_WHITE);
+ SET_COLOR(4, COLOR_MAGENTA);
+ SET_COLOR(5, COLOR_BLUE);
+ SET_COLOR(6, COLOR_YELLOW);
}
#endif /* A_COLOR */
- ip=(short *)malloc(LINES*COLS*sizeof (short));
-
- for (n=0;n<LINES;) {
- ref[n++]=ip; ip+=COLS;
+ ref = typeAlloc(short *, LINES);
+ for (y = 0; y < LINES; y++) {
+ ref[y] = typeAlloc(short, COLS);
+ for (x = 0; x < COLS; x++) {
+ ref[y][x] = 0;
+ }
}
- for (ip=ref[0],n=LINES*COLS;--n>=0;) *ip++=0;
#ifdef BADCORNER
/* if addressing the lower right corner doesn't work in your curses */
- ref[bottom][last]=1;
+ ref[bottom][last] = 1;
#endif /* BADCORNER */
- for (n=number, w= &worm[0];--n>=0;w++) {
- w->orientation=w->head=0;
- if (!(ip=(short *)malloc((length+1)*sizeof (short)))) {
- fprintf(stderr,"%s: out of memory\n",*argv);
- return EXIT_FAILURE;
- }
- w->xpos=ip;
- for (x=length;--x>=0;) *ip++ = -1;
- if (!(ip=(short *)malloc((length+1)*sizeof (short)))) {
- fprintf(stderr,"%s: out of memory\n",*argv);
- return EXIT_FAILURE;
- }
- w->ypos=ip;
- for (y=length;--y>=0;) *ip++ = -1;
+ for (n = number, w = &worm[0]; --n >= 0; w++) {
+ w->orientation = w->head = 0;
+ if (!(ip = typeAlloc(short, (length + 1)))) {
+ fprintf(stderr, "%s: out of memory\n", *argv);
+ return EXIT_FAILURE;
+ }
+ w->xpos = ip;
+ for (x = length; --x >= 0;)
+ *ip++ = -1;
+ if (!(ip = typeAlloc(short, (length + 1)))) {
+ fprintf(stderr, "%s: out of memory\n", *argv);
+ return EXIT_FAILURE;
+ }
+ w->ypos = ip;
+ for (y = length; --y >= 0;)
+ *ip++ = -1;
}
if (field) {
- register const char *p;
- p=field;
- for (y=bottom;--y>=0;) {
- for (x=COLS;--x>=0;) {
- addch((chtype)(*p++));
- if (!*p) p=field;
- }
- addch('\n');
- }
+ const char *p;
+ p = field;
+ for (y = bottom; --y >= 0;) {
+ for (x = COLS; --x >= 0;) {
+ addch((chtype) (*p++));
+ if (!*p)
+ p = field;
+ }
+ }
}
+ napms(10);
refresh();
+#ifndef TRACE
+ nodelay(stdscr, TRUE);
+#endif
for (;;) {
#ifdef TRACE
- if (trace_start || trace_end) {
- if (generation == trace_start) {
- trace(TRACE_CALLS);
- getch();
- } else if (generation == trace_end) {
- trace(0);
- getch();
+ if (trace_start || trace_end) {
+ if (generation == trace_start) {
+ trace(TRACE_CALLS);
+ getch();
+ } else if (generation == trace_end) {
+ trace(0);
+ getch();
+ }
+
+ if (singlestep && generation > trace_start && generation < trace_end)
+ getch();
+
+ generation++;
+ }
+#else
+ if ((ch = getch()) > 0) {
+#ifdef KEY_RESIZE
+ if (ch == KEY_RESIZE) {
+ if (last != COLS - 1) {
+ for (y = 0; y <= bottom; y++) {
+ ref[y] = typeRealloc(short, COLS, ref[y]);
+ for (x = last + 1; x < COLS; x++)
+ ref[y][x] = 0;
}
-
- if (singlestep && generation > trace_start && generation < trace_end)
- getch();
-
- generation++;
+ last = COLS - 1;
}
-#endif /* TRACE */
-
- for (n=0,w= &worm[0];n<number;n++,w++) {
- if ((x=w->xpos[h=w->head])<0) {
- cursor(x=w->xpos[h]=0,y=w->ypos[h]=bottom);
- addch(flavor[n % MAXWORMS]);
- ref[y][x]++;
+ if (bottom != LINES - 1) {
+ ref = typeRealloc(short *, LINES, ref);
+ for (y = COLS; y <= bottom; y++)
+ free(ref[y]);
+ for (y = bottom + 1; y < LINES; y++) {
+ ref[y] = typeAlloc(short, COLS);
+ for (x = 0; x < COLS; x++)
+ ref[y][x] = 0;
}
- else y=w->ypos[h];
- if (++h==length) h=0;
- if (w->xpos[w->head=h]>=0) {
- register int x1, y1;
- x1=w->xpos[h]; y1=w->ypos[h];
- if (--ref[y1][x1]==0) {
- cursor(x1,y1); addch(trail);
- }
- }
- op= &(x==0 ? (y==0 ? upleft : (y==bottom ? lowleft : left)) :
- (x==last ? (y==0 ? upright : (y==bottom ? lowright : right)) :
- (y==0 ? upper : (y==bottom ? lower : normal))))[w->orientation];
- switch (op->nopts) {
- case 0:
- refresh();
- curs_set(1);
- endwin();
- return EXIT_SUCCESS;
- case 1:
- w->orientation=op->opts[0];
- break;
- default:
- w->orientation=op->opts[(int)(ranf()*(float)op->nopts)];
- }
- cursor(x+=xinc[w->orientation], y+=yinc[w->orientation]);
-
- if (y < 0 ) y = 0;
- addch(flavor[n % MAXWORMS]);
- ref[w->ypos[h]=y][w->xpos[h]=x]++;
+ bottom = LINES - 1;
}
- refresh();
- }
-}
+ }
+#endif
+ /*
+ * Make it simple to put this into single-step mode, or resume
+ * normal operation -TD
+ */
+ if (ch == 'q') {
+ cleanup();
+ return (EXIT_SUCCESS);
+ } else if (ch == 's') {
+ nodelay(stdscr, FALSE);
+ } else if (ch == ' ') {
+ nodelay(stdscr, TRUE);
+ }
+ }
+#endif /* TRACE */
-static RETSIGTYPE
-onsig(int sig GCC_UNUSED)
-{
- standend();
+ for (n = 0, w = &worm[0]; n < number; n++, w++) {
+ if ((x = w->xpos[h = w->head]) < 0) {
+ move(y = w->ypos[h] = bottom, x = w->xpos[h] = 0);
+ addch(flavor[n % MAXWORMS]);
+ ref[y][x]++;
+ } else {
+ y = w->ypos[h];
+ }
+ if (x > last)
+ x = last;
+ if (y > bottom)
+ y = bottom;
+ if (++h == length)
+ h = 0;
+ if (w->xpos[w->head = h] >= 0) {
+ int x1, y1;
+ x1 = w->xpos[h];
+ y1 = w->ypos[h];
+ if (y1 < LINES
+ && x1 < COLS
+ && --ref[y1][x1] == 0) {
+ move(y1, x1);
+ addch(trail);
+ }
+ }
+ op = &(x == 0 ? (y == 0 ? upleft : (y == bottom ? lowleft :
+ left)) :
+ (x == last ? (y == 0 ? upright : (y == bottom ? lowright :
+ right)) :
+ (y == 0 ? upper : (y == bottom ? lower : normal))))[w->orientation];
+ switch (op->nopts) {
+ case 0:
+ cleanup();
+ return EXIT_SUCCESS;
+ case 1:
+ w->orientation = op->opts[0];
+ break;
+ default:
+ w->orientation = op->opts[(int) (ranf() * (float) op->nopts)];
+ }
+ move(y += yinc[w->orientation], x += xinc[w->orientation]);
+
+ if (y < 0)
+ y = 0;
+ addch(flavor[n % MAXWORMS]);
+ ref[w->ypos[h] = y][w->xpos[h] = x]++;
+ }
+ napms(10);
refresh();
- curs_set(1);
- endwin();
- exit(EXIT_FAILURE);
-}
-
-static float
-ranf(void)
-{
-float rv;
-long r = rand();
-
- r &= 077777;
- rv =((float)r/32767.);
- return rv;
+ }
}