Common.h 7.7 KB

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