home *** CD-ROM | disk | FTP | other *** search
- PROGRAM ProcParmDemo;
-
- (* als Parameter zu übergebende Funktion; muß
- unbedingt im FAR-Modell kompiliert werden! *)
- {$F+}
- FUNCTION Sine (x :REAL) :REAL;
-
- BEGIN
- Sine := Sin(x)
- END;
- {$F-}
-
-
- (* ein einen Prozeduralparameter verwendendes Unter-
- programm; übergeben wird dabei ein Zeiger (@...) auf
- die entsprechende Prozedur/Funktion: *)
-
- PROCEDURE Evaluate (x :REAL; FuncPtr :POINTER);
-
- CONST
- f_Addr :POINTER = NIL; (* Stelle im Datenseg. (wichtig!)
- zum "Merken" der Prozedur-Adresse *)
-
- (* dieses Inline-Makro bewirkt den Ansprung der Para-
- meterprozedur. Die Deklaration des Makro-Kopfes muß
- genau der Syntax der anzuspringenden Prozedur ent-
- sprechen! *)
- FUNCTION f (x :REAL) :REAL;
- INLINE ($3E/$FF/$1E/f_Addr); (* CALL FAR DS:[f_Addr] *)
-
- BEGIN
- f_Addr := FuncPtr; (* CALL initialisieren *)
- (* ab hier folgt dann die Anwendung: *)
- Write ('x = ',x:6:3);
- WriteLn (' f(x) = ', f(x):6:3);
- END;
-
-
- BEGIN
- (* so wird ein Prozedur als Parameter übergeben: *)
- Evaluate (1.0, @Sine);
- END.