Common.h 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399
  1. //---------------------------------------------------------------------------
  2. #ifndef CommonH
  3. #define CommonH
  4. //---------------------------------------------------------------------------
  5. #include <vector>
  6. //---------------------------------------------------------------------------
  7. #define EXCEPTION throw ExtException(NULL, L"")
  8. #define THROWOSIFFALSE(C) { if (!(C)) RaiseLastOSError(); }
  9. #define SAFE_DESTROY_EX(CLASS, OBJ) { CLASS * PObj = OBJ; OBJ = NULL; delete PObj; }
  10. #define SAFE_DESTROY(OBJ) SAFE_DESTROY_EX(TObject, OBJ)
  11. #define NULL_TERMINATE(S) S[LENOF(S) - 1] = L'\0'
  12. #define ASCOPY(dest, source) \
  13. { \
  14. AnsiString CopyBuf = source; \
  15. strncpy(dest, CopyBuf.c_str(), LENOF(dest)); \
  16. dest[LENOF(dest)-1] = '\0'; \
  17. }
  18. #define SWAP(TYPE, FIRST, SECOND) \
  19. { TYPE __Backup = FIRST; FIRST = SECOND; SECOND = __Backup; }
  20. //---------------------------------------------------------------------------
  21. extern const wchar_t EngShortMonthNames[12][4];
  22. extern const char Bom[3];
  23. extern const wchar_t TokenPrefix;
  24. extern const wchar_t NoReplacement;
  25. extern const wchar_t TokenReplacement;
  26. extern const UnicodeString LocalInvalidChars;
  27. extern const UnicodeString PasswordMask;
  28. extern const UnicodeString Ellipsis;
  29. //---------------------------------------------------------------------------
  30. extern const UnicodeString HttpProtocol;
  31. extern const UnicodeString HttpsProtocol;
  32. extern const UnicodeString ProtocolSeparator;
  33. //---------------------------------------------------------------------------
  34. UnicodeString ReplaceChar(UnicodeString Str, wchar_t A, wchar_t B);
  35. UnicodeString DeleteChar(UnicodeString Str, wchar_t C);
  36. void PackStr(UnicodeString & Str);
  37. void PackStr(RawByteString & Str);
  38. void PackStr(AnsiString & Str);
  39. void __fastcall Shred(UnicodeString & Str);
  40. void __fastcall Shred(UTF8String & Str);
  41. void __fastcall Shred(AnsiString & Str);
  42. UnicodeString AnsiToString(const RawByteString & S);
  43. UnicodeString AnsiToString(const char * S, size_t Len);
  44. UnicodeString MakeValidFileName(UnicodeString FileName);
  45. UnicodeString RootKeyToStr(HKEY RootKey);
  46. UnicodeString BooleanToStr(bool B);
  47. UnicodeString BooleanToEngStr(bool B);
  48. UnicodeString DefaultStr(const UnicodeString & Str, const UnicodeString & Default);
  49. UnicodeString CutToChar(UnicodeString &Str, wchar_t Ch, bool Trim);
  50. UnicodeString CopyToChars(const UnicodeString & Str, int & From, UnicodeString Chs, bool Trim,
  51. wchar_t * Delimiter = NULL, bool DoubleDelimiterEscapes = false);
  52. UnicodeString CopyToChar(const UnicodeString & Str, wchar_t Ch, bool Trim);
  53. UnicodeString DelimitStr(UnicodeString Str, UnicodeString Chars);
  54. UnicodeString ShellDelimitStr(UnicodeString Str, wchar_t Quote);
  55. UnicodeString ExceptionLogString(Exception *E);
  56. UnicodeString __fastcall MainInstructions(const UnicodeString & S);
  57. bool __fastcall HasParagraphs(const UnicodeString & S);
  58. UnicodeString __fastcall MainInstructionsFirstParagraph(const UnicodeString & S);
  59. bool ExtractMainInstructions(UnicodeString & S, UnicodeString & MainInstructions);
  60. UnicodeString RemoveMainInstructionsTag(UnicodeString S);
  61. UnicodeString UnformatMessage(UnicodeString S);
  62. UnicodeString RemoveInteractiveMsgTag(UnicodeString S);
  63. UnicodeString RemoveEmptyLines(const UnicodeString & S);
  64. bool IsNumber(const UnicodeString Str);
  65. UnicodeString __fastcall SystemTemporaryDirectory();
  66. UnicodeString __fastcall GetShellFolderPath(int CSIdl);
  67. UnicodeString __fastcall GetPersonalFolder();
  68. UnicodeString __fastcall GetDesktopFolder();
  69. UnicodeString __fastcall StripPathQuotes(const UnicodeString Path);
  70. UnicodeString __fastcall AddQuotes(UnicodeString Str);
  71. UnicodeString __fastcall AddPathQuotes(UnicodeString Path);
  72. void __fastcall SplitCommand(UnicodeString Command, UnicodeString &Program,
  73. UnicodeString & Params, UnicodeString & Dir);
  74. UnicodeString __fastcall ValidLocalFileName(UnicodeString FileName);
  75. UnicodeString __fastcall ValidLocalFileName(
  76. UnicodeString FileName, wchar_t InvalidCharsReplacement,
  77. const UnicodeString & TokenizibleChars, const UnicodeString & LocalInvalidChars);
  78. UnicodeString __fastcall ExtractProgram(UnicodeString Command);
  79. UnicodeString __fastcall ExtractProgramName(UnicodeString Command);
  80. UnicodeString __fastcall FormatCommand(UnicodeString Program, UnicodeString Params);
  81. UnicodeString __fastcall ExpandFileNameCommand(const UnicodeString Command,
  82. const UnicodeString FileName);
  83. void __fastcall ReformatFileNameCommand(UnicodeString & Command);
  84. UnicodeString __fastcall EscapeParam(const UnicodeString & Param);
  85. UnicodeString __fastcall EscapePuttyCommandParam(UnicodeString Param);
  86. UnicodeString __fastcall ExpandEnvironmentVariables(const UnicodeString & Str);
  87. bool __fastcall SamePaths(const UnicodeString & Path1, const UnicodeString & Path2);
  88. bool __fastcall IsPathToSameFile(const UnicodeString & Path1, const UnicodeString & Path2);
  89. int __fastcall CompareLogicalText(
  90. const UnicodeString & S1, const UnicodeString & S2, bool NaturalOrderNumericalSorting);
  91. bool __fastcall IsReservedName(UnicodeString FileName);
  92. UnicodeString __fastcall ApiPath(UnicodeString Path);
  93. UnicodeString __fastcall DisplayableStr(const RawByteString & Str);
  94. UnicodeString __fastcall ByteToHex(unsigned char B, bool UpperCase = true);
  95. UnicodeString __fastcall BytesToHex(const unsigned char * B, size_t Length, bool UpperCase = true, wchar_t Separator = L'\0');
  96. UnicodeString __fastcall BytesToHex(RawByteString Str, bool UpperCase = true, wchar_t Separator = L'\0');
  97. UnicodeString __fastcall CharToHex(wchar_t Ch, bool UpperCase = true);
  98. RawByteString __fastcall HexToBytes(const UnicodeString Hex);
  99. unsigned char __fastcall HexToByte(const UnicodeString Hex);
  100. bool __fastcall IsLowerCaseLetter(wchar_t Ch);
  101. bool __fastcall IsUpperCaseLetter(wchar_t Ch);
  102. bool __fastcall IsLetter(wchar_t Ch);
  103. bool __fastcall IsDigit(wchar_t Ch);
  104. bool __fastcall IsHex(wchar_t Ch);
  105. UnicodeString __fastcall DecodeUrlChars(UnicodeString S);
  106. UnicodeString __fastcall EncodeUrlString(UnicodeString S);
  107. UnicodeString __fastcall EncodeUrlPath(UnicodeString S);
  108. UnicodeString __fastcall AppendUrlParams(UnicodeString URL, UnicodeString Params);
  109. UnicodeString __fastcall ExtractFileNameFromUrl(const UnicodeString & Url);
  110. bool __fastcall RecursiveDeleteFile(const UnicodeString & FileName, bool ToRecycleBin);
  111. void __fastcall RecursiveDeleteFileChecked(const UnicodeString & FileName, bool ToRecycleBin);
  112. void __fastcall DeleteFileChecked(const UnicodeString & FileName);
  113. unsigned int __fastcall CancelAnswer(unsigned int Answers);
  114. unsigned int __fastcall AbortAnswer(unsigned int Answers);
  115. unsigned int __fastcall ContinueAnswer(unsigned int Answers);
  116. UnicodeString __fastcall LoadStr(int Ident, unsigned int MaxLength);
  117. UnicodeString __fastcall LoadStrFrom(HINSTANCE Module, int Ident);
  118. UnicodeString __fastcall LoadStrPart(int Ident, int Part);
  119. UnicodeString __fastcall EscapeHotkey(const UnicodeString & Caption);
  120. bool __fastcall CutToken(UnicodeString & Str, UnicodeString & Token,
  121. UnicodeString * RawToken = NULL, UnicodeString * Separator = NULL);
  122. bool __fastcall CutTokenEx(UnicodeString & Str, UnicodeString & Token,
  123. UnicodeString * RawToken = NULL, UnicodeString * Separator = NULL);
  124. void __fastcall AddToList(UnicodeString & List, const UnicodeString & Value, const UnicodeString & Delimiter);
  125. bool __fastcall IsWinVista();
  126. bool __fastcall IsWin7();
  127. bool __fastcall IsWin8();
  128. bool __fastcall IsWin10();
  129. bool __fastcall IsWine();
  130. TLibModule * __fastcall FindModule(void * Instance);
  131. __int64 __fastcall Round(double Number);
  132. bool __fastcall TryRelativeStrToDateTime(UnicodeString S, TDateTime & DateTime, bool Add);
  133. bool __fastcall TryStrToSize(UnicodeString SizeStr, __int64 & Size);
  134. UnicodeString __fastcall SizeToStr(__int64 Size);
  135. LCID __fastcall GetDefaultLCID();
  136. UnicodeString __fastcall DefaultEncodingName();
  137. UnicodeString __fastcall WindowsProductName();
  138. bool _fastcall GetWindowsProductType(DWORD & Type);
  139. UnicodeString __fastcall WindowsVersion();
  140. UnicodeString __fastcall WindowsVersionLong();
  141. bool __fastcall IsDirectoryWriteable(const UnicodeString & Path);
  142. UnicodeString __fastcall FormatNumber(__int64 Size);
  143. UnicodeString __fastcall FormatSize(__int64 Size);
  144. UnicodeString __fastcall ExtractFileBaseName(const UnicodeString & Path);
  145. TStringList * __fastcall TextToStringList(const UnicodeString & Text);
  146. UnicodeString __fastcall StringsToText(TStrings * Strings);
  147. TStrings * __fastcall CloneStrings(TStrings * Strings);
  148. UnicodeString __fastcall TrimVersion(UnicodeString Version);
  149. UnicodeString __fastcall FormatVersion(int MajovVersion, int MinorVersion, int Release);
  150. TFormatSettings __fastcall GetEngFormatSettings();
  151. int __fastcall ParseShortEngMonthName(const UnicodeString & MonthStr);
  152. // The defaults are equal to defaults of TStringList class (except for Sorted)
  153. TStringList * __fastcall CreateSortedStringList(bool CaseSensitive = false, System::Types::TDuplicates Duplicates = dupIgnore);
  154. UnicodeString __fastcall FindIdent(const UnicodeString & Ident, TStrings * Idents);
  155. void __fastcall CheckCertificate(const UnicodeString & Path);
  156. typedef struct x509_st X509;
  157. typedef struct evp_pkey_st EVP_PKEY;
  158. void __fastcall ParseCertificate(const UnicodeString & Path,
  159. const UnicodeString & Passphrase, X509 *& Certificate, EVP_PKEY *& PrivateKey,
  160. bool & WrongPassphrase);
  161. bool __fastcall IsHttpUrl(const UnicodeString & S);
  162. bool __fastcall IsHttpOrHttpsUrl(const UnicodeString & S);
  163. UnicodeString __fastcall ChangeUrlProtocol(const UnicodeString & S, const UnicodeString & Protocol);
  164. void __fastcall LoadScriptFromFile(UnicodeString FileName, TStrings * Lines);
  165. UnicodeString __fastcall StripEllipsis(const UnicodeString & S);
  166. UnicodeString __fastcall GetFileMimeType(const UnicodeString & FileName);
  167. //---------------------------------------------------------------------------
  168. typedef void __fastcall (__closure* TProcessLocalFileEvent)
  169. (const UnicodeString FileName, const TSearchRec Rec, void * Param);
  170. bool __fastcall FileSearchRec(const UnicodeString FileName, TSearchRec & Rec);
  171. struct TSearchRecChecked : public TSearchRec
  172. {
  173. UnicodeString Path;
  174. };
  175. int __fastcall FindCheck(int Result, const UnicodeString & Path);
  176. int __fastcall FindFirstUnchecked(const UnicodeString & Path, int Attr, TSearchRecChecked & F);
  177. int __fastcall FindFirstChecked(const UnicodeString & Path, int Attr, TSearchRecChecked & F);
  178. int __fastcall FindNextChecked(TSearchRecChecked & F);
  179. void __fastcall ProcessLocalDirectory(UnicodeString DirName,
  180. TProcessLocalFileEvent CallBackFunc, void * Param = NULL, int FindAttrs = -1);
  181. int __fastcall FileGetAttrFix(const UnicodeString FileName);
  182. //---------------------------------------------------------------------------
  183. extern const wchar_t * DSTModeNames;
  184. enum TDSTMode
  185. {
  186. dstmWin = 0, //
  187. dstmUnix = 1, // adjust UTC time to Windows "bug"
  188. dstmKeep = 2
  189. };
  190. bool __fastcall UsesDaylightHack();
  191. TDateTime __fastcall EncodeDateVerbose(Word Year, Word Month, Word Day);
  192. TDateTime __fastcall EncodeTimeVerbose(Word Hour, Word Min, Word Sec, Word MSec);
  193. double __fastcall DSTDifferenceForTime(TDateTime DateTime);
  194. TDateTime __fastcall SystemTimeToDateTimeVerbose(const SYSTEMTIME & SystemTime);
  195. TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode);
  196. TDateTime __fastcall ConvertTimestampToUTC(TDateTime DateTime);
  197. TDateTime __fastcall ConvertTimestampFromUTC(TDateTime DateTime);
  198. FILETIME __fastcall DateTimeToFileTime(const TDateTime DateTime, TDSTMode DSTMode);
  199. TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode);
  200. void __fastcall UnifyDateTimePrecision(TDateTime & DateTime1, TDateTime & DateTime2);
  201. TDateTime __fastcall FileTimeToDateTime(const FILETIME & FileTime);
  202. __int64 __fastcall ConvertTimestampToUnix(const FILETIME & FileTime,
  203. TDSTMode DSTMode);
  204. __int64 __fastcall ConvertTimestampToUnixSafe(const FILETIME & FileTime,
  205. TDSTMode DSTMode);
  206. UnicodeString __fastcall FixedLenDateTimeFormat(const UnicodeString & Format);
  207. UnicodeString __fastcall StandardTimestamp(const TDateTime & DateTime);
  208. UnicodeString __fastcall StandardTimestamp();
  209. UnicodeString __fastcall StandardDatestamp();
  210. UnicodeString __fastcall FormatTimeZone(long Sec);
  211. UnicodeString __fastcall GetTimeZoneLogString();
  212. bool __fastcall AdjustClockForDSTEnabled();
  213. int __fastcall CompareFileTime(TDateTime T1, TDateTime T2);
  214. int __fastcall TimeToMSec(TDateTime T);
  215. int __fastcall TimeToSeconds(TDateTime T);
  216. int __fastcall TimeToMinutes(TDateTime T);
  217. UnicodeString __fastcall FormatDateTimeSpan(const UnicodeString TimeFormat, TDateTime DateTime);
  218. //---------------------------------------------------------------------------
  219. template<class MethodT>
  220. MethodT __fastcall MakeMethod(void * Data, void * Code)
  221. {
  222. MethodT Method;
  223. ((TMethod*)&Method)->Data = Data;
  224. ((TMethod*)&Method)->Code = Code;
  225. return Method;
  226. }
  227. //---------------------------------------------------------------------------
  228. enum TAssemblyLanguage { alCSharp, alVBNET, alPowerShell };
  229. extern const UnicodeString RtfPara;
  230. extern const UnicodeString AssemblyNamespace;
  231. extern const UnicodeString SessionClassName;
  232. extern const UnicodeString TransferOptionsClassName;
  233. //---------------------------------------------------------------------
  234. UnicodeString __fastcall RtfText(const UnicodeString & Text, bool Rtf = true);
  235. UnicodeString __fastcall RtfColor(int Index);
  236. UnicodeString __fastcall RtfOverrideColorText(const UnicodeString & Text);
  237. UnicodeString __fastcall RtfColorItalicText(int Color, const UnicodeString & Text);
  238. UnicodeString __fastcall RtfColorText(int Color, const UnicodeString & Text);
  239. UnicodeString __fastcall RtfKeyword(const UnicodeString & Text);
  240. UnicodeString __fastcall RtfParameter(const UnicodeString & Text);
  241. UnicodeString __fastcall RtfString(const UnicodeString & Text);
  242. UnicodeString __fastcall RtfLink(const UnicodeString & Link, const UnicodeString & RtfText);
  243. UnicodeString __fastcall RtfSwitch(
  244. const UnicodeString & Name, const UnicodeString & Link, bool Rtf = true);
  245. UnicodeString __fastcall RtfSwitchValue(
  246. const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value, bool Rtf = true);
  247. UnicodeString __fastcall RtfSwitch(
  248. const UnicodeString & Name, const UnicodeString & Link, const UnicodeString & Value, bool Rtf = true);
  249. UnicodeString __fastcall RtfSwitch(
  250. const UnicodeString & Name, const UnicodeString & Link, int Value, bool Rtf = true);
  251. UnicodeString __fastcall RtfEscapeParam(UnicodeString Param);
  252. UnicodeString __fastcall RtfRemoveHyperlinks(UnicodeString Text);
  253. UnicodeString __fastcall ScriptCommandLink(const UnicodeString & Command);
  254. UnicodeString __fastcall AssemblyBoolean(TAssemblyLanguage Language, bool Value);
  255. UnicodeString __fastcall AssemblyString(TAssemblyLanguage Language, UnicodeString S);
  256. UnicodeString __fastcall AssemblyCommentLine(TAssemblyLanguage Language, const UnicodeString & Text);
  257. UnicodeString __fastcall AssemblyPropertyRaw(
  258. TAssemblyLanguage Language, const UnicodeString & ClassName, const UnicodeString & Name,
  259. const UnicodeString & Value, bool Inline);
  260. UnicodeString __fastcall AssemblyProperty(
  261. TAssemblyLanguage Language, const UnicodeString & ClassName, const UnicodeString & Name,
  262. const UnicodeString & Type, const UnicodeString & Member, bool Inline);
  263. UnicodeString __fastcall AssemblyProperty(
  264. TAssemblyLanguage Language, const UnicodeString & ClassName, const UnicodeString & Name,
  265. const UnicodeString & Value, bool Inline);
  266. UnicodeString __fastcall AssemblyProperty(
  267. TAssemblyLanguage Language, const UnicodeString & ClassName, const UnicodeString & Name, int Value, bool Inline);
  268. UnicodeString __fastcall AssemblyProperty(
  269. TAssemblyLanguage Language, const UnicodeString & ClassName, const UnicodeString & Name, bool Value, bool Inline);
  270. UnicodeString __fastcall RtfLibraryMethod(const UnicodeString & ClassName, const UnicodeString & MethodName, bool Inpage);
  271. UnicodeString __fastcall RtfLibraryClass(const UnicodeString & ClassName);
  272. UnicodeString __fastcall AssemblyVariableName(TAssemblyLanguage Language, const UnicodeString & ClassName);
  273. UnicodeString __fastcall AssemblyStatementSeparator(TAssemblyLanguage Language);
  274. UnicodeString __fastcall AssemblyNewClassInstance(
  275. TAssemblyLanguage Language, const UnicodeString & ClassName, bool Inline);
  276. UnicodeString __fastcall AssemblyNewClassInstanceStart(
  277. TAssemblyLanguage Language, const UnicodeString & ClassName, bool Inline);
  278. UnicodeString __fastcall AssemblyNewClassInstanceEnd(TAssemblyLanguage Language, bool Inline);
  279. //---------------------------------------------------------------------------
  280. #include "Global.h"
  281. //---------------------------------------------------------------------------
  282. template<class T>
  283. class TValueRestorer
  284. {
  285. public:
  286. __fastcall TValueRestorer(T & Target, const T & Value) :
  287. FTarget(Target),
  288. FValue(Value),
  289. FArmed(true)
  290. {
  291. }
  292. __fastcall TValueRestorer(T & Target) :
  293. FTarget(Target),
  294. FValue(Target),
  295. FArmed(true)
  296. {
  297. }
  298. void Release()
  299. {
  300. if (FArmed)
  301. {
  302. FTarget = FValue;
  303. FArmed = false;
  304. }
  305. }
  306. __fastcall ~TValueRestorer()
  307. {
  308. Release();
  309. }
  310. protected:
  311. T & FTarget;
  312. T FValue;
  313. bool FArmed;
  314. };
  315. //---------------------------------------------------------------------------
  316. class TAutoNestingCounter : public TValueRestorer<int>
  317. {
  318. public:
  319. __fastcall TAutoNestingCounter(int & Target) :
  320. TValueRestorer<int>(Target)
  321. {
  322. DebugAssert(Target >= 0);
  323. ++Target;
  324. }
  325. __fastcall ~TAutoNestingCounter()
  326. {
  327. DebugAssert(!FArmed || (FTarget == (FValue + 1)));
  328. }
  329. };
  330. //---------------------------------------------------------------------------
  331. class TAutoFlag : public TValueRestorer<bool>
  332. {
  333. public:
  334. __fastcall TAutoFlag(bool & Target) :
  335. TValueRestorer<bool>(Target)
  336. {
  337. DebugAssert(!Target);
  338. Target = true;
  339. }
  340. __fastcall ~TAutoFlag()
  341. {
  342. DebugAssert(!FArmed || FTarget);
  343. }
  344. };
  345. //---------------------------------------------------------------------------
  346. #include <map>
  347. //---------------------------------------------------------------------------
  348. template<class T1, class T2>
  349. class BiDiMap
  350. {
  351. public:
  352. typedef std::map<T1, T2> TFirstToSecond;
  353. typedef TFirstToSecond::const_iterator const_iterator;
  354. void Add(const T1 & Value1, const T2 & Value2)
  355. {
  356. FFirstToSecond.insert(std::make_pair(Value1, Value2));
  357. FSecondToFirst.insert(std::make_pair(Value2, Value1));
  358. }
  359. T1 LookupFirst(const T2 & Value2) const
  360. {
  361. TSecondToFirst::const_iterator Iterator = FSecondToFirst.find(Value2);
  362. DebugAssert(Iterator != FSecondToFirst.end());
  363. return Iterator->second;
  364. }
  365. T2 LookupSecond(const T1 & Value1) const
  366. {
  367. const_iterator Iterator = FFirstToSecond.find(Value1);
  368. DebugAssert(Iterator != FFirstToSecond.end());
  369. return Iterator->second;
  370. }
  371. const_iterator begin()
  372. {
  373. return FFirstToSecond.begin();
  374. }
  375. const_iterator end()
  376. {
  377. return FFirstToSecond.end();
  378. }
  379. private:
  380. TFirstToSecond FFirstToSecond;
  381. typedef std::map<T2, T1> TSecondToFirst;
  382. TSecondToFirst FSecondToFirst;
  383. };
  384. //---------------------------------------------------------------------------
  385. typedef std::vector<UnicodeString> TUnicodeStringVector;
  386. //---------------------------------------------------------------------------
  387. #endif