コード例 #1
0
ファイル: view.cpp プロジェクト: puring0815/OpenKore
void
View::onExtractClick(wxCommandEvent &event) {
	if (fileInput->GetValue().Len() == 0) {
		wxMessageBox(wxS("You didn't specify a file."), wxS("Error"),
			     wxOK | wxICON_ERROR, this);
		return;
	} else if (!wxFileExists(fileInput->GetValue())) {
		wxMessageBox(wxS("The specified file does not exist."), wxS("Error"),
			     wxOK | wxICON_ERROR, this);
		return;
	}

	fileInput->Enable(false);
	browseButton->Enable(false);
	extractButton->Enable(false);


	// Start a server socket
	ServerSocket *server;
	try {
		server = ServerSocket::create(wxT("127.0.0.1"), 0);
	} catch (SocketException &e) {
		wxString message;
		message.Printf(wxT("Unable to start a server socket: %s"),
			       e.getMessage().c_str());
		wxMessageBox(message, wxS("Error"), wxOK | wxICON_ERROR, this);
		Close();
		return;
	}

	// Start the disassembler.
	wxString command;
	long pid;

	command = wxString::Format(wxT("\"%s\" -d -M intel --remote=%d \"%s\""),
		findObjdump().c_str(),
		server->getPort(),
		fileInput->GetValue().c_str());
	pid = wxExecute(command, wxEXEC_ASYNC, NULL);
	if (pid == 0) {
		delete server;
		wxMessageBox(wxS("Unable to launch the disassembler."), wxS("Error"),
			     wxOK | wxICON_ERROR, this);
		Close();
		return;
	}

	thread = new WorkerThread(pid, server);
	server->unref();
	thread->Create();
	thread->Run();
	timer.Start(100);
}