Musterlösung zu Aufgabe 5 -- PersonsList.m2


IMPLEMENTATION MODULE PersonsList;
IMPORT Persons;
FROM StdIO IMPORT FILE;
FROM Storage IMPORT ALLOCATE;

TYPE 
     PersList = POINTER TO ListElement;
     ListElement = RECORD
		     person: Persons.PersDat;
		     next: PersList
                   END;


  PROCEDURE InitPersList(fromFile: FILE;
			 VAR persList: PersList): BOOLEAN;
   (* Separator is whiteSpace - 
    * no check !!!
    * FALSE, if error
    *)
  VAR 
	p: Persons.PersDat;
	pl: PersList;

  BEGIN
    persList := NIL;
    WHILE ( Persons.ReadRec(fromFile, p) )
    DO
	NEW(pl);
	IF pl = NIL THEN RETURN FALSE END;
	pl^.person := p;
	pl^.next := persList;
	persList := pl;
    END;
    RETURN TRUE;
  END InitPersList;

  PROCEDURE WritePersList(f: FILE; persList: PersList);

  (* writes the whole List to open stream f
   *)
  	VAR pl: PersList;
  BEGIN
	pl := persList;
	WHILE pl <> NIL DO
		Persons.WriteRec(f,pl^.person);
		pl := pl^.next;
	END;
  END WritePersList;

BEGIN
END PersonsList.

Musterlösung zu Aufgabe 5 || Übungen || Vorlesung || SS 97 || SAI

Franz Schweiggert, 13.06.1997