diff options
Diffstat (limited to 'devtools/syncfrommirror/Redir.h')
| -rw-r--r-- | devtools/syncfrommirror/Redir.h | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/devtools/syncfrommirror/Redir.h b/devtools/syncfrommirror/Redir.h new file mode 100644 index 0000000..944dff0 --- /dev/null +++ b/devtools/syncfrommirror/Redir.h @@ -0,0 +1,60 @@ +//========= Copyright Valve Corporation, All rights reserved. ============// +// +// Purpose: +// +// $NoKeywords: $ +// +//=============================================================================// +////////////////////////////////////////////////////////////////////// +// +// Redirector - to redirect the input / output of a console +// +// Developer: Jeff Lee +// Dec 10, 2001 +// +////////////////////////////////////////////////////////////////////// + +#if !defined(AFX_REDIR_H__4FB57DC3_29A3_11D5_BB60_006097553C52__INCLUDED_) +#define AFX_REDIR_H__4FB57DC3_29A3_11D5_BB60_006097553C52__INCLUDED_ + +#if _MSC_VER > 1000 +#pragma once +#endif // _MSC_VER > 1000 + +class CRedirector +{ +public: + CRedirector(); + virtual ~CRedirector(); + +protected: + HANDLE m_hThread; // thread to receive the output of the child process + HANDLE m_hEvtStop; // event to notify the redir thread to exit + DWORD m_dwThreadId; // id of the redir thread + DWORD m_dwWaitTime; // wait time to check the status of the child process + + HANDLE m_hStdinWrite; // write end of child's stdin pipe + HANDLE m_hStdoutRead; // read end of child's stdout pipe + HANDLE m_hChildProcess; + + BOOL LaunchChild(LPCTSTR pszCmdLine, LPCTSTR pszCurrentDirectory, + HANDLE hStdOut, HANDLE hStdIn, HANDLE hStdErr); + int RedirectStdout(); + void DestroyHandle(HANDLE& rhObject); + + static DWORD WINAPI OutputThread(LPVOID lpvThreadParam); + +protected: + // overrides: + virtual void WriteStdOut(LPCSTR pszOutput); + virtual void WriteStdError(LPCSTR pszError); + +public: + BOOL Open(LPCTSTR pszCmdLine, LPCTSTR pszCurrentDirectory = NULL); + virtual void Close(); + BOOL Printf(PRINTF_FORMAT_STRING LPCTSTR pszFormat, ...); + + void SetWaitTime(DWORD dwWaitTime) { m_dwWaitTime = dwWaitTime; } +}; + +#endif // !defined(AFX_REDIR_H__4FB57DC3_29A3_11D5_BB60_006097553C52__INCLUDED_) |