From e34d1445df3aa0d2a518262d1a5d863baa7dbe8c Mon Sep 17 00:00:00 2001 From: IgorA Date: Tue, 1 Dec 2020 09:58:10 +0000 Subject: [PATCH] update ColorDialog git-svn-id: svn://kolibrios.org@8288 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/info3ds/info_wnd_coords.inc | 6 +- .../crypt_des/example/crypt_files.asm | 143 +++----- .../libraries/fontslib/trunk/font_ex.asm | 17 +- programs/games/nu_pogodi/trunk/build.bat | 2 - programs/games/nu_pogodi/trunk/nu_pogod.asm | 305 +++++++++--------- programs/system/colrdial/color_dialog.asm | 276 +++++++++++----- programs/system/colrdial/i_data.inc | 26 +- programs/system/colrdial/u_data.inc | 19 +- 8 files changed, 412 insertions(+), 382 deletions(-) diff --git a/programs/develop/info3ds/info_wnd_coords.inc b/programs/develop/info3ds/info_wnd_coords.inc index 80c913eda6..f3d4fe71e3 100644 --- a/programs/develop/info3ds/info_wnd_coords.inc +++ b/programs/develop/info3ds/info_wnd_coords.inc @@ -814,9 +814,9 @@ tree3 tree_list MAX_OBJECT_SIZE,3, tl_key_no_edit+tl_list_box_mode,\ 16,16, 0xffffff,0xb0d0ff,0x400040, 5,290,303,140, 16, 4,0, el_focus,\ w_scr_t3,get_point_coords -edit1 edit_box 80, 76, 269, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 34, string1, mouse_dd, 0 -edit2 edit_box 80, 160, 269, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 34, string2, mouse_dd, 0 -edit3 edit_box 80, 244, 269, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 34, string3, mouse_dd, 0 +edit1 edit_box 80, 76, 269, 0xffd0d0, 0xff, 0x80ff, 0, 0x8000, 32, string1, mouse_dd, 0 +edit2 edit_box 80, 160, 269, 0xd0d0ff, 0xff, 0x80ff, 0, 0x8000, 32, string2, mouse_dd, 0 +edit3 edit_box 80, 244, 269, 0xd0ffd0, 0xff, 0x80ff, 0, 0x8000, 32, string3, mouse_dd, 0 editboxes_end: string1 rb 34 diff --git a/programs/develop/libraries/crypt_des/example/crypt_files.asm b/programs/develop/libraries/crypt_des/example/crypt_files.asm index b5c575a3cb..9ebb6cfdc8 100644 --- a/programs/develop/libraries/crypt_des/example/crypt_files.asm +++ b/programs/develop/libraries/crypt_des/example/crypt_files.asm @@ -1,21 +1,16 @@ use32 - org 0x0 + org 0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 0x1 - dd start - dd i_end ;размер приложения - dd mem - dd stacktop - dd 0 - dd sys_path + dd 1, start, i_end, mem, stacktop, 0, sys_path include '../../../../macros.inc' include '../../../../proc32.inc' -include '../../../../develop/libraries/box_lib/load_lib.mac' +include '../../../../KOSfuncs.inc' +include '../../../../load_lib.mac' include '../../../../develop/libraries/box_lib/trunk/box_lib.mac' include '../../../../dll.inc' -@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc,dll.Load +@use_library mem.Alloc,mem.Free,mem.ReAlloc,dll.Load caption db 'Шифрование алгоритмом DES 05.03.13',0 ;подпись окна struct FileInfoBlock @@ -57,8 +52,8 @@ macro load_image_file path,buf,size { ; stdcall mem.Alloc, dword size ;выделяем память для изображения mov [buf],eax - mov eax,70 ;70-я функция работа с файлами - mov [run_file_70.Function], 0 + mov eax,SF_FILE + mov [run_file_70.Function], SSF_READ_FILE mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov [run_file_70.Count], dword size @@ -70,12 +65,12 @@ macro load_image_file path,buf,size { ; cmp ebx,0xffffffff je @f ;определяем вид изображения и переводим его во временный буфер image_data - stdcall dword[img_decode], dword[buf],ebx,0 - mov dword[image_data],eax + stdcall [img_decode], [buf],ebx,0 + mov [image_data],eax ;преобразуем изображение к формату rgb - stdcall dword[img_to_rgb2], dword[image_data],dword[buf] + stdcall [img_to_rgb2], [image_data],[buf] ;удаляем временный буфер image_data - stdcall dword[img_destroy], dword[image_data] + stdcall [img_destroy], [image_data] @@: } @@ -88,10 +83,10 @@ start: mov ebp,lib_0 cmp dword [ebp+ll_struc_size-4],0 jz @f - mcall -1 ;exit not correct + mcall SF_TERMINATE_PROCESS @@: - mcall 48,3,sc,sizeof.system_colors - mcall 40,0xC0000027 + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors + mcall SF_SET_EVENTS_MASK,0xC0000027 stdcall [OpenDialog_Init],OpenDialog_data ;подготовка диалога stdcall [buf2d_create], buf_0 ;создание буфера @@ -115,7 +110,7 @@ red_win: align 4 still: - mcall 10 + mcall SF_WAIT_EVENT cmp al,1 jz red_win @@ -132,47 +127,24 @@ still: align 4 draw_window: pushad - mcall 12,1 + mcall SF_REDRAW,SSF_BEGIN_DRAW ; *** рисование главного окна (выполняется 1 раз при запуске) *** - xor eax,eax - mov ebx,(20 shl 16)+480 - mov ecx,(20 shl 16)+410 mov edx,[sc.work] or edx,(3 shl 24)+0x10000000+0x20000000 mov edi,caption - int 0x40 + mcall SF_CREATE_WINDOW, (20 shl 16)+480, (20 shl 16)+410 ; *** создание кнопок на панель *** - mov eax,8 - mov ebx,(5 shl 16)+20 - mov ecx,(5 shl 16)+20 - mov edx,3 mov esi,[sc.work_button] - int 0x40 - - mov ebx,(30 shl 16)+20 - mov edx,4 - int 0x40 - - mov ebx,(55 shl 16)+20 - mov edx,5 - int 0x40 - - mov ebx,(85 shl 16)+20 - mov edx,6 - int 0x40 - - mov ebx,(110 shl 16)+20 - mov edx,7 - int 0x40 + mcall SF_DEFINE_BUTTON, (5 shl 16)+20, (5 shl 16)+20, 3 + mcall ,(30 shl 16)+20,,4 + mcall ,(55 shl 16)+20,,5 + mcall ,(85 shl 16)+20,,6 + mcall ,(110 shl 16)+20,,7 ; *** рисование иконок на кнопках *** - mov eax,7 - mov ebx,[image_data_toolbar] - mov ecx,(16 shl 16)+16 - mov edx,(7 shl 16)+7 ;icon new - int 0x40 + mcall SF_PUT_IMAGE, [image_data_toolbar], (16 shl 16)+16, (7 shl 16)+7 ;icon new add ebx,IMAGE_TOOLBAR_ICON_SIZE add edx,(25 shl 16) ;icon open @@ -193,13 +165,13 @@ pushad ; *** рисование буфера *** stdcall [buf2d_draw], buf_0 - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW popad ret align 4 key: - mcall 2 + mcall SF_GET_KEY stdcall [edit_box_key], dword edit1 jmp still @@ -210,7 +182,7 @@ mouse: align 4 button: - mcall 17 + mcall SF_GET_BUTTON cmp ah,3 jne @f call but_new_file @@ -238,7 +210,7 @@ button: stdcall [buf2d_delete],buf_1 ;удаляем буфер stdcall mem.Free,[image_data_toolbar] stdcall mem.Free,[open_file] - mcall -1 + mcall SF_TERMINATE_PROCESS align 4 @@ -261,8 +233,8 @@ but_open_file: je .end_open_file ;код при удачном открытии диалога - mov eax,70 ;70-я функция работа с файлами - mov [run_file_70.Function], 0 + mov eax,SF_FILE + mov [run_file_70.Function], SSF_READ_FILE mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov dword[run_file_70.Count], max_open_file_size @@ -275,9 +247,9 @@ but_open_file: je .end_open_file mov [open_file_size],ebx - add ebx,dword[open_file] + add ebx,[open_file] mov byte[ebx],0 ;на случай если ранее был открыт файл большего размера чистим конец буфера с файлом - mcall 71,1,openfile_path + mcall SF_SET_CAPTION,1,openfile_path call draw_file .end_open_file: @@ -292,7 +264,7 @@ pushad je .open_file mov eax,[open_file] mov ebx,3 - mov edx,dword[open_file_size] + mov edx,[open_file_size] .cycle_0: mov edi,txt_buf mov esi,eax @@ -319,7 +291,7 @@ pushad jl @f add eax,56 add ebx,10 - cmp ebx,dword[buf_0.h] + cmp ebx,[buf_0.h] jl .cycle_0 jmp @f .open_file: @@ -339,8 +311,8 @@ but_save_file: je .end_save_file ;код при удачном открытии диалога - mov eax,70 ;70-я функция работа с файлами - mov [run_file_70.Function], 2 + mov eax,SF_FILE + mov [run_file_70.Function], SSF_CREATE_FILE mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov ebx, dword[open_file] @@ -419,46 +391,23 @@ db 'ASM',0 db 0 - -head_f_i: -head_f_l db 'Системная ошибка',0 - system_dir_0 db '/sys/lib/' lib_name_0 db 'proc_lib.obj',0 -err_message_found_lib_0 db 'Не найдена библиотека ',39,'proc_lib.obj',39,0 -err_message_import_0 db 'Ошибка при импорте библиотеки ',39,'proc_lib.obj',39,0 - system_dir_1 db '/sys/lib/' lib_name_1 db 'libimg.obj',0 -err_message_found_lib_1 db 'Не найдена библиотека ',39,'libimg.obj',39,0 -err_message_import_1 db 'Ошибка при импорте библиотеки ',39,'libimg.obj',39,0 - system_dir_2 db '/sys/lib/' lib_name_2 db 'buf2d.obj',0 -err_msg_found_lib_2 db 'Не найдена библиотека ',39,'buf2d.obj',39,0 -err_msg_import_2 db 'Ошибка при импорте библиотеки ',39,'buf2d',39,0 - system_dir_3 db '/sys/lib/' lib_name_3 db 'crypt_des.obj',0 -err_msg_found_lib_3 db 'Не найдена библиотека ',39,'crypt_des.obj',39,0 -err_msg_import_3 db 'Ошибка при импорте библиотеки ',39,'crypt_des',39,0 - system_dir_4 db '/sys/lib/' lib_name_4 db 'box_lib.obj',0 -err_msg_found_lib_4 db 'Не найдена библиотека ',39,'box_lib.obj',39,0 -err_msg_import_4 db 'Ошибка при импорте библиотеки ',39,'box_lib',39,0 l_libs_start: - lib_0 l_libs lib_name_0, sys_path, file_name, system_dir_0,\ - err_message_found_lib_0, head_f_l, proclib_import,err_message_import_0, head_f_i - lib_1 l_libs lib_name_1, sys_path, file_name, system_dir_1,\ - err_message_found_lib_1, head_f_l, import_libimg, err_message_import_1, head_f_i - lib_2 l_libs lib_name_2, sys_path, library_path, system_dir_2,\ - err_msg_found_lib_2,head_f_l,import_buf2d,err_msg_import_2,head_f_i - lib_3 l_libs lib_name_3, sys_path, library_path, system_dir_3,\ - err_msg_found_lib_3,head_f_l,import_des,err_msg_import_3,head_f_i - lib_4 l_libs lib_name_4, sys_path, library_path, system_dir_4,\ - err_msg_found_lib_4,head_f_l,import_box_lib,err_msg_import_4,head_f_i + lib_0 l_libs lib_name_0, file_name, system_dir_0, import_proclib + lib_1 l_libs lib_name_1, file_name, system_dir_1, import_libimg + lib_2 l_libs lib_name_2, library_path, system_dir_2, import_buf2d + lib_3 l_libs lib_name_3, library_path, system_dir_3, import_des + lib_4 l_libs lib_name_4, library_path, system_dir_4, import_box_lib l_libs_end: align 4 @@ -509,7 +458,7 @@ import_libimg: aimg_draw db 'img_draw',0 align 4 -proclib_import: ;описание экспортируемых функций +import_proclib: ;описание экспортируемых функций OpenDialog_Init dd aOpenDialog_Init OpenDialog_Start dd aOpenDialog_Start dd 0,0 @@ -592,10 +541,6 @@ import_box_lib: ;sz_edit_box_set_text db 'edit_box_set_text',0 mouse_dd dd 0x0 -sc system_colors - -align 16 -procinfo process_information align 4 buf_0: dd 0 ;указатель на буфер изображения @@ -623,12 +568,14 @@ txt_buf rb 80 txt_key db 'des_0123',0 mem_key rb 120 +align 16 i_end: + procinfo process_information + sc system_colors rb 2048 stacktop: sys_path rb 1024 - file_name: - rb 1024 ;4096 + file_name rb 1024 ;4096 library_path rb 1024 plugin_path rb 4096 openfile_path rb 4096 diff --git a/programs/develop/libraries/fontslib/trunk/font_ex.asm b/programs/develop/libraries/fontslib/trunk/font_ex.asm index 99ff1183cc..37ffd0afc6 100644 --- a/programs/develop/libraries/fontslib/trunk/font_ex.asm +++ b/programs/develop/libraries/fontslib/trunk/font_ex.asm @@ -37,8 +37,9 @@ use32 ; dd 0x0 ; указатель на строку с параметрами. dd way_of_ini include '../../../../macros.inc' +include '../../../../KOSfuncs.inc' +include '../../../../load_lib.mac' include '../../box_lib/trunk/box_lib.mac' -include '../../box_lib/load_lib.mac' @use_library ;use load lib macros start: ;universal load library/librarys @@ -136,10 +137,8 @@ draw_window: ; ;>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> ;DATA данные l_libs_start: -library01 l_libs library_name, way_of_ini, library_path, system_path, err_message_found_lib, head_f_l, font_import, err_message_import, head_f_i - -library02 l_libs library_name1, way_of_ini, library_path, system_path1, err_message_found_lib1, head_f_l, import_box_lib, err_message_import1, head_f_i - +library01 l_libs library_name, library_path, system_path, font_import +library02 l_libs library_name1, library_path, system_path1, import_box_lib end_l_libs: ; @@ -149,14 +148,6 @@ library_name db 'fonts_lib.obj',0 system_path1 db '/sys/lib/' library_name1 db 'box_lib.obj',0 -err_message_found_lib db 'Sorry I cannot load library fonts_lib.obj',0 -err_message_found_lib1 db 'Sorry I cannot load library box_lib.obj',0 - -head_f_i: -head_f_l db 'System error',0 -err_message_import db 'Error on load import library fonts_lib.obj',0 -err_message_import1 db 'Error on load import library box_lib.obj',0 - align 4 import_box_lib: diff --git a/programs/games/nu_pogodi/trunk/build.bat b/programs/games/nu_pogodi/trunk/build.bat index 816d920d31..61149f642e 100644 --- a/programs/games/nu_pogodi/trunk/build.bat +++ b/programs/games/nu_pogodi/trunk/build.bat @@ -4,6 +4,4 @@ if not exist bin\font8x9.bmp @copy ..\..\..\fs\kfar\trunk\font8x9.bmp bin\font @copy *.ini bin\*.ini @fasm.exe -m 16384 nu_pogod.asm bin\nu_pogod.kex @kpack bin\nu_pogod.kex -if not exist bin\buf2d.obj @fasm.exe -m 16384 ..\..\..\develop\libraries\buf2d\trunk\buf2d.asm bin\buf2d.obj -@kpack bin\buf2d.obj pause \ No newline at end of file diff --git a/programs/games/nu_pogodi/trunk/nu_pogod.asm b/programs/games/nu_pogodi/trunk/nu_pogod.asm index 4b2fdac9e6..bde9bd6063 100644 --- a/programs/games/nu_pogodi/trunk/nu_pogod.asm +++ b/programs/games/nu_pogodi/trunk/nu_pogod.asm @@ -1,21 +1,16 @@ use32 - org 0x0 + org 0 db 'MENUET01' ;идентиф. исполняемого файла всегда 8 байт - dd 0x1 - dd start - dd i_end ;размер приложения - dd mem - dd stacktop - dd 0x0 - dd sys_path + dd 1, start, i_end, mem, stacktop, 0, sys_path include '../../../macros.inc' include '../../../proc32.inc' -include '../../../develop/libraries/box_lib/load_lib.mac' +include '../../../KOSfuncs.inc' +include '../../../load_lib.mac' include '../../../develop/libraries/box_lib/trunk/box_lib.mac' ;макросы для задания элементов box_lib include '../../../dll.inc' -@use_library_mem mem.Alloc,mem.Free,mem.ReAlloc, dll.Load +@use_library mem.Alloc,mem.Free,mem.ReAlloc, dll.Load ;флаги, для функции обрезания буфера BUF2D_OPT_CROP_TOP equ 1 ;обрезка сверху @@ -129,16 +124,16 @@ macro load_image_file path,buf,size { ; db 0 @@: ;32 - стандартный адрес по которому должен быть буфер с системным путем - copy_path .path_str,[32],file_name,0x0 + copy_path .path_str,[32],file_name,0 else - copy_path path,[32],file_name,0x0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой + copy_path path,[32],file_name,0 ;формируем полный путь к файлу изображения, подразумеваем что он в одной папке с программой end if stdcall mem.Alloc, dword size ;выделяем память для изображения mov [buf],eax - mov eax,70 ;70-я функция работа с файлами - mov [run_file_70.Function], 0 + mov eax,SF_FILE + mov [run_file_70.Function], SSF_READ_FILE mov [run_file_70.Position], 0 mov [run_file_70.Flags], 0 mov [run_file_70.Count], dword size @@ -150,12 +145,12 @@ macro load_image_file path,buf,size { ; cmp ebx,0xffffffff je @f ;определяем вид изображения и переводим его во временный буфер image_data - stdcall dword[img_decode], dword[buf],ebx,0 - mov dword[image_data],eax + stdcall [img_decode], [buf],ebx,0 + mov [image_data],eax ;преобразуем изображение к формату rgb - stdcall dword[img_to_rgb2], dword[image_data],dword[buf] + stdcall [img_to_rgb2], [image_data],[buf] ;удаляем временный буфер image_data - stdcall dword[img_destroy], dword[image_data] + stdcall [img_destroy], [image_data] @@: } @@ -205,10 +200,10 @@ rand_next: ;x(k+1) = (a*x(k)+c) mod m ; a=22695477, c=1, m=2^32 push eax - mov eax,dword[rand_x] + mov eax,[rand_x] imul eax,22695477 inc eax - mov dword[rand_x],eax + mov [rand_x],eax pop eax ret @@ -218,13 +213,13 @@ pop eax ;по фоновому цвету и трафарет будет занимат ьмного места в памяти align 4 proc CreateTrapharetBuffer uses eax edi, buf:dword, img_data:dword - mov edi,dword[buf] + mov edi,[buf] ;заполнение данных буфера mov buf2d_size_lt,0 - mov eax,dword[displ_w] + mov eax,[displ_w] mov buf2d_w,eax - mov eax,dword[displ_h] + mov eax,[displ_h] mov buf2d_h,eax mov buf2d_color,0xffffff mov buf2d_bits,24 @@ -438,7 +433,7 @@ CountEggsInc: ;уве and ax,0xf ;через каждые 16 яиц уменьшаем время cmp ax,0 jne @f - mov edi,dword[game_delay_min] ;минимальная задержка + mov edi,[game_delay_min] ;минимальная задержка cmp dword[game_spd],edi jle @f dec dword[game_spd] @@ -600,8 +595,8 @@ proc InitGame, b:dword ; mov dword[game_spd],eax ;задержка игры .end_init: - mcall 26,9 - mov dword[rand_x],eax ;заполняем 1-е случайное число + mcall SF_SYSTEM_GET,SSF_TIME_COUNT + mov [rand_x],eax ;заполняем 1-е случайное число pop ebx eax ret @@ -610,15 +605,15 @@ endp align 4 proc LoadArrayBuffer, f_name:dword, buf_start:dword, count:dword pushad - mov edx,dword[displ_bytes] + mov edx,[displ_bytes] mov ecx,edx - imul ecx,dword[count] - mov eax,dword[f_name] + imul ecx,[count] + mov eax,[f_name] load_image_file eax,image_data_gray,ecx - mov edx,dword[displ_bytes] + mov edx,[displ_bytes] mov eax,[image_data_gray] - mov edi,dword[buf_start] - mov ecx,dword[count] + mov edi,[buf_start] + mov ecx,[count] cld @@: ;считываем 3 буфера с декорациями stdcall CreateTrapharetBuffer,edi,eax @@ -636,8 +631,8 @@ align 4 user_is_select: push eax ecx esi edi stdcall [tl_node_get_data], tree1 - cmp eax,0 ;если имя игры пустое - je @f + or eax,eax ;если имя игры пустое + jz @f mov esi,eax mov edi,ini_name mov ecx,FILE_NAME_MAX @@ -659,39 +654,39 @@ align 4 InitAll: pushad ;работа с файлом настроек - copy_path ini_name,sys_path,file_name,0x0 - stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_w,210 - mov dword[displ_w],eax - stdcall dword[ini_get_int],file_name,ini_sec_files,key_displ_h,140 - mov dword[displ_h],eax - stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_decorat,fn_icon0,FILE_NAME_MAX,ini_def_decorat_file - stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_unit,fn_icon1,FILE_NAME_MAX,ini_def_unit_file - stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_objects,fn_icon2,FILE_NAME_MAX,ini_def_objects_file - stdcall dword[ini_get_str],file_name,ini_sec_files,key_file_lost,fn_icon3,FILE_NAME_MAX,ini_def_lost_file + copy_path ini_name,sys_path,file_name,0 + stdcall [ini_get_int],file_name,ini_sec_files,key_displ_w,210 + mov [displ_w],eax + stdcall [ini_get_int],file_name,ini_sec_files,key_displ_h,140 + mov [displ_h],eax + stdcall [ini_get_str],file_name,ini_sec_files,key_file_decorat,fn_icon0,FILE_NAME_MAX,ini_def_decorat_file + stdcall [ini_get_str],file_name,ini_sec_files,key_file_unit,fn_icon1,FILE_NAME_MAX,ini_def_unit_file + stdcall [ini_get_str],file_name,ini_sec_files,key_file_objects,fn_icon2,FILE_NAME_MAX,ini_def_objects_file + stdcall [ini_get_str],file_name,ini_sec_files,key_file_lost,fn_icon3,FILE_NAME_MAX,ini_def_lost_file - stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_x,2 - mov dword[offs_shadow_x],eax - stdcall dword[ini_get_int],file_name,ini_sec_files,key_shadow_y,2 - mov dword[offs_shadow_y],eax + stdcall [ini_get_int],file_name,ini_sec_files,key_shadow_x,2 + mov [offs_shadow_x],eax + stdcall [ini_get_int],file_name,ini_sec_files,key_shadow_y,2 + mov [offs_shadow_y],eax ;считывание настроек влияющих на скорсть игры - stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_a,65 - mov dword[game_delay_a],eax - stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_b,35 - mov dword[game_delay_b],eax - stdcall dword[ini_get_int],file_name,ini_sec_game,key_delay_min,15 - mov dword[game_delay_min],eax + stdcall [ini_get_int],file_name,ini_sec_game,key_delay_a,65 + mov [game_delay_a],eax + stdcall [ini_get_int],file_name,ini_sec_game,key_delay_b,35 + mov [game_delay_b],eax + stdcall [ini_get_int],file_name,ini_sec_game,key_delay_min,15 + mov [game_delay_min],eax - stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_fon,0xffffff - mov dword[color_fon],eax - stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_shadows,0xd0d0d0 - mov dword[color_shadows],eax - stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_unit,0 - mov dword[color_wolf],eax - stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_egg,0x404080 - mov dword[color_egg],eax - stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_chick,0x00d0d0 - mov dword[color_chick],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_fon,0xffffff + mov [color_fon],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_shadows,0xd0d0d0 + mov [color_shadows],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_unit,0 + mov [color_wolf],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_egg,0x404080 + mov [color_egg],eax + stdcall [ini_get_color],file_name,ini_sec_color,key_color_chick,0x00d0d0 + mov [color_chick],eax mov ebx,color_decorat mov byte[key_color_decorat.ind],'0' @@ -699,17 +694,17 @@ InitAll: cld @@: push ecx ;функция ini_get_color имеет право манять регистр ecx - stdcall dword[ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080 + stdcall [ini_get_color],file_name,ini_sec_color,key_color_decorat,0x000080 pop ecx - mov dword[ebx],eax + mov [ebx],eax add ebx,4 inc byte[key_color_decorat.ind] loop @b - mov edx,dword[displ_w] - imul edx,dword[displ_h] + mov edx,[displ_w] + imul edx,[displ_h] lea edx,[edx+edx*2] - mov dword[displ_bytes],edx ;вычисляем размер игрового поля + mov [displ_bytes],edx ;вычисляем размер игрового поля stdcall LoadArrayBuffer, fn_icon0, buf_decor,3 ;считываем 3 буфера с декорациями stdcall LoadArrayBuffer, fn_icon1, buf_wolf,9 ;считываем 9 буферов с волком и зайцем @@ -761,11 +756,11 @@ start: jnz @f jmp .lib @@: - mcall -1 ;exit not correct + mcall SF_TERMINATE_PROCESS .lib: - mcall 40,0x27 - mcall 48,3,sc,sizeof.system_colors ;получаем системные цвета + mcall SF_SET_EVENTS_MASK,0x27 + mcall SF_STYLE_SETTINGS,SSF_GET_COLORS,sc,sizeof.system_colors ;****************************************************************************** ; подготовка списка игр @@ -780,9 +775,9 @@ start: m2m dword[tree1.data_img_sys],buf2d_data ;работа с главным файлом настроек - copy_path ini_m_name,sys_path,file_name,0x0 + copy_path ini_m_name,sys_path,file_name,0 - stdcall dword[ini_get_int],file_name,ini_sec_files,key_count,1 + stdcall [ini_get_int],file_name,ini_sec_files,key_count,1 mov ecx,eax mov dl,'0' cld @@ -790,14 +785,14 @@ start: mov byte[key_game_ind],dl inc dl push ecx edx - stdcall dword[ini_get_str],file_name,ini_sec_files,key_game,txt_tile_type_0,FILE_NAME_MAX,ini_def_decorat_file - stdcall dword[tl_node_add], tree1, 0, txt_tile_type_0 ;добавляем название игры - stdcall dword[tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок игр + stdcall [ini_get_str],file_name,ini_sec_files,key_game,txt_tile_type_0,FILE_NAME_MAX,ini_def_decorat_file + stdcall [tl_node_add], tree1, 0, txt_tile_type_0 ;добавляем название игры + stdcall [tl_cur_next], tree1 ;переносим курсор вниз, что-бы не поменялся порядок игр pop edx ecx loop @b - stdcall dword[tl_cur_beg], tree1 ;переносим курсор вверх + stdcall [tl_cur_beg], tree1 ;переносим курсор вверх - mcall 26,9 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov [last_time],eax @@ -812,21 +807,21 @@ still: ; cmp byte[game_select_mode],0 jne .select_mode - mcall 26,9 ;берем системное время + mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov ebx,[last_time] - add ebx,dword[game_spd] ;delay + add ebx,[game_spd] ;delay sub ebx,eax - cmp ebx,dword[game_spd] ;delay + cmp ebx,[game_spd] ;delay ja it_is_time_now test ebx,ebx jz it_is_time_now - mcall 23 - cmp eax,0 - je it_is_time_now + mcall SF_WAIT_EVENT_TIMEOUT + or eax,eax + jz it_is_time_now jmp @f .select_mode: - mcall 10 + mcall SF_WAIT_EVENT @@: cmp al,1 ;изменилось положение окна @@ -850,7 +845,7 @@ mouse: align 4 it_is_time_now: - mcall 26,9 + mcall SF_SYSTEM_GET,SSF_TIME_COUNT mov [last_time],eax ;cmp byte[game_select_mode],0 @@ -864,7 +859,7 @@ it_is_time_now: align 4 key: push eax ebx - mcall 2 + mcall SF_GET_KEY cmp byte[game_select_mode],0 je @f @@ -914,7 +909,7 @@ key: align 4 draw_window: pushad - mcall 12,1 + mcall SF_REDRAW,SSF_BEGIN_DRAW xor eax,eax mov ebx,20*65536+480 @@ -924,28 +919,28 @@ draw_window: or edx,0x73000000 mov edi,hed mcall ;создание окна - mcall 9,procinfo,-1 + mcall SF_THREAD_INFO,procinfo,-1 cmp byte[game_select_mode],0 jne .select_mode mov edi,buf_displ - mov eax,dword[procinfo.client_box.width] - cmp eax,dword[displ_w] + mov eax,[procinfo.client_box.width] + cmp eax,[displ_w] jle @f - sub eax,dword[displ_w] + sub eax,[displ_w] shr eax,1 mov buf2d_l,ax ;выправниваем буфер по центру окна @@: call draw_display - mov eax,13 ;рисование прямоугольника + mov eax,SF_DRAW_RECT mov edx,[sc.work] xor esi,esi mov si,buf2d_l - add esi,dword[displ_w] - mov ebx,dword[procinfo.client_box.width] + add esi,[displ_w] + mov ebx,[procinfo.client_box.width] inc ebx cmp esi,ebx jge @f @@ -953,41 +948,37 @@ draw_window: rol ebx,16 mov bx,si rol ebx,16 - mov ecx,dword[procinfo.client_box.height] + mov ecx,[procinfo.client_box.height] inc ecx int 0x40 ;рисование правого бокового поля jmp .draw_s @@: - mov esi,dword[procinfo.client_box.width] ;когда по ширине не влазит + mov esi,[procinfo.client_box.width] ;когда по ширине не влазит inc esi .draw_s: ; *** рисование кнопок *** push esi - mov eax,8 - xor ebx,ebx - mov bx,buf2d_l + movzx ebx,buf2d_l add ebx,buf2d_w add ebx,BUT1_L shl ebx,16 mov bx,BUT1_W mov ecx,BUT1_T*65536+BUT1_H - mov edx,5 - ;or edx,0x40000000 - mov esi,dword[color_but_sm] - int 0x40 + mov esi,[color_but_sm] + mcall SF_DEFINE_BUTTON,,,5 inc edx add ecx,BUT1_NEXT_TOP int 0x40 pop esi - mov bx,BUT1_H - add ebx,3*65536;+3 - mov ecx,dword[color_but_te] + mov bx,BUT1_H-4 + add ebx,8 shl 16 + mov ecx,[color_but_te] or ecx,0x80000000 mov edx,txt_game_a - mcall 4 + mcall SF_DRAW_TEXT ror ebx,16 add ebx,BUT1_NEXT_TOP @@ -996,13 +987,13 @@ pop esi int 0x40 ; *** восстановление параметров *** - mov eax,13 ;рисование прямоугольника + mov eax,SF_DRAW_RECT mov edx,[sc.work] mov ebx,esi - mov ecx,dword[procinfo.client_box.height] + mov ecx,[procinfo.client_box.height] inc ecx - mov esi,dword[displ_h] + mov esi,[displ_h] cmp esi,ebx jge @f sub ecx,esi @@ -1014,18 +1005,18 @@ pop esi xor ebx,ebx mov bx,buf2d_l - mov ecx,dword[displ_h] + mov ecx,[displ_h] int 0x40 ;рисование левого бокового поля jmp @f .select_mode: - stdcall dword[tl_draw],dword tree1 + stdcall [tl_draw], tree1 mov edi,tree1 add edi,tl_offs_box stdcall draw_rect_border, procinfo.client_box, edi @@: - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW popad ret @@ -1035,15 +1026,15 @@ pop esi align 4 proc draw_rect_border, client_rect:dword, user_box:dword pushad - mov esi,dword[user_box] + mov esi,[user_box] cmp esi,0 je @f - mov edi,dword[client_rect] + mov edi,[client_rect] mov ebx,dword[edi+8] ;+8 = width inc bx mov ecx,dword[esi+4] ;+4 = top mov edx,[sc.work] - mcall 13 ;top + mcall SF_DRAW_RECT ;top mov eax,dword[esi+4] ;+4 = top add eax,dword[esi+12] ;+12 = height @@ -1054,7 +1045,7 @@ proc draw_rect_border, client_rect:dword, user_box:dword mov cx,word[edi+12] ;+12 = bottom inc cx sub cx,ax - mcall 13 ;bottom + mcall SF_DRAW_RECT ;bottom .no_bottom: mov ebx,dword[esi] ;+0 left @@ -1062,7 +1053,7 @@ proc draw_rect_border, client_rect:dword, user_box:dword shl ecx,16 mov cx,word[esi+12] ;+12 = height inc cx - mcall 13 ;left + mcall SF_DRAW_RECT ;left mov eax,dword[esi] ;+0 left add eax,dword[esi+8] ;+8 = width @@ -1071,7 +1062,7 @@ proc draw_rect_border, client_rect:dword, user_box:dword mov bx,word[edi+8] ;+8 = right sub bx,ax inc bx - mcall 13 ;right + mcall SF_DRAW_RECT ;right @@: popad ret @@ -1080,13 +1071,13 @@ endp align 4 draw_display: - stdcall mem_copy, dword[buf_fon],dword[buf_displ],dword[displ_bytes] ;копирование изображения из фонового буфера + stdcall mem_copy, [buf_fon],[buf_displ],[displ_bytes] ;копирование изображения из фонового буфера call DrawZaac ;рисуем зайца call DrawWolf ;рисуем волка call DrawEggs ;рисуем яйца push eax - mov eax,dword[displ_w] + mov eax,[displ_w] shr eax,1 stdcall [buf2d_draw_text], buf_displ, buf_font,game_text,eax,[offs_shadow_x],[color_wolf] ;рисуем строку с текстом pop eax @@ -1095,7 +1086,7 @@ pop eax align 4 button: - mcall 17 ;получить код нажатой кнопки + mcall SF_GET_BUTTON cmp ah,5 jne @f @@ -1142,73 +1133,65 @@ button: mov dword[tree1.data_img_sys],0 ;чистим указатель на изображение stdcall dword[tl_data_clear], tree1 - mcall -1 ;выход из программы - -head_f_i: -head_f_l db 'Системная ошибка',0 + mcall SF_TERMINATE_PROCESS system_dir0 db '/sys/lib/' lib0_name db 'buf2d.obj',0 -err_message_found_lib0 db 'Не удалось найти библиотеку buf2d.obj',0 -err_message_import0 db 'Ошибка при импорте библиотеки buf2d.obj',0 - system_dir1 db '/sys/lib/' lib1_name db 'libimg.obj',0 -err_message_found_lib1 db 'Не удалось найти библиотеку libimg.obj',0 -err_message_import1 db 'Ошибка при импорте библиотеки libimg.obj',0 - system_dir2 db '/sys/lib/' lib2_name db 'libini.obj',0 -err_message_found_lib2 db 'Не удалось найти библиотеку libini.obj',0 -err_message_import2 db 'Ошибка при импорте библиотеки libini.obj',0 - system_dir3 db '/sys/lib/' lib3_name db 'box_lib.obj',0 -err_message_found_lib3 db 'Не удалось найти библиотеку box_lib.obj',0 -err_message_import3 db 'Ошибка при импорте библиотеки box_lib.obj',0 ;library structures l_libs_start: - lib0 l_libs lib0_name, sys_path, file_name, system_dir0, err_message_found_lib0, head_f_l, import_buf2d_lib, err_message_import0, head_f_i - lib1 l_libs lib1_name, sys_path, file_name, system_dir1, err_message_found_lib1, head_f_l, import_libimg, err_message_import1, head_f_i - lib2 l_libs lib2_name, sys_path, file_name, system_dir2, err_message_found_lib2, head_f_l, import_libini, err_message_import2, head_f_i - lib3 l_libs lib3_name, sys_path, file_name, system_dir3, err_message_found_lib3, head_f_l, import_box_lib, err_message_import3, head_f_i + lib0 l_libs lib0_name, file_name, system_dir0, import_buf2d_lib + lib1 l_libs lib1_name, file_name, system_dir1, import_libimg + lib2 l_libs lib2_name, file_name, system_dir2, import_libini + lib3 l_libs lib3_name, file_name, system_dir3, import_box_lib load_lib_end: align 4 proc mem_copy uses ecx esi edi, source:dword, destination:dword, len:dword cld - mov esi, dword[source] - mov edi, dword[destination] - mov ecx, dword[len] + mov esi, [source] + mov edi, [destination] + mov ecx, [len] rep movsb ret endp +;input: +; eax - число +; edi - буфер для строки align 4 convert_to_str: pushad - mov dword[edi+1],0 - cld + lea esi,[edi+8] ;8 - длинна буфера -1 call .str popad ret align 4 .str: - mov ecx,0x0a ;задается система счисления изменяются регистры ebx,eax,ecx,edx входные параметры eax - число - ;преревод числа в ASCII строку взодные данные ecx=система счисленя edi адрес куда записывать, будем строку, причем конец переменной - cmp eax,ecx ;сравнить если в eax меньше чем в ecx то перейти на @@-1 т.е. на pop eax - jb @f - xor edx,edx ;очистить edx - div ecx ;разделить - остаток в edx - push edx ;положить в стек - call .str;перейти на саму себя т.е. вызвать саму себя и так до того момента пока в eax не станет меньше чем в ecx - pop eax - @@: ;cmp al,10 ;проверить не меньше ли значение в al чем 10 (для системы счисленя 10 данная команда - лишная)) - or al,0x30 ;данная команда короче чем две выше - stosb ;записать элемент из регистра al в ячеку памяти es:edi - ret ;вернуться очень интересный ход т.к. пока в стеке храниться кол-во вызовов то столько раз мы и будем вызываться + mov ecx,10 + cmp eax,ecx + jb @f + xor edx,edx + div ecx + push edx + ;dec edi ;смещение необходимое для записи с конца строки + call .str + pop eax + @@: + cmp edi,esi + jge @f + or al,0x30 + stosb + mov byte[edi],0 ;в конец строки ставим 0, что-бы не вылазил мусор + @@: + ret last_time dd 0 @@ -1216,7 +1199,7 @@ image_data dd 0 ; image_data_gray dd 0 ;память с временными серыми изображениями в формате 24-bit, из которых будут создаваться трафареты run_file_70 FileInfoBlock -hed db 'Nu pogodi 10.11.15',0 ;подпись окна +hed db 'Nu pogodi 10.12.20',0 ;подпись окна sc system_colors ;системные цвета count_of_dir_list_files equ 10 diff --git a/programs/system/colrdial/color_dialog.asm b/programs/system/colrdial/color_dialog.asm index e92624c779..ee314453a4 100644 --- a/programs/system/colrdial/color_dialog.asm +++ b/programs/system/colrdial/color_dialog.asm @@ -68,18 +68,12 @@ ; Free area ; +68 ;--------------------------------------------------------------------- use32 - org 0x0 - + org 0 db 'MENUET01' - dd 0x01 - dd START - dd IM_END - dd I_END - dd stacktop - dd param - dd path + dd 1, START, IM_END, I_END, stacktop, param, path ;--------------------------------------------------------------------- include '../../macros.inc' +include '../../proc32.inc' include '../../KOSfuncs.inc' include '../../load_lib.mac' include '../../develop/libraries/box_lib/trunk/box_lib.mac' @@ -105,25 +99,25 @@ w_size_y = 350 c_start_x = t_start_x + p_size_y + 10 c_start_y = 10 -c_size_x = 40 +c_size_x = 27 c_size_y = 20 +ed_size_x = 53 ;--------------------------------------------------------------------- x_minimal_size equ 350 y_minimal_size equ 250 ;--------------------------------------------------------------------- START: - mcall 68,11 - mcall 66,1,1 - mcall 40,0x27 -; mcall 40,0x7 - call get_communication_area - call get_active_pocess - call clear_colors_history + mcall SF_SYS_MISC,SSF_HEAP_INIT + ;mcall SF_KEYBOARD,SSF_SET_INPUT_MODE,1 + mcall SF_SET_EVENTS_MASK,0x27 ;-------------------------------------- load_libraries l_libs_start,end_l_libs test eax,eax jnz button.exit_2 ;-------------------------------------- + call get_communication_area + call get_active_pocess + call clear_colors_history xor eax,eax mov al,p_size_x mov [palette_SIZE_X],eax @@ -140,7 +134,7 @@ load_libraries l_libs_start,end_l_libs imul ecx,[palette_SIZE_X] lea ecx,[ecx*3] inc ecx ;reserve for stosd - mcall 68,12 + mcall SF_SYS_MISC,SSF_MEM_ALLOC mov [palette_area],eax ;-------------------------------------- call create_palette @@ -149,7 +143,7 @@ load_libraries l_libs_start,end_l_libs imul ecx,[tone_SIZE_X] lea ecx,[ecx*3] inc ecx ;reserve for stosd - mcall 68,12 + mcall SF_SYS_MISC,SSF_MEM_ALLOC mov [tone_area],eax ;-------------------------------------- call create_tone @@ -160,7 +154,7 @@ red: ;--------------------------------------------------------------------- align 4 still: - mcall 10 + mcall SF_WAIT_EVENT cmp eax,1 je red @@ -178,7 +172,7 @@ still: ;--------------------------------------------------------------------- align 4 button: - mcall 17 + mcall SF_GET_BUTTON cmp ah, 2 je palette_button @@ -236,40 +230,39 @@ align 4 mov ebx,[communication_area] mov ecx,procinfo ; mov eax,[window_x] - mov eax,[ecx+34] + mov eax,[ecx+process_information.box.left] shl eax,16 - add eax,[ecx+42] + add eax,[ecx+process_information.box.width] mov [ebx+4],eax ; mov eax,[window_y] - mov eax,[ecx+38] + mov eax,[ecx+process_information.box.top] shl eax,16 - add eax,[ecx+46] + add eax,[ecx+process_information.box.height] mov [ebx+8],eax ;-------------------------------------- align 4 .exit_2: - mcall -1 + mcall SF_TERMINATE_PROCESS ;--------------------------------------------------------------------- align 4 get_window_param: - mcall 9,procinfo,-1 - mov eax,[ebx+66] + mcall SF_THREAD_INFO,procinfo,-1 + mov eax,[ebx+process_information.client_box.height] inc eax ; mov [window_high],eax - mov eax,[ebx+62] + mov eax,[ebx+process_information.client_box.width] inc eax ; mov [window_width],eax - mov eax,[ebx+70] + mov eax,dword[ebx+process_information.wnd_state] ; mov [window_status],eax ret ;--------------------------------------------------------------------- align 4 get_communication_area: - xor eax,eax - mov al,[param] + movzx eax,byte[param] test eax,eax jz @f - mcall 68,22,param,,0x01 + mcall SF_SYS_MISC,SSF_MEM_OPEN,param,,0x01 mov [communication_area],eax ; movzx ebx,word [eax+2] ; mov [color_dialog_type],ebx @@ -289,9 +282,9 @@ get_communication_area: ;--------------------------------------------------------------------- align 4 get_active_pocess: - mcall 9,procinfo,-1 - mov ecx,[ebx+30] ; PID - mcall 18,21 + mcall SF_THREAD_INFO,procinfo,-1 + mov ecx,[ebx+process_information.PID] + mcall SF_SYSTEM,SSF_GET_THREAD_SLOT mov [active_process],eax ; WINDOW SLOT mov ebx,[communication_area] test ebx,ebx @@ -334,7 +327,7 @@ scroll_colors_history: ;--------------------------------------------------------------------- align 4 palette_button: - mcall 37,1 + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION and eax,0xffff sub eax,p_start_y imul eax,p_size_x @@ -351,7 +344,7 @@ palette_button: ;--------------------------------------------------------------------- align 4 tone_button: - mcall 37,1 + mcall SF_MOUSE_GET,SSF_WINDOW_POSITION mov ebx,eax and eax,0xffff shr ebx,16 @@ -382,12 +375,18 @@ align 4 prepare_scrollbars_position_from_color: ; in: eax = selected color movzx ebx,al + inc bl + neg bl mov [scroll_bar_data_blue.position],ebx shr eax,8 mov bl,al + inc bl + neg bl mov [scroll_bar_data_green.position],ebx shr eax,8 mov bl,al + inc bl + neg bl mov [scroll_bar_data_red.position],ebx ret ;--------------------------------------------------------------------- @@ -395,18 +394,35 @@ align 4 prepare_color_from_scrollbars_position: ; out: ebx = selected color mov eax,[scroll_bar_data_red.position] + inc al + neg al movzx ebx,al shl ebx,8 mov eax,[scroll_bar_data_green.position] + inc al + neg al mov bl,al shl ebx,8 mov eax,[scroll_bar_data_blue.position] + inc al + neg al mov bl,al ret ;--------------------------------------------------------------------- align 4 key: - mcall 2 + mcall SF_GET_KEY + test word[edit1.flags],10b ;ed_focus + je still + stdcall [edit_box_key], edit1 + stdcall conv_str_to_int, [edit1.text] + cmp [selected_color],eax + je still + mov [selected_color],eax + call prepare_scrollbars_position_from_color + ;call draw_selected_color + mcall SF_DRAW_RECT,,,[selected_color] + call draw_scrollbars jmp still ;--------------------------------------------------------------------- align 4 @@ -420,27 +436,25 @@ mouse: ;-------------------------------------- align 4 .red: - push dword scroll_bar_data_red - call [scrollbar_ver_mouse] + stdcall [scrollbar_ver_mouse], scroll_bar_data_red cmp [scroll_bar_data_red.delta2],0 jne @f ;-------------------------------------- align 4 .green: - push dword scroll_bar_data_green - call [scrollbar_ver_mouse] + stdcall [scrollbar_ver_mouse], scroll_bar_data_green cmp [scroll_bar_data_green.delta2],0 jne @f ;-------------------------------------- align 4 .blue: - push dword scroll_bar_data_blue - call [scrollbar_ver_mouse] -; cmp [scroll_bar_data_blue.delta2],0 -; jne @f + stdcall [scrollbar_ver_mouse], scroll_bar_data_blue + cmp [scroll_bar_data_blue.delta2],0 + jne @f ;-------------------------------------- align 4 @@: + stdcall [edit_box_mouse], edit1 call prepare_color_from_scrollbars_position cmp [selected_color],ebx je still @@ -450,11 +464,11 @@ align 4 ;--------------------------------------------------------------------- align 4 draw_selected_color: - mcall 13,,,[selected_color] - mcall 13,,,0xffffff - mov ecx,[selected_color] - and ecx,0xffffff - mcall 47,0x00060100,,,0 + mcall SF_DRAW_RECT,,,[selected_color] + stdcall hex_in_str, sz_0x+2,[selected_color],6 + mov byte[sz_0x+8],0 + stdcall [edit_box_set_text],edit1,sz_0x + stdcall [edit_box_draw],edit1 ret ;--------------------------------------------------------------------- align 4 @@ -465,37 +479,34 @@ create_and_draw_tone: ;--------------------------------------------------------------------- align 4 draw_tone: - mcall 65,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,,24 + mcall SF_PUT_IMAGE_EXT,[tone_area],<[tone_SIZE_X],[tone_SIZE_Y]>,,24 ret ;--------------------------------------------------------------------- +align 4 draw_scrollbars: - push dword scroll_bar_data_red - call [scrollbar_ver_draw] - push dword scroll_bar_data_green - call [scrollbar_ver_draw] - push dword scroll_bar_data_blue - call [scrollbar_ver_draw] + stdcall [scrollbar_ver_draw], scroll_bar_data_red + stdcall [scrollbar_ver_draw], scroll_bar_data_green + stdcall [scrollbar_ver_draw], scroll_bar_data_blue ret ;--------------------------------------------------------------------- align 4 draw_history_frame: - mov [frame_data.x],dword (c_start_x+c_size_x*2+10*2)*65536+80 + mov [frame_data.x],dword (c_start_x+c_size_x+ed_size_x+10*2)*65536+80 mov [frame_data.y],dword (p_start_y+5)*65536+(p_size_y-5) mov [frame_data.draw_text_flag],dword 1 mov [frame_data.text_pointer],dword history_text - push dword frame_data - call [Frame_draw] + stdcall [Frame_draw], frame_data ret ;--------------------------------------------------------------------- align 4 draw_button_row: mov edx,0x60000000 + 30 ; BUTTON ROW ; mov ebx,220*65536+14 - mov ebx,(c_start_x+c_size_x*2+10*3)*65536+14 + mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 mov ecx,25*65536+14 - mov eax,8 + mov eax,SF_DEFINE_BUTTON ;----------------------------------- align 4 .newb: @@ -508,10 +519,12 @@ align 4 ;--------------------------------------------------------------------- align 4 draw_color_value: - mov ebx,(c_start_x+c_size_x*3+10)*65536+(c_size_x-1) + movzx ebx,word[frame_data.x_start] + shl ebx,16 + add ebx,(22 shl 16)+39 mov ecx,28*65536+11 mov edx,0xffffff - mov eax,13 + mov eax,SF_DRAW_RECT mov edi,10 mov esi,[communication_area] add esi,28 @@ -520,14 +533,13 @@ align 4 @@: mcall pusha - mov edx,ebx - add edx,2 shl 16 + lea edx,[ebx+(2 shl 16)] shr ecx,16 mov dx,cx add dx,2 mov ecx,[esi] and ecx,0xffffff - mcall 47,0x00060100,,,0 + mcall SF_DRAW_NUMBER,0x00060100,,,0 popa add ecx,24*65536 @@ -543,9 +555,9 @@ draw_colours: mov esi,[communication_area] add esi,28 ; mov ebx,220*65536+14 - mov ebx,(c_start_x+c_size_x*2+10*3)*65536+14 + mov ebx,(c_start_x+c_size_x+ed_size_x+10*3)*65536+14 mov ecx,27*65536+14 - mov eax,13 + mov eax,SF_DRAW_RECT mov [frame_data.draw_text_flag],dword 0 ;-------------------------------------- align 4 @@ -563,8 +575,7 @@ newcol: mov [frame_data.x],ebx mov [frame_data.y],ecx - push dword frame_data - call [Frame_draw] + stdcall [Frame_draw], frame_data pop ecx ebx @@ -578,18 +589,18 @@ newcol: ;---------------------------------------------------------------------- align 4 draw_window: - mcall 12,1 -; mcall 0, , , 0x33AABBCC,,title + mcall SF_REDRAW,SSF_BEGIN_DRAW +; mcall SF_CREATE_WINDOW, , , 0x33AABBCC,,title xor esi,esi - mcall 0,[window_x],[window_y], 0x34EEEeee,,title - mcall 8,,,0x60000002 + mcall SF_CREATE_WINDOW,[window_x],[window_y], 0x34EEEeee,,title + mcall SF_DEFINE_BUTTON,,,0x60000002 mcall ,,,0x60000003 mcall ,<296,80>,<280,22>,4,0x37A4D4 mcall ,<402,80>, ,1 - mcall 4,<332,289>,0x802C7B9E,OK_Cancel + mcall SF_DRAW_TEXT,<332,289>,0x802C7B9E,OK_Cancel mcall ,<331,288>,0x80FFFfff xor ebp,ebp - mcall 65,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,,24 + mcall SF_PUT_IMAGE_EXT,[palette_area],<[palette_SIZE_X],[palette_SIZE_Y]>,,24 call draw_tone call draw_selected_color xor eax,eax @@ -602,9 +613,114 @@ draw_window: call draw_button_row call draw_colours call draw_color_value - mcall 12,2 + mcall SF_REDRAW,SSF_END_DRAW ret ;--------------------------------------------------------------------- +align 4 +proc hex_in_str, buf:dword,val:dword,zif:dword +pushad + mov edi,[buf] + mov ecx,[zif] + add edi,ecx + dec edi + mov ebx,[val] + + .cycle: + mov al,bl + and al,0xf + cmp al,10 + jl @f + add al,'A'-'0'-10 + @@: + add al,'0' + mov byte[edi],al + dec edi + shr ebx,4 + loop .cycle +popad + ret +endp +;--------------------------------------------------------------------- +;input: +; buf - ╤Г╨║╨░╨╖╨░╤В╨╡╨╗╤М ╨╜╨░ ╤Б╤В╤А╨╛╨║╤Г, ╤З╨╕╤Б╨╗╨╛ ╨┤╨╛╨╗╨╢╨╜╨╛ ╨▒╤Л╤В╤М ╨▓ 10 ╨╕╨╗╨╕ 16 ╤А╨╕╤З╨╜╨╛╨╝ ╨▓╨╕╨┤╨╡ +;output: +; eax - ╤З╨╕╤Б╨╗╨╛ +align 4 +proc conv_str_to_int uses ebx ecx esi, buf:dword + xor eax,eax + xor ebx,ebx + mov esi,[buf] + + ;╨╜╨░ ╤Б╨╗╤Г╤З╨░╨╣ ╨╡╤Б╨╗╨╕ ╨┐╨╡╤А╨╡╨┤ ╤З╨╕╤Б╨╗╨╛╨╝ ╨╜╨░╤Е╨╛╨┤╤П╤В╤Б╤П ╨┐╤А╨╛╨▒╨╡╨╗╤Л + @@: + cmp byte[esi],' ' + jne @f + inc esi + jmp @b + @@: + + ;╨╛╨┐╤А╨╡╨┤╨╡╨╗╨╡╨╜╨╕╨╡ ╨╛╤В╤А╨╕╤Ж╨░╤В╨╡╨╗╤М╨╜╤Л╤Е ╤З╨╕╤Б╨╡╨╗ + xor ecx,ecx + inc ecx + cmp byte[esi],'-' + jne @f + dec ecx + inc esi + @@: + + cmp word[esi],'0x' + je .load_digit_16 + + .load_digit_10: ;╤Б╤З╨╕╤В╤Л╨▓╨░╨╜╨╕╨╡ 10-╤В╨╕╤З╨╜╤Л╤Е ╤Ж╨╕╤Д╤А + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'9' + jg @f + sub bl,'0' + imul eax,10 + add eax,ebx + inc esi + jmp .load_digit_10 + jmp @f + + .load_digit_16: ;╤Б╤З╨╕╤В╤Л╨▓╨░╨╜╨╕╨╡ 16-╤А╨╕╤З╨╜╤Л╤Е ╤Ж╨╕╤Д╤А + add esi,2 + .cycle_16: + mov bl,byte[esi] + cmp bl,'0' + jl @f + cmp bl,'f' + jg @f + cmp bl,'9' + jle .us1 + cmp bl,'A' + jl @f ;╨╛╤В╤Б╨╡╨╕╨▓╨░╨╡╨╝ ╤Б╨╕╨╝╨▓╨╛╨╗╤Л >'9' ╨╕ <'A' + .us1: ;╤Б╨╛╤Б╤В╨░╨▓╨╜╨╛╨╡ ╤Г╤Б╨╗╨╛╨▓╨╕╨╡ + cmp bl,'F' + jle .us2 + cmp bl,'a' + jl @f ;╨╛╤В╤Б╨╡╨╕╨▓╨░╨╡╨╝ ╤Б╨╕╨╝╨▓╨╛╨╗╤Л >'F' ╨╕ <'a' + sub bl,32 ;╨┐╨╡╤А╨╡╨▓╨╛╨┤╨╕╨╝ ╤Б╨╕╨╝╨▓╨╛╨╗╤Л ╨▓ ╨▓╨╡╤А╤Е╨╜╨╕╨╣ ╤А╨╡╨│╨╕╤Б╤В╤А, ╨┤╨╗╤П ╤Г╨┐╤А╨╛╤Й╨╡╨╜╨╕╤П ╨╕╤Е ╨┐╨╛╤Б╨╗╨╡╨┤╤Г╤Й╨╡╨╣ ╨╛╨▒╤А╨░╨▒╨╛╤В╨║╨╕ + .us2: ;╤Б╨╛╤Б╤В╨░╨▓╨╜╨╛╨╡ ╤Г╤Б╨╗╨╛╨▓╨╕╨╡ + sub bl,'0' + cmp bl,9 + jle .cor1 + sub bl,7 ;convert 'A' to '10' + .cor1: + shl eax,4 + add eax,ebx + inc esi + jmp .cycle_16 + @@: + cmp ecx,0 ;╨╡╤Б╨╗╨╕ ╤З╨╕╤Б╨╗╨╛ ╨╛╤В╤А╨╕╤Ж╨░╤В╨╡╨╗╤М╨╜╨╛╨╡ + jne @f + sub ecx,eax + mov eax,ecx + @@: + ret +endp +;--------------------------------------------------------------------- include 'palette.inc' ;--------------------------------------------------------------------- include 'tone.inc' diff --git a/programs/system/colrdial/i_data.inc b/programs/system/colrdial/i_data.inc index 9d1447842b..6f9e7a48cc 100644 --- a/programs/system/colrdial/i_data.inc +++ b/programs/system/colrdial/i_data.inc @@ -4,7 +4,8 @@ title: history_text: db ' History: ',0 - + +communication_area dd param ;--------------------------------------------------------------------- align 4 window_x: @@ -32,10 +33,10 @@ Box_lib_import: ;init_lib dd a_init ;version_lib dd a_version - -;edit_box_draw dd aEdit_box_draw -;edit_box_key dd aEdit_box_key -;edit_box_mouse dd aEdit_box_mouse +edit_box_draw dd aEdit_box_draw +edit_box_key dd aEdit_box_key +edit_box_mouse dd aEdit_box_mouse +edit_box_set_text dd aEdit_box_set_text ;version_ed dd aVersion_ed ;check_box_draw dd aCheck_box_draw @@ -73,15 +74,15 @@ scrollbar_ver_mouse dd aScrollbar_ver_mouse Frame_draw dd sz_Frame_draw ;Version_frame dd szVersion_frame - dd 0 - dd 0 + dd 0,0 ;a_init db 'lib_init',0 ;a_version db 'version',0 -;aEdit_box_draw db 'edit_box',0 -;aEdit_box_key db 'edit_box_key',0 -;aEdit_box_mouse db 'edit_box_mouse',0 +aEdit_box_draw db 'edit_box',0 +aEdit_box_key db 'edit_box_key',0 +aEdit_box_mouse db 'edit_box_mouse',0 +aEdit_box_set_text db 'edit_box_set_text',0 ;aVersion_ed db 'version_ed',0 ;aCheck_box_draw db 'check_box_draw',0 @@ -239,4 +240,9 @@ frame_data: .font_color dd 0x0 ;+40 .font_backgr_color dd 0xEEEeee ;+44 ;--------------------------------------------------------------------- +mouse_dd dd edit1 +edit1 edit_box ed_size_x, c_start_x+c_size_x+10, c_start_y, 0xffffff, 0xa0a0a0, 0xff, 0, 0, 8, string1, mouse_dd, 0 +sz_0x db '0x______',0,0 +string1 rb 10 +;--------------------------------------------------------------------- OK_Cancel db 'OK Cancel',0 \ No newline at end of file diff --git a/programs/system/colrdial/u_data.inc b/programs/system/colrdial/u_data.inc index 2bf00ec739..8802178451 100644 --- a/programs/system/colrdial/u_data.inc +++ b/programs/system/colrdial/u_data.inc @@ -5,7 +5,6 @@ tone_area rd 1 part_of_size_y rd 1 active_process rd 1 ;color_dialog_type rd 1 -communication_area rd 1 ;-------------------------------------- offset_y: .red rd 1 @@ -36,20 +35,10 @@ tone_SIZE_Y rd 1 tone_SIZE_X rd 1 ;--------------------------------------------------------------------- align 4 -procinfo: - rb 1024 -;--------------------------------------------------------------------- -align 4 -param: - rb 256 -;--------------------------------------------------------------------- -align 4 -path: - rb 4096 -;--------------------------------------------------------------------- -align 4 -file_name: - rb 4096 +procinfo rb 1024 +param rb 256 +path rb 4096 +file_name rb 4096 ;--------------------------------------------------------------------- align 4 rb 4096