Example #1
0
void MVD_ClockList_TopItems_Draw(double time_limit, int style, int x, int y, float scale)
{
	mvd_clock_t *current = mvd_clocklist;
	char *clockitem;

	while (current && current->clockval - cls.demotime < time_limit) {
		int time = (int) ((current->clockval - cls.demotime) + 1);

		if(style == 1){	// tp_name_*
			clockitem = va("%s", TP_ItemName(mvd_wp_info[current->itemtype].it));
		}else if (style == 2){	// brown + white
			clockitem = va("%s", mvd_wp_info[current->itemtype].name);
			CharsToBrown(clockitem, clockitem + strlen(mvd_wp_info[current->itemtype].name));
		}else{	// built-in color(GL) or simple white (software)
			clockitem = va("%s", mvd_wp_info[current->itemtype].colored_name);
		}

		if(time > 0)
			clockitem = va("%s %d", clockitem, time);
		else
			clockitem = va("%s spawn", clockitem);

		Draw_SString (x, y, clockitem, scale);

		current = current->next;
		y += LETTERHEIGHT * scale;
	}
}
Example #2
0
// XXX: this could do with some refactoring
void Cvar_Set_Calc_f(void)
{
	cvar_t *var, *var2;
	char *var_name, *op, *a2, *a3;
	int	pos, len, division_by_zero = 0;
	float num1, num2, result;
	char buf[1024];

	var_name = Cmd_Argv (1);
	var = Cvar_Find (var_name);

	if (!var)
		var = Cvar_Create (var_name, Cmd_Argv (2), 0);

	a2 = Cmd_Argv (2);
	a3 = Cmd_Argv (3);

	if (!strcmp (a2, "strlen")) {
		Cvar_SetValue (var, strlen (a3));
		return;
	} else if (!strcmp (a2, "int")) {
		Cvar_SetValue (var, (int) Q_atof (a3));
		return;
	} else if (!strcmp (a2, "substr")) {
		int var2len;
		var2 = Cvar_Find (a3);

		if (!var2) {
			Com_Printf ("Unknown variable \"%s\"\n", a3);
			return;
		}

		pos = atoi (Cmd_Argv (4));
		len = (Cmd_Argc () < 6)? 1 : atoi (Cmd_Argv (5));

		if (len == 0) {
			Cvar_Set (var, "");
			return;
		}

		if (len < 0 || pos < 0) {
			Com_Printf ("substr: invalid len or pos\n");
			return;
		}

		var2len = strlen (var2->string);

		if (var2len < pos) {
			Com_Printf ("substr: string length exceeded\n");
			return;
		}

		len = min (var2len - pos, len);
		strlcpy (buf, var2->string + pos, len);
		Cvar_Set (var, buf);
		return;

	} else if (!strcmp (a2, "set_substr")) {
		int	var1len,var2len;
		var2 = Cvar_Find (a3);

		if (!var2) {
			Com_Printf ("Unknown variable \"%s\"\n", a3);
			return;
		}

		var1len = strlen (var->string);
		var2len = strlen (var2->string);
		pos = atoi (Cmd_Argv (4));

		strlcpy (buf, var->string, sizeof (buf));

		if (pos + var2len > var1len) { // need to expand
			int i;
			for (i = var1len; i < pos + var2len; i++)
				buf[i] = ' ';
			buf[pos+var2len] = 0;
		}

		strlcpy (buf + pos, var2->string, sizeof (buf) - pos);
		Cvar_Set (var, buf);

		return;
	} else if (!strcmp (a2, "pos")) {
		var2 = Cvar_Find (a3);

		if (!var2) {
			Com_Printf ("Unknown variable \"%s\"\n", a3);
			return;
		}

		op = strstr (var2->string, Cmd_Argv (4));
		Cvar_SetValue (var, op ? op - var2->string : -1);
		return;
	} else if (!strcmp (a2, "tobrown")) {
		strlcpy (buf, var->string, sizeof (buf));
		CharsToBrown (buf, buf + strlen (buf));
		Cvar_Set (var, buf);
		return;
	} else if (!strcmp (a2, "towhite")) {
		strlcpy (buf, var->string, sizeof (buf));
		CharsToWhite (buf, buf + strlen (buf));
		Cvar_Set (var, buf);
		return;
	}

	num1 = Q_atof (a2);
	op = a3;
	num2 = Q_atof (Cmd_Argv (4));

	if (!strcmp (op, "+"))
		result = num1 + num2;
	else if (!strcmp (op, "-"))
		result = num1 - num2;
	else if (!strcmp (op, "*"))
		result = num1 * num2;
	else if (!strcmp (op, "/")) {
		if (num2 != 0)
			result = num1 / num2;
		else
			division_by_zero = 1;
	} else if (!strcmp (op, "%")) {
		if ((int) num2 != 0)
			result = (int) num1 % (int) num2;
		else
			division_by_zero = 1;
	} else if (!strcmp (op, "div")) {
		if ((int) num2 != 0)
			result = (int) num1 / (int) num2;
		else
			division_by_zero = 1;
	} else if (!strcmp (op, "and")) {
		result = (int) num1 & (int) num2;
	} else if (!strcmp (op, "or")) {
		result = (int) num1 | (int) num2;
	} else if (!strcmp (op, "xor")) {
		result = (int) num1 ^ (int) num2;
	} else {
		Com_Printf ("set_calc: unknown operator: %s\nvalid operators are: + - * / div %% and or xor\n", op);
		// Com_Printf("set_calc: unknown command: %s\nvalid commands are: strlen int substr set_substr pos\n", a2);
		return;
	}

	if (division_by_zero) {
		Com_Printf ("set_calc: can't divide by zero\n");
		result = 999;
	}

	Cvar_SetValue (var, result);
}
Example #3
0
void Help_VarDescription (const char *varname, char* buf, size_t bufsize)
{
	extern void CharsToBrown(char*, char*);
	extern cvar_t menu_advanced;
	xml_variable_t *var;
	variable_enum_value_t *cv;

	var = XSD_Variable_Load (va ("help/variables/%s.xml", varname));
	
	if(menu_advanced.integer && strlen(varname)){
		strlcat(buf, "Variable name: ", bufsize);
		strlcat(buf, varname, bufsize);
		CharsToBrown(buf, buf + strlen (buf) - strlen(varname));
		strlcat(buf, "\n", bufsize);
	}
	
	if (!var)
		return;

	if (var->description && strlen (var->description) > 1) {
		strlcat (buf, var->description, bufsize);
		strlcat (buf, "\n", bufsize);
	}

	if (var->remarks) {
		strlcat (buf, "remarks: ", bufsize);
		strlcat (buf, var->remarks, bufsize);
		strlcat (buf, "\n", bufsize);
	}

	switch (var->value_type) {
	case t_boolean:
		if (var->value.boolean_value.false_description) {
			strlcat (buf, "0: ", bufsize);
			strlcat (buf, var->value.boolean_value.false_description, bufsize);
			strlcat (buf, "\n", bufsize);
		}

		if (var->value.boolean_value.true_description) {
			strlcat (buf, "1: ", bufsize);
			strlcat (buf, var->value.boolean_value.true_description, bufsize);
			strlcat (buf, "\n", bufsize);
		}

		break;

	case t_float:
		if (var->value.float_description) {
			strlcat (buf, var->value.float_description, bufsize);
			strlcat (buf, "\n", bufsize);
		}

		break;

	case t_integer:
		if (var->value.integer_description) {
			strlcat (buf, var->value.integer_description, bufsize);
			strlcat (buf, "\n", bufsize);
		}

		break;

	case t_string:
		if (var->value.string_description) {
			strlcat (buf, var->value.string_description, bufsize);
			strlcat (buf, "\n", bufsize);
		}

		break;

	case t_enum:
		cv = var->value.enum_value;
		while(cv) {
			if (cv->name && cv->description) {
				strlcat (buf, cv->name, bufsize);
				strlcat (buf, ":", bufsize);
				strlcat (buf, cv->description, bufsize);
				strlcat (buf, "\n", bufsize);
			}

			cv = cv->next;
		}

		break;
	}

	XSD_Variable_Free ((xml_t *) var);
}