{$if not def AP_LISTEN_H}
   
CONST
  AP_LISTEN_H = 0;

PROCEDURE NeuePList;
 BEGIN
   IF PList <> NIL THEN
   BEGIN
    Dispose(PList); 
    PList := NIL;
    New(PList);
    PList^.lh_head := NIL;
    PList^.lh_tail := NIL;
    PList^.lh_tailpred := NIL;
    NewList(PList);
  END ELSE PList := NIL;
END;

PROCEDURE NeuePerson(VAR p:p_Person; txt:STR);
{ Name in Zeiger p kopieren }
BEGIN
  p^.pn.ln_Name := PTR(AllocVec(Length(txt)+1,MEMF_ANY));
  CopyMem(PTR(txt),PTR(p^.pn.ln_Name),Length(txt)+1);
  AddTail(PList,p_Node(p));
END;
            
{-- Sucht den Eintrag mit der Nummer nr. Diese Prozedur ist  --
 -- dazu gedacht, den Eintrag, der im ListView-Gadget ange-  --
 -- klickt worden ist, ausfindig zu machen...                -- }
FUNCTION SucheNode(nr:INTEGER) : p_Person;
VAR
  n : p_Person;
BEGIN
  n := p_Person(plist^.lh_Head);
  WHILE nr > 0 DO
  BEGIN
    n := p_Person(n^.pn.ln_Succ);
    Dec(nr);
  END;
  SucheNode := n;
END;

{ -- Löscht den Knoten aus der Liste... -- }
PROCEDURE LöscheNode(VAR n:p_Person);
BEGIN
  FreeVec(PTR(n^.pn.ln_Name));
  Remove(p_Node(n));
  Dispose(n);
END;

{ ** Geändert 24.10.1995 Björn Schotte
  ** ---------------------------------
  **
  ** Nodes werden nun gemäß den RKRM-Bsp.
  ** korrekt entfernt.
  **}
PROCEDURE DeleteAllPersons;
VAR
  worknode,
  nextnode  : p_Person;
BEGIN
  worknode := p_Person(PList^.lh_head);
  nextnode := p_Person(worknode^.pn.ln_succ);
  WHILE nextnode<>NIL DO
  BEGIN
	 FreeVec(ptr(worknode^.pn.ln_name));
	 Remove(p_node(worknode));
	 Dispose(worknode);
	 worknode := nextnode;
    nextnode := p_Person(worknode^.pn.ln_succ);
  END;
  Dispose(PList);
{  FreeVec(PList);}
  PList := NIL;
END;

{$endif}
