Common.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154
  1. //---------------------------------------------------------------------------
  2. #ifndef CommonH
  3. #define CommonH
  4. //---------------------------------------------------------------------------
  5. #define EXCEPTION throw ExtException(NULL, "")
  6. #define THROWIFFALSE(C) if (!(C)) EXCEPTION
  7. #define SCOPY(dest, source) \
  8. strncpy(dest, source, sizeof(dest)); \
  9. dest[sizeof(dest)-1] = '\0'
  10. #define SAFE_DESTROY_EX(CLASS, OBJ) { CLASS * PObj = OBJ; OBJ = NULL; delete PObj; }
  11. #define SAFE_DESTROY(OBJ) SAFE_DESTROY_EX(TObject, OBJ)
  12. #define ASCOPY(dest, source) SCOPY(dest, source.c_str())
  13. #define FORMAT(S, F) Format(S, ARRAYOFCONST(F))
  14. #define FMTLOAD(I, F) FmtLoadStr(I, ARRAYOFCONST(F))
  15. #define LENOF(x) ( (sizeof((x))) / (sizeof(*(x))))
  16. #define FLAGSET(SET, FLAG) (((SET) & (FLAG)) == (FLAG))
  17. #define FLAGCLEAR(SET, FLAG) (((SET) & (FLAG)) == 0)
  18. #define FLAGMASK(ENABLE, FLAG) ((ENABLE) ? (FLAG) : 0)
  19. #define SWAP(TYPE, FIRST, SECOND) \
  20. { TYPE __Backup = FIRST; FIRST = SECOND; SECOND = __Backup; }
  21. //---------------------------------------------------------------------------
  22. extern const char EngShortMonthNames[12][4];
  23. //---------------------------------------------------------------------------
  24. AnsiString ReplaceChar(AnsiString Str, Char A, Char B);
  25. AnsiString DeleteChar(AnsiString Str, Char C);
  26. void PackStr(AnsiString &Str);
  27. AnsiString MakeValidFileName(AnsiString FileName);
  28. AnsiString RootKeyToStr(HKEY RootKey);
  29. AnsiString BooleanToStr(bool B);
  30. AnsiString BooleanToEngStr(bool B);
  31. AnsiString DefaultStr(const AnsiString & Str, const AnsiString & Default);
  32. AnsiString CutToChar(AnsiString &Str, Char Ch, bool Trim);
  33. AnsiString CutToChars(AnsiString &Str, AnsiString Chs, bool Trim,
  34. char * Delimiter = NULL);
  35. AnsiString DelimitStr(AnsiString Str, AnsiString Chars);
  36. AnsiString ShellDelimitStr(AnsiString Str, char Quote);
  37. void __fastcall OemToAnsi(AnsiString & Str);
  38. void __fastcall AnsiToOem(AnsiString & Str);
  39. AnsiString ExceptionLogString(Exception *E);
  40. bool IsDots(const AnsiString Str);
  41. AnsiString __fastcall SystemTemporaryDirectory();
  42. AnsiString __fastcall GetShellFolderPath(int CSIdl);
  43. AnsiString __fastcall StripPathQuotes(const AnsiString Path);
  44. AnsiString __fastcall AddPathQuotes(AnsiString Path);
  45. void __fastcall SplitCommand(AnsiString Command, AnsiString &Program,
  46. AnsiString & Params, AnsiString & Dir);
  47. AnsiString __fastcall ExtractProgram(AnsiString Command);
  48. AnsiString __fastcall FormatCommand(AnsiString Program, AnsiString Params);
  49. AnsiString __fastcall ExpandFileNameCommand(const AnsiString Command,
  50. const AnsiString FileName);
  51. void __fastcall ReformatFileNameCommand(AnsiString & Command);
  52. AnsiString __fastcall ExpandEnvironmentVariables(const AnsiString & Str);
  53. bool __fastcall ComparePaths(const AnsiString & Path1, const AnsiString & Path2);
  54. bool __fastcall CompareFileName(const AnsiString & Path1, const AnsiString & Path2);
  55. bool __fastcall IsDisplayableStr(const AnsiString Str);
  56. AnsiString __fastcall CharToHex(char Ch);
  57. AnsiString __fastcall StrToHex(const AnsiString Str);
  58. AnsiString __fastcall HexToStr(const AnsiString Hex);
  59. unsigned int __fastcall HexToInt(const AnsiString Hex, int MinChars = 0);
  60. char __fastcall HexToChar(const AnsiString Hex);
  61. AnsiString __fastcall DecodeUrlChars(AnsiString S);
  62. AnsiString __fastcall EncodeUrlChars(AnsiString S, AnsiString Ignore = "");
  63. bool __fastcall RecursiveDeleteFile(const AnsiString FileName, bool ToRecycleBin);
  64. int __fastcall CancelAnswer(int Answers);
  65. int __fastcall AbortAnswer(int Answers);
  66. int __fastcall ContinueAnswer(int Answers);
  67. AnsiString __fastcall LoadStr(int Ident, unsigned int MaxLength);
  68. AnsiString __fastcall LoadStrPart(int Ident, int Part);
  69. AnsiString __fastcall EscapeHotkey(const AnsiString & Caption);
  70. bool __fastcall CutToken(AnsiString & Str, AnsiString & Token);
  71. struct TPasLibModule;
  72. TPasLibModule * __fastcall FindModule(void * Instance);
  73. //---------------------------------------------------------------------------
  74. typedef void __fastcall (__closure* TProcessLocalFileEvent)
  75. (const AnsiString FileName, const TSearchRec Rec, void * Param);
  76. bool __fastcall FileSearchRec(const AnsiString FileName, TSearchRec & Rec);
  77. void __fastcall ProcessLocalDirectory(AnsiString DirName,
  78. TProcessLocalFileEvent CallBackFunc, void * Param = NULL, int FindAttrs = -1);
  79. //---------------------------------------------------------------------------
  80. enum TDSTMode
  81. {
  82. dstmWin = 0, //
  83. dstmUnix = 1, // adjust UTC time to Windows "bug"
  84. dstmKeep = 2
  85. };
  86. TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode);
  87. FILETIME __fastcall DateTimeToFileTime(const TDateTime DateTime, TDSTMode DSTMode);
  88. TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode);
  89. void __fastcall UnifyDateTimePrecision(TDateTime & DateTime1, TDateTime & DateTime2);
  90. __int64 __fastcall ConvertTimestampToUnix(const FILETIME & FileTime,
  91. TDSTMode DSTMode);
  92. __int64 __fastcall ConvertTimestampToUnixSafe(const FILETIME & FileTime,
  93. TDSTMode DSTMode);
  94. AnsiString __fastcall FixedLenDateTimeFormat(const AnsiString & Format);
  95. int __fastcall CompareFileTime(TDateTime T1, TDateTime T2);
  96. //---------------------------------------------------------------------------
  97. class TCriticalSection
  98. {
  99. public:
  100. __fastcall TCriticalSection();
  101. __fastcall ~TCriticalSection();
  102. void __fastcall Enter();
  103. void __fastcall Leave();
  104. __property int Acquired = { read = FAcquired };
  105. private:
  106. TRTLCriticalSection FSection;
  107. int FAcquired;
  108. };
  109. //---------------------------------------------------------------------------
  110. class TGuard
  111. {
  112. public:
  113. __fastcall TGuard(TCriticalSection * ACriticalSection);
  114. __fastcall ~TGuard();
  115. private:
  116. TCriticalSection * FCriticalSection;
  117. };
  118. //---------------------------------------------------------------------------
  119. class TUnguard
  120. {
  121. public:
  122. __fastcall TUnguard(TCriticalSection * ACriticalSection);
  123. __fastcall ~TUnguard();
  124. private:
  125. TCriticalSection * FCriticalSection;
  126. };
  127. //---------------------------------------------------------------------------
  128. // C++B TLibModule is invalid (differs from PAS definition)
  129. struct TPasLibModule
  130. {
  131. TPasLibModule * Next;
  132. void * Instance;
  133. void * CodeInstance;
  134. void * DataInstance;
  135. void * ResInstance;
  136. };
  137. //---------------------------------------------------------------------------
  138. //---------------------------------------------------------------------------
  139. #include <assert.h>
  140. #ifndef _DEBUG
  141. #undef assert
  142. #define assert(p) ((void)0)
  143. #define CHECK(p) p
  144. #else
  145. #define CHECK(p) { bool __CHECK_RESULT__ = (p); assert(__CHECK_RESULT__); }
  146. #endif
  147. #define USEDPARAM(p) ((p) == (p))
  148. //---------------------------------------------------------------------------
  149. #endif