home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / sonderh1 / saveload.inc < prev    next >
Text File  |  1986-11-25  |  4KB  |  96 lines

  1. {============================================================================}
  2. { Dieses Modul stellt Routinen zur Speicherung der in der 1. Folge vorgestel-
  3.   lten verketteten Listen zur Verfuegung. Die Prozedur 'einfuegen' ist neu
  4.   vormuliert worden, weil es sich anbietet, auch sie die neue Prozedur
  5.   'verketten' benutzen zu lassen. 'einfuegen' ist also im vorigen Programm
  6.   nicht mehr zu deklarieren, sondern an seine Stelle sind diese Prozeduren
  7.   zu schreiben. Im Hauptprogramm kann dann das Menue erweitert werden, z. B.
  8.   mit den Kommandos 'l' und 's'.                                             }
  9. {----------------------------------------------------------------------------}
  10.  
  11. PROCEDURE verketten (VAR liste, neuelem: zeiger);
  12.  
  13. { Das Einfuegen eines Elementes in die Liste (verketten) wird sowohl bei der
  14.   Eingabe als auch beim Laden von Disk benoetigt, ist also gut als eigene
  15.   Prozedur geeignet. Uebergeben werden an diese Prozedur eine Liste und ein
  16.   Zeiger auf das einzufuegende Element, in dem die Information also schon
  17.   enthalten sein muss. }
  18.  
  19. VAR desiglast, designext, elem: zeiger;
  20.  
  21. BEGIN
  22.   suchlauf(liste, neuelem^.info.stichwort, desiglast, elem, designext);
  23.   IF elem = nil THEN                     { wenn Eintrag noch nicht vorhanden }
  24.   BEGIN
  25.     neuelem^.next := designext;                    { In beiden Richtungen in }
  26.     neuelem^.last := desiglast;                    {     die Liste einketten }
  27.     desiglast^.next := neuelem;
  28.     designext^.last := neuelem;
  29.   END
  30.   ELSE
  31.     WriteLn('Eintrag schon vorhanden.')
  32. END;
  33.  
  34. {----------------------------------------------------------------------------}
  35.  
  36. PROCEDURE einfuegen (VAR liste: zeiger; neukey: key);
  37.  
  38. { Diese Prozedur generiert einen neuen Speicherplatz, liest die neue Infor-
  39.   mation, sucht die Position, an die der neue Eintrag gehoert und fuegt ihn
  40.   in die Liste ein. }
  41.  
  42. VAR neuelem, desiglast, designext: zeiger;
  43.  
  44. BEGIN
  45.   explicit_new(neuelem);
  46.   restinfo(neukey, neuelem^.info);
  47.   verketten(liste,neuelem)
  48. END;
  49.  
  50. {----------------------------------------------------------------------------}
  51.  
  52. PROCEDURE save (liste: zeiger);
  53.  
  54. { Die als Parameter uebergebene Liste wird in der Datei 'a:liste.seq' gespei-
  55.   chert. Der Dateiname kann selbstverstaendlich auch als Parameter ueber-
  56.   geben werden, zur Demonstration reicht es aber auch so. Die Folge
  57.   'assign(datei,name); rewrite(datei)' ist bei einigen Pascal-Dialekten zu
  58.   'rewrite(datei,name)' zusammengefasst.                                     }
  59.  
  60. BEGIN
  61.   Assign(datei, 'A:liste.seq');
  62.   ReWrite(datei);
  63.   liste := liste^.next;
  64.   WHILE liste^.info.stichwort <> maxkey DO
  65.   BEGIN
  66.     Write(datei, liste^.info);
  67.     liste := liste^.next
  68.   END;
  69.   Close(datei)                         { je nach Dialekt: close(datei,lock) }
  70. END;
  71.  
  72. {----------------------------------------------------------------------------}
  73.  
  74. PROCEDURE load (VAR liste: zeiger);
  75.  
  76. { Das Gegenstueck zum Saven. Die Datei 'a:liste.seq' wird geladen und in der
  77.   uebergeben Liste gespeichert. Auch hier kann eine Uebergabe des Dateinamens
  78.   als Parameter sinnvoll sein. Um keine Heap-Adressen brach liegen zu lassen,
  79.   sollte die Liste entweder ungenutzt sein oder vorher geloescht werden, da
  80.   sie neu initialisiert wird.                                                }
  81.  
  82. VAR elem: zeiger;
  83.  
  84. BEGIN
  85.   Assign(datei, 'A:liste.seq');
  86.   Reset(datei);
  87.   init(liste);
  88.   WHILE NOT (Eof(datei)) DO
  89.   BEGIN
  90.     explicit_new(elem);
  91.     Read(datei, elem^.info);
  92.     verketten(liste,elem)
  93.   END;
  94.   Close(datei)
  95. END;
  96.