pTAL Conversion Guide

Pointers
pTAL Conversion Guide527302-002
10-25
Pointer Arithmetic
Table 10-8. Valid Address Expressions (page 1 of 2)
Template
1
Result Type Example
atype [k]; atype INT .EXT p;
@p := @p[2];
atype ‘+int16 atype atype INT .p;
@p := @p '+' 2;
atype ‘-int16 atype atype INT .p;
@p := @p '-' 4;
int16 ‘+atype atype INT .p;
@p := 2 '+' @p;
extaddr + int32 extaddr INT .EXT p;
@p := @p + 4D;
extaddr - int32 extaddr INT .EXT p;
@p := @p - 8D;
int32 + extaddr extaddr INT .EXT p;
@p := 4D + @p;
atype - atype int
2
INT .b, .bp, i;
i := @bp '-' @b;
extaddr - extaddr int32 INT .EXT .b, bp, i32;
i32 := @bp - @b;
atype relational
3
atype int BADDR b1, b2;
INT i;
IF b1 '<' b2 THEN...;
i := b1 '<' b2;
extaddr relational
4
extaddr int EXTADDR b1, b2;
INT i;
IF b1 < b2 THEN...;
i := b1 < b2;
atype relational
3
constant int BADDR b1;
INT i;
IF b1 '>' 100 THEN...;
i := b1 '<>' nil;
extaddr relational
4
constant int EXTADDR b1;
INT i;
IF b1 < 0D THEN...;
i := b1 < 65535;
1. atype is any data type except PROCADDR and EXTADDR.
2. The result of subtracting two address types is the number of bytes between them for byte-oriented address
types (BADDR, CBADDR, SGBADDR, SGXBADDR, EXTADDR) and is the number of 16-bit words between
them for word-oriented data types (WADDR, CWADDR, SGWADDR, SGXWADDR).
3. relational must be an unsigned relational operator ('<', '=', '>', '<=', '<>', '>=') or signed equal or not equal
(=, <>).
4. relational must be a signed relational operator (<, =, >, <=, <>, >=).