#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;
If there are any server private values (currently only applicable to the S3 server) the function will allocate storage for them. Therefore, if the privsize field is non-zero, the calling program should call Xfree(private) to free the storage.
XF86VidModeGetAllModeLines returns the settings for all video modes. The calling program supplies the address of a pointer which will be set by the function to point to an array of XF86VidModeModeInfo structures. The memory occupied by the array is dynamically allocated by the XF86VidModeGetAllModeLines function and should be freed by the caller. The first element of the array corresponds to the current video mode.
The XF86VidModeModModeLine function can be used to change the settings of the current video mode provided the requested settings are valid (e.g. they don't exceed the capabilities of the monitor).
Modes can be deleted with the XF86VidModeDeleteModeLine function. The specified mode must match an existing mode. To be considered a match, all of the fields of the given XF86VidModeModeInfo structure must match, except the privsize and private fields. If the mode to be deleted is the current mode, a mode switch to the next mode will occur first. The last remaining mode can not be deleted.
The validity of a mode can be checked with the XF86VidModeValidateModeLine function. If the specified mode can be used by the server (i.e. meets all the constraints placed upon a mode by the combination of the server, card, and monitor) the function returns MODE_OK, otherwise it returns a value indicating the reason why the mode is invalid (as defined in xf86.h)
The vendor, model, hsync, and vsync fields point to dynamically allocated storage that should be freed by the caller.
The function XF86VidModeQueryExtension returns the lowest numbered error and event values assigned to the extension.