亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? xlib.c

?? 十七種模擬器源代碼 非常有用的作課程設計不可缺少的
?? C
字號:
/* * xlib.c * * Xlib interface. * dist under gnu gpl */#ifdef HAVE_CONFIG_H#include "config.h"#if defined(HAVE_LIBXEXT) && defined(HAVE_X11_EXTENSIONS_XSHM_H) \ && defined(HAVE_SYS_IPC_H) && defined(HAVE_SYS_SHM_H)#define USE_XSHM#endif#else#define USE_XSHM  /* assume we have shm if no config.h */#endif#include <stdlib.h>#include <X11/Xlib.h>#include <X11/Xutil.h>#include <X11/keysym.h>#ifdef USE_XSHM#include <X11/extensions/XShm.h>#include <sys/ipc.h>#include <sys/shm.h>#endif#include "fb.h"#include "input.h"#include "rc.h"struct fb fb;static int vmode[3] = { 0, 0, 0 };static int x_shmsync = 1;rcvar_t vid_exports[] ={	RCV_VECTOR("vmode", &vmode, 3),	RCV_BOOL("x_shmsync", &x_shmsync),	RCV_END};static int initok;/* Loads of bogus Xlib crap...bleh */static char *x_displayname;static Display *x_display;static int x_screen;static struct{	int bits;	int vc;	int bytes;} x_vissup[] ={	{ 8, PseudoColor, 1 },	{ 15, TrueColor, 2 },	{ 16, TrueColor, 2 },	{ 32, TrueColor, 4 },	{ 24, TrueColor, 3 },	{ 0, 0, 0 }};static int x_bits, x_bytes;static Visual *x_vis;static XVisualInfo x_visinfo;static int x_pseudo;static Colormap x_cmap;static XColor x_ctable[256];static int x_wattrmask;static XSetWindowAttributes x_wattr;static int x_gcvalmask;static XGCValues x_gcval;static Window x_win;static int x_win_x, x_win_y;static int x_width, x_height;static GC x_gc;static XSizeHints x_size;static XWMHints x_wmhints;/*static XClassHint x_class;*/#ifdef USE_XSHMstatic XShmSegmentInfo x_shm;#endifstatic int x_useshm;static int x_shmevent;static int x_shmdone;static XImage *x_image;static int x_byteswap;static XEvent x_ev;static void freescreen(){	if (!initok || !x_image) return;	if ((char *)fb.ptr != (char *)x_image->data)		free(fb.ptr);#ifdef USE_XSHM	if (x_useshm)	{		/* FIXME - is this the right way to free shared mem? */		XSync(x_display, False);		if (!XShmDetach(x_display, &x_shm))			die ("XShmDetach failed\n");		XSync(x_display, False);		shmdt(x_shm.shmaddr);		shmctl(x_shm.shmid, IPC_RMID, 0);		x_image->data = NULL;	}#endif	free(x_image);	x_image = NULL;	fb.ptr = NULL;}static void allocscreen(){	if (initok) freescreen();#ifdef USE_XSHM	if (x_useshm)	{		x_image = XShmCreateImage(			x_display, x_vis, x_bits, ZPixmap, 0,			&x_shm, x_width, x_height);		if (x_image)		{			x_shm.shmid = shmget(				IPC_PRIVATE,				x_image->bytes_per_line * x_image->height,				IPC_CREAT | 0777);			if (x_shm.shmid < 0)				die("shmget failed\n");			x_image->data = x_shm.shmaddr =				shmat(x_shm.shmid, 0, 0);			if (!x_image->data)				die("shmat failed\n");			if (!XShmAttach(x_display, &x_shm))				die("XShmAttach failed\n");			XSync(x_display, False);			x_shmdone = 1;			fb.pitch = x_image->bytes_per_line;		}		else		{			x_useshm = 0;		}	}#endif	if (!x_useshm)	{		x_image = XCreateImage(			x_display, x_vis, x_bits, ZPixmap, 0,			malloc(x_width*x_height*x_bytes),			x_width, x_height, x_bits, x_width*x_bytes);		if (!x_image)			die("XCreateImage failed\n");	}	x_byteswap = x_image->byte_order ==#ifdef IS_LITTLE_ENDIAN		MSBFirst#else		LSBFirst#endif		;	if (x_byteswap && x_bytes > 1)		fb.ptr = malloc(x_image->bytes_per_line * x_image->height);	else		fb.ptr = x_image->data;}void vid_resize(){	freescreen();	x_width = fb.w;	x_height = fb.h;	XResizeWindow(x_display, x_win, x_width, x_height);	x_size.flags = PSize | PMinSize | PMaxSize;	x_size.min_width = x_size.max_width = x_size.base_width = x_width;	x_size.min_height = x_size.max_height = x_size.base_height = x_height;	XSetWMNormalHints(x_display, x_win, &x_size);	XSync(x_display, False);	allocscreen();}static void colorshifts(){	int i;	int mask[3];	int l, c;	mask[0] = x_vis->red_mask;	mask[1] = x_vis->green_mask;	mask[2] = x_vis->blue_mask;	for (i = 0; i < 3; i++)	{		for (l = 0; l < 32 && !((1<<l) & mask[i]); l++);		for (c = 0; l+c < 32 && ((1<<(l+c)) & mask[i]); c++);		fb.cc[i].l = l;		fb.cc[i].r = 8-c;	}}void vid_preinit(){	/* do nothing; only needed on systems where we must drop perms */}void vid_init(){	int i;		if (initok) return;	x_displayname = getenv("DISPLAY");	if (!x_displayname)		die("DISPLAY environment variable not set\n");	x_display = XOpenDisplay(NULL);	if (!x_display)		die("failed to connect to X display\n");	x_screen = DefaultScreen(x_display);	for (i = 0; x_vissup[i].bits; i++)	{		if (XMatchVisualInfo(			x_display, x_screen,			x_vissup[i].bits, x_vissup[i].vc, &x_visinfo))		{			if (x_vissup[i].vc == PseudoColor)				x_pseudo = 1;			else				x_pseudo = 0;			x_bits = x_vissup[i].bits;			x_bytes = x_vissup[i].bytes;			break;		}	}	if (!x_bits) die("no suitable X visuals\n");	x_vis = x_visinfo.visual;	if (!x_vis) die("X visual is NULL");	if (x_pseudo)	{		x_cmap = XCreateColormap(			x_display, RootWindow(x_display, x_screen),			x_vis, AllocAll);		for (i = 0; i < 256; i++)		{			x_ctable[i].pixel = i;			x_ctable[i].flags = DoRed|DoGreen|DoBlue;		}	}	x_wattrmask = CWEventMask | CWBorderPixel | CWColormap;	x_wattr.event_mask = KeyPressMask | KeyReleaseMask | ExposureMask		| FocusChangeMask;	x_wattr.border_pixel = 0;	x_wattr.colormap = x_cmap;	x_gcvalmask = GCGraphicsExposures;	x_gcval.graphics_exposures = False;	if (!vmode[0] || !vmode[1])	{		int scale = rc_getint("scale");		if (scale < 1) scale = 1;		vmode[0] = 160 * scale;		vmode[1] = 144 * scale;	}		fb.w = vmode[0];	fb.h = vmode[1];	fb.pelsize = x_bytes == 3 ? 4 : x_bytes;	fb.pitch = fb.w * fb.pelsize;	fb.indexed = x_pseudo;	fb.enabled = 1;	fb.dirty = 0;		x_win_x = x_win_y = 0;	x_width = fb.w;	x_height = fb.h;	x_win = XCreateWindow(		x_display, RootWindow(x_display, x_screen),		x_win_x, x_win_y, x_width, x_height, 0, x_bits,		InputOutput, x_vis, x_wattrmask, &x_wattr);	if (!x_win) die("could not create X window\n");	x_gc = XCreateGC(x_display, x_win, x_gcvalmask, &x_gcval);	x_size.flags = PSize | PMinSize | PMaxSize;	x_size.min_width = x_size.max_width = x_size.base_width = x_width;	x_size.min_height = x_size.max_height = x_size.base_height = x_height;	XSetWMNormalHints(x_display, x_win, &x_size);	x_wmhints.initial_state = NormalState;	x_wmhints.input = True;	x_wmhints.flags = StateHint | InputHint;	XSetWMHints(x_display, x_win, &x_wmhints);	/* FIXME - set X class info stuff (with XSetClassHint)... */		XMapWindow(x_display, x_win);	for(;;)	{		XNextEvent(x_display, &x_ev);		if (x_ev.type == Expose && !x_ev.xexpose.count)			break;	}	XSetInputFocus(x_display, x_win, RevertToPointerRoot, CurrentTime);#ifdef USE_XSHM	if (XShmQueryExtension(x_display) && x_displayname[0] == ':')	{		x_useshm = 1;		x_shmevent = XShmGetEventBase(x_display) + ShmCompletion;	}#endif	colorshifts();	allocscreen();	joy_init();	initok = 1;}void vid_close(){	joy_close();	if (!initok) return;	freescreen();	XFreeGC(x_display, x_gc);	XDestroyWindow(x_display, x_win);	XCloseDisplay(x_display);	initok = 0;}/* keymap - mappings of the form { keysym, localcode } - from x11/keymap.c */extern int keymap[][2];static int mapxkeycode(int xkeycode){	int i;	int sym;	int code;	sym = XKeycodeToKeysym(x_display, xkeycode, 0);	for (i = 0; keymap[i][0]; i++)		if (keymap[i][0] == sym)			return keymap[i][1];	if (sym < XK_space || sym > XK_asciitilde)		return 0;	code = sym - XK_space + ' ';	if (code >= 'A' && code <= 'Z')		code = tolower(code);;	return code;}void vid_end();static int nextevent(int sync){	event_t ev;		if (!sync && !XPending(x_display))		return 0;	XNextEvent(x_display, &x_ev);	switch(x_ev.type)	{	case KeyPress:		ev.type = EV_PRESS;		ev.code = mapxkeycode(x_ev.xkey.keycode);		break;	case KeyRelease:		ev.type = EV_RELEASE;		ev.code = mapxkeycode(x_ev.xkey.keycode);		break;	case Expose:		vid_end();		return 1;		break;	default:		if (x_ev.type == x_shmevent) x_shmdone = 1;		return 1;		break;	}	return ev_postevent(&ev);  /* returns 0 if queue is full */}void ev_poll(){	while (nextevent(0));	joy_poll();}void vid_settitle(char *title){	XStoreName(x_display, x_win, title);	XSetIconName(x_display, x_win, title);}void vid_setpal(int i, int r, int g, int b){	if (!initok) return;		if (x_pseudo == 1)	{		x_ctable[i].red = r << 8;		x_ctable[i].green = g << 8;		x_ctable[i].blue = b << 8;		XStoreColors(x_display, x_cmap, x_ctable, 256);	}}void vid_begin(){	if (!x_useshm) return;	/* XSync(x_display, False); */	while (!x_shmdone && x_shmsync)		nextevent(1);}static void endianswap(){	int cnt;	un16 t16;	un32 t32;	un16 *src16 = (void *)fb.ptr;	un16 *dst16 = (void *)x_image->data;	un32 *src32 = (void *)fb.ptr;	un32 *dst32 = (void *)x_image->data;		switch (x_bytes)	{	case 2:		cnt = (x_image->bytes_per_line * x_image->height)>>1;		while (cnt--)		{			t16 = *(src16++);			*(dst16++) = (t16 << 8) | (t16 >> 8);		}		break;	case 4:		cnt = (x_image->bytes_per_line * x_image->height)>>2;		while (cnt--)		{			t32 = *(src32++);			*(dst32++) = (t32 << 24) | ((t32 << 8) & 0x00FF0000) |				((t32 >> 8) & 0x0000FF00) | (t32 >> 24);		}		break;	}}void vid_end(){	if (!initok) return;	if (x_byteswap) endianswap();	if (x_useshm)	{		if (!x_shmdone) return;#ifdef USE_XSHM		if (!XShmPutImage(			x_display, x_win, x_gc, x_image,			0, 0, 0, 0, x_width, x_height, True))			die("XShmPutImage failed\n");#endif		x_shmdone = 0;	}	else	{		XPutImage(x_display, x_win, x_gc, x_image,			  0, 0, 0, 0, x_width, x_height);	}}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日韩精彩视频在线观看| 亚洲精品成人在线| 欧美精品1区2区3区| 欧美亚洲一区三区| 欧洲精品一区二区| 欧美日韩精品一区二区三区蜜桃 | 日韩一卡二卡三卡四卡| 欧美精品国产精品| 欧美日韩二区三区| 91精品综合久久久久久| 欧美电影免费提供在线观看| 欧美videos中文字幕| 精品国产人成亚洲区| 久久综合久久综合九色| 中文欧美字幕免费| 亚洲少妇30p| 婷婷综合五月天| 久色婷婷小香蕉久久| 国产成人精品免费一区二区| www.成人在线| 精品视频1区2区| 91精品久久久久久久99蜜桃| 国产亚洲一本大道中文在线| 亚洲欧美一区二区三区孕妇| 亚洲国产综合色| 久88久久88久久久| 风间由美一区二区av101 | 亚洲综合色网站| 日韩电影在线免费| 国产91露脸合集magnet | 香蕉成人啪国产精品视频综合网| 日本v片在线高清不卡在线观看| 国产精品伊人色| 欧美在线你懂得| 亚洲精品一区二区三区在线观看| 中文字幕在线不卡一区| 午夜精品久久久久久久99樱桃| 国模一区二区三区白浆| 在线亚洲精品福利网址导航| 久久伊人蜜桃av一区二区| 亚洲精品亚洲人成人网在线播放| 开心九九激情九九欧美日韩精美视频电影 | 99精品热视频| 日韩欧美国产综合一区| 亚洲图片另类小说| 久久国产成人午夜av影院| 色婷婷久久一区二区三区麻豆| 欧美电影免费观看高清完整版| 亚洲欧美另类小说| 国产一区不卡精品| 欧美一区二区精品在线| 亚洲精品国产一区二区三区四区在线| 韩国中文字幕2020精品| 911国产精品| 亚洲一区视频在线观看视频| 粉嫩13p一区二区三区| 精品国产髙清在线看国产毛片| 一级做a爱片久久| av电影在线观看完整版一区二区| 精品国产伦一区二区三区观看方式| 亚洲高清三级视频| 在线观看亚洲成人| 中文字幕亚洲在| 成人一级片在线观看| 久久伊人中文字幕| 精品影视av免费| 欧美成人乱码一区二区三区| 日韩精品成人一区二区在线| 欧美午夜不卡视频| 亚洲人成精品久久久久| 99精品偷自拍| 亚洲精品视频免费看| 波多野结衣中文字幕一区| 国产精品无人区| 粉嫩av一区二区三区粉嫩 | 精品一区二区在线播放| 在线亚洲人成电影网站色www| 亚洲视频一区在线| 91免费看片在线观看| 亚洲乱码国产乱码精品精可以看 | 欧美日韩免费一区二区三区 | 成人午夜短视频| 国产亚洲成年网址在线观看| 国产精品一二二区| 日本一区二区免费在线| av电影在线观看完整版一区二区| 国产精品九色蝌蚪自拍| 91蜜桃在线观看| 亚洲综合清纯丝袜自拍| 欧美日韩国产一二三| 青青草原综合久久大伊人精品| 精品成人一区二区三区| 国产乱码一区二区三区| 国产精品久线在线观看| 色猫猫国产区一区二在线视频| 亚洲成人av在线电影| 欧美一区日韩一区| 粉嫩av亚洲一区二区图片| 亚洲色欲色欲www| 欧美妇女性影城| 国产黑丝在线一区二区三区| 亚洲婷婷综合色高清在线| 欧美日韩精品一区二区| 国内外成人在线视频| 亚洲欧洲在线观看av| 欧美欧美欧美欧美| 懂色av噜噜一区二区三区av| 一二三四区精品视频| 精品国内二区三区| 日本高清不卡视频| 国产综合色在线视频区| 亚洲精品免费一二三区| 日韩欧美一级在线播放| 91丨porny丨蝌蚪视频| 日本亚洲电影天堂| 亚洲视频一区二区在线| 精品国产麻豆免费人成网站| 色视频一区二区| 国产成人激情av| 蜜臀av一区二区在线观看| 自拍偷拍欧美精品| 久久看人人爽人人| 欧美日韩在线精品一区二区三区激情| 国产在线播放一区二区三区| 亚洲一区二区三区四区在线观看| 久久久久高清精品| 91麻豆精品国产91久久久使用方法| 成人永久免费视频| 精品一区二区在线看| 视频一区二区三区在线| 亚洲日本欧美天堂| 中文字幕的久久| 久久久综合精品| 精品国产3级a| 欧美电影在线免费观看| 欧洲精品视频在线观看| 成人av综合在线| 国产在线一区二区综合免费视频| 午夜一区二区三区在线观看| 一区二区三区四区国产精品| 国产丝袜美腿一区二区三区| 精品国产自在久精品国产| 67194成人在线观看| 欧美日韩国产综合一区二区| 日本韩国一区二区| 色婷婷一区二区| 色婷婷久久久亚洲一区二区三区| 99视频在线精品| av电影在线不卡| 色综合色狠狠综合色| 99riav久久精品riav| 波波电影院一区二区三区| 成人污污视频在线观看| 成人sese在线| 91免费在线视频观看| 日本韩国欧美在线| 欧美在线高清视频| 欧美裸体bbwbbwbbw| 欧美精品99久久久**| 日韩欧美成人激情| 精品国产1区二区| 国产欧美一区二区三区鸳鸯浴| 亚洲欧洲另类国产综合| 亚洲另类在线制服丝袜| 一区二区三区免费网站| 午夜精品久久久久久久| 免费的成人av| 国产美女主播视频一区| 成人午夜大片免费观看| 91激情五月电影| 欧美一区日本一区韩国一区| 久久久亚洲综合| ...av二区三区久久精品| 亚洲综合成人网| 美脚の诱脚舐め脚责91 | 91影院在线观看| 欧美色综合久久| 欧美一级夜夜爽| 中文字幕欧美日韩一区| 亚洲精品日韩专区silk| 蜜芽一区二区三区| 成人美女视频在线看| 欧美日韩激情一区| 久久久久久久综合日本| 有码一区二区三区| 久久国产三级精品| 一本久久a久久精品亚洲| 3751色影院一区二区三区| 国产人妖乱国产精品人妖| 亚洲综合在线五月| 国产精品一区二区三区99| 色国产精品一区在线观看| 欧美tickling挠脚心丨vk| 中文字幕亚洲不卡| 美女一区二区三区| 91视视频在线直接观看在线看网页在线看 | 国产sm精品调教视频网站| 欧美久久久久中文字幕| 国产精品欧美极品| 蜜桃视频免费观看一区|