From 7dad6439fe708f3ef73391b50e2197921c536580 Mon Sep 17 00:00:00 2001 From: IgorA Date: Sun, 10 Dec 2017 17:34:39 +0000 Subject: [PATCH] box_lib: fix clear cursor in 'editbox' info3ds: crop zeros after floating point git-svn-id: svn://kolibrios.org@7128 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/info3ds/info3ds.asm | 4 +- programs/develop/info3ds/info_fun_float.inc | 45 ++++++++++++++++--- programs/develop/info3ds/info_wnd_coords.inc | 6 +++ .../libraries/box_lib/trunk/editbox.asm | 25 ++++++----- 4 files changed, 63 insertions(+), 17 deletions(-) diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index 5aebaae1d8..46c1f0f43b 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -1373,9 +1373,9 @@ white_light dd 0.8, 0.8, 0.8, 1.0 ; lmodel_ambient dd 0.3, 0.3, 0.3, 1.0 ; Параметры фонового освещения if lang eq ru -capt db 'info 3ds версия 18.04.17',0 ;подпись окна +capt db 'info 3ds версия 10.12.17',0 ;подпись окна else -capt db 'info 3ds version 18.04.17',0 ;window caption +capt db 'info 3ds version 10.12.17',0 ;window caption end if align 16 diff --git a/programs/develop/info3ds/info_fun_float.inc b/programs/develop/info3ds/info_fun_float.inc index a9cd189b34..befacdaee0 100644 --- a/programs/develop/info3ds/info_fun_float.inc +++ b/programs/develop/info3ds/info_fun_float.inc @@ -59,6 +59,7 @@ Data_String DB 32 DUP (?) ;* Выходные параметры: * ;* Data_String - строка-результат. * ;******************************************************* +align 4 DoubleFloat_to_String: pushad ; Результат записывать в строку Data_String @@ -150,10 +151,11 @@ DoubleFloat_to_String: ; Ошибка - нет значащих цифр jmp .Error ; Скопировать значащую часть числа в начало строки +align 4 .N4: rep movsb jmp .End - ; Ошибка +align 4 .Error: mov AL,'E' stosb @@ -165,12 +167,14 @@ DoubleFloat_to_String: stosb jmp .End ; Переполнение разрядной сетки +align 4 .Overflow: mov AL,'#' stosb xor AL,AL stosb ; Конец процедуры +align 4 .End: popad ret @@ -183,6 +187,7 @@ DoubleFloat_to_String: ;* Выходные параметры: * ;* Data_Double - число в двоичном коде. * ;**************************************************** +align 4 String_to_DoubleFloat: pushad cld @@ -202,6 +207,7 @@ String_to_DoubleFloat: jne .ShiftIgnoreEnd loop .ShiftIgnore jmp .Error +align 4 .ShiftIgnoreEnd: ; Проверяем знак числа cmp AL,'-' @@ -222,6 +228,7 @@ String_to_DoubleFloat: cmp AL,0 ;конец строки? jne .NotDot jmp .ASCIItoBCDConversionEnd +align 4 .NotDot: ; Увеличить на 1 значение позиции точки, ; если она еще не встречалась @@ -284,7 +291,7 @@ String_to_DoubleFloat: .NoDiv:; Выгрузить число в двоичном формате fstp [Data_Double] jmp .End - +align 4 .Error:; При любой ошибке обнулить результат fldz ;занести ноль с стек сопроцессора fstp [Data_Double] @@ -293,8 +300,7 @@ String_to_DoubleFloat: ret align 4 -proc str_cat, str1:dword, str2:dword - push eax ecx edi esi +proc str_cat uses eax ecx edi esi, str1:dword, str2:dword mov esi,dword[str2] stdcall str_len,esi mov ecx,eax @@ -304,7 +310,6 @@ proc str_cat, str1:dword, str2:dword add edi,eax cld repne movsb - pop esi edi ecx eax ret endp @@ -321,4 +326,34 @@ proc str_len, str1:dword @@: sub eax,[str1] ret +endp + +align 4 +proc String_crop_0 uses eax ebx ecx edi + mov edi,Data_String + mov al,'.' + mov ecx,32 + repne scasb + mov ebx,edi + mov edi,Data_String + xor al,al + mov ecx,32 + repne scasb + cmp ebx,edi + jg .end_f + dec edi + .cycle0: + dec edi + cmp edi,Data_String + jle .end_f + cmp byte[edi],'0' + jne .cycle0end + mov byte[edi],0 + jmp .cycle0 + .cycle0end: + cmp byte[edi],'.' + jne .end_f + mov byte[edi],0 + .end_f: + ret endp \ No newline at end of file diff --git a/programs/develop/info3ds/info_wnd_coords.inc b/programs/develop/info3ds/info_wnd_coords.inc index 1596ef181f..80c913eda6 100644 --- a/programs/develop/info3ds/info_wnd_coords.inc +++ b/programs/develop/info3ds/info_wnd_coords.inc @@ -114,6 +114,7 @@ pushad fld dword[ebx] fstp qword[Data_Double] call DoubleFloat_to_String + call String_crop_0 add ebx,4 stdcall str_len, Data_String mov esi,txt_space @@ -439,6 +440,7 @@ prop_button: fld dword[ebx] fstp qword[Data_Double] call DoubleFloat_to_String + call String_crop_0 add ebx,4 stdcall str_len, Data_String mov esi,txt_space @@ -543,14 +545,17 @@ get_point_coords: fld dword[ebx] fstp qword[Data_Double] call DoubleFloat_to_String + call String_crop_0 stdcall [edit_box_set_text], edit1, Data_String fld dword[ebx+4] fstp qword[Data_Double] call DoubleFloat_to_String + call String_crop_0 stdcall [edit_box_set_text], edit2, Data_String fld dword[ebx+8] fstp qword[Data_Double] call DoubleFloat_to_String + call String_crop_0 stdcall [edit_box_set_text], edit3, Data_String stdcall [edit_box_draw], edit1 stdcall [edit_box_draw], edit2 @@ -775,6 +780,7 @@ pushad fld dword[ebx] fstp qword[Data_Double] call DoubleFloat_to_String + call String_crop_0 add ebx,4 stdcall str_len, Data_String mov esi,txt_space diff --git a/programs/develop/libraries/box_lib/trunk/editbox.asm b/programs/develop/libraries/box_lib/trunk/editbox.asm index bdca63c4b1..f8119683b2 100644 --- a/programs/develop/libraries/box_lib/trunk/editbox.asm +++ b/programs/develop/libraries/box_lib/trunk/editbox.asm @@ -781,28 +781,33 @@ edit_box.get_n: ;---------------------------------------------------------- ; in: ebp = Color edit_box.clear_cursor: - mov edx, ebp movzx ebx, word cl_curs_x - movzx ecx, word cl_curs_y - jmp edit_box.draw_curs + cmp ebx, ed_left ;попадает ли курсор текстовое поле? + jle @f + mov edx, ebp + movzx ecx, word cl_curs_y + cmp ecx, ed_top + jg edit_box.draw_curs +@@: + ret edit_box.draw_cursor: - mov edx, ed_text_color + mov edx, ed_text_color mov eax, ed_pos sub eax, ed_offset - mul dword ed_char_width + mul dword ed_char_width mov ebx, eax add ebx, ed_left - inc ebx + inc ebx mov ecx, ed_top - add ecx, 2 + add ecx, 2 mov cl_curs_x, bx mov cl_curs_y, cx -edit_box.draw_curs: - mov eax, ebx +edit_box.draw_curs: + mov eax, ebx shl ebx, 16 or ebx, eax - mov eax, ecx + mov eax, ecx shl ecx, 16 or ecx, eax add ecx, ed_height