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.