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); }
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; }
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); }