Use free Windows DDK and compile with latest MinGW releases.
[reactos.git] / reactos / 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 SURFOBJ *CharCellSurfObj;
279 static HBITMAP hCharCellBitmap;
280
281 VOID BitmapToSurf(HDC hdc, PSURFGDI SurfGDI, SURFOBJ *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(SURFOBJ *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(SURFOBJ *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 }