This commit was manufactured by cvs2svn to create branch 'captive'.
[reactos.git] / subsys / win32k / freetype / grfont.c
1 // Taken from FreeType 2 (www.freetype.org)
2
3 #undef WIN32_LEAN_AND_MEAN
4 #include <windows.h>
5 #include <ddk/ntddk.h>
6 #include <win32k/dc.h>
7 #include <win32k/bitmaps.h>
8 #include "../eng/objects.h"
9
10 //#define NDEBUG
11 #include <win32k/debug1.h>
12
13 // #include "grfont.h"
14 // #include <string.h>
15
16 /* font characters */
17
18 const unsigned char  font_8x8[2048] =
19 {
20     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
21     0x7E, 0x81, 0xA5, 0x81, 0xBD, 0x99, 0x81, 0x7E,
22     0x7E, 0xFF, 0xDB, 0xFF, 0xC3, 0xE7, 0xFF, 0x7E,
23     0x6C, 0xFE, 0xFE, 0xFE, 0x7C, 0x38, 0x10, 0x00,
24     0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x10, 0x00,
25     0x38, 0x7C, 0x38, 0xFE, 0xFE, 0x92, 0x10, 0x7C,
26     0x00, 0x10, 0x38, 0x7C, 0xFE, 0x7C, 0x38, 0x7C,
27     0x00, 0x00, 0x18, 0x3C, 0x3C, 0x18, 0x00, 0x00,
28     0xFF, 0xFF, 0xE7, 0xC3, 0xC3, 0xE7, 0xFF, 0xFF,
29     0x00, 0x3C, 0x66, 0x42, 0x42, 0x66, 0x3C, 0x00,
30     0xFF, 0xC3, 0x99, 0xBD, 0xBD, 0x99, 0xC3, 0xFF,
31     0x0F, 0x07, 0x0F, 0x7D, 0xCC, 0xCC, 0xCC, 0x78,
32     0x3C, 0x66, 0x66, 0x66, 0x3C, 0x18, 0x7E, 0x18,
33     0x3F, 0x33, 0x3F, 0x30, 0x30, 0x70, 0xF0, 0xE0,
34     0x7F, 0x63, 0x7F, 0x63, 0x63, 0x67, 0xE6, 0xC0,
35     0x99, 0x5A, 0x3C, 0xE7, 0xE7, 0x3C, 0x5A, 0x99,
36     0x80, 0xE0, 0xF8, 0xFE, 0xF8, 0xE0, 0x80, 0x00,
37     0x02, 0x0E, 0x3E, 0xFE, 0x3E, 0x0E, 0x02, 0x00,
38     0x18, 0x3C, 0x7E, 0x18, 0x18, 0x7E, 0x3C, 0x18,
39     0x66, 0x66, 0x66, 0x66, 0x66, 0x00, 0x66, 0x00,
40     0x7F, 0xDB, 0xDB, 0x7B, 0x1B, 0x1B, 0x1B, 0x00,
41     0x3E, 0x63, 0x38, 0x6C, 0x6C, 0x38, 0x86, 0xFC,
42     0x00, 0x00, 0x00, 0x00, 0x7E, 0x7E, 0x7E, 0x00,
43     0x18, 0x3C, 0x7E, 0x18, 0x7E, 0x3C, 0x18, 0xFF,
44     0x18, 0x3C, 0x7E, 0x18, 0x18, 0x18, 0x18, 0x00,
45     0x18, 0x18, 0x18, 0x18, 0x7E, 0x3C, 0x18, 0x00,
46     0x00, 0x18, 0x0C, 0xFE, 0x0C, 0x18, 0x00, 0x00,
47     0x00, 0x30, 0x60, 0xFE, 0x60, 0x30, 0x00, 0x00,
48     0x00, 0x00, 0xC0, 0xC0, 0xC0, 0xFE, 0x00, 0x00,
49     0x00, 0x24, 0x66, 0xFF, 0x66, 0x24, 0x00, 0x00,
50     0x00, 0x18, 0x3C, 0x7E, 0xFF, 0xFF, 0x00, 0x00,
51     0x00, 0xFF, 0xFF, 0x7E, 0x3C, 0x18, 0x00, 0x00,
52     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
53     0x18, 0x3C, 0x3C, 0x18, 0x18, 0x00, 0x18, 0x00,
54     0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00, 0x00, 0x00,
55     0x6C, 0x6C, 0xFE, 0x6C, 0xFE, 0x6C, 0x6C, 0x00,
56     0x18, 0x7E, 0xC0, 0x7C, 0x06, 0xFC, 0x18, 0x00,
57     0x00, 0xC6, 0xCC, 0x18, 0x30, 0x66, 0xC6, 0x00,
58     0x38, 0x6C, 0x38, 0x76, 0xDC, 0xCC, 0x76, 0x00,
59     0x30, 0x30, 0x60, 0x00, 0x00, 0x00, 0x00, 0x00,
60     0x18, 0x30, 0x60, 0x60, 0x60, 0x30, 0x18, 0x00,
61     0x60, 0x30, 0x18, 0x18, 0x18, 0x30, 0x60, 0x00,
62     0x00, 0x66, 0x3C, 0xFF, 0x3C, 0x66, 0x00, 0x00,
63     0x00, 0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x00,
64     0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x30,
65     0x00, 0x00, 0x00, 0x7E, 0x00, 0x00, 0x00, 0x00,
66     0x00, 0x00, 0x00, 0x00, 0x00, 0x18, 0x18, 0x00,
67     0x06, 0x0C, 0x18, 0x30, 0x60, 0xC0, 0x80, 0x00,
68     0x7C, 0xCE, 0xDE, 0xF6, 0xE6, 0xC6, 0x7C, 0x00,
69     0x30, 0x70, 0x30, 0x30, 0x30, 0x30, 0xFC, 0x00,
70     0x78, 0xCC, 0x0C, 0x38, 0x60, 0xCC, 0xFC, 0x00,
71     0x78, 0xCC, 0x0C, 0x38, 0x0C, 0xCC, 0x78, 0x00,
72     0x1C, 0x3C, 0x6C, 0xCC, 0xFE, 0x0C, 0x1E, 0x00,
73     0xFC, 0xC0, 0xF8, 0x0C, 0x0C, 0xCC, 0x78, 0x00,
74     0x38, 0x60, 0xC0, 0xF8, 0xCC, 0xCC, 0x78, 0x00,
75     0xFC, 0xCC, 0x0C, 0x18, 0x30, 0x30, 0x30, 0x00,
76     0x78, 0xCC, 0xCC, 0x78, 0xCC, 0xCC, 0x78, 0x00,
77     0x78, 0xCC, 0xCC, 0x7C, 0x0C, 0x18, 0x70, 0x00,
78     0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x00,
79     0x00, 0x18, 0x18, 0x00, 0x00, 0x18, 0x18, 0x30,
80     0x18, 0x30, 0x60, 0xC0, 0x60, 0x30, 0x18, 0x00,
81     0x00, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00, 0x00,
82     0x60, 0x30, 0x18, 0x0C, 0x18, 0x30, 0x60, 0x00,
83     0x3C, 0x66, 0x0C, 0x18, 0x18, 0x00, 0x18, 0x00,
84     0x7C, 0xC6, 0xDE, 0xDE, 0xDC, 0xC0, 0x7C, 0x00,
85     0x30, 0x78, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0x00,
86     0xFC, 0x66, 0x66, 0x7C, 0x66, 0x66, 0xFC, 0x00,
87     0x3C, 0x66, 0xC0, 0xC0, 0xC0, 0x66, 0x3C, 0x00,
88     0xF8, 0x6C, 0x66, 0x66, 0x66, 0x6C, 0xF8, 0x00,
89     0xFE, 0x62, 0x68, 0x78, 0x68, 0x62, 0xFE, 0x00,
90     0xFE, 0x62, 0x68, 0x78, 0x68, 0x60, 0xF0, 0x00,
91     0x3C, 0x66, 0xC0, 0xC0, 0xCE, 0x66, 0x3A, 0x00,
92     0xCC, 0xCC, 0xCC, 0xFC, 0xCC, 0xCC, 0xCC, 0x00,
93     0x78, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
94     0x1E, 0x0C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78, 0x00,
95     0xE6, 0x66, 0x6C, 0x78, 0x6C, 0x66, 0xE6, 0x00,
96     0xF0, 0x60, 0x60, 0x60, 0x62, 0x66, 0xFE, 0x00,
97     0xC6, 0xEE, 0xFE, 0xFE, 0xD6, 0xC6, 0xC6, 0x00,
98     0xC6, 0xE6, 0xF6, 0xDE, 0xCE, 0xC6, 0xC6, 0x00,
99     0x38, 0x6C, 0xC6, 0xC6, 0xC6, 0x6C, 0x38, 0x00,
100     0xFC, 0x66, 0x66, 0x7C, 0x60, 0x60, 0xF0, 0x00,
101     0x7C, 0xC6, 0xC6, 0xC6, 0xD6, 0x7C, 0x0E, 0x00,
102     0xFC, 0x66, 0x66, 0x7C, 0x6C, 0x66, 0xE6, 0x00,
103     0x7C, 0xC6, 0xE0, 0x78, 0x0E, 0xC6, 0x7C, 0x00,
104     0xFC, 0xB4, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
105     0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xFC, 0x00,
106     0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00,
107     0xC6, 0xC6, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00,
108     0xC6, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0xC6, 0x00,
109     0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x30, 0x78, 0x00,
110     0xFE, 0xC6, 0x8C, 0x18, 0x32, 0x66, 0xFE, 0x00,
111     0x78, 0x60, 0x60, 0x60, 0x60, 0x60, 0x78, 0x00,
112     0xC0, 0x60, 0x30, 0x18, 0x0C, 0x06, 0x02, 0x00,
113     0x78, 0x18, 0x18, 0x18, 0x18, 0x18, 0x78, 0x00,
114     0x10, 0x38, 0x6C, 0xC6, 0x00, 0x00, 0x00, 0x00,
115     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0xFF,
116     0x30, 0x30, 0x18, 0x00, 0x00, 0x00, 0x00, 0x00,
117     0x00, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
118     0xE0, 0x60, 0x60, 0x7C, 0x66, 0x66, 0xDC, 0x00,
119     0x00, 0x00, 0x78, 0xCC, 0xC0, 0xCC, 0x78, 0x00,
120     0x1C, 0x0C, 0x0C, 0x7C, 0xCC, 0xCC, 0x76, 0x00,
121     0x00, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
122     0x38, 0x6C, 0x64, 0xF0, 0x60, 0x60, 0xF0, 0x00,
123     0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
124     0xE0, 0x60, 0x6C, 0x76, 0x66, 0x66, 0xE6, 0x00,
125     0x30, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
126     0x0C, 0x00, 0x1C, 0x0C, 0x0C, 0xCC, 0xCC, 0x78,
127     0xE0, 0x60, 0x66, 0x6C, 0x78, 0x6C, 0xE6, 0x00,
128     0x70, 0x30, 0x30, 0x30, 0x30, 0x30, 0x78, 0x00,
129     0x00, 0x00, 0xCC, 0xFE, 0xFE, 0xD6, 0xD6, 0x00,
130     0x00, 0x00, 0xB8, 0xCC, 0xCC, 0xCC, 0xCC, 0x00,
131     0x00, 0x00, 0x78, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
132     0x00, 0x00, 0xDC, 0x66, 0x66, 0x7C, 0x60, 0xF0,
133     0x00, 0x00, 0x76, 0xCC, 0xCC, 0x7C, 0x0C, 0x1E,
134     0x00, 0x00, 0xDC, 0x76, 0x62, 0x60, 0xF0, 0x00,
135     0x00, 0x00, 0x7C, 0xC0, 0x70, 0x1C, 0xF8, 0x00,
136     0x10, 0x30, 0xFC, 0x30, 0x30, 0x34, 0x18, 0x00,
137     0x00, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
138     0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x78, 0x30, 0x00,
139     0x00, 0x00, 0xC6, 0xC6, 0xD6, 0xFE, 0x6C, 0x00,
140     0x00, 0x00, 0xC6, 0x6C, 0x38, 0x6C, 0xC6, 0x00,
141     0x00, 0x00, 0xCC, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
142     0x00, 0x00, 0xFC, 0x98, 0x30, 0x64, 0xFC, 0x00,
143     0x1C, 0x30, 0x30, 0xE0, 0x30, 0x30, 0x1C, 0x00,
144     0x18, 0x18, 0x18, 0x00, 0x18, 0x18, 0x18, 0x00,
145     0xE0, 0x30, 0x30, 0x1C, 0x30, 0x30, 0xE0, 0x00,
146     0x76, 0xDC, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
147     0x00, 0x10, 0x38, 0x6C, 0xC6, 0xC6, 0xFE, 0x00,
148     0x7C, 0xC6, 0xC0, 0xC6, 0x7C, 0x0C, 0x06, 0x7C,
149     0x00, 0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
150     0x1C, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
151     0x7E, 0x81, 0x3C, 0x06, 0x3E, 0x66, 0x3B, 0x00,
152     0xCC, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
153     0xE0, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
154     0x30, 0x30, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
155     0x00, 0x00, 0x7C, 0xC6, 0xC0, 0x78, 0x0C, 0x38,
156     0x7E, 0x81, 0x3C, 0x66, 0x7E, 0x60, 0x3C, 0x00,
157     0xCC, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
158     0xE0, 0x00, 0x78, 0xCC, 0xFC, 0xC0, 0x78, 0x00,
159     0xCC, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
160     0x7C, 0x82, 0x38, 0x18, 0x18, 0x18, 0x3C, 0x00,
161     0xE0, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
162     0xC6, 0x10, 0x7C, 0xC6, 0xFE, 0xC6, 0xC6, 0x00,
163     0x30, 0x30, 0x00, 0x78, 0xCC, 0xFC, 0xCC, 0x00,
164     0x1C, 0x00, 0xFC, 0x60, 0x78, 0x60, 0xFC, 0x00,
165     0x00, 0x00, 0x7F, 0x0C, 0x7F, 0xCC, 0x7F, 0x00,
166     0x3E, 0x6C, 0xCC, 0xFE, 0xCC, 0xCC, 0xCE, 0x00,
167     0x78, 0x84, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
168     0x00, 0xCC, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
169     0x00, 0xE0, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
170     0x78, 0x84, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
171     0x00, 0xE0, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
172     0x00, 0xCC, 0x00, 0xCC, 0xCC, 0x7C, 0x0C, 0xF8,
173     0xC3, 0x18, 0x3C, 0x66, 0x66, 0x3C, 0x18, 0x00,
174     0xCC, 0x00, 0xCC, 0xCC, 0xCC, 0xCC, 0x78, 0x00,
175     0x18, 0x18, 0x7E, 0xC0, 0xC0, 0x7E, 0x18, 0x18,
176     0x38, 0x6C, 0x64, 0xF0, 0x60, 0xE6, 0xFC, 0x00,
177     0xCC, 0xCC, 0x78, 0x30, 0xFC, 0x30, 0xFC, 0x30,
178     0xF8, 0xCC, 0xCC, 0xFA, 0xC6, 0xCF, 0xC6, 0xC3,
179     0x0E, 0x1B, 0x18, 0x3C, 0x18, 0x18, 0xD8, 0x70,
180     0x1C, 0x00, 0x78, 0x0C, 0x7C, 0xCC, 0x76, 0x00,
181     0x38, 0x00, 0x70, 0x30, 0x30, 0x30, 0x78, 0x00,
182     0x00, 0x1C, 0x00, 0x78, 0xCC, 0xCC, 0x78, 0x00,
183     0x00, 0x1C, 0x00, 0xCC, 0xCC, 0xCC, 0x76, 0x00,
184     0x00, 0xF8, 0x00, 0xB8, 0xCC, 0xCC, 0xCC, 0x00,
185     0xFC, 0x00, 0xCC, 0xEC, 0xFC, 0xDC, 0xCC, 0x00,
186     0x3C, 0x6C, 0x6C, 0x3E, 0x00, 0x7E, 0x00, 0x00,
187     0x38, 0x6C, 0x6C, 0x38, 0x00, 0x7C, 0x00, 0x00,
188     0x18, 0x00, 0x18, 0x18, 0x30, 0x66, 0x3C, 0x00,
189     0x00, 0x00, 0x00, 0xFC, 0xC0, 0xC0, 0x00, 0x00,
190     0x00, 0x00, 0x00, 0xFC, 0x0C, 0x0C, 0x00, 0x00,
191     0xC6, 0xCC, 0xD8, 0x36, 0x6B, 0xC2, 0x84, 0x0F,
192     0xC3, 0xC6, 0xCC, 0xDB, 0x37, 0x6D, 0xCF, 0x03,
193     0x18, 0x00, 0x18, 0x18, 0x3C, 0x3C, 0x18, 0x00,
194     0x00, 0x33, 0x66, 0xCC, 0x66, 0x33, 0x00, 0x00,
195     0x00, 0xCC, 0x66, 0x33, 0x66, 0xCC, 0x00, 0x00,
196     0x22, 0x88, 0x22, 0x88, 0x22, 0x88, 0x22, 0x88,
197     0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA, 0x55, 0xAA,
198     0xDB, 0xF6, 0xDB, 0x6F, 0xDB, 0x7E, 0xD7, 0xED,
199     0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18, 0x18,
200     0x18, 0x18, 0x18, 0x18, 0xF8, 0x18, 0x18, 0x18,
201     0x18, 0x18, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18,
202     0x36, 0x36, 0x36, 0x36, 0xF6, 0x36, 0x36, 0x36,
203     0x00, 0x00, 0x00, 0x00, 0xFE, 0x36, 0x36, 0x36,
204     0x00, 0x00, 0xF8, 0x18, 0xF8, 0x18, 0x18, 0x18,
205     0x36, 0x36, 0xF6, 0x06, 0xF6, 0x36, 0x36, 0x36,
206     0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36, 0x36,
207     0x00, 0x00, 0xFE, 0x06, 0xF6, 0x36, 0x36, 0x36,
208     0x36, 0x36, 0xF6, 0x06, 0xFE, 0x00, 0x00, 0x00,
209     0x36, 0x36, 0x36, 0x36, 0xFE, 0x00, 0x00, 0x00,
210     0x18, 0x18, 0xF8, 0x18, 0xF8, 0x00, 0x00, 0x00,
211     0x00, 0x00, 0x00, 0x00, 0xF8, 0x18, 0x18, 0x18,
212     0x18, 0x18, 0x18, 0x18, 0x1F, 0x00, 0x00, 0x00,
213     0x18, 0x18, 0x18, 0x18, 0xFF, 0x00, 0x00, 0x00,
214     0x00, 0x00, 0x00, 0x00, 0xFF, 0x18, 0x18, 0x18,
215     0x18, 0x18, 0x18, 0x18, 0x1F, 0x18, 0x18, 0x18,
216     0x00, 0x00, 0x00, 0x00, 0xFF, 0x00, 0x00, 0x00,
217     0x18, 0x18, 0x18, 0x18, 0xFF, 0x18, 0x18, 0x18,
218     0x18, 0x18, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18,
219     0x36, 0x36, 0x36, 0x36, 0x37, 0x36, 0x36, 0x36,
220     0x36, 0x36, 0x37, 0x30, 0x3F, 0x00, 0x00, 0x00,
221     0x00, 0x00, 0x3F, 0x30, 0x37, 0x36, 0x36, 0x36,
222     0x36, 0x36, 0xF7, 0x00, 0xFF, 0x00, 0x00, 0x00,
223     0x00, 0x00, 0xFF, 0x00, 0xF7, 0x36, 0x36, 0x36,
224     0x36, 0x36, 0x37, 0x30, 0x37, 0x36, 0x36, 0x36,
225     0x00, 0x00, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
226     0x36, 0x36, 0xF7, 0x00, 0xF7, 0x36, 0x36, 0x36,
227     0x18, 0x18, 0xFF, 0x00, 0xFF, 0x00, 0x00, 0x00,
228     0x36, 0x36, 0x36, 0x36, 0xFF, 0x00, 0x00, 0x00,
229     0x00, 0x00, 0xFF, 0x00, 0xFF, 0x18, 0x18, 0x18,
230     0x00, 0x00, 0x00, 0x00, 0xFF, 0x36, 0x36, 0x36,
231     0x36, 0x36, 0x36, 0x36, 0x3F, 0x00, 0x00, 0x00,
232     0x18, 0x18, 0x1F, 0x18, 0x1F, 0x00, 0x00, 0x00,
233     0x00, 0x00, 0x1F, 0x18, 0x1F, 0x18, 0x18, 0x18,
234     0x00, 0x00, 0x00, 0x00, 0x3F, 0x36, 0x36, 0x36,
235     0x36, 0x36, 0x36, 0x36, 0xFF, 0x36, 0x36, 0x36,
236     0x18, 0x18, 0xFF, 0x18, 0xFF, 0x18, 0x18, 0x18,
237     0x18, 0x18, 0x18, 0x18, 0xF8, 0x00, 0x00, 0x00,
238     0x00, 0x00, 0x00, 0x00, 0x1F, 0x18, 0x18, 0x18,
239     0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF,
240     0x00, 0x00, 0x00, 0x00, 0xFF, 0xFF, 0xFF, 0xFF,
241     0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0, 0xF0,
242     0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F, 0x0F,
243     0xFF, 0xFF, 0xFF, 0xFF, 0x00, 0x00, 0x00, 0x00,
244     0x00, 0x00, 0x76, 0xDC, 0xC8, 0xDC, 0x76, 0x00,
245     0x00, 0x78, 0xCC, 0xF8, 0xCC, 0xF8, 0xC0, 0xC0,
246     0x00, 0xFC, 0xCC, 0xC0, 0xC0, 0xC0, 0xC0, 0x00,
247     0x00, 0x00, 0xFE, 0x6C, 0x6C, 0x6C, 0x6C, 0x00,
248     0xFC, 0xCC, 0x60, 0x30, 0x60, 0xCC, 0xFC, 0x00,
249     0x00, 0x00, 0x7E, 0xD8, 0xD8, 0xD8, 0x70, 0x00,
250     0x00, 0x66, 0x66, 0x66, 0x66, 0x7C, 0x60, 0xC0,
251     0x00, 0x76, 0xDC, 0x18, 0x18, 0x18, 0x18, 0x00,
252     0xFC, 0x30, 0x78, 0xCC, 0xCC, 0x78, 0x30, 0xFC,
253     0x38, 0x6C, 0xC6, 0xFE, 0xC6, 0x6C, 0x38, 0x00,
254     0x38, 0x6C, 0xC6, 0xC6, 0x6C, 0x6C, 0xEE, 0x00,
255     0x1C, 0x30, 0x18, 0x7C, 0xCC, 0xCC, 0x78, 0x00,
256     0x00, 0x00, 0x7E, 0xDB, 0xDB, 0x7E, 0x00, 0x00,
257     0x06, 0x0C, 0x7E, 0xDB, 0xDB, 0x7E, 0x60, 0xC0,
258     0x38, 0x60, 0xC0, 0xF8, 0xC0, 0x60, 0x38, 0x00,
259     0x78, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0x00,
260     0x00, 0x7E, 0x00, 0x7E, 0x00, 0x7E, 0x00, 0x00,
261     0x18, 0x18, 0x7E, 0x18, 0x18, 0x00, 0x7E, 0x00,
262     0x60, 0x30, 0x18, 0x30, 0x60, 0x00, 0xFC, 0x00,
263     0x18, 0x30, 0x60, 0x30, 0x18, 0x00, 0xFC, 0x00,
264     0x0E, 0x1B, 0x1B, 0x18, 0x18, 0x18, 0x18, 0x18,
265     0x18, 0x18, 0x18, 0x18, 0x18, 0xD8, 0xD8, 0x70,
266     0x18, 0x18, 0x00, 0x7E, 0x00, 0x18, 0x18, 0x00,
267     0x00, 0x76, 0xDC, 0x00, 0x76, 0xDC, 0x00, 0x00,
268     0x38, 0x6C, 0x6C, 0x38, 0x00, 0x00, 0x00, 0x00,
269     0x00, 0x00, 0x00, 0x18, 0x18, 0x00, 0x00, 0x00,
270     0x00, 0x00, 0x00, 0x00, 0x18, 0x00, 0x00, 0x00,
271     0x0F, 0x0C, 0x0C, 0x0C, 0xEC, 0x6C, 0x3C, 0x1C,
272     0x58, 0x6C, 0x6C, 0x6C, 0x6C, 0x00, 0x00, 0x00,
273     0x70, 0x98, 0x30, 0x60, 0xF8, 0x00, 0x00, 0x00,
274     0x00, 0x00, 0x3C, 0x3C, 0x3C, 0x3C, 0x00, 0x00,
275     0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00
276 };
277
278 static PSURFOBJ CharCellSurfObj;
279 static HBITMAP  hCharCellBitmap;
280
281 VOID BitmapToSurf(HDC hdc, PSURFGDI SurfGDI, PSURFOBJ SurfObj, PBITMAPOBJ Bitmap);
282
283 // Set things up for a character cell surface
284 void CreateCellCharSurface()
285 {
286    PSURFGDI   surfgdi;
287    PBITMAPOBJ pbo;
288
289    CharCellSurfObj = ExAllocatePool(NonPagedPool, sizeof(SURFOBJ));
290    surfgdi         = ExAllocatePool(NonPagedPool, sizeof(SURFGDI));
291
292    hCharCellBitmap = W32kCreateBitmap(8, 8, 1, 8, NULL); // 8x8, 1 plane, 8 bits per pel
293
294    pbo = BITMAPOBJ_HandleToPtr(hCharCellBitmap);
295    ASSERT( pbo );
296 // VOID BitmapToSurf(HDC hdc, PSURFGDI SurfGDI, PSURFOBJ SurfObj, PBITMAPOBJ Bitmap)
297    BitmapToSurf(0, surfgdi, CharCellSurfObj, pbo); // Make the bitmap a surface
298    BITMAPOBJ_ReleasePtr( hCharCellBitmap );
299 }
300
301 void  grWriteCellChar(PSURFOBJ  target,
302                       int        x,
303                       int        y,
304                       int        charcode,
305                       COLORREF   color)
306 {
307    RECTL     DestRect;
308    POINTL    SourcePoint;
309
310    char *bigbit, *mover;
311    unsigned char thebyte, thebit, idxColor;
312    int i, j, charcode8, i8;
313
314    if (charcode < 0 || charcode > 255)
315       return;
316
317    DestRect.left   = x;
318    DestRect.top    = y;
319    DestRect.right  = x+8;
320    DestRect.bottom = y+8;
321
322    SourcePoint.x = 0;
323    SourcePoint.y = 0;
324
325    bigbit = ExAllocatePool(NonPagedPool, 256);
326
327    // Explode the 1BPP character cell into an 8BPP one due to current GDI limitations.. major FIXME
328    charcode8 = charcode * 8;
329    mover = bigbit;
330
331    for (i=0; i<8; i++)
332    {
333       thebyte = font_8x8[charcode8 + i];
334       i8 = i*8;
335       for (j=8; j>0; j--)
336       {
337          thebit = thebyte & (1 << j);
338          if(thebit>0) thebit = 1;
339          *mover = thebit;
340          mover++;
341       }
342    }
343
344    W32kSetBitmapBits(hCharCellBitmap, 256, bigbit);
345
346    // Blt bitmap to screen
347    EngBitBlt(target, CharCellSurfObj, NULL, NULL, NULL, &DestRect, &SourcePoint, NULL, NULL, NULL, NULL);
348
349    ExFreePool(bigbit);
350 }
351
352 void  grWriteCellString(PSURFOBJ  target,
353                         int         x,
354                         int         y,
355                         const char* string,
356                         COLORREF    color)
357 {
358    while (*string)
359    {
360       grWriteCellChar(target, x, y, *string++, color);
361       x += 8;
362    }
363 }
364
365 static int        gr_cursor_x     = 0;
366 static int        gr_cursor_y     = 0;
367 static PBITMAPOBJ gr_text_bitmap  = 0;
368 static int        gr_margin_right = 0;
369 static int        gr_margin_top   = 0;
370
371 void grGotobitmap(PBITMAPOBJ bitmap )
372 {
373    gr_text_bitmap = bitmap;
374 }
375
376 void grSetMargin(int right, int top)
377 {
378    gr_margin_top   = top << 3;
379    gr_margin_right = right << 3;
380 }
381
382 void grGotoxy(int x, int y)
383 {
384    gr_cursor_x = x;
385    gr_cursor_y = y;
386 }
387
388 void grWrite(const char* string)
389 {
390    if (string)
391    {
392           COLORREF color;
393
394 //        color.value = 127;
395       grWriteCellString( gr_text_bitmap,
396                          gr_margin_right + (gr_cursor_x << 3),
397                          gr_margin_top   + (gr_cursor_y << 3),
398                          string,
399                          color );
400
401       gr_cursor_x += strlen(string);
402    }
403 }
404
405 void grLn()
406 {
407    gr_cursor_y ++;
408    gr_cursor_x = 0;
409 }
410
411 void grWriteln(const char* string)
412 {
413    grWrite( string );
414    grLn();
415 }