125 virtual void OnStart();
132 virtual void OnStop();
136 virtual bool WritePrompt();
141 virtual bool ReadAndProcessInput();
146 virtual bool ProcessInput(
int ch);
153 virtual bool EchoInput(
char ch);
161 virtual void OnCompletedLine();
165 virtual bool GetTerminalSize(
171 virtual void Broadcast(
180 PCLI & GetCLI()
const {
return m_cli; }
184 bool IsProcessingCommand()
const {
return m_state == e_ProcessingCommand; }
189 bool InternalMoveCursor(
bool left, PINDEX count);
190 bool InternalEchoCommandLine(PINDEX echoPosition, PINDEX moveLeftCount);
191 bool InternalMoveHistoryCommand(
int direction);
192 bool InternalWrite(
const char * str, PINDEX len, PINDEX & written);
196 PINDEX m_editPosition;
197 bool m_ignoreNextEOL;
199 PINDEX m_historyPosition;
229 Context & WriteUsage();
233 Context & WriteError(
242 Context & GetContext()
const {
return m_context; }
258 const char * prompt = NULL
278 bool runInBackground =
true
292 Context * StartContext(
294 bool autoDelete =
true,
295 bool runInBackground =
true
296 ) {
return StartContext(channel, channel, autoDelete, autoDelete, runInBackground); }
297 Context * StartContext(
300 bool autoDeleteRead =
true,
301 bool autoDeleteWrite =
true,
302 bool runInBackground =
true
308 virtual Context * StartForeground();
317 ) {
return Run(&channel, &channel,
false,
false); }
320 bool autoDelete =
true
321 ) {
return Run(channel, channel, autoDelete, autoDelete); }
325 bool autoDeleteRead =
true,
326 bool autoDeleteWrite =
true
336 ) {
return context != NULL && context->Run(); }
341 virtual Context * CreateContext();
346 virtual Context * AddContext(
347 Context * context = NULL
353 virtual void RemoveContext(
359 virtual void GarbageCollection();
368 virtual void OnReceivedLine(
384 virtual bool OnLogIn(
406 const char * command,
408 const char * help = NULL,
409 const char * usage = NULL,
410 const char * argSpec = NULL
416 const char * command,
419 const char * help = NULL,
426 const char * command,
427 const PVarType & value,
429 const PVarType & minValue,
430 const PVarType & maxValue,
431 const char * help = NULL,
435 template <
typename TYPE>
437 const char * command,
441 TYPE maxValue = INT_MAX,
442 const char * help = NULL,
446 return SetCommand(command, PRefVar<TYPE>(value), name, minValue, maxValue, help, notifier);
451 virtual void ShowHelp(
462 const PString & GetNewLine()
const {
return m_newLine; }
467 void SetNewLine(
const PString & newLine);
472 bool GetRequireEcho()
const {
return m_requireEcho; }
477 void SetRequireEcho(
bool requireEcho) { m_requireEcho = requireEcho; }
482 const PIntArray & GetEditCodes()
const {
return m_editCodes; }
487 void SetEditCodes(
const PIntArray & editCodes) { m_editCodes = editCodes; }
492 const PIntArray & GetEraseCodes()
const {
return m_eraseCodes; }
497 void SetEraseCodes(
const PIntArray & eraseCodes) { m_eraseCodes = eraseCodes; }
502 const PIntArray & GetLeftCodes()
const {
return m_leftCodes; }
507 void SetLeftCodes(
const PIntArray & leftCodes) { m_leftCodes = leftCodes; }
512 const PIntArray & GetRightCodes()
const {
return m_rightCodes; }
517 void SetRightCodes(
const PIntArray & rightCodes) { m_rightCodes = rightCodes; }
522 const PIntArray & GetBeginCodes()
const {
return m_beginCodes; }
527 void SetBeginCodes(
const PIntArray & beginCodes) { m_beginCodes = beginCodes; }
532 const PIntArray & GetEndCodes()
const {
return m_endCodes; }
537 void SetEndCodes(
const PIntArray & endCodes) { m_endCodes = endCodes; }
542 const PIntArray & GetPrevCmdCodes()
const {
return m_prevCmdCodes; }
547 void SetPrevCmdCodes(
const PIntArray & prevCmdCodes) { m_prevCmdCodes = prevCmdCodes; }
552 const PIntArray & GetNextCmdCodes()
const {
return m_nextCmdCodes; }
557 void SetNextCmdCodes(
const PIntArray & nextCmdCodes) { m_nextCmdCodes = nextCmdCodes; }
562 void SetAutoFillCodes(
const PIntArray & autoFillCodes) { m_autoFillCodes = autoFillCodes; }
567 const PIntArray & GetAutoFillCodes()
const {
return m_autoFillCodes; }
572 const PString & GetPrompt()
const {
return m_prompt; }
577 void SetPrompt(
const PString & prompt) { m_prompt = prompt; }
582 const PString & GetUsernamePrompt()
const {
return m_usernamePrompt; }
587 void SetUsernamePrompt(
const PString & prompt) { m_usernamePrompt = prompt; }
592 const PString & GetPasswordPrompt()
const {
return m_passwordPrompt; }
597 void SetPasswordPrompt(
const PString & prompt) { m_passwordPrompt = prompt; }
602 const PString & GetUsername()
const {
return m_username; }
607 void SetUsername(
const PString & username) { m_username = username; }
612 const PString & GetPassword()
const {
return m_password; }
617 void SetPassword(
const PString & password) { m_password = password; }
622 const PCaselessString & GetCommentCommand()
const {
return m_commentCommand; }
627 void SetCommentCommand(
const PCaselessString & commentCommand) { m_commentCommand = commentCommand; }
632 const PCaselessString & GetExitCommand()
const {
return m_exitCommand; }
637 void SetExitCommand(
const PCaselessString & exitCommand) { m_exitCommand = exitCommand; }
642 const PCaselessString & GetHelpCommand()
const {
return m_helpCommand; }
647 void SetHelpCommand(
const PCaselessString & helpCommand) { m_helpCommand = helpCommand; }
653 const PString & GetHelpOnHelp()
const {
return m_helpOnHelp; }
659 void SetHelpOnHelp(
const PCaselessString & helpOnHelp) { m_helpOnHelp = helpOnHelp; }
664 const PCaselessString & GetRepeatCommand()
const {
return m_repeatCommand; }
669 void SetRepeatCommand(
const PCaselessString & repeatCommand) { m_repeatCommand = repeatCommand; }
674 const PCaselessString & GetHistoryCommand()
const {
return m_historyCommand; }
679 void SetHistoryCommand(
const PCaselessString & historyCommand) { m_historyCommand = historyCommand; }
684 const PString & GetNoHistoryError()
const {
return m_noHistoryError; }
689 void SetNoHistoryError(
const PString & noHistoryError) { m_noHistoryError = noHistoryError; }
694 const PString & GetCommandUsagePrefix()
const {
return m_commandUsagePrefix; }
699 void SetCommandUsagePrefix(
const PString & commandUsagePrefix) { m_commandUsagePrefix = commandUsagePrefix; }
704 const PString & GetCommandErrorPrefix()
const {
return m_commandErrorPrefix; }
709 void SetCommandErrorPrefix(
const PString & commandErrorPrefix) { m_commandErrorPrefix = commandErrorPrefix; }
714 const PString & GetUnknownCommandError()
const {
return m_unknownCommandError; }
719 void SetUnknownCommandError(
const PString & unknownCommandError) { m_unknownCommandError = unknownCommandError; }
724 const PString & GetAmbiguousCommandError()
const {
return m_ambiguousCommandError; }
729 void SetAmbiguousCommandError(
const PString & ambiguousCommandError) { m_ambiguousCommandError = ambiguousCommandError; }
734 const PCaselessString & GetScriptCommand()
const {
return m_scriptCommand; }
739 void SetScriptCommand(
const PCaselessString & scriptCommand) { m_scriptCommand = scriptCommand; }
744 const PString & GetNoScriptError()
const {
return m_noScriptError; }
749 void SetNoScriptError(
const PString & noScriptError) { m_noScriptError = noScriptError; }
755 int GetPagerLines()
const {
return m_pagerLines; }
761 void SetPagerLines(
int lines) { m_pagerLines = lines; }
766 const PString & GetPageWaitPrompt()
const {
return m_pagerWaitPrompt; }
771 void SetPageWaitPrompt(
const PString & prompt) { m_pagerWaitPrompt = prompt; }
776 const PString & GetPagerCommand()
const {
return m_pagerCommand; }
781 void SetPagerCommand(
const PString & cmd) { m_pagerCommand = cmd; }
812 PString m_ambiguousCommandError;
819 virtual bool InternalPageWait(Context & context);
821 struct InternalCommand
823 InternalCommand(
const PNotifier & notifier,
const char * help,
const char * usage,
const char * argSpec,
const char * varName);
824 InternalCommand(
const InternalCommand & other);
826 bool IsMatch(
const PArgList & args,
bool partial =
false)
const;
827 bool operator<(
const InternalCommand & other)
const;
836 PVarType * m_variable;
837 PVarType * m_minimum;
838 PVarType * m_maximum;
840 typedef std::set<InternalCommand> Commands_t;
841 Commands_t m_commands;
842 bool InternalSetCommand(
const char * commands,
const InternalCommand & info);
844 virtual void OnSetBooleanCommand(Arguments & args,
const InternalCommand & cmd);
845 virtual void OnSetIntegerCommand(Arguments & args,
const InternalCommand & cmd);
847 typedef std::list<Context *> ContextList_t;
848 ContextList_t m_contextList;
855 class PCLIStandard :
public PCLI
863 const char * prompt = NULL
872 virtual Context * StartForeground();
882 ) {
return RunScript(&channel,
false); }
885 bool autoDelete =
true
895 class PCLISocket :
public PCLI
902 const char * prompt = NULL,
903 bool singleThreadForAll =
false
915 bool runInBackground =
true
930 virtual Context * AddContext(
931 Context * context = NULL
937 virtual void RemoveContext(
952 WORD GetPort()
const {
return m_listenSocket.GetPort(); }
957 bool HandleSingleThreadForAll();
958 bool HandleIncoming();
961 bool m_singleThreadForAll;
966 typedef std::map<PSocket *, Context *> ContextMap_t;
967 ContextMap_t m_contextBySocket;
976 class PCLITelnet :
public PCLISocket
983 const char * prompt = NULL,
984 bool singleThreadForAll =
false
1000 class PCLICurses :
public PCLI
1014 virtual Context * StartForeground();
1019 virtual Context * CreateContext();
1025 ) { rows = m_maxRows; cols = m_maxCols; }
1039 PCLICurses & m_owner;
1043 Window(PCLICurses & owner, Borders border);
1047 virtual PString GetName()
const {
return "CursesWindow"; }
1048 virtual PBoolean Write(
const void * data, PINDEX length);
1051 virtual bool FillChar(
1058 virtual void SetPosition(
1062 virtual void GetPosition(
1067 virtual void SetSize(
1070 Borders border = NumBorders
1072 virtual void GetSize(
1078 virtual void SetCursor(
1082 virtual void GetCursor(
1087 virtual void Refresh() = 0;
1088 virtual void Clear() = 0;
1089 virtual void Scroll(
int n = 1) = 0;
1091 virtual void SetFocus();
1092 bool HasFocus()
const {
return m_focus; }
1103 Borders border = NoBorder
1114 PINDEX GetWindowCount()
const {
return m_windows.GetSize(); }
1118 ) {
return dynamic_cast<Window *
>(m_windows.GetAt(idx)); }
1120 Window & operator[](PINDEX idx)
const {
return m_windows[idx]; }
1122 Window * GetFocusWindow()
const;
1124 virtual void Refresh();
1129 virtual bool InternalPageWait(Context & context);
1139 #endif // PTLIB_CLI_H
#define PCLASSINFO(cls, par)
Declare all the standard PTLib class information.
Definition: object.h:2164
Class specialisation for PNotifierTemplate<P_INT_PTR>
This is a channel that operates indirectly through another channel(s).
Definition: indchan.h:45
This class is a variation of a string that ignores case.
Definition: pstring.h:2012
This is an array collection class of PString objects.
Definition: pstring.h:2365
#define PDECLARE_MUTEX(...)
Definition: mutex.h:200
Abstract class defining I/O channel semantics.
Definition: channel.h:103
#define P_DECLARE_ENUM(name, first,...)
This declares a standard enumeration (enum) of symbols with ++ and – operators.
Definition: object.h:248
bool PBoolean
Definition: object.h:174
PNotifierTemplate< P_INT_PTR > PNotifier
Definition: notifier.h:145
The character string class.
Definition: pstring.h:108
A socket that uses the TCP transport on the Internet Protocol.
Definition: tcpsock.h:40
This class allows the parsing of a set of program arguments.
Definition: args.h:41
This class defines a thread of execution in the system.
Definition: thread.h:66
This is a list collection class of PString objects.
Definition: pstring.h:2562
static const PString & Empty()
Return an empty string.
This template class maps the PArrayObjects to a specific object type.
Definition: array.h:925
#define PDECLARE_NOTIFIER(notifierType, notifiee, func)
Declare PNotifier derived class with P_INT_PTR parameter. Uses PDECLARE_NOTIFIER_EXT macro...
Definition: notifier.h:202
Ultimate parent class for all objects in the class library.
Definition: object.h:2204