#include <X11/extensions/xf86vmode.h> Bool XF86VidModeQueryExtension( Display *display, int *event_base_return, int *error_base_return); Bool XF86VidModeQueryVersion( Display *display, int *major_version_return, int *minor_version_return); Bool XF86VidModeGetModeLine( Display *display, int screen, int *dotclock_return, XF86VidModeModeLine *modeline); Bool XF86VidModeGetAllModeLines( Display *display, int screen, int *modecount_return, XF86VidModeModeInfo **modesinfo); Bool XF86VidModeDeleteModeLine( Display *display, int screen, XF86VidModeModeInfo *modeline); Bool XF86VidModeModModeLine( Display *display, int screen, XF86VidModeModeLine *modeline); Status XF86VidModeValidateModeLine( Display *display, int screen, XF86VidModeModeLine *modeline); Bool XF86VidModeSwitchMode( Display *display, int screen, int zoom); Bool XF86VidModeSwitchToMode( Display *display, int screen, XF86VidModeModeInfo *modeline); Bool XF86VidModeLockModeSwitch( Display *display, int screen, int lock); Bool XF86VidModeGetMonitor( Display *display, int screen, XF86VidModeMonitor *monitor); Bool XF86VidModeGetViewPort( Display *display, int screen, int *x_return, int *y_return); Bool XF86VidModeSetViewPort( Display *display, int screen, int x, int y);
Video Mode Settings: typedef struct { unsigned short hdisplay; unsigned short hsyncstart; unsigned short hsyncend; unsigned short htotal; unsigned short vdisplay; unsigned short vsyncstart; unsigned short vsyncend; unsigned short vtotal; unsigned int flags; int privsize; INT32 *private; } XF86VidModeModeLine; typedef struct { unsigned int dotclock; unsigned short hdisplay; unsigned short hsyncstart; unsigned short hsyncend; unsigned short htotal; unsigned short vdisplay; unsigned short vsyncstart; unsigned short vsyncend; unsigned short vtotal; unsigned int flags; int privsize; INT32 *private; } XF86VidModeModeInfo; Monitor information: typedef struct { char* vendor; char* model; float bandwidth; unsigned char nhsync; XF86VidModeSyncRange* hsync; unsigned char nvsync; XF86VidModeSyncRange* vsync; } XF86VidModeMonitor; typedef struct { float hi; float lo; } XF86VidModeSyncRange;
サーバのプライベートな値がある場合(現在は S3 サーバにのみ当てはまる)、 この関数はその値のためにメモリを割り当てる。 したがって、 privsize が 0 でない場合、呼び出したプログラムは XFree(private) を呼び出してメモリを解放しなければならない。
XF86VidModeGetAllModeLines は全てのビデオモードに対する設定を返す。 この関数を呼び出すプログラムは、 XF86VidModeModeInfo 構造体の配列を指すように関数が設定するポインタのアドレスを与える。 配列が格納されるメモリは、関数 XF86VidModeGetAllModeLines が動的に割り当てるので、呼び出した側はこれを解放しなければならない。 配列の最初の要素は、現在のビデオモードに対応する。
関数 XF86VidModeModModeLine は、リクエストされた設定が有効(例えばモニタの能力を越えていない)ならば、 現在のビデオモードをその設定に変更できる。
XF86VidModeDeleteModeLine を使ってモードを削除することができる。指定されたモードは、存在するモー ドとマッチしなければならない。 マッチすると見なすためには、与えられた XF86VidModeModeInfo 構造体の全てのフィールドがマッチしなければならない。ただし、 privsize フィールドと private フィールドは除く。 削除するモードが現在のモードである場合、最初に次のモードへの切替えが行 われる。最後まで残ったモードを削除することはできない。
あるモードが有効であかどうかは、関数 XF86VidModeValidateModeLine でチェックできる。 指定されたモードをサーバが使用できるならば(すなわち、サーバ、カード、 モニタの組み合わせによるモードに対する条件が全て満たされている)、こ の関数は MODE_OK を返す。 そうでない場合には、関数はモードが不正である理由を示す値を返す(これは xf86.h で定義されている)。
vendor, model, hsync, vsync の各フィールドには動的にメモリが割り当てられるので、呼び出し側が解放 しなければならない。
関数 XF86VidModeQueryExtension は、この拡張に割り当てられた最も小さい番号のエラー番号とイベント番号を 返す。