diff --git a/programs/develop/libraries/box_lib/trunk/bl_sys.mac b/programs/develop/libraries/box_lib/trunk/bl_sys.mac index fe2eb2a730..1e2cad5af0 100644 --- a/programs/develop/libraries/box_lib/trunk/bl_sys.mac +++ b/programs/develop/libraries/box_lib/trunk/bl_sys.mac @@ -1,5 +1,4 @@ include 'editbox.mac' ;macro which should make life easier :) specially for editbox -include 'checkbox.mac' ;macro implements checkbox old version include 'checkbox2.mac' ;macro implements checkbox version 2 include 'optionbox.mac' ;macro implements optionbox include 'scrollbar.mac' ;macro implements scrollbar diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.asm b/programs/develop/libraries/box_lib/trunk/box_lib.asm index a01c8d473d..e1b457bef4 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.asm +++ b/programs/develop/libraries/box_lib/trunk/box_lib.asm @@ -36,14 +36,6 @@ use_editbox_key ;macro reveals processing function of the keypad. align 16 use_editbox_mouse ;macro reveals processing function of the mouse. -;---------------------------------------------------- -;CheckBox old version -;---------------------------------------------------- -align 16 -use_checkbox_draw ;macro reveals the function of the display. -align 16 -use_checkbox_mouse ;macro reveals processing function of the mouse. - ;---------------------------------------------------- ;CheckBox2 ;---------------------------------------------------- @@ -248,16 +240,11 @@ dd sz_edit_box_mouse, edit_box_mouse dd sz_edit_box_set_text, edit_box_set_text dd szVersion_ed, 0x00000001 -dd sz_check_box_draw, check_box_draw -dd sz_check_box_mouse, check_box_mouse -dd szVersion_ch, 0x00000001 - dd sz_init_checkbox2, init_checkbox2 dd sz_check_box_draw2, check_box_draw2 dd sz_check_box_mouse2, check_box_mouse2 dd szVersion_ch2, 0x00000002 - dd sz_option_box_draw, option_box_draw dd sz_option_box_mouse, option_box_mouse dd szVersion_op, 0x00000001 @@ -352,10 +339,6 @@ sz_edit_box_mouse db 'edit_box_mouse',0 sz_edit_box_set_text db 'edit_box_set_text',0 szVersion_ed db 'version_ed',0 -sz_check_box_draw db 'check_box_draw',0 -sz_check_box_mouse db 'check_box_mouse',0 -szVersion_ch db 'version_ch',0 - sz_init_checkbox2 db 'init_checkbox2',0 sz_check_box_draw2 db 'check_box_draw2',0 sz_check_box_mouse2 db 'check_box_mouse2',0 diff --git a/programs/develop/libraries/box_lib/trunk/box_lib.mac b/programs/develop/libraries/box_lib/trunk/box_lib.mac index 3a00266a4e..1f8075447e 100644 --- a/programs/develop/libraries/box_lib/trunk/box_lib.mac +++ b/programs/develop/libraries/box_lib/trunk/box_lib.mac @@ -104,58 +104,19 @@ macro edit_boxes_set_sys_color start,end,color_table add edi,ed_struc_size loop @b } + + ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;Basic macros for use CheckBox ; +;Last change 17.01.2013 ; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -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_text_margin equ [edi+8] ;=4 а ббв®п­ЁҐ ®в Їаאַ㣮«м­ЁЄ  祪 Ў®Єб  ¤® ­ ¤ЇЁбЁ 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_flags equ [edi+28] ;д« ЈЁ -struc check_box left,top,ch_text_margin,ch_size,color,border_color,text_color,text,ch_text_length,flags -{ ;бвагЄвга  Ї а ¬Ґва®ў ¤«п 祪 Ў®Єб  -.left: dw left ;+0 Ї®«®¦Ґ­ЁҐ Ї® е -.top: dw top ;+2 Ї®«®¦Ґ­ЁҐ Ї® г -.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 check_boxes_set_sys_color start,end,color_table -{ - mov edi,start - mov ecx,((end-start)/ch_struc_size) - mov esi,color_table -@@: -; push dword [esi+20] ;梥в а Ў®зҐ© ®Ў« бвЁ ®Є­  -; pop dword ch_color - 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 -} - - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Basic macros for use CheckBox ; -;Last change 12.10.2010 ; -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ch_struc_size=36 ;а §¬Ґа бвагЄвгал ch_flag_en=10b ;д« Ј гбв ­®ў«Ґ­­®Ј® 祪 Ў®Єб . ch_flag_top=0x0 ;д« Ј а бЇ®«®¦Ґ­Ёп ⥪бв  ўўҐаег в.Ґ. 3-© ЎЁв @@ -186,39 +147,60 @@ struc check_box2 left_s,top_s,ch_text_margin,color,border_color,text_color,text, } ;Њ Єа®б Їа®ўҐаЄЁ 饫窠 ¬лиЄЁ ­ ¤ ЈагЇЇ®© checkboxes. -macro init_checkboxes2 start,end +macro init_checkboxes2 start,end_cb { +if start+ch_struc_size eq end_cb + ;Є®Ј¤  ®¤Ё­ н«Ґ¬Ґ­в + push start ;гЄ § вҐ«м ­  checkbox + call [init_checkbox] ;­ бва®©Є  checkbox'  +else + ;Є®Ј¤  ­ҐбЄ®«мЄ® н«Ґ¬Ґ­в®ў mov ebp,start - mov ecx,((end-start)/ch_struc_size) + mov ecx,((end_cb-start)/ch_struc_size) @@: push ebp ;гЄ § вҐ«м ­  ЇҐаўл© checkbox - call [init_checkbox] ;¬ Єа®б Їа®ўҐаЄЁ ¬лиЄЁ ­ ¤ checkbox'®¬ + call [init_checkbox] ;­ бва®©Є  checkbox'®ў add ebp,ch_struc_size loop @b +end if } ;Њ Єа®б Їа®ўҐаЄЁ ¬лиЄЁ ЈагЇЇл checkboxes. -macro checkboxes_mouse2 start,end +macro checkboxes_mouse2 start,end_cb { +if start+ch_struc_size eq end_cb + ;Є®Ј¤  ®¤Ё­ н«Ґ¬Ґ­в + push start ;гЄ § вҐ«м ­  checkbox + call [check_box_mouse] ;¬ Єа®б Їа®ўҐаЄЁ ¬лиЄЁ ­ ¤ checkbox'®¬ +else + ;Є®Ј¤  ­ҐбЄ®«мЄ® н«Ґ¬Ґ­в®ў mov ebp,start - mov ecx,((end-start)/ch_struc_size) + mov ecx,((end_cb-start)/ch_struc_size) @@: push ebp ;гЄ § вҐ«м ­  ЇҐаўл© checkbox - call [check_box_mouse] ;­ аЁб®ў вм checkbox + call [check_box_mouse] ;¬ Єа®б Їа®ўҐаЄЁ ¬лиЄЁ ­ ¤ checkbox' ¬Ё add ebp,ch_struc_size loop @b +end if } ;Њ Єа®б ®ваЁб®ўЄЁ ЈагЇЇл checkboxes. -macro checkboxes_draw2 start,end +macro checkboxes_draw2 start,end_cb { +if start+ch_struc_size eq end_cb + ;Є®Ј¤  ®¤Ё­ н«Ґ¬Ґ­в + push start ;гЄ § вҐ«м ­  checkbox + call [check_box_draw] ;­ аЁб®ў вм checkbox +else + ;Є®Ј¤  ­ҐбЄ®«мЄ® н«Ґ¬Ґ­в®ў mov ebp,start - mov ecx,((end-start)/ch_struc_size) + mov ecx,((end_cb-start)/ch_struc_size) @@: push ebp ;гЄ § вҐ«м ­  ЇҐаўл© checkbox - call [check_box_draw] ;­ аЁб®ў вм checkbox + call [check_box_draw] ;­ аЁб®ў вм checkbox'л add ebp,ch_struc_size loop @b +end if } macro check_boxes_set_sys_color2 start,end,color_table diff --git a/programs/develop/libraries/box_lib/trunk/checkbox.mac b/programs/develop/libraries/box_lib/trunk/checkbox.mac deleted file mode 100644 index f5d5a8c949..0000000000 --- a/programs/develop/libraries/box_lib/trunk/checkbox.mac +++ /dev/null @@ -1,142 +0,0 @@ -;файл создан 13.02.2009 На код применена GPL2 лицензия -;Макрос для системной библиотеки box_lib.obj -;Checkbox - -macro use_checkbox_draw -{ -check_box_draw: - pusha ;сохраним все регистры - mov edi,dword [esp+36] - mov eax,13 - movzx ebx,word ch_left - shl ebx,16 - add ebx,ch_size - mov ecx,ch_top - shl ecx,16 - add ecx,dword ch_size - mov edx,dword ch_border_color - mcall ;рисуем рамку - - mov edx,dword ch_color - add ebx,1 shl 16 - 2 - add ecx,1 shl 16 - 2 - mcall ;закрашиваем внутренности чекбокса - - test dword ch_flags,2 ;достать значение бита из переменной и поместить в флаг CF - jz @f ;в если CF=1, то выполним следующую процедуру иначе перейти на нижнюю @@ - call check_box_draw_ch ;нарисовать включенный чек бокс -@@: -;---------------------------- -;расчет куда будет произведен вывод текста -;---------------------------- - movzx ebx,word ch_left ;загрузить значение х для чек бокса - add ebx,dword ch_size - add ebx,dword ch_text_margin;добавить размер стороны и расстояние на котором начнется вывод текста - shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) - mov bx,word ch_top ;загрузим значение по y - mov eax,ch_size - shr eax,1 - add eax,4 - add ebx,eax - mov ecx,dword ch_text_color ;загрузим цвет надписи + flags - sub ebx,7 ;добавим значение длины стороны -9+2 - - mov edx,dword ch_text_ptr ;укажем адрес от куда нужно выводить строку - mov esi,dword ch_text_length - ;внесем в eax значение вывода надписи на канву - mov eax,4 - mcall ;Вывод -popa ;восстановить значения регистров из стека -ret 4 ;выйдем из процедуры - -check_box_clear_ch: ;очистка чек бокса - mov edx,dword ch_color ;цвет внутри чек бокса - jmp @f ;безусловный прыжок на нижнюю метку @@ -check_box_draw_ch: ;нарисовать включенный чек бокс - mov edx,dword ch_border_color ;загрузить цвет -@@: - movzx ebx,word ch_left ;загрузить координату по х - mov eax,dword ch_size - mov bp,ax - shr eax,2 - push ax - - push ax - add ebx,eax - shl ebx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) - pop ax - lea eax,[eax*2] - sub bp,ax ;сохраним регистр bx в регистре указателя базы - mov bx,bp - - movzx ecx,word ch_top ;загрузить координату по у - pop ax - add cx,ax - shl ecx,16 ;сдвинем на 16 разрядов в лево (умножим на 65536) - mov cx,bp ;загрузим значения регистра указателя базы в cx - mov eax,13 ;в eax - значения функции для вывода полосы т.е. по сути прямоугольника, который отображает включенный компонент чек бокс - mcall ;вывод -ret ;выйти из процедуры -} - - -macro use_checkbox_mouse -{ - -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -;Обработчик mouse -;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; -check_box_mouse: ;обработка мыши -pusha - mov edi,dword [esp+36] - mov eax,37 ;будем что то делать если у нас что - нить нажато - mov ebx,2 ;внести в регистр значение 2 - mcall ;проверка не нажал ли пользователь кнопку мышки - test eax,eax ;проверка если у нас в eax=0, то установим флаг и выйдем - jnz @f ;перейти на нижнюю метку @@ - btr dword ch_flags,2 ;извлечение значения заданного бита в флаг cf и изменение его значения на нулевое. - jmp check_box_mouse_end - -@@: - bts dword ch_flags,2 ;проверка флага т.е. перенос в cf значение бита и установка бита в состояние включено - jc check_box_mouse_end ;если CF=1 то перейти в конец т.е. это выход - mov esi,dword ch_text_length ;загрузить кол-во символов в текстовой строке - ;Умножение на 6 Быстрое умножение можно воспользоваться любым мз методов, но на старых Процессорах (386,486,P1)быстрее будет с инструкцией Lea - lea esi,[eax*3] - shl esi,1 -; imul esi,6 ; или можно и так умножить на 6 - add esi,dword ch_text_margin ;добавить 3 - расстояние от чек бокса до надписи - - mov eax,37 ;получим координаты мышки - mov ebx,1 ;добавить 1 - mcall ;получить координаты курсора относительно окна - - movzx ebx,word ch_top ;загрузить в bx значение координаты у - cmp ax,bx ;сравнить с с координатой курсора - jl check_box_mouse_end ;SF <> OF если меньше - add ebx,dword ch_size ;добавить размер - cmp ax,bx ;сравнить - jg check_box_mouse_end ;ZF = 0 и SF = OF если больше - - shr eax,16 ;разделим на 65536 или просто сдвинем биты на 16 значений - movzx ebx,word ch_left ;произведем аналогичное сравнение - cmp ax,bx ;сравнить регистры - jl check_box_mouse_end ;если меньше - add ebx,dword ch_size ;добавить длину стороны прямоугольника - add ebx,esi ;Учесть в значении по х еще и длину надписи к чекбоксу - cmp ax,bx ;стравнить регистры - jg check_box_mouse_end ;если больше - - bts dword ch_flags,1 ;извлечение значения заданного бита в флаг cf и изменение его значения на 1. - jc @f ;CF=1 то перейти на нижнюю @@ - - call check_box_draw_ch ;отобразить включенный чек бокс -; mov dword [esp+24],1 ;дальнейшая проверка чек боксов бесмыслена, по этому в стек, где располагается ecx поместитм 0 - jmp check_box_mouse_end ;выйти -@@: - btr word ch_flags,1 ;извлечение значения заданного бита в флаг cf и изменение его значения на нулевое. - call check_box_clear_ch ;выключить чек бокс т.е. на месте закрашенного прямоугольника отобразить цвет фона. -check_box_mouse_end: -popa ;восстановить регистры из стека -ret 4 ;выйти -} \ No newline at end of file diff --git a/programs/other/kpack/trunk/kpack.asm b/programs/other/kpack/trunk/kpack.asm index c8b7a68c87..66f149596c 100644 --- a/programs/other/kpack/trunk/kpack.asm +++ b/programs/other/kpack/trunk/kpack.asm @@ -61,8 +61,9 @@ load_libraries l_libs_start,load_lib_end cmp eax,-1 je exit - push check1 - call [init_checkbox] + init_checkboxes2 check1,check1_end + ;push check1 + ;call [init_checkbox] call clear_messages ; set default path = /RD/1/ @@ -201,9 +202,8 @@ button: dec eax jnz nopack - mov eax,[check1+32] - test eax,10b - jnz @f + bt dword[check1.flags],1 + jc @f call pack jmp still diff --git a/programs/system/cpu/trunk/cpu.asm b/programs/system/cpu/trunk/cpu.asm index b5e7022f15..38e33bc3b9 100644 --- a/programs/system/cpu/trunk/cpu.asm +++ b/programs/system/cpu/trunk/cpu.asm @@ -80,9 +80,10 @@ err_message_found_lib, head_f_l, myimport, err_message_import, head_f_i ;winypos=ycoord*65536+ysize mov [winypos],eax ;------------------------------------------------------------------------------ + init_checkboxes2 check1,check1_end mcall 48,3,sc,40 edit_boxes_set_sys_color edit1,edit1_end,sc ;set color - check_boxes_set_sys_color check1,check1_end,sc ;set color + check_boxes_set_sys_color2 check1,check1_end,sc ;set color ;------------------------------------------------------------------------------ align 4 ;main loop when process name isn't edited. @@ -105,14 +106,14 @@ still: push dword edit1 call [edit_box_mouse] - push dword[check1+32] + push dword[check1.flags] push dword check1 call [check_box_mouse] pop eax - cmp eax, dword[check1+32] + cmp eax, dword[check1.flags] jz still_end push dword check1 @@ -605,6 +606,7 @@ edit_box_key dd aEdit_box_key edit_box_mouse dd aEdit_box_mouse ;version_ed dd aVersion_ed +init_checkbox dd aInit_checkbox check_box_draw dd aCheck_box_draw check_box_mouse dd aCheck_box_mouse ;version_ch dd aVersion_ch @@ -621,8 +623,9 @@ aEdit_box_key db 'edit_box_key',0 aEdit_box_mouse db 'edit_box_mouse',0 ;aVersion_ed db 'version_ed',0 -aCheck_box_draw db 'check_box_draw',0 -aCheck_box_mouse db 'check_box_mouse',0 +aInit_checkbox db 'init_checkbox2',0 +aCheck_box_draw db 'check_box_draw2',0 +aCheck_box_mouse db 'check_box_mouse2',0 ;aVersion_ch db 'version_ch',0 ;aOption_box_draw db 'option_box_draw',0 @@ -630,7 +633,7 @@ aCheck_box_mouse db 'check_box_mouse',0 ;aVersion_op db 'version_op',0 ;------------------------------------------------------------------------------ align 4 -check1 check_box 10,383,6,11,0x80AABBCC,0,0,check_text,check_t_e,0;ch_flag_en +check1 check_box2 (10 shl 16)+11,(383 shl 16)+11,6, 0x80AABBCC,0,0,check_text, ch_flag_bottom ;ch_flag_en check1_end: edit1 edit_box 350,95,381,0xffffff,0x6f9480,0,0xAABBCC,0,start_application_c,\ start_application,mouse_dd,ed_focus,start_application_e,start_application_e @@ -656,8 +659,7 @@ tbts: db 'SEITE ZURUECK SEITE VOR REBOOT SYSTEM' tbte: tbts_3 db 'START' tbte_2: -check_text db '@ on/off' -check_t_e=$-check_text +check_text db '@ on/off',0 title db 'Prozesse - Ctrl/Alt/Del',0 ;-------------------------------------- else if lang eq et @@ -670,8 +672,7 @@ tbts: db 'EELMINE LEHT J tbte: tbts_3 db 'START' tbte_2: -check_text db '@ on/off' -check_t_e=$-check_text +check_text db '@ on/off',0 title db 'Protsessid - Ctrl/Alt/Del' ;-------------------------------------- else if lang eq ru @@ -684,8 +685,7 @@ tbts: db ' tbte: tbts_3 db '‡ЂЏ“‘Љ' tbte_2: -check_text db '@ ўЄ«/ўлЄ«' -check_t_e=$-check_text +check_text db '@ ўЄ«/ўлЄ«',0 title db '„ЁбЇҐвзҐа Їа®жҐбб®ў - Ctrl/Alt/Del',0 ;-------------------------------------- else @@ -698,8 +698,7 @@ tbts: db 'PREV PAGE NEXT PAGE REBOOT SYSTEM' tbte: tbts_3 db ' RUN' tbte_2: -check_text db '@ on/off' -check_t_e=$-check_text +check_text db '@ on/off',0 title db 'Process manager - Ctrl/Alt/Del',0 end if