Unit Shell

From Ultibo.org
Revision as of 05:15, 21 March 2017 by Ultibo (Talk | contribs)

Jump to: navigation, search

Return to Unit Reference


Description


Ultibo Generic Shell unit

To be documented

Constants



Shell specific constants SHELL_*
SHELL_LINE_END = Chr(13) + Chr(10); {CR LF}  
 
SHELL_DEFAULT_BANNER = 'Ultibo Core (Release: ' + ULTIBO_RELEASE_NAME + ' Version: ' + ULTIBO_RELEASE_VERSION + ' Date: ' + ULTIBO_RELEASE_DATE + ')';  
SHELL_DEFAULT_PROMPT = '>';  
SHELL_DEFAULT_ERROR = 'Huh?';  


Shell flag constants SHELL_FLAG_*
SHELL_FLAG_NONE = $00000000;  
SHELL_FLAG_CLEAR = $00000001;  
SHELL_FLAG_SIZE = $00000002;  
SHELL_FLAG_CURSOR = $00000004;  
SHELL_FLAG_COLORS = $00000008;  
SHELL_FLAG_COORDINATES = $00000010;  


Shell session flag constants SHELL_SESSION_FLAG_*
SHELL_SESSION_FLAG_NONE = $00000000;  


Shell command flag constants SHELL_COMMAND_FLAG_*
SHELL_COMMAND_FLAG_NONE = $00000000;  
SHELL_COMMAND_FLAG_HIDDEN = $00000001; Hidden command, do not show in HELP or INFO
SHELL_COMMAND_FLAG_HELP = $00000002; Command has HELP available
SHELL_COMMAND_FLAG_INFO = $00000004; Command has INFO available
SHELL_COMMAND_FLAG_DEFAULT = $00000008; Default command, pass unknown commands to this before showing error
SHELL_COMMAND_FLAG_EXTENDED = $00000008; Extended command, pass command name to command for extended handling


Shell alias flag constants SHELL_ALIAS_FLAG_*
SHELL_ALIAS_FLAG_NONE = $00000000;  
SHELL_ALIAS_FLAG_HIDDEN = $00000001; Hidden alias, do not show in HELP or INFO


Shell command constants SHELL_COMMAND_*
SHELL_COMMAND_HELP = 'HELP';  
SHELL_COMMAND_INFO = 'INFO';  
SHELL_COMMAND_VER = 'VER';  
SHELL_COMMAND_TIME = 'TIME';  
SHELL_COMMAND_CLS = 'CLS';  
SHELL_COMMAND_RESTART = 'RESTART';  
SHELL_COMMAND_SHUTDOWN = 'SHUTDOWN';  
SHELL_COMMAND_CPU = 'CPU';  
SHELL_COMMAND_UPTIME = 'UPTIME';  
SHELL_COMMAND_WORKER = 'WORKER';  
SHELL_COMMAND_THREAD = 'THREAD';  
SHELL_COMMAND_MEMORY = 'MEMORY';  
SHELL_COMMAND_DEVICE = 'DEVICE';  


Shell alias constants SHELL_ALIAS_*
SHELL_ALIAS_HELP = '?';  
SHELL_ALIAS_VERSION = 'VERSION';  
SHELL_ALIAS_CLEAR = 'CLEAR';  


Shell logging constants SHELL_LOG_*
SHELL_LOG_LEVEL_DEBUG = LOG_LEVEL_DEBUG; Shell debugging messages
SHELL_LOG_LEVEL_INFO = LOG_LEVEL_INFO; Shell informational messages
SHELL_LOG_LEVEL_ERROR = LOG_LEVEL_ERROR; Shell error messages
SHELL_LOG_LEVEL_NONE = LOG_LEVEL_NONE; No Shell messages


Type definitions


None defined

Class definitions



Shell manager

TShellManager = class(TObject)

public
constructor Create;  
destructor Destroy; override;  
private
FLock:TCriticalSectionHandle;  
 
FShells:TLinkedList;  
FCommands:TLinkedList;  
protected
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
public
function GetShell(APrevious:TShell; ALock,AUnlock:Boolean):TShell;  
function FindShell(const AName:String):TShell;  
 
function RegisterShell(AShell:TShell):Boolean;  
function DeregisterShell(AShell:TShell):Boolean;  
 
function GetCommand(APrevious:TShellCommand; ALock,AUnlock:Boolean):TShellCommand;  
function FindCommand(const AName:String):TShellCommand;  
function DefaultCommand:TShellCommand;  
 
function RegisterCommand(ACommand:TShellCommand):Boolean;  
function DeregisterCommand(ACommand:TShellCommand):Boolean;  

Shell

TShell = class(TListObject)

public
constructor Create;  
destructor Destroy; override;  
private
FManager:TShellManager;  
FAuthenticator:TAuthenticator;  
 
FLock:TCriticalSectionHandle;  
 
FSessions:TLinkedList;  
FCommands:TLinkedList;  
 
FBanner:String;  
FPrompt:String;  
FError:String;  
 
FName:String;  
FHash:LongWord;  
FFlags:LongWord;  
 
procedure SetAuthenticator(AAuthenticator:TAuthenticator);  
 
function GetBanner:String;  
procedure SetBanner(const ABanner:String);  
function GetPrompt:String;  
procedure SetPrompt(const APrompt:String);  
function GetError:String;  
procedure SetError(const AError:String);  
 
function GetName:String;  
procedure SetName(const AName:String);  
procedure SetFlags(AFlags:LongWord);  
protected
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
public
property Manager:TShellManager read FManager;  
property Authenticator:TAuthenticator read FAuthenticator write SetAuthenticator;  
 
property Banner:String read GetBanner write SetBanner;  
property Prompt:String read GetPrompt write SetPrompt;  
property Error:String read GetError write SetError;  
 
property Name:String read GetName write SetName;  
property Hash:LongWord read FHash;  
property Flags:LongWord read FFlags write SetFlags;  
 
function DoClear(ASession:TShellSession):Boolean; virtual;  
 
function DoBanner(ASession:TShellSession):Boolean; virtual;  
function DoPrompt(ASession:TShellSession):Boolean; virtual;  
function DoError(ASession:TShellSession):Boolean; virtual;  
 
function DoInput(ASession:TShellSession; var AInput:String):Boolean; virtual;  
 
function DoOutput(ASession:TShellSession; const AOutput:String):Boolean; virtual;  
function DoOutputEx(ASession:TShellSession; const AOutput:String; AReturn:Boolean):Boolean; virtual;  
 
function DoGetSize(ASession:TShellSession; var ARows,ACols:LongWord):Boolean; virtual;  
function DoSetSize(ASession:TShellSession; ARows,ACols:LongWord):Boolean; virtual;  
 
function DoGetCursor(ASession:TShellSession; var ARow,ACol:LongWord):Boolean; virtual;  
function DoSetCursor(ASession:TShellSession; ARow,ACol:LongWord):Boolean; virtual;  
 
function DoGetColors(ASession:TShellSession; var AForecolor,ABackcolor:LongWord):Boolean; virtual;  
function DoSetColors(ASession:TShellSession; AForecolor,ABackcolor:LongWord):Boolean; virtual;  
 
function DoGetCoordinates(ASession:TShellSession; var ARow,ACol:LongWord):Boolean; virtual;  
function DoSetCoordinates(ASession:TShellSession; ARow,ACol:LongWord):Boolean; virtual;  
 
function GetSession(APrevious:TShellSession; ALock,AUnlock:Boolean):TShellSession;  
function FindSession(AIdentifier:LongWord):TShellSession;  
 
function CreateSession(AIdentifier:LongWord):TShellSession;  
function DestroySession(ASession:TShellSession):Boolean;  
 
function RegisterSession(ASession:TShellSession):Boolean;  
function DeregisterSession(ASession:TShellSession):Boolean;  
 
function GetCommand(APrevious:TShellCommand; ALock,AUnlock:Boolean):TShellCommand;  
function FindCommand(const AName:String):TShellCommand;  
function DefaultCommand:TShellCommand;  
 
function RegisterCommand(ACommand:TShellCommand):Boolean;  
function DeregisterCommand(ACommand:TShellCommand):Boolean;  
 
function MatchCommand(const ACommand:String; var AContinue:Boolean):TShellCommand; virtual;  
function ProcessCommand(ASession:TShellSession; const ACommand:String):Boolean; virtual;  
 
function CommandName(const ACommand:String):String;  
function CommandSplit(const ACommand:String):TStrings;  
function CommandParse(const ACommand:String; var AName:String; var AParameters:TStrings):Boolean;  
function CommandIndex(AIndex:Integer; const ACommand:String):String;  
 
function ParameterIndex(AIndex:Integer; AParameters:TStrings):String;  
function ParameterValue(const AParameter:String; AParameters:TStrings):String;  
function ParameterExists(const AParameter:String; AParameters:TStrings):Boolean;  
 
function ParameterValueEx(const AParameter:String; AParameters:TStrings; APlus,AMinus:Boolean):String;  
function ParameterExistsEx(const AParameter:String; AParameters:TStrings; APlus,AMinus:Boolean):Boolean;  
 
function AddOutput(var AOutput:String; ACol:LongWord; const AValue:String):Boolean;  

Shell session

TShellSession = class(TListObject)

public
constructor Create(AShell:TShell; AIdentifier:LongWord);  
destructor Destroy; override;  
private
FShell:TShell;  
 
FLock:TCriticalSectionHandle;  
 
FIdentifier:LongWord; Unique identifier for this session
FFlags:LongWord;  
 
FPrompt:String; Current prompt for this session
 
FData:Pointer; Shell private data for this session
 
procedure SetFlags(AFlags:LongWord);  
procedure SetData(AData:Pointer);  
 
function GetPrompt:String;  
procedure SetPrompt(const APrompt:String);  
protected
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
public
property Shell:TShell read FShell;  
 
property Identifier:LongWord read FIdentifier;  
property Flags:LongWord read FFlags write SetFlags;  
 
property Prompt:String read GetPrompt write SetPrompt;  
 
property Data:Pointer read FData write SetData;  

Shell command

TShellCommand = class(TListObject)

public
constructor Create;  
destructor Destroy; override;  
private
FManager:TShellManager;  
 
FLock:TCriticalSectionHandle;  
 
FAliases:TLinkedList;  
 
FName:String;  
FHash:LongWord;  
FFlags:LongWord;  
 
function GetName:String;  
procedure SetName(const AName:String);  
procedure SetFlags(AFlags:LongWord);  
protected
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
public
property Manager:TShellManager read FManager;  
 
property Name:String read GetName write SetName;  
property Hash:LongWord read FHash;  
property Flags:LongWord read FFlags write SetFlags;  
 
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; virtual;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; virtual;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; virtual;  
function DoDefault(AShell:TShell; ASession:TShellSession; const AName:String; AParameters:TStrings):Boolean; virtual;  
function DoExtended(AShell:TShell; ASession:TShellSession; const AName:String; AParameters:TStrings):Boolean; virtual;  
 
function GetAlias(APrevious:TShellAlias; ALock,AUnlock:Boolean):TShellAlias;  
function FindAlias(const AName:String):TShellAlias;  
 
function RegisterAlias(AAlias:TShellAlias):Boolean;  
function DeregisterAlias(AAlias:TShellAlias):Boolean;  

Shell alias

TShellAlias = class(TListObject)

public
constructor Create;  
destructor Destroy; override;  
private
FLock:TCriticalSectionHandle;  
 
FName:String;  
FHash:LongWord;  
FFlags:LongWord;  
 
function GetName:String;  
procedure SetName(const AName:String);  
procedure SetFlags(AFlags:LongWord);  
protected
function AcquireLock:Boolean;  
function ReleaseLock:Boolean;  
public
property Name:String read GetName write SetName;  
property Hash:LongWord read FHash;  
property Flags:LongWord read FFlags write SetFlags;  

Shell command help

TShellCommandHelp = class(TShellCommand)

public
constructor Create;  
destructor Destroy; override;  
private
 
public
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  

Shell command information

TShellCommandInfo = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command version

TShellCommandVer = class(TShellCommand)

public
constructor Create;  
destructor Destroy; override;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command time

TShellCommandTime = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command clear

TShellCommandClear = class(TShellCommand)

public
constructor Create;  
destructor Destroy; override;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command restart

TShellCommandRestart = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command shutdown

TShellCommandShutdown = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command uptime

TShellCommandUptime = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command threads

TShellCommandThreads = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command memory

TShellCommandMemory = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  

Shell command devices

TShellCommandDevices = class(TShellCommand)

public
constructor Create;  
private
 
public
function DoHelp(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoInfo(AShell:TShell; ASession:TShellSession):Boolean; override;  
function DoCommand(AShell:TShell; ASession:TShellSession; AParameters:TStrings):Boolean; override;  


Public variables



Shell logging

SHELL_DEFAULT_LOG_LEVEL:LongWord = SHELL_LOG_LEVEL_DEBUG; Minimum level for Shell messages. Only messages with level greater than or equal to this will be printed.
SHELL_LOG_ENABLED:Boolean;


Function declarations



Initialization functions

procedure ShellInit;
Description: To be documented
Note None documented


Shell functions

function ShellGetShell(APrevious:TShell; ALock,AUnlock:Boolean):TShell;
Description: To be documented
Note None documented


function ShellFindShell(const AName:String):TShell;
Description: To be documented
Note None documented


function ShellRegisterShell(AShell:TShell):Boolean;
Description: To be documented
Note None documented


function ShellDeregisterShell(AShell:TShell):Boolean;
Description: To be documented
Note None documented


function ShellGetCommand(APrevious:TShellCommand; ALock,AUnlock:Boolean):TShellCommand;
Description: To be documented
Note None documented


function ShellFindCommand(const AName:String):TShellCommand;
Description: To be documented
Note None documented


function ShellRegisterCommand(ACommand:TShellCommand):Boolean;
Description: To be documented
Note None documented


function ShellDeregisterCommand(ACommand:TShellCommand):Boolean;
Description: To be documented
Note None documented


Shell helper functions

procedure ShellLog(Level:LongWord; const AText:String);
Description: To be documented
Note None documented


procedure ShellLogInfo(const AText:String);
Description: To be documented
Note None documented


procedure ShellLogError(const AText:String);
Description: To be documented
Note None documented


procedure ShellLogDebug(const AText:String);
Description: To be documented
Note None documented


Return to Unit Reference