diff --git a/programs/develop/info3ds/info3ds.asm b/programs/develop/info3ds/info3ds.asm index bf516b7c8d..6ace7bd008 100644 --- a/programs/develop/info3ds/info3ds.asm +++ b/programs/develop/info3ds/info3ds.asm @@ -520,10 +520,24 @@ but_open_file: cmp [OpenDialog_data.status],2 je .end_open_file ;код при удачном открытии диалога - jmp @f + jmp .end0 .no_dlg: ;если минуем диалог открытия файла pushad - @@: + mov esi,openfile_path + stdcall str_len,esi + add esi,eax + @@: ;цикл для поиска начала имени файла + dec esi + cmp byte[esi],'/' + je @f + cmp byte[esi],0x5c ;'\' + je @f + cmp esi,openfile_path + jg @b + @@: + inc esi + stdcall [OpenDialog_Set_file_name],OpenDialog_data,esi ;копируем имя файла в диалог сохранения + .end0: mov [run_file_70.Function], SSF_GET_INFO mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 @@ -915,6 +929,7 @@ but_save_file: pushad copy_path open_dialog_name,communication_area_default_path,file_name,0 mov [OpenDialog_data.type],1 + stdcall [OpenDialog_Set_file_ext],OpenDialog_data,Filter.1 ;.3ds stdcall [OpenDialog_Start],OpenDialog_data cmp [OpenDialog_data.status],2 je .end_save_file @@ -1037,6 +1052,7 @@ dd Filter.end - Filter.1 .1: db '3DS',0 db 'STL',0 +.3: db 'PNG',0 .end: db 0 @@ -1160,12 +1176,16 @@ import_libimg: aimg_draw db 'img_draw',0 align 4 -proclib_import: ;описание экспортируемых функций +proclib_import: OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start + OpenDialog_Set_file_name dd aOpenDialog_Set_file_name + OpenDialog_Set_file_ext dd aOpenDialog_Set_file_ext dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 + aOpenDialog_Set_file_name db 'OpenDialog_set_file_name',0 + aOpenDialog_Set_file_ext db 'OpenDialog_set_file_ext',0 align 4 import_buf2d: @@ -1387,9 +1407,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 версия 14.03.19',0 ;подпись окна +capt db 'info 3ds версия 23.03.19',0 ;подпись окна else -capt db 'info 3ds version 14.03.19',0 ;window caption +capt db 'info 3ds version 23.03.19',0 ;window caption end if align 16 diff --git a/programs/develop/info3ds/info3ds_u.asm b/programs/develop/info3ds/info3ds_u.asm index a72ba6f71c..d28911f77e 100644 --- a/programs/develop/info3ds/info3ds_u.asm +++ b/programs/develop/info3ds/info3ds_u.asm @@ -656,10 +656,24 @@ but_open_file: cmp [OpenDialog_data.status],2 je .end_open_file ;код при удачном открытии диалога - jmp @f + jmp .end0 .no_dlg: ;если минуем диалог открытия файла pushad - @@: + mov esi,openfile_path + stdcall str_len,esi + add esi,eax + @@: ;цикл для поиска начала имени файла + dec esi + cmp byte[esi],'/' + je @f + cmp byte[esi],0x5c ;'\' + je @f + cmp esi,openfile_path + jg @b + @@: + inc esi + stdcall [OpenDialog_Set_file_name],OpenDialog_data,esi ;копируем имя файла в диалог сохранения + .end0: mov [run_file_70.Function], SSF_GET_INFO mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 @@ -1110,6 +1124,7 @@ dd Filter.end - Filter.1 .1: db '3DS',0 db 'STL',0 +.3: db 'PNG',0 .end: db 0 @@ -1233,12 +1248,16 @@ import_libimg: aimg_draw db 'img_draw',0 align 4 -proclib_import: ;описание экспортируемых функций +proclib_import: OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start + OpenDialog_Set_file_name dd aOpenDialog_Set_file_name + OpenDialog_Set_file_ext dd aOpenDialog_Set_file_ext dd 0,0 aOpenDialog_Init db 'OpenDialog_init',0 aOpenDialog_Start db 'OpenDialog_start',0 + aOpenDialog_Set_file_name db 'OpenDialog_set_file_name',0 + aOpenDialog_Set_file_ext db 'OpenDialog_set_file_ext',0 align 4 import_buf2d: @@ -1455,9 +1474,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 [user] версия 14.03.19',0 ;подпись окна +capt db 'info 3ds [user] версия 23.03.19',0 ;подпись окна else -capt db 'info 3ds [user] version 14.03.19',0 ;window caption +capt db 'info 3ds [user] version 23.03.19',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 5881749f66..1da1d44100 100644 --- a/programs/develop/info3ds/info_fun_float.inc +++ b/programs/develop/info3ds/info_fun_float.inc @@ -5,7 +5,7 @@ ; Количество знаков числа после запятой (1-17) NumberSymbolsAD DW 5 ; Константы (10 в степени N) -MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5 +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 @@ -31,6 +31,7 @@ MConst DQ 1.0E1,1.0E2,1.0E3,1.0E4,1.0E5 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 +.end: ; Число с плавающей запятой двойной точности Data_Double DQ ? ; Число в BCD-формате @@ -302,11 +303,23 @@ align 4 jz .NoDiv ;если число e+0 dec ebx lea ebx,[MConst+8*ebx] + cmp ebx,MConst.end + jl @f + ffree st0 + fincstp + jmp .Error ;если очень большое число e+** + @@: fmul qword [ebx] ;умножить на константу (для чисел с приставкой e+..) jmp .NoDiv .NoMul: neg ebx lea ebx,[MConst+8*ebx] + cmp ebx,MConst.end + jl @f + ffree st0 + fincstp + jmp .Error ;если очень маленькое число e-** + @@: fdiv qword [ebx] ;разделить на константу .NoDiv: ;Выгрузить число в двоичном формате fstp [Data_Double] @@ -356,6 +369,8 @@ proc string_ExpForm uses ebx jmp .cycle0 .cycle0end: + cmp ebx,328 ;308 - макс. размер степени для double + 20 - число разрядов в BCD + ja .Error cmp [Data_Sign_Exp],0 je @f neg ebx diff --git a/programs/develop/info3ds/info_o3d.inc b/programs/develop/info3ds/info_o3d.inc index 5ef6ef643d..8fcd5414d9 100644 --- a/programs/develop/info3ds/info_o3d.inc +++ b/programs/develop/info3ds/info_o3d.inc @@ -60,9 +60,9 @@ key_select db 'col_select',0 txt_err_save_img_file: if lang eq ru - db 'Не могу сохранить файл.',0 + db '"Не могу сохранить файл." -W',0 else - db 'Can',39,'t save file.',0 + db '"Can',39,'t save file." -W',0 end if align 4 @@ -1090,9 +1090,10 @@ mnu_make_scrshot: pushad copy_path open_dialog_name,communication_area_default_path,file_name,0 mov [OpenDialog_data.type],1 + stdcall [OpenDialog_Set_file_ext],OpenDialog_data,Filter.3 ;.png stdcall [OpenDialog_Start],OpenDialog_data - cmp [OpenDialog_data.status],2 - je .end_save_file + cmp [OpenDialog_data.status],1 + jne .end_save_file ;код при удачном открытии диалога mov dword[png_data],0 diff --git a/programs/develop/libraries/proc_lib/trunk/opendial.mac b/programs/develop/libraries/proc_lib/trunk/opendial.mac index 4d582ac745..67d7a7f78a 100644 --- a/programs/develop/libraries/proc_lib/trunk/opendial.mac +++ b/programs/develop/libraries/proc_lib/trunk/opendial.mac @@ -396,5 +396,56 @@ OpenDialog_exit cld ret ;---------------------------------------------- +align 4 +.set_file_name: + push ebp + mov ebp,esp + push eax ecx edi esi + mov edi,[ebp+8] ;open dlg struct + mov edi,[edi+40] ;+40 - filename_area + mov esi,[ebp+12] ;file name + mov ecx,256 + ;copy file name in dialog + @@: + lodsb + stosb + test eax,eax + loop @b + pop esi edi ecx eax + pop ebp + ret 8 +;---------------------------------------------- +align 4 +.set_file_ext: + push ebp + mov ebp,esp + push eax ecx edi esi + mov esi,[ebp+8] ;open dlg struct + + xor eax,eax + mov ecx,256 + mov edi,[esi+40] ;+40 - filename_area + repne scasb + @@: ;found position of '.' + dec edi + cmp byte[edi],'.' + je @f + cmp edi,[esi+40] + ja @b + jmp .no_dot + @@: + inc edi + mov esi,[ebp+12] ;file ext + ;copy file ext in dialog + @@: + lodsb + stosb + test eax,eax + jnz @b + + .no_dot: + pop esi edi ecx eax + pop ebp + ret 8 } ;***************************************************************************** \ No newline at end of file diff --git a/programs/develop/libraries/proc_lib/trunk/proc_lib.asm b/programs/develop/libraries/proc_lib/trunk/proc_lib.asm index 48d601f037..94f5fb4723 100644 --- a/programs/develop/libraries/proc_lib/trunk/proc_lib.asm +++ b/programs/develop/libraries/proc_lib/trunk/proc_lib.asm @@ -45,6 +45,8 @@ dd sz_version, 0x00000001 dd sz_OpenDialog_init, OpenDialog.init dd sz_OpenDialog_start, OpenDialog.start +dd sz_OpenDialog_set_file_name, OpenDialog.set_file_name +dd sz_OpenDialog_set_file_ext, OpenDialog.set_file_ext dd szVersion_OpenDialog, 0x00010001 dd sz_ColorDialog_init, ColorDialog.init @@ -58,6 +60,8 @@ sz_version db 'version',0 sz_OpenDialog_init db 'OpenDialog_init',0 sz_OpenDialog_start db 'OpenDialog_start',0 +sz_OpenDialog_set_file_name db 'OpenDialog_set_file_name',0 +sz_OpenDialog_set_file_ext db 'OpenDialog_set_file_ext',0 szVersion_OpenDialog db 'Version_OpenDialog',0 sz_ColorDialog_init db 'ColorDialog_init',0