Common.h 9.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. //---------------------------------------------------------------------------
  2. #ifndef CommonH
  3. #define CommonH
  4. //---------------------------------------------------------------------------
  5. #define EXCEPTION throw ExtException(NULL, L"")
  6. #define THROWOSIFFALSE(C) if (!(C)) RaiseLastOSError();
  7. #define SAFE_DESTROY_EX(CLASS, OBJ) { CLASS * PObj = OBJ; OBJ = NULL; delete PObj; }
  8. #define SAFE_DESTROY(OBJ) SAFE_DESTROY_EX(TObject, OBJ)
  9. #define ASCOPY(dest, source) \
  10. { \
  11. AnsiString CopyBuf = source; \
  12. strncpy(dest, CopyBuf.c_str(), LENOF(dest)); \
  13. dest[LENOF(dest)-1] = '\0'; \
  14. }
  15. #define FORMAT(S, F) Format(S, ARRAYOFCONST(F))
  16. #define FMTLOAD(I, F) FmtLoadStr(I, ARRAYOFCONST(F))
  17. #define LENOF(x) ( (sizeof((x))) / (sizeof(*(x))))
  18. #define FLAGSET(SET, FLAG) (((SET) & (FLAG)) == (FLAG))
  19. #define FLAGCLEAR(SET, FLAG) (((SET) & (FLAG)) == 0)
  20. #define FLAGMASK(ENABLE, FLAG) ((ENABLE) ? (FLAG) : 0)
  21. #define SWAP(TYPE, FIRST, SECOND) \
  22. { TYPE __Backup = FIRST; FIRST = SECOND; SECOND = __Backup; }
  23. //---------------------------------------------------------------------------
  24. extern const wchar_t EngShortMonthNames[12][4];
  25. extern const char Bom[3];
  26. extern const wchar_t TokenPrefix;
  27. extern const wchar_t NoReplacement;
  28. extern const wchar_t TokenReplacement;
  29. extern const UnicodeString LocalInvalidChars;
  30. //---------------------------------------------------------------------------
  31. UnicodeString ReplaceChar(UnicodeString Str, wchar_t A, wchar_t B);
  32. UnicodeString DeleteChar(UnicodeString Str, wchar_t C);
  33. void PackStr(UnicodeString &Str);
  34. void PackStr(RawByteString &Str);
  35. void __fastcall Shred(UnicodeString & Str);
  36. UnicodeString MakeValidFileName(UnicodeString FileName);
  37. UnicodeString RootKeyToStr(HKEY RootKey);
  38. UnicodeString BooleanToStr(bool B);
  39. UnicodeString BooleanToEngStr(bool B);
  40. UnicodeString DefaultStr(const UnicodeString & Str, const UnicodeString & Default);
  41. UnicodeString CutToChar(UnicodeString &Str, wchar_t Ch, bool Trim);
  42. UnicodeString CopyToChars(const UnicodeString & Str, int & From, UnicodeString Chs, bool Trim,
  43. wchar_t * Delimiter = NULL, bool DoubleDelimiterEscapes = false);
  44. UnicodeString DelimitStr(UnicodeString Str, UnicodeString Chars);
  45. UnicodeString ShellDelimitStr(UnicodeString Str, wchar_t Quote);
  46. UnicodeString ExceptionLogString(Exception *E);
  47. bool IsNumber(const UnicodeString Str);
  48. UnicodeString __fastcall SystemTemporaryDirectory();
  49. UnicodeString __fastcall GetShellFolderPath(int CSIdl);
  50. UnicodeString __fastcall StripPathQuotes(const UnicodeString Path);
  51. UnicodeString __fastcall AddPathQuotes(UnicodeString Path);
  52. void __fastcall SplitCommand(UnicodeString Command, UnicodeString &Program,
  53. UnicodeString & Params, UnicodeString & Dir);
  54. UnicodeString __fastcall ValidLocalFileName(UnicodeString FileName);
  55. UnicodeString __fastcall ValidLocalFileName(
  56. UnicodeString FileName, wchar_t InvalidCharsReplacement,
  57. const UnicodeString & TokenizibleChars, const UnicodeString & LocalInvalidChars);
  58. UnicodeString __fastcall ExtractProgram(UnicodeString Command);
  59. UnicodeString __fastcall FormatCommand(UnicodeString Program, UnicodeString Params);
  60. UnicodeString __fastcall ExpandFileNameCommand(const UnicodeString Command,
  61. const UnicodeString FileName);
  62. void __fastcall ReformatFileNameCommand(UnicodeString & Command);
  63. UnicodeString __fastcall EscapePuttyCommandParam(UnicodeString Param);
  64. UnicodeString __fastcall ExpandEnvironmentVariables(const UnicodeString & Str);
  65. bool __fastcall ComparePaths(const UnicodeString & Path1, const UnicodeString & Path2);
  66. bool __fastcall CompareFileName(const UnicodeString & Path1, const UnicodeString & Path2);
  67. bool __fastcall IsReservedName(UnicodeString FileName);
  68. UnicodeString __fastcall DisplayableStr(const RawByteString & Str);
  69. UnicodeString __fastcall ByteToHex(unsigned char B, bool UpperCase = true);
  70. UnicodeString __fastcall BytesToHex(const unsigned char * B, size_t Length, bool UpperCase = true, wchar_t Separator = L'\0');
  71. UnicodeString __fastcall BytesToHex(RawByteString Str, bool UpperCase = true, wchar_t Separator = L'\0');
  72. UnicodeString __fastcall CharToHex(wchar_t Ch, bool UpperCase = true);
  73. RawByteString __fastcall HexToBytes(const UnicodeString Hex);
  74. unsigned char __fastcall HexToByte(const UnicodeString Hex);
  75. UnicodeString __fastcall DecodeUrlChars(UnicodeString S);
  76. UnicodeString __fastcall EncodeUrlChars(UnicodeString S, UnicodeString Ignore = L"");
  77. UnicodeString __fastcall EncodeUrlString(UnicodeString S);
  78. bool __fastcall RecursiveDeleteFile(const UnicodeString FileName, bool ToRecycleBin);
  79. unsigned int __fastcall CancelAnswer(unsigned int Answers);
  80. unsigned int __fastcall AbortAnswer(unsigned int Answers);
  81. unsigned int __fastcall ContinueAnswer(unsigned int Answers);
  82. UnicodeString __fastcall LoadStr(int Ident, unsigned int MaxLength);
  83. UnicodeString __fastcall LoadStrPart(int Ident, int Part);
  84. UnicodeString __fastcall EscapeHotkey(const UnicodeString & Caption);
  85. bool __fastcall CutToken(UnicodeString & Str, UnicodeString & Token,
  86. UnicodeString * RawToken = NULL);
  87. void __fastcall AddToList(UnicodeString & List, const UnicodeString & Value, const UnicodeString & Delimiter);
  88. bool __fastcall Is2000();
  89. bool __fastcall IsWin7();
  90. bool __fastcall IsExactly2008R2();
  91. TLibModule * __fastcall FindModule(void * Instance);
  92. __int64 __fastcall Round(double Number);
  93. bool __fastcall TryRelativeStrToDateTime(UnicodeString S, TDateTime & DateTime);
  94. LCID __fastcall GetDefaultLCID();
  95. UnicodeString __fastcall DefaultEncodingName();
  96. UnicodeString __fastcall WindowsProductName();
  97. //---------------------------------------------------------------------------
  98. typedef void __fastcall (__closure* TProcessLocalFileEvent)
  99. (const UnicodeString FileName, const TSearchRec Rec, void * Param);
  100. bool __fastcall FileSearchRec(const UnicodeString FileName, TSearchRec & Rec);
  101. void __fastcall ProcessLocalDirectory(UnicodeString DirName,
  102. TProcessLocalFileEvent CallBackFunc, void * Param = NULL, int FindAttrs = -1);
  103. //---------------------------------------------------------------------------
  104. enum TDSTMode
  105. {
  106. dstmWin = 0, //
  107. dstmUnix = 1, // adjust UTC time to Windows "bug"
  108. dstmKeep = 2
  109. };
  110. bool __fastcall UsesDaylightHack();
  111. TDateTime __fastcall EncodeDateVerbose(Word Year, Word Month, Word Day);
  112. TDateTime __fastcall EncodeTimeVerbose(Word Hour, Word Min, Word Sec, Word MSec);
  113. TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode);
  114. TDateTime __fastcall ConvertTimestampToUTC(TDateTime DateTime);
  115. TDateTime __fastcall ConvertTimestampFromUTC(TDateTime DateTime);
  116. FILETIME __fastcall DateTimeToFileTime(const TDateTime DateTime, TDSTMode DSTMode);
  117. TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode);
  118. void __fastcall UnifyDateTimePrecision(TDateTime & DateTime1, TDateTime & DateTime2);
  119. TDateTime __fastcall FileTimeToDateTime(const FILETIME & FileTime);
  120. __int64 __fastcall ConvertTimestampToUnix(const FILETIME & FileTime,
  121. TDSTMode DSTMode);
  122. __int64 __fastcall ConvertTimestampToUnixSafe(const FILETIME & FileTime,
  123. TDSTMode DSTMode);
  124. UnicodeString __fastcall FixedLenDateTimeFormat(const UnicodeString & Format);
  125. UnicodeString __fastcall StandardTimestamp(const TDateTime & DateTime);
  126. UnicodeString __fastcall StandardTimestamp();
  127. UnicodeString __fastcall GetTimeZoneLogString();
  128. int __fastcall CompareFileTime(TDateTime T1, TDateTime T2);
  129. int __fastcall TimeToMSec(TDateTime T);
  130. int __fastcall TimeToMinutes(TDateTime T);
  131. //---------------------------------------------------------------------------
  132. template<class MethodT>
  133. MethodT __fastcall MakeMethod(void * Data, void * Code)
  134. {
  135. MethodT Method;
  136. ((TMethod*)&Method)->Data = Data;
  137. ((TMethod*)&Method)->Code = Code;
  138. return Method;
  139. }
  140. //---------------------------------------------------------------------------
  141. class TGuard
  142. {
  143. public:
  144. __fastcall TGuard(TCriticalSection * ACriticalSection);
  145. __fastcall ~TGuard();
  146. private:
  147. TCriticalSection * FCriticalSection;
  148. };
  149. //---------------------------------------------------------------------------
  150. class TUnguard
  151. {
  152. public:
  153. __fastcall TUnguard(TCriticalSection * ACriticalSection);
  154. __fastcall ~TUnguard();
  155. private:
  156. TCriticalSection * FCriticalSection;
  157. };
  158. //---------------------------------------------------------------------------
  159. //---------------------------------------------------------------------------
  160. #include <assert.h>
  161. #ifndef _DEBUG
  162. #undef assert
  163. #define assert(p) ((void)0)
  164. #define CHECK(p) p
  165. #define FAIL
  166. #else
  167. #define CHECK(p) { bool __CHECK_RESULT__ = (p); assert(__CHECK_RESULT__); }
  168. #define FAIL assert(false)
  169. #endif
  170. #define USEDPARAM(p) ((&p) == (&p))
  171. //---------------------------------------------------------------------------
  172. template<class T>
  173. class TValueRestorer
  174. {
  175. public:
  176. __fastcall TValueRestorer(T & Target, const T & Value) :
  177. FTarget(Target),
  178. FValue(Value)
  179. {
  180. }
  181. __fastcall ~TValueRestorer()
  182. {
  183. FTarget = FValue;
  184. }
  185. protected:
  186. T & FTarget;
  187. T FValue;
  188. };
  189. //---------------------------------------------------------------------------
  190. class TBoolRestorer : TValueRestorer<bool>
  191. {
  192. public:
  193. __fastcall TBoolRestorer(bool & Target) :
  194. TValueRestorer<bool>(Target, !Target)
  195. {
  196. }
  197. };
  198. //---------------------------------------------------------------------------
  199. class TAutoNestingCounter : TValueRestorer<int>
  200. {
  201. public:
  202. __fastcall TAutoNestingCounter(int & Target) :
  203. TValueRestorer<int>(Target, Target)
  204. {
  205. assert(Target >= 0);
  206. ++Target;
  207. }
  208. __fastcall ~TAutoNestingCounter()
  209. {
  210. assert(FTarget == (FValue + 1));
  211. }
  212. };
  213. //---------------------------------------------------------------------------
  214. #endif