Subversion Repositories Kolibri OS

Rev

Rev 7988 | Only display areas with differences | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 7988 Rev 10017
1
use32
1
use32
2
    org     0
2
    org     0
3
    db	    'MENUET01'
3
    db      'MENUET01'
4
    dd	    1, @ENTRY, @end, @memory, @stack, @params, 0
4
    dd      1, @ENTRY, @end, @memory, @stack
-
 
5
M01header.params:
-
 
6
    dd      @params, 0
5
 
7
 
6
    include "../../macros.inc"
8
    include "../../macros.inc"
7
    include "../../proc32.inc"
9
    include "../../proc32.inc"
8
    include "../../dll.inc"
10
    include "../../dll.inc"
9
;    include "../../debug.inc"
11
;    include "../../debug.inc"
10
    include "../../string.inc"
12
    include "../../string.inc"
11
    
13
    
12
    include "notify.inc"
14
    include "notify.inc"
13
 
15
 
14
 LINEH	    equ 12
16
 LINEH      equ 12
15
 MARGIN     equ 12
17
 MARGIN     equ 12
16
 ICONS	    equ 11
18
 ICONS      equ 11
17
 
19
 
18
;-------------------------------------------------------------------------------
20
;-------------------------------------------------------------------------------
19
 
21
 
20
 @ENTRY:
22
 @ENTRY:
21
;; INIT HEAP
23
;; INIT HEAP
22
    mcall   68, 11
24
    mcall   68, 11
23
 
25
 
24
;; SAVE FOCUSED WINDOW
26
;; SAVE FOCUSED WINDOW
25
    mcall   18, 7
27
    mcall   18, 7
26
    mov     ecx, eax
28
    mov     ecx, eax
27
    mcall   9, buffer
29
    mcall   9, buffer
28
    m2m     dword [prev_pid], dword [buffer + 30]
30
    m2m     dword [prev_pid], dword [buffer + 30]
29
 
31
 
30
;; MAKE IT ALWAYS ON TOP
32
;; MAKE IT ALWAYS ON TOP
31
    mcall   18, 25, 2, -1, 1
33
    mcall   18, 25, 2, -1, 1
32
 
34
 
33
;; SET STD PARAMS, IF IT NEEDS
35
;; SET STD PARAMS, IF IT NEEDS
34
    mov     eax, @params
36
    mov     eax, [M01header.params]
35
    cmpne   byte [@params], 0, @f
37
    cmpne   byte [eax], 0, @f
36
    mov     eax, sz_std
38
    mov     eax, sz_std
37
  @@:
39
  @@:
38
    mov     [params.source], eax
40
    mov     [params.source], eax
39
 
41
 
40
;; PARSE ARGUMENTS
42
;; PARSE ARGUMENTS
41
    mov     esi, 0
43
    mov     esi, 0
42
    call    parse_text
44
    call    parse_text
43
    call    parse_flags
45
    call    parse_flags
44
    movzx   ebx, [params.icon]
46
    movzx   ebx, [params.icon]
45
 
47
 
46
;; GET PID
48
;; GET PID
47
    mcall   9, buffer, -1
49
    mcall   9, buffer, -1
48
    mov     eax, dword [buffer + 30]
50
    mov     eax, dword [buffer + 30]
49
 
51
 
50
;; CONVERT PID TO STR
52
;; CONVERT PID TO STR
51
    mov     ebx, 10
53
    mov     ebx, 10
52
    mov     ecx, 0
54
    mov     ecx, 0
53
  @@:
55
  @@:
54
    mov     edx, 0
56
    mov     edx, 0
55
    div     ebx
57
    div     ebx
56
    push    edx
58
    push    edx
57
    inc     ecx
59
    inc     ecx
58
    cmpne   eax, 0, @b
60
    cmpne   eax, 0, @b
59
 
61
 
60
    mov     ebx, ctrl.name
62
    mov     ebx, ctrl.name
61
  @@:
63
  @@:
62
    pop     eax
64
    pop     eax
63
    add     al, "0"
65
    add     al, "0"
64
    mov     [ebx], al
66
    mov     [ebx], al
65
    inc     ebx
67
    inc     ebx
66
    loop    @b
68
    loop    @b
67
 
69
 
68
    mov     dword [ebx + 0], "-NOT"
70
    mov     dword [ebx + 0], "-NOT"
69
    mov     dword [ebx + 4], "IFY"
71
    mov     dword [ebx + 4], "IFY"
70
 
72
 
71
;; LOAD LIBRARIES
73
;; LOAD LIBRARIES
72
    stdcall dll.Load, @imports
74
    stdcall dll.Load, @imports
73
 
75
 
74
;; GET SIZE OF ICONS
76
;; GET SIZE OF ICONS
75
    mcall   70, fi
77
    mcall   70, fi
76
    mov     edx, dword [buffer + 32]
78
    mov     edx, dword [buffer + 32]
77
    shl     edx, 2
79
    shl     edx, 2
78
 
80
 
79
;; ALLOCATE MEMORY FOR THIS
81
;; ALLOCATE MEMORY FOR THIS
80
    stdcall mem.Alloc, edx
82
    stdcall mem.Alloc, edx
81
    mov     [img_data.file], eax
83
    mov     [img_data.file], eax
82
 
84
 
83
;; READ ICONS
85
;; READ ICONS
84
    mov     dword [fi + 00], 0
86
    mov     dword [fi + 00], 0
85
    mov     dword [fi + 12], edx
87
    mov     dword [fi + 12], edx
86
    mov     dword [fi + 16], eax
88
    mov     dword [fi + 16], eax
87
    mcall   70, fi
89
    mcall   70, fi
88
 
90
 
89
;; DECODE ICONS
91
;; DECODE ICONS
90
    stdcall dword [img.decode], dword [img_data.file], ebx, 0
92
    stdcall dword [img.decode], dword [img_data.file], ebx, 0
91
    mov     dword [img_data.obj], eax
93
    mov     dword [img_data.obj], eax
92
 
94
 
93
;; CALC HEIGHT
95
;; CALC HEIGHT
94
    mov     eax, [text.lines]
96
    mov     eax, [text.lines]
95
    add     eax, 2
97
    add     eax, 2
96
    imul    eax, LINEH
98
    imul    eax, LINEH
97
    mov     [window.height], eax
99
    mov     [window.height], eax
98
 
100
 
99
;; CALC OFFSET OF TEXT
101
;; CALC OFFSET OF TEXT
100
    mov     dword [text.offset], MARGIN
102
    mov     dword [text.offset], MARGIN
101
    cmpe    byte [params.icon], 0, @f
103
    cmpe    byte [params.icon], 0, @f
102
    add     dword [text.offset], MARGIN + 24
104
    add     dword [text.offset], MARGIN + 24
103
  @@:
105
  @@:
104
 
106
 
105
;; CALC WIDTH
107
;; CALC WIDTH
106
    mov     eax, [text.max_len]
108
    mov     eax, [text.max_len]
107
    imul    eax, 6
109
    imul    eax, 6
108
    add     eax, MARGIN
110
    add     eax, MARGIN
109
    add     eax, [text.offset]
111
    add     eax, [text.offset]
110
    mov     [window.width], eax
112
    mov     [window.width], eax
111
 
113
 
112
    mcall   14
114
    mcall   14
113
    mov     ebx, eax
115
    mov     ebx, eax
114
    movzx   ebx, bx
116
    movzx   ebx, bx
115
    mov     [scr.height], ebx
117
    mov     [scr.height], ebx
116
    shr     eax, 16
118
    shr     eax, 16
117
    mov     [scr.width], eax
119
    mov     [scr.width], eax
118
    sub     eax, [window.width]
120
    sub     eax, [window.width]
119
    sub     eax, LINEH
121
    sub     eax, LINEH
120
    mov     [window.x], eax
122
    mov     [window.x], eax
121
 
123
 
122
;; CALC PBAR
124
;; CALC PBAR
123
    mov     eax, [window.width]
125
    mov     eax, [window.width]
124
    sub     eax, [text.offset]
126
    sub     eax, [text.offset]
125
    sub     eax, MARGIN
127
    sub     eax, MARGIN
126
    mov     [pbar.width], eax
128
    mov     [pbar.width], eax
127
 
129
 
128
;; CALC Y
130
;; CALC Y
129
    mcall   68, 22, sz_shname, 256 + 512, 4 + 1 ;OPEN_ALWAYS AND WRITE
131
    mcall   68, 22, sz_shname, 256 + 512, 4 + 1 ;OPEN_ALWAYS AND WRITE
130
    add     eax, 512
132
    add     eax, 512
131
    mov     [shm], eax
133
    mov     [shm], eax
132
 
134
 
133
 s_search:
135
 s_search:
134
    mov     eax, [shm]
136
    mov     eax, [shm]
135
 
137
 
136
    mov     ebx, 0
138
    mov     ebx, 0
137
    mov     ecx, [text.lines]
139
    mov     ecx, [text.lines]
138
    add     ecx, 3
140
    add     ecx, 3
139
 
141
 
140
    push    eax ebx
142
    push    eax ebx
141
 
143
 
142
    mov     eax, [scr.height]
144
    mov     eax, [scr.height]
143
    mov     edx, 0
145
    mov     edx, 0
144
    mov     ebx, LINEH
146
    mov     ebx, LINEH
145
    div     ebx
147
    div     ebx
146
    mov     edx, eax
148
    mov     edx, eax
147
    add     edx, [shm]
149
    add     edx, [shm]
148
    sub     edx, ecx
150
    sub     edx, ecx
149
    inc     edx
151
    inc     edx
150
 
152
 
151
    pop     ebx eax
153
    pop     ebx eax
152
 
154
 
153
 s_area:
155
 s_area:
154
    cmpe    [eax], byte 1, .is_1
156
    cmpe    [eax], byte 1, .is_1
155
 
157
 
156
 .is_0:
158
 .is_0:
157
    inc     ebx
159
    inc     ebx
158
    cmpe    ebx, ecx, s_ok
160
    cmpe    ebx, ecx, s_ok
159
    jmp     .next
161
    jmp     .next
160
 
162
 
161
 .is_1:
163
 .is_1:
162
    mov     ebx, 0
164
    mov     ebx, 0
163
 
165
 
164
 .next:
166
 .next:
165
    inc     eax
167
    inc     eax
166
    cmple   eax, edx, s_area
168
    cmple   eax, edx, s_area
167
 
169
 
168
    mcall   5, 10
170
    mcall   5, 10
169
    jmp     s_search
171
    jmp     s_search
170
 
172
 
171
 s_ok:
173
 s_ok:
172
    sub     eax, ecx
174
    sub     eax, ecx
173
    inc     eax
175
    inc     eax
174
    mov     [shm.our], eax
176
    mov     [shm.our], eax
175
 
177
 
176
    mov     edx, eax
178
    mov     edx, eax
177
    sub     edx, [shm]
179
    sub     edx, [shm]
178
    inc     edx
180
    inc     edx
179
    imul    edx, LINEH
181
    imul    edx, LINEH
180
    mov     [window.y], edx
182
    mov     [window.y], edx
181
 
183
 
182
    push    eax ebx
184
    push    eax ebx
183
    mcall   48, 5
185
    mcall   48, 5
184
    shr     ebx, 16
186
    shr     ebx, 16
185
    add     [window.y], ebx
187
    add     [window.y], ebx
186
    pop     ebx eax
188
    pop     ebx eax
187
 
189
 
188
  @@:
190
  @@:
189
    mov     [eax], byte 1
191
    mov     [eax], byte 1
190
    inc     eax
192
    inc     eax
191
    loop    @b
193
    loop    @b
192
 
194
 
193
 ;----------------------------
195
 ;----------------------------
194
 
196
 
195
;; SET EVENT MASK
197
;; SET EVENT MASK
196
    mcall   40, 101b
198
    mcall   40, 101b
197
 
199
 
198
;; INIT TIMER
200
;; INIT TIMER
199
    mov     eax, 60
201
    mov     eax, 60
200
    imul    eax, [text.lines]
202
    imul    eax, [text.lines]
201
    mov     [timer], eax
203
    mov     [timer], eax
202
    mov     dword [timer.step], 1
204
    mov     dword [timer.step], 1
203
    cmpne   byte [params.atcl], 1, @f
205
    cmpne   byte [params.atcl], 1, @f
204
    mov     dword [timer.step], 0
206
    mov     dword [timer.step], 0
205
  @@:
207
  @@:
206
 
208
 
207
;; INIT WINDOW
209
;; INIT WINDOW
208
    call    init_window
210
    call    init_window
209
 
211
 
210
;; RESTORE FOCUS
212
;; RESTORE FOCUS
211
    mcall   18, 21, [prev_pid]
213
    mcall   18, 21, [prev_pid]
212
    mov     ecx, eax
214
    mov     ecx, eax
213
    mcall   18, 3
215
    mcall   18, 3
214
 
216
 
215
    jmp     redraw
217
    jmp     redraw
216
 
218
 
217
 ;----------------------------
219
 ;----------------------------
218
 
220
 
219
 update:
221
 update:
220
    mcall   23, 10
222
    mcall   23, 10
221
    cmpe    al, EV_REDRAW, redraw
223
    cmpe    al, EV_REDRAW, redraw
222
    cmpe    al, EV_BUTTON, button
224
    cmpe    al, EV_BUTTON, button
223
 
225
 
224
    mov     edi, update
226
    mov     edi, update
225
 
227
 
226
;; TRY OPEN CONTROLLER
228
;; TRY OPEN CONTROLLER
227
    cmpe    byte [params.ctrl], 1, .fail_controller_open
229
    cmpe    byte [params.ctrl], 1, .fail_controller_open
228
    mcall   68, 22, ctrl.name, , 0x01
230
    mcall   68, 22, ctrl.name, , 0x01
229
    cmpe    eax, 0, .fail_controller_open
231
    cmpe    eax, 0, .fail_controller_open
230
    mov     byte [params.ctrl], 1
232
    mov     byte [params.ctrl], 1
231
    mov     [ctrl.addr], eax
233
    mov     [ctrl.addr], eax
232
 
234
 
233
;; COPY TEXT TO CTRL
235
;; COPY TEXT TO CTRL
234
    add     eax, NTCTRL_TEXT
236
    add     eax, NTCTRL_TEXT
235
    mov     ebx, text.buffer
237
    mov     ebx, text.buffer
236
 
238
 
237
    mov     ecx, [text.lines]
239
    mov     ecx, [text.lines]
238
    cmpne   byte [params.pbar], 1, @f
240
    cmpne   byte [params.pbar], 1, @f
239
    dec     ecx
241
    dec     ecx
240
  @@:
242
  @@:
241
 
243
 
242
 .copy_start:
244
 .copy_start:
243
    cmpe     ecx, 0, .copy_end
245
    cmpe     ecx, 0, .copy_end
244
    mov      dl, [ebx]
246
    mov      dl, [ebx]
245
    cmpne    dl, 0, @f
247
    cmpne    dl, 0, @f
246
    mov      dl, 10
248
    mov      dl, 10
247
    dec      ecx
249
    dec      ecx
248
  @@:
250
  @@:
249
    mov      [eax], dl
251
    mov      [eax], dl
250
    inc      eax
252
    inc      eax
251
    inc      ebx
253
    inc      ebx
252
    jmp      .copy_start
254
    jmp      .copy_start
253
 .copy_end:
255
 .copy_end:
254
    mov      byte [eax - 1], 0
256
    mov      byte [eax - 1], 0
255
 
257
 
256
;; COPY FLAGS TO CTRL
258
;; COPY FLAGS TO CTRL
257
    mov      eax, [ctrl.addr]
259
    mov      eax, [ctrl.addr]
258
    add      eax, NTCTRL_ICON
260
    add      eax, NTCTRL_ICON
259
    mov      dl, [params.icon]
261
    mov      dl, [params.icon]
260
    mov      [eax], dl
262
    mov      [eax], dl
261
 
263
 
262
    mov      eax, [ctrl.addr]
264
    mov      eax, [ctrl.addr]
263
    add      eax, NTCTRL_TITLE
265
    add      eax, NTCTRL_TITLE
264
    mov      dl,  [params.title]
266
    mov      dl,  [params.title]
265
    mov      [eax], dl
267
    mov      [eax], dl
266
 
268
 
267
;; SET CONTROLLER READY
269
;; SET CONTROLLER READY
268
    mov     eax, [ctrl.addr]
270
    mov     eax, [ctrl.addr]
269
    add     eax, NTCTRL_READY
271
    add     eax, NTCTRL_READY
270
    mov     byte [eax], 1
272
    mov     byte [eax], 1
271
 .fail_controller_open:
273
 .fail_controller_open:
272
 
274
 
273
 
275
 
274
    cmpe    [params.ctrl], 0, .no_ctrl
276
    cmpe    [params.ctrl], 0, .no_ctrl
275
;; TEST TEXT
277
;; TEST TEXT
276
    mov     eax, [ctrl.addr]
278
    mov     eax, [ctrl.addr]
277
    add     eax, NTCTRL_APPLY_TEXT
279
    add     eax, NTCTRL_APPLY_TEXT
278
    cmpne   byte [eax], 1, @f
280
    cmpne   byte [eax], 1, @f
279
    mov     byte [eax], 0
281
    mov     byte [eax], 0
280
 
282
 
281
    mov     eax, [ctrl.addr]
283
    mov     eax, [ctrl.addr]
282
    add     eax, NTCTRL_TEXT
284
    add     eax, NTCTRL_TEXT
283
    mov     esi, 1
285
    mov     esi, 1
284
    call    parse_text
286
    call    parse_text
285
 
287
 
286
    mov     edi, redraw
288
    mov     edi, redraw
287
  @@:
289
  @@:
288
 
290
 
289
;; TEST ICON
291
;; TEST ICON
290
    mov     eax, [ctrl.addr]
292
    mov     eax, [ctrl.addr]
291
    add     eax, NTCTRL_APPLY_ICON
293
    add     eax, NTCTRL_APPLY_ICON
292
    cmpne   byte [eax], 1, @f
294
    cmpne   byte [eax], 1, @f
293
    mov     byte [eax], 0
295
    mov     byte [eax], 0
294
 
296
 
295
    mov     eax, [ctrl.addr]
297
    mov     eax, [ctrl.addr]
296
    add     eax, NTCTRL_ICON
298
    add     eax, NTCTRL_ICON
297
    mov     dl, [eax]
299
    mov     dl, [eax]
298
    mov     [params.icon], dl
300
    mov     [params.icon], dl
299
 
301
 
300
    mov     edi, redraw
302
    mov     edi, redraw
301
  @@:
303
  @@:
302
 
304
 
303
;; TEST TITLE
305
;; TEST TITLE
304
    mov     eax, [ctrl.addr]
306
    mov     eax, [ctrl.addr]
305
    add     eax, NTCTRL_APPLY_TITLE
307
    add     eax, NTCTRL_APPLY_TITLE
306
    cmpne   byte [eax], 1, @f
308
    cmpne   byte [eax], 1, @f
307
    mov     byte [eax], 0
309
    mov     byte [eax], 0
308
 
310
 
309
    mov     eax, [ctrl.addr]
311
    mov     eax, [ctrl.addr]
310
    add     eax, NTCTRL_TITLE
312
    add     eax, NTCTRL_TITLE
311
    mov     dl, [eax]
313
    mov     dl, [eax]
312
    mov     [params.title], dl
314
    mov     [params.title], dl
313
 
315
 
314
    mov     edi, redraw
316
    mov     edi, redraw
315
  @@:
317
  @@:
316
 
318
 
317
;; TEST PBAR
319
;; TEST PBAR
318
    mov     eax, [ctrl.addr]
320
    mov     eax, [ctrl.addr]
319
    add     eax, NTCTRL_APPLY_PBAR
321
    add     eax, NTCTRL_APPLY_PBAR
320
    cmpne   byte [eax], 1, @f
322
    cmpne   byte [eax], 1, @f
321
    mov     byte [eax], 0
323
    mov     byte [eax], 0
322
 
324
 
323
    mov     eax, [ctrl.addr]
325
    mov     eax, [ctrl.addr]
324
    add     eax, NTCTRL_PBAR_CUR
326
    add     eax, NTCTRL_PBAR_CUR
325
    mov     edx, [eax]
327
    mov     edx, [eax]
326
    mov     [pbar.cur_val], edx
328
    mov     [pbar.cur_val], edx
327
 
329
 
328
    mov     eax, [ctrl.addr]
330
    mov     eax, [ctrl.addr]
329
    add     eax, NTCTRL_PBAR_MAX
331
    add     eax, NTCTRL_PBAR_MAX
330
    mov     edx, [eax]
332
    mov     edx, [eax]
331
    mov     [pbar.max_val], edx
333
    mov     [pbar.max_val], edx
332
 
334
 
333
    call    calc_fill_width
335
    call    calc_fill_width
334
 
336
 
335
    mov     edi, redraw
337
    mov     edi, redraw
336
  @@:
338
  @@:
337
 
339
 
338
;; TEST CLOSE
340
;; TEST CLOSE
339
    mov     eax, [ctrl.addr]
341
    mov     eax, [ctrl.addr]
340
    add     eax, NTCTRL_CLOSE
342
    add     eax, NTCTRL_CLOSE
341
    cmpe    byte [eax], 1, exit
343
    cmpe    byte [eax], 1, exit
342
 
344
 
343
 .no_ctrl:
345
 .no_ctrl:
344
 
346
 
345
    mov     eax, [timer.step]
347
    mov     eax, [timer.step]
346
    sub     [timer], eax
348
    sub     [timer], eax
347
    cmpe    [timer], dword 0, exit
349
    cmpe    [timer], dword 0, exit
348
    jmp     edi
350
    jmp     edi
349
 
351
 
350
 ;----------------------------
352
 ;----------------------------
351
 
353
 
352
 exit:
354
 exit:
353
    mov     eax, [shm.our]
355
    mov     eax, [shm.our]
354
    mov     ecx, [text.lines]
356
    mov     ecx, [text.lines]
355
    add     ecx, 3
357
    add     ecx, 3
356
  @@:
358
  @@:
357
    mov     [eax], byte 0
359
    mov     [eax], byte 0
358
    inc     eax
360
    inc     eax
359
    loop    @b
361
    loop    @b
360
 
362
 
361
    mcall   68, 23, sz_shname
363
    mcall   68, 23, sz_shname
362
 
364
 
363
    mcall   -1
365
    mcall   -1
364
 
366
 
365
 ;----------------------------
367
 ;----------------------------
366
 
368
 
367
 button:
369
 button:
368
    mcall   17
370
    mcall   17
369
    cmpe    byte [params.clcl], 0, exit
371
    cmpe    byte [params.clcl], 0, exit
370
    jmp     update
372
    jmp     update
371
 
373
 
372
 ;----------------------------
374
 ;----------------------------
373
 
375
 
374
 redraw:
376
 redraw:
375
    call    draw_window
377
    call    draw_window
376
    call    draw_text
378
    call    draw_text
377
    call    draw_pbar
379
    call    draw_pbar
378
 
380
 
379
    jmp     update
381
    jmp     update
380
 
382
 
381
 ;----------------------------
383
 ;----------------------------
382
 
384
 
383
 draw_window:
385
 draw_window:
384
    call    init_window
386
    call    init_window
385
 
387
 
386
    movzx   ebx, bx
388
    movzx   ebx, bx
387
    movzx   ecx, cx
389
    movzx   ecx, cx
388
    inc     ebx
390
    inc     ebx
389
    inc     ecx
391
    inc     ecx
390
    mcall   8, , , 0x61000001
392
    mcall   8, , , 0x61000001
391
 
393
 
392
    mov     eax, 13
394
    mov     eax, 13
393
    mov     ebx, [window.width]
395
    mov     ebx, [window.width]
394
    mov     edx, 0x222222
396
    mov     edx, 0x222222
395
 
397
 
396
    cmpe    [first_draw], byte 1, .draw_full
398
    cmpe    [first_draw], byte 1, .draw_full
397
    mov     [first_draw], byte 1
399
    mov     [first_draw], byte 1
398
    mov     esi, [window.height]
400
    mov     esi, [window.height]
399
    mov     ecx, LINEH
401
    mov     ecx, LINEH
400
  @@:
402
  @@:
401
    mcall
403
    mcall
402
    add     ecx, LINEH shl 16
404
    add     ecx, LINEH shl 16
403
    sub     esi, LINEH
405
    sub     esi, LINEH
404
    push    eax ebx
406
    push    eax ebx
405
    mcall   5, 1
407
    mcall   5, 1
406
    pop     ebx eax
408
    pop     ebx eax
407
    cmpne   esi, 0, @b
409
    cmpne   esi, 0, @b
408
 
410
 
409
 .draw_full:
411
 .draw_full:
410
    mcall
412
    mcall
411
 
413
 
412
    mcall   , , 1, 0x121212
414
    mcall   , , 1, 0x121212
413
 
415
 
414
    mov     ecx, [window.height]
416
    mov     ecx, [window.height]
415
    dec     ecx
417
    dec     ecx
416
    shl     ecx, 16
418
    shl     ecx, 16
417
    inc     ecx
419
    inc     ecx
418
    mcall
420
    mcall
419
 
421
 
420
    mcall   , 1, [window.width]
422
    mcall   , 1, [window.width]
421
 
423
 
422
    mov     ebx, [window.width]
424
    mov     ebx, [window.width]
423
    dec     ebx
425
    dec     ebx
424
    shl     ebx, 16
426
    shl     ebx, 16
425
    inc     ebx
427
    inc     ebx
426
    mcall
428
    mcall
427
 
429
 
428
    mcall   1, 1, 1
430
    mcall   1, 1, 1
429
    mov     ebx, [window.width]
431
    mov     ebx, [window.width]
430
    sub     ebx, 2
432
    sub     ebx, 2
431
    mcall
433
    mcall
432
    mov     ecx, [window.height]
434
    mov     ecx, [window.height]
433
    sub     ecx, 2
435
    sub     ecx, 2
434
    mcall
436
    mcall
435
    mov     ebx, 1
437
    mov     ebx, 1
436
    mcall
438
    mcall
437
 
439
 
438
 ;-----
440
 ;-----
439
 
441
 
440
    mov     ecx, [scr.width]
442
    mov     ecx, [scr.width]
441
    inc     ecx
443
    inc     ecx
442
 
444
 
443
    mov     eax, 35
445
    mov     eax, 35
444
    mov     ebx, ecx
446
    mov     ebx, ecx
445
    imul    ebx, [window.y]
447
    imul    ebx, [window.y]
446
    add     ebx, [window.x]
448
    add     ebx, [window.x]
447
    dec     ebx
449
    dec     ebx
448
    mcall
450
    mcall
449
    push    eax
451
    push    eax
450
 
452
 
451
    mov     eax, 35
453
    mov     eax, 35
452
    add     ebx, [window.width]
454
    add     ebx, [window.width]
453
    add     ebx, 2
455
    add     ebx, 2
454
    mcall
456
    mcall
455
    push    eax
457
    push    eax
456
 
458
 
457
    mov     eax, 35
459
    mov     eax, 35
458
    mov     edx, ecx
460
    mov     edx, ecx
459
    mov     esi, [window.height]
461
    mov     esi, [window.height]
460
    dec     esi
462
    dec     esi
461
    imul    edx, esi
463
    imul    edx, esi
462
    add     ebx, edx
464
    add     ebx, edx
463
    mcall
465
    mcall
464
    push    eax
466
    push    eax
465
 
467
 
466
    mov     eax, 35
468
    mov     eax, 35
467
    sub     ebx, [window.width]
469
    sub     ebx, [window.width]
468
    sub     ebx, 2
470
    sub     ebx, 2
469
    mcall
471
    mcall
470
    push    eax
472
    push    eax
471
 
473
 
472
 ;-----
474
 ;-----
473
 
475
 
474
    mov     eax, 1
476
    mov     eax, 1
475
 
477
 
476
    pop     edx
478
    pop     edx
477
    mov     ecx, [window.height]
479
    mov     ecx, [window.height]
478
    dec     ecx
480
    dec     ecx
479
    mcall   , 0
481
    mcall   , 0
480
 
482
 
481
    pop     edx
483
    pop     edx
482
    mov     ebx, [window.width]
484
    mov     ebx, [window.width]
483
    dec     ebx
485
    dec     ebx
484
    mcall
486
    mcall
485
 
487
 
486
    pop     edx
488
    pop     edx
487
    mcall   , , 0
489
    mcall   , , 0
488
 
490
 
489
    pop     edx
491
    pop     edx
490
    mcall   , 0
492
    mcall   , 0
491
 
493
 
492
 ;-----
494
 ;-----
493
 
495
 
494
    cmpe    byte [params.icon], 0, @f
496
    cmpe    byte [params.icon], 0, @f
495
    movzx   ebx, byte [params.icon]
497
    movzx   ebx, byte [params.icon]
496
    dec     ebx
498
    dec     ebx
497
    imul    ebx, 24
499
    imul    ebx, 24
498
 
500
 
499
    mov     edx, [window.height]
501
    mov     edx, [window.height]
500
    shr     edx, 1
502
    shr     edx, 1
501
    sub     edx, 12
503
    sub     edx, 12
502
	
504
        
503
	stdcall dword [img.draw], dword [img_data.obj], 12, edx, 24, 24, 0, ebx
505
        stdcall dword [img.draw], dword [img_data.obj], 12, edx, 24, 24, 0, ebx
504
  @@:
506
  @@:
505
 
507
 
506
    ret
508
    ret
507
 
509
 
508
 ;----------------------------
510
 ;----------------------------
509
 
511
 
510
 draw_text:
512
 draw_text:
511
    mov     esi, [text.lines]
513
    mov     esi, [text.lines]
512
 
514
 
513
    cmpne   byte [params.pbar], 1, @f
515
    cmpne   byte [params.pbar], 1, @f
514
    dec     esi
516
    dec     esi
515
  @@:
517
  @@:
516
 
518
 
517
    mov     eax, 4
519
    mov     eax, 4
518
    mov     ebx, [text.offset]
520
    mov     ebx, [text.offset]
519
    shl     ebx, 16
521
    shl     ebx, 16
520
    add     ebx, LINEH + (LINEH - 6) / 2
522
    add     ebx, LINEH + (LINEH - 6) / 2
521
    mov     edx, text.buffer
523
    mov     edx, text.buffer
522
 
524
 
523
 .draw_lines:
525
 .draw_lines:
524
    mov     ecx, 0x80111111
526
    mov     ecx, 0x80111111
525
 
527
 
526
    add     ebx, 0x00010000
528
    add     ebx, 0x00010000
527
    dec     ebx
529
    dec     ebx
528
    mcall
530
    mcall
529
    add     ebx, 2
531
    add     ebx, 2
530
    mcall
532
    mcall
531
    sub     ebx, 0x00020000
533
    sub     ebx, 0x00020000
532
    mcall
534
    mcall
533
    sub     ebx, 2
535
    sub     ebx, 2
534
    mcall
536
    mcall
535
 
537
 
536
    add     ebx, 0x00010001
538
    add     ebx, 0x00010001
537
    mov     ecx, 0x80D0D0D0
539
    mov     ecx, 0x80D0D0D0
538
    mcall
540
    mcall
539
 
541
 
540
    add     ebx, LINEH
542
    add     ebx, LINEH
541
    dec     esi
543
    dec     esi
542
    cmpe    esi, 0, .draw_lines.end
544
    cmpe    esi, 0, .draw_lines.end
543
 
545
 
544
    inc     edx
546
    inc     edx
545
  @@:
547
  @@:
546
    cmpe    [edx], byte 0, @f
548
    cmpe    [edx], byte 0, @f
547
    inc     edx
549
    inc     edx
548
    jmp     @b
550
    jmp     @b
549
  @@:
551
  @@:
550
    inc     edx
552
    inc     edx
551
    jmp     .draw_lines
553
    jmp     .draw_lines
552
 
554
 
553
 .draw_lines.end:
555
 .draw_lines.end:
554
 
556
 
555
    cmpne   byte [params.title], 1, @f
557
    cmpne   byte [params.title], 1, @f
556
    mov     edx, text.buffer
558
    mov     edx, text.buffer
557
    mov     ecx, 0x80111111
559
    mov     ecx, 0x80111111
558
    and     ebx, 0xFFFF0000
560
    and     ebx, 0xFFFF0000
559
    add     ebx, 1 shl 16 + LINEH + (LINEH - 6) / 2
561
    add     ebx, 1 shl 16 + LINEH + (LINEH - 6) / 2
560
    mcall
562
    mcall
561
 
563
 
562
    mov     ecx, 0x80FFFFFF
564
    mov     ecx, 0x80FFFFFF
563
    sub     ebx, 0x00010000
565
    sub     ebx, 0x00010000
564
    mcall
566
    mcall
565
  @@:
567
  @@:
566
 
568
 
567
    ret
569
    ret
568
 
570
 
569
 ;----------------------------
571
 ;----------------------------
570
 
572
 
571
 draw_pbar:
573
 draw_pbar:
572
    cmpne   byte [params.pbar], 1, .exit
574
    cmpne   byte [params.pbar], 1, .exit
573
    mov     esi, 0xFF0000
575
    mov     esi, 0xFF0000
574
    mov     ecx, LINEH
576
    mov     ecx, LINEH
575
    imul    ecx, [text.lines]
577
    imul    ecx, [text.lines]
576
    shl     ecx, 16
578
    shl     ecx, 16
577
    add     ecx, (LINEH / 2) shl 16 + 8
579
    add     ecx, (LINEH / 2) shl 16 + 8
578
    mcall   13, <[text.offset], [pbar.width]>, , 0x555555
580
    mcall   13, <[text.offset], [pbar.width]>, , 0x555555
579
 
581
 
580
    sub     ecx, -(1 shl 16) + 2
582
    sub     ecx, -(1 shl 16) + 2
581
 
583
 
582
    mov     bx, word [pbar.f_width]
584
    mov     bx, word [pbar.f_width]
583
    add     ebx, 1 shl 16
585
    add     ebx, 1 shl 16
584
 
586
 
585
    mcall     , , , 0x999999
587
    mcall     , , , 0x999999
586
    mov     cx, 1
588
    mov     cx, 1
587
    mcall     , , , 0xAAAAAA
589
    mcall     , , , 0xAAAAAA
588
    mov     cx, 6
590
    mov     cx, 6
589
    mov     bx, 1
591
    mov     bx, 1
590
    mcall
592
    mcall
591
 .exit:
593
 .exit:
592
    ret
594
    ret
593
 
595
 
594
 ;----------------------------
596
 ;----------------------------
595
 
597
 
596
 init_window:
598
 init_window:
597
    dec     dword [window.width]
599
    dec     dword [window.width]
598
    dec     dword [window.height]
600
    dec     dword [window.height]
599
    mcall   0, <[window.x], [window.width]>, <[window.y], [window.height]>, 0x61000000
601
    mcall   0, <[window.x], [window.width]>, <[window.y], [window.height]>, 0x61000000
600
    inc     dword [window.width]
602
    inc     dword [window.width]
601
    inc     dword [window.height]
603
    inc     dword [window.height]
602
 
604
 
603
    ret
605
    ret
604
 
606
 
605
 ;----------------------------
607
 ;----------------------------
606
 
608
 
607
 parse_text:
609
 parse_text:
608
    mov     dword [text.lines], 1
610
    mov     dword [text.lines], 1
609
    cmpne   byte [params.pbar], 1, @f
611
    cmpne   byte [params.pbar], 1, @f
610
    inc     dword [text.lines]
612
    inc     dword [text.lines]
611
  @@:
613
  @@:
612
 
614
 
613
    mov     dword [text.max_len], 0
615
    mov     dword [text.max_len], 0
614
    mov     ebx, text.buffer
616
    mov     ebx, text.buffer
615
    mov     ecx, 0
617
    mov     ecx, 0
616
    mov     dl, 0
618
    mov     dl, 0
617
    mov     dh, 0
619
    mov     dh, 0
618
 
620
 
619
    cmpe    esi, 1, .parse_loop
621
    cmpe    esi, 1, .parse_loop
620
    cmpne   byte [eax], "'", @f
622
    cmpne   byte [eax], "'", @f
621
    mov     dl, "'"
623
    mov     dl, "'"
622
    mov     dh, 1
624
    mov     dh, 1
623
  @@:
625
  @@:
624
    cmpne   byte [eax], '"', @f
626
    cmpne   byte [eax], '"', @f
625
    mov     dl, '"'
627
    mov     dl, '"'
626
    mov     dh, 1
628
    mov     dh, 1
627
  @@:
629
  @@:
628
    cmpne   dh, 1, @f
630
    cmpne   dh, 1, @f
629
    inc     eax
631
    inc     eax
630
  @@:
632
  @@:
631
 
633
 
632
 .parse_loop:
634
 .parse_loop:
633
    cmpe    byte [eax],  0, .parse_loop.end
635
    cmpe    byte [eax],  0, .parse_loop.end
634
    cmpe    byte [eax], dl, .parse_loop.end
636
    cmpe    byte [eax], dl, .parse_loop.end
635
 
637
 
636
    cmpe    byte [eax], 10, .newline
638
    cmpe    byte [eax], 10, .newline
637
    cmpe    esi, 1, .next_set_char
639
    cmpe    esi, 1, .next_set_char
638
    cmpne   byte [eax], "\", @f
640
    cmpne   byte [eax], "\", @f
639
    cmpe    byte [eax + 1], dl, .quote
641
    cmpe    byte [eax + 1], dl, .quote
640
    cmpe    byte [eax + 1], "n", .newline_esc
642
    cmpe    byte [eax + 1], "n", .newline_esc
641
    jmp     @f
643
    jmp     @f
642
 
644
 
643
 .quote:
645
 .quote:
644
    inc     eax
646
    inc     eax
645
    jmp     .next_set_char
647
    jmp     .next_set_char
646
 
648
 
647
 .newline_esc:
649
 .newline_esc:
648
    inc     eax
650
    inc     eax
649
 
651
 
650
 .newline:
652
 .newline:
651
    mov     byte [ebx], 0
653
    mov     byte [ebx], 0
652
    cmple   ecx, dword [text.max_len], .skip_max_len
654
    cmple   ecx, dword [text.max_len], .skip_max_len
653
    mov     dword [text.max_len], ecx
655
    mov     dword [text.max_len], ecx
654
 .skip_max_len:
656
 .skip_max_len:
655
    mov     ecx, 0
657
    mov     ecx, 0
656
    inc     dword [text.lines]
658
    inc     dword [text.lines]
657
    jmp     .next
659
    jmp     .next
658
  @@:
660
  @@:
659
 
661
 
660
 .next_set_char:
662
 .next_set_char:
661
    mov     dh, [eax]
663
    mov     dh, [eax]
662
    mov     [ebx], dh
664
    mov     [ebx], dh
663
 
665
 
664
 .next:
666
 .next:
665
    inc     eax
667
    inc     eax
666
    inc     ebx
668
    inc     ebx
667
    inc     ecx
669
    inc     ecx
668
    jmp     .parse_loop
670
    jmp     .parse_loop
669
 .parse_loop.end:
671
 .parse_loop.end:
670
 
672
 
671
    cmple   ecx, dword [text.max_len], @f
673
    cmple   ecx, dword [text.max_len], @f
672
    mov     dword [text.max_len], ecx
674
    mov     dword [text.max_len], ecx
673
  @@:
675
  @@:
674
 
676
 
675
    cmpge   [text.max_len], dword 25, @f
677
    cmpge   [text.max_len], dword 25, @f
676
    mov     [text.max_len], dword 25
678
    mov     [text.max_len], dword 25
677
  @@:
679
  @@:
678
 
680
 
679
    mov     [ebx], byte 0
681
    mov     [ebx], byte 0
680
 
682
 
681
    ret
683
    ret
682
 
684
 
683
 ;----------------------------
685
 ;----------------------------
684
 
686
 
685
 parse_flags:
687
 parse_flags:
686
    mov     byte [params.atcl], 0
688
    mov     byte [params.atcl], 0
687
    mov     byte [params.title], 0
689
    mov     byte [params.title], 0
688
    mov     byte [params.icon], 0
690
    mov     byte [params.icon], 0
689
 
691
 
690
 .loop:
692
 .loop:
691
    mov     dl, [eax]
693
    mov     dl, [eax]
692
 
694
 
693
    cmpe    dl, 0, .exit
695
    cmpe    dl, 0, .exit
694
    cmpe    dl, "d", .set_atcl
696
    cmpe    dl, "d", .set_atcl
695
    cmpe    dl, "c", .set_clcl
697
    cmpe    dl, "c", .set_clcl
696
    cmpe    dl, "t", .set_title
698
    cmpe    dl, "t", .set_title
697
    cmpe    dl, "p", .set_pbar
699
    cmpe    dl, "p", .set_pbar
698
 
700
 
699
    mov     bl, 1
701
    mov     bl, 1
700
    mov     ecx, sz_icons
702
    mov     ecx, sz_icons
701
  @@:
703
  @@:
702
    cmpe    dl, [ecx], .set_icon
704
    cmpe    dl, [ecx], .set_icon
703
    inc     bl
705
    inc     bl
704
    inc     ecx
706
    inc     ecx
705
    cmpne   [ecx], byte 0, @b
707
    cmpne   [ecx], byte 0, @b
706
    jmp     .next_char
708
    jmp     .next_char
707
 
709
 
708
 .set_atcl:
710
 .set_atcl:
709
    mov     byte [params.atcl], 1
711
    mov     byte [params.atcl], 1
710
    jmp     .next_char
712
    jmp     .next_char
711
 
713
 
712
 .set_clcl:
714
 .set_clcl:
713
    mov     byte [params.clcl], 1
715
    mov     byte [params.clcl], 1
714
    jmp     .next_char
716
    jmp     .next_char
715
 
717
 
716
 .set_title:
718
 .set_title:
717
    mov     byte [params.title], 1
719
    mov     byte [params.title], 1
718
    jmp     .next_char
720
    jmp     .next_char
719
 
721
 
720
 .set_pbar:
722
 .set_pbar:
721
    mov     byte [params.pbar], 1
723
    mov     byte [params.pbar], 1
722
    inc     dword [text.lines]
724
    inc     dword [text.lines]
723
    jmp     .next_char
725
    jmp     .next_char
724
 
726
 
725
 .set_icon:
727
 .set_icon:
726
    mov     [params.icon], bl
728
    mov     [params.icon], bl
727
 
729
 
728
 .next_char:
730
 .next_char:
729
    inc     eax
731
    inc     eax
730
    jmp     .loop
732
    jmp     .loop
731
 
733
 
732
 .exit:
734
 .exit:
733
    ret
735
    ret
734
 
736
 
735
 ;----------------------------
737
 ;----------------------------
736
 
738
 
737
 calc_fill_width:
739
 calc_fill_width:
738
    mov     eax, [pbar.cur_val]
740
    mov     eax, [pbar.cur_val]
739
    cmpng   eax, [pbar.max_val], @f
741
    cmpng   eax, [pbar.max_val], @f
740
    mov     eax, [pbar.max_val]
742
    mov     eax, [pbar.max_val]
741
  @@:
743
  @@:
742
    cmpnl   eax, 0, @f
744
    cmpnl   eax, 0, @f
743
    mov     eax, 0
745
    mov     eax, 0
744
  @@:
746
  @@:
745
 
747
 
746
    mov     ebx, [pbar.width]
748
    mov     ebx, [pbar.width]
747
    sub     ebx, 2
749
    sub     ebx, 2
748
    imul    eax, ebx
750
    imul    eax, ebx
749
    mov     edx, 0
751
    mov     edx, 0
750
    mov     ebx, [pbar.max_val]
752
    mov     ebx, [pbar.max_val]
751
    div     ebx
753
    div     ebx
752
    mov     [pbar.f_width], eax
754
    mov     [pbar.f_width], eax
753
    ret
755
    ret
754
 
756
 
755
 ;----------------------------
757
 ;----------------------------
756
 
758
 
757
 @imports:
759
 @imports:
758
    library img, "libimg.obj"
760
    library img, "libimg.obj"
759
    import  img, img.to_rgb,  "img_to_rgb2", \
761
    import  img, img.to_rgb,  "img_to_rgb2", \
760
		 img.decode,  "img_decode",  \
762
                 img.decode,  "img_decode",  \
761
		 img.draw, "img_draw"
763
                 img.draw, "img_draw"
762
 
764
 
763
 ;----------------------------
765
 ;----------------------------
764
 
766
 
765
 sz_icons   db "AEWONIFCMDS", 0
767
 sz_icons   db "AEWONIFCMDS", 0
766
 sz_ifile   db "/sys/notify3.png", 0
768
 sz_ifile   db "/sys/notify3.png", 0
767
 sz_shname  db "notify-mem-v01", 0
769
 sz_shname  db "notify-mem-v01", 0
768
 sz_std     db "'NOTIFY 3\n",                 \
770
 sz_std     db "'NOTIFY 3\n",                 \
769
	       "d - disable auto-closing\n",  \
771
               "d - disable auto-closing\n",  \
770
	       "c - disable click-closing\n", \
772
               "c - disable click-closing\n", \
771
	       "p - use progressbar\n",       \
773
               "p - use progressbar\n",       \
772
	       "t - title\n",		      \
774
               "t - title\n",                 \
773
	       " \n",			      \
775
               " \n",                         \
774
	       "ICONS:\n",		      \
776
               "ICONS:\n",                    \
775
	       "A - application\n",	      \
777
               "A - application\n",           \
776
	       "E - error\n",		      \
778
               "E - error\n",                 \
777
	       "W - warning\n", 	      \
779
               "W - warning\n",               \
778
	       "O - ok\n",		      \
780
               "O - ok\n",                    \
779
	       "N - network\n", 	      \
781
               "N - network\n",               \
780
	       "I - info\n",		      \
782
               "I - info\n",                  \
781
	       "F - folder\n",		      \
783
               "F - folder\n",                \
782
	       "C - component\n",	      \
784
               "C - component\n",             \
783
	       "M - mail\n",		      \
785
               "M - mail\n",                  \
784
	       "D - download\n",	      \
786
               "D - download\n",              \
785
	       "S - audio player",	      \
787
               "S - audio player",            \
786
	       "' -td", 0
788
               "' -td", 0
787
 
789
 
788
 fi:
790
 fi:
789
	    dd 5
791
            dd 5
790
	    dd 0, 0, 0
792
            dd 0, 0, 0
791
	    dd buffer
793
            dd buffer
792
	    db 0
794
            db 0
793
	    dd sz_ifile
795
            dd sz_ifile
794
 
796
 
795
 ;----------------------------
797
 ;----------------------------
796
 
798
 
797
 @end:
799
 @end:
798
 
800
 
799
;=====================================================================
801
;=====================================================================
800
 
802
 
801
 window:
803
 window:
802
 .x	   rd 1
804
 .x        rd 1
803
 .y	   rd 1
805
 .y        rd 1
804
 .width    rd 1
806
 .width    rd 1
805
 .height   rd 1
807
 .height   rd 1
806
 
808
 
807
 scr:
809
 scr:
808
 .width    rd 1
810
 .width    rd 1
809
 .height   rd 1
811
 .height   rd 1
810
 
812
 
811
 text:
813
 text:
812
 .buffer   rb 2048
814
 .buffer   rb 2048
813
 .lines    rd 1
815
 .lines    rd 1
814
 .max_len  rd 1
816
 .max_len  rd 1
815
 .offset   rd 1
817
 .offset   rd 1
816
 
818
 
817
 params:
819
 params:
818
 .source   rd 1
820
 .source   rd 1
819
 .atcl	   rb 1
821
 .atcl     rb 1
820
 .clcl	   rb 1
822
 .clcl     rb 1
821
 .title    rb 1
823
 .title    rb 1
822
 .pbar	   rb 1
824
 .pbar     rb 1
823
 .icon	   rb 1
825
 .icon     rb 1
824
 .ctrl	   rb 1
826
 .ctrl     rb 1
825
 
827
 
826
 img_data:
828
 img_data:
827
 .file  rd 1
829
 .file  rd 1
828
 .obj	   rd 1
830
 .obj      rd 1
829
 
831
 
830
 timer:
832
 timer:
831
 .value    rd 1
833
 .value    rd 1
832
 .step	   rd 1
834
 .step     rd 1
833
 
835
 
834
 shm:
836
 shm:
835
 .addr	   rd 1
837
 .addr     rd 1
836
 .our	   rd 1
838
 .our      rd 1
837
 
839
 
838
 ctrl:
840
 ctrl:
839
 .name	   rb 31
841
 .name     rb 31
840
 .addr	   rd 1
842
 .addr     rd 1
841
 
843
 
842
 pbar:
844
 pbar:
843
 .width    rd 1
845
 .width    rd 1
844
 .cur_val  rd 1
846
 .cur_val  rd 1
845
 .max_val  rd 1
847
 .max_val  rd 1
846
 .f_width  rd 1
848
 .f_width  rd 1
847
 
849
 
848
 buffer     rb 1024
850
 buffer     rb 1024
849
 first_draw rb 1
851
 first_draw rb 1
850
 prev_pid   rd 1
852
 prev_pid   rd 1
851
 
853
 
852
;=====================================================================
854
;=====================================================================
853
	    rb 2048
855
            rb 2048
854
 @stack:
856
 @stack:
855
 @params    rb 2048
857
 @params    rb 256
856
 
858
 
857
 @memory:
859
 @memory: