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 |