--- spal60sr\src\TSSGCtrl\SSGScriptStruct.original.h	Wed Dec 11 00:55:00 2002
+++ spal60sr\src\TSSGCtrl\SSGScriptStruct.h	Wed Dec 11 00:55:00 2002
@@ -1,12 +1,17 @@
 #ifndef SSGScriptStructH
 #define SSGScriptStructH
 
+#define FIX_GET_DISTRACTION_STRING 1
+
 //----------------------------------------------------------------------------
 #include <map>               //	STL
 #include <vector>
 #include <string>
 using namespace std;
 #include "StringDivision.h"
+#if defined(FIX_GET_DISTRACTION_STRING) && FIX_GET_DISTRACTION_STRING
+#include <mbstring.h>
+#endif
 //----------------------------------------------------------------------------
 
 class TSSGScriptStruct;
@@ -66,6 +71,24 @@
 	//----------------------------------------------------------------------------
 	//uʏ𕶎񉻂ĕԂ֐v
 	//----------------------------------------------------------------------------
+#if defined(FIX_GET_DISTRACTION_STRING) && FIX_GET_DISTRACTION_STRING
+private:
+	static string EscapeDistraction(TStringDivision &StrD, const string &Src, map<string, string> *ReplaceMap = NULL, unsigned long Option = strD::etREPLACE)
+	{
+		string s(StrD.Remove(Src, ReplaceMap, Option));
+		size_t pos;
+		for (char *p = s.begin(); p = _mbschr(p, '\\'); p = s.begin() + pos + 2)
+			s.replace(pos = p - s.begin(), 1,  "\\\\", 2);
+		for (char *p = s.begin(); p = _mbschr(p, ','); p = s.begin() + pos + 2)
+			s.replace(pos = p - s.begin(), 1,  "\\,", 2);
+		for (char *p = s.begin(); p = _mbschr(p, ':'); p = s.begin() + pos + 2)
+			s.replace(pos = p - s.begin(), 1,  "\\:", 2);
+		for (char *p = s.begin(); p = _mbschr(p, '='); p = s.begin() + pos + 2)
+			s.replace(pos = p - s.begin(), 1,  "\\=", 2);
+		return s;
+	}
+public:
+#endif
 	string GetDistractionString(TStringDivision &StrD){
 		if(distinctionMap.empty()) return "";
 		unsigned long AddSize=0;
@@ -77,10 +100,17 @@
 		Str.reserve(AddSize);
 		MIt  = distinctionMap.begin();
 		for(; MIt!=MEnd; MIt++){
+#if !defined(FIX_GET_DISTRACTION_STRING) || !FIX_GET_DISTRACTION_STRING
 			Str += StrD.Remove(MIt->first , NULL, strD::etREPLACE|strD::etREVERSE_REPLACE);
 			Str += "=";
 			Str += StrD.Remove(MIt->second, NULL, strD::etREPLACE|strD::etREVERSE_REPLACE);
 			Str += ",";
+#else
+			Str += EscapeDistraction(StrD, MIt->first, NULL, strD::etREPLACE | strD::etREVERSE_REPLACE);
+			Str += "=";
+			Str += EscapeDistraction(StrD, MIt->second, NULL, strD::etREPLACE | strD::etREVERSE_REPLACE);
+			Str += ",";
+#endif
 		}
 		Str.resize(Str.size()-1);	//','
         return Str;
