Subversion Repositories Kolibri OS

Rev

Rev 5868 | Rev 5891 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
4812 eAndrew 1
use32
2
    org     0
3
    db	    'MENUET01'
4
    dd	    1, @entry, @end, @memory, @stack, @params, 0
5
 
6
    include "../../macros.inc"
7
    include "../../proc32.inc"
8
    include "../../dll.inc"
5889 eAndrew 9
;    include "../../debug.inc"
4812 eAndrew 10
 
11
 macro cmpe a, b, c  {
12
    cmp     a, b
13
    je	    c	     }
14
 
15
 macro cmpl a, b, c  {
16
    cmp     a, b
17
    jl	    c	     }
18
 
19
 macro cmpne a, b, c {
20
    cmp     a, b
21
    jne     c	     }
22
 
23
 macro cmple a, b, c {
24
    cmp     a, b
25
    jle     c	     }
26
 
27
 macro cmpge a, b, c {
28
    cmp     a, b
29
    jge     c	     }
30
 
31
 LINEH	    equ 12
4814 eAndrew 32
 ICONS	    equ 11
4812 eAndrew 33
 
34
;=====================================================================
35
 
36
 @entry:
37
 
5868 eAndrew 38
  ;; GET PID OF ACTIVE
39
 
40
    mcall   18, 7
41
 
42
    mov     ecx, eax
43
    mcall   9, buffer
44
 
45
    m2m     dword[prev_pid], dword[buffer + 30]
46
 
47
  ;; ALWAYS TOP
48
 
49
    mcall   18, 25, 2, -1, 1
50
 
4812 eAndrew 51
  ;; CHECK FOR PARAMS
5868 eAndrew 52
 
4812 eAndrew 53
    mov     eax, @params
5889 eAndrew 54
    cmpne   [@params], byte 0, @f
55
    mov     eax, sz_std
4812 eAndrew 56
  @@:
57
 
58
  ;; TEXT
59
 
60
 parse:
5889 eAndrew 61
    mov     eax, sz_std
62
    call    parse_text
4812 eAndrew 63
 
64
 ;; PARAMS
65
 
66
  .params:
5868 eAndrew 67
    mov     dl, [eax]
68
 
69
    cmpe    dl, 0, .params.end
70
    cmpe    dl, "d", .set_atcl
71
    cmpe    dl, "t", .set_title
5889 eAndrew 72
    cmpe    dl, "c", .set_ctrl
5868 eAndrew 73
 
4812 eAndrew 74
    mov     ebx, 1
5868 eAndrew 75
    mov     ecx, sz_icons
76
  @@:
77
    cmpe    dl, [ecx], .set_icon
4812 eAndrew 78
    inc     ebx
5868 eAndrew 79
    inc     ecx
80
    cmpne   [ecx], byte 0, @b
4812 eAndrew 81
 
82
    jmp     .next_char
83
 
84
  .set_atcl:
85
    mov     [params.atcl], byte 1
86
    jmp     .next_char
87
 
88
  .set_title:
89
    mov     [params.title], byte 1
90
    jmp     .next_char
91
 
5889 eAndrew 92
  .set_ctrl:
93
    mov     [params.ctrl], byte 1
94
    jmp     .next_char
95
 
4812 eAndrew 96
  .set_icon:
97
    mov     [params.icon], ebx
98
 
99
  .next_char:
100
    inc     eax
101
    jmp     .params
102
 
103
  .params.end:
104
 
105
 ;----------------------------
106
 
107
    mcall   68, 11
108
    stdcall dll.Load, @imports
109
 
110
    mov     dword [fi + 00], 5
111
    mov     dword [fi + 16], buffer
112
    mov     dword [fi + 21], sz_ifile
113
    mcall   70, fi
114
 
115
    mov     edx, dword [buffer + 32]
116
    shl     edx, 2
117
    stdcall mem.Alloc, edx
118
    mov     [img_data.rgb_obj], eax
119
 
120
    mov     dword [fi + 00], 0
121
    mov     dword [fi + 12], edx
122
    m2m     dword [fi + 16], [img_data.rgb_obj]
123
    mov     dword [fi + 21], sz_ifile
124
    mcall   70, fi
125
 
126
    stdcall dword [img.decode], dword [img_data.rgb_obj], ebx, 0
127
    mov     dword [img_data.obj], eax
128
 
129
 ;; alpha
130
    add     eax, 24
131
    mov     eax, [eax] ;; eax - data [argb]
132
 
133
    mov     ecx, 24 * 24 * ICONS
134
 alpha:
135
    mov     ebx, [eax]
136
    shr     ebx, 24
137
    cmpne   bl, 0x00, @f
138
    mov     [eax], dword 0x222222
139
 
140
  @@:
141
    add     eax, 4
142
    loop    alpha
143
 
144
 ;; end alpha
145
 
146
    stdcall dword [img.to_rgb], dword [img_data.obj], dword [img_data.rgb_obj]
147
    stdcall dword [img.destroy], dword [img_data.obj]
148
 
149
 ;----------------------------
150
 
151
    mov     [text.offset], LINEH
152
 
153
    mov     eax, [text.lines]
154
    add     eax, 2
155
    imul    eax, LINEH
156
    mov     [window.height], eax
157
 
158
    mov     eax, [text.max_len]
159
    imul    eax, 6
160
    add     eax, LINEH * 2
161
    cmpe    [params.icon], dword 0, @f
162
    add     eax, 24 + LINEH
163
    add     [text.offset], 24 + LINEH
164
  @@:
165
    mov     [window.width], eax
166
 
167
    mcall   14
168
    mov     ebx, eax
169
    and     ebx, 0xFFFF
170
    mov     [scr.height], ebx
171
    shr     eax, 16
172
    mov     [scr.width], eax
173
    sub     eax, [window.width]
174
    sub     eax, LINEH
175
    mov     [window.x], eax
176
 
177
 ;; CALC WINDOW.Y
178
 
179
    mcall   68, 22, sz_shname, 256 + 512, 4 + 1 ;OPEN_ALWAYS and WRITE
180
    add     eax, 512
181
    mov     [shm], eax
182
 
183
 s_search:
184
    mov     eax, [shm]
185
 
186
    mov     ebx, 0
187
    mov     ecx, [text.lines]
188
    add     ecx, 3
189
 
190
    push    eax ebx
191
 
192
    mov     eax, [scr.height]
193
    mov     edx, 0
194
    mov     ebx, LINEH
195
    div     ebx
196
    mov     edx, eax
197
    add     edx, [shm]
198
    sub     edx, ecx
199
    inc     edx
200
 
201
    pop     ebx eax
202
 
203
 s_area:
204
    cmpe    [eax], byte 1, .is_1
205
 
206
  .is_0:
207
    inc     ebx
208
    cmpe    ebx, ecx, s_ok
209
    jmp     .next
210
 
211
  .is_1:
212
    mov     ebx, 0
213
 
214
  .next:
215
    inc     eax
216
    cmple   eax, edx, s_area
217
 
218
    mcall   5, 10
219
    jmp     s_search
220
 
221
 s_ok:
222
    sub     eax, ecx
223
    inc     eax
224
    mov     [shm.our], eax
225
 
226
    mov     edx, eax
227
    sub     edx, [shm]
228
    inc     edx
229
    imul    edx, LINEH
230
    mov     [window.y], edx
231
 
4877 eAndrew 232
    push    eax ebx
233
    mcall   48, 5
234
    shr     ebx, 16
235
    add     [window.y], ebx
236
    pop     ebx eax
237
 
4812 eAndrew 238
  @@:
239
    mov     [eax], byte 1
240
    inc     eax
241
    loop    @b
242
 
243
 ;----------------------------
244
 
245
    mov     eax, 60
246
    imul    eax, [text.lines]
247
    mov     [timer], eax
248
 
249
    mov     [timer.step], dword 1
250
    cmpne   [params.atcl], byte 1, @f
251
    mov     [timer.step], dword 0
252
  @@:
253
 
254
 ;----------------------------
255
 
5868 eAndrew 256
    call    init_window
257
 
258
    mcall   18, 21, [prev_pid]
259
    mov     ecx, eax
260
    mcall   18, 3
261
 
262
    jmp     redraw
263
 
264
 ;----------------------------
265
 
4812 eAndrew 266
 update:
267
    mcall   23, 10
268
    cmpe    al, EV_REDRAW, redraw
5476 eAndrew 269
    cmpe    al, EV_KEY, key
4812 eAndrew 270
    cmpe    al, EV_BUTTON, exit
271
 
272
    mov     eax, [timer.step]
273
    sub     [timer], eax
274
    cmpne   [timer], dword 0, update
275
 
276
 ;----------------------------
277
 
278
 exit:
279
    mov     eax, [shm.our]
280
    mov     ecx, [text.lines]
281
    add     ecx, 3
282
  @@:
283
    mov     [eax], byte 0
284
    inc     eax
285
    loop    @b
286
 
287
    mcall   68, 23, sz_shname
288
 
289
    mcall   -1
290
 
291
 ;----------------------------
292
 
5476 eAndrew 293
 key:
294
    mcall   2
295
    cmpne   ah, 27, update
296
    jmp     exit
297
 
298
 ;----------------------------
299
 
4812 eAndrew 300
 redraw:
301
    call    draw_window
302
    call    draw_text
303
 
304
    jmp     update
305
 
306
 ;----------------------------
307
 
308
 draw_window:
5868 eAndrew 309
    call    init_window
4812 eAndrew 310
 
311
    and     ebx, 0xFFFF
312
    and     ecx, 0xFFFF
313
    inc     ebx
314
    inc     ecx
315
    mcall   8, , , 0x61000001
316
 
317
    mov     eax, 13
318
    mov     ebx, [window.width]
319
    mov     edx, 0x222222
5868 eAndrew 320
 
4812 eAndrew 321
    cmpe    [first_draw], byte 1, .draw_full
322
    mov     [first_draw], byte 1
323
    mov     esi, [window.height]
324
    mov     ecx, LINEH
325
  @@:
326
    mcall
327
    add     ecx, LINEH shl 16
328
    sub     esi, LINEH
329
    push    eax ebx
330
    mcall   5, 1
331
    pop     ebx eax
332
    cmpne   esi, 0, @b
5868 eAndrew 333
 
4812 eAndrew 334
  .draw_full:
335
    mcall
336
 
337
    mcall   , , 1, 0x121212
338
 
339
    mov     ecx, [window.height]
340
    dec     ecx
341
    shl     ecx, 16
342
    inc     ecx
343
    mcall
344
 
345
    mcall   , 1, [window.width]
346
 
347
    mov     ebx, [window.width]
348
    dec     ebx
349
    shl     ebx, 16
350
    inc     ebx
351
    mcall
352
 
353
    mcall   1, 1, 1
354
    mov     ebx, [window.width]
355
    sub     ebx, 2
356
    mcall
357
    mov     ecx, [window.height]
358
    sub     ecx, 2
359
    mcall
360
    mov     ebx, 1
361
    mcall
362
 
363
 ;-----
364
 
365
    mov     ecx, [scr.width]
366
    inc     ecx
367
 
368
    mov     eax, 35
369
    mov     ebx, ecx
370
    imul    ebx, [window.y]
371
    add     ebx, [window.x]
372
    dec     ebx
373
    mcall
374
    push    eax
375
 
376
    mov     eax, 35
377
    add     ebx, [window.width]
378
    add     ebx, 2
379
    mcall
380
    push    eax
381
 
382
    mov     eax, 35
383
    mov     edx, ecx
384
    mov     esi, [window.height]
385
    dec     esi
386
    imul    edx, esi
387
    add     ebx, edx
388
    mcall
389
    push    eax
390
 
391
    mov     eax, 35
392
    sub     ebx, [window.width]
393
    sub     ebx, 2
394
    mcall
395
    push    eax
396
 
397
 ;-----
398
 
399
    mov     eax, 1
400
 
401
    pop     edx
402
    mov     ecx, [window.height]
403
    dec     ecx
404
    mcall   , 0
405
 
406
    pop     edx
407
    mov     ebx, [window.width]
408
    dec     ebx
409
    mcall
410
 
411
    pop     edx
412
    mcall   , , 0
413
 
414
    pop     edx
415
    mcall   , 0
416
 
417
 ;-----
418
 
419
    cmpe    [params.icon], dword 0, @f
420
 
421
    mov     ebx, [params.icon]
422
    dec     ebx
423
    imul    ebx, 24 * 24 * 3
424
    add     ebx, [img_data.rgb_obj]
425
 
426
    mov     edx, [window.height]
427
    shr     edx, 1
428
    sub     edx, 12
429
    add     edx, LINEH shl 16
430
 
431
    mcall   7, , <24, 24>
432
 
433
  @@:
434
 
435
    ret
436
 
437
 ;----------------------------
438
 
439
 draw_text:
440
    mov     esi, [text.lines]
441
 
442
    mov     eax, 4
443
    mov     ebx, [text.offset]
444
    shl     ebx, 16
445
    add     ebx, LINEH + (LINEH - 6) / 2
446
    mov     edx, text.buffer
447
 
448
  .draw_lines:
449
    mov     ecx, 0x80111111
450
 
451
    add     ebx, 0x00010000
452
    dec     ebx
453
    mcall
454
    add     ebx, 2
455
    mcall
456
    sub     ebx, 0x00020000
457
    mcall
458
    sub     ebx, 2
459
    mcall
460
 
461
    add     ebx, 0x00010001
462
    mov     ecx, 0x80D0D0D0
463
    mcall
464
 
465
    add     ebx, LINEH
466
    dec     esi
467
    cmpe    esi, 0, .draw_lines.end
468
 
469
    inc     edx
470
  @@:
471
    cmpe    [edx], byte 0, @f
472
    inc     edx
473
    jmp     @b
474
  @@:
475
    inc     edx
476
    jmp     .draw_lines
477
 
478
  .draw_lines.end:
479
 
480
    cmpne   [params.title], byte 1, @f
481
    mov     edx, text.buffer
482
    mov     ecx, 0x80111111
483
    and     ebx, 0xFFFF0000
484
    add     ebx, 1 shl 16 + LINEH + (LINEH - 6) / 2
485
    mcall
486
 
487
    mov     ecx, 0x80FFFFFF
488
    sub     ebx, 0x00010000
489
    mcall
490
  @@:
491
 
492
    ret
5868 eAndrew 493
 
4812 eAndrew 494
 ;----------------------------
495
 
5868 eAndrew 496
 init_window:
497
    dec     dword [window.width]
498
    dec     dword [window.height]
499
    mcall   0, <[window.x], [window.width]>, <[window.y], [window.height]>, 0x61000000
500
    inc     dword [window.width]
501
    inc     dword [window.height]
502
 
503
    ret
504
 
505
 ;----------------------------
506
 
5889 eAndrew 507
 parse_text:
508
    mov     dword [text.max_len], 0
509
    mov     dword [text.lines], 1
510
    mov     ebx, text.buffer
511
    mov     ecx, 0
512
    mov     dl, 0
513
    mov     dh, 0
514
 
515
    cmpne   byte [eax], "'", @f
516
    mov     dl, "'"
517
    mov     dh, 1
518
  @@:
519
    cmpne   byte [eax], '"', @f
520
    mov     dl, '"'
521
    mov     dh, 1
522
  @@:
523
    cmpne   dh, 1, @f
524
    inc     eax
525
  @@:
526
 
527
  .parse_loop:
528
    cmpe    byte [eax],  0, .parse_loop.end
529
    cmpe    byte [eax], dl, .parse_loop.end
530
    mov     dh, [eax]
531
 
532
    cmpe    byte [eax], 10, .newline
533
 
534
    cmpne   byte [eax + 0], "\", @f
535
    cmpne   byte [eax + 1], "n", @f
536
    inc     eax
537
 
538
  .newline:
539
    mov     byte [ebx], 0
540
    cmple   ecx, dword [text.max_len], .skip_max_len
541
    mov     dword [text.max_len], ecx
542
  .skip_max_len:
543
    mov     ecx, 0
544
    inc     dword [text.lines]
545
    jmp     .next
546
  @@:
547
 
548
    mov     [ebx], dh
549
 
550
  .next:
551
    inc     eax
552
    inc     ebx
553
    inc     ecx
554
    jmp     .parse_loop
555
  .parse_loop.end:
556
 
557
    cmple   ecx, dword [text.max_len], @f
558
    mov     dword [text.max_len], ecx
559
  @@:
560
 
561
    cmpge   [text.max_len], dword 25, @f
562
    mov     [text.max_len], dword 25
563
  @@:
564
 
565
    mov     [ebx], byte 0
566
 
567
    ret
568
 
569
 ;----------------------------
570
 
4812 eAndrew 571
 @imports:
572
    library img, "libimg.obj"
573
    import  img, img.init,    "lib_init",     \
574
		 img.to_rgb,  "img_to_rgb2",  \
575
		 img.decode,  "img_decode",   \
576
		 img.destroy, "img_destroy"
577
 
578
 ;----------------------------
579
 
5868 eAndrew 580
 sz_icons   db "AEWONIFCMDS", 0
4812 eAndrew 581
 sz_ifile   db "/sys/notify3.png", 0
582
 sz_shname  db "notify-mem-v01", 0
5889 eAndrew 583
 sz_std     db "'NOTIFY 3\n",                \
584
	       "d - disable auto-closing\n", \
585
	       "t - title\n",		     \
586
	       " \n",			     \
587
	       "ICONS:\n",		     \
588
	       "A - application\n",	     \
589
	       "E - error\n",		     \
590
	       "W - warning\n", 	     \
591
	       "O - ok\n",		     \
592
	       "N - network\n", 	     \
593
	       "I - info\n",		     \
594
	       "F - folder\n",		     \
595
	       "C - component\n",	     \
596
	       "M - mail\n",		     \
597
	       "D - download\n",	     \
598
	       "S - audio player",	     \
599
	       "' -td", 0
4812 eAndrew 600
 
601
 ;----------------------------
602
 
603
 @end:
604
 
605
;=====================================================================
606
 
607
 window:
608
  .x	    rd 1
609
  .y	    rd 1
610
  .width    rd 1
611
  .height   rd 1
612
 
613
 scr:
614
  .width    rd 1
615
  .height   rd 1
616
 
617
 text:
618
  .buffer   rb 256
619
  .lines    rd 1
620
  .max_len  rd 1
621
  .offset   rd 1
622
 
623
 params:
624
  .atcl     rb 1
625
  .title    rb 1
626
  .icon     rd 1
5889 eAndrew 627
  .ctrl     rb 1
4812 eAndrew 628
 
629
 img_data:
630
  .rgb_obj  rd 1
631
  .obj	    rd 1
632
 
633
 timer:
634
  .value    rd 1
635
  .step     rd 1
636
 
637
 shm:
638
  .addr     rd 1
639
  .our	    rd 1
640
 
641
 fi	    rb 26
642
 buffer     rb 1024
643
 first_draw rb 1
5868 eAndrew 644
 prev_pid   rd 1
4812 eAndrew 645
 
646
;=====================================================================
647
	    rb 2048
648
 @stack:
649
 @params    rb 256
650
 
651
 @memory: