Subversion Repositories Kolibri OS

Rev

Rev 485 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
31 halyavin 1
; BGI Font Test
2
;
3
; Written in pure assembler by Ivushkin Andrey aka Willow
4
;
5
; Created: December 20, 2004
6
;
7
; Last changed: February 2, 2005
8
;
9
 
539 spraid 10
BGIFONT_PATH equ '/sys/FONTS/'
31 halyavin 11
_X equ 340
12
_Y equ 240
13
 
14
BGI_WINDOW_CLIP equ 1
15
BGI_PRC_INFO equ pinfo
16
 
17
macro ListFonts
18
{
19
   mov  eax,lf_head
20
   call PixelPrint
21
   mov  ebx,20 shl 16+60
22
   mov  ecx,(BGIfont_names_end-BGIfont_names)/4
23
   mov  esi,BGIfont_names
24
 .l1:
25
   pusha
26
   pusha
27
   mcall 4,,0x10777fac,esi,4
28
   popa
29
   mov  edx,[esi]
30
   BGIfont_GetID
31
   mov  dword[_BGIfont_Prepare.font],edx
32
   mov  ecx,eax
33
   add  ebx,140 shl 16
34
   mov  edx,ebx
35
   mcall 47,0x80100,,,0x10ffffff
36
   jecxz .nofont
37
   lea  ebx,[edx+80 shl 16+12]
205 heavyiron 38
   mov  edx,_BGIfont_Prepare.fontfullname
39
   mov  esi,_BGIfont_Prepare.fontattr-1
31 halyavin 40
   sub  esi,edx
41
   add  ecx,0x3b800b8
42
   BGIfont_Outtext
43
   sub  ebx,155 shl 16+12
44
   mcall 4,,0x1000f000,load_ok,load_fail-load_ok
45
   jmp  .pop
46
 .nofont:
47
   lea  ebx,[edx-80 shl 16]
48
   mcall 4,,0x10f00010,load_fail,font_msg-load_fail
49
 .pop:
50
   popa
51
   add  esi,4
52
   add  ebx,39
53
   loop .l2
54
   jmp  .ex
55
 .l2:
56
   jmp  .l1
57
.ex:
58
}
59
use32
60
  org	 0x0
61
 
62
  db	 'MENUET01'
63
  dd	 0x01
64
  dd	 START
65
  dd	 I_END
66
  dd	 0x100000
316 heavyiron 67
  dd	 0x100000
31 halyavin 68
  dd	 0x0
69
not1strun  dd	 0x0
70
 
131 diamond 71
include 'lang.inc'
485 heavyiron 72
include  '..\..\..\macros.inc'
31 halyavin 73
;include   'debug.inc'
74
include  'bgifont.inc'
75
 
76
START:
77
    mov  [help],0
78
    mov  ecx,(BGIfont_names_end-BGIfont_names)/4
79
    mov  esi,BGIfont_names
80
    mov  edi,I_END
81
    BGIfont_Init
82
reset:
83
    mov  esi,[BGIfont_Ptr]
84
    inc  esi
85
    mov  edi,freeconst
86
    movsd
87
    mov  esi,freeconst
88
    mov  edi,freetest
89
    mov  ecx,36
90
    rep  movsb
91
red:
92
    mov  eax,[freetest]
93
    mov  dword[title+19],eax
94
    call draw_window
95
    cmp  [not1strun],0
96
    jnz  still
97
    mcall 5,300
98
    not  [not1strun]
99
    inc  [help]
100
    jmp  red
101
still:
102
 
103
    mov  eax,10
485 heavyiron 104
    mcall
31 halyavin 105
 
106
    cmp  eax,1
107
    je	 red
108
    cmp  eax,2
109
    je	 key
110
    cmp  eax,3
111
    je	 button
112
 
113
    jmp  still
114
 
115
button:
116
    mov  eax,17
485 heavyiron 117
    mcall
31 halyavin 118
    cmp  ah,1
119
    jnz  noclose
120
close:
121
    xor  eax,eax
122
    dec  eax
485 heavyiron 123
    mcall
31 halyavin 124
  noclose:
125
    jmp  still
126
 
127
key:
128
    mov  eax,2
485 heavyiron 129
    mcall
31 halyavin 130
    shr  eax,8
131
    cmp  al,27 ; esc - close
132
    je   close
133
    cmp  al,32 ; Space - help
134
    jne  .noh
135
    inc  [help]
136
    cmp  [help],3
137
    jne  red
138
    and  [help],0
139
    jmp  red
140
  .noh:
141
    cmp  [help],2
142
    jne   still
143
    cmp  al,50
144
    jb   .noff
145
    cmp  al,57
146
    ja   .noff
147
    sub  al,46
148
  .gn:
149
    movzx ecx,al
150
    shl  ecx,28
151
    call BGIfont_GetName
152
    mov  [freetest],edx
153
    jmp  red
154
  .noff:
155
    mov  ecx,4
156
    mov  edi,Fkeys
157
  .fkey:
158
    cmp  al,[edi]
159
    je   .fndkey
160
    inc  edi
161
    loop .fkey
162
    jmp  .notfnd
163
  .fndkey:
164
    lea  eax,[edi-Fkeys+0xc]
165
    jmp  .gn
166
  .notfnd:
167
    cmp  al,114 ; r - reset
168
    je   reset
169
    cmp  al,176
170
    jne  .nol  ; left
171
    sub  dword[freetest+8],5
172
    jmp  red
173
  .nol:
174
    cmp  al,179
175
    jne  .nor  ; right
176
    add  dword[freetest+8],5
177
    jmp  red
178
  .nor:
179
    cmp  al,105 ; i -italic
180
    jne  .noi
181
    xor  dword[freetest+32],BGI_ITALIC
182
    jmp  red
183
  .noi:
184
    cmp  al,98 ; b -bold
185
    jne  .nob
186
    xor  dword[freetest+32],BGI_BOLD
187
    jmp  red
188
  .nob:
189
    mov  ecx,2
190
    mov  esi,ali
191
  .ol2:
192
    cmp  al,[esi]
193
    jne  .othl2
194
    mov  ax,[freetest+32]
195
    add  ax,[esi+3]
196
    mov  bx,ax
197
    mov  dx,[esi+1]
198
    and  bx,dx
199
    cmp  bx,dx
200
    jne  .ok
201
    not  dx
202
    and  ax,dx
203
  .ok:
204
    mov  [freetest+32],ax
205
    jmp  red
206
  .othl2:
207
    add  esi,5
208
    loop .ol2
209
  .other:
210
    mov  esi,delt
211
    mov  ecx,4
212
  .ol:
213
    cmp  al,[esi]
214
    jne  .othl
215
    fld  dword[esi+1]
216
    movzx eax,byte[esi+5]
217
    fadd dword[freetest+eax]
218
    fstp dword[freetest+eax]
219
    jmp  red
220
  .othl:
221
    add  esi,6
222
    loop .ol
223
    jmp  still
224
 
225
draw_window:
316 heavyiron 226
 
227
    mov  eax,48
228
    mov  ebx,3
229
    mov  ecx,sc
230
    mov  edx,sizeof.system_colors
485 heavyiron 231
    mcall
316 heavyiron 232
 
31 halyavin 233
    mov  eax,12
234
    mov  ebx,1
485 heavyiron 235
    mcall
31 halyavin 236
 
237
    xor  eax,eax
316 heavyiron 238
    mov  ebx,10*65536+_X*2+30
31 halyavin 239
    mov  ecx,100*65536+_Y*2
240
    mov  edx,0x03261212
241
    mov  esi,0x805080d0
242
    mov  edi,0x005080d0
485 heavyiron 243
    mcall
31 halyavin 244
 
245
    mov  eax,4
246
    mov  ebx,8*65536+8
316 heavyiron 247
    mov  ecx,[sc.grab_text]
248
    or   ecx,0x10000000
31 halyavin 249
    mov  edx,title
250
    mov  esi,title_end-title
251
    cmp  [help],2
252
    je   .int
253
    sub  esi,12
254
  .int:
485 heavyiron 255
    mcall
31 halyavin 256
 
257
    cmp  [help],0
258
    jnz  .help
259
    cmp  byte[I_END],0
260
    jnz  .fontsok
261
    mov  eax,font_msg
262
    call PixelPrint
263
  .fontsok:
264
    ListFonts
265
    jmp  .eod
266
  .help:
267
    cmp  [help],1
268
    jne  .nohelp
269
    mov  eax,helptxt
270
    cmp  byte[I_END],0
271
    jnz  .fontsok2
272
    mov  word[eax+2],_X-80
273
    call PixelPrint
274
    jmp  .eod
275
  .fontsok2:
276
    mov  word[eax+2],_X
277
    call Print
278
    jmp  .eod
279
  .nohelp:
280
    mov  edi,cross
281
    mov  eax,38
282
    mov  edx,0x4b331a
283
    mov  ebx,[edi]
284
    mov  ecx,[edi+4]
485 heavyiron 285
    mcall
31 halyavin 286
    mov  ebx,[edi+8]
287
    mov  ecx,[edi+12]
485 heavyiron 288
    mcall
31 halyavin 289
    mov  ebx,freetest
290
    BGIfont_Freetext
291
  .eod:
292
    mov  eax,12
293
    mov  ebx,2
485 heavyiron 294
    mcall
31 halyavin 295
    ret
296
 
297
Print:	; eax-pointer to _txt struc
298
   pusha
299
   mov	ebx,[eax]
300
   movzx ecx,byte[eax+12]
301
   lea	edx,[eax+13]
302
   mov	edi,eax
303
 .nextstr:
304
   mov esi,[edx]
305
   add	edx,4
306
   push ecx
307
   mov	ecx,[edi+8]
308
   BGIfont_Outtext
309
   add	 ebx,[edi+4]
310
   pop	 ecx
311
   and  esi,0xfff
312
   add	 edx,esi
313
   loop .nextstr
314
   popa
315
   ret
316
 
317
PixelPrint: ; eax-pointer to _txt struc, but used differently
318
   pusha
319
   mov  ebp,eax
320
   mov  ebx,[ebp]
321
   movzx ecx,byte[ebp+12]
322
   mov  eax,4
323
   lea  edx,[ebp+17]
324
 .l:
325
   mov  esi,[edx-4]
326
   and  esi,0xfff
327
   push ecx
328
   mov  ecx,[ebp+8]
485 heavyiron 329
   mcall
31 halyavin 330
   pop  ecx
331
   lea  edx,[esi+edx+4]
332
   add  ebx,[ebp+4]
333
   loop .l
334
   popa
335
   ret
336
 
337
macro _txt _xy,_vert,_color,_opt,[_str]
338
{
339
common
340
   _counter=0
341
forward
342
   _counter=_counter+1
343
common
344
   dd  _xy	      ; 0
345
   dd  _vert	    ; 4
346
   dd  _color	    ; 8
347
   db  _counter   ;_str_count   ; 12
348
forward
349
   local .str_beg,.str_end
350
   dd  (.str_end-.str_beg) or _opt  ; 13
351
 .str_beg:
352
   db  _str		    ;17
353
 .str_end:
354
}
355
 
356
title db 'BGIFONT.INC demo - FONT font'
357
title_end:
358
_M equ 30
359
cross dd _M shl 16+_X*2-_M,_Y shl 16+_Y,_X shl 16+_X,_M shl 16+_Y*2-_M
360
helptxt:
361
if  lang eq ru
362
_txt _X shl 16+60,40,0x434ba010,BGI_HACENTER,\
363
     "ГОРЯЧИЕ КЛАВИШИ:",\
364
     "Пробел - шрифты/этот текст/демка;",\
365
     "<-> стрелки - вращение строки;",\
366
     "V - выравнивание по вертикали;",\
367
     "H - выравнивание по горизонтали;",\
368
     "[,] - масштаб по оси X;",\
369
     "A,Z - масштаб по оси Y;",\
370
     "B,I - полужирный шрифт и курсив;",\
371
     "R - сброс параметров шрифта;",\
372
     "F1..F12 - выбор шрифта;",\
373
     "Esc - закрыть прогу :-("
374
alpha:
375
   db "Вот пример текста!"
376
lf_head:
377
_txt 10 shl 16+30,85 shl 16,0x6e00f7,0,"Имя шрифта","Статус","ID",\
378
     "Путь к файлу"
379
load_ok:
380
   db "загружен"
381
load_fail:
382
   db "не найден"
383
font_msg:
384
   _txt (_X+20) shl 16+180,25,0x10ff0000,0,\
385
   "К сожалению, не найдено ни одного",\
386
   "векторного шрифта *.CHR. Возможно,",\
387
   "вам следует исправить константу",\
388
   "BGIFONT_PATH в начале файла BGITEST.ASM",\
389
   "и перекомпилировать его :-("
390
else
391
_txt _X shl 16+60,40,0x434ba010, BGI_HACENTER,\
392
     "HOT KEYS:",\
393
     "Space - font list/this message/demo;",\
394
     "<-> arrows - rotate text string;",\
395
     "V - toggle vertical alignment;",\
396
     "H - toggle horizontal alignment;",\
397
     "[,] - scale on X axis;",\
398
     "A,Z - scale on Y axis;",\
399
     "B,I - toggle bold & italic mode;",\
400
     "R - reset font options;",\
401
     "F1..F12 - select font;",\
402
     "Esc - close demo :-("
403
alpha:
404
   db 'This is a Sample text!'
405
;    db 'ABCDEFGHIGKLMNOPQRSTUVWXWZ'
406
lf_head:
407
_txt 10 shl 16+30,85 shl 16,0x6e00f7,0,"Font name","Status","ID",\
408
     "Filename"
409
load_ok:
410
   db "loaded"
411
load_fail:
412
   db "not found"
413
font_msg:
414
   _txt (_X+20) shl 16+180,25,0x10ff0000,0,\
415
   "Sorry, no vector font *.CHR found.",\
416
   "Maybe you should correct BGIFONT_PATH",\
417
   "constant at the beginning of file",\
418
   "BGITEST.ASM and recompile it :-("
419
end if
420
 
421
macro Deltas _key,_scale,_ofs
422
{
423
   db _key
424
   dd _scale
425
   db _ofs
426
}
427
 
428
delt:
429
Deltas  91, -0.15,12
430
Deltas  93, 0.15,12
431
Deltas  97, 0.15,16
432
Deltas  122,-0.15,16
433
Fkeys db 48,49,68,255
434
 
435
macro Aligns _key,_mask,_add
436
{
437
   db _key
438
   dw _mask,_add
439
}
440
ali:
441
Aligns 118,BGI_VAMASK,BGI_VATOP
442
Aligns 104,BGI_HAMASK,BGI_HARIGHT
443
freeconst BGIfree 'FONT',_X shl 16+_Y,0, 1.0, 1.0, alpha,\
444
    lf_head-alpha,0xb800e7,\
445
    BGI_VACENTER or BGI_HACENTER
446
freetest BGIfree ?,?,?,?,?,?,?,?,?
447
help db ?
448
pinfo:
449
    times 1024 db ?
316 heavyiron 450
sc     system_colors
31 halyavin 451
I_END: