From 64cdacca6e711e3d74f6757d372bf9098662ac47 Mon Sep 17 00:00:00 2001 From: IgorA Date: Sat, 9 Jan 2010 17:39:07 +0000 Subject: [PATCH] Reorganization of the library 'box_lib.obj': 1) new file 'box_lib.mac' to connect all elements 2) Eliminate duplication of code. Minor improvements 'fasm'. git-svn-id: svn://kolibrios.org@1372 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/develop/fasm/trunk/fasm.asm | 20 +- .../box_lib/asm/trunk/editbox_ex.mac | 179 +----------------- .../libraries/box_lib/trunk/box_lib.asm | 10 +- .../libraries/box_lib/trunk/box_lib.mac | 8 + .../libraries/box_lib/trunk/checkbox.mac | 65 +++++-- .../libraries/box_lib/trunk/editbox.mac | 56 +++++- .../libraries/box_lib/trunk/optionbox.mac | 16 ++ 7 files changed, 144 insertions(+), 210 deletions(-) create mode 100644 programs/develop/libraries/box_lib/trunk/box_lib.mac diff --git a/programs/develop/fasm/trunk/fasm.asm b/programs/develop/fasm/trunk/fasm.asm index c97ee8c8a3..8431039a8a 100644 --- a/programs/develop/fasm/trunk/fasm.asm +++ b/programs/develop/fasm/trunk/fasm.asm @@ -56,6 +56,10 @@ sys_load_library library_name, cur_dir_path, library_path, system_path, \ @@: mcall 40,0x27 ;маска системных событий + get_sys_colors 1,0 + edit_boxes_set_sys_color edit1,editboxes_end,sc + check_boxes_set_sys_color ch1_dbg,ch1_dbg+ch_struc_size,sc + mov edi, fileinfos mov ecx, (fileinfos_end-fileinfos)/4 or eax, -1 @@ -188,7 +192,7 @@ draw_window: mcall 12,1 ; Start of draw - get_sys_colors 1,0 + ;get_sys_colors 1,0 xor eax,eax mov ebx,100*65536+280 @@ -392,18 +396,8 @@ myimport: edit1 edit_box 153, 56, 1, 0xffffff, 0xff, 0x80ff, 0, 0x8000, (outfile-infile-1), infile, mouse_dd, 0, 11,11 edit2 edit_box 153, 56, 17, 0xffffff, 0xff, 0x80ff, 0, 0x8000,(path-outfile-1), outfile, mouse_dd, 0, 7,7 edit3 edit_box 153, 56, 33, 0xffffff, 0xff, 0x80ff, 0, 0x8000,(path_end-path-1), path, mouse_dd, 0, 6,6 -;ch1_dbg check_box 5, 49, 6, 12, 0xffffff, 0x80ff, 0, s_dbgdescr,(s_dbgdescr_end-s_dbgdescr) -ch1_dbg: - .left: dw 5 - .top: dw 49 - .ch_text_margin: dd 6 - .ch_size: dd 12 - .color: dd 0xffffff - .border_color: dd 0x80ff - .text_color: dd 0 - .text: dd s_dbgdescr - .ch_text_length: dd (s_dbgdescr_end-s_dbgdescr) - .flags: dd 0 +editboxes_end: +ch1_dbg check_box 5, 49, 6, 12, 0xffffff, 0x80ff, 0, s_dbgdescr,(s_dbgdescr_end-s_dbgdescr) mouse_dd dd 0 ;эєцэю фы  Shift-р т editbox diff --git a/programs/develop/libraries/box_lib/asm/trunk/editbox_ex.mac b/programs/develop/libraries/box_lib/asm/trunk/editbox_ex.mac index 938904c57c..3ba048a562 100644 --- a/programs/develop/libraries/box_lib/asm/trunk/editbox_ex.mac +++ b/programs/develop/libraries/box_lib/asm/trunk/editbox_ex.mac @@ -1,117 +1,7 @@ +include '../../trunk/editbox.mac' +include '../../trunk/checkbox.mac' +include '../../trunk/optionbox.mac' -ch_struc_size=36 -ed_struc_size=76 -ch_flag_en=10b - -ch_left equ [edi] ;координата начала рисования по х -ch_top equ [edi+2] ;координата начала рисования по у -ch_text_margin equ [edi+4] ;=4 расстояние от прямоугольника чек бокса до надписи -ch_size equ [edi+8] ;12 размер квадрата чек бокса -ch_color equ [edi+12] ;цвет внутри checkbox -ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно -ch_text_color equ [edi+20];[edi+4] ;цвет текста -ch_text_ptr equ [edi+24] ;указатель на начало текстовой строки -ch_text_length equ [edi+28] -ch_flags equ [edi+32] ;флаги - -ed_width equ [edi] ;ширина компонента -ed_left equ [edi+4] ;положение по оси х -ed_top equ [edi+8] ;положение по оси у -ed_color equ [edi+12] ;цвет фона компонента -shift_color equ [edi+16] ;=0x6a9480 для примера возьем желеный цвет бокса -ed_focus_border_color equ [edi+20] ;цвет рамки компонента -ed_blur_border_color equ [edi+24] ;цвет не активного компонента -ed_text_color equ [edi+28] ;цвет текста -ed_max equ [edi+32] ;кол-во символов которые можно максимально ввести -ed_text equ [edi+36] ;указатель на буфер -ed_mouse_variable equ [edi+40] ; указатель на переменную для бокса/группы -ed_flags equ [edi+44] ;флаги -bp_flags equ [ebp+44] ;в некоторых процедурах edi используется, взамен указатель храниться в ebp -ed_size equ [edi+48] ;кол-во символов -bp_size equ [ebp+48] ;кол-во симвполов, для адресации испльзуется ebpб edi занят -ed_pos equ [edi+52] ;позиция курсора -ed_offset equ [edi+56] ;смещение -cl_curs_x equ [edi+60] ;предыдущее координата курсора по х -cl_curs_y equ [edi+64] ;предыдущее координата курсора по у -ed_shift_pos equ [edi+68] ;положение курсора -ed_shift_pos_old equ [edi+72] ;старое положение курсора - -ed_struc_size=76 -struc edit_box width,left,top,color,shift_color,focus_border_color,\ - blur_border_color,text_color,max,text,mouse_variable,flags,size,pos -{ -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Bit mask from editbox -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -ed_figure_only= 1000000000000000b ;одни символы -ed_always_focus= 100000000000000b -ed_focus= 10b ;фокус приложения -ed_shift_on= 1000b ;если не установлен -значит впервые нажат shift,если был установлен, значит мы уже что - то делали удерживая shift -ed_shift_on_off=1111111111110111b -ed_shift= 100b ;включается при нажатии на shift т.е. если нажимаю -ed_shift_off= 1111111111111011b -ed_shift_bac= 10000b ;бит для очистки выделеного shift т.е. при установке говорит что есть выделение -ed_shift_bac_cl=1111111111101111b ;очистка при удалении выделения -ed_shift_cl= 1111111111100011b -ed_shift_mcl= 1111111111111011b -ed_left_fl= 100000b -ed_right_fl= 1111111111011111b -ed_offset_fl= 1000000b -ed_offset_cl= 1111111110111111b -ed_insert= 10000000b -ed_insert_cl= 1111111101111111b -ed_mouse_on = 100000000b -ed_mous_adn_b= 100011000b -ed_mouse_on_off=1111111011111111b -ed_height=14 ; высота - -.width dd width -.left dd left -.top dd top -.color dd color -.shift_color dd shift_color -.focus_border_color dd focus_border_color -.blur_border_color dd blur_border_color -.text_color dd text_color -.max dd max -.text dd text -.mouse_variable dd mouse_variable -.flags dd flags+0 -.size dd size+0 -.pos dd pos+0 -.offset dd 0 -.cl_curs_x dd 0 -.cl_curs_y dd 0 -.shift dd 0 -.shift_old dd 0 -} -macro edit_boxes_set_sys_color start,end,color_table -{ - mov edi,start - mov ecx,((end-start)/ed_struc_size) - mov esi,color_table -@@: - mov eax,dword [esi+36] - mov ebx,dword [esi+20] - push dword eax - pop dword ed_focus_border_color - shr bh,1 - shr bl,1 - shr ah,1 - shr al,1 - add ah,bh - add al,bl - ror eax,16 - ror ebx,16 - shr bl,1 - shr al,1 - add al,bl - ror eax,16 - mov dword ed_blur_border_color,eax - mov dword shift_color,eax - add edi,ed_struc_size - loop @b -} macro get_sys_colors col_buf { ;mov eax,48 @@ -128,67 +18,4 @@ macro get_sys_colors col_buf pop edx mcall } -macro check_boxes_set_sys_color start,end,color_table -{ -ch_left equ [edi] ;координата начала рисования по х -ch_top equ [edi+2] ;координата начала рисования по у -ch_text_margin equ [edi+4] ;=4 расстояние от прямоугольника чек бокса до надписи -ch_size equ [edi+8] ;12 размер квадрата чек бокса -ch_color equ [edi+12] ;цвет внутри checkbox -ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно -ch_text_color equ [edi+20];[edi+4] ;цвет текста -ch_text_ptr equ [edi+24] ;указатель на начало текстовой строки -ch_text_length equ [edi+28] -ch_flags equ [edi+32] ;флаги - - -;ch_left equ [edi] ;координата начала рисования по х -;ch_top equ [edi+2] ;координата начала рисования по у -;ch_color equ [edi+4] ;цвет внутри checkbox -;ch_border_color equ [edi+8] ;цвет рамки checkbox -;ch_text_color equ [edi+12] ;цвет текста -;ch_text_ptr equ [edi+16] ;указатель на начало текстовой строки -;ch_text_length equ [edi+20] ;длина надписи (2^64 такой длины может быть текст) -;ch_flags equ [edi+24] ;флаги - - mov edi,start - mov ecx,((end-start)/ch_struc_size) - mov esi,color_table -@@: - push dword [esi+32] - pop dword ch_text_color - push dword [esi+36] - pop dword ch_border_color - add edi,ch_struc_size - loop @b -} -struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags -{ ;структура параметров для чек бокса -ch_flag_en=10b -.left: dw left ;+0 ;положение по х -.top: dw top ;положение по у -.ch_text_margin: dd ch_text_margin ;расстояние от прямоугольника чек бокса до надписи -.ch_size: dd ch_size ;размер квадрата чек бокса, для примера 12 -.color: dd color ;цвет внутри чекбокса -.border_color: dd border_color ;цвет рамки -.text_color: dd text_color ;цвет надписи -.text: dd text ;адрес в коде программы где расположен текст -.ch_text_length: dd ch_text_length ;длинна строки с символами -.flags: dd flags+0 ; флаги -} -struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags -{ ;структура параметров для чек бокса -op_flag_en=10b -.option_group: dd point_gr -.left: dw left ;+0 ;положение по х -.top: dw top ;положение по у -.ch_text_margin: dd op_text_margin ;расстояние от прямоугольника чек бокса до надписи -.ch_size: dd op_size ;размер квадрата чек бокса, для примера 12 -.color: dd color ;цвет внутри чекбокса -.border_color: dd border_color ;цвет рамки -.text_color: dd text_color ;цвет надписи -.text: dd text ;адрес в коде программы где расположен текст -.ch_text_length: dd op_text_length ;длинна строки с символами -.flags: dd flags+0 ; флаги -} diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index d079c007d8..2b5e714190 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -16,14 +16,8 @@ public EXPORTS section '.flat' code readable align 16 include '../../../../macros.inc' -include 'editbox.mac' ;macro which should make life easier :) specially for editbox -include 'checkbox.mac' ;macro implements checkbox -include 'optionbox.mac' ;macro implements optionbox -include 'scrollbar.mac' ;macro implements scrollbar -include 'd_button.mac' ;macro implements dinamic_button -include 'menubar.mac' ;macro implements menubar -include 'filebrowser.mac' ;macro implements filebrowser -include 'tree_list.mac' ;macro implements tree_list, image_list, list_box +include 'box_lib.mac' ;macro which should make life easier :) + ;---------------------------------------------------- ;EditBox ;---------------------------------------------------- diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.mac b/programs/develop/libraries/box_lib/trunk/box_lib.mac new file mode 100644 index 0000000000..9e430acbe5 --- /dev/null +++ b/programs/develop/libraries/box_lib/trunk/box_lib.mac @@ -0,0 +1,8 @@ +include 'editbox.mac' ;macro which should make life easier :) specially for editbox +include 'checkbox.mac' ;macro implements checkbox +include 'optionbox.mac' ;macro implements optionbox +include 'scrollbar.mac' ;macro implements scrollbar +include 'd_button.mac' ;macro implements dinamic_button +include 'menubar.mac' ;macro implements menubar +include 'filebrowser.mac' ;macro implements filebrowser +include 'tree_list.mac' ;macro implements tree_list, image_list, list_box \ No newline at end of file diff --git a/programs/develop/libraries/box_lib/trunk/checkbox.mac b/programs/develop/libraries/box_lib/trunk/checkbox.mac index 05bd0c5390..2f73bb30ae 100644 --- a/programs/develop/libraries/box_lib/trunk/checkbox.mac +++ b/programs/develop/libraries/box_lib/trunk/checkbox.mac @@ -2,21 +2,62 @@ ;╠ръЁюё фы  ёшёЄхьэющ сшсышюЄхъш box_lib.obj ;Checkbox +ch_struc_size=36 +ch_flag_en=10b + +ch_left equ [edi] ;координата начала рисования по х +ch_top equ [edi+2] ;координата начала рисования по у +ch_text_margin equ [edi+4] ;=4 расстояние от прямоугольника чек бокса до надписи +ch_size equ [edi+8] ;12 размер квадрата чек бокса +ch_color equ [edi+12] ;цвет внутри checkbox +ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно +ch_text_color equ [edi+20] ;[edi+4] ;цвет текста +ch_text_ptr equ [edi+24] ;указатель на начало текстовой строки +ch_text_length equ [edi+28] +ch_flags equ [edi+32] ;флаги + +macro check_boxes_set_sys_color start,end,color_table +{ +ch_left equ [edi] ;координата начала рисования по х +ch_top equ [edi+2] ;координата начала рисования по у +ch_text_margin equ [edi+4] ;=4 расстояние от прямоугольника чек бокса до надписи +ch_size equ [edi+8] ;12 размер квадрата чек бокса +ch_color equ [edi+12] ;цвет внутри checkbox +ch_border_color equ [edi+16] ; or [edi+4] ;цвет рамки checkbox ее можно задать самостоятельно +ch_text_color equ [edi+20];[edi+4] ;цвет текста +ch_text_ptr equ [edi+24] ;указатель на начало текстовой строки +ch_text_length equ [edi+28] +ch_flags equ [edi+32] ;флаги + + mov edi,start + mov ecx,((end-start)/ch_struc_size) + mov esi,color_table +@@: + push dword [esi+32] + pop dword ch_text_color + push dword [esi+36] + pop dword ch_border_color + add edi,ch_struc_size + loop @b +} +struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags +{ ;структура параметров для чек бокса +ch_flag_en=10b +.left: dw left ;+0 ;положение по х +.top: dw top ;положение по у +.ch_text_margin: dd ch_text_margin ;расстояние от прямоугольника чек бокса до надписи +.ch_size: dd ch_size ;размер квадрата чек бокса, для примера 12 +.color: dd color ;цвет внутри чекбокса +.border_color: dd border_color ;цвет рамки +.text_color: dd text_color ;цвет надписи +.text: dd text ;адрес в коде программы где расположен текст +.ch_text_length: dd ch_text_length ;длинна строки с символами +.flags: dd flags+0 ; флаги +} + macro use_checkbox_draw { check_box_draw: -;ch_struc_size=24 -ch_left equ [edi] ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю ї -ch_top equ [edi+2] ;ъююЁфшэрЄр эрўрыр Ёшёютрэш  яю є -ch_text_margin equ [edi+4] ;=4 ЁрёёЄю эшх юЄ яЁ ьюєуюы№эшър ўхъ сюъёр фю эрфяшёш -ch_size equ [edi+8] ;12 ЁрчьхЁ ътрфЁрЄр ўхъ сюъёр -ch_color equ [edi+12] -ch_border_color equ [edi+16] ; or [edi+4] ;ЎтхЄ Ёрьъш checkbox хх ьюцэю чрфрЄ№ ёрьюёЄю Єхы№эю -ch_text_color equ [edi+20];[edi+4] ;ЎтхЄ ЄхъёЄр -ch_text_ptr equ [edi+24] ;єърчрЄхы№ эр эрўрыю ЄхъёЄютющ ёЄЁюъш -ch_text_length equ [edi+28] -ch_flags equ [edi+32] ;Їыруш - pusha ;ёюїЁрэшь тёх ЁхушёЄЁ√ mov edi,dword [esp+36] mov eax,13 diff --git a/programs/develop/libraries/box_lib/trunk/editbox.mac b/programs/develop/libraries/box_lib/trunk/editbox.mac index fa1331ac3d..af50343fa2 100644 --- a/programs/develop/libraries/box_lib/trunk/editbox.mac +++ b/programs/develop/libraries/box_lib/trunk/editbox.mac @@ -1,3 +1,5 @@ +ed_struc_size=76 + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Basic macros for use editbox ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; @@ -23,6 +25,9 @@ cl_curs_y equ [edi+64] ; ed_shift_pos equ [edi+68] ;положение курсора ed_shift_pos_old equ [edi+72] ;старое положение курсора +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; +;Bit mask from editbox +;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ed_figure_only= 1000000000000000b ;одни символы ed_always_focus= 100000000000000b ed_focus= 10b ;фокус приложения @@ -45,7 +50,56 @@ ed_mous_adn_b= 100011000b ed_mouse_on_off=1111111011111111b ed_height=14 ; высота - +struc edit_box width,left,top,color,shift_color,focus_border_color,\ + blur_border_color,text_color,max,text,mouse_variable,flags,size,pos +{ +.width dd width +.left dd left +.top dd top +.color dd color +.shift_color dd shift_color +.focus_border_color dd focus_border_color +.blur_border_color dd blur_border_color +.text_color dd text_color +.max dd max +.text dd text +.mouse_variable dd mouse_variable +.flags dd flags+0 +.size dd size+0 +.pos dd pos+0 +.offset dd 0 +.cl_curs_x dd 0 +.cl_curs_y dd 0 +.shift dd 0 +.shift_old dd 0 +} +macro edit_boxes_set_sys_color start,end,color_table +{ + mov edi,start + mov ecx,((end-start)/ed_struc_size) + mov esi,color_table +@@: + mov eax,dword [esi+36] + mov ebx,dword [esi+20] + push dword eax + pop dword ed_focus_border_color + shr bh,1 + shr bl,1 + shr ah,1 + shr al,1 + add ah,bh + add al,bl + ror eax,16 + ror ebx,16 + shr bl,1 + shr al,1 + add al,bl + ror eax,16 + mov dword ed_blur_border_color,eax + mov dword shift_color,eax + add edi,ed_struc_size + loop @b +} macro init_editbox { diff --git a/programs/develop/libraries/box_lib/trunk/optionbox.mac b/programs/develop/libraries/box_lib/trunk/optionbox.mac index 340734afe0..0e55df259c 100644 --- a/programs/develop/libraries/box_lib/trunk/optionbox.mac +++ b/programs/develop/libraries/box_lib/trunk/optionbox.mac @@ -2,6 +2,22 @@ ;╠ръЁюё фы  ёшёЄхьэющ сшсышюЄхъш box_lib.obj ;Optionbox +struc option_box point_gr,left,top,op_text_margin,op_size,color,border_color,text_color,text,op_text_length,flags +{ ;структура параметров для чек бокса +op_flag_en=10b +.option_group: dd point_gr +.left: dw left ;+0 ;положение по х +.top: dw top ;положение по у +.ch_text_margin: dd op_text_margin ;расстояние от прямоугольника чек бокса до надписи +.ch_size: dd op_size ;размер квадрата чек бокса, для примера 12 +.color: dd color ;цвет внутри чекбокса +.border_color: dd border_color ;цвет рамки +.text_color: dd text_color ;цвет надписи +.text: dd text ;адрес в коде программы где расположен текст +.ch_text_length: dd op_text_length ;длинна строки с символами +.flags: dd flags+0 ; флаги +} + macro use_optionbox_driver ;ьръЁюё√ ъюЄюЁ√х єяЁрты ■Є ЁрсюЄющ сюъёр ) { option_box_draw: