curs_scanw(3x) curs_scanw(3x)
scanw, wscanw, mvscanw, mvwscanw, vwscanw, vw_scanw - con- vert formatted input from a curses window - curses ウインドウからの書式つき入力の変換
#include <curses.h> int scanw(char *fmt, ...); int wscanw(WINDOW *win, char *fmt, ...); int mvscanw(int y, int x, char *fmt, ...); int mvwscanw(WINDOW *win, int y, int x, char *fmt, ...); int vw_scanw(WINDOW *win, char *fmt, va_list varglist); int vwscanw(WINDOW *win, char *fmt, va_list varglist);
The scanw, wscanw and mvscanw routines are analogous to scanf [see scanf(3)]. The effect of these routines is as though wgetstr were called on the window, and the result- ing line used as input for sscanf(3). Fields which do not map to a variable in the fmt field are lost. scanw, wscanw, mvscanw ルーチンは scanf に類似した ルーチンです。[scanf(3) 参照] 実際には、これらのルーチンは、そのウインドウで wgetstr が 呼び出され、結果の行を sscanf(3) の入力に用いたように なります。 fmt フィールドで変数に対応付けられていないフィールドは 失われます。 The vwscanw and vw_scanw routines are analogous to vscanf. They perform a wscanw using a variable argument list. The third argument is a va_list, a pointer to a list of argu- ments, as defined in <stdarg.h>. vwscanw, vw_scanw ルーチンは vscanf に類似したルーチンです。 これらは可変引数リストを使って wscanw を実行します。 第 3 引数は引数リストへのポインタで、<stdarg.h> で 定義されている va_list 型です。
vwscanw returns ERR on failure and an integer equal to the number of fields scanned on success. vwscanw は失敗のとき ERR を、成功のとき読み取った フィールドの数に等しい整数を返します。 Applications may use the return value from the scanw, wscanw, mvscanw and mvwscanw routines to determine the number of fields which were mapped in the call. アプリケーションは呼び出しで代入されたフィールドの数を 判定するために scanw, wscanw, mvscanw, mvwscanw ルーチンの 戻り値を使うことができます。 Functions with a "mv" prefix first perform a cursor move- ment using wmove, and return an error if the position is outside the window, or if the window pointer is null. mv で始まる関数は、最初に wmove を使用してカーソルを移動し、 位置がウインドウの外だった場合、またはウインドウ・ポインタが ヌルの場合にエラーを返します。
The XSI Curses standard, Issue 4 describes these func- tions. The function vwscanw is marked TO BE WITHDRAWN, and is to be replaced by a function vw_scanw using the <stdarg.h> interface. The Single Unix Specification, Ver- sion 2 states that vw_scanw is preferred to vwscanw since the latter requires including <varargs.h>, which cannot be used in the same file as <stdarg.h>. This implementation uses <stdarg.h> for both, because that header is included in <curses.h>. これらの関数は XSI Curses standard, Issue 4 に記載されて います。 vwscanw 関数は廃止項目と注記されており、 <stdarg.h> インターフェイスを使った vw_scanw 関数によって 置き換えられるでしょう。 Single Unix Specification, Version 2 は、<stdarg.h> と 同じファイルで使うことができない <varargs.h> を取り込む必要が ある vwscanw よりも vw_scanw が適していると明記しています。 この実装では両方に <stdarg.h> を使っています。 このヘッダファイルが <curses.h> で取り込まれるためです。 Both XSI and The Single Unix Specification, Version 2 state that these functions return ERR or OK. Since the underlying scanf can return the number of items scanned, and the SVr4 code was documented to use this feature, this is probably an editing error which was introduced in XSI, rather than being done intentionally. Portable applica- tions should only test if the return value is ERR, since the OK value (zero) is likely to be misleading. One pos- sible way to get useful results would be to use a "%n" conversion at the end of the format string to ensure that something was processed. XSI と Single Unix Specification, Version 2 はともに、 これらの関数は ERR または OK を返すと明記しています。 元となった scanf は代入した項目の数を返せますし、 SVr4 のコードはこの機能を使うと説明されているので、 これはおそらく XSI に導入された編集上の誤りであって、 意図的なものではないでしょう。 ポータブル・アプリケーションは戻り値が ERR かどうかだけを 調べるべきです。OK 値 (ゼロ) は誤解を招きそうだからです。 意味のある結果を得るためにできる 1 つの手段は、 書式文字列の最後に "%n" 変換を使って、何かが処理されたことを 確かめることでしょう。
curses(3x), curs_getstr(3x), curs_printw(3x), scanf(3) curs_scanw(3x)