HP Pascal/iX Programmer's Guide (31502-90023)
7- 11
PROCEDURE p1 (a,b : integer); EXTERNAL;
PROCEDURE p2 (a,b : integer); EXTERNAL;
FUNCTION f1 (a,b : integer) : integer; EXTERNAL;
FUNCTION f2 (a,b : integer) : integer; EXTERNAL;
BEGIN
read(b);
IF b THEN BEGIN
procvar := addr(p1);
funcvar := addr(f1);
END
ELSE BEGIN
procvar := addr(p2);
funcvar := addr(f2);
END;
call(procvar,10,20);
i := fcall(funcvar,10,20);
END.
Example 2
This program declares procedures and procedure variables at different
levels and assigns each procedure visible to each variable. The comments
tell you which assignments are illegal and why.
$STANDARD_LEVEL 'HP_MODCAL'$
PROGRAM prog;
TYPE
proctype = PROCEDURE (x,y : integer);
VAR
procvar : proctype;
PROCEDURE p1 (a,b : integer);
VAR
pvar1 : proctype;
PROCEDURE p2 (c,d : integer);
VAR
pvar2 : proctype;
PROCEDURE p3 (e,f : integer);
VAR
pvar3 : proctype;
BEGIN {p3}
pvar3 := addr(p1);
pvar3 := addr(p2);
pvar3 := addr(p3);
END; {p3}
BEGIN {p2}
pvar2 := addr(p1);
pvar2 := addr(p2);
pvar2 := addr(p3); {illegal -- p3 is at a lower level than pvar2}
END; {p2}
BEGIN {p1}
pvar1 := addr(p1);
pvar1 := addr(p2); {illegal -- p2 is at a lower level than pvar1}
END; {p1}
BEGIN {prog}
procvar := addr(p1);
END. {prog}