Index: trunk/ab5.0/jenga/include/common/Path.h
===================================================================
--- trunk/ab5.0/jenga/include/common/Path.h	(revision 465)
+++ trunk/ab5.0/jenga/include/common/Path.h	(revision 467)
@@ -62,4 +62,6 @@
 		return fullPath;
 	}
+
+	static std::string MakeFullPath( const std::string &relativePath, const std::string &baseDirPath );
 };
 
Index: trunk/ab5.0/jenga/src/common/Path.cpp
===================================================================
--- trunk/ab5.0/jenga/src/common/Path.cpp	(revision 465)
+++ trunk/ab5.0/jenga/src/common/Path.cpp	(revision 467)
@@ -22,2 +22,46 @@
 	return false;
 }
+
+std::string Jenga::Common::Path::MakeFullPath( const std::string &relativePath, const std::string &baseDirPath )
+{
+	int i,i2,i3,i4;
+	char temporary[MAX_PATH];
+
+	char resultPath[MAX_PATH];
+	lstrcpy( resultPath, relativePath.c_str() );
+
+	// '/'→'\'
+	for( i=0;resultPath[i];i++ ){
+		if( resultPath[i] == '/' ){
+			resultPath[i]='\\';
+		}
+	}
+
+	if(strstr(resultPath,":")||strstr(resultPath,"\\\\")) return resultPath;
+
+	i=0;i2=0;
+	while(1){
+		if(resultPath[i]=='.'&&resultPath[i+1]=='\\') i+=2;
+		if(resultPath[i]=='.'&&resultPath[i+1]=='.'&&resultPath[i+2]=='\\'){
+			i2++;
+			i+=3;
+		}
+		else break;
+	}
+
+	i3=(int)baseDirPath.size();i4=0;
+	while(i4<i2){
+		for(i3--;;i3--){
+			if(baseDirPath[i3-1]=='\\'){
+				i4++;
+				break;
+			}
+		}
+	}
+	memcpy(temporary,baseDirPath.c_str(),i3);
+	temporary[i3]=0;
+	lstrcat(temporary,resultPath+i);
+	lstrcpy(resultPath,temporary);
+
+	return resultPath;
+}
