Common.h 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. //---------------------------------------------------------------------------
  2. #ifndef CommonH
  3. #define CommonH
  4. //---------------------------------------------------------------------------
  5. #define EXCEPTION throw ExtException(NULL, "")
  6. #define THROWOSIFFALSE(C) if (!(C)) RaiseLastOSError();
  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 CopyToChars(const AnsiString & Str, int & From, 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. bool IsNumber(const AnsiString Str);
  42. AnsiString __fastcall SystemTemporaryDirectory();
  43. AnsiString __fastcall GetShellFolderPath(int CSIdl);
  44. AnsiString __fastcall StripPathQuotes(const AnsiString Path);
  45. AnsiString __fastcall AddPathQuotes(AnsiString Path);
  46. void __fastcall SplitCommand(AnsiString Command, AnsiString &Program,
  47. AnsiString & Params, AnsiString & Dir);
  48. AnsiString __fastcall ExtractProgram(AnsiString Command);
  49. AnsiString __fastcall FormatCommand(AnsiString Program, AnsiString Params);
  50. AnsiString __fastcall ExpandFileNameCommand(const AnsiString Command,
  51. const AnsiString FileName);
  52. void __fastcall ReformatFileNameCommand(AnsiString & Command);
  53. AnsiString __fastcall ExpandEnvironmentVariables(const AnsiString & Str);
  54. bool __fastcall ComparePaths(const AnsiString & Path1, const AnsiString & Path2);
  55. bool __fastcall CompareFileName(const AnsiString & Path1, const AnsiString & Path2);
  56. bool __fastcall IsReservedName(AnsiString FileName);
  57. AnsiString __fastcall DisplayableStr(const AnsiString Str);
  58. AnsiString __fastcall CharToHex(char Ch, bool UpperCase = true);
  59. AnsiString __fastcall StrToHex(const AnsiString Str, bool UpperCase = true, char Separator = '\0');
  60. AnsiString __fastcall HexToStr(const AnsiString Hex);
  61. unsigned int __fastcall HexToInt(const AnsiString Hex, int MinChars = 0);
  62. char __fastcall HexToChar(const AnsiString Hex, int MinChars = 0);
  63. AnsiString __fastcall DecodeUrlChars(AnsiString S);
  64. AnsiString __fastcall EncodeUrlChars(AnsiString S, AnsiString Ignore = "");
  65. AnsiString __fastcall EncodeUrlString(AnsiString S);
  66. bool __fastcall RecursiveDeleteFile(const AnsiString FileName, bool ToRecycleBin);
  67. int __fastcall CancelAnswer(int Answers);
  68. int __fastcall AbortAnswer(int Answers);
  69. int __fastcall ContinueAnswer(int Answers);
  70. AnsiString __fastcall LoadStr(int Ident, unsigned int MaxLength);
  71. AnsiString __fastcall LoadStrPart(int Ident, int Part);
  72. AnsiString __fastcall EscapeHotkey(const AnsiString & Caption);
  73. bool __fastcall CutToken(AnsiString & Str, AnsiString & Token);
  74. void __fastcall AddToList(AnsiString & List, const AnsiString & Value, char Delimiter);
  75. struct TPasLibModule;
  76. TPasLibModule * __fastcall FindModule(void * Instance);
  77. //---------------------------------------------------------------------------
  78. typedef void __fastcall (__closure* TProcessLocalFileEvent)
  79. (const AnsiString FileName, const TSearchRec Rec, void * Param);
  80. bool __fastcall FileSearchRec(const AnsiString FileName, TSearchRec & Rec);
  81. void __fastcall ProcessLocalDirectory(AnsiString DirName,
  82. TProcessLocalFileEvent CallBackFunc, void * Param = NULL, int FindAttrs = -1);
  83. //---------------------------------------------------------------------------
  84. enum TDSTMode
  85. {
  86. dstmWin = 0, //
  87. dstmUnix = 1, // adjust UTC time to Windows "bug"
  88. dstmKeep = 2
  89. };
  90. TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, TDSTMode DSTMode);
  91. FILETIME __fastcall DateTimeToFileTime(const TDateTime DateTime, TDSTMode DSTMode);
  92. TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, TDSTMode DSTMode);
  93. void __fastcall UnifyDateTimePrecision(TDateTime & DateTime1, TDateTime & DateTime2);
  94. __int64 __fastcall ConvertTimestampToUnix(const FILETIME & FileTime,
  95. TDSTMode DSTMode);
  96. TDateTime __fastcall ConvertTimestampToUTC(TDateTime DateTime);
  97. __int64 __fastcall ConvertTimestampToUnixSafe(const FILETIME & FileTime,
  98. TDSTMode DSTMode);
  99. AnsiString __fastcall FixedLenDateTimeFormat(const AnsiString & Format);
  100. int __fastcall CompareFileTime(TDateTime T1, TDateTime T2);
  101. //---------------------------------------------------------------------------
  102. template<class MethodT>
  103. void __fastcall MakeMethod(void * Data, void * Code, MethodT & Method)
  104. {
  105. ((TMethod*)&Method)->Data = Data;
  106. ((TMethod*)&Method)->Code = Code;
  107. }
  108. //---------------------------------------------------------------------------
  109. TMethod __fastcall MakeMethod(void * Data, void * Code)
  110. {
  111. TMethod Method = { Data, Code };
  112. return Method;
  113. }
  114. //---------------------------------------------------------------------------
  115. class TCriticalSection
  116. {
  117. public:
  118. __fastcall TCriticalSection();
  119. __fastcall ~TCriticalSection();
  120. void __fastcall Enter();
  121. void __fastcall Leave();
  122. __property int Acquired = { read = FAcquired };
  123. private:
  124. TRTLCriticalSection FSection;
  125. int FAcquired;
  126. };
  127. //---------------------------------------------------------------------------
  128. class TGuard
  129. {
  130. public:
  131. __fastcall TGuard(TCriticalSection * ACriticalSection);
  132. __fastcall ~TGuard();
  133. private:
  134. TCriticalSection * FCriticalSection;
  135. };
  136. //---------------------------------------------------------------------------
  137. class TUnguard
  138. {
  139. public:
  140. __fastcall TUnguard(TCriticalSection * ACriticalSection);
  141. __fastcall ~TUnguard();
  142. private:
  143. TCriticalSection * FCriticalSection;
  144. };
  145. //---------------------------------------------------------------------------
  146. // C++B TLibModule is invalid (differs from PAS definition)
  147. struct TPasLibModule
  148. {
  149. TPasLibModule * Next;
  150. void * Instance;
  151. void * CodeInstance;
  152. void * DataInstance;
  153. void * ResInstance;
  154. };
  155. //---------------------------------------------------------------------------
  156. //---------------------------------------------------------------------------
  157. #include <assert.h>
  158. #ifndef _DEBUG
  159. #undef assert
  160. #define assert(p) ((void)0)
  161. #define CHECK(p) p
  162. #else
  163. #define CHECK(p) { bool __CHECK_RESULT__ = (p); assert(__CHECK_RESULT__); }
  164. #endif
  165. #define USEDPARAM(p) ((p) == (p))
  166. //---------------------------------------------------------------------------
  167. #endif