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

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

?? sys_linux.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 <unistd.h>
#include <signal.h>
#include <stdlib.h>
#include <limits.h>
#include <sys/time.h>
#include <sys/types.h>
#include <unistd.h>
#include <fcntl.h>
#include <stdarg.h>
#include <stdio.h>
#include <sys/ipc.h>
#include <sys/shm.h>
#include <sys/stat.h>
#include <string.h>
#include <ctype.h>
#include <sys/wait.h>
#include <sys/mman.h>
#include <errno.h>
#include <mntent.h>

#include <dlfcn.h>

#include "../qcommon/qcommon.h"

#include "../linux/rw_linux.h"

cvar_t *nostdout;

unsigned	sys_frame_time;

uid_t saved_euid;
qboolean stdin_active = true;

// =======================================================================
// General routines
// =======================================================================

void Sys_ConsoleOutput (char *string)
{
	if (nostdout && nostdout->value)
		return;

	fputs(string, stdout);
}

void Sys_Printf (char *fmt, ...)
{
	va_list		argptr;
	char		text[1024];
	unsigned char		*p;

	va_start (argptr,fmt);
	vsprintf (text,fmt,argptr);
	va_end (argptr);

	if (strlen(text) > sizeof(text))
		Sys_Error("memory overwrite in Sys_Printf");

    if (nostdout && nostdout->value)
        return;

	for (p = (unsigned char *)text; *p; p++) {
		*p &= 0x7f;
		if ((*p > 128 || *p < 32) && *p != 10 && *p != 13 && *p != 9)
			printf("[%02x]", *p);
		else
			putc(*p, stdout);
	}
}

void Sys_Quit (void)
{
	CL_Shutdown ();
	Qcommon_Shutdown ();
    fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);
	_exit(0);
}

void Sys_Init(void)
{
#if id386
//	Sys_SetFPCW();
#endif
}

void Sys_Error (char *error, ...)
{ 
    va_list     argptr;
    char        string[1024];

// change stdin to non blocking
    fcntl (0, F_SETFL, fcntl (0, F_GETFL, 0) & ~FNDELAY);

	CL_Shutdown ();
	Qcommon_Shutdown ();
    
    va_start (argptr,error);
    vsprintf (string,error,argptr);
    va_end (argptr);
	fprintf(stderr, "Error: %s\n", string);

	_exit (1);

} 

void Sys_Warn (char *warning, ...)
{ 
    va_list     argptr;
    char        string[1024];
    
    va_start (argptr,warning);
    vsprintf (string,warning,argptr);
    va_end (argptr);
	fprintf(stderr, "Warning: %s", string);
} 

/*
============
Sys_FileTime

returns -1 if not present
============
*/
int	Sys_FileTime (char *path)
{
	struct	stat	buf;
	
	if (stat (path,&buf) == -1)
		return -1;
	
	return buf.st_mtime;
}

void floating_point_exception_handler(int whatever)
{
//	Sys_Warn("floating point exception\n");
	signal(SIGFPE, floating_point_exception_handler);
}

char *Sys_ConsoleInput(void)
{
    static char text[256];
    int     len;
	fd_set	fdset;
    struct timeval timeout;

	if (!dedicated || !dedicated->value)
		return NULL;

	if (!stdin_active)
		return NULL;

	FD_ZERO(&fdset);
	FD_SET(0, &fdset); // stdin
	timeout.tv_sec = 0;
	timeout.tv_usec = 0;
	if (select (1, &fdset, NULL, NULL, &timeout) == -1 || !FD_ISSET(0, &fdset))
		return NULL;

	len = read (0, text, sizeof(text));
	if (len == 0) { // eof!
		stdin_active = false;
		return NULL;
	}

	if (len < 1)
		return NULL;
	text[len-1] = 0;    // rip off the /n and terminate

	return text;
}

/*****************************************************************************/

static void *game_library;

/*
=================
Sys_UnloadGame
=================
*/
void Sys_UnloadGame (void)
{
	if (game_library) 
		dlclose (game_library);
	game_library = NULL;
}

/*
=================
Sys_GetGameAPI

Loads the game dll
=================
*/
void *Sys_GetGameAPI (void *parms)
{
	void	*(*GetGameAPI) (void *);

	char	name[MAX_OSPATH];
	char	curpath[MAX_OSPATH];
	char	*path;
#ifdef __i386__
	const char *gamename = "gamei386.so";
#elif defined __alpha__
	const char *gamename = "gameaxp.so";
#else
#error Unknown arch
#endif

	setreuid(getuid(), getuid());
	setegid(getgid());

	if (game_library)
		Com_Error (ERR_FATAL, "Sys_GetGameAPI without Sys_UnloadingGame");

	getcwd(curpath, sizeof(curpath));

	Com_Printf("------- Loading %s -------\n", gamename);

	// now run through the search paths
	path = NULL;
	while (1)
	{
		path = FS_NextPath (path);
		if (!path)
			return NULL;		// couldn't find one anywhere
		sprintf (name, "%s/%s/%s", curpath, path, gamename);
		game_library = dlopen (name, RTLD_LAZY );
		if (game_library)
		{
			Com_Printf ("LoadLibrary (%s)\n",name);
			break;
		}
	}

	GetGameAPI = (void *)dlsym (game_library, "GetGameAPI");
	if (!GetGameAPI)
	{
		Sys_UnloadGame ();		
		return NULL;
	}

	return GetGameAPI (parms);
}

/*****************************************************************************/

void Sys_AppActivate (void)
{
}

void Sys_SendKeyEvents (void)
{
#ifndef DEDICATED_ONLY
	if (KBD_Update_fp)
		KBD_Update_fp();
#endif

	// grab frame time 
	sys_frame_time = Sys_Milliseconds();
}

/*****************************************************************************/

char *Sys_GetClipboardData(void)
{
	return NULL;
}

int main (int argc, char **argv)
{
	int 	time, oldtime, newtime;

	// go back to real user for config loads
	saved_euid = geteuid();
	seteuid(getuid());

	Qcommon_Init(argc, argv);

	fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);

	nostdout = Cvar_Get("nostdout", "0", 0);
	if (!nostdout->value) {
		fcntl(0, F_SETFL, fcntl (0, F_GETFL, 0) | FNDELAY);
//		printf ("Linux Quake -- Version %0.3f\n", LINUX_VERSION);
	}

    oldtime = Sys_Milliseconds ();
    while (1)
    {
// find time spent rendering last frame
		do {
			newtime = Sys_Milliseconds ();
			time = newtime - oldtime;
		} while (time < 1);
        Qcommon_Frame (time);
		oldtime = newtime;
    }

}

void Sys_CopyProtect(void)
{
	FILE *mnt;
	struct mntent *ent;
	char path[MAX_OSPATH];
	struct stat st;
	qboolean found_cd = false;

	static qboolean checked = false;

	if (checked)
		return;

	if ((mnt = setmntent("/etc/mtab", "r")) == NULL)
		Com_Error(ERR_FATAL, "Can't read mount table to determine mounted cd location.");

	while ((ent = getmntent(mnt)) != NULL) {
		if (strcmp(ent->mnt_type, "iso9660") == 0) {
			// found a cd file system
			found_cd = true;
			sprintf(path, "%s/%s", ent->mnt_dir, "install/data/quake2.exe");
			if (stat(path, &st) == 0) {
				// found it
				checked = true;
				endmntent(mnt);
				return;
			}
			sprintf(path, "%s/%s", ent->mnt_dir, "Install/Data/quake2.exe");
			if (stat(path, &st) == 0) {
				// found it
				checked = true;
				endmntent(mnt);
				return;
			}
			sprintf(path, "%s/%s", ent->mnt_dir, "quake2.exe");
			if (stat(path, &st) == 0) {
				// found it
				checked = true;
				endmntent(mnt);
				return;
			}
		}
	}
	endmntent(mnt);

	if (found_cd)
		Com_Error (ERR_FATAL, "Could not find a Quake2 CD in your CD drive.");
	Com_Error (ERR_FATAL, "Unable to find a mounted iso9660 file system.\n"
		"You must mount the Quake2 CD in a cdrom drive in order to play.");
}

#if 0
/*
================
Sys_MakeCodeWriteable
================
*/
void Sys_MakeCodeWriteable (unsigned long startaddr, unsigned long length)
{

	int r;
	unsigned long addr;
	int psize = getpagesize();

	addr = (startaddr & ~(psize-1)) - psize;

//	fprintf(stderr, "writable code %lx(%lx)-%lx, length=%lx\n", startaddr,
//			addr, startaddr+length, length);

	r = mprotect((char*)addr, length + startaddr - addr + psize, 7);

	if (r < 0)
    		Sys_Error("Protection change failed\n");

}

#endif

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
日本在线不卡一区| 国产成人精品影院| 国产日韩欧美精品一区| 色网站国产精品| 精品在线你懂的| 亚洲自拍与偷拍| 国产亚洲精品aa午夜观看| 欧美色电影在线| 97久久超碰国产精品电影| 精品亚洲porn| 午夜精品久久久久久不卡8050| 国产女人18毛片水真多成人如厕| 欧美精品一级二级| 色综合久久久久久久| 国产精品888| 看电视剧不卡顿的网站| 亚洲综合图片区| 国产精品不卡视频| 久久亚洲精华国产精华液| 欧美日韩精品一二三区| 色综合天天综合色综合av| 国产盗摄女厕一区二区三区| 久久精品国产澳门| 热久久免费视频| 午夜视频一区在线观看| 亚洲在线中文字幕| 亚洲天堂网中文字| 综合色中文字幕| 国产精品嫩草影院com| 2017欧美狠狠色| 精品国产一二三| 欧美mv和日韩mv国产网站| 欧美肥妇bbw| 欧美日本乱大交xxxxx| 欧美四级电影在线观看| 91福利社在线观看| 91电影在线观看| 欧美色爱综合网| 欧美性感一类影片在线播放| 激情综合色综合久久综合| 丝袜美腿亚洲一区| 日本不卡免费在线视频| 亚洲mv在线观看| 亚洲国产精品欧美一二99| 亚洲欧美在线aaa| 国产三级精品三级| 久久麻豆一区二区| 久久久久久久久久久久电影| 欧美成人免费网站| 在线播放亚洲一区| 91猫先生在线| 色婷婷综合久久| 色婷婷综合中文久久一本| 91天堂素人约啪| 成人精品国产免费网站| 国产成人精品免费一区二区| 国产乱码精品一品二品| 国产乱淫av一区二区三区| 国产伦精一区二区三区| 久久99精品国产麻豆不卡| 奇米精品一区二区三区四区| 首页综合国产亚洲丝袜| 天天做天天摸天天爽国产一区| 亚洲永久精品大片| 国产精品免费久久| 久久久久久久av麻豆果冻| xvideos.蜜桃一区二区| 久久你懂得1024| 国产精品久久国产精麻豆99网站| 中文字幕亚洲欧美在线不卡| 亚洲素人一区二区| 亚洲精品视频免费看| 一卡二卡三卡日韩欧美| 亚洲韩国一区二区三区| 午夜视频在线观看一区二区三区| 美日韩一级片在线观看| 国产一区二区三区日韩| 盗摄精品av一区二区三区| 国内外精品视频| 成人夜色视频网站在线观看| 91麻豆精东视频| 欧美日韩在线三区| 日韩你懂的在线播放| 久久久不卡网国产精品二区| 国产日韩欧美电影| 亚洲欧洲三级电影| 午夜免费欧美电影| 久久99精品久久久久久久久久久久| 国产成人av影院| 在线视频亚洲一区| 日韩一区二区精品在线观看| 国产日韩精品一区二区浪潮av| 中文字幕在线播放不卡一区| 亚洲午夜在线视频| 国内精品伊人久久久久影院对白| 麻豆91在线播放| av亚洲精华国产精华精华| 欧美日韩国产不卡| 国产无一区二区| 亚洲国产欧美日韩另类综合| 国产一区二区在线免费观看| 91在线精品一区二区| 日韩一区二区三区三四区视频在线观看 | 国产成人精品亚洲日本在线桃色| 91亚洲精品一区二区乱码| 日韩一区二区麻豆国产| 综合网在线视频| 狠狠色丁香久久婷婷综| 在线视频一区二区三区| 久久影院电视剧免费观看| 亚洲激情第一区| 免费av网站大全久久| av在线一区二区| 欧美xxxxxxxx| 亚洲3atv精品一区二区三区| 成人性生交大片免费看视频在线 | 成人h版在线观看| 6080亚洲精品一区二区| 中文字幕在线不卡一区| 极品尤物av久久免费看| 欧美人妖巨大在线| 亚洲色图欧洲色图| 国产精品主播直播| 欧美一区二区三区四区在线观看| 国产亚洲欧美日韩日本| 亚洲狠狠爱一区二区三区| 91高清在线观看| 亚洲少妇最新在线视频| 国产一区二区看久久| 日韩一区国产二区欧美三区| 亚洲综合丁香婷婷六月香| 成人教育av在线| 国产精品久久三区| 国产精品自在欧美一区| 欧美视频一区二区三区在线观看 | 国产精品国产三级国产aⅴ入口 | 国产一区二区毛片| 精品日韩欧美一区二区| 日本va欧美va欧美va精品| 欧美午夜一区二区三区| ●精品国产综合乱码久久久久| 国产精品一区在线观看你懂的| 日韩美女视频一区二区在线观看| 香蕉久久一区二区不卡无毒影院 | 亚洲永久精品大片| 在线观看国产日韩| 一区二区三区在线观看视频| aaa欧美日韩| 亚洲天堂2016| 91福利社在线观看| 一区二区在线观看免费| 色婷婷亚洲综合| 一卡二卡欧美日韩| av不卡在线播放| 综合分类小说区另类春色亚洲小说欧美 | 欧美视频日韩视频在线观看| 亚洲一区二区四区蜜桃| 欧美在线免费观看亚洲| 亚洲成人动漫精品| 色天使色偷偷av一区二区| 亚洲精品福利视频网站| 在线观看视频欧美| 午夜激情久久久| 欧美一区二区三区免费大片| 婷婷中文字幕综合| 欧美久久一二区| 久久精品国产99国产精品| 久久精品一区二区三区不卡牛牛| 丁香亚洲综合激情啪啪综合| 国产精品久久一卡二卡| 色屁屁一区二区| 天堂精品中文字幕在线| 精品欧美一区二区久久| 国产精品456露脸| 精品国产91亚洲一区二区三区婷婷 | 日韩西西人体444www| 国产精品正在播放| 亚洲欧美一区二区在线观看| 91福利在线观看| 久久精品噜噜噜成人av农村| 久久久久国产一区二区三区四区| 不卡影院免费观看| 午夜久久久久久久久| 久久综合999| 一本大道av一区二区在线播放| 亚洲欧洲中文日韩久久av乱码| 欧美剧情片在线观看| 国产精品自在在线| 亚洲一区二区三区四区在线观看| 日韩欧美中文字幕一区| 国产91精品一区二区| 亚洲国产另类av| 精品国产一区二区三区av性色| www.亚洲国产| 免费在线观看视频一区| 国产精品国产a| 欧美精品三级日韩久久| 国产成人福利片| 亚洲色图制服诱惑 | 9191成人精品久久|