kolibrios-fun/programs/other/mousepos/mousepos.asm

100 lines
2.0 KiB
NASM
Raw Normal View History

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