Subversion Repositories Kolibri OS

Compare Revisions

Regard whitespace Rev 5891 → Rev 5892

/programs/system/notify3/test_ctrl.asm
0,0 → 1,177
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: