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.
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45:
| 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); input_handler.RegisterCommandHandler(ExitCommandHandler); input_handler.RegisterCommandHandler(AboutCommandHandler); input_handler.RegisterCommandHandler(StateCommandHandler); input_handler.RegisterCommandHandler(ReverseEchoCommandHandler);
while true do begin ReadLn(input); if not console_handler.Execute(input) then break; 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:
www.users.fh-sbg.ac....le%20Input%20Handler
Direktdownload:
www.users.fh-sbg.ac....%20Source/ds_cih.zip (Quellcode, Demo und Doku; 51 KB)
AXMD
PS.
Crossposting DP