curs_getyx(3x) curs_getyx(3x)
getyx, getparyx, getbegyx, getmaxyx
- curses カーソルとウインドウの座標を取得するマクロ
#include <curses.h>
void getyx(WINDOW *win, int y, int x);
void getparyx(WINDOW *win, int y, int x);
void getbegyx(WINDOW *win, int y, int x);
void getmaxyx(WINDOW *win, int y, int x);
マクロ getyx は指定のウインドウの現在のカーソル位置を
2 つの整数変数 y と x の中に格納します。
マクロ getparyx は、win が子ウインドウの場合、親ウインドウに
相対的な子ウインドウの開始位置の座標を 2 つの整数変数 y と x の
中に格納します。
そうでない場合、y と x に -1 を格納します。
マクロ getbegyx と getmaxyx はそれぞれ指定のウインドウの
現在の開始位置の座標とサイズを getyx のように格納します。
これらのマクロの戻り値は未定義です。
(ですから代入文の右辺値として使ってはいけません。)
これらのインターフェイスはすべてマクロです。
変数 y と x の前に "&" は必要ありません。
マクロ getyx, getparyx, getbegyx, getmaxyx は
XSI Curses standard, Issue 4 に記載されています。
この実装はさらに、curses の古いバージョンとの互換性のために
関数 getbegx, getbegy, getcurx, getcury, getmaxx, getmaxy,
getparx, getpary を提供しています。
X/Open Curses はこれに対処していませんが、多くの実装は
これらのマクロに対応する値を含む WINDOW 構造体のメンバを
提供しています。
移植性のために最善なのは、WINDOW 中のデータを使うことに
頼らないことです。いくつかの実装は WINDOW を不透明としている
からです (メンバを直接使うことを許していない)。
不透明な構造体の問題だけでなく、異なる実装では、同じような
名前のメンバが同じような値を持っていないかもしれません。
たとえば、ncurses における WINDOW._maxx と WINDOW._maxy の
値は (少なくとも release 1.8.1 からは) 他のいくつかの実装の
それと異なっています。
この違いはマクロ getmaxyx によって隠されているのです。
curses(3x), curs_legacy(3x), curs_opaque(3x)
curs_getyx(3x)