void CClassView::RefreshTree() { vfc_token_tree * tree = m_cb.get_tree(); SetRedraw(FALSE); DeleteAllItems(); m_itemRoot = InsertItem(m_workName,0,0,TVI_ROOT,NULL); m_itemGlobalFunction = InsertItem(_T("Globals"),2,2,m_itemRoot,NULL); m_itemGlobalTypedef = InsertItem(_T("Globals Typedef"),14,14,m_itemRoot,NULL); m_itemGlobalDefine = InsertItem(_T("Globals Define"),12,12,m_itemRoot,NULL); vfc_token_array tks; if (!tree->get_token_array(&tks)) return; for (size_t i = 0; i < tks.size(); i++) { vfc_token * tk = tks.at(i); if (tk && tk->get_parent() == NULL) { InsertToken(tk,m_itemRoot); } } Expand(m_itemRoot); SetRedraw(TRUE); }
bool CScript::IntroduceVirus() { int i, start, iFound; int found[11*2]; char* newScript; const char* names[11*2] = { "==", "!=", "!=", "==", ">", "<", "<", ">", "true", "false", "false", "true", "grab", "drop", "drop", "grab", "InFront", "Behind", "Behind", "EnergyCell", "EnergyCell", "InFront", }; iFound = 0; for ( i=0 ; i<11 ; i++ ) { start = SearchToken(m_script, names[i*2]); if ( start != -1 ) { found[iFound++] = i*2; found[iFound++] = start; } } if ( iFound == 0 ) return false; i = (rand()%(iFound/2))*2; start = found[i+1]; i = found[i+0]; newScript = new char[m_len+strlen(names[i+1])+1]; strcpy(newScript, m_script); delete[] m_script; m_script = newScript; DeleteToken(m_script, start, strlen(names[i])); InsertToken(m_script, start, names[i+1]); m_len = strlen(m_script); Compile(); // recompile with the virus return true; }
void CClassView::InsertToken(vfc_token *tk, HTREEITEM root) { int kind = tk->get_uint(vt_TokenKind); int scope = tk->get_uint(vt_Scope); int image = 2; CString text = get_string(tk,vt_Name); text.ReleaseBuffer(-1); if (kind == vk_Class) { image = 1; } else if (kind & vk_AnyFunction) { text += get_string(tk,vt_RealArgs); image = 2; if (scope == vs_Protected) image = 8; else if (scope == vs_Private) image = 9; } else if (kind & vk_Variable) { text += _T(" : "); text += get_string(tk,vt_Type); image = 3; if (scope == vs_Protected) image = 10; else if (scope == vs_Private) image = 11; } else if (kind & vk_Mapping) { text += get_string(tk,vt_Args); image = 5; } else if (kind & vk_Enum) { image = 6; } else if (kind & vk_Enumerator) { image = 7; } else if (kind & vk_Namespace) { image = 13; } else if (kind & vk_Typedef) { image = 14; } if (tk->get_parent() != NULL || kind & vk_Class || kind & vk_Namespace || kind & vk_Enum) { root = root; } else if (kind & vk_Function || kind & vk_Variable) { root = m_itemGlobalFunction; } else if (kind & vk_Typedef) { root = m_itemGlobalTypedef; } else root = m_itemGlobalDefine; HTREEITEM item = InsertItem(text,image,image,root,NULL); SetItemData(item,tk->get_uint(vt_Index)+1); vfc_int_array vti; if (tk->get_token_idx(vt_Children,&vti)) { for (size_t i = 0; i < vti.size(); i++) { vfc_token * child = tk->get_tree()->get_token(vti.at(i)); InsertToken(child,item); } } }