X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/29c99ad3597ad722ed540b1e600f3ae3afe0f872..f0a9a84c09e9c8a85617536d62400c469b6cc62c:/src/unix/baseunix.cpp diff --git a/src/unix/baseunix.cpp b/src/unix/baseunix.cpp index b265339a06..c5e3ddcee1 100644 --- a/src/unix/baseunix.cpp +++ b/src/unix/baseunix.cpp @@ -1,12 +1,12 @@ /////////////////////////////////////////////////////////////////////////////// -// Name: unix/baseunix.cpp +// Name: src/unix/baseunix.cpp // Purpose: misc stuff only used in console applications under Unix // Author: Vadim Zeitlin // Modified by: // Created: 23.06.2003 // RCS-ID: $Id$ // Copyright: (c) 2003 Vadim Zeitlin -// License: wxWindows license +// License: wxWindows licence /////////////////////////////////////////////////////////////////////////////// // ============================================================================ @@ -27,11 +27,15 @@ #ifndef WX_PRECOMP #include "wx/log.h" #include "wx/intl.h" + #include "wx/utils.h" #endif //WX_PRECOMP #include "wx/apptrait.h" -#include "wx/utils.h" #include "wx/unix/execute.h" +#include "wx/evtloop.h" +#include "wx/gsocket.h" + +#include "wx/unix/private/timer.h" // for waitpid() #include @@ -41,72 +45,45 @@ // wxConsoleAppTraits implementation // ============================================================================ -// ---------------------------------------------------------------------------- -// wxExecute support -// ---------------------------------------------------------------------------- - -bool wxConsoleAppTraits::CreateEndProcessPipe(wxExecuteData& WXUNUSED(data)) -{ - // nothing to do, so always ok - return true; -} - -bool -wxConsoleAppTraits::IsWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data), - int WXUNUSED(fd)) -{ - // we don't have any pipe - return false; -} - -void -wxConsoleAppTraits::DetachWriteFDOfEndProcessPipe(wxExecuteData& WXUNUSED(data)) -{ - // nothing to do -} - - int wxConsoleAppTraits::WaitForChild(wxExecuteData& execData) { - wxASSERT_MSG( execData.flags & wxEXEC_SYNC, - wxT("async execution not supported yet") ); - int exitcode = 0; - if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) ) + if ( execData.flags & wxEXEC_SYNC ) { - wxLogSysError(_("Waiting for subprocess termination failed")); + if ( waitpid(execData.pid, &exitcode, 0) == -1 || !WIFEXITED(exitcode) ) + { + wxLogSysError(_("Waiting for subprocess termination failed")); + } + } + else // asynchronous execution + { + wxEndProcessData *endProcData = new wxEndProcessData; + endProcData->process = execData.process; + endProcData->pid = execData.pid; + endProcData->tag = wxAddProcessCallback + ( + endProcData, + execData.pipeEndProcDetect.Detach(wxPipe::Read) + ); + + execData.pipeEndProcDetect.Close(); + exitcode = execData.pid; + } return exitcode; } -// ---------------------------------------------------------------------------- -// misc other stuff -// ---------------------------------------------------------------------------- +#if wxUSE_TIMER -// this is in mac/utils.cpp under Mac -#ifndef __WXMAC__ - -int wxConsoleAppTraits::GetOSVersion(int *verMaj, int *verMin) +wxTimerImpl *wxConsoleAppTraits::CreateTimerImpl(wxTimer *timer) { - int major, minor; - char name[256]; - - if ( sscanf(WXWIN_OS_DESCRIPTION, "%255s %d.%d", name, &major, &minor) != 3 ) - { - // unreckognized uname string format - major = - minor = -1; - } - - if ( verMaj ) - *verMaj = major; - if ( verMin ) - *verMin = minor; - - return wxUNIX; + // this doesn't work yet as there is no main loop in console applications + // (but it will be added later) + return new wxUnixTimerImpl(timer); } -#endif // __WXMAC__ +#endif // wxUSE_TIMER +// Note: wxConsoleAppTraits::CreateEventLoop() is defined in evtloopunix.cpp!