+#endif // wxUSE_GUI
+
+// ----------------------------------------------------------------------------
+// wxStream classes to support IO redirection in wxExecute
+// ----------------------------------------------------------------------------
+
+#if wxUSE_STREAMS
+
+class wxProcessFileInputStream : public wxInputStream
+{
+public:
+ wxProcessFileInputStream(int fd) { m_fd = fd; }
+ ~wxProcessFileInputStream() { close(m_fd); }
+
+ virtual bool Eof() const;
+
+protected:
+ size_t OnSysRead(void *buffer, size_t bufsize);
+
+protected:
+ int m_fd;
+};
+
+class wxProcessFileOutputStream : public wxOutputStream
+{
+public:
+ wxProcessFileOutputStream(int fd) { m_fd = fd; }
+ ~wxProcessFileOutputStream() { close(m_fd); }
+
+protected:
+ size_t OnSysWrite(const void *buffer, size_t bufsize);
+
+protected:
+ int m_fd;
+};
+
+bool wxProcessFileInputStream::Eof() const
+{
+ if ( m_lasterror == wxSTREAM_EOF )
+ return TRUE;
+
+ // check if there is any input available
+ struct timeval tv;
+ tv.tv_sec = 0;
+ tv.tv_usec = 0;
+
+ fd_set readfds;
+ FD_ZERO(&readfds);
+ FD_SET(m_fd, &readfds);
+ switch ( select(m_fd + 1, &readfds, NULL, NULL, &tv) )