kolibrios-fun/programs/system/notify3/test_ctrl.asm
eAndrew 1dce2c44d5 Notify 3.3: add controllers support, a lot of fixes, optimizations and great refactoring
git-svn-id: svn://kolibrios.org@5892 a494cfbc-eb01-0410-851d-a64ba20cac60
2015-11-07 20:44:13 +00:00

177 lines
3.8 KiB
NASM

use32
org 0
db 'MENUET01'
dd 1, @entry, @end, @memory, @stack, 0, 0
include "../../macros.inc"
include "../../proc32.inc"
; include "../../debug.inc"
include "../../notify.inc"
include "../../string.inc"
include "../../cmp.inc"
@entry:
mcall 68, 11
;; RUN NOTIFY
call make_param
mcall 70, fi_launch
;; CONVERT PID TO STR
mov ebx, 10
mov ecx, 0
@@:
mov edx, 0
div ebx
push edx
inc ecx
cmpne eax, 0, @b
mov ebx, ctrl.name
@@:
pop eax
add al, "0"
mov [ebx], al
inc ebx
loop @b
;; ADD POSTFIX TO STR
mov dword [ebx + 0], "-NOT"
mov dword [ebx + 4], "IFY"
;; OPEN CONTROLLER (0x08 + 0x01 -- CREATE AND READ/WRITE)
mcall 68, 22, ctrl.name, 2048, 0x09
mov [ctrl.addr], eax
;; WAIT UNTIL CONTROLLER BECOMES READY TO USE
add eax, NTCTRL_READY
@@:
mcall 5, 1
cmpe byte [eax], 0, @b
;; LOOP OF NOTIFIES CHANGES
@@:
;; SHIFT TEXT
call shift
;; ADD UNSHIFTABLE TEXT
mov byte [params], 0
call make_text
;; SEND TEXT TO NOTIFY
mov eax, [ctrl.addr]
add eax, NTCTRL_TEXT
stdcall string.copy, params, eax
;; APPLY NEW TEXT
mov eax, [ctrl.addr]
add eax, NTCTRL_APPLY_TEXT
mov byte [eax], 1
;; CLOSE NOTIFY IF TIME IS END
cmpe byte [sz_time], "0" - 1, .exit
;; WAIT AND DO NEXT ITERATION
mcall 5, 10
jmp @b
.exit:
;; CLOSE NOTIFY
mov eax, [ctrl.addr]
add eax, NTCTRL_CLOSE
mov byte [eax], 1
mcall -1
;-------------------------------------------------------------------------------
shift:
;; SHIFT TEXT
mov eax, sz_text
mov dh, [eax]
@@:
mov dl, [eax + 1]
mov [eax], dl
inc eax
cmpne byte [eax + 1], 0, @b
mov [eax], dh
inc byte [timer]
cmpne byte [timer], 10, .skip_changes
sub byte [timer], 10
;; CHANGE TIMER TEXT
dec byte [sz_time]
;; CHANGE ICON
mov eax, [ctrl.addr]
add eax, NTCTRL_ICON
inc byte [eax]
cmpne byte [eax], 12, @f
sub byte [eax], 11
@@:
;; APPLY NEW ICON
mov eax, [ctrl.addr]
add eax, NTCTRL_APPLY_ICON
mov byte [eax], 1
;; CHANGE TITLE
mov eax, [ctrl.addr]
add eax, NTCTRL_TITLE
mov dl, 1
sub dl, [eax]
mov [eax], dl
;; APPLY NEW TITLE
mov eax, [ctrl.addr]
add eax, NTCTRL_APPLY_TITLE
mov byte [eax], 1
.skip_changes:
ret
;-------------------------------------------------------------------------------
make_text:
stdcall string.concatenate, sz_text, params
stdcall string.concatenate, sz_sec_line_start, params
stdcall string.concatenate, sz_time, params
stdcall string.concatenate, sz_sec_line_end, params
ret
;-------------------------------------------------------------------------------
make_param:
stdcall string.copy, sz_quote, params
call make_text
stdcall string.concatenate, sz_quote, params
stdcall string.concatenate, sz_flags, params
ret
;-------------------------------------------------------------------------------
sz_time:
db "5", 0
sz_text:
db "Hello, World!!! It is a marquee! ", 0
sz_quote:
db "'", 0
sz_sec_line_start:
db 10, "Will close after ", 0
sz_sec_line_end:
db " seconds", 0
sz_flags:
db "Idc", 0
fi_launch:
dd 7, 0, params, 0, 0
db "@notify", 0
@end:
;=====================================================================
timer rb 1
params rb 256
ctrl:
.name rb 32
.addr rd 1
rb 2048
@stack:
@memory: