wxString ReplayList::GetScriptFromReplay (const wxString& ReplayPath , const int version) const { wxString script; try { wxFile replay( ReplayPath, wxFile::read ); if ( !replay.IsOpened() ) return script; SEEK( 20 ); int headerSize=0 ; replay.Read( &headerSize, 4); const int seek = 64 + (version < 5 ? 0 : 240); SEEK( seek ); wxFileOffset scriptSize=0; replay.Read( &scriptSize, 4); scriptSize = LSL::Util::Clamp( wxFileOffset(scriptSize), wxFileOffset(0), replay.Length() ); SEEK( headerSize ); std::string script_a(scriptSize,0); replay.Read( &script_a[0], scriptSize ); script = TowxString( script_a ) ;//(script_a,scriptSize); } catch (...) { } return script; }
wxString ReplayList::GetScriptFromReplay(wxFile& replay, const int version) const { wxString script; if ( !replay.IsOpened() ) return script; if(replay.Seek(20)==wxInvalidOffset) { return script; } int headerSize=0 ; replay.Read( &headerSize, 4); const int seek = 64 + (version < 5 ? 0 : 240); if(replay.Seek(seek)==wxInvalidOffset) { return script; } wxFileOffset scriptSize=0; replay.Read( &scriptSize, 4); scriptSize = LSL::Util::Clamp( wxFileOffset(scriptSize), wxFileOffset(0), replay.Length() ); if(replay.Seek(headerSize) == wxInvalidOffset)return script; std::string script_a(scriptSize,0); replay.Read( &script_a[0], scriptSize ); script = TowxString( script_a ) ;//(script_a,scriptSize); return script; }
static wxString FileToPythonArray(wxString filename, int num) { wxString output; wxString tmp; wxString snum; wxFFile file(filename, wxT("rb")); wxFileOffset offset = file.Length(); wxASSERT_MSG( offset >= 0 , wxT("Invalid file length") ); wxASSERT_MSG( offset == wxFileOffset(size_t(offset)) , wxT("Huge file not supported") ); size_t lng = (size_t)offset; snum.Printf(_T("%i"), num); output = _T(" xml_res_file_") + snum + _T(" = '''\\\n"); unsigned char *buffer = new unsigned char[lng]; file.Read(buffer, lng); for (size_t i = 0, linelng = 0; i < lng; i++) { unsigned char c = buffer[i]; if (c == '\n') { tmp = (wxChar)c; linelng = 0; } else if (c < 32 || c > 127 || c == '\'') tmp.Printf(_T("\\x%02x"), c); else if (c == '\\') tmp = _T("\\\\"); else tmp = (wxChar)c; if (linelng > 70) { linelng = 0; output << _T("\\\n"); } output << tmp; linelng += tmp.Length(); } delete[] buffer; output += _T("'''\n\n"); return output; }
static wxString FileToCppArray(wxString filename, int num) { wxString output; wxString tmp; wxString snum; wxFFile file(filename, wxT("rb")); wxFileOffset offset = file.Length(); wxASSERT_MSG( offset >= 0 , wxT("Invalid file length") ); wxASSERT_MSG( offset == wxFileOffset(size_t(offset)) , wxT("Huge file not supported") ); size_t lng = (size_t)offset; snum.Printf(_T("%i"), num); output.Printf(_T("static size_t xml_res_size_") + snum + _T(" = %i;\n"), lng); output += _T("static unsigned char xml_res_file_") + snum + _T("[] = {\n"); // we cannot use string literals because MSVC is dumb wannabe compiler // with arbitrary limitation to 2048 strings :( unsigned char *buffer = new unsigned char[lng]; file.Read(buffer, lng); for (size_t i = 0, linelng = 0; i < lng; i++) { tmp.Printf(_T("%i"), buffer[i]); if (i != 0) output << _T(','); if (linelng > 70) { linelng = 0; output << _T("\n"); } output << tmp; linelng += tmp.Length()+1; } delete[] buffer; output += _T("};\n\n"); return output; }
void OPJMarkerTree::OnSelChanged(wxTreeEvent& event) { int bunch_linesize = 16; int bunch_numlines = 7; wxTreeItemId item = event.GetItem(); OPJMarkerData* data = (OPJMarkerData *) GetItemData(item); wxString text; int l, c, pos = 0, pre_pos; m_peektextCtrl->Clear(); /*text << wxString::Format(wxT("Selected... (%s -> %s, %s, %d, %d)"), text.c_str(), data->GetDesc1(), data->GetDesc2(), data->m_start, data->m_length) << wxT("\n");*/ // open the file and browse a little wxFile *fp = new wxFile(m_fname.GetFullPath().c_str(), wxFile::read); // go to position claimed fp->Seek(data->m_start, wxFromStart); // read a bunch int max_read = wxMin(wxFileOffset(bunch_linesize * bunch_numlines), data->m_length - data->m_start + 1); if (data->m_desc == wxT("MARK (65380)")) { /*wxLogMessage(data->m_desc);*/ max_read = data->m_length - data->m_start + 1; bunch_numlines = (int) ceil((float) max_read / (float) bunch_linesize); } unsigned char *buffer = new unsigned char[bunch_linesize * bunch_numlines]; fp->Read(buffer, max_read); // write the file data between start and stop pos = 0; for (l = 0; l < bunch_numlines; l++) { text << wxString::Format(wxT("%010d:"), data->m_start + pos); pre_pos = pos; // add hex browsing text for (c = 0; c < bunch_linesize; c++) { if (!(c % 8)) text << wxT(" "); if (pos < max_read) { text << wxString::Format(wxT("%02X "), buffer[pos]); } else text << wxT(" "); pos++; } text << wxT(" "); // add char browsing text for (c = 0; c < bunch_linesize; c++) { if (pre_pos < max_read) { if ((buffer[pre_pos] == '\n') || (buffer[pre_pos] == '\t') || (buffer[pre_pos] == '\0') || (buffer[pre_pos] == 0x0D) || (buffer[pre_pos] == 0x0B)) buffer[pre_pos] = ' '; text << wxString::FromAscii((char) buffer[pre_pos]) << wxT("."); } else text << wxT(" "); pre_pos++; } text << wxT("\n"); } // close the file fp->Close(); m_peektextCtrl->WriteText(text); delete buffer; }