⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xf86dga.c

📁 远程桌面连接工具
💻 C
字号:
/* $XFree86: xc/programs/Xserver/Xext/xf86dga.c,v 3.8 1997/01/18 06:53:01 dawes Exp $ *//*Copyright (c) 1995  Jon TombsCopyright (c) 1995, 1996  XFree86 Inc*/#define NEED_REPLIES#define NEED_EVENTS#include "X.h"#include "Xproto.h"#include "misc.h"#include "dixstruct.h"#include "extnsionst.h"#include "colormapst.h"#include "cursorstr.h"#include "scrnintstr.h"#include "servermd.h"#define _XF86DGA_SERVER_#include "xf86dgastr.h"#include "swaprep.h"#include "../hw/xfree86/common/xf86.h"#include <X11/Xtrans.h>#include "../os/osdep.h"#include <X11/Xauth.h>#ifndef ESIX#ifndef Lynx#include <sys/socket.h>#else#include <socket.h>#endif#else#include <lan/socket.h>#endifextern int xf86ScreenIndex;static int DGAErrorBase;static DISPATCH_PROC(ProcDGAQueryVersion);static DISPATCH_PROC(ProcXF86DGADirectVideo);static DISPATCH_PROC(ProcXF86DGADispatch);static DISPATCH_PROC(ProcXF86DGAGetVidPage);static DISPATCH_PROC(ProcXF86DGAGetVideoLL);static DISPATCH_PROC(ProcXF86DGAGetViewPortSize);static DISPATCH_PROC(ProcXF86DGASetVidPage);static DISPATCH_PROC(ProcXF86DGASetViewPort);static DISPATCH_PROC(ProcDGAInstallColormap);static DISPATCH_PROC(ProcDGAQueryDirectVideo);static DISPATCH_PROC(ProcDGAViewPortChanged);/* * SProcs should probably be deleted, a local connection can never * be byte flipped!? - Jon. */static DISPATCH_PROC(SProcXF86DGADirectVideo);static DISPATCH_PROC(SProcXF86DGADispatch);static DISPATCH_PROC(SProcXF86DGAQueryVersion);static void XF86DGAResetProc(#if NeedFunctionPrototypes    ExtensionEntry* /* extEntry */#endif);static unsigned char DGAReqCode = 0;voidXFree86DGAExtensionInit(){    ExtensionEntry* extEntry;#ifdef XF86DGA_EVENTS    int		    i;    ScreenPtr	    pScreen;    EventType = CreateNewResourceType(XF86DGAFreeEvents);    ScreenPrivateIndex = AllocateScreenPrivateIndex ();    for (i = 0; i < screenInfo.numScreens; i++)    {	pScreen = screenInfo.screens[i];	SetScreenPrivate (pScreen, NULL);    }#endif    if (#ifdef XF86DGA_EVENTS        EventType && ScreenPrivateIndex != -1 &&#endif	(extEntry = AddExtension(XF86DGANAME,				XF86DGANumberEvents,				XF86DGANumberErrors,				ProcXF86DGADispatch,				SProcXF86DGADispatch,				XF86DGAResetProc,				StandardMinorOpcode))) {	DGAReqCode = (unsigned char)extEntry->base;	DGAErrorBase = extEntry->errorBase;    }}/*ARGSUSED*/static voidXF86DGAResetProc (extEntry)    ExtensionEntry* extEntry;{}static intProcDGAQueryVersion(client)    register ClientPtr client;{    xXF86DGAQueryVersionReply rep;    register int n;    REQUEST_SIZE_MATCH(xXF86DGAQueryVersionReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.majorVersion = XF86DGA_MAJOR_VERSION;    rep.minorVersion = XF86DGA_MINOR_VERSION;    if (client->swapped) {    	swaps(&rep.sequenceNumber, n);    	swapl(&rep.length, n);    }    WriteToClient(client, sizeof(xXF86DGAQueryVersionReply), (char *)&rep);    return (client->noClientException);}static intProcXF86DGAGetVideoLL(client)    register ClientPtr client;{    REQUEST(xXF86DGAGetVideoLLReq);    xXF86DGAGetVideoLLReply rep;    ScrnInfoPtr vptr;    register int n;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    REQUEST_SIZE_MATCH(xXF86DGAGetVideoLLReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;#if 0    xf86GetVidMemData(stuff->screen, &rep.offset, &rep.bank_size);#else    rep.offset = vptr->physBase;    rep.bank_size = vptr->physSize;#endif    rep.width = vptr->displayWidth;    rep.ram_size = vptr->videoRam;    if (client->swapped) {    	swaps(&rep.sequenceNumber, n);    	swapl(&rep.length, n);    	swapl(&rep.offset, n);    	swapl(&rep.width, n);    	swapl(&rep.bank_size, n);    	swapl(&rep.ram_size, n);    }    WriteToClient(client, SIZEOF(xXF86DGAGetVideoLLReply), (char *)&rep);    return (client->noClientException);}static intProcXF86DGADirectVideo(client)    register ClientPtr client;{    REQUEST(xXF86DGADirectVideoReq);    ScrnInfoPtr vptr;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq);    if (!(vptr->directMode&XF86DGADirectPresent)) {       /* chipset doesn't know about directVideoMode */	return DGAErrorBase + XF86DGANoDirectVideoMode;    }        /* Check that the current screen is active. */    if (!xf86VTSema && !(vptr->directMode & XF86DGADirectGraphics)) {	return DGAErrorBase + XF86DGAScreenNotActive;    }    if (stuff->enable&XF86DGADirectGraphics) {       vptr->directMode = stuff->enable|XF86DGADirectPresent;       if (xf86VTSema == TRUE) {	  vptr->EnterLeaveVT(LEAVE, stuff->screen);	  xf86VTSema = FALSE;       }    } else {       if (xf86VTSema == FALSE) {          xf86VTSema = TRUE;          vptr->EnterLeaveVT(ENTER, stuff->screen);       }       vptr->directMode = (0x0f&stuff->enable)|XF86DGADirectPresent;    }    return (client->noClientException);}static intProcXF86DGAGetViewPortSize(client)    register ClientPtr client;{    REQUEST(xXF86DGAGetViewPortSizeReq);    xXF86DGAGetViewPortSizeReply rep;    register int n;    ScrnInfoPtr vptr;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    REQUEST_SIZE_MATCH(xXF86DGAGetViewPortSizeReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.width = vptr->modes->HDisplay;    rep.height = vptr->modes->VDisplay;    if (client->swapped) {    	swaps(&rep.sequenceNumber, n);    	swapl(&rep.length, n);    	swapl(&rep.width, n);    	swapl(&rep.height, n);    }    WriteToClient(client, SIZEOF(xXF86DGAGetViewPortSizeReply), (char *)&rep);    return (client->noClientException);}static intProcXF86DGASetViewPort(client)    register ClientPtr client;{    REQUEST(xXF86DGASetViewPortReq);    ScrnInfoPtr vptr;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    REQUEST_SIZE_MATCH(xXF86DGASetViewPortReq);    if (vptr->AdjustFrame &&	(xf86VTSema == TRUE || vptr->directMode&XF86DGADirectGraphics))	vptr->AdjustFrame(stuff->x, stuff->y);    else	return DGAErrorBase + XF86DGAScreenNotActive;    return (client->noClientException);}static intProcXF86DGAGetVidPage(client)    register ClientPtr client;{    REQUEST(xXF86DGAGetVidPageReq);    ScrnInfoPtr vptr;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    ErrorF("XF86DGAGetVidPage not yet implemented\n");    REQUEST_SIZE_MATCH(xXF86DGAGetVidPageReq);    return (client->noClientException);}static intProcXF86DGASetVidPage(client)    register ClientPtr client;{    REQUEST(xXF86DGASetVidPageReq);    ScrnInfoPtr vptr;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    REQUEST_SIZE_MATCH(xXF86DGASetVidPageReq);    if (xf86VTSema == TRUE) {/* only valid when switched away! */	return DGAErrorBase + XF86DGADirectNotActivated;    }    if (!xf86VTSema && !(vptr->directMode & XF86DGADirectGraphics)) {	return DGAErrorBase + XF86DGAScreenNotActive;    }    if (vptr->setBank) {	vptr->setBank(stuff->vpage);    }    return (client->noClientException);}static intProcDGAInstallColormap(client)    register ClientPtr client;{    ColormapPtr pcmp;    ScrnInfoPtr vptr;    REQUEST(xXF86DGAInstallColormapReq);    REQUEST_SIZE_MATCH(xXF86DGAInstallColormapReq);    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    if (xf86VTSema == TRUE) {/* only valid when switched away! */	return DGAErrorBase + XF86DGADirectNotActivated;    }    if (!xf86VTSema && !(vptr->directMode & XF86DGADirectGraphics)) {	return DGAErrorBase + XF86DGAScreenNotActive;    }    pcmp = (ColormapPtr  )LookupIDByType(stuff->id, RT_COLORMAP);    if (pcmp)    {	vptr->directMode |= XF86DGADirectColormap;        vptr->directMode |= XF86DGAHasColormap;        (*(pcmp->pScreen->InstallColormap)) (pcmp);        vptr->directMode &= ~XF86DGAHasColormap;        return (client->noClientException);    }    else    {        client->errorValue = stuff->id;        return (BadColor);    }}static intProcXF86DGAQueryDirectVideo(client)    register ClientPtr client;{    REQUEST(xXF86DGAQueryDirectVideoReq);    xXF86DGAQueryDirectVideoReply rep;    register int n;    ScrnInfoPtr vptr;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    REQUEST_SIZE_MATCH(xXF86DGAQueryDirectVideoReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    rep.flags = vptr->directMode;    if (client->swapped) {    	swaps(&rep.sequenceNumber, n);    	swapl(&rep.length, n);    	swapl(&rep.flags, n);    }    WriteToClient(client, SIZEOF(xXF86DGAQueryDirectVideoReply), (char *)&rep);    return (client->noClientException);}static intProcXF86DGAViewPortChanged(client)    register ClientPtr client;{    REQUEST(xXF86DGAViewPortChangedReq);    xXF86DGAViewPortChangedReply rep;    register int n;    ScrnInfoPtr vptr;    if (stuff->screen > screenInfo.numScreens)	return BadValue;    vptr = (ScrnInfoPtr) screenInfo.screens[stuff->screen]->devPrivates[xf86ScreenIndex].ptr;    REQUEST_SIZE_MATCH(xXF86DGAViewPortChangedReq);    rep.type = X_Reply;    rep.length = 0;    rep.sequenceNumber = client->sequence;    /* For the moment, always return TRUE. */    rep.result = TRUE;    if (client->swapped) {    	swaps(&rep.sequenceNumber, n);    	swapl(&rep.length, n);    	swapl(&rep.result, n);    }    WriteToClient(client, SIZEOF(xXF86DGAViewPortChangedReply), (char *)&rep);    return (client->noClientException);}static intProcXF86DGADispatch (client)    register ClientPtr	client;{    REQUEST(xReq);    if (!LocalClient(client))	return DGAErrorBase + XF86DGAClientNotLocal;    switch (stuff->data)    {    case X_XF86DGAQueryVersion:	return ProcDGAQueryVersion(client);    case X_XF86DGAGetVideoLL:	return ProcXF86DGAGetVideoLL(client);    case X_XF86DGADirectVideo:	return ProcXF86DGADirectVideo(client);    case X_XF86DGAGetViewPortSize:	return ProcXF86DGAGetViewPortSize(client);    case X_XF86DGASetViewPort:	return ProcXF86DGASetViewPort(client);    case X_XF86DGAGetVidPage:	return ProcXF86DGAGetVidPage(client);    case X_XF86DGASetVidPage:	return ProcXF86DGASetVidPage(client);    case X_XF86DGAInstallColormap:	return ProcDGAInstallColormap(client);    case X_XF86DGAQueryDirectVideo:	return ProcXF86DGAQueryDirectVideo(client);    case X_XF86DGAViewPortChanged:	return ProcXF86DGAViewPortChanged(client);    default:	return BadRequest;    }}static intSProcXF86DGAQueryVersion(client)    register ClientPtr	client;{    register int n;    REQUEST(xXF86DGAQueryVersionReq);    swaps(&stuff->length, n);    return ProcDGAQueryVersion(client);}static intSProcXF86DGADirectVideo(client)    ClientPtr client;{    register int n;    REQUEST(xXF86DGADirectVideoReq);    swaps(&stuff->length, n);    REQUEST_SIZE_MATCH(xXF86DGADirectVideoReq);    swaps(&stuff->screen, n);    swaps(&stuff->enable, n);    return ProcXF86DGADirectVideo(client);}static intSProcXF86DGADispatch (client)    register ClientPtr	client;{    REQUEST(xReq);    /* It is bound to be non-local when there is byte swapping */    if (!LocalClient(client))	return DGAErrorBase + XF86DGAClientNotLocal;    switch (stuff->data)    {    case X_XF86DGAQueryVersion:	return SProcXF86DGAQueryVersion(client);    case X_XF86DGADirectVideo:	return SProcXF86DGADirectVideo(client);    default:	return BadRequest;    }}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -