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

📄 xf86dga2.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
    LockDisplay(dpy);    GetReq(XDGASelectInput, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGASelectInput;    req->screen = screen;    req->mask = mask;    UnlockDisplay(dpy);    SyncHandle();}void SDL_NAME(XDGAFillRectangle)(    Display	*dpy,    int		screen,    int		x,    int		y,    unsigned int	width,    unsigned int	height,    unsigned long	color){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGAFillRectangleReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    LockDisplay(dpy);    GetReq(XDGAFillRectangle, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGAFillRectangle;    req->screen = screen;    req->x = x;    req->y = y;    req->width = width;    req->height = height;    req->color = color;    UnlockDisplay(dpy);    SyncHandle();}void SDL_NAME(XDGACopyArea)(    Display	*dpy,    int		screen,    int		srcx,    int		srcy,    unsigned int	width,    unsigned int	height,    int		dstx,    int		dsty){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGACopyAreaReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    LockDisplay(dpy);    GetReq(XDGACopyArea, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGACopyArea;    req->screen = screen;    req->srcx = srcx;    req->srcy = srcy;    req->width = width;    req->height = height;    req->dstx = dstx;    req->dsty = dsty;    UnlockDisplay(dpy);    SyncHandle();}void SDL_NAME(XDGACopyTransparentArea)(    Display	*dpy,    int		screen,    int		srcx,    int		srcy,    unsigned int	width,    unsigned int	height,    int		dstx,    int		dsty,    unsigned long key){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGACopyTransparentAreaReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    LockDisplay(dpy);    GetReq(XDGACopyTransparentArea, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGACopyTransparentArea;    req->screen = screen;    req->srcx = srcx;    req->srcy = srcy;    req->width = width;    req->height = height;    req->dstx = dstx;    req->dsty = dsty;    req->key = key;    UnlockDisplay(dpy);    SyncHandle();}int SDL_NAME(XDGAGetViewportStatus)(    Display *dpy,    int screen ){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGAGetViewportStatusReply rep;    xXDGAGetViewportStatusReq *req;    int status = 0;    XDGACheckExtension (dpy, info, 0);    LockDisplay(dpy);    GetReq(XDGAGetViewportStatus, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGAGetViewportStatus;    req->screen = screen;    if (!_XReply(dpy, (xReply *)&rep, 0, xFalse))	status = rep.status;    UnlockDisplay(dpy);    SyncHandle();    return status;}void SDL_NAME(XDGASync)(    Display *dpy,    int screen ){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGASyncReply rep;    xXDGASyncReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    LockDisplay(dpy);    GetReq(XDGASync, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGASync;    req->screen = screen;    _XReply(dpy, (xReply *)&rep, 0, xFalse);    UnlockDisplay(dpy);    SyncHandle();}void SDL_NAME(XDGAChangePixmapMode)(    Display *dpy,    int screen,    int *x,    int *y,    int mode ){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGAChangePixmapModeReq *req;    xXDGAChangePixmapModeReply rep;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    LockDisplay(dpy);    GetReq(XDGAChangePixmapMode, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGAChangePixmapMode;    req->screen = screen;    req->x = *x;    req->y = *y;    req->flags = mode;    _XReply(dpy, (xReply *)&rep, 0, xFalse);    *x = rep.x;    *y = rep.y;    UnlockDisplay(dpy);    SyncHandle();}Colormap SDL_NAME(XDGACreateColormap)(    Display *dpy,    int screen,    SDL_NAME(XDGADevice) *dev,    int	alloc){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGACreateColormapReq *req;    Colormap cid;    XDGACheckExtension (dpy, info, -1);    LockDisplay(dpy);    GetReq(XDGACreateColormap, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGACreateColormap;    req->screen = screen;    req->mode = dev->mode.num;    req->alloc = alloc;    cid = req->id = XAllocID(dpy);    UnlockDisplay(dpy);    SyncHandle();    return cid;}void SDL_NAME(XDGAKeyEventToXKeyEvent)(    SDL_NAME(XDGAKeyEvent)* dk,     XKeyEvent* xk){    xk->type = dk->type;    xk->serial = dk->serial;    xk->send_event = False;    xk->display = dk->display;    xk->window = RootWindow(dk->display, dk->screen);    xk->root = xk->window;    xk->subwindow = None;    xk->time = dk->time;    xk->x = xk->y = xk->x_root = xk->y_root = 0;    xk->state = dk->state;    xk->keycode = dk->keycode;    xk->same_screen = True;}#include <X11/Xmd.h>#include <stdlib.h>#include <stdio.h>#include <fcntl.h>#if defined(ISC) # define HAS_SVR3_MMAP# include <sys/types.h># include <errno.h># include <sys/at_ansi.h># include <sys/kd.h># include <sys/sysmacros.h># include <sys/immu.h># include <sys/region.h># include <sys/mmap.h>#else# if !defined(Lynx)#  if !defined(__EMX__)#   include <sys/mman.h>#  endif# else#  include <sys/types.h>#  include <errno.h>#  include <smem.h># endif#endif#include <sys/wait.h>#include <signal.h>#include <unistd.h>#if defined(SVR4) && !defined(sun) && !defined(SCO325)#define DEV_MEM "/dev/pmem"#elif defined(SVR4) && defined(sun)#define DEV_MEM "/dev/xsvc"#else#define DEV_MEM "/dev/mem"#endiftypedef struct _DGAMapRec{  unsigned char *physical;  unsigned char *virtual;  CARD32 size;  int fd;  int screen;  struct _DGAMapRec *next;} DGAMapRec, *DGAMapPtr;static BoolDGAMapPhysical(int, char*, unsigned char*, CARD32, CARD32, CARD32, DGAMapPtr); static void DGAUnmapPhysical(DGAMapPtr);static DGAMapPtr _Maps = NULL;unsigned char*SDL_NAME(XDGAGetMappedMemory)(int screen){    DGAMapPtr pMap = _Maps;    unsigned char *pntr = NULL;    while(pMap != NULL) {	if(pMap->screen == screen) {	    pntr = pMap->virtual;	    break;	}	pMap = pMap->next;    }    return pntr;}BoolSDL_NAME(XDGAMapFramebuffer)(   int screen,   char *name,			/* optional device name */   unsigned char* base,		/* physical memory */   CARD32 size,			/* size */   CARD32 offset,		/* optional offset */   CARD32 extra			/* optional extra data */){   DGAMapPtr pMap = _Maps;   Bool result;      /* is it already mapped ? */   while(pMap != NULL) {     if(pMap->screen == screen)	return True;     pMap = pMap->next;   }   if(extra & XDGANeedRoot) {    /* we should probably check if we have root permissions and       return False here */   }   pMap = (DGAMapPtr)Xmalloc(sizeof(DGAMapRec));   result = DGAMapPhysical(screen, name, base, size, offset, extra, pMap);   if(result) {      pMap->next = _Maps;      _Maps = pMap;   } else       Xfree(pMap);      return result;}voidSDL_NAME(XDGAUnmapFramebuffer)(int screen){   DGAMapPtr pMap = _Maps;   DGAMapPtr pPrev = NULL;   /* is it already mapped */    while(pMap != NULL) {	if(pMap->screen == screen)	    break;	pPrev = pMap;	pMap = pMap->next;    }    if(!pMap)	return;    DGAUnmapPhysical(pMap);    if(!pPrev)	_Maps = pMap->next;    else	pPrev->next = pMap->next;    Xfree(pMap);}static BoolDGAMapPhysical(   int screen,   char *name,			/* optional device name */   unsigned char* base,		/* physical memory */   CARD32 size,			/* size */   CARD32 offset,		/* optional offset */   CARD32 extra,		/* optional extra data */   DGAMapPtr pMap) {#if defined(ISC) && defined(HAS_SVR3_MMAP)    struct kd_memloc mloc;#elif defined(__EMX__)    APIRET rc;    ULONG action;    HFILE hfd;#endif      base += offset;    pMap->screen = screen;    pMap->physical = base;    pMap->size = size;#if defined(ISC) && defined(HAS_SVR3_MMAP)    if ((pMap->fd = open("/dev/mmap", O_RDWR)) < 0)	return False;    mloc.vaddr = (char *)0;    mloc.physaddr = (char *)base;    mloc.length = size;    mloc.ioflg=1;    if ((pMap->virtual = (void *)ioctl(pMap->fd, MAP, &mloc)) == (void *)-1)	return False;#elif defined (__EMX__)    /*     * Dragon warning here! /dev/pmap$ is never closed, except on progam exit.     * Consecutive calling of this routine will make PMAP$ driver run out     * of memory handles. Some umap/close mechanism should be provided     */    rc = DosOpen("/dev/pmap$", &hfd, &action, 0, FILE_NORMAL, FILE_OPEN,		 OPEN_ACCESS_READWRITE | OPEN_SHARE_DENYNONE, (PEAOP2)NULL);    if (rc != 0)	return False;    {	struct map_ioctl {		union {			ULONG phys;			void* user;		} a;		ULONG size;	} pmap,dmap;	ULONG plen,dlen;#define XFREE86_PMAP	0x76#define PMAP_MAP	0x44	pmap.a.phys = base;	pmap.size = size;	rc = DosDevIOCtl(hfd, XFREE86_PMAP, PMAP_MAP,			 (PULONG)&pmap, sizeof(pmap), &plen,			 (PULONG)&dmap, sizeof(dmap), &dlen);	if (rc == 0) {		pMap->virtual = dmap.a.user;	}   }   if (rc != 0)	return False;#elif defined (Lynx)    pMap->virtual = smem_create("XF86DGA", (char*)base, size, SM_READ|SM_WRITE);#else#ifndef MAP_FILE#define MAP_FILE 0#endif    if (!name)	    name = DEV_MEM;    if ((pMap->fd = open(name, O_RDWR)) < 0)#if defined(linux)    { /* /dev/fb0 fallback added by Sam Lantinga <hercules@lokigames.com> */        /* Try to fall back to /dev/fb on Linux - FIXME: verify the device */        struct fb_fix_screeninfo finfo;        if ((pMap->fd = open("/dev/fb0", O_RDWR)) < 0) {            return False;        }        /* The useable framebuffer console memory may not be the whole           framebuffer that X has access to. :-(         */        if ( ioctl(pMap->fd, FBIOGET_FSCREENINFO, &finfo) < 0 ) {            close(pMap->fd);            return False;        }        /* Warning: On PPC, the size and virtual need to be offset by:           (((long)finfo.smem_start) -           (((long)finfo.smem_start)&~(PAGE_SIZE-1)))         */        base = 0;        size = finfo.smem_len;    }#else	return False;#endif    pMap->virtual = mmap(NULL, size, PROT_READ | PROT_WRITE, 			MAP_FILE | MAP_SHARED, pMap->fd, (off_t)base);    if (pMap->virtual == (void *)-1)	return False;#endif#if !defined(ISC) && !defined(HAS_SVR3_MMAP) && !defined(Lynx) \	&& !defined(__EMX__)    mprotect(pMap->virtual, size, PROT_READ | PROT_WRITE);#endif    return True;}static voidDGAUnmapPhysical(DGAMapPtr pMap){#if !defined(ISC) && !defined(HAS_SVR3_MMAP) && !defined(Lynx) \	&& !defined(__EMX__)    mprotect(pMap->virtual,pMap->size, PROT_READ);#elif defined(Lynx)	/* XXX this doesn't allow enable after disable */    smem_create(NULL, pMap->virtual, pMap->size, SM_DETACH);    smem_remove("XF86DGA");#endif   /* We need to unmap and close too !!!!!!!!!!*/}

⌨️ 快捷键说明

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