Kernel: rewritten function 4
@rcher, ac97wav, midamp, rtfread: modified to use function 70 git-svn-id: svn://kolibrios.org@139 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
@@ -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 ecx,ebx ;ecx=color
|
||||
movsx ebx,ax ;ebx=y
|
||||
sar 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
|
||||
@@:
|
||||
|
||||
movzx edx,byte [ebp] ;edx=ascii code
|
||||
test edx,edx
|
||||
jz dtext.output_end
|
||||
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
|
||||
pushad
|
||||
call [disable_mouse]
|
||||
mov esi,9
|
||||
lea ebp,[0x3F600+8*edx+edx]
|
||||
.symloop:
|
||||
push esi
|
||||
mov dl,byte [ebp]
|
||||
mov esi,8
|
||||
.pixloop:
|
||||
test dl,1
|
||||
jz .nopix
|
||||
call [putpixel]
|
||||
mov ebp, ecx ; ebp=pointer to text
|
||||
mov ecx, ebx ; ecx=color
|
||||
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
|
||||
@@:
|
||||
push edx
|
||||
movzx edx, byte [ebp]
|
||||
inc ebp
|
||||
test ecx, 0x10000000
|
||||
jnz .font2
|
||||
pushad
|
||||
mov esi, 9
|
||||
lea ebp, [0x3F600+8*edx+edx]
|
||||
.symloop1:
|
||||
mov dl, byte [ebp]
|
||||
or dl, 1 shl 6
|
||||
.pixloop1:
|
||||
shr dl, 1
|
||||
jz .pixloop1end
|
||||
jnc .nopix
|
||||
call [putpixel]
|
||||
jmp .pixloop1cont
|
||||
.nopix:
|
||||
shr dl,1
|
||||
inc eax
|
||||
dec esi
|
||||
jnz .pixloop
|
||||
sub eax,8
|
||||
inc ebx
|
||||
inc ebp
|
||||
pop esi
|
||||
dec esi
|
||||
jnz .symloop
|
||||
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
|
||||
pushad
|
||||
call [disable_mouse]
|
||||
shl edx,1
|
||||
mov esi,9
|
||||
lea ebp,[0x3EC00+4*edx+edx+1]
|
||||
.symloop:
|
||||
push esi
|
||||
mov dl,byte [ebp]
|
||||
xor esi,esi
|
||||
.pixloop:
|
||||
test dl,1
|
||||
jz .nopix
|
||||
call [putpixel]
|
||||
.nopix:
|
||||
shr dl,1
|
||||
inc esi
|
||||
inc eax
|
||||
cmp esi,8
|
||||
jl .pixloop
|
||||
sub eax,8
|
||||
inc ebx
|
||||
pop esi
|
||||
inc ebp
|
||||
dec esi
|
||||
jnz .symloop
|
||||
movzx edx,byte [ebp-10]
|
||||
add [esp+32-4],edx
|
||||
popad
|
||||
|
||||
|
||||
inc ebp ;ptr to text
|
||||
dec esi ;length
|
||||
jnz dtext.lnew
|
||||
|
||||
|
||||
dtext.output_end:
|
||||
test ecx, 0x40000000
|
||||
jz .pixloop1cont
|
||||
push ecx
|
||||
mov ecx, [esp+4+4]
|
||||
call [putpixel]
|
||||
pop ecx
|
||||
.pixloop1cont:
|
||||
inc eax
|
||||
jmp .pixloop1
|
||||
.pixloop1end:
|
||||
sub eax, 6
|
||||
inc ebx
|
||||
inc ebp
|
||||
dec esi
|
||||
jnz .symloop1
|
||||
popad
|
||||
ret
|
||||
add eax, 6
|
||||
pop edx
|
||||
jmp .loop
|
||||
.font2:
|
||||
pushad
|
||||
add edx, edx
|
||||
lea ebp, [0x3EC00+4*edx+edx+1]
|
||||
push 9
|
||||
movzx esi, byte [ebp-1]
|
||||
.symloop2:
|
||||
mov dl, byte [ebp]
|
||||
push esi
|
||||
.pixloop2:
|
||||
shr dl, 1
|
||||
jnc .nopix2
|
||||
call [putpixel]
|
||||
jmp .pixloop2cont
|
||||
.nopix2:
|
||||
test ecx, 0x40000000
|
||||
jz .pixloop2cont
|
||||
push ecx
|
||||
mov ecx, [esp+12+4]
|
||||
call [putpixel]
|
||||
pop ecx
|
||||
.pixloop2cont:
|
||||
inc eax
|
||||
dec esi
|
||||
jnz .pixloop2
|
||||
pop esi
|
||||
sub eax, esi
|
||||
inc ebx
|
||||
inc ebp
|
||||
dec dword [esp]
|
||||
jnz .symloop2
|
||||
pop eax
|
||||
add dword [esp+28], esi
|
||||
popad
|
||||
pop edx
|
||||
jmp .loop
|
||||
.end:
|
||||
popad
|
||||
ret
|
||||
|
Reference in New Issue
Block a user