1 2 #include "DibLib.h" 3 4 /* 5 * M D S P Generic function 6 * ----------------------- 7 * 0 0 0 0 -> BLACKNESS, WHITENESS 8 * 0 0 0 1 -> PATCOPY, NOTPATCOPY 9 * 0 0 1 0 -> SRCCOPY, NOTSRCCOPY 10 * 0 0 1 1 SrcPatBlt 11 * 0 1 0 0 -> NOOP, DESTINVERT 12 * 0 1 0 1 PatPaint 13 * 0 1 1 0 SrcPaint 14 * 0 1 1 1 BitBlt 15 * 1 0 0 0 MaskCopy, -> SRCCOPY / SRCINVERT using Mask als source 16 * 1 0 0 1 MaskPatBlt 17 * 1 0 1 0 MaskSrcBlt 18 * 1 0 1 1 MaskSrcPatBlt 19 * 1 1 0 0 MaskPaint 20 * 1 1 0 1 MaskPatPaint 21 * 1 1 1 0 MaskSrcPaint 22 * 1 1 1 1 MaskBlt 23 */ 24 25 26 const BYTE ajShift4[2] = {4, 0}; 27 28 enum 29 { 30 INDEX_BitBlt_NOOP, 31 INDEX_BitBlt_DSTINVERT, 32 INDEX_BitBlt_BLACKNESS, 33 INDEX_BitBlt_WHITENESS, 34 INDEX_BitBlt_PATCOPY, 35 INDEX_BitBlt_NOTPATCOPY, 36 INDEX_BitBlt_SRCCOPY, 37 INDEX_BitBlt_NOTSRCCOPY, 38 INDEX_BitBlt_SRCERASE, 39 INDEX_BitBlt_NOTSRCERASE, 40 INDEX_BitBlt_PATINVERT, 41 INDEX_BitBlt_SRCINVERT, 42 INDEX_BitBlt_SRCAND, 43 INDEX_BitBlt_MERGEPAINT, 44 INDEX_BitBlt_MERGECOPY, 45 INDEX_BitBlt_SRCPAINT, 46 INDEX_BitBlt_PATPAINT, 47 INDEX_SrcPatBlt, 48 INDEX_PatPaint, 49 INDEX_SrcPaint, 50 INDEX_BitBlt, 51 }; 52 53 const PFN_DIBFUNCTION 54 gapfnDibFunction[] = 55 { 56 Dib_BitBlt_NOOP, 57 Dib_BitBlt_DSTINVERT, 58 Dib_BitBlt_BLACKNESS, 59 Dib_BitBlt_WHITENESS, 60 Dib_BitBlt_PATCOPY, 61 Dib_BitBlt_NOTPATCOPY, 62 Dib_BitBlt_SRCCOPY, 63 Dib_BitBlt_NOTSRCCOPY, 64 Dib_BitBlt_SRCERASE, 65 Dib_BitBlt_NOTSRCERASE, 66 Dib_BitBlt_PATINVERT, 67 Dib_BitBlt_SRCINVERT, 68 Dib_BitBlt_SRCAND, 69 Dib_BitBlt_MERGEPAINT, 70 Dib_BitBlt_MERGECOPY, 71 Dib_BitBlt_SRCPAINT, 72 Dib_BitBlt_PATPAINT, 73 Dib_SrcPatBlt, 74 Dib_PatPaint, 75 Dib_SrcPaint, 76 Dib_BitBlt, 77 }; 78 79 const UCHAR 80 gajIndexPerRop[256] = 81 { 82 INDEX_BitBlt_BLACKNESS, // BLACKNESS 83 INDEX_BitBlt, // DPSoon, 84 INDEX_BitBlt, // DPSona, 85 INDEX_SrcPatBlt, // PSon, 86 INDEX_BitBlt, // SDPona, 87 INDEX_PatPaint, // DPon, 88 INDEX_BitBlt, // PDSxnon, 89 INDEX_BitBlt, // PDSaon, 90 INDEX_BitBlt, // SDPnaa, 91 INDEX_BitBlt, // PDSxon, 92 INDEX_PatPaint, // DPna, 93 INDEX_BitBlt, // PSDnaon, 94 INDEX_SrcPatBlt, // SPna, 95 INDEX_BitBlt, // PDSnaon, 96 INDEX_BitBlt, // PDSonon, 97 INDEX_BitBlt_NOTPATCOPY, // Pn, 98 INDEX_BitBlt, // PDSona, 99 INDEX_BitBlt_NOTSRCERASE, // DSon / NOTSRCERASE 100 INDEX_BitBlt, // SDPxnon, 101 INDEX_BitBlt, // SDPaon, 102 INDEX_BitBlt, // DPSxnon, 103 INDEX_BitBlt, // DPSaon, 104 INDEX_BitBlt, // PSDPSanaxx, 105 INDEX_BitBlt, // SSPxDSxaxn, 106 INDEX_BitBlt, // SPxPDxa, 107 INDEX_BitBlt, // SDPSanaxn, 108 INDEX_BitBlt, // PDSPaox, 109 INDEX_BitBlt, // SDPSxaxn, 110 INDEX_BitBlt, // PSDPaox, 111 INDEX_BitBlt, // DSPDxaxn, 112 INDEX_BitBlt, // PDSox, 113 INDEX_BitBlt, // PDSoan, 114 INDEX_BitBlt, // DPSnaa, 115 INDEX_BitBlt, // SDPxon, 116 INDEX_SrcPaint, // DSna, 117 INDEX_BitBlt, // SPDnaon, 118 INDEX_BitBlt, // SPxDSxa, 119 INDEX_BitBlt, // PDSPanaxn, 120 INDEX_BitBlt, // SDPSaox, 121 INDEX_BitBlt, // SDPSxnox, 122 INDEX_BitBlt, // DPSxa, 123 INDEX_BitBlt, // PSDPSaoxxn, 124 INDEX_BitBlt, // DPSana, 125 INDEX_BitBlt, // SSPxPDxaxn, 126 INDEX_BitBlt, // SPDSoax, 127 INDEX_BitBlt, // PSDnox, 128 INDEX_BitBlt, // PSDPxox, 129 INDEX_BitBlt, // PSDnoan, 130 INDEX_SrcPatBlt, // PSna, 131 INDEX_BitBlt, // SDPnaon, 132 INDEX_BitBlt, // SDPSoox, 133 INDEX_BitBlt_NOTSRCCOPY, // Sn / NOTSRCCOPY 134 INDEX_BitBlt, // SPDSaox, 135 INDEX_BitBlt, // SPDSxnox, 136 INDEX_BitBlt, // SDPox, 137 INDEX_BitBlt, // SDPoan, 138 INDEX_BitBlt, // PSDPoax, 139 INDEX_BitBlt, // SPDnox, 140 INDEX_BitBlt, // SPDSxox, 141 INDEX_BitBlt, // SPDnoan, 142 INDEX_SrcPatBlt, // PSx, 143 INDEX_BitBlt, // SPDSonox, 144 INDEX_BitBlt, // SPDSnaox, 145 INDEX_SrcPatBlt, // PSan, 146 INDEX_BitBlt, // PSDnaa, 147 INDEX_BitBlt, // DPSxon, 148 INDEX_BitBlt, // SDxPDxa, 149 INDEX_BitBlt, // SPDSanaxn, 150 INDEX_BitBlt_SRCERASE, // SDna / SRCERASE 151 INDEX_BitBlt, // DPSnaon, 152 INDEX_BitBlt, // DSPDaox, 153 INDEX_BitBlt, // PSDPxaxn, 154 INDEX_BitBlt, // SDPxa, 155 INDEX_BitBlt, // PDSPDaoxxn, 156 INDEX_BitBlt, // DPSDoax, 157 INDEX_BitBlt, // PDSnox, 158 INDEX_BitBlt, // SDPana, 159 INDEX_BitBlt, // SSPxDSxoxn, 160 INDEX_BitBlt, // PDSPxox, 161 INDEX_BitBlt, // PDSnoan, 162 INDEX_PatPaint, // PDna, 163 INDEX_BitBlt, // DSPnaon, 164 INDEX_BitBlt, // DPSDaox, 165 INDEX_BitBlt, // SPDSxaxn, 166 INDEX_BitBlt, // DPSonon, 167 INDEX_BitBlt_DSTINVERT, // Dn / DSTINVERT 168 INDEX_BitBlt, // DPSox, 169 INDEX_BitBlt, // DPSoan, 170 INDEX_BitBlt, // PDSPoax, 171 INDEX_BitBlt, // DPSnox, 172 INDEX_BitBlt_PATINVERT, // DPx / PATINVERT 173 INDEX_BitBlt, // DPSDonox, 174 INDEX_BitBlt, // DPSDxox, 175 INDEX_BitBlt, // DPSnoan, 176 INDEX_BitBlt, // DPSDnaox, 177 INDEX_PatPaint, // DPan, 178 INDEX_BitBlt, // PDSxa, 179 INDEX_BitBlt, // DSPDSaoxxn, 180 INDEX_BitBlt, // DSPDoax, 181 INDEX_BitBlt, // SDPnox, 182 INDEX_BitBlt, // SDPSoax, 183 INDEX_BitBlt, // DSPnox, 184 INDEX_BitBlt_SRCINVERT, // DSx / SRCINVERT 185 INDEX_BitBlt, // SDPSonox, 186 INDEX_BitBlt, // DSPDSonoxxn, 187 INDEX_BitBlt, // PDSxxn, 188 INDEX_BitBlt, // DPSax, 189 INDEX_BitBlt, // PSDPSoaxxn, 190 INDEX_BitBlt, // SDPax, 191 INDEX_BitBlt, // PDSPDoaxxn, 192 INDEX_BitBlt, // SDPSnoax, 193 INDEX_BitBlt, // PDSxnan, 194 INDEX_BitBlt, // PDSana, 195 INDEX_BitBlt, // SSDxPDxaxn, 196 INDEX_BitBlt, // SDPSxox, 197 INDEX_BitBlt, // SDPnoan, 198 INDEX_BitBlt, // DSPDxox, 199 INDEX_BitBlt, // DSPnoan, 200 INDEX_BitBlt, // SDPSnaox, 201 INDEX_SrcPaint, // DSan, 202 INDEX_BitBlt, // PDSax, 203 INDEX_BitBlt, // DSPDSoaxxn, 204 INDEX_BitBlt, // DPSDnoax, 205 INDEX_BitBlt, // SDPxnan, 206 INDEX_BitBlt, // SPDSnoax, 207 INDEX_BitBlt, // DPSxnan, 208 INDEX_BitBlt, // SPxDSxo, 209 INDEX_BitBlt, // DPSaan, 210 INDEX_BitBlt, // DPSaa, 211 INDEX_BitBlt, // SPxDSxon, 212 INDEX_BitBlt, // DPSxna, 213 INDEX_BitBlt, // SPDSnoaxn, 214 INDEX_BitBlt, // SDPxna, 215 INDEX_BitBlt, // PDSPnoaxn, 216 INDEX_BitBlt, // DSPDSoaxx, 217 INDEX_BitBlt, // PDSaxn, 218 INDEX_BitBlt_SRCAND, // DSa / SRCAND 219 INDEX_BitBlt, // SDPSnaoxn, 220 INDEX_BitBlt, // DSPnoa, 221 INDEX_BitBlt, // DSPDxoxn, 222 INDEX_BitBlt, // SDPnoa, 223 INDEX_BitBlt, // SDPSxoxn, 224 INDEX_BitBlt, // SSDxPDxax, 225 INDEX_BitBlt, // PDSanan, 226 INDEX_BitBlt, // PDSxna, 227 INDEX_BitBlt, // SDPSnoaxn, 228 INDEX_BitBlt, // DPSDPoaxx, 229 INDEX_BitBlt, // SPDaxn, 230 INDEX_BitBlt, // PSDPSoaxx, 231 INDEX_BitBlt, // DPSaxn, 232 INDEX_BitBlt, // DPSxx, 233 INDEX_BitBlt, // PSDPSonoxx, 234 INDEX_BitBlt, // SDPSonoxn, 235 INDEX_SrcPaint, // DSxn, 236 INDEX_BitBlt, // DPSnax, 237 INDEX_BitBlt, // SDPSoaxn, 238 INDEX_BitBlt, // SPDnax, 239 INDEX_BitBlt, // DSPDoaxn, 240 INDEX_BitBlt, // DSPDSaoxx, 241 INDEX_BitBlt, // PDSxan, 242 INDEX_PatPaint, // DPa, 243 INDEX_BitBlt, // PDSPnaoxn, 244 INDEX_BitBlt, // DPSnoa, 245 INDEX_BitBlt, // DPSDxoxn, 246 INDEX_BitBlt, // PDSPonoxn, 247 INDEX_PatPaint, // PDxn, 248 INDEX_BitBlt, // DSPnax, 249 INDEX_BitBlt, // PDSPoaxn, 250 INDEX_BitBlt, // DPSoa, 251 INDEX_BitBlt, // DPSoxn, 252 INDEX_BitBlt_NOOP, // D, 253 INDEX_BitBlt, // DPSono, 254 INDEX_BitBlt, // SPDSxax, 255 INDEX_BitBlt, // DPSDaoxn, 256 INDEX_BitBlt, // DSPnao, 257 INDEX_PatPaint, // DPno, 258 INDEX_BitBlt, // PDSnoa, 259 INDEX_BitBlt, // PDSPxoxn, 260 INDEX_BitBlt, // SSPxDSxox, 261 INDEX_BitBlt, // SDPanan, 262 INDEX_BitBlt, // PSDnax, 263 INDEX_BitBlt, // DPSDoaxn, 264 INDEX_BitBlt, // DPSDPaoxx, 265 INDEX_BitBlt, // SDPxan, 266 INDEX_BitBlt, // PSDPxax, 267 INDEX_BitBlt, // DSPDaoxn, 268 INDEX_BitBlt, // DPSnao, 269 INDEX_BitBlt_MERGEPAINT, // DSno / MERGEPAINT 270 INDEX_BitBlt, // SPDSanax, 271 INDEX_BitBlt, // SDxPDxan, 272 INDEX_BitBlt, // DPSxo, 273 INDEX_BitBlt, // DPSano, 274 INDEX_BitBlt_MERGECOPY, // PSa / MERGECOPY 275 INDEX_BitBlt, // SPDSnaoxn, 276 INDEX_BitBlt, // SPDSonoxn, 277 INDEX_SrcPatBlt, // PSxn, 278 INDEX_BitBlt, // SPDnoa, 279 INDEX_BitBlt, // SPDSxoxn, 280 INDEX_BitBlt, // SDPnax, 281 INDEX_BitBlt, // PSDPoaxn, 282 INDEX_BitBlt, // SDPoa, 283 INDEX_BitBlt, // SPDoxn, 284 INDEX_BitBlt, // DPSDxax, 285 INDEX_BitBlt, // SPDSaoxn, 286 INDEX_BitBlt_SRCCOPY, // S / SRCCOPY 287 INDEX_BitBlt, // SDPono, 288 INDEX_BitBlt, // SDPnao, 289 INDEX_SrcPatBlt, // SPno, 290 INDEX_BitBlt, // PSDnoa, 291 INDEX_BitBlt, // PSDPxoxn, 292 INDEX_BitBlt, // PDSnax, 293 INDEX_BitBlt, // SPDSoaxn, 294 INDEX_BitBlt, // SSPxPDxax, 295 INDEX_BitBlt, // DPSanan, 296 INDEX_BitBlt, // PSDPSaoxx, 297 INDEX_BitBlt, // DPSxan, 298 INDEX_BitBlt, // PDSPxax, 299 INDEX_BitBlt, // SDPSaoxn, 300 INDEX_BitBlt, // DPSDanax, 301 INDEX_BitBlt, // SPxDSxan, 302 INDEX_BitBlt, // SPDnao, 303 INDEX_SrcPaint, // SDno, 304 INDEX_BitBlt, // SDPxo, 305 INDEX_BitBlt, // SDPano, 306 INDEX_BitBlt, // PDSoa, 307 INDEX_BitBlt, // PDSoxn, 308 INDEX_BitBlt, // DSPDxax, 309 INDEX_BitBlt, // PSDPaoxn, 310 INDEX_BitBlt, // SDPSxax, 311 INDEX_BitBlt, // PDSPaoxn, 312 INDEX_BitBlt, // SDPSanax, 313 INDEX_BitBlt, // SPxPDxan, 314 INDEX_BitBlt, // SSPxDSxax, 315 INDEX_BitBlt, // DSPDSanaxxn, 316 INDEX_BitBlt, // DPSao, 317 INDEX_BitBlt, // DPSxno, 318 INDEX_BitBlt, // SDPao, 319 INDEX_BitBlt, // SDPxno, 320 INDEX_BitBlt_SRCPAINT, // DSo / SRCPAINT 321 INDEX_BitBlt, // SDPnoo, 322 INDEX_BitBlt_PATCOPY, // P / PATCOPY 323 INDEX_BitBlt, // PDSono, 324 INDEX_BitBlt, // PDSnao, 325 INDEX_SrcPatBlt, // PSno, 326 INDEX_BitBlt, // PSDnao, 327 INDEX_PatPaint, // PDno, 328 INDEX_BitBlt, // PDSxo, 329 INDEX_BitBlt, // PDSano, 330 INDEX_BitBlt, // PDSao, 331 INDEX_BitBlt, // PDSxno, 332 INDEX_PatPaint, // DPo, 333 INDEX_BitBlt_PATPAINT, // DPSnoo, // PATPAINT 334 INDEX_SrcPatBlt, // PSo, 335 INDEX_BitBlt, // PSDnoo, 336 INDEX_BitBlt, // DPSoo, 337 INDEX_BitBlt_WHITENESS //WHITENESS 338 }; 339 340 const PFN_DIBFUNCTION 341 gapfnMaskFunction[8] = 342 { 343 Dib_MaskCopy, 344 Dib_MaskPatBlt, 345 Dib_MaskSrcBlt, 346 Dib_MaskSrcPatBlt, 347 Dib_MaskPaint, 348 Dib_MaskPatPaint, 349 Dib_MaskSrcPaint, 350 Dib_MaskBlt 351 }; 352