use32
    org     0
    db	    'MENUET01'
    dd	    1, @entry, @end, @memory, @stack, 0, 0

    include "../../macros.inc"
    include "../../proc32.inc"
;    include "../../debug.inc"
    include "../../string.inc"
	
    include "notify.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

 ;; CONFIG PBAR
    mov     eax, [ctrl.addr]
    add     eax, NTCTRL_PBAR_MAX
    mov     dword [eax], 9

    mov     eax, [ctrl.addr]
    add     eax, NTCTRL_PBAR_CUR
    mov     dword [eax], 9

    mov     eax, [ctrl.addr]
    add     eax, NTCTRL_APPLY_PBAR
    mov     byte [eax], 1

 ;; 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", .exit

  ;; WAIT AND DO NEXT ITERATION
    mcall   5, 20
    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], 5, .skip_changes
    sub     byte [timer], 5

 ;; 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

 ;; CHANGE PBAR
    mov     eax, [ctrl.addr]
    add     eax, NTCTRL_PBAR_CUR
    dec     dword [eax]

 ;; APPLY PBAR
    mov     eax, [ctrl.addr]
    add     eax, NTCTRL_APPLY_PBAR
    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 "9", 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 "Idcp", 0

 fi_launch:
    dd	    7, 0, params, 0, 0
    ;db      "/usbhd0/2/svn/programs/system/notify3/notify", 0
    db	    "@notify", 0

 @end:
;=====================================================================
 timer	rb 1
 params rb 256
 ctrl:
  .name rb 32
  .addr rd 1
	rb 2048
 @stack:

 @memory: