gm2-libs-log/BitBlockOps (The GNU Modula-2 Compiler)

#### 4.2.1 gm2-libs-log/BitBlockOps ¶

    DEFINITION MODULE BitBlockOps ;

    FROM SYSTEM IMPORT ADDRESS ;

    (*
       BlockAnd - performs a bitwise AND on blocks
                  [dest..dest+size-1] := [dest..dest+size-1] AND
                                         [src..src+size-1]
    *)

    PROCEDURE BlockAnd (dest, src: ADDRESS; size: CARDINAL) ;

    (*
       BlockOr - performs a bitwise OR on blocks
                 [dest..dest+size-1] := [dest..dest+size-1] OR
                                        [src..src+size-1]
    *)

    PROCEDURE BlockOr (dest, src: ADDRESS; size: CARDINAL) ;

    (*
       BlockXor - performs a bitwise XOR on blocks
                  [dest..dest+size-1] := [dest..dest+size-1] XOR
                                         [src..src+size-1]
    *)

    PROCEDURE BlockXor (dest, src: ADDRESS; size: CARDINAL) ;

    (*
       BlockNot - performs a bitsize NOT on the block as defined
                  by:  [dest..dest+size-1]
    *)

    PROCEDURE BlockNot (dest: ADDRESS; size: CARDINAL) ;

    (*
       BlockShr - performs a block shift right of, count, bits.
                  Where the block is defined as:
                  [dest..dest+size-1].
                  The block is considered to be an ARRAY OF BYTEs
                  which is shifted, bit at a time over each byte in
                  turn.  The left most byte is considered the byte
                  located at the lowest address.
                  If you require an endianness SHIFT use
                  the SYSTEM.SHIFT procedure and declare the
                  block as a POINTER TO set type.
    *)

    PROCEDURE BlockShr (dest: ADDRESS; size, count: CARDINAL) ;

    (*
       BlockShl - performs a block shift left of, count, bits.
                  Where the block is defined as:
                  [dest..dest+size-1].
                  The block is considered to be an ARRAY OF BYTEs
                  which is shifted, bit at a time over each byte in
                  turn.  The left most byte is considered the byte
                  located at the lowest address.
                  If you require an endianness SHIFT use
                  the SYSTEM.SHIFT procedure and declare the
                  block as a POINTER TO set type.
    *)

    PROCEDURE BlockShl (dest: ADDRESS; size, count: CARDINAL) ;

    (*
       BlockRor - performs a block rotate right of, count, bits.
                  Where the block is defined as:
                  [dest..dest+size-1].
                  The block is considered to be an ARRAY OF BYTEs
                  which is rotated, bit at a time over each byte in
                  turn.  The left most byte is considered the byte
                  located at the lowest address.
                  If you require an endianness ROTATE use
                  the SYSTEM.ROTATE procedure and declare the
                  block as a POINTER TO set type.
    *)

    PROCEDURE BlockRor (dest: ADDRESS; size, count: CARDINAL) ;

    (*
       BlockRol - performs a block rotate left of, count, bits.
                  Where the block is defined as:
                  [dest..dest+size-1].
                  The block is considered to be an ARRAY OF BYTEs
                  which is rotated, bit at a time over each byte in
                  turn.  The left most byte is considered the byte
                  located at the lowest address.
                  If you require an endianness ROTATE use
                  the SYSTEM.ROTATE procedure and declare the
                  block as a POINTER TO set type.
    *)

    PROCEDURE BlockRol (dest: ADDRESS; size, count: CARDINAL) ;

    END BitBlockOps.