This commit is contained in:
FluorescentCIAAfricanAmerican
2020-04-22 12:56:21 -04:00
commit 3bf9df6b27
15370 changed files with 5489726 additions and 0 deletions
+358
View File
@@ -0,0 +1,358 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
//////////////////////////////////////////////////////////////////////
//
// Redirector - to redirect the input / output of a console
//
// Developer: Jeff Lee
// Dec 10, 2001
//
//////////////////////////////////////////////////////////////////////
#include "stdafx.h"
#include "Redir.h"
#ifdef _DEBUG
#undef THIS_FILE
static char THIS_FILE[]=__FILE__;
#define new DEBUG_NEW
#endif
//#define _TEST_REDIR
//////////////////////////////////////////////////////////////////////
// Construction/Destruction
//////////////////////////////////////////////////////////////////////
CRedirector::CRedirector() :
m_hStdinWrite(NULL),
m_hStdoutRead(NULL),
m_hChildProcess(NULL),
m_hThread(NULL),
m_hEvtStop(NULL),
m_dwThreadId(0),
m_dwWaitTime(1000)
{
}
CRedirector::~CRedirector()
{
Close();
}
//////////////////////////////////////////////////////////////////////
// CRedirector implementation
//////////////////////////////////////////////////////////////////////
BOOL CRedirector::Open(LPCTSTR pszCmdLine, LPCTSTR pszCurrentDirectory)
{
HANDLE hStdoutReadTmp; // parent stdout read handle
HANDLE hStdoutWrite, hStderrWrite; // child stdout write handle
HANDLE hStdinWriteTmp; // parent stdin write handle
HANDLE hStdinRead; // child stdin read handle
SECURITY_ATTRIBUTES sa;
Close();
hStdoutReadTmp = NULL;
hStdoutWrite = hStderrWrite = NULL;
hStdinWriteTmp = NULL;
hStdinRead = NULL;
// Set up the security attributes struct.
sa.nLength = sizeof(SECURITY_ATTRIBUTES);
sa.lpSecurityDescriptor = NULL;
sa.bInheritHandle = TRUE;
BOOL bOK = FALSE;
__try
{
// Create a child stdout pipe.
if (!::CreatePipe(&hStdoutReadTmp, &hStdoutWrite, &sa, 0))
__leave;
// Create a duplicate of the stdout write handle for the std
// error write handle. This is necessary in case the child
// application closes one of its std output handles.
if (!::DuplicateHandle(
::GetCurrentProcess(),
hStdoutWrite,
::GetCurrentProcess(),
&hStderrWrite,
0, TRUE,
DUPLICATE_SAME_ACCESS))
__leave;
// Create a child stdin pipe.
if (!::CreatePipe(&hStdinRead, &hStdinWriteTmp, &sa, 0))
__leave;
// Create new stdout read handle and the stdin write handle.
// Set the inheritance properties to FALSE. Otherwise, the child
// inherits the these handles; resulting in non-closeable
// handles to the pipes being created.
if (!::DuplicateHandle(
::GetCurrentProcess(),
hStdoutReadTmp,
::GetCurrentProcess(),
&m_hStdoutRead,
0, FALSE, // make it uninheritable.
DUPLICATE_SAME_ACCESS))
__leave;
if (!::DuplicateHandle(
::GetCurrentProcess(),
hStdinWriteTmp,
::GetCurrentProcess(),
&m_hStdinWrite,
0, FALSE, // make it uninheritable.
DUPLICATE_SAME_ACCESS))
__leave;
// Close inheritable copies of the handles we do not want to
// be inherited.
DestroyHandle(hStdoutReadTmp);
DestroyHandle(hStdinWriteTmp);
// launch the child process
if (!LaunchChild(pszCmdLine, pszCurrentDirectory,
hStdoutWrite, hStdinRead, hStderrWrite))
__leave;
// Child is launched. Close the parents copy of those pipe
// handles that only the child should have open.
// Make sure that no handles to the write end of the stdout pipe
// are maintained in this process or else the pipe will not
// close when the child process exits and ReadFile will hang.
DestroyHandle(hStdoutWrite);
DestroyHandle(hStdinRead);
DestroyHandle(hStderrWrite);
// Launch a thread to receive output from the child process.
m_hEvtStop = ::CreateEvent(NULL, TRUE, FALSE, NULL);
m_hThread = ::CreateThread(
NULL, 0,
OutputThread,
this,
0,
&m_dwThreadId);
if (!m_hThread)
__leave;
bOK = TRUE;
}
__finally
{
if (!bOK)
{
DWORD dwOsErr = ::GetLastError();
char szMsg[40];
::sprintf(szMsg, "Redirect console error: %x\r\n", dwOsErr);
WriteStdError(szMsg);
DestroyHandle(hStdoutReadTmp);
DestroyHandle(hStdoutWrite);
DestroyHandle(hStderrWrite);
DestroyHandle(hStdinWriteTmp);
DestroyHandle(hStdinRead);
Close();
::SetLastError(dwOsErr);
}
}
return bOK;
}
void CRedirector::Close()
{
if (m_hThread != NULL)
{
// this function might be called from redir thread
if (::GetCurrentThreadId() != m_dwThreadId)
{
ASSERT(m_hEvtStop != NULL);
::SetEvent(m_hEvtStop);
//::WaitForSingleObject(m_hThread, INFINITE);
if (::WaitForSingleObject(m_hThread, 5000) == WAIT_TIMEOUT)
{
WriteStdError(_T("The redir thread is dead\r\n"));
::TerminateThread(m_hThread, -2);
}
}
DestroyHandle(m_hThread);
}
DestroyHandle(m_hEvtStop);
DestroyHandle(m_hChildProcess);
DestroyHandle(m_hStdinWrite);
DestroyHandle(m_hStdoutRead);
m_dwThreadId = 0;
}
// write data to the child's stdin
BOOL CRedirector::Printf(LPCTSTR pszFormat, ...)
{
if (!m_hStdinWrite)
return FALSE;
CString strInput;
va_list argList;
va_start(argList, pszFormat);
strInput.FormatV(pszFormat, argList);
va_end(argList);
DWORD dwWritten;
return ::WriteFile(m_hStdinWrite, (LPCTSTR)strInput,
strInput.GetLength(), &dwWritten, NULL);
}
BOOL CRedirector::LaunchChild(LPCTSTR pszCmdLine,
LPCTSTR pszCurrentDirectory,
HANDLE hStdOut,
HANDLE hStdIn,
HANDLE hStdErr)
{
PROCESS_INFORMATION pi;
STARTUPINFO si;
ASSERT(::AfxIsValidString(pszCmdLine));
ASSERT(m_hChildProcess == NULL);
// Set up the start up info struct.
::ZeroMemory(&si, sizeof(STARTUPINFO));
si.cb = sizeof(STARTUPINFO);
si.hStdOutput = hStdOut;
si.hStdInput = hStdIn;
si.hStdError = hStdErr;
si.wShowWindow = SW_HIDE;
si.dwFlags = STARTF_USESTDHANDLES | STARTF_USESHOWWINDOW;
// Note that dwFlags must include STARTF_USESHOWWINDOW if we
// use the wShowWindow flags. This also assumes that the
// CreateProcess() call will use CREATE_NEW_CONSOLE.
// Launch the child process.
if (!::CreateProcess(
NULL,
(LPTSTR)pszCmdLine,
NULL, NULL,
TRUE,
CREATE_NEW_CONSOLE,
NULL, pszCurrentDirectory,
&si,
&pi))
return FALSE;
m_hChildProcess = pi.hProcess;
// Close any unuseful handles
::CloseHandle(pi.hThread);
return TRUE;
}
// redirect the child process's stdout:
// return: 1: no more data, 0: child terminated, -1: os error
int CRedirector::RedirectStdout()
{
ASSERT(m_hStdoutRead != NULL);
for (;;)
{
DWORD dwAvail = 0;
if (!::PeekNamedPipe(m_hStdoutRead, NULL, 0, NULL,
&dwAvail, NULL)) // error
break;
if (!dwAvail) // not data available
return 1;
char szOutput[16*1024 + 1];
DWORD dwRead = 0;
if (!::ReadFile(m_hStdoutRead, szOutput, min(16*1024, dwAvail),
&dwRead, NULL) || !dwRead) // error, the child might ended
break;
szOutput[dwRead] = 0;
WriteStdOut(szOutput);
}
DWORD dwError = ::GetLastError();
if (dwError == ERROR_BROKEN_PIPE || // pipe has been ended
dwError == ERROR_NO_DATA) // pipe closing in progress
{
#ifdef _TEST_REDIR
WriteStdOut("\r\n<TEST INFO>: Child process ended\r\n");
#endif
return 0; // child process ended
}
WriteStdError("Read stdout pipe error\r\n");
return -1; // os error
}
void CRedirector::DestroyHandle(HANDLE& rhObject)
{
if (rhObject != NULL)
{
::CloseHandle(rhObject);
rhObject = NULL;
}
}
void CRedirector::WriteStdOut(LPCSTR pszOutput)
{
TRACE("%s", pszOutput);
}
void CRedirector::WriteStdError(LPCSTR pszError)
{
TRACE("%s", pszError);
}
// thread to receive output of the child process
DWORD WINAPI CRedirector::OutputThread(LPVOID lpvThreadParam)
{
HANDLE aHandles[2];
int nRet;
CRedirector* pRedir = (CRedirector*) lpvThreadParam;
ASSERT(pRedir != NULL);
aHandles[0] = pRedir->m_hChildProcess;
aHandles[1] = pRedir->m_hEvtStop;
aHandles[2] = pRedir->m_hStdoutRead;
for (;;)
{
// redirect stdout till there's no more data.
nRet = pRedir->RedirectStdout();
if (nRet <= 0)
break;
// check if the child process has terminated.
DWORD dwRc = ::WaitForMultipleObjects(
3, aHandles, FALSE, pRedir->m_dwWaitTime);
if (WAIT_OBJECT_0 == dwRc || WAIT_FAILED == dwRc ) // the child process ended
{
nRet = pRedir->RedirectStdout();
if (nRet > 0)
nRet = 0;
break;
}
if (WAIT_OBJECT_0+1 == dwRc) // m_hEvtStop was signalled
{
nRet = 1; // cancelled
break;
}
// If we don't sleep here, then syncfrommirror will eat lots of CPU looping here.
Sleep( 20 );
}
// close handles
pRedir->Close();
return nRet;
}
+60
View File
@@ -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_)
+152
View File
@@ -0,0 +1,152 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
//------------------------------------------------------------------------------
// Redirect.cpp : implementation file
//
// Creates a child process that runs a user-specified command and redirects its
// standard output and standard error to a CEdit control.
//
// Written by Matt Brunk (brunk@gorge.net)
// Copyright (C) 1999 Matt Brunk
// All rights reserved.
//
// This code may be used in compiled form in any way. This file may be
// distributed by any means providing it is not sold for profit without
// the written consent of the author, and providing that this notice and the
// author's name is included in the distribution. If the compiled form of the
// source code in this file is used in a commercial application, an e-mail to
// the author would be appreciated.
//
// Thanks to Dima Shamroni (dima@abirnet.co.il) for providing the essential
// code for this class.
//
// Thanks to Chris Maunder (chrismaunder@codeguru.com) for the PeekAndPump()
// function (from his CProgressWnd class).
//
// Initial Release Feb 8, 1999
//------------------------------------------------------------------------------
#include "stdafx.h"
#include <string.h>
#include <string>
#include "Redirect.h"
const int BUF_SIZE = 8192;
CRedirect::~CRedirect()
{
}
void CRedirect::Run( LPCTSTR szCommand, CEdit *pEdit, LPCTSTR pszCurrentDirectory )
{
m_pEdit = pEdit;
m_bStopped = false;
if ( !Open( szCommand, pszCurrentDirectory ) )
{
AppendText("\nFAILED TO SPAWN PROCESS\n");
return;
}
for (;;)
{
//------------------------------------------------------------------
// If the child process has completed, break out.
//------------------------------------------------------------------
if ( !m_hThread || MsgWaitForMultipleObjects( 1, &m_hThread, FALSE, 20, QS_ALLINPUT) == WAIT_OBJECT_0 )
{
break;
}
//------------------------------------------------------------------
// Peek and pump messages.
//------------------------------------------------------------------
PeekAndPump();
//------------------------------------------------------------------
// If the user cancelled the operation, terminate the process.
//------------------------------------------------------------------
if ( m_bStopped )
{
Close();
}
}
}
void CRedirect::PeekAndPump()
{
MSG Msg;
while (::PeekMessage(&Msg, NULL, 0, 0, PM_NOREMOVE))
{
(void)AfxGetApp()->PumpMessage(); //lint !e1924 (warning about C-style cast)
}
}
void CRedirect::Stop()
{
m_bStopped = true;
}
void CRedirect::AppendText(LPCTSTR Text)
{
char *pszCurrent = const_cast<char *>(Text);
int Length;
Length = m_pEdit->GetWindowTextLength();
if ( Length + strlen(Text) > m_pEdit->GetLimitText() )
m_pEdit->SetLimitText( m_pEdit->GetLimitText() * 2 );
if ( *pszCurrent == '\n' )
pszCurrent++;
while ( pszCurrent && *pszCurrent )
{
char *pszLineEnd = strchr( pszCurrent, '\r' );
if ( pszLineEnd )
*pszLineEnd = 0;
Length = m_pEdit->GetWindowTextLength();
m_pEdit->SetSel(Length, Length);
m_pEdit->ReplaceSel(pszCurrent);
//OutputDebugString(pszCurrent);
if ( pszLineEnd )
{
Length = m_pEdit->GetWindowTextLength();
m_pEdit->SetSel(Length, Length);
m_pEdit->ReplaceSel("\r\n");
//OutputDebugString("\r\n");
}
m_pEdit->LineScroll( m_pEdit->GetLineCount() );
PeekAndPump();
if ( pszLineEnd )
{
*pszLineEnd = '\r';
pszCurrent = pszLineEnd + 1;
if ( *pszCurrent == '\n' )
pszCurrent++;
}
else
pszCurrent = NULL;
};
}
void CRedirect::WriteStdOut(LPCSTR pszOutput)
{
AppendText( pszOutput );
}
void CRedirect::WriteStdError(LPCSTR pszError)
{
AppendText( CString(pszError) );
}
+55
View File
@@ -0,0 +1,55 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
#include "redir.h"
#ifndef REDIRECT_H_INCLUDED__
#define REDIRECT_H_INCLUDED__
class CRedirect : public CRedirector
{
public:
//--------------------------------------------------------------------------
// constructor
//--------------------------------------------------------------------------
CRedirect()
: m_pEdit(NULL),
m_bStopped(false)
{
}
//--------------------------------------------------------------------------
// destructor
//--------------------------------------------------------------------------
virtual ~CRedirect();
//--------------------------------------------------------------------------
// public member functions
//--------------------------------------------------------------------------
virtual void Run(LPCTSTR szCommand, CEdit *pEdit, LPCTSTR pszCurrentDirectory = NULL);
virtual void Stop();
protected:
//--------------------------------------------------------------------------
// member functions
//--------------------------------------------------------------------------
virtual void WriteStdOut(LPCSTR pszOutput);
virtual void WriteStdError(LPCSTR pszError);
void AppendText(LPCTSTR Text);
void PeekAndPump();
//--------------------------------------------------------------------------
// member data
//--------------------------------------------------------------------------
CEdit * m_pEdit;
bool m_bStopped;
};
#endif // REDIRECT_H_INCLUDED__
+15
View File
@@ -0,0 +1,15 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// stdafx.cpp : source file that includes just the standard includes
// syncfrommirror.pch will be the pre-compiled header
// stdafx.obj will contain the pre-compiled type information
#include "stdafx.h"
+33
View File
@@ -0,0 +1,33 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// stdafx.h : include file for standard system include files,
// or project specific include files that are used frequently, but
// are changed infrequently
//
#if !defined(AFX_STDAFX_H__819F1F09_8031_443C_B19C_AB6AAEA62789__INCLUDED_)
#define AFX_STDAFX_H__819F1F09_8031_443C_B19C_AB6AAEA62789__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#define VC_EXTRALEAN // Exclude rarely-used stuff from Windows headers
#include <afxwin.h> // MFC core and standard components
#include <afxext.h> // MFC extensions
#include <afxdtctl.h> // MFC support for Internet Explorer 4 Common Controls
#ifndef _AFX_NO_AFXCMN_SUPPORT
#include <afxcmn.h> // MFC support for Windows Common Controls
#endif // _AFX_NO_AFXCMN_SUPPORT
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_STDAFX_H__819F1F09_8031_443C_B19C_AB6AAEA62789__INCLUDED_)
Binary file not shown.

After

Width:  |  Height:  |  Size: 29 KiB

@@ -0,0 +1,13 @@
//
// SYNCFROMMIRROR.RC2 - resources Microsoft Visual C++ does not edit directly
//
#ifdef APSTUDIO_INVOKED
#error this file is not editable by Microsoft Visual C++
#endif //APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
// Add manually edited resources here...
/////////////////////////////////////////////////////////////////////////////
+34
View File
@@ -0,0 +1,34 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
//{{NO_DEPENDENCIES}}
// Microsoft Developer Studio generated include file.
// Used by syncfrommirror.rc
//
#define IDD_SYNCFROMMIRROR_DIALOG 102
#define IDR_MAINFRAME 128
#define IDC_EDIT1 1000
#define IDC_EDIT2 1001
#define IDC_CHECK1 1002
#define IDC_CHECK2 1003
#define IDC_CHECK3 1004
#define IDC_CHECK4 1005
#define IDC_DOD 1006
#define IDC_BUTTON1 1007
#define IDC_WORKINGFOLDER_DOD 1008
#define IDC_MAKECOMMANDPROMPTS 1009
// Next default values for new objects
//
#ifdef APSTUDIO_INVOKED
#ifndef APSTUDIO_READONLY_SYMBOLS
#define _APS_NEXT_RESOURCE_VALUE 129
#define _APS_NEXT_COMMAND_VALUE 32771
#define _APS_NEXT_CONTROL_VALUE 1010
#define _APS_NEXT_SYMED_VALUE 101
#endif
#endif
@@ -0,0 +1,70 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// syncfrommirror.cpp : Defines the class behaviors for the application.
//
#include "stdafx.h"
#include "syncfrommirror.h"
#include "syncfrommirrorDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorApp
BEGIN_MESSAGE_MAP(CSyncfrommirrorApp, CWinApp)
//{{AFX_MSG_MAP(CSyncfrommirrorApp)
//}}AFX_MSG
ON_COMMAND(ID_HELP, CWinApp::OnHelp)
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorApp construction
CSyncfrommirrorApp::CSyncfrommirrorApp()
{
}
/////////////////////////////////////////////////////////////////////////////
// The one and only CSyncfrommirrorApp object
CSyncfrommirrorApp theApp;
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorApp initialization
BOOL CSyncfrommirrorApp::InitInstance()
{
// Standard initialization
#ifdef _AFXDLL
Enable3dControls(); // Call this when using MFC in a shared DLL
#else
Enable3dControlsStatic(); // Call this when linking to MFC statically
#endif
AfxInitRichEdit();
SetRegistryKey( "Valve" );
CSyncfrommirrorDlg dlg;
m_pMainWnd = &dlg;
int nResponse = dlg.DoModal();
if (nResponse == IDOK)
{
}
else if (nResponse == IDCANCEL)
{
}
// Since the dialog has been closed, return FALSE so that we exit the
// application, rather than start the application's message pump.
return FALSE;
}
+54
View File
@@ -0,0 +1,54 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// syncfrommirror.h : main header file for the SYNCFROMMIRROR application
//
#if !defined(AFX_SYNCFROMMIRROR_H__1E25CDDD_8382_4580_81AC_CFB68FECBE4A__INCLUDED_)
#define AFX_SYNCFROMMIRROR_H__1E25CDDD_8382_4580_81AC_CFB68FECBE4A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
#ifndef __AFXWIN_H__
#error include 'stdafx.h' before including this file for PCH
#endif
#include "resource.h" // main symbols
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorApp:
// See syncfrommirror.cpp for the implementation of this class
//
class CSyncfrommirrorApp : public CWinApp
{
public:
CSyncfrommirrorApp();
// Overrides
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSyncfrommirrorApp)
public:
virtual BOOL InitInstance();
//}}AFX_VIRTUAL
// Implementation
//{{AFX_MSG(CSyncfrommirrorApp)
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
/////////////////////////////////////////////////////////////////////////////
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SYNCFROMMIRROR_H__1E25CDDD_8382_4580_81AC_CFB68FECBE4A__INCLUDED_)
+196
View File
@@ -0,0 +1,196 @@
//Microsoft Developer Studio generated resource script.
//
#include "resource.h"
#define APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 2 resource.
//
#include "afxres.h"
/////////////////////////////////////////////////////////////////////////////
#undef APSTUDIO_READONLY_SYMBOLS
/////////////////////////////////////////////////////////////////////////////
// English (U.S.) resources
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE LANG_ENGLISH, SUBLANG_ENGLISH_US
#pragma code_page(1252)
#endif //_WIN32
#ifdef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// TEXTINCLUDE
//
1 TEXTINCLUDE DISCARDABLE
BEGIN
"resource.h\0"
END
2 TEXTINCLUDE DISCARDABLE
BEGIN
"#include ""afxres.h""\r\n"
"\0"
END
3 TEXTINCLUDE DISCARDABLE
BEGIN
"#define _AFX_NO_SPLITTER_RESOURCES\r\n"
"#define _AFX_NO_OLE_RESOURCES\r\n"
"#define _AFX_NO_TRACKER_RESOURCES\r\n"
"#define _AFX_NO_PROPERTY_RESOURCES\r\n"
"\r\n"
"#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)\r\n"
"#ifdef _WIN32\r\n"
"LANGUAGE 9, 1\r\n"
"#pragma code_page(1252)\r\n"
"#endif //_WIN32\r\n"
"#include ""res\\syncfrommirror.rc2"" // non-Microsoft Visual C++ edited resources\r\n"
"#include ""afxres.rc"" // Standard components\r\n"
"#endif\r\n"
"\0"
END
#endif // APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Icon
//
// Icon with lowest ID value placed first to ensure application icon
// remains consistent on all systems.
IDR_MAINFRAME ICON DISCARDABLE "res\\syncfrommirror.ico"
/////////////////////////////////////////////////////////////////////////////
//
// Dialog
//
IDD_SYNCFROMMIRROR_DIALOG DIALOGEX 0, 0, 384, 218
STYLE WS_MINIMIZEBOX | WS_POPUP | WS_VISIBLE | WS_CAPTION | WS_SYSMENU |
WS_THICKFRAME
EXSTYLE WS_EX_APPWINDOW
CAPTION "Sync from VSS Mirror"
FONT 8, "MS Sans Serif"
BEGIN
DEFPUSHBUTTON "Sync",IDOK,327,7,50,14
PUSHBUTTON "Exit",IDCANCEL,327,23,50,14
EDITTEXT IDC_EDIT2,65,20,83,12,ES_AUTOHSCROLL
LTEXT "Working Folder:",IDC_STATIC,14,21,51,11
CONTROL "HL2",IDC_CHECK1,"Button",BS_AUTOCHECKBOX | WS_TABSTOP,
154,22,38,10
CONTROL "HL1Port",IDC_CHECK2,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,196,22,38,10
CONTROL "CSPort",IDC_CHECK3,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,196,34,38,10
CONTROL "TF2",IDC_CHECK4,"Button",BS_AUTOCHECKBOX | WS_DISABLED |
WS_TABSTOP,154,34,38,10
EDITTEXT IDC_EDIT1,7,88,316,123,ES_MULTILINE | ES_AUTOVSCROLL |
ES_AUTOHSCROLL | WS_VSCROLL
PUSHBUTTON "Stop",IDC_BUTTON1,327,58,50,14,NOT WS_VISIBLE |
WS_DISABLED
CONTROL "Day of Defeat",IDC_DOD,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,243,22,66,10
GROUPBOX "Main Projects",IDC_STATIC,7,7,309,46
GROUPBOX "Options",IDC_STATIC,7,55,309,29
CONTROL "Create a command prompt for each Robocopy",
IDC_MAKECOMMANDPROMPTS,"Button",BS_AUTOCHECKBOX |
WS_TABSTOP,15,67,161,10
END
#ifndef _MAC
/////////////////////////////////////////////////////////////////////////////
//
// Version
//
VS_VERSION_INFO VERSIONINFO
FILEVERSION 1,0,0,1
PRODUCTVERSION 1,0,0,1
FILEFLAGSMASK 0x3fL
#ifdef _DEBUG
FILEFLAGS 0x1L
#else
FILEFLAGS 0x0L
#endif
FILEOS 0x4L
FILETYPE 0x1L
FILESUBTYPE 0x0L
BEGIN
BLOCK "StringFileInfo"
BEGIN
BLOCK "040904B0"
BEGIN
VALUE "CompanyName", "\0"
VALUE "FileDescription", "syncfrommirror MFC Application\0"
VALUE "FileVersion", "1, 0, 0, 1\0"
VALUE "InternalName", "syncfrommirror\0"
VALUE "LegalCopyright", "Copyright (C) 2003\0"
VALUE "LegalTrademarks", "\0"
VALUE "OriginalFilename", "syncfrommirror.EXE\0"
VALUE "ProductName", "syncfrommirror Application\0"
VALUE "ProductVersion", "1, 0, 0, 1\0"
END
END
BLOCK "VarFileInfo"
BEGIN
VALUE "Translation", 0x409, 1200
END
END
#endif // !_MAC
/////////////////////////////////////////////////////////////////////////////
//
// DESIGNINFO
//
#ifdef APSTUDIO_INVOKED
GUIDELINES DESIGNINFO DISCARDABLE
BEGIN
IDD_SYNCFROMMIRROR_DIALOG, DIALOG
BEGIN
LEFTMARGIN, 7
RIGHTMARGIN, 377
TOPMARGIN, 7
BOTTOMMARGIN, 211
END
END
#endif // APSTUDIO_INVOKED
#endif // English (U.S.) resources
/////////////////////////////////////////////////////////////////////////////
#ifndef APSTUDIO_INVOKED
/////////////////////////////////////////////////////////////////////////////
//
// Generated from the TEXTINCLUDE 3 resource.
//
#define _AFX_NO_SPLITTER_RESOURCES
#define _AFX_NO_OLE_RESOURCES
#define _AFX_NO_TRACKER_RESOURCES
#define _AFX_NO_PROPERTY_RESOURCES
#if !defined(AFX_RESOURCE_DLL) || defined(AFX_TARG_ENU)
#ifdef _WIN32
LANGUAGE 9, 1
#pragma code_page(1252)
#endif //_WIN32
#include "res\syncfrommirror.rc2" // non-Microsoft Visual C++ edited resources
#include "afxres.rc" // Standard components
#endif
/////////////////////////////////////////////////////////////////////////////
#endif // not APSTUDIO_INVOKED
@@ -0,0 +1,60 @@
//-----------------------------------------------------------------------------
// SYNCFROMMIRROR.VPC
//
// Project Script
//-----------------------------------------------------------------------------
$Macro SRCDIR "..\.."
$Macro OUTBINDIR "$SRCDIR\devtools\bin"
$Include "$SRCDIR\vpc_scripts\source_exe_win_win32_base.vpc"
$Configuration
{
$Compiler
{
$Create/UsePrecompiledHeader "Use Precompiled Header (/Yu)"
$PrecompiledHeaderFile "Release/syncfrommirror.pch"
$EnableC++Exceptions "Yes (/EHsc)"
}
}
$Project "Syncfrommirror"
{
$Folder "Source Files"
{
-$File "$SRCDIR\public\tier0\memoverride.cpp"
$File "Redir.cpp"
$File "Redirect.cpp"
$File "syncfrommirror.cpp"
$File "syncfrommirror.rc"
$File "syncfrommirrorDlg.cpp"
$File "StdAfx.cpp"
{
$Configuration
{
$Compiler
{
$Create/UsePrecompiledHeader "Create Precompiled Header (/Yc)"
}
}
}
}
$Folder "Header Files"
{
$File "Redir.h"
$File "Redirect.h"
$File "Resource.h"
$File "StdAfx.h"
$File "syncfrommirror.h"
$File "syncfrommirrorDlg.h"
}
$Folder "Resource Files"
{
$File "res\syncfrommirror.ico"
$File "res\syncfrommirror.rc2"
}
}
@@ -0,0 +1,275 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// syncfrommirrorDlg.cpp : implementation file
//
#include "stdafx.h"
#include "syncfrommirror.h"
#include "syncfrommirrorDlg.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorDlg dialog
CSyncfrommirrorDlg::CSyncfrommirrorDlg(CWnd* pParent /*=NULL*/)
: CDialog(CSyncfrommirrorDlg::IDD, pParent)
{
//{{AFX_DATA_INIT(CSyncfrommirrorDlg)
m_WorkingFolder = _T("");
m_bHL2 = FALSE;
m_bTF2 = FALSE;
m_bHL1Port = FALSE;
m_bDOD = FALSE;
m_bCSPort = FALSE;
m_bMakeCommandPrompts = FALSE;
//}}AFX_DATA_INIT
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CSyncfrommirrorDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
//{{AFX_DATA_MAP(CSyncfrommirrorDlg)
DDX_Control(pDX, IDC_EDIT1, m_Output);
DDX_Text(pDX, IDC_EDIT2, m_WorkingFolder);
DDX_Check(pDX, IDC_CHECK1, m_bHL2);
DDX_Check(pDX, IDC_CHECK2, m_bHL1Port);
DDX_Check(pDX, IDC_CHECK3, m_bCSPort);
DDX_Check(pDX, IDC_CHECK4, m_bTF2);
DDX_Check(pDX, IDC_MAKECOMMANDPROMPTS, m_bMakeCommandPrompts);
DDX_Check(pDX, IDC_DOD, m_bDOD);
//}}AFX_DATA_MAP
}
BEGIN_MESSAGE_MAP(CSyncfrommirrorDlg, CDialog)
//{{AFX_MSG_MAP(CSyncfrommirrorDlg)
ON_WM_PAINT()
ON_WM_SIZE()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON1, OnStop)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorDlg message handlers
BOOL CSyncfrommirrorDlg::OnInitDialog()
{
CDialog::OnInitDialog();
SetIcon(m_hIcon, TRUE); // Set big icon
SetIcon(m_hIcon, FALSE); // Set small icon
m_bHL2 = AfxGetApp()->GetProfileInt( "settings", "hl2", 1 );
m_bHL1Port = AfxGetApp()->GetProfileInt( "settings", "hl1", 0 );
m_bCSPort = AfxGetApp()->GetProfileInt( "settings", "cstrike", 0 );
m_bDOD = AfxGetApp()->GetProfileInt( "settings", "dod", 0 );
m_bMakeCommandPrompts = AfxGetApp()->GetProfileInt( "settings", "makecommandprompts", 0 );
m_WorkingFolder = AfxGetApp()->GetProfileString( "settings", "working_folder" );
// Calculate layout info for resizing.
CRect rectDlg;
GetClientRect( &rectDlg );
// Edit control
CRect rectEdit;
GetDlgItem( IDC_EDIT1 )->GetWindowRect( &rectEdit );
ScreenToClient( rectEdit );
m_nEditRightMargin = rectDlg.right - rectEdit.right;
m_nEditBottomMargin = rectDlg.bottom - rectEdit.bottom;
// Buttons
CRect rectButton;
GetDlgItem( IDOK )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
m_nButtonOffset = rectDlg.right - rectButton.left;
// LoadSettings();
UpdateData(false);
// TODO: Add extra initialization here
return TRUE; // return TRUE unless you set the focus to a control
}
// If you add a minimize button to your dialog, you will need the code below
// to draw the icon. For MFC applications using the document/view model,
// this is automatically done for you by the framework.
void CSyncfrommirrorDlg::OnPaint()
{
if (IsIconic())
{
CPaintDC dc(this); // device context for painting
SendMessage(WM_ICONERASEBKGND, (WPARAM) dc.GetSafeHdc(), 0);
// Center icon in client rectangle
int cxIcon = GetSystemMetrics(SM_CXICON);
int cyIcon = GetSystemMetrics(SM_CYICON);
CRect rect;
GetClientRect(&rect);
int x = (rect.Width() - cxIcon + 1) / 2;
int y = (rect.Height() - cyIcon + 1) / 2;
// Draw the icon
dc.DrawIcon(x, y, m_hIcon);
}
else
{
CDialog::OnPaint();
}
}
HCURSOR CSyncfrommirrorDlg::OnQueryDragIcon()
{
return (HCURSOR) m_hIcon;
}
void CSyncfrommirrorDlg::RunSync( const char *pszType )
{
static const char *pszCmdLine = "cmd.exe /c \\\\hl2vss.valvesoftware.com\\hl2vss\\win32\\syncfrommirror.bat %s %s";
if ( m_bMakeCommandPrompts )
pszCmdLine = "cmd.exe /k \\\\hl2vss.valvesoftware.com\\hl2vss\\win32\\syncfrommirror.bat %s %s";
CString strCmdLine;
CString &strMain = m_WorkingFolder;
strMain.TrimLeft(" \"");
strMain.TrimRight(" \"");
CString workingFolder;
workingFolder = "\"";
workingFolder += strMain;
workingFolder += "\"";
strCmdLine.Format(pszCmdLine, pszType, workingFolder.operator const char *() );
GetDlgItem(IDOK)->EnableWindow(FALSE);
GetDlgItem(IDCANCEL)->EnableWindow(FALSE);
GetDlgItem(IDC_BUTTON1)->EnableWindow();
if ( m_bMakeCommandPrompts )
{
RunCommandLine( strCmdLine, "c:\\" );
}
else
{
m_Redirector.Run( strCmdLine, &m_Output, "c:\\" );
}
GetDlgItem(IDOK)->EnableWindow();
GetDlgItem(IDCANCEL)->EnableWindow();
GetDlgItem(IDC_BUTTON1)->EnableWindow(FALSE);
}
void CSyncfrommirrorDlg::RunCommandLine( const char *pCmdLine, const char *pWorkingDir )
{
STARTUPINFO startupInfo;
memset( &startupInfo, 0, sizeof( startupInfo ) );
startupInfo.cb = sizeof( startupInfo );
PROCESS_INFORMATION pi;
memset( &pi, 0, sizeof( pi ) );
CreateProcess(
NULL,
(char*)pCmdLine,
NULL,
NULL,
FALSE,
CREATE_NEW_CONSOLE,
NULL,
pWorkingDir,
&startupInfo,
&pi );
}
void CSyncfrommirrorDlg::OnOK()
{
UpdateData();
AfxGetApp()->WriteProfileInt( "settings", "hl2", m_bHL2 );
AfxGetApp()->WriteProfileInt( "settings", "hl1", m_bHL1Port );
AfxGetApp()->WriteProfileInt( "settings", "dod", m_bDOD );
AfxGetApp()->WriteProfileInt( "settings", "cstrike", m_bCSPort );
AfxGetApp()->WriteProfileInt( "settings", "makecommandprompts", m_bMakeCommandPrompts );
AfxGetApp()->WriteProfileString( "settings", "working_folder", m_WorkingFolder);
if ( m_WorkingFolder.GetLength() == 0 )
{
MessageBox( "You must set your working folder (e.g. u:\\dev)", "Error", MB_ICONWARNING );
return;
}
m_Output.SetSel( 0, -1 );
m_Output.Clear();
if (m_bHL2 && m_bHL1Port && m_bCSPort && m_bDOD )
{
RunSync( "all" );
}
else
{
if ( m_bHL2 )
RunSync( "hl2" );
if ( m_bHL1Port )
RunSync( "hl1" );
if ( m_bCSPort )
RunSync( "cstrike" );
if ( m_bDOD )
RunSync( "dod" );
}
// If it spawned command prompts, then exit.
if ( m_bMakeCommandPrompts )
EndDialog( 0 );
FlashWindow( TRUE );
//CDialog::OnOK();
}
void CSyncfrommirrorDlg::OnStop()
{
m_Redirector.Stop();
}
void CSyncfrommirrorDlg::OnSize( UINT nType, int cx, int cy )
{
if ( GetDlgItem( IDC_EDIT1 ) )
{
CRect rectDlg;
GetClientRect( &rectDlg );
CRect rectEdit;
GetDlgItem( IDC_EDIT1 )->GetWindowRect( &rectEdit );
ScreenToClient( rectEdit );
GetDlgItem( IDC_EDIT1 )->MoveWindow( rectEdit.left, rectEdit.top, ( rectDlg.right - m_nEditRightMargin ) - rectEdit.left, ( rectDlg.bottom - m_nEditBottomMargin ) - rectEdit.top, TRUE );
CRect rectButton;
GetDlgItem( IDOK )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
GetDlgItem( IDOK )->MoveWindow( rectDlg.right - m_nButtonOffset, rectButton.top, rectButton.Width( ), rectButton.Height( ), TRUE );
GetDlgItem( IDCANCEL )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
GetDlgItem( IDCANCEL )->MoveWindow( rectDlg.right - m_nButtonOffset, rectButton.top, rectButton.Width( ), rectButton.Height( ), TRUE );
GetDlgItem( IDC_BUTTON1 )->GetWindowRect( &rectButton );
ScreenToClient( rectButton );
GetDlgItem( IDC_BUTTON1 )->MoveWindow( rectDlg.right - m_nButtonOffset, rectButton.top, rectButton.Width( ), rectButton.Height( ), TRUE );
}
CDialog::OnSize( nType, cx, cy );
}
@@ -0,0 +1,78 @@
//========= Copyright Valve Corporation, All rights reserved. ============//
//
// Purpose:
//
// $NoKeywords: $
//
//=============================================================================//
// syncfrommirrorDlg.h : header file
//
#include "redirect.h"
#if !defined(AFX_SYNCFROMMIRRORDLG_H__CCDE7319_F912_4B51_A526_4B718AE8E22A__INCLUDED_)
#define AFX_SYNCFROMMIRRORDLG_H__CCDE7319_F912_4B51_A526_4B718AE8E22A__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
/////////////////////////////////////////////////////////////////////////////
// CSyncfrommirrorDlg dialog
class CSyncfrommirrorDlg : public CDialog
{
// Construction
public:
CSyncfrommirrorDlg(CWnd* pParent = NULL); // standard constructor
void RunSync( const char *pszType );
// Dialog Data
//{{AFX_DATA(CSyncfrommirrorDlg)
enum { IDD = IDD_SYNCFROMMIRROR_DIALOG };
CEdit m_Output;
CString m_WorkingFolder;
BOOL m_bHL2;
BOOL m_bTF2;
BOOL m_bHL1Port;
BOOL m_bDOD;
BOOL m_bCSPort;
BOOL m_bMakeCommandPrompts;
//}}AFX_DATA
// ClassWizard generated virtual function overrides
//{{AFX_VIRTUAL(CSyncfrommirrorDlg)
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV support
//}}AFX_VIRTUAL
// Implementation
protected:
HICON m_hIcon;
CRedirect m_Redirector;
// Layout info for resizing.
int m_nEditRightMargin; // Distance from the right side of the edit control to the right side of the client area
int m_nEditBottomMargin; // Distance from the bottom of the edit control to the bottom of the client area
int m_nButtonOffset; // Distance from left side of buttons to the right side of the client area
void RunCommandLine( const char *pCmdLine, const char *pWorkingDir );
// Generated message map functions
//{{AFX_MSG(CSyncfrommirrorDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
virtual void OnOK();
afx_msg void OnStop();
afx_msg void OnSize(UINT nType, int cx, int cy);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.
#endif // !defined(AFX_SYNCFROMMIRRORDLG_H__CCDE7319_F912_4B51_A526_4B718AE8E22A__INCLUDED_)