MAINSAIL Language Manual, Section 40.16

previous   next   top   contents   index   framed top   this page unframed


40.16. The Load PROCEDUREs

Figure 40–13. The Load PROCEDUREs
$BUILTIN
BOOLEAN
PROCEDURE   boLoad      (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
INTEGER
PROCEDURE   iLoad       (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
LONG INTEGER
PROCEDURE   liLoad      (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
REAL
PROCEDURE   rLoad       (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
LONG REAL
PROCEDURE   lrLoad      (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
BITS
PROCEDURE   bLoad       (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
LONG BITS
PROCEDURE   lbLoad      (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
STRING
PROCEDURE   sLoad       (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
POINTER
PROCEDURE   pLoad       (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
ADDRESS
PROCEDURE   aLoad       (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
CHARADR
PROCEDURE   cLoad       (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

$BUILTIN
$PROCVAR
PROCEDURE   $pvLoad     (ADDRESS a;
                         
OPTIONAL INTEGER dspl);

load is used to load a value from a memory ADDRESS.

v := xLoad(a,d) loads a value of type x from the memory location given by displace(a,d), where d is a displacement in storage units. If a is NULLADDRESS or unaligned (see Section 3.9), if d is not a multiple of the size of the smallest MAINSAIL data type, or if displace(a,d) is undefined, then xLoad(a,d) is also undefined. The STRING form loads only a STRING descriptor; the characters of the STRING are not referenced.

Another form of cLoad, which loads a character from a CHARADR, is described in Section 32.28.

Example 40–14. Use of the Load PROCEDUREs
REAL y;
CLASS c (REAL xPOINTER(clink);
POINTER(cp,q;

p := new(c);

...

y := rLoad(cva(p));            # same as y := p.x
q := pLoad(cva(p),DSP(c.link)) # same as q := p.link

40.16.1. Sized Load PROCEDUREs

Figure 40–15. Sized Load PROCEDUREs
$ALWAYSINLINE
BOOLEAN
PROCEDURE   $boLoadSized
                        (
ADDRESS a;
                         
OPTIONAL INTEGER dspl,type);

$ALWAYSINLINE
INTEGER
PROCEDURE   $iLoadSized
                        (
ADDRESS a;
                         
OPTIONAL INTEGER dspl,type);

$ALWAYSINLINE
LONG INTEGER
PROCEDURE   $liLoadSized
                        (
ADDRESS a;
                         
OPTIONAL INTEGER dspl,type);

$ALWAYSINLINE
BITS
PROCEDURE   $bLoadSized
                        (
ADDRESS a;
                         
OPTIONAL INTEGER dspl,type);

$ALWAYSINLINE
LONG BITS
PROCEDURE   $lbLoadSized
                        (
ADDRESS a;
                         
OPTIONAL INTEGER dspl,type);

The sized load PROCEDURE $xxxLoadSized, where xxx is the base data type abbreviation, loads a value of the sized data type whose type is given by the extended type code type from displace(a,dspl). For example:

$iLoadSized(a,0,$integerSigned1Code)

loads 1 byte from a and sign-extends it to form an INTEGER result.

$lbLoadSized(a,0,$longBits2Code)

loads a 2-byte quantity from a and zero-extends it to form a LONG BITS result.

If the extended type code is not a sized type code corresponding to the base type, a value of the base type's size is loaded. For example, either of:

$boLoadSized(a,0,pointerCode)
$boLoadSized(a)

is equivalent to:

boLoad(a)

previous   next   top   contents   index   framed top   this page unframed

MAINSAIL Language Manual, Section 40.16