curs_threads(3x) curs_threads(3x)
get_escdelay, set_escdelay, set_tabsize, use_screen, use_window - curses マルチスレッド支援機能
#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 size); int set_tabsize(int size); int use_screen(SCREEN *scr, NCURSES_SCREEN_CB func, void *data); int use_window(WINDOW *win, NCURSES_WINDOW_CB func, void *data);
この実装はマルチスレッド・アプリケーションの基礎的な支援を するように構成することができます。 この構成はバイナリ・インターフェイスが異なるため、 異なるライブラリ群、例えば libncursest などを作ります。 各関数にスレッド識別子を渡すようにインターフェイスを 修正するかわりに、マルチスレッド用に構成した場合には 広域(グローバル)変数を同時に使うことを防ぐために必要な ミューテックスを隠すような、どの構成でも使うことのできる 少数の関数を追加しています。 WINDOW 構造体のメンバへのアクセスを強制的に関数経由にする ことに加え( curs_opaque(3x) を参照 )、この構成は一般的な 広域変数用の関数、例えば COLORS, COLOR_PAIRS, COLS, ESCDELAY, LINES, TABSIZE, curscr, newscr, ttytype を作ります。 これらの変数は読み込み専用の値として管理し、 SCREEN 構造体の中に格納します。 しかしこれは、 curses を使った安全なマルチスレッド・ アプリケーションを作るには十分ではありません。 マルチスレッド・アプリケーションは、(同じデバイス上の) 別々のウインドウを更新するスレッドを持つことも、 (異なるデバイス上の)別々の画面を更新するスレッドを持つことも 予期されます。 また、少数の広域変数はいくつかのアプリケーションから 書き込みできると考えられます。ここに記載する関数は、 これらの特殊な状況に対応するものです。 広域変数 ESCDELAY と TABSIZE の値を変更する アプリケーションがあります。 どの構成でも、これらの値を変更するには set_escdelay または set_tabsize 関数を使ってください。 他の広域変数の値は変更できません。 get_escdelay 関数は ESCDELAY の値を返します。 use_window と use_screen 関数は、それぞれ WINDOW 型と SCREEN 型の引数に対する粒度の粗いミューテックスを与え、 与えられた関数を呼び出して引数 data を渡し、 与えられた関数の戻り値を返します。 (訳注: 書式では引数は WINDOW * 型か SCREEN * 型)
ncurses ライブラリ関数はすべて、操作の間はロケールが 変更されないものと仮定しています。 さらに、これらの関数は階層的なスコープ(有効範囲)内に 管理されたデータを操作します。 o 広域データ。例えば、低レベルの terminfo または termcap インターフェイスで使われるもの。 o 端末ごとのデータ。例えば、 set_curterm の呼び出しに 伴うもの。 端末ごとのデータは、画面を作成するとき初期化されます。 o 画面ごとのデータ。例えば、 newterm または initscr の 呼び出しに伴うもの。 o ウインドウごとのデータ。例えば、 newwin または subwin の呼び出しに伴うもの。 ウインドウは画面に対応付けられます。 パッドは特定の画面に対応付ける必要はありません。 多くの curses アプリケーションは1つの画面内の 1つまたは複数のウインドウを操作します。 o 再入可能(リエントラント)、つまり引数として渡された データだけを使います。 次の表は、マルチスレッドを支援する構成のとき、 ncurses ライブラリの各識別子が扱うデータのスコープの一覧です。 識別子 スコープ (global:広域, terminal:端末ごと, screen:画面ごと, window:ウインドウごと, reentrant:再入可能) ------------------------------------------------------------- BC global COLORS screen (読み込み専用) COLOR_PAIR reentrant COLOR_PAIRS screen (読み込み専用) COLS screen (読み込み専用) ESCDELAY screen (読み込み専用, set_escdelay を参照) LINES screen (読み込み専用) PAIR_NUMBER reentrant PC global SP global TABSIZE screen (読み込み専用) UP global acs_map screen (読み込み専用) 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 (読み込み専用) boolfnames global (読み込み専用) boolnames global (読み込み専用) 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 (コピー元, コピー先)をロック cur_term terminal curs_set screen curscr screen (読み込み専用) curses_version global (読み込み専用) 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 (画面リスト, 画面)をロック delwin global (ウインドウリスト)をロック derwin screen doupdate screen dupwin screen (ウインドウ)をロック 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 (入力動作) get_wstr screen (入力動作) getattrs window getbegx window getbegy window getbkgd window getbkgrnd window getcchar reentrant getch screen (入力動作) getcurx window getcury window getmaxx window getmaxy window getmouse screen (入力動作) getn_wstr screen (入力動作) getnstr screen (入力動作) getparx window getpary window getstr screen (入力動作) getwin screen (入力動作) 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 (画面リスト)をロック 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 (静的データ) keybound screen keyname global (静的データ) 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 (入力動作) mvget_wstr screen (入力動作) mvgetch screen (入力動作) mvgetn_wstr screen (入力動作) mvgetnstr screen (入力動作) mvgetstr screen (入力動作) 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 (入力動作) mvwget_wstr screen (入力動作) mvwgetch screen (入力動作) mvwgetn_wstr screen (入力動作) mvwgetnstr screen (入力動作) mvwgetstr screen (入力動作) 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 (ウインドウリスト)をロック newscr screen (読み込み専用) newterm global (画面リスト)をロック newwin global (ウインドウリスト)をロック nl screen nocbreak screen nodelay window noecho screen nofilter global nonl screen noqiflush terminal noraw screen notimeout window numcodes global (読み込み専用) numfnames global (読み込み専用) numnames global (読み込み専用) ospeed global overlay window (コピー元, コピー先)をロック overwrite window (コピー元, コピー先)をロック 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 (ウインドウリスト)をロック resizeterm screen restartterm screen ripoffline global (静的データ) 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 (画面リスト, 画面)をロック 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 (読み込み専用) strcodes global (読み込み専用) strfnames global (読み込み専用) strnames global (読み込み専用) 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 (静的データ) tputs screen trace global (静的データ) ttytype screen (読み込み専用) typeahead screen unctrl screen unget_wch screen (入力動作) ungetch screen (入力動作) ungetmouse screen (入力動作) untouchwin window use_default_colors screen use_env global (静的データ) use_extended_names global (静的データ) use_legacy_coding screen use_screen global (画面リスト, 画面)をロック use_window global (ウインドウリスト, ウインドウ)をロック 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 (ウインドウとその親に影響) wdelch window wdeleteln window wecho_wchar window wechochar window wenclose window werase window wget_wch screen (入力動作) wget_wstr screen (入力動作) wgetbkgrnd window wgetch screen (入力動作) wgetdelay window wgetn_wstr screen (入力動作) wgetnstr screen (入力動作) wgetparent window wgetscrreg window wgetstr screen (入力動作) 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 (ウインドウリスト)をロック wscanw screen wscrl window wsetscrreg window wstandend window wstandout window wsyncdown screen (ウインドウとその親に影響) wsyncup screen (ウインドウとその親に影響) wtimeout window wtouchln window wunctrl global (静的データ) wvline window wvline_set window
特記がない場合、これらの関数はすべて TRUE か FALSE を 返します。 (訳注: set_escdelay, set_tabsize の戻り値の意味については 説明がありません)
各ルーチンにはマクロと関数の両方が用意されています。
これらのルーチンは ncurses に固有です。 Version 7, BSD, System V の実装ではサポートされていません。 ncurses の拡張機能に依存するコードは、 必ず NCURSES_VERSION で条件付けておくことを推奨します。
curses(3x), curs_opaque(3x), curs_variables(3x). curs_threads(3x)