From ffd240bc4f0bf8305fec05147db7a7d4f69dc006 Mon Sep 17 00:00:00 2001 From: Akyltist Date: Thu, 10 Apr 2014 07:32:31 +0000 Subject: [PATCH] Add sources codes "Personalization desktop" program. v 0.1 git-svn-id: svn://kolibrios.org@4813 a494cfbc-eb01-0410-851d-a64ba20cac60 --- programs/other/personal/inc/button.inc | 269 ++++++++++++ programs/other/personal/inc/dtp.inc | 51 +++ programs/other/personal/inc/edit.inc | 65 +++ programs/other/personal/inc/list.inc | 525 ++++++++++++++++++++++++ programs/other/personal/inc/mouse.inc | 31 ++ programs/other/personal/inc/process.inc | 28 ++ programs/other/personal/personal.asm | 192 +++++++++ programs/other/personal/readme.txt | 34 ++ 8 files changed, 1195 insertions(+) create mode 100644 programs/other/personal/inc/button.inc create mode 100644 programs/other/personal/inc/dtp.inc create mode 100644 programs/other/personal/inc/edit.inc create mode 100644 programs/other/personal/inc/list.inc create mode 100644 programs/other/personal/inc/mouse.inc create mode 100644 programs/other/personal/inc/process.inc create mode 100644 programs/other/personal/personal.asm create mode 100644 programs/other/personal/readme.txt diff --git a/programs/other/personal/inc/button.inc b/programs/other/personal/inc/button.inc new file mode 100644 index 000000000..9308d5429 --- /dev/null +++ b/programs/other/personal/inc/button.inc @@ -0,0 +1,269 @@ +struct new_button + x dw ? + y dw ? + w dw ? + h dw ? + f dw ? + face dd ? + frame dd ? + event dd ? +ends + +button_event_next: + pusha + mov eax,[edit_cnt] + cmp eax,4 + je @f + inc eax + jmp ben_exit + @@: + mov eax,1 + ben_exit: + mov [edit_cnt],eax + call draw_edit + call list_draw + popa + ret + +button_event_back: + pusha + mov eax,[edit_cnt] + cmp eax,1 + je @f + dec eax + jmp ben_exit + @@: + mov eax,4 + beb_exit: + mov [edit_cnt],eax + call draw_edit + call list_draw + popa + ret + + +button_init: + ;; nex init ------------ + mov ax, 36 + mov [bnext.x],ax + mov ax, 8 + mov [bnext.y],ax + mov ax, 26 + mov [bnext.w],ax + mov ax, 19 + mov [bnext.h],ax + mov ax, 0 + mov [bnext.f],ax + mov eax,[sc.btn_face] + mov [bnext.face],eax + mov eax,[sc.btn_frame] + mov [bnext.frame],eax + mov eax,button_event_next + mov [bnext.event],eax + + mov ax, 7 + mov [bback.x],ax + mov ax, 8 + mov [bback.y],ax + mov ax, 26 + mov [bback.w],ax + mov ax, 19 + mov [bback.h],ax + mov ax, 0 + mov [bback.f],ax + mov eax,[sc.btn_face] + mov [bback.face],eax + mov eax,[sc.btn_frame] + mov [bback.frame],eax + mov eax,button_event_back + mov [bback.event],eax + ret + +button_calc: + mov eax, bnext + call button_focus + mov eax, bback + call button_focus + ret + +button_focus: + pusha + xor ecx,ecx + xor ebx,ebx + mov edi,[mouse_x] + mov bx, word [eax] + cmp ebx,edi + jg button_focus_out + add bx, word [eax + 4] + cmp ebx,edi + jb button_focus_out + mov edi,[mouse_y] + mov bx,[eax + 2] + cmp ebx,edi + jg button_focus_out + add bx,[eax + 6] + cmp ebx,edi + jb button_focus_out + ;---- + push eax + call mouse_left + mov ecx,[mouse_l] + cmp ecx,0 + je button_focus_set + xor ecx,ecx + mov [mouse_l],ecx + call dword [eax+18] + + button_focus_set: + pop eax + ;---- + mov ecx,1 + button_focus_out: + mov word [eax + 8],cx + popa + ret + +button_draw: + mov eax, bnext + call button_draw_all + mov eax, bback + call button_draw_all + ; arrow + pusha + mov eax , 7 + mov ebx , arrowa + mov ecx , 6 shl 16 + 10 + mov edx , 46 shl 16 + 13 + int 0x40 + mov ebx , arrowb + mov edx , 17 shl 16 + 13 + int 0x40 + popa + ret + +button_draw_all: + pusha + mov ebx,[win_slot] + cmp ebx,1 + je @f + mov ebx,[sc.btn_inface] + mov dword [eax + 10],ebx + mov ebx,[sc.btn_inframe] + mov dword [eax + 14],ebx + jmp button_draw_run + @@: ;act + xor ebx,ebx + mov bx,word [eax + 8] + cmp ebx,1 + je @f + mov ebx,[sc.btn_face] + mov dword [eax + 10],ebx + mov ebx,[sc.btn_frame] + mov dword [eax + 14],ebx + jmp button_draw_run + @@: ; foc + mov ebx,[sc.btn_fcface] + mov dword [eax + 10],ebx + mov ebx,[sc.btn_fcframe] + mov dword [eax + 14],ebx + + button_draw_run: + + ; прямоугольный фон + mov bx, word [eax] ; x + add bx, 2 ; x+2 + shl ebx,16 + mov bx, word [eax+4] ; w + sub bx, 4 ; w-4 + mov cx, word [eax+2] ; y + add cx,2 ; y+2 + shl ecx,16 + mov cx, word [eax+6] ; h + sub cx, 4 ; h-4 + mov edx, dword [eax + 10] ; color + push eax + mov eax, 13 ; rect + int 0x40 ; draw + pop eax + + ; верхняя линия [frame] + mov edx, dword [eax + 14] ; color + mov bx, word [eax] ; x + inc bx ; x+1 + shl ebx,16 + mov bx, word [eax] ; x2=x + add bx, word [eax + 4] ; x2=x+w + sub bx,2 ; x2=x2-2 + mov cx, word [eax + 2] ; y + shl ecx,16 + mov cx, word [eax + 2] ; y2=y + push eax + mov eax, 38 ; line + int 0x40 ; draw + ; верхняя линия [3d] + mov edx, [sc.3d_light] ; color + add ecx, 1 shl 16 + 1 ; y=y+1 y2=y2+1 + int 0x40 ; draw + pop eax + + ; нижняя линия [frame] + + mov cx, word [eax + 2] ; y + add cx, word [eax + 6] ; y = y+h + push cx + shl ecx,16 + pop cx + sub ecx, 1 shl 16 + 1 ; y=y+1 y2=y2+1 + mov edx, dword [eax + 14] ; color + push eax + mov eax, 38 ; line + int 0x40 ; draw + ; нижняя линия [3d] + sub ebx, 1 shl 16 ; x = x-1 + mov edx, [sc.3d_dark] ; color + sub ecx, 1 shl 16 + 1 ; y=y+1 y2=y2+1 + int 0x40 ; draw + pop eax + + + ; передняя боковая [frame] + mov edx, dword [eax + 14] ; color + mov bx, word [eax] ; x + shl ebx,16 + mov bx, word [eax] ; x2=x + mov cx, word [eax + 2] ; y + inc cx ; y=y+1 + shl ecx,16 + mov cx, word [eax + 2] ; y2=y + add cx, word [eax + 6] ; y2=y+h + sub cx,2 ; y2=y2-2 + push eax + mov eax, 38 ; line + int 0x40 ; draw + ; передняя боковая [3d] + mov edx, [sc.3d_light] ; color + add ebx, 1 shl 16 + 1 ; x=x+1 x2=x2+1 + sub ecx,1 ; y2=y2-1 + int 0x40 ; draw + pop eax + + ; задняя боковая [frame] + mov edx, dword [eax + 14] ; color + mov bx, word [eax] ; x + add bx, word [eax + 4] ; x=x+w + dec bx + push bx + shl ebx,16 + pop bx + inc ecx + push eax + mov eax, 38 ; line + int 0x40 ; draw + ; задняя боковая [3d] + mov edx, [sc.3d_dark] ; color + sub ebx, 1 shl 16 + 1 ; x=x+1 x2=x2+1 + int 0x40 ; draw + pop eax + + popa + ret diff --git a/programs/other/personal/inc/dtp.inc b/programs/other/personal/inc/dtp.inc new file mode 100644 index 000000000..de5dfbea0 --- /dev/null +++ b/programs/other/personal/inc/dtp.inc @@ -0,0 +1,51 @@ +; set table +struct new_colors + menu_body dd ? + 3d_face dd ? + 3d_dark dd ? + 3d_light dd ? + win_title dd ? + win_body dd ? + btn_face dd ? + btn_text dd ? + win_text dd ? + panel_frame dd ? + win_face dd ? + win_inface dd ? + win_frame dd ? + win_inframe dd ? + win_border dd ? + win_inborder dd ? + win_graytext dd ? + menu_frame dd ? + menu_text dd ? + panel_body dd ? + panel_text dd ? + hint_frame dd ? + hint_body dd ? + hint_text dd ? + btn_inface dd ? + btn_fcface dd ? + btn_frame dd ? + btn_inframe dd ? + btn_fcframe dd ? + btn_intext dd ? + btn_fctext dd ? + gui_shadow dd ? + gui_face dd ? + gui_inface dd ? + gui_fcface dd ? + gui_frame dd ? + gui_inframe dd ? + gui_fcframe dd ? + gui_text dd ? + gui_intext dd ? + gui_fctext dd ? + gui_select dd ? + res_var_a dd ? + res_var_b dd ? + res_var_c dd ? + res_var_d dd ? + res_var_e dd ? + res_var_f dd ? +ends diff --git a/programs/other/personal/inc/edit.inc b/programs/other/personal/inc/edit.inc new file mode 100644 index 000000000..5d7997e89 --- /dev/null +++ b/programs/other/personal/inc/edit.inc @@ -0,0 +1,65 @@ +draw_edit: + pusha + + mov eax , 13 + mov ebx , 75 shl 16 + 116 + mov ecx , 10 shl 16 + 15 + mov edx , [sc.gui_face] + int 0x40 + + mov eax , 38 + mov ebx , 74 shl 16 + 191 + mov ecx , 9 shl 16 + 9 + mov edx , [sc.3d_light] + int 0x40 + mov ecx , 25 shl 16 + 25 + int 0x40 + mov ecx , 8 shl 16 + 8 + mov edx , [sc.gui_inframe] + int 0x40 + mov ecx , 26 shl 16 + 26 + int 0x40 + + mov eax , 38 + mov ebx , 74 shl 16 + 74 + mov ecx , 9 shl 16 + 25 + mov edx , [sc.3d_light] + int 0x40 + mov ebx , 191 shl 16 + 191 + int 0x40 + mov edx , [sc.gui_inframe] + mov ebx , 192 shl 16 + 192 + int 0x40 + mov ebx , 73 shl 16 + 73 + int 0x40 + + mov eax,4 + mov ecx,[sc.gui_intext] + add ecx,0xC0000000 + mov edi,[sc.gui_face] + + mov edx,[edit_cnt] + cmp edx,1 + jne @f + mov edx,edit_win + mov ebx,115*65536 + 14 + jmp draw_edit_exit + @@: + cmp edx,2 + jne @f + mov edx,edit_btn + mov ebx,115*65536 + 14 + jmp draw_edit_exit + @@: + cmp edx,3 + jne @f + mov edx,edit_gui + mov ebx,112*65536 + 14 + jmp draw_edit_exit + @@: + mov edx,edit_cld + mov ebx,112*65536 + 14 + draw_edit_exit: + int 0x40 + popa +ret diff --git a/programs/other/personal/inc/list.inc b/programs/other/personal/inc/list.inc new file mode 100644 index 000000000..83e608514 --- /dev/null +++ b/programs/other/personal/inc/list.inc @@ -0,0 +1,525 @@ +list_draw: + call list_draw_ground + mov eax,[edit_cnt] + cmp eax,1 + jne @f + call list_draw_win_text + call list_draw_win_hex + jmp list_draw_exit + @@: + cmp eax,2 + jne @f + call list_draw_btn_text + call list_draw_btn_hex + jmp list_draw_exit + @@: + cmp eax,3 + jne @f + call list_draw_gui_text + call list_draw_gui_hex + jmp list_draw_exit + @@: + call list_draw_sup_text + call list_draw_sup_hex + list_draw_exit: + ret + +list_draw_ground: + ;; draw list face + push edi + mov edi,12 + mov eax,13 + mov ebx, 9 shl 16 + 214 + mov ecx, 32 shl 16 + 19 + mov edx,[sc.gui_face] + draw_list_face: + int 0x40 + add ecx, 20 shl 16 + 0 + dec edi + cmp edi,0 + jne draw_list_face + pop edi + + ;; draw list line + push edi + mov edi,13 + mov eax,38 + mov ebx, 9 shl 16 + 221 + mov ecx, 31 shl 16 + 31 + mov edx,[sc.gui_frame] + draw_list_line: + int 0x40 + add ecx, 20 shl 16 + 20 + dec edi + cmp edi,0 + jne draw_list_line + pop edi + + ;; draw hex sybbol + push esi + mov esi,12 + mov eax,4 + mov ecx,[sc.gui_intext] + add ecx,0xC0000000 + mov ebx,164*65536 + 38 + mov edx,text_hex + mov edi,[sc.gui_face] + draw_list_hex: + push esi + int 0x40 + pop esi + add ebx,20 + dec esi + cmp esi,0 + jne draw_list_hex + pop esi + + ;; draw vert line + mov eax, 38 + mov ebx, 8 shl 16 + 8 + mov ecx, 32 shl 16 + 270 + mov edx,[sc.gui_frame] + int 0x40 + mov ebx, 142 shl 16 + 142 + int 0x40 + mov ebx, 222 shl 16 + 222 + int 0x40 + ret + +list_draw_win_text: + mov eax,4 + mov ecx,[sc.gui_text] + add ecx,0xC0000000 + mov edi,[sc.gui_face] + + mov edx,text_frame + mov ebx,16*65536 + 38 + int 0x40 + + mov edx,text_inframe + add ebx,20 + int 0x40 + + mov edx,text_face + add ebx,20 + int 0x40 + + mov edx,text_inface + add ebx,20 + int 0x40 + + mov edx,text_border + add ebx,20 + int 0x40 + + mov edx,text_inborder + add ebx,20 + int 0x40 + + mov edx,text_wtext + add ebx,20 + int 0x40 + + mov edx,text_graytext + add ebx,20 + int 0x40 + + mov edx,text_title + add ebx,20 + int 0x40 + + mov edx,text_body + add ebx,20 + int 0x40 + + mov edx,text_reserved + add ebx,20 + int 0x40 + + mov edx,text_reserved + add ebx,20 + int 0x40 + ret + +list_draw_win_hex: + mov eax,47 + mov ebx,256+8 shl 16 + mov esi,[sc.gui_intext] + + mov ecx,[sc.win_frame] + mov edx,170*65536 + 38 + int 0x40 + + mov ecx,[sc.win_inframe] + add edx,20 + int 0x40 + + mov ecx,[sc.win_face] + add edx,20 + int 0x40 + + mov ecx,[sc.win_inface] + add edx,20 + int 0x40 + + mov ecx,[sc.win_border] + add edx,20 + int 0x40 + + mov ecx,[sc.win_inborder] + add edx,20 + int 0x40 + + mov ecx,[sc.win_text] + add edx,20 + int 0x40 + + mov ecx,[sc.win_graytext] + add edx,20 + int 0x40 + + mov ecx,[sc.win_title] + add edx,20 + int 0x40 + + mov ecx,[sc.win_body] + add edx,20 + int 0x40 + + mov ecx,[sc.res_var_a] + add edx,20 + int 0x40 + + mov ecx,[sc.res_var_b] + add edx,20 + int 0x40 + ret + +list_draw_btn_text: + mov eax,4 + mov ecx,[sc.gui_text] + add ecx,0xC0000000 + mov edi,[sc.gui_face] + + mov edx,text_frame + mov ebx,16*65536 + 38 + int 0x40 + + mov edx,text_inframe + add ebx,20 + int 0x40 + + mov edx,text_fcframe + add ebx,20 + int 0x40 + + mov edx,text_face + add ebx,20 + int 0x40 + + mov edx,text_inface + add ebx,20 + int 0x40 + + mov edx,text_fcface + add ebx,20 + int 0x40 + + mov edx,text_text + add ebx,20 + int 0x40 + + mov edx,text_intext + add ebx,20 + int 0x40 + + mov edx,text_fctext + add ebx,20 + int 0x40 + + mov edx,text_reserved + add ebx,20 + int 0x40 + + mov edx,text_reserved + add ebx,20 + int 0x40 + + mov edx,text_reserved + add ebx,20 + int 0x40 + ret + +list_draw_btn_hex: + mov eax,47 + mov ebx,256+8 shl 16 + mov esi,[sc.gui_intext] + + mov ecx,[sc.btn_frame] + mov edx,170*65536 + 38 + int 0x40 + + mov ecx,[sc.btn_inframe] + add edx,20 + int 0x40 + + mov ecx,[sc.btn_fcframe] + add edx,20 + int 0x40 + + mov ecx,[sc.btn_face] + add edx,20 + int 0x40 + + mov ecx,[sc.btn_inface] + add edx,20 + int 0x40 + + mov ecx,[sc.btn_fcface] + add edx,20 + int 0x40 + + mov ecx,[sc.btn_text] + add edx,20 + int 0x40 + + mov ecx,[sc.btn_intext] + add edx,20 + int 0x40 + + mov ecx,[sc.btn_fctext] + add edx,20 + int 0x40 + + mov ecx,[sc.res_var_c] + add edx,20 + int 0x40 + + mov ecx,[sc.res_var_d] + add edx,20 + int 0x40 + + mov ecx,[sc.res_var_e] + add edx,20 + int 0x40 + ret + + +list_draw_gui_text: + mov eax,4 + mov ecx,[sc.gui_text] + add ecx,0xC0000000 + mov edi,[sc.gui_face] + + mov edx,text_frame + mov ebx,16*65536 + 38 + int 0x40 + + mov edx,text_inframe + add ebx,20 + int 0x40 + + mov edx,text_fcframe + add ebx,20 + int 0x40 + + mov edx,text_face + add ebx,20 + int 0x40 + + mov edx,text_inface + add ebx,20 + int 0x40 + + mov edx,text_fcface + add ebx,20 + int 0x40 + + mov edx,text_text + add ebx,20 + int 0x40 + + mov edx,text_intext + add ebx,20 + int 0x40 + + mov edx,text_fctext + add ebx,20 + int 0x40 + + mov edx,text_select + add ebx,20 + int 0x40 + + mov edx,text_shadow + add ebx,20 + int 0x40 + + mov edx,text_reserved + add ebx,20 + int 0x40 + ret + +list_draw_gui_hex: + mov eax,47 + mov ebx,256+8 shl 16 + mov esi,[sc.gui_intext] + + mov ecx,[sc.gui_frame] + mov edx,170*65536 + 38 + int 0x40 + + mov ecx,[sc.gui_inframe] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_fcframe] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_face] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_inface] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_fcface] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_text] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_intext] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_fctext] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_select] + add edx,20 + int 0x40 + + mov ecx,[sc.gui_shadow] + add edx,20 + int 0x40 + + mov ecx,[sc.res_var_f] + add edx,20 + int 0x40 + ret + + +list_draw_sup_text: + mov eax,4 + mov ecx,[sc.gui_text] + add ecx,0xC0000000 + mov edi,[sc.gui_face] + + mov edx,text_p_frame + mov ebx,16*65536 + 38 + int 0x40 + + mov edx,text_p_face + add ebx,20 + int 0x40 + + mov edx,text_p_text + add ebx,20 + int 0x40 + + mov edx,text_m_frame + add ebx,20 + int 0x40 + + mov edx,text_m_face + add ebx,20 + int 0x40 + + mov edx,text_m_text + add ebx,20 + int 0x40 + + mov edx,text_h_frame + add ebx,20 + int 0x40 + + mov edx,text_h_face + add ebx,20 + int 0x40 + + mov edx,text_h_text + add ebx,20 + int 0x40 + + mov edx,text_3dlight + add ebx,20 + int 0x40 + + mov edx,text_3ddark + add ebx,20 + int 0x40 + + mov edx,text_3dface + add ebx,20 + int 0x40 + ret + +list_draw_sup_hex: + mov eax,47 + mov ebx,256+8 shl 16 + mov esi,[sc.gui_intext] + + mov ecx,[sc.panel_frame] + mov edx,170*65536 + 38 + int 0x40 + + mov ecx,[sc.panel_body] + add edx,20 + int 0x40 + + mov ecx,[sc.panel_text] + add edx,20 + int 0x40 + + mov ecx,[sc.menu_frame] + add edx,20 + int 0x40 + + mov ecx,[sc.menu_body] + add edx,20 + int 0x40 + + mov ecx,[sc.menu_text] + add edx,20 + int 0x40 + + mov ecx,[sc.hint_frame] + add edx,20 + int 0x40 + + mov ecx,[sc.hint_body] + add edx,20 + int 0x40 + + mov ecx,[sc.hint_text] + add edx,20 + int 0x40 + + mov ecx,[sc.3d_light] + add edx,20 + int 0x40 + + mov ecx,[sc.3d_dark] + add edx,20 + int 0x40 + + mov ecx,[sc.3d_face] + add edx,20 + int 0x40 + ret \ No newline at end of file diff --git a/programs/other/personal/inc/mouse.inc b/programs/other/personal/inc/mouse.inc new file mode 100644 index 000000000..2c6ce6eb6 --- /dev/null +++ b/programs/other/personal/inc/mouse.inc @@ -0,0 +1,31 @@ +mouse_local: + ;................................................................................................. + ; Получаем координаты мыши относительно окна + ;................................................................................................. + mov eax,37 ; Функция 37 - работа с мышью + mov ebx,1 ; нам нужны глобальные координаты + int 0x40 ; eax = x*65536 + y, (x,y)=координаты курсора мыши + mov ecx,eax ; + shr ecx,16 ; ecx = x+1 + movzx edx,ax ; edx = y+1 + dec ecx ; ecx = x + dec edx ; edx = y + mov [mouse_x],ecx ; mouse_x = x + mov [mouse_y],edx ; mouse_y = y + ret ; Возвращаем управление +;end_mouse_local + +mouse_left: + pusha + xor ecx,ecx + mov eax,37 + mov ebx,2 + int 0x40 + cmp al,1 + jne @f + mov ecx,1 + @@: + mov [mouse_l],ecx + popa + ret +;end \ No newline at end of file diff --git a/programs/other/personal/inc/process.inc b/programs/other/personal/inc/process.inc new file mode 100644 index 000000000..61239b310 --- /dev/null +++ b/programs/other/personal/inc/process.inc @@ -0,0 +1,28 @@ +process_slot: + ;.......................................................................... + ; Получаем позицию окна потока в оконном стэке + ;.......................................................................... + mov eax,9 + mov ebx,buffer + mov ecx,-1 + int 0x40 + xor ecx,ecx + mov cx,word [ebx+4] + cmp eax,ecx + je @f + mov [win_slot],0 + ret + @@: + mov [win_slot],1 + ret + + ;mov [win_slot],eax + ;mov cx,word [ebx+4] + ;mov [win_stack],eax + + ;mov eax,18 + ;mov ebx,7 + ;int 0x40 + ;mov [win_slot],eax + ret +;end_process_info diff --git a/programs/other/personal/personal.asm b/programs/other/personal/personal.asm new file mode 100644 index 000000000..ed5b2376b --- /dev/null +++ b/programs/other/personal/personal.asm @@ -0,0 +1,192 @@ +;=============================================================================; +;============================[ HEADER ]===========================; +;=============================================================================; + use32 + org 0x0 + + db 'MENUET01' + dd 0x01 + dd START + dd I_END + dd 0x100000 + dd 0x100000 + dd 0x0 + dd 0x0 + + include 'macros.inc' +;=============================================================================; +;============================[ EVENTS ]===========================; +;=============================================================================; +START: + mcall 40,0xC0000027 ; устанавливаем маску событий + call button_init ; устанавливаем параметры кнопок + + mov eax,48 ; Функция 48 - стили отображения окон + mov ebx,3 ; Подфункция 3 - получить стандартные цвета окон. + mov ecx,sc ; Указатель на буфер размером edx байт, под структуру + mov edx,200 ; Размер таблицы цветов (должен быть 40 байт) + int 0x40 ; Прерывание + + mov eax,48 ; Функция 48 - стили отображения окон + mov ebx,2 ; Подфункция 3 - получить стандартные цвета окон. + mov ecx,sc ; Указатель на буфер размером edx байт, под структуру + mov edx,200 ; Размер таблицы цветов (должен быть 40 байт) + int 0x40 ; Прерывание + + mov eax,48 ; Функция 48 - стили отображения окон + mov ebx,3 ; Подфункция 3 - получить стандартные цвета окон. + mov ecx,sc ; Указатель на буфер размером edx байт, под структуру + mov edx,200 ; Размер таблицы цветов (должен быть 40 байт) + int 0x40 ; Прерывание + +red: + call draw_window +still: + mov eax,10 ; функция 10 - ждать события + int 0x40 + cmp eax,1 ; перерисовать окно ? + je red ; если да - на метку red + cmp eax,2 ; нажата клавиша ? + je key ; если да - на key + cmp eax,3 ; нажата кнопка ? + je button ; если да - на button + cmp eax,6 + je mouse + jmp still ; если другое событие - в начало цикла +;end_still + +key: ; нажата клавиша на клавиатуре + mov eax,2 ; функция 2 - считать код символа (в ah) (тут в принципе не нужна) + int 0x40 + jmp still ; вернуться к началу цикла +;end_key + +button: + mov eax,17 ; 17 - получить идентификатор нажатой кнопки + int 0x40 + cmp ah, 1 ; если нажата кнопка с номером 1, + jz bexit ; выходим + jmp still + bexit: + mov eax,-1 ; иначе конец программы + int 0x40 +;end_button + +mouse: + ; ; нажата ли лкм + call draw_edit + call mouse_local ; получаем координаты мыши относительно окна + call button_calc ; отслеживаем наведение курсора + call process_slot ; получаем позицию в оконном стеке + call button_draw ; отрисовываем кнопки + jmp still ; уходим на ожидание события + + +;============================[ CODE ]===========================; + + ret +;end_draw_result + + +;#___________________________________________________________________________________________________ +;****************************************************************************************************| +; ГЛАВНЫЙ МОДУЛЬ ОТРИСОВКИ ОКНА И ЭЛЕМЕНТОВ ПРИЛОЖЕНИЯ | +;----------------------------------------------------------------------------------------------------/ +draw_window: + mov eax,12 ; функция 12: означает, что будет рисоваться окно + mov ebx,1 ; 1,начало рисования + int 0x40 ; Прерывание + + + + mov eax,48 ; Функция 48 - стили отображения окон. + mov ebx,4 ; Подфункция 4 - возвращает eax = высота скина. + int 0x40 ; Прерывание + mov ecx,eax ; Запоминаем высоту скина + + xor eax,eax ; Очищаем eax (mov eax,0) (Функция 0) + mov ebx,200 shl 16+240 ; [координата по оси x]*65536 + [размер по оси x] + add ecx,200 shl 16+280 ; Высота скина + [координата по y]*65536 + [размер по y] + mov edx,[sc.win_body] ; Видимо стиль окна по дефолту + or edx,0x34000000 ; Или окно со скином фиксированных размеров + mov edi,title ; Заголовок окна + int 0x40 ; Прерывание + + call process_slot ; получаем позицию в оконном стеке + call button_draw + call draw_edit + call list_draw + + mov eax,12 ; функция 12: означает, что будет рисоваться окно + mov ebx,2 ; 1,начало рисования + int 0x40 ; Прерывание + + ret + + + +;===================================[ DATA ]==================================; +include 'inc/mouse.inc' ; мышь +include 'inc/process.inc' ; инфо о процессе +include 'inc/dtp.inc' ; структура новой таблицы +include 'inc/button.inc' ; самописные кнопки +include 'inc/edit.inc' ; эмуляция неактивного едита +include 'inc/list.inc' ; отрисовка списка + +;; window ------------------------------------------------- + sc new_colors ; новая таблица цветов + title db 'Color Table',0 ; заголовок + mouse_x dd 0 ; хранит глобальную х координату мыши + mouse_y dd 0 ; хранит глобальную у координату мыши + mouse_l dd 0 ; левая кнопка 1 - нажата 0 - нет + win_slot dd 0 ; 0- окно не на верху, 1- на верху + buffer rb 80 ; под 9 функцию + +;; button ------------------------------------------------- + bnext new_button + bback new_button +arrowa: + file 'l.raw' +arrowb: + file 'r.raw' +;; edit --------------------------------------------------- + edit_cnt dd 1 ; counter + edit_win db 'WINDOW',0 ; 1 + edit_btn db 'BUTTON',0 ; 2 + edit_gui db 'ELEMENT',0 ; 3 + edit_cld db 'SUPPORT',0 ; 4 + +;; list win ----------------------------------------------- + text_frame db 'Frame (Activate):',0 + text_inframe db 'Frame (Inactivate):',0 + text_fcframe db 'Frame (Focus):',0 + text_face db 'Face (Activate):',0 + text_inface db 'Face (Inactivate):',0 + text_fcface db 'Face (Focus):',0 + text_border db 'Border (Activate):',0 + text_inborder db 'Border (Inactivate):',0 + text_wtext db 'Text:',0 + text_graytext db 'Graytext:',0 + text_title db 'Title:',0 + text_body db 'Body:',0 + text_reserved db 'Reserved:',0 + text_text db 'Text (Activate):',0 + text_intext db 'Text (Inactivate):',0 + text_fctext db 'Text (Focus):',0 + text_3dlight db '3D Light:',0 + text_3ddark db '3D Dark:',0 + text_3dface db '3D Face:',0 + text_shadow db 'Shadow:',0 + text_select db 'Select:',0 + text_p_face db 'Panel Body:',0 + text_p_frame db 'Panel Frame:',0 + text_p_text db 'Panel Text:',0 + text_m_face db 'Menu Body:',0 + text_m_frame db 'Menu Frame:',0 + text_m_text db 'Menu Text:',0 + text_h_face db 'Hint Body:',0 + text_h_frame db 'Hint Frame:',0 + text_h_text db 'Hint Text:',0 + text_hex db '#',0 +;---------------------------------------------------------- +I_END: diff --git a/programs/other/personal/readme.txt b/programs/other/personal/readme.txt new file mode 100644 index 000000000..fae99a5b1 --- /dev/null +++ b/programs/other/personal/readme.txt @@ -0,0 +1,34 @@ +;****************************************************************************************************| +; Program Personal - ЏҐаб®­ «Ё§ жЁп ў­Ґи­ҐЈ® ўЁ¤  Ћ‘ (c) Sergei Steshin (Akyltist) | +;----------------------------------------------------------------------------------------------------| +;; Charset:DOS-866 Font:Courier New Size:9pt | +;..................................................................................................... +;; compiler: FASM 1.69.31 | +;; version: 0.1.0 | +;; last update: 10/04/2014 | +;; e-mail: dr.steshin@gmail.com | +;..................................................................................................... +;; History: | +;..................................................................................................... +;; All rights reserved. | +;; | +;; Redistribution and use in source and binary forms, with or without modification, are permitted | +;; provided that the following conditions are met: | +;; * Redistributions of source code must retain the above copyright notice, this list of | +;; conditions and the following disclaimer. | +;; * Redistributions in binary form must reproduce the above copyright notice, this list of | +;; conditions and the following disclaimer in the documentation and/or other materials | +;; provided with the distribution. | +;; * Neither the name of the nor the names of its contributors may be used to | +;; endorse or promote products derived from this software without specific prior written | +;; permission. | +;; | +;; THIS SOFTWARE IS PROVIDED BY Sergei Steshin ''AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, | +;; INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A | +;; PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BE LIABLE FOR ANY DIRECT, | +;; INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED | +;; TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS | +;; INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT | +;; LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS | +;; SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. | +;....................................................................................................| \ No newline at end of file