Hi!
Hab mir gedacht, dass diese Units vielleicht einigen nützlich sein könnten, wenn ihr ein Programm schreiben möchtet, das Shell-ähnliche Funktionalitäten benötigt. Bei diesen Units handelt es sich um eine Sammlung von Objekten, die - sofern man Sie richtig verknüpft - einem eine Menge Arbeit abnehmen können. Hier erstmal der
Code der Demo (damit ihr seht, wie wenig man eigentlich schreiben muss, um diese Funktionalität zu haben), die bereits "exit", "echo", "about" und "cd" (im Sinne von irgendwohin wechseln - muss hier kein Verzeichnis sein) unterstützt - den Downlaodlink findet ihr weiter unten.
Delphi-Quellcode:
program console;
{$APPTYPE CONSOLE}
uses
coninp_h in 'coninp_h.pas',
coninph2 in 'coninph2.pas',
coninp_p in 'coninp_p.pas',
console_h in 'console_h.pas',
SysUtils;
var
console_handler: TPrintableConsoleHandler;
parser: TAdvancedConsoleInputParser;
input_handler: TConsoleInputHandler;
input: String;
begin
WriteLn('Console input handler demo - (c) by Dust Signs Andreas Unterweger 2006');
WriteLn('======================================================================');
WriteLn;
parser := TAdvancedConsoleInputParser.Create;
input_handler := TConsoleInputHandler.Create;
console_handler := TPrintableConsoleHandler.Create(parser, input_handler, 'nowhere');
input_handler.RegisterCommandHandler(EchoCommandHandler); //Register command handlers
input_handler.RegisterCommandHandler(ExitCommandHandler);
input_handler.RegisterCommandHandler(AboutCommandHandler);
input_handler.RegisterCommandHandler(StateCommandHandler);
input_handler.RegisterCommandHandler(ReverseEchoCommandHandler);
while true do begin //Endless loop
ReadLn(input);
if not console_handler.Execute(input) then
break; //Break if Execute returns false (HR_REQUIRES_EXIT)
end;
FreeAndNil(console_handler);
FreeAndNil(input_handler);
FreeAndNil(parser);
end.
Das Prinzip ist eigentlich sehr einfach: der TConsoleInputHandler parst die Eingabe und prüft anhand sogen. CommandHandler (Objekte, die über Überprüfungs- und Ausführfunktionen verfügen (vgl. dazu auch coninph2.pas)), ob er den geparsten Befehl ausführen kann. Kann er das, wird der Befehl ausgeführt und gibt einen Status zurück, der ausgewertet werden kann. Die TConsoleInputHeader-Klasse wie auch der Parser sind an einigen Stellen ableitbar, d.h. in Form von Kindklassen erweiterbar. Weitere Informationen findet ihr in der ausführlichen Dokumentation unten im Download. Ich werde hier nicht alle Units posten - das wäre zu unübersichtlich.
Downloadseite:
http://www.users.fh-sbg.ac.at/~aunte...nput%20Handler
Direktdownload:
http://www.users.fh-sbg.ac.at/~aunte...rce/ds_cih.zip (Quellcode, Demo und Doku; 51 KB)
Dust Signs
PS.
Crossposting DF
//EDIT: Neue Version
//EDIT: Dokumentation fertig => Beschreibung aktualisiert und anstatt den Anhängen Downloadlinks angegeben