home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga MA Magazine 1998 #6
/
amigamamagazinepolishissue1998.iso
/
coders
/
jËzyki_programowania
/
oberon
/
loader
/
terminator.def
< prev
next >
Wrap
Text File
|
1977-12-31
|
3KB
|
80 lines
DEFINITION MODULE Terminator;
(*
Diese Modul verwaltet eine Liste von "Abschlussprozeduren". Sie sollen
bei Beendigung eines Programms ausgeführt werden, um allozierte Resourcen
freizugeben, oder allgemein "Aufräumarbeiten" auszuführen.
Die Prozeduren werden in umgekehrter Reihenfolge des Einfügens ausgeführt.
Die Prozduren dieses Modul manipulieren eine globale Liste. Während eine
Prozedur abgearbeitet wird, darf keine andere Prozedur dieses Moduls aus-
geführt werden. Dies ist bei den meisten Anwendungen garantiert. Eine
Ausnahme bilden Programme die selbst Tasks oder Prozesse kreieren, bzw.
Interruptroutinen installieren. Falls in verschiedenen Tasks, oder in
einer Interruptroutine und im normalen Programmablauf Prozeduren diese
Moduls verwendet werden, muss z.B. mit Hilfe von Forbid/Permit bzw.
Disable/Enable für den gegenseitigen Ausschluss gesorgt werden.
*)
FROM SYSTEM IMPORT ADDRESS,CAST;
TYPE
UserData=ADDRESS;
(*
Vom Benutzer frei zu verwenden.
*)
TermProc=PROCEDURE(UserData{0});
(*
Format einer Abschlussprozedur.
*)
Reference;
(*
Identifiziert eine oder mehrere Abschlussprozeduren.
*)
CONST
newReference=CAST(Reference,NIL);
PROCEDURE Add(tp:TermProc; ud:UserData; ref:Reference):Reference;
(*
Fügt die Prozedur "tp" zusammen mit dem Wert von "ud" in die Liste ein.
Beim späteren Aufruf der Prozedur, wird sie den Wert von "ud" als Parameter
erhalten.
Wenn "ref" den Wert "newReference" enthält, dann wird "Add" selbst eine
Referenz kreieren und als Resultat zurückgeben. Diese Referenz kann
bei einem Aufruf von "Remove" oder "Use" oder "Add" wiederverwendet
werden.
Es kann auch eine zuvor von "Add" erhaltene Referenz dem Parameter "ref"
zugewiesen werden. Dadurch können Gruppen von Abschlussprozeduren gebildet
werden, die dann von "Remove" und "Use" gesamthaft verwendet werden.
Falls Add nicht korrekt ausgeführt werden kann, wird als Resultat der
Wert "newReference" zurückgegeben.
*)
PROCEDURE Remove(VAR ref:Reference);
(*
Entfernt alle Prozeduren, die der Referenz "ref" zugeteilt wurden, aus
der Liste.
BEACHTE
Nach diesem Aufruf ist die übergebene Referenz nicht mehr gültig. Die
Prozedur setzt den Parameter auf "newReference".
*)
PROCEDURE Use(VAR ref:Reference);
(*
Ruft alle Prozeduren die der Referenz "ref" zugeteilt wurden auf, und
entfernt sie dann aus der Liste.
BEACHTE
Nach diesem Aufruf ist die übergebene Referenz nicht mehr gültig. Die
Prozedur setzt den Parameter auf "newReference".
*)
END Terminator.