forked from KolibriOS/kolibrios
177 lines
3.8 KiB
NASM
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:
|