示例#1
0
文件: exparse.c 项目: oleavitt/gem
Expr *MakeImageMapFunc(void (*fn)(Expr *))
{
	Expr *expr = NULL;
	TOKEN *fntoken = cur_token;
	Image *img = NULL;

	token = GetToken();
	if(token == OP_LPAREN)
	{
		/* Get the quoted file name and first comma... */
		if((token = GetToken()) == TK_QUOTESTRING)
		{
			FILE *fp;
			/* Open the file... */
			if((fp = SCN_FindFile(token_buffer, READBIN,
				scn_include_paths, SCN_FINDFILE_CHK_CUR_FIRST)) != NULL)
			{
				/* Load the image... */
				img = Image_Load(fp, token_buffer); 
				fclose(fp);
				if(img == NULL)
				{
					LogError("Unable to load image file: %s", token_buffer);
					PrintFileAndLineNumber();
				}
			}
			else
			{
				LogError("Unable to open image file: %s", token_buffer);
				PrintFileAndLineNumber();
			}
		}
		else
			ErrUnknown(token, "expecting image file name",
				"expression syntax");
		
		/* Eat the first comma... */
		if((token = GetToken()) != OP_COMMA)
			ErrUnknown(token, ",", "expression syntax");
		/* Get the U, V expressions and finish. */
		token = GetToken();
		expr = Term0();
		if(token == OP_RPAREN)
		{
			CheckParamCount(expr, fntoken->name, 2);
			token = GetToken();
			if(expr != NULL)
			{
				expr->data = img;
				expr->fn = fn;
				expr->isvec = 1;
			}
		}
		else
			ErrUnknown(token, ")", "expression syntax");
	}
	else
		ErrUnknown(token, "(", "expression syntax");
	return expr;
}
示例#2
0
文件: exparse.c 项目: oleavitt/gem
Expr *MakeFunc(void (*fn)(Expr *), int nparams, int returns_vec)
{
	Expr *expr = NULL;
	TOKEN *fntoken = cur_token;
	token = GetToken();
	if(token == OP_LPAREN)
	{
		if(nparams < 2)
		{
			expr = ExprNew();
			expr->fn = fn;
			expr->isvec = returns_vec ? 1 : 0;
			token = GetToken();
			expr->l = Term0();
			if(token == OP_RPAREN)
			{
				CheckParamCount(expr->l, fntoken->name, nparams);
				token = GetToken();
			}
			else
				ErrUnknown(token, ")", "expression syntax");
		}
		else
		{
			token = GetToken();
			expr = Term0();
			if(token == OP_RPAREN)
			{
				CheckParamCount(expr, fntoken->name, nparams);
				token = GetToken();
				if(expr != NULL)
				{
					expr->fn = fn;
					expr->isvec = returns_vec ? 1 : 0;
				}
			}
			else
				ErrUnknown(token, ")", "expression syntax");
		}
	}
	else
		ErrUnknown(token, "(", "expression syntax");
	return expr;
}
示例#3
0
	int __fun_call(Executor& ks)
	{	
		if(!CheckParamCount(ks,1))
		{
			ks.kerror("param count should be 1");
			return -1;
		}

		kvar_handler1<PL1_opx_num<P> >::g1(ks,kvar_helper_base::f1(ks));
		return 1;
	}
示例#4
0
	int __fun_call(Executor& ks)
	{	
		if(!CheckParamCount(ks,2))
		{
			ks.kerror("param count should be 2");
			return -1;
		}

		kvar_helper<N>::g2(ks);		
		return 1;
	}
示例#5
0
	int __fun_call(Executor& ks)
	{

		if(!CheckParamCount(ks,1))
		{
			return -1;
		}

		kvar_helper<N>::g1(ks);		
		return 1;
	}
示例#6
0
文件: exparse.c 项目: oleavitt/gem
Expr *MakeHandleFunc(void (*fn)(Expr *), int handle_token,
	int nparams, int returns_vec)
{
	Expr *expr = NULL;
	void *data = NULL;
	TOKEN *fntoken = cur_token;
	token = GetToken();
	if(token == OP_LPAREN)
	{
		/*
		 * Look for a handle to a declared type that matches
		 * the type specified by handle_token.
		 */
		token = GetToken();
		if(token == handle_token)
		{
			switch(token)
			{
				case DECL_COLOR_MAP:
					data = (void *)ColorMap_Copy((ColorMap *)cur_token->data);
					break;
			}
		}
		else
		{
			switch(handle_token)
			{
				case DECL_COLOR_MAP:
					ErrUnknown(token, "color map handle id", "expression syntax");
					break;
				default:
					ErrUnknown(token, "handle to a declared item",
						"expression syntax");
					break;
			}
		}
		/* Get the first comma if more params follow. */
		if(nparams > 0)
		{
			token = GetToken();
			if(token != OP_COMMA)
				ErrUnknown(token, ",", "expression syntax");
		}
		if(nparams < 2)
		{
			expr = ExprNew();
			expr->fn = fn;
			expr->data = data;
			expr->isvec = returns_vec ? 1 : 0;
			token = GetToken();
			expr->l = Term0();
			if(token == OP_RPAREN)
			{
				CheckParamCount(expr->l, fntoken->name, nparams);
				token = GetToken();
			}
			else
				ErrUnknown(token, ")", "expression syntax");
		}
		else
		{
			token = GetToken();
			expr = Term0();
			if(token == OP_RPAREN)
			{
				CheckParamCount(expr, fntoken->name, nparams);
				token = GetToken();
				if(expr != NULL)
				{
					expr->fn = fn;
					expr->data = data;
					expr->isvec = returns_vec ? 1 : 0;
				}
				else if(data != NULL)
				{
					switch(token)
					{
						case DECL_COLOR_MAP:
							ColorMap_Delete((ColorMap *)data);
							break;
					}
				}
			}
			else
				ErrUnknown(token, ")", "expression syntax");
		}
	}
	else
		ErrUnknown(token, "(", "expression syntax");
	return expr;
}