Subversion Repositories Kolibri OS

Rev

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