Common.h 6.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155
  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 StripPathQuotes(const AnsiString Path);
  43. AnsiString __fastcall AddPathQuotes(AnsiString Path);
  44. void __fastcall SplitCommand(AnsiString Command, AnsiString &Program,
  45. AnsiString & Params, AnsiString & Dir);
  46. AnsiString __fastcall ExtractProgram(AnsiString Command);
  47. AnsiString __fastcall FormatCommand(AnsiString Program, AnsiString Params);
  48. AnsiString __fastcall ExpandFileNameCommand(const AnsiString Command,
  49. const AnsiString FileName);
  50. void __fastcall ReformatFileNameCommand(AnsiString & Command);
  51. AnsiString __fastcall ExpandEnvironmentVariables(const AnsiString & Str);
  52. bool __fastcall ComparePaths(const AnsiString & Path1, const AnsiString & Path2);
  53. bool __fastcall CompareFileName(const AnsiString & Path1, const AnsiString & Path2);
  54. bool __fastcall IsDisplayableStr(const AnsiString Str);
  55. AnsiString __fastcall CharToHex(char Ch);
  56. AnsiString __fastcall StrToHex(const AnsiString Str);
  57. AnsiString __fastcall HexToStr(const AnsiString Hex);
  58. unsigned int __fastcall HexToInt(const AnsiString Hex, int MinChars = 0);
  59. AnsiString __fastcall DecodeUrlChars(AnsiString S);
  60. AnsiString __fastcall EncodeUrlChars(AnsiString S, AnsiString Ignore = "");
  61. bool __fastcall RecursiveDeleteFile(const AnsiString FileName, bool ToRecycleBin);
  62. int __fastcall CancelAnswer(int Answers);
  63. int __fastcall AbortAnswer(int Answers);
  64. int __fastcall ContinueAnswer(int Answers);
  65. AnsiString __fastcall LoadStr(int Ident, unsigned int MaxLength);
  66. AnsiString __fastcall LoadStrPart(int Ident, int Part);
  67. struct TPasLibModule;
  68. TPasLibModule * __fastcall FindModule(void * Instance);
  69. //---------------------------------------------------------------------------
  70. typedef void __fastcall (__closure* TProcessLocalFileEvent)
  71. (const AnsiString FileName, const TSearchRec Rec, void * Param);
  72. bool __fastcall FileSearchRec(const AnsiString FileName, TSearchRec & Rec);
  73. void __fastcall ProcessLocalDirectory(AnsiString DirName,
  74. TProcessLocalFileEvent CallBackFunc, void * Param = NULL, int FindAttrs = -1);
  75. //---------------------------------------------------------------------------
  76. enum TDSTMode
  77. {
  78. dstmWin = 0, //
  79. dstmUnix = 1, // adjust UTC time to Windows "bug"
  80. dstmKeep = 2
  81. };
  82. TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode);
  83. FILETIME __fastcall DateTimeToFileTime(const TDateTime DateTime, TDSTMode DSTMode);
  84. TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode);
  85. void __fastcall UnifyDateTimePrecision(TDateTime & DateTime1, TDateTime & DateTime2);
  86. __int64 __fastcall ConvertTimestampToUnix(const FILETIME & FileTime,
  87. TDSTMode DSTMode);
  88. __int64 __fastcall ConvertTimestampToUnixSafe(const FILETIME & FileTime,
  89. TDSTMode DSTMode);
  90. AnsiString __fastcall FixedLenDateTimeFormat(const AnsiString & Format);
  91. int __fastcall CompareFileTime(TDateTime T1, TDateTime T2);
  92. //---------------------------------------------------------------------------
  93. class TCriticalSection
  94. {
  95. public:
  96. __fastcall TCriticalSection();
  97. __fastcall ~TCriticalSection();
  98. void __fastcall Enter();
  99. void __fastcall Leave();
  100. __property int Acquired = { read = FAcquired };
  101. private:
  102. TRTLCriticalSection FSection;
  103. int FAcquired;
  104. };
  105. //---------------------------------------------------------------------------
  106. class TGuard
  107. {
  108. public:
  109. __fastcall TGuard(TCriticalSection * ACriticalSection);
  110. __fastcall ~TGuard();
  111. private:
  112. TCriticalSection * FCriticalSection;
  113. };
  114. //---------------------------------------------------------------------------
  115. class TUnguard
  116. {
  117. public:
  118. __fastcall TUnguard(TCriticalSection * ACriticalSection);
  119. __fastcall ~TUnguard();
  120. private:
  121. TCriticalSection * FCriticalSection;
  122. };
  123. //---------------------------------------------------------------------------
  124. // C++B TLibModule is invalid (differs from PAS definition)
  125. struct TPasLibModule
  126. {
  127. TPasLibModule * Next;
  128. void * Instance;
  129. void * CodeInstance;
  130. void * DataInstance;
  131. void * ResInstance;
  132. };
  133. //---------------------------------------------------------------------------
  134. //---------------------------------------------------------------------------
  135. #include <assert.h>
  136. #ifndef _DEBUG
  137. #undef assert
  138. #define assert(p) ((void)0)
  139. #define CHECK(p) p
  140. #else
  141. #ifndef DESIGN_ONLY
  142. #undef assert
  143. void __fastcall DoAssert(char * Message, char * Filename, int LineNumber);
  144. #define assert(p) ((p) ? (void)0 : DoAssert(#p, __FILE__, __LINE__))
  145. #endif // ifndef DESIGN_ONLY
  146. #define CHECK(p) { bool __CHECK_RESULT__ = (p); assert(__CHECK_RESULT__); }
  147. #endif
  148. #define USEDPARAM(p) ((p) == (p))
  149. //---------------------------------------------------------------------------
  150. #endif