Index: src/ch/TSubTaskBase.h
===================================================================
diff -u -N -rb7709acbab26fdb108b77d3e08d3872f54248af2 -r8c87d4185fbe5b952c49f72afcfd5f9fca338fb4
--- src/ch/TSubTaskBase.h	(.../TSubTaskBase.h)	(revision b7709acbab26fdb108b77d3e08d3872f54248af2)
+++ src/ch/TSubTaskBase.h	(.../TSubTaskBase.h)	(revision 8c87d4185fbe5b952c49f72afcfd5f9fca338fb4)
@@ -23,23 +23,43 @@
 #ifndef __TSUBTASKBASE_H__
 #define __TSUBTASKBASE_H__
 
+#include "FileInfo.h"
+
 class TSubTaskContext;
-class TSubTaskProgressInfo;
+class TBasePathDataContainer;
 
 ///////////////////////////////////////////////////////////////////////////
 // TSubTaskBase
 
 class TSubTaskBase
 {
 public:
-	TSubTaskBase(TSubTaskContext& rContext, TSubTaskProgressInfo& rProgressInfo);
+	enum ESubOperationResult
+	{
+		eSubResult_Continue,
+		eSubResult_KillRequest,
+		eSubResult_Error,
+		eSubResult_CancelRequest,
+		eSubResult_PauseRequest
+	};
+
+public:
+	TSubTaskBase(TSubTaskContext& rContext);
 	virtual ~TSubTaskBase();
 
-	virtual void Exec() = 0;
+	virtual ESubOperationResult Exec() = 0;
 
+   TSubTaskContext& GetContext() { return m_rContext; }
+   const TSubTaskContext& GetContext() const { return m_rContext; }
+
+protected:
+   // some common operations
+   int GetDriveNumber(const CFileInfoPtr& spFileInfo);
+   chcore::TSmartPath CalculateDestinationPath(const CFileInfoPtr& spFileInfo, chcore::TSmartPath strPath, int iFlags) const;
+   chcore::TSmartPath FindFreeSubstituteName(chcore::TSmartPath pathSrcPath, chcore::TSmartPath pathDstPath) const;
+
 private:
 	TSubTaskContext& m_rContext;
-	TSubTaskProgressInfo& m_rProgressInfo;
 };
 
 #endif