HP 3000 Manuals

GLOBALANYPTR Variables [ HP Pascal/iX Programmer's Guide ] MPE/iX 5.0 Documentation


HP Pascal/iX Programmer's Guide

GLOBALANYPTR Variables 

The pointer type globalanyptr is assignment compatible with every pointer
type and the value nil.  Anyptr is another name for the same type,
provided for compatibility with older Pascals.  This manual uses the term
globalanyptr exclusively, but anyptr can be substituted wherever it
appears.

A variable of type globalanyptr is not bound to a specific pointer type.
You can assign it any pointer-type value, or compare it to any
pointer-type value with the operator = or <>, but you cannot dereference
it.

Because a globalanyptr variable can be assigned any pointer-type value,
the compiler allocates it 64 bits.  If your program does not use extended
address pointers, you can save space by substituting localanyptr for
globalanyptr.

Your program uses extended address pointers if it declares a type or
variable with the EXTNADDR compiler option.  Refer to the HP Pascal/iX 
Reference Manual or the HP Pascal/HP-UX Reference Manual, depending on
your implementation, for detailed information on compiler options.

Example 

This program works the same way and takes the same amount of space if you
substitute anyptr for any or every occurrence of globalanyptr.  This
would be true even if the program had extended address pointers.

Since the program does not have extended address pointers, it works the
same way if you substitute localanyptr for any or every occurrence of
globalanyptr--but it takes less space.  (Compare this program with the
one in the section "LOCALANYPTR Variables" .)

     PROGRAM prog (input);
     TYPE
        iptr = ^integer;
        rec  = RECORD
                 f1, f2 : real;
               END;
        rptr = ^rec;
     VAR
           v1, d1 : iptr;
           v2, d2 : rptr;
         anyv : globalanyptr;
            b : Boolean;
     BEGIN
        {Initialize v1 and v2}
        new(v1);
        new(v2);
        v1^ := 0;
        WITH v2^ DO BEGIN
           f1 := 0;
           f2 := 0;
        END;

        {Set anyv to v1 or v2, depending on b}
        read(b);
        IF b THEN anyv := v1 ELSE anyv := v2;

        {You cannot dereference anyv, because it is a globalanyptr.
         This is how you can access its data:}
        IF anyv = v1 THEN BEGIN
           d1 := anyv;
           d1^ := d1^ + 1;
        END
        ELSE BEGIN
           d2 := anyv;
           WITH d2^ DO BEGIN
              f1 := 34.6;
              f2 := 91.2;
           END;
        END;
     END.



MPE/iX 5.0 Documentation