Command Parsing
How command parsing works
If the GetLine() function got your input by pressing ENTER, the shell manager attempts to do the following steps:
Splits the words of arguments
The first word is a command, and all words following it in a single command text are the series of arguments. These words then get split to arguments (without the switch indicator -switch) and switches (arguments that come after the dash) using the ProvidedArgumentsInfo class, though it does much more than that.
Variables for the provided arguments info class
This class contains these variables:
Command
Target command
ArgumentsText
Provided arguments and switches
ArgumentsList
Array of arguments without the switches
SwitchesList
Array of switches
RequiredArgumentsProvided
Checks to see if the arguments are provided or not
RequiredSwitchesProvided
Checks to see if the required switches are provided or not
RequiredSwitchArgumentsProvided
Checks to see if the required switch arguments are provided or not
Checks for redirection
The shell checks for these redirection flags:
>>
Redirects the output to a file, overwriting the target file
command >> target.txt
>>>
Redirects the output to a file, appending to the target file
command >>> target.txt
|SILENT|
Redirects the output to a null console driver, which means no output
command |SILENT|
If these flags are found, the shell sets the console driver as appropriate.
Checks the nature of the command
However, the command executor checks for these:
If the provided command is an MESH script, the shell invokes a script executor.
If the command is an external program found in the shell lookup path, which is usually
$PATH, the shell attempts to scan these directories for the program and execute it.If the command is an internal command, it creates a separate thread for the command and starts it.
Wrapped commands
The ExecuteCommandWrapped() function allows you to execute a command in wrapped mode from your commands that have the CommandFlags.Wrappable flag.
Command-line Arguments
The command-line arguments feature is backported from Nitrocid KS with more customization in place. This allows you to create a console application that handles arguments deeply, such as support for argument values.
To parse the arguments, you'll have to define a statically defined dictionary in a static class with a type of Dictionary<string, ArgumentInfo>, given that ArgumentInfo can be constructed with the following:
Argument
The argument name that users will have to write down
HelpDefinition
The description of the argument that will be shown in the help renderer
ArgArgumentInfo
An array of argument info instances that will modify its behavior
ArgumentBase
An argument executor instance that holds the actual code for the argument
Obsolete
Whether this argument is obsolete or not
Afterwards, you can use the ParseArguments() function somewhere in the main application code. You can find the relevant classes in the Terminaux.Shell.Arguments.Base namespace.
Command parameters class
The CommandParameters class contains information about the passed command parameters, such as the command text, the argument list, and more. Additionally, you can get the switch value or values, check if a switch is passed or not, and check to see if a switch's value is numeric using available functions in the class.
Special characters

If a command, such as wrap, is set to use the arguments string, you can escape special characters, as long as these characters are known. For example, if you want to pass a switch to a wrapped command, you can use the wrap command like this:
Last updated

