<> <> <> <> <> DIRECTORY DragOps; BitBlt: DEFINITIONS = BEGIN <> DragonPointer: TYPE = POINTER TO DragOps.Word; DragonBitAddress: TYPE = MACHINE DEPENDENT RECORD [ word: DragonPointer, bit: INT ]; BitBltFlags: TYPE = MACHINE DEPENDENT RECORD [ <> direction: Direction _ forward, disjoint: BOOL _ FALSE, disjointItems: BOOL _ FALSE, gray: BOOL _ FALSE, srcFunc: SrcFunc _ null, dstFunc: DstFunc _ null, reserved: [0..511] _ 0, reserved1: DragOps.Half _ DragOps.ZerosHalf -- so uses 32 bits ]; Direction: TYPE = {forward, backward}; DstFunc: TYPE = {null, and, or, xor}; GrayParm: TYPE = MACHINE DEPENDENT RECORD [ <> reserved: [0..255] _ 0, yOffset: [0..255], widthMinusOne: [0..255], heightMinusOne: [0..255] ]; SrcDesc: TYPE = MACHINE DEPENDENT RECORD [ SELECT OVERLAID * FROM gray => [gray: GrayParm], srcBpl => [srcBpl: INT], ENDCASE ]; BitBltTablePtr: TYPE = POINTER TO BitBltTable; BitBltTable: TYPE = MACHINE DEPENDENT RECORD [ dst: DragonBitAddress, dstBpl: INT, src: DragonBitAddress, srcDesc: SrcDesc, width: INT, height: INT, flags: BitBltFlags ]; SrcFunc: TYPE = {null, complement}; BITBLT: PROC[bbt: BitBltTablePtr]; END.