(**********************************************************************

:Program.    Liste.def
:Contens.    Ein Biliotheksmodul für Listen. 
:Contens.    Nur für das Programm Rechtschreib zu gebrauchen.
:Author.     Bernd Braun
:Address.    Lippestr. 11, D-3300 Braunschweig
:Phone.      0531/845498
:Copyright.  Public Domain
:Language.   Modula-2
:Translator. M2Amiga A+L V3.32d
:Imports.    DynStr
:History.    V1.0 3.Okt.1990

***********************************************************************)

DEFINITION MODULE Liste;

   FROM DynStr IMPORT
      DynString;

   TYPE
      LList = POINTER TO Node;       (* Zeiger auf ein Knoten *)

      Node  = RECORD                 (* Knoten der Liste *)
                 Item  : DynString;
                 next  : LList;      (* Zeiger auf den nächsten Knoten *)
              END;

      ListHead = RECORD              (* Kopf der Liste *)
                    LL    : LList;   (* Die lineare Elementenliste *)
                    last  : LList    (* Zeiger auf das Listenende *)
                 END;

      List = POINTER TO ListHead;   (* Die Liste *)

   (* Initialisiert die Liste L *)
   PROCEDURE InitList ( VAR L  : List );

   (* Löscht alle Einträge der Liste L und sie selber. *)
   PROCEDURE ExitList ( VAR L : List );

   (* Fügt einen Dynstring an Ende der Liste L ein. *)
   PROCEDURE InsertList ( VAR L      : List;
                              DynStr : DynString );

   (* Sucht einen Dynstring in Liste L. Gibt bei Erfolg TRUE zurück,
      FALSE sonst. *)
   PROCEDURE MemberList ( L      : List;
                          DynStr : DynString ) : BOOLEAN;

   (* Gibt einen Zeiger auf den ersten Eintrag der Liste L zurück.
      Gibt in DynStr den Eintrag des ersten Elements zurück, falls L
      nicht leer. *)
   PROCEDURE FirstList (     L      : List;
                         VAR DynStr : DynString ) : LList;

   (* Gibt einen Zeiger auf den Nachfolger nach dem Eintrag vorg in Liste L 
      zurück. Gibt in DynStr den Eintrag im Nachfolger zurück, fals 
      Nachfolger vorhanden. Gibt es keinen Nachfolger wird NIL 
      als Prozedurresultat zurückgegeben. *)
   PROCEDURE NextList  (     L      : List;
                             vorg   : LList;
                         VAR DynStr : DynString ) : LList;

END Liste.
