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

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

?? cvar.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.

*/
// cvar.c -- dynamic variable tracking

#include "qcommon.h"

cvar_t	*cvar_vars;

/*
============
Cvar_InfoValidate
============
*/
static qboolean Cvar_InfoValidate (char *s)
{
	if (strstr (s, "\\"))
		return false;
	if (strstr (s, "\""))
		return false;
	if (strstr (s, ";"))
		return false;
	return true;
}

/*
============
Cvar_FindVar
============
*/
static cvar_t *Cvar_FindVar (char *var_name)
{
	cvar_t	*var;
	
	for (var=cvar_vars ; var ; var=var->next)
		if (!strcmp (var_name, var->name))
			return var;

	return NULL;
}

/*
============
Cvar_VariableValue
============
*/
float Cvar_VariableValue (char *var_name)
{
	cvar_t	*var;
	
	var = Cvar_FindVar (var_name);
	if (!var)
		return 0;
	return atof (var->string);
}


/*
============
Cvar_VariableString
============
*/
char *Cvar_VariableString (char *var_name)
{
	cvar_t *var;
	
	var = Cvar_FindVar (var_name);
	if (!var)
		return "";
	return var->string;
}


/*
============
Cvar_CompleteVariable
============
*/
char *Cvar_CompleteVariable (char *partial)
{
	cvar_t		*cvar;
	int			len;
	
	len = strlen(partial);
	
	if (!len)
		return NULL;
		
	// check exact match
	for (cvar=cvar_vars ; cvar ; cvar=cvar->next)
		if (!strcmp (partial,cvar->name))
			return cvar->name;

	// check partial match
	for (cvar=cvar_vars ; cvar ; cvar=cvar->next)
		if (!strncmp (partial,cvar->name, len))
			return cvar->name;

	return NULL;
}


/*
============
Cvar_Get

If the variable already exists, the value will not be set
The flags will be or'ed in if the variable exists.
============
*/
cvar_t *Cvar_Get (char *var_name, char *var_value, int flags)
{
	cvar_t	*var;
	
	if (flags & (CVAR_USERINFO | CVAR_SERVERINFO))
	{
		if (!Cvar_InfoValidate (var_name))
		{
			Com_Printf("invalid info cvar name\n");
			return NULL;
		}
	}

	var = Cvar_FindVar (var_name);
	if (var)
	{
		var->flags |= flags;
		return var;
	}

	if (!var_value)
		return NULL;

	if (flags & (CVAR_USERINFO | CVAR_SERVERINFO))
	{
		if (!Cvar_InfoValidate (var_value))
		{
			Com_Printf("invalid info cvar value\n");
			return NULL;
		}
	}

	var = Z_Malloc (sizeof(*var));
	var->name = CopyString (var_name);
	var->string = CopyString (var_value);
	var->modified = true;
	var->value = atof (var->string);

	// link the variable in
	var->next = cvar_vars;
	cvar_vars = var;

	var->flags = flags;

	return var;
}

/*
============
Cvar_Set2
============
*/
cvar_t *Cvar_Set2 (char *var_name, char *value, qboolean force)
{
	cvar_t	*var;

	var = Cvar_FindVar (var_name);
	if (!var)
	{	// create it
		return Cvar_Get (var_name, value, 0);
	}

	if (var->flags & (CVAR_USERINFO | CVAR_SERVERINFO))
	{
		if (!Cvar_InfoValidate (value))
		{
			Com_Printf("invalid info cvar value\n");
			return var;
		}
	}

	if (!force)
	{
		if (var->flags & CVAR_NOSET)
		{
			Com_Printf ("%s is write protected.\n", var_name);
			return var;
		}

		if (var->flags & CVAR_LATCH)
		{
			if (var->latched_string)
			{
				if (strcmp(value, var->latched_string) == 0)
					return var;
				Z_Free (var->latched_string);
			}
			else
			{
				if (strcmp(value, var->string) == 0)
					return var;
			}

			if (Com_ServerState())
			{
				Com_Printf ("%s will be changed for next game.\n", var_name);
				var->latched_string = CopyString(value);
			}
			else
			{
				var->string = CopyString(value);
				var->value = atof (var->string);
				if (!strcmp(var->name, "game"))
				{
					FS_SetGamedir (var->string);
					FS_ExecAutoexec ();
				}
			}
			return var;
		}
	}
	else
	{
		if (var->latched_string)
		{
			Z_Free (var->latched_string);
			var->latched_string = NULL;
		}
	}

	if (!strcmp(value, var->string))
		return var;		// not changed

	var->modified = true;

	if (var->flags & CVAR_USERINFO)
		userinfo_modified = true;	// transmit at next oportunity
	
	Z_Free (var->string);	// free the old value string
	
	var->string = CopyString(value);
	var->value = atof (var->string);

	return var;
}

/*
============
Cvar_ForceSet
============
*/
cvar_t *Cvar_ForceSet (char *var_name, char *value)
{
	return Cvar_Set2 (var_name, value, true);
}

/*
============
Cvar_Set
============
*/
cvar_t *Cvar_Set (char *var_name, char *value)
{
	return Cvar_Set2 (var_name, value, false);
}

/*
============
Cvar_FullSet
============
*/
cvar_t *Cvar_FullSet (char *var_name, char *value, int flags)
{
	cvar_t	*var;
	
	var = Cvar_FindVar (var_name);
	if (!var)
	{	// create it
		return Cvar_Get (var_name, value, flags);
	}

	var->modified = true;

	if (var->flags & CVAR_USERINFO)
		userinfo_modified = true;	// transmit at next oportunity
	
	Z_Free (var->string);	// free the old value string
	
	var->string = CopyString(value);
	var->value = atof (var->string);
	var->flags = flags;

	return var;
}

/*
============
Cvar_SetValue
============
*/
void Cvar_SetValue (char *var_name, float value)
{
	char	val[32];

	if (value == (int)value)
		Com_sprintf (val, sizeof(val), "%i",(int)value);
	else
		Com_sprintf (val, sizeof(val), "%f",value);
	Cvar_Set (var_name, val);
}


/*
============
Cvar_GetLatchedVars

Any variables with latched values will now be updated
============
*/
void Cvar_GetLatchedVars (void)
{
	cvar_t	*var;

	for (var = cvar_vars ; var ; var = var->next)
	{
		if (!var->latched_string)
			continue;
		Z_Free (var->string);
		var->string = var->latched_string;
		var->latched_string = NULL;
		var->value = atof(var->string);
		if (!strcmp(var->name, "game"))
		{
			FS_SetGamedir (var->string);
			FS_ExecAutoexec ();
		}
	}
}

/*
============
Cvar_Command

Handles variable inspection and changing from the console
============
*/
qboolean Cvar_Command (void)
{
	cvar_t			*v;

// check variables
	v = Cvar_FindVar (Cmd_Argv(0));
	if (!v)
		return false;
		
// perform a variable print or set
	if (Cmd_Argc() == 1)
	{
		Com_Printf ("\"%s\" is \"%s\"\n", v->name, v->string);
		return true;
	}

	Cvar_Set (v->name, Cmd_Argv(1));
	return true;
}


/*
============
Cvar_Set_f

Allows setting and defining of arbitrary cvars from console
============
*/
void Cvar_Set_f (void)
{
	int		c;
	int		flags;

	c = Cmd_Argc();
	if (c != 3 && c != 4)
	{
		Com_Printf ("usage: set <variable> <value> [u / s]\n");
		return;
	}

	if (c == 4)
	{
		if (!strcmp(Cmd_Argv(3), "u"))
			flags = CVAR_USERINFO;
		else if (!strcmp(Cmd_Argv(3), "s"))
			flags = CVAR_SERVERINFO;
		else
		{
			Com_Printf ("flags can only be 'u' or 's'\n");
			return;
		}
		Cvar_FullSet (Cmd_Argv(1), Cmd_Argv(2), flags);
	}
	else
		Cvar_Set (Cmd_Argv(1), Cmd_Argv(2));
}


/*
============
Cvar_WriteVariables

Appends lines containing "set variable value" for all variables
with the archive flag set to true.
============
*/
void Cvar_WriteVariables (char *path)
{
	cvar_t	*var;
	char	buffer[1024];
	FILE	*f;

	f = fopen (path, "a");
	for (var = cvar_vars ; var ; var = var->next)
	{
		if (var->flags & CVAR_ARCHIVE)
		{
			Com_sprintf (buffer, sizeof(buffer), "set %s \"%s\"\n", var->name, var->string);
			fprintf (f, "%s", buffer);
		}
	}
	fclose (f);
}

/*
============
Cvar_List_f

============
*/
void Cvar_List_f (void)
{
	cvar_t	*var;
	int		i;

	i = 0;
	for (var = cvar_vars ; var ; var = var->next, i++)
	{
		if (var->flags & CVAR_ARCHIVE)
			Com_Printf ("*");
		else
			Com_Printf (" ");
		if (var->flags & CVAR_USERINFO)
			Com_Printf ("U");
		else
			Com_Printf (" ");
		if (var->flags & CVAR_SERVERINFO)
			Com_Printf ("S");
		else
			Com_Printf (" ");
		if (var->flags & CVAR_NOSET)
			Com_Printf ("-");
		else if (var->flags & CVAR_LATCH)
			Com_Printf ("L");
		else
			Com_Printf (" ");
		Com_Printf (" %s \"%s\"\n", var->name, var->string);
	}
	Com_Printf ("%i cvars\n", i);
}


qboolean userinfo_modified;


char	*Cvar_BitInfo (int bit)
{
	static char	info[MAX_INFO_STRING];
	cvar_t	*var;

	info[0] = 0;

	for (var = cvar_vars ; var ; var = var->next)
	{
		if (var->flags & bit)
			Info_SetValueForKey (info, var->name, var->string);
	}
	return info;
}

// returns an info string containing all the CVAR_USERINFO cvars
char	*Cvar_Userinfo (void)
{
	return Cvar_BitInfo (CVAR_USERINFO);
}

// returns an info string containing all the CVAR_SERVERINFO cvars
char	*Cvar_Serverinfo (void)
{
	return Cvar_BitInfo (CVAR_SERVERINFO);
}

/*
============
Cvar_Init

Reads in all archived cvars
============
*/
void Cvar_Init (void)
{
	Cmd_AddCommand ("set", Cvar_Set_f);
	Cmd_AddCommand ("cvarlist", Cvar_List_f);

}

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲国产一区二区a毛片| 国产欧美日韩在线看| 亚洲一区二区三区中文字幕| www.激情成人| 亚洲一区在线视频观看| 欧美色网一区二区| 奇米一区二区三区av| 久久久久久99精品| 波波电影院一区二区三区| 亚洲欧美在线视频观看| 日本精品一级二级| 日韩国产欧美视频| 久久久噜噜噜久久中文字幕色伊伊| 国产一区二区三区在线观看免费| 久久精品夜夜夜夜久久| 国产成人在线观看| 亚洲欧美日韩国产手机在线| 欧美日韩一二三区| 韩国理伦片一区二区三区在线播放 | 久久免费午夜影院| 91日韩一区二区三区| 亚洲大片一区二区三区| 日韩一区二区三区观看| 国产69精品久久久久毛片| 一区二区三区在线视频免费| 日韩免费看网站| 成人18视频日本| 亚洲成人动漫在线免费观看| 26uuu欧美| 在线观看欧美日本| 狠狠久久亚洲欧美| 亚洲综合色视频| 久久久不卡网国产精品二区| 欧美亚洲综合另类| 国产成人免费视频| 日韩av不卡一区二区| 亚洲欧美另类小说| 欧美va天堂va视频va在线| 色一区在线观看| 欧美丝袜丝交足nylons图片| 风间由美一区二区三区在线观看 | 国产精品久久看| 欧美一区二区在线免费播放| a4yy欧美一区二区三区| 久久99久久99小草精品免视看| 亚洲老妇xxxxxx| 欧美国产激情一区二区三区蜜月| 91 com成人网| 在线观看视频欧美| av午夜一区麻豆| 国产一区二区三区四区五区入口| 亚洲成在线观看| 亚洲丝袜精品丝袜在线| 久久精品夜色噜噜亚洲a∨| 欧美一区二区黄色| 欧美综合亚洲图片综合区| 成人不卡免费av| 国产一区不卡视频| 毛片一区二区三区| 免费成人结看片| 视频一区在线视频| 亚洲成人激情综合网| 亚洲精品五月天| ㊣最新国产の精品bt伙计久久| 精品捆绑美女sm三区| 欧美一级日韩免费不卡| 欧美伦理影视网| 欧美日韩国产中文| 欧美日韩三级一区| 91黄色激情网站| 91视频在线观看| www.66久久| 色综合欧美在线视频区| 色综合中文字幕国产 | 制服丝袜亚洲色图| 欧美精品乱码久久久久久按摩| 亚洲国产精品成人综合色在线婷婷 | 不卡一区二区中文字幕| 成人午夜免费av| 成人app下载| 一本大道久久a久久综合婷婷| 99久久er热在这里只有精品66| 99re热视频这里只精品| 91麻豆国产福利精品| 91视频观看免费| 在线亚洲人成电影网站色www| 91成人在线精品| 欧美电影在线免费观看| 7777精品伊人久久久大香线蕉超级流畅| 欧美日韩精品一区二区三区四区 | 亚洲欧美日韩精品久久久久| 亚洲免费电影在线| 亚洲国产人成综合网站| 日韩二区三区四区| 日韩高清一区在线| 国产在线精品国自产拍免费| 成人激情开心网| 在线一区二区三区四区五区| 欧美日韩国产小视频| 欧美电影免费观看高清完整版在线观看 | 成人免费一区二区三区在线观看| 1000部国产精品成人观看| 亚洲免费在线视频| 亚洲成a人v欧美综合天堂下载| 蜜臀99久久精品久久久久久软件| 国产一区二区三区免费| av成人动漫在线观看| 欧美三级日韩在线| 久久久久久久久蜜桃| 亚洲少妇最新在线视频| 日韩精品亚洲一区二区三区免费| 国产精一区二区三区| 午夜av区久久| 美女网站一区二区| 成人av免费观看| 6080亚洲精品一区二区| 国产欧美视频一区二区三区| 亚洲一区二区影院| 久久国产精品露脸对白| av动漫一区二区| 精品国产91洋老外米糕| 樱花草国产18久久久久| 国产一二精品视频| 欧日韩精品视频| 日本一区二区三区国色天香| 天堂一区二区在线| 成人av动漫在线| 精品久久久久av影院| 亚洲综合图片区| 成人高清视频在线观看| 欧美tk—视频vk| 天堂蜜桃一区二区三区 | 一区二区成人在线视频| 国产一区二区免费看| 67194成人在线观看| 一区二区三区四区不卡在线 | 国产精品一区二区久久不卡 | 国产剧情av麻豆香蕉精品| 欧美日韩三级视频| 亚洲日本欧美天堂| 国内成人自拍视频| 欧美蜜桃一区二区三区| 一区二区在线观看av| 波多野结衣中文字幕一区 | 91日韩一区二区三区| 欧美国产欧美亚州国产日韩mv天天看完整| 午夜电影一区二区三区| 91亚洲国产成人精品一区二区三| 久久午夜电影网| 美女mm1313爽爽久久久蜜臀| 欧美网站大全在线观看| 亚洲免费在线观看| av中文字幕一区| 国产欧美日韩麻豆91| 精品无人区卡一卡二卡三乱码免费卡| 欧美日韩国产另类不卡| 亚洲国产一区二区a毛片| 一本色道久久加勒比精品| 国产欧美日韩在线看| 国产成人在线网站| 国产视频在线观看一区二区三区| 理论片日本一区| 精品裸体舞一区二区三区| 日本视频免费一区| 91精品在线免费观看| 免费久久99精品国产| 欧美亚洲一区二区在线观看| 夜夜爽夜夜爽精品视频| 色婷婷久久久亚洲一区二区三区| 欧美国产激情二区三区| 成人自拍视频在线观看| 久久久综合激的五月天| 国产成人综合网站| 欧美激情中文字幕一区二区| 不卡av在线免费观看| 亚洲色图欧美在线| 欧美在线啊v一区| 亚洲一区二区三区视频在线播放| 91福利在线观看| 午夜激情一区二区三区| 日韩免费福利电影在线观看| 国产精品1区2区| 国产精品色在线| 91九色最新地址| 视频一区二区三区入口| 亚洲线精品一区二区三区八戒| 欧美日本一道本| 久久99热国产| 日韩美女视频一区二区 | 日韩久久一区二区| 91久久精品网| 久久精品999| 国产精品二区一区二区aⅴ污介绍| 99久久国产综合精品麻豆| 午夜久久久久久久久久一区二区| 欧美成人a视频| 成人97人人超碰人人99| 舔着乳尖日韩一区| 久久午夜色播影院免费高清| 91偷拍与自偷拍精品|