Common.h 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. //---------------------------------------------------------------------------
  2. #ifndef CommonH
  3. #define CommonH
  4. #ifndef C_ONLY
  5. //---------------------------------------------------------------------------
  6. #define EXCEPTION throw ExtException(NULL, "")
  7. #define THROWIFFALSE(C) if (!(C)) EXCEPTION
  8. #define SCOPY(dest, source) \
  9. strncpy(dest, source, sizeof(dest)); \
  10. dest[sizeof(dest)-1] = '\0'
  11. #define SAFE_DESTROY(OBJ) { TObject * PObj = OBJ; OBJ = NULL; delete PObj; }
  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 CutToChar(AnsiString &Str, Char Ch, bool Trim);
  32. void __fastcall OemToAnsi(AnsiString & Str);
  33. void __fastcall AnsiToOem(AnsiString & Str);
  34. AnsiString ExceptionLogString(Exception *E);
  35. bool IsDots(const AnsiString Str);
  36. AnsiString __fastcall SystemTemporaryDirectory();
  37. AnsiString __fastcall StripPathQuotes(const AnsiString Path);
  38. AnsiString __fastcall AddPathQuotes(AnsiString Path);
  39. void __fastcall SplitCommand(AnsiString Command, AnsiString &Program,
  40. AnsiString & Params, AnsiString & Dir);
  41. AnsiString __fastcall ExtractProgram(AnsiString Command);
  42. AnsiString __fastcall FormatCommand(AnsiString Program, AnsiString Params);
  43. bool __fastcall IsDisplayableStr(const AnsiString Str);
  44. AnsiString __fastcall StrToHex(const AnsiString Str);
  45. AnsiString __fastcall HexToStr(const AnsiString Hex);
  46. unsigned int __fastcall HexToInt(const AnsiString Hex);
  47. AnsiString __fastcall DecodeUrlChars(AnsiString S);
  48. bool __fastcall RecursiveDeleteFile(const AnsiString FileName, bool ToRecycleBin);
  49. int __fastcall CancelAnswer(int Answers);
  50. int __fastcall AbortAnswer(int Answers);
  51. AnsiString __fastcall LoadStr(int Ident, unsigned int MaxLength);
  52. AnsiString __fastcall LoadStrPart(int Ident, int Part);
  53. struct TPasLibModule;
  54. TPasLibModule * __fastcall FindModule(void * Instance);
  55. //---------------------------------------------------------------------------
  56. typedef void __fastcall (__closure* TProcessLocalFileEvent)
  57. (const AnsiString FileName, const TSearchRec Rec, void * Param);
  58. bool __fastcall FileSearchRec(const AnsiString FileName, TSearchRec & Rec);
  59. void __fastcall ProcessLocalDirectory(AnsiString DirName,
  60. TProcessLocalFileEvent CallBackFunc, void * Param = NULL, int FindAttrs = -1);
  61. //---------------------------------------------------------------------------
  62. TDateTime __fastcall UnixToDateTime(__int64 TimeStamp, bool ConsiderDST);
  63. FILETIME __fastcall DateTimeToFileTime(const TDateTime DateTime, bool ConsiderDST);
  64. TDateTime __fastcall AdjustDateTimeFromUnix(TDateTime DateTime, bool ConsiderDST);
  65. void __fastcall UnifyDateTimePrecision(TDateTime & DateTime1, TDateTime & DateTime2);
  66. __int64 __fastcall ConvertTimestampToUnix(const FILETIME & FileTime,
  67. bool ConsiderDST);
  68. AnsiString __fastcall FixedLenDateTimeFormat(const AnsiString & Format);
  69. int __fastcall CompareFileTime(TDateTime T1, TDateTime T2);
  70. //---------------------------------------------------------------------------
  71. class TCriticalSection
  72. {
  73. public:
  74. __fastcall TCriticalSection();
  75. __fastcall ~TCriticalSection();
  76. void __fastcall Enter();
  77. void __fastcall Leave();
  78. private:
  79. TRTLCriticalSection FSection;
  80. };
  81. //---------------------------------------------------------------------------
  82. class TGuard
  83. {
  84. public:
  85. __fastcall TGuard(TCriticalSection * ACriticalSection);
  86. __fastcall ~TGuard();
  87. private:
  88. TCriticalSection * FCriticalSection;
  89. };
  90. //---------------------------------------------------------------------------
  91. class TUnguard
  92. {
  93. public:
  94. __fastcall TUnguard(TCriticalSection * ACriticalSection);
  95. __fastcall ~TUnguard();
  96. private:
  97. TCriticalSection * FCriticalSection;
  98. };
  99. //---------------------------------------------------------------------------
  100. // C++B TLibModule is invalid (differs from PAS definition)
  101. struct TPasLibModule
  102. {
  103. TPasLibModule * Next;
  104. void * Instance;
  105. void * CodeInstance;
  106. void * DataInstance;
  107. void * ResInstance;
  108. };
  109. //---------------------------------------------------------------------------
  110. #ifdef _DEBUG
  111. #define TRACEENV "WINSCPTRACE"
  112. void __fastcall Trace(const AnsiString SourceFile, const AnsiString Func,
  113. int Line, const AnsiString Message);
  114. #define TRACE(MESSAGE) Trace(__FILE__, __FUNC__, __LINE__, MESSAGE)
  115. #define TRACEFMT(MESSAGE, PARAMS) Trace(__FILE__, __FUNC__, __LINE__, FORMAT(MESSAGE, PARAMS))
  116. #else // ifdef _DEBUG
  117. #define TRACE(PARAMS)
  118. #define TRACEFMT(MESSAGE, PARAMS)
  119. #endif // ifdef _DEBUG
  120. //---------------------------------------------------------------------------
  121. #endif
  122. //---------------------------------------------------------------------------
  123. #include <assert.h>
  124. #ifndef _DEBUG
  125. #undef assert
  126. #define assert(p) ((void)0)
  127. #define CHECK(p) p
  128. #else
  129. #define CHECK(p) { bool __CHECK_RESULT__ = (p); assert(__CHECK_RESULT__); }
  130. #endif
  131. #define USEDPARAM(p) ((p) == (p))
  132. //---------------------------------------------------------------------------
  133. #endif