26DOX_MARKER( [DOX_EXPR_TUT_CLI_FWDDECL])
29DOX_MARKER( [DOX_EXPR_TUT_CLI_FWDDECL])
32#include "ALib.Lang.CIFunctions.H"
34DOX_MARKER( [DOX_EXPR_TUT_CLI_MAIN])
35int main(
int argc,
const char **argv )
48 Enum result= ExitCodes::ErrInternalError;
59 buffer.
AddMarked( SAMPLE_CAMP.GetResource(
"AppInfo" ),
67 cli.Init( &SAMPLE_CAMP );
82 if(
cli.OptionArgsIgnored.size() )
84 result= ExitCodes::ErrUnknownOption;
85 std::cerr <<
"Error: Unknown option given \""
86 <<
cli.OptionArgsIgnored.front()
92 result= processCLI(
cli );
98 std::cerr << e.
Format() << std::endl;
102 catch(std::runtime_error& e)
104 result= ExitCodes::ErrInternalError;
105 std::cerr <<
"A runtime error occurred: " << e.what()<< std::endl;
113DOX_MARKER( [DOX_EXPR_TUT_CLI_MAIN])
117DOX_MARKER( [DOX_EXPR_TUT_CLI_PROCESS])
124 format <<
"yyyy-MM-dd HH:mm:ss";
134 option=
cli.GetOption( Options::Help);
139 std::cerr <<
"Error: Unknown help Topic \""
142 <<
"Usage Information follows: " << std::endl << std::endl;
143 option->
Args.Clear();
147 std::cout << helpText.
Buffer << std::endl;
148 return ExitCodes::OK;
152 cli.ReadNextCommands();
153 if(
cli.CommandsParsed.size() == 0 )
156 if(
cli.ArgsLeft.size() > 0 )
158 std::cerr <<
"Error: Unknown command given \""
159 <<
cli.ArgStrings.at(std::size_t(*
cli.ArgsLeft.begin()))
160 <<
"\"" << std::endl;
161 return ExitCodes::ErrUnknownCommand; w
168 std::cout << printBuffer << std::endl;
170 return ExitCodes::OK;
177 while ( (actCmd=
cli.NextCommand()) !=
nullptr )
181 if ( actCmdCode == Commands::Now )
186 else if ( actCmdCode == Commands::File )
191 std::cerr <<
"Error: no filename given with command 'file'" << std::endl;
194 return ExitCodes::ErrMissingFilename;
199 std::filesystem::path path( name.Terminate() );
200 dt.
Import( std::chrono::clock_cast<std::chrono::system_clock>(
201 std::filesystem::last_write_time( path ) ) ) ;
204 else if ( actCmdCode == Commands::Help ) {
206 std::cerr <<
"Error: Unknown help topic" << std::endl;
209 return ExitCodes::ErrUnknownHelpTopic;
211 std::cout << helpText.
Buffer << std::endl;
219 std::cout << printBuffer << std::endl;
221 return ExitCodes::OK;
223DOX_MARKER( [DOX_EXPR_TUT_CLI_PROCESS])
#define ALIB_LOCK_RECURSIVE_WITH(lock)
static bool GetHelp(CommandLine &cmdLine, const String &topics, Paragraphs &text)
static AString GetCommandUsageFormat(CommandLine &cmdLine, CommandDecl &commandDecl)
const Enum & Element() const
AString & Format(AString &target) const
AString & Format(Substring format, AString &target, lang::CurrentData targetData=lang::CurrentData::Keep) const
void Import(TTimePoint timePoint)
Options
Built-in options used with class #"AppCli".
ExitCodes
Built-in exit-code used with class #"AppCli".
Commands
Built-in commands used with class #"AppCli".
Parameters
Built-in parameters of commands and options used with class #"AppCli".
@ Keep
Chooses not no clear existing data.
ListMA< camp::Camp * > CAMPS
void BootstrapAddDefaultCamps()
void Bootstrap(BootstrapPhases targetPhase, camp::Camp *targetCamp, int alibVersion, int alibRevision, TCompilationFlags compilationFlags)
LocalString< 64 > String64
Type alias name for #"TLocalString;TLocalString<character,64>".
cli::CommandLine CommandLine
Type alias in namespace alib.
LocalString< 4096 > String4K
Type alias name for #"TLocalString;TLocalString<character,4096>".
strings::TString< character > String
Type alias in namespace alib.
exceptions::Exception Exception
Type alias in namespace alib.
strings::util::CalendarDateTime CalendarDateTime
Type alias in namespace alib.
strings::TAString< character, lang::HeapAllocator > AString
Type alias in namespace alib.
format::Paragraphs Paragraphs
Type alias in namespace alib.
time::DateTime DateTime
Type alias in namespace alib.
boxing::Enum Enum
Type alias in namespace alib.
TIntegral Integral() const
A command of a ALib CLI command-line.
CommandDecl * Declaration
The underlying declaration.
ListMA< Parameter *, Recycling::Shared > ParametersMandatory
Mandatory parameters parsed.
ListMA< String, Recycling::Shared > Args
Arguments belonging to this option.