  Pascal Programming; Function Pointer? 
 The Question is:
 
It is possible, as in C, to "assign" procedures and/or functions to a variable.
 Is such a way that the variable containing a reference to procedure/functions
 can be executed?
 
 The Answer is :
    Yes, but not entirely within the standard language. Here is an example
    program which shows how to do it using the IADDRESS function and %IMMED
    operator. Note that it needs to be in two source files because Pascal
    will only permit the "%immed" operator on external function and
    procedure calls.
 
    Also note that the procedures which are the target of the call must
    be unbound. That means they cannot make references to variables defined
    at higher scopes.
 
    program RoutineByAddress(output);
 
    (* The target routines *)
    [UNBOUND] procedure a(i:integer);
    begin  WriteLn('routine a ',i); end;
 
    [UNBOUND] procedure b(i:integer);
    begin WriteLn('routine b ',i); end;
 
    [UNBOUND] procedure c(i:integer);
    begin WriteLn('routine c ',i); end;
 
    (* the dispatch routine, in external module *)
    procedure caller([UNBOUND] procedure p(i:integer); i:integer);EXTERNAL;
 
    var proc : integer;
    begin
      (* first, calling via "caller" directly *)
        caller(a,1);
      (* now from a variable *)
        proc:=iaddress(a);
        caller(%immed proc,2);
        proc:=iaddress(b);
        caller(%immed proc,3);
        proc:=iaddress(c);
        caller(%immed proc,4);
    end.
 
    module Dispatch;
      [GLOBAL] procedure caller(procedure p(i:integer); i:integer);
      (* Dispatch routine for a procedure with a single integer argument *)
      begin
        p(i);
      end;
    end.
 
 
 Answer written or last revised on  17-FEB-2002 
