home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
saveload.inc
< prev
next >
Wrap
Text File
|
1986-11-25
|
4KB
|
96 lines
{============================================================================}
{ Dieses Modul stellt Routinen zur Speicherung der in der 1. Folge vorgestel-
lten verketteten Listen zur Verfuegung. Die Prozedur 'einfuegen' ist neu
vormuliert worden, weil es sich anbietet, auch sie die neue Prozedur
'verketten' benutzen zu lassen. 'einfuegen' ist also im vorigen Programm
nicht mehr zu deklarieren, sondern an seine Stelle sind diese Prozeduren
zu schreiben. Im Hauptprogramm kann dann das Menue erweitert werden, z. B.
mit den Kommandos 'l' und 's'. }
{----------------------------------------------------------------------------}
PROCEDURE verketten (VAR liste, neuelem: zeiger);
{ Das Einfuegen eines Elementes in die Liste (verketten) wird sowohl bei der
Eingabe als auch beim Laden von Disk benoetigt, ist also gut als eigene
Prozedur geeignet. Uebergeben werden an diese Prozedur eine Liste und ein
Zeiger auf das einzufuegende Element, in dem die Information also schon
enthalten sein muss. }
VAR desiglast, designext, elem: zeiger;
BEGIN
suchlauf(liste, neuelem^.info.stichwort, desiglast, elem, designext);
IF elem = nil THEN { wenn Eintrag noch nicht vorhanden }
BEGIN
neuelem^.next := designext; { In beiden Richtungen in }
neuelem^.last := desiglast; { die Liste einketten }
desiglast^.next := neuelem;
designext^.last := neuelem;
END
ELSE
WriteLn('Eintrag schon vorhanden.')
END;
{----------------------------------------------------------------------------}
PROCEDURE einfuegen (VAR liste: zeiger; neukey: key);
{ Diese Prozedur generiert einen neuen Speicherplatz, liest die neue Infor-
mation, sucht die Position, an die der neue Eintrag gehoert und fuegt ihn
in die Liste ein. }
VAR neuelem, desiglast, designext: zeiger;
BEGIN
explicit_new(neuelem);
restinfo(neukey, neuelem^.info);
verketten(liste,neuelem)
END;
{----------------------------------------------------------------------------}
PROCEDURE save (liste: zeiger);
{ Die als Parameter uebergebene Liste wird in der Datei 'a:liste.seq' gespei-
chert. Der Dateiname kann selbstverstaendlich auch als Parameter ueber-
geben werden, zur Demonstration reicht es aber auch so. Die Folge
'assign(datei,name); rewrite(datei)' ist bei einigen Pascal-Dialekten zu
'rewrite(datei,name)' zusammengefasst. }
BEGIN
Assign(datei, 'A:liste.seq');
ReWrite(datei);
liste := liste^.next;
WHILE liste^.info.stichwort <> maxkey DO
BEGIN
Write(datei, liste^.info);
liste := liste^.next
END;
Close(datei) { je nach Dialekt: close(datei,lock) }
END;
{----------------------------------------------------------------------------}
PROCEDURE load (VAR liste: zeiger);
{ Das Gegenstueck zum Saven. Die Datei 'a:liste.seq' wird geladen und in der
uebergeben Liste gespeichert. Auch hier kann eine Uebergabe des Dateinamens
als Parameter sinnvoll sein. Um keine Heap-Adressen brach liegen zu lassen,
sollte die Liste entweder ungenutzt sein oder vorher geloescht werden, da
sie neu initialisiert wird. }
VAR elem: zeiger;
BEGIN
Assign(datei, 'A:liste.seq');
Reset(datei);
init(liste);
WHILE NOT (Eof(datei)) DO
BEGIN
explicit_new(elem);
Read(datei, elem^.info);
verketten(liste,elem)
END;
Close(datei)
END;