home *** CD-ROM | disk | FTP | other *** search
/ Amiga MA Magazine 1998 #6 / amigamamagazinepolishissue1998.iso / coders / jËzyki_programowania / oberon / loader / terminator.def < prev    next >
Text File  |  1977-12-31  |  3KB  |  80 lines

  1. DEFINITION MODULE Terminator;
  2. (*
  3.  Diese Modul verwaltet eine Liste von "Abschlussprozeduren". Sie sollen
  4.  bei Beendigung eines Programms ausgeführt werden, um allozierte Resourcen
  5.  freizugeben, oder allgemein "Aufräumarbeiten" auszuführen.
  6.  
  7.  Die Prozeduren werden in umgekehrter Reihenfolge des Einfügens ausgeführt.
  8.  
  9.  Die Prozduren dieses Modul manipulieren eine globale Liste. Während eine
  10.  Prozedur abgearbeitet wird, darf keine andere Prozedur dieses Moduls aus-
  11.  geführt werden. Dies ist bei den meisten Anwendungen garantiert. Eine
  12.  Ausnahme bilden Programme die selbst Tasks oder Prozesse kreieren, bzw.
  13.  Interruptroutinen installieren. Falls in verschiedenen Tasks, oder in
  14.  einer Interruptroutine und im normalen Programmablauf Prozeduren diese
  15.  Moduls verwendet werden, muss z.B. mit Hilfe von Forbid/Permit bzw.
  16.  Disable/Enable für den gegenseitigen Ausschluss gesorgt werden.
  17. *)
  18.  
  19. FROM SYSTEM IMPORT ADDRESS,CAST;
  20.  
  21. TYPE
  22.  UserData=ADDRESS;
  23. (*
  24.  Vom Benutzer frei zu verwenden.
  25. *)
  26.  
  27.  TermProc=PROCEDURE(UserData{0});
  28. (*
  29.  Format einer Abschlussprozedur.
  30. *)
  31.  
  32.  Reference;
  33. (*
  34.  Identifiziert eine oder mehrere Abschlussprozeduren.
  35. *)
  36.  
  37. CONST
  38.  newReference=CAST(Reference,NIL);
  39.  
  40. PROCEDURE Add(tp:TermProc; ud:UserData; ref:Reference):Reference;
  41. (*
  42.  Fügt die Prozedur "tp" zusammen mit dem Wert von "ud" in die Liste ein.
  43.  Beim späteren Aufruf der Prozedur, wird sie den Wert von "ud" als Parameter
  44.  erhalten.
  45.  
  46.  Wenn "ref" den Wert "newReference" enthält, dann wird "Add" selbst eine
  47.  Referenz kreieren und als Resultat zurückgeben. Diese Referenz kann
  48.  bei einem Aufruf von "Remove" oder "Use" oder "Add" wiederverwendet
  49.  werden.
  50.  
  51.  Es kann auch eine zuvor von "Add" erhaltene Referenz dem Parameter "ref"
  52.  zugewiesen werden. Dadurch können Gruppen von Abschlussprozeduren gebildet
  53.  werden, die dann von "Remove" und "Use" gesamthaft verwendet werden.
  54.  
  55.  Falls Add nicht korrekt ausgeführt werden kann, wird als Resultat der
  56.  Wert "newReference" zurückgegeben.
  57. *)
  58.  
  59. PROCEDURE Remove(VAR ref:Reference);
  60. (*
  61.  Entfernt alle Prozeduren, die der Referenz "ref" zugeteilt wurden, aus
  62.  der Liste.
  63.  
  64.  BEACHTE
  65.   Nach diesem Aufruf ist die übergebene Referenz nicht mehr gültig. Die
  66.   Prozedur setzt den Parameter auf "newReference".
  67. *)
  68.  
  69. PROCEDURE Use(VAR ref:Reference);
  70. (*
  71.  Ruft alle Prozeduren die der Referenz "ref" zugeteilt wurden auf, und
  72.  entfernt sie dann aus der Liste.
  73.  
  74.  BEACHTE
  75.   Nach diesem Aufruf ist die übergebene Referenz nicht mehr gültig. Die
  76.   Prozedur setzt den Parameter auf "newReference".
  77. *)
  78.  
  79. END Terminator.
  80.