uLib  User mode C/C++ extended API library for Win32 programmers.
TernaryOp.h
Go to the documentation of this file.
1 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2 // Project: uLib - User mode utility library.
3 // Module: Full set of GDI ternary raster operations, sorted by class.
4 // Author: Copyright (c) Love Nystrom
5 // License: NNOSL (BSD descendant, see NNOSL.txt in the base directory).
6 // (Sidenote: The value of this file alone is estimated at 1100 USD worktime!)
7 //~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
8 
9 #ifndef __TernaryOp_h_incl__
10 #define __TernaryOp_h_incl__
11 
12 #include <uLib/Common.h>
13 
14 #ifndef NO_TERNARY_DEFS
15 
16 //---------------------------------------------------------------------------
40 //---------------------------------------------------------------------------
42 
43 #ifndef R4_MASKBLT
44  #define R4_MASKBLT MAKEROP4( R3_S, R3_D )
47 #endif
48 
51 
52 #define R3_0 (0x00000042L) /* 00 - BLACKNESS */
53 #define R3_1 (0x00FF0062L) /* FF - WHITENESS */
54 #define R3_D (0x00AA0029L) /* AA - (DSTCOPY, i.e NOP) */
55 #define R3_Dn (0x00550009L) /* 55 - DSTINVERT */
56 
60 
61 #define R3_S (0x00CC0020L) /* CC - SRCCOPY */
62 #define R3_Sn (0x00330008L) /* 33 - NOTSRCCOPY */
63 
67 
68 #define R3_P (0x00F00021L) /* F0 - PATCOPY */
69 #define R3_Pn (0x000F0001L) /* 0F */
70 
74 
75 #define R3_DSon (0x001100A6L) /* 11 - NOTSRCERASE */
76 #define R3_DSna (0x00220326L) /* 22 - */
77 #define R3_DSx (0x00660046L) /* 66 - SRCINVERT */
78 #define R3_DSan (0x007700E6L) /* 77 - */
79 #define R3_DSa (0x008800C6L) /* 88 - SRCAND */
80 #define R3_DSxn (0x00990066L) /* 99 - */
81 #define R3_DSno (0x00BB0226L) /* BB - MERGEPAINT */
82 #define R3_DSo (0x00EE0086L) /* EE - SRCPAINT */
83 
84 #define R3_SDna (0x00440328L) /* 44 - SRCERASE */
85 #define R3_SDno (0x00DD0228L) /* DD - */
86 
90 
91 #define R3_DPa (0x00A000C9L) /* A0 - */
92 #define R3_DPo (0x00FA0089L) /* FA - */
93 #define R3_DPx (0x005A0049L) /* 5A - PATINVERT */
94 #define R3_DPan (0x005F00E9L) /* 5F - */
95 #define R3_DPna (0x000A0329L) /* 0A - */
96 #define R3_DPon (0x000500A9L) /* 05 - */
97 #define R3_DPno (0x00AF0229L) /* AF - */
98 
102 
103 #define R3_PDna (0x00500325L) /* 50 - */
104 #define R3_PDno (0x00F50225L) /* F5 - */
105 #define R3_PDxn (0x00A50065L) /* A5 - */
106 
110 
111 #define R3_SPna (0x000C0324L) /* 0C - */
112 #define R3_SPno (0x00CF0224L) /* CF - */
113 
117 
118 #define R3_PSon (0x000300AAL) /* 03 - */
119 #define R3_PSna (0x0030032AL) /* 30 - */
120 #define R3_PSx (0x003C004AL) /* 3C - */
121 #define R3_PSan (0x003F00EAL) /* 3F - */
122 #define R3_PSa (0x00C000CAL) /* C0 - MERGECOPY*/
123 #define R3_PSxn (0x00C3006AL) /* C3 - */
124 #define R3_PSno (0x00F3022AL) /* F3 - */
125 #define R3_PSo (0x00FC008AL) /* FC - */
126 
130 
131 #define R3_DPSoon (0x00010289L) /* 01 - D or( P or( not S )) */
132 #define R3_DPSona (0x00020C89L) /* 02 - D or( not( P and S )) */
133 #define R3_DPSxnon (0x00140869L) /* 14 - D xor( not( P or ( not S )))) */
134 #define R3_DPSaon (0x001502C9L) /* 15 - */
135 #define R3_DPSnaa (0x00200F09L) /* 20 - */
136 #define R3_DPSxa (0x00280369L) /* 28 - */
137 #define R3_DPSana (0x002A0CC9L) /* 2A - */
138 #define R3_DPSxon (0x00410249L) /* 41 - */
139 #define R3_DPSnaon (0x00450B29L) /* 45 - */
140 #define R3_DPSDoax (0x004A0789L) /* 4A - */
141 #define R3_DPSDaox (0x005206C9L) /* 52 - */
142 #define R3_DPSonon (0x005408A9L) /* 54 - */
143 #define R3_DPSox (0x005601A9L) /* 56 - */
144 #define R3_DPSoan (0x00570389L) /* 57 - */
145 #define R3_DPSnox (0x00590609L) /* 59 - */
146 #define R3_DPSDonox (0x005B18A9L) /* 5B - */
147 #define R3_DPSDxox (0x005C0649L) /* 5C - */
148 #define R3_DPSnoan (0x005D0E29L) /* 5D - */
149 #define R3_DPSDnaox (0x005E1B29L) /* 5E - */
150 #define R3_DPSax (0x006A01E9L) /* 6A - */
151 #define R3_DPSDnoax (0x007A1E29L) /* 7A - */
152 #define R3_DPSxnan (0x007D0C69L) /* 7D - */
153 #define R3_DPSaan (0x007F03C9L) /* 7F - */
154 #define R3_DPSaa (0x008003E9L) /* 80 - */
155 #define R3_DPSxna (0x00820C49L) /* 82 - */
156 #define R3_DPSDPoaxx (0x009217A9L) /* 92 - */
157 #define R3_DPSaxn (0x009501C9L) /* 95 - */
158 #define R3_DPSxx (0x00960169L) /* 96 - */
159 #define R3_DPSnax (0x009A0709L) /* 9A - */
160 #define R3_DPSnoa (0x00A20E09L) /* A2 - */
161 #define R3_DPSDxoxn (0x00A30669L) /* A3 - */
162 #define R3_DPSoa (0x00A803A9L) /* A8 - */
163 #define R3_DPSoxn (0x00A90189L) /* A9 - */
164 #define R3_DPSono (0x00AB0889L) /* AB - */
165 #define R3_DPSDaoxn (0x00AD06E9L) /* AD - */
166 #define R3_DPSDoaxn (0x00B507A9L) /* B5 - */
167 #define R3_DPSDPaoxx (0x00B616E9L) /* B6 - */
168 #define R3_DPSnao (0x00BA0B09L) /* BA - */
169 #define R3_DPSxo (0x00BE0269L) /* BE - */
170 #define R3_DPSano (0x00BF08C9L) /* BF - */
171 #define R3_DPSDxax (0x00CA0749L) /* CA - */
172 #define R3_DPSanan (0x00D50CE9L) /* D5 - */
173 #define R3_DPSxan (0x00D70349L) /* D7 - */
174 #define R3_DPSDanax (0x00DA1CE9L) /* DA - */
175 #define R3_DPSao (0x00EA02E9L) /* EA - */
176 #define R3_DPSxno (0x00EB0849L) /* EB - */
177 #define R3_DPSoo (0x00FE02A9L) /* FE - */
178 #define R3_DPSnoo (0x00FB0A09L) /* FB - PATPAINT */
179 
183 
184 #define R3_DSPDxaxn (0x001D0766L) /* 1D - */
185 #define R3_DSPDaox (0x004606C6L) /* 46 - */
186 #define R3_DSPnaon (0x00510B26L) /* 51 - */
187 #define R3_DSPDSaoxxn (0x006116C6L) /* 61 - */
188 #define R3_DSPDoax (0x00620786L) /* 62 - */
189 #define R3_DSPnox (0x00650606L) /* 65 - */
190 #define R3_DSPDSonoxxn (0x006858A6L) /* 68 - */
191 #define R3_DSPDxox (0x00740646L) /* 74 - */
192 #define R3_DSPnoan (0x00750E26L) /* 75 - */
193 #define R3_DSPDSoaxxn (0x00791786L) /* 79 - */
194 #define R3_DSPDSoaxx (0x008617A6L) /* 86 - */
195 #define R3_DSPnoa (0x008A0E06L) /* 8A - */
196 #define R3_DSPDxoxn (0x008B0666L) /* 8B - */
197 #define R3_DSPDoaxn (0x009D07A6L) /* 9D - */
198 #define R3_DSPDSaoxx (0x009E16E6L) /* 9E - */
199 #define R3_DSPnax (0x00A60706L) /* A6 - */
200 #define R3_DSPDSanaxxn (0x00E95CE6L) /* E9 - */
201 #define R3_DSPnao (0x00AE0B06L) /* AE - */
202 #define R3_DSPDaoxn (0x00B906E6L) /* B9 - */
203 #define R3_DSPDxax (0x00E20746L) /* E2 - */
204 
208 
209 #define R3_SDPona (0x00040C88L) /* 04 - */
210 #define R3_SDPnaa (0x00080F08L) /* 08 - */
211 #define R3_SDPxnon (0x00120868L) /* 12 - */
212 #define R3_SDPaon (0x001302C8L) /* 13 - */
213 #define R3_SDPSanaxn (0x00191CC8L) /* 19 - */
214 #define R3_SDPSxaxn (0x001B0768L) /* 1B - */
215 #define R3_SDPxon (0x00210248L) /* 21 - */
216 #define R3_SDPSaox (0x002606C8L) /* 26 - */
217 #define R3_SDPSxnox (0x00271868L) /* 27 - */
218 #define R3_SDPnaon (0x00310B28L) /* 31 - */
219 #define R3_SDPSoox (0x00320688L) /* 32 - */
220 #define R3_SDPox (0x003601A8L) /* 36 - */
221 #define R3_SDPoan (0x00370388L) /* 37 - */
222 #define R3_SDPxa (0x00480368L) /* 48 - */
223 #define R3_SDPana (0x004C0CC8L) /* 4C - */
224 #define R3_SDPnox (0x00630608L) /* 63 - */
225 #define R3_SDPSoax (0x00640788L) /* 64 - */
226 #define R3_SDPSonox (0x006718A8L) /* 67 - */
227 #define R3_SDPax (0x006C01E8L) /* 6C - */
228 #define R3_SDPSnoax (0x006E1E28L) /* 6E - */
229 
233 
234 #define R3_SSPxDSxaxn (0x00171D54L) /* 17 - */
235 #define R3_SPxPDxa (0x00180D59L) /* 18 - */
236 #define R3_SPDnaon (0x00230B24L) /* 23 - */
237 #define R3_SPxDSxa (0x00240D55L) /* 24 - */
238 #define R3_SSPxPDxaxn (0x002B1D58L) /* 2B - */
239 #define R3_SPDSoax (0x002C0784L) /* 2C - */
240 #define R3_SPDSaox (0x003406C4L) /* 34 - */
241 #define R3_SPDSxnox (0x00351864L) /* 35 - */
242 #define R3_SPDnox (0x00390604L) /* 39 - */
243 #define R3_SPDSxox (0x003A0644L) /* 3A - */
244 #define R3_SPDnoan (0x003B0E24L) /* 3B - */
245 #define R3_SPDSonox (0x003D18A4L) /* 3D - */
246 #define R3_SPDSnaox (0x003E1B24L) /* 3E - */
247 #define R3_SDxPDxa (0x00420D5DL) /* 42 - */
248 #define R3_SPDSanaxn (0x00431CC4L) /* 43 - */
249 #define R3_SSPxDSxoxn (0x004D1954L) /* 4D - */
250 #define R3_SPDSxaxn (0x00530764L) /* 53 - */
251 #define R3_SSDxPDxaxn (0x00711D5CL) /* 71 - */
252 #define R3_SDPSxox (0x00720648L) /* 72 - */
253 #define R3_SDPnoan (0x00730E28L) /* 73 - */
254 #define R3_SDPSnaox (0x00761B28L) /* 76 - */
255 #define R3_SDPxnan (0x007B0C68L) /* 7B - */
256 #define R3_SPDSnoax (0x007C1E24L) /* 7C - */
257 #define R3_SPxDSxo (0x007E0955L) /* 7E - */
258 #define R3_SPxDSxon (0x00810975L) /* 81 - */
259 #define R3_SPDSnoaxn (0x00831E04L) /* 83 - */
260 #define R3_SDPxna (0x00840C48L) /* 84 - */
261 #define R3_SDPSnaoxn (0x00891B08L) /* 89 - */
262 #define R3_SDPnoa (0x008C0E08L) /* 8C - */
263 #define R3_SDPSxoxn (0x008D0668L) /* 8D - */
264 #define R3_SSDxPDxax (0x008E1D7CL) /* 8E - */
265 #define R3_SDPSnoaxn (0x00911E08L) /* 91 - */
266 #define R3_SPDaxn (0x009301C4L) /* 93 - */
267 #define R3_SDPSonoxn (0x00981888L) /* 98 - */
268 #define R3_SDPSoaxn (0x009B07A8L) /* 9B - */
269 #define R3_SPDnax (0x009C0704L) /* 9C - */
270 #define R3_SPDSxax (0x00AC0744L) /* AC - */
271 #define R3_SSPxDSxox (0x00B21974L) /* B2 - */
272 #define R3_SDPanan (0x00B30CE8L) /* B3 - */
273 #define R3_SDPxan (0x00B70348L) /* B7 - */
274 #define R3_SPDSanax (0x00BC1CE4L) /* BC - */
275 #define R3_SDxPDxan (0x00BD0D7DL) /* BD - */
276 #define R3_SPDSnaoxn (0x00C11B04L) /* C1 - */
277 #define R3_SPDSonoxn (0x00C21884L) /* C2 - */
278 #define R3_SPDnoa (0x00C40E04L) /* C4 - */
279 #define R3_SPDSxoxn (0x00C50664L) /* C5 - */
280 #define R3_SDPnax (0x00C60708L) /* C6 - */
281 #define R3_SDPoa (0x00C803A8L) /* C8 - */
282 #define R3_SPDoxn (0x00C90184L) /* C9 - */
283 #define R3_SPDSaoxn (0x00CB06E4L) /* CB - */
284 #define R3_SDPono (0x00CD0888L) /* CD - */
285 #define R3_SDPnao (0x00CE0B08L) /* CE - */
286 #define R3_SPDSoaxn (0x00D307A4L) /* D3 - */
287 #define R3_SSPxPDxax (0x00D41D78L) /* D4 - */
288 #define R3_SDPSaoxn (0x00D906E8L) /* D9 - */
289 #define R3_SPxDSxan (0x00DB0D75L) /* DB - */
290 #define R3_SPDnao (0x00DC0B04L) /* DC - */
291 #define R3_SDPxo (0x00DE0268L) /* DE - */
292 #define R3_SDPano (0x00DF08C8L) /* DF - */
293 #define R3_SDPSxax (0x00E40748L) /* E4 - */
294 #define R3_SDPSanax (0x00E61CE8L) /* E6 - */
295 #define R3_SPxPDxan (0x00E70D79L) /* E7 - */
296 #define R3_SSPxDSxax (0x00E81D74L) /* E8 - */
297 #define R3_SDPao (0x00EC02E8L) /* EC - */
298 #define R3_SDPxno (0x00ED0848L) /* ED - */
299 #define R3_SDPnoo (0x00EF0A08L) /* EF - */
300 
304 
305 #define R3_PDSxnon (0x00060865L) /* 06 - */
306 #define R3_PDSaon (0x000702C5L) /* 07 - */
307 #define R3_PDSxon (0x00090245L) /* 09 - */
308 #define R3_PSDnaon (0x000B0B2AL) /* 0B - */
309 #define R3_PDSnaon (0x000D0B25L) /* 0D - */
310 #define R3_PDSonon (0x000E08A5L) /* 0E - */
311 #define R3_PDSona (0x00100C85L) /* 10 - */
312 #define R3_PSDPSanaxx (0x00165CCAL) /* 16 - */
313 #define R3_PDSPaox (0x001A06C5L) /* 1A - */
314 #define R3_PSDPaox (0x001C06CAL) /* 1C - */
315 #define R3_PDSox (0x001E01A5L) /* 1E - */
316 #define R3_PDSoan (0x001F0385L) /* 1F - */
317 #define R3_PDSPanaxn (0x00251CC5L) /* 25 - */
318 #define R3_PSDPSaoxxn (0x002916CAL) /* 29 - */
319 #define R3_PSDnox (0x002D060AL) /* 2D - */
320 #define R3_PSDPxox (0x002E064AL) /* 2E - */
321 #define R3_PSDnoan (0x002F0E2AL) /* 2F - */
322 #define R3_PSDPoax (0x0038078AL) /* 38 - */
323 #define R3_PSDnaa (0x00400F0AL) /* 40 - */
324 #define R3_PSDPxaxn (0x0047076AL) /* 47 - */
325 #define R3_PDSPDaoxxn (0x004916C5L) /* 49 - */
326 #define R3_PDSnox (0x004B0605L) /* 4B - */
327 #define R3_PDSPxox (0x004E0645L) /* 4E - */
328 #define R3_PDSnoan (0x004F0E25L) /* 4F - */
329 #define R3_PDSPoax (0x00580785L) /* 58 - */
330 #define R3_PDSxa (0x00600365L) /* 60 - */
331 #define R3_PDSxxn (0x00690145L) /* 69 - */
332 #define R3_PSDPSoaxxn (0x006B178AL) /* 6B - */
333 #define R3_PDSPDoaxxn (0x006D1785L) /* 6D - */
334 #define R3_PDSxnan (0x006F0C65L) /* 6F - */
335 #define R3_PDSana (0x00700CC5L) /* 70 - */
336 #define R3_PDSax (0x007801E5L) /* 78 - */
337 #define R3_PDSPnoaxn (0x00851E05L) /* 85 - */
338 #define R3_PDSaxn (0x008701C5L) /* 87 - */
339 #define R3_PDSanan (0x008F0CE5L) /* 8F - */
340 #define R3_PDSxna (0x00900C45L) /* 90 - */
341 #define R3_PSDPSoaxx (0x009417AAL) /* 94 - */
342 #define R3_PSDPSonoxx (0x0097588AL) /* 97 - */
343 #define R3_PDSxan (0x009F0345L) /* 9F - */
344 #define R3_PDSPnaoxn (0x00A11B05L) /* A1 - */
345 #define R3_PDSPonoxn (0x00A41885L) /* A4 - */
346 #define R3_PDSPoaxn (0x00A707A5L) /* A7 - */
347 #define R3_PDSnoa (0x00B00E05L) /* B0 - */
348 #define R3_PDSPxoxn (0x00B10665L) /* B1 - */
349 #define R3_PSDnax (0x00B4070AL) /* B4 - */
350 #define R3_PSDPxax (0x00B8074AL) /* B8 - E.g: BitBlt( hdc,x,y,cx,cy, hdcMono,0,0, R3_PSDPxax ); Put curr brush where mask has 0's. */
351 #define R3_PSDPoaxn (0x00C707AAL) /* C7 - */
352 #define R3_PSDnoa (0x00D00E0AL) /* D0 - */
353 #define R3_PSDPxoxn (0x00D1066AL) /* D1 - */
354 #define R3_PDSnax (0x00D20705L) /* D2 - */
355 #define R3_PSDPSaoxx (0x00D616EAL) /* D6 - */
356 #define R3_PDSPxax (0x00D80745L) /* D8 - */
357 #define R3_PDSoa (0x00E003A5L) /* E0 - */
358 #define R3_PDSoxn (0x00E10185L) /* E1 - */
359 #define R3_PSDPaoxn (0x00E306EAL) /* E3 - */
360 #define R3_PDSPaoxn (0x00E506E5L) /* E5 - */
361 #define R3_PDSono (0x00F10885L) /* F1 - */
362 #define R3_PDSnao (0x00F20B05L) /* F2 - */
363 #define R3_PSDnao (0x00F40B0AL) /* F4 - */
364 #define R3_PDSxo (0x00F60265L) /* F6 - */
365 #define R3_PDSano (0x00F708C5L) /* F7 - P and( not( D or S )) */
366 #define R3_PDSao (0x00F802E5L) /* F8 - P and( D or S ) */
367 #define R3_PDSxno (0x00F90845L) /* F9 - P xor( not( D or S )) */
368 #define R3_PSDnoo (0x00FD0A0AL) /* FD - not( P or ( S or D )) */
369 
372 #endif //NO_TERNARY
373 #endif//ndef __TernaryOp_h_incl__
374 // EOF
Common include; Added types, small "ubiquitous" utilities, et c.