/// This is the function which actually obeys one command. Rather than applying /// the command directly, an event containing a reference to the command is sent /// to the main (GUI) thread. This is because having more than one thread access /// the GUI at a time causes problems with wxwidgets. int ExecCommand(wxString *pIn, wxString *pOut) { CommandBuilder builder(*pIn); if (builder.WasValid()) { AudacityProject *project = GetActiveProject(); project->SafeDisplayStatusMessage(wxT("Received script command")); Command *cmd = builder.GetCommand(); ScriptCommandRelay::PostCommand(project, cmd); *pOut = wxEmptyString; } else { *pOut = wxT("Syntax error!\n"); *pOut += builder.GetErrorMessage() + wxT("\n"); builder.Cleanup(); } // Wait until all responses from the command have been received. // The last response is signalled by an empty line. wxString msg = ScriptCommandRelay::ReceiveResponse().GetMessage(); while (msg != wxT("\n")) { *pOut += msg + wxT("\n"); msg = ScriptCommandRelay::ReceiveResponse().GetMessage(); } return 0; }