void strreplaceall (xr_string &str, LPCSTR S, LPCSTR N) { LPCSTR A; int S_len = xr_strlen(S); while ((A = strstr(str.c_str(),S)) != 0) str.replace(A - str.c_str(),S_len,N); }
void TDB_packer::_load_(const xr_string& fname) { lbIncludeFolders->Items->Clear (); lbIncludeFiles->Items->Clear (); CInifile ini (fname.c_str()); if(ini.section_exist("include_folders")) { CInifile::Sect S = ini.r_section("include_folders"); CInifile::SectCIt it = S.Data.begin(); CInifile::SectCIt it_e = S.Data.end(); for( ;it!=it_e; ++it) { WideString ws; ws = (*it).first.c_str(); lbIncludeFolders->Items->Add (ws); } } if(ini.section_exist("include_files")) { CInifile::Sect S = ini.r_section("include_files"); CInifile::SectCIt it = S.Data.begin(); CInifile::SectCIt it_e = S.Data.end(); for( ;it!=it_e; ++it) { WideString ws; ws = (*it).first.c_str(); lbIncludeFiles->Items->Add (ws); } } Caption = fname.c_str(); }
LPCSTR _CopyVal(LPCSTR src, xr_string& dst, char separator) { LPCSTR p; ptrdiff_t n; p = strchr(src, separator); n = (p > 0) ? (p - src) : xr_strlen(src); dst = src; dst = dst.erase(n, dst.length()); return dst.c_str(); }
void CMapListHelper::LoadMapInfo(LPCSTR map_cfg_fn, const xr_string& map_name, LPCSTR map_ver) { CInifile ini (map_cfg_fn); shared_str _map_name = map_name.substr(0,map_name.find('\\')).c_str(); shared_str _map_ver = map_ver; if(ini.section_exist("map_usage")) { if(ini.line_exist("map_usage","ver") && !map_ver) _map_ver = ini.r_string("map_usage", "ver"); CInifile::Sect S = ini.r_section("map_usage"); CInifile::SectCIt si = S.Data.begin(); CInifile::SectCIt si_e = S.Data.end(); for( ;si!=si_e; ++si) { const shared_str& game_type = (*si).first; if(game_type=="ver") continue; SGameTypeMaps* M = GetMapListInt(game_type); if(!M) { Msg ("--unknown game type-%s",game_type.c_str()); m_storage.resize (m_storage.size()+1); SGameTypeMaps& Itm = m_storage.back(); Itm.m_game_type_name = game_type; Itm.m_game_type_id = ParseStringToGameType(game_type.c_str()); M = &m_storage.back(); } SGameTypeMaps::SMapItm Itm; Itm.map_name = _map_name; Itm.map_ver = _map_ver; if(M->m_map_names.end()!=std::find(M->m_map_names.begin(),M->m_map_names.end(),Itm)) { Msg("! duplicate map found [%s] [%s]", _map_name.c_str(), _map_ver.c_str()); }else { #ifndef MASTER_GOLD Msg("added map [%s] [%s]", _map_name.c_str(), _map_ver.c_str()); #endif // #ifndef MASTER_GOLD M->m_map_names.push_back (Itm); } } } }
// %c[255,255,255,255] u32 CUILines::GetColorFromText(const xr_string& str)const { // typedef xr_string::size_type size; StrSize begin, end, comma1_pos, comma2_pos, comma3_pos; begin = str.find(BEGIN); end = str.find(END, begin); R_ASSERT2(npos != begin, "CUISubLine::GetColorFromText -- can't find beginning tag %c["); R_ASSERT2(npos != end, "CUISubLine::GetColorFromText -- can't find ending tag ]"); // try default color if (npos != str.find("%c[default]", begin, end - begin)) return m_dwTextColor; // Try predefined in XML colors // CUIXmlInit xml; for (CUIXmlInit::ColorDefs::const_iterator it = CUIXmlInit::GetColorDefs()->begin(); it != CUIXmlInit::GetColorDefs()->end(); ++it) { int cmp = str.compare(begin+3, end-begin-3, *it->first); if (cmp == 0) return it->second; } // try parse values separated by commas comma1_pos = str.find(",", begin); comma2_pos = str.find(",", comma1_pos + 1); comma3_pos = str.find(",", comma2_pos + 1); R_ASSERT2(npos != comma1_pos, "CUISubLine::GetColorFromText -- can't find first comma"); R_ASSERT2(npos != comma2_pos, "CUISubLine::GetColorFromText -- can't find second comma"); R_ASSERT2(npos != comma3_pos, "CUISubLine::GetColorFromText -- can't find third comma"); u32 a, r, g, b; xr_string single_color; begin+=3; single_color = str.substr(begin, comma1_pos - 1); a = atoi(single_color.c_str()); single_color = str.substr(comma1_pos + 1, comma2_pos - 1); r = atoi(single_color.c_str()); single_color = str.substr(comma2_pos + 1, comma3_pos - 1); g = atoi(single_color.c_str()); single_color = str.substr(comma3_pos + 1, end - 1); b = atoi(single_color.c_str()); return color_argb(a,r,g,b); }
xr_string EFS_Utils::AppendFolderToName(xr_string& tex_name, int depth, BOOL full_name) { string1024 nm; xr_strcpy(nm,tex_name.c_str()); tex_name = AppendFolderToName(nm,sizeof(nm),depth,full_name); return tex_name; }
bool EFS_Utils::GetOpenName(LPCSTR initial, xr_string& buffer, bool bMulti, LPCSTR offset, int start_flt_ext ) { char buf [255*255]; //max files to select xr_strcpy (buf, buffer.c_str()); /* char* g_SHBF_Folder =("C:\\Program Files"); TCHAR path[_MAX_PATH]; BROWSEINFO info={NULL,NULL,path,"title",BIF_USENEWUI,BrowseCallbackProc, (LPARAM)g_SHBF_Folder }; SHBrowseForFolder (&info); */ /* { HANDLE hDialog = OSDInit(true, "SDITEST", 0, 0, 0, 0, 0, 0); if(hDialog) { OSDRET osResult=OSDDoModal(hDialog, 0); OSDRelease(hDialog); } } */ // bool bRes = false; bool bRes = GetOpenNameInternal(initial, buf, sizeof(buf), bMulti, offset, start_flt_ext); if (bRes) buffer=(char*)buf; return bRes; }
void CWeaponMagazined::GetBriefInfo(xr_string& str_name, xr_string& icon_sect_name, xr_string& str_count) { int AE = GetAmmoElapsed(); int AC = GetAmmoCurrent(); if (AE == 0 || 0 == m_magazine.size()) icon_sect_name = *m_ammoTypes[m_ammoType]; else icon_sect_name = *m_ammoTypes[m_magazine.back().m_LocalAmmoType]; string256 sItemName; strcpy_s(sItemName, *CStringTable().translate(pSettings->r_string(icon_sect_name.c_str(), "inv_name_short"))); if (HasFireModes()) strcat_s(sItemName, GetCurrentFireModeStr()); str_name = sItemName; { if (!unlimited_ammo()) sprintf_s(sItemName, "%d/%d", AE, AC - AE); else sprintf_s(sItemName, "%d/--", AE); str_count = sItemName; } }
bool EFS_Utils::GetSaveName( LPCSTR initial, xr_string& buffer, LPCSTR offset, int start_flt_ext ) { string4096 buf; strcpy(buf,buffer.c_str()); bool bRes = GetSaveName(initial,buf,sizeof(buf),offset,start_flt_ext); if (bRes) buffer=buf; return bRes; }
bool CPropHelper::CNameAfterEdit(PropValue* sender, xr_string& edit_val) { CTextValue* V = dynamic_cast<CTextValue*>(sender); VERIFY(V); ListItem* L = (ListItem*)sender->tag; shared_str tmp = edit_val.c_str(); bool accepted = LHelper().NameAfterEdit(L,V->GetValue(),tmp); edit_val = tmp.c_str(); return accepted; }
LPCSTR _GetItem(LPCSTR src, int index, xr_string& dst, char separator, LPCSTR def, bool trim) { LPCSTR ptr; ptr = _SetPos(src, index, separator); if (ptr) _CopyVal(ptr, dst, separator); else dst = def; if (trim) _Trim(dst); return dst.c_str(); }
bool EFS_Utils::GetOpenName(LPCSTR initial, xr_string& buffer, bool bMulti, LPCSTR offset, int start_flt_ext ) { string_path buf; strcpy (buf,buffer.c_str()); bool bRes = GetOpenName(initial,buf,sizeof(buf),bMulti,offset,start_flt_ext); if (bRes) buffer=(char*)buf; return bRes; }
void add_debug_info_restrictions (debug::text_tree& root_s, const xr_string& restr) { size_t cur_i = 0; do { size_t pos = restr.find(',', cur_i); if ( pos == xr_string::npos ) { pos = restr.size()-1; } if ( cur_i > pos ) { root_s.add_line(restr.substr(cur_i, pos-cur_i)); } cur_i = pos + 1; } while ( cur_i < restr.size() ); }
xr_string EFS_Utils::ChangeFileExt(const xr_string& src, LPCSTR ext) { return ChangeFileExt(src.c_str(), ext); }
void CUILines::CutFirstColoredTextEntry(xr_string& entry, u32& color, xr_string& text) const { entry.clear(); StrSize begin = text.find(BEGIN); StrSize end = text.find(END, begin); if (xr_string::npos == end) begin = end; StrSize begin2 = text.find(BEGIN, end); StrSize end2 = text.find(END,begin2); if (xr_string::npos == end2) begin2 = end2; // if we do not have any color entry or it is single with 0 position if (xr_string::npos == begin) { entry = text; color = m_dwTextColor; text.clear(); } else if (0 == begin && xr_string::npos == begin2) { entry = text; color = GetColorFromText(entry); entry.replace(begin, end - begin + 1, ""); text.clear(); } // if we have color entry not at begin else if (0 != begin) { entry = text.substr(0, begin ); color = m_dwTextColor; text.replace(0, begin, ""); } // if we have two color entries. and first has 0 position else if (0 == begin && xr_string::npos != begin2) { entry = text.substr(0, begin2); color = GetColorFromText(entry); entry.replace(begin, end - begin + 1, ""); text.replace(0, begin2, ""); } }
bool CUILine::GetWord(Word& w, const xr_string& text, int begin) const{ if (text.empty()) return false; StrSize first, last, lastsp/*last space*/; first = text.find_first_not_of(' ', begin); last = text.find_first_of(' ', first); if( npos==last && npos==first ) return false; if( npos==last && npos!=first ) { w.pos = (int)first; w.len = (int)(text.length()-first); w.len_full = w.len; return true; } lastsp = text.find_first_not_of(' ', last); if (npos == lastsp && npos == first) // maybe we have string only with spaces { first = text.find_first_of(' ',begin); last = text.find_last_of(' ',begin); if (npos == first) //suxxx it is empty string return false; w.pos = (int)first; w.len = (int)(last - first + 1); w.len_full = w.len; return true; } if (npos == lastsp) lastsp = last; else --lastsp; if (npos == last && npos != first) last = text.size() - 1; else --last; if (npos == lastsp) lastsp = last; first = begin; w.pos = (int) first; w.len = (int)(last - first + 1); w.len_full = (int)(lastsp - first + 1); #ifdef DEBUG if (npos != first && (npos == last || npos == lastsp )) R_ASSERT2(false,"CUILine::InitPos -- impossible match"); #endif return true; }
void IReader::r_stringZ(xr_string& dest) { dest = (char*)(data + Pos); Pos += int(dest.size() + 1); };
void IReader::r_string(xr_string& dest) { char* src = (char*)data + Pos; u32 sz = advance_term_string(); dest.assign(src, sz); }
void CPropHelper::CNameBeforeEdit(PropValue* sender, xr_string& edit_val) { int cnt =_GetItemCount(edit_val.c_str(),'\\'); edit_val = _SetPos(edit_val.c_str(),cnt-1,'\\'); }
void print_free_functions (lua_State *L, const luabind::object &object, LPCSTR header, const xr_string &indent) { u32 count = 0; luabind::object::iterator I = object.begin(); luabind::object::iterator E = object.end(); for ( ; I != E; ++I) { if ((*I).type() != LUA_TFUNCTION) continue; (*I).pushvalue(); luabind::detail::free_functions::function_rep* rep = 0; if (lua_iscfunction(L, -1)) { if (lua_getupvalue(L, -1, 2) != 0) { // check the magic number that identifies luabind's functions if (lua_touserdata(L, -1) == (void*)0x1337) { if (lua_getupvalue(L, -2, 1) != 0) { if (!count) FastMsg("\n%snamespace %s {",indent.c_str(),header); ++count; rep = static_cast<luabind::detail::free_functions::function_rep*>(lua_touserdata(L, -1)); std::vector<luabind::detail::free_functions::overload_rep>::const_iterator i = rep->overloads().begin(); std::vector<luabind::detail::free_functions::overload_rep>::const_iterator e = rep->overloads().end(); for ( ; i != e; ++i) { xr_string S; (*i).get_signature(L,S); FastMsg(" %sfunction %s%s;",indent.c_str(),rep->name(), process_signature(S).c_str()); } lua_pop(L, 1); } } lua_pop(L, 1); } } lua_pop(L, 1); } { static xr_vector<xr_string> nesting_path; xr_string _indent = indent; xr_string last_key = "?"; _indent.append (" "); object.pushvalue(); int n_table = lua_gettop(L); // Msg("# n_table = %d ", n_table); lua_pushnil (L); int save_top = lua_gettop(L); // #pragma todo("alpet : при загруженной сохраненке здесь иногда происходит сбой invalid key to 'next', а потом креш в недрах Direct3D ") while (lua_next(L, n_table) != 0) { last_key = "~"; int key_type = lua_type(L, -2); if (lua_type(L, -1) == LUA_TTABLE && key_type == LUA_TSTRING && lua_objlen(L, -2) > 0) { last_key = lua_tostring(L, -2); LPCSTR S = last_key.c_str(); MsgCB("~#CONTEXT: last_key = %s", S); string_path script_name; sprintf_s(script_name, sizeof(script_name) - 1, "%s.script", S); if (nesting_path.size() == 0 && // скан глобального пространства имен (last_key == "" || last_key == "config" || last_key == "package" || last_key == "jit" || last_key == "loaded" || last_key == "md_list" || FS.exist("$game_scripts$", script_name) )) // с дампом экспортируемых luabind вещей, возникают сбои! { Msg("! skipping namespace %s ", last_key.c_str()); lua_pop(L, 1); continue; } if (xr_strcmp("_G", S)) { luabind::object object(L); object.set(); // if (!xr_strcmp("security", S)) { S = S; } /// wtf? xr_string path_dump = ""; for (u32 ns = 0; ns < nesting_path.size(); ns++) path_dump = path_dump + nesting_path.at(ns) + "."; path_dump = path_dump + S; Msg("#dumping namespace %s ", path_dump.c_str()); nesting_path.push_back(S); u32 nest_level = nesting_path.size(); // если слишком много вложений или начали повторяться строки if (nest_level < 2 && !(nest_level > 1 && nesting_path.at(0) == S) ) { print_free_functions(L, object, S, _indent); } else { // problem detected Msg("! WARN: to many nested levels for export = %d, or self-reference detected ", nest_level); FlushLog(); dumper->flush(); } nesting_path.pop_back(); } } // #pragma todo("Dima to Dima : Remove this hack if find out why") // */ // lua_pop (L, 1); // remove value from stack lua_pop(L, 1); if (lua_gettop(L) > save_top) { Msg("lua_gettop returned %d vs expected %d", lua_gettop(L), save_top); lua_settop(L, save_top); } } } if (count) FastMsg("%s};",indent.c_str()); }
void print_free_functions (lua_State *L, const luabind::object &object, LPCSTR header, const xr_string &indent) { u32 count = 0; luabind::object::iterator I = object.begin(); luabind::object::iterator E = object.end(); for ( ; I != E; ++I) { if ((*I).type() != LUA_TFUNCTION) continue; (*I).pushvalue(); luabind::detail::free_functions::function_rep* rep = 0; if (lua_iscfunction(L, -1)) { if (lua_getupvalue(L, -1, 2) != 0) { // check the magic number that identifies luabind's functions if (lua_touserdata(L, -1) == (void*)0x1337) { if (lua_getupvalue(L, -2, 1) != 0) { if (!count) Msg("\n%snamespace %s {",indent.c_str(),header); ++count; rep = static_cast<luabind::detail::free_functions::function_rep*>(lua_touserdata(L, -1)); std::vector<luabind::detail::free_functions::overload_rep>::const_iterator i = rep->overloads().begin(); std::vector<luabind::detail::free_functions::overload_rep>::const_iterator e = rep->overloads().end(); for ( ; i != e; ++i) { xr_string S; (*i).get_signature(L,S); Msg(" %sfunction %s%s;",indent.c_str(),rep->name(),process_signature(S).c_str()); } lua_pop(L, 1); } } lua_pop(L, 1); } } lua_pop(L, 1); } { xr_string _indent = indent; _indent.append (" "); object.pushvalue(); lua_pushnil (L); while (lua_next(L, -2) != 0) { if (lua_type(L, -1) == LUA_TTABLE) { if (xr_strcmp("_G",lua_tostring(L, -2))) { LPCSTR S = lua_tostring(L, -2); luabind::object object(L); object.set (); if (!xr_strcmp("security",S)) { S = S; } print_free_functions(L,object,S,_indent); } } #pragma todo("Dima to Dima : Remove this hack if find out why") if (lua_isnumber(L,-2)) { lua_pop(L,1); lua_pop(L,1); break; } lua_pop (L, 1); } } if (count) Msg("%s};",indent.c_str()); }