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); }