Subversion Repositories Kolibri OS

Rev

Rev 5900 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1.     use32
  2.     org     0
  3.     db      'MENUET01'
  4.     dd      1, @entry, @end, @memory, @stack, 0, 0
  5.  
  6.     include "../../macros.inc"
  7.     include "../../proc32.inc"
  8. ;    include "../../debug.inc"
  9.     include "../../notify.inc"
  10.     include "../../string.inc"
  11.     include "../../cmp.inc"
  12.  
  13.  @entry:
  14.     mcall   68, 11
  15.  
  16.  ;; RUN NOTIFY
  17.     call    make_param
  18.     mcall   70, fi_launch
  19.  
  20.  ;; CONVERT PID TO STR
  21.     mov     ebx, 10
  22.     mov     ecx, 0
  23.   @@:
  24.     mov     edx, 0
  25.     div     ebx
  26.     push    edx
  27.     inc     ecx
  28.     cmpne   eax, 0, @b
  29.  
  30.     mov     ebx, ctrl.name
  31.   @@:
  32.     pop     eax
  33.     add     al, "0"
  34.     mov     [ebx], al
  35.     inc     ebx
  36.     loop    @b
  37.  
  38.  ;; ADD POSTFIX TO STR
  39.     mov     dword [ebx + 0], "-NOT"
  40.     mov     dword [ebx + 4], "IFY"
  41.  
  42.  ;; OPEN CONTROLLER (0x08 + 0x01 -- CREATE AND READ/WRITE)
  43.     mcall   68, 22, ctrl.name, 2048, 0x09
  44.     mov     [ctrl.addr], eax
  45.  
  46.  ;; WAIT UNTIL CONTROLLER BECOMES READY TO USE
  47.     add     eax, NTCTRL_READY
  48.   @@:
  49.     mcall   5, 1
  50.     cmpe    byte [eax], 0, @b
  51.  
  52.  ;; LOOP OF NOTIFIES CHANGES
  53.   @@:
  54.   ;; SHIFT TEXT
  55.     call    shift
  56.   ;; ADD UNSHIFTABLE TEXT
  57.     mov     byte [params], 0
  58.     call    make_text
  59.  
  60.   ;; SEND TEXT TO NOTIFY
  61.     mov     eax, [ctrl.addr]
  62.     add     eax, NTCTRL_TEXT
  63.     stdcall string.copy, params, eax
  64.  
  65.   ;; APPLY NEW TEXT
  66.     mov     eax, [ctrl.addr]
  67.     add     eax, NTCTRL_APPLY_TEXT
  68.     mov     byte [eax], 1
  69.  
  70.   ;; CLOSE NOTIFY IF TIME IS END
  71.     cmpe    byte [sz_time], "0" - 1, .exit
  72.  
  73.   ;; WAIT AND DO NEXT ITERATION
  74.     mcall   5, 10
  75.     jmp     @b
  76.  
  77.  .exit:
  78.   ;; CLOSE NOTIFY
  79.     mov     eax, [ctrl.addr]
  80.     add     eax, NTCTRL_CLOSE
  81.     mov     byte [eax], 1
  82.  
  83.     mcall   -1
  84.  
  85. ;-------------------------------------------------------------------------------
  86.  shift:
  87.  ;; SHIFT TEXT
  88.     mov     eax, sz_text
  89.     mov     dh, [eax]
  90.   @@:
  91.     mov     dl, [eax + 1]
  92.     mov     [eax], dl
  93.     inc     eax
  94.     cmpne   byte [eax + 1], 0, @b
  95.     mov     [eax], dh
  96.  
  97.     inc     byte [timer]
  98.     cmpne   byte [timer], 10, .skip_changes
  99.     sub     byte [timer], 10
  100.  
  101.  ;; CHANGE TIMER TEXT
  102.     dec     byte [sz_time]
  103.  
  104.  ;; CHANGE ICON
  105.     mov     eax, [ctrl.addr]
  106.     add     eax, NTCTRL_ICON
  107.     inc     byte [eax]
  108.     cmpne   byte [eax], 12, @f
  109.     sub     byte [eax], 11
  110.   @@:
  111.  
  112.  ;; APPLY NEW ICON
  113.     mov     eax, [ctrl.addr]
  114.     add     eax, NTCTRL_APPLY_ICON
  115.     mov     byte [eax], 1
  116.  
  117.  ;; CHANGE TITLE
  118.     mov     eax, [ctrl.addr]
  119.     add     eax, NTCTRL_TITLE
  120.     mov     dl, 1
  121.     sub     dl, [eax]
  122.     mov     [eax], dl
  123.  
  124.  ;; APPLY NEW TITLE
  125.     mov     eax, [ctrl.addr]
  126.     add     eax, NTCTRL_APPLY_TITLE
  127.     mov     byte [eax], 1
  128.  
  129.  .skip_changes:
  130.  
  131.     ret
  132. ;-------------------------------------------------------------------------------
  133.  make_text:
  134.     stdcall string.concatenate, sz_text, params
  135.     stdcall string.concatenate, sz_sec_line_start, params
  136.     stdcall string.concatenate, sz_time, params
  137.     stdcall string.concatenate, sz_sec_line_end, params
  138.  
  139.     ret
  140. ;-------------------------------------------------------------------------------
  141.  make_param:
  142.     stdcall string.copy, sz_quote, params
  143.     call    make_text
  144.     stdcall string.concatenate, sz_quote, params
  145.     stdcall string.concatenate, sz_flags, params
  146.  
  147.     ret
  148. ;-------------------------------------------------------------------------------
  149.  
  150.  sz_time:
  151.     db "5", 0
  152.  sz_text:
  153.     db "Hello, World!!! It is a marquee!    ", 0
  154.  sz_quote:
  155.     db "'", 0
  156.  sz_sec_line_start:
  157.     db 10, "Will close after ", 0
  158.  sz_sec_line_end:
  159.     db " seconds", 0
  160.  sz_flags:
  161.     db "Idc", 0
  162.  
  163.  fi_launch:
  164.     dd      7, 0, params, 0, 0
  165.     db      "@notify", 0
  166.  
  167.  @end:
  168. ;=====================================================================
  169.  timer  rb 1
  170.  params rb 256
  171.  ctrl:
  172.   .name rb 32
  173.   .addr rd 1
  174.         rb 2048
  175.  @stack:
  176.  
  177.  @memory: