| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 | //---------------------------------------------------------------------------#ifndef ScriptH#define ScriptH//---------------------------------------------------------------------------#include <time.h>#include "Option.h"#include "Terminal.h"#include "FileOperationProgress.h"//---------------------------------------------------------------------------class TTerminal;class TScript;class TScriptCommands;class TStoredSessionList;class TTerminalList;//---------------------------------------------------------------------------class TScriptProgress{public:  TFileOperation Operation;  TOperationSide Side;  UnicodeString FileName;  UnicodeString Directory;  unsigned int OverallProgress;  unsigned int FileProgress;  unsigned int CPS;  bool Cancel;};//---------------------------------------------------------------------------typedef void __fastcall (__closure *TScriptPrintEvent)(TScript * Script, const UnicodeString Str, bool Error);typedef void __fastcall (__closure *TScriptSynchronizeStartStop)(TScript * Script,  const UnicodeString LocalDirectory, const UnicodeString RemoteDirectory,  const TCopyParamType & CopyParam, int SynchronizeParams);typedef void __fastcall (__closure *TScriptProgressEvent)(TScript * Script, TScriptProgress & Progress);//---------------------------------------------------------------------------class TScriptProcParams : public TOptions{public:  __fastcall TScriptProcParams(const UnicodeString & FullCommand, const UnicodeString & ParamsStr);  __property UnicodeString ParamsStr = { read = FParamsStr };  __property UnicodeString FullCommand = { read = FFullCommand };private:  UnicodeString FParamsStr;  UnicodeString FFullCommand;};//---------------------------------------------------------------------------class TScript{public:  enum TBatchMode { BatchOff, BatchOn, BatchAbort, BatchContinue };  __fastcall TScript(bool LimitedOutput);  virtual __fastcall ~TScript();  void __fastcall Command(UnicodeString Cmd);  void __fastcall Log(TLogLineType Type, const UnicodeString & Str, TTerminal * ATerminal = NULL);  void __fastcall PrintLine(const UnicodeString Str, bool Error = false, TTerminal * ATerminal = NULL);  void __fastcall StartInteractive();  void __fastcall Synchronize(const UnicodeString LocalDirectory,    const UnicodeString RemoteDirectory, const TCopyParamType & CopyParam,    int SynchronizeParams, TSynchronizeChecklist ** Checklist);  static void __fastcall RequireParams(TScriptProcParams * Parameters, int MinParams);  __property TScriptPrintEvent OnPrint = { read = FOnPrint, write = FOnPrint };  __property TExtendedExceptionEvent OnShowExtendedException = { read = FOnShowExtendedException, write = FOnShowExtendedException };  __property TSynchronizeDirectory OnTerminalSynchronizeDirectory = { read = FOnTerminalSynchronizeDirectory, write = FOnTerminalSynchronizeDirectory };  __property TScriptSynchronizeStartStop OnSynchronizeStartStop = { read = FOnSynchronizeStartStop, write = FOnSynchronizeStartStop };  __property TScriptProgressEvent OnProgress = { read = FOnProgress, write = FOnProgress };  __property TCopyParamType CopyParam = { read = FCopyParam, write = SetCopyParam };  __property int SynchronizeParams = { read = FSynchronizeParams, write = SetSynchronizeParams };  __property TBatchMode Batch = { read = FBatch };  __property TTerminal * Terminal = { read = FTerminal };  __property bool Groups = { read = FGroups, write = FGroups };  __property bool WantsProgress = { read = FWantsProgress, write = FWantsProgress };  __property bool Interactive = { read = FInteractive, write = FInteractive };  __property TTransferOutEvent OnTransferOut = { read = FOnTransferOut, write = FOnTransferOut };  __property TTransferInEvent OnTransferIn = { read = FOnTransferIn, write = FOnTransferIn };protected:  TTerminal * FTerminal;  TTerminal * FLoggingTerminal;  TScriptCommands * FCommands;  TScriptPrintEvent FOnPrint;  TExtendedExceptionEvent FOnShowExtendedException;  TSynchronizeDirectory FOnTerminalSynchronizeDirectory;  TScriptSynchronizeStartStop FOnSynchronizeStartStop;  TScriptProgressEvent FOnProgress;  TCopyParamType FCopyParam;  bool FIncludeFileMaskOptionUsed;  TBatchMode FBatch;  TBatchMode FInteractiveBatch;  bool FConfirm;  bool FInteractiveConfirm;  bool FEcho;  bool FFailOnNoMatch;  int FSynchronizeParams;  int FSynchronizeMode;  bool FKeepingUpToDate;  UnicodeString FSynchronizeIntro;  bool FLimitedOutput;  int FSessionReopenTimeout;  int FInteractiveSessionReopenTimeout;  bool FGroups;  bool FWantsProgress;  bool FInteractive;  TTransferOutEvent FOnTransferOut;  TTransferInEvent FOnTransferIn;  TStrings * FPendingLogLines;  bool FWarnNonDefaultCopyParam;  bool FWarnNonDefaultSynchronizeParams;  virtual void __fastcall ResetTransfer();  virtual void __fastcall ConnectTerminal(TTerminal * ATerminal);  bool __fastcall EnsureCommandSessionFallback(    TFSCapability Capability, TSessionAction * Action);  void __fastcall Print(const UnicodeString Str, bool Error = false);  void __fastcall CheckSession();  void __fastcall CheckParams(TScriptProcParams * Parameters);  void __fastcall CopyParamParams(TCopyParamType & CopyParam, TScriptProcParams * Parameters);  void __fastcall TransferParamParams(int & Params, TScriptProcParams * Parameters);  enum TFileListType  {    fltDefault =     0x00,    fltDirectories = 0x01,    fltQueryServer = 0x02,    fltMask =        0x04,    fltLatest =      0x08,    fltOnlyFile =    0x10,  };  TStrings * __fastcall CreateFileList(TScriptProcParams * Parameters, int Start,    int End, TFileListType ListType = fltDefault);  TStrings * __fastcall CreateLocalFileList(TScriptProcParams * Parameters,    int Start, int End, TFileListType ListType);  void __fastcall FreeFiles(TStrings * FileList);  void __fastcall FreeFileList(TStrings * FileList);  void __fastcall LogPendingLines(TTerminal * ATerminal);  void __fastcall HelpProc(TScriptProcParams * Parameters);  void __fastcall CallProc(TScriptProcParams * Parameters);  void __fastcall PwdProc(TScriptProcParams * Parameters);  void __fastcall CdProc(TScriptProcParams * Parameters);  void __fastcall LsProc(TScriptProcParams * Parameters);  void __fastcall RmProc(TScriptProcParams * Parameters);  void __fastcall RmDirProc(TScriptProcParams * Parameters);  void __fastcall MvProc(TScriptProcParams * Parameters);  void __fastcall CpProc(TScriptProcParams * Parameters);  void __fastcall ChModProc(TScriptProcParams * Parameters);  void __fastcall LnProc(TScriptProcParams * Parameters);  void __fastcall MkDirProc(TScriptProcParams * Parameters);  void __fastcall GetProc(TScriptProcParams * Parameters);  void __fastcall PutProc(TScriptProcParams * Parameters);  void __fastcall OptionProc(TScriptProcParams * Parameters);  void __fastcall AsciiProc(TScriptProcParams * Parameters);  void __fastcall BinaryProc(TScriptProcParams * Parameters);  void __fastcall SynchronizeProc(TScriptProcParams * Parameters);  void __fastcall KeepUpToDateProc(TScriptProcParams * Parameters);  void __fastcall EchoProc(TScriptProcParams * Parameters);  void __fastcall StatProc(TScriptProcParams * Parameters);  void __fastcall ChecksumProc(TScriptProcParams * Parameters);  void __fastcall OptionImpl(UnicodeString OptionName, UnicodeString ValueName);  void __fastcall SynchronizeDirectories(TScriptProcParams * Parameters,    UnicodeString & LocalDirectory, UnicodeString & RemoteDirectory, int FirstParam);  virtual bool __fastcall HandleExtendedException(Exception * E,    TTerminal * Terminal = NULL);  void __fastcall TerminalCaptureLog(const UnicodeString & AddedLine, TCaptureOutputType OutputType);  virtual UnicodeString __fastcall GetLogCmd(const UnicodeString & FullCommand,    const UnicodeString & Command, const UnicodeString & Params);  void __fastcall SynchronizePreview(    UnicodeString LocalDirectory, UnicodeString RemoteDirectory,    TSynchronizeChecklist * Checklist);  UnicodeString __fastcall SynchronizeFileRecord(    const UnicodeString & RootDirectory, const TSynchronizeChecklist::TItem * Item,    bool Local);  UnicodeString __fastcall ListingSysErrorMessage();  void __fastcall NoMatch(const UnicodeString & Mask, const UnicodeString & Error);  void __fastcall NoMatch(const UnicodeString & Message);private:  void __fastcall Init();  void __fastcall SetCopyParam(const TCopyParamType & value);  void __fastcall SetSynchronizeParams(int value);  TTransferMode __fastcall ParseTransferModeName(UnicodeString Name);  inline bool __fastcall IsTerminalLogging(TTerminal * ATerminal);  void __fastcall CheckDefaultCopyParam();  bool __fastcall HasNonDefaultCopyParams();  void __fastcall CheckDefaultSynchronizeParams();  void __fastcall CheckMultiFilesToOne(TStrings * FileList, const UnicodeString & Target, bool Unix);  void __fastcall LogOption(const UnicodeString & LogStr);  void __fastcall DoMvOrCp(TScriptProcParams * Parameters, TFSCapability Capability, bool Cp);  void __fastcall DoCalculatedChecksum(    const UnicodeString & FileName, const UnicodeString & Alg, const UnicodeString & Hash);};//---------------------------------------------------------------------------typedef void __fastcall (__closure *TScriptInputEvent)(TScript * Script, const UnicodeString Prompt, UnicodeString & Str);typedef void __fastcall (__closure *TScriptQueryCancelEvent)(TScript * Script, bool & Cancel);typedef void __fastcall (__closure *TScriptPrintProgressEvent)(TScript * Script, bool First, const UnicodeString Str);//---------------------------------------------------------------------------class TManagementScript : public TScript{public:  __fastcall TManagementScript(TStoredSessionList * StoredSessions, bool LimitedOutput);  virtual __fastcall ~TManagementScript();  void __fastcall Connect(const UnicodeString Session, TOptions * Options, bool CheckParams);  void __fastcall ReflectSettings();  void __fastcall MaskPasswordInCommandLine(UnicodeString & Command, bool Recurse);  __property TScriptInputEvent OnInput = { read = FOnInput, write = FOnInput };  __property TScriptQueryCancelEvent OnQueryCancel = { read = FOnQueryCancel, write = FOnQueryCancel };  __property TPromptUserEvent OnTerminalPromptUser = { read = FOnTerminalPromptUser, write = FOnTerminalPromptUser };  __property TQueryUserEvent OnTerminalQueryUser = { read = FOnTerminalQueryUser, write = FOnTerminalQueryUser };  __property TScriptPrintProgressEvent OnPrintProgress = { read = FOnPrintProgress, write = FOnPrintProgress };  __property bool Continue = { read = FContinue };protected:  TScriptInputEvent FOnInput;  TScriptQueryCancelEvent FOnQueryCancel;  TPromptUserEvent FOnTerminalPromptUser;  TQueryUserEvent FOnTerminalQueryUser;  TScriptPrintProgressEvent FOnPrintProgress;  TStoredSessionList * FStoredSessions;  TTerminalList * FTerminalList;  UnicodeString FLastProgressFile;  UnicodeString FLastProgressMessage;  time_t FLastProgressTime;  time_t FLastProgressEventTime;  UnicodeString FLastProgressEventDoneFileName;  bool FLastProgressOverallDone;  bool FContinue;  virtual void __fastcall ResetTransfer();  void __fastcall Input(const UnicodeString Prompt, UnicodeString & Str, bool AllowEmpty);  void __fastcall TerminalInformation(    TTerminal * Terminal, const UnicodeString & Str, bool Status, int Phase, const UnicodeString & Additional);  void __fastcall TerminalOperationProgress(TFileOperationProgressType & ProgressData);  void __fastcall TerminalOperationFinished(TFileOperation Operation, TOperationSide Side,    bool Temp, const UnicodeString & FileName, Boolean Success,    TOnceDoneOperation & OnceDoneOperation);  void __fastcall PrintActiveSession();  TTerminal * __fastcall FindSession(const UnicodeString Index);  void __fastcall FreeTerminal(TTerminal * Terminal);  void __fastcall PrintProgress(bool First, const UnicodeString Str);  bool __fastcall QueryCancel();  void __fastcall TerminalSynchronizeDirectory(    const UnicodeString & LocalDirectory, const UnicodeString & RemoteDirectory,    bool & Continue, bool Collect, const TSynchronizeOptions * Options);  void __fastcall DoChangeLocalDirectory(UnicodeString Directory);  void __fastcall DoClose(TTerminal * Terminal);  virtual bool __fastcall HandleExtendedException(Exception * E,    TTerminal * Terminal = NULL);  void __fastcall TerminalPromptUser(TTerminal * Terminal, TPromptKind Kind,    UnicodeString Name, UnicodeString Instructions, TStrings * Prompts,    TStrings * Results, bool & Result, void * Arg);  void __fastcall TerminalInitializeLog(TObject * Sender);  inline bool __fastcall Synchronizing();  inline void __fastcall ShowPendingProgress();  virtual UnicodeString __fastcall GetLogCmd(const UnicodeString & FullCommand,    const UnicodeString & Command, const UnicodeString & Params);  UnicodeString __fastcall MaskPasswordInCommand(const UnicodeString & FullCommand,    const UnicodeString & Command);  void __fastcall ExitProc(TScriptProcParams * Parameters);  void __fastcall OpenProc(TScriptProcParams * Parameters);  void __fastcall CloseProc(TScriptProcParams * Parameters);  void __fastcall SessionProc(TScriptProcParams * Parameters);  void __fastcall LPwdProc(TScriptProcParams * Parameters);  void __fastcall LCdProc(TScriptProcParams * Parameters);  void __fastcall LLsProc(TScriptProcParams * Parameters);};//---------------------------------------------------------------------------#endif
 |