Subversion Repositories Kolibri OS

Rev

Rev 4877 | Rev 5476 | 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
4822 eAndrew 152
    cmpe    [eax], byte "S", .set_icon
4812 eAndrew 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
 
4877 eAndrew 300
    push    eax ebx
301
    mcall   48, 5
302
    shr     ebx, 16
303
    add     [window.y], ebx
304
    pop     ebx eax
305
 
4812 eAndrew 306
  @@:
307
    mov     [eax], byte 1
308
    inc     eax
309
    loop    @b
310
 
311
 ;----------------------------
312
 
313
    mov     eax, 60
314
    imul    eax, [text.lines]
315
    mov     [timer], eax
316
 
317
    mov     [timer.step], dword 1
318
    cmpne   [params.atcl], byte 1, @f
319
    mov     [timer.step], dword 0
320
  @@:
321
 
322
 ;----------------------------
323
 
324
 update:
325
    mcall   23, 10
326
    cmpe    al, EV_REDRAW, redraw
327
    cmpe    al, EV_BUTTON, exit
328
 
329
    mov     eax, [timer.step]
330
    sub     [timer], eax
331
    cmpne   [timer], dword 0, update
332
 
333
 ;----------------------------
334
 
335
 exit:
336
    mov     eax, [shm.our]
337
    mov     ecx, [text.lines]
338
    add     ecx, 3
339
  @@:
340
    mov     [eax], byte 0
341
    inc     eax
342
    loop    @b
343
 
344
    mcall   68, 23, sz_shname
345
 
346
    mcall   -1
347
 
348
 ;----------------------------
349
 
350
 redraw:
351
    call    draw_window
352
    call    draw_text
353
 
354
    jmp     update
355
 
356
 ;----------------------------
357
 
358
 draw_window:
359
    dec     dword [window.width]
360
    dec     dword [window.height]
361
    mcall   0, <[window.x], [window.width]>, <[window.y], [window.height]>, 0x61000000
362
    inc     dword [window.width]
363
    inc     dword [window.height]
364
 
365
    and     ebx, 0xFFFF
366
    and     ecx, 0xFFFF
367
    inc     ebx
368
    inc     ecx
369
    mcall   8, , , 0x61000001
370
 
371
    mov     eax, 13
372
    mov     ebx, [window.width]
373
    mov     edx, 0x222222
374
    cmpe    [first_draw], byte 1, .draw_full
375
    mov     [first_draw], byte 1
376
    mov     esi, [window.height]
377
    mov     ecx, LINEH
378
  @@:
379
    mcall
380
    add     ecx, LINEH shl 16
381
    sub     esi, LINEH
382
    push    eax ebx
383
    mcall   5, 1
384
    pop     ebx eax
385
    cmpne   esi, 0, @b
386
  .draw_full:
387
    mcall
388
 
389
    mcall   , , 1, 0x121212
390
 
391
    mov     ecx, [window.height]
392
    dec     ecx
393
    shl     ecx, 16
394
    inc     ecx
395
    mcall
396
 
397
    mcall   , 1, [window.width]
398
 
399
    mov     ebx, [window.width]
400
    dec     ebx
401
    shl     ebx, 16
402
    inc     ebx
403
    mcall
404
 
405
    mcall   1, 1, 1
406
    mov     ebx, [window.width]
407
    sub     ebx, 2
408
    mcall
409
    mov     ecx, [window.height]
410
    sub     ecx, 2
411
    mcall
412
    mov     ebx, 1
413
    mcall
414
 
415
 ;-----
416
 
417
    mov     ecx, [scr.width]
418
    inc     ecx
419
 
420
    mov     eax, 35
421
    mov     ebx, ecx
422
    imul    ebx, [window.y]
423
    add     ebx, [window.x]
424
    dec     ebx
425
    mcall
426
    push    eax
427
 
428
    mov     eax, 35
429
    add     ebx, [window.width]
430
    add     ebx, 2
431
    mcall
432
    push    eax
433
 
434
    mov     eax, 35
435
    mov     edx, ecx
436
    mov     esi, [window.height]
437
    dec     esi
438
    imul    edx, esi
439
    add     ebx, edx
440
    mcall
441
    push    eax
442
 
443
    mov     eax, 35
444
    sub     ebx, [window.width]
445
    sub     ebx, 2
446
    mcall
447
    push    eax
448
 
449
 ;-----
450
 
451
    mov     eax, 1
452
 
453
    pop     edx
454
    mov     ecx, [window.height]
455
    dec     ecx
456
    mcall   , 0
457
 
458
    pop     edx
459
    mov     ebx, [window.width]
460
    dec     ebx
461
    mcall
462
 
463
    pop     edx
464
    mcall   , , 0
465
 
466
    pop     edx
467
    mcall   , 0
468
 
469
 ;-----
470
 
471
    cmpe    [params.icon], dword 0, @f
472
 
473
    mov     ebx, [params.icon]
474
    dec     ebx
475
    imul    ebx, 24 * 24 * 3
476
    add     ebx, [img_data.rgb_obj]
477
 
478
    mov     edx, [window.height]
479
    shr     edx, 1
480
    sub     edx, 12
481
    add     edx, LINEH shl 16
482
 
483
    mcall   7, , <24, 24>
484
 
485
  @@:
486
 
487
    ret
488
 
489
 ;----------------------------
490
 
491
 draw_text:
492
    mov     esi, [text.lines]
493
 
494
    mov     eax, 4
495
    mov     ebx, [text.offset]
496
    shl     ebx, 16
497
    add     ebx, LINEH + (LINEH - 6) / 2
498
    mov     edx, text.buffer
499
 
500
  .draw_lines:
501
    mov     ecx, 0x80111111
502
 
503
    add     ebx, 0x00010000
504
    dec     ebx
505
    mcall
506
    add     ebx, 2
507
    mcall
508
    sub     ebx, 0x00020000
509
    mcall
510
    sub     ebx, 2
511
    mcall
512
 
513
    add     ebx, 0x00010001
514
    mov     ecx, 0x80D0D0D0
515
    mcall
516
 
517
    add     ebx, LINEH
518
    dec     esi
519
    cmpe    esi, 0, .draw_lines.end
520
 
521
    inc     edx
522
  @@:
523
    cmpe    [edx], byte 0, @f
524
    inc     edx
525
    jmp     @b
526
  @@:
527
    inc     edx
528
    jmp     .draw_lines
529
 
530
  .draw_lines.end:
531
 
532
    cmpne   [params.title], byte 1, @f
533
    mov     edx, text.buffer
534
    mov     ecx, 0x80111111
535
    and     ebx, 0xFFFF0000
536
    add     ebx, 1 shl 16 + LINEH + (LINEH - 6) / 2
537
    mcall
538
 
539
    mov     ecx, 0x80FFFFFF
540
    sub     ebx, 0x00010000
541
    mcall
542
  @@:
543
 
544
    ret
545
 ;----------------------------
546
 
547
 @imports:
548
    library img, "libimg.obj"
549
    import  img, img.init,    "lib_init",     \
550
		 img.to_rgb,  "img_to_rgb2",  \
551
		 img.decode,  "img_decode",   \
552
		 img.destroy, "img_destroy"
553
 
554
 ;----------------------------
555
 
556
 sz_ifile   db "/sys/notify3.png", 0
557
 sz_shname  db "notify-mem-v01", 0
558
 sz_std     db "'NOTIFY 3\n",                 \
559
		"d - disable auto-closing\n", \
560
		"t - title\n",		      \
561
		"A - application\n",	      \
562
		"E - error\n",		      \
563
		"W - warning\n",	      \
564
		"O - ok\n",		      \
565
		"N - network\n",	      \
566
		"I - info\n",		      \
567
		"F - folder\n", 	      \
568
		"C - component\n",	      \
569
		"M - mail\n",		      \
570
		"D - download\n",	      \
5410 eAndrew 571
		"S - audio player",	      \
4812 eAndrew 572
		"' -td", 0
573
 
574
 ;----------------------------
575
 
576
 @end:
577
 
578
;=====================================================================
579
 
580
 window:
581
  .x	    rd 1
582
  .y	    rd 1
583
  .width    rd 1
584
  .height   rd 1
585
 
586
 scr:
587
  .width    rd 1
588
  .height   rd 1
589
 
590
 text:
591
  .buffer   rb 256
592
  .lines    rd 1
593
  .max_len  rd 1
594
  .offset   rd 1
595
 
596
 params:
597
  .atcl     rb 1
598
  .title    rb 1
599
  .icon     rd 1
600
 
601
 img_data:
602
  .rgb_obj  rd 1
603
  .obj	    rd 1
604
 
605
 timer:
606
  .value    rd 1
607
  .step     rd 1
608
 
609
 shm:
610
  .addr     rd 1
611
  .our	    rd 1
612
 
613
 fi	    rb 26
614
 buffer     rb 1024
615
 first_draw rb 1
616
 
617
;=====================================================================
618
	    rb 2048
619
 @stack:
620
 @params    rb 256
621
 
622
 @memory: