diff --git a/programs/other/mousepos/mousepos.asm b/programs/other/mousepos/mousepos.asm new file mode 100755 index 0000000000..96df73fbfe --- /dev/null +++ b/programs/other/mousepos/mousepos.asm @@ -0,0 +1,99 @@ +include "../../macros.inc" +include "../../KOSfuncs.inc" + +KOS_APP_START + +CODE + +mcall SF_SYSTEM, SSF_WINDOW_BEHAVIOR, SSSF_SET_WB, -1, 1 +mcall SF_STYLE_SETTINGS, SSF_GET_COLORS, syscl, sizeof.system_colors +mcall SF_SET_EVENTS_MASK, EVM_REDRAW + EVM_MOUSE + EVM_KEY +mcall SF_KEYBOARD, SSF_SET_INPUT_MODE, 1 + +wait_event: + mcall SF_WAIT_EVENT + + cmp eax, EV_REDRAW + jz redraw_event + + cmp eax, EV_MOUSE + jz draw_text + + cmp eax, EV_KEY + jz key_event + + jmp wait_event + +key_event: + mcall SF_GET_KEY + cmp eax, 256 ;Escape + jnz wait_event + mcall SF_TERMINATE_PROCESS + +redraw_event: + mcall SF_REDRAW, SSF_BEGIN_DRAW + mcall SF_CREATE_WINDOW, <0, WIN_W>, <0, WIN_H>, 0x01000000, 0x1000000, 0 + mcall SF_DRAW_RECT, <0, WIN_W + 1>, <0, WIN_H + 1>, [syscl.work] + mcall SF_REDRAW, SSF_END_DRAW + +draw_text: + ; Draw labels + mov ecx, 0xF0000000 + or ecx, [syscl.work_text] + mcall SF_DRAW_TEXT, <10, 10>, , gxlabel, , [syscl.work] + mcall , <10, 30>, , gylabel + mcall , <10, 50>, , pidlabel + mcall , <10, 70>, , lxlabel + mcall , <10, 90>, , lylabel + + ; Get mouse porition + mcall SF_MOUSE_GET, SSF_SCREEN_POSITION + push eax + + ; Draw coords + mov esi, 0x50000000 + or esi, [syscl.work_text] + xor ecx, ecx + mov cx, [esp + 2] + mcall SF_DRAW_NUMBER, 0x00040000, , <102, 10> + mov cx, [esp] + mcall , , , <102, 30> + + ; Get pixel owner + xor ebx, ebx + mov bx, [esp + 2] + mov cx, [esp] + mcall SF_GET_PIXEL_OWNER + + ; Draw pixel owner + xchg ecx, eax + mcall SF_DRAW_NUMBER, 0x00040000, , <102, 50> + + mcall SF_THREAD_INFO, pinf + + xor ecx, ecx + mov cx, [esp + 2] + sub ecx, [pinf.box.left] + mcall SF_DRAW_NUMBER, 0x00040000, , <102, 70> + mov cx, [esp] + sub ecx, [pinf.box.top] + mcall , , , <102, 90> + + pop eax + jmp wait_event + +DATA + +WIN_W = 200 +WIN_H = 150 +gxlabel db 'Global X:', 0 +gylabel db 'Global Y:', 0 +lxlabel db 'Local X:', 0 +lylabel db 'Local Y:', 0 +pidlabel db 'PID:', 0 + +syscl system_colors +pinf process_information + +UDATA +KOS_APP_END