Subversion Repositories Kolibri OS

Rev

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