Пример #1
0
void FParser::OPequals(svalue_t &result, int start, int n, int stop)
{
	DFsVariable *var;
	
	var = Script->FindVariable(Tokens[start]);
	
	if(var)
    {
		EvaluateExpression(result, n+1, stop);
		var->SetValue (result);
    }
	else
    {
		script_error("unknown variable '%s'\n", Tokens[start]);
    }
}
Пример #2
0
void FParser::OPdecrement(svalue_t &result, int start, int n, int stop)
{
	if(start == n)          // ++n
    {
		DFsVariable *var;
		
		var = Script->FindVariable(Tokens[stop]);
		if(!var)
		{
			script_error("unknown variable '%s'\n", Tokens[stop]);
		}
		var->GetValue(result);
		
		// haleyjd
		if(var->type != svt_fixed)
		{
			result.value.i = intvalue(result) - 1;
			result.type = svt_int;
			var->SetValue (result);
		}
		else
		{
			result.setDouble(floatvalue(result)-1);
			result.type = svt_fixed;
			var->SetValue (result);
		}
    }
	else if(stop == n)   // n++
    {
		svalue_t newvalue;
		DFsVariable *var;
		
		var = Script->FindVariable(Tokens[start]);
		if(!var)
		{
			script_error("unknown variable '%s'\n", Tokens[start]);
		}
		var->GetValue(result);
		
		// haleyjd
		if(var->type != svt_fixed)
		{
			newvalue.type = svt_int;
			newvalue.value.i = intvalue(result) - 1;
			var->SetValue (newvalue);
		}
		else
		{
			newvalue.setDouble(floatvalue(result)-1);
			var->SetValue (newvalue);
		}
    }
	else
	{
		script_error("incorrect arguments to ++ operator\n");
	}
}
Пример #3
0
void FParser::SimpleEvaluate(svalue_t &returnvar, int n)
{
	DFsVariable *var;
	
	switch(TokenType[n])
    {
    case string_: 
		returnvar.type = svt_string;
		returnvar.string = Tokens[n];
		break;
		
    case number:
		if(strchr(Tokens[n], '.'))
		{
			returnvar.type = svt_fixed;
			returnvar.value.f = (fixed_t)(atof(Tokens[n]) * FRACUNIT);
		}
		else
		{
			returnvar.type = svt_int;
			returnvar.value.i = atoi(Tokens[n]);
		}
		break;
		
    case name_:   
		var = Script->FindVariable(Tokens[n]);
		if(!var)
		{
			script_error("unknown variable '%s'\n", Tokens[n]);
		}
		else var->GetValue(returnvar);
		
    default: 
		break;
    }
}