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

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

?? sdl_gemevents.c

?? Simple DirectMedia Layer - Simple DirectMedia Layer 是一個跨平臺的多媒體庫設計用來提供快速圖形framebuffer和音頻驅動。應用MPEG為軟件
?? C
字號:
/*    SDL - Simple DirectMedia Layer    Copyright (C) 1997, 1998, 1999, 2000, 2001, 2002  Sam Lantinga    This library is free software; you can redistribute it and/or    modify it under the terms of the GNU Library General Public    License as published by the Free Software Foundation; either    version 2 of the License, or (at your option) any later version.    This library is distributed in the hope that it will be useful,    but WITHOUT ANY WARRANTY; without even the implied warranty of    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU    Library General Public License for more details.    You should have received a copy of the GNU Library General Public    License along with this library; if not, write to the Free    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA    Sam Lantinga    slouken@libsdl.org*/#ifdef SAVE_RCSIDstatic char rcsid = "@(#) $Id: SDL_gemevents.c,v 1.4 2002/03/26 17:37:30 slouken Exp $";#endif/* * GEM SDL video driver implementation * inspired from the Dummy SDL driver *  * Patrice Mandin * and work from * Olivier Landemarre, Johan Klockars, Xavier Joubert, Claude Attard */#include <string.h>#include <gem.h>#include "SDL.h"#include "SDL_sysevents.h"#include "SDL_events_c.h"#include "SDL_gemvideo.h"#include "SDL_gemevents_c.h"#include "SDL_atarikeys.h"	/* for keyboard scancodes */#include "SDL_xbiosinterrupt_s.h"/* Defines */#define ATARIBIOS_MAXKEYS 128/* Variables */static unsigned char gem_currentkeyboard[ATARIBIOS_MAXKEYS];static unsigned char gem_previouskeyboard[ATARIBIOS_MAXKEYS];static unsigned char gem_currentascii[ATARIBIOS_MAXKEYS];/* The translation tables from a console scancode to a SDL keysym */static SDLKey keymap[ATARIBIOS_MAXKEYS];/* Functions prototypes */static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym);static int do_messages(_THIS, short *message);static void do_keyboard(short kc, short ks);static void do_mouse(_THIS, short mx, short my, short mb, short ks);/* Functions */static SDL_keysym *TranslateKey(int scancode, int asciicode, SDL_keysym *keysym){	/* Set the keysym information */	keysym->scancode = scancode;	if (asciicode)		keysym->sym = asciicode;			else		keysym->sym = keymap[scancode];	keysym->mod = KMOD_NONE;	keysym->unicode = 0;	return(keysym);}void GEM_InitOSKeymap(_THIS){	int i;	memset(gem_currentkeyboard, 0, sizeof(gem_currentkeyboard));	memset(gem_previouskeyboard, 0, sizeof(gem_previouskeyboard));	memset(gem_currentascii, 0, sizeof(gem_currentascii));	/* Initialize keymap */	for ( i=0; i<sizeof(keymap); i++ )		keymap[i] = SDLK_UNKNOWN;	/* Functions keys */	for ( i = 0; i<10; i++ )		keymap[SCANCODE_F1 + i] = SDLK_F1+i;	/* Cursor keypad */	keymap[SCANCODE_HELP] = SDLK_HELP;	keymap[SCANCODE_UNDO] = SDLK_UNDO;	keymap[SCANCODE_INSERT] = SDLK_INSERT;	keymap[SCANCODE_CLRHOME] = SDLK_HOME;	keymap[SCANCODE_UP] = SDLK_UP;	keymap[SCANCODE_DOWN] = SDLK_DOWN;	keymap[SCANCODE_RIGHT] = SDLK_RIGHT;	keymap[SCANCODE_LEFT] = SDLK_LEFT;	/* Special keys */	keymap[SCANCODE_ESCAPE] = SDLK_ESCAPE;	keymap[SCANCODE_BACKSPACE] = SDLK_BACKSPACE;	keymap[SCANCODE_TAB] = SDLK_TAB;	keymap[SCANCODE_ENTER] = SDLK_RETURN;	keymap[SCANCODE_DELETE] = SDLK_DELETE;	keymap[SCANCODE_LEFTCONTROL] = SDLK_LCTRL;	keymap[SCANCODE_LEFTSHIFT] = SDLK_LSHIFT;	keymap[SCANCODE_RIGHTSHIFT] = SDLK_RSHIFT;	keymap[SCANCODE_LEFTALT] = SDLK_LALT;	keymap[SCANCODE_CAPSLOCK] = SDLK_CAPSLOCK;	/* Mouse init */	GEM_mouse_relative = SDL_FALSE;}void GEM_PumpEvents(_THIS){	short mousex, mousey, mouseb, dummy;	short kstate, prevkc, prevks;	int i;	SDL_keysym	keysym;	memset(gem_currentkeyboard,0,sizeof(gem_currentkeyboard));	prevkc = prevks = 0;		for (;;)	{		int quit, resultat;		short buffer[8], kc;		quit = 0;		resultat = evnt_multi(			MU_MESAG|MU_TIMER|MU_KEYBD,			0,0,0,			0,0,0,0,0,			0,0,0,0,0,			buffer,			10,			&dummy,&dummy,&dummy,&kstate,&kc,&dummy		);		/* Message event ? */		if (resultat & MU_MESAG)			quit = do_messages(this, buffer);		/* Keyboard event ? */		if (resultat & MU_KEYBD) {			if ((prevkc != kc) || (prevks != kstate)) {				do_keyboard(kc,kstate);			} else {				/* Avoid looping, if repeating same key */				break;			}		}		/* Timer event ? */		if ((resultat & MU_TIMER) || quit)			break;	}	/* Update mouse */	graf_mkstate(&mousex, &mousey, &mouseb, &kstate);	do_mouse(this, mousex, mousey, mouseb, kstate);	/* Now generate keyboard events */	for (i=0; i<ATARIBIOS_MAXKEYS; i++) {		/* Key pressed ? */		if (gem_currentkeyboard[i] && !gem_previouskeyboard[i])			SDL_PrivateKeyboard(SDL_PRESSED, TranslateKey(i, gem_currentascii[i], &keysym));					/* Key unpressed ? */		if (gem_previouskeyboard[i] && !gem_currentkeyboard[i])			SDL_PrivateKeyboard(SDL_RELEASED, TranslateKey(i, gem_currentascii[i], &keysym));	}	memcpy(gem_previouskeyboard,gem_currentkeyboard,sizeof(gem_previouskeyboard));}static int do_messages(_THIS, short *message){	int quit, posted;	quit=0;	switch (message[0]) {		case WM_CLOSED:		case AP_TERM:    			posted = SDL_PrivateQuit();			quit=1;			break;		case WM_MOVED:			wind_set(message[3],WF_CURRXYWH,message[4],message[5],message[6],message[7]);			break;		case WM_TOPPED:			wind_set(message[3],WF_TOP,message[4],0,0,0);			SDL_PrivateAppActive(1, SDL_APPINPUTFOCUS);			break;		case WM_REDRAW:			GEM_wind_redraw(this, message[3],&message[4]);			break;		case WM_ICONIFY:		case WM_ALLICONIFY:			wind_set(message[3],WF_ICONIFY,message[4],message[5],message[6],message[7]);			/* If we're active, make ourselves inactive */			if ( SDL_GetAppState() & SDL_APPACTIVE ) {				/* Send an internal deactivate event */				SDL_PrivateAppActive(0, SDL_APPACTIVE|SDL_APPINPUTFOCUS);			}			break;		case WM_UNICONIFY:			wind_set(message[3],WF_UNICONIFY,message[4],message[5],message[6],message[7]);			/* If we're not active, make ourselves active */			if ( !(SDL_GetAppState() & SDL_APPACTIVE) ) {				/* Send an internal activate event */				SDL_PrivateAppActive(1, SDL_APPACTIVE);			}			break;		case WM_SIZED:			wind_set (message[3], WF_CURRXYWH, message[4], message[5], message[6], message[7]);			GEM_win_fulled = SDL_FALSE;		/* Cancel maximized flag */			SDL_PrivateResize(message[6], message[7]);			break;		case WM_FULLED:			{				short x,y,w,h;				if (GEM_win_fulled) {					wind_get (message[3], WF_PREVXYWH, &x, &y, &w, &h);					GEM_win_fulled = SDL_FALSE;				} else {					x = GEM_desk_x;					y = GEM_desk_y;					w = GEM_desk_w;					h = GEM_desk_h;					GEM_win_fulled = SDL_TRUE;				}				wind_set (message[3], WF_CURRXYWH, x, y, w, h);				SDL_PrivateResize(w, h);			}			break;		case WM_BOTTOMED:		case WM_UNTOPPED:			SDL_PrivateAppActive(0, SDL_APPINPUTFOCUS);			break;	}		return quit;}static void do_keyboard(short kc, short ks){	int			scancode, asciicode;	if (kc) {		scancode=(kc>>8) & 127;		asciicode=kc & 255;		gem_currentkeyboard[scancode]=0xFF;		gem_currentascii[scancode]=asciicode;	}	/* Read special keys */	if (ks & K_RSHIFT)		gem_currentkeyboard[SCANCODE_RIGHTSHIFT]=0xFF;	if (ks & K_LSHIFT)		gem_currentkeyboard[SCANCODE_LEFTSHIFT]=0xFF;	if (ks & K_CTRL)		gem_currentkeyboard[SCANCODE_LEFTCONTROL]=0xFF;	if (ks & K_ALT)		gem_currentkeyboard[SCANCODE_LEFTALT]=0xFF;}static void do_mouse(_THIS, short mx, short my, short mb, short ks){	static short prevmousex=0, prevmousey=0, prevmouseb=0;	/* Mouse motion ? */	if ((prevmousex!=mx) || (prevmousey!=my)) {		if (GEM_mouse_relative) {			SDL_PrivateMouseMotion(0, 1, SDL_AtariXbios_mousex, SDL_AtariXbios_mousey);			SDL_AtariXbios_mousex = SDL_AtariXbios_mousey = 0;		} else {			SDL_PrivateMouseMotion(0, 1, mx, my);		}		prevmousex = mx;		prevmousey = my;	}	/* Mouse button ? */	if (prevmouseb!=mb) {		int i;		for (i=0;i<2;i++) {			int curbutton, prevbutton;					curbutton = mb & (1<<i);			prevbutton = prevmouseb & (1<<i);					if (curbutton && !prevbutton) {				SDL_PrivateMouseButton(SDL_PRESSED, i+1, 0, 0);			}			if (!curbutton && prevbutton) {				SDL_PrivateMouseButton(SDL_RELEASED, i+1, 0, 0);			}		}		prevmouseb = mb;	}	/* Read special keys */	if (ks & K_RSHIFT)		gem_currentkeyboard[SCANCODE_RIGHTSHIFT]=0xFF;	if (ks & K_LSHIFT)		gem_currentkeyboard[SCANCODE_LEFTSHIFT]=0xFF;	if (ks & K_CTRL)		gem_currentkeyboard[SCANCODE_LEFTCONTROL]=0xFF;	if (ks & K_ALT)		gem_currentkeyboard[SCANCODE_LEFTALT]=0xFF;}

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
国产九九视频一区二区三区| 欧美一区二区三区四区久久| 精品视频免费看| 久久―日本道色综合久久| 亚洲码国产岛国毛片在线| 美女视频免费一区| 在线观看亚洲成人| 中文字幕日韩av资源站| 国产精品一卡二| 欧美一级免费观看| 亚洲午夜三级在线| 91丝袜美腿高跟国产极品老师| 欧美一区二区视频网站| 亚洲国产sm捆绑调教视频| 99久久综合国产精品| 久久久九九九九| 国产一区二区女| 日韩欧美一区二区三区在线| 国产精品一区二区三区99| 欧美乱妇一区二区三区不卡视频| 亚洲男女一区二区三区| 国产凹凸在线观看一区二区| 精品三级在线观看| 麻豆91小视频| 精品久久久久久久久久久院品网 | 色呦呦国产精品| 国产精品午夜在线观看| 国产黄色91视频| 国产亚洲制服色| 国产精品538一区二区在线| 日韩一级二级三级| 麻豆精品国产传媒mv男同 | 国产精品久久久久久亚洲毛片 | 国产成人午夜精品5599| 久久综合久久鬼色| 国产精品一区二区你懂的| 国产亚洲精品aa午夜观看| 国内偷窥港台综合视频在线播放| 日韩女优av电影| 国产美女视频一区| 国产精品丝袜一区| 94色蜜桃网一区二区三区| 夜夜亚洲天天久久| 欧美精品一二三区| 精品一区二区三区香蕉蜜桃| 国产偷v国产偷v亚洲高清| 成人动漫精品一区二区| 亚洲品质自拍视频| 69堂亚洲精品首页| 极品少妇xxxx精品少妇| 欧美国产97人人爽人人喊| 91麻豆精品在线观看| 亚洲国产aⅴ天堂久久| 精品国产三级电影在线观看| 高清不卡一二三区| 一区二区三区丝袜| 日韩欧美国产1| 成人免费福利片| 亚洲国产精品一区二区www在线 | 欧亚洲嫩模精品一区三区| 日本成人中文字幕| 国产女人18毛片水真多成人如厕| 色婷婷久久99综合精品jk白丝| 日韩av网站免费在线| 久久尤物电影视频在线观看| 91在线观看一区二区| 丝袜国产日韩另类美女| 国产日韩欧美精品一区| 欧美日韩免费一区二区三区| 国产专区综合网| 亚洲欧美日韩久久精品| 日韩欧美在线1卡| 色综合久久久久综合体桃花网| 日本免费在线视频不卡一不卡二| 国产欧美日韩视频在线观看| 欧美亚洲免费在线一区| 国产精品一区二区黑丝| 婷婷六月综合亚洲| 亚洲三级视频在线观看| 精品久久免费看| 精品视频123区在线观看| 国产精品香蕉一区二区三区| 亚洲免费在线视频| 久久综合99re88久久爱| 欧美精品乱码久久久久久按摩| 国产成人综合亚洲网站| 日日夜夜免费精品视频| 亚洲视频小说图片| 国产偷国产偷精品高清尤物| 欧美一区二区三区视频| 在线精品视频免费观看| 欧美另类z0zxhd电影| 91视频免费看| 丁香激情综合国产| 经典三级在线一区| 美女一区二区三区| 天天综合日日夜夜精品| 亚洲欧美另类久久久精品2019| 久久精品一区二区| 日韩精品一区二区三区视频| 欧美精品在欧美一区二区少妇| 99国产欧美久久久精品| 国产精品资源网站| 黑人精品欧美一区二区蜜桃| 丝瓜av网站精品一区二区| 亚洲一区在线观看网站| 亚洲精品大片www| 亚洲欧美一区二区三区孕妇| 中文字幕成人在线观看| 欧美激情综合网| 国产欧美日韩中文久久| 欧美韩日一区二区三区四区| 久久一日本道色综合| 久久久久久久久久久99999| 日韩免费视频一区| 精品免费日韩av| wwwwww.欧美系列| 国产亚洲人成网站| 国产日本一区二区| **性色生活片久久毛片| 亚洲欧美在线aaa| 亚洲精品一二三四区| 中文字幕一区二区在线播放 | 久久久亚洲精品石原莉奈| 久久久777精品电影网影网| 久久看人人爽人人| 国产精品久久久久久久久免费樱桃| 一区二区中文视频| 亚洲一区二区五区| 秋霞电影一区二区| 欧美日韩国产一区二区三区地区| 在线国产亚洲欧美| 欧美一级免费大片| 国产女同性恋一区二区| 夜夜亚洲天天久久| 美女爽到高潮91| 波多野结衣一区二区三区| 91浏览器打开| 欧美一区二区三区四区在线观看| 久久久综合激的五月天| 亚洲欧美日韩小说| 免费成人在线网站| 成人av资源在线| 欧美日韩国产美女| 国产亚洲欧美中文| 一区二区三区四区激情| 青青草精品视频| 99精品1区2区| 在线不卡一区二区| 久久一区二区三区四区| 一区二区视频在线| 黑人巨大精品欧美一区| 色88888久久久久久影院按摩| 欧美一区二区三区啪啪| 中文字幕精品在线不卡| 午夜久久久久久电影| 国产电影一区在线| 欧美高清激情brazzers| 亚洲国产精品国自产拍av| 亚洲成av人影院| 99久久久免费精品国产一区二区| 欧美一区欧美二区| 亚洲精品水蜜桃| 国产乱人伦精品一区二区在线观看 | 日韩精品高清不卡| 成人一区二区三区中文字幕| 在线不卡a资源高清| 亚洲欧美国产三级| 国产精品一级在线| 日韩欧美的一区| 亚洲精品日韩综合观看成人91| 国产麻豆午夜三级精品| 欧美日本国产一区| 椎名由奈av一区二区三区| 伦理电影国产精品| 欧美性大战xxxxx久久久| 亚洲国产经典视频| 国产精品一级在线| 精品国产成人在线影院| 日本特黄久久久高潮| 在线看国产一区二区| 国产精品女同一区二区三区| 久草精品在线观看| 91精品国产麻豆| 午夜视频一区二区| 欧美日韩小视频| 亚洲综合丝袜美腿| 欧美性三三影院| 亚洲一区日韩精品中文字幕| av成人老司机| 亚洲欧美日韩国产综合| 成人小视频在线观看| 欧美高清在线精品一区| 高清久久久久久| 国产精品成人免费在线| 成人激情综合网站| 亚洲美女在线一区| 欧洲另类一二三四区| 午夜视频一区在线观看| 91精品国产综合久久福利软件 |