curs_termcap(3x) 맨 페이지 - 윈디하나의 솔라나라

개요

섹션
맨 페이지 이름
검색(S)

curs_termcap(3x)

curs_termcap(3x)                 Library calls                curs_termcap(3x)

NAME
       PC, UP, BC, ospeed, tgetent, tgetflag, tgetnum, tgetstr, tgoto, tputs -
       curses emulation of termcap

SYNOPSIS
       #include <ncursesw/curses.h>
       #include <ncursesw/term.h>

       char PC;
       char * UP;
       char * BC;
       short ospeed;

       int tgetent(char * bp, const char * name);
       int tgetflag(const char * id);
       int tgetnum(const char * id);
       char * tgetstr(const char * id, char ** sbuf);
       char * tgoto(const char * cap, int col, int row);
       int tputs(const char * str, int affcnt, int (* putc)(int));

DESCRIPTION
       ncurses provides the foregoing variables and functions as a compatibil‐
       ity  layer  for  programs that use the termcap library.  The API is the
       same, but behavior is emulated using the terminfo database.   Thus,  it
       can be used only to query the capabilities of terminal database entries
       for which a terminfo entry has been compiled.

   Initialization
       tgetent  loads the terminal database entry for name; see term(7).  This
       must be done before calling any of the other functions.  It returns

          1    on success,

          0    if there is no such entry (or if the matching entry describes a
               generic terminal, having too little information for curses  ap‐
               plications to run), and

          -1   if the terminfo database could not be found.

       This implementation differs from those of historical termcap libraries.

       •   ncurses  ignores  the buffer pointer bp, as do other termcap imple‐
           mentations conforming to portions of X/Open Curses  now  withdrawn.
           The BSD termcap library would store a copy of the terminal type de‐
           scription  in  the  buffer  referenced  by  this pointer.  terminfo
           stores terminal type descriptions in compiled form,  which  is  not
           the same thing.

       •   The  meanings of the return values differ.  The BSD termcap library
           does not check whether the terminal type description  includes  the
           generic  (gn) capability, nor whether the terminal type description
           supports an addressable cursor, a property essential for any curses
           implementation to operate.

   Retrieving Capability Values
       tgetflag reports the Boolean entry for id, or zero if it is not  avail‐
       able.

       tgetnum obtains the numeric entry for id, or -1 if it is not available.

       tgetstr  returns  the  string entry for id, or NULL if it is not avail‐
       able.  Use tputs to output the string returned.  The sbuf parameter  is
       used as follows.

       •   It is assumed to be the address of a pointer to a buffer managed by
           the calling application.

       •   However,  ncurses  checks to ensure that sbuf is not NULL, and that
           the pointer obtained by dereferencing sbuf is also  not  NULL.   If
           either check fails, ncurses ignores sbuf.

       •   If  the checks succeed, ncurses also copies the return value to the
           buffer pointed to by sbuf, and the library updates  sbuf  to  point
           past the null character terminating this value.

       •   The return value itself is an address in the terminal type descrip‐
           tion loaded into memory.

   Applying String Capabilities
       String capabilities can be parameterized; see subsection “Parameterized
       Strings” in  terminfo(5).  tgoto applies its second and third arguments
       to  the  parametric  placeholders in the capability stored in the first
       argument.

       •   The capability may contain padding specifications;  see  subsection
           “Delays  and  Padding”  of terminfo(5).  The output of tgoto should
           thus be passed to tputs rather than some other output function such
           as printf(3).

       •   While tgoto is assumed to be used for the two-parameter cursor  po‐
           sitioning  capability, termcap applications also use it for single-
           parameter capabilities.

           Doing so reveals a quirk in tgoto: most hardware terminals use cur‐
           sor addressing with row first, but the original developers  of  the
           termcap  interface  chose  to put the col (column) parameter first.
           The tgoto function swaps the order of its parameters.  It does this
           even for calls requiring only a single parameter.   In  that  case,
           the first parameter is merely a placeholder.

       •   Normally  the ncurses library is compiled without full termcap sup‐
           port.  In that case, tgoto uses an internal version of tparm(3X) (a
           more capable function).

           Because it uses tparm internally, tgoto is able to use  some  term‐
           info  features, but not all.  In particular, it allows only numeric
           parameters; tparm supports string parameters.

           However, tparm is not a termcap feature, and portable  termcap  ap‐
           plications should not rely upon its availability.

       tputs  is described in curs_terminfo(3X).  It can retrieve capabilities
       by either termcap or terminfo code.

   Global Variables
       tgetent sets the variables PC, UP, and BC to the terminfo entry's  data
       for  pad_char  (pad), cursor_up (cuu1), and backspace_if_not_bs (OTbs),
       respectively.    ncurses   does    not    employ    cuu1    internally.
       delay_output(3X)  uses  pad,  while  tgoto  emulation uses the obsolete
       termcap capability bs,  represented  in  ncurses  terminfo  as  “OTbs”.
       ncurses  assigns  the variable ospeed a system-specific value to encode
       the terminal's data rate.

   Releasing Memory
       The termcap functions provide  no  means  of  freeing  memory,  because
       legacy  termcap  implementations  used only the storage provided by the
       caller via tgetent and tgetstr.  Those buffers are unused in terminfo.

       By contrast, terminfo allocates memory.  It uses setupterm(3X)  to  ob‐
       tain  the data used by tgetent and the functions that retrieve capabil‐
       ity values.  One could use
              del_curterm(cur_term);
       to free this memory, but  there  is  an  additional  complication  with
       ncurses.  It uses a fixed-size pool of storage locations, one per value
       of the terminal name parameter given to tgetent.  The screen(1) program
       relies upon this arrangement to improve its performance.

       An  application  that  uses only the termcap functions, not the higher-
       level curses API, could release the memory using  del_curterm(3X),  be‐
       cause the pool is freed using other functions; see curs_memleaks(3X).

RETURN VALUE
       The return values of tgetent, tgetflag, tgetname, and tgetstr are docu‐
       mented above.

       tgoto returns NULL on error.  Error conditions include:

       •   uninitialized state (tgetent was not called successfully),

       •   cap being a null pointer,

       •   cap referring to a canceled capability,

       •   cap  being  a  capability  with  string-valued  parameters (a term‐
           info-only feature), and

       •   cap being a capability with more than two parameters.

       See curs_terminfo(3X) regarding tputs.


ATTRIBUTES
       See attributes(7) for descriptions of the following attributes:

       box; cbp-1 | cbp-1 l | l .  ATTRIBUTE TYPE ATTRIBUTE VALUE = Availabil‐
       ity   library/ncurses = Stability Uncommitted

NOTES
       ncurses compares only the first two characters of the id  parameter  of
       tgetflag, tgetnum, and tgetstr to the capability names in the database.

       Source  code  for open source software components in Oracle Solaris can
       be found at https://www.oracle.com/downloads/opensource/solaris-source-
       code-downloads.html.

       This software was built from source available at:
       https://github.com/oracle/solaris-userland

       The original community source was downloaded from:
       https://invisible-mirror.net/archives/ncurses/cur‐
       rent/ncurses-6.5-20250614.tgz

       Further information about this software can be found on the open source
       community website at https://invisible-island.net/ncurses/.

PORTABILITY
       These functions are no longer standardized  (and  the  variables  never
       were);  see  section “HISTORY” below.  ncurses provides them to support
       legacy applications; they should not be used in new programs.

       SVr4 describes a successful return value  only  as  “an  integer  value
       other than ERR”.

       Neither X/Open Curses nor the SVr4 man pages documented the return val‐
       ues  of tgetent correctly, though all three shown here were in fact re‐
       turned ever since SVr1.  In  particular,  an  omission  in  the  X/Open
       Curses  specification  has been misinterpreted to mean that tgetent re‐
       turns OK or ERR.  Because the purpose of these functions is to  provide
       compatibility  with  the  termcap  library,  that is a defect in X/Open
       Curses Issue 4 Version 2 rather than in ncurses.

   Compatibility with BSD termcap
       ncurses provides externally visible variables to support certain  term‐
       cap  applications.   However, their correct usage is poorly documented;
       for example, it is unclear when reading and writing them is meaningful.
       In particular, some applications are reported to declare and/or  modify
       ospeed.

       The  constraint  that only the first two characters of the id parameter
       are looked up in the terminal database escapes many application  devel‐
       opers.  The BSD termcap library did not require a trailing null charac‐
       ter  after  the  capability  identifier passed to tgetstr, tgetnum, and
       tgetflag.  Some applications thus assume  that  the  termcap  interface
       does not require the trailing null character for the capability identi‐
       fier.

       ncurses disallows matches by the termcap interface against extended ca‐
       pability names that are longer than two characters; see user_caps(5).

       The BSD termcap function tgetent returns the text of a termcap entry in
       the  buffer  passed  as an argument.  This library, like other terminfo
       implementations, does not store terminal type descriptions as text.  It
       sets the buffer contents to a null-terminated string.

   Header File
       This library includes a termcap.h header file  for  compatibility  with
       other  implementations,  but it is rarely used because the other imple‐
       mentations are not mutually compatible; see below.

HISTORY
       Bill Joy originated a forerunner of termcap called “ttycap”, dated Sep‐
       tember 1977, and released in 1BSD (March 1978).  It used  many  of  the
       same  function  names  as the later termcap, such as tgetent, tgetflag,
       tgetnum, and tgetstr.

       A clear descendant, the termlib library, followed in 2BSD  (May  1979),
       adding tgoto and tputs.  The former applied at that time only to cursor
       positioning  capabilities,  thus  the  overly  specific  name.   Little
       changed in 3BSD (late 1979) except the addition of test programs and  a
       termlib  man page, which documented the API shown in section “SYNOPSIS”
       above.

       4BSD (November 1980) renamed termlib to termcap and added another  test
       program.   The  library  remained  much  the  same through 4.3BSD (June
       1986).  4.4BSD-Lite (June 1994) refactored  it,  leaving  the  API  un‐
       changed.

       Function  prototypes were a feature of ANSI C (1989).  The library long
       antedated the standard and thus provided no header file declaring them.
       Nevertheless, the BSD sources included two different  termcap.h  header
       files over time.

       •   One was used internally by jove(1) from 4.3BSD onward.  It declared
           global symbols for the termcap variables that it used.

       •   The  other appeared in 4.4BSD-Lite Release 2 (June 1995) as part of
           libedit (also known as the editline library).  CSRG source  history
           shows that this was added in mid-1992.  The libedit header file was
           used  internally  as  a  convenience for compiling the editline li‐
           brary.  It declared function prototypes, but no  global  variables.
           NetBSD's termcap library added this header file in mid-1994.

       Meanwhile,  GNU  termcap  began development in 1990.  Its first release
       (1.0) in 1991 included a termcap.h header file.  Its second  (1.1)  re‐
       lease in September 1992 modified the file to use const for the function
       prototypes  in the header where one would expect parameters to be read-
       only.  BSD termcap did not.  The prototype for tputs also differed, but
       in that instance, it was libedit that differed from BSD termcap.

       GNU bash(1) has bundled GNU termcap 1.3 since mid-1993 to  support  its
       readline(3) library, and continues to use it if configured to do so.

       ncurses  1.8.1 (November 1993) provided a termcap.h file.  It reflected
       influence from GNU termcap and emacs(1) (rather than jove(1)),  provid‐
       ing the following interface:

       •   global symbols used by emacs,

       •   const-qualified function prototypes, and

       •   a prototype for tparam, a GNU termcap feature.

       Later  (in mid-1996) the tparam function was removed from ncurses.  Any
       two of the four implementations thus differ, and programs  that  intend
       to work with all termcap library interfaces must account for that fact.

       X/Open  Curses  Issue 4,  Version 2  (1996), describes these functions,
       marking them as “TO BE WITHDRAWN”.

       X/Open Curses Issue 7 (2009) withdrew the termcap interface (along with
       the vwprintw and vwscanw functions).

BUGS
       If you call tgetstr to fetch column_address (ch) or any  other  parame‐
       terized string capability, be aware that it is returned in terminfo no‐
       tation,  not the older and not-quite-compatible termcap notation.  This
       does not cause problems if all you do with it is call tgoto  or  tparm,
       which  both parametrically expand terminfo-style string capabilities as
       terminfo does.  (If ncurses is configured  to  support  termcap,  tgoto
       checks whether the string is terminfo-style by looking for “%p” parame‐
       ters  or  “<...>”  delays,  and  invokes  a termcap-style parser if the
       string appears not to use terminfo syntax.)

       Because terminfo's syntax for padding in  string  capabilities  differs
       from termcap's, users can be surprised.

       •   tputs("50")  in  a terminfo system transmits “50” rather than busy-
           waiting for 50 milliseconds.

       •   However, if ncurses is configured to support termcap, it  may  also
           have been configured to support BSD-style padding.

           In that case, tputs inspects strings passed to it, looking for dig‐
           its at the beginning of the string.

           tputs("50")  in  a termcap system may busy-wait for 50 milliseconds
           rather than transmitting “50”.

       termcap has nothing analogous to terminfo's set_attributes (sgr)  capa‐
       bility.   One consequence is that termcap applications assume that “me”
       (equivalent to terminfo's exit_attribute_mode (sgr0)  capability)  does
       not  reset  the alternate character set.  ncurses checks for, and modi‐
       fies the data shared with, the termcap  interface  to  accommodate  the
       latter's limitation in this respect.

SEE ALSO
       TCTEST  — A Termcap Test Utility ⟨https://invisible-island.net/ncurses/
       tctest.html⟩

       curses(3X), curs_terminfo(3X), putc(3), term_variables(3X), terminfo(5)


ncurses 6.5                       2025-02-01                  curs_termcap(3x)
맨 페이지 내용의 저작권은 맨 페이지 작성자에게 있습니다.
RSS ATOM XHTML 5 CSS3