contrib/OWB: add correct SDL dependency, fix compilers used
[AROS-Contrib.git] / freetype1 / pascal / test / gmain.pas
blobc1932612bd969e4f59cb7dba2589303318390842
1 (*******************************************************************
3 * gmain graphics utility main interface 1.1
5 * This file defines a common interface, implemented in the body
6 * file 'gmain.c'. It relies on system dependent driver files,
7 * like 'gfs_os.c', whose interface is described in 'gdriver.h'.
9 * Copyright 1996 David Turner, Robert Wilhelm and Werner Lemberg.
11 * This file is part of the FreeType project, and may only be used
12 * modified and distributed under the terms of the FreeType project
13 * license, LICENSE.TXT. By continuing to use, modify or distribute
14 * this file you indicate that you have read the license and
15 * understand and accept it fully.
17 ******************************************************************)
19 Unit GMain;
21 interface
23 const
24 Graphics_Mode_Mono = 1;
25 Graphics_Mode_Gray = 2;
27 type
28 TVioScreenBuffer = array[0..0] of Byte;
29 PVioScreenBuffer = ^TVioScreenBuffer;
31 {$IFDEF OS2}
32 Int = LongInt;
33 {$ELSE}
34 Int = Integer;
35 {$ENDIF}
37 var
39 Vio : PVioScreenBuffer;
40 (* pointer to VRAM or display buffer *)
42 vio_ScanLineWidth : Int;
43 vio_Width : Int;
44 vio_Height : Int;
46 gray_palette : array[0..4] of Byte; (* gray palette *)
48 gcursor_x : int;
49 gcursor_y : int;
51 gwindow_width : int;
52 gwindow_height : int;
54 function Set_Graph_Screen( mode : int ) : boolean;
55 (* Set a Graphics Mode, chosen from the Graphics_Mode_xxx list *)
57 function Restore_Screen : boolean;
58 (* Restore a previous ( or text ) video mode *)
60 procedure Display_Bitmap_On_Screen( var buff; line, col : Int );
61 (* display bitmap of 'line' line, and 'col' columns ( each *)
62 (* column mode of 1 byte *)
64 procedure Goto_XY( x, y : int );
66 procedure Print_Str( str : string );
68 procedure Print_XY ( x, y : int; str : string );
70 implementation
72 uses GDriver;
74 type
75 TFunction_8x8 = procedure( x, y : Int; c : char );
77 TByte = array[0..0] of Byte;
78 PByte = ^TByte;
80 var
81 Current_Mode : Byte;
82 Print_8x8 : TFunction_8x8;
84 const
85 Font_8x8 : array[0..2047] of Byte
86 = (
87 $00, $00, $00, $00, $00, $00, $00, $00,
88 $7E, $81, $A5, $81, $BD, $99, $81, $7E,
89 $7E, $FF, $DB, $FF, $C3, $E7, $FF, $7E,
90 $6C, $FE, $FE, $FE, $7C, $38, $10, $00,
91 $10, $38, $7C, $FE, $7C, $38, $10, $00,
92 $38, $7C, $38, $FE, $FE, $92, $10, $7C,
93 $00, $10, $38, $7C, $FE, $7C, $38, $7C,
94 $00, $00, $18, $3C, $3C, $18, $00, $00,
95 $FF, $FF, $E7, $C3, $C3, $E7, $FF, $FF,
96 $00, $3C, $66, $42, $42, $66, $3C, $00,
97 $FF, $C3, $99, $BD, $BD, $99, $C3, $FF,
98 $0F, $07, $0F, $7D, $CC, $CC, $CC, $78,
99 $3C, $66, $66, $66, $3C, $18, $7E, $18,
100 $3F, $33, $3F, $30, $30, $70, $F0, $E0,
101 $7F, $63, $7F, $63, $63, $67, $E6, $C0,
102 $99, $5A, $3C, $E7, $E7, $3C, $5A, $99,
103 $80, $E0, $F8, $FE, $F8, $E0, $80, $00,
104 $02, $0E, $3E, $FE, $3E, $0E, $02, $00,
105 $18, $3C, $7E, $18, $18, $7E, $3C, $18,
106 $66, $66, $66, $66, $66, $00, $66, $00,
107 $7F, $DB, $DB, $7B, $1B, $1B, $1B, $00,
108 $3E, $63, $38, $6C, $6C, $38, $86, $FC,
109 $00, $00, $00, $00, $7E, $7E, $7E, $00,
110 $18, $3C, $7E, $18, $7E, $3C, $18, $FF,
111 $18, $3C, $7E, $18, $18, $18, $18, $00,
112 $18, $18, $18, $18, $7E, $3C, $18, $00,
113 $00, $18, $0C, $FE, $0C, $18, $00, $00,
114 $00, $30, $60, $FE, $60, $30, $00, $00,
115 $00, $00, $C0, $C0, $C0, $FE, $00, $00,
116 $00, $24, $66, $FF, $66, $24, $00, $00,
117 $00, $18, $3C, $7E, $FF, $FF, $00, $00,
118 $00, $FF, $FF, $7E, $3C, $18, $00, $00,
119 $00, $00, $00, $00, $00, $00, $00, $00,
120 $18, $3C, $3C, $18, $18, $00, $18, $00,
121 $6C, $6C, $6C, $00, $00, $00, $00, $00,
122 $6C, $6C, $FE, $6C, $FE, $6C, $6C, $00,
123 $18, $7E, $C0, $7C, $06, $FC, $18, $00,
124 $00, $C6, $CC, $18, $30, $66, $C6, $00,
125 $38, $6C, $38, $76, $DC, $CC, $76, $00,
126 $30, $30, $60, $00, $00, $00, $00, $00,
127 $18, $30, $60, $60, $60, $30, $18, $00,
128 $60, $30, $18, $18, $18, $30, $60, $00,
129 $00, $66, $3C, $FF, $3C, $66, $00, $00,
130 $00, $18, $18, $7E, $18, $18, $00, $00,
131 $00, $00, $00, $00, $00, $18, $18, $30,
132 $00, $00, $00, $7E, $00, $00, $00, $00,
133 $00, $00, $00, $00, $00, $18, $18, $00,
134 $06, $0C, $18, $30, $60, $C0, $80, $00,
135 $7C, $CE, $DE, $F6, $E6, $C6, $7C, $00,
136 $30, $70, $30, $30, $30, $30, $FC, $00,
137 $78, $CC, $0C, $38, $60, $CC, $FC, $00,
138 $78, $CC, $0C, $38, $0C, $CC, $78, $00,
139 $1C, $3C, $6C, $CC, $FE, $0C, $1E, $00,
140 $FC, $C0, $F8, $0C, $0C, $CC, $78, $00,
141 $38, $60, $C0, $F8, $CC, $CC, $78, $00,
142 $FC, $CC, $0C, $18, $30, $30, $30, $00,
143 $78, $CC, $CC, $78, $CC, $CC, $78, $00,
144 $78, $CC, $CC, $7C, $0C, $18, $70, $00,
145 $00, $18, $18, $00, $00, $18, $18, $00,
146 $00, $18, $18, $00, $00, $18, $18, $30,
147 $18, $30, $60, $C0, $60, $30, $18, $00,
148 $00, $00, $7E, $00, $7E, $00, $00, $00,
149 $60, $30, $18, $0C, $18, $30, $60, $00,
150 $3C, $66, $0C, $18, $18, $00, $18, $00,
151 $7C, $C6, $DE, $DE, $DC, $C0, $7C, $00,
152 $30, $78, $CC, $CC, $FC, $CC, $CC, $00,
153 $FC, $66, $66, $7C, $66, $66, $FC, $00,
154 $3C, $66, $C0, $C0, $C0, $66, $3C, $00,
155 $F8, $6C, $66, $66, $66, $6C, $F8, $00,
156 $FE, $62, $68, $78, $68, $62, $FE, $00,
157 $FE, $62, $68, $78, $68, $60, $F0, $00,
158 $3C, $66, $C0, $C0, $CE, $66, $3A, $00,
159 $CC, $CC, $CC, $FC, $CC, $CC, $CC, $00,
160 $78, $30, $30, $30, $30, $30, $78, $00,
161 $1E, $0C, $0C, $0C, $CC, $CC, $78, $00,
162 $E6, $66, $6C, $78, $6C, $66, $E6, $00,
163 $F0, $60, $60, $60, $62, $66, $FE, $00,
164 $C6, $EE, $FE, $FE, $D6, $C6, $C6, $00,
165 $C6, $E6, $F6, $DE, $CE, $C6, $C6, $00,
166 $38, $6C, $C6, $C6, $C6, $6C, $38, $00,
167 $FC, $66, $66, $7C, $60, $60, $F0, $00,
168 $7C, $C6, $C6, $C6, $D6, $7C, $0E, $00,
169 $FC, $66, $66, $7C, $6C, $66, $E6, $00,
170 $7C, $C6, $E0, $78, $0E, $C6, $7C, $00,
171 $FC, $B4, $30, $30, $30, $30, $78, $00,
172 $CC, $CC, $CC, $CC, $CC, $CC, $FC, $00,
173 $CC, $CC, $CC, $CC, $CC, $78, $30, $00,
174 $C6, $C6, $C6, $C6, $D6, $FE, $6C, $00,
175 $C6, $C6, $6C, $38, $6C, $C6, $C6, $00,
176 $CC, $CC, $CC, $78, $30, $30, $78, $00,
177 $FE, $C6, $8C, $18, $32, $66, $FE, $00,
178 $78, $60, $60, $60, $60, $60, $78, $00,
179 $C0, $60, $30, $18, $0C, $06, $02, $00,
180 $78, $18, $18, $18, $18, $18, $78, $00,
181 $10, $38, $6C, $C6, $00, $00, $00, $00,
182 $00, $00, $00, $00, $00, $00, $00, $FF,
183 $30, $30, $18, $00, $00, $00, $00, $00,
184 $00, $00, $78, $0C, $7C, $CC, $76, $00,
185 $E0, $60, $60, $7C, $66, $66, $DC, $00,
186 $00, $00, $78, $CC, $C0, $CC, $78, $00,
187 $1C, $0C, $0C, $7C, $CC, $CC, $76, $00,
188 $00, $00, $78, $CC, $FC, $C0, $78, $00,
189 $38, $6C, $64, $F0, $60, $60, $F0, $00,
190 $00, $00, $76, $CC, $CC, $7C, $0C, $F8,
191 $E0, $60, $6C, $76, $66, $66, $E6, $00,
192 $30, $00, $70, $30, $30, $30, $78, $00,
193 $0C, $00, $1C, $0C, $0C, $CC, $CC, $78,
194 $E0, $60, $66, $6C, $78, $6C, $E6, $00,
195 $70, $30, $30, $30, $30, $30, $78, $00,
196 $00, $00, $CC, $FE, $FE, $D6, $D6, $00,
197 $00, $00, $B8, $CC, $CC, $CC, $CC, $00,
198 $00, $00, $78, $CC, $CC, $CC, $78, $00,
199 $00, $00, $DC, $66, $66, $7C, $60, $F0,
200 $00, $00, $76, $CC, $CC, $7C, $0C, $1E,
201 $00, $00, $DC, $76, $62, $60, $F0, $00,
202 $00, $00, $7C, $C0, $70, $1C, $F8, $00,
203 $10, $30, $FC, $30, $30, $34, $18, $00,
204 $00, $00, $CC, $CC, $CC, $CC, $76, $00,
205 $00, $00, $CC, $CC, $CC, $78, $30, $00,
206 $00, $00, $C6, $C6, $D6, $FE, $6C, $00,
207 $00, $00, $C6, $6C, $38, $6C, $C6, $00,
208 $00, $00, $CC, $CC, $CC, $7C, $0C, $F8,
209 $00, $00, $FC, $98, $30, $64, $FC, $00,
210 $1C, $30, $30, $E0, $30, $30, $1C, $00,
211 $18, $18, $18, $00, $18, $18, $18, $00,
212 $E0, $30, $30, $1C, $30, $30, $E0, $00,
213 $76, $DC, $00, $00, $00, $00, $00, $00,
214 $00, $10, $38, $6C, $C6, $C6, $FE, $00,
215 $7C, $C6, $C0, $C6, $7C, $0C, $06, $7C,
216 $00, $CC, $00, $CC, $CC, $CC, $76, $00,
217 $1C, $00, $78, $CC, $FC, $C0, $78, $00,
218 $7E, $81, $3C, $06, $3E, $66, $3B, $00,
219 $CC, $00, $78, $0C, $7C, $CC, $76, $00,
220 $E0, $00, $78, $0C, $7C, $CC, $76, $00,
221 $30, $30, $78, $0C, $7C, $CC, $76, $00,
222 $00, $00, $7C, $C6, $C0, $78, $0C, $38,
223 $7E, $81, $3C, $66, $7E, $60, $3C, $00,
224 $CC, $00, $78, $CC, $FC, $C0, $78, $00,
225 $E0, $00, $78, $CC, $FC, $C0, $78, $00,
226 $CC, $00, $70, $30, $30, $30, $78, $00,
227 $7C, $82, $38, $18, $18, $18, $3C, $00,
228 $E0, $00, $70, $30, $30, $30, $78, $00,
229 $C6, $10, $7C, $C6, $FE, $C6, $C6, $00,
230 $30, $30, $00, $78, $CC, $FC, $CC, $00,
231 $1C, $00, $FC, $60, $78, $60, $FC, $00,
232 $00, $00, $7F, $0C, $7F, $CC, $7F, $00,
233 $3E, $6C, $CC, $FE, $CC, $CC, $CE, $00,
234 $78, $84, $00, $78, $CC, $CC, $78, $00,
235 $00, $CC, $00, $78, $CC, $CC, $78, $00,
236 $00, $E0, $00, $78, $CC, $CC, $78, $00,
237 $78, $84, $00, $CC, $CC, $CC, $76, $00,
238 $00, $E0, $00, $CC, $CC, $CC, $76, $00,
239 $00, $CC, $00, $CC, $CC, $7C, $0C, $F8,
240 $C3, $18, $3C, $66, $66, $3C, $18, $00,
241 $CC, $00, $CC, $CC, $CC, $CC, $78, $00,
242 $18, $18, $7E, $C0, $C0, $7E, $18, $18,
243 $38, $6C, $64, $F0, $60, $E6, $FC, $00,
244 $CC, $CC, $78, $30, $FC, $30, $FC, $30,
245 $F8, $CC, $CC, $FA, $C6, $CF, $C6, $C3,
246 $0E, $1B, $18, $3C, $18, $18, $D8, $70,
247 $1C, $00, $78, $0C, $7C, $CC, $76, $00,
248 $38, $00, $70, $30, $30, $30, $78, $00,
249 $00, $1C, $00, $78, $CC, $CC, $78, $00,
250 $00, $1C, $00, $CC, $CC, $CC, $76, $00,
251 $00, $F8, $00, $B8, $CC, $CC, $CC, $00,
252 $FC, $00, $CC, $EC, $FC, $DC, $CC, $00,
253 $3C, $6C, $6C, $3E, $00, $7E, $00, $00,
254 $38, $6C, $6C, $38, $00, $7C, $00, $00,
255 $18, $00, $18, $18, $30, $66, $3C, $00,
256 $00, $00, $00, $FC, $C0, $C0, $00, $00,
257 $00, $00, $00, $FC, $0C, $0C, $00, $00,
258 $C6, $CC, $D8, $36, $6B, $C2, $84, $0F,
259 $C3, $C6, $CC, $DB, $37, $6D, $CF, $03,
260 $18, $00, $18, $18, $3C, $3C, $18, $00,
261 $00, $33, $66, $CC, $66, $33, $00, $00,
262 $00, $CC, $66, $33, $66, $CC, $00, $00,
263 $22, $88, $22, $88, $22, $88, $22, $88,
264 $55, $AA, $55, $AA, $55, $AA, $55, $AA,
265 $DB, $F6, $DB, $6F, $DB, $7E, $D7, $ED,
266 $18, $18, $18, $18, $18, $18, $18, $18,
267 $18, $18, $18, $18, $F8, $18, $18, $18,
268 $18, $18, $F8, $18, $F8, $18, $18, $18,
269 $36, $36, $36, $36, $F6, $36, $36, $36,
270 $00, $00, $00, $00, $FE, $36, $36, $36,
271 $00, $00, $F8, $18, $F8, $18, $18, $18,
272 $36, $36, $F6, $06, $F6, $36, $36, $36,
273 $36, $36, $36, $36, $36, $36, $36, $36,
274 $00, $00, $FE, $06, $F6, $36, $36, $36,
275 $36, $36, $F6, $06, $FE, $00, $00, $00,
276 $36, $36, $36, $36, $FE, $00, $00, $00,
277 $18, $18, $F8, $18, $F8, $00, $00, $00,
278 $00, $00, $00, $00, $F8, $18, $18, $18,
279 $18, $18, $18, $18, $1F, $00, $00, $00,
280 $18, $18, $18, $18, $FF, $00, $00, $00,
281 $00, $00, $00, $00, $FF, $18, $18, $18,
282 $18, $18, $18, $18, $1F, $18, $18, $18,
283 $00, $00, $00, $00, $FF, $00, $00, $00,
284 $18, $18, $18, $18, $FF, $18, $18, $18,
285 $18, $18, $1F, $18, $1F, $18, $18, $18,
286 $36, $36, $36, $36, $37, $36, $36, $36,
287 $36, $36, $37, $30, $3F, $00, $00, $00,
288 $00, $00, $3F, $30, $37, $36, $36, $36,
289 $36, $36, $F7, $00, $FF, $00, $00, $00,
290 $00, $00, $FF, $00, $F7, $36, $36, $36,
291 $36, $36, $37, $30, $37, $36, $36, $36,
292 $00, $00, $FF, $00, $FF, $00, $00, $00,
293 $36, $36, $F7, $00, $F7, $36, $36, $36,
294 $18, $18, $FF, $00, $FF, $00, $00, $00,
295 $36, $36, $36, $36, $FF, $00, $00, $00,
296 $00, $00, $FF, $00, $FF, $18, $18, $18,
297 $00, $00, $00, $00, $FF, $36, $36, $36,
298 $36, $36, $36, $36, $3F, $00, $00, $00,
299 $18, $18, $1F, $18, $1F, $00, $00, $00,
300 $00, $00, $1F, $18, $1F, $18, $18, $18,
301 $00, $00, $00, $00, $3F, $36, $36, $36,
302 $36, $36, $36, $36, $FF, $36, $36, $36,
303 $18, $18, $FF, $18, $FF, $18, $18, $18,
304 $18, $18, $18, $18, $F8, $00, $00, $00,
305 $00, $00, $00, $00, $1F, $18, $18, $18,
306 $FF, $FF, $FF, $FF, $FF, $FF, $FF, $FF,
307 $00, $00, $00, $00, $FF, $FF, $FF, $FF,
308 $F0, $F0, $F0, $F0, $F0, $F0, $F0, $F0,
309 $0F, $0F, $0F, $0F, $0F, $0F, $0F, $0F,
310 $FF, $FF, $FF, $FF, $00, $00, $00, $00,
311 $00, $00, $76, $DC, $C8, $DC, $76, $00,
312 $00, $78, $CC, $F8, $CC, $F8, $C0, $C0,
313 $00, $FC, $CC, $C0, $C0, $C0, $C0, $00,
314 $00, $00, $FE, $6C, $6C, $6C, $6C, $00,
315 $FC, $CC, $60, $30, $60, $CC, $FC, $00,
316 $00, $00, $7E, $D8, $D8, $D8, $70, $00,
317 $00, $66, $66, $66, $66, $7C, $60, $C0,
318 $00, $76, $DC, $18, $18, $18, $18, $00,
319 $FC, $30, $78, $CC, $CC, $78, $30, $FC,
320 $38, $6C, $C6, $FE, $C6, $6C, $38, $00,
321 $38, $6C, $C6, $C6, $6C, $6C, $EE, $00,
322 $1C, $30, $18, $7C, $CC, $CC, $78, $00,
323 $00, $00, $7E, $DB, $DB, $7E, $00, $00,
324 $06, $0C, $7E, $DB, $DB, $7E, $60, $C0,
325 $38, $60, $C0, $F8, $C0, $60, $38, $00,
326 $78, $CC, $CC, $CC, $CC, $CC, $CC, $00,
327 $00, $7E, $00, $7E, $00, $7E, $00, $00,
328 $18, $18, $7E, $18, $18, $00, $7E, $00,
329 $60, $30, $18, $30, $60, $00, $FC, $00,
330 $18, $30, $60, $30, $18, $00, $FC, $00,
331 $0E, $1B, $1B, $18, $18, $18, $18, $18,
332 $18, $18, $18, $18, $18, $D8, $D8, $70,
333 $18, $18, $00, $7E, $00, $18, $18, $00,
334 $00, $76, $DC, $00, $76, $DC, $00, $00,
335 $38, $6C, $6C, $38, $00, $00, $00, $00,
336 $00, $00, $00, $18, $18, $00, $00, $00,
337 $00, $00, $00, $00, $18, $00, $00, $00,
338 $0F, $0C, $0C, $0C, $EC, $6C, $3C, $1C,
339 $58, $6C, $6C, $6C, $6C, $00, $00, $00,
340 $70, $98, $30, $60, $F8, $00, $00, $00,
341 $00, $00, $3C, $3C, $3C, $3C, $00, $00,
342 $00, $00, $00, $00, $00, $00, $00, $00
345 {$F+}
346 procedure Print_8x8_Mono( x, y : Int; c : char );
348 offset, i : Int;
349 bitm : PByte;
350 begin
351 offset := x + y*Vio_ScanLineWidth*8;
352 bitm := @Font_8x8[ ord(c)*8 ];
354 for i := 0 to 7 do
355 begin
356 Vio^[offset] := bitm^[i];
357 inc( offset, Vio_ScanLineWidth );
358 end;
359 end;
361 procedure Print_8x8_Gray( x, y : Int; c : char );
363 offset, i, bit : Int;
365 bitm : PByte;
366 begin
367 offset := ( x + y*Vio_ScanLineWidth )*8;
368 bitm := @font_8x8[ ord(c)*8 ];
370 for i := 0 to 7 do
371 begin
372 bit := $80;
373 while bit > 0 do
374 begin
375 if ( bit and bitm^[i] <> 0 ) then Vio^[offset] := $FF
376 else Vio^[offset] := $00;
377 bit := bit shr 1;
378 inc( offset );
379 end;
381 inc( offset, Vio_ScanLineWidth-8 );
382 end;
384 end;
385 {$F-}
387 function Set_Graph_Screen( mode : Int ): boolean;
388 begin
389 Set_Graph_Screen := False;
391 gcursor_x := 0;
392 gcursor_y := 0;
394 case mode of
396 Graphics_Mode_Mono : begin
397 if not Driver_Set_Graphics(mode) then exit;
398 gwindow_width := vio_ScanLineWidth;
399 gwindow_height := vio_Height div 8;
401 Print_8x8 := Print_8x8_Mono;
402 end;
404 Graphics_Mode_Gray : begin
405 if not Driver_Set_Graphics(mode) then exit;
406 gwindow_width := vio_ScanLineWidth div 8;
407 gwindow_height := vio_Height div 8;
409 Print_8x8 := Print_8x8_Gray;
410 end;
411 else
412 exit;
413 end;
415 Set_Graph_Screen := True;
416 end;
419 function Restore_Screen : boolean;
420 begin
421 gcursor_x := 0;
422 gcursor_y := 0;
424 gwindow_height := 0;
425 gwindow_width := 0;
427 Restore_Screen := Driver_Restore_Mode;
428 end;
430 procedure Display_Bitmap_On_Screen;
431 begin
432 Driver_Display_Bitmap( buff, line, col );
433 end;
435 procedure Goto_XY( x, y : Int );
436 begin
437 gcursor_x := x;
438 gcursor_y := y;
439 end;
441 procedure Print_Str( str : string );
443 i : Int;
444 begin
445 for i := 1 to length(str) do
446 begin
447 case str[i] of
449 #13 : begin
450 gcursor_x := 0;
451 inc( gcursor_y );
452 if gcursor_y > gwindow_height then gcursor_y := 0;
453 end;
454 else
455 Print_8x8( gcursor_x, gcursor_y, str[i] );
456 inc( gcursor_x );
457 if gcursor_x >= gwindow_width then
458 begin
459 gcursor_x := 0;
460 inc( gcursor_y );
461 if gcursor_y >= gwindow_height then gcursor_y := 0;
465 end;
467 procedure Print_XY( x, y : Int; str : string );
468 begin
469 Goto_XY( x, y );
470 Print_Str( str );
471 end;
473 end.