Exemplo n.º 1
0
static int wenv_func(char *arg, int flags)
{
	char *p = arg;
	char *p1;
	int ret = 0;
	int status = 0;
	int i;
	wenv_flags = 0;
	char *cmd_buff;
	if ((cmd_buff = malloc(0x800)) == NULL)
		return 0;

	while ( *p && (arg = p) != NULL)
	{
		if (*arg == '(')
		{
			p = check_Brackets(arg);
			if (p == NULL)
			{
				free(cmd_buff);
				return !(errnum = ERR_BAD_ARGUMENT);
			}
			*p++ = '\0';
			p = skip_next_next_cmd(p,&status,STATUS_NONE);
			ret = wenv_func(++arg,flags);
		}
		else
		{
			#ifdef DEBUG
				printf("wenv_arg:%s\n",arg);
			#endif
			*cmd_buff = '\0';
			p = skip_next_next_cmd(p,&status,STATUS_NONE);
			replace_str(arg,cmd_buff,REPLACE_TRIM | MAX_ENV_LEN); //替换变量
			arg = cmd_buff;
			for (i=0;p_cmd_list[i].name != NULL ;i++)
			{
				if (strcmp_ex(arg, p_cmd_list[i].name) == 0)
				{
					arg = skip_next(0, arg);
					if((unsigned char)*arg < (unsigned char)p_cmd_list[i].flags)
					{
						free(cmd_buff);
						return wenv_help_ex(p_cmd_list[i].flags >> 8);
					}
					break;
				}
			}
			if (p_cmd_list[i].func == NULL)
			{
				if (debug == 2)
					printf("wenv_arg:%s\n",arg);
				free(cmd_buff);
				return !(errnum = ERR_BAD_ARGUMENT);
			}
			ret = p_cmd_list[i].func(arg,flags);
		}
Exemplo n.º 2
0
bool menu_helpers::guid_from_name(const char * p_name,unsigned p_name_len,GUID & p_out)
{
	service_enum_t<contextmenu_item> e;
	service_ptr_t<contextmenu_item> ptr;
	pfc::string8_fastalloc nametemp;
	while(e.next(ptr))
	{
		unsigned n, m = ptr->get_num_items();
		for(n=0;n<m;n++)
		{
			ptr->get_item_name(n,nametemp);
			if (!strcmp_ex(nametemp,~0,p_name,p_name_len))
			{
				p_out = ptr->get_item_guid(n);
				return true;
			}
		}
	}
	return false;
}
Exemplo n.º 3
0
int main(char *arg,int flags)
{
	if (*(int *)0x8278 < 20101124)
	{
		printf("grub4dos version does not support\n");
		return 0;
	}
	struct cmd_list wenv_cmd[16]=
	{
		{"set",set_func,(CMD_SET << 8)},
		{"get",get_func,CMD_GET << 8},
		{"reset",reset_func,CMD_RESET << 8},
		{"calc",calc_func,(CMD_CALC << 8) | 1},
		{"read",read_func,(CMD_CALC << 8) | 1},
		{"call",call_func,(CMD_CALL << 8) | 1},
		{"exec",exec_func,(CMD_CALL << 8) | 1},
		{"check",check_func,(CMD_CHECK << 8) | 1},
		{"for",for_func,(CMD_FOR << 8) | 1},
		{"echo",echo_func,CMD_FOR << 8},
		{"dir",dir_func,CMD_DIR << 8},
		{"config",config_func,0},
		{"break",break_func,0},
		{"continue",continue_func,0},
		{NULL,NULL,0}
	}; //必须在程序中进行初始化
	p_cmd_list = wenv_cmd;
	if (p_cmd_list == NULL)
		return ! (errnum = ERR_WONT_FIT);
	if( ! *arg || arg == NULL )
		return wenv_help();
	if( 0 != strcmp_ex(VAR[_WENV_], "?_WENV") )// 检查默认变量
		reset_env_all();
	#ifdef DEBUG
	printf("wenv_arg:%s\n",arg);
	#endif
	return wenv_func (arg , flags);
}