From cb9e74fce8f5f76bc272d4fc7de9d3aae156e23f Mon Sep 17 00:00:00 2001 From: IgorA Date: Fri, 9 Sep 2011 20:55:11 +0000 Subject: [PATCH] info3ds: 1) added documentation 2) new window for coordinates view git-svn-id: svn://kolibrios.org@2165 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/info3ds/data.inc | 4 +- programs/develop/info3ds/doc/i3d_110823.png | Bin 0 -> 22540 bytes programs/develop/info3ds/doc/i3d_110909.png | Bin 0 -> 39708 bytes programs/develop/info3ds/doc/readme.htm | 55 ++++ programs/develop/info3ds/info3ds.asm | 21 ++ programs/develop/info3ds/info_fun_float.inc | 324 +++++++++++++++++++ programs/develop/info3ds/info_wnd_coords.inc | 188 +++++++++++ 7 files changed, 590 insertions(+), 2 deletions(-) create mode 100644 programs/develop/info3ds/doc/i3d_110823.png create mode 100644 programs/develop/info3ds/doc/i3d_110909.png create mode 100644 programs/develop/info3ds/doc/readme.htm create mode 100644 programs/develop/info3ds/info_fun_float.inc create mode 100644 programs/develop/info3ds/info_wnd_coords.inc diff --git a/programs/develop/info3ds/data.inc b/programs/develop/info3ds/data.inc index 613c239f39..1450a66189 100644 --- a/programs/develop/info3ds/data.inc +++ b/programs/develop/info3ds/data.inc @@ -1,7 +1,7 @@ if lang eq ru -capt db 'info 3ds версия 30.08.11',0 ;подпись окна +capt db 'info 3ds версия 09.09.11',0 ;подпись окна else -capt db 'info 3ds version 30.08.11',0 ;window caption +capt db 'info 3ds version 09.09.11',0 ;window caption end if MAX_FILE_LEVEL equ 20 ;максимальный уровень вложенности блоков для анализа diff --git a/programs/develop/info3ds/doc/i3d_110823.png b/programs/develop/info3ds/doc/i3d_110823.png new file mode 100644 index 0000000000000000000000000000000000000000..06fa652dd620121401e033aaeb47d66e622c3f9c GIT binary patch literal 22540 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 literal 0 HcmV?d00001 diff --git a/programs/develop/info3ds/doc/i3d_110909.png b/programs/develop/info3ds/doc/i3d_110909.png new file mode 100644 index 0000000000000000000000000000000000000000..4cee87f0fa7674ef546d5522a7837c904b9c7ccf GIT binary patch literal 39708 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%0Ac%d=-S-hE{tibag$saSQ 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 ObNm?G?%7elr2hhFq0`3z literal 0 HcmV?d00001 diff --git a/programs/develop/info3ds/doc/readme.htm b/programs/develop/info3ds/doc/readme.htm new file mode 100644 index 0000000000..da240e6ca4 --- /dev/null +++ b/programs/develop/info3ds/doc/readme.htm @@ -0,0 +1,55 @@ + + +Info 3ds + + + + +

Info 3ds

+

Info3ds - яЁюуЁрььр яЁюёьюЄЁр ёЄЁєъЄєЁ√ Їрщыют ЇюЁьрЄр *.3ds. ┬ёх Їрщы√ *.3ds ёюёЄю Є шч юяЁхфхыхээ√ї сыюъют, т ъюЄюЁ√ї эрїюфшЄё  шэЇюЁьрЎш  ю юс·хъЄрї ёЎхэ√. ┬ яЁюуЁрььх ёыхтр т тшфх фхЁхтр яюърчрэр ёЄЁєъЄєЁр сыюъют т Їрщых, р ёяЁртр т√сЁрээ√щ сыюъ яюърч√трхЄё  т °хёЄэрфЎрЄхЁшўэюь тшфх. ─ы  яЁюёьюЄЁр ¤Єшї Їрщыют т 3-ї ьхЁэюь тшфх шёяюы№чєщЄх яЁюуЁрььє View3ds.

+ + +

╨шё. 1. ┬эх°эшщ тшф яЁюуЁрьь√

+ +

╩ююЁфшэрЄ√ тхЁ°шэ юс·хъЄр ьюцэю яЁюёьрЄЁштрЄ№ т тшфх фЁюсэ√ї ўшёхы. ─ы  яЁюёьюЄЁр ъююЁфшэрЄ эєцэю (ёь. Ёшё. 2):

+

1) тхфхышЄ№ сыюъ ё ъюфюь 4110 (т Ёєёёъющ тхЁёшш яюфяшёрэ ъръ ╤яшёюъ тхЁ°шэ),

+

2) эрцрЄ№ ъэюяъє эр ярэхыш шэёЄЁєьхэЄют.

+ +

╨шё. 2. ╧ЁюёьюЄЁ ъююЁфшэрЄ тхЁ°шэ юс·хъЄр

+ +

└тЄюЁ

+

IgorA

+ + + \ No newline at end of file diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index 71cba6ad31..a0966801ac 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -16,6 +16,7 @@ include '../../develop/libraries/box_lib/trunk/box_lib.mac' include 'mem.inc' include 'dll.inc' include 'lang.inc' +include 'info_fun_float.inc' debug equ 0 @@ -112,6 +113,7 @@ buffer rb size_one_list ; txt_3ds_symb db 0,0 ;-------------------------------------- +include 'info_wnd_coords.inc' align 4 start: @@ -361,6 +363,10 @@ pushad ;mov edx,5 ;int 0x40 + mov ebx,(85 shl 16)+20 + mov ecx,(5 shl 16)+20 + mov edx,6 ;окно с координатами + int 0x40 mov eax,7 mov ebx,[image_data_toolbar] @@ -407,6 +413,10 @@ button: jne @f call but_save_file @@: + cmp ah,6 + jne @f + call but_wnd_coords + @@: cmp ah,1 jne still @@ -808,6 +818,15 @@ if debug end if ret +align 4 +but_wnd_coords: + cmp byte[prop_wnd_run],0 + jne @f + pushad + mcall 51,1,prop_start,thread_coords + popad + @@: + ret ;input: @@ -1223,6 +1242,8 @@ align 4 i_end: rb 1024 +thread_coords: + rb 1024 stacktop: sys_path rb 1024 file_name: diff --git a/programs/develop/info3ds/info_fun_float.inc b/programs/develop/info3ds/info_fun_float.inc new file mode 100644 index 0000000000..94c217f405 --- /dev/null +++ b/programs/develop/info3ds/info_fun_float.inc @@ -0,0 +1,324 @@ +; +; функции для работы с числами float +; + +; Количество знаков числа после запятой (1-17) +NumberSymbolsAD DW 5 +; Константы (10 в степени N) +MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5 + DQ 1.0E6,1.0E7,1.0E8,1.0E9,1.0E10 + DQ 1.0E11,1.0E12,1.0E13,1.0E14,1.0E15 + DQ 1.0E16,1.0E17,1.0E18,1.0E19,1.0E20 + DQ 1.0E21,1.0E22,1.0E23,1.0E24,1.0E25 + DQ 1.0E26,1.0E27,1.0E28,1.0E29,1.0E30 + DQ 1.0E31,1.0E32,1.0E33,1.0E34,1.0E35 + DQ 1.0E36,1.0E37,1.0E38,1.0E39,1.0E40 + DQ 1.0E41,1.0E42,1.0E43,1.0E44,1.0E45 + DQ 1.0E46,1.0E47,1.0E48,1.0E49,1.0E50 + DQ 1.0E51,1.0E52,1.0E53,1.0E54,1.0E55 + DQ 1.0E56,1.0E57,1.0E58,1.0E59,1.0E60 + DQ 1.0E61,1.0E62,1.0E63,1.0E64,1.0E65 + DQ 1.0E66,1.0E67,1.0E68,1.0E69,1.0E70 + DQ 1.0E71,1.0E72,1.0E73,1.0E74,1.0E75 + DQ 1.0E76,1.0E77,1.0E78,1.0E79,1.0E80 + DQ 1.0E81,1.0E82,1.0E83,1.0E84,1.0E85 + DQ 1.0E86,1.0E87,1.0E88,1.0E89,1.0E90 + DQ 1.0E91,1.0E92,1.0E93,1.0E94,1.0E95 + DQ 1.0E96,1.0E97,1.0E98,1.0E99,1.0E100 + DQ 1.0E101,1.0E102,1.0E103,1.0E104,1.0E105 + DQ 1.0E106,1.0E107,1.0E108,1.0E109,1.0E110 + DQ 1.0E111,1.0E112,1.0E113,1.0E114,1.0E115 + DQ 1.0E116,1.0E117,1.0E118,1.0E119,1.0E120 + DQ 1.0E121,1.0E122,1.0E123,1.0E124,1.0E125 + DQ 1.0E126,1.0E127,1.0E128 +; Число с плавающей запятой двойной точности +Data_Double DQ ? +; Число в BCD-формате +Data_BCD DT ? +; Вспомогательный флаг +Data_Flag DB ? +; Знак результата (если не 0 - отрицательное число) +Data_Sign DB ? + + +db 0 ;указатель на сдвиг в памяти +; Строка для хранения числа в коде ASCII +Data_String DB 32 DUP (?) + + + +;******************************************************* +;* ПРЕОБРАЗОВАНИЕ ЧИСЛА С ПЛАВАЮЩЕЙ ЗАПЯТОЙ В СТРОКУ * +;* Число имеет формат с удвоенной точностью, результат * +;* выдается в десятичном коде, в "бытовом" формате с * +;* фиксированным количеством знаков после запятой. * +;* Входные параметры: * +;* Data_Double - преобразуемое число; * +;* NumberSymbolsAD - количество знаков после * +;* запятой (0-17). * +;* Выходные параметры: * +;* Data_String - строка-результат. * +;******************************************************* +DoubleFloat_to_String: + pushad + ; Результат записывать в строку Data_String + mov EDI, Data_String + + ; Сдвигаем число влево на NumberSymbolsAD + ; десятичных разрядов + fninit ;сброс сопроцессора + fld [Data_Double] ;загрузить число + xor ebx,ebx + mov BX,[NumberSymbolsAD] + cmp BX, 0 + je .NoShifts ;нет цифр после запятой + jl .Error ;ошибка + dec BX + shl BX, 3 ;умножаем на 8 + add EBX, MConst + fmul qword [EBX] ;умножить на константу +.NoShifts: + ; Извлечь число в коде BCD + fbstp [Data_BCD] +; Проверить результат на переполнение + mov AX,word [Data_BCD + 8] + cmp AX,0FFFFh ;"десятичное" переполнение? + je .Overflow +; Выделить знак числа и записать его в ASCII-коде + mov AL, byte [Data_BCD + 9] + and AL,AL + jz .NoSign + mov AL,'-' + stosb +.NoSign: +; Распаковать число в код ASCII + mov BX,8 ;смещение последней пары цифр + mov ecx,9 ;счетчик пар цифр + ; Определить позицию десятичной точки в числе + mov DX,18 + sub DX,[NumberSymbolsAD] + js .Error ;ошибка, если отрицательная + jz .Error ;или нулевая позиция +.NextPair: + ; Загрузить очередную пару разрядов + mov AL, byte [BX + Data_BCD] + mov AH,AL + ; Выделить, перевести в ASCII и + ; сохранить старшую тетраду + shr AL,4 + add AL,'0' + stosb + dec DX + jnz .N0 + mov AL,'.' + stosb +.N0: ; Выделить, перевести в ASCII и + ; сохранить младшую тетраду + mov AL,AH + and AL,0Fh + add AL,'0' + stosb + dec DX + jnz .N1 + mov AL,'.' + stosb +.N1: + dec BX + loop .NextPair + mov AL,0 + stosb + +; Убрать незначащие нули слева + mov EDI, Data_String + mov ESI, Data_String + ; Пропустить знак числа, если он есть + cmp byte [ESI],'-' + jne .N2 + inc ESI + inc EDI +.N2: ; Загрузить в счетчик цикла количество разрядов + ; числа плюс 1 (байт десятичной точки) + mov ecx,18+1+1 + ; Пропустить незначащие нули +.N3: + cmp byte [ESI],'0' + jne .N4 + cmp byte [ESI+1],'.' + je .N4 + inc ESI + loop .N3 + ; Ошибка - нет значащих цифр + jmp .Error +; Скопировать значащую часть числа в начало строки +.N4: rep movsb + jmp .End + +; Ошибка +.Error: + mov AL,'E' + stosb + mov AL,'R' + stosb + mov AL,'R' + stosb + xor AL,AL + stosb + jmp .End +; Переполнение разрядной сетки +.Overflow: + mov AL,'#' + stosb + xor AL,AL + stosb +; Конец процедуры +.End: + popad + ret + +;**************************************************** +;* ПРЕОБРАЗОВАТЬ СТРОКУ В ЧИСЛО С ПЛАВАЮЩЕЙ ЗАПЯТОЙ * +;* (число имеет обычный, "бытовой" формат) * +;* Входные параметры: * +;* Data_String - число в коде ASCII. * +;* Выходные параметры: * +;* Data_Double - число в двоичном коде. * +;**************************************************** +String_to_DoubleFloat: + pushad + cld + ; Очищаем Data_BCD + mov dword [Data_BCD],0 + mov dword [Data_BCD+4],0 + mov word [Data_BCD+8],0 + ; Очищаем байт знака + mov [Data_Sign],0 + ; Заносим в SI указатель на строку + mov ESI, Data_String + ; Пропускаем пробелы перед числом + mov ecx,64 ;защита от зацикливания +.ShiftIgnore: + lodsb + cmp AL,' ' + jne .ShiftIgnoreEnd + loop .ShiftIgnore + jmp .Error +.ShiftIgnoreEnd: + ; Проверяем знак числа + cmp AL,'-' + jne .Positive + mov [Data_Sign],80h + lodsb +.Positive: + mov [Data_Flag],0 ;признак наличия точки + mov DX,0 ;позиция точки + mov ecx,18 ;макс. число разрядов +.ASCIItoBCDConversion: + cmp AL,'.' ;точка? + jne .NotDot + cmp [Data_Flag],0 ;точка не встречалась? + jne .Error + mov [Data_Flag],1 + lodsb + cmp AL,0 ;конец строки? + jne .NotDot + jmp .ASCIItoBCDConversionEnd +.NotDot: + ; Увеличить на 1 значение позиции точки, + ; если она еще не встречалась + cmp [Data_Flag],0 + jnz .Figures + inc DX +.Figures: + ; Символы числа должны быть цифрами + cmp AL,'0' + jb .Error + cmp AL,'9' + ja .Error + ; Пишем очередную цифру в младшую тетраду BCD + and AL,0Fh + or byte [Data_BCD],AL + ; Проверка на конец строки + cmp byte [ESI],0 + je .ASCIItoBCDConversionEnd + ; Сдвигаем BCD на 4 разряда влево + ; (сдвигаем старшие 2 байта) + mov AX,word [Data_BCD+6] + shld word [Data_BCD+8],AX,4 + ; (сдвигаем средние 4 байта) + mov EAX, dword [Data_BCD] + shld dword [Data_BCD+4],EAX,4 + ; (сдвигаем младшие 4 байта) + shl dword [Data_BCD],4 + ; Загружаем следующий символ в AL + lodsb + loop .ASCIItoBCDConversion + ; Если 19-й символ не 0 и не точка, + ; то ошибка переполнения + cmp AL,'.' + jne .NotDot2 + inc ecx + lodsb +.NotDot2: + cmp AL,0 + jne .Error ;переполнение разрядной сетки + +; ПРЕОБРАЗОВАТЬ ЧИСЛО ИЗ КОДА BCD В ВЕЩЕСТВЕННОЕ ЧИСЛО +.ASCIItoBCDConversionEnd: + ; Вписать знак в старший байт + mov AL,[Data_Sign] + mov byte [Data_BCD+9],AL + ; Сбросить регистры сопроцессора + fninit + ; Загрузить в сопроцессор число в BCD-формате + fbld [Data_BCD] + ; Вычислить номер делителя + mov EBX,18+1 + sub BX,CX + sub BX,DX + cmp EBX,0 + je .NoDiv + dec EBX + shl EBX,3 ;умножаем на 8 + add EBX, MConst + fdiv qword [EBX] ;разделить на константу +.NoDiv:; Выгрузить число в двоичном формате + fstp [Data_Double] + jmp .End + +.Error:; При любой ошибке обнулить результат + fldz ;занести ноль с стек сопроцессора + fstp [Data_Double] +.End: + popad + ret + +align 4 +proc str_cat, str1:dword, str2:dword + push eax ecx edi esi + mov esi,dword[str2] + stdcall str_len,esi + mov ecx,eax + inc ecx + mov edi,dword[str1] + stdcall str_len,edi + add edi,eax + cld + repne movsb + pop esi edi ecx eax + ret +endp + +;output: +; eax = strlen +align 4 +proc str_len, str1:dword + mov eax,[str1] + @@: + cmp byte[eax],0 + je @f + inc eax + jmp @b + @@: + sub eax,[str1] + 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 new file mode 100644 index 0000000000..4aabdda1df --- /dev/null +++ b/programs/develop/info3ds/info_wnd_coords.inc @@ -0,0 +1,188 @@ +; +; в этом файле собраны функции нужные для создания и +; работы окна с координатами +; + +prop_edits_top equ 25 +prop_edits_height equ 18 +prop_wnd_width equ 350 ;ширина окна со свойствами объекта +SIZE_ONE_FLOAT equ 14 +MAX_OBJECT_SIZE equ (4+SIZE_ONE_FLOAT*3+1) + +prop_wnd_run db 0 ;переменная следящая за тем что-бы не запускать больше 1-го окна со свойствами одновременно + +txt_space: + db SIZE_ONE_FLOAT dup(' ') +.end: + db 0 + +obj_point: ;добавляемый объект + dd 0 ;указатель +.text: + rb MAX_OBJECT_SIZE + + + +;даное окно (процесс) вызываеться функцией but_wnd_coords +align 4 +prop_start: +pushad + mcall 40,0x27 ;маска ожидаемых событий + inc byte[prop_wnd_run] + + stdcall [tl_node_get_data],tree1 + pop ebx + xor edx,edx + cmp ebx,0 + je @f + mov ebx,dword[ebx] ;получаем значение сдвига выбранного блока + add ebx,dword[open_file_lif] + mov dx,word[ebx+6] ;колличество точек + @@: + + ;настройка списка объектов + mov dword[tree3.info_max_count],2 + add dword[tree3.info_max_count],edx ;ставим число узлов, равное колличеству точек (+2 на начало и конец списка) + stdcall dword[tl_data_init], tree3 + mov eax,dword[icon_tl_sys] + mov dword[tree3.data_img_sys],eax + mov eax,dword[icon_toolbar] + mov dword[tree3.data_img],eax + + cmp ebx,0 + je .no_object + cmp word[ebx],CHUNK_VERTLIST + jne .no_object ;если не тот объект + add ebx,8 + finit + .new_point: + mov dword[obj_point],ebx + mov dword[obj_point.text],0 + cld + mov ecx,3 + @@: + fld dword[ebx] + fstp qword[Data_Double] + call DoubleFloat_to_String + add ebx,4 + stdcall str_len, Data_String + mov esi,txt_space + add esi,eax + cmp esi,txt_space.end + jl .normal_size + mov esi,txt_space.end-1 ;минимум 1 пробел нужно добавить, что-бы цифры не слипались + .normal_size: + stdcall str_cat, obj_point.text,esi + stdcall str_cat, obj_point.text,Data_String + loop @b + stdcall dword[tl_node_add], obj_point, (ID_ICON_DATA shl 16), tree3 + stdcall dword[tl_cur_next], tree3 + dec edx + cmp edx,0 + jg .new_point + stdcall dword[tl_cur_beg], tree3 + .no_object: +popad + +align 4 +prop_red_win: +pushad + mcall 12,1 + + xor eax,eax + mov edi,txt_4110 ;caption + mov bx,word[procinfo.box.left] + add bx,word[buf_0.l] + shl ebx,16 + mov bx,prop_wnd_width + mov cx,word[procinfo.box.top] + shl ecx,16 + mov cx,250 + mov edx,0xffffd0 + or edx,0x33000000 + int 0x40 + + mov dword[w_scr_t3.all_redraw],1 + stdcall [scrollbar_ver_draw],dword w_scr_t3 + stdcall [tl_draw], tree3 + mcall 12,2 +popad + +;не отрывать эту функцию от предыдущей +align 4 +prop_still: + pushad + mcall 10 + + cmp al,1 ;изм. положение окна + jz prop_red_win + cmp al,2 + jne @f + call prop_key + @@: + cmp al,3 + jz prop_button + cmp al,6 + jne @f + call prop_mouse + @@: + popad + jmp prop_still + +align 4 +prop_key: +push eax + mcall 2 + stdcall [tl_key], tree3 +pop eax + ret + +align 4 +prop_mouse: + ;push ecx edi + stdcall [tl_mouse], tree3 + ;pop edi ecx + ret + +align 4 +prop_button: + mcall 17 ;получить код нажатой кнопки + + cmp ah,10 + jne @f + ;;;call but_element_change + mov ah,1 ;для закрытия окна + @@: + + cmp ah,1 + jne prop_still +.exit: + mov dword[tree3.data_img],0 ;чистим указатели на иконки что-бы их не удалил деструктор + mov dword[tree3.data_img_sys],0 ;т. к. они еще используються в других элементах + stdcall dword[tl_data_clear], tree3 + mov byte[prop_wnd_run],0 ;обнуляем счетчик окон + mcall -1 ;выход из программы + +;дерево с объектами в пользовательском файле +tree3 tree_list MAX_OBJECT_SIZE,3,\ + tl_key_no_edit+tl_list_box_mode,\ + 16,16, 0xffffff,0xb0d0ff,0xd000ff, 5,30,300,150, 16, 4,0, el_focus,\ + w_scr_t3,0 + +align 4 +w_scr_t3: +.size_x dw 16 ;+0 +rb 2+2+2 +.btn_high dd 15 ;+8 +.type dd 1 ;+12 +.max_area dd 100 ;+16 +rb 4+4 +.bckg_col dd 0xeeeeee ;+28 +.frnt_col dd 0xbbddff ;+32 +.line_col dd 0 ;+36 +rb 4+2+2 +.run_x: +rb 2+2+2+2+4+4+4+4+4+4 +.all_redraw dd 0 ;+80 +.ar_offset dd 1 ;+84 +