Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 138 → Rev 139

/kernel/trunk/gui/font.inc
1,119 → 1,107
align 4
dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
; eax x & y
; ebx font ( 0xX0000000 ) & color ( 0x00RRGGBB )
; ebx style ( 0xX0000000 ) & color ( 0x00RRGGBB )
; X = ABnnb:
; nn = font
; A = 0 <=> output edx characters; otherwise output ASCIIZ string
; B = 1 <=> fill background with color esi
; ecx start of text
; edx length
; edi 1 force
 
pushad
call [disable_mouse]
 
mov esi,edx ;esi=length
mov ebp,ecx ;ebp=ptr to text
mov ebp, ecx ; ebp=pointer to text
mov ecx,ebx ;ecx=color
movzx ebx,ax ;ebx=y
shr eax,16 ;eax=x
and esi, 0xFF ;limit of text = 255 symbols
 
dtext.lnew:
test esi, esi ; zero length ?
jnz @f
jmp dtext.output_end
movsx ebx, ax ; ebx=y
sar eax, 16 ; eax=x
cmp edx, 255
jb .loop
mov edx, 255
.loop:
test ecx, ecx
js .test_asciiz
dec edx
js .end
jmp @f
.test_asciiz:
cmp byte [ebp], 0
jz .end
@@:
 
movzx edx,byte [ebp] ;edx=ascii code
test edx,edx
jz dtext.output_end
push edx
movzx edx, byte [ebp]
inc ebp
test ecx,0x10000000
jnz dtext.letnew2
 
align 4
.letnew:
 
drawletter: ;output char of type 1(monotype)
;eax - x
;ebx - y
;ecx - color
;edx - ascii code
jnz .font2
pushad
call [disable_mouse]
mov esi,9
lea ebp,[0x3F600+8*edx+edx]
.symloop:
push esi
.symloop1:
mov dl,byte [ebp]
mov esi,8
.pixloop:
test dl,1
jz .nopix
or dl, 1 shl 6
.pixloop1:
shr dl, 1
jz .pixloop1end
jnc .nopix
call [putpixel]
jmp .pixloop1cont
.nopix:
shr dl,1
test ecx, 0x40000000
jz .pixloop1cont
push ecx
mov ecx, [esp+4+4]
call [putpixel]
pop ecx
.pixloop1cont:
inc eax
dec esi
jnz .pixloop
sub eax,8
jmp .pixloop1
.pixloop1end:
sub eax, 6
inc ebx
inc ebp
pop esi
dec esi
jnz .symloop
jnz .symloop1
popad
 
add eax,6
 
inc ebp ;ptr to text
dec esi ;length
jnz dtext.lnew
 
jmp dtext.output_end
 
 
dtext.letnew2:
 
align 4
drawletter2: ;output char of type 2(proportional)
;eax - x
;ebx - y
;ecx - color
;edx - symbol
;edi - force?
;result - eax=eax+sym_size
pop edx
jmp .loop
.font2:
pushad
call [disable_mouse]
shl edx,1
mov esi,9
add edx, edx
lea ebp,[0x3EC00+4*edx+edx+1]
.symloop:
push 9
movzx esi, byte [ebp-1]
.symloop2:
mov dl, byte [ebp]
push esi
mov dl,byte [ebp]
xor esi,esi
.pixloop:
test dl,1
jz .nopix
.pixloop2:
shr dl, 1
jnc .nopix2
call [putpixel]
.nopix:
shr dl,1
inc esi
jmp .pixloop2cont
.nopix2:
test ecx, 0x40000000
jz .pixloop2cont
push ecx
mov ecx, [esp+12+4]
call [putpixel]
pop ecx
.pixloop2cont:
inc eax
cmp esi,8
jl .pixloop
sub eax,8
dec esi
jnz .pixloop2
pop esi
sub eax, esi
inc ebx
pop esi
inc ebp
dec esi
jnz .symloop
movzx edx,byte [ebp-10]
add [esp+32-4],edx
dec dword [esp]
jnz .symloop2
pop eax
add dword [esp+28], esi
popad
 
 
inc ebp ;ptr to text
dec esi ;length
jnz dtext.lnew
 
 
dtext.output_end:
pop edx
jmp .loop
.end:
popad
ret
ret