forked from KolibriOS/kolibrios
Now 4 function can output zero-ended(ASCIIZ) strings.
The strings output code was optimized. Fixed bug - max string length was being checked incorrectly git-svn-id: svn://kolibrios.org@106 a494cfbc-eb01-0410-851d-a64ba20cac60
This commit is contained in:
parent
82859246df
commit
07ff3f1978
@ -1,45 +1,36 @@
|
|||||||
align 4
|
align 4
|
||||||
dtext:
|
dtext: ; Text String Output (rw by Johnny_B[john@kolibrios.org])
|
||||||
; eax x & y
|
; eax x & y
|
||||||
; ebx font ( 0xX0000000 ) & color ( 0x00RRGGBB )
|
; ebx font ( 0xX0000000 ) & color ( 0x00RRGGBB )
|
||||||
; ecx start of text
|
; ecx start of text
|
||||||
; edx length
|
; edx length
|
||||||
; edi 1 force
|
; edi 1 force
|
||||||
|
|
||||||
test ebx,0x10000000
|
|
||||||
jnz dtext2
|
|
||||||
|
|
||||||
pushad
|
pushad
|
||||||
|
|
||||||
mov esi, edx
|
mov esi,edx ;esi=length
|
||||||
and esi, 0xff
|
mov ebp,ecx ;ebp=ptr 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 ?
|
test esi, esi ; zero length ?
|
||||||
jnz @f
|
jnz @f
|
||||||
popad
|
jmp dtext.output_end
|
||||||
ret
|
|
||||||
@@:
|
@@:
|
||||||
|
|
||||||
|
movzx edx,byte [ebp] ;edx=ascii code
|
||||||
|
test edx,edx
|
||||||
|
jz dtext.output_end
|
||||||
|
test ecx,0x10000000
|
||||||
|
jnz dtext.letnew2
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
.letnew:
|
.letnew:
|
||||||
|
|
||||||
push eax ecx edx
|
drawletter: ;output char of type 1(monotype)
|
||||||
movzx ebx,ax
|
|
||||||
shr eax,16
|
|
||||||
movzx edx,byte [ecx]
|
|
||||||
mov ecx,[esp+3*4+32-16]
|
|
||||||
call drawletter
|
|
||||||
pop edx ecx eax
|
|
||||||
|
|
||||||
add eax,6*65536
|
|
||||||
|
|
||||||
inc ecx
|
|
||||||
dec edx
|
|
||||||
jnz .letnew
|
|
||||||
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
|
|
||||||
align 4
|
|
||||||
drawletter:
|
|
||||||
;eax - x
|
;eax - x
|
||||||
;ebx - y
|
;ebx - y
|
||||||
;ecx - color
|
;ecx - color
|
||||||
@ -68,52 +59,20 @@ drawletter:
|
|||||||
dec esi
|
dec esi
|
||||||
jnz .symloop
|
jnz .symloop
|
||||||
popad
|
popad
|
||||||
ret
|
|
||||||
|
add eax,6
|
||||||
|
|
||||||
|
inc ebp ;ptr to text
|
||||||
|
dec esi ;length
|
||||||
|
jnz dtext.lnew
|
||||||
|
|
||||||
|
jmp dtext.output_end
|
||||||
|
|
||||||
|
|
||||||
|
dtext.letnew2:
|
||||||
dtext2:
|
|
||||||
|
|
||||||
; eax x & y
|
|
||||||
; ebx color
|
|
||||||
; ecx start of text
|
|
||||||
; edx length
|
|
||||||
; edi 1 force
|
|
||||||
|
|
||||||
pushad
|
|
||||||
|
|
||||||
mov esi,edx
|
|
||||||
and esi,0xff
|
|
||||||
test esi,esi ; zero length ?
|
|
||||||
jnz @f
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
@@:
|
|
||||||
|
|
||||||
align 4
|
align 4
|
||||||
letnew2:
|
drawletter2: ;output char of type 2(proportional)
|
||||||
|
|
||||||
push ecx
|
|
||||||
push edx
|
|
||||||
movzx ebx,ax
|
|
||||||
shr eax,16
|
|
||||||
movzx edx,byte [ecx]
|
|
||||||
mov ecx,[esp+2*4+32-16]
|
|
||||||
call drawletter2
|
|
||||||
shl eax,16
|
|
||||||
add eax,ebx
|
|
||||||
pop edx
|
|
||||||
pop ecx
|
|
||||||
|
|
||||||
inc ecx
|
|
||||||
dec edx
|
|
||||||
jnz letnew2
|
|
||||||
|
|
||||||
popad
|
|
||||||
ret
|
|
||||||
|
|
||||||
align 4
|
|
||||||
drawletter2:
|
|
||||||
;eax - x
|
;eax - x
|
||||||
;ebx - y
|
;ebx - y
|
||||||
;ecx - color
|
;ecx - color
|
||||||
@ -147,5 +106,14 @@ drawletter2:
|
|||||||
jnz .symloop
|
jnz .symloop
|
||||||
movzx edx,byte [ebp-10]
|
movzx edx,byte [ebp-10]
|
||||||
add [esp+32-4],edx
|
add [esp+32-4],edx
|
||||||
|
popad
|
||||||
|
|
||||||
|
|
||||||
|
inc ebp ;ptr to text
|
||||||
|
dec esi ;length
|
||||||
|
jnz dtext.lnew
|
||||||
|
|
||||||
|
|
||||||
|
dtext.output_end:
|
||||||
popad
|
popad
|
||||||
ret
|
ret
|
Loading…
Reference in New Issue
Block a user