Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- void rgFrame::ExtractFile(wxString infile, wxString path, bool islog)
- {
- wxMessageDialog *Msg_Dialog = NULL;
- unsigned char buf[1024];
- wxString outfile,logfile;
- SubInfo tmpInfo;
- vector<SubInfo> SubFileInfo;
- SubFileInfo.clear();
- unsigned long flag = 0, flag1 = 0;
- unsigned long magickey = 0xDEADCAFE;
- WCHAR wch_tmp[256];
- char endofline[] = {0x0D, 0x0A};
- wxFileInputStream rgssad_file(infile);
- wxFile sp_file;
- if (!rgssad_file.IsOk())
- {
- Msg_Dialog = new wxMessageDialog(NULL, wxT("エェRGSSADホトシハァーワ"), wxT("error"), wxOK | wxICON_ERROR);
- Msg_Dialog->ShowModal();
- delete Msg_Dialog;
- Msg_Dialog = NULL;
- return;
- }
- rgssad_file.Read(&flag, 4);
- rgssad_file.Read(&flag1, 4);
- if (flag != 0x53534752 || flag1 != 0x01004441)
- {
- Msg_Dialog = new wxMessageDialog(NULL, wxT("ユ箚サハヌメサクミミァオトRGSSADホトシ"), wxT("error"), wxOK | wxICON_ERROR);
- Msg_Dialog->ShowModal();
- delete Msg_Dialog;
- Msg_Dialog = NULL;
- return;
- }
- logfile.Printf("%srgssad_sp.log", path);
- wxFileOutputStream *log_file = NULL;
- if(islog)
- {
- log_file = new wxFileOutputStream(logfile);
- }
- // ソェハシキヨホトシ
- rgssad_file.Read(&tmpInfo.filenamesize, 4);
- while(!rgssad_file.Eof())
- {
- tmpInfo.filenamesize ^= magickey;
- magickey = magickey * 7 + 3;
- rgssad_file.Read(tmpInfo.filename, tmpInfo.filenamesize);
- for(unsigned long i = 0; i < tmpInfo.filenamesize; i++)
- {
- tmpInfo.filename[i] ^= magickey & 0xFF;
- magickey = magickey * 7 + 3;
- }
- tmpInfo.filename[i] = 0;
- MultiByteToWideChar(CP_UTF8, 0, tmpInfo.filename, -1, wch_tmp, 256);
- WideCharToMultiByte(CP_ACP, 0, wch_tmp, -1, tmpInfo.filename, 256, NULL, NULL);
- rgssad_file.Read(&tmpInfo.filesize, 4);
- tmpInfo.filesize ^= magickey;
- magickey = magickey * 7 + 3;
- tmpInfo.offset = rgssad_file.TellI();
- tmpInfo.magickey = magickey;
- SubFileInfo.push_back(tmpInfo);
- rgssad_file.SeekI(tmpInfo.filesize, wxFromCurrent);
- rgssad_file.Read(&tmpInfo.filenamesize, 4);
- }
- // reset wxGauge
- m_gauge1->SetRange(SubFileInfo.size());
- // ソェハシキヨス簧トシ
- unsigned long leftsize;
- for(unsigned long i = 0; i < SubFileInfo.size(); i++)
- {
- outfile.Printf("%s%s", path, SubFileInfo[i].filename);
- sp_file.Open(outfile, wxFile::write);
- if(!sp_file.IsOpened())
- {
- check_path(outfile);
- sp_file.Open(outfile, wxFile::write);
- if(!sp_file.IsOpened())
- {
- if(log_file)
- {
- outfile += " failed.";
- log_file->Write(outfile, outfile.Len());
- log_file->Write(endofline, 2);
- }
- continue;
- }
- }
- rgssad_file.SeekI(SubFileInfo[i].offset, wxFromStart);
- magickey = SubFileInfo[i].magickey;
- leftsize = SubFileInfo[i].filesize;
- unsigned long j = 0;
- while(leftsize > 1023)
- {
- rgssad_file.Read(buf, 1024);
- for(j = 0; j < 1024; j+=4)
- {
- *(unsigned long *)(&buf[j]) ^= magickey;
- magickey = magickey * 7 + 3;
- }
- sp_file.Write(buf, 1024);
- leftsize -= 1024;
- }
- rgssad_file.Read(buf, leftsize);
- for(j = 0; j < leftsize; j+=4)
- {
- *(unsigned long *)(&buf[j]) ^= magickey;
- magickey = magickey * 7 + 3;
- }
- sp_file.Write(buf, leftsize);
- sp_file.Close();
- if(log_file)
- {
- outfile += " done.\n";
- log_file->Write(outfile, outfile.Len());
- log_file->Write(endofline, 2);
- }
- m_gauge1->SetValue(i);
- }
- m_gauge1->SetValue(i);
- delete log_file;
- Msg_Dialog = new wxMessageDialog(NULL, wxT("ス箍・・マ"), wxT("haha"), wxOK | wxICON_INFORMATION);
- Msg_Dialog->ShowModal();
- delete Msg_Dialog;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement