FileMasks.h 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133
  1. //---------------------------------------------------------------------------
  2. #ifndef FileMasksH
  3. #define FileMasksH
  4. //---------------------------------------------------------------------------
  5. class TFileMasks
  6. {
  7. public:
  8. struct TParams
  9. {
  10. TParams();
  11. __int64 Size;
  12. };
  13. static bool __fastcall IsMask(const AnsiString Mask);
  14. static bool __fastcall SingleMaskMatch(const AnsiString Mask, const AnsiString FileName);
  15. __fastcall TFileMasks();
  16. __fastcall TFileMasks(const TFileMasks & Source);
  17. __fastcall TFileMasks(const AnsiString AMasks);
  18. TFileMasks & __fastcall operator =(const TFileMasks & rhm);
  19. TFileMasks & __fastcall operator =(const char * rhs);
  20. TFileMasks & __fastcall operator =(const AnsiString rhs);
  21. bool __fastcall operator ==(const TFileMasks & rhm) const;
  22. bool __fastcall operator ==(const AnsiString rhs) const;
  23. bool __fastcall Matches(AnsiString FileName, bool Directory,
  24. AnsiString Path = "", const TParams * Params = NULL) const;
  25. bool __fastcall Matches(AnsiString FileName, bool Local, bool Directory,
  26. const TParams * Params = NULL) const;
  27. bool __fastcall IsValid();
  28. bool __fastcall IsValid(int & Start, int & Length);
  29. __property AnsiString Masks = { read = FMasks, write = FMasks };
  30. private:
  31. AnsiString FMasks;
  32. static bool __fastcall MatchesMask(AnsiString FileName, bool Directory,
  33. AnsiString Path, const TParams * Params, AnsiString M);
  34. static inline bool __fastcall MatchesFileMask(const AnsiString & Filename, const AnsiString & Mask);
  35. };
  36. //---------------------------------------------------------------------------
  37. AnsiString __fastcall MaskFileName(AnsiString FileName, const AnsiString Mask);
  38. bool __fastcall IsFileNameMask(const AnsiString Mask);
  39. AnsiString __fastcall DelimitFileNameMask(AnsiString Mask);
  40. //---------------------------------------------------------------------------
  41. typedef void __fastcall (__closure * TCustomCommandPatternEvent)
  42. (int Index, const AnsiString Pattern, void * Arg, AnsiString & Replacement,
  43. bool & LastPass);
  44. //---------------------------------------------------------------------------
  45. class TCustomCommand
  46. {
  47. friend class TInteractiveCustomCommand;
  48. public:
  49. TCustomCommand();
  50. AnsiString __fastcall Complete(const AnsiString & Command, bool LastPass);
  51. virtual void __fastcall Validate(const AnsiString & Command);
  52. protected:
  53. static const char NoQuote;
  54. static const AnsiString Quotes;
  55. void __fastcall GetToken(const AnsiString & Command,
  56. int Index, int & Len, char & PatternCmd);
  57. void __fastcall CustomValidate(const AnsiString & Command, void * Arg);
  58. bool __fastcall FindPattern(const AnsiString & Command, char PatternCmd);
  59. virtual void __fastcall ValidatePattern(const AnsiString & Command,
  60. int Index, int Len, char PatternCmd, void * Arg);
  61. virtual int __fastcall PatternLen(int Index, char PatternCmd) = 0;
  62. virtual bool __fastcall PatternReplacement(int Index, const AnsiString & Pattern,
  63. AnsiString & Replacement, bool & Delimit) = 0;
  64. virtual void __fastcall DelimitReplacement(AnsiString & Replacement, char Quote);
  65. };
  66. //---------------------------------------------------------------------------
  67. class TInteractiveCustomCommand : public TCustomCommand
  68. {
  69. public:
  70. TInteractiveCustomCommand(TCustomCommand * ChildCustomCommand);
  71. protected:
  72. virtual void __fastcall Prompt(int Index, const AnsiString & Prompt,
  73. AnsiString & Value);
  74. virtual int __fastcall PatternLen(int Index, char PatternCmd);
  75. virtual bool __fastcall PatternReplacement(int Index, const AnsiString & Pattern,
  76. AnsiString & Replacement, bool & Delimit);
  77. private:
  78. TCustomCommand * FChildCustomCommand;
  79. };
  80. //---------------------------------------------------------------------------
  81. class TTerminal;
  82. struct TCustomCommandData
  83. {
  84. __fastcall TCustomCommandData();
  85. __fastcall TCustomCommandData(TTerminal * Terminal);
  86. AnsiString HostName;
  87. AnsiString UserName;
  88. AnsiString Password;
  89. };
  90. //---------------------------------------------------------------------------
  91. class TFileCustomCommand : public TCustomCommand
  92. {
  93. public:
  94. TFileCustomCommand();
  95. TFileCustomCommand(const TCustomCommandData & Data, const AnsiString & Path);
  96. TFileCustomCommand(const TCustomCommandData & Data, const AnsiString & Path,
  97. const AnsiString & FileName, const AnsiString & FileList);
  98. virtual void __fastcall Validate(const AnsiString & Command);
  99. virtual void __fastcall ValidatePattern(const AnsiString & Command,
  100. int Index, int Len, char PatternCmd, void * Arg);
  101. bool __fastcall IsFileListCommand(const AnsiString & Command);
  102. virtual bool __fastcall IsFileCommand(const AnsiString & Command);
  103. protected:
  104. virtual int __fastcall PatternLen(int Index, char PatternCmd);
  105. virtual bool __fastcall PatternReplacement(int Index, const AnsiString & Pattern,
  106. AnsiString & Replacement, bool & Delimit);
  107. private:
  108. TCustomCommandData FData;
  109. AnsiString FPath;
  110. AnsiString FFileName;
  111. AnsiString FFileList;
  112. };
  113. //---------------------------------------------------------------------------
  114. typedef TFileCustomCommand TRemoteCustomCommand;
  115. //---------------------------------------------------------------------------
  116. #endif