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

📄 xf86dga2.c

📁 网络MPEG4IP流媒体开发源代码
💻 C
📖 第 1 页 / 共 2 页
字号:
/* $XFree86: xc/lib/Xxf86dga/XF86DGA2.c,v 1.18 2001/08/17 13:27:51 dawes Exp $ *//*Copyright (c) 1995  Jon TombsCopyright (c) 1995,1996  The XFree86 Project, Inc*//* THIS IS NOT AN X CONSORTIUM STANDARD */#ifdef __EMX__ /* needed here to override certain constants in X headers */#define INCL_DOS#define INCL_DOSIOCTL#include <os2.h>#endif#define NEED_EVENTS#define NEED_REPLIES#include <X11/Xlibint.h>#include "xf86dga.h"#include "xf86dgastr.h"#include <X11/extensions/Xext.h>#include "extutil.h"#include <stdio.h>#if defined(linux)  /* Needed for framebuffer console support */#include <sys/ioctl.h>#include <linux/fb.h>#endif/* If you change this, change the Bases[] array below as well */#define MAX_HEADS 16char *SDL_NAME(xdga_extension_name) = XF86DGANAME;static XExtensionInfo _xdga_info_data;static XExtensionInfo *xdga_info = &_xdga_info_data; Bool SDL_NAME(XDGAMapFramebuffer)(int, char *, unsigned char*, CARD32, CARD32, CARD32);void SDL_NAME(XDGAUnmapFramebuffer)(int);unsigned char* SDL_NAME(XDGAGetMappedMemory)(int);#define XDGACheckExtension(dpy,i,val) \  XextCheckExtension (dpy, i, SDL_NAME(xdga_extension_name), val)/***************************************************************************** *                                                                           * *			   private utility routines                          * *                                                                           * *****************************************************************************/static int xdga_close_display(Display *dpy, XExtCodes *codes);static Bool xdga_wire_to_event(Display *dpy, XEvent *event, xEvent *wire_ev);static Status xdga_event_to_wire(Display *dpy, XEvent *event, xEvent *wire_ev);static XExtensionHooks xdga_extension_hooks = {    NULL,				/* create_gc */    NULL,				/* copy_gc */    NULL,				/* flush_gc */    NULL,				/* free_gc */    NULL,				/* create_font */    NULL,				/* free_font */    xdga_close_display,			/* close_display */    xdga_wire_to_event,			/* wire_to_event */    xdga_event_to_wire,			/* event_to_wire */    NULL,				/* error */    NULL,				/* error_string */};static XEXT_GENERATE_CLOSE_DISPLAY (xdga_close_display, xdga_info)XEXT_GENERATE_FIND_DISPLAY (SDL_NAME(xdga_find_display), xdga_info, 				   "XFree86-DGA", 				   &xdga_extension_hooks, 				   0, NULL)static Statusxdga_event_to_wire(  Display *dpy,  XEvent *event,  xEvent *wire_ev){    return True;}static Boolxdga_wire_to_event(  Display *dpy,  XEvent *event,  xEvent *wire_ev){  dgaEvent *wire = (dgaEvent *) wire_ev;  SDL_NAME(XDGAButtonEvent) *bevent;  SDL_NAME(XDGAKeyEvent) *kevent;  SDL_NAME(XDGAMotionEvent) *mevent;  XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);  XDGACheckExtension (dpy, info, False);  switch((wire->u.u.type & 0x7f) - info->codes->first_event) {  case MotionNotify:	mevent = (SDL_NAME(XDGAMotionEvent)*)event;	mevent->type = wire->u.u.type & 0x7F;	mevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);	mevent->display = dpy;	mevent->screen = wire->u.event.screen;	mevent->time = wire->u.event.time;	mevent->state = wire->u.event.state;	mevent->dx = wire->u.event.dx;	mevent->dy = wire->u.event.dy;	return True;  case ButtonPress:  case ButtonRelease:	bevent = (SDL_NAME(XDGAButtonEvent)*)event;	bevent->type = wire->u.u.type & 0x7F;	bevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);	bevent->display = dpy;	bevent->screen = wire->u.event.screen;	bevent->time = wire->u.event.time;	bevent->state = wire->u.event.state;	bevent->button = wire->u.u.detail;	return True;  case KeyPress:  case KeyRelease:	kevent = (SDL_NAME(XDGAKeyEvent)*)event;	kevent->type = wire->u.u.type & 0x7F;	kevent->serial = _XSetLastRequestRead(dpy, (xGenericReply *)wire);	kevent->display = dpy;	kevent->screen = wire->u.event.screen;	kevent->time = wire->u.event.time;	kevent->state = wire->u.event.state;	kevent->keycode = wire->u.u.detail;	return True;  }  return False;}Bool SDL_NAME(XDGAQueryExtension) (    Display *dpy,    int *event_basep,    int *error_basep){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    if (XextHasExtension(info)) {	*event_basep = info->codes->first_event;	*error_basep = info->codes->first_error;	return True;    } else {	return False;    }}Bool SDL_NAME(XDGAQueryVersion)(    Display *dpy,    int *majorVersion,     int *minorVersion){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGAQueryVersionReply rep;    xXDGAQueryVersionReq *req;    XDGACheckExtension (dpy, info, False);    LockDisplay(dpy);    GetReq(XDGAQueryVersion, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGAQueryVersion;    if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {	UnlockDisplay(dpy);	SyncHandle();	return False;    }    *majorVersion = rep.majorVersion;    *minorVersion = rep.minorVersion;    UnlockDisplay(dpy);    SyncHandle();    if (*majorVersion >= 2)    {	int i, j;	for (i = 0, j = info->codes->first_event;	     i < XF86DGANumberEvents;	     i++, j++) 	{	    XESetWireToEvent (dpy, j, xdga_wire_to_event);	    XESetEventToWire (dpy, j, xdga_event_to_wire);	}	SDL_NAME(XDGASetClientVersion)(dpy);    }    return True;}Bool SDL_NAME(XDGASetClientVersion)(    Display	*dpy){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGASetClientVersionReq *req;    XDGACheckExtension (dpy, info, False);    LockDisplay(dpy);    GetReq(XDGASetClientVersion, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGASetClientVersion;    req->major = XDGA_MAJOR_VERSION;    req->minor = XDGA_MINOR_VERSION;    UnlockDisplay(dpy);    SyncHandle();    return True;}Bool SDL_NAME(XDGAOpenFramebuffer)(    Display	*dpy,    int 	screen){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGAOpenFramebufferReply rep;    xXDGAOpenFramebufferReq *req;    char *deviceName = NULL;    Bool ret;    XDGACheckExtension (dpy, info, False);    LockDisplay(dpy);    GetReq(XDGAOpenFramebuffer, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGAOpenFramebuffer;    req->screen = screen;    if (!_XReply(dpy, (xReply *)&rep, 0, xFalse)) {	UnlockDisplay(dpy);	SyncHandle();	return False;    }    if(rep.length) {	deviceName = Xmalloc(rep.length << 2);	_XRead(dpy, deviceName, rep.length << 2);    }    ret = SDL_NAME(XDGAMapFramebuffer)(screen, deviceName,				(unsigned char*)(long)rep.mem1, 				rep.size, rep.offset, rep.extra);    if(deviceName)	Xfree(deviceName);	    UnlockDisplay(dpy);    SyncHandle();    return ret;}void SDL_NAME(XDGACloseFramebuffer)(    Display	*dpy,    int		screen){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGACloseFramebufferReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    SDL_NAME(XDGAUnmapFramebuffer)(screen);    LockDisplay(dpy);    GetReq(XDGACloseFramebuffer, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGACloseFramebuffer;    req->screen = screen;    UnlockDisplay(dpy);    SyncHandle();}SDL_NAME(XDGAMode)* SDL_NAME(XDGAQueryModes)(    Display *dpy,    int screen,    int *num){    XExtDisplayInfo *dinfo = SDL_NAME(xdga_find_display) (dpy);    xXDGAQueryModesReply rep;    xXDGAQueryModesReq *req;    SDL_NAME(XDGAMode) *modes = NULL;    *num = 0;    XDGACheckExtension (dpy, dinfo, NULL);    LockDisplay(dpy);    GetReq(XDGAQueryModes, req);    req->reqType = dinfo->codes->major_opcode;    req->dgaReqType = X_XDGAQueryModes;    req->screen = screen;    if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {	if(rep.length) {	   xXDGAModeInfo info;	   int i, size;	   char *offset;	   size = rep.length << 2;	   size -= rep.number * sz_xXDGAModeInfo; /* find text size */	   modes = (SDL_NAME(XDGAMode)*)Xmalloc((rep.number * sizeof(SDL_NAME(XDGAMode))) + size);	   offset = (char*)(&modes[rep.number]); /* start of text */	   if(modes) {		      for(i = 0; i < rep.number; i++) {		_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);		modes[i].num = info.num;		modes[i].verticalRefresh = 			(float)info.vsync_num / (float)info.vsync_den;		modes[i].flags = info.flags;		modes[i].imageWidth = info.image_width;		modes[i].imageHeight = info.image_height;		modes[i].pixmapWidth = info.pixmap_width;		modes[i].pixmapHeight = info.pixmap_height;		modes[i].bytesPerScanline = info.bytes_per_scanline;		modes[i].byteOrder = info.byte_order;		modes[i].depth = info.depth;		modes[i].bitsPerPixel = info.bpp;		modes[i].redMask = info.red_mask;		modes[i].greenMask = info.green_mask;		modes[i].blueMask = info.blue_mask;		modes[i].visualClass = info.visual_class;		modes[i].viewportWidth = info.viewport_width;		modes[i].viewportHeight = info.viewport_height;		modes[i].xViewportStep = info.viewport_xstep;		modes[i].yViewportStep = info.viewport_ystep;		modes[i].maxViewportX = info.viewport_xmax;		modes[i].maxViewportY = info.viewport_ymax;		modes[i].viewportFlags = info.viewport_flags;		modes[i].reserved1 = info.reserved1;		modes[i].reserved2 = info.reserved2;			_XRead(dpy, offset, info.name_size);		modes[i].name = offset;		offset += info.name_size;	      }	      *num = rep.number;	   } else		_XEatData(dpy, rep.length << 2);	}    }    UnlockDisplay(dpy);    SyncHandle();    return modes;}SDL_NAME(XDGADevice) * SDL_NAME(XDGASetMode)(    Display	*dpy,    int		screen,    int		mode){    XExtDisplayInfo *dinfo = SDL_NAME(xdga_find_display) (dpy);    xXDGASetModeReply rep;    xXDGASetModeReq *req;    SDL_NAME(XDGADevice) *dev = NULL;    Pixmap pid;    XDGACheckExtension (dpy, dinfo, NULL);    LockDisplay(dpy);    GetReq(XDGASetMode, req);    req->reqType = dinfo->codes->major_opcode;    req->dgaReqType = X_XDGASetMode;    req->screen = screen;    req->mode = mode;    req->pid = pid = XAllocID(dpy);        if (_XReply(dpy, (xReply *)&rep, 0, xFalse)) {	if(rep.length) {	   xXDGAModeInfo info;	   int size;	   size = rep.length << 2;	   size -= sz_xXDGAModeInfo; /* get text size */	   dev = (SDL_NAME(XDGADevice)*)Xmalloc(sizeof(SDL_NAME(XDGADevice)) + size);	    	   if(dev) {		_XRead(dpy, (char*)(&info), sz_xXDGAModeInfo);		dev->mode.num = info.num;		dev->mode.verticalRefresh = 				(float)info.vsync_num / (float)info.vsync_den;		dev->mode.flags = info.flags;		dev->mode.imageWidth = info.image_width;		dev->mode.imageHeight = info.image_height;		dev->mode.pixmapWidth = info.pixmap_width;		dev->mode.pixmapHeight = info.pixmap_height;		dev->mode.bytesPerScanline = info.bytes_per_scanline;		dev->mode.byteOrder = info.byte_order;		dev->mode.depth = info.depth;		dev->mode.bitsPerPixel = info.bpp;		dev->mode.redMask = info.red_mask;		dev->mode.greenMask = info.green_mask;		dev->mode.blueMask = info.blue_mask;		dev->mode.visualClass = info.visual_class;		dev->mode.viewportWidth = info.viewport_width;		dev->mode.viewportHeight = info.viewport_height;		dev->mode.xViewportStep = info.viewport_xstep;		dev->mode.yViewportStep = info.viewport_ystep;		dev->mode.maxViewportX = info.viewport_xmax;		dev->mode.maxViewportY = info.viewport_ymax;		dev->mode.viewportFlags = info.viewport_flags;		dev->mode.reserved1 = info.reserved1;		dev->mode.reserved2 = info.reserved2;		dev->mode.name = (char*)(&dev[1]);			_XRead(dpy, dev->mode.name, info.name_size);		dev->pixmap = (rep.flags & XDGAPixmap) ? pid : 0;		dev->data = SDL_NAME(XDGAGetMappedMemory)(screen);		if(dev->data)		    dev->data += rep.offset;	   } 	   /* not sure what to do if the allocation fails */	}    }    UnlockDisplay(dpy);    SyncHandle();    return dev;}void SDL_NAME(XDGASetViewport)(    Display	*dpy,    int		screen,    int		x,    int		y,    int		flags){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGASetViewportReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    LockDisplay(dpy);    GetReq(XDGASetViewport, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGASetViewport;    req->screen = screen;    req->x = x;    req->y = y;    req->flags = flags;    UnlockDisplay(dpy);    SyncHandle();}void SDL_NAME(XDGAInstallColormap)(    Display	*dpy,    int		screen,    Colormap	cmap){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGAInstallColormapReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));    LockDisplay(dpy);    GetReq(XDGAInstallColormap, req);    req->reqType = info->codes->major_opcode;    req->dgaReqType = X_XDGAInstallColormap;    req->screen = screen;    req->cmap = cmap;    UnlockDisplay(dpy);    SyncHandle();}void SDL_NAME(XDGASelectInput)(    Display	*dpy,    int		screen,    long	mask){    XExtDisplayInfo *info = SDL_NAME(xdga_find_display) (dpy);    xXDGASelectInputReq *req;    XextSimpleCheckExtension (dpy, info, SDL_NAME(xdga_extension_name));

⌨️ 快捷键说明

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