Subversion Repositories Kolibri OS

Rev

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