/*++ Copyright (c) 1990-2003 Microsoft Corporation Module Name: ropblt.h Abstract: This module contains all raster operation codes, #defines and structures. Author: 07-Jan-1994 Fri 13:05:10 created [Environment:] GDI Device Driver - Plotter. [Notes:] Revision History: --*/ #ifndef _ROPBLT_ #define _ROPBLT_ // // This table defines the Raster Operations. They are listed in RPN and // // D = Destination surface // S = Source surface // P = Pattern // o = OR operator // a = AND operator // n = NOT operator // x = XOR operator // //***************************************************************************** // R A S T E R O P E R A T I O N S //***************************************************************************** // // // Dec Hex Logical Operations RPN notation Common name // ----------------------------------------------------------------------- // 0-0x00 0 0 // 1-0x01 ~(D | (P | S)) DPSoon // 2-0x02 D & ~(P | S) DPSona // 3-0x03 ~(P | S) PSon // 4-0x04 S & ~(D | P) SDPona // 5-0x05 ~(D | P) DPon // 6-0x06 ~(P | ~(D ^ S)) PDSxnon // 7-0x07 ~(P | (D & S)) PDSaon // 8-0x08 S & (D & ~P) SDPnaa // 9-0x09 ~(P | (D ^ S)) PDSxon // 10-0x0a D & ~P DPna // 11-0x0b ~(P | (S & ~D)) PSDnaon // 12-0x0c S & ~P SPna // 13-0x0d ~(P | (D & ~S)) PDSnaon // 14-0x0e ~(P | ~(D | S)) PDSonon // 15-0x0f ~P Pn // 16-0x10 P & ~(D | S) PDSona // 17-0x11 ~(D | S) DSon NOTSRCERASE // 18-0x12 ~(S | ~(D ^ P)) SDPxnon // 19-0x13 ~(S | (D & P)) SDPaon // 20-0x14 ~(D | ~(P ^ S)) DPSxnon // 21-0x15 ~(D | (P & S)) DPSaon // 22-0x16 P ^ (S ^ (D & ~(P & S))) PSDPSanaxx // 23-0x17 ~(S ^ ((S ^ P) & (D ^ S))) SSPxDSxaxn // 24-0x18 (S ^ P) & (P ^ D) SPxPDxa // 25-0x19 ~(S ^ (D & ~(P & S))) SDPSanaxn // 26-0x1a P ^ (D | (S & P)) PDSPaox // 27-0x1b ~(S ^ (D & (P ^ S))) SDPSxaxn // 28-0x1c P ^ (S | (D & P)) PSDPaox // 29-0x1d ~(D ^ (S & (P ^ D))) DSPDxaxn // 30-0x1e P ^ (D | S) PDSox // 31-0x1f ~(P & (D | S)) PDSoan // 32-0x20 D & (P & ~S) DPSnaa // 33-0x21 ~(S | (D ^ P)) SDPxon // 34-0x22 D & ~S DSna // 35-0x23 ~(S | (P & ~D)) SPDnaon // 36-0x24 (S ^ P) & (D ^ S) SPxDSxa // 37-0x25 ~(P ^ (D & ~(S & P))) PDSPanaxn // 38-0x26 S ^ (D | (P & S)) SDPSaox // 39-0x27 S ^ (D | ~(P ^ S)) SDPSxnox // 40-0x28 D & (P ^ S) DPSxa // 41-0x29 ~(P ^ (S ^ (D | (P & S)))) PSDPSaoxxn // 42-0x2a D & ~(P & S) DPSana // 43-0x2b ~(S ^ ((S ^ P) & (P ^ D))) SSPxPDxaxn // 44-0x2c S ^ (P & (D | S)) SPDSoax // 45-0x2d P ^ (S | ~D) PSDnox // 46-0x2e P ^ (S | (D ^ P)) PSDPxox // 47-0x2f ~(P & (S | ~D)) PSDnoan // 48-0x30 P & ~S PSna // 49-0x31 ~(S | (D & ~P)) SDPnaon // 50-0x32 S ^ (D | (P | S)) SDPSoox // 51-0x33 ~S Sn NOTSRCCOPY // 52-0x34 S ^ (P | (D & S)) SPDSaox // 53-0x35 S ^ (P | ~(D ^ S)) SPDSxnox // 54-0x36 S ^ (D | P) SDPox // 55-0x37 ~(S & (D | P)) SDPoan // 56-0x38 P ^ (S & (D | P)) PSDPoax // 57-0x39 S ^ (P | ~D) SPDnox // 58-0x3a S ^ (P | (D ^ S)) SPDSxox // 59-0x3b ~(S & (P | ~D)) SPDnoan // 60-0x3c P ^ S PSx // 61-0x3d S ^ (P | ~(D | S)) SPDSonox // 62-0x3e S ^ (P | (D & ~S)) SPDSnaox // 63-0x3f ~(P & S) PSan // 64-0x40 P & (S & ~D) PSDnaa // 65-0x41 ~(D | (P ^ S)) DPSxon // 66-0x42 (S ^ D) & (P ^ D) SDxPDxa // 67-0x43 ~(S ^ (P & ~(D & S))) SPDSanaxn // 68-0x44 S & ~D SDna SRCERASE // 69-0x45 ~(D | (P & ~S)) DPSnaon // 70-0x46 D ^ (S | (P & D)) DSPDaox // 71-0x47 ~(P ^ (S & (D ^ P))) PSDPxaxn // 72-0x48 S & (D ^ P) SDPxa // 73-0x49 ~(P ^ (D ^ (S | (P & D)))) PDSPDaoxxn // 74-0x4a D ^ (P & (S | D)) DPSDoax // 75-0x4b P ^ (D | ~S) PDSnox // 76-0x4c S & ~(D & P) SDPana // 77-0x4d ~(S ^ ((S ^ P) | (D ^ S))) SSPxDSxoxn // 78-0x4e P ^ (D | (S ^ P)) PDSPxox // 79-0x4f ~(P & (D | ~S)) PDSnoan // 80-0x50 P & ~D PDna // 81-0x51 ~(D | (S & ~P)) DSPnaon // 82-0x52 D ^ (P | (S & D)) DPSDaox // 83-0x53 ~(S ^ (P & (D ^ S))) SPDSxaxn // 84-0x54 ~(D | ~(P | S)) DPSonon // 85-0x55 ~D Dn DSTINVERT // 86-0x56 D ^ (P | S) DPSox // 87-0x57 ~(D & (P | S)) DPSoan // 88-0x58 P ^ (D & (S | P)) PDSPoax // 89-0x59 D ^ (P | ~S) DPSnox // 90-0x5a D ^ P DPx PATINVERT // 91-0x5b D ^ (P | ~(S | D)) DPSDonox // 92-0x5c D ^ (P | (S ^ D)) DPSDxox // 93-0x5d ~(D & (P | ~S)) DPSnoan // 94-0x5e D ^ (P | (S & ~D)) DPSDnaox // 95-0x5f ~(D & P) DPan // 96-0x60 P & (D ^ S) PDSxa // 97-0x61 ~(D ^ (S ^ (P | (D & S)))) DSPDSaoxxn // 98-0x62 D ^ (S & (P | D)) DSPDoax // 99-0x63 S ^ (D | ~P) SDPnox // 100-0x64 S ^ (D & (P | S)) SDPSoax // 101-0x65 D ^ (S | ~P) DSPnox // 102-0x66 D ^ S DSx SRCINVERT // 103-0x67 S ^ (D | ~(P | S)) SDPSonox // 104-0x68 ~(D ^ (S ^ (P | ~(D | S)))) DSPDSonoxxn // 105-0x69 ~(P ^ (D ^ S)) PDSxxn // 106-0x6a D ^ (P & S) DPSax // 107-0x6b ~(P ^ (S ^ (D & (P | S)))) PSDPSoaxxn // 108-0x6c S ^ (D & P) SDPax // 109-0x6d ~(P ^ (D ^ (S & (P | D)))) PDSPDoaxxn // 110-0x6e S ^ (D & (P | ~S)) SDPSnoax // 111-0x6f ~(P & ~(D ^ S)) PDSxnan // 112-0x70 P & ~(D & S) PDSana // 113-0x71 ~(S ^ ((S ^ D) & (P ^ D))) SSDxPDxaxn // 114-0x72 S ^ (D | (P ^ S)) SDPSxox // 115-0x73 ~(S & (D | ~P)) SDPnoan // 116-0x74 D ^ (S | (P ^ D)) DSPDxox // 117-0x75 ~(D & (S | ~P)) DSPnoan // 118-0x76 S ^ (D | (P & ~S)) SDPSnaox // 119-0x77 ~(D & S) DSan // 120-0x78 P ^ (D & S) PDSax // 121-0x79 ~(D ^ (S ^ (P & (D | S)))) DSPDSoaxxn // 122-0x7a D ^ (P & (S | ~D)) DPSDnoax // 123-0x7b ~(S & ~(D ^ P)) SDPxnan // 124-0x7c S ^ (P & (D | ~S)) SPDSnoax // 125-0x7d ~(D & ~(P ^ S)) DPSxnan // 126-0x7e (S ^ P) | (D ^ S) SPxDSxo // 127-0x7f ~(D & (P & S)) DPSaan // 128-0x80 D & (P & S) DPSaa // 129-0x81 ~((S ^ P) | (D ^ S)) SPxDSxon // 130-0x82 D & ~(P ^ S) DPSxna // 131-0x83 ~(S ^ (P & (D | ~S))) SPDSnoaxn // 132-0x84 S & ~(D ^ P) SDPxna // 133-0x85 ~(P ^ (D & (S | ~P))) PDSPnoaxn // 134-0x86 D ^ (S ^ (P & (D | S))) DSPDSoaxx // 135-0x87 ~(P ^ (D & S)) PDSaxn // 136-0x88 D & S DSa SRCAND // 137-0x89 ~(S ^ (D | (P & ~S))) SDPSnaoxn // 138-0x8a D & (S | ~P) DSPnoa // 139-0x8b ~(D ^ (S | (P ^ D))) DSPDxoxn // 140-0x8c S & (D | ~P) SDPnoa // 141-0x8d ~(S ^ (D | (P ^ S))) SDPSxoxn // 142-0x8e S ^ ((S ^ D) & (P ^ D)) SSDxPDxax // 143-0x8f ~(P & ~(D & S)) PDSanan // 144-0x90 P & ~(D ^ S) PDSxna // 145-0x91 ~(S ^ (D & (P | ~S))) SDPSnoaxn // 146-0x92 D ^ (P ^ (S & (D | P))) DPSDPoaxx // 147-0x93 ~(S ^ (P & D)) SPDaxn // 148-0x94 P ^ (S ^ (D & (P | S))) PSDPSoaxx // 149-0x95 ~(D ^ (P & S)) DPSaxn // 150-0x96 D ^ (P ^ S) DPSxx // 151-0x97 P ^ (S ^ (D | ~(P | S))) PSDPSonoxx // 152-0x98 ~(S ^ (D | ~(P | S))) SDPSonoxn // 153-0x99 ~(D ^ S) DSxn // 154-0x9a D ^ (P & ~S) DPSnax // 155-0x9b ~(S ^ (D & (P | S))) SDPSoaxn // 156-0x9c S ^ (P & ~D) SPDnax // 157-0x9d ~(D ^ (S & (P | D))) DSPDoaxn // 158-0x9e D ^ (S ^ (P | (D & S))) DSPDSaoxx // 159-0x9f ~(P & (D ^ S)) PDSxan // 160-0xa0 D & P DPa // 161-0xa1 ~(P ^ (D | (S & ~P))) PDSPnaoxn // 162-0xa2 D & (P | ~S) DPSnoa // 163-0xa3 ~(D ^ (P | (S ^ D))) DPSDxoxn // 164-0xa4 ~(P ^ (D | ~(S | P))) PDSPonoxn // 165-0xa5 ~(P ^ D) PDxn // 166-0xa6 D ^ (S & ~P) DSPnax // 167-0xa7 ~(P ^ (D & (S | P))) PDSPoaxn // 168-0xa8 D & (P | S) DPSoa // 169-0xa9 ~(D ^ (P | S)) DPSoxn // 170-0xaa D D // 171-0xab D | ~(P | S) DPSono // 172-0xac S ^ (P & (D ^ S)) SPDSxax // 173-0xad ~(D ^ (P | (S & D))) DPSDaoxn // 174-0xae D | (S & ~P) DSPnao // 175-0xaf D | ~P DPno // 176-0xb0 P & (D | ~S) PDSnoa // 177-0xb1 ~(P ^ (D | (S ^ P))) PDSPxoxn // 178-0xb2 S ^ ((S ^ P) | (D ^ S)) SSPxDSxox // 179-0xb3 ~(S & ~(D & P)) SDPanan // 180-0xb4 P ^ (S & ~D) PSDnax // 181-0xb5 ~(D ^ (P & (S | D))) DPSDoaxn // 182-0xb6 D ^ (P ^ (S | (D & P))) DPSDPaoxx // 183-0xb7 ~(S & (D ^ P)) SDPxan // 184-0xb8 P ^ (S & (D ^ P)) PSDPxax // 185-0xb9 ~(D ^ (S | (P & D))) DSPDaoxn // 186-0xba D | (P & ~S) DPSnao // 187-0xbb D | ~S DSno MERGEPAINT // 188-0xbc S ^ (P & ~(D & S)) SPDSanax // 189-0xbd ~((S ^ D) & (P ^ D)) SDxPDxan // 190-0xbe D | (P ^ S) DPSxo // 191-0xbf D | ~(P & S) DPSano // 192-0xc0 P & S PSa MERGECOPY // 193-0xc1 ~(S ^ (P | (D & ~S))) SPDSnaoxn // 194-0xc2 ~(S ^ (P | ~(D | S))) SPDSonoxn // 195-0xc3 ~(P ^ S) PSxn // 196-0xc4 S & (P | ~D) SPDnoa // 197-0xc5 ~(S ^ (P | (D ^ S))) SPDSxoxn // 198-0xc6 S ^ (D & ~P) SDPnax // 199-0xc7 ~(P ^ (S & (D | P))) PSDPoaxn // 200-0xc8 S & (D | P) SDPoa // 201-0xc9 ~(S ^ (P | D)) SPDoxn // 202-0xca D ^ (P & (S ^ D)) DPSDxax // 203-0xcb ~(S ^ (P | (D & S))) SPDSaoxn // 204-0xcc S S SRCCOPY // 205-0xcd S | ~(D | P) SDPono // 206-0xce S | (D & ~P) SDPnao // 207-0xcf S | ~P SPno // 208-0xd0 P & (S | ~D) PSDnoa // 209-0xd1 ~(P ^ (S | (D ^ P))) PSDPxoxn // 210-0xd2 P ^ (D & ~S) PDSnax // 211-0xd3 ~(S ^ (P & (D | S))) SPDSoaxn // 212-0xd4 S ^ ((S ^ P) & (P ^ D)) SSPxPDxax // 213-0xd5 ~(D & ~(P & S)) DPSanan // 214-0xd6 P ^ (S ^ (D | (P & S))) PSDPSaoxx // 215-0xd7 ~(D & (P ^ S)) DPSxan // 216-0xd8 P ^ (D & (S ^ P)) PDSPxax // 217-0xd9 ~(S ^ (D | (P & S))) SDPSaoxn // 218-0xda D ^ (P & ~(S & D)) DPSDanax // 219-0xdb ~((S ^ P) & (D ^ S)) SPxDSxan // 220-0xdc S | (P & ~D) SPDnao // 221-0xdd S | ~D SDno // 222-0xde S | (D ^ P) SDPxo // 223-0xdf S | ~(D & P) SDPano // 224-0xe0 P & (D | S) PDSoa // 225-0xe1 ~(P ^ (D | S)) PDSoxn // 226-0xe2 D ^ (S & (P ^ D)) DSPDxax // 227-0xe3 ~(P ^ (S | (D & P))) PSDPaoxn // 228-0xe4 S ^ (D & (P ^ S)) SDPSxax // 229-0xe5 ~(P ^ (D | (S & P))) PDSPaoxn // 230-0xe6 S ^ (D & ~(P & S)) SDPSanax // 231-0xe7 ~((S ^ P) & (P ^ D)) SPxPDxan // 232-0xe8 S ^ ((S ^ P) & (D ^ S)) SSPxDSxax // 233-0xe9 ~(D ^ (S ^ (P & ~(D & S)))) DSPDSanaxxn // 234-0xea D | (P & S) DPSao // 235-0xeb D | ~(P ^ S) DPSxno // 236-0xec S | (D & P) SDPao // 237-0xed S | ~(D ^ P) SDPxno // 238-0xee D | S DSo SRCPAINT // 239-0xef S | (D | ~P) SDPnoo // 240-0xf0 P P PATCOPY // 241-0xf1 P | ~(D | S) PDSono // 242-0xf2 P | (D & ~S) PDSnao // 243-0xf3 P | ~S PSno // 244-0xf4 P | (S & ~D) PSDnao // 245-0xf5 P | ~D PDno // 246-0xf6 P | (D ^ S) PDSxo // 247-0xf7 P | ~(D & S) PDSano // 248-0xf8 P | (D & S) PDSao // 249-0xf9 P | ~(D ^ S) PDSxno // 250-0xfa D | P DPo // 251-0xfb D | (P | ~S) DPSnoo PATPAINT // 252-0xfc P | S PSo // 253-0xfd P | (S | ~D) PSDnoo // 254-0xfe D | (P | S) DPSoo // 255-0xff 1 1 WHITENESS // // // ********* ALL ROP3/ROP2 CODES are SYMMETRIC ************ // // Raster Operation Index required [NONE] // // 0x00: 0 [INV] 0xff: 1 // // Raster Operation Index required [DST ] // // 0x55: ~D [INV] 0xaa: D // // Raster Operation Index required [SRC ] // // 0x33: ~S [INV] 0xcc: S // // Raster Operation Index required [SRC DST ] // // 0x11: ~(D | S) [INV] 0xee: D | S // 0x22: D & ~S [INV] 0xdd: S | ~D // 0x44: S & ~D [INV] 0xbb: D | ~S // 0x66: D ^ S [INV] 0x99: ~(D ^ S) // 0x77: ~(D & S) [INV] 0x88: D & S // // Raster Operation Index required [PAT ] // // 0x0f: ~P [INV] 0xf0: P // // Raster Operation Index required [PAT DST ] // // 0x05: ~(D | P) [INV] 0xfa: D | P // 0x0a: D & ~P [INV] 0xf5: P | ~D // 0x50: P & ~D [INV] 0xaf: D | ~P // 0x5a: D ^ P [INV] 0xa5: ~(P ^ D) // 0x5f: ~(D & P) [INV] 0xa0: D & P // // Raster Operation Index required [PAT SRC ] // // 0x03: ~(P | S) [INV] 0xfc: P | S // 0x0c: S & ~P [INV] 0xf3: P | ~S // 0x30: P & ~S [INV] 0xcf: S | ~P // 0x3c: P ^ S [INV] 0xc3: ~(P ^ S) // 0x3f: ~(P & S) [INV] 0xc0: P & S // // Raster Operation Index required [PAT SRC DST ] // // 0x01: ~(D | (P | S)) [INV] 0xfe: D | (P | S) // 0x02: D & ~(P | S) [INV] 0xfd: P | (S | ~D) // 0x04: S & ~(D | P) [INV] 0xfb: D | (P | ~S) // 0x06: ~(P | ~(D ^ S)) [INV] 0xf9: P | ~(D ^ S) // 0x07: ~(P | (D & S)) [INV] 0xf8: P | (D & S) // 0x08: S & (D & ~P) [INV] 0xf7: P | ~(D & S) // 0x09: ~(P | (D ^ S)) [INV] 0xf6: P | (D ^ S) // 0x0b: ~(P | (S & ~D)) [INV] 0xf4: P | (S & ~D) // 0x0d: ~(P | (D & ~S)) [INV] 0xf2: P | (D & ~S) // 0x0e: ~(P | ~(D | S)) [INV] 0xf1: P | ~(D | S) // 0x10: P & ~(D | S) [INV] 0xef: S | (D | ~P) // 0x12: ~(S | ~(D ^ P)) [INV] 0xed: S | ~(D ^ P) // 0x13: ~(S | (D & P)) [INV] 0xec: S | (D & P) // 0x14: ~(D | ~(P ^ S)) [INV] 0xeb: D | ~(P ^ S) // 0x15: ~(D | (P & S)) [INV] 0xea: D | (P & S) // 0x16: P ^ (S ^ (D & ~(P & S))) [INV] 0xe9: ~(D ^ (S ^ (P & ~(D & S)))) // 0x17: ~(S ^ ((S ^ P) & (D ^ S))) [INV] 0xe8: S ^ ((S ^ P) & (D ^ S)) // 0x18: (S ^ P) & (P ^ D) [INV] 0xe7: ~((S ^ P) & (P ^ D)) // 0x19: ~(S ^ (D & ~(P & S))) [INV] 0xe6: S ^ (D & ~(P & S)) // 0x1a: P ^ (D | (S & P)) [INV] 0xe5: ~(P ^ (D | (S & P))) // 0x1b: ~(S ^ (D & (P ^ S))) [INV] 0xe4: S ^ (D & (P ^ S)) // 0x1c: P ^ (S | (D & P)) [INV] 0xe3: ~(P ^ (S | (D & P))) // 0x1d: ~(D ^ (S & (P ^ D))) [INV] 0xe2: D ^ (S & (P ^ D)) // 0x1e: P ^ (D | S) [INV] 0xe1: ~(P ^ (D | S)) // 0x1f: ~(P & (D | S)) [INV] 0xe0: P & (D | S) // 0x20: D & (P & ~S) [INV] 0xdf: S | ~(D & P) // 0x21: ~(S | (D ^ P)) [INV] 0xde: S | (D ^ P) // 0x23: ~(S | (P & ~D)) [INV] 0xdc: S | (P & ~D) // 0x24: (S ^ P) & (D ^ S) [INV] 0xdb: ~((S ^ P) & (D ^ S)) // 0x25: ~(P ^ (D & ~(S & P))) [INV] 0xda: D ^ (P & ~(S & D)) // 0x26: S ^ (D | (P & S)) [INV] 0xd9: ~(S ^ (D | (P & S))) // 0x27: S ^ (D | ~(P ^ S)) [INV] 0xd8: P ^ (D & (S ^ P)) // 0x28: D & (P ^ S) [INV] 0xd7: ~(D & (P ^ S)) // 0x29: ~(P ^ (S ^ (D | (P & S)))) [INV] 0xd6: P ^ (S ^ (D | (P & S))) // 0x2a: D & ~(P & S) [INV] 0xd5: ~(D & ~(P & S)) // 0x2b: ~(S ^ ((S ^ P) & (P ^ D))) [INV] 0xd4: S ^ ((S ^ P) & (P ^ D)) // 0x2c: S ^ (P & (D | S)) [INV] 0xd3: ~(S ^ (P & (D | S))) // 0x2d: P ^ (S | ~D) [INV] 0xd2: P ^ (D & ~S) // 0x2e: P ^ (S | (D ^ P)) [INV] 0xd1: ~(P ^ (S | (D ^ P))) // 0x2f: ~(P & (S | ~D)) [INV] 0xd0: P & (S | ~D) // 0x31: ~(S | (D & ~P)) [INV] 0xce: S | (D & ~P) // 0x32: S ^ (D | (P | S)) [INV] 0xcd: S | ~(D | P) // 0x34: S ^ (P | (D & S)) [INV] 0xcb: ~(S ^ (P | (D & S))) // 0x35: S ^ (P | ~(D ^ S)) [INV] 0xca: D ^ (P & (S ^ D)) // 0x36: S ^ (D | P) [INV] 0xc9: ~(S ^ (P | D)) // 0x37: ~(S & (D | P)) [INV] 0xc8: S & (D | P) // 0x38: P ^ (S & (D | P)) [INV] 0xc7: ~(P ^ (S & (D | P))) // 0x39: S ^ (P | ~D) [INV] 0xc6: S ^ (D & ~P) // 0x3a: S ^ (P | (D ^ S)) [INV] 0xc5: ~(S ^ (P | (D ^ S))) // 0x3b: ~(S & (P | ~D)) [INV] 0xc4: S & (P | ~D) // 0x3d: S ^ (P | ~(D | S)) [INV] 0xc2: ~(S ^ (P | ~(D | S))) // 0x3e: S ^ (P | (D & ~S)) [INV] 0xc1: ~(S ^ (P | (D & ~S))) // 0x40: P & (S & ~D) [INV] 0xbf: D | ~(P & S) // 0x41: ~(D | (P ^ S)) [INV] 0xbe: D | (P ^ S) // 0x42: (S ^ D) & (P ^ D) [INV] 0xbd: ~((S ^ D) & (P ^ D)) // 0x43: ~(S ^ (P & ~(D & S))) [INV] 0xbc: S ^ (P & ~(D & S)) // 0x45: ~(D | (P & ~S)) [INV] 0xba: D | (P & ~S) // 0x46: D ^ (S | (P & D)) [INV] 0xb9: ~(D ^ (S | (P & D))) // 0x47: ~(P ^ (S & (D ^ P))) [INV] 0xb8: P ^ (S & (D ^ P)) // 0x48: S & (D ^ P) [INV] 0xb7: ~(S & (D ^ P)) // 0x49: ~(P ^ (D ^ (S | (P & D)))) [INV] 0xb6: D ^ (P ^ (S | (D & P))) // 0x4a: D ^ (P & (S | D)) [INV] 0xb5: ~(D ^ (P & (S | D))) // 0x4b: P ^ (D | ~S) [INV] 0xb4: P ^ (S & ~D) // 0x4c: S & ~(D & P) [INV] 0xb3: ~(S & ~(D & P)) // 0x4d: ~(S ^ ((S ^ P) | (D ^ S))) [INV] 0xb2: S ^ ((S ^ P) | (D ^ S)) // 0x4e: P ^ (D | (S ^ P)) [INV] 0xb1: ~(P ^ (D | (S ^ P))) // 0x4f: ~(P & (D | ~S)) [INV] 0xb0: P & (D | ~S) // 0x51: ~(D | (S & ~P)) [INV] 0xae: D | (S & ~P) // 0x52: D ^ (P | (S & D)) [INV] 0xad: ~(D ^ (P | (S & D))) // 0x53: ~(S ^ (P & (D ^ S))) [INV] 0xac: S ^ (P & (D ^ S)) // 0x54: ~(D | ~(P | S)) [INV] 0xab: D | ~(P | S) // 0x56: D ^ (P | S) [INV] 0xa9: ~(D ^ (P | S)) // 0x57: ~(D & (P | S)) [INV] 0xa8: D & (P | S) // 0x58: P ^ (D & (S | P)) [INV] 0xa7: ~(P ^ (D & (S | P))) // 0x59: D ^ (P | ~S) [INV] 0xa6: D ^ (S & ~P) // 0x5b: D ^ (P | ~(S | D)) [INV] 0xa4: ~(P ^ (D | ~(S | P))) // 0x5c: D ^ (P | (S ^ D)) [INV] 0xa3: ~(D ^ (P | (S ^ D))) // 0x5d: ~(D & (P | ~S)) [INV] 0xa2: D & (P | ~S) // 0x5e: D ^ (P | (S & ~D)) [INV] 0xa1: ~(P ^ (D | (S & ~P))) // 0x60: P & (D ^ S) [INV] 0x9f: ~(P & (D ^ S)) // 0x61: ~(D ^ (S ^ (P | (D & S)))) [INV] 0x9e: D ^ (S ^ (P | (D & S))) // 0x62: D ^ (S & (P | D)) [INV] 0x9d: ~(D ^ (S & (P | D))) // 0x63: S ^ (D | ~P) [INV] 0x9c: S ^ (P & ~D) // 0x64: S ^ (D & (P | S)) [INV] 0x9b: ~(S ^ (D & (P | S))) // 0x65: D ^ (S | ~P) [INV] 0x9a: D ^ (P & ~S) // 0x67: S ^ (D | ~(P | S)) [INV] 0x98: ~(S ^ (D | ~(P | S))) // 0x68: ~(D ^ (S ^ (P | ~(D | S)))) [INV] 0x97: P ^ (S ^ (D | ~(P | S))) // 0x69: ~(P ^ (D ^ S)) [INV] 0x96: D ^ (P ^ S) // 0x6a: D ^ (P & S) [INV] 0x95: ~(D ^ (P & S)) // 0x6b: ~(P ^ (S ^ (D & (P | S)))) [INV] 0x94: P ^ (S ^ (D & (P | S))) // 0x6c: S ^ (D & P) [INV] 0x93: ~(S ^ (P & D)) // 0x6d: ~(P ^ (D ^ (S & (P | D)))) [INV] 0x92: D ^ (P ^ (S & (D | P))) // 0x6e: S ^ (D & (P | ~S)) [INV] 0x91: ~(S ^ (D & (P | ~S))) // 0x6f: ~(P & ~(D ^ S)) [INV] 0x90: P & ~(D ^ S) // 0x70: P & ~(D & S) [INV] 0x8f: ~(P & ~(D & S)) // 0x71: ~(S ^ ((S ^ D) & (P ^ D))) [INV] 0x8e: S ^ ((S ^ D) & (P ^ D)) // 0x72: S ^ (D | (P ^ S)) [INV] 0x8d: ~(S ^ (D | (P ^ S))) // 0x73: ~(S & (D | ~P)) [INV] 0x8c: S & (D | ~P) // 0x74: D ^ (S | (P ^ D)) [INV] 0x8b: ~(D ^ (S | (P ^ D))) // 0x75: ~(D & (S | ~P)) [INV] 0x8a: D & (S | ~P) // 0x76: S ^ (D | (P & ~S)) [INV] 0x89: ~(S ^ (D | (P & ~S))) // 0x78: P ^ (D & S) [INV] 0x87: ~(P ^ (D & S)) // 0x79: ~(D ^ (S ^ (P & (D | S)))) [INV] 0x86: D ^ (S ^ (P & (D | S))) // 0x7a: D ^ (P & (S | ~D)) [INV] 0x85: ~(P ^ (D & (S | ~P))) // 0x7b: ~(S & ~(D ^ P)) [INV] 0x84: S & ~(D ^ P) // 0x7c: S ^ (P & (D | ~S)) [INV] 0x83: ~(S ^ (P & (D | ~S))) // 0x7d: ~(D & ~(P ^ S)) [INV] 0x82: D & ~(P ^ S) // 0x7e: (S ^ P) | (D ^ S) [INV] 0x81: ~((S ^ P) | (D ^ S)) // 0x7f: ~(D & (P & S)) [INV] 0x80: D & (P & S) // // // The following macros will tell us if we need to use a 'mask' for ROP4 // and define if S / P / D are in a ROP3 // #define ROP4_NEED_MASK(Rop4) (((Rop4 >> 8) & 0xFF) != (Rop4 & 0xFF)) #define ROP3_NEED_PAT(Rop3) (((Rop3 >> 4) & 0x0F) != (Rop3 & 0x0F)) #define ROP3_NEED_SRC(Rop3) (((Rop3 >> 2) & 0x33) != (Rop3 & 0x33)) #define ROP3_NEED_DST(Rop3) (((Rop3 >> 1) & 0x55) != (Rop3 & 0x55)) #define ROP4_FG_ROP(Rop4) (Rop4 & 0xFF) #define ROP4_BG_ROP(Rop4) ((Rop4 >> 8) & 0xFF) #define CSI_SRC 0 #define CSI_PAT 1 #define CSI_TMP 2 #define CSI_TOTAL 3 typedef struct _CLONESO { SURFOBJ *pso; HBITMAP hBmp; } CLONESO, *PCLONESO; typedef struct _SDINFO { SURFOBJ *psoDst; // detination to write BITMAP or DEVICE SURFOBJ *psoSrc; // source to read must be BITMAP PRECTL prclDst; // destination rectangle PRECTL prclSrc; // source rectangle PPOINTL pptlSrcOrg; // brush origin start } SDINFO, *PSDINFO; // // Function prototypes // BOOL CloneBitBltSURFOBJ( PPDEV pPDev, SURFOBJ *psoDst, SURFOBJ *psoSrc, SURFOBJ *psoMask, XLATEOBJ *pxlo, PRECTL prclDst, PRECTL prclSrc, PRECTL prclMask, BRUSHOBJ *pbo, PCLONESO pCloneSO, DWORD RopBG, DWORD RopFG ); BOOL DoSpecialRop3( SURFOBJ *psoDst, CLIPOBJ *pco, PRECTL prclDst, DWORD Rop3 ); BOOL DoMix2( PPDEV pPDev, SURFOBJ *psoDst, SURFOBJ *psoSrc, CLIPOBJ *pco, XLATEOBJ *pxlo, PRECTL prclDst, PRECTL prclSrc, PPOINTL pptlSrcOrg, DWORD Mix2 ); BOOL DoRop3( PPDEV pPDev, SURFOBJ *psoDst, SURFOBJ *psoSrc, SURFOBJ *psoPat, SURFOBJ *psoTmp, CLIPOBJ *pco, XLATEOBJ *pxlo, PRECTL prclDst, PRECTL prclSrc, PRECTL prclPat, PPOINTL pptlPatOrg, BRUSHOBJ *pbo, DWORD Rop3 ); #endif // _ROPBLT_