char* frmScarEditor::_ReadNiceString(FILE* f) { size_t iLen; fread(&iLen, sizeof(size_t), 1, f); char* s = new char[iLen + 1]; fread(s, iLen, 1, f); s[iLen] = 0; return s; } frmScarEditor::frmScarEditor(wxTreeItemId& oFileParent, wxString sFilename, wxWindow* parent, wxWindowID id, const wxPoint& pos, const wxSize& size, const wchar_t* pLangRef) : m_oFileParent(oFileParent), m_sFilename(sFilename), wxWindow(parent, id, pos, size), m_bNeedsSaving(false) { // Load ref if(pLangRef) { FILE *f = _wfopen(AppStr(app_scarreffile), L"rb"); size_t iFnCount; fread(&iFnCount, sizeof(size_t), 1, f); for(size_t i = 0; i < iFnCount; ++i) { _ScarFunction oFunction; oFunction.sReturn = _ReadNiceString(f); oFunction.sName = _ReadNiceString(f); oFunction.iType = 0; if(*oFunction.sName == 0) { oFunction.iType = 1; delete[] oFunction.sName; oFunction.sName = oFunction.sReturn; oFunction.sReturn = 0; oFunction.sDesc = 0; } else { size_t iArgCount; fread(&iArgCount, sizeof(size_t), 1, f); for(size_t j = 0; j < iArgCount; ++j) { oFunction.sArguments.push_back(_ReadNiceString(f)); } oFunction.sDesc = _ReadNiceString(f); } m_lstScarFunctions.push_back(oFunction); } fclose(f); }