Synchronize up to trunk's revision r57756.
[reactos.git] / win32ss / gdi / diblib / DibLib.c
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 };