pTAL Reference Manual (G06.24+, H06.09+, J06.03+)
Example 106 SGBADDR, SGWADDR, SGXBADDR, and SGXWADDR
STRING .SG s; ! s is 16 bits
INT .SG i; ! i is 16 bits
STRING .SGX t; ! t is 32 bits
INT .SGX j; ! j is 32 bits
PROCADDR, PROC32ADDR, and PROC64ADDR (Procedures, Procedure Pointers,
and Procedure Entry Points)
The address type of procedures, procedure pointers (PROCPTRs), and procedure entry points is
PROCADDR.
Example 107 PROCADDR, PROC32ADDR, and PROC64ADDR
PROCADDR pa;
PROC32ADDR p32a;
PROC64ADDR p64a;
PROCPTR q( j ); INT j; END PROCPTR; ! @q is type PROCADDR
PROC32PTR r( j ); INT j; END PROCPTR; ! @r is type PROC32ADDR
PROC64PTR s( j); INT j; END PROCPTR; ! @s is type PROC64ADDR
PROC64PTR t( j); INT(32) j; END PROCPTR; ! @t is type PROCADDR
PROC p( j ); ! @p is type PROCADDR
INT j;
BEGIN
ENTRY p1; ! @p1 is type PROCADDR
p1:
pa := @q;
pa := @r;
pa := @s; ! ERROR: can’t implicitly convert from larger procedure
! address type to smaller procedure address type
pa := @p;
pa := @p1;
p32a := @q;
p32a := @r;
p32a := @s; ! ERROR: can’t implicitly convert larger procedure
! address type to smaller procedure address type
p32a := @p;
p32a := @p1;
p64a := @q;
p64a := @r;
p64a := @s; ! OK
p64a := @p;
p64a := @p1;
pa := p32a;
p32a := pa;
p64a := pa;
p64a := p32a;
pa := p64a; ! ERROR: can’t implicitly convert from larger procedure
! address type to smaller procedure address type
P32a := p64a;! ERROR: can’t implicitly convert from larger procedure
! address type to smaller procedure address type
pa := $PROCADDR (p32a);
pa := $PROCADDR (p64a); ! OK
p32a := $PROCADDR (pa);
p32a := $PROCADDR (p64a); ! OK
168 Pointers