Initial commit - from Precise source
[freerdp-ubuntu-pcb-backport.git] / cunit / test_libgdi.c
1 /**
2  * FreeRDP: A Remote Desktop Protocol Client
3  * GDI Unit Tests
4  *
5  * Copyright 2010 Marc-Andre Moreau <marcandre.moreau@gmail.com>
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *     http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  */
19
20 #include <stdio.h>
21 #include <string.h>
22 #include <stdlib.h>
23 #include <freerdp/freerdp.h>
24
25 #include <freerdp/gdi/gdi.h>
26
27 #include <freerdp/gdi/dc.h>
28 #include <freerdp/gdi/pen.h>
29 #include <freerdp/gdi/line.h>
30 #include <freerdp/gdi/shape.h>
31 #include <freerdp/gdi/brush.h>
32 #include <freerdp/gdi/region.h>
33 #include <freerdp/gdi/bitmap.h>
34 #include <freerdp/gdi/palette.h>
35 #include <freerdp/gdi/drawing.h>
36 #include <freerdp/gdi/clipping.h>
37 #include <freerdp/gdi/32bpp.h>
38
39 #include "test_libgdi.h"
40
41 int init_libgdi_suite(void)
42 {
43         return 0;
44 }
45
46 int clean_libgdi_suite(void)
47 {
48         return 0;
49 }
50
51 int add_libgdi_suite(void)
52 {
53         add_test_suite(libgdi);
54
55         add_test_function(gdi_GetDC);
56         add_test_function(gdi_CreateCompatibleDC);
57         add_test_function(gdi_CreateBitmap);
58         add_test_function(gdi_CreateCompatibleBitmap);
59         add_test_function(gdi_CreatePen);
60         add_test_function(gdi_CreateSolidBrush);
61         add_test_function(gdi_CreatePatternBrush);
62         add_test_function(gdi_CreateRectRgn);
63         add_test_function(gdi_CreateRect);
64         add_test_function(gdi_GetPixel);
65         add_test_function(gdi_SetPixel);
66         add_test_function(gdi_SetROP2);
67         add_test_function(gdi_MoveToEx);
68         add_test_function(gdi_LineTo);
69         add_test_function(gdi_Ellipse);
70         add_test_function(gdi_PtInRect);
71         add_test_function(gdi_FillRect);
72         add_test_function(gdi_BitBlt_32bpp);
73         add_test_function(gdi_BitBlt_16bpp);
74         add_test_function(gdi_BitBlt_8bpp);
75         add_test_function(gdi_ClipCoords);
76         add_test_function(gdi_InvalidateRegion);
77
78         return 0;
79 }
80
81 /* BitBlt() Test Data */
82
83 /* source bitmap (16x16) */
84 unsigned char bmp_SRC[256] =
85 {
86         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
87         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
88         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
89         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
90         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
91         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
92         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
93         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
94         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
95         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
96         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
97         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
98         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
99         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
100         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
101         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
102 };
103
104 /* destination bitmap (16x16) */
105 unsigned char bmp_DST[256] =
106 {
107         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
108         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
109         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
110         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
111         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
112         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
113         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
114         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
115         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
116         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
117         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
118         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
119         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
120         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
121         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
122         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
123 };
124
125 /* pattern bitmap (8x8) */
126 unsigned char bmp_PAT[64] =
127 {
128         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
129         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
130         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
131         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
132         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
133         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
134         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
135         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
136 };
137
138 /* SRCCOPY (0x00CC0020) */
139 unsigned char bmp_SRCCOPY[256] =
140 {
141         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
142         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
143         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
144         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
145         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
146         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
147         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
148         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
149         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
150         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
151         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
152         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
153         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
154         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
155         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
156         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
157 };
158
159 /* BLACKNESS (0x00000042) */
160 unsigned char bmp_BLACKNESS[256] =
161 {
162         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
163         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
164         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
165         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
166         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
167         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
168         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
169         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
170         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
171         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
172         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
173         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
174         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
175         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
176         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
177         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
178 };
179
180 /* WHITENESS (0x00FF0062) */
181 unsigned char bmp_WHITENESS[256] =
182 {
183         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
184         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
185         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
186         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
187         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
188         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
189         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
190         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
191         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
192         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
193         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
194         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
195         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
196         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
197         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
198         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
199 };
200
201 /* SRCAND (0x008800C6) */
202 unsigned char bmp_SRCAND[256] =
203 {
204         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
205         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
206         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
207         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
208         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
209         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
210         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
211         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
212         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
213         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
214         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
215         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
216         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
217         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
218         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
219         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
220 };
221
222 /* SRCPAINT (0x00EE0086) */
223 unsigned char bmp_SRCPAINT[256] =
224 {
225         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
226         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
227         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
228         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
229         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
230         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
231         "\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
232         "\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
233         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF"
234         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF"
235         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF"
236         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF"
237         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
238         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
239         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
240         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
241 };
242
243 /* SRCINVERT (0x00660046) */
244 unsigned char bmp_SRCINVERT[256] =
245 {
246         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
247         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
248         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00"
249         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00"
250         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
251         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
252         "\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
253         "\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
254         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF"
255         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF"
256         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF"
257         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF"
258         "\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
259         "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
260         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
261         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
262 };
263
264 /* SRCERASE (0x00440328) */
265 unsigned char bmp_SRCERASE[256] =
266 {
267         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
268         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
269         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
270         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
271         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
272         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
273         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
274         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
275         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
276         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
277         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
278         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
279         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
280         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
281         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
282         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
283 };
284
285 /* NOTSRCCOPY (0x00330008) */
286 unsigned char bmp_NOTSRCCOPY[256] =
287 {
288         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
289         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
290         "\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00"
291         "\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00"
292         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
293         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
294         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
295         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
296         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
297         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
298         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
299         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
300         "\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00"
301         "\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00"
302         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
303         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
304 };
305
306 /* NOTSRCERASE (0x001100A6) */
307 unsigned char bmp_NOTSRCERASE[256] =
308 {
309         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
310         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
311         "\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
312         "\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
313         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
314         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
315         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
316         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
317         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
318         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
319         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
320         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
321         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\x00\x00\x00\x00"
322         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00"
323         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
324         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
325 };
326
327 /* DSTINVERT (0x00550009) */
328 unsigned char bmp_DSTINVERT[256] =
329 {
330         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
331         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
332         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
333         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
334         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
335         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
336         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
337         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
338         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
339         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
340         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
341         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
342         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
343         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
344         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
345         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
346 };
347
348 /* SPna (0x000C0324) */
349 unsigned char bmp_SPna[256] =
350 {
351         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
352         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
353         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
354         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
355         "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
356         "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
357         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
358         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
359         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
360         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
361         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00"
362         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00"
363         "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
364         "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
365         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
366         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
367 };
368
369 /* MERGEPAINT (0x00BB0226) */
370 unsigned char bmp_MERGEPAINT[256] =
371 {
372         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
373         "\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
374         "\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
375         "\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
376         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
377         "\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
378         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
379         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
380         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
381         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
382         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
383         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00"
384         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00"
385         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00"
386         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
387         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00"
388 };
389
390 /* MERGECOPY (0x00C000CA) */
391 unsigned char bmp_MERGECOPY[256] =
392 {
393         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
394         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
395         "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
396         "\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
397         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00"
398         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\x00\x00"
399         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
400         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
401         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
402         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
403         "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
404         "\x00\x00\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
405         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
406         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\x00\x00"
407         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
408         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
409 };
410
411 /* PATPAINT (0x00FB0A09) */
412 unsigned char bmp_PATPAINT[256] =
413 {
414         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
415         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
416         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
417         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
418         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
419         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
420         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
421         "\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
422         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
423         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
424         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
425         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
426         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00"
427         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
428         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
429         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
430 };
431
432 /* PATCOPY (0x00F00021) */
433 unsigned char bmp_PATCOPY[256] =
434 {
435         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
436         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
437         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
438         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
439         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
440         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
441         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
442         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
443         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
444         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
445         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
446         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
447         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
448         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
449         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
450         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
451 };
452
453 /* PATINVERT (0x005A0049) */
454 unsigned char bmp_PATINVERT[256] =
455 {
456         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
457         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
458         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
459         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
460         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
461         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
462         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
463         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
464         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
465         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
466         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
467         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
468         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
469         "\x00\x00\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\x00\x00"
470         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
471         "\xFF\xFF\x00\x00\xFF\xFF\x00\x00\x00\x00\xFF\xFF\x00\x00\xFF\xFF"
472 };
473
474 /* LineTo() Test Data */
475
476 unsigned char line_to_case_1[256] =
477 {
478         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
479         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
480         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
481         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
482         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
483         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
484         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
485         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
486         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
487         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
488         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
489         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
490         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
491         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
492         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
493         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
494 };
495
496 unsigned char line_to_case_2[256] =
497 {
498         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
499         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
500         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
501         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
502         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
503         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
504         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
505         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
506         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
507         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
508         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
509         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
510         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
511         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
512         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
513         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
514 };
515
516 unsigned char line_to_case_3[256] =
517 {
518         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
519         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
520         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
521         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
522         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
523         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
524         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
525         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
526         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
527         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
528         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
529         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
530         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
531         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
532         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
533         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
534 };
535
536 unsigned char line_to_case_4[256] =
537 {
538         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
539         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
540         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
541         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
542         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
543         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
544         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
545         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
546         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
547         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
548         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
549         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
550         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
551         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
552         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
553         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
554 };
555
556 unsigned char line_to_case_5[256] =
557 {
558         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
559         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
560         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
561         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
562         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
563         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
564         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
565         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
566         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
567         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
568         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
569         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
570         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
571         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
572         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
573         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
574 };
575
576 unsigned char line_to_case_6[256] =
577 {
578         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
579         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
580         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
581         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
582         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
583         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
584         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
585         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
586         "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
587         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
588         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
589         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
590         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
591         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
592         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
593         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
594 };
595
596 unsigned char line_to_case_7[256] =
597 {
598         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
599         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
600         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
601         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
602         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
603         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
604         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
605         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
606         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
607         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
608         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
609         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
610         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
611         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
612         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
613         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
614 };
615
616 unsigned char line_to_case_8[256] =
617 {
618         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
619         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
620         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
621         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
622         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
623         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
624         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
625         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
626         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
627         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
628         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
629         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
630         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
631         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
632         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
633         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
634 };
635
636 unsigned char line_to_case_9[256] =
637 {
638         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
639         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
640         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
641         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
642         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
643         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
644         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
645         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
646         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
647         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
648         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
649         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
650         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
651         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
652         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
653         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
654 };
655
656 unsigned char line_to_case_10[256] =
657 {
658         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
659         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
660         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
661         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
662         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
663         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
664         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
665         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
666         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
667         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
668         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
669         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
670         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
671         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
672         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
673         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
674 };
675
676 unsigned char line_to_case_11[256] =
677 {
678         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
679         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
680         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
681         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
682         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
683         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
684         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
685         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
686         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
687         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
688         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
689         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
690         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
691         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
692         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
693         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
694 };
695
696 unsigned char line_to_R2_BLACK[256] =
697 {
698         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
699         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
700         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
701         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
702         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
703         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
704         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
705         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
706         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
707         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
708         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
709         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
710         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
711         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
712         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
713         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
714 };
715
716 unsigned char line_to_R2_NOTMERGEPEN[256] =
717 {
718         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
719         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
720         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
721         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
722         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
723         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
724         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
725         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
726         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
727         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
728         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
729         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
730         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
731         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
732         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
733         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
734 };
735
736 unsigned char line_to_R2_MASKNOTPEN[256] =
737 {
738         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
739         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
740         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
741         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
742         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
743         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
744         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
745         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
746         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
747         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
748         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
749         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
750         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
751         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
752         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
753         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
754 };
755
756 unsigned char line_to_R2_NOTCOPYPEN[256] =
757 {
758         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
759         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
760         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
761         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
762         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
763         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
764         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
765         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
766         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
767         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
768         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
769         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
770         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
771         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
772         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
773         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
774 };
775
776 unsigned char line_to_R2_MASKPENNOT[256] =
777 {
778         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
779         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
780         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
781         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
782         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
783         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
784         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
785         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
786         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
787         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
788         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
789         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
790         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
791         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
792         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
793         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
794 };
795
796 unsigned char line_to_R2_NOT[256] =
797 {
798         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
799         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
800         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
801         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
802         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
803         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
804         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
805         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
806         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
807         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
808         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
809         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
810         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
811         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
812         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
813         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
814 };
815
816 unsigned char line_to_R2_XORPEN[256] =
817 {
818         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
819         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
820         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
821         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
822         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
823         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
824         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
825         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
826         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
827         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
828         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
829         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
830         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
831         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
832         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
833         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
834 };
835
836 unsigned char line_to_R2_NOTMASKPEN[256] =
837 {
838         "\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
839         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
840         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
841         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
842         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
843         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
844         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
845         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
846         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
847         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
848         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
849         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
850         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
851         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
852         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
853         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
854 };
855
856 unsigned char line_to_R2_MASKPEN[256] =
857 {
858         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
859         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
860         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
861         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
862         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
863         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
864         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
865         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
866         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
867         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
868         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
869         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
870         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
871         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
872         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
873         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
874 };
875
876 unsigned char line_to_R2_NOTXORPEN[256] =
877 {
878         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
879         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
880         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
881         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
882         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
883         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
884         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
885         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
886         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
887         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
888         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
889         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
890         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
891         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
892         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
893         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
894 };
895
896 unsigned char line_to_R2_NOP[256] =
897 {
898         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
899         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
900         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
901         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
902         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
903         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
904         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
905         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
906         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
907         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
908         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
909         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
910         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
911         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
912         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
913         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
914 };
915
916 unsigned char line_to_R2_MERGENOTPEN[256] =
917 {
918         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
919         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
920         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
921         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
922         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
923         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
924         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
925         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
926         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
927         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
928         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
929         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
930         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
931         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
932         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
933         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
934 };
935
936 unsigned char line_to_R2_COPYPEN[256] =
937 {
938         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
939         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
940         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
941         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
942         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
943         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
944         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
945         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
946         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
947         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
948         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
949         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
950         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
951         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
952         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
953         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
954 };
955
956 unsigned char line_to_R2_MERGEPENNOT[256] =
957 {
958         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
959         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
960         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
961         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
962         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
963         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
964         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
965         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
966         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
967         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
968         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
969         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
970         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
971         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
972         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
973         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
974 };
975
976 unsigned char line_to_R2_MERGEPEN[256] =
977 {
978         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
979         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
980         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
981         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
982         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
983         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
984         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
985         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
986         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
987         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
988         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
989         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
990         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
991         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
992         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
993         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
994 };
995
996 unsigned char line_to_R2_WHITE[256] =
997 {
998         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
999         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1000         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1001         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1002         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1003         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1004         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1005         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1006         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1007         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1008         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1009         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1010         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1011         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1012         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1013         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1014 };
1015
1016 /* PolylineTo() Test Data */
1017
1018 unsigned char polyline_to_case_1[256] =
1019 {
1020         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1021         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1022         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1023         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1024         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
1025         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF"
1026         "\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
1027         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF"
1028         "\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
1029         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF"
1030         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1031         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1032         "\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
1033         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF"
1034         "\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00"
1035         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1036 };
1037
1038 unsigned char polyline_to_case_2[256] =
1039 {
1040         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1041         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1042         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1043         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1044         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1045         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1046         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1047         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1048         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1049         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1050         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1051         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1052         "\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF"
1053         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1054         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1055         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1056 };
1057
1058 /* Ellipse() Test Data */
1059
1060 unsigned char ellipse_case_1[256] =
1061 {
1062         "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
1063         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1064         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1065         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1066         "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
1067         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1068         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1069         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1070         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1071         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1072         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1073         "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
1074         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1075         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1076         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1077         "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
1078 };
1079
1080 unsigned char ellipse_case_2[256] =
1081 {
1082         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1083         "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
1084         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1085         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1086         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1087         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1088         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
1089         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
1090         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
1091         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
1092         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1093         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1094         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1095         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1096         "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
1097         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1098 };
1099
1100 unsigned char ellipse_case_3[256] =
1101 {
1102         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1103         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1104         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1105         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1106         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1107         "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
1108         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1109         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1110         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1111         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1112         "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
1113         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1114         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1115         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1116         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1117         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1118 };
1119
1120 /* Polygon() Test Data */
1121
1122 unsigned char polygon_case_1[256] =
1123 {
1124         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1125         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1126         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1127         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF\xFF"
1128         "\xFF\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
1129         "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF\xFF"
1130         "\xFF\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1131         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF\xFF"
1132         "\xFF\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
1133         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF\xFF"
1134         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1135         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1136         "\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
1137         "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF"
1138         "\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1139         "\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"
1140 };
1141
1142 unsigned char polygon_case_2[256] =
1143 {
1144         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1145         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1146         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1147         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1148         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1149         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1150         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1151         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1152         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1153         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1154         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1155         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1156         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1157         "\xFF\xFF\xFF\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xFF\xFF"
1158         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1159         "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
1160 };
1161
1162 int CompareBitmaps(HGDI_BITMAP hBmp1, HGDI_BITMAP hBmp2)
1163 {
1164         int x, y;
1165         uint8 *p1, *p2;
1166
1167         int minw = (hBmp1->width < hBmp2->width) ? hBmp1->width : hBmp2->width;
1168         int minh = (hBmp1->height < hBmp2->height) ? hBmp1->height : hBmp2->height;
1169
1170         if (hBmp1->bitsPerPixel == hBmp2->bitsPerPixel)
1171         {
1172                 p1 = hBmp1->data;
1173                 p2 = hBmp2->data;
1174                 int bpp = hBmp1->bitsPerPixel;
1175
1176                 if (bpp == 32)
1177                 {
1178                         for (y = 0; y < minh; y++)
1179                         {
1180                                 for (x = 0; x < minw; x++)
1181                                 {
1182                                         if (*p1 != *p2)
1183                                                 return 0;
1184                                         p1++;
1185                                         p2++;
1186
1187                                         if (*p1 != *p2)
1188                                                 return 0;
1189                                         p1++;
1190                                         p2++;
1191
1192                                         if (*p1 != *p2)
1193                                                 return 0;
1194                                         p1 += 2;
1195                                         p2 += 2;
1196                                 }
1197                         }
1198                 }
1199                 else if (bpp == 16)
1200                 {
1201                         for (y = 0; y < minh; y++)
1202                         {
1203                                 for (x = 0; x < minw; x++)
1204                                 {
1205                                         if (*p1 != *p2)
1206                                                 return 0;
1207                                         p1++;
1208                                         p2++;
1209
1210                                         if (*p1 != *p2)
1211                                                 return 0;
1212                                         p1++;
1213                                         p2++;
1214                                 }
1215                         }
1216                 }
1217                 else if (bpp == 8)
1218                 {
1219                         for (y = 0; y < minh; y++)
1220                         {
1221                                 for (x = 0; x < minw; x++)
1222                                 {
1223                                         if (*p1 != *p2)
1224                                                 return 0;
1225                                         p1++;
1226                                         p2++;
1227                                 }
1228                         }
1229                 }
1230         }
1231         else
1232         {
1233                 return 0;
1234         }
1235
1236         return 1;
1237 }
1238
1239 void dump_bitmap(HGDI_BITMAP hBmp, char* name)
1240 {
1241         dump_data(hBmp->data, hBmp->width * hBmp->height * hBmp->bytesPerPixel, hBmp->width * hBmp->bytesPerPixel, name);
1242 }
1243
1244 void assertBitmapsEqual(HGDI_BITMAP hBmpActual, HGDI_BITMAP hBmpExpected, char *name)
1245 {
1246         int bitmapsEqual = CompareBitmaps(hBmpActual, hBmpExpected);
1247
1248         if (bitmapsEqual != 1)
1249         {
1250                 printf("\n%s\n", name);
1251                 dump_bitmap(hBmpActual, "Actual");
1252                 dump_bitmap(hBmpExpected, "Expected");
1253         }
1254
1255         CU_ASSERT(bitmapsEqual == 1);
1256 }
1257
1258 void test_gdi_GetDC(void)
1259 {
1260         HGDI_DC hdc = gdi_GetDC();
1261         CU_ASSERT(hdc->bytesPerPixel == 4);
1262         CU_ASSERT(hdc->bitsPerPixel == 32);
1263         CU_ASSERT(hdc->drawMode == GDI_R2_BLACK);
1264 }
1265
1266 void test_gdi_CreateCompatibleDC(void)
1267 {
1268         HGDI_DC hdc;
1269         HGDI_DC chdc;
1270  
1271         hdc = gdi_GetDC();
1272         hdc->bytesPerPixel = 2;
1273         hdc->bitsPerPixel = 16;
1274         hdc->drawMode = GDI_R2_XORPEN;
1275
1276         chdc = gdi_CreateCompatibleDC(hdc);
1277
1278         CU_ASSERT(chdc->bytesPerPixel == hdc->bytesPerPixel);
1279         CU_ASSERT(chdc->bitsPerPixel == hdc->bitsPerPixel);
1280         CU_ASSERT(chdc->drawMode == hdc->drawMode);
1281 }
1282
1283 void test_gdi_CreateBitmap(void)
1284 {
1285         int bpp;
1286         int width;
1287         int height;
1288         uint8* data;
1289         HGDI_BITMAP hBitmap;
1290         
1291         bpp = 32;
1292         width = 32;
1293         height = 16;
1294         data = (uint8*) malloc(width * height * 4);
1295         hBitmap = gdi_CreateBitmap(width, height, bpp, data);
1296
1297         CU_ASSERT(hBitmap->objectType == GDIOBJECT_BITMAP);
1298         CU_ASSERT(hBitmap->bitsPerPixel == bpp);
1299         CU_ASSERT(hBitmap->width == width);
1300         CU_ASSERT(hBitmap->height == height);
1301         CU_ASSERT(hBitmap->data == data);
1302
1303         gdi_DeleteObject((HGDIOBJECT) hBitmap);
1304 }
1305
1306 void test_gdi_CreateCompatibleBitmap(void)
1307 {
1308         HGDI_DC hdc;
1309         int width;
1310         int height;
1311         HGDI_BITMAP hBitmap;
1312         
1313         hdc = gdi_GetDC();
1314         hdc->bytesPerPixel = 4;
1315         hdc->bitsPerPixel = 32;
1316
1317         width = 32;
1318         height = 16;
1319         hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
1320
1321         CU_ASSERT(hBitmap->objectType == GDIOBJECT_BITMAP);
1322         CU_ASSERT(hBitmap->bytesPerPixel == hdc->bytesPerPixel);
1323         CU_ASSERT(hBitmap->bitsPerPixel == hdc->bitsPerPixel);
1324         CU_ASSERT(hBitmap->width == width);
1325         CU_ASSERT(hBitmap->height == height);
1326         CU_ASSERT(hBitmap->data != NULL);
1327
1328         gdi_DeleteObject((HGDIOBJECT) hBitmap);
1329 }
1330
1331 void test_gdi_CreatePen(void)
1332 {
1333         HGDI_PEN hPen = gdi_CreatePen(GDI_PS_SOLID, 8, 0xAABBCCDD);
1334         CU_ASSERT(hPen->style == GDI_PS_SOLID);
1335         CU_ASSERT(hPen->width == 8);
1336         CU_ASSERT(hPen->color == 0xAABBCCDD);
1337         gdi_DeleteObject((HGDIOBJECT) hPen);
1338 }
1339
1340 void test_gdi_CreateSolidBrush(void)
1341 {
1342         HGDI_BRUSH hBrush = gdi_CreateSolidBrush(0xAABBCCDD);
1343         CU_ASSERT(hBrush->objectType == GDIOBJECT_BRUSH);
1344         CU_ASSERT(hBrush->style == GDI_BS_SOLID);
1345         CU_ASSERT(hBrush->color == 0xAABBCCDD);
1346         gdi_DeleteObject((HGDIOBJECT) hBrush);
1347 }
1348
1349 void test_gdi_CreatePatternBrush(void)
1350 {
1351         HGDI_BRUSH hBrush;
1352         HGDI_BITMAP hBitmap;
1353
1354         hBitmap = gdi_CreateBitmap(64, 64, 32, NULL);
1355         hBrush = gdi_CreatePatternBrush(hBitmap);
1356
1357         CU_ASSERT(hBrush->objectType == GDIOBJECT_BRUSH);
1358         CU_ASSERT(hBrush->style == GDI_BS_PATTERN);
1359         CU_ASSERT(hBrush->pattern == hBitmap);
1360
1361         gdi_DeleteObject((HGDIOBJECT) hBitmap);
1362 }
1363
1364 void test_gdi_CreateRectRgn(void)
1365 {
1366         int x1 = 32;
1367         int y1 = 64;
1368         int x2 = 128;
1369         int y2 = 256;
1370
1371         HGDI_RGN hRegion = gdi_CreateRectRgn(x1, y1, x2, y2);
1372
1373         CU_ASSERT(hRegion->objectType == GDIOBJECT_REGION);
1374         CU_ASSERT(hRegion->x == x1);
1375         CU_ASSERT(hRegion->y == y1);
1376         CU_ASSERT(hRegion->w == x2 - x1 + 1);
1377         CU_ASSERT(hRegion->h == y2 - y1 + 1);
1378         CU_ASSERT(hRegion->null == 0);
1379
1380         gdi_DeleteObject((HGDIOBJECT) hRegion);
1381 }
1382
1383 void test_gdi_CreateRect(void)
1384 {
1385         int x1 = 32;
1386         int y1 = 64;
1387         int x2 = 128;
1388         int y2 = 256;
1389
1390         HGDI_RECT hRect = gdi_CreateRect(x1, y1, x2, y2);
1391
1392         CU_ASSERT(hRect->objectType == GDIOBJECT_RECT);
1393         CU_ASSERT(hRect->left == x1);
1394         CU_ASSERT(hRect->top == y1);
1395         CU_ASSERT(hRect->right == x2);
1396         CU_ASSERT(hRect->bottom == y2);
1397
1398         gdi_DeleteObject((HGDIOBJECT) hRect);
1399 }
1400
1401 void test_gdi_GetPixel(void)
1402 {
1403         HGDI_DC hdc;
1404         int width = 128;
1405         int height = 64;
1406         HGDI_BITMAP hBitmap;
1407
1408         hdc = gdi_GetDC();
1409         hdc->bytesPerPixel = 4;
1410         hdc->bitsPerPixel = 32;
1411         
1412         hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
1413         gdi_SelectObject(hdc, (HGDIOBJECT) hBitmap);
1414
1415         hBitmap->data[(64 * width * 4) + 32 * 4 + 0] = 0xDD;
1416         hBitmap->data[(64 * width * 4) + 32 * 4 + 1] = 0xCC;
1417         hBitmap->data[(64 * width * 4) + 32 * 4 + 2] = 0xBB;
1418         hBitmap->data[(64 * width * 4) + 32 * 4 + 3] = 0xAA;
1419
1420         CU_ASSERT(gdi_GetPixel(hdc, 32, 64) == 0xAABBCCDD);
1421
1422         gdi_DeleteObject((HGDIOBJECT) hBitmap);
1423 }
1424
1425 void test_gdi_SetPixel(void)
1426 {
1427         HGDI_DC hdc;
1428         int width = 128;
1429         int height = 64;
1430         HGDI_BITMAP hBitmap;
1431
1432         hdc = gdi_GetDC();
1433         hdc->bytesPerPixel = 4;
1434         hdc->bitsPerPixel = 32;
1435         
1436         hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
1437         gdi_SelectObject(hdc, (HGDIOBJECT) hBitmap);
1438
1439         gdi_SetPixel(hdc, 32, 64, 0xAABBCCDD);
1440         CU_ASSERT(gdi_GetPixel(hdc, 32, 64) == 0xAABBCCDD);
1441
1442         gdi_SetPixel(hdc, width - 1, height - 1, 0xAABBCCDD);
1443         CU_ASSERT(gdi_GetPixel(hdc, width - 1, height - 1) == 0xAABBCCDD);
1444
1445         gdi_DeleteObject((HGDIOBJECT) hBitmap);
1446 }
1447
1448 void test_gdi_SetROP2(void)
1449 {
1450         HGDI_DC hdc = gdi_GetDC();
1451         gdi_SetROP2(hdc, GDI_R2_BLACK);
1452         CU_ASSERT(hdc->drawMode == GDI_R2_BLACK);
1453 }
1454
1455 void test_gdi_MoveToEx(void)
1456 {
1457         HGDI_DC hdc;
1458         HGDI_PEN hPen;
1459         HGDI_POINT prevPoint;
1460
1461         hdc = gdi_GetDC();
1462         hPen = gdi_CreatePen(GDI_PS_SOLID, 8, 0xAABBCCDD);
1463         gdi_SelectObject(hdc, (HGDIOBJECT) hPen);
1464         gdi_MoveToEx(hdc, 128, 256, NULL);
1465
1466         CU_ASSERT(hdc->pen->posX == 128);
1467         CU_ASSERT(hdc->pen->posY == 256);
1468
1469         prevPoint = (HGDI_POINT) malloc(sizeof(GDI_POINT));
1470         memset(prevPoint, '\0', sizeof(GDI_POINT));
1471
1472         gdi_MoveToEx(hdc, 64, 128, prevPoint);
1473
1474         CU_ASSERT(prevPoint->x == 128);
1475         CU_ASSERT(prevPoint->y == 256);
1476         CU_ASSERT(hdc->pen->posX == 64);
1477         CU_ASSERT(hdc->pen->posY == 128);
1478 }
1479
1480 void test_gdi_LineTo(void)
1481 {
1482         HGDI_DC hdc;
1483         HGDI_PEN pen;
1484         uint8* data;
1485         HGDI_BITMAP hBmp;
1486         HGDI_BITMAP hBmp_LineTo_1;
1487         HGDI_BITMAP hBmp_LineTo_2;
1488         HGDI_BITMAP hBmp_LineTo_3;
1489         HGDI_BITMAP hBmp_LineTo_4;
1490         HGDI_BITMAP hBmp_LineTo_5;
1491         HGDI_BITMAP hBmp_LineTo_6;
1492         HGDI_BITMAP hBmp_LineTo_7;
1493         HGDI_BITMAP hBmp_LineTo_8;
1494         HGDI_BITMAP hBmp_LineTo_9;
1495         HGDI_BITMAP hBmp_LineTo_10;
1496         HGDI_BITMAP hBmp_LineTo_11;
1497         HGDI_BITMAP hBmp_LineTo_R2_BLACK;
1498         HGDI_BITMAP hBmp_LineTo_R2_NOTMERGEPEN;
1499         HGDI_BITMAP hBmp_LineTo_R2_MASKNOTPEN;
1500         HGDI_BITMAP hBmp_LineTo_R2_NOTCOPYPEN;
1501         HGDI_BITMAP hBmp_LineTo_R2_MASKPENNOT;
1502         HGDI_BITMAP hBmp_LineTo_R2_NOT;
1503         HGDI_BITMAP hBmp_LineTo_R2_XORPEN;
1504         HGDI_BITMAP hBmp_LineTo_R2_NOTMASKPEN;
1505         HGDI_BITMAP hBmp_LineTo_R2_MASKPEN;
1506         HGDI_BITMAP hBmp_LineTo_R2_NOTXORPEN;
1507         HGDI_BITMAP hBmp_LineTo_R2_NOP;
1508         HGDI_BITMAP hBmp_LineTo_R2_MERGENOTPEN;
1509         HGDI_BITMAP hBmp_LineTo_R2_COPYPEN;
1510         HGDI_BITMAP hBmp_LineTo_R2_MERGEPENNOT;
1511         HGDI_BITMAP hBmp_LineTo_R2_MERGEPEN;
1512         HGDI_BITMAP hBmp_LineTo_R2_WHITE;
1513         rdpPalette* hPalette;
1514         HCLRCONV clrconv;
1515         int bitsPerPixel = 8;
1516         int bytesPerPixel = 1;
1517
1518         hdc = gdi_GetDC();
1519         hdc->bitsPerPixel = bitsPerPixel;
1520         hdc->bytesPerPixel = bytesPerPixel;
1521         gdi_SetNullClipRgn(hdc);
1522
1523         pen = gdi_CreatePen(1, 1, 0);
1524         gdi_SelectObject(hdc, (HGDIOBJECT) pen);
1525
1526         hBmp = gdi_CreateCompatibleBitmap(hdc, 16, 16);
1527         gdi_SelectObject(hdc, (HGDIOBJECT) hBmp);
1528
1529         hPalette = (rdpPalette*) gdi_GetSystemPalette();
1530
1531         clrconv = (HCLRCONV) malloc(sizeof(CLRCONV));
1532         clrconv->alpha = 1;
1533         clrconv->invert = 0;
1534         clrconv->palette = hPalette;
1535
1536         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_1, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1537         hBmp_LineTo_1 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1538
1539         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_2, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1540         hBmp_LineTo_2 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1541
1542         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_3, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1543         hBmp_LineTo_3 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1544
1545         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_4, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1546         hBmp_LineTo_4 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1547
1548         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_5, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1549         hBmp_LineTo_5 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1550
1551         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_5, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1552         hBmp_LineTo_5 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1553
1554         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_6, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1555         hBmp_LineTo_6 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1556
1557         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_7, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1558         hBmp_LineTo_7 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1559
1560         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_8, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1561         hBmp_LineTo_8 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1562
1563         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_9, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1564         hBmp_LineTo_9 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1565
1566         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_10, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1567         hBmp_LineTo_10 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1568
1569         data = (uint8*) freerdp_image_convert((uint8*) line_to_case_11, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1570         hBmp_LineTo_11 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1571
1572         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_BLACK, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1573         hBmp_LineTo_R2_BLACK = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1574
1575         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_NOTMERGEPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1576         hBmp_LineTo_R2_NOTMERGEPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1577
1578         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_MASKNOTPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1579         hBmp_LineTo_R2_MASKNOTPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1580
1581         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_NOTCOPYPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1582         hBmp_LineTo_R2_NOTCOPYPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1583
1584         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_MASKPENNOT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1585         hBmp_LineTo_R2_MASKPENNOT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1586
1587         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_NOT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1588         hBmp_LineTo_R2_NOT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1589
1590         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_XORPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1591         hBmp_LineTo_R2_XORPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1592
1593         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_NOTMASKPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1594         hBmp_LineTo_R2_NOTMASKPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1595
1596         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_MASKPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1597         hBmp_LineTo_R2_MASKPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1598
1599         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_NOTXORPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1600         hBmp_LineTo_R2_NOTXORPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1601
1602         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_NOP, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1603         hBmp_LineTo_R2_NOP = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1604
1605         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_MERGENOTPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1606         hBmp_LineTo_R2_MERGENOTPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1607
1608         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_COPYPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1609         hBmp_LineTo_R2_COPYPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1610
1611         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_MERGEPENNOT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1612         hBmp_LineTo_R2_MERGEPENNOT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1613
1614         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_MERGEPEN, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1615         hBmp_LineTo_R2_MERGEPEN = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1616
1617         data = (uint8*) freerdp_image_convert((uint8*) line_to_R2_WHITE, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1618         hBmp_LineTo_R2_WHITE = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1619
1620         /* Test Case 1: (0,0) -> (15, 15) */
1621         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1622         gdi_MoveToEx(hdc, 0, 0, NULL);
1623         gdi_LineTo(hdc, 15, 15);
1624         assertBitmapsEqual(hBmp, hBmp_LineTo_1, "Case 1");
1625
1626         /* Test Case 2: (15,15) -> (0,0) */
1627         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1628         gdi_MoveToEx(hdc, 15, 15, NULL);
1629         gdi_LineTo(hdc, 0, 0);
1630         assertBitmapsEqual(hBmp, hBmp_LineTo_2, "Case 2");
1631
1632         /* Test Case 3: (15,0) -> (0,15) */
1633         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1634         gdi_MoveToEx(hdc, 15, 0, NULL);
1635         gdi_LineTo(hdc, 0, 15);
1636         assertBitmapsEqual(hBmp, hBmp_LineTo_3, "Case 3");
1637
1638         /* Test Case 4: (0,15) -> (15,0) */
1639         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1640         gdi_MoveToEx(hdc, 0, 15, NULL);
1641         gdi_LineTo(hdc, 15, 0);
1642         assertBitmapsEqual(hBmp, hBmp_LineTo_4, "Case 4");
1643
1644         /* Test Case 4: (0,15) -> (15,0) */
1645         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1646         gdi_MoveToEx(hdc, 0, 15, NULL);
1647         gdi_LineTo(hdc, 15, 0);
1648         assertBitmapsEqual(hBmp, hBmp_LineTo_4, "Case 4");
1649
1650         /* Test Case 5: (0,8) -> (15,8) */
1651         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1652         gdi_MoveToEx(hdc, 0, 8, NULL);
1653         gdi_LineTo(hdc, 15, 8);
1654         assertBitmapsEqual(hBmp, hBmp_LineTo_5, "Case 5");
1655
1656         /* Test Case 6: (15,8) -> (0,8) */
1657         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1658         gdi_MoveToEx(hdc, 15, 8, NULL);
1659         gdi_LineTo(hdc, 0, 8);
1660         assertBitmapsEqual(hBmp, hBmp_LineTo_6, "Case 6");
1661
1662         /* Test Case 7: (8,0) -> (8,15) */
1663         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1664         gdi_MoveToEx(hdc, 8, 0, NULL);
1665         gdi_LineTo(hdc, 8, 15);
1666         assertBitmapsEqual(hBmp, hBmp_LineTo_7, "Case 7");
1667
1668         /* Test Case 8: (8,15) -> (8,0) */
1669         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1670         gdi_MoveToEx(hdc, 8, 15, NULL);
1671         gdi_LineTo(hdc, 8, 0);
1672         assertBitmapsEqual(hBmp, hBmp_LineTo_8, "Case 8");
1673
1674         /* Test Case 9: (4,4) -> (12,12) */
1675         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1676         gdi_MoveToEx(hdc, 4, 4, NULL);
1677         gdi_LineTo(hdc, 12, 12);
1678         assertBitmapsEqual(hBmp, hBmp_LineTo_9, "Case 9");
1679
1680         /* Test Case 10: (12,12) -> (4,4) */
1681         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1682         gdi_MoveToEx(hdc, 12, 12, NULL);
1683         gdi_LineTo(hdc, 4, 4);
1684         assertBitmapsEqual(hBmp, hBmp_LineTo_10, "Case 10");
1685
1686         /* Test Case 11: (0,0) -> (+10,+10) */
1687         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1688         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1689         gdi_MoveToEx(hdc, 0, 0, NULL);
1690         gdi_LineTo(hdc, 16 + 10, 16 + 10);
1691         assertBitmapsEqual(hBmp, hBmp_LineTo_11, "Case 11");
1692
1693         /* Test Case 12: (0,0) -> (16,16), R2_BLACK */
1694         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1695         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1696         gdi_MoveToEx(hdc, 0, 0, NULL);
1697         gdi_SetROP2(hdc, GDI_R2_BLACK);
1698         gdi_LineTo(hdc, 16, 16);
1699         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_BLACK, "Case 12");
1700
1701         /* Test Case 13: (0,0) -> (16,16), R2_NOTMERGEPEN */
1702         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1703         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1704         gdi_MoveToEx(hdc, 0, 0, NULL);
1705         gdi_SetROP2(hdc, GDI_R2_NOTMERGEPEN);
1706         gdi_LineTo(hdc, 16, 16);
1707         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_NOTMERGEPEN, "Case 13");
1708
1709         /* Test Case 14: (0,0) -> (16,16), R2_MASKNOTPEN */
1710         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1711         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1712         gdi_MoveToEx(hdc, 0, 0, NULL);
1713         gdi_SetROP2(hdc, GDI_R2_MASKNOTPEN);
1714         gdi_LineTo(hdc, 16, 16);
1715         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_MASKNOTPEN, "Case 14");
1716
1717         /* Test Case 15: (0,0) -> (16,16), R2_NOTCOPYPEN */
1718         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1719         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1720         gdi_MoveToEx(hdc, 0, 0, NULL);
1721         gdi_SetROP2(hdc, GDI_R2_NOTCOPYPEN);
1722         gdi_LineTo(hdc, 16, 16);
1723         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_NOTCOPYPEN, "Case 15");
1724
1725         /* Test Case 16: (0,0) -> (16,16), R2_MASKPENNOT */
1726         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1727         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1728         gdi_MoveToEx(hdc, 0, 0, NULL);
1729         gdi_SetROP2(hdc, GDI_R2_MASKPENNOT);
1730         gdi_LineTo(hdc, 16, 16);
1731         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_MASKPENNOT, "Case 16");
1732
1733         /* Test Case 17: (0,0) -> (16,16), R2_NOT */
1734         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1735         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1736         gdi_MoveToEx(hdc, 0, 0, NULL);
1737         gdi_SetROP2(hdc, GDI_R2_NOT);
1738         gdi_LineTo(hdc, 16, 16);
1739         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_NOT, "Case 17");
1740
1741         /* Test Case 18: (0,0) -> (16,16), R2_XORPEN */
1742         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1743         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1744         gdi_MoveToEx(hdc, 0, 0, NULL);
1745         gdi_SetROP2(hdc, GDI_R2_XORPEN);
1746         gdi_LineTo(hdc, 16, 16);
1747         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_XORPEN, "Case 18");
1748
1749         /* Test Case 19: (0,0) -> (16,16), R2_NOTMASKPEN */
1750         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1751         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1752         gdi_MoveToEx(hdc, 0, 0, NULL);
1753         gdi_SetROP2(hdc, GDI_R2_NOTMASKPEN);
1754         gdi_LineTo(hdc, 16, 16);
1755         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_NOTMASKPEN, "Case 19");
1756
1757         /* Test Case 20: (0,0) -> (16,16), R2_MASKPEN */
1758         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1759         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1760         gdi_MoveToEx(hdc, 0, 0, NULL);
1761         gdi_SetROP2(hdc, GDI_R2_MASKPEN);
1762         gdi_LineTo(hdc, 16, 16);
1763         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_MASKPEN, "Case 20");
1764
1765         /* Test Case 21: (0,0) -> (16,16), R2_NOTXORPEN */
1766         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1767         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1768         gdi_MoveToEx(hdc, 0, 0, NULL);
1769         gdi_SetROP2(hdc, GDI_R2_NOTXORPEN);
1770         gdi_LineTo(hdc, 16, 16);
1771         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_NOTXORPEN, "Case 21");
1772
1773         /* Test Case 22: (0,0) -> (16,16), R2_NOP */
1774         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1775         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1776         gdi_MoveToEx(hdc, 0, 0, NULL);
1777         gdi_SetROP2(hdc, GDI_R2_NOP);
1778         gdi_LineTo(hdc, 16, 16);
1779         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_NOP, "Case 22");
1780
1781         /* Test Case 23: (0,0) -> (16,16), R2_MERGENOTPEN */
1782         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1783         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1784         gdi_MoveToEx(hdc, 0, 0, NULL);
1785         gdi_SetROP2(hdc, GDI_R2_MERGENOTPEN);
1786         gdi_LineTo(hdc, 16, 16);
1787         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_MERGENOTPEN, "Case 23");
1788
1789         /* Test Case 24: (0,0) -> (16,16), R2_COPYPEN */
1790         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1791         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1792         gdi_MoveToEx(hdc, 0, 0, NULL);
1793         gdi_SetROP2(hdc, GDI_R2_COPYPEN);
1794         gdi_LineTo(hdc, 16, 16);
1795         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_COPYPEN, "Case 24");
1796
1797         /* Test Case 25: (0,0) -> (16,16), R2_MERGEPENNOT */
1798         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1799         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1800         gdi_MoveToEx(hdc, 0, 0, NULL);
1801         gdi_SetROP2(hdc, GDI_R2_MERGEPENNOT);
1802         gdi_LineTo(hdc, 16, 16);
1803         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_MERGEPENNOT, "Case 25");
1804
1805         /* Test Case 26: (0,0) -> (16,16), R2_MERGEPEN */
1806         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1807         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1808         gdi_MoveToEx(hdc, 0, 0, NULL);
1809         gdi_SetROP2(hdc, GDI_R2_MERGEPEN);
1810         gdi_LineTo(hdc, 16, 16);
1811         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_MERGEPEN, "Case 26");
1812
1813         /* Test Case 27: (0,0) -> (16,16), R2_WHITE */
1814         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1815         gdi_SetClipRgn(hdc, 0, 0, 16, 16);
1816         gdi_MoveToEx(hdc, 0, 0, NULL);
1817         gdi_SetROP2(hdc, GDI_R2_WHITE);
1818         gdi_LineTo(hdc, 16, 16);
1819         assertBitmapsEqual(hBmp, hBmp_LineTo_R2_WHITE, "Case 27");
1820 }
1821
1822 void test_gdi_Ellipse(void)
1823 {
1824         HGDI_DC hdc;
1825         HGDI_PEN pen;
1826         uint8* data;
1827         HGDI_BITMAP hBmp;
1828         HGDI_BITMAP hBmp_Ellipse_1;
1829         HGDI_BITMAP hBmp_Ellipse_2;
1830         HGDI_BITMAP hBmp_Ellipse_3;
1831         rdpPalette* hPalette;
1832         HCLRCONV clrconv;
1833         int bitsPerPixel = 8;
1834         int bytesPerPixel = 1;
1835
1836         hdc = gdi_GetDC();
1837         hdc->bitsPerPixel = bitsPerPixel;
1838         hdc->bytesPerPixel = bytesPerPixel;
1839         gdi_SetNullClipRgn(hdc);
1840
1841         pen = gdi_CreatePen(1, 1, 0);
1842         gdi_SelectObject(hdc, (HGDIOBJECT) pen);
1843
1844         hBmp = gdi_CreateCompatibleBitmap(hdc, 16, 16);
1845         gdi_SelectObject(hdc, (HGDIOBJECT) hBmp);
1846
1847         hPalette = (rdpPalette*) gdi_GetSystemPalette();
1848
1849         clrconv = (HCLRCONV) malloc(sizeof(CLRCONV));
1850         clrconv->alpha = 1;
1851         clrconv->invert = 0;
1852         clrconv->palette = hPalette;
1853
1854         data = (uint8*) freerdp_image_convert((uint8*) ellipse_case_1, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1855         hBmp_Ellipse_1 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1856
1857         data = (uint8*) freerdp_image_convert((uint8*) ellipse_case_2, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1858         hBmp_Ellipse_2 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1859
1860         data = (uint8*) freerdp_image_convert((uint8*) ellipse_case_3, NULL, 16, 16, 8, bitsPerPixel, clrconv);
1861         hBmp_Ellipse_3 = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
1862
1863         /* Test Case 1: (0,0) -> (16, 16) */
1864         gdi_BitBlt(hdc, 0, 0, 16, 16, hdc, 0, 0, GDI_WHITENESS);
1865         gdi_Ellipse(hdc, 0, 0, 16, 16);
1866         //assertBitmapsEqual(hBmp, hBmp_Ellipse_1, "Case 1");
1867 }
1868
1869 void test_gdi_PtInRect(void)
1870 {
1871         HGDI_RECT hRect;
1872         int left = 20;
1873         int top = 40;
1874         int right = 60;
1875         int bottom = 80;
1876
1877         hRect = gdi_CreateRect(left, top, right, bottom);
1878
1879         CU_ASSERT(gdi_PtInRect(hRect, 0, 0) == 0);
1880         CU_ASSERT(gdi_PtInRect(hRect, 500, 500) == 0);
1881         CU_ASSERT(gdi_PtInRect(hRect, 40, 100) == 0);
1882         CU_ASSERT(gdi_PtInRect(hRect, 10, 40) == 0);
1883         CU_ASSERT(gdi_PtInRect(hRect, 30, 50) == 1);
1884         CU_ASSERT(gdi_PtInRect(hRect, left, top) == 1);
1885         CU_ASSERT(gdi_PtInRect(hRect, right, bottom) == 1);
1886         CU_ASSERT(gdi_PtInRect(hRect, right, 60) == 1);
1887         CU_ASSERT(gdi_PtInRect(hRect, 40, bottom) == 1);
1888 }
1889
1890 void test_gdi_FillRect(void)
1891 {
1892         HGDI_DC hdc;
1893         HGDI_RECT hRect;
1894         HGDI_BRUSH hBrush;
1895         HGDI_BITMAP hBitmap;
1896         GDI_COLOR color;
1897         GDI_COLOR pixel;
1898         GDI_COLOR rawPixel;
1899
1900         int x, y;
1901         int badPixels;
1902         int goodPixels;
1903         int width = 200;
1904         int height = 300;
1905
1906         int left = 20;
1907         int top = 40;
1908         int right = 60;
1909         int bottom = 80;
1910
1911         hdc = gdi_GetDC();
1912         hdc->bytesPerPixel = 4;
1913         hdc->bitsPerPixel = 32;
1914
1915         hRect = gdi_CreateRect(left, top, right, bottom);
1916
1917         hBitmap = gdi_CreateCompatibleBitmap(hdc, width, height);
1918         memset(hBitmap->data, 0, width * height * hdc->bytesPerPixel);
1919         gdi_SelectObject(hdc, (HGDIOBJECT) hBitmap);
1920
1921         color = (GDI_COLOR) ARGB32(0xFF, 0xAA, 0xBB, 0xCC);
1922         hBrush = gdi_CreateSolidBrush(color);
1923
1924         gdi_FillRect(hdc, hRect, hBrush);
1925
1926         badPixels = 0;
1927         goodPixels = 0;
1928
1929         for (x = 0; x < width; x++)
1930         {
1931                 for (y = 0; y < height; y++)
1932                 {
1933                         rawPixel = gdi_GetPixel(hdc, x, y);
1934                         pixel = gdi_get_color_32bpp(hdc, rawPixel);
1935
1936                         if (gdi_PtInRect(hRect, x, y))
1937                         {
1938                                 if (pixel == color) {
1939                                         goodPixels++;
1940                                 }
1941                                 else {
1942                                         printf("actual:%04X expected:%04X\n", gdi_GetPixel(hdc, x, y), color);
1943                                         badPixels++;
1944                                 }
1945                         }
1946                         else
1947                         {
1948                                 if (pixel == color) {
1949                                         badPixels++;
1950                                 }
1951                                 else {
1952                                         goodPixels++;
1953                                 }
1954                         }
1955                 }
1956         }
1957
1958         CU_ASSERT(goodPixels == width * height);
1959         CU_ASSERT(badPixels == 0);
1960
1961         gdi_DeleteObject((HGDIOBJECT) hBrush);
1962         gdi_DeleteObject((HGDIOBJECT) hBitmap);
1963 }
1964
1965 void test_gdi_BitBlt_32bpp(void)
1966 {
1967         uint8* data;
1968         HGDI_DC hdcSrc;
1969         HGDI_DC hdcDst;
1970         HGDI_BRUSH hBrush;
1971         HGDI_BITMAP hBmpSrc;
1972         HGDI_BITMAP hBmpDst;
1973         HGDI_BITMAP hBmpPat;
1974         HGDI_BITMAP hBmp_SPna;
1975         HGDI_BITMAP hBmp_BLACKNESS;
1976         HGDI_BITMAP hBmp_WHITENESS;
1977         HGDI_BITMAP hBmp_SRCCOPY;
1978         HGDI_BITMAP hBmp_SRCAND;
1979         HGDI_BITMAP hBmp_SRCPAINT;
1980         HGDI_BITMAP hBmp_SRCINVERT;
1981         HGDI_BITMAP hBmp_SRCERASE;
1982         HGDI_BITMAP hBmp_NOTSRCCOPY;
1983         HGDI_BITMAP hBmp_NOTSRCERASE;
1984         HGDI_BITMAP hBmp_DSTINVERT;
1985         HGDI_BITMAP hBmp_MERGECOPY;
1986         HGDI_BITMAP hBmp_MERGEPAINT;
1987         HGDI_BITMAP hBmp_PATCOPY;
1988         HGDI_BITMAP hBmp_PATPAINT;
1989         HGDI_BITMAP hBmp_PATINVERT;
1990         HGDI_BITMAP hBmpDstOriginal;
1991         rdpPalette* hPalette;
1992         HCLRCONV clrconv;
1993
1994         int bytesPerPixel = 4;
1995         int bitsPerPixel = 32;
1996         
1997         hdcSrc = gdi_GetDC();
1998         hdcSrc->bytesPerPixel = bytesPerPixel;
1999         hdcSrc->bitsPerPixel = bitsPerPixel;
2000
2001         hdcDst = gdi_GetDC();
2002         hdcDst->bytesPerPixel = bytesPerPixel;
2003         hdcDst->bitsPerPixel = bitsPerPixel;
2004
2005         hPalette = (rdpPalette*) gdi_GetSystemPalette();
2006
2007         clrconv = (HCLRCONV) malloc(sizeof(CLRCONV));
2008         clrconv->alpha = 1;
2009         clrconv->invert = 0;
2010         clrconv->palette = hPalette;
2011
2012         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRC, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2013         hBmpSrc = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2014
2015         data = (uint8*) freerdp_image_convert((uint8*) bmp_DST, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2016         hBmpDst = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2017
2018         data = (uint8*) freerdp_image_convert((uint8*) bmp_DST, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2019         hBmpDstOriginal = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2020
2021         data = (uint8*) freerdp_image_convert((uint8*) bmp_PAT, NULL, 8, 8, 8, bitsPerPixel, clrconv);
2022         hBmpPat = gdi_CreateBitmap(8, 8, bitsPerPixel, data);
2023
2024         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2025         hBmp_SRCCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2026
2027         data = (uint8*) freerdp_image_convert((uint8*) bmp_SPna, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2028         hBmp_SPna = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2029
2030         data = (uint8*) freerdp_image_convert((uint8*) bmp_BLACKNESS, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2031         hBmp_BLACKNESS = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2032
2033         data = (uint8*) freerdp_image_convert((uint8*) bmp_WHITENESS, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2034         hBmp_WHITENESS = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2035
2036         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCAND, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2037         hBmp_SRCAND = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2038
2039         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2040         hBmp_SRCPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2041
2042         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2043         hBmp_SRCINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2044
2045         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCERASE, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2046         hBmp_SRCERASE = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2047
2048         data = (uint8*) freerdp_image_convert((uint8*) bmp_NOTSRCCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2049         hBmp_NOTSRCCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2050
2051         data = (uint8*) freerdp_image_convert((uint8*) bmp_NOTSRCERASE, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2052         hBmp_NOTSRCERASE = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2053
2054         data = (uint8*) freerdp_image_convert((uint8*) bmp_DSTINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2055         hBmp_DSTINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2056
2057         data = (uint8*) freerdp_image_convert((uint8*) bmp_MERGECOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2058         hBmp_MERGECOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2059
2060         data = (uint8*) freerdp_image_convert((uint8*) bmp_MERGEPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2061         hBmp_MERGEPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2062
2063         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2064         hBmp_PATCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2065
2066         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2067         hBmp_PATPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2068
2069         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2070         hBmp_PATINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2071         
2072         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2073         gdi_SelectObject(hdcDst, (HGDIOBJECT) hBmpDst);
2074
2075         /* SRCCOPY */
2076         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2077         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCCOPY) == 1)
2078
2079         /* restore original destination bitmap */
2080         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2081         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2082         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2083                 
2084         /* BLACKNESS */
2085         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_BLACKNESS);
2086         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_BLACKNESS) == 1);
2087
2088         /* restore original destination bitmap */
2089         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2090         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2091         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2092         
2093         /* WHITENESS */
2094         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_WHITENESS);
2095         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_WHITENESS) == 1);
2096
2097         /* restore original destination bitmap */
2098         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2099         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2100         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2101
2102         /* SRCAND */
2103         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCAND);
2104         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCAND) == 1);
2105
2106         /* restore original destination bitmap */
2107         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2108         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2109         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2110         
2111         /* SRCPAINT */
2112         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCPAINT);
2113         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCPAINT) == 1);
2114
2115         /* restore original destination bitmap */
2116         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2117         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2118         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2119         
2120         /* SRCINVERT */
2121         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCINVERT);
2122         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCINVERT) == 1);
2123
2124         /* restore original destination bitmap */
2125         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2126         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2127         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2128         
2129         /* SRCERASE */
2130         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCERASE);
2131         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCERASE) == 1);
2132
2133         /* restore original destination bitmap */
2134         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2135         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2136         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2137         
2138         /* NOTSRCCOPY */
2139         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_NOTSRCCOPY);
2140         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_NOTSRCCOPY) == 1);
2141
2142         /* restore original destination bitmap */
2143         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2144         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2145         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2146         
2147         /* NOTSRCERASE */
2148         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_NOTSRCERASE);
2149         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_NOTSRCERASE) == 1);
2150
2151         /* restore original destination bitmap */
2152         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2153         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2154         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2155         
2156         /* DSTINVERT */
2157         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_DSTINVERT);
2158         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_DSTINVERT) == 1);
2159
2160         /* select a brush for operations using a pattern */
2161         hBrush = gdi_CreatePatternBrush(hBmpPat);
2162         gdi_SelectObject(hdcDst, (HGDIOBJECT) hBrush);
2163
2164         /* restore original destination bitmap */
2165         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2166         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2167         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2168         
2169         /* MERGECOPY */
2170         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_MERGECOPY);
2171         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_MERGECOPY) == 1);
2172
2173         /* restore original destination bitmap */
2174         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2175         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2176         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2177         
2178         /* MERGEPAINT */
2179         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_MERGEPAINT);
2180         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_MERGEPAINT) == 1);
2181         
2182         /* restore original destination bitmap */
2183         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2184         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2185         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2186         
2187         /* PATCOPY */
2188         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATCOPY);
2189         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATCOPY) == 1);
2190
2191         /* restore original destination bitmap */
2192         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2193         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2194         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2195         
2196         /* PATINVERT */
2197         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATINVERT);
2198         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATINVERT) == 1);
2199
2200         /* restore original destination bitmap */
2201         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2202         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2203         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2204         
2205         /* PATPAINT */
2206         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATPAINT);
2207         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATPAINT) == 1);
2208         
2209         /* restore original destination bitmap */
2210         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2211         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2212         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2213         
2214         /* SPna */
2215         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SPna);
2216         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SPna) == 1)
2217 }
2218
2219 void test_gdi_BitBlt_16bpp(void)
2220 {
2221         uint8* data;
2222         HGDI_DC hdcSrc;
2223         HGDI_DC hdcDst;
2224         HGDI_BRUSH hBrush;
2225         HGDI_BITMAP hBmpSrc;
2226         HGDI_BITMAP hBmpDst;
2227         HGDI_BITMAP hBmpPat;
2228         HGDI_BITMAP hBmp_SPna;
2229         HGDI_BITMAP hBmp_BLACKNESS;
2230         HGDI_BITMAP hBmp_WHITENESS;
2231         HGDI_BITMAP hBmp_SRCCOPY;
2232         HGDI_BITMAP hBmp_SRCAND;
2233         HGDI_BITMAP hBmp_SRCPAINT;
2234         HGDI_BITMAP hBmp_SRCINVERT;
2235         HGDI_BITMAP hBmp_SRCERASE;
2236         HGDI_BITMAP hBmp_NOTSRCCOPY;
2237         HGDI_BITMAP hBmp_NOTSRCERASE;
2238         HGDI_BITMAP hBmp_DSTINVERT;
2239         HGDI_BITMAP hBmp_MERGECOPY;
2240         HGDI_BITMAP hBmp_MERGEPAINT;
2241         HGDI_BITMAP hBmp_PATCOPY;
2242         HGDI_BITMAP hBmp_PATPAINT;
2243         HGDI_BITMAP hBmp_PATINVERT;
2244         HGDI_BITMAP hBmpDstOriginal;
2245         rdpPalette* hPalette;
2246         HCLRCONV clrconv;
2247
2248         int bytesPerPixel = 2;
2249         int bitsPerPixel = 16;
2250         
2251         hdcSrc = gdi_GetDC();
2252         hdcSrc->bytesPerPixel = bytesPerPixel;
2253         hdcSrc->bitsPerPixel = bitsPerPixel;
2254
2255         hdcDst = gdi_GetDC();
2256         hdcDst->bytesPerPixel = bytesPerPixel;
2257         hdcDst->bitsPerPixel = bitsPerPixel;
2258
2259         hPalette = (rdpPalette*) gdi_GetSystemPalette();
2260
2261         clrconv = (HCLRCONV) malloc(sizeof(CLRCONV));
2262         clrconv->alpha = 1;
2263         clrconv->invert = 0;
2264         clrconv->palette = hPalette;
2265
2266         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRC, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2267         hBmpSrc = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2268
2269         data = (uint8*) freerdp_image_convert((uint8*) bmp_DST, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2270         hBmpDst = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2271
2272         data = (uint8*) freerdp_image_convert((uint8*) bmp_DST, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2273         hBmpDstOriginal = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2274
2275         data = (uint8*) freerdp_image_convert((uint8*) bmp_PAT, NULL, 8, 8, 8, bitsPerPixel, clrconv);
2276         hBmpPat = gdi_CreateBitmap(8, 8, bitsPerPixel, data);
2277
2278         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2279         hBmp_SRCCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2280
2281         data = (uint8*) freerdp_image_convert((uint8*) bmp_SPna, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2282         hBmp_SPna = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2283         
2284         data = (uint8*) freerdp_image_convert((uint8*) bmp_BLACKNESS, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2285         hBmp_BLACKNESS = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2286
2287         data = (uint8*) freerdp_image_convert((uint8*) bmp_WHITENESS, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2288         hBmp_WHITENESS = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2289
2290         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCAND, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2291         hBmp_SRCAND = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2292
2293         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2294         hBmp_SRCPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2295
2296         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2297         hBmp_SRCINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2298
2299         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCERASE, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2300         hBmp_SRCERASE = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2301
2302         data = (uint8*) freerdp_image_convert((uint8*) bmp_NOTSRCCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2303         hBmp_NOTSRCCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2304
2305         data = (uint8*) freerdp_image_convert((uint8*) bmp_NOTSRCERASE, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2306         hBmp_NOTSRCERASE = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2307
2308         data = (uint8*) freerdp_image_convert((uint8*) bmp_DSTINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2309         hBmp_DSTINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2310
2311         data = (uint8*) freerdp_image_convert((uint8*) bmp_MERGECOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2312         hBmp_MERGECOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2313
2314         data = (uint8*) freerdp_image_convert((uint8*) bmp_MERGEPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2315         hBmp_MERGEPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2316
2317         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2318         hBmp_PATCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2319
2320         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2321         hBmp_PATPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2322
2323         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2324         hBmp_PATINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2325         
2326         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2327         gdi_SelectObject(hdcDst, (HGDIOBJECT) hBmpDst);
2328
2329         /* SRCCOPY */
2330         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2331         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCCOPY) == 1)
2332
2333         /* restore original destination bitmap */
2334         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2335         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2336         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2337                 
2338         /* BLACKNESS */
2339         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_BLACKNESS);
2340         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_BLACKNESS) == 1);
2341
2342         /* restore original destination bitmap */
2343         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2344         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2345         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2346         
2347         /* WHITENESS */
2348         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_WHITENESS);
2349         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_WHITENESS) == 1);
2350
2351         /* restore original destination bitmap */
2352         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2353         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2354         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2355
2356         /* SRCAND */
2357         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCAND);
2358         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCAND) == 1);
2359
2360         /* restore original destination bitmap */
2361         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2362         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2363         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2364         
2365         /* SRCPAINT */
2366         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCPAINT);
2367         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCPAINT) == 1);
2368
2369         /* restore original destination bitmap */
2370         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2371         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2372         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2373         
2374         /* SRCINVERT */
2375         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCINVERT);
2376         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCINVERT) == 1);
2377
2378         /* restore original destination bitmap */
2379         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2380         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2381         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2382         
2383         /* SRCERASE */
2384         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCERASE);
2385         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCERASE) == 1);
2386
2387         /* restore original destination bitmap */
2388         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2389         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2390         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2391         
2392         /* NOTSRCCOPY */
2393         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_NOTSRCCOPY);
2394         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_NOTSRCCOPY) == 1);
2395
2396         /* restore original destination bitmap */
2397         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2398         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2399         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2400         
2401         /* NOTSRCERASE */
2402         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_NOTSRCERASE);
2403         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_NOTSRCERASE) == 1);
2404
2405         /* restore original destination bitmap */
2406         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2407         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2408         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2409         
2410         /* DSTINVERT */
2411         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_DSTINVERT);
2412         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_DSTINVERT) == 1);
2413
2414         /* select a brush for operations using a pattern */
2415         hBrush = gdi_CreatePatternBrush(hBmpPat);
2416         gdi_SelectObject(hdcDst, (HGDIOBJECT) hBrush);
2417
2418         /* restore original destination bitmap */
2419         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2420         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2421         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2422         
2423         /* MERGECOPY */
2424         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_MERGECOPY);
2425         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_MERGECOPY) == 1);
2426
2427         /* restore original destination bitmap */
2428         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2429         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2430         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2431         
2432         /* MERGEPAINT */
2433         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_MERGEPAINT);
2434         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_MERGEPAINT) == 1);
2435         
2436         /* restore original destination bitmap */
2437         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2438         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2439         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2440         
2441         /* PATCOPY */
2442         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATCOPY);
2443         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATCOPY) == 1);
2444
2445         /* restore original destination bitmap */
2446         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2447         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2448         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2449         
2450         /* PATINVERT */
2451         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATINVERT);
2452         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATINVERT) == 1);
2453
2454         /* restore original destination bitmap */
2455         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2456         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2457         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2458         
2459         /* PATPAINT */
2460         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATPAINT);
2461         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATPAINT) == 1);
2462         
2463         /* restore original destination bitmap */
2464         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2465         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2466         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2467         
2468         /* SPna */
2469         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SPna);
2470         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SPna) == 1)
2471 }
2472
2473 void test_gdi_BitBlt_8bpp(void)
2474 {
2475         uint8* data;
2476         HGDI_DC hdcSrc;
2477         HGDI_DC hdcDst;
2478         HGDI_BRUSH hBrush;
2479         HGDI_BITMAP hBmpSrc;
2480         HGDI_BITMAP hBmpDst;
2481         HGDI_BITMAP hBmpPat;
2482         HGDI_BITMAP hBmp_SPna;
2483         HGDI_BITMAP hBmp_BLACKNESS;
2484         HGDI_BITMAP hBmp_WHITENESS;
2485         HGDI_BITMAP hBmp_SRCCOPY;
2486         HGDI_BITMAP hBmp_SRCAND;
2487         HGDI_BITMAP hBmp_SRCPAINT;
2488         HGDI_BITMAP hBmp_SRCINVERT;
2489         HGDI_BITMAP hBmp_SRCERASE;
2490         HGDI_BITMAP hBmp_NOTSRCCOPY;
2491         HGDI_BITMAP hBmp_NOTSRCERASE;
2492         HGDI_BITMAP hBmp_DSTINVERT;
2493         HGDI_BITMAP hBmp_MERGECOPY;
2494         HGDI_BITMAP hBmp_MERGEPAINT;
2495         HGDI_BITMAP hBmp_PATCOPY;
2496         HGDI_BITMAP hBmp_PATPAINT;
2497         HGDI_BITMAP hBmp_PATINVERT;
2498         HGDI_BITMAP hBmpDstOriginal;
2499         rdpPalette* hPalette;
2500         HCLRCONV clrconv;
2501
2502         int bytesPerPixel = 1;
2503         int bitsPerPixel = 8;
2504
2505         hdcSrc = gdi_GetDC();
2506         hdcSrc->bytesPerPixel = bytesPerPixel;
2507         hdcSrc->bitsPerPixel = bitsPerPixel;
2508
2509         hdcDst = gdi_GetDC();
2510         hdcDst->bytesPerPixel = bytesPerPixel;
2511         hdcDst->bitsPerPixel = bitsPerPixel;
2512
2513         hPalette = (rdpPalette*) gdi_GetSystemPalette();
2514
2515         clrconv = (HCLRCONV) malloc(sizeof(CLRCONV));
2516         clrconv->alpha = 1;
2517         clrconv->invert = 0;
2518         clrconv->palette = hPalette;
2519
2520         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRC, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2521         hBmpSrc = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2522
2523         data = (uint8*) freerdp_image_convert((uint8*) bmp_DST, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2524         hBmpDst = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2525
2526         data = (uint8*) freerdp_image_convert((uint8*) bmp_DST, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2527         hBmpDstOriginal = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2528
2529         data = (uint8*) freerdp_image_convert((uint8*) bmp_PAT, NULL, 8, 8, 8, bitsPerPixel, clrconv);
2530         hBmpPat = gdi_CreateBitmap(8, 8, bitsPerPixel, data);
2531
2532         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2533         hBmp_SRCCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2534
2535         data = (uint8*) freerdp_image_convert((uint8*) bmp_SPna, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2536         hBmp_SPna = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2537
2538         data = (uint8*) freerdp_image_convert((uint8*) bmp_BLACKNESS, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2539         hBmp_BLACKNESS = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2540
2541         data = (uint8*) freerdp_image_convert((uint8*) bmp_WHITENESS, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2542         hBmp_WHITENESS = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2543
2544         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCAND, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2545         hBmp_SRCAND = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2546
2547         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2548         hBmp_SRCPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2549
2550         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2551         hBmp_SRCINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2552
2553         data = (uint8*) freerdp_image_convert((uint8*) bmp_SRCERASE, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2554         hBmp_SRCERASE = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2555
2556         data = (uint8*) freerdp_image_convert((uint8*) bmp_NOTSRCCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2557         hBmp_NOTSRCCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2558
2559         data = (uint8*) freerdp_image_convert((uint8*) bmp_NOTSRCERASE, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2560         hBmp_NOTSRCERASE = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2561
2562         data = (uint8*) freerdp_image_convert((uint8*) bmp_DSTINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2563         hBmp_DSTINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2564
2565         data = (uint8*) freerdp_image_convert((uint8*) bmp_MERGECOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2566         hBmp_MERGECOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2567
2568         data = (uint8*) freerdp_image_convert((uint8*) bmp_MERGEPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2569         hBmp_MERGEPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2570
2571         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATCOPY, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2572         hBmp_PATCOPY = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2573
2574         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATPAINT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2575         hBmp_PATPAINT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2576
2577         data = (uint8*) freerdp_image_convert((uint8*) bmp_PATINVERT, NULL, 16, 16, 8, bitsPerPixel, clrconv);
2578         hBmp_PATINVERT = gdi_CreateBitmap(16, 16, bitsPerPixel, data);
2579
2580         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2581         gdi_SelectObject(hdcDst, (HGDIOBJECT) hBmpDst);
2582
2583         /* SRCCOPY */
2584         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2585         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCCOPY) == 1)
2586
2587         /* restore original destination bitmap */
2588         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2589         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2590         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2591
2592         /* BLACKNESS */
2593         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_BLACKNESS);
2594         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_BLACKNESS) == 1);
2595
2596         /* restore original destination bitmap */
2597         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2598         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2599         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2600
2601         /* WHITENESS */
2602         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_WHITENESS);
2603         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_WHITENESS) == 1);
2604
2605         /* restore original destination bitmap */
2606         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2607         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2608         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2609
2610         /* SRCAND */
2611         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCAND);
2612         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCAND) == 1);
2613
2614         /* restore original destination bitmap */
2615         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2616         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2617         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2618
2619         /* SRCPAINT */
2620         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCPAINT);
2621         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCPAINT) == 1);
2622
2623         /* restore original destination bitmap */
2624         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2625         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2626         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2627
2628         /* SRCINVERT */
2629         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCINVERT);
2630         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCINVERT) == 1);
2631
2632         /* restore original destination bitmap */
2633         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2634         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2635         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2636
2637         /* SRCERASE */
2638         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCERASE);
2639         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SRCERASE) == 1);
2640
2641         /* restore original destination bitmap */
2642         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2643         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2644         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2645
2646         /* NOTSRCCOPY */
2647         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_NOTSRCCOPY);
2648         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_NOTSRCCOPY) == 1);
2649
2650         /* restore original destination bitmap */
2651         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2652         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2653         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2654
2655         /* NOTSRCERASE */
2656         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_NOTSRCERASE);
2657         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_NOTSRCERASE) == 1);
2658
2659         /* restore original destination bitmap */
2660         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2661         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2662         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2663
2664         /* DSTINVERT */
2665         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_DSTINVERT);
2666         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_DSTINVERT) == 1);
2667
2668         /* select a brush for operations using a pattern */
2669         hBrush = gdi_CreatePatternBrush(hBmpPat);
2670         gdi_SelectObject(hdcDst, (HGDIOBJECT) hBrush);
2671
2672         /* restore original destination bitmap */
2673         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2674         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2675         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2676
2677         /* MERGECOPY */
2678         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_MERGECOPY);
2679         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_MERGECOPY) == 1);
2680
2681         /* restore original destination bitmap */
2682         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2683         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2684         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2685
2686         /* MERGEPAINT */
2687         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_MERGEPAINT);
2688         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_MERGEPAINT) == 1);
2689
2690         /* restore original destination bitmap */
2691         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2692         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2693         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2694
2695         /* PATCOPY */
2696         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATCOPY);
2697         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATCOPY) == 1);
2698
2699         /* restore original destination bitmap */
2700         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2701         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2702         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2703
2704         /* PATINVERT */
2705         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATINVERT);
2706         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATINVERT) == 1);
2707
2708         /* restore original destination bitmap */
2709         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2710         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2711         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2712
2713         /* PATPAINT */
2714         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_PATPAINT);
2715         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_PATPAINT) == 1);
2716
2717         /* restore original destination bitmap */
2718         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpDstOriginal);
2719         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SRCCOPY);
2720         gdi_SelectObject(hdcSrc, (HGDIOBJECT) hBmpSrc);
2721
2722         /* SPna */
2723         gdi_BitBlt(hdcDst, 0, 0, 16, 16, hdcSrc, 0, 0, GDI_SPna);
2724         CU_ASSERT(CompareBitmaps(hBmpDst, hBmp_SPna) == 1)
2725 }
2726
2727 void test_gdi_ClipCoords(void)
2728 {
2729         HGDI_DC hdc;
2730         HGDI_RGN rgn1;
2731         HGDI_RGN rgn2;
2732         HGDI_BITMAP bmp;
2733         int draw;
2734         
2735         hdc = gdi_GetDC();
2736         hdc->bytesPerPixel = 4;
2737         hdc->bitsPerPixel = 32;
2738         bmp = gdi_CreateBitmap(1024, 768, 4, NULL);
2739         gdi_SelectObject(hdc, (HGDIOBJECT) bmp);
2740         gdi_SetNullClipRgn(hdc);
2741
2742         rgn1 = gdi_CreateRectRgn(0, 0, 0, 0);
2743         rgn2 = gdi_CreateRectRgn(0, 0, 0, 0);
2744         rgn1->null = 1;
2745         rgn2->null = 1;
2746
2747         /* null clipping region */
2748         gdi_SetNullClipRgn(hdc);
2749         gdi_SetRgn(rgn1, 20, 20, 100, 100);
2750         gdi_SetRgn(rgn2, 20, 20, 100, 100);
2751
2752         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2753         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2754
2755         /* region all inside clipping region */
2756         gdi_SetClipRgn(hdc, 0, 0, 1024, 768);
2757         gdi_SetRgn(rgn1, 20, 20, 100, 100);
2758         gdi_SetRgn(rgn2, 20, 20, 100, 100);
2759
2760         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2761         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2762
2763         /* region all outside clipping region, on the left */
2764         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2765         gdi_SetRgn(rgn1, 20, 20, 100, 100);
2766         gdi_SetRgn(rgn2, 0, 0, 0, 0);
2767
2768         draw = gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2769         CU_ASSERT(draw == 0);
2770
2771         /* region all outside clipping region, on the right */
2772         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2773         gdi_SetRgn(rgn1, 420, 420, 100, 100);
2774         gdi_SetRgn(rgn2, 0, 0, 0, 0);
2775
2776         draw = gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2777         CU_ASSERT(draw == 0);
2778
2779         /* region all outside clipping region, on top */
2780         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2781         gdi_SetRgn(rgn1, 300, 20, 100, 100);
2782         gdi_SetRgn(rgn2, 0, 0, 0, 0);
2783
2784         draw = gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2785         CU_ASSERT(draw == 0);
2786
2787         /* region all outside clipping region, at the bottom */
2788         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2789         gdi_SetRgn(rgn1, 300, 420, 100, 100);
2790         gdi_SetRgn(rgn2, 0, 0, 0, 0);
2791
2792         draw = gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2793         CU_ASSERT(draw == 0);
2794
2795         /* left outside, right = clip, top = clip, bottom = clip */
2796         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2797         gdi_SetRgn(rgn1, 100, 300, 300, 100);
2798         gdi_SetRgn(rgn2, 300, 300, 100, 100);
2799
2800         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2801         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2802
2803         /* left outside, right inside, top = clip, bottom = clip */
2804         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2805         gdi_SetRgn(rgn1, 100, 300, 250, 100);
2806         gdi_SetRgn(rgn2, 300, 300, 50, 100);
2807
2808         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2809         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);       
2810         
2811         /* left = clip, right outside, top = clip, bottom = clip */
2812         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2813         gdi_SetRgn(rgn1, 300, 300, 300, 100);
2814         gdi_SetRgn(rgn2, 300, 300, 100, 100);
2815
2816         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2817         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2818
2819         /* left inside, right outside, top = clip, bottom = clip */
2820         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2821         gdi_SetRgn(rgn1, 350, 300, 200, 100);
2822         gdi_SetRgn(rgn2, 350, 300, 50, 100);
2823
2824         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2825         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2826
2827         /* top outside, bottom = clip, left = clip, right = clip */
2828         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2829         gdi_SetRgn(rgn1, 300, 100, 300, 300);
2830         gdi_SetRgn(rgn2, 300, 300, 100, 100);
2831
2832         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2833         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2834
2835         /* top = clip, bottom outside, left = clip, right = clip */
2836         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2837         gdi_SetRgn(rgn1, 300, 300, 100, 200);
2838         gdi_SetRgn(rgn2, 300, 300, 100, 100);
2839
2840         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2841         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2842         
2843         /* top = clip, bottom = clip, top = clip, bottom = clip */
2844         gdi_SetClipRgn(hdc, 300, 300, 100, 100);
2845         gdi_SetRgn(rgn1, 300, 300, 100, 100);
2846         gdi_SetRgn(rgn2, 300, 300, 100, 100);
2847
2848         gdi_ClipCoords(hdc, &(rgn1->x), &(rgn1->y), &(rgn1->w), &(rgn1->h), NULL, NULL);
2849         CU_ASSERT(gdi_EqualRgn(rgn1, rgn2) == 1);
2850 }
2851
2852 void test_gdi_InvalidateRegion(void)
2853 {
2854         HGDI_DC hdc;
2855         HGDI_RGN rgn1;
2856         HGDI_RGN rgn2;
2857         HGDI_RGN invalid;
2858         HGDI_BITMAP bmp;
2859         
2860         hdc = gdi_GetDC();
2861         hdc->bytesPerPixel = 4;
2862         hdc->bitsPerPixel = 32;
2863         bmp = gdi_CreateBitmap(1024, 768, 4, NULL);
2864         gdi_SelectObject(hdc, (HGDIOBJECT) bmp);
2865         gdi_SetNullClipRgn(hdc);
2866
2867         hdc->hwnd = (HGDI_WND) malloc(sizeof(GDI_WND));
2868         hdc->hwnd->invalid = gdi_CreateRectRgn(0, 0, 0, 0);
2869         hdc->hwnd->invalid->null = 1;
2870         invalid = hdc->hwnd->invalid;
2871         
2872         hdc->hwnd->count = 16;
2873         hdc->hwnd->cinvalid = (HGDI_RGN) malloc(sizeof(GDI_RGN) * hdc->hwnd->count);
2874
2875         rgn1 = gdi_CreateRectRgn(0, 0, 0, 0);
2876         rgn2 = gdi_CreateRectRgn(0, 0, 0, 0);
2877         rgn1->null = 1;
2878         rgn2->null = 1;
2879
2880         /* no previous invalid region */
2881         invalid->null = 1;
2882         gdi_SetRgn(rgn1, 300, 300, 100, 100);
2883         gdi_SetRgn(rgn2, 300, 300, 100, 100);
2884
2885         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2886         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2887
2888         /* region same as invalid region */
2889         gdi_SetRgn(invalid, 300, 300, 100, 100);
2890         gdi_SetRgn(rgn1, 300, 300, 100, 100);
2891         gdi_SetRgn(rgn2, 300, 300, 100, 100);
2892
2893         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2894         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2895
2896         /* left outside */
2897         gdi_SetRgn(invalid, 300, 300, 100, 100);
2898         gdi_SetRgn(rgn1, 100, 300, 300, 100);
2899         gdi_SetRgn(rgn2, 100, 300, 300, 100);
2900
2901         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2902         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2903
2904         /* right outside */
2905         gdi_SetRgn(invalid, 300, 300, 100, 100);
2906         gdi_SetRgn(rgn1, 300, 300, 300, 100);
2907         gdi_SetRgn(rgn2, 300, 300, 300, 100);
2908
2909         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2910         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2911
2912         /* top outside */
2913         gdi_SetRgn(invalid, 300, 300, 100, 100);
2914         gdi_SetRgn(rgn1, 300, 100, 100, 300);
2915         gdi_SetRgn(rgn2, 300, 100, 100, 300);
2916
2917         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2918         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2919
2920         /* bottom outside */
2921         gdi_SetRgn(invalid, 300, 300, 100, 100);
2922         gdi_SetRgn(rgn1, 300, 300, 100, 300);
2923         gdi_SetRgn(rgn2, 300, 300, 100, 300);
2924
2925         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2926         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2927
2928         /* left outside, right outside */
2929         gdi_SetRgn(invalid, 300, 300, 100, 100);
2930         gdi_SetRgn(rgn1, 100, 300, 600, 300);
2931         gdi_SetRgn(rgn2, 100, 300, 600, 300);
2932
2933         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2934         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2935
2936         /* top outside, bottom outside */
2937         gdi_SetRgn(invalid, 300, 300, 100, 100);
2938         gdi_SetRgn(rgn1, 300, 100, 100, 500);
2939         gdi_SetRgn(rgn2, 300, 100, 100, 500);
2940
2941         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2942         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2943
2944         /* all outside, left */
2945         gdi_SetRgn(invalid, 300, 300, 100, 100);
2946         gdi_SetRgn(rgn1, 100, 300, 100, 100);
2947         gdi_SetRgn(rgn2, 100, 300, 300, 100);
2948
2949         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2950         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2951
2952         /* all outside, right */
2953         gdi_SetRgn(invalid, 300, 300, 100, 100);
2954         gdi_SetRgn(rgn1, 700, 300, 100, 100);
2955         gdi_SetRgn(rgn2, 300, 300, 500, 100);
2956
2957         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2958         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2959
2960         /* all outside, top */
2961         gdi_SetRgn(invalid, 300, 300, 100, 100);
2962         gdi_SetRgn(rgn1, 300, 100, 100, 100);
2963         gdi_SetRgn(rgn2, 300, 100, 100, 300);
2964
2965         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2966         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2967
2968         /* all outside, bottom */
2969         gdi_SetRgn(invalid, 300, 300, 100, 100);
2970         gdi_SetRgn(rgn1, 300, 500, 100, 100);
2971         gdi_SetRgn(rgn2, 300, 300, 100, 300);
2972
2973         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2974         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2975
2976         /* all outside */
2977         gdi_SetRgn(invalid, 300, 300, 100, 100);
2978         gdi_SetRgn(rgn1, 100, 100, 600, 600);
2979         gdi_SetRgn(rgn2, 100, 100, 600, 600);
2980
2981         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2982         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2983
2984         /* everything */
2985         gdi_SetRgn(invalid, 300, 300, 100, 100);
2986         gdi_SetRgn(rgn1, 0, 0, 1024, 768);
2987         gdi_SetRgn(rgn2, 0, 0, 1024, 768);
2988
2989         gdi_InvalidateRegion(hdc, rgn1->x, rgn1->y, rgn1->w, rgn1->h);
2990         CU_ASSERT(gdi_EqualRgn(invalid, rgn2) == 1);
2991 }