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)