Subversion Repositories Kolibri OS

Rev

Rev 5900 | Go to most recent revision | Details | Last modification | View Log | RSS feed

Rev Author Line No. Line
5892 eAndrew 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: