The following enhancements and changes have been added:
So currently, the only new interesting choice is FIXEDBIN(31,63).
The RESPEC type function changes the attributes of an expression to that of a specified type - without changing the bit value of the expression.
RESPEC has the syntax: RESPEC(: t, x :)
t must be a defined scalar type
x must be a scalar expression with the same size as t, and if either x or t is UNALIGNED BIT, then both must be (in which case, the function is somewhat uninteresting as it would do nothing)
As an example, if t is a type with the attributes LIMITED ENTRY, then RESPEC(: t, ptrvalue(0) :) would return a "null" function pointer.
An unspecified structure definition is a DEFINE STRUCTURE statement that merely names the structure to be defined without specifying any of its members.
An unspecified structure cannot be derefenced, but it may be used to declare a HANDLE which, of course, cannot be derefenced either.
An unspecified structure may also be the subject of a later DEFINE STRUCTURE statement which does specify its members.
As an example: define structure 1 token_type; defines an unspecified structure named token_type.
This function casts an integer to a signed integer value without changing the bit pattern of the integer value.
ISIGNED has the syntax: ISIGNED( x )
If x is not an integer, i.e. if x is not REAL FIXED BIN with zero scale factor, then it is converted to an integer with the maximum precision.
ISIGNED( x ) returns, for integer x, a value with the same bit pattern as x but the attributes SIGNED FIXED BIN(p).
If x is UNSIGNED, p is given by:
if precision(x) = 8, 16, 32 or 64, then p = precision(x) - 1 else p = precision(x)
If x is SIGNED, p is equal to the precision of x.
So, as an example, ISIGNED('ff_ff_ff_ff'xu) equals the SIGNED FIXED BIN(31) value -1.
This function casts an integer to an unsigned integer value without changing the bit pattern of the integer value.
IUNSIGNED has the syntax: IUNSIGNED( x )
If x is not an integer, i.e. if x is not REAL FIXED BIN with zero scale factor, then it is converted to an integer with the maximum precision.
IUNSIGNED( x ) returns, for integer x, a value with the same bit pattern as x but the attributes UNSIGNED FIXED BIN(p).
If x is SIGNED, p is given by:
if precision(x) = 7, 15, 31 or 63, then p = precision(x) + 1 else p = precision(x)
If x is UNSIGNED, p is equal to the precision of x.
So, as an example, IUNSIGNED('ff_ff_ff_ff'xn) equals the largest UNSIGNED FIXED BIN(32) value.
The following changes have been made to increase compatibility with the old host compiler:
This option provides some of the function from the old assembler interface to the compiler. That interface also allowed alternate names for SYSPUNCH etc. These will be added to this option if there are any customers requests to do so.
The following problems have been fixed: