Einfügen eines Filters

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]

Filters.om
PROCEDURE InstallInputFilter(filter: CrPipes.Filter);
   VAR
      out, in: Streams.Stream;
BEGIN
   CrPipes.Open(out, in, Streams.onebuf);
   CrPipes.Spawn(filter, Streams.stdin, out);
   Streams.stdin := in;
END InstallInputFilter;

*Mit CrPipes.Open wird eine neue Pipeline erzeugt. Ausgaben, die auf out erfolgen, können danach von in gelesen werden. Allerdings funktioniert dies hier nur dann, wenn der Schreiber und der Leser verschiedene Koroutinen sind.
 
*Mit CrPipes.Spawn wird eine neue Koroutine erzeugt, die später den angegebenen Filter verwenden wird. Hier wird der Filter von Streams.stdin lesen und in das schreibende Ende der zuvor erzeugten Pipeline schreiben.
 
*Danach wird Streams.stdin auf das lesende Ende der Pipeline gesetzt. Damit werden alle Eingaben von Streams.stdin implizit gefiltert.
 
*Bei der Verwendung von CrPipes sind keine Koroutinen-Operationen mehr zu sehen und die Filter-Prozeduren können auch ganz normal enden.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]
Copyright © 2004, 2005 Andreas Borchert, in HTML konvertiert am 18.02.2005