📄 xf86vmode.c
字号:
if (xmdline.privsize > 0) {
if (!(modelines[i]->private =
Xcalloc(xmdline.privsize, sizeof(INT32)))) {
_XEatData(dpy, (xmdline.privsize) * sizeof(INT32));
Xfree(modelines[i]->private);
} else {
_XRead(dpy, (char*)modelines[i]->private,
xmdline.privsize * sizeof(INT32));
}
} else {
modelines[i]->private = NULL;
}
}
}
}
*modelinesPtr = modelines;
UnlockDisplay(dpy);
SyncHandle();
return True;
}
/*
* GetReq replacement for use with VidMode protocols earlier than 2.0
*/
#if !defined(UNIXCPP) || defined(ANSICPP)
#define GetOldReq(name, oldname, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(x##oldname##Req)) > dpy->bufmax)\
_XFlush(dpy);\
req = (x##oldname##Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_##name;\
req->length = (SIZEOF(x##oldname##Req))>>2;\
dpy->bufptr += SIZEOF(x##oldname##Req);\
dpy->request++
#else /* non-ANSI C uses empty comment instead of "##" for token concatenation */
#define GetOldReq(name, oldname, req) \
WORD64ALIGN\
if ((dpy->bufptr + SIZEOF(x/**/oldname/**/Req)) > dpy->bufmax)\
_XFlush(dpy);\
req = (x/**/oldname/**/Req *)(dpy->last_req = dpy->bufptr);\
req->reqType = X_/**/name;\
req->length = (SIZEOF(x/**/oldname/**/Req))>>2;\
dpy->bufptr += SIZEOF(x/**/oldname/**/Req);\
dpy->request++
#endif
Bool
SDL_NAME(XF86VidModeAddModeLine) (dpy, screen, newmodeline, aftermodeline)
Display *dpy;
int screen;
SDL_NAME(XF86VidModeModeInfo)* newmodeline;
SDL_NAME(XF86VidModeModeInfo)* aftermodeline;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeAddModeLineReq *req;
xXF86OldVidModeAddModeLineReq *oldreq;
int majorVersion, minorVersion;
XF86VidModeCheckExtension (dpy, info, False);
SDL_NAME(XF86VidModeQueryVersion)(dpy, &majorVersion, &minorVersion);
LockDisplay(dpy);
if (majorVersion < 2) {
GetOldReq(XF86VidModeAddModeLine, XF86OldVidModeAddModeLine, oldreq);
oldreq->reqType = info->codes->major_opcode;
oldreq->xf86vidmodeReqType = X_XF86VidModeAddModeLine;
oldreq->screen = screen;
oldreq->dotclock = newmodeline->dotclock;
oldreq->hdisplay = newmodeline->hdisplay;
oldreq->hsyncstart = newmodeline->hsyncstart;
oldreq->hsyncend = newmodeline->hsyncend;
oldreq->htotal = newmodeline->htotal;
oldreq->vdisplay = newmodeline->vdisplay;
oldreq->vsyncstart = newmodeline->vsyncstart;
oldreq->vsyncend = newmodeline->vsyncend;
oldreq->vtotal = newmodeline->vtotal;
oldreq->flags = newmodeline->flags;
oldreq->privsize = newmodeline->privsize;
if (aftermodeline != NULL) {
oldreq->after_dotclock = aftermodeline->dotclock;
oldreq->after_hdisplay = aftermodeline->hdisplay;
oldreq->after_hsyncstart = aftermodeline->hsyncstart;
oldreq->after_hsyncend = aftermodeline->hsyncend;
oldreq->after_htotal = aftermodeline->htotal;
oldreq->after_vdisplay = aftermodeline->vdisplay;
oldreq->after_vsyncstart = aftermodeline->vsyncstart;
oldreq->after_vsyncend = aftermodeline->vsyncend;
oldreq->after_vtotal = aftermodeline->vtotal;
oldreq->after_flags = aftermodeline->flags;
} else {
oldreq->after_dotclock = 0;
oldreq->after_hdisplay = 0;
oldreq->after_hsyncstart = 0;
oldreq->after_hsyncend = 0;
oldreq->after_htotal = 0;
oldreq->after_vdisplay = 0;
oldreq->after_vsyncstart = 0;
oldreq->after_vsyncend = 0;
oldreq->after_vtotal = 0;
oldreq->after_flags = 0;
}
if (newmodeline->privsize) {
oldreq->length += newmodeline->privsize;
Data32(dpy, (long *) newmodeline->private,
newmodeline->privsize * sizeof(INT32));
}
} else {
GetReq(XF86VidModeAddModeLine, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeAddModeLine;
req->screen = screen;
req->dotclock = newmodeline->dotclock;
req->hdisplay = newmodeline->hdisplay;
req->hsyncstart = newmodeline->hsyncstart;
req->hsyncend = newmodeline->hsyncend;
req->htotal = newmodeline->htotal;
req->hskew = newmodeline->hskew;
req->vdisplay = newmodeline->vdisplay;
req->vsyncstart = newmodeline->vsyncstart;
req->vsyncend = newmodeline->vsyncend;
req->vtotal = newmodeline->vtotal;
req->flags = newmodeline->flags;
req->privsize = newmodeline->privsize;
if (aftermodeline != NULL) {
req->after_dotclock = aftermodeline->dotclock;
req->after_hdisplay = aftermodeline->hdisplay;
req->after_hsyncstart = aftermodeline->hsyncstart;
req->after_hsyncend = aftermodeline->hsyncend;
req->after_htotal = aftermodeline->htotal;
req->after_hskew = aftermodeline->hskew;
req->after_vdisplay = aftermodeline->vdisplay;
req->after_vsyncstart = aftermodeline->vsyncstart;
req->after_vsyncend = aftermodeline->vsyncend;
req->after_vtotal = aftermodeline->vtotal;
req->after_flags = aftermodeline->flags;
} else {
req->after_dotclock = 0;
req->after_hdisplay = 0;
req->after_hsyncstart = 0;
req->after_hsyncend = 0;
req->after_htotal = 0;
req->after_hskew = 0;
req->after_vdisplay = 0;
req->after_vsyncstart = 0;
req->after_vsyncend = 0;
req->after_vtotal = 0;
req->after_flags = 0;
}
if (newmodeline->privsize) {
req->length += newmodeline->privsize;
Data32(dpy, (long *) newmodeline->private,
newmodeline->privsize * sizeof(INT32));
}
}
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeDeleteModeLine) (dpy, screen, modeline)
Display *dpy;
int screen;
SDL_NAME(XF86VidModeModeInfo)* modeline;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeDeleteModeLineReq *req;
xXF86OldVidModeDeleteModeLineReq *oldreq;
int majorVersion, minorVersion;
XF86VidModeCheckExtension (dpy, info, 0);
SDL_NAME(XF86VidModeQueryVersion)(dpy, &majorVersion, &minorVersion);
LockDisplay(dpy);
if (majorVersion < 2) {
GetOldReq(XF86VidModeDeleteModeLine, XF86OldVidModeDeleteModeLine, oldreq);
oldreq->reqType = info->codes->major_opcode;
oldreq->xf86vidmodeReqType = X_XF86VidModeDeleteModeLine;
oldreq->screen = screen;
oldreq->dotclock = modeline->dotclock;
oldreq->hdisplay = modeline->hdisplay;
oldreq->hsyncstart = modeline->hsyncstart;
oldreq->hsyncend = modeline->hsyncend;
oldreq->htotal = modeline->htotal;
oldreq->vdisplay = modeline->vdisplay;
oldreq->vsyncstart = modeline->vsyncstart;
oldreq->vsyncend = modeline->vsyncend;
oldreq->vtotal = modeline->vtotal;
oldreq->flags = modeline->flags;
oldreq->privsize = modeline->privsize;
if (modeline->privsize) {
oldreq->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
} else {
GetReq(XF86VidModeDeleteModeLine, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeDeleteModeLine;
req->screen = screen;
req->dotclock = modeline->dotclock;
req->hdisplay = modeline->hdisplay;
req->hsyncstart = modeline->hsyncstart;
req->hsyncend = modeline->hsyncend;
req->htotal = modeline->htotal;
req->hskew = modeline->hskew;
req->vdisplay = modeline->vdisplay;
req->vsyncstart = modeline->vsyncstart;
req->vsyncend = modeline->vsyncend;
req->vtotal = modeline->vtotal;
req->flags = modeline->flags;
req->privsize = modeline->privsize;
if (modeline->privsize) {
req->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
}
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeModModeLine) (dpy, screen, modeline)
Display *dpy;
int screen;
SDL_NAME(XF86VidModeModeLine)* modeline;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeModModeLineReq *req;
xXF86OldVidModeModModeLineReq *oldreq;
int majorVersion, minorVersion;
XF86VidModeCheckExtension (dpy, info, 0);
SDL_NAME(XF86VidModeQueryVersion)(dpy, &majorVersion, &minorVersion);
LockDisplay(dpy);
if (majorVersion < 2) {
GetOldReq(XF86VidModeModModeLine, XF86OldVidModeModModeLine, oldreq);
oldreq->reqType = info->codes->major_opcode;
oldreq->xf86vidmodeReqType = X_XF86VidModeModModeLine;
oldreq->screen = screen;
oldreq->hdisplay = modeline->hdisplay;
oldreq->hsyncstart = modeline->hsyncstart;
oldreq->hsyncend = modeline->hsyncend;
oldreq->htotal = modeline->htotal;
oldreq->vdisplay = modeline->vdisplay;
oldreq->vsyncstart = modeline->vsyncstart;
oldreq->vsyncend = modeline->vsyncend;
oldreq->vtotal = modeline->vtotal;
oldreq->flags = modeline->flags;
oldreq->privsize = modeline->privsize;
if (modeline->privsize) {
oldreq->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
} else {
GetReq(XF86VidModeModModeLine, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeModModeLine;
req->screen = screen;
req->hdisplay = modeline->hdisplay;
req->hsyncstart = modeline->hsyncstart;
req->hsyncend = modeline->hsyncend;
req->htotal = modeline->htotal;
req->hskew = modeline->hskew;
req->vdisplay = modeline->vdisplay;
req->vsyncstart = modeline->vsyncstart;
req->vsyncend = modeline->vsyncend;
req->vtotal = modeline->vtotal;
req->flags = modeline->flags;
req->privsize = modeline->privsize;
if (modeline->privsize) {
req->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
}
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Status
SDL_NAME(XF86VidModeValidateModeLine) (dpy, screen, modeline)
Display *dpy;
int screen;
SDL_NAME(XF86VidModeModeInfo)* modeline;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeValidateModeLineReq *req;
xXF86OldVidModeValidateModeLineReq *oldreq;
xXF86VidModeValidateModeLineReply rep;
int majorVersion, minorVersion;
XF86VidModeCheckExtension (dpy, info, 0);
SDL_NAME(XF86VidModeQueryVersion)(dpy, &majorVersion, &minorVersion);
LockDisplay(dpy);
if (majorVersion < 2) {
GetOldReq(XF86VidModeValidateModeLine, XF86OldVidModeValidateModeLine, oldreq);
oldreq->reqType = info->codes->major_opcode;
oldreq->xf86vidmodeReqType = X_XF86VidModeValidateModeLine;
oldreq->screen = screen;
oldreq->dotclock = modeline->dotclock;
oldreq->hdisplay = modeline->hdisplay;
oldreq->hsyncstart = modeline->hsyncstart;
oldreq->hsyncend = modeline->hsyncend;
oldreq->htotal = modeline->htotal;
oldreq->vdisplay = modeline->vdisplay;
oldreq->vsyncstart = modeline->vsyncstart;
oldreq->vsyncend = modeline->vsyncend;
oldreq->vtotal = modeline->vtotal;
oldreq->flags = modeline->flags;
oldreq->privsize = modeline->privsize;
if (modeline->privsize) {
oldreq->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
} else {
GetReq(XF86VidModeValidateModeLine, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeValidateModeLine;
req->screen = screen;
req->dotclock = modeline->dotclock;
req->hdisplay = modeline->hdisplay;
req->hsyncstart = modeline->hsyncstart;
req->hsyncend = modeline->hsyncend;
req->htotal = modeline->htotal;
req->hskew = modeline->hskew;
req->vdisplay = modeline->vdisplay;
req->vsyncstart = modeline->vsyncstart;
req->vsyncend = modeline->vsyncend;
req->vtotal = modeline->vtotal;
req->flags = modeline->flags;
req->privsize = modeline->privsize;
if (modeline->privsize) {
req->length += modeline->privsize;
Data32(dpy, (long *) modeline->private,
modeline->privsize * sizeof(INT32));
}
}
if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {
UnlockDisplay(dpy);
SyncHandle();
return MODE_BAD;
}
UnlockDisplay(dpy);
SyncHandle();
return rep.status;
}
Bool
SDL_NAME(XF86VidModeSwitchMode)(dpy, screen, zoom)
Display* dpy;
int screen;
int zoom;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeSwitchModeReq *req;
XF86VidModeCheckExtension (dpy, info, False);
LockDisplay(dpy);
GetReq(XF86VidModeSwitchMode, req);
req->reqType = info->codes->major_opcode;
req->xf86vidmodeReqType = X_XF86VidModeSwitchMode;
req->screen = screen;
req->zoom = zoom;
UnlockDisplay(dpy);
SyncHandle();
return True;
}
Bool
SDL_NAME(XF86VidModeSwitchToMode)(dpy, screen, modeline)
Display* dpy;
int screen;
SDL_NAME(XF86VidModeModeInfo)* modeline;
{
XExtDisplayInfo *info = find_display (dpy);
xXF86VidModeSwitchToModeReq *req;
xXF86OldVidModeSwitchToModeReq *oldreq;
int majorVersion, minorVersion;
Bool protocolBug = False;
XF86VidModeCheckExtension (dpy, info, False);
/*
* Note: There was a bug in the protocol implementation in versions
* 0.x with x < 8 (the .private field wasn't expected to be sent over
* the wire). Check the server's version, and accept the old format
* if appropriate.
*/
SDL_NAME(XF86VidModeQueryVersion)(dpy, &majorVersion, &minorVersion);
if (majorVersion == 0 && minorVersion < 8) {
protocolBug = True;
#ifdef DEBUG
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -