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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? rw_in_svgalib.c

?? 著名游戲quake2原代碼最新版本(vc6.0可以編譯的)
?? C
字號:
/*
Copyright (C) 1997-2001 Id Software, Inc.

This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.

This program 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 General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.

*/
#include <termios.h>
#include <sys/ioctl.h>
#include <sys/stat.h>
#include <sys/vt.h>
#include <stdarg.h>
#include <stdio.h>
#include <signal.h>
#include <sys/mman.h>

#include <asm/io.h>

#include "vga.h"
#include "vgakeyboard.h"
#include "vgamouse.h"

#include "../ref_soft/r_local.h"
#include "../client/keys.h"
#include "../linux/rw_linux.h"

/*****************************************************************************/
/* KEYBOARD                                                                  */
/*****************************************************************************/

static unsigned char scantokey[128];
Key_Event_fp_t Key_Event_fp;

static void keyhandler(int scancode, int state)
{
	int sc;

	sc = scancode & 0x7f;
//ri.Con_Printf(PRINT_ALL, "scancode=%x (%d%s)\n", scancode, sc, scancode&0x80?"+128":"");
	Key_Event_fp(scantokey[sc], state == KEY_EVENTPRESS);
}

void KBD_Init(Key_Event_fp_t fp)
{
	int i;

	Key_Event_fp = fp;

	for (i=0 ; i<128 ; i++)
		scantokey[i] = ' ';

	scantokey[  1] = K_ESCAPE;
	scantokey[  2] = '1';
	scantokey[  3] = '2';
	scantokey[  4] = '3';
	scantokey[  5] = '4';
	scantokey[  6] = '5';
	scantokey[  7] = '6';
	scantokey[  8] = '7';
	scantokey[  9] = '8';
	scantokey[ 10] = '9';
	scantokey[ 11] = '0';
	scantokey[ 12] = '-';
	scantokey[ 13] = '=';
	scantokey[ 14] = K_BACKSPACE;
	scantokey[ 15] = K_TAB;
	scantokey[ 16] = 'q';       
	scantokey[ 17] = 'w';       
	scantokey[ 18] = 'e';       
	scantokey[ 19] = 'r';       
	scantokey[ 20] = 't';       
	scantokey[ 21] = 'y';       
	scantokey[ 22] = 'u';       
	scantokey[ 23] = 'i';       
	scantokey[ 24] = 'o';       
	scantokey[ 25] = 'p';       
	scantokey[ 26] = '[';
	scantokey[ 27] = ']';
	scantokey[ 28] = K_ENTER;
	scantokey[ 29] = K_CTRL; //left
	scantokey[ 30] = 'a';
	scantokey[ 31] = 's';       
	scantokey[ 32] = 'd';       
	scantokey[ 33] = 'f';       
	scantokey[ 34] = 'g';       
	scantokey[ 35] = 'h';       
	scantokey[ 36] = 'j';       
	scantokey[ 37] = 'k';       
	scantokey[ 38] = 'l';       
	scantokey[ 39] = ';';
	scantokey[ 40] = '\'';
	scantokey[ 41] = '`';
	scantokey[ 42] = K_SHIFT; //left
	scantokey[ 43] = '\\';
	scantokey[ 44] = 'z';       
	scantokey[ 45] = 'x';  
	scantokey[ 46] = 'c';
	scantokey[ 47] = 'v';       
	scantokey[ 48] = 'b';
	scantokey[ 49] = 'n';       
	scantokey[ 50] = 'm';       
	scantokey[ 51] = ',';
	scantokey[ 52] = '.';
	scantokey[ 53] = '/';
	scantokey[ 54] = K_SHIFT; //right
	scantokey[ 55] = '*'; //keypad
	scantokey[ 56] = K_ALT; //left
	scantokey[ 57] = ' ';
	// 58 caps lock
	scantokey[ 59] = K_F1;
	scantokey[ 60] = K_F2;
	scantokey[ 61] = K_F3;
	scantokey[ 62] = K_F4;
	scantokey[ 63] = K_F5;
	scantokey[ 64] = K_F6;
	scantokey[ 65] = K_F7;
	scantokey[ 66] = K_F8;
	scantokey[ 67] = K_F9;
	scantokey[ 68] = K_F10;
	// 69 numlock
	// 70 scrollock
	scantokey[ 71] = K_KP_HOME;
	scantokey[ 72] = K_KP_UPARROW;
	scantokey[ 73] = K_KP_PGUP;
	scantokey[ 74] = K_KP_MINUS;
	scantokey[ 75] = K_KP_LEFTARROW;
	scantokey[ 76] = K_KP_5;
	scantokey[ 77] = K_KP_RIGHTARROW;
	scantokey[ 79] = K_KP_END;
	scantokey[ 78] = K_KP_PLUS;
	scantokey[ 80] = K_KP_DOWNARROW;
	scantokey[ 81] = K_KP_PGDN;
	scantokey[ 82] = K_KP_INS;
	scantokey[ 83] = K_KP_DEL;
	// 84 to 86 not used
	scantokey[ 87] = K_F11;
	scantokey[ 88] = K_F12;
	// 89 to 95 not used
	scantokey[ 96] = K_KP_ENTER; //keypad enter
	scantokey[ 97] = K_CTRL; //right
	scantokey[ 98] = K_KP_SLASH;
	scantokey[ 99] = K_F12; // print screen, bind to screenshot by default
	scantokey[100] = K_ALT; // right

	scantokey[101] = K_PAUSE; // break
	scantokey[102] = K_HOME;
	scantokey[103] = K_UPARROW;
	scantokey[104] = K_PGUP;
	scantokey[105] = K_LEFTARROW;
	scantokey[106] = K_RIGHTARROW;
	scantokey[107] = K_END;
	scantokey[108] = K_DOWNARROW;
	scantokey[109] = K_PGDN;
	scantokey[110] = K_INS;
	scantokey[111] = K_DEL;

	scantokey[119] = K_PAUSE;

	if (keyboard_init())
		Sys_Error("keyboard_init() failed");
	keyboard_seteventhandler(keyhandler);
	keyboard_translatekeys(DONT_CATCH_CTRLC);
}

void KBD_Update(void)
{
	while (keyboard_update())
		;
}

void KBD_Close(void)
{
	keyboard_close();
}

/*****************************************************************************/
/* MOUSE                                                                     */
/*****************************************************************************/

// this is inside the renderer shared lib, so these are called from vid_so

static qboolean	UseMouse = true;

static int		mouserate = MOUSE_DEFAULTSAMPLERATE;

static int     mouse_buttons;
static int     mouse_buttonstate;
static int     mouse_oldbuttonstate;
static float   mouse_x, mouse_y;
static float	old_mouse_x, old_mouse_y;
static int		mx, my;

static cvar_t	*m_filter;
static cvar_t	*in_mouse;

static cvar_t	*mdev;
static cvar_t	*mrate;

static qboolean	mlooking;

// state struct passed in Init
static in_state_t	*in_state;

static cvar_t *sensitivity;
static cvar_t *lookstrafe;
static cvar_t *m_side;
static cvar_t *m_yaw;
static cvar_t *m_pitch;
static cvar_t *m_forward;
static cvar_t *freelook;

static void Force_CenterView_f (void)
{
	in_state->viewangles[PITCH] = 0;
}

static void RW_IN_MLookDown (void) 
{ 
	mlooking = true; 
}

static void RW_IN_MLookUp (void) 
{
	mlooking = false;
	in_state->IN_CenterView_fp ();
}

static void mousehandler(int buttonstate, int dx, int dy)
{
	mouse_buttonstate = buttonstate;
	mx += dx;
	my += dy;
}

void RW_IN_Init(in_state_t *in_state_p)
{
	int mtype;
	int i;

	in_state = in_state_p;

	// mouse variables
	m_filter = ri.Cvar_Get ("m_filter", "0", 0);
    in_mouse = ri.Cvar_Get ("in_mouse", "1", CVAR_ARCHIVE);
	freelook = ri.Cvar_Get( "freelook", "0", 0 );
	lookstrafe = ri.Cvar_Get ("lookstrafe", "0", 0);
	sensitivity = ri.Cvar_Get ("sensitivity", "3", 0);
	m_pitch = ri.Cvar_Get ("m_pitch", "0.022", 0);
	m_yaw = ri.Cvar_Get ("m_yaw", "0.022", 0);
	m_forward = ri.Cvar_Get ("m_forward", "1", 0);
	m_side = ri.Cvar_Get ("m_side", "0.8", 0);

	ri.Cmd_AddCommand ("+mlook", RW_IN_MLookDown);
	ri.Cmd_AddCommand ("-mlook", RW_IN_MLookUp);

	ri.Cmd_AddCommand ("force_centerview", Force_CenterView_f);

	mouse_buttons = 3;

	mtype = vga_getmousetype();

	mdev = ri.Cvar_Get ("mdev", "/dev/mouse", 0);
	mrate = ri.Cvar_Get ("mrate", "1200", 0);

//		printf("Mouse: dev=%s,type=%s,speed=%d\n",
//			mousedev, mice[mtype].name, mouserate);

	if (mouse_init(mdev->string, mtype, (int)mrate->value))
	{
		ri.Con_Printf(PRINT_ALL, "No mouse found\n");
		UseMouse = false;
	}
	else
		mouse_seteventhandler(mousehandler);
}

void RW_IN_Shutdown(void)
{
	mouse_close();
}

/*
===========
IN_Commands
===========
*/
void RW_IN_Commands (void)
{
	if (!UseMouse)
		return;

	// poll mouse values
	mouse_update();

	// perform button actions
	if ((mouse_buttonstate & MOUSE_LEFTBUTTON) &&
		!(mouse_oldbuttonstate & MOUSE_LEFTBUTTON))
		in_state->Key_Event_fp (K_MOUSE1, true);
	else if (!(mouse_buttonstate & MOUSE_LEFTBUTTON) &&
		(mouse_oldbuttonstate & MOUSE_LEFTBUTTON))
		in_state->Key_Event_fp (K_MOUSE1, false);

	if ((mouse_buttonstate & MOUSE_RIGHTBUTTON) &&
		!(mouse_oldbuttonstate & MOUSE_RIGHTBUTTON))
		in_state->Key_Event_fp (K_MOUSE2, true);
	else if (!(mouse_buttonstate & MOUSE_RIGHTBUTTON) &&
		(mouse_oldbuttonstate & MOUSE_RIGHTBUTTON))
		in_state->Key_Event_fp (K_MOUSE2, false);

	if ((mouse_buttonstate & MOUSE_MIDDLEBUTTON) &&
		!(mouse_oldbuttonstate & MOUSE_MIDDLEBUTTON))
		Key_Event_fp (K_MOUSE3, true);
	else if (!(mouse_buttonstate & MOUSE_MIDDLEBUTTON) &&
		(mouse_oldbuttonstate & MOUSE_MIDDLEBUTTON))
		in_state->Key_Event_fp (K_MOUSE3, false);

	mouse_oldbuttonstate = mouse_buttonstate;
}

/*
===========
IN_Move
===========
*/
void RW_IN_Move (usercmd_t *cmd)
{
	if (!UseMouse)
		return;

	// poll mouse values
	mouse_update();

	if (m_filter->value)
	{
		mouse_x = (mx + old_mouse_x) * 0.5;
		mouse_y = (my + old_mouse_y) * 0.5;
	}
	else
	{
		mouse_x = mx;
		mouse_y = my;
	}
	old_mouse_x = mx;
	old_mouse_y = my;

	if (!mx && !my)
		return;

	mx = my = 0; // clear for next update

	mouse_x *= sensitivity->value;
	mouse_y *= sensitivity->value;

// add mouse X/Y movement to cmd
	if ( (*in_state->in_strafe_state & 1) || 
		(lookstrafe->value && mlooking ))
		cmd->sidemove += m_side->value * mouse_x;
	else
		in_state->viewangles[YAW] -= m_yaw->value * mouse_x;

	if ( (mlooking || freelook->value) && 
		!(*in_state->in_strafe_state & 1))
	{
		in_state->viewangles[PITCH] += m_pitch->value * mouse_y;
	}
	else
	{
		cmd->forwardmove -= m_forward->value * mouse_y;
	}
}

void RW_IN_Frame (void)
{
}

void RW_IN_Activate(void)
{
}



?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲一区二区欧美| 国产成人精品免费网站| 国产精品家庭影院| 中国av一区二区三区| 日韩精品一区国产麻豆| 精品人在线二区三区| 欧美大片顶级少妇| 国产女人18水真多18精品一级做| 久久综合av免费| 亚洲欧美成人一区二区三区| 亚洲乱码日产精品bd| 亚洲电影一区二区| 美女一区二区视频| 日本v片在线高清不卡在线观看| 香蕉久久一区二区不卡无毒影院| 日韩va欧美va亚洲va久久| 国产一区二区三区综合 | 国产一区二区三区久久久| 国产一区二区精品久久| 在线视频你懂得一区二区三区| 欧美日韩免费高清一区色橹橹| 欧美电影免费观看高清完整版| 国产精品国产三级国产aⅴ中文| 亚洲成人av中文| 国产成人aaa| 6080亚洲精品一区二区| 国产精品大尺度| 九九视频精品免费| 在线看日韩精品电影| 欧美激情一区三区| 久久超碰97中文字幕| 色哟哟欧美精品| 国产精品女人毛片| 国产在线视频一区二区三区| 精品蜜桃在线看| 精品国产免费人成在线观看| 伊人色综合久久天天| a在线欧美一区| 中文子幕无线码一区tr| 国产一区二区三区四| 欧美一区二区在线视频| 五月激情综合色| 欧美日韩国产欧美日美国产精品| 成人欧美一区二区三区1314| 成人一区二区三区在线观看| 久久综合99re88久久爱| 国产久卡久卡久卡久卡视频精品| 欧美老女人在线| 久久精品国产网站| 亚洲精品一区在线观看| 国产经典欧美精品| 中文字幕不卡的av| 在线观看视频91| 日韩av网站在线观看| 欧美成人vps| caoporen国产精品视频| 亚洲精品成人少妇| 日韩一级欧美一级| 国产大陆a不卡| 亚洲丰满少妇videoshd| 日韩欧美一区在线| 91免费在线看| 久久99精品一区二区三区| 亚洲色图都市小说| 欧美变态tickle挠乳网站| 白白色 亚洲乱淫| 日本大胆欧美人术艺术动态| 亚洲国产精品ⅴa在线观看| 国产欧美精品一区二区三区四区| 懂色av一区二区三区蜜臀| 亚洲国产你懂的| 国产精品久久午夜| 精品区一区二区| 在线观看成人小视频| 成人av网在线| 国产精品99久久不卡二区| 奇米四色…亚洲| 性感美女极品91精品| 亚洲自拍偷拍av| 亚洲综合另类小说| 亚洲主播在线观看| 亚洲一区二区三区在线播放| 国产网红主播福利一区二区| 欧美成va人片在线观看| 欧美精品亚洲二区| 欧美日韩国产精选| 欧美丝袜第三区| 欧美在线一区二区三区| 在线视频国内自拍亚洲视频| 91在线视频观看| 欧美日韩视频第一区| 欧美日韩国产影片| 欧美日韩1234| 精品免费日韩av| 国产精品免费免费| 亚洲自拍偷拍麻豆| 久久精品国产亚洲aⅴ| 国产成人激情av| 91原创在线视频| 欧美精品xxxxbbbb| 日韩午夜激情视频| 日韩理论电影院| 奇米影视一区二区三区| 国产98色在线|日韩| 91在线免费播放| 91.成人天堂一区| 国产三区在线成人av| 亚洲男人都懂的| 欧洲一区在线电影| 国产成人精品免费看| 蜜桃一区二区三区四区| 国产成人综合亚洲91猫咪| 91小视频免费观看| 久久久久综合网| 偷拍亚洲欧洲综合| 97久久精品人人做人人爽| 欧美一区二区三区在线| 国产精品家庭影院| 国产一区二区三区免费播放| 91影院在线免费观看| 久久精品人人做人人爽97| 日韩主播视频在线| 欧美日韩成人激情| 日韩毛片精品高清免费| 夫妻av一区二区| 精品国产99国产精品| 日本欧美一区二区三区乱码 | 一本大道久久a久久精品综合| 日韩午夜小视频| 久久超碰97中文字幕| 精品卡一卡二卡三卡四在线| 日韩不卡一区二区三区| 91麻豆精品国产91久久久资源速度 | 日韩精品一区二区三区视频在线观看 | 丝袜美腿亚洲综合| 91麻豆精品国产91久久久更新时间 | 欧美韩国一区二区| 成人毛片视频在线观看| 日本一区二区三区免费乱视频| 久久国产精品色| 国产色综合一区| 91丨porny丨中文| 免费人成精品欧美精品| 制服丝袜在线91| 国产曰批免费观看久久久| 中文字幕精品在线不卡| 91捆绑美女网站| 日韩国产高清影视| 精品国产一区久久| 色综合色综合色综合色综合色综合 | 亚洲欧洲99久久| 8v天堂国产在线一区二区| 激情五月激情综合网| 国产精品久久综合| 555www色欧美视频| 成人激情免费视频| 日韩一区精品字幕| 日韩美女久久久| 国产视频一区在线观看| 欧美喷潮久久久xxxxx| 国产原创一区二区三区| 五月天精品一区二区三区| 中文字幕不卡在线播放| 日韩精品中文字幕在线不卡尤物 | 亚洲精品在线电影| 欧美日韩国产综合久久 | 国产精品视频线看| 2023国产精品视频| 日韩一级成人av| 欧美日韩成人在线| 欧美午夜在线观看| 在线观看区一区二| 91黄色免费网站| 色综合天天综合| 91首页免费视频| 99在线精品视频| 91久久久免费一区二区| av影院午夜一区| 国产成人午夜视频| 99久久精品一区二区| 91首页免费视频| 欧美日韩中文字幕一区二区| 欧美日韩综合在线免费观看| 91色|porny| 欧美另类z0zxhd电影| 日韩三级在线观看| 26uuu国产日韩综合| 欧美国产成人精品| 亚洲免费观看高清在线观看| 亚洲一区二区精品久久av| 丁香婷婷综合色啪| 91视频观看视频| 制服.丝袜.亚洲.中文.综合| 日韩精品资源二区在线| 国产日产欧美一区二区三区| 亚洲欧美国产77777| 婷婷成人激情在线网| 国产成a人亚洲精品| 欧美性感一类影片在线播放| 欧美成人女星排名|