pTAL Conversion Guide

Procedures, Subprocedures, and Procedure
Pointers
pTAL Conversion Guide527302-002
16-15
Assigning Values to PROCPTR Variables
Example 16-9. Assigning Values to PROCPTR Variables
PROCPTR pp1 (a, b) RETURNSCC;
INT a, b;
END PROCPTR;
PROCPTR pp2 (a) RETURNSCC;
INT a;
END PROCPTR;
PROCPTR pp3 (a, b);
INT a, b;
END PROCPTR;
PROC p(i, j) RETURNSCC;
INT i, j;
BEGIN
RETURN ,j;
END;
PROCADDR paddr;
paddr := @p; ! OK: PROCADDR variable is assigned PROC address
@pp1 := @p; ! OK: Left side is PROCPTR, right side is PROC
@pp1 := @pp2; ! ERROR: pp1 has two parameters, pp2 has one
@pp1 := @pp3; ! ERROR: pp1 specifies RETURNSCC, pp3 doesn't
paddr := @pp2; ! OK: PADDR is a PROCADDR variable
@pp1 := paddr; ! OK: PADDR is a PROCADDR variable
Example 16-10. Assigning Values to PROCPTR Variables (page 1 of 2)
REAL r;
INT i;
STRUCT s1 [0:9];
BEGIN
REAL PROCPTR f(x);
REAL x;
END PROCPTR;
END;
PROC p (i, j) EXTENSIBLE, CALLABLE; ! Declare PROC p in a
INT i, .EXT j; ! FORWARD declaration
FORWARD;
PROCPTR a (i, j) EXTENSIBLE,CALLABLE; ! Declare PROCPTR a and
INT i, .EXT j; ! initialize it to
END PROCPTR; ! point to PROC p
PROCPTR c (p);
REAL PROCPTR p (x); REAL x; END PROCPTR;
END PROCPTR;
REAL PROCPTR d (x); ! Declare REAL PROCPTR,
REAL x; ! d, with one data
END PROCPTR; ! type REAL parameter