Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Software-Projekte der Mitglieder (https://www.delphipraxis.net/26-software-projekte-der-mitglieder/)
-   -   Console input handler (https://www.delphipraxis.net/63005-console-input-handler.html)

Dust Signs 12. Feb 2006 16:39


Console input handler
 
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

Sebastian R. 12. Feb 2006 19:09

Re: Console input handler
 
Super Units, vielen Dank! :hello:

Dust Signs 12. Feb 2006 19:16

Re: Console input handler
 
Danke :). Wenigstens einer, der das nützlich findet ;)

Dust Signs

//EDIT: Das mit den "zusammenhängenden Parametern" ist nun auch implementiert ;)

Dust Signs 15. Feb 2006 12:48

Re: Console input handler
 
Neue Version, inklusive ausführlicher Dokumentation. Würde mich freuen, wenn das mehr Leute testen könnten ;)

Dust Signs


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:28 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz