Textfenster II

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

logviewer.pl
sub update_log {
   my ($logwin, $log) = @_;
   my $line = <$log>;
   if (defined $line) {
      $logwin->insert('end', $line);
      $logwin->see('end');
   } else {
      $logwin->fileevent($log, 'readable', undef);
   }
}

*update_log wird immer dann aufgerufen, wenn es etwas (frisch!) zum Einlesen gibt. Die Lösung ist hier naiv und nimmt an, daß es sich jeweils um eine Zeile handelt. Besser wäre hier ein nicht-blockierendes Lesen unter der Verwendung von sysread.
 
*Wenn das Einlesen erfolgreich war, wird die Zeile an das Ende des Textfensters $logwin angefügt. Statt 'end' wären auch beliebige andere Positionierungen denkbar.
 
*Mit $logwin->see('end') wird sichergestellt, daß das Ende zu sehen ist, falls der gesamte Text nicht mehr vollständig dargestellt werden kann.
 
*Sollte das Ende der Eingabe erreicht sein (z.B. weil tail von jemanden abgeschossen wird), dann ist darauf zu achten, daß die Bearbeitung dieser Ereignisse rückgängig gemacht wird -- sonst hätten wir eine CPU-fressende Dauerschleife, da das Ereignis sofort wieder eintreffen würde.
 

 [Vorheriges Kapitel]  [Vorherige Seite]  [Inhaltsverzeichnis]  [Nächste Seite]  [Nächstes Kapitel]
Copyright © 1996, 1998, 1999, 2000 Andreas Borchert, in HTML konvertiert am 07.02.2000