# curs_threads

## NAME



           **curs_threads** - **curses** thread support
    


## SYNOPSIS



           **#include <curses.h>**
    
           **typedef int (*NCURSES_WINDOW_CB)(WINDOW *, void *);**
           **typedef int (*NCURSES_SCREEN_CB)(SCREEN *, void *);**
    
           **int get_escdelay(void);**
           **int set_escdelay(int** _ms_**);**
           **int set_tabsize(int** _cols_**);**
    
           **int use_screen(SCREEN ***_scr_**, NCURSES_SCREEN_CB** _func_**, void ***_data_**);**
           **int use_window(WINDOW ***_win_**, NCURSES_WINDOW_CB** _func_**, void ***_data_**);**
    


## DESCRIPTION



           This  implementation can be configured to provide rudimentary sup‐
           port for multi-threaded applications.  This makes a different  set
           of  libraries,  e.g.,  **libncursest** since the binary interfaces are
           different.
    
           Rather than modify the interfaces to pass a  thread  specifier  to
           each  function,  it  adds a few functions which can be used in any
           configuration which hide the mutex's needed to prevent  concurrent
           use of the global variables when configured for threading.
    
           In  addition  to forcing access to members of the **WINDOW** structure
           to be via functions (see **curs_opaque**(3X)), it makes  functions  of
           the  common global variables, e.g., COLORS, COLOR_PAIRS, COLS, ES‐
           CDELAY, LINES, TABSIZE curscr, newscr and  ttytype.   Those  vari‐
           ables  are  maintained  as  read-only values, stored in the **SCREEN**
           structure.
    
           Even this is not enough to make a  thread-safe  application  using
           curses.   A  multi-threaded  application would be expected to have
           threads updating separate windows (within the same device), or up‐
           dating on separate screens (on different devices).  Also, a few of
           the global variables are considered writable by some applications.
           The functions described here address these special situations.
    
           The ESCDELAY and TABSIZE global variables are modified by some ap‐
           plications.  To modify them in any configuration, use the  **set_es‐**
           **cdelay** or  **set_tabsize** functions.  Other global variables are not
           modifiable.
    
           The **get_escdelay** function returns the value for ESCDELAY.
    
           The **use_window** and **use_screen** functions provide coarse granularity
           mutexes for their respective **WINDOW** and  **SCREEN** parameters,  and
           call  a  user-supplied  function, passing it a _data_ parameter, and
           returning the value from the user-supplied function to the  appli‐
           cation.
    
       **USAGE**
           All of the ncurses library functions assume that the locale is not
           altered  during  operation.   In  addition, they use data which is
           maintained within a hierarchy of scopes.
    
              •   global data, e.g., used in the low-level terminfo or term‐
                  cap interfaces.
    
              •   terminal data, e.g., associated with a call to **set_curterm**.
                  The terminal data are initialized when screens are created.
    
              •   screen data, e.g., associated with a call to **newterm** or
                  **initscr**.
    
              •   window data, e.g., associated with a call to **newwin** or **sub‐**
                  **win**.  Windows are associated with screens.  Pads are not
                  necessarily associated with a particular screen.
    
                  Most curses applications operate on one or more windows
                  within a single screen.
    
              •   reentrant, i.e., it uses only the data passed as parame‐
                  ters.
    
           This table lists the scope of data used for each symbol in the
           ncurses library when it is configured to support threading:
              Symbol                  Scope
              ─────────────────────────────────────────────────────────────
              BC                      global
              COLORS                  screen (readonly)
              COLOR_PAIR              reentrant
              COLOR_PAIRS             screen (readonly)
              COLS                    screen (readonly)
              ESCDELAY                screen (readonly, see **set_escdelay**)
              LINES                   screen (readonly)
              PAIR_NUMBER             reentrant
              PC                      global
              SP                      global
              TABSIZE                 screen (readonly)
              UP                      global
              acs_map                 screen (readonly)
              add_wch                 window (stdscr)
              add_wchnstr             window (stdscr)
              add_wchstr              window (stdscr)
              addch                   window (stdscr)
              addchnstr               window (stdscr)
              addchstr                window (stdscr)
              addnstr                 window (stdscr)
              addnwstr                window (stdscr)
              addstr                  window (stdscr)
              addwstr                 window (stdscr)
              assume_default_colors   screen
              attr_get                window (stdscr)
              attr_off                window (stdscr)
              attr_on                 window (stdscr)
              attr_set                window (stdscr)
              attroff                 window (stdscr)
              attron                  window (stdscr)
              attrset                 window (stdscr)
              baudrate                screen
              beep                    screen
              bkgd                    window (stdscr)
              bkgdset                 window (stdscr)
              bkgrnd                  window (stdscr)
              bkgrndset               window (stdscr)
              boolcodes               global (readonly)
              boolfnames              global (readonly)
              boolnames               global (readonly)
              border                  window (stdscr)
              border_set              window (stdscr)
              box                     window (stdscr)
              box_set                 window (stdscr)
              can_change_color        terminal
              cbreak                  screen
              chgat                   window (stdscr)
              clear                   window (stdscr)
              clearok                 window
              clrtobot                window (stdscr)
              clrtoeol                window (stdscr)
              color_content           screen
              color_set               window (stdscr)
              copywin                 window locks(source, target)
              cur_term                terminal
              curs_set                screen
              curscr                  screen (readonly)
              curses_version          global (readonly)
              def_prog_mode           terminal
              def_shell_mode          terminal
              define_key              screen
              del_curterm             screen
              delay_output            screen
              delch                   window (stdscr)
              deleteln                window (stdscr)
              delscreen               global locks(screenlist, screen)
              delwin                  global locks(windowlist)
              derwin                  screen
              doupdate                screen
              dupwin                  screen locks(window)
              echo                    screen
              echo_wchar              window (stdscr)
              echochar                window (stdscr)
              endwin                  screen
              erase                   window (stdscr)
              erasechar               window (stdscr)
              erasewchar              window (stdscr)
              filter                  global
              flash                   terminal
              flushinp                screen
              get_wch                 screen (input-operation)
              get_wstr                screen (input-operation)
              getattrs                window
              getbegx                 window
              getbegy                 window
              getbkgd                 window
              getbkgrnd               window
              getcchar                reentrant
              getch                   screen (input-operation)
              getcurx                 window
              getcury                 window
              getmaxx                 window
              getmaxy                 window
              getmouse                screen (input-operation)
              getn_wstr               screen (input-operation)
              getnstr                 screen (input-operation)
              getparx                 window
              getpary                 window
              getstr                  screen (input-operation)
              getwin                  screen (input-operation)
              halfdelay               screen
              has_colors              terminal
              has_ic                  terminal
              has_il                  terminal
              has_key                 screen
              hline                   window (stdscr)
              hline_set               window (stdscr)
              idcok                   window
              idlok                   window
              immedok                 window
              in_wch                  window (stdscr)
              in_wchnstr              window (stdscr)
              in_wchstr               window (stdscr)
              inch                    window (stdscr)
              inchnstr                window (stdscr)
              inchstr                 window (stdscr)
              init_color              screen
              init_pair               screen
              initscr                 global locks(screenlist)
              innstr                  window (stdscr)
              innwstr                 window (stdscr)
              ins_nwstr               window (stdscr)
              ins_wch                 window (stdscr)
              ins_wstr                window (stdscr)
              insch                   window (stdscr)
              insdelln                window (stdscr)
              insertln                window (stdscr)
              insnstr                 window (stdscr)
              insstr                  window (stdscr)
              instr                   window (stdscr)
              intrflush               terminal
              inwstr                  window (stdscr)
              is_cleared              window
              is_idcok                window
              is_idlok                window
              is_immedok              window
              is_keypad               window
              is_leaveok              window
              is_linetouched          window
              is_nodelay              window
              is_notimeout            window
              is_scrollok             window
              is_syncok               window
              is_term_resized         terminal
              is_wintouched           window
              isendwin                screen
              key_defined             screen
              key_name                global (static data)
              keybound                screen
              keyname                 global (static data)
              keyok                   screen
              keypad                  window
              killchar                terminal
              killwchar               terminal
              leaveok                 window
              longname                screen
              mcprint                 terminal
              meta                    screen
              mouse_trafo             window (stdscr)
              mouseinterval           screen
              mousemask               screen
              move                    window (stdscr)
              mvadd_wch               window (stdscr)
              mvadd_wchnstr           window (stdscr)
              mvadd_wchstr            window (stdscr)
              mvaddch                 window (stdscr)
              mvaddchnstr             window (stdscr)
              mvaddchstr              window (stdscr)
              mvaddnstr               window (stdscr)
              mvaddnwstr              window (stdscr)
              mvaddstr                window (stdscr)
              mvaddwstr               window (stdscr)
              mvchgat                 window (stdscr)
              mvcur                   screen
              mvdelch                 window (stdscr)
              mvderwin                window (stdscr)
              mvget_wch               screen (input-operation)
              mvget_wstr              screen (input-operation)
              mvgetch                 screen (input-operation)
              mvgetn_wstr             screen (input-operation)
              mvgetnstr               screen (input-operation)
              mvgetstr                screen (input-operation)
              mvhline                 window (stdscr)
              mvhline_set             window (stdscr)
              mvin_wch                window (stdscr)
              mvin_wchnstr            window (stdscr)
              mvin_wchstr             window (stdscr)
              mvinch                  window (stdscr)
              mvinchnstr              window (stdscr)
              mvinchstr               window (stdscr)
              mvinnstr                window (stdscr)
              mvinnwstr               window (stdscr)
              mvins_nwstr             window (stdscr)
              mvins_wch               window (stdscr)
              mvins_wstr              window (stdscr)
              mvinsch                 window (stdscr)
              mvinsnstr               window (stdscr)
              mvinsstr                window (stdscr)
              mvinstr                 window (stdscr)
              mvinwstr                window (stdscr)
              mvprintw                window (stdscr)
              mvscanw                 screen
              mvvline                 window (stdscr)
              mvvline_set             window (stdscr)
              mvwadd_wch              window
              mvwadd_wchnstr          window
              mvwadd_wchstr           window
              mvwaddch                window
              mvwaddchnstr            window
              mvwaddchstr             window
              mvwaddnstr              window
              mvwaddnwstr             window
              mvwaddstr               window
              mvwaddwstr              window
              mvwchgat                window
              mvwdelch                window
              mvwget_wch              screen (input-operation)
              mvwget_wstr             screen (input-operation)
              mvwgetch                screen (input-operation)
              mvwgetn_wstr            screen (input-operation)
              mvwgetnstr              screen (input-operation)
              mvwgetstr               screen (input-operation)
              mvwhline                window
              mvwhline_set            window
              mvwin                   window
              mvwin_wch               window
              mvwin_wchnstr           window
              mvwin_wchstr            window
              mvwinch                 window
              mvwinchnstr             window
              mvwinchstr              window
              mvwinnstr               window
              mvwinnwstr              window
              mvwins_nwstr            window
              mvwins_wch              window
              mvwins_wstr             window
              mvwinsch                window
              mvwinsnstr              window
              mvwinsstr               window
              mvwinstr                window
              mvwinwstr               window
              mvwprintw               window
              mvwscanw                screen
              mvwvline                window
              mvwvline_set            window
              napms                   reentrant
              newpad                  global locks(windowlist)
              newscr                  screen (readonly)
              newterm                 global locks(screenlist)
              newwin                  global locks(windowlist)
              nl                      screen
              nocbreak                screen
              nodelay                 window
              noecho                  screen
              nofilter                global
              nonl                    screen
              noqiflush               terminal
              noraw                   screen
              notimeout               window
              numcodes                global (readonly)
              numfnames               global (readonly)
              numnames                global (readonly)
              ospeed                  global
              overlay                 window locks(source, target)
              overwrite               window locks(source, target)
              pair_content            screen
              pecho_wchar             screen
              pechochar               screen
              pnoutrefresh            screen
              prefresh                screen
              printw                  window
              putp                    global
              putwin                  window
              qiflush                 terminal
              raw                     screen
              redrawwin               window
              refresh                 screen
              reset_prog_mode         screen
              reset_shell_mode        screen
              resetty                 terminal
              resize_term             screen locks(windowlist)
              resizeterm              screen
              restartterm             screen
              ripoffline              global (static data)
              savetty                 terminal
              scanw                   screen
              scr_dump                screen
              scr_init                screen
              scr_restore             screen
              scr_set                 screen
              scrl                    window (stdscr)
              scroll                  window
              scrollok                window
              set_curterm             screen
              set_escdelay            screen
              set_tabsize             screen
              set_term                global locks(screenlist, screen)
              setcchar                reentrant
              setscrreg               window (stdscr)
              setupterm               global
              slk_attr                screen
              slk_attr_off            screen
              slk_attr_on             screen
              slk_attr_set            screen
              slk_attroff             screen
              slk_attron              screen
              slk_attrset             screen
              slk_clear               screen
              slk_color               screen
              slk_init                screen
              slk_label               screen
              slk_noutrefresh         screen
              slk_refresh             screen
              slk_restore             screen
              slk_set                 screen
              slk_touch               screen
              slk_wset                screen
              standend                window
              standout                window
              start_color             screen
              stdscr                  screen (readonly)
              strcodes                global (readonly)
              strfnames               global (readonly)
              strnames                global (readonly)
              subpad                  window
              subwin                  window
              syncok                  window
              term_attrs              screen
              termattrs               screen
              termname                terminal
              tgetent                 global
              tgetflag                global
              tgetnum                 global
              tgetstr                 global
              tgoto                   global
              tigetflag               terminal
              tigetnum                terminal
              tigetstr                terminal
              timeout                 window (stdscr)
              touchline               window
              touchwin                window
              tparm                   global (static data)
              tputs                   screen
              trace                   global (static data)
              ttytype                 screen (readonly)
              typeahead               screen
              unctrl                  screen
              unget_wch               screen (input-operation)
              ungetch                 screen (input-operation)
              ungetmouse              screen (input-operation)
              untouchwin              window
              use_default_colors      screen
              use_env                 global (static data)
              use_extended_names      global (static data)
              use_legacy_coding       screen
              use_screen              global locks(screenlist, screen)
              use_window              global locks(windowlist, window)
              vid_attr                screen
              vid_puts                screen
              vidattr                 screen
              vidputs                 screen
              vline                   window (stdscr)
              vline_set               window (stdscr)
              vw_printw               window
              vw_scanw                screen
              vwprintw                window
              vwscanw                 screen
              wadd_wch                window
              wadd_wchnstr            window
              wadd_wchstr             window
              waddch                  window
              waddchnstr              window
              waddchstr               window
              waddnstr                window
              waddnwstr               window
              waddstr                 window
              waddwstr                window
              wattr_get               window
              wattr_off               window
              wattr_on                window
              wattr_set               window
              wattroff                window
              wattron                 window
              wattrset                window
              wbkgd                   window
              wbkgdset                window
              wbkgrnd                 window
              wbkgrndset              window
              wborder                 window
              wborder_set             window
              wchgat                  window
              wclear                  window
              wclrtobot               window
              wclrtoeol               window
              wcolor_set              window
              wcursyncup              screen (affects window plus parents)
              wdelch                  window
              wdeleteln               window
              wecho_wchar             window
              wechochar               window
              wenclose                window
              werase                  window
              wget_wch                screen (input-operation)
              wget_wstr               screen (input-operation)
              wgetbkgrnd              window
              wgetch                  screen (input-operation)
              wgetdelay               window
              wgetn_wstr              screen (input-operation)
              wgetnstr                screen (input-operation)
              wgetparent              window
              wgetscrreg              window
              wgetstr                 screen (input-operation)
              whline                  window
              whline_set              window
              win_wch                 window
              win_wchnstr             window
              win_wchstr              window
              winch                   window
              winchnstr               window
              winchstr                window
              winnstr                 window
              winnwstr                window
              wins_nwstr              window
              wins_wch                window
              wins_wstr               window
              winsch                  window
              winsdelln               window
              winsertln               window
              winsnstr                window
              winsstr                 window
              winstr                  window
              winwstr                 window
              wmouse_trafo            window
              wmove                   window
              wnoutrefresh            screen
              wprintw                 window
              wredrawln               window
              wrefresh                screen
              wresize                 window locks(windowlist)
              wscanw                  screen
              wscrl                   window
              wsetscrreg              window
              wstandend               window
              wstandout               window
              wsyncdown               screen (affects window plus parents)
              wsyncup                 screen (affects window plus parents)
              wtimeout                window
              wtouchln                window
              wunctrl                 global (static data)
              wvline                  window
              wvline_set              window
    


## RETURN VALUE



           These functions all return **TRUE** or **FALSE** , except as noted.
    


## NOTES



           Both a macro and a function are provided for each name.
    


## 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 ncurses extensions be conditioned using
           NCURSES_VERSION.
    


* * *